<?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>64413</bug_id>
          
          <creation_ts>2011-07-12 17:31:34 -0700</creation_ts>
          <short_desc>Rename FloatRect/Point/Size and move them to an abstraction</short_desc>
          <delta_ts>2011-11-01 17:05:17 -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>INVALID</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>
          <dependson>64754</dependson>
          <blocked>63567</blocked>
    
    <blocked>64405</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>peter</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436107</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-12 17:31:34 -0700</bug_when>
    <thetext>We may want to use something other than floats for the various graphics structures on different platforms -- namely CGFloat on Mac  -- so renaming the floating point graphics structures  to something more generic. I recommend &quot;Graphics*&quot;: GraphicsUnit, GraphicsPoint, GraphicsSize, and GraphicsRect. Simon also recommended &quot;Render*&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436116</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-12 17:41:52 -0700</bug_when>
    <thetext>Graphics* works better for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436183</commentid>
    <comment_count>2</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-12 19:57:44 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Graphics* works better for me.

Agreed. Graphics it is -- it&apos;s more descriptive of the actual use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436770</commentid>
    <comment_count>3</comment_count>
      <attachid>100730</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-13 16:57:08 -0700</bug_when>
    <thetext>Created attachment 100730
Rev 1, Mac only

Only changed the Mac platform so this patch isn&apos;t done, but it is absolutely massive... Simon, mind doing a sanity check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436776</commentid>
    <comment_count>4</comment_count>
      <attachid>100734</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-13 17:06:28 -0700</bug_when>
    <thetext>Created attachment 100734
Trying Again

Forgot to add the new files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437328</commentid>
    <comment_count>5</comment_count>
      <attachid>100862</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-14 14:21:14 -0700</bug_when>
    <thetext>Created attachment 100862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437338</commentid>
    <comment_count>6</comment_count>
      <attachid>100866</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-14 14:42:20 -0700</bug_when>
    <thetext>Created attachment 100866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437339</commentid>
    <comment_count>7</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-14 14:42:52 -0700</bug_when>
    <thetext>Trying to get a patch to apply...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437408</commentid>
    <comment_count>8</comment_count>
      <attachid>100894</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-14 16:37:56 -0700</bug_when>
    <thetext>Created attachment 100894
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437410</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-14 16:39:28 -0700</bug_when>
    <thetext>One more try before changing tact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437828</commentid>
    <comment_count>10</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-15 10:55:38 -0700</bug_when>
    <thetext>Changing tact and landing in pieces with a typedef. This is just way too damn big. Sorry about the noise.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100730</attachid>
            <date>2011-07-13 16:57:08 -0700</date>
            <delta_ts>2011-07-13 17:06:28 -0700</delta_ts>
            <desc>Rev 1, Mac only</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>939321</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYs
MTAgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxl
Q2hvb3Nlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlSWNvbkxvYWRlci5oPgotI2ltcG9ydCA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ljb24uaD4KQEAgLTE1OCwyMCArMTU4LDIwIEBACiAvLyBUaGVzZSBmdW5jdGlvbnMg
c2NhbGUgYmV0d2VlbiB3aW5kb3cgYW5kIFdlYlZpZXcgY29vcmRpbmF0ZXMgYmVjYXVzZSBKYXZh
U2NyaXB0L0RPTSBvcGVyYXRpb25zIAogLy8gYXNzdW1lIHRoYXQgdGhlIFdlYlZpZXcgYW5kIHRo
ZSB3aW5kb3cgc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAKLXZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICBOU1JlY3Qgd2luZG93UmVjdCA9IHRvRGV2aWNlU3BhY2UocmVjdCwgW21fd2ViVmlldyB3
aW5kb3ddKTsKICAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpt
X3dlYlZpZXcgc2V0RnJhbWU6d2luZG93UmVjdF07CiB9CiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVD
bGllbnQ6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93
UmVjdCgpCiB7CiAgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBbW21fd2ViVmlldyBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlld0ZyYW1lOm1fd2ViVmlld107CiAgICAgcmV0dXJuIHRvVXNlclNw
YWNlKHdpbmRvd1JlY3QsIFttX3dlYlZpZXcgd2luZG93XSk7CiB9CiAKIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGFkZCBBUEkgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhpcy4KLUZsb2F0UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6
OnBhZ2VSZWN0KCkKIHsKICAgICByZXR1cm4gW21fd2ViVmlldyBmcmFtZV07CiB9CkBAIC03Mzgs
NyArNzM4LDcgQEAKIAogI2VuZGlmCiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3Rv
bUhpZ2hsaWdodFJlY3QoTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVSZWN0KQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3Vz
dG9tSGlnaGxpZ2h0UmVjdChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgbGluZVJlY3QpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogCkBAIC03NTUsNyArNzU1LDcgQEAKICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIH0K
IAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqIG5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVSZWN0LAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9t
SGlnaGxpZ2h0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBib3hSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0LAogICAgIGJv
b2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04NjMsNyArODYzLDcgQEAKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBw
YW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1fY29ycmVjdGlvblBhbmVsLnNob3cobV93
ZWJWaWV3LCBwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFu
ZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29y
cmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQAogICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsSWdub3JlZCwgZmFsc2UpOwogfQogCi12b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhX
ZWJWaWV3KiB2aWV3LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlv
blBhbmVsOjpzaG93KFdlYlZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSB0eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KQogewogICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsSWdub3JlZCwgZmFsc2UpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEwICs0MCwxMCBAQAogICAgIAogICAgIHZpcnR1YWwgdm9pZCBjaHJv
bWVEZXN0cm95ZWQoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3
aW5kb3dSZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2lu
ZG93UmVjdCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAgICAgdmly
dHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkBAIC0xMjksMTAgKzEyOSwxMCBAQAogCiAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKIAotICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9k
ZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCBjdXN0b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgdHlwZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBsaW5lUmVj
dCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUq
LCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgdHlwZSwKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0LAor
ICAgICAgICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QsCiAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9v
bCBlbnRpcmVMaW5lKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5
Ym9hcmRVSU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzcsNyArMTM3LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhX
ZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNr
LCBjb25zdCBXVEY6OlN0cmluZyYpOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCk7CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
Q29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAKIHB1YmxpYzoKICAgICBDb3JyZWN0aW9uUGFuZWwoKTsKICAgICB+Q29ycmVjdGlv
blBhbmVsKCk7Ci0gICAgdm9pZCBzaG93KFdlYlZpZXcqLCBXZWJDb3JlOjpDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZvaWQgc2hvdyhXZWJWaWV3KiwgV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICBTdHJpbmcgZGlzbWlzcyhXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICBzdGF0aWMgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYlZpZXcqLCBOU0NvcnJlY3Rpb25SZXNw
b25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJp
bmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRO
U1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDcgQEAKICAgICAgICAgW1t0ZXh0Q29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2
aWNlUkdCQ29sb3JTcGFjZV0gZ2V0UmVkOiZyZWQgZ3JlZW46JmdyZWVuIGJsdWU6JmJsdWUgYWxw
aGE6JmFscGhhXTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihtYWtlUkdC
QShyZWQgKiAyNTUsIGdyZWVuICogMjU1LCBibHVlICogMjU1LCBhbHBoYSAqIDI1NSksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogCi0gICAgICAgIHdlYkNvcmVGb250LmRyYXdUZXh0KCZncmFwaGlj
c0NvbnRleHQsIHJ1biwgRmxvYXRQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50LnkgOiAo
LTEgKiBwb2ludC55KSkpKTsKKyAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQoJmdyYXBoaWNz
Q29udGV4dCwgcnVuLCBHcmFwaGljc1BvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9pbnQueSA6
ICgtMSAqIHBvaW50LnkpKSkpOwogCiAgICAgICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3NSwxMiArMjc1LDEyIEBACiAKIC0gKGludClwYWdlTnVtYmVyRm9yRWxlbWVudDooRE9N
RWxlbWVudCopZWxlbWVudDooZmxvYXQpcGFnZVdpZHRoSW5QaXhlbHM6KGZsb2F0KXBhZ2VIZWln
aHRJblBpeGVscwogewotICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVt
ZW50KGNvcmUoZWxlbWVudCksIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdo
dEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1l
bnQoY29yZShlbGVtZW50KSwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVp
Z2h0SW5QaXhlbHMpKTsKIH0KIAogLSAoaW50KW51bWJlck9mUGFnZXM6KGZsb2F0KXBhZ2VXaWR0
aEluUGl4ZWxzOihmbG9hdClwYWdlSGVpZ2h0SW5QaXhlbHMKIHsKLSAgICByZXR1cm4gUHJpbnRD
b250ZXh0OjpudW1iZXJPZlBhZ2VzKF9wcml2YXRlLT5jb3JlRnJhbWUsIEZsb2F0U2l6ZShwYWdl
V2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29u
dGV4dDo6bnVtYmVyT2ZQYWdlcyhfcHJpdmF0ZS0+Y29yZUZyYW1lLCBHcmFwaGljc1NpemUocGFn
ZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCiAtIChOU1N0cmluZyAq
KXBhZ2VQcm9wZXJ0eTooY29uc3QgY2hhciAqKXByb3BlcnR5TmFtZTooaW50KXBhZ2VOdW1iZXIK
QEAgLTMwNSw3ICszMDUsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7Ci0gICAgUHJpbnRDb250ZXh0OjpzcG9vbEFs
bFBhZ2VzV2l0aEJvdW5kYXJpZXMoY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6
ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgUHJpbnRDb250
ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoY29yZUZyYW1lLCBncmFwaGljc0NvbnRl
eHQsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7
CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9k
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5v
ZGUubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJS
ZW5kZXJOb2RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBACiAgICAgRnJhbWUq
IGZyYW1lID0gZnJhbWVWaWV3ID8gZnJhbWVWaWV3LT5mcmFtZSgpIDogMDsKIAogICAgIC8vIEZJ
WE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBub2Rl
LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1Bv
cyA9IG5vZGUtPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCkpOwogICAgIGludCB4ID0g
MDsKICAgICBpbnQgeSA9IDA7CiAgICAgaW50IHdpZHRoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ4LDcgKzEzNDgs
NyBAQAogICAgIGZsb2F0IHByaW50SGVpZ2h0ID0gcm9vdC0+c3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHBhZ2VTaXplLmhlaWdodCA6IGRvY3VtZW50UmVjdC5oZWlnaHQoKSAv
IHByaW50U2NhbGVGYWN0b3I7CiAKICAgICBQcmludENvbnRleHQgcHJpbnRDb250ZXh0KF9wcml2
YXRlLT5jb3JlRnJhbWUpOwotICAgIHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBh
Z2VTaXplKEZsb2F0U2l6ZShwcmludFdpZHRoLCBwcmludEhlaWdodCksIHRydWUpOworICAgIHBy
aW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKEdyYXBoaWNzU2l6ZShwcmlu
dFdpZHRoLCBwcmludEhlaWdodCksIHRydWUpOwogICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYg
cGFnZVJlY3RzID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0cygpOwogCiAgICAgc2l6ZV90IHNpemUg
PSBwYWdlUmVjdHMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTkwLDEyICs5MCwxMiBAQAogI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgpAQCAtMjE0NywxMyArMjE0NywxMyBAQAogCiAgICAg
ZmxvYXQgcGFnZUxvZ2ljYWxXaWR0aCA9IGlzSG9yaXpvbnRhbCA/IHBhZ2VXaWR0aCA6IHBhZ2VI
ZWlnaHQ7CiAgICAgZmxvYXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwgPyBwYWdl
SGVpZ2h0IDogcGFnZVdpZHRoOwotICAgIEZsb2F0U2l6ZSBtaW5MYXlvdXRTaXplKHBhZ2VMb2dp
Y2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAgICBHcmFwaGljc1NpemUgbWluTGF5b3V0
U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCk7CiAgICAgZmxvYXQgbWF4
aW11bVNocmlua1JhdGlvID0gMTsKIAogICAgIC8vIElmIHdlIGFyZSBhIGZyYW1lc2V0IGp1c3Qg
cHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lzZSByZWxheW91
dAogICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFnZSB3aWR0aC4KICAgICBpZiAoc2hyaW5rVG9G
aXQgJiYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVT
ZXQoKSkpIHsKLSAgICAgICAgbWluTGF5b3V0U2l6ZSA9IGZyYW1lLT5yZXNpemVQYWdlUmVjdHNL
ZWVwaW5nUmF0aW8oRmxvYXRTaXplKHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0
KSwgRmxvYXRTaXplKHBhZ2VMb2dpY2FsV2lkdGggKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmlt
dW1TaHJpbmtGYWN0b3IsIHBhZ2VMb2dpY2FsSGVpZ2h0ICogX1dlYkhUTUxWaWV3UHJpbnRpbmdN
aW5pbXVtU2hyaW5rRmFjdG9yKSk7CisgICAgICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVz
aXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRoLCBw
YWdlTG9naWNhbEhlaWdodCksIEdyYXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRoICogX1dlYkhU
TUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYWdlTG9naWNhbEhlaWdodCAqIF9X
ZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOwogICAgICAgICBtYXhpbXVt
U2hyaW5rUmF0aW8gPSBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgLyBf
V2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7CiAgICAgfQogCkBAIC0yMTgz
LDEzICsyMTgzLDEzIEBACiAKICAgICBmbG9hdCBwYWdlTG9naWNhbFdpZHRoID0gaXNIb3Jpem9u
dGFsID8gcGFnZVNpemUud2lkdGggOiBwYWdlU2l6ZS5oZWlnaHQ7CiAgICAgZmxvYXQgcGFnZUxv
Z2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwgPyBwYWdlU2l6ZS5oZWlnaHQgOiBwYWdlU2l6ZS53
aWR0aDsKLSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdl
TG9naWNhbEhlaWdodCk7CisgICAgR3JhcGhpY3NTaXplIG1pbkxheW91dFNpemUocGFnZUxvZ2lj
YWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIGZsb2F0IG1heGltdW1TaHJpbmtSYXRp
byA9IDE7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhl
IGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQKICAgICAvLyBhY2Nv
cmRpbmcgdG8gdGhlIHBhZ2Ugd2lkdGguCiAgICAgaWYgKHNocmlua1RvRml0ICYmICghZnJhbWUt
PmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpKSB7Ci0gICAg
ICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZs
b2F0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEZsb2F0U2l6ZShw
YWdlTG9naWNhbFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9y
LCBwYWdlTG9naWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0Zh
Y3RvcikpOworICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tl
ZXBpbmdSYXRpbyhHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWln
aHQpLCBHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCAqIF9XZWJIVE1MVmlld1ByaW50aW5n
TWluaW11bVNocmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWlnaHQgKiBfV2ViSFRNTFZpZXdQcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKICAgICAgICAgbWF4aW11bVNocmlua1JhdGlvID0g
X1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yIC8gX1dlYkhUTUxWaWV3UHJp
bnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOwogICAgIH0KIApAQCAtMzAyMiw5ICszMDIyLDkgQEAK
IAogICAgIGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKICAg
ICAgICAgaWYgKG1pblBhZ2VMb2dpY2FsV2lkdGggPiAwLjApIHsKLSAgICAgICAgICAgIEZsb2F0
U2l6ZSBwYWdlU2l6ZShtaW5QYWdlTG9naWNhbFdpZHRoLCBtaW5QYWdlTG9naWNhbEhlaWdodCk7
CisgICAgICAgICAgICBHcmFwaGljc1NpemUgcGFnZVNpemUobWluUGFnZUxvZ2ljYWxXaWR0aCwg
bWluUGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1l
bnQoKSAmJiBjb3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSAmJiAhY29yZUZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgICAgICAgICAgcGFnZVNpemUgPSBGbG9hdFNpemUobWluUGFnZUxvZ2lj
YWxIZWlnaHQsIG1pblBhZ2VMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgIHBhZ2VTaXpl
ID0gR3JhcGhpY3NTaXplKG1pblBhZ2VMb2dpY2FsSGVpZ2h0LCBtaW5QYWdlTG9naWNhbFdpZHRo
KTsKICAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91dEZvclBhZ2luYXRpb24ocGFnZVNp
emUsIG1heGltdW1TaHJpbmtSYXRpbywgYWRqdXN0Vmlld1NpemUgPyBBZGp1c3RWaWV3U2l6ZSA6
IERvTm90QWRqdXN0Vmlld1NpemUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29y
ZVZpZXctPmZvcmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7CkBAIC01OTcxLDcgKzU5NzEsNyBA
QAogICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBWZWN0b3I8RmxvYXRSZWN0PiBsaXN0OworICAgIFZlY3RvcjxHcmFwaGljc1JlY3Q+IGxp
c3Q7CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQogICAg
ICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5nZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5n
bGVzKGxpc3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcg
KzEzOSw3IEBACiBfX1pOM1dURjZTdHJpbmdDMUVQSzEwX19DRlN0cmluZwogX19aTjdXZWJDb3Jl
MTBDcmVkZW50aWFsQzFFUktOM1dURjZTdHJpbmdFUzRfTlNfMjFDcmVkZW50aWFsUGVyc2lzdGVu
Y2VFCiBfX1pON1dlYkNvcmUxMENyZWRlbnRpYWxDMUV2Ci1fX1pON1dlYkNvcmUxMEZsb2F0UG9p
bnRDMUVSS05TXzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEMxRVJLTlNf
OEludFBvaW50RQogX19aTjdXZWJDb3JlMTBKU0RvY3VtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRl
RVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUK
IF9fWk43V2ViQ29yZTEwSlNEb2N1bWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxME1vdXNlRXZl
bnQ2Y3JlYXRlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzlET01X
aW5kb3dFRUVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RWlOUzVfSU5TXzROb2RlRUVFCkBAIC0y
MjAsOSArMjIwLDkgQEAKIF9fWk43V2ViQ29yZTExc3RhcnRPZldvcmRFUktOU18xNVZpc2libGVQ
b3NpdGlvbkVOU185RVdvcmRTaWRlRQogX19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzdfTlNS
ZWN0UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTF3cml0ZVRvRmlsZUVpUEtjaQotX19aTjdXZWJD
b3JlMTJDaHJvbWVDbGllbnQyMHBhaW50Q3VzdG9tU2Nyb2xsYmFyRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzlGbG9hdFJlY3RFTlNfMjBTY3JvbGxiYXJDb250cm9sU2l6ZUVqTlNfMTNTY3Jv
bGxiYXJQYXJ0RWJmZmoKK19fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbVNj
cm9sbGJhckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVOU18yMFNj
cm9sbGJhckNvbnRyb2xTaXplRWpOU18xM1Njcm9sbGJhclBhcnRFYmZmagogX19aTjdXZWJDb3Jl
MTJDaHJvbWVDbGllbnQyM3BhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdJbnRSZWN0RVM1X1M1XwotX19aTjdXZWJDb3JlMTJDaHJvbWVDbGllbnQyM3Bh
aW50Q3VzdG9tU2Nyb2xsQ29ybmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJl
Y3RFCitfX1pON1dlYkNvcmUxMkNocm9tZUNsaWVudDIzcGFpbnRDdXN0b21TY3JvbGxDb3JuZXJF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUx
MkVkaXRpbmdTdHlsZUQxRXYKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTBtb3VzZU1vdmVk
RVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxMG1vdXNlTW92ZWRFUktOU18x
OFBsYXRmb3JtTW91c2VFdmVudEUKQEAgLTI2NSwxNCArMjY1LDE0IEBACiBfX1pON1dlYkNvcmUx
MkpTRE9NV3JhcHBlcjM0dmlydHVhbEZ1bmN0aW9uVG9QcmV2ZW50V2Vha1Z0YWJsZUV2CiBfX1pO
N1dlYkNvcmUxMlBvcHVwTWVudU1hY0MxRVBOU18xNVBvcHVwTWVudUNsaWVudEUKIF9fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0MTJwYWdlUHJvcGVydHlFUE5TXzVGcmFtZUVQS2NpCi1fX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDEzbnVtYmVyT2ZQYWdlc0VQTlNfNUZyYW1lRVJLTlNfOUZsb2F0
U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTZjb21wdXRlUGFnZVJlY3RzRVJLTlNf
OUZsb2F0UmVjdEVmZmZSZmIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTNudW1iZXJPZlBh
Z2VzRVBOU181RnJhbWVFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43V2ViQ29yZTEyUHJpbnRD
b250ZXh0MTZjb21wdXRlUGFnZVJlY3RzRVJLTlNfMTJHcmFwaGljc1JlY3RFZmZmUmZiCiBfX1pO
N1dlYkNvcmUxMlByaW50Q29udGV4dDE2aXNQYWdlQm94VmlzaWJsZUVQTlNfNUZyYW1lRWkKLV9f
Wk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjBwYWdlTnVtYmVyRm9yRWxlbWVudEVQTlNfN0VsZW1l
bnRFUktOU185RmxvYXRTaXplRQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1i
ZXJGb3JFbGVtZW50RVBOU183RWxlbWVudEVSS05TXzEyR3JhcGhpY3NTaXplRQogX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHQyNnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzRVBOU181RnJhbWVF
aWlpaWlpaQotX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyN2NvbXB1dGVBdXRvbWF0aWNTY2Fs
ZUZhY3RvckVSS05TXzlGbG9hdFNpemVFCi1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3c3Bv
b2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzRVBOU181RnJhbWVFUk5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFn
ZVJlY3RzV2l0aFBhZ2VTaXplRVJLTlNfOUZsb2F0U2l6ZUViCitfX1pON1dlYkNvcmUxMlByaW50
Q29udGV4dDI3Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yRVJLTlNfMTJHcmFwaGljc1NpemVF
CitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVz
RVBOU181RnJhbWVFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1NpemVFCitf
X1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI4Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUVS
S05TXzEyR3JhcGhpY3NTaXplRWIKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0M2VuZEV2CiBf
X1pON1dlYkNvcmUxMlByaW50Q29udGV4dDViZWdpbkVmZgogX19aTjdXZWJDb3JlMTJQcmludENv
bnRleHQ5c3Bvb2xQYWdlRVJOU18xNUdyYXBoaWNzQ29udGV4dEVpZgpAQCAtMzI1LDcgKzMyNSw3
IEBACiBfX1pON1dlYkNvcmUxM1R5cGluZ0NvbW1hbmQzOWluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckluUXVvdGVkQ29udGVudEVQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFw
cGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzROb2RlRQog
X19aTjdXZWJDb3JlMTNkaXJlY3RvcnlOYW1lRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3Jl
MTN0b0RldmljZVNwYWNlRVJLTlNfOUZsb2F0UmVjdEVQOE5TV2luZG93CitfX1pON1dlYkNvcmUx
M3RvRGV2aWNlU3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVQOE5TV2luZG93CiBfX1pON1dlYkNv
cmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJD
b3JlMTN0b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJl
c291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCkBAIC00MDks
MTYgKzQwOSwxNiBAQAogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJFZgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzRQ
YXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzdJbnRSZWN0RQot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzlGbG9hdFJlY3RFCitfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRzYXZlRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0NXNjYWxlRVJLTlNfOUZsb2F0U2l6ZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0NXNjYWxlRVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDdyZXN0b3JlRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxQYXRoRVJL
TlNfNFBhdGhFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlG
bG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlG
bG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQotX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCitfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfNUNvbG9y
RU5TXzEwQ29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWNsZWFyUmVj
dEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJh
d0ltYWdlRVBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOEludFBvaW50RU5TXzE3Q29t
cG9zaXRlT3BlcmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dF
UktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCitfX1pON1dlYkNv
cmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU18xMkdyYXBoaWNzU2l6ZUVmUktOU181
Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5dHJh
bnNsYXRlRWZmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEMxRVA5Q0dDb250ZXh0CiBf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEQxRXYKQEAgLTQ4OSw3ICs0ODksNyBAQAogX19a
TjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQogX19aTjdXZWJDb3JlMTZk
ZWxldGVBbGxDb29raWVzRXYKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSSzdfTlNS
ZWN0Ci1fX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185RmxvYXRSZWN0RQorX19a
TjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dl
YkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE2c3RhcnRPZlBhcmFncmFwaEVS
S05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQog
X19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTI0Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdl
RVJLTlNfMTVQcm90ZWN0aW9uU3BhY2VFCkBAIC03MTYsNyArNzE2LDcgQEAKIF9fWk43V2ViQ29y
ZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0UGFnZUMxRVJOUzBfMTFQYWdlQ2xpZW50
c0UKIF9fWk43V2ViQ29yZTRQYWdlRDFFdgotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRS
ZWN0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmU0UGF0aDE0
YWRkUm91bmRlZFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzEyR3JhcGhpY3NTaXplRQog
X19aTjdXZWJDb3JlNFBhdGhDMUV2CiBfX1pON1dlYkNvcmU0UGF0aEQxRXYKIF9fWk43V2ViQ29y
ZTRjb3JlRVAyME5TVVJMUHJvdGVjdGlvblNwYWNlCkBAIC03MzQsNyArNzM0LDcgQEAKIF9fWk43
V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnRFUktOU184SW50UG9pbnRFCiBf
X1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnRFUDdOU0FycmF5UE5T
XzdFbGVtZW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
RWZmCi1fX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05T
XzlGbG9hdFNpemVFUzNfCitfX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tlZXBp
bmdSYXRpb0VSS05TXzEyR3JhcGhpY3NTaXplRVMzXwogX19aTjdXZWJDb3JlNUZyYW1lMjhzZWFy
Y2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50RVA3TlNBcnJheVBOU183RWxlbWVudEVQbVBiCiBfX1pO
N1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFIVE1MRnJhbWVPd25lckVsZW1l
bnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCiBfX1pON1dlYkNvcmU1RnJhbWU3c2V0Vmlld0VO
M1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVFCkBAIC04MjQsNyArODI0LDcgQEAKIF9f
Wk43V2ViQ29yZTdJbnRSZWN0NXNjYWxlRWYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXVuaXRlRVJL
UzBfCiBfX1pON1dlYkNvcmU3SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk43V2ViQ29yZTdJ
bnRSZWN0QzFFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzEy
R3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlN0ludFNpemVDMUVSSzdfTlNTaXplCiBfX1pON1dl
YkNvcmU3VGV4dFJ1bjE5YWxsb3dzUm91bmRpbmdIYWNrc0V2CiBfX1pON1dlYkNvcmU3VGV4dFJ1
bjIxc19hbGxvd3NSb3VuZGluZ0hhY2tzRQpAQCAtODUwLDcgKzg1MCw3IEBACiBfX1pON1dlYkNv
cmU4Rm9ybURhdGE2Y3JlYXRlRVBLdm0KIF9fWk43V2ViQ29yZThGb3JtRGF0YUQxRXYKIF9fWk43
V2ViQ29yZThHcmFkaWVudDEyYWRkQ29sb3JTdG9wRWZSS05TXzVDb2xvckUKLV9fWk43V2ViQ29y
ZThHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RVMzXworX19aTjdXZWJDb3JlOEdyYWRpZW50
QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhf
TlNQb2ludAogX19aTjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5v
ZGVFRUVpTlMwXzEwQW5jaG9yVHlwZUUKIF9fWk43V2ViQ29yZThTZXR0aW5nczE0c2V0SmF2YUVu
YWJsZWRFYgpAQCAtOTI5LDkgKzkyOSw5IEBACiBfX1pON1dlYkNvcmU4dG9TdHJpbmdFUktOM1dU
RjZWZWN0b3JJTlNfMTFQcm94eVNlcnZlckVMbTBFRUUKIF9fWk43V2ViQ29yZTlET01XaW5kb3cz
MGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RE9NV2luZG93
MzZkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHNFdgotX19aTjdXZWJDb3JlOUZs
b2F0UmVjdEMxRVJLN19OU1JlY3QKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRS
ZWN0RQotX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCitfX1pON1dlYkNv
cmUxMkdyYXBoaWNzUmVjdEMxRVJLN19OU1JlY3QKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0
QzFFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NTaXplQzFFUktOU183SW50
U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlGb250
Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCkBAIC05NTMsNyArOTUzLDcgQEAKIF9fWk43
V2ViQ29yZTlGcmFtZVZpZXcyMWZsdXNoRGVmZXJyZWRSZXBhaW50c0V2CiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjJzZXRCYXNlQmFja2dyb3VuZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdXZWJD
b3JlOUZyYW1lVmlldzIzdXBkYXRlQ2FuSGF2ZVNjcm9sbGJhcnNFdgotX19aTjdXZWJDb3JlOUZy
YW1lVmlldzI0Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uRVJLTlNfOUZsb2F0U2l6ZUVmTlNfMTlB
ZGp1c3RWaWV3U2l6ZU9yTm90RQorX19aTjdXZWJDb3JlOUZyYW1lVmlldzI0Zm9yY2VMYXlvdXRG
b3JQYWdpbmF0aW9uRVJLTlNfMTJHcmFwaGljc1NpemVFZk5TXzE5QWRqdXN0Vmlld1NpemVPck5v
dEUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkRVBm
ZmZmCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjlzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVl
bkViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3Mzd1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVk
UmVjdXJzaXZlRXYKQEAgLTEwMzcsNyArMTAzNyw3IEBACiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50
aWFsNHVzZXJFdgogX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dl
YkNvcmUxMENyZWRlbnRpYWw4cGFzc3dvcmRFdgotX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2
OF9OU1BvaW50RXYKK19fWk5LN1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRjdjhfTlNQb2ludEV2CiBf
X1pOSzdXZWJDb3JlMTBQbHVnaW5EYXRhMTZzdXBwb3J0c01pbWVUeXBlRVJLTjNXVEY2U3RyaW5n
RQogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2bGluZXNCb3VuZGluZ0JveEV2CiBfX1pOSzdX
ZWJDb3JlMTBSZW5kZXJUZXh0OWZpcnN0UnVuWEV2CkBAIC0xMDg4LDcgKzEwODgsNyBAQAogX19a
Tks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlFdgogX19a
Tks3V2ViQ29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKLV9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE1
bG9jYWxUb0Fic29sdXRlRVJLTlNfMTBGbG9hdFBvaW50RWJiCitfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEzR3JhcGhpY3NQb2ludEViYgogX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0NHZpZXdFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0
N2NoaWxkQXRFagogX19aTks3V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MTR3aW5kb3dDbGlwUmVjdEV2
CkBAIC0xMTM4LDcgKzExMzgsNyBAQAogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xNWNv
cHlUeXBpbmdTdHlsZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJblBhc3N3
b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNlZEFuZEFj
dGl2ZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVU
ZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRUVFCitfX1pOSzdX
ZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlc0VS
TjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NSZWN0RUxtMEVFRQogX19aTks3V2ViQ29yZTE0RnJh
bWVTZWxlY3Rpb242Ym91bmRzRWIKIF9fWk5LN1dlYkNvcmUxNFJlbmRlckxpc3RJdGVtMTBtYXJr
ZXJUZXh0RXYKIF9fWk5LN1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTBjb25uZWN0aW9uRXYKQEAg
LTEyMDksNyArMTIwOSw3IEBACiBfX1pOSzdXZWJDb3JlMjdBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUJhc2U1ZXJyb3JFdgogX19aTks3V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNl
NmlzTnVsbEV2CiBfX1pOSzdXZWJDb3JlNEZvbnQ1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3
SGFzaFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFz
aFRyYWl0c0lTOF9FRUVFUE5TXzEzR2x5cGhPdmVyZmxvd0UKLV9fWk5LN1dlYkNvcmU0Rm9udDhk
cmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQ
b2ludEVpaQorX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pOSzdXZWJDb3JlNEtV
UkwxMHByb3RvY29sSXNFUEtjCiBfX1pOSzdXZWJDb3JlNEtVUkwxMWNyZWF0ZUNGVVJMRXYKIF9f
Wk5LN1dlYkNvcmU0S1VSTDExaXNMb2NhbEZpbGVFdgpAQCAtMTI0NSw3ICsxMjQ1LDcgQEAKIF9f
Wk5LN1dlYkNvcmU1UmFuZ2U0dGV4dEV2CiBfX1pOSzdXZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVS
aQogX19aTks3V2ViQ29yZTVSYW5nZTlmaXJzdE5vZGVFdgotX19aTks3V2ViQ29yZTVSYW5nZTl0
ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRWIKK19fWk5LN1dlYkNv
cmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVF
YgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNyZWF0ZVdpbmRvd0VQTlNfNUZyYW1lRVJLTlNfMTZG
cmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5kb3dGZWF0dXJlc0VSS05TXzE2TmF2aWdhdGlvbkFj
dGlvbkUKIF9fWk5LN1dlYkNvcmU2Q3Vyc29yMTRwbGF0Zm9ybUN1cnNvckV2CiBfX1pOSzdXZWJD
b3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0RXYKQEAgLTEzMTEsOCArMTMxMSw4IEBACiBfX1pOSzdX
ZWJDb3JlOFBvc2l0aW9uMjZ0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5
RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb244dXBzdHJlYW1FTlNfMjdFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOURPTVdpbmRvdzI3cGVuZGluZ1VubG9hZEV2ZW50
TGlzdGVuZXJzRXYKLV9fWk5LN1dlYkNvcmU5RmxvYXRRdWFkMTFib3VuZGluZ0JveEV2Ci1fX1pO
SzdXZWJDb3JlOUZsb2F0UmVjdGN2N19OU1JlY3RFdgorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NR
dWFkMTFib3VuZGluZ0JveEV2CitfX1pOSzdXZWJDb3JlMTJHcmFwaGljc1JlY3RjdjdfTlNSZWN0
RXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMTJ0cmF2ZXJzZU5leHRFUEtOU181RnJhbWVFCiBf
X1pOSzdXZWJDb3JlOUZyYW1lVHJlZTE0aXNEZXNjZW5kYW50T2ZFUEtOU181RnJhbWVFCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVHJlZTIwdHJhdmVyc2VOZXh0V2l0aFdyYXBFYgpJbmRleDogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NzMsMTYgKzI0NzMsNiBA
QAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFR2F1c3Np
YW5CbHVyTkVPTi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L2FybS9GRUxpZ2h0aW5nTkVPTi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250QmFzZWxpbmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmggXApAQCAtMjUxOSw2ICsyNTA5LDE2IEBACiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzUG9pbnQzRC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzUG9pbnQzRC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1BvaW50LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NQb2ludC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1F1YWQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1F1YWQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0Lmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzM0QuaCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vV2hlZWxFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9XaGVlbEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogewogfQog
Ci1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHdoZWVsVGlja3MsIGNv
bnN0IEZsb2F0UG9pbnQmIHJhd0RlbHRhLAorV2hlZWxFdmVudDo6V2hlZWxFdmVudChjb25zdCBH
cmFwaGljc1BvaW50JiB3aGVlbFRpY2tzLCBjb25zdCBHcmFwaGljc1BvaW50JiByYXdEZWx0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYgc2NyZWVuTG9jYXRpb24sIGNvbnN0IEludFBvaW50JiBwYWdlTG9jYXRpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRL
ZXksIGJvb2wgbWV0YUtleSkKQEAgLTk2LDcgKzk2LDcgQEAKICAgICBpZiAoIShldmVudC5kZWx0
YVgoKSB8fCBldmVudC5kZWx0YVkoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEV2ZW50
KFdoZWVsRXZlbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGV2ZW50LndoZWVsVGlja3NYKCksIGV2ZW50
LndoZWVsVGlja3NZKCkpLCBGbG9hdFBvaW50KGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVko
KSksIGdyYW51bGFyaXR5KGV2ZW50KSwKKyAgICBzZXRFdmVudChXaGVlbEV2ZW50OjpjcmVhdGUo
R3JhcGhpY3NQb2ludChldmVudC53aGVlbFRpY2tzWCgpLCBldmVudC53aGVlbFRpY2tzWSgpKSwg
R3JhcGhpY3NQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCkpLCBncmFudWxhcml0
eShldmVudCksCiAgICAgICAgIHZpZXcsIEludFBvaW50KGV2ZW50Lmdsb2JhbFgoKSwgZXZlbnQu
Z2xvYmFsWSgpKSwgSW50UG9pbnQoZXZlbnQueCgpLCBldmVudC55KCkpLCBldmVudC5jdHJsS2V5
KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkpKTsK
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQAogdm9pZCBNb3VzZVJlbGF0ZWRFdmVu
dDo6Y29tcHV0ZVBhZ2VMb2NhdGlvbigpCiB7CiAgICAgZmxvYXQgem9vbUZhY3RvciA9IHBhZ2Va
b29tRmFjdG9yKHRoaXMpOwotICAgIHNldEFic29sdXRlTG9jYXRpb24ocm91bmRlZEludFBvaW50
KEZsb2F0UG9pbnQocGFnZVgoKSAqIHpvb21GYWN0b3IsIHBhZ2VZKCkgKiB6b29tRmFjdG9yKSkp
OworICAgIHNldEFic29sdXRlTG9jYXRpb24ocm91bmRlZEludFBvaW50KEdyYXBoaWNzUG9pbnQo
cGFnZVgoKSAqIHpvb21GYWN0b3IsIHBhZ2VZKCkgKiB6b29tRmFjdG9yKSkpOwogfQogCiB2b2lk
IE1vdXNlUmVsYXRlZEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpCkBAIC0xNDksNyArMTQ5LDcgQEAK
ICAgICAvLyBBZGp1c3Qgb2Zmc2V0TG9jYXRpb24gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdl
dCdzIHBvc2l0aW9uLgogICAgIGlmICghaXNTaW11bGF0ZWQoKSkgewogICAgICAgICBpZiAoUmVu
ZGVyT2JqZWN0KiByID0gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgRmxv
YXRQb2ludCBsb2NhbFBvcyA9IHItPmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZUxvY2F0aW9uKCks
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxQb3MgPSByLT5h
YnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAg
ICAgICBtX29mZnNldExvY2F0aW9uID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9zKTsKICAgICAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMSAvIHBhZ2Vab29tRmFjdG9yKHRoaXMpOwogICAg
ICAgICAgICAgaWYgKHNjYWxlRmFjdG9yICE9IDEuMGYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTE5LDEyICs1MTksMTIgQEAKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAg
ICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBxdWFkczsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChp
c1NWR0VsZW1lbnQoKSAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgYm91bmRp
bmcgcmVjdGFuZ2xlIGZyb20gdGhlIFNWRyBtb2RlbC4KICAgICAgICAgY29uc3QgU1ZHRWxlbWVu
dCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0VsZW1lbnQqPih0aGlzKTsKLSAg
ICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGxvY2FsUmVj
dDsKICAgICAgICAgaWYgKHN2Z0VsZW1lbnQtPmJvdW5kaW5nQm94KGxvY2FsUmVjdCkpCiAgICAg
ICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChsb2Nh
bFJlY3QpKTsKICAgICB9IGVsc2UKQEAgLTU1Nyw3ICs1NTcsNyBAQAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgU1ZHIGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBIYW5kbGUgdGFibGUvaW5saW5lLXRh
YmxlIHdpdGggYSBjYXB0aW9uLgogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAg
VmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgcmVuZGVyQm94TW9kZWxPYmplY3QtPmFi
c29sdXRlUXVhZHMocXVhZHMpOwogCiAgICAgZmxvYXQgcGFnZVNjYWxlID0gMTsKQEAgLTU3MCw5
ICs1NzAsOSBAQAogICAgICAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVu
dFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBhZGp1c3RG
bG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlckJveE1vZGVsT2JqZWN0KTsK
KyAgICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tpXSwg
cmVuZGVyQm94TW9kZWxPYmplY3QpOwogICAgICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQot
ICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwgcGFn
ZVNjYWxlKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JQYWdlU2NhbGUo
cXVhZHNbaV0sIHBhZ2VTY2FsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU4MywxMiArNTgz
LDEyIEBACiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBWZWN0b3I8R3Jh
cGhpY3NRdWFkPiBxdWFkczsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChpc1NWR0VsZW1lbnQo
KSAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xl
IGZyb20gdGhlIFNWRyBtb2RlbC4KICAgICAgICAgY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVu
dCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0VsZW1lbnQqPih0aGlzKTsKLSAgICAgICAgRmxvYXRS
ZWN0IGxvY2FsUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGxvY2FsUmVjdDsKICAgICAgICAg
aWYgKHN2Z0VsZW1lbnQtPmJvdW5kaW5nQm94KGxvY2FsUmVjdCkpCiAgICAgICAgICAgICBxdWFk
cy5hcHBlbmQocmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKICAg
ICB9IGVsc2UKQEAgLTYwMiw3ICs2MDIsNyBAQAogICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUoKTsKIAotICAgIEZsb2F0UmVjdCByZXN1
bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCByZXN1bHQgPSBx
dWFkc1swXS5ib3VuZGluZ0JveCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgp
KTsKIApAQCAtNjExLDEwICs2MTEsMTAgQEAKICAgICAgICAgcmVzdWx0Lm1vdmUoLXZpc2libGVD
b250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKICAgICB9CiAKLSAgICBh
ZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigpKTsKKyAgICBh
ZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigpKTsKICAg
ICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBhZGp1c3RGbG9hdFJl
Y3RGb3JQYWdlU2NhbGUocmVzdWx0LCBmcmFtZS0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgICAg
ICAgICAgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgZnJhbWUtPnBhZ2VT
Y2FsZUZhY3RvcigpKTsKICAgICB9CiAKICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRlKHJl
c3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogY2xhc3MgRXZl
bnQ7CiBjbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgRmxv
YXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnRSZWN0OwpAQCAtNDI4LDggKzQyOCw4IEBACiAgICAgdmly
dHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBHZXR0aW5nIHBv
aW50cyBpbnRvIGFuZCBvdXQgb2Ygc2NyZWVuIHNwYWNlCi0gICAgRmxvYXRQb2ludCBjb252ZXJ0
VG9QYWdlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGNvbnZlcnRG
cm9tUGFnZShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBjb252
ZXJ0VG9QYWdlKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50
IGNvbnZlcnRGcm9tUGFnZShjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAKICAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEludGVncmF0aW9uIHdpdGggcmVuZGVyaW5nIHRy
ZWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIzLDcgKzEx
MjMsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFt
ZS0+cGFnZVpvb21GYWN0b3IoKTsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChGbG9hdFBvaW50KGNlbnRlclggKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxYKCksIGNl
bnRlclkgKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxZKCkpKTsKKyAgICBJbnRQb2ludCBw
b2ludCA9IHJvdW5kZWRJbnRQb2ludChHcmFwaGljc1BvaW50KGNlbnRlclggKiB6b29tRmFjdG9y
ICsgdmlldygpLT5zY3JvbGxYKCksIGNlbnRlclkgKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3Jv
bGxZKCkpKTsKIAogICAgIGludCB0eXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKIApAQCAtMTE3MSw3ICsxMTcxLDcgQEAKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7
Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludCh4ICogem9v
bUZhY3RvciAgKyBmcmFtZVZpZXctPnNjcm9sbFgoKSwgeSAqIHpvb21GYWN0b3IgKyBmcmFtZVZp
ZXctPnNjcm9sbFkoKSkpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEdy
YXBoaWNzUG9pbnQoeCAqIHpvb21GYWN0b3IgICsgZnJhbWVWaWV3LT5zY3JvbGxYKCksIHkgKiB6
b29tRmFjdG9yICsgZnJhbWVWaWV3LT5zY3JvbGxZKCkpKTsKIAogICAgIGlmICghZnJhbWVWaWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKIHsKIH0KIAotQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RM
aXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK0NsaWVudFJlY3RMaXN0OjpDbGll
bnRSZWN0TGlzdChjb25zdCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgbV9s
aXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocXVhZHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTg0OSw3ICs4NDksNyBAQAogICAg
ICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxl
cigpLT5lbmFibGUoKTsKIH0KIAotYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3Ju
ZXIoRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVy
TGVmdENvcm5lcihHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgIFJl
bmRlck9iamVjdCAqcCA9IG87CiAKICAgICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
KSwgZmFsc2UsIHRydWUpOworICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFw
aGljc1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC04ODMsMTQgKzg4MywxNCBAQAogICAgICAgICBBU1NFUlQobyk7CiAKICAgICAgICAgaWYg
KCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgcG9pbnQg
PSBvLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAg
ICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIGZhbHNlLCB0
cnVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHAtPm5vZGUoKSAmJiBwLT5ub2RlKCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNC
UigpICYmICF0b1JlbmRlclRleHQobyktPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gZG8gbm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIHRoYXQgaXMgYSBj
aGlsZCBvciBuZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcgogICAgICAgICB9IGVsc2UgaWYgKChv
LT5pc1RleHQoKSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAg
ICAgIHBvaW50ID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgcG9pbnQgPSBHcmFwaGljc1Bv
aW50KCk7CiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG8pLT5m
aXJzdFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUodG9SZW5kZXJUZXh0
KG8pLT5saW5lc0JvdW5kaW5nQm94KCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9SZW5kZXJUZXh0KG8pLT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5lVG9wKCkpOwpAQCAt
OTA2LDE0ICs5MDYsMTQgQEAKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhbnkg
Y2hpbGRyZW4gb3Igc2libGluZ3MgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uLCB3ZSBtdXN0IGJlCiAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZG9j
dW1lbnQuICBTY3JvbGwgdG8gdGhlIGJvdHRvbS4gRklYTUU6IHdobyBzYWlkIGFueXRoaW5nIGFi
b3V0IHNjcm9sbGluZz8KICAgICBpZiAoIW8gJiYgZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAg
ICAgIHBvaW50ID0gRmxvYXRQb2ludCgwLCBkb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzSGVp
Z2h0KCkpOworICAgICAgICBwb2ludCA9IEdyYXBoaWNzUG9pbnQoMCwgZG9jdW1lbnQoKS0+dmll
dygpLT5jb250ZW50c0hlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3Rs
eSB3aXRoIHRyYW5zZm9ybXMuCi1ib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3Ju
ZXIoRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIENvbnRhaW5lck5vZGU6OmdldExvd2Vy
UmlnaHRDb3JuZXIoR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5k
ZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICBS
ZW5kZXJPYmplY3QqIG8gPSByZW5kZXJlcigpOwogICAgIGlmICghby0+aXNJbmxpbmUoKSB8fCBv
LT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChv
KTsKLSAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9p
bnQoKSwgZmFsc2UsIHRydWUpOwogICAgICAgICBwb2ludC5tb3ZlKGJveC0+c2l6ZSgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTQ0LDcgKzk0NCw3IEBACiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKG8pOwogICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgICAgICBwb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICAgICAgICAg
IHBvaW50ID0gR3JhcGhpY3NQb2ludCgpOwogICAgICAgICAgICAgaWYgKG8tPmlzVGV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChvKTsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IGxpbmVzQm94ID0gdGV4dC0+bGluZXNCb3VuZGluZ0JveCgp
OwpAQCAtOTY0LDcgKzk2NCw3IEBACiAKIEludFJlY3QgQ29udGFpbmVyTm9kZTo6Z2V0UmVjdCgp
IGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludCAgdXBwZXJMZWZ0LCBsb3dlclJpZ2h0OworICAgIEdy
YXBoaWNzUG9pbnQgIHVwcGVyTGVmdCwgbG93ZXJSaWdodDsKICAgICBib29sIGZvdW5kVXBwZXJM
ZWZ0ID0gZ2V0VXBwZXJMZWZ0Q29ybmVyKHVwcGVyTGVmdCk7CiAgICAgYm9vbCBmb3VuZExvd2Vy
UmlnaHQgPSBnZXRMb3dlclJpZ2h0Q29ybmVyKGxvd2VyUmlnaHQpOwogICAgIApAQCAtOTc3LDcg
Kzk3Nyw3IEBACiAgICAgICAgICAgICB1cHBlckxlZnQgPSBsb3dlclJpZ2h0OwogICAgIH0gCiAK
LSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodXBwZXJMZWZ0LCBsb3dlclJp
Z2h0LmV4cGFuZGVkVG8odXBwZXJMZWZ0KSAtIHVwcGVyTGVmdCkpOworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdCh1cHBlckxlZnQsIGxvd2VyUmlnaHQuZXhwYW5kZWRU
byh1cHBlckxlZnQpIC0gdXBwZXJMZWZ0KSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6c2V0
Rm9jdXMoYm9vbCByZWNlaXZlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjZGVmaW5lIFJhbmdlX2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhv
bGRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUmFu
Z2VCb3VuZGFyeVBvaW50LmgiCkBAIC00MSw3ICs0MSw3IEBACiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwotY2xhc3MgRmxvYXRR
dWFkOworY2xhc3MgR3JhcGhpY3NRdWFkOwogY2xhc3MgTm9kZVdpdGhJbmRleDsKIGNsYXNzIFRl
eHQ7CiAKQEAgLTExNSw5ICsxMTUsOSBAQAogICAgIC8vIE5vdCB0cmFuc2Zvcm0tZnJpZW5kbHkK
ICAgICB2b2lkIHRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCA9IGZhbHNlKTsKICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKLSAgICB2b2lkIHRleHRR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2Up
IGNvbnN0OwotICAgIHZvaWQgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgIHZvaWQg
dGV4dFF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQg
PSBmYWxzZSkgY29uc3Q7CisgICAgdm9pZCBnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEdy
YXBoaWNzUXVhZD4mKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0KCkgY29u
c3Q7CiAKICAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSopOwogICAg
IHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlKik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRl
ZiBXaGVlbEV2ZW50X2gKICNkZWZpbmUgV2hlZWxFdmVudF9oCiAKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIk1vdXNlUmVsYXRl
ZEV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDggKzM4LDggQEAKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXaGVlbEV2ZW50KTsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXaGVlbEV2ZW50PiBjcmVhdGUoY29uc3Qg
RmxvYXRQb2ludCYgd2hlZWxUaWNrcywKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHJh
d0RlbHRhLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+
IHZpZXcsCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdoZWVsRXZlbnQ+IGNyZWF0ZShjb25z
dCBHcmFwaGljc1BvaW50JiB3aGVlbFRpY2tzLAorICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcmF3RGVsdGEsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4gdmlldywKICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JlZW5Mb2NhdGlv
biwgY29uc3QgSW50UG9pbnQmIHBhZ2VMb2NhdGlvbiwKICAgICAgICAgICAgIGJvb2wgY3RybEtl
eSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSkKICAgICAgICAgewpA
QCAtNjcsNyArNjcsNyBAQAogCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2hlZWxFdmVudCgpOwot
ICAgICAgICBXaGVlbEV2ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHdoZWVsVGlja3MsIGNvbnN0IEZs
b2F0UG9pbnQmIHJhd0RlbHRhLAorICAgICAgICBXaGVlbEV2ZW50KGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHdoZWVsVGlja3MsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHJhd0RlbHRhLAogICAgICAgICAg
ICAgICAgICAgIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmll
dz4sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBj
b25zdCBJbnRQb2ludCYgcGFnZUxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDcgKzg0Myw3IEBACiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwotICAgIEZsb2F0UG9pbnQgYWJzUG9z
ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQ
b3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICByZW5kZXJlcigpLT5hYnNv
bHV0ZVJlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQoYWJzUG9zKSk7CiAgICAgc2l6ZV90IG4g
PSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCkBAIC0y
MjYyLDcgKzIyNjIsNyBAQAogICAgICAgICAgICAgICAgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VE
SU5HIHwgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlM7CiB9CiAKLUZsb2F0UG9pbnQgTm9kZTo6
Y29udmVydFRvUGFnZShjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAorR3JhcGhpY3NQb2ludCBO
b2RlOjpjb252ZXJ0VG9QYWdlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAg
Ly8gSWYgdGhlcmUgaXMgYSByZW5kZXJlciwganVzdCBhc2sgaXQgdG8gZG8gdGhlIGNvbnZlcnNp
b24KICAgICBpZiAocmVuZGVyZXIoKSkKQEAgLTIyNzcsNyArMjI3Nyw3IEBACiAgICAgcmV0dXJu
IHA7CiB9CiAKLUZsb2F0UG9pbnQgTm9kZTo6Y29udmVydEZyb21QYWdlKGNvbnN0IEZsb2F0UG9p
bnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShjb25zdCBH
cmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIC8vIElmIHRoZXJlIGlzIGEgcmVuZGVyZXIs
IGp1c3QgYXNrIGl0IHRvIGRvIHRoZSBjb252ZXJzaW9uCiAgICAgaWYgKHJlbmRlcmVyKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUg
IkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC0xNjUzLDcgKzE2NTMsNyBAQAogICAgIH0K
IH0KIAotdm9pZCBSYW5nZTo6dGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQpIGNvbnN0Cit2b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9y
PEdyYXBoaWNzUXVhZD4mIHF1YWRzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkgY29uc3QKIHsK
ICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgTm9k
ZSogZW5kQ29udGFpbmVyID0gbV9lbmQuY29udGFpbmVyKCk7CkBAIC0xOTE0LDcgKzE5MTQsNyBA
QAogCiAgICAgbV9vd25lckRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFw
aGljc1F1YWQ+IHF1YWRzOwogICAgIGdldEJvcmRlckFuZFRleHRRdWFkcyhxdWFkcyk7CiAKICAg
ICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7CkBAIC0xOTIyLDExICsxOTIy
LDExIEBACiAKIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gUmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKKyAg
ICBHcmFwaGljc1JlY3QgcmVjdCA9IGJvdW5kaW5nUmVjdCgpOwogICAgIHJldHVybiByZWN0Lmlz
RW1wdHkoKSA/IDAgOiBDbGllbnRSZWN0OjpjcmVhdGUocmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lk
IGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCitzdGF0aWMgdm9pZCBhZGp1c3RHcmFwaGljc1F1YWRzRm9yU2Nyb2xsQW5kQWJz
b2x1dGVab29tQW5kUGFnZVNjYWxlKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcywgRG9jdW1l
bnQqIGRvY3VtZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIEZyYW1lVmlldyog
dmlldyA9IGRvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpAQCAtMTk0MSwxMyArMTk0
MSwxMyBAQAogICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsr
aSkgewogICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlz
aWJsZUNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRl
Wm9vbShxdWFkc1tpXSwgcmVuZGVyZXIpOworICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JB
YnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKICAgICAgICAgaWYgKHBhZ2VTY2FsZSAh
PSAxKQotICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBw
YWdlU2NhbGUpOworICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkRm9yUGFnZVNjYWxlKHF1
YWRzW2ldLCBwYWdlU2NhbGUpOwogICAgIH0KIH0KIAotdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5k
VGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QKK3ZvaWQgUmFuZ2U6Omdl
dEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpIGNvbnN0CiB7
CiAgICAgTm9kZSogc3RhcnRDb250YWluZXIgPSBtX3N0YXJ0LmNvbnRhaW5lcigpOwogICAgIE5v
ZGUqIGVuZENvbnRhaW5lciA9IG1fZW5kLmNvbnRhaW5lcigpOwpAQCAtMTk2Myw5ICsxOTYzLDkg
QEAKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgaWYg
KCFub2RlU2V0LmNvbnRhaW5zKG5vZGUtPnBhcmVudE5vZGUoKSkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGVsZW1lbnRRdWFkczsKKyAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gZWxlbWVudFF1YWRzOwogICAgICAgICAgICAg
ICAgICAgICByZW5kZXJCb3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVhZHMp
OwotICAgICAgICAgICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1
dGVab29tQW5kUGFnZVNjYWxlKGVsZW1lbnRRdWFkcywgbV9vd25lckRvY3VtZW50LmdldCgpLCBy
ZW5kZXJCb3hNb2RlbE9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdEdyYXBoaWNz
UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoZWxlbWVudFF1YWRzLCBt
X293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKIAogICAgICAgICAg
ICAgICAgICAgICBxdWFkcy5hcHBlbmQoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgICAgICB9
CkBAIC0xOTc2LDkgKzE5NzYsOSBAQAogICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9
IChub2RlID09IHN0YXJ0Q29udGFpbmVyKSA/IG1fc3RhcnQub2Zmc2V0KCkgOiAwOwogICAgICAg
ICAgICAgICAgIGludCBlbmRPZmZzZXQgPSAobm9kZSA9PSBlbmRDb250YWluZXIpID8gbV9lbmQu
b2Zmc2V0KCkgOiBJTlRfTUFYOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAgICAgICAgICAgICBWZWN0b3I8R3JhcGhp
Y3NRdWFkPiB0ZXh0UXVhZHM7CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dC0+YWJzb2x1dGVR
dWFkc0ZvclJhbmdlKHRleHRRdWFkcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VT
Y2FsZSh0ZXh0UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7CisgICAg
ICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZFBhZ2VTY2FsZSh0ZXh0UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7
CiAKICAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQodGV4dFF1YWRzKTsKICAgICAgICAgICAg
IH0KQEAgLTE5ODcsMTkgKzE5ODcsMTkgQEAKIH0KIAogICAgIAotRmxvYXRSZWN0IFJhbmdlOjpi
b3VuZGluZ1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJhbmdlOjpib3VuZGluZ1JlY3QoKSBj
b25zdAogewogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBtX293bmVy
RG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7
CiAgICAgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKHF1YWRzKTsKICAgICBpZiAocXVhZHMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIAotICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgR3JhcGhpY3NSZWN0IHJlc3Vs
dDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQogICAgICAg
ICByZXN1bHQudW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0NsaWVudFJlY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xp
ZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIENsaWVu
dFJlY3RfaAogI2RlZmluZSBDbGllbnRSZWN0X2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzksNyArMzksNyBAQAogICAgIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IENsaWVudFJlY3QpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaWVudFJlY3Q+IGNyZWF0ZShjb25zdCBJbnRSZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ2xpZW50UmVjdChyZWN0KSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xp
ZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IENsaWVudFJlY3QocmVjdCkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaWVu
dFJlY3Q+IGNyZWF0ZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbGllbnRSZWN0KHJlY3QpKTsgfQogCiAgICAgICAgIGZsb2F0IHRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC55KCk7IH0KICAgICAgICAgZmxvYXQgcmlnaHQoKSBjb25zdCB7IHJldHVy
biBtX3JlY3QubWF4WCgpOyB9CkBAIC01MSw5ICs1MSw5IEBACiAgICAgcHJpdmF0ZToKICAgICAg
ICAgQ2xpZW50UmVjdCgpOwogICAgICAgICBDbGllbnRSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgQ2xpZW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgQ2xpZW50UmVjdChj
b25zdCBHcmFwaGljc1JlY3QmKTsKIAotICAgICAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgICAg
ICBHcmFwaGljc1JlY3QgbV9yZWN0OwogICAgIH07IAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Citj
bGFzcyBHcmFwaGljc1BvaW50OwogICAgIAogdHlwZWRlZiB2b2lkICgqTm9kZUNhbGxiYWNrKShO
b2RlKiwgdW5zaWduZWQpOwogCkBAIC0xMDksOCArMTA5LDggQEAKIAogICAgIHN0YXRpYyB2b2lk
IGRpc3BhdGNoUG9zdEF0dGFjaENhbGxiYWNrcygpOwogCi0gICAgYm9vbCBnZXRVcHBlckxlZnRD
b3JuZXIoRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihG
bG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoR3JhcGhpY3NQ
b2ludCYpIGNvbnN0OworICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihHcmFwaGljc1BvaW50
JikgY29uc3Q7CiAKICAgICBOb2RlKiBtX2ZpcnN0Q2hpbGQ7CiAgICAgTm9kZSogbV9sYXN0Q2hp
bGQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBDbGllbnRSZWN0TGlzdF9oCiAjZGVmaW5lIENsaWVu
dFJlY3RMaXN0X2gKIAotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UXVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zOSw3ICszOSw3IEBACiAgICAg
Y2xhc3MgQ2xpZW50UmVjdExpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDbGllbnRSZWN0TGlzdD4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0TGlzdCk7IH0KLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IGNyZWF0ZShjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPiYgcXVhZHMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0TGlzdChx
dWFkcykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBjcmVh
dGUoY29uc3QgVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ2xpZW50UmVjdExpc3QocXVhZHMpKTsgfQogICAgICAgICB+Q2xpZW50UmVjdExpc3QoKTsK
IAogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIENsaWVudFJlY3RMaXN0KCk7Ci0gICAgICAgIENsaWVudFJl
Y3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgICAgIENsaWVudFJlY3RMaXN0
KGNvbnN0IFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICAgICAgVmVjdG9yPFJlZlB0cjxD
bGllbnRSZWN0PiA+IG1fbGlzdDsKICAgICB9OyAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
bGllbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVj
dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiB7CiB9CiAKLUNsaWVudFJlY3Q6
OkNsaWVudFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorQ2xpZW50UmVjdDo6Q2xpZW50UmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiAgICAgOiBtX3JlY3QocmVjdCkKIHsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTE1NSw3
ICsxNTUsNyBAQAogCiB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQp
CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdl
VG9SZXBsYWNlLmdldCgpKTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dS
ZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwogICAgIGlmIChib3VuZGluZ0JveC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwpAQCAtMjk4LDcg
KzI5OCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RG
b3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKICAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOwogICAgIH0KQEAgLTMxNiw3
ICszMTYsNyBAQAogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZp
cnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCA9IHdpbmRv
d1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0
KCkpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNs
aWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRv
cFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKICAgICB9CkBAIC0zNjIsMTQgKzM2MiwxNCBAQAog
ICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZShj
b25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpOwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHRleHRRdWFkczsKICAgICByYW5nZS0+
dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRpbmdSZWN0OwogICAgIHNpemVfdCBzaXplID0gdGV4dFF1YWRzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgYm91
bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgpAQCAtMTEz
NCw3ICsxMTM0LDcgQEAKICAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChyZWN0KTsKICAgICBpZiAo
Y2FyZXRQYWludGVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChjYXJldFBhaW50ZXIp
LT5mbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsKLSAgICByZXR1cm4gY2FyZXRQYWludGVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworICAgIHJldHVybiBjYXJldFBhaW50ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
R3JhcGhpY3NSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKIExh
eW91dFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoKQpAQCAtMTczMiw3
ICsxNzMyLDcgQEAKICAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5zaG91
bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CiAK
LUZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpIGNvbnN0CitHcmFwaGljc1JlY3QgRnJhbWVTZWxlY3Rpb246OmJvdW5kcyhib29sIGNsaXBU
b1Zpc2libGVDb250ZW50KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBtX2ZyYW1l
LT5jb250ZW50UmVuZGVyZXIoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3
KCk7CkBAIC0xNzQzLDIwICsxNzQzLDIwIEBACiAgICAgcmV0dXJuIGNsaXBUb1Zpc2libGVDb250
ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZpc2libGVDb250ZW50UmVj
dCgpKSA6IHNlbGVjdGlvblJlY3Q7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBw
ZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMpIGNv
bnN0Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVz
KFZlY3RvcjxHcmFwaGljc1JlY3Q+JiByZWN0YW5nbGVzKSBjb25zdAogewogICAgIFJlbmRlclZp
ZXcqIHJvb3QgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKICAgICBpZiAoIXJvb3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2Zy
YW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCB2aXNp
YmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwog
Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4g
cXVhZHM7CiAgICAgdG9Ob3JtYWxpemVkUmFuZ2UoKS0+dGV4dFF1YWRzKHF1YWRzLCB0cnVlKTsK
IAogICAgIHNpemVfdCBzaXplID0gcXVhZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0g
aW50ZXJzZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCksIHZpc2libGVDb250
ZW50UmVjdCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJz
ZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCksIHZpc2libGVDb250ZW50UmVj
dCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0NCw3ICsyNzQ0LDcgQEAK
ICAgICBBU1NFUlQoc3RhcnRSZW5kZXJlcik7CiAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9
IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0
T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKICAgICBpZiAoc3RhcnRDYXJldFJlY3Qg
IT0gSW50UmVjdCgpKQotICAgICAgICBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHN0YXJ0Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKKyAgICAgICAgc3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChzdGFydENhcmV0UmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CiAKICAgICBJbmxpbmVCb3gqIGVuZElubGluZUJveDsKICAgICBpbnQgZW5k
Q2FyZXRPZmZzZXQ7CkBAIC0yNzU3LDcgKzI3NTcsNyBAQAogICAgIEFTU0VSVChlbmRSZW5kZXJl
cik7CiAgICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxDYXJldFJl
Y3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CiAgICAgaWYgKGVuZENhcmV0UmVjdCAh
PSBJbnRSZWN0KCkpCi0gICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOworICAgICAgICBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChHcmFwaGljc1JlY3QoZW5kQ2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IAogICAgIGlmIChzdGFydENhcmV0UmVjdC55KCkgPT0gZW5kQ2FyZXRSZWN0LnkoKSkgewogICAg
ICAgICAvLyBzdGFydCBhbmQgZW5kIGFyZSBvbiB0aGUgc2FtZSBsaW5lCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjMz
LDkgKzIzMyw5IEBACiAgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4pOwogICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi0gICAgRmxvYXRSZWN0IGJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAK
LSAgICB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVj
dD4mKSBjb25zdDsKKyAgICB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVj
dG9yPEdyYXBoaWNzUmVjdD4mKSBjb25zdDsKIAogICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVu
dEZvcm0oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw3ICs1MDksNyBAQAogewogICAgIEFT
U0VSVChyb290KTsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gcm9vdC0+Ymxv
Y2soKTsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlQmxvY2tQb2ludCA9IGNvbnRhaW5pbmdCbG9j
ay0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNv
bHV0ZUJsb2NrUG9pbnQgPSBjb250YWluaW5nQmxvY2stPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGlj
c1BvaW50KCkpOwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICBhYnNvbHV0ZUJsb2NrUG9pbnQgLT0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5z
Y3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCkBAIC01OTMsNyArNTkzLDcgQEAKICAgICBpZiAobG9jYWxSZWN0Lmlz
RW1wdHkoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBy
ZXR1cm4gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEdyYXBoaWNzUmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwogfQogCiBpbnQgVmlzaWJsZVBvc2l0aW9uOjpsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0Rp
cmVjdGlvbk5hdmlnYXRpb24oKSBjb25zdApAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgLy8gVGhp
cyBpZ25vcmVzIHRyYW5zZm9ybXMgb24gcHVycG9zZSwgZm9yIG5vdy4gVmVydGljYWwgbmF2aWdh
dGlvbiBpcyBkb25lCiAgICAgLy8gd2l0aG91dCBjb25zdWx0aW5nIHRyYW5zZm9ybXMsIHNvIHRo
YXQgJ3VwJyBpbiB0cmFuc2Zvcm1lZCB0ZXh0IGlzICd1cCcKICAgICAvLyByZWxhdGl2ZSB0byB0
aGUgdGV4dCwgbm90IGFic29sdXRlICd1cCcuCi0gICAgRmxvYXRQb2ludCBjYXJldFBvaW50ID0g
cmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShsb2NhbFJlY3QubG9jYXRpb24oKSk7CisgICAgR3Jh
cGhpY3NQb2ludCBjYXJldFBvaW50ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShsb2NhbFJl
Y3QubG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNhcmV0UG9pbnQueCgpIDogY2FyZXRQb2ludC55
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsNyArMTI0LDcgQEAKIAogICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CiAgICAg
VGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCB3aW5kb3dS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKICAgICB2b2lkIG1hcmtQcmVjZWRpbmdX
aGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5k
Kik7CiAKICAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBjbGFzcyBF
bGVtZW50OwogICAgIGNsYXNzIEZpbGVDaG9vc2VyOwogICAgIGNsYXNzIEZpbGVJY29uTG9hZGVy
OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xh
c3MgRnJhbWU7CiAgICAgY2xhc3MgR2VvbG9jYXRpb247CiAgICAgY2xhc3MgR3JhcGhpY3NMYXll
cjsKQEAgLTc5LDEwICs3OSwxMCBAQAogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lk
IGNocm9tZURlc3Ryb3llZCgpID0gMDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICAgICAgdmlydHVhbCBGbG9h
dFJlY3Qgd2luZG93UmVjdCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1Jl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JikgPSAwOworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVj
dCB3aW5kb3dSZWN0KCkgPSAwOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cGFnZVJlY3QoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCkg
PSAwOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpID0gMDsK
ICAgICAKQEAgLTIwOSwxNyArMjA5LDE3IEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVs
YXRlVmlzaXRlZExpbmtzKCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY3VzdG9tSGln
aGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGxpbmVSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50
Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwKICAgICAg
ICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsKICAgICAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBs
b2FkKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RyaW5nJiBnZW5lcmF0ZWRGaWxlbmFtZSk7CiAgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKKyAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTdGF0ZSwgU2Ny
b2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBmbG9hdCBwcm9wb3J0aW9uLCBT
Y3JvbGxiYXJDb250cm9sUGFydE1hc2spOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0
b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0
b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVk
ZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtMjY3LDcgKzI2Nyw3IEBACiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnRVbmRlck1vdXNlLT5mcmFtZSgpOwogICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBmcmFtZSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMTsKLSAgICBJbnRQb2ludCBw
b2ludCA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KHAueCgpICogem9vbUZhY3RvciwgcC55
KCkgKiB6b29tRmFjdG9yKSk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQo
R3JhcGhpY3NQb2ludChwLngoKSAqIHpvb21GYWN0b3IsIHAueSgpICogem9vbUZhY3RvcikpOwog
CiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogICAgIGNs
YXNzIENocm9tZUNsaWVudDsKICAgICBjbGFzcyBGaWxlQ2hvb3NlcjsKICAgICBjbGFzcyBGaWxl
SWNvbkxvYWRlcjsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0
OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEdlb2xvY2F0aW9uOwogICAgIGNsYXNzIEhp
dFRlc3RSZXN1bHQ7CkBAIC04NywxMCArODcsMTAgQEAKICAgICAgICAgdm9pZCBjb250ZW50c1Np
emVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogICAgICAgICB2b2lkIGxh
eW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldFdpbmRvd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKSBj
b25zdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKSBjb25zdDsKIAotICAgICAg
ICBGbG9hdFJlY3QgcGFnZVJlY3QoKSBjb25zdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHBhZ2VS
ZWN0KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcigpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0y
NjEwLDcgKzI2MTAsNyBAQAogICAgIGxheW91dChhbGxvd1N1YnRyZWUpOwogfQogCi12b2lkIEZy
YW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNp
emUsIGZsb2F0IG1heGltdW1TaHJpbmtGYWN0b3IsIEFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxk
QWRqdXN0Vmlld1NpemUpCit2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9u
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtGYWN0b3Is
IEFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxkQWRqdXN0Vmlld1NpemUpCiB7CiAgICAgLy8gRHVt
cGluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fZnJhbWUtPnJlbmRlcmVyKCkpLmFzY2lpKCkg
aXMgYSBnb29kIHRyaWNrIHRvIHNlZQogICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGluZ3MgYmVmb3Jl
IGFuZCBhZnRlciB0aGUgbGF5b3V0CkBAIC0yNjc3LDcgKzI2NzcsNyBAQAogCiBJbnRSZWN0IEZy
YW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBJbnRSZWN0JiByZW5kZXJlclJlY3QpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0
ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlbmRlcmVyUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KHJlbmRlcmVyUmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CiAKICAgICAvLyBDb252ZXJ0IGZyb20gcGFnZSAoImFic29sdXRlIikgdG8g
RnJhbWVWaWV3IGNvb3JkaW5hdGVzLgogICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBo
aWNzU2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFJlY3Q7CiAKQEAgLTQz
LDE4ICs0MywxOCBAQAogICAgIC8vIEJyZWFrIHVwIGEgcGFnZSBpbnRvIHJlY3RzIHdpdGhvdXQg
cmVsYXlvdXQuCiAgICAgLy8gRklYTUU6IFRoaXMgbWVhbnMgdGhhdCBDU1MgcGFnZSBicmVha3Mg
d29uJ3QgYmUgb24gcGFnZSBib3VuZGFyeSBpZiB0aGUgc2l6ZSBpcyBkaWZmZXJlbnQgdGhhbiB3
aGF0IHdhcyBwYXNzZWQgdG8gYmVnaW4oKS4gVGhhdCdzIHByb2JhYmx5IG5vdCBhbHdheXMgZGVz
aXJhYmxlLgogICAgIC8vIEZJWE1FOiBIZWFkZXIgYW5kIGZvb3RlciBoZWlnaHQgc2hvdWxkIGJl
IGFwcGxpZWQgYmVmb3JlIGxheW91dCwgbm90IGFmdGVyLgotICAgIC8vIEZJWE1FOiBUaGUgcHJp
bnRSZWN0IGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB0byBkZXRlcm1pbmUgcGFnZSBhc3BlY3QgcmF0
aW8sIGl0IHdvdWxkIGJlIGJldHRlciB0byBwYXNzIGEgRmxvYXRTaXplIHdpdGggcGFnZSBkaW1l
bnNpb25zIGluc3RlYWQuCi0gICAgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVj
dCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxv
YXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6
b250YWxUaWxpbmcgPSBmYWxzZSk7CisgICAgLy8gRklYTUU6IFRoZSBwcmludFJlY3QgYXJndW1l
bnQgaXMgb25seSB1c2VkIHRvIGRldGVybWluZSBwYWdlIGFzcGVjdCByYXRpbywgaXQgd291bGQg
YmUgYmV0dGVyIHRvIHBhc3MgYSBHcmFwaGljc1NpemUgd2l0aCBwYWdlIGRpbWVuc2lvbnMgaW5z
dGVhZC4KKyAgICB2b2lkIGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0JiBwcmlu
dFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2Vy
U2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRp
bGluZyA9IGZhbHNlKTsKIAogICAgIC8vIERlcHJlY2F0ZWQuIFBhZ2Ugc2l6ZSBjb21wdXRhdGlv
biBpcyBhbHJlYWR5IGluIHRoaXMgY2xhc3MsIGNsaWVudHMgc2hvdWxkbid0IGJlIGNvcHlpbmcg
aXQuCi0gICAgdm9pZCBjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpOworICAgIHZv
aWQgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VT
aXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAogICAgIC8vIFRoZXNl
IGFyZSBvbmx5IHZhbGlkIGFmdGVyIHBhZ2UgcmVjdHMgYXJlIGNvbXB1dGVkLgogICAgIHNpemVf
dCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VSZWN0cy5zaXplKCk7IH0KICAgICBj
b25zdCBJbnRSZWN0JiBwYWdlUmVjdChzaXplX3QgcGFnZU51bWJlcikgY29uc3QgeyByZXR1cm4g
bV9wYWdlUmVjdHNbcGFnZU51bWJlcl07IH0KICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBh
Z2VSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJlY3RzOyB9CiAKLSAgICBmbG9hdCBjb21w
dXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgRmxvYXRTaXplJiBhdmFpbGFibGVQYXBlclNp
emUpOworICAgIGZsb2F0IGNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3Rvcihjb25zdCBHcmFwaGlj
c1NpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSk7CiAKICAgICAvLyBFbnRlciBwcmludCBtb2RlLCB1
cGRhdGluZyBsYXlvdXQgZm9yIG5ldyBwYWdlIHNpemUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBj
YW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGFwcGx5IG5ldyBwcmludCBvcHRpb25zIHdp
dGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4gbW9kZS4KQEAgLTY5LDIyICs2OSwyMiBAQAogICAg
IHZvaWQgZW5kKCk7CiAKICAgICAvLyBVc2VkIGJ5IGxheW91dCB0ZXN0cy4KLSAgICBzdGF0aWMg
aW50IHBhZ2VOdW1iZXJGb3JFbGVtZW50KEVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmIHBhZ2VT
aXplSW5QaXhlbHMpOyAvLyBSZXR1cm5zIC0xIGlmIHBhZ2UgaXNuJ3QgZm91bmQuCisgICAgc3Rh
dGljIGludCBwYWdlTnVtYmVyRm9yRWxlbWVudChFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NTaXpl
JiBwYWdlU2l6ZUluUGl4ZWxzKTsgLy8gUmV0dXJucyAtMSBpZiBwYWdlIGlzbid0IGZvdW5kLgog
ICAgIHN0YXRpYyBTdHJpbmcgcGFnZVByb3BlcnR5KEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcik7CiAgICAgc3RhdGljIGJvb2wgaXNQYWdlQm94
VmlzaWJsZShGcmFtZSogZnJhbWUsIGludCBwYWdlTnVtYmVyKTsKICAgICBzdGF0aWMgU3RyaW5n
IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKEZyYW1lKiBmcmFtZSwgaW50IHBhZ2VOdW1iZXIs
IGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBp
bnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCk7Ci0gICAgc3RhdGljIGludCBudW1iZXJP
ZlBhZ2VzKEZyYW1lKiwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBz
dGF0aWMgaW50IG51bWJlck9mUGFnZXMoRnJhbWUqLCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VT
aXplSW5QaXhlbHMpOwogICAgIC8vIERyYXcgYWxsIHBhZ2VzIGludG8gYSBncmFwaGljcyBjb250
ZXh0IHdpdGggbGluZXMgd2hpY2ggbWVhbiBwYWdlIGJvdW5kYXJpZXMuCiAgICAgLy8gVGhlIGhl
aWdodCBvZiB0aGUgZ3JhcGhpY3MgY29udGV4dCBzaG91bGQgYmUKICAgICAvLyAocGFnZVNpemVJ
blBpeGVscy5oZWlnaHQoKSArIDEpICogbnVtYmVyLW9mLXBhZ2VzIC0gMQotICAgIHN0YXRpYyB2
b2lkIHNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyhGcmFtZSosIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscyk7CisgICAgc3RhdGljIHZvaWQgc3Bv
b2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
R3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKIAogcHJvdGVjdGVkOgogICAgIEZyYW1l
KiBtX2ZyYW1lOwogICAgIFZlY3RvcjxJbnRSZWN0PiBtX3BhZ2VSZWN0czsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBGbG9h
dFNpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAg
ICB2b2lkIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGlj
c1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAog
ICAgIC8vIFVzZWQgdG8gcHJldmVudCBtaXN1c2VzIG9mIGJlZ2luKCkgYW5kIGVuZCgpIChlLmcu
LCBjYWxsIGVuZCB3aXRob3V0IGJlZ2luKS4KICAgICBib29sIG1faXNQcmludGluZzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTYxLDcgKzE2MSw3IEBACiAg
ICAgICAgIGFkZGl0aW9uYWxGZWF0dXJlcy5hcHBlbmQoa2V5U3RyaW5nKTsKIH0KIAotV2luZG93
RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJp
bmcsIGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCkKK1dpbmRvd0ZlYXR1cmVz
OjpXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBjb25z
dCBHcmFwaGljc1JlY3QmIHNjcmVlbkF2YWlsYWJsZVJlY3QpCiAgICAgOiB3aWR0aFNldCh0cnVl
KQogICAgICwgaGVpZ2h0U2V0KHRydWUpCiAgICAgLCBtZW51QmFyVmlzaWJsZShmYWxzZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1
Myw4IEBACiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50VGFyZ2V0Owot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7
CitjbGFzcyBHcmFwaGljc1F1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxGcmFtZVNldEVs
ZW1lbnQ7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgIHZv
aWQgdXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7CiAKICAgICB2b2lkIGRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbigpOwotICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRT
b29uSW5RdWFkKGNvbnN0IEZsb2F0UXVhZCYpOworICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VN
b3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYpOwogCiAgICAgSGl0VGVzdFJl
c3VsdCBoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFk
b3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0U2Nyb2xsYmFycyBzY3JvbGxiYXJzID0gRG9u
dEhpdFRlc3RTY3JvbGxiYXJzLApAQCAtMjkxLDcgKzI5MSw3IEBACiAKICAgICBib29sIGRpc3Bh
dGNoRHJhZ1NyY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIGJvb2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNv
bnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICBib29sIGRyYWdIeXN0ZXJlc2lzRXhjZWVk
ZWQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JU
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5oCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBG
bG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0OwogCiAgICAgc3RydWN0IFdpbmRvd0Zl
YXR1cmVzIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZWxldGUgdGhpcyBjb25zdHJ1Y3Rv
ciBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBjaGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCkBA
IC01NSw3ICs1NSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBXaW5kb3dGZWF0dXJlcyhjb25z
dCBTdHJpbmcmIHdpbmRvd0ZlYXR1cmVzU3RyaW5nKTsKLSAgICAgICAgV2luZG93RmVhdHVyZXMo
Y29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlc1N0cmluZywgY29uc3QgRmxvYXRSZWN0JiBzY3Jl
ZW5BdmFpbGFibGVSZWN0KTsKKyAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBk
aWFsb2dGZWF0dXJlc1N0cmluZywgY29uc3QgR3JhcGhpY3NSZWN0JiBzY3JlZW5BdmFpbGFibGVS
ZWN0KTsKIAogICAgICAgICBmbG9hdCB4OwogICAgICAgICBib29sIHhTZXQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNs
dWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC02NTksNyArNjU5LDcgQEAKICAgICAgICAg
aWYgKCFlZGl0YWJsZUVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFy
Z2V0Tm9kZS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoc2VsZWN0aW9u
RW5kUG9pbnQpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoc2VsZWN0aW9u
RW5kUG9pbnQpKTsKICAgICAgICAgc2VsZWN0aW9uRW5kUG9pbnQgPSByb3VuZGVkSW50UG9pbnQo
ZWRpdGFibGVFbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2lu
dCkpOwogICAgICAgICB0YXJnZXROb2RlID0gZWRpdGFibGVFbGVtZW50OwogICAgIH0KQEAgLTIz
NTQsNyArMjM1NCw3IEBACiAgICAgICAgIG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIuc3RhcnRP
bmVTaG90KGZha2VNb3VzZU1vdmVJbnRlcnZhbCk7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpk
aXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFk
KQordm9pZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVh
ZChjb25zdCBHcmFwaGljc1F1YWQmIHF1YWQpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9m
cmFtZS0+dmlldygpOwogICAgIGlmICghdmlldykKQEAgLTI2ODQsNyArMjY4NCw3IEBACiB9CiAK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotYm9vbCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJl
c2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbikg
Y29uc3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjpkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGZsb2F0RHJhZ1ZpZXdwb3J0TG9jYXRpb24pIGNvbnN0CiB7CiAgICAgSW50
UG9pbnQgZHJhZ1ZpZXdwb3J0TG9jYXRpb24oKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9u
LngoKSwgKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uLnkoKSk7CiAgICAgcmV0dXJuIGRy
YWdIeXN0ZXJlc2lzRXhjZWVkZWQoZHJhZ1ZpZXdwb3J0TG9jYXRpb24pOwpAQCAtMjg0Nyw3ICsy
ODQ3LDcgQEAKICAgICAgICAgaWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1R5cGUgPT0gRHJhZ1NvdXJj
ZUFjdGlvbkRIVE1MKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0
ZSgpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgICAgIEludFNpemUgZGVsdGEgPSBtX21vdXNl
RG93blBvcyAtIHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOwogICAgICAgICAgICAgICAgIGRyYWdT
dGF0ZSgpLm1fZHJhZ0NsaXBib2FyZC0+c2V0RHJhZ0ltYWdlRWxlbWVudChkcmFnU3RhdGUoKS5t
X2RyYWdTcmMuZ2V0KCksIHRvUG9pbnQoZGVsdGEpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTU2LDcgKzE1
Niw3IEBACiAgICAgfTsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVu
dFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShB
dXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5o
IgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01NDgsNyArNTQ4LDcgQEAKICAgICByZXR1cm4gdmll
dygpLT5iYXNlQmFja2dyb3VuZENvbG9yKCkuYmxlbmQoaHRtbEJhY2tncm91bmRDb2xvcikuYmxl
bmQoYm9keUJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJv
b2wgcHJpbnRpbmcsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJp
bmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKK3ZvaWQg
RnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFn
ZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91
bGRBZGp1c3RWaWV3U2l6ZSkKIHsKICAgICAvLyBJbiBzZXR0aW5nIHByaW50aW5nLCB3ZSBzaG91
bGQgbm90IHZhbGlkYXRlIHJlc291cmNlcyBhbHJlYWR5IGNhY2hlZCBmb3IgdGhlIGRvY3VtZW50
LgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3
MDQKQEAgLTU3MSwxMSArNTcxLDExIEBACiAgICAgICAgIGNoaWxkLT5zZXRQcmludGluZyhwcmlu
dGluZywgSW50U2l6ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CiB9CiAKLUZsb2F0U2l6
ZSBGcmFtZTo6cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKGNvbnN0IEZsb2F0U2l6ZSYgb3Jp
Z2luYWxTaXplLCBjb25zdCBGbG9hdFNpemUmIGV4cGVjdGVkU2l6ZSkKK0dyYXBoaWNzU2l6ZSBG
cmFtZTo6cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb3Jp
Z2luYWxTaXplLCBjb25zdCBHcmFwaGljc1NpemUmIGV4cGVjdGVkU2l6ZSkKIHsKLSAgICBGbG9h
dFNpemUgcmVzdWx0U2l6ZTsKKyAgICBHcmFwaGljc1NpemUgcmVzdWx0U2l6ZTsKICAgICBpZiAo
IWNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisgICAgICAg
IHJldHVybiBHcmFwaGljc1NpemUoKTsKIAogICAgIGlmIChjb250ZW50UmVuZGVyZXIoKS0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBmbG9hdCByYXRpbyA9
IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAvIG9yaWdpbmFsU2l6ZS53aWR0aCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9F
dmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQAogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3Mg
RXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7Ci0gICAgY2xhc3Mg
RmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAg
ICBjbGFzcyBIaXN0b3J5OwogICAgIGNsYXNzIElEQkZhY3Rvcnk7CkBAIC0xMDYsNyArMTA2LDcg
QEAKICAgICAgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZl
bnRzKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50
cygpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdFdpbmRvd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiBzY3JlZW4sIEZsb2F0UmVjdCYgd2luZG93LCBjb25zdCBGbG9hdFJlY3QmIHBlbmRpbmdD
aGFuZ2VzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0V2luZG93UmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHNjcmVlbiwgR3JhcGhpY3NSZWN0JiB3aW5kb3csIGNvbnN0IEdyYXBoaWNzUmVj
dCYgcGVuZGluZ0NoYW5nZXMpOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRo
aXMgZnVuY3Rpb24gb25jZSBWOCBzaG93TW9kYWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9N
V2luZG93LgogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZU1vZGFsRGlhbG9nRmVhdHVyZXMoY29u
c3QgU3RyaW5nJiwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIGNsYXNzIENvbG9yOwog
Y2xhc3MgRXZlbnQ7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFz
cyBGcmFtZTsKIGNsYXNzIEZyYW1lQWN0aW9uU2NoZWR1bGVyOwogY2xhc3MgSW50UmVjdDsKQEAg
LTIzMiw3ICsyMzIsNyBAQAogICAgIHZvaWQgc2V0SXNWaXN1YWxseU5vbkVtcHR5KCkgeyBtX2lz
VmlzdWFsbHlOb25FbXB0eSA9IHRydWU7IH0KIAogICAgIHZvaWQgZm9yY2VMYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUgPSBmYWxzZSk7Ci0gICAgdm9pZCBmb3JjZUxheW91dEZvclBhZ2luYXRpb24o
Y29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua0ZhY3RvciwgQWRq
dXN0Vmlld1NpemVPck5vdCk7CisgICAgdm9pZCBmb3JjZUxheW91dEZvclBhZ2luYXRpb24oY29u
c3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua0ZhY3RvciwgQWRq
dXN0Vmlld1NpemVPck5vdCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgcmV0YWlu
ZWQgYmVjYXVzZSBvZiBlbWJlZGRlZCBXZWJWaWV3cyBpbiBBcHBLaXQuICBXaGVuIGEgV2ViVmll
dyBpcyBlbWJlZGRlZCBpbnNpZGUKICAgICAvLyBzb21lIGVuY2xvc2luZyB2aWV3IHdpdGggYXV0
by1wYWdpbmF0aW9uLCBubyBjYWxsIGhhcHBlbnMgdG8gcmVzaXplIHRoZSB2aWV3LiAgVGhlIG5l
dyBwYWdpbmF0aW9uIG1vZGVsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDgg
KzE0Nyw4IEBACiAKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3Q7IC8vIGNhbiBi
ZSBOVUxMCiAKLSAgICAgICAgdm9pZCBzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjb25zdCBG
bG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8sIEFkanVzdFZpZXdT
aXplT3JOb3QpOwotICAgICAgICBGbG9hdFNpemUgcmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlv
KGNvbnN0IEZsb2F0U2l6ZSYgb3JpZ2luYWxTaXplLCBjb25zdCBGbG9hdFNpemUmIGV4cGVjdGVk
U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywgY29uc3QgR3Jh
cGhpY3NTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvLCBBZGp1c3RWaWV3
U2l6ZU9yTm90KTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdS
YXRpbyhjb25zdCBHcmFwaGljc1NpemUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgR3JhcGhpY3NTaXpl
JiBleHBlY3RlZFNpemUpOwogCiAgICAgICAgIGJvb2wgaW5WaWV3U291cmNlTW9kZSgpIGNvbnN0
OwogICAgICAgICB2b2lkIHNldEluVmlld1NvdXJjZU1vZGUoYm9vbCA9IHRydWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMzIwLDcgKzMyMCw3IEBA
CiAvLyAgICBzY3JlZW4gcmVjdC4KIC8vIDUpIFRyYW5zbGF0ZSB0aGUgd2luZG93IHJlY3QgY29v
cmRpbmF0ZXMgdG8gYmUgd2l0aGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mCiAvLyAgICB0aGUg
c2NyZWVuIHJlY3QuCi12b2lkIERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBGbG9h
dFJlY3QmIHNjcmVlbiwgRmxvYXRSZWN0JiB3aW5kb3csIGNvbnN0IEZsb2F0UmVjdCYgcGVuZGlu
Z0NoYW5nZXMpCit2b2lkIERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBHcmFwaGlj
c1JlY3QmIHNjcmVlbiwgR3JhcGhpY3NSZWN0JiB3aW5kb3csIGNvbnN0IEdyYXBoaWNzUmVjdCYg
cGVuZGluZ0NoYW5nZXMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIGluIGEgdmFsaWQgc3Rh
dGUgYmVmb3JlIGFkanVzdGluZyBkaW1lbnNpb25zLgogICAgIEFTU0VSVChpc2Zpbml0ZShzY3Jl
ZW4ueCgpKSk7CkBAIC0zNDMsOCArMzQzLDggQEAKICAgICAgICAgd2luZG93LnNldEhlaWdodChw
ZW5kaW5nQ2hhbmdlcy5oZWlnaHQoKSk7CiAgICAgCiAgICAgLy8gUmVzaXplIHRoZSB3aW5kb3cg
dG8gYmV0d2VlbiAxMDAgYW5kIHRoZSBzY3JlZW4gd2lkdGggYW5kIGhlaWdodC4KLSAgICB3aW5k
b3cuc2V0V2lkdGgobWluKG1heCgxMDAuMGYsIHdpbmRvdy53aWR0aCgpKSwgc2NyZWVuLndpZHRo
KCkpKTsKLSAgICB3aW5kb3cuc2V0SGVpZ2h0KG1pbihtYXgoMTAwLjBmLCB3aW5kb3cuaGVpZ2h0
KCkpLCBzY3JlZW4uaGVpZ2h0KCkpKTsKKyAgICB3aW5kb3cuc2V0V2lkdGgobWluKG1heDxHcmFw
aGljc1VuaXQ+KDEwMC4wZiwgd2luZG93LndpZHRoKCkpLCBzY3JlZW4ud2lkdGgoKSkpOworICAg
IHdpbmRvdy5zZXRIZWlnaHQobWluKG1heDxHcmFwaGljc1VuaXQ+KDEwMC4wZiwgd2luZG93Lmhl
aWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8gQ29uc3RyYWluIHRoZSB3
aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KICAgICB3aW5kb3cuc2V0WChtYXgoc2NyZWVu
LngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5tYXhYKCkgLSB3aW5kb3cud2lkdGgoKSkpKTsK
QEAgLTEzMTUsNyArMTMxNSw3IEBACiAKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIEZsb2F0UG9pbnQgcGFnZVBv
aW50KHAtPngoKSwgcC0+eSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHBhZ2VQb2ludChwLT54KCks
IHAtPnkoKSk7CiAgICAgcGFnZVBvaW50ID0gbm9kZS0+Y29udmVydFRvUGFnZShwYWdlUG9pbnQp
OwogICAgIHJldHVybiBXZWJLaXRQb2ludDo6Y3JlYXRlKHBhZ2VQb2ludC54KCksIHBhZ2VQb2lu
dC55KCkpOwogfQpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAogICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgRmxvYXRQ
b2ludCBub2RlUG9pbnQocC0+eCgpLCBwLT55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgbm9kZVBv
aW50KHAtPngoKSwgcC0+eSgpKTsKICAgICBub2RlUG9pbnQgPSBub2RlLT5jb252ZXJ0RnJvbVBh
Z2Uobm9kZVBvaW50KTsKICAgICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShub2RlUG9pbnQu
eCgpLCBub2RlUG9pbnQueSgpKTsKIH0KQEAgLTE0MDAsOCArMTQwMCw4IEBACiAgICAgaWYgKG1f
ZnJhbWUgIT0gcGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IHVw
ZGF0ZSA9IGZyOworICAgIEdyYXBoaWNzUmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dS
ZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZSA9IGZyOwogICAgIHVwZGF0ZS5tb3ZlKHgs
IHkpOwogICAgIC8vIFNlY3VyaXR5IGNoZWNrICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJz
YWxCcm93c2VyV3JpdGUgdG8gZGlzYWJsZSB0aGlzIGNoZWNrLi4uKQogICAgIGFkanVzdFdpbmRv
d1JlY3Qoc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSwgZnIs
IHVwZGF0ZSk7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBACiAgICAgaWYgKG1fZnJhbWUgIT0gcGFn
ZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBmciA9IHBh
Z2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IHNyID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICBHcmFwaGljc1JlY3Qg
ZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBzciA9
IHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgZnIu
c2V0TG9jYXRpb24oc3IubG9jYXRpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHVwZGF0ZSA9IGZyOwor
ICAgIEdyYXBoaWNzUmVjdCB1cGRhdGUgPSBmcjsKICAgICB1cGRhdGUubW92ZSh4LCB5KTsgICAg
IAogICAgIC8vIFNlY3VyaXR5IGNoZWNrICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJzYWxC
cm93c2VyV3JpdGUgdG8gZGlzYWJsZSB0aGlzIGNoZWNrLi4uKQogICAgIGFkanVzdFdpbmRvd1Jl
Y3Qoc3IsIGZyLCB1cGRhdGUpOwpAQCAtMTQ0Miw5ICsxNDQyLDkgQEAKICAgICBpZiAobV9mcmFt
ZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0
IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKLSAgICBGbG9hdFNpemUgZGVzdCA9
IGZyLnNpemUoKSArIEZsb2F0U2l6ZSh4LCB5KTsKLSAgICBGbG9hdFJlY3QgdXBkYXRlKGZyLmxv
Y2F0aW9uKCksIGRlc3QpOworICAgIEdyYXBoaWNzUmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53
aW5kb3dSZWN0KCk7CisgICAgR3JhcGhpY3NTaXplIGRlc3QgPSBmci5zaXplKCkgKyBHcmFwaGlj
c1NpemUoeCwgeSk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZShmci5sb2NhdGlvbigpLCBkZXN0
KTsKICAgICBhZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZy
YW1lKCktPnZpZXcoKSksIGZyLCB1cGRhdGUpOwogICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRXaW5k
b3dSZWN0KGZyKTsKIH0KQEAgLTE0NjEsOSArMTQ2MSw5IEBACiAgICAgaWYgKG1fZnJhbWUgIT0g
cGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBmciA9
IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRTaXplIGRlc3QgPSBGbG9h
dFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgRmxvYXRSZWN0IHVwZGF0ZShmci5sb2NhdGlvbigp
LCBkZXN0KTsKKyAgICBHcmFwaGljc1JlY3QgZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVj
dCgpOworICAgIEdyYXBoaWNzU2l6ZSBkZXN0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIEdyYXBoaWNzUmVjdCB1cGRhdGUoZnIubG9jYXRpb24oKSwgZGVzdCk7CiAgICAgYWRq
dXN0V2luZG93UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCkpLCBmciwgdXBkYXRlKTsKICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcik7
CiB9CkBAIC0xODI2LDcgKzE4MjYsNyBAQAogICAgIH0KIAogICAgIFdpbmRvd0ZlYXR1cmVzIHdp
bmRvd0ZlYXR1cmVzKHdpbmRvd0ZlYXR1cmVzU3RyaW5nKTsKLSAgICBGbG9hdFJlY3Qgd2luZG93
UmVjdCh3aW5kb3dGZWF0dXJlcy54U2V0ID8gd2luZG93RmVhdHVyZXMueCA6IDAsIHdpbmRvd0Zl
YXR1cmVzLnlTZXQgPyB3aW5kb3dGZWF0dXJlcy55IDogMCwKKyAgICBHcmFwaGljc1JlY3Qgd2lu
ZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54U2V0ID8gd2luZG93RmVhdHVyZXMueCA6IDAsIHdpbmRv
d0ZlYXR1cmVzLnlTZXQgPyB3aW5kb3dGZWF0dXJlcy55IDogMCwKICAgICAgICAgd2luZG93RmVh
dHVyZXMud2lkdGhTZXQgPyB3aW5kb3dGZWF0dXJlcy53aWR0aCA6IDAsIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodFNldCA/IHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA6IDApOwogICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLT5wYWdlKCk7CiAgICAgRE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KHNjcmVl
bkF2YWlsYWJsZVJlY3QocGFnZSA/IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkgOiAwKSwgd2lu
ZG93UmVjdCwgd2luZG93UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZpbGVJY29uTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKQEAgLTEzMiwx
NyArMTMyLDE3IEBACiAgICAgbV9jbGllbnQtPnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCk7CiB9
CiAKLXZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29u
c3QKK3ZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkg
Y29uc3QKIHsKICAgICBtX2NsaWVudC0+c2V0V2luZG93UmVjdChyZWN0KTsKIH0KIAotRmxvYXRS
ZWN0IENocm9tZTo6d2luZG93UmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3QgQ2hyb21lOjp3aW5k
b3dSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jbGllbnQtPndpbmRvd1JlY3QoKTsKIH0K
IAotRmxvYXRSZWN0IENocm9tZTo6cGFnZVJlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IENocm9t
ZTo6cGFnZVJlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudC0+cGFnZVJlY3QoKTsK
IH0KQEAgLTUxMywxMiArNTEzLDEyIEBACiB7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6
OmN1c3RvbUhpZ2hsaWdodFJlY3QoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZs
b2F0UmVjdCYpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewotICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLXZv
aWQgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCkK
K3ZvaWQgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgYm9v
bCwgYm9vbCkKIHsKIH0KIApAQCAtNTMzLDE0ICs1MzMsMTQgQEAKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBTY3JvbGxiYXJDb250cm9sU2l6ZSwKK2Jvb2wg
Q2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmLCBTY3JvbGxiYXJDb250cm9sU2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBh
cnQsIGJvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQs
IGZsb2F0LCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2spCiB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIENocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikKK2Jvb2wgQ2hyb21lQ2xpZW50OjpwYWludEN1c3Rv
bVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyZWVu
LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU2NyZWVuLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBlbmQoKTsKIH0KIAotdm9p
ZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBwcmludFJl
Y3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2Nh
bGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRpbGlu
ZykKK3ZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEdyYXBoaWNzUmVj
dCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxv
YXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6
b250YWxUaWxpbmcpCiB7CiAgICAgbV9wYWdlUmVjdHMuY2xlYXIoKTsKICAgICBvdXRQYWdlSGVp
Z2h0ID0gMDsKQEAgLTcwLDcgKzcwLDcgQEAKIAogICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0b1Jl
bmRlclZpZXcobV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CiAgICAgY29uc3QgSW50
UmVjdCYgZG9jdW1lbnRSZWN0ID0gdmlldy0+ZG9jdW1lbnRSZWN0KCk7Ci0gICAgRmxvYXRTaXpl
IHBhZ2VTaXplID0gbV9mcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0U2l6
ZShwcmludFJlY3Qud2lkdGgoKSwgcHJpbnRSZWN0LmhlaWdodCgpKSwgRmxvYXRTaXplKGRvY3Vt
ZW50UmVjdC53aWR0aCgpLCBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHcmFwaGljc1Np
emUgcGFnZVNpemUgPSBtX2ZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oR3JhcGhp
Y3NTaXplKHByaW50UmVjdC53aWR0aCgpLCBwcmludFJlY3QuaGVpZ2h0KCkpLCBHcmFwaGljc1Np
emUoZG9jdW1lbnRSZWN0LndpZHRoKCksIGRvY3VtZW50UmVjdC5oZWlnaHQoKSkpOwogICAgIGZs
b2F0IHBhZ2VXaWR0aCA9IHBhZ2VTaXplLndpZHRoKCk7CiAgICAgZmxvYXQgcGFnZUhlaWdodCA9
IHBhZ2VTaXplLmhlaWdodCgpOwogCkBAIC04MiwxNiArODIsMTYgQEAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChGbG9h
dFNpemUocGFnZVdpZHRoIC8gdXNlclNjYWxlRmFjdG9yLCBwYWdlSGVpZ2h0IC8gdXNlclNjYWxl
RmFjdG9yKSwgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICBjb21wdXRlUGFnZVJlY3RzV2l0
aFBhZ2VTaXplSW50ZXJuYWwoR3JhcGhpY3NTaXplKHBhZ2VXaWR0aCAvIHVzZXJTY2FsZUZhY3Rv
ciwgcGFnZUhlaWdodCAvIHVzZXJTY2FsZUZhY3RvciksIGFsbG93SG9yaXpvbnRhbFRpbGluZyk7
CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxp
bmcpCit2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShjb25z
dCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGls
aW5nKQogewogICAgIG1fcGFnZVJlY3RzLmNsZWFyKCk7CiAgICAgY29tcHV0ZVBhZ2VSZWN0c1dp
dGhQYWdlU2l6ZUludGVybmFsKHBhZ2VTaXplSW5QaXhlbHMsIGFsbG93SG9yaXpvbnRhbFRpbGlu
Zyk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXpl
SW50ZXJuYWwoY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzLCBib29sIGFsbG93SW5s
aW5lRGlyZWN0aW9uVGlsaW5nKQordm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNX
aXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMs
IGJvb2wgYWxsb3dJbmxpbmVEaXJlY3Rpb25UaWxpbmcpCiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5k
b2N1bWVudCgpIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NSwxMyArMTY1LDEzIEBACiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGFkanVzdCBwcmlu
dGluZyBwYXJhbWV0ZXJzIHdpdGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4gbW9kZS4KICAgICBt
X2lzUHJpbnRpbmcgPSB0cnVlOwogCi0gICAgRmxvYXRTaXplIG1pbkxheW91dFNpemUgPSBtX2Zy
YW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
LCBGbG9hdFNpemUod2lkdGggKiBwcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIGhlaWdodCAq
IHByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOworICAgIEdyYXBoaWNzU2l6ZSBtaW5MYXlv
dXRTaXplID0gbV9mcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6
ZSh3aWR0aCwgaGVpZ2h0KSwgR3JhcGhpY3NTaXplKHdpZHRoICogcHJpbnRpbmdNaW5pbXVtU2hy
aW5rRmFjdG9yLCBoZWlnaHQgKiBwcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKIAogICAg
IC8vIFRoaXMgY2hhbmdlcyBsYXlvdXQsIHNvIGNhbGxlcnMgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB0aGV5IGRvbid0IHBhaW50IHRvIHNjcmVlbiB3aGlsZSBpbiBwcmludGluZyBtb2RlLgogICAg
IG1fZnJhbWUtPnNldFByaW50aW5nKHRydWUsIG1pbkxheW91dFNpemUsIHByaW50aW5nTWF4aW11
bVNocmlua0ZhY3RvciAvIHByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgQWRqdXN0Vmlld1Np
emUpOwogfQogCi1mbG9hdCBQcmludENvbnRleHQ6OmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3Rv
cihjb25zdCBGbG9hdFNpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSkKK2Zsb2F0IFByaW50Q29udGV4
dDo6Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yKGNvbnN0IEdyYXBoaWNzU2l6ZSYgYXZhaWxh
YmxlUGFwZXJTaXplKQogewogICAgIGlmICghbV9mcmFtZS0+dmlldygpKQogICAgICAgICByZXR1
cm4gMTsKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgIGZsb2F0IHNjYWxlID0gd2lkdGggLyBwYWdl
UmVjdC53aWR0aCgpOwogCiAgICAgY3R4LnNhdmUoKTsKLSAgICBjdHguc2NhbGUoRmxvYXRTaXpl
KHNjYWxlLCBzY2FsZSkpOworICAgIGN0eC5zY2FsZShHcmFwaGljc1NpemUoc2NhbGUsIHNjYWxl
KSk7CiAgICAgY3R4LnRyYW5zbGF0ZSgtcGFnZVJlY3QueCgpLCAtcGFnZVJlY3QueSgpKTsKICAg
ICBjdHguY2xpcChwYWdlUmVjdCk7CiAgICAgbV9mcmFtZS0+dmlldygpLT5wYWludENvbnRlbnRz
KCZjdHgsIHBhZ2VSZWN0KTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogewogICAgIEFTU0VSVChtX2lz
UHJpbnRpbmcpOwogICAgIG1faXNQcmludGluZyA9IGZhbHNlOwotICAgIG1fZnJhbWUtPnNldFBy
aW50aW5nKGZhbHNlLCBGbG9hdFNpemUoKSwgMCwgQWRqdXN0Vmlld1NpemUpOworICAgIG1fZnJh
bWUtPnNldFByaW50aW5nKGZhbHNlLCBHcmFwaGljc1NpemUoKSwgMCwgQWRqdXN0Vmlld1NpemUp
OwogfQogCiBzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIGVuY2xvc2luZ0JveE1vZGVsT2Jq
ZWN0KFJlbmRlck9iamVjdCogb2JqZWN0KQpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgcmV0dXJu
IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKIH0KIAotaW50IFByaW50Q29udGV4dDo6
cGFnZU51bWJlckZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgRmxvYXRTaXplJiBw
YWdlU2l6ZUluUGl4ZWxzKQoraW50IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQog
ewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBub3QgZnJlZWQgZHVyaW5nIHRoZSBs
YXlvdXQuCiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnRSZWYoZWxlbWVudCk7CkBAIC0yNDEs
MTAgKzI0MSwxMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBGcmFtZSogZnJhbWUgPSBl
bGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIEZsb2F0UmVjdCBwYWdlUmVjdChGbG9h
dFBvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBHcmFwaGljc1JlY3QgcGFnZVJl
Y3QoR3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBpeGVscyk7CiAgICAgUHJpbnRDb250
ZXh0IHByaW50Q29udGV4dChmcmFtZSk7CiAgICAgcHJpbnRDb250ZXh0LmJlZ2luKHBhZ2VSZWN0
LndpZHRoKCksIHBhZ2VSZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFNpemUgc2NhbGVkUGFnZVNp
emUgPSBwYWdlU2l6ZUluUGl4ZWxzOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZWRQYWdlU2l6ZSA9
IHBhZ2VTaXplSW5QaXhlbHM7CiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUtPnZpZXco
KS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAgIHByaW50
Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXplLCBmYWxz
ZSk7CiAKQEAgLTI5OSwyMSArMjk5LDIxIEBACiAgICAgICAgICAgIFN0cmluZzo6bnVtYmVyKG1h
cmdpblRvcCkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihtYXJnaW5SaWdodCkgKyAnICcgKyBTdHJp
bmc6Om51bWJlcihtYXJnaW5Cb3R0b20pICsgJyAnICsgU3RyaW5nOjpudW1iZXIobWFyZ2luTGVm
dCk7CiB9CiAKLWludCBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoRnJhbWUqIGZyYW1lLCBj
b25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMpCitpbnQgUHJpbnRDb250ZXh0OjpudW1i
ZXJPZlBhZ2VzKEZyYW1lKiBmcmFtZSwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4
ZWxzKQogewogICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAotICAgIEZs
b2F0UmVjdCBwYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAg
ICBHcmFwaGljc1JlY3QgcGFnZVJlY3QoR3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBp
eGVscyk7CiAgICAgUHJpbnRDb250ZXh0IHByaW50Q29udGV4dChmcmFtZSk7CiAgICAgcHJpbnRD
b250ZXh0LmJlZ2luKHBhZ2VSZWN0LndpZHRoKCksIHBhZ2VSZWN0LmhlaWdodCgpKTsKICAgICAv
LyBBY2NvdW50IGZvciBzaHJpbmstdG8tZml0LgotICAgIEZsb2F0U2l6ZSBzY2FsZWRQYWdlU2l6
ZSA9IHBhZ2VTaXplSW5QaXhlbHM7CisgICAgR3JhcGhpY3NTaXplIHNjYWxlZFBhZ2VTaXplID0g
cGFnZVNpemVJblBpeGVsczsKICAgICBzY2FsZWRQYWdlU2l6ZS5zY2FsZShmcmFtZS0+dmlldygp
LT5jb250ZW50c1NpemUoKS53aWR0aCgpIC8gcGFnZVJlY3Qud2lkdGgoKSk7CiAgICAgcHJpbnRD
b250ZXh0LmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemUoc2NhbGVkUGFnZVNpemUsIGZhbHNl
KTsKICAgICByZXR1cm4gcHJpbnRDb250ZXh0LnBhZ2VDb3VudCgpOwogfQogCi12b2lkIFByaW50
Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKEZyYW1lKiBmcmFtZSwgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBp
eGVscykKK3ZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoRnJh
bWUqIGZyYW1lLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhp
Y3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQogewogICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkg
fHwgIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm47CkBAIC0zMjQsNyArMzI0LDcgQEAKICAgICBwcmludENvbnRleHQuYmVnaW4o
cGFnZVNpemVJblBpeGVscy53aWR0aCgpLCBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpKTsKIAog
ICAgIGZsb2F0IHBhZ2VIZWlnaHQ7Ci0gICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHBhZ2VTaXplSW5QaXhlbHMpLCAwLCAwLCAxLCBw
YWdlSGVpZ2h0KTsKKyAgICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0cyhHcmFwaGljc1Jl
Y3QoR3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBpeGVscyksIDAsIDAsIDEsIHBhZ2VI
ZWlnaHQpOwogCiAgICAgY29uc3QgZmxvYXQgcGFnZVdpZHRoID0gcGFnZVNpemVJblBpeGVscy53
aWR0aCgpOwogICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFnZVJlY3RzID0gcHJpbnRDb250
ZXh0LnBhZ2VSZWN0cygpOwpAQCAtMzMyLDExICszMzIsMTEgQEAKIAogICAgIC8vIEZpbGwgdGhl
IHdob2xlIGJhY2tncm91bmQgYnkgd2hpdGUuCiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihDb2xvcigyNTUsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ3Jh
cGhpY3NDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBwYWdlV2lkdGgsIHRvdGFsSGVp
Z2h0KSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBw
YWdlV2lkdGgsIHRvdGFsSGVpZ2h0KSk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwog
ICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgdG90YWxIZWlnaHQpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBncmFwaGljc0NvbnRleHQu
c2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAKICAgICBpbnQgY3VycmVudEhlaWdodCA9IDA7
CiAgICAgZm9yIChzaXplX3QgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgcGFnZVJlY3RzLnNp
emUoKTsgcGFnZUluZGV4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsKIGNs
YXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB2aXJ0dWFsIH5T
Y3JvbGxhYmxlQXJlYSgpOwogCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwotICAgIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAgICAgdm9p
ZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZs
b2F0IG9mZnNldCk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZs
b2F0IHgpOwogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB4
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCkBAIC05OSw3ICs5OSw3IEBACiAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9y
KCktPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwog
fQogCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQordm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAg
ICBzY3JvbGxBbmltYXRvcigpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0
KTsKIH0KQEAgLTExNCwxMiArMTE0LDEyIEBACiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCkKIHsKLSAgICBzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludCh4LCBzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50
UG9zaXRpb24oKS55KCkpKTsKKyAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oR3Jh
cGhpY3NQb2ludCh4LCBzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihmbG9hdCB5KQogewotICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBv
aW50KHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOworICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihHcmFwaGljc1BvaW50KHNjcm9sbEFuaW1hdG9y
KCktPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVh
OjpoYW5kbGVXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGll
bnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTE4NCw3ICsx
ODQsNyBAQAogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKICAgICAgICAg
UmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwogCi0gICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQ7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBzaGFkb3dPZmZzZXQ7CiAKICAgICAgICAgZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzOwogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyOwpAQCAtMjg1LDcg
KzI4NSw3IEBACiAgICAgICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQgZHJhd0Nv
bnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgc2hv
dWxkQW50aWFsaWFzID0gZmFsc2UpOworICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlh
cyA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAg
ICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKQEAgLTI5MywyMyArMjkzLDIzIEBACiAg
ICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRlci1yYWRpdXMgaW4gQ1NTKSBqdXN0
IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQuCiAgICAgICAgIHZvaWQgc3Ryb2tlQXJj
KGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3Bhbik7CiAKLSAgICAg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwotICAgICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdlbmVyYXRvciYpOwotICAgICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IENv
bG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiwgR2VuZXJhdG9yJik7CisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAg
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0
b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVm
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7
CiAgICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBJbnRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKIAotICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7
CiAKLSAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVX
aWR0aCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBmbG9h
dCBsaW5lV2lkdGgpOwogCiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9y
ID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7
CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgICAgIHZvaWQgZHJh
d0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIC0xLCAtMSksCiAg
ICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29t
cG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CkBAIC0z
MjEsNDUgKzMyMSw0NSBAQAogICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9
IGZhbHNlKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAt
MSwgLTEpLAorICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25z
dCBHcmFwaGljc1JlY3QmIHNyY1JlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgLTEsIC0xKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKIAogICAgICAgICB2
b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwog
ICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkg
Y29uc3Q7CiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9p
ZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGNsaXAoY29uc3QgR3JhcGhp
Y3NSZWN0Jik7CiAgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IFJvdW5kZWRS
ZWN0Jik7CiAgICAgICAgIHZvaWQgYWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVj
dCYsIGludCB0aGlja25lc3MpOwogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgSW50UmVjdCYp
OwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYpOwog
ICAgICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7Ci0gICAgICAgIHZv
aWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCos
IGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7Ci0gICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGlwQ29udmV4
UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiwgYm9vbCBhbnRp
YWxpYXMgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgICAgICAKICAgICAgICAgSW50UmVjdCBjbGlw
Qm91bmRzKCkgY29uc3Q7CiAKICAgICAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdp
bmdNb2RlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzKTsKIAotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
OwotICAgICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0
UnVuJiAsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tID0gMCwgaW50IHRvID0gLTEpOwotICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBG
b250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBk
cmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFj
ZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQgZHJhd1RleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udCYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBH
cmFwaGljc1BvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQg
ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYpOworICAgICAgICB2b2lkIGRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEZvbnQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBoLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsK
IAogICAgICAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CiAgICAgICAgICAgICBSb3VuZEFsbFNpZGVz
LAogICAgICAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCiAgICAgICAgIH07Ci0gICAg
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5k
aW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpOworICAgICAgICBHcmFwaGljc1JlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNp
ZGVzKTsKIAotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4
dChjb25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAg
ICAgICBlbnVtIFRleHRDaGVja2luZ0xpbmVTdHlsZSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tp
bmdTcGVsbGluZ0xpbmVTdHlsZSwKICAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5l
U3R5bGUsCiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQogICAg
ICAgICB9OwotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlKTsKKyAgICAgICAgdm9p
ZCBkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgd2lk
dGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSk7CiAKICAgICAgICAgYm9vbCBwYWludGluZ0Rpc2Fi
bGVkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxlZChib29sKTsKQEAg
LTM3MSwxMiArMzcxLDEyIEBACiAgICAgICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
IAogICAgICAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFNoYWRv
dyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Up
OworICAgICAgICB2b2lkIHNldFNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmLCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAgICAgICAvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KICAg
ICAgICAgLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAg
ICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNv
bnN0IEdyYXBoaWNzU2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7
CiAKLSAgICAgICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYsIENv
bG9yU3BhY2UmKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRTaGFkb3coR3JhcGhpY3NTaXplJiwg
ZmxvYXQmLCBDb2xvciYsIENvbG9yU3BhY2UmKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVhclNo
YWRvdygpOwogCiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVj
dD4mLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CkBAIC00MDAsOSArNDAw
LDkgQEAKICAgICAgICAgdm9pZCBjYW52YXNDbGlwKGNvbnN0IFBhdGgmKTsKICAgICAgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpOworICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogICAgICAg
ICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAgICAgIHZvaWQgdHJhbnNs
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsgfQorICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUm
IHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KICAgICAg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CiAKICAgICAgICAgdm9pZCBzZXRV
UkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0Jik7CkBAIC00MTYsMTMgKzQxNiwx
MyBAQAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSgpIGNv
bnN0OwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSgpOwogICAgICAg
ICB2b2lkIHJlc2V0QWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgR3JhZGllbnQqKTsKLSAgICAgICAgdm9pZCBkcmF3VGV4dChj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsK
KyAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFkaWVu
dCopOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBo
cywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpOwogICAgICAgICB2b2lkIGRyYXdGcmFtZUNv
bnRyb2woY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgc3RhdGUp
OwogICAgICAgICB2b2lkIGRyYXdGb2N1c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCk7CiAgICAg
ICAgIHZvaWQgcGFpbnRUZXh0RmllbGQoY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgc3Rh
dGUpOwogICAgICAgICB2b2lkIGRyYXdCaXRtYXAoU2hhcmVkQml0bWFwKiwgY29uc3QgSW50UmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgdm9pZCBkcmF3
Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAqLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNp
emUpOworICAgICAgICB2b2lkIGRyYXdCaXRtYXBQYXR0ZXJuKFNoYXJlZEJpdG1hcCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RS
ZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7CiAgICAgICAgIHZvaWQgZHJhd0lj
b24oSElDT04gaWNvbiwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgVUlOVCBmbGFncyk7CiAgICAg
ICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0
QWxwaGFCbGVuZCA9IGZhbHNlLCBib29sIG1heUNyZWF0ZUJpdG1hcCA9IHRydWUpOyAvLyBUaGUg
cGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNvbXBvc2l0aW5n
IGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgpAQCAtNDc5LDcgKzQ3OSw3IEBACiAjaWYgUExB
VEZPUk0oV1gpCiAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgYSBidWcgd2hl
cmVieSBnZXR0aW5nIGFuIEhEQyBmcm9tIGEgR0RJKyBjb250ZXh0CiAgICAgICAgIC8vIGxvc2Vz
IHRoZSBzY2FsZSBvcGVyYXRpb25zIGFwcGxpZWQgdG8gdGhlIGNvbnRleHQuCi0gICAgICAgIEZs
b2F0U2l6ZSBjdXJyZW50U2NhbGUoKTsgCisgICAgICAgIEdyYXBoaWNzU2l6ZSBjdXJyZW50U2Nh
bGUoKTsgCiAgICAgICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIApAQCAtNTEzLDcgKzUxMyw3IEBACiAKICAgICAgICAgdm9pZCBz
ZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBj
b25zdCBJbnRTaXplJik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lk
dGgsIFN0cm9rZVN0eWxlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKEdyYXBoaWNzUG9pbnQmIHAxLCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgc3Ry
b2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGxh
dGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC01MzgsNyArNTM4LDcgQEAK
ICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKICAgICAgICAg
dm9pZCBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wpOwogCi0gICAgICAgIHZvaWQg
c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29s
b3ImLCBDb2xvclNwYWNlKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBH
cmFwaGljc1NpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAg
ICAgICB2b2lkIGNsZWFyUGxhdGZvcm1TaGFkb3coKTsKIAogICAgICAgICB2b2lkIHNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiVGV4dHVyZS5o
IgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC0xNDQsMTAgKzE0NCwx
MCBAQAogICAgIHJldHVybiBib3VuZHM7CiB9CiAKLUZsb2F0UmVjdCBUaWxpbmdEYXRhOjp0aWxl
Qm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3QKK0dyYXBoaWNzUmVjdCBUaWxpbmdEYXRh
Ojp0aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3QKIHsKICAgICBhc3NlcnRUaWxl
KHRpbGUpOwotICAgIEZsb2F0UmVjdCBib3VuZHModGlsZUJvdW5kcyh0aWxlKSk7CisgICAgR3Jh
cGhpY3NSZWN0IGJvdW5kcyh0aWxlQm91bmRzKHRpbGUpKTsKICAgICBib3VuZHMuc2NhbGUoMS4w
ZiAvIG1fdG90YWxTaXplWCwgMS4wZiAvIG1fdG90YWxTaXplWSk7CiAgICAgcmV0dXJuIGJvdW5k
czsKIH0KQEAgLTIxMywyMSArMjEzLDIxIEBACiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgciAt
IHgsIGIgLSB5KTsKIH0KIAotSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGlj
ZXMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0ICZzcmNSZWN0KSBjb25zdAorSW50UmVjdCBUaWxp
bmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
ICZzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBvdmVybGFwcGVkVGlsZUluZGljZXMoZW5j
bG9zaW5nSW50UmVjdChzcmNSZWN0KSk7CiB9CiAKLXZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0
RHJhd1F1YWQoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGludCB0aWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QqIG5ld1NyYywgRmxvYXRSZWN0KiBuZXdEc3QpIGNvbnN0Cit2b2lkIFRpbGluZ0RhdGE6Omlu
dGVyc2VjdERyYXdRdWFkKGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0KiBuZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25zdAog
ewogICAgIC8vIEludGVyc2VjdCB3aXRoIHRpbGUKLSAgICBGbG9hdFJlY3QgdGlsZUJvdW5kcyA9
IHRoaXMtPnRpbGVCb3VuZHModGlsZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3RJbnRlcnNlY3Rl
ZCA9IHNyY1JlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVCb3VuZHMgPSB0aGlzLT50aWxlQm91
bmRzKHRpbGUpOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQgPSBzcmNSZWN0
OwogICAgIHNyY1JlY3RJbnRlcnNlY3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7CiAKICAgICBp
ZiAoc3JjUmVjdEludGVyc2VjdGVkLmlzRW1wdHkoKSkgewotICAgICAgICAqbmV3U3JjID0gKm5l
d0RzdCA9IEZsb2F0UmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgKm5ld1NyYyA9ICpuZXdEc3Qg
PSBHcmFwaGljc1JlY3QoMCwgMCwgMCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTI0MSw3ICsyNDEsNyBAQAogICAgICAgICAtdGlsZUJvdW5kcy54KCkgKyBtX2JvcmRlclRleGVs
cywKICAgICAgICAgLXRpbGVCb3VuZHMueSgpICsgbV9ib3JkZXJUZXhlbHMpOwogCi0gICAgKm5l
d0RzdCA9IEZsb2F0UmVjdCgKKyAgICAqbmV3RHN0ID0gR3JhcGhpY3NSZWN0KAogICAgICAgICBz
cmNSZWN0SW50ZXJzZWN0ZWROb3JtWCAqIGRzdFJlY3Qud2lkdGgoKSArIGRzdFJlY3QueCgpLAog
ICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtWSAqIGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RS
ZWN0LnkoKSwKICAgICAgICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVcgKiBkc3RSZWN0LndpZHRo
KCksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
aWxpbmdEYXRhLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBo
aWNzUmVjdDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQb2ludDsKIApAQCAtNjIsMTcgKzYy
LDE3IEBACiAgICAgSW50UmVjdCB0aWxlQm91bmRzKGludCB0aWxlKSBjb25zdDsKICAgICBJbnRS
ZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBjb25zdDsKICAgICBJbnRSZWN0IHRp
bGVCb3VuZHNXaXRoT3V0ZXJCb3JkZXIoaW50IHRpbGUpIGNvbnN0OwotICAgIEZsb2F0UmVjdCB0
aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHRp
bGVCb3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdDsKICAgICBpbnQgdGlsZVBvc2l0aW9u
WChpbnQgeEluZGV4KSBjb25zdDsKICAgICBpbnQgdGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBj
b25zdDsKICAgICBpbnQgdGlsZVNpemVYKGludCB4SW5kZXgpIGNvbnN0OwogICAgIGludCB0aWxl
U2l6ZVkoaW50IHlJbmRleCkgY29uc3Q7CiAgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGlj
ZXMoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7Ci0gICAgSW50UmVjdCBvdmVybGFwcGVk
VGlsZUluZGljZXMoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0
IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QpIGNvbnN0
OwogCiAgICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjb29yZGlu
YXRlcyBmb3IgYSBkcmF3aW5nIHF1YWQKICAgICAvLyBpbiB0ZXhlbCB1bml0cywgcmV0dXJucyBh
ZGp1c3RlZCBkYXRhIHRvIHJlbmRlciBqdXN0IHRoZSBvbmUgdGlsZS4KLSAgICB2b2lkIGludGVy
c2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBpbnQgdGlsZSwgRmxvYXRSZWN0KiBuZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBj
b25zdDsKKyAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwgR3JhcGhpY3NSZWN0
KiBuZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25zdDsKIAogICAgIC8vIERpZmZlcmVu
Y2UgYmV0d2VlbiB0aWxlQm91bmQncyBhbmQgdGlsZUJvdW5kV2l0aEJvcmRlcidzIGxvY2F0aW9u
KCkuCiAgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNldCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgJKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRy
aWNzTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDkgKzk2LDkgQEAKICAgICByZXR1cm4gY0ds
eXBoU2l6ZVVua25vd247CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEZsb2F0UmVjdCBHbHlwaE1l
dHJpY3NNYXA8RmxvYXRSZWN0Pjo6dW5rbm93bk1ldHJpY3MoKQordGVtcGxhdGU8PiBpbmxpbmUg
R3JhcGhpY3NSZWN0IEdseXBoTWV0cmljc01hcDxHcmFwaGljc1JlY3Q+Ojp1bmtub3duTWV0cmlj
cygpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCBjR2x5cGhTaXplVW5rbm93biwgY0ds
eXBoU2l6ZVVua25vd24pOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoMCwgMCwgY0dseXBoU2l6
ZVVua25vd24sIGNHbHlwaFNpemVVbmtub3duKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgVD4gdHlw
ZW5hbWUgR2x5cGhNZXRyaWNzTWFwPFQ+OjpHbHlwaE1ldHJpY3NQYWdlKiBHbHlwaE1ldHJpY3NN
YXA8VD46OmxvY2F0ZVBhZ2VTbG93Q2FzZSh1bnNpZ25lZCBwYWdlTnVtYmVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQogewogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgcGFpbnRS
ZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+Zmls
dGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcs
NyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludDNEJiBwKQorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkK
IHsKICAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpIDw8ICIgej0iIDw8
IHAueigpOwogICAgIHJldHVybiB0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDcgKzczLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFw
aGljc1BvaW50M0QmIHApCiB7CiAgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBw
LnkoKSA8PCAiIHo9IiA8PCBwLnooKTsKICAgICByZXR1cm4gdHM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QAogdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAg
IEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVj
dCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHBhaW50UmVj
dCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRl
ci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigp
LmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBh
aW50UmVjdCkpOwogfQpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgc2V0SXNBbHBoYUltYWdlKHRy
dWUpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0KEdyYXBoaWNzUG9p
bnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCog
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpmaWx0ZXJDb250ZXh0KTsKICAgICBmaWx0ZXJDb250
ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihmaWx0ZXItPnNvdXJjZUltYWdlKCksIGltYWdlUmVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIs
OSBAQAogCiAgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMg
dGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBv
ZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lm
aWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGls
ZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gaW4t
Pm1heEVmZmVjdFJlY3QoKTsKKyAgICBHcmFwaGljc1BvaW50IGluTWF4RWZmZWN0TG9jYXRpb24g
PSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQgbWF4RWZmZWN0TG9jYXRp
b24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKICAgICBpZiAoaW4tPmZpbHRlckVmZmVj
dFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKICAgICAgICAgRmlsdGVy
KiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXItPmZp
bHRlclJlZ2lvbigpOwpAQCAtODYsNyArODYsNyBAQAogICAgIHBhdHRlcm4tPnNldFBhdHRlcm5T
cGFjZVRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGZp
bHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQt
PnNldEZpbGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAg
ZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3
IEBACiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKTsKKyAgICBHcmFwaGljc1JlY3Qgc3JjUmVjdCA9IEdyYXBoaWNz
UmVjdCgwLCAwLCAtMSwgLTEpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9PVkVSOgogICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4
NCw3IEBACiAgICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNl
TGlnaHRpbmcpCiAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQg
KiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5
VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgR3JhcGhpY3NQ
b2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CiAgICAgICAg
ICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0
aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4
cG9uZW50ID09IDEpCkBAIC0xOTMsMTYgKzE5MywxNiBAQAogICAgICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8g
aGFsZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7Ci0gICAgICAgIG5v
cm1hbFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0
b3IueCgpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLSAgICAgICAgbm9ybWFsVmVjdG9yLnNldFko
ZmFjdG9yWSAqIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWwyRFZlY3Rvci55KCkpICogZGF0YS5z
dXJmYWNlU2NhbGUpOworICAgICAgICBHcmFwaGljc1BvaW50M0Qgbm9ybWFsVmVjdG9yOworICAg
ICAgICBub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0
Pihub3JtYWwyRFZlY3Rvci54KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAgICAgICBub3Jt
YWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pihub3JtYWwy
RFZlY3Rvci55KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwogICAgICAgICBub3JtYWxWZWN0b3Iu
c2V0WigxKTsKICAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9y
Lmxlbmd0aCgpOwogCiAgICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpE
aWZmdXNlTGlnaHRpbmcpCiAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29u
c3RhbnQgKiAobm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3Jt
YWxWZWN0b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CiAgICAgICAgICAgICBoYWxmd2F5VmVj
dG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGgpOwogICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCkBA
IC0zMTAsNyArMzEwLDcgQEAKICAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0g
d2lkdGggKiBjUGl4ZWxTaXplOwogICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRo
IC0gMTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAgICBw
YWludGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJl
ZCgpLCBtX2xpZ2h0aW5nQ29sb3IuZ3JlZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7Cisg
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gR3JhcGhpY3NQb2ludDNEKG1fbGlnaHRpbmdD
b2xvci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5ibHVl
KCkpOwogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEocGFpbnRpbmdEYXRhKTsK
IAogICAgIC8vIFRvcC9MZWZ0IGNvcm5lci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDggQEAKICAgICBGRVR1cmJ1
bGVuY2UoRmlsdGVyKiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwg
Ym9vbCk7CiAKICAgICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAg
ZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
aW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBmbG9h
dCBub2lzZTJEKGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBHcmFwaGljc1BvaW50
Jik7CisgICAgdW5zaWduZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChp
bnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOwogICAgIGlu
bGluZSB2b2lkIGZpbGxSZWdpb24oQnl0ZUFycmF5KiwgUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQp
OwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICNkZWZpbmUgRmlsdGVyX2gKIAogI2lmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNDEsMjQgKzQxLDI0IEBACiAgICAgICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IHNvdXJjZUlt
YWdlOyB9CiAgICAgICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291
cmNlSW1hZ2UuZ2V0KCk7IH0KIAotICAgICAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgICAgICB2b2lkIHNldEZp
bHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmls
dGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICAgICAgR3JhcGhpY3NTaXpl
IGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0K
KyAgICAgICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEdyYXBoaWNzU2l6ZSYgZmls
dGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9
CiAKICAgICAgICAgdmlydHVhbCBmbG9hdCBhcHBseUhvcml6b250YWxTY2FsZShmbG9hdCB2YWx1
ZSkgY29uc3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24ud2lkdGgoKTsgfQog
ICAgICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5VmVydGljYWxTY2FsZShmbG9hdCB2YWx1ZSkgY29u
c3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24uaGVpZ2h0KCk7IH0KICAgICAg
ICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsK
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9M
b2NhbFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KCk7
IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1BvaW50IG1hcEFic29sdXRlUG9pbnRUb0xvY2Fs
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQo
KTsgfQogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBj
b25zdCA9IDA7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1f
c291cmNlSW1hZ2U7Ci0gICAgICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CisgICAg
ICAgIEdyYXBoaWNzU2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmIEVOQUJMRShG
SUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1LDcgKzQ1
LDcgQEAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmls
dGVyKiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IElu
dFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKKyAgICAgICAgICAgIGZs
b2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLAogICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAg
SW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7CkBAIC02Niw4ICs2Niw4IEBACiAgICAgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5
cGUpOwogCi0gICAgRmxvYXRQb2ludCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3Q7Ci0gICAgYm9v
bCBzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBHcmFwaGljc1Bv
aW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdDsKKyAgICBib29sIHNldEtlcm5lbFVuaXRMZW5n
dGgoY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29u
c3Q7CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwpAQCAtOTAsNyArOTAsNyBAQAog
ICAgIH07CiAKICAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciosIGNvbnN0IEludFNpemUmLCBm
bG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwg
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICAgICAg
ICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
Ym9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2
ZUFscGhhVmFsdWVzPgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIGZsb2F0IG1fYmlhczsKICAg
ICBJbnRQb2ludCBtX3RhcmdldE9mZnNldDsKICAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsK
LSAgICBGbG9hdFBvaW50IG1fa2VybmVsVW5pdExlbmd0aDsKKyAgICBHcmFwaGljc1BvaW50IG1f
a2VybmVsVW5pdExlbmd0aDsKICAgICBib29sIG1fcHJlc2VydmVBbHBoYTsKICAgICBWZWN0b3I8
ZmxvYXQ+IG1fa2VybmVsTWF0cml4OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBACiAKIHZvaWQgRkVPZmZzZXQ6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHBh
aW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZpbHRl
ciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLT5h
cHBseUhvcml6b250YWxTY2FsZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9k
eSkpOwogICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKQEAgLTg5LDcg
Kzg5LDcgQEAKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0g
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1JlY3QgZHJhd2luZ1JlZ2lvbiA9
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAg
IEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgZHJhd2luZ1JlZ2lvbi5tb3Zl
KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZm
ZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lv
bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDE3IEBACiAKIGNsYXNzIFNwb3RMaWdodFNvdXJjZSA6
IHB1YmxpYyBMaWdodFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3Bv
dExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwKLSAgICAg
ICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwb3RMaWdo
dFNvdXJjZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9zaXRpb24sCisgICAgICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3BvdExpZ2h0U291cmNlKHBvc2l0aW9uLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25l
bnQsIGxpbWl0aW5nQ29uZUFuZ2xlKSk7CiAgICAgfQogCi0gICAgY29uc3QgRmxvYXRQb2ludDNE
JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBjb25zdCBHcmFw
aGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAg
IGJvb2wgc2V0WChmbG9hdCk7CiAgICAgYm9vbCBzZXRZKGZsb2F0KTsKICAgICBib29sIHNldFoo
ZmxvYXQpOwotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kaXJlY3Rpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgYm9vbCBzZXRQb2ludHNBdFgoZmxv
YXQpOwogICAgIGJvb2wgc2V0UG9pbnRzQXRZKGZsb2F0KTsKICAgICBib29sIHNldFBvaW50c0F0
WihmbG9hdCk7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBT
cG90TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQ
b2ludDNEJiBkaXJlY3Rpb24sCisgICAgU3BvdExpZ2h0U291cmNlKGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgcG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgZGlyZWN0aW9uLAogICAgICAg
ICBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKICAgICAg
ICAgOiBMaWdodFNvdXJjZShMU19TUE9UKQogICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24p
CkBAIC02Niw4ICs2Niw4IEBACiAgICAgewogICAgIH0KIAotICAgIEZsb2F0UG9pbnQzRCBtX3Bv
c2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2RpcmVjdGlvbjsKKyAgICBHcmFwaGljc1BvaW50
M0QgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9kaXJlY3Rpb247CiAKICAgICBm
bG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdo
dFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKIAogY2xhc3MgUG9pbnRMaWdodFNvdXJjZSA6
IHB1YmxpYyBMaWdodFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UG9p
bnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgcG9zaXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBv
aW50TGlnaHRTb3VyY2UocG9zaXRpb24pKTsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFBvaW50
M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAg
ICAgYm9vbCBzZXRYKGZsb2F0KTsKICAgICBib29sIHNldFkoZmxvYXQpOwogICAgIGJvb2wgc2V0
WihmbG9hdCk7CkBAIC00NiwxMyArNDYsMTMgQEAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IFBvaW50TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbikKKyAgICBQb2lu
dExpZ2h0U291cmNlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9zaXRpb24pCiAgICAgICAgIDog
TGlnaHRTb3VyY2UoTFNfUE9JTlQpCiAgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAg
ICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQ
b2ludDNEIG1fcG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNyBAQAogI2RlZmluZSBGaWx0ZXJFZmZlY3RfaAogCiAjaWYgRU5BQkxFKEZJTFRFUlMpCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgpAQCAtNzYsOCArNzYs
OCBAQAogICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlUGFpbnRSZWN0OyB9CiAgICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJ
bnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1
dGVQYWludFJlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RS
ZWN0OyB9IAorICAgIEdyYXBoaWNzUmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9tYXhFZmZlY3RSZWN0OyB9CisgICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0
OyB9IAogCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCkgPSAwOwpAQCAtMTAzLDExICsxMDMsMTEgQEAKICAgICBib29sIGhhc0hlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2
YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZhbHVlOyB9CiAKLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b247IH0KLSAgICB2b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
biA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEdyYXBo
aWNzUmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CiAKLSAgICBGbG9hdFJlY3QgZWZm
ZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAg
IHZvaWQgc2V0RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJp
ZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQorICAgIEdyYXBo
aWNzUmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFy
aWVzOyB9CisgICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVz
OyB9CiAKICAgICBGaWx0ZXIqIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9CiAKQEAgLTEz
MCw3ICsxMzAsNyBAQAogICAgIAogICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIg
cHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNv
bHV0ZSBjb29yZGluYXRlIHNwYWNlLgogICAgIC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNo
b3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBtX21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0
IG1fbWF4RWZmZWN0UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9tYXhFZmZlY3RSZWN0OwogICAg
IEZpbHRlciogbV9maWx0ZXI7CiAKIHByaXZhdGU6CkBAIC0xNDEsMTEgKzE0MSwxMSBAQAogCiAg
ICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRo
ZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgLy8g
VGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOworICAgIEdyYXBoaWNzUmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKIAogICAg
IC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpFbGVtZW50LiBJ
cyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2YgdGhlCiAgICAgLy8gZmlsdGVy
IHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91bmRh
cmllczsKKyAgICBHcmFwaGljc1JlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOwogICAgIGJvb2wgbV9o
YXNYOwogICAgIGJvb2wgbV9oYXNZOwogICAgIGJvb2wgbV9oYXNXaWR0aDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDUsNyArMjQ1LDcgQEAKIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0
ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGFi
c29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwogCiAgICAgdW5zaWdu
ZWQga2VybmVsU2l6ZVggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKIAogdm9pZCBGRU1vcnBo
b2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgcGFp
bnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwog
ICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgcGFpbnRSZWN0LmluZmxh
dGVYKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9yYWRpdXNYKSk7CiAgICAgcGFpbnRS
ZWN0LmluZmxhdGVZKGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcg
QEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29sb3IgY29sb3IgPSBjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdElt
YWdlLT5jb250ZXh0KCktPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCktPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogfQogCiB2b2lkIEZFRmxvb2Q6OmR1bXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQAog
ICAgICAgICBub2lzZVZhbHVlIC09IG5ld1ZhbHVlIC0gMTsKIH0KIAotZmxvYXQgRkVUdXJidWxl
bmNlOjpub2lzZTJEKGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29u
c3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCitmbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQo
aW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBub2lzZVZlY3RvcikKIHsKICAgICBzdHJ1Y3QgTm9pc2UgewogICAgICAgICBpbnQgbm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKQEAgLTI3Niw3ICsyNzYsNyBAQAogICAgIHJldHVybiBs
aW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKIH0KIAotdW5zaWduZWQgY2hhciBGRVR1cmJ1
bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit1bnNpZ25l
ZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50
IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkKIHsKICAgICBmbG9hdCB0aWxlV2lkdGggPSBwYWludGluZ0RhdGEuZmlsdGVyU2l6
ZS53aWR0aCgpOwogICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwKTsKQEAgLTMxMCw3ICszMTAsNyBA
QAogICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgcGFpbnRpbmdE
YXRhLmhlaWdodDsKICAgICB9CiAgICAgZmxvYXQgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0g
MDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIG1fYmFzZUZyZXF1ZW5j
eVgsIHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1ZW5jeVkpOworICAgIEdyYXBoaWNzUG9pbnQgbm9p
c2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9iYXNl
RnJlcXVlbmN5WSk7CiAgICAgZmxvYXQgcmF0aW8gPSAxOwogICAgIGZvciAoaW50IG9jdGF2ZSA9
IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKICAgICAgICAgaWYgKG1fdHlw
ZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBA
QAogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgQVNTRVJUKGZpbHRl
cik7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+
YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJl
Y3QoYWJzb2x1dGVQYWludFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVBhaW50UmVj
dCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVj
dCBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7CiAgICAgYWJzb2x1
dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgp
LCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAgICAgYWJzb2x1dGVQYWludFJl
Y3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwogICAgIGFic29sdXRlUGFpbnRSZWN0
LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwpAQCAtODgsMTEgKzg4LDExIEBACiAgICAgICAg
IHJldHVybjsKIAogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3N0ZFgpLCBm
aWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3N0ZFkpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKTsKKyAgICBHcmFwaGljc1NpemUgYmx1clJhZGl1cyhmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fc3RkWCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc3Rk
WSkpOworICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXQoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2Fs
ZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwogCi0gICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJh
d2luZ1JlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1Jl
Y3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJhd2luZ1Jl
Z2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCiAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlID0gaW4tPmFzSW1hZ2VCdWZmZXIoKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIHJlc3Vs
dEltYWdlLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCksIHNo
YWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpKTsKIAogICAgIHJlc3VsdENv
bnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7Ci0gICAgcmVz
dWx0Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICByZXN1bHRDb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBh
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgIHJlc3VsdENvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0lt
YWdlQnVmZmVyKHNvdXJjZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9u
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIEZFQ29udm9sdmVNYXRyaXg6
OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsCiAgICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtl
cm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsTWF0cml4KQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQog
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXpl
KQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCkBAIC01Miw3ICs1Miw3IEBACiAKIFBhc3NSZWZQ
dHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEZpbHRlciogZmls
dGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0
IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZl
QWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZF
Q29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRP
ZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAogICAgICAgICBwcmVzZXJ2ZUFscGhh
LCBrZXJuZWxNYXRyaXgpKTsKQEAgLTEzMSwxMiArMTMxLDEyIEBACiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUZsb2F0UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsVW5pdExlbmd0aCgpIGNv
bnN0CitHcmFwaGljc1BvaW50IEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbFVuaXRMZW5ndGgoKSBj
b25zdAogewogICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IAogfQogCi1ib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCkKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aChj
b25zdCBHcmFwaGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoKQogewogICAgIGlmIChtX2tlcm5l
bFVuaXRMZW5ndGggPT0ga2VybmVsVW5pdExlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDcgQEAKICNkZWZpbmUgTGlnaHRTb3VyY2VfaAogCiAjaWYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCkBAIC00OSwxMiArNDksMTIgQEAKICAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgZm9sbG93
aW5nIHN0cnVjdHVyZQogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewogICAgICAgICAvLyBTVkdG
RUxpZ2h0aW5nIGFsc28gdXNlIHRoZW0KLSAgICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9y
OwotICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JWZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9p
bnQzRCBsaWdodFZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGNvbG9yVmVjdG9yOwog
ICAgICAgICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKICAgICAgICAgLy8gUHJpdmF0ZSBtZW1i
ZXJzCi0gICAgICAgIEZsb2F0UG9pbnQzRCBkaXJlY3Rpb25WZWN0b3I7Ci0gICAgICAgIEZsb2F0
UG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBkaXJl
Y3Rpb25WZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7
CiAgICAgICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKICAgICAgICAgZmxvYXQgY29uZUZ1bGxM
aWdodDsKICAgICAgICAgaW50IHNwZWN1bGFyRXhwb25lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZv
cm1DQUFuaW1hdGlvbk1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0
aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpz
ZXRGcm9tVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAg
ICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDIw
LDcgKzQyMCw3IEBACiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnZh
bHVlXV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBG
bG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVl
KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAgICAgW3N0
YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFs
dWVzOmFycmF5XTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29u
c3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEdyYXBoaWNzUG9pbnQzRD4mIHZhbHVlKQogewogICAg
IGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1D
QUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqIGRpcnR5
UmVjdCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAoZGlydHlS
ZWN0KQpAQCAtNDA0LDI1ICs0MDQsMjUgQEAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmJvdW5kcygpIGNvbnN0CitHcmFwaGlj
c1JlY3QgUGxhdGZvcm1DQUxheWVyOjpib3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9s
YXllci5nZXQoKSBib3VuZHNdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRz
KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRz
KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Qm91bmRzOnZhbHVlXTsKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBv
c2l0aW9uKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBvc2l0aW9u
KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gW21fbGF5ZXIuZ2V0KCkgcG9zaXRpb25d
OwotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIuZ2V0
KCkgelBvc2l0aW9uXSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChwb2ludC54LCBwb2lu
dC55LCBbbV9sYXllci5nZXQoKSB6UG9zaXRpb25dKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5
ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSldOwpAQCAtNDMwLDE3ICs0MzAs
MTcgQEAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UG9pbnQzRCBQ
bGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBQbGF0
Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0g
W21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdOwogICAgIGZsb2F0IHogPSAwOwogI2lmIEhBVkVf
TU9ERVJOX1FVQVJUWkNPUkUKICAgICB6ID0gW21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRaXTsK
ICNlbmRpZgotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgeik7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChwb2ludC54LCBwb2ludC55LCB6KTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFs
dWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQ
b2ludDNEJiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBb
bV9sYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVl
LnkoKSldOwpAQCAtNTg4LDEyICs1ODgsMTIgQEAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzUmVjdCgpIGNvbnN0
CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50c1JlY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBjb250ZW50c1JlY3RdOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFs
dWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0
KCkgc2V0Q29udGVudHNSZWN0OnZhbHVlXTsKQEAgLTY5NCwxMiArNjk0LDEyIEBACiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1GbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVyOjpm
cmFtZSgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFtZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIGZyYW1lXTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRGcmFtZTp2YWx1
ZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKQEAgLTc5LDcgKzc5LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGlzVHJhbnNm
b3JtVHlwZUZsb2F0UG9pbnQzRChUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJh
bnNmb3JtVHlwZSkKK3N0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQzRChU
cmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKIHsKICAgICBz
d2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsKICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEU6CkBAIC05NCw3ICs5NCw3IEBACiAKIHN0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZU51bWJl
cihUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKIHsKLSAg
ICByZXR1cm4gIWlzVHJhbnNmb3JtVHlwZVRyYW5zZm9ybWF0aW9uTWF0cml4KHRyYW5zZm9ybVR5
cGUpICYmICFpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtVHlwZSk7CisgICAg
cmV0dXJuICFpc1RyYW5zZm9ybVR5cGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm1UeXBl
KSAmJiAhaXNUcmFuc2Zvcm1UeXBlR3JhcGhpY3NQb2ludDNEKHRyYW5zZm9ybVR5cGUpOwogfQog
CiBzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0
cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCYgdmFsdWUpCkBAIC0xMjgs
NyArMTI4LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGdldFRyYW5zZm9ybUZ1bmN0aW9u
VmFsdWUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHRyYW5zZm9ybVR5cGUsIGNvbnN0IEludFNpemUmIHNpemUs
IEZsb2F0UG9pbnQzRCYgdmFsdWUpCitzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZh
bHVlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBH
cmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIHN3aXRjaCAodHJhbnNmb3JtVHlwZSkgewog
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKQEAgLTM3NSw3ICszNzUsNyBAQAog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChSZXBsaWNhdGVkTGF5ZXJDaGFuZ2VkKTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX3Bvc2l0aW9uKQogICAgICAgICByZXR1
cm47CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoR2Vv
bWV0cnlDaGFuZ2VkKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5j
aG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb2ludCkKIHsKICAgICBpZiAocG9pbnQg
PT0gbV9hbmNob3JQb2ludCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBp
ZiAoc2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQAog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0Qm91bmRzT3JpZ2luKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdp
bikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgR3JhcGhpY3NQ
b2ludCYgb3JpZ2luKQogewogICAgIGlmIChvcmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCiAgICAg
ICAgIHJldHVybjsKQEAgLTU2MSwxOSArNTYxLDE5IEBACiAKIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIEZsb2F0UmVjdCBodWdlUmVjdCgtbnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsIC1udW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8g
MiwKKyAgICBHcmFwaGljc1JlY3QgaHVnZVJlY3QoLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCkgLyAyLCAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIG51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWF4KCkpOwogCiAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGh1Z2VSZWN0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgcmVjdChyKTsKLSAgICBGbG9hdFJlY3QgbGF5ZXJC
b3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHIpOwor
ICAgIEdyYXBoaWNzUmVjdCBsYXllckJvdW5kcyhHcmFwaGljc1BvaW50KCksIG1fc2l6ZSk7CiAg
ICAgcmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHMpOwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTc2LDE4ICs5NzYsMTggQEAKICAgICBpZiAobmVlZFRpbGVk
TGF5ZXIgIT0gbV91c2luZ1RpbGVkTGF5ZXIpCiAgICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5
ZXIobmVlZFRpbGVkTGF5ZXIpOwogCi0gICAgRmxvYXRTaXplIHVzZWRTaXplID0gbV91c2luZ1Rp
bGVkTGF5ZXIgPyBjb25zdHJhaW5lZFNpemUoKSA6IG1fc2l6ZTsKLSAgICBGbG9hdFJlY3QgYm91
bmRzUmVjdChtX2JvdW5kc09yaWdpbiwgdXNlZFNpemUpOworICAgIEdyYXBoaWNzU2l6ZSB1c2Vk
U2l6ZSA9IG1fdXNpbmdUaWxlZExheWVyID8gY29uc3RyYWluZWRTaXplKCkgOiBtX3NpemU7Cisg
ICAgR3JhcGhpY3NSZWN0IGJvdW5kc1JlY3QobV9ib3VuZHNPcmlnaW4sIHVzZWRTaXplKTsKIAog
ICAgIC8vIFVwZGF0ZSBwb3NpdGlvbi4KICAgICAvLyBQb3NpdGlvbiBpcyBvZmZzZXQgb24gdGhl
IGxheWVyIGJ5IHRoZSBsYXllciBhbmNob3IgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBwb3NQb2lu
dChtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogdXNlZFNpemUud2lkdGgoKSwg
bV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIHVzZWRTaXplLmhlaWdodCgpKTsK
KyAgICBHcmFwaGljc1BvaW50IHBvc1BvaW50KG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2lu
dC54KCkgKiB1c2VkU2l6ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQu
eSgpICogdXNlZFNpemUuaGVpZ2h0KCkpOwogICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlv
bihwb3NQb2ludCk7CiAKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5
TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBwb3NQb2ludDsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQgY2xvbmVQb3NpdGlvbiA9IHBvc1BvaW50OwogICAgICAgICAgICAgaWYg
KG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3Ig
dGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdl
IHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCkBAIC0xMTgxLDggKzExODEsOCBAQAog
ICAgIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIAogICAgIC8vIFNldCBwcm9wZXJ0
aWVzIG9mIG1fbGF5ZXIgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIHNpbmNlIHRoZXNlIGFyZSBl
eHByZXNzZWQgb24gb24gdGhlIHN0cnVjdHVyYWwgbGF5ZXIuCi0gICAgRmxvYXRQb2ludCBwb2lu
dChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpOwotICAgIEZs
b2F0UG9pbnQzRCBhbmNob3JQb2ludCgwLjVmLCAwLjVmLCAwKTsKKyAgICBHcmFwaGljc1BvaW50
IHBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdodCgpIC8gMi4wZik7Cisg
ICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50KDAuNWYsIDAuNWYsIDApOwogICAgIG1fbGF5
ZXItPnNldFBvc2l0aW9uKHBvaW50KTsKICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChhbmNo
b3JQb2ludCk7CiAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4
KCkpOwpAQCAtMTMxMSw4ICsxMzExLDggQEAKICAgICBpZiAoIW1fY29udGVudHNMYXllcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBwb2ludChtX2NvbnRlbnRzUmVjdC54KCks
IG1fY29udGVudHNSZWN0LnkoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgbV9jb250ZW50
c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9p
bnQgcG9pbnQobV9jb250ZW50c1JlY3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpOworICAgIEdy
YXBoaWNzUmVjdCByZWN0KDAsIDAsIG1fY29udGVudHNSZWN0LndpZHRoKCksIG1fY29udGVudHNS
ZWN0LmhlaWdodCgpKTsKIAogICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24ocG9pbnQp
OwogICAgIG1fY29udGVudHNMYXllci0+c2V0Qm91bmRzKHJlY3QpOwpAQCAtMTM4Nyw3ICsxMzg3
LDcgQEAKICAgICBHcmFwaGljc0xheWVyQ0EqIHJlcGxpY2F0ZWRMYXllciA9IHN0YXRpY19jYXN0
PEdyYXBoaWNzTGF5ZXJDQSo+KG1fcmVwbGljYXRlZExheWVyKTsKICAgICAKICAgICBSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBjbG9uZWRMYXllclJvb3QgPSByZXBsaWNhdGVkTGF5ZXItPmZldGNo
Q2xvbmVMYXllcnModGhpcywgcmVwbGljYVN0YXRlLCBSb290Q2xvbmVMZXZlbCk7Ci0gICAgRmxv
YXRQb2ludCBjbG9uZVJvb3RQb3NpdGlvbiA9IHJlcGxpY2F0ZWRMYXllci0+cG9zaXRpb25Gb3JD
bG9uZVJvb3RMYXllcigpOworICAgIEdyYXBoaWNzUG9pbnQgY2xvbmVSb290UG9zaXRpb24gPSBy
ZXBsaWNhdGVkTGF5ZXItPnBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKIAogICAgIC8vIFJl
cGxpY2Egcm9vdCBoYXMgbm8gb2Zmc2V0IG9yIHRyYW5zZm9ybQogICAgIGNsb25lZExheWVyUm9v
dC0+c2V0UG9zaXRpb24oY2xvbmVSb290UG9zaXRpb24pOwpAQCAtMTc4OSwxMiArMTc4OSwxMiBA
QAogICAgICAgICAgICAgZmxvYXQgdG9WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1
bmN0aW9uVmFsdWUoZW5kVmFsdWUtPnZhbHVlKCktPmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zv
cm1PcFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRU
b1ZhbHVlKHRvVmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtVHlwZUZsb2F0
UG9pbnQzRCh0cmFuc2Zvcm1PcFR5cGUpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgZnJv
bVZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQz
RCh0cmFuc2Zvcm1PcFR5cGUpKSB7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50M0QgZnJvbVZh
bHVlOwogICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZShzdGFydFZhbHVlLT52
YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCBmcm9t
VmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRGcm9tVmFsdWUoZnJvbVZhbHVlKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHRvVmFsdWU7CisgICAgICAg
ICAgICBHcmFwaGljc1BvaW50M0QgdG9WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1
bmN0aW9uVmFsdWUoZW5kVmFsdWUtPnZhbHVlKCktPmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zv
cm1PcFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRU
b1ZhbHVlKHRvVmFsdWUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTgyNiw3ICsxODI2LDcgQEAK
IHsKICAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOwogICAgIFZlY3RvcjxmbG9hdD4gZmxvYXRW
YWx1ZXM7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQzRD4gZmxvYXRQb2ludDNEVmFsdWVzOworICAg
IFZlY3RvcjxHcmFwaGljc1BvaW50M0Q+IGZsb2F0UG9pbnQzRFZhbHVlczsKICAgICBWZWN0b3I8
VHJhbnNmb3JtYXRpb25NYXRyaXg+IHRyYW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzOwogICAgIFZl
Y3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+IHRpbWluZ0Z1bmN0aW9uczsKIApAQCAtMTg0OSw4
ICsxODQ5LDggQEAKICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZTsKICAgICAgICAgICAgICAg
ICBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKHRyYW5zZm9ybU9wLCB0cmFuc2Zvcm1PcFR5cGUs
IGJveFNpemUsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBmbG9hdFZhbHVlcy5hcHBlbmQodmFs
dWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0Qo
dHJhbnNmb3JtT3BUeXBlKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCB2YWx1ZTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2Zvcm1UeXBlR3JhcGhpY3NQb2ludDNEKHRy
YW5zZm9ybU9wVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50M0QgdmFsdWU7
CiAgICAgICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZSh0cmFuc2Zvcm1PcCwg
dHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZmxvYXRQ
b2ludDNEVmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTg3
MSw3ICsxODcxLDcgQEAKICAgICAKICAgICBpZiAoaXNUcmFuc2Zvcm1UeXBlTnVtYmVyKHRyYW5z
Zm9ybU9wVHlwZSkpCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVzKGZsb2F0VmFsdWVz
KTsKLSAgICBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtT3BU
eXBlKSkKKyAgICBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0QodHJhbnNm
b3JtT3BUeXBlKSkKICAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXMoZmxvYXRQb2ludDNE
VmFsdWVzKTsKICAgICBlbHNlCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVzKHRyYW5z
Zm9ybWF0aW9uTWF0cml4VmFsdWVzKTsKQEAgLTE5OTQsOSArMTk5NCw5IEBACiAgICAgfQogfQog
Ci1GbG9hdFNpemUgR3JhcGhpY3NMYXllckNBOjpjb25zdHJhaW5lZFNpemUoKSBjb25zdAorR3Jh
cGhpY3NTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRTaXplKCkgY29uc3QKIHsKLSAg
ICBGbG9hdFNpemUgY29uc3RyYWluZWRTaXplID0gbV9zaXplOworICAgIEdyYXBoaWNzU2l6ZSBj
b25zdHJhaW5lZFNpemUgPSBtX3NpemU7CiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBmbG9hdCB0aWxlQ29s
dW1ucyA9IGNlaWxmKG1fc2l6ZS53aWR0aCgpIC8ga1RpbGVkTGF5ZXJUaWxlU2l6ZSk7CiAgICAg
ZmxvYXQgdGlsZVJvd3MgPSBjZWlsZihtX3NpemUuaGVpZ2h0KCkgLyBrVGlsZWRMYXllclRpbGVT
aXplKTsKQEAgLTIwMTgsNyArMjAxOCw3IEBACiAgICAgcmV0dXJuIGNvbnN0cmFpbmVkU2l6ZTsK
IH0KIAotYm9vbCBHcmFwaGljc0xheWVyQ0E6OnJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBGbG9h
dFNpemUmIHNpemUpIGNvbnN0Citib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExh
eWVyKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZHJhd3ND
b250ZW50IHx8ICFtX2FsbG93VGlsZWRMYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjExOSw5ICsyMTE5LDkgQEAKICAgICAgICAgICAgIDAuMGYsIDAuMGYsIDEuMGYsIDAuMGYsCiAg
ICAgICAgICAgICAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKICAgICAgICAgY29udGVudHNMYXll
ci0+c2V0VHJhbnNmb3JtKGZsaXBwZXIpOwotICAgICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50M0QoMCwgMSwgMCkpOworICAgICAgICBjb250ZW50c0xheWVyLT5z
ZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50M0QoMCwgMSwgMCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAg
ICAgIGNvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KEdyYXBoaWNzUG9pbnQzRCgpKTsKIAog
ICAgIGlmIChzaG93RGVidWdCb3JkZXJzKCkpIHsKICAgICAgICAgY29udGVudHNMYXllci0+c2V0
Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMCwgMTI4LCAxODApKTsKQEAgLTIxODAsMTQgKzIxODAsMTQg
QEAKICAgICBtX2NvbnRlbnRzTGF5ZXJDbG9uZXMgPSBudWxscHRyOwogfQogCi1GbG9hdFBvaW50
IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNvbnN0CitHcmFw
aGljc1BvaW50IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNv
bnN0CiB7CiAgICAgLy8gVGhpcyBjYW4gZ2V0IGNhbGxlZCBkdXJpbmcgYSBzeW5jIHdoZW4gd2Un
dmUganVzdCByZW1vdmVkIHRoZSBtX3JlcGxpY2FMYXllci4KICAgICBpZiAoIW1fcmVwbGljYUxh
eWVyKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludCgpOwogCi0gICAgRmxvYXRQb2ludCByZXBsaWNhUG9zaXRpb24gPSBtX3JlcGxpY2FM
YXllci0+cmVwbGljYXRlZExheWVyUG9zaXRpb24oKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChy
ZXBsaWNhUG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKSwK
KyAgICBHcmFwaGljc1BvaW50IHJlcGxpY2FQb3NpdGlvbiA9IG1fcmVwbGljYUxheWVyLT5yZXBs
aWNhdGVkTGF5ZXJQb3NpdGlvbigpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHJlcGxpY2FQ
b3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAg
ICAgICAgICAgICAgICAgIHJlcGxpY2FQb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAq
IG1fc2l6ZS5oZWlnaHQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCArNzEsMTAgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRl
ZExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQzRCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCkBA
IC05NSw3ICs5NSw3IEBACiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogICAgIHZv
aWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCk7CiAgICAgdm9pZCBjb21taXRM
YXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOwogCi0gICAgRmxvYXRTaXplIGNvbnN0cmFpbmVk
U2l6ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzU2l6ZSBjb25zdHJhaW5lZFNpemUoKSBjb25zdDsK
IAotICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0Owor
ICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIGNvbnN0Owog
ICAgIHZvaWQgc3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpOwogCiAg
ICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGRlZmF1bHRDb250ZW50c09yaWVu
dGF0aW9uKCkgY29uc3Q7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogICAgIGJvb2wgaGFzQ2xvbmVM
YXllcnMoKSBjb25zdCB7IHJldHVybiBtX2xheWVyQ2xvbmVzOyB9CiAgICAgdm9pZCByZW1vdmVD
bG9uZUxheWVycygpOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigp
IGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNv
bnN0OwogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTGF5ZXJDaGFuZ2VUb1JlcGxpY2FzKCk7CiAg
ICAgCkBAIC0zOTUsNyArMzk1LDcgQEAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4gPiBBbmltYXRpb25zTWFwOwogICAgIEFuaW1hdGlv
bnNNYXAgbV9ydW5uaW5nQW5pbWF0aW9uczsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGly
dHlSZWN0czsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiBtX2RpcnR5UmVjdHM7CiAgICAgCiAg
ICAgTGF5ZXJDaGFuZ2VGbGFncyBtX3VuY29tbWl0dGVkQ2hhbmdlczsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKICAg
ICB2b2lkIHNldE5lZWRzTGF5b3V0KCk7CiAKIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEZsb2F0UmVjdCogZGlydHlSZWN0ID0gMCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXko
Y29uc3QgR3JhcGhpY3NSZWN0KiBkaXJ0eVJlY3QgPSAwKTsKICAgICAKICAgICAvLyBUaGlzIHRl
bGxzIHRoZSBsYXllciB0cmVlIHRvIGNvbW1pdCBjaGFuZ2VzIGFuZCBwZXJmb3JtIGEgcmVuZGVy
LCB3aXRob3V0IGRvIGEgc2V0TmVlZHNEaXNwbGF5IG9uIGFueSBsYXllci4KICAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0KCk7CkBAIC0xMTcsMTUgKzExNywxNSBAQAogICAgIGJvb2wgaXNPcGFxdWUo
KSBjb25zdDsKICAgICB2b2lkIHNldE9wYXF1ZShib29sKTsKIAotICAgIEZsb2F0UmVjdCBib3Vu
ZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgR3Jh
cGhpY3NSZWN0Jik7CiAKLSAgICBGbG9hdFBvaW50M0QgcG9zaXRpb24oKSBjb25zdDsKLSAgICB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9uKEZsb2F0UG9pbnQzRChwb3Mu
eCgpLCBwb3MueSgpLCAwKSk7IH0KKyAgICBHcmFwaGljc1BvaW50M0QgcG9zaXRpb24oKSBjb25z
dDsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOworICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9uKEdy
YXBoaWNzUG9pbnQzRChwb3MueCgpLCBwb3MueSgpLCAwKSk7IH0KIAotICAgIEZsb2F0UG9pbnQz
RCBhbmNob3JQb2ludCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxv
YXRQb2ludDNEJik7CisgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50KCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmKTsKIAogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CkBAIC0xNTQsOCArMTU0LDggQEAKICAg
ICBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRlbnRzKENGVHlw
ZVJlZik7CiAKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRl
bnRzUmVjdCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYpOwogCiAgICAgdm9pZCBzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSk7CiAg
ICAgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpOwpAQCAtMTc1LDggKzE3
NSw4IEBACiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJik7CiAKLSAgICBGbG9hdFJlY3QgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZy
YW1lKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBmcmFtZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAgICBmbG9hdCBzcGVl
ZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3BlZWQoZmxvYXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDb2xvci5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OSw3ICs0OSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NS
ZWN0OwogY2xhc3MgUGxhdGZvcm1DQUFuaW1hdGlvbjsKIGNsYXNzIFRpbWluZ0Z1bmN0aW9uOwog
CkBAIC0xMTEsMjAgKzExMSwyMCBAQAogICAgIC8vIEJhc2ljLWFuaW1hdGlvbiBwcm9wZXJ0aWVz
LgogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGZsb2F0KTsKICAgICB2b2lkIHNldEZyb21WYWx1ZShj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHZvaWQgc2V0RnJvbVZh
bHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYpOworICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYpOwogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNv
bG9yJik7CiAgICAgdm9pZCBjb3B5RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0
aW9uKik7CiAKICAgICB2b2lkIHNldFRvVmFsdWUoZmxvYXQpOwogICAgIHZvaWQgc2V0VG9WYWx1
ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHZvaWQgc2V0VG9W
YWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgR3Jh
cGhpY3NQb2ludDNEJik7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jik7CiAgICAgdm9pZCBjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiop
OwogCiAgICAgLy8gS2V5ZnJhbWUtYW5pbWF0aW9uIHByb3BlcnRpZXMuCiAgICAgdm9pZCBzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4mKTsKLSAgICB2b2lkIHNldFZhbHVl
cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYpOworICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxHcmFwaGljc1BvaW50M0Q+Jik7CiAgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvbG9yPiYpOwogICAgIHZvaWQgY29weVZhbHVlc0Zyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsOSArNTcsOSBAQAogICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkZXN0UmVjdCk7CiAgICAgCiAgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0
cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBt
X2dlbmVyYXRvcihnZW5lcmF0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgcmV0dXJuIHBhdGg7CiB9
CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQsIFdpbmRSdWxl
IHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQgJnBv
aW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIGlmICghYm91bmRpbmdSZWN0KCkuY29u
dGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzMsNyArMTMzLDcgQEAK
ICAgICByZXR1cm4gcmV0OwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0
eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29s
IFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGFwcGxpZXIpOwogCkBA
IC0xNTIsNyArMTUyLDcgQEAKICAgICByZXR1cm4gaGl0U3VjY2VzczsKIH0KIAotdm9pZCBQYXRo
Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBQYXRoOjp0cmFuc2xhdGUo
Y29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5z
bGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIDAsIDEsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dNdXRhYmxlUGF0aFJlZiBuZXdQYXRoID0gQ0dQYXRoQ3Jl
YXRlTXV0YWJsZSgpOwpAQCAtMTYxLDEyICsxNjEsMTIgQEAKICAgICBtX3BhdGggPSBuZXdQYXRo
OwogfQogCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVj
dCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBDR1BhdGhHZXRCb3Vu
ZGluZ0JveChtX3BhdGgpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKIApAQCAtMTg2LDI3
ICsxODYsMjcgQEAKICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogewogICAgIENHUGF0aE1vdmVUb1BvaW50KG1fcGF0aCwgMCwgcG9pbnQueCgp
LCBwb2ludC55KCkpOwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwKQordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChtX3BhdGgsIDAsIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZv
aWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0
UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGNwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIENHUGF0aEFkZFF1YWRDdXJ2ZVRv
UG9pbnQobV9wYXRoLCAwLCBjcC54KCksIGNwLnkoKSwgcC54KCksIHAueSgpKTsKIH0KIAotdm9p
ZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxv
YXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRCZXppZXJD
dXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY3Ay
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIENHUGF0aEFkZEN1cnZlVG9Qb2ludCht
X3BhdGgsIDAsIGNwMS54KCksIGNwMS55KCksIGNwMi54KCksIGNwMi55KCksIHAueCgpLCBwLnko
KSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgcmFkaXVz
KQogewogICAgIENHUGF0aEFkZEFyY1RvUG9pbnQobV9wYXRoLCAwLCBwMS54KCksIHAxLnkoKSwg
cDIueCgpLCBwMi55KCksIHJhZGl1cyk7CiB9CkBAIC0yMTYsMTkgKzIxNiwxOSBAQAogICAgIENH
UGF0aENsb3NlU3VicGF0aChtX3BhdGgpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBG
bG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgY2xvY2t3aXNl
KQordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxv
YXQgc2EsIGZsb2F0IGVhLCBib29sIGNsb2Nrd2lzZSkKIHsKICAgICAvLyBXb3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vNTE4OTIzMz4gQ0dQYXRoQWRkQXJjIGhhbmdzIG9yIGNyYXNoZXMg
d2hlbiBwYXNzZWQgaW5mIGFzIHN0YXJ0IG9yIGVuZCBhbmdsZQogICAgIGlmIChpc2Zpbml0ZShz
YSkgJiYgaXNmaW5pdGUoZWEpKQogICAgICAgICBDR1BhdGhBZGRBcmMobV9wYXRoLCAwLCBwLngo
KSwgcC55KCksIHIsIHNhLCBlYSwgY2xvY2t3aXNlKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHIpCiB7CiAgICAgQ0dQYXRoQWRkUmVjdChtX3BhdGgsIDAsIHIpOwogfQogCi12b2lkIFBh
dGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQYXRoOjphZGRFbGxpcHNl
KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBDR1BhdGhBZGRFbGxpcHNlSW5SZWN0KG1f
cGF0aCwgMCwgcik7CiB9CkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICByZXR1cm4gIWlzRW1wdHko
KTsKIH0KICAgICAKLUZsb2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCitHcmFw
aGljc1BvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAogewogICAgIHJldHVybiBDR1Bh
dGhHZXRDdXJyZW50UG9pbnQobV9wYXRoKTsKIH0KQEAgLTI2NSw3ICsyNjUsNyBAQAogc3RhdGlj
IHZvaWQgQ0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIodm9pZCAqaW5mbywgY29uc3QgQ0dQYXRo
RWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBQYXRoQXBwbGllckluZm8qIHBpbmZvID0gKFBhdGhB
cHBsaWVySW5mbyopaW5mbzsKLSAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAgICBHcmFwaGlj
c1BvaW50IHBvaW50c1szXTsKICAgICBQYXRoRWxlbWVudCBwZWxlbWVudDsKICAgICBwZWxlbWVu
dC50eXBlID0gKFBhdGhFbGVtZW50VHlwZSllbGVtZW50LT50eXBlOwogICAgIHBlbGVtZW50LnBv
aW50cyA9IHBvaW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsNyArMTAzLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVu
dDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKIHsKICAgICBjb250ZXh0LT5jbGlwKHJlY3QpOwogICAgIHBhaW50KGNvbnRleHQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NSw3ICsxNTUsNyBAQAogICAgIHJldHVybiBtX2RvY3VtZW50ID8gQ0dQREZEb2N1bWVudEdl
dE51bWJlck9mUGFnZXMobV9kb2N1bWVudCkgOiAwOwogfQogCi12b2lkIFBERkRvY3VtZW50SW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3ApCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFtX2Rv
Y3VtZW50IHx8IG1fY3VycmVudFBhZ2UgPT0gLTEpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsMTAgKzE3MCwxMCBAQAogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9y
KCkpCiAgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpLCBz
dHJva2VDb2xvclNwYWNlKCkpOwogICAgICAgICBDR1JlY3QgcmVjdHNbNF0gPSB7Ci0gICAgICAg
ICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIDEpLAotICAg
ICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIDEsIHJlY3Qud2lkdGgo
KSwgMSksCi0gICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgMSwg
cmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QubWF4WCgpIC0g
MSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdodCgpIC0gMikKKyAgICAgICAgICAgIEdyYXBo
aWNzUmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCisgICAgICAgICAg
ICBHcmFwaGljc1JlY3QocmVjdC54KCksIHJlY3QubWF4WSgpIC0gMSwgcmVjdC53aWR0aCgpLCAx
KSwKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCAxLCBy
ZWN0LmhlaWdodCgpIC0gMiksCisgICAgICAgICAgICBHcmFwaGljc1JlY3QocmVjdC5tYXhYKCkg
LSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKQogICAgICAgICB9OwogICAg
ICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgcmVjdHMsIDQpOwogICAgICAgICBpZiAo
b2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9yKCkpCkBAIC0xOTIsOCArMTkyLDggQEAKIAogICAg
IGZsb2F0IHdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICBGbG9hdFBvaW50IHAxID0g
cG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCBw
MSA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHAyID0gcG9pbnQyOwogICAgIGJvb2wgaXNW
ZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CiAgICAgCiAgICAgLy8gRm9yIG9kZCB3
aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8gdGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBm
bG9hdCBhcml0aG1ldGljCkBAIC0yNDcsMTEgKzI0NywxMSBAQAogICAgICAgICAvLyBhcHBlYXJh
bmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rh
c2hlZCBsaW5lLgogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigp
LCBzdHJva2VDb2xvclNwYWNlKCkpOyAgLy8gVGhlIHNhdmUvcmVzdG9yZSBtYWtlIGl0IHNhZmUg
dG8gbXV0YXRlIHRoZSBmaWxsIGNvbG9yIGhlcmUgd2l0aG91dCBzZXR0aW5nIGl0IGJhY2sgdG8g
dGhlIG9sZCBjb2xvci4KICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGggLyAy
LCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdp
ZHRoLCB3aWR0aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3Jh
cGhpY3NSZWN0KHAxLngoKSAtIHdpZHRoIC8gMiwgcDEueSgpIC0gd2lkdGgsIHdpZHRoLCB3aWR0
aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3JhcGhpY3NSZWN0
KHAyLngoKSAtIHdpZHRoIC8gMiwgcDIueSgpLCB3aWR0aCwgd2lkdGgpKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChw
MS54KCkgLSB3aWR0aCwgcDEueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpKTsKLSAgICAg
ICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChwMi54KCksIHAyLnko
KSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxs
UmVjdChjb250ZXh0LCBHcmFwaGljc1JlY3QocDEueCgpIC0gd2lkdGgsIHAxLnkoKSAtIHdpZHRo
IC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250
ZXh0LCBHcmFwaGljc1JlY3QocDIueCgpLCBwMi55KCkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0
aCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3
aWR0aCBvZiAzMCBwaXhlbHMuCkBAIC0zMjksNyArMzI5LDcgQEAKICAgICBmbG9hdCByZXZlcnNl
U2NhbGVGYWN0b3IgPSB3IC8gaDsKIAogICAgIGlmICh3ICE9IGgpCi0gICAgICAgIHNjYWxlKEZs
b2F0U2l6ZSgxLCBzY2FsZUZhY3RvcikpOworICAgICAgICBzY2FsZShHcmFwaGljc1NpemUoMSwg
c2NhbGVGYWN0b3IpKTsKIAogICAgIGZsb2F0IGhSYWRpdXMgPSB3IC8gMjsKICAgICBmbG9hdCB2
UmFkaXVzID0gaCAvIDI7CkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICBDR0NvbnRleHRBZGRBcmMo
Y29udGV4dCwgeCArIGhSYWRpdXMsICh5ICsgdlJhZGl1cykgKiByZXZlcnNlU2NhbGVGYWN0b3Is
IGhSYWRpdXMsIHN0YXJ0LCBlbmQsIHRydWUpOwogCiAgICAgaWYgKHcgIT0gaCkKLSAgICAgICAg
c2NhbGUoRmxvYXRTaXplKDEsIHJldmVyc2VTY2FsZUZhY3RvcikpOworICAgICAgICBzY2FsZShH
cmFwaGljc1NpemUoMSwgcmV2ZXJzZVNjYWxlRmFjdG9yKSk7CiAKICAgICBmbG9hdCB3aWR0aCA9
IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGludCBwYXRXaWR0aCA9IDA7CkBAIC0zOTksNyArMzk5
LDcgQEAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi1zdGF0aWMg
dm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1iZXJPZlBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIHZvaWQgYWRkQ29udmV4UG9s
eWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEdyYXBo
aWNzUG9pbnQqIHBvaW50cykKIHsKICAgICBBU1NFUlQobnVtYmVyT2ZQb2ludHMgPiAwKTsKIApA
QCAtNDA5LDcgKzQwOSw3IEBACiAgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywg
Y29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3Qg
R3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFz
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90
IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFz
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJP
ZlBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhcykKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC01NTQsNyAr
NTU0LDcgQEAKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBpZiAo
aGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5ib3VuZGlu
Z1JlY3QoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1Jl
Y3QoKTsKICAgICAgICAgICAgIENHTGF5ZXJSZWYgbGF5ZXIgPSBDR0xheWVyQ3JlYXRlV2l0aENv
bnRleHQoY29udGV4dCwgQ0dTaXplTWFrZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCAw
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRleHQgPSBDR0xheWVyR2V0Q29u
dGV4dChsYXllcik7CiAKQEAgLTYwOSw3ICs2MDksNyBAQAogCiAgICAgaWYgKG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnQpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgICAgICBG
bG9hdFJlY3QgcmVjdCA9IHBhdGguYm91bmRpbmdSZWN0KCk7CisgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgcmVjdCA9IHBhdGguYm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAgICBmbG9hdCBsaW5l
V2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKICAgICAgICAgICAgIGZsb2F0IGRvdWJsZUxpbmVX
aWR0aCA9IGxpbmVXaWR0aCAqIDI7CiAgICAgICAgICAgICBmbG9hdCBsYXllcldpZHRoID0gY2Vp
bGYocmVjdC53aWR0aCgpICsgZG91YmxlTGluZVdpZHRoKTsKQEAgLTY2Miw3ICs2NjIsNyBAQAog
ICAgIHJldHVybiBzdGF0ZS5zaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgc3RhdGUuc2hhZG93Q29s
b3IuYWxwaGEoKSAmJiBzdGF0ZS5zaGFkb3dCbHVyOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICAgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0Js
dXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5z
aGFkb3dDb2xvclNwYWNlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEdyYXBo
aWNzU2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7CiAgICAgICAgIGNv
bnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3codGhpcywgcmVjdCwgUm91bmRlZFJlY3Q6OlJhZGlp
KCkpOwogICAgIH0KIApAQCAtNzEyLDcgKzcxMiw3IEBACiAgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzMxLDcgKzcz
MSw3IEBACiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEZsb2F0U2l6ZShzaGFk
b3dCbHVyLCBzaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3Bh
Y2UpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KHRoaXMsIHJlY3QsIFJv
dW5kZWRSZWN0OjpSYWRpaSgpKTsKICAgICB9CiAKQEAgLTc2NCw3ICs3NjQsNyBAQAogICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaGFk
b3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAg
ICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93
Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRl
LnNoYWRvd0NvbG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coR3Jh
cGhpY3NTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwg
bV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKICAgICAgICAg
Y29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdyh0aGlzLCByZWN0LCBSb3VuZGVkUmVjdDo6UmFk
aWkodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiAgICAgfQog
CkBAIC04MTcsNyArODE3LDcgQEAKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgp
LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3co
RmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwg
bV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKKyAgICAgICAg
U2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEdyYXBoaWNzU2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dC
bHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUu
c2hhZG93Q29sb3JTcGFjZSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hhZG93
KHRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdC5yZWN0KCksIHJvdW5kZWRIb2xlUmVjdC5yYWRp
aSgpKTsKICAgICB9CiAKQEAgLTgzMCw3ICs4MzAsNyBAQAogICAgIHNldEZpbGxDb2xvcihvbGRG
aWxsQ29sb3IsIG9sZEZpbGxDb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTkxNSw3ICs5MTUsNyBAQAogICAgIHJlc3RvcmUoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBH
cmFwaGljc1NpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtOTkwLDE0ICs5OTAsMTQgQEAKICAgICBDR0NvbnRleHRTZXRBbHBoYShw
bGF0Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0
KCksIHIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjQsNyArMTEy
NCw3IEBACiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3NSw3ICsxMTc1LDcg
QEAKICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKHQuYSwgdC5iLCB0LmMsIHQuZCwgdC50eCwg
dC50eSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorR3Jh
cGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgcmV0dXJuIHJlY3Q7CkBAIC0xMjE3LDEzICsxMjE3LDEzIEBACiAg
ICAgaWYgKGRldmljZU9yaWdpbi54ID09IGRldmljZUxvd2VyUmlnaHQueCAmJiByZWN0LndpZHRo
KCkpCiAgICAgICAgIGRldmljZUxvd2VyUmlnaHQueCArPSAxOwogCi0gICAgRmxvYXRQb2ludCBy
b3VuZGVkT3JpZ2luID0gRmxvYXRQb2ludChkZXZpY2VPcmlnaW4ueCAvIGRldmljZVNjYWxlWCwg
ZGV2aWNlT3JpZ2luLnkgLyBkZXZpY2VTY2FsZVkpOwotICAgIEZsb2F0UG9pbnQgcm91bmRlZExv
d2VyUmlnaHQgPSBGbG9hdFBvaW50KGRldmljZUxvd2VyUmlnaHQueCAvIGRldmljZVNjYWxlWCwg
ZGV2aWNlTG93ZXJSaWdodC55IC8gZGV2aWNlU2NhbGVZKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0
KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CisgICAg
R3JhcGhpY3NQb2ludCByb3VuZGVkT3JpZ2luID0gR3JhcGhpY3NQb2ludChkZXZpY2VPcmlnaW4u
eCAvIGRldmljZVNjYWxlWCwgZGV2aWNlT3JpZ2luLnkgLyBkZXZpY2VTY2FsZVkpOworICAgIEdy
YXBoaWNzUG9pbnQgcm91bmRlZExvd2VyUmlnaHQgPSBHcmFwaGljc1BvaW50KGRldmljZUxvd2Vy
UmlnaHQueCAvIGRldmljZVNjYWxlWCwgZGV2aWNlTG93ZXJSaWdodC55IC8gZGV2aWNlU2NhbGVZ
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJp
Z2h0IC0gcm91bmRlZE9yaWdpbik7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjQ5LDcgKzEy
NDksNyBAQAogICAgICAgICAvLyBXZSB0cnkgdG8gcm91bmQgYWxsIHBhcmFtZXRlcnMgdG8gaW50
ZWdlciBib3VuZGFyaWVzIGluIGRldmljZSBzcGFjZS4gSWYgcm91bmRpbmcgcGl4ZWxzIGluIGRl
dmljZSBzcGFjZQogICAgICAgICAvLyBtYWtlcyBvdXIgdGhpY2tuZXNzIG1vcmUgdGhhbiBkb3Vi
bGUsIHRoZW4gdGhlcmUgbXVzdCBiZSBhIHNocmlua2luZy1zY2FsZSBmYWN0b3IgYW5kIHJvdW5k
aW5nIHRvIHBpeGVscwogICAgICAgICAvLyBpbiBkZXZpY2Ugc3BhY2Ugd2lsbCBtYWtlIHRoZSB1
bmRlcmxpbmVzIHRvbyB0aGljay4KLSAgICAgICAgQ0dSZWN0IGxpbmVSZWN0ID0gcm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoeCwgeSwgbGluZUxlbmd0aCwgYWRqdXN0ZWRUaGlja25lc3Mp
LCBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMpOworICAgICAgICBDR1JlY3QgbGluZVJlY3QgPSBy
b3VuZFRvRGV2aWNlUGl4ZWxzKEdyYXBoaWNzUmVjdCh4LCB5LCBsaW5lTGVuZ3RoLCBhZGp1c3Rl
ZFRoaWNrbmVzcyksIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucyk7CiAgICAgICAgIGlmIChsaW5l
UmVjdC5zaXplLmhlaWdodCA8IHRoaWNrbmVzcyAqIDIuMCkgewogICAgICAgICAgICAgeCA9IGxp
bmVSZWN0Lm9yaWdpbi54OwogICAgICAgICAgICAgeSA9IGxpbmVSZWN0Lm9yaWdpbi55OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgUERGRG9jdW1lbnRJbWFnZV9oCiAjZGVmaW5lIFBERkRvY3VtZW50
SW1hZ2VfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAKQEAg
LTYyLDE1ICs2MiwxNSBAQAogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Owog
CiAgICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAg
ICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwogICAgICAgICBpbnQgcGFnZUNvdW50KCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgYWRqdXN0Q1RNKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OwogCiAg
ICAgICAgIENHUERGRG9jdW1lbnRSZWYgbV9kb2N1bWVudDsKLSAgICAgICAgRmxvYXRSZWN0IG1f
bWVkaWFCb3g7Ci0gICAgICAgIEZsb2F0UmVjdCBtX2Nyb3BCb3g7CisgICAgICAgIEdyYXBoaWNz
UmVjdCBtX21lZGlhQm94OworICAgICAgICBHcmFwaGljc1JlY3QgbV9jcm9wQm94OwogICAgICAg
ICBmbG9hdCBtX3JvdGF0aW9uOwogICAgICAgICBpbnQgbV9jdXJyZW50UGFnZTsKICAgICB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDkg
QEAKICAgICB2b2lkIHNhdmUoKSB7fQogICAgIHZvaWQgcmVzdG9yZSgpIHt9CiAgICAgdm9pZCBm
bHVzaCgpIHt9Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIHt9CisgICAgdm9pZCBj
bGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYpIHt9CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKSB7
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikge30KKyAgICB2b2lkIHNjYWxlKGNv
bnN0IEdyYXBoaWNzU2l6ZSYpIHt9CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIHt9CkBAIC03OCw5ICs3OCw5IEBACiAgICAgdm9pZCBzYXZlKCk7CiAg
ICAgdm9pZCByZXN0b3JlKCk7CiAgICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgY2xpcChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsaXAoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAg
dm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
OworICAgIHZvaWQgc2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJik7CiAgICAgdm9pZCByb3RhdGUo
ZmxvYXQpOwogICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7CiAgICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fY29udGV4dD0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dChjZ0NvbnRl
eHQuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAg
IG1fY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAgICAgbV9jb250ZXh0LT50
cmFuc2xhdGUoMCwgLXNpemUuaGVpZ2h0KCkpOwogICAgIHN1Y2Nlc3MgPSB0cnVlOwogfQpAQCAt
MjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tX2NvbG9yU3Bh
Y2UsIGRhdGEubV9iaXRtYXBJbmZvLCBkYXRhLm1fZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVl
LCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAor
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKCFtX2Fj
Y2VsZXJhdGVSZW5kZXJpbmcpIHsKQEAgLTIyMCw4ICsyMjAsOCBAQAogICAgIH0KIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKSB7CiAgICAg
ICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKQEAgLTIzOCw3ICsyMzgsNyBAQAog
ICAgIH0KIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHRUb0NsaXAsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0VG9DbGlwLCBjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dFRvQ2xpcCA9
IGNvbnRleHRUb0NsaXAtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZTsKQEAgLTI1MCw3ICsyNTAsNyBAQAogI2VuZGlmCiAgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgcmVjdC54KCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlw
LCAxLCAtMSk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHRUb0NsaXAs
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2UuZ2V0KCkpOworICAg
IENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0VG9DbGlwLCBHcmFwaGljc1JlY3Qo
R3JhcGhpY3NQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlLmdldCgpKTsKICAgICBDR0NvbnRl
eHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHRUb0NsaXAsIDEsIC0xKTsKICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlwLCAtcmVjdC54KCksIC1yZWN0LnkoKSAt
IHJlY3QuaGVpZ2h0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0IHJlY3QgPSBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgRmxv
YXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhl
aWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgICAgICBHcmFwaGljc1JlY3QoMCwgMCwgQ0dJbWFn
ZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2Up
KSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2Up
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUNHLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAg
cmV0dXJuIFJldGFpblB0cjxDRkFycmF5UmVmPihBZG9wdENGLCBhcnJheSk7CiB9CiAKLXZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBzdGFydEFuaW1hdGlvbigp
OwogCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZs
b2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKTsKKyAgICBHcmFw
aGljc1VuaXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOwogICAg
IGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIw
Niw4ICsyMDYsOCBAQAogCiAgICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlv
biBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiBy
ZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKICAgICAvLyBhbmQgdGhlbiBzZXQg
YSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5LgotICAgIEZsb2F0
UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgRmxvYXRTaXplIHNlbGZTaXpl
ID0gY3VycmVudEZyYW1lU2l6ZSgpOworICAgIEdyYXBoaWNzUmVjdCBhZGp1c3RlZERlc3RSZWN0
ID0gZGVzdFJlY3Q7CisgICAgR3JhcGhpY3NTaXplIHNlbGZTaXplID0gY3VycmVudEZyYW1lU2l6
ZSgpOwogICAgIGlmIChzcmNSZWN0LnNpemUoKSAhPSBzZWxmU2l6ZSkgewogICAgICAgICBDR0lu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5ID0gQ0dDb250ZXh0R2V0SW50
ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCk7CiAgICAgICAgIC8vIFdoZW4gdGhlIGltYWdlIGlz
IHNjYWxlZCB1c2luZyBoaWdoLXF1YWxpdHkgaW50ZXJwb2xhdGlvbiwgd2UgY3JlYXRlIGEgdGVt
cG9yYXJ5IENHSW1hZ2UKQEAgLTIxNSwxMiArMjE1LDEyIEBACiAgICAgICAgIC8vIGludGVycG9s
YXRpb24gc21vb3RoZXMgc2hhcnAgZWRnZXMsIGNhdXNpbmcgcGl4ZWxzIGZyb20gb3V0c2lkZSB0
aGUgc291cmNlIHJlY3QgdG8gYmxlZWQKICAgICAgICAgLy8gaW50byB0aGUgZGVzdGluYXRpb24g
cmVjdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MTEyOTA5Pi4KICAgICAgICAgc2hvdWxkVXNlU3Vi
aW1hZ2UgPSAoaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0ga0NHSW50ZXJwb2xhdGlvbk5vbmUpICYm
IChzcmNSZWN0LnNpemUoKSAhPSBkZXN0UmVjdC5zaXplKCkgfHwgIWN0eHQtPmdldENUTSgpLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgICAgICBmbG9hdCB4U2NhbGUg
PSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOwotICAgICAgICBmbG9hdCB5U2Nh
bGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIEdyYXBo
aWNzVW5pdCB4U2NhbGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOworICAg
ICAgICBHcmFwaGljc1VuaXQgeVNjYWxlID0gc3JjUmVjdC5oZWlnaHQoKSAvIGRlc3RSZWN0Lmhl
aWdodCgpOwogICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2UpIHsKLSAgICAgICAgICAgIEZs
b2F0UmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OwotICAgICAgICAgICAgZmxvYXQgbGVmdFBh
ZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7Ci0gICAgICAgICAgICBm
bG9hdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOworICAg
ICAgICAgICAgR3JhcGhpY3NSZWN0IHN1YmltYWdlUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgICAg
ICBHcmFwaGljc1VuaXQgbGVmdFBhZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yKHNyY1JlY3Qu
eCgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzVW5pdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkg
LSBmbG9vcihzcmNSZWN0LnkoKSk7CiAKICAgICAgICAgICAgIHN1YmltYWdlUmVjdC5tb3ZlKC1s
ZWZ0UGFkZGluZywgLXRvcFBhZGRpbmcpOwogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5t
b3ZlKC1sZWZ0UGFkZGluZyAvIHhTY2FsZSwgLXRvcFBhZGRpbmcgLyB5U2NhbGUpOwpAQCAtMjM3
LDggKzIzNyw4IEBACiAgICAgICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkgLyB5U2NhbGUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVj
dC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2FsZSkpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKEZsb2F0U2l6ZShzZWxmU2l6ZS53aWR0aCgpIC8geFNjYWxlLCBzZWxmU2l6
ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRM
b2NhdGlvbihHcmFwaGljc1BvaW50KGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxl
LCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2FsZSkpOworICAgICAgICAgICAgYWRq
dXN0ZWREZXN0UmVjdC5zZXRTaXplKEdyYXBoaWNzU2l6ZShzZWxmU2l6ZS53aWR0aCgpIC8geFNj
YWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkKQEAgLTI3MCwxMSArMjcw
LDExIEBACiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29u
dGV4dFJlZiBjb250ZXh0KQogewogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilp
bmZvOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29u
dGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRo
KGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOworICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rldmlj
ZVBpeGVscyhHcmFwaGljc1JlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
KQogICAgICAgICByZXR1cm47CkBAIC0yOTIsMTUgKzI5MiwxNSBAQAogICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICAKICAgICAvLyBDb21wdXRlIHRoZSBzY2FsZWQg
dGlsZSBzaXplLgotICAgIGZsb2F0IHNjYWxlZFRpbGVIZWlnaHQgPSB0aWxlUmVjdC5oZWlnaHQo
KSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpOworICAgIEdy
YXBoaWNzVW5pdCBzY2FsZWRUaWxlSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiBuYXJyb3dQ
cmVjaXNpb25Ub0dyYXBoaWNzVW5pdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSk7CiAgICAgCiAgICAg
Ly8gV2UgaGF2ZSB0byBhZGp1c3QgdGhlIHBoYXNlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB3ZSdy
ZSBpbiBDYXJ0ZXNpYW4gc3BhY2Ugbm93ICh3aXRoIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2Yg
ZGVzdFJlY3QgYmVpbmcKICAgICAvLyB0aGUgb3JpZ2luKS4KLSAgICBmbG9hdCBhZGp1c3RlZFgg
PSBwaGFzZS54KCkgLSBkZXN0UmVjdC54KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29u
dGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBv
dXQuCi0gICAgZmxvYXQgYWRqdXN0ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgp
IC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChw
YXR0ZXJuVHJhbnNmb3JtLmQoKSkgKyBzY2FsZWRUaWxlSGVpZ2h0KTsKKyAgICBHcmFwaGljc1Vu
aXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpIC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICog
bmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOyAvLyBX
ZSB0cmFuc2xhdGVkIHRoZSBjb250ZXh0IHNvIHRoYXQgZGVzdFJlY3QueCgpIGlzIHRoZSBvcmln
aW4sIHNvIHN1YnRyYWN0IGl0IG91dC4KKyAgICBHcmFwaGljc1VuaXQgYWRqdXN0ZWRZID0gZGVz
dFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgp
ICogbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5kKCkpICsg
c2NhbGVkVGlsZUhlaWdodCk7CiAKICAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGls
ZUltYWdlKTsKKyAgICBHcmFwaGljc1VuaXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdl
KTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKICAgICBpZiAodGlsZVJl
Y3Quc2l6ZSgpID09IHNpemUoKSkKQEAgLTMxOSwxNCArMzE5LDE0IEBACiAgICAgLy8gaXRzIGJ1
ZmZlciBpcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBvdmVyYWxsIGltYWdlLiAgQmVjYXVzZSBhIHBh
cnRpYWxseSBkZWNvZGVkIENHSW1hZ2VSZWYgd2l0aCBhIHNtYWxsZXIgd2lkdGggb3IgaGVpZ2h0
IHRoYW4gdGhlCiAgICAgLy8gb3ZlcmFsbCBpbWFnZSBidWZmZXIgbmVlZHMgdG8gdGlsZSB3aXRo
ICJnYXBzIiwgd2UgY2FuJ3QgdXNlIHRoZSBvcHRpbWl6ZWQgdGlsaW5nIGNhbGwgaW4gdGhhdCBj
YXNlLgogICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgdXNlIENHQ29udGV4dERyYXdUaWxlZEltYWdl
IHdpdGggc2NhbGVkIHRpbGVzIG9uIExlb3BhcmQsIGJlY2F1c2UgaXQgc3VmZmVycyBmcm9tIHJv
dW5kaW5nIGVycm9ycy4gIFNub3cgTGVvcGFyZCBpcyBvay4KLSAgICBmbG9hdCBzY2FsZWRUaWxl
V2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJu
VHJhbnNmb3JtLmEoKSk7Ci0gICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2Up
OworICAgIEdyYXBoaWNzVW5pdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICog
bmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOworICAg
IEdyYXBoaWNzVW5pdCB3ID0gQ0dJbWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7CiAjaWZkZWYgQlVJ
TERJTkdfT05fTEVPUEFSRAogICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6
ZSgpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNj
YWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVpZ2h0KCkpCiAjZWxzZQogICAgIGlmICh3ID09
IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpKQogI2VuZGlmCi0gICAgICAg
IENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNvbnRleHQsIEZsb2F0UmVjdChhZGp1c3RlZFgsIGFk
anVzdGVkWSwgc2NhbGVkVGlsZVdpZHRoLCBzY2FsZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0
KCkpOworICAgICAgICBDR0NvbnRleHREcmF3VGlsZWRJbWFnZShjb250ZXh0LCBHcmFwaGljc1Jl
Y3QoYWRqdXN0ZWRYLCBhZGp1c3RlZFksIHNjYWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdo
dCksIHN1YkltYWdlLmdldCgpKTsKICAgICBlbHNlIHsKIAogICAgIC8vIE9uIExlb3BhcmQgYW5k
IG5ld2VyLCB0aGlzIGNvZGUgbm93IG9ubHkgcnVucyBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1h
Z2VzIHdob3NlIGJ1ZmZlcnMgZG8gbm90IHlldCBtYXRjaCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRo
ZSBpbWFnZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShBVkZPVU5EQVRJT04pCiAKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTI1MSw3ICsyNTEs
NyBAQAogCiAgICAgU3RyaW5nIG1fYXNzZXRVUkw7CiAgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQg
bV9wcmVsb2FkOwotICAgIEZsb2F0U2l6ZSBtX3NjYWxlRmFjdG9yOworICAgIEdyYXBoaWNzU2l6
ZSBtX3NjYWxlRmFjdG9yOwogCiAgICAgSW50U2l6ZSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAg
IG11dGFibGUgZmxvYXQgbV9jYWNoZWRNYXhUaW1lTG9hZGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0J
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQAogICAgIGlmIChpbWFnZSkgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogICAgICAgICBjb250
ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOworICAgICAgICBjb250
ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC0+
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KTsKICAgICAgICAg
SW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUocmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBwYWludFJlY3Qud2lkdGgoKSwgcGFpbnRS
ZWN0LmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcy
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBH
cmFwaGljc1JlY3Q7CiAKIGNsYXNzIEludFJlY3QgewogcHVibGljOgpAQCAtODIsNyArODIsNyBA
QAogICAgIEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAg
ICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBs
aWNpdCBJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCk7IC8vIGRvbid0IGRvIHRoaXMg
aW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIEludFBvaW50IGxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGF0aFRyYXZlcnNhbFN0
YXRlX2gKICNkZWZpbmUgUGF0aFRyYXZlcnNhbFN0YXRlX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxBY3Rpb24pOwogCiAgICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYp
OwotICAgIGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRy
b2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhj
b25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJv
bDIsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgbW92ZVRvKGNvbnN0IEdy
YXBoaWNzUG9pbnQmKTsKKyAgICBmbG9hdCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOwor
ICAgIGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRy
b2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgY3ViaWNCZXppZXJU
byhjb25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9sMSwgY29uc3QgR3JhcGhpY3NQb2ludCYg
bmV3Q29udHJvbDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CiAgICAgCiAgICAgdm9p
ZCBwcm9jZXNzU2VnbWVudCgpOwogCkBAIC01MywxNyArNTMsMTcgQEAKICAgICBQYXRoVHJhdmVy
c2FsQWN0aW9uIG1fYWN0aW9uOwogICAgIGJvb2wgbV9zdWNjZXNzOwogCi0gICAgRmxvYXRQb2lu
dCBtX2N1cnJlbnQ7Ci0gICAgRmxvYXRQb2ludCBtX3N0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9j
b250cm9sMTsKLSAgICBGbG9hdFBvaW50IG1fY29udHJvbDI7CisgICAgR3JhcGhpY3NQb2ludCBt
X2N1cnJlbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX3N0YXJ0OworICAgIEdyYXBoaWNzUG9pbnQg
bV9jb250cm9sMTsKKyAgICBHcmFwaGljc1BvaW50IG1fY29udHJvbDI7CiAKICAgICBmbG9hdCBt
X3RvdGFsTGVuZ3RoOwogICAgIHVuc2lnbmVkIG1fc2VnbWVudEluZGV4OwogICAgIGZsb2F0IG1f
ZGVzaXJlZExlbmd0aDsKIAogICAgIC8vIEZvciBub3JtYWwgY2FsY3VsYXRpb25zCi0gICAgRmxv
YXRQb2ludCBtX3ByZXZpb3VzOworICAgIEdyYXBoaWNzUG9pbnQgbV9wcmV2aW91czsKICAgICBm
bG9hdCBtX25vcm1hbEFuZ2xlOyAvLyBkZWdyZWVzCiB9OyAgICAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgog
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KQEAgLTQzLDcgKzQzLDcgQEAKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUm
IHRyYXZlcnNhbFN0YXRlID0gKnN0YXRpY19jYXN0PFBhdGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8p
OwogICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKLSAg
ICBGbG9hdFBvaW50KiBwb2ludHMgPSBlbGVtZW50LT5wb2ludHM7CisgICAgR3JhcGhpY3NQb2lu
dCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwogICAgIGZsb2F0IHNlZ21lbnRMZW5ndGggPSAw
OwogICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewogICAgICAgICBjYXNlIFBhdGhFbGVtZW50
TW92ZVRvUG9pbnQ6CkBAIC03Myw3ICs3Myw3IEBACiAgICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRl
Lm1fdG90YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9h
dCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorR3JhcGhpY3NQb2ludCBQYXRoOjpwb2ludEF0TGVu
Z3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0
YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExl
bmd0aCk7CiAgICAgdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVuZ3RoID0gbGVuZ3RoOwpAQCAt
OTcsMTMgKzk3LDEzIEBACiAgICAgYWRkUm91bmRlZFJlY3Qoci5yZWN0KCksIHIucmFkaWkoKS50
b3BMZWZ0KCksIHIucmFkaWkoKS50b3BSaWdodCgpLCByLnJhZGlpKCkuYm90dG9tTGVmdCgpLCBy
LnJhZGlpKCkuYm90dG9tUmlnaHQoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2
b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3Qg
R3JhcGhpY3NTaXplJiByb3VuZGluZ1JhZGlpKQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIHJhZGl1cyhyb3VuZGluZ1JhZGlpKTsK
LSAgICBGbG9hdFNpemUgaGFsZlNpemUocmVjdC53aWR0aCgpIC8gMiwgcmVjdC5oZWlnaHQoKSAv
IDIpOworICAgIEdyYXBoaWNzU2l6ZSByYWRpdXMocm91bmRpbmdSYWRpaSk7CisgICAgR3JhcGhp
Y3NTaXplIGhhbGZTaXplKHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAog
ICAgIC8vIElmIHJ4IGlzIGdyZWF0ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0aCBvZiB0aGUgcmVj
dGFuZ2xlCiAgICAgLy8gdGhlbiBzZXQgcnggdG8gaGFsZiBvZiB0aGUgd2lkdGggKHJlcXVpcmVk
IGluIFNWRyBzcGVjKQpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgYWRkQmV6aWVyc0ZvclJvdW5k
ZWRSZWN0KHJlY3QsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cyk7CiB9CiAKLXZvaWQg
UGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBy
ZWN0LCBjb25zdCBHcmFwaGljc1NpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6
ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9tTGVmdFJhZGl1cywg
Y29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21SaWdodFJhZGl1cykKIHsKICAgICBpZiAocmVjdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzOSwyNiArMTM5LDI2IEBACiAvLyBUaGlz
IGlzIDEta2FwcGEsIHdoZXJlIGthcHBhID0gNCAqIChzcXJ0KDIpIC0gMSkgLyAzCiBzdGF0aWMg
Y29uc3QgZmxvYXQgZ0NpcmNsZUNvbnRyb2xQb2ludCA9IDAuNDQ3NzE1ZjsKIAotdm9pZCBQYXRo
OjphZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0
b21SaWdodFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BMZWZ0UmFkaXVzLCBj
b25zdCBHcmFwaGljc1NpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJv
dHRvbUxlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCiB7
Ci0gICAgbW92ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCks
IHJlY3QueSgpKSk7CisgICAgbW92ZVRvKEdyYXBoaWNzUG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0
UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CiAKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChy
ZWN0Lm1heFgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7Ci0gICAgYWRk
QmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QubWF4WCgpIC0gdG9wUmlnaHRSYWRpdXMud2lk
dGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QueSgpICsgdG9wUmlnaHRSYWRpdXMuaGVp
Z2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgIEZsb2F0
UG9pbnQocmVjdC5tYXhYKCksIHJlY3QueSgpICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsK
LSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgLSBib3R0
b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOwotICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2lu
dChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSAq
IGdDaXJjbGVDb250cm9sUG9pbnQpLAotICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChy
ZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBv
aW50LCByZWN0Lm1heFkoKSksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3Qu
bWF4WCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwgcmVjdC5tYXhZKCkpKTsKLSAgICBh
ZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwg
cmVjdC5tYXhZKCkpKTsKLSAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkg
KyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0Lm1h
eFkoKSksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1h
eFkoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwK
LSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgpIC0g
Ym90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJl
Y3QueCgpLCByZWN0LnkoKSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5o
ZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLAotICAgICAgICAgICAgICAgICAgICAgRmxv
YXRQb2ludChyZWN0LngoKSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9s
UG9pbnQsIHJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54
KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgYWRkTGluZVRvKEdy
YXBoaWNzUG9pbnQocmVjdC5tYXhYKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByZWN0Lnko
KSkpOworICAgIGFkZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSAtIHRv
cFJpZ2h0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCisg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSAr
IHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAg
ICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRvcFJp
Z2h0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQocmVjdC5t
YXhYKCksIHJlY3QubWF4WSgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBh
ZGRCZXppZXJDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIC0g
Ym90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAgICAg
ICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCkgLSBib3R0b21SaWdodFJh
ZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC5tYXhZKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFk
aXVzLndpZHRoKCksIHJlY3QubWF4WSgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQo
cmVjdC54KCkgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QubWF4WSgpKSk7CisgICAg
YWRkQmV6aWVyQ3VydmVUbyhHcmFwaGljc1BvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1
cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC5tYXhZKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSBib3R0b21M
ZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAgICAg
ICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIGJvdHRvbUxlZnRS
YWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRMaW5lVG8oR3JhcGhpY3NQb2ludChyZWN0LngoKSwg
cmVjdC55KCkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkQmV6aWVyQ3VydmVU
byhHcmFwaGljc1BvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0
KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBv
aW50LCByZWN0LnkoKSksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3Qu
eCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOwogCiAgICAgY2xvc2VTdWJw
YXRoKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBACiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGllbnQ6OkdyYWRpZW50KGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK0dyYWRpZW50OjpHcmFk
aWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEpCiAg
ICAgOiBtX3JhZGlhbChmYWxzZSkKICAgICAsIG1fcDAocDApCiAgICAgLCBtX3AxKHAxKQpAQCAt
NDcsNyArNDcsNyBAQAogICAgIHBsYXRmb3JtSW5pdCgpOwogfQogCi1HcmFkaWVudDo6R3JhZGll
bnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwg
ZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvKQorR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0
IHIxLCBmbG9hdCBhc3BlY3RSYXRpbykKICAgICA6IG1fcmFkaWFsKHRydWUpCiAgICAgLCBtX3Aw
KHAwKQogICAgICwgbV9wMShwMSkKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwbGF0Zm9ybURlc3Ry
b3koKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2lu
ZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QpCit2b2lkIEdyYWRpZW50OjphZGp1
c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEludFNpemUmIHNpemUsIEdyYXBoaWNzUmVjdCYg
c3JjUmVjdCkKIHsKICAgICBpZiAobV9yYWRpYWwpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKICNp
ZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9OVCkKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAg
IG1fZm9udExpc3QtPmludmFsaWRhdGUoZm9udFNlbGVjdG9yKTsKIH0KIAotdm9pZCBGb250Ojpk
cmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6
OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAg
ICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMg
dGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZy4KICAgICBpZiAobG9hZGluZ0N1c3Rv
bUZvbnRzKCkpCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICByZXR1cm4gZHJhd0NvbXBsZXhUZXh0
KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
CiB7CiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm47CkBAIC0y
MDIsNyArMjAyLDcgQEAKICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1bik7
CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKIHsKICAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAKICAgICByZXR1cm4gZGF0YUNoYW5n
ZWQoYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotdm9pZCBJbWFnZTo6ZmlsbFdpdGhTb2xpZENvbG9y
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKK3ZvaWQgSW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcihHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYg
KGNvbG9yLmFscGhhKCkgPD0gMCkKICAgICAgICAgcmV0dXJuOwpAQCAtODcsNyArODcsNyBAQAog
ICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKIH0KIAot
c3RhdGljIGlubGluZSBGbG9hdFNpemUgY2FsY3VsYXRlUGF0dGVyblNjYWxlKGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSkKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NTaXpl
IGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUgdlJ1bGUpCiB7CiAgICAgZmxvYXQgc2NhbGVYID0gMS4wZiwgc2NhbGVZID0gMS4wZjsK
ICAgICAKQEAgLTEwMSwxMSArMTAxLDExIEBACiAgICAgaWYgKHZSdWxlID09IEltYWdlOjpSZXBl
YXRUaWxlKQogICAgICAgICBzY2FsZVkgPSBzY2FsZVg7CiAgICAgCi0gICAgcmV0dXJuIEZsb2F0
U2l6ZShzY2FsZVgsIHNjYWxlWSk7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShzY2FsZVgsIHNj
YWxlWSk7CiB9CiAKIAotdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQs
IGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVkVGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHNyY1BvaW50LCBjb25zdCBHcmFwaGljc1NpemUmIHNjYWxlZFRpbGVTaXplLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7ICAgIAog
ICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewogICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY3R4dCwgZGVzdFJlY3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7
CkBAIC0xMTcsMjMgKzExNywyMyBAQAogICAgIEFTU0VSVCghaXNCaXRtYXBJbWFnZSgpIHx8IHN0
YXRpY19jYXN0PEJpdG1hcEltYWdlKj4odGhpcyktPm5vdFNvbGlkQ29sb3IoKSk7CiAjZW5kaWYK
IAotICAgIEZsb2F0U2l6ZSBpbnRyaW5zaWNUaWxlU2l6ZSA9IHNpemUoKTsKKyAgICBHcmFwaGlj
c1NpemUgaW50cmluc2ljVGlsZVNpemUgPSBzaXplKCk7CiAgICAgaWYgKGhhc1JlbGF0aXZlV2lk
dGgoKSkKICAgICAgICAgaW50cmluc2ljVGlsZVNpemUuc2V0V2lkdGgoc2NhbGVkVGlsZVNpemUu
d2lkdGgoKSk7CiAgICAgaWYgKGhhc1JlbGF0aXZlSGVpZ2h0KCkpCiAgICAgICAgIGludHJpbnNp
Y1RpbGVTaXplLnNldEhlaWdodChzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBGbG9h
dFNpemUgc2NhbGUoc2NhbGVkVGlsZVNpemUud2lkdGgoKSAvIGludHJpbnNpY1RpbGVTaXplLndp
ZHRoKCksCisgICAgR3JhcGhpY3NTaXplIHNjYWxlKHNjYWxlZFRpbGVTaXplLndpZHRoKCkgLyBp
bnRyaW5zaWNUaWxlU2l6ZS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICBzY2FsZWRUaWxl
U2l6ZS5oZWlnaHQoKSAvIGludHJpbnNpY1RpbGVTaXplLmhlaWdodCgpKTsKIAotICAgIEZsb2F0
UmVjdCBvbmVUaWxlUmVjdDsKKyAgICBHcmFwaGljc1JlY3Qgb25lVGlsZVJlY3Q7CiAgICAgb25l
VGlsZVJlY3Quc2V0WChkZXN0UmVjdC54KCkgKyBmbW9kZihmbW9kZigtc3JjUG9pbnQueCgpLCBz
Y2FsZWRUaWxlU2l6ZS53aWR0aCgpKSAtIHNjYWxlZFRpbGVTaXplLndpZHRoKCksIHNjYWxlZFRp
bGVTaXplLndpZHRoKCkpKTsKICAgICBvbmVUaWxlUmVjdC5zZXRZKGRlc3RSZWN0LnkoKSArIGZt
b2RmKGZtb2RmKC1zcmNQb2ludC55KCksIHNjYWxlZFRpbGVTaXplLmhlaWdodCgpKSAtIHNjYWxl
ZFRpbGVTaXplLmhlaWdodCgpLCBzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSkpOwogICAgIG9uZVRp
bGVSZWN0LnNldFNpemUoc2NhbGVkVGlsZVNpemUpOwogICAgIAogICAgIC8vIENoZWNrIGFuZCBz
ZWUgaWYgYSBzaW5nbGUgZHJhdyBvZiB0aGUgaW1hZ2UgY2FuIGNvdmVyIHRoZSBlbnRpcmUgYXJl
YSB3ZSBhcmUgc3VwcG9zZWQgdG8gdGlsZS4gICAgCiAgICAgaWYgKG9uZVRpbGVSZWN0LmNvbnRh
aW5zKGRlc3RSZWN0KSkgewotICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVNyY1JlY3Q7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgdmlzaWJsZVNyY1JlY3Qu
c2V0WCgoZGVzdFJlY3QueCgpIC0gb25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCkpOwog
ICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRZKChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55
KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRXaWR0aChk
ZXN0UmVjdC53aWR0aCgpIC8gc2NhbGUud2lkdGgoKSk7CkBAIC0xNDMsMTQgKzE0MywxNCBAQAog
ICAgIH0KIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsK
LSAgICBGbG9hdFJlY3QgdGlsZVJlY3QoRmxvYXRQb2ludCgpLCBpbnRyaW5zaWNUaWxlU2l6ZSk7
ICAgIAorICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdChHcmFwaGljc1BvaW50KCksIGludHJpbnNp
Y1RpbGVTaXplKTsgICAgCiAgICAgZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIG9uZVRpbGVSZWN0LmxvY2F0aW9uKCksIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0KTsKICAgICAKICAgICBzdGFydEFuaW1hdGlvbigpOwogfQogCiAvLyBGSVhNRTogTWVy
Z2Ugd2l0aCB0aGUgb3RoZXIgZHJhd1RpbGVkIGV2ZW50dWFsbHksIHNpbmNlIHdlIG5lZWQgYSBj
b21iaW5hdGlvbiBvZiBib3RoIGZvciBzb21lIHRoaW5ncy4KLXZvaWQgSW1hZ2U6OmRyYXdUaWxl
ZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgSW1hZ2U6
OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1
bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsgICAgCiAgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7CiAgICAgICAgIGZp
bGxXaXRoU29saWRDb2xvcihjdHh0LCBkc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JT
cGFjZSwgb3ApOwpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgaWYgKHZSdWxlID09IFJvdW5kVGls
ZSkKICAgICAgICAgdlJ1bGUgPSBSZXBlYXRUaWxlOwogCi0gICAgRmxvYXRTaXplIHNjYWxlID0g
Y2FsY3VsYXRlUGF0dGVyblNjYWxlKGRzdFJlY3QsIHNyY1JlY3QsIGhSdWxlLCB2UnVsZSk7Cisg
ICAgR3JhcGhpY3NTaXplIHNjYWxlID0gY2FsY3VsYXRlUGF0dGVyblNjYWxlKGRzdFJlY3QsIHNy
Y1JlY3QsIGhSdWxlLCB2UnVsZSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2Nh
bGUuaGVpZ2h0KCkpOwogCiAgICAgLy8gV2Ugd2FudCB0byBjb25zdHJ1Y3QgdGhlIHBoYXNlIHN1
Y2ggdGhhdCB0aGUgcGF0dGVybiBpcyBjZW50ZXJlZCAod2hlbiBzdHJldGNoIGlzIG5vdApAQCAt
MTc0LDcgKzE3NCw3IEBACiAgICAgICAgIGhQaGFzZSAtPSBmbW9kZihkc3RSZWN0LndpZHRoKCks
IHNjYWxlLndpZHRoKCkgKiBzcmNSZWN0LndpZHRoKCkpIC8gMi4wZjsKICAgICBpZiAodlJ1bGUg
PT0gSW1hZ2U6OlJlcGVhdFRpbGUpCiAgICAgICAgIHZQaGFzZSAtPSBmbW9kZihkc3RSZWN0Lmhl
aWdodCgpLCBzY2FsZS5oZWlnaHQoKSAqIHNyY1JlY3QuaGVpZ2h0KCkpIC8gMi4wZjsKLSAgICBG
bG9hdFBvaW50IHBhdHRlcm5QaGFzZShkc3RSZWN0LngoKSAtIGhQaGFzZSwgZHN0UmVjdC55KCkg
LSB2UGhhc2UpOworICAgIEdyYXBoaWNzUG9pbnQgcGF0dGVyblBoYXNlKGRzdFJlY3QueCgpIC0g
aFBoYXNlLCBkc3RSZWN0LnkoKSAtIHZQaGFzZSk7CiAgICAgCiAgICAgZHJhd1BhdHRlcm4oY3R4
dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wLCBkc3RSZWN0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDcgKzk5LDcgQEAKICAgICB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nIC09IG1fcnVu
V2lkdGhTb0ZhcjsKIAogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9maW5hbFJvdW5k
aW5nV2lkdGg7Ci0gICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRz
OwogCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHByaW1hcnlGb250ID0gbV9mb250LT5wcmlt
YXJ5Rm9udCgpOwogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSBwcmlt
YXJ5Rm9udDsKQEAgLTIzOCw5ICsyMzgsOSBAQAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0aCA9
IHdpZHRoIC0gb2xkV2lkdGg7CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRz
KSB7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhC
b3VuZGluZ0JveFksIGJvdW5kcy5tYXhZKCkpOwotICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5k
aW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBib3VuZHMueSgpKTsKLSAgICAg
ICAgICAgIG1fbGFzdEdseXBoT3ZlcmZsb3cgPSBtYXg8ZmxvYXQ+KDAsIGJvdW5kcy5tYXhYKCkg
LSB3aWR0aCk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4
R2x5cGhCb3VuZGluZ0JveFksIHN0YXRpY19jYXN0PGZsb2F0Pihib3VuZHMubWF4WSgpKSk7Cisg
ICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGlu
Z0JveFksIHN0YXRpY19jYXN0PGZsb2F0Pihib3VuZHMueSgpKSk7CisgICAgICAgICAgICBtX2xh
c3RHbHlwaE92ZXJmbG93ID0gbWF4PGZsb2F0PigwLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRz
Lm1heFgoKSkgLSB3aWR0aCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NQb2ludC5oIgogI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC00MzAs
MTcgKzQzMCwxNyBAQAogCiB2b2lkIEdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9wZXJ0aWVzKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXllclRyZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikg
Y29uc3QKIHsKLSAgICBpZiAobV9wb3NpdGlvbiAhPSBGbG9hdFBvaW50KCkpIHsKKyAgICBpZiAo
bV9wb3NpdGlvbiAhPSBHcmFwaGljc1BvaW50KCkpIHsKICAgICAgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCArIDEpOwogICAgICAgICB0cyA8PCAiKHBvc2l0aW9uICIgPDwgbV9wb3NpdGlvbi54
KCkgPDwgIiAiIDw8IG1fcG9zaXRpb24ueSgpIDw8ICIpXG4iOwogICAgIH0KIAotICAgIGlmICht
X2JvdW5kc09yaWdpbiAhPSBGbG9hdFBvaW50KCkpIHsKKyAgICBpZiAobV9ib3VuZHNPcmlnaW4g
IT0gR3JhcGhpY3NQb2ludCgpKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAx
KTsKICAgICAgICAgdHMgPDwgIihib3VuZHMgb3JpZ2luICIgPDwgbV9ib3VuZHNPcmlnaW4ueCgp
IDw8ICIgIiA8PCBtX2JvdW5kc09yaWdpbi55KCkgPDwgIilcbiI7CiAgICAgfQogCi0gICAgaWYg
KG1fYW5jaG9yUG9pbnQgIT0gRmxvYXRQb2ludDNEKDAuNWYsIDAuNWYsIDApKSB7CisgICAgaWYg
KG1fYW5jaG9yUG9pbnQgIT0gR3JhcGhpY3NQb2ludDNEKDAuNWYsIDAuNWYsIDApKSB7CiAgICAg
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICAgICAgdHMgPDwgIihhbmNob3Ig
IiA8PCBtX2FuY2hvclBvaW50LngoKSA8PCAiICIgPDwgbV9hbmNob3JQb2ludC55KCkgPDwgIilc
biI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TGFzdFNoYWRvd1ZhbHVlcyhjb25z
dCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJh
ZGlpJiByYWRpaSkKKyAgICB2b2lkIHNldExhc3RTaGFkb3dWYWx1ZXMoY29uc3QgR3JhcGhpY3NT
aXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYg
cmFkaWkpCiAgICAgewogICAgICAgICBtX2xhc3RXYXNJbnNldCA9IGZhbHNlOwogICAgICAgICBt
X2xhc3RSYWRpdXMgPSByYWRpdXM7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIG1fbGFzdFJh
ZGlpID0gcmFkaWk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRMYXN0SW5zZXRTaGFkb3dWYWx1ZXMo
Y29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRSZWN0JiBzaGFk
b3dSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQorICAgIHZvaWQgc2V0TGFz
dEluc2V0U2hhZG93VmFsdWVzKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3Vu
ZHMsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJh
ZGlpJiByYWRpaSkKICAgICB7CiAgICAgICAgIG1fbGFzdFdhc0luc2V0ID0gdHJ1ZTsKICAgICAg
ICAgbV9sYXN0SW5zZXRCb3VuZHMgPSBib3VuZHM7CkBAIC0xMDQsMTQgKzEwNCwxNCBAQAogICAg
ICAgICBtX2xhc3RSYWRpaSA9IHJhZGlpOwogICAgIH0KICAgICAKLSAgICBib29sIG1hdGNoZXNM
YXN0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBS
b3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAorICAgIGJvb2wgbWF0Y2hlc0xhc3RTaGFk
b3coY29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJv
dW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9sYXN0
V2FzSW5zZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBtX2xh
c3RSYWRpdXMgPT0gcmFkaXVzICYmIG1fbGFzdENvbG9yID09IGNvbG9yICYmIG1fbGFzdENvbG9y
U3BhY2UgPT0gY29sb3JTcGFjZSAmJiBzaGFkb3dSZWN0ID09IG1fbGFzdFNoYWRvd1JlY3QgJiYg
cmFkaWkgPT0gbV9sYXN0UmFkaWk7CiAgICAgfQogCi0gICAgYm9vbCBtYXRjaGVzTGFzdEluc2V0
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0UmVj
dCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkgY29uc3QKKyAg
ICBib29sIG1hdGNoZXNMYXN0SW5zZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMs
IGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGJvdW5kcywgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3Vu
ZGVkUmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2xhc3RX
YXNJbnNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MSwxOCArMTQxLDE4IEBA
CiAgICAgdm9pZCBjbGVhclNjcmF0Y2hCdWZmZXIoKQogICAgIHsKICAgICAgICAgbV9pbWFnZUJ1
ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIG1fbGFzdFJhZGl1cyA9IEZsb2F0U2l6ZSgpOworICAg
ICAgICBtX2xhc3RSYWRpdXMgPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiAKICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CiAgICAgVGltZXI8U2NyYXRjaEJ1ZmZlcj4gbV9w
dXJnZVRpbWVyOwogICAgIAotICAgIEZsb2F0UmVjdCBtX2xhc3RJbnNldEJvdW5kczsKLSAgICBG
bG9hdFJlY3QgbV9sYXN0U2hhZG93UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9sYXN0SW5zZXRC
b3VuZHM7CisgICAgR3JhcGhpY3NSZWN0IG1fbGFzdFNoYWRvd1JlY3Q7CiAgICAgUm91bmRlZFJl
Y3Q6OlJhZGlpIG1fbGFzdFJhZGlpOwogICAgIENvbG9yIG1fbGFzdENvbG9yOwogICAgIENvbG9y
U3BhY2UgbV9sYXN0Q29sb3JTcGFjZTsKLSAgICBGbG9hdFNpemUgbV9sYXN0UmFkaXVzOworICAg
IEdyYXBoaWNzU2l6ZSBtX2xhc3RSYWRpdXM7CiAgICAgYm9vbCBtX2xhc3RXYXNJbnNldDsKICAg
ICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNjgsNyArMTY4LDcgQEAKIAogc3RhdGljIGNv
bnN0IGludCB0ZW1wbGF0ZVNpZGVMZW5ndGggPSAxOwogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVy
KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitTaGFkb3dCbHVyOjpTaGFkb3dC
bHVyKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgOiBtX2Nv
bG9yKGNvbG9yKQogICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCiAgICAgLCBtX2JsdXJS
YWRpdXMocmFkaXVzKQpAQCAtMTg2LDcgKzE4Niw3IEBACiB7CiB9CiAKLXZvaWQgU2hhZG93Qmx1
cjo6c2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJv
b2wgaWdub3JlVHJhbnNmb3JtcykKK3ZvaWQgU2hhZG93Qmx1cjo6c2V0U2hhZG93VmFsdWVzKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wgaWdub3JlVHJhbnNm
b3JtcykKIHsKICAgICBtX2JsdXJSYWRpdXMgPSByYWRpdXM7CiAgICAgbV9vZmZzZXQgPSBvZmZz
ZXQ7CkBAIC0yMDAsNyArMjAwLDcgQEAKIHZvaWQgU2hhZG93Qmx1cjo6dXBkYXRlU2hhZG93Qmx1
clZhbHVlcygpCiB7CiAgICAgLy8gTGltaXQgYmx1ciByYWRpdXMgdG8gMTI4IHRvIGF2b2lkIGxv
dHMgb2YgdmVyeSBleHBlbnNpdmUgYmx1cnJpbmcuCi0gICAgbV9ibHVyUmFkaXVzID0gbV9ibHVy
UmFkaXVzLnNocnVua1RvKEZsb2F0U2l6ZSgxMjgsIDEyOCkpOworICAgIG1fYmx1clJhZGl1cyA9
IG1fYmx1clJhZGl1cy5zaHJ1bmtUbyhHcmFwaGljc1NpemUoMTI4LCAxMjgpKTsKIAogICAgIC8v
IFRoZSB0eXBlIG9mIHNoYWRvdyBpcyBkZWNpZGVkIGJ5IHRoZSBibHVyIHJhZGl1cywgc2hhZG93
IG9mZnNldCwgYW5kIHNoYWRvdyBjb2xvci4KICAgICBpZiAoIW1fY29sb3IuaXNWYWxpZCgpIHx8
ICFtX2NvbG9yLmFscGhhKCkpIHsKQEAgLTI2NCw4ICsyNjQsOCBAQAogewogICAgIG1fdHlwZSA9
IE5vU2hhZG93OwogICAgIG1fY29sb3IgPSBDb2xvcigpOwotICAgIG1fYmx1clJhZGl1cyA9IEZs
b2F0U2l6ZSgpOwotICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9ibHVyUmFkaXVz
ID0gR3JhcGhpY3NTaXplKCk7CisgICAgbV9vZmZzZXQgPSBHcmFwaGljc1NpemUoKTsKIH0KIAog
dm9pZCBTaGFkb3dCbHVyOjpibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGludCByb3dTdHJpZGUpCkBAIC0zNjMsMTcgKzM2MywxNyBA
QAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDYWxjdWxhdGUgdHJhbnNmb3JtZWQgdW5pdCB2
ZWN0b3JzLgotICAgIGNvbnN0IEZsb2F0UXVhZCB1bml0UXVhZChGbG9hdFBvaW50KDAsIDApLCBG
bG9hdFBvaW50KDEsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50
KDAsIDEpLCBGbG9hdFBvaW50KDEsIDEpKTsKLSAgICBjb25zdCBGbG9hdFF1YWQgdHJhbnNmb3Jt
ZWRVbml0UXVhZCA9IHRyYW5zZm9ybS5tYXBRdWFkKHVuaXRRdWFkKTsKKyAgICBjb25zdCBHcmFw
aGljc1F1YWQgdW5pdFF1YWQoR3JhcGhpY3NQb2ludCgwLCAwKSwgR3JhcGhpY3NQb2ludCgxLCAw
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCgwLCAxKSwgR3Jh
cGhpY3NQb2ludCgxLCAxKSk7CisgICAgY29uc3QgR3JhcGhpY3NRdWFkIHRyYW5zZm9ybWVkVW5p
dFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZCh1bml0UXVhZCk7CiAKICAgICAvLyBDYWxjdWxhdGUg
WCBheGlzIHNjYWxlIGZhY3Rvci4KLSAgICBjb25zdCBGbG9hdFNpemUgeFVuaXRDaGFuZ2UgPSB0
cmFuc2Zvcm1lZFVuaXRRdWFkLnAyKCkgLSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAxKCk7CisgICAg
Y29uc3QgR3JhcGhpY3NTaXplIHhVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMigp
IC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOwogICAgIGNvbnN0IGZsb2F0IHhBeGlzU2NhbGUg
PSBzcXJ0Zih4VW5pdENoYW5nZS53aWR0aCgpICogeFVuaXRDaGFuZ2Uud2lkdGgoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHhVbml0Q2hhbmdlLmhlaWdodCgpICogeFVu
aXRDaGFuZ2UuaGVpZ2h0KCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIFkgYXhpcyBzY2FsZSBmYWN0
b3IuCi0gICAgY29uc3QgRmxvYXRTaXplIHlVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVh
ZC5wMygpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOworICAgIGNvbnN0IEdyYXBoaWNzU2l6
ZSB5VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5pdFF1YWQucDMoKSAtIHRyYW5zZm9ybWVkVW5p
dFF1YWQucDEoKTsKICAgICBjb25zdCBmbG9hdCB5QXhpc1NjYWxlID0gc3FydGYoeVVuaXRDaGFu
Z2Uud2lkdGgoKSAqIHlVbml0Q2hhbmdlLndpZHRoKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyB5VW5pdENoYW5nZS5oZWlnaHQoKSAqIHlVbml0Q2hhbmdlLmhlaWdodCgp
KTsKIApAQCAtMzk1LDE3ICszOTUsMTcgQEAKICAgICByZXR1cm4gZWRnZVNpemU7CiB9CiAKLUlu
dFJlY3QgU2hhZG93Qmx1cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCitJbnRSZWN0IFNoYWRvd0JsdXI6OmNhbGN1bGF0ZUxheWVyQm91bmRpbmdS
ZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dl
ZFJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIEludFNpemUgZWRnZVNpemUg
PSBibHVycmVkRWRnZVNpemUoKTsKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24g
b2YgdGhlIGJsdXJyZWQgYW5kL29yIHRyYW5zZm9ybWVkIGxheWVyLgotICAgIEZsb2F0UmVjdCBs
YXllclJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyUmVjdDsKICAgICBJbnRTaXplIGluZmxh
dGlvbjsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0LT5n
ZXRDVE0oKTsKICAgICBpZiAobV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAmJiAhdHJhbnNmb3Jt
LmlzSWRlbnRpdHkoKSkgewotICAgICAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRQb2x5Z29uID0g
dHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKHNoYWRvd2VkUmVjdCkpOworICAgICAgICBHcmFw
aGljc1F1YWQgdHJhbnNmb3JtZWRQb2x5Z29uID0gdHJhbnNmb3JtLm1hcFF1YWQoR3JhcGhpY3NR
dWFkKHNoYWRvd2VkUmVjdCkpOwogICAgICAgICB0cmFuc2Zvcm1lZFBvbHlnb24ubW92ZShtX29m
ZnNldCk7CiAgICAgICAgIGxheWVyUmVjdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUXVhZCh0
cmFuc2Zvcm1lZFBvbHlnb24pLmJvdW5kaW5nQm94KCk7CiAgICAgfSBlbHNlIHsKQEAgLTQyMCw3
ICs0MjAsNyBAQAogICAgICAgICBpbmZsYXRpb24gPSBlZGdlU2l6ZTsKICAgICB9CiAKLSAgICBG
bG9hdFJlY3QgdW5jbGlwcGVkTGF5ZXJSZWN0ID0gbGF5ZXJSZWN0OworICAgIEdyYXBoaWNzUmVj
dCB1bmNsaXBwZWRMYXllclJlY3QgPSBsYXllclJlY3Q7CiAKICAgICBpZiAoIWNsaXBSZWN0LmNv
bnRhaW5zKGVuY2xvc2luZ0ludFJlY3QobGF5ZXJSZWN0KSkpIHsKICAgICAgICAgLy8gSWYgd2Ug
YXJlIHRvdGFsbHkgb3V0c2lkZSB0aGUgY2xpcCByZWdpb24sIHdlIGFyZW4ndCBwYWludGluZyBh
dCBhbGwuCkBAIC00NDAsMTggKzQ0MCwxOCBAQAogCiAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBp
bmZsYXRpb247CiAgICAgZnJhbWVTaXplLnNjYWxlKDIpOwotICAgIG1fc291cmNlUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCBzaGFkb3dlZFJlY3Qud2lkdGgoKSArIGZyYW1lU2l6ZS53aWR0aCgpLCBz
aGFkb3dlZFJlY3QuaGVpZ2h0KCkgKyBmcmFtZVNpemUuaGVpZ2h0KCkpOwotICAgIG1fbGF5ZXJP
cmlnaW4gPSBGbG9hdFBvaW50KGxheWVyUmVjdC54KCksIGxheWVyUmVjdC55KCkpOworICAgIG1f
c291cmNlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCBzaGFkb3dlZFJlY3Qud2lkdGgoKSArIGZy
YW1lU2l6ZS53aWR0aCgpLCBzaGFkb3dlZFJlY3QuaGVpZ2h0KCkgKyBmcmFtZVNpemUuaGVpZ2h0
KCkpOworICAgIG1fbGF5ZXJPcmlnaW4gPSBHcmFwaGljc1BvaW50KGxheWVyUmVjdC54KCksIGxh
eWVyUmVjdC55KCkpOwogICAgIG1fbGF5ZXJTaXplID0gbGF5ZXJSZWN0LnNpemUoKTsKIAotICAg
IGNvbnN0IEZsb2F0UG9pbnQgdW5jbGlwcGVkTGF5ZXJPcmlnaW4gPSBGbG9hdFBvaW50KHVuY2xp
cHBlZExheWVyUmVjdC54KCksIHVuY2xpcHBlZExheWVyUmVjdC55KCkpOwotICAgIGNvbnN0IEZs
b2F0U2l6ZSBjbGlwcGVkT3V0ID0gdW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3JpZ2lu
OworICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQgdW5jbGlwcGVkTGF5ZXJPcmlnaW4gPSBHcmFwaGlj
c1BvaW50KHVuY2xpcHBlZExheWVyUmVjdC54KCksIHVuY2xpcHBlZExheWVyUmVjdC55KCkpOwor
ICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSBjbGlwcGVkT3V0ID0gdW5jbGlwcGVkTGF5ZXJPcmlnaW4g
LSBtX2xheWVyT3JpZ2luOwogCiAgICAgLy8gU2V0IHRoZSBvcmlnaW4gYXMgdGhlIHRvcCBsZWZ0
IGNvcm5lciBvZiB0aGUgc2NyYXRjaCBpbWFnZSwgb3IsIGluIGNhc2UgdGhlcmUncyBhIGNsaXBw
ZWQKICAgICAvLyBvdXQgcmVnaW9uLCBzZXQgdGhlIG9yaWdpbiBhY2NvcmRpbmdseSB0byB0aGUg
ZnVsbCBib3VuZGluZyByZWN0J3MgdG9wLWxlZnQgY29ybmVyLgogICAgIGZsb2F0IHRyYW5zbGF0
aW9uWCA9IC1zaGFkb3dlZFJlY3QueCgpICsgaW5mbGF0aW9uLndpZHRoKCkgLSBmYWJzZihjbGlw
cGVkT3V0LndpZHRoKCkpOwogICAgIGZsb2F0IHRyYW5zbGF0aW9uWSA9IC1zaGFkb3dlZFJlY3Qu
eSgpICsgaW5mbGF0aW9uLmhlaWdodCgpIC0gZmFic2YoY2xpcHBlZE91dC5oZWlnaHQoKSk7Ci0g
ICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEZsb2F0U2l6ZSh0cmFuc2xhdGlvblgsIHRy
YW5zbGF0aW9uWSk7CisgICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEdyYXBoaWNzU2l6
ZSh0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7CiAKICAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChsYXllclJlY3QpOwogfQpAQCAtNDY3LDEzICs0NjcsMTMgQEAKICAgICBpZiAoYnVmZmVy
U2l6ZSAhPSBtX2xheWVyU2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xp
cFRvSW1hZ2VCdWZmZXIoKSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIs
CiAgICAgICAgIC8vIGJ1dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAg
dG8gdGhlIGZpbGxlZCBwYXJ0IGZpcnN0LgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAo
RmxvYXRSZWN0KG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJTaXplKSk7CisgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+Y2xpcChHcmFwaGljc1JlY3QobV9sYXllck9yaWdpbiwgbV9sYXllclNpemUpKTsK
ICAgICB9Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2xheWVySW1h
Z2UsIEZsb2F0UmVjdChtX2xheWVyT3JpZ2luLCBidWZmZXJTaXplKSk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIEdyYXBoaWNzUmVjdChtX2xh
eWVyT3JpZ2luLCBidWZmZXJTaXplKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29s
b3IobV9jb2xvciwgbV9jb2xvclNwYWNlKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJT
aGFkb3coKTsKLSAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChtX2xheWVy
T3JpZ2luLCBtX3NvdXJjZVJlY3Quc2l6ZSgpKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxs
UmVjdChHcmFwaGljc1JlY3QobV9sYXllck9yaWdpbiwgbV9zb3VyY2VSZWN0LnNpemUoKSkpOwog
fQogCiBzdGF0aWMgdm9pZCBjb21wdXRlU2xpY2VTaXplc0Zyb21SYWRpaShjb25zdCBJbnRTaXpl
JiB0d2ljZVJhZGl1cywgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgaW50JiBsZWZ0
U2xpY2UsIGludCYgcmlnaHRTbGljZSwgaW50JiB0b3BTbGljZSwgaW50JiBib3R0b21TbGljZSkK
QEAgLTUwMyw3ICs1MDMsNyBAQAogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU2lkZUxlbmd0
aCArIHRvcFNsaWNlICsgYm90dG9tU2xpY2UpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKK3ZvaWQg
U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6
UmFkaWkmIHJhZGlpKQogewogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJC
b3VuZGluZ1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBzaGFkb3dlZFJlY3QsIGdyYXBoaWNzQ29udGV4
dC0+Y2xpcEJvdW5kcygpKTsKICAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKQEAgLTUzMCw3
ICs1MzAsNyBAQAogICAgIGRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhncmFwaGljc0NvbnRleHQs
IHNoYWRvd2VkUmVjdCwgcmFkaWksIHRlbXBsYXRlU2l6ZSwgZWRnZVNpemUpOwogfQogCi12b2lk
IFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBj
b25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRpaSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJh
d0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5k
ZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKQogewogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2Fs
Y3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoZ3JhcGhpY3NDb250ZXh0LCByZWN0LCBncmFwaGljc0Nv
bnRleHQtPmNsaXBCb3VuZHMoKSk7CiAgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCkBAIC01
NTcsMjAgKzU1NywyMCBAQAogICAgIGRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoZ3JhcGhpY3ND
b250ZXh0LCByZWN0LCBob2xlUmVjdCwgaG9sZVJhZGlpLCB0ZW1wbGF0ZVNpemUsIGVkZ2VTaXpl
KTsKIH0KIAotdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93ZWRS
ZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRSZWN0JiBsYXll
clJlY3QpCit2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dl
ZFJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCkKIHsKICAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5n
ZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGlmICghbV9sYXllckltYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgYnVmZmVyUmVsYXRpdmVTaGFkb3dl
ZFJlY3QgPSBzaGFkb3dlZFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGJ1ZmZlclJlbGF0aXZlU2hh
ZG93ZWRSZWN0ID0gc2hhZG93ZWRSZWN0OwogICAgIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0
Lm1vdmUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7CiAgICAgaWYgKCFTY3JhdGNoQnVmZmVy
OjpzaGFyZWQoKS5tYXRjaGVzTGFzdFNoYWRvdyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywg
Q29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHJhZGlpKSkg
ewogICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2Ut
PmNvbnRleHQoKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpzaGFkb3dDb250ZXh0KTsKIAogICAgICAgICAvLyBBZGQgYSBwaXhlbCB0byBhdm9pZCBsYXRl
ciBlZGdlIGFsaWFzaW5nIHdoZW4gcm90YXRlZC4KLSAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xl
YXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXllclNp
emUuaGVpZ2h0KCkgKyAxKSk7CisgICAgICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChHcmFw
aGljc1JlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSArIDEsIG1fbGF5ZXJTaXplLmhlaWdo
dCgpICsgMSkpOwogICAgICAgICBzaGFkb3dDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRl
eHRUcmFuc2xhdGlvbik7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBpZiAocmFkaWkuaXNaZXJv
KCkpCkBAIC01OTEsMTYgKzU5MSwxNiBAQAogICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNj
aGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd0lu
c2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBS
b3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRpaSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQor
dm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlp
LCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiB7CiAgICAgbV9sYXllckltYWdlID0gU2NyYXRj
aEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKICAg
ICBpZiAoIW1fbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJ1
ZmZlclJlbGF0aXZlUmVjdCA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGJ1ZmZlclJlbGF0aXZl
UmVjdCA9IHJlY3Q7CiAgICAgYnVmZmVyUmVsYXRpdmVSZWN0Lm1vdmUobV9sYXllckNvbnRleHRU
cmFuc2xhdGlvbik7CiAKLSAgICBGbG9hdFJlY3QgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCA9IGhv
bGVSZWN0OworICAgIEdyYXBoaWNzUmVjdCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0ID0gaG9sZVJl
Y3Q7CiAgICAgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNs
YXRpb24pOwogCiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5tYXRjaGVzTGFzdElu
c2V0U2hhZG93KG1fYmx1clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBidWZmZXJSZWxhdGl2ZVJlY3QsIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QsIGhvbGVSYWRpaSkp
IHsKQEAgLTYwOCw3ICs2MDgsNyBAQAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogCiAgICAgICAgIC8vIEFkZCBhIHBpeGVsIHRv
IGF2b2lkIGxhdGVyIGVkZ2UgYWxpYXNpbmcgd2hlbiByb3RhdGVkLgotICAgICAgICBzaGFkb3dD
b250ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgKyAx
LCBtX2xheWVyU2l6ZS5oZWlnaHQoKSArIDEpKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xl
YXJSZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXll
clNpemUuaGVpZ2h0KCkgKyAxKSk7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZSht
X2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKIAogICAgICAgICBQYXRoIHBhdGg7CkBAIC02NjQs
NyArNjY0LDcgQEAKICAgICAgdGhlIHNoYWRvdy4KICAqLwogCi12b2lkIFNoYWRvd0JsdXI6OmRy
YXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3Qg
Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBj
b25zdCBJbnRTaXplJiBlZGdlU2l6ZSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVk
UmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IElu
dFNpemUmIGVkZ2VTaXplKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93
KCk7CkBAIC02NzQsOCArNjc0LDggQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRHJhdyB0
aGUgcmVjdGFuZ2xlIHdpdGggaG9sZS4KLSAgICBGbG9hdFJlY3QgdGVtcGxhdGVCb3VuZHMoMCwg
MCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgRmxv
YXRSZWN0IHRlbXBsYXRlSG9sZSA9IEZsb2F0UmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6
ZS5oZWlnaHQoKSwgdGVtcGxhdGVTaXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwg
dGVtcGxhdGVTaXplLmhlaWdodCgpIC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKKyAgICBHcmFw
aGljc1JlY3QgdGVtcGxhdGVCb3VuZHMoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBs
YXRlU2l6ZS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlSG9sZSA9IEdyYXBo
aWNzUmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwgdGVtcGxhdGVTaXpl
LndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpIC0g
MiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKIAogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVk
KCkubWF0Y2hlc0xhc3RJbnNldFNoYWRvdyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JT
cGFjZSwgdGVtcGxhdGVCb3VuZHMsIHRlbXBsYXRlSG9sZSwgcmFkaWkpKSB7CiAgICAgICAgIC8v
IERyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCkBAIC02OTksMTIgKzY5OSwxMiBA
QAogICAgICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRMYXN0SW5zZXRTaGFkb3dWYWx1
ZXMobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlQm91bmRzLCB0
ZW1wbGF0ZUhvbGUsIHJhZGlpKTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0
ID0gcmVjdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3Vu
ZGluZ1JlY3QubW92ZShtX29mZnNldCk7CiAKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVSZWN0ID0g
aG9sZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlUmVjdCA9IGhvbGVSZWN0OwogICAg
IGRlc3RIb2xlUmVjdC5tb3ZlKG1fb2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVCb3Vu
ZHMgPSBkZXN0SG9sZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlQm91bmRzID0gZGVz
dEhvbGVSZWN0OwogICAgIGRlc3RIb2xlQm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkp
OwogICAgIGRlc3RIb2xlQm91bmRzLmluZmxhdGVZKGVkZ2VTaXplLmhlaWdodCgpKTsKIApAQCAt
NzI2LDcgKzcyNiw3IEBACiAgICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3Jh
dGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAotdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dp
dGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgc2hhZG93ZWRSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJ
bnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VTaXplKQordm9pZCBTaGFk
b3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBSb3VuZGVk
UmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IElu
dFNpemUmIGVkZ2VTaXplKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93
KCk7CkBAIC03MzUsMTQgKzczNSwxNCBAQAogICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgdGVtcGxhdGVTaGFkb3cgPSBGbG9hdFJlY3QoZWRn
ZVNpemUud2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0g
MiAqIGVkZ2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIgKiBlZGdlU2l6
ZS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlU2hhZG93ID0gR3JhcGhpY3NS
ZWN0KGVkZ2VTaXplLndpZHRoKCksIGVkZ2VTaXplLmhlaWdodCgpLCB0ZW1wbGF0ZVNpemUud2lk
dGgoKSAtIDIgKiBlZGdlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSAyICog
ZWRnZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5t
YXRjaGVzTGFzdFNoYWRvdyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwgdGVt
cGxhdGVTaGFkb3csIHJhZGlpKSkgewogICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIHRoZSBJ
bWFnZUJ1ZmZlci4KICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9s
YXllckltYWdlLT5jb250ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c2hhZG93U3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CiAKLSAgICAgICAgc2hhZG93Q29udGV4
dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxh
dGVTaXplLmhlaWdodCgpKSk7CisgICAgICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChHcmFw
aGljc1JlY3QoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQo
KSkpOwogICAgICAgICBzaGFkb3dDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyYWRpaS5pc1plcm8o
KSkKQEAgLTc1OCw3ICs3NTgsNyBAQAogICAgICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5z
ZXRMYXN0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0
ZW1wbGF0ZVNoYWRvdywgcmFkaWkpOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBzaGFkb3dCb3Vu
ZHMgPSBzaGFkb3dlZFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHNoYWRvd0JvdW5kcyA9IHNoYWRv
d2VkUmVjdDsKICAgICBzaGFkb3dCb3VuZHMubW92ZShtX29mZnNldC53aWR0aCgpLCBtX29mZnNl
dC5oZWlnaHQoKSk7CiAgICAgc2hhZG93Qm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkp
OwogICAgIHNoYWRvd0JvdW5kcy5pbmZsYXRlWShlZGdlU2l6ZS5oZWlnaHQoKSk7CkBAIC03Njks
NyArNzY5LDcgQEAKICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hC
dWZmZXJQdXJnZSgpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdMYXllclBpZWNlcyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dCb3Vu
ZHMsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUmIGJ1ZmZl
clBhZGRpbmcsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgU2hhZG93RGlyZWN0aW9uIGRp
cmVjdGlvbikKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd0JvdW5kcywgY29u
c3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgYnVmZmVyUGFkZGlu
ZywgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBTaGFkb3dEaXJlY3Rpb24gZGlyZWN0aW9u
KQogewogICAgIGNvbnN0IEludFNpemUgdHdpY2VSYWRpdXMgPSBJbnRTaXplKGJ1ZmZlclBhZGRp
bmcud2lkdGgoKSAqIDIsIGJ1ZmZlclBhZGRpbmcuaGVpZ2h0KCkgKiAyKTsKIApAQCAtNzgzLDcg
Kzc4Myw3IEBACiAgICAgaW50IGNlbnRlckhlaWdodCA9IHNoYWRvd0JvdW5kcy5oZWlnaHQoKSAt
IHRvcFNsaWNlIC0gYm90dG9tU2xpY2U7CiAKICAgICBpZiAoZGlyZWN0aW9uID09IE91dGVyU2hh
ZG93KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dJbnRlcmlvcihzaGFkb3dCb3VuZHMueCgp
ICsgbGVmdFNsaWNlLCBzaGFkb3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBj
ZW50ZXJIZWlnaHQpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2hhZG93SW50ZXJpb3Ioc2hhZG93
Qm91bmRzLngoKSArIGxlZnRTbGljZSwgc2hhZG93Qm91bmRzLnkoKSArIHRvcFNsaWNlLCBjZW50
ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKICAgICAgICAgaWYgKCFzaGFkb3dJbnRlcmlvci5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Rmls
bENvbG9yKG1fY29sb3IsIG1fY29sb3JTcGFjZSk7CkBAIC03OTMsMTIgKzc5MywxMiBAQAogCiAg
ICAgLy8gTm90ZSB0aGF0IGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIGlzIGZhc3RlciB0aGFuIGNy
ZWF0aW5nIGEgSW1hZ2UgYW5kIGRyYXdpbmcgdGhhdCwKICAgICAvLyBiZWNhdXNlIEltYWdlQnVm
ZmVyOjpkcmF3KCkga25vd3MgdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gY29weSB0aGUgaW1hZ2Ug
Yml0cy4KLSAgICBGbG9hdFJlY3QgY2VudGVyUmVjdChzaGFkb3dCb3VuZHMueCgpICsgbGVmdFNs
aWNlLCBzaGFkb3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBjZW50ZXJIZWln
aHQpOworICAgIEdyYXBoaWNzUmVjdCBjZW50ZXJSZWN0KHNoYWRvd0JvdW5kcy54KCkgKyBsZWZ0
U2xpY2UsIHNoYWRvd0JvdW5kcy55KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgsIGNlbnRlckhl
aWdodCk7CiAgICAgY2VudGVyUmVjdCA9IGdyYXBoaWNzQ29udGV4dC0+cm91bmRUb0RldmljZVBp
eGVscyhjZW50ZXJSZWN0KTsKICAgICAKICAgICAvLyBUb3Agc2lkZS4KLSAgICBGbG9hdFJlY3Qg
dGlsZVJlY3QgPSBGbG9hdFJlY3QobGVmdFNsaWNlLCAwLCB0ZW1wbGF0ZVNpZGVMZW5ndGgsIHRv
cFNsaWNlKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC54
KCksIGNlbnRlclJlY3QueSgpIC0gdG9wU2xpY2UsIGNlbnRlclJlY3Qud2lkdGgoKSwgdG9wU2xp
Y2UpOworICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdChsZWZ0U2xpY2Us
IDAsIHRlbXBsYXRlU2lkZUxlbmd0aCwgdG9wU2xpY2UpOworICAgIEdyYXBoaWNzUmVjdCBkZXN0
UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0LngoKSwgY2VudGVyUmVjdC55KCkgLSB0b3BT
bGljZSwgY2VudGVyUmVjdC53aWR0aCgpLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0
UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCkBAIC04MDks
OCArODA5LDggQEAKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVy
SW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAKICAgICAv
LyBMZWZ0IHNpZGUuCi0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRT
bGljZSwgdGVtcGxhdGVTaWRlTGVuZ3RoKTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0UmVjdChjZW50
ZXJSZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCksIGxlZnRTbGljZSwgY2VudGVy
UmVjdC5oZWlnaHQoKSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgdG9wU2xpY2Us
IGxlZnRTbGljZSwgdGVtcGxhdGVTaWRlTGVuZ3RoKTsKKyAgICBkZXN0UmVjdCA9IEdyYXBoaWNz
UmVjdChjZW50ZXJSZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCksIGxlZnRTbGlj
ZSwgY2VudGVyUmVjdC5oZWlnaHQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJl
Y3QpOwogCiAgICAgLy8gUmlnaHQgc2lkZS4KQEAgLTgyMSwyMyArODIxLDIzIEBACiAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gVG9wIGxlZnQgY29ybmVyLgot
ICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpOwotICAg
IGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJS
ZWN0LnkoKSAtIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKKyAgICB0aWxlUmVjdCA9
IEdyYXBoaWNzUmVjdCgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKKyAgICBkZXN0UmVjdCA9
IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCkg
LSB0b3BTbGljZSwgbGVmdFNsaWNlLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVj
dCwgdGlsZVJlY3QpOwogCiAgICAgLy8gVG9wIHJpZ2h0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9
IEZsb2F0UmVjdCh0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xp
Y2UsIHRvcFNsaWNlKTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0UmVjdChjZW50ZXJSZWN0Lm1heFgo
KSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgcmlnaHRTbGljZSwgdG9wU2xpY2UpOworICAg
IHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmlnaHRTbGlj
ZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpOworICAgIGRlc3RSZWN0ID0gR3JhcGhpY3NSZWN0
KGNlbnRlclJlY3QubWF4WCgpLCBjZW50ZXJSZWN0LnkoKSAtIHRvcFNsaWNlLCByaWdodFNsaWNl
LCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXll
ckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAg
Ly8gQm90dG9tIHJpZ2h0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCh0ZW1wbGF0
ZVNpemUud2lkdGgoKSAtIHJpZ2h0U2xpY2UsIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIGJvdHRv
bVNsaWNlLCByaWdodFNsaWNlLCBib3R0b21TbGljZSk7Ci0gICAgZGVzdFJlY3QgPSBGbG9hdFJl
Y3QoY2VudGVyUmVjdC5tYXhYKCksIGNlbnRlclJlY3QubWF4WSgpLCByaWdodFNsaWNlLCBib3R0
b21TbGljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QodGVtcGxhdGVTaXplLndpZHRo
KCkgLSByaWdodFNsaWNlLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgcmln
aHRTbGljZSwgYm90dG9tU2xpY2UpOworICAgIGRlc3RSZWN0ID0gR3JhcGhpY3NSZWN0KGNlbnRl
clJlY3QubWF4WCgpLCBjZW50ZXJSZWN0Lm1heFkoKSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2Up
OwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIEJvdHRvbSBs
ZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCB0ZW1wbGF0ZVNpemUuaGVp
Z2h0KCkgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSk7Ci0gICAgZGVzdFJl
Y3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC54KCkgLSBsZWZ0U2xpY2UsIGNlbnRlclJlY3QubWF4
WSgpLCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVj
dCgwLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3R0
b21TbGljZSk7CisgICAgZGVzdFJlY3QgPSBHcmFwaGljc1JlY3QoY2VudGVyUmVjdC54KCkgLSBs
ZWZ0U2xpY2UsIGNlbnRlclJlY3QubWF4WSgpLCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKTsKICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0aWxlUmVjdCk7CiB9CiAKQEAgLTg2MiwxMCArODYyLDEw
IEBACiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250
ZXh0KTsKICAgICBzaGFkb3dDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
U291cmNlSW4pOwogICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2Nv
bG9yU3BhY2UpOwotICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCB0
ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CisgICAgc2hhZG93
Q29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgp
LCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBTaGFkb3dC
bHVyOjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCAqY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBsYXllckFyZWEpCitHcmFwaGljc0NvbnRleHQqIFNoYWRvd0JsdXI6OmJlZ2luU2hh
ZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGxh
eWVyQXJlYSkKIHsKICAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRleHQpOwogCkBAIC04NzgsNyAr
ODc4LDcgQEAKIAogICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJ
bWFnZS0+Y29udGV4dCgpOwogICAgIHNoYWRvd0NvbnRleHQtPnNhdmUoKTsKLSAgICBzaGFkb3dD
b250ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1f
bGF5ZXJTaXplLmhlaWdodCgpKSk7CisgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEdyYXBo
aWNzUmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSkp
OwogCiAgICAgc2hhZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRp
b24pOwogICAgIHJldHVybiBzaGFkb3dDb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRS
ZWN0OworY2xhc3MgR3JhcGhpY3NQb2ludDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEZv
bnREYXRhOwogY2xhc3MgRm9udE1ldHJpY3M7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwpAQCAt
OTMsMTQgKzkzLDE0IEBACiAKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rv
cj4pIGNvbnN0OwogCi0gICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNv
bnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIHZvaWQgZHJhd1RleHQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJv
bSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsK
IAogICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0Owog
ICAgIGZsb2F0IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmlu
ZyYgZ2x5cGhOYW1lKSBjb25zdDsKIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBU
ZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsK
KyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29u
c3Q7CiAKICAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3Jp
cHRpb24uc21hbGxDYXBzKCk7IH0KIApAQCAtMTYxLDE0ICsxNjEsMTQgQEAKIAogICAgIC8vIFJl
dHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQgZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRv
LCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lz
KSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0g
ICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50
IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0ds
eXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lk
IGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
cmFwaGljc1BvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0
bywgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBoQnVmZmVy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBm
bG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgR2x5cGhCdWZmZXIqLCBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJm
bG93KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29u
c3Q7CisgICAgR3JhcGhpY3NSZWN0IHNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OwogCiAgICAgYm9vbCBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3Ry
aW5nJiwgR2x5cGhEYXRhJikgY29uc3Q7CiAKQEAgLTE3OSwxMSArMTc5LDExIEBACiAKICAgICAv
LyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgogICAgIGZsb2F0IGdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBp
bnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1w
aGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29u
c3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlw
aE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGgsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAgIGZy
aWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2lu
dDsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CiBjbGFzcyBGb250OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR2x5cGhC
dWZmZXI7CkBAIC0xMzcsNyArMTM3LDcgQEAKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAg
ICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgPSAw
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20s
IGludCB0bywgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVh
bCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVu
JiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QgPSAwOwogI2Vu
ZGlmCiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2Niw5IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0
U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1JlY3Q7CitjbGFzcyBH
cmFwaGljc1NpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC0xNTMsMjEgKzE1MywyMSBAQAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEltYWdlPiBsb2FkUGxhdGZvcm1UaGVtZUljb24oY29uc3QgY2hhciogbmFt
ZSwgaW50IHNpemUpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0JiBk
ZXN0UmVjdCk7CiAKIHByb3RlY3RlZDoKICAgICBJbWFnZShJbWFnZU9ic2VydmVyKiA9IDApOwog
Ci0gICAgc3RhdGljIHZvaWQgZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHN0YXRpYyB2b2lkIGZpbGxXaXRoU29s
aWRDb2xvcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKIAogICAgIC8vIFRoZSBDb2xvclNwYWNlIHBhcmFtZXRlciB3aWxsIG9ubHkgYmUgdXNlZCBm
b3IgdW50YWdnZWQgaW1hZ2VzLgogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpID0gMDsKLSAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOwotICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBUaWxlUnVsZSBoUnVsZSwg
VGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOworICAgIHZvaWQgZHJh
d1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29u
c3QgR3JhcGhpY3NQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdGlsZVNpemUs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdm9p
ZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2
UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAog
ICAgIC8vIFN1cHBvcnRpbmcgdGlsZWQgZHJhd2luZwogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxs
V2l0aFNvbGlkQ29sb3IoKSB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGb250LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RmFsbGJh
Y2tMaXN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKQEAgLTM1MSw3ICszNTEsNyBAQAog
ICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAg
ICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0
YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTM2MSwx
MSArMzYxLDExIEBACiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAg
ICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdH
bHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKIH0KIAot
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzKTsKQEAgLTM3MywxNSArMzczLDE1IEBACiAgICAgaWYgKGdseXBoQnVmZmVy
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZHJhd0VtcGhhc2lzTWFya3MoY29u
dGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0
aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CisgICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwg
cnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgR3JhcGhpY3NQb2ludChwb2ludC54KCkgKyBpbml0aWFs
QWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBG
b250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQpIGNvbnN0CiB7ICAgCiAgICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVu
IG9mIGdseXBocyB0aGF0IHVzZSB0aGUgc2FtZSBmb250IGRhdGEuCiAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdCgwKTsKLSAgICBGbG9h
dFNpemUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQoMCk7Ci0gICAgRmxvYXRQb2ludCBz
dGFydFBvaW50KHBvaW50KTsKKyAgICBHcmFwaGljc1NpemUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIu
b2Zmc2V0QXQoMCk7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50KHBvaW50KTsKICAgICBm
bG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpOwogICAgIGludCBsYXN0RnJvbSA9IDA7CiAgICAg
aW50IG5leHRHbHlwaCA9IDA7CkBAIC0zOTAsNyArMzkwLDcgQEAKICNlbmRpZgogICAgIHdoaWxl
IChuZXh0R2x5cGggPCBnbHlwaEJ1ZmZlci5zaXplKCkpIHsKICAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnREYXRhQXQobmV4dEdseXBo
KTsKLSAgICAgICAgRmxvYXRTaXplIG5leHRPZmZzZXQgPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChu
ZXh0R2x5cGgpOworICAgICAgICBHcmFwaGljc1NpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVy
Lm9mZnNldEF0KG5leHRHbHlwaCk7CiAKICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBmb250
RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkBA
IC00MjAsNyArNDIwLDcgQEAKIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkds
eXBoKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCiB7CiAgICAg
aWYgKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwp
IHsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChn
bHlwaCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9y
R2x5cGgoZ2x5cGgpOwogICAgICAgICByZXR1cm4gYm91bmRzLngoKSArIGJvdW5kcy53aWR0aCgp
IC8gMjsKICAgICB9CiAgICAgLy8gRklYTUU6IFVzZSBnbHlwaCBib3VuZHMgb25jZSB0aGV5IG1h
a2Ugc2Vuc2UgZm9yIHZlcnRpY2FsIGZvbnRzLgpAQCAtNDMyLDcgKzQzMiw3IEBACiAgICAgcmV0
dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KSBjb25zdAogewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlm
ICghZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtNDQ3
LDcgKzQ0Nyw3IEBACiAgICAgR2x5cGggc3BhY2VHbHlwaCA9IG1hcmtGb250RGF0YS0+c3BhY2VH
bHlwaCgpOwogCiAgICAgZmxvYXQgbWlkZGxlT2ZMYXN0R2x5cGggPSBvZmZzZXRUb01pZGRsZU9m
R2x5cGhBdEluZGV4KGdseXBoQnVmZmVyLCAwKTsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQo
cG9pbnQueCgpICsgbWlkZGxlT2ZMYXN0R2x5cGggLSBvZmZzZXRUb01pZGRsZU9mR2x5cGgobWFy
a0ZvbnREYXRhLCBtYXJrR2x5cGgpLCBwb2ludC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3Rh
cnRQb2ludChwb2ludC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRvTWlkZGxlT2ZH
bHlwaChtYXJrRm9udERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CiAKICAgICBHbHlwaEJ1
ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IGdseXBoQnVmZmVy
LnNpemUoKTsgKytpKSB7CkBAIC00NzYsNyArNDc2LDcgQEAKICAgICByZXR1cm4gaXQubV9ydW5X
aWR0aFNvRmFyOwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0CitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgV2lkdGhJdGVyYXRvciBp
dCh0aGlzLCBydW4pOwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBAIC00ODgsMTAgKzQ4OCwxMCBA
QAogICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkp
OwogICAgICAgICBmbG9hdCB0b3RhbFdpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJX
aWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVX
aWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0
aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRo
IC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldp
ZHRoKSwgaCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgp
ICsgYmVmb3JlV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyBhZnRlcldpZHRo
KSAtIGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCksIGgpOworICAgIHJldHVybiBHcmFw
aGljc1JlY3QoZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3Vu
ZGYocG9pbnQueCgpICsgYWZ0ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lk
dGgpLCBoKTsKIH0KIAogaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNw
cAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogdXNpbmcg
c3RkOjptYXg7CkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW50
UmVjdDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYgcikKICAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoc3RhdGljX2Nhc3Q8
aW50PihyLngoKSksIHN0YXRpY19jYXN0PGludD4oci55KCkpKSkKICAgICAsIG1fc2l6ZShJbnRT
aXplKHN0YXRpY19jYXN0PGludD4oci53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihyLmhlaWdo
dCgpKSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAj
aW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJl
Y3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApAQCAtNTAsMTkgKzUwLDE5IEBA
CiAgICAgICAgIEJsdXJTaGFkb3cKICAgICB9OwogCi0gICAgU2hhZG93Qmx1cihjb25zdCBGbG9h
dFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgQ29s
b3JTcGFjZSk7CisgICAgU2hhZG93Qmx1cihjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29u
c3QgR3JhcGhpY3NTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAg
U2hhZG93Qmx1cigpOwogCi0gICAgdm9pZCBzZXRTaGFkb3dWYWx1ZXMoY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgRmxvYXRTaXplJiAsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSwgYm9vbCBpZ25v
cmVUcmFuc2Zvcm1zID0gZmFsc2UpOworICAgIHZvaWQgc2V0U2hhZG93VmFsdWVzKGNvbnN0IEdy
YXBoaWNzU2l6ZSYsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgLCBjb25zdCBDb2xvciYsIENvbG9yU3Bh
Y2UsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMgPSBpZ25vcmVUcmFuc2Zvcm1zOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0K
IAotICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBiZWdp
blNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGF5ZXJB
cmVhKTsKICAgICB2b2lkIGVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCopOwogCi0gICAg
dm9pZCBkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmKTsKLSAgICB2b2lkIGRyYXdJbnNldFNoYWRvdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0
LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CisgICAgdm9pZCBkcmF3UmVj
dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBSb3Vu
ZGVkUmVjdDo6UmFkaWkmKTsKKyAgICB2b2lkIGRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmIGhvbGVSZWN0LCBj
b25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAKICAgICB2b2lkIGJsdXJMYXll
ckltYWdlKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBJbnRTaXplJiwgaW50IHN0cmlkZSk7CiAKQEAg
LTgxLDE2ICs4MSwxNiBAQAogICAgICAgICBJbm5lclNoYWRvdwogICAgIH07CiAgICAgCi0gICAg
SW50UmVjdCBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGxheWVyQXJlYSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAgIElu
dFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKICAgICBJ
bnRTaXplIHRlbXBsYXRlU2l6ZShjb25zdCBJbnRTaXplJiBibHVycmVkRWRnZVNpemUsIGNvbnN0
IFJvdW5kZWRSZWN0OjpSYWRpaSYpIGNvbnN0OwogCi0gICAgdm9pZCBkcmF3UmVjdFNoYWRvd1dp
dGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUm91
bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKLSAgICB2b2lkIGRy
YXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiBzaGFkb3dUZW1wbGF0
ZVNpemUsIGNvbnN0IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSk7CisgICAgdm9pZCBkcmF3UmVj
dFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsK
KyAgICB2b2lkIGRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXpl
JiBzaGFkb3dUZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSk7CiAK
LSAgICB2b2lkIGRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRl
ZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKLSAgICB2b2lkIGRyYXdJ
bnNldFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29u
c3QgSW50U2l6ZSYgc2hhZG93VGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBibHVycmVkRWRn
ZVNpemUpOworICAgIHZvaWQgZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmIGhvbGVSZWN0
LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwor
ICAgIHZvaWQgZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3Vu
ZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiBzaGFkb3dUZW1wbGF0ZVNpemUsIGNvbnN0
IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSk7CiAgICAgCi0gICAgdm9pZCBkcmF3TGF5ZXJQaWVj
ZXMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dCb3VuZHMsIGNvbnN0
IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFNpemUmIHJvdW5kZWRSYWRpdXMsIGNvbnN0
IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgU2hhZG93RGlyZWN0aW9uKTsKKyAgICB2b2lkIGRyYXdM
YXllclBpZWNlcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd0Jv
dW5kcywgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50U2l6ZSYgcm91bmRlZFJh
ZGl1cywgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBTaGFkb3dEaXJlY3Rpb24pOwogICAg
IAogICAgIHZvaWQgYmx1clNoYWRvd0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUp
OwogICAgIHZvaWQgYmx1ckFuZENvbG9yU2hhZG93QnVmZmVyKGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSk7CkBAIC0xMDIsMTUgKzEwMiwxNSBAQAogCiAgICAgQ29sb3IgbV9jb2xvcjsKICAg
ICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKLSAgICBGbG9hdFNpemUgbV9ibHVyUmFkaXVzOwot
ICAgIEZsb2F0U2l6ZSBtX29mZnNldDsKKyAgICBHcmFwaGljc1NpemUgbV9ibHVyUmFkaXVzOwor
ICAgIEdyYXBoaWNzU2l6ZSBtX29mZnNldDsKIAogICAgIEltYWdlQnVmZmVyKiBtX2xheWVySW1h
Z2U7IC8vIEJ1ZmZlciB0byB3aGVyZSB0aGUgdGVtcG9yYXJ5IHNoYWRvdyB3aWxsIGJlIGRyYXdu
IHRvLgogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlUmVjdDsgLy8gU3ViLXJlY3Qgb2YgbV9sYXll
ckltYWdlIHRoYXQgY29udGFpbnMgdGhlIHNoYWRvdyBwaXhlbHMuCi0gICAgRmxvYXRQb2ludCBt
X2xheWVyT3JpZ2luOyAvLyBUb3AtbGVmdCBjb3JuZXIgb2YgdGhlIChwb3NzaWJseSBjbGlwcGVk
KSBib3VuZGluZyByZWN0IHRvIGRyYXcgdGhlIHNoYWRvdyB0by4KLSAgICBGbG9hdFNpemUgbV9s
YXllclNpemU7IC8vIFNpemUgb2YgbV9sYXllckltYWdlIHBpeGVscyB0aGF0IG5lZWQgYmx1cnJp
bmcuCi0gICAgRmxvYXRTaXplIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247IC8vIFRyYW5zbGF0
aW9uIHRvIGFwcGx5IHRvIG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93IHRvIGJlIGNvcnJl
Y3RseSBjbGlwcGVkLgorICAgIEdyYXBoaWNzUmVjdCBtX3NvdXJjZVJlY3Q7IC8vIFN1Yi1yZWN0
IG9mIG1fbGF5ZXJJbWFnZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFkb3cgcGl4ZWxzLgorICAgIEdy
YXBoaWNzUG9pbnQgbV9sYXllck9yaWdpbjsgLy8gVG9wLWxlZnQgY29ybmVyIG9mIHRoZSAocG9z
c2libHkgY2xpcHBlZCkgYm91bmRpbmcgcmVjdCB0byBkcmF3IHRoZSBzaGFkb3cgdG8uCisgICAg
R3JhcGhpY3NTaXplIG1fbGF5ZXJTaXplOyAvLyBTaXplIG9mIG1fbGF5ZXJJbWFnZSBwaXhlbHMg
dGhhdCBuZWVkIGJsdXJyaW5nLgorICAgIEdyYXBoaWNzU2l6ZSBtX2xheWVyQ29udGV4dFRyYW5z
bGF0aW9uOyAvLyBUcmFuc2xhdGlvbiB0byBhcHBseSB0byBtX2xheWVyQ29udGV4dCBmb3IgdGhl
IHNoYWRvdyB0byBiZSBjb3JyZWN0bHkgY2xpcHBlZC4KIAogICAgIGJvb2wgbV9zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtMjAwLDcgKzIwMCw3IEBA
CiAgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAgSW50UmVjdCBtX3JlY3Q7Ci0g
ICAgRmxvYXRTaXplIG1fc2NhbGVGYWN0b3I7CisgICAgR3JhcGhpY3NTaXplIG1fc2NhbGVGYWN0
b3I7CiAgICAgdW5zaWduZWQgbV9lbmFibGVkVHJhY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX3Rv
dGFsVHJhY2tDb3VudDsKICAgICBmbG9hdCBtX3JlcG9ydGVkRHVyYXRpb247CkBAIC0yMjAsNyAr
MjIwLDcgQEAKICAgICBkb3VibGUgbV90aW1lU3RhcnRlZFBsYXlpbmc7CiAgICAgZG91YmxlIG1f
dGltZVN0b3BwZWRQbGF5aW5nOwogI2VuZGlmCi0gICAgbXV0YWJsZSBGbG9hdFNpemUgbV9jYWNo
ZWROYXR1cmFsU2l6ZTsKKyAgICBtdXRhYmxlIEdyYXBoaWNzU2l6ZSBtX2NhY2hlZE5hdHVyYWxT
aXplOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250
ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZh
bmNlcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENH
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSog
YWR2YW5jZXMsIHNpemVfdCBjb3VudCkKIHsKICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24o
Y29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwogCkBAIC0xMDYsNyArMTA2LDcgQEAKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CiAK
LSAgICAgICAgICAgIENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBvaW50KHBvaW50LngoKSwgcG9p
bnQueSgpICsgZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2Vs
aW5lKSAtIGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7CisgICAgICAgICAgICBD
R1BvaW50IHBvc2l0aW9uID0gR3JhcGhpY3NQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZv
bnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250
LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpOwogICAgICAgICAgICAgVmVjdG9yPENHUG9p
bnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9
IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKHRyYW5zbGF0aW9uc1tpXSwgdHJhbnNsYXRpb25z
VHJhbnNmb3JtKTsKQEAgLTEzNyw3ICsxMzcsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgRm9udDo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhz
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKQEAgLTIxNSw3ICsyMTUs
NyBAQAogICAgICAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0
YS5tX3NpemUpOwogCiAKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIEdyYXBoaWNz
U2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAgZmxvYXQgc2hhZG93Qmx1cjsKICAgICBDb2xvciBzaGFk
b3dDb2xvcjsKICAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7CkBAIC0yMzIsMTUgKzIz
MiwxNSBAQAogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zv
cm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBz
byBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50Lnko
KSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBv
aW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsK
KyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhHcmFwaGljc1BvaW50KHNoYWRvd1RleHRY
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICAgICAgaWYgKGZv
bnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQo
KSwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgICAgICBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKEdyYXBoaWNzUG9pbnQoc2hhZG93VGV4dFggKyBmb250LT5z
eW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlw
aEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlw
aHMpOwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBmaWxsQ29sb3JT
cGFjZSk7CiAgICAgfQogCiAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2Vz
KGZyb20pLCBudW1HbHlwaHMpOwogICAgIGlmIChmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCkp
Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBm
b250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhHcmFwaGljc1BvaW50KHBv
aW50LngoKSArIGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwgZm9udCwg
Y2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2Vz
KGZyb20pLCBudW1HbHlwaHMpOwogCiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKICAgICAgICAg
Y29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3Is
IHNoYWRvd0NvbG9yU3BhY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIK
IAotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKQEAgLTQ4OSw3ICs0ODksNyBAQAogICAgICAgICAgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UgfHwgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChjaCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhwYW5zaW9uIGV2ZW5s
eSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVuLgogICAgICAgICAg
ICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IHByZXZpb3VzRXhwYW5zaW9uID0gbV9leHBhbnNpb247CisgICAgICAgICAgICAgICAgICAg
ICAgICBHcmFwaGljc1VuaXQgcHJldmlvdXNFeHBhbnNpb24gPSBtX2V4cGFuc2lvbjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghdHJlYXRBc1NwYWNlICYmICFtX2FmdGVyRXhwYW5zaW9u
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSB0aGUgZXhwYW5zaW9uIG9w
cG9ydHVuaXR5IGJlZm9yZSB0aGlzIGlkZW9ncmFwaC4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2V4cGFuc2lvbiAtPSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OwpAQCAtNTUxLDcg
KzU1MSw3IEBACiAgICAgICAgICAgICBtX2FkanVzdGVkQWR2YW5jZXMuYXBwZW5kKGFkdmFuY2Up
OwogICAgICAgICAgICAgbV9hZGp1c3RlZEdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRz
Rm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IGdseXBoQm91bmRzID0g
Zm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRz
Lm1vdmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhPcmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkds
eXBoQm91bmRpbmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRz
LngoKSk7CiAgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5
cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0
TWFjLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGgsCitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGlu
dCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHRoaXMsIHJ1bik7CkBAIC01MCwxMCArNTAsMTAgQEAKICAgICAvLyBVc2luZyByb3VuZGYoKSBy
YXRoZXIgdGhhbiBjZWlsZigpIGZvciB0aGUgcmlnaHQgZWRnZSBhcyBhIGNvbXByb21pc2UgdG8g
ZW5zdXJlIGNvcnJlY3QgY2FyZXQgcG9zaXRpb25pbmcKICAgICBpZiAocnVuLnJ0bCgpKSB7CiAg
ICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSBjb250cm9sbGVyLnRvdGFsV2lkdGgoKTsKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVy
V2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3Jl
V2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgaCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lk
dGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsgdG90YWxXaWR0
aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJX
aWR0aCksIGgpOwogICAgIH0gCiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54
KCkgKyBiZWZvcmVXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIGFmdGVyV2lk
dGgpIC0gZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgaCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdChmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBwb2ludC55KCksIHJv
dW5kZihwb2ludC54KCkgKyBhZnRlcldpZHRoKSAtIGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVX
aWR0aCksIGgpOwogfQogCiBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0
CkBAIC04MCw3ICs4MCw3IEBACiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi12b2lk
IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGds
eXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVm
ZmVyIGdseXBoQnVmZmVyOwpAQCAtOTIsMTEgKzkyLDExIEBACiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJl
dHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2lu
dC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7
CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9p
bnQpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFu
Y2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGds
eXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgaWYg
KGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZHJhd0VtcGhh
c2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2lu
dC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CisgICAgZHJhd0VtcGhhc2lzTWFy
a3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgR3JhcGhpY3NQb2ludChwb2ludC54
KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAKIGZsb2F0IEZvbnQ6OmZsb2F0
V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxv
dykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAKLSNpbXBv
cnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NSZWN0LmgiCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW1wb3J0ICJTaGFy
ZWRCdWZmZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBACiB9CiAKIC8vIFdlYktpdCBvbiBN
YWMgaXMgYSBzdGFuZGFyZCBwbGF0Zm9ybSBjb21wb25lbnQsIHNvIGl0IG11c3QgdXNlIHRoZSBz
dGFuZGFyZCBwbGF0Zm9ybSBhcnR3b3JrIGZvciB1bmRlcmxpbmUuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5t
bQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
IAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb2xvci5oIgotI2ltcG9y
dCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJHcmFwaGljc1JlY3QuaCIKICNpbXBvcnQgIkZvbnQu
aCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCkBA
IC0zODYsOSArMzg2LDkgQEAKICAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZTpAIk1vbm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7CiB9CiAKLUZsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
K0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdS
ZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NU
Rm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKICAgICBib3VuZGluZ0Jv
eC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOwogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDE4ICsxODUsMTggQEAKICAgICBzaXplX3QgbV9jdXJy
ZW50UnVuOwogICAgIHVuc2lnbmVkIG1fZ2x5cGhJbkN1cnJlbnRSdW47CiAgICAgdW5zaWduZWQg
bV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaDsKLSAgICBmbG9hdCBtX2ZpbmFsUm91bmRpbmdXaWR0
aDsKLSAgICBmbG9hdCBtX2V4cGFuc2lvbjsKLSAgICBmbG9hdCBtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5OwotICAgIGZsb2F0IG1fbGVhZGluZ0V4cGFuc2lvbjsKKyAgICBHcmFwaGljc1VuaXQg
bV9maW5hbFJvdW5kaW5nV2lkdGg7CisgICAgR3JhcGhpY3NVbml0IG1fZXhwYW5zaW9uOworICAg
IEdyYXBoaWNzVW5pdCBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OworICAgIEdyYXBoaWNzVW5p
dCBtX2xlYWRpbmdFeHBhbnNpb247CiAgICAgYm9vbCBtX2FmdGVyRXhwYW5zaW9uOwogCiAgICAg
SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBtX2ZhbGxiYWNrRm9udHM7CiAKLSAgICBm
bG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGlu
Z0JveFg7Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21h
eEdseXBoQm91bmRpbmdCb3hZOworICAgIEdyYXBoaWNzVW5pdCBtX21pbkdseXBoQm91bmRpbmdC
b3hYOworICAgIEdyYXBoaWNzVW5pdCBtX21heEdseXBoQm91bmRpbmdCb3hYOworICAgIEdyYXBo
aWNzVW5pdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOworICAgIEdyYXBoaWNzVW5pdCBtX21heEds
eXBoQm91bmRpbmdCb3hZOwogCiAgICAgdW5zaWduZWQgbV9sYXN0Um91bmRpbmdHbHlwaDsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVR
VEtpdC5tbQkod29ya2luZyBjb3B5KQpAQCAtODI2LDcgKzgyNiw3IEBACiAgICAgLy8gICAgZGlt
ZW5zaW9ucywgYXNwZWN0IHJhdGlvLCBjbGVhbiBhcGVydHVyZSwgcmVzb2x1dGlvbiwgYW5kIHNv
IGZvcnRoLCBhcyBkZWZpbmVkIGZvciB0aGUgCiAgICAgLy8gICAgZm9ybWF0IHVzZWQgYnkgdGhl
IHJlc291cmNlCiAgICAgCi0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKFtbbV9xdE1vdmllLmdl
dCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1
ZV0pOworICAgIEdyYXBoaWNzU2l6ZSBuYXR1cmFsU2l6ZShbW21fcXRNb3ZpZS5nZXQoKSBhdHRy
aWJ1dGVGb3JLZXk6UVRNb3ZpZU5hdHVyYWxTaXplQXR0cmlidXRlXSBzaXplVmFsdWVdKTsKICAg
ICBpZiAobmF0dXJhbFNpemUuaXNFbXB0eSgpICYmIG1faXNTdHJlYW1pbmcpIHsKICAgICAgICAg
Ly8gSFRUUCBMaXZlIFN0cmVhbXMgd2lsbCBvY2Nhc2lvbmFsbHkgcmV0dXJuIHswLDB9IG5hdHVy
YWwgc2l6ZXMgd2hpbGUgc2NydWJiaW5nLgogICAgICAgICAvLyBXb3JrIGFyb3VuZCB0aGlzIHBy
b2JsZW0gKDxyZGFyOi8vcHJvYmxlbS85MDc4NTYzPikgYnkgcmV0dXJuaW5nIHRoZSBsYXN0IHZh
bGlkIApAQCAtMTMwNiw3ICsxMzA2LDcgQEAKICAgICBbbV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2V0
RGVsYXlDYWxsYmFja3M6WUVTXTsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAg
ICAgTlNHcmFwaGljc0NvbnRleHQqIG5ld0NvbnRleHQ7Ci0gICAgRmxvYXRTaXplIHNjYWxlRmFj
dG9yKDEuMGYsIC0xLjBmKTsKKyAgICBHcmFwaGljc1NpemUgc2NhbGVGYWN0b3IoMS4wZiwgLTEu
MGYpOwogICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKHIud2lk
dGgoKSwgci5oZWlnaHQoKSkpOwogCiAjaWYgUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkKQEAg
LTEzNzEsNyArMTM3MSw3IEBACiAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6Zm9y
bWF0KCIlMS4yZiIsIGZyYW1lUmF0ZSk7CiAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4odGV4
dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOwogICAgICAgICAgICAgY29uc3QgQ29sb3Ig
Y29sb3IoMjU1LCAwLCAwKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgx
LjBmLCAtMS4wZikpOyAgICAKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6
ZSgxLjBmLCAtMS4wZikpOyAgICAKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KGNvbG9yLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlVGhpY2tuZXNzKDEuMGYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKICNpZm5kZWYgR2x5cGhCdWZmZXJfaAogI2RlZmluZSBHbHlwaEJ1ZmZlcl9oCiAK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNs
dWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTYwLDcgKzYwLDcgQEAKIHR5cGVkZWYgR2x5cGggR2x5cGhCdWZmZXJH
bHlwaDsKICNlbmRpZgogCi0vLyBDRyB1c2VzIENHU2l6ZSBpbnN0ZWFkIG9mIEZsb2F0U2l6ZSBz
byB0aGF0IHRoZSByZXN1bHQgb2YgYWR2YW5jZXMoKQorLy8gQ0cgdXNlcyBDR1NpemUgaW5zdGVh
ZCBvZiBHcmFwaGljc1NpemUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIGFkdmFuY2VzKCkKIC8vIGNh
biBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyBp
biBGb250TWFjLm1tCiAjaWYgVVNFKENHKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikp
IHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKIHR5cGVkZWYgQ0dTaXplIEdseXBoQnVmZmVy
QWR2YW5jZTsKQEAgLTY5LDcgKzY5LDcgQEAKIC8vIHNvIHdlIGNhbiBzYXZlIG1lbW9yeSBzcGFj
ZSBvbiBlbWJlZGRlZCBkZXZpY2VzIGJ5IHN0b3Jpbmcgb25seSB0aGUgd2lkdGgKIHR5cGVkZWYg
ZmxvYXQgR2x5cGhCdWZmZXJBZHZhbmNlOwogI2Vsc2UKLXR5cGVkZWYgRmxvYXRTaXplIEdseXBo
QnVmZmVyQWR2YW5jZTsKK3R5cGVkZWYgR3JhcGhpY3NTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsK
ICNlbmRpZgogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAg
ICAgbV9hZHZhbmNlc1tpbmRleDJdID0gczsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAg
RmxvYXRTaXplIG9mZnNldCA9IG1fb2Zmc2V0c1tpbmRleDFdOworICAgICAgICBHcmFwaGljc1Np
emUgb2Zmc2V0ID0gbV9vZmZzZXRzW2luZGV4MV07CiAgICAgICAgIG1fb2Zmc2V0c1tpbmRleDFd
ID0gbV9vZmZzZXRzW2luZGV4Ml07CiAgICAgICAgIG1fb2Zmc2V0c1tpbmRleDJdID0gb2Zmc2V0
OwogI2VuZGlmCkBAIC0xMzUsMTcgKzEzNSwxNyBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgRmxv
YXRTaXplIG9mZnNldEF0KGludCBpbmRleCkgY29uc3QKKyAgICBHcmFwaGljc1NpemUgb2Zmc2V0
QXQoaW50IGluZGV4KSBjb25zdAogICAgIHsKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIHJl
dHVybiBtX29mZnNldHNbaW5kZXhdOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NT
aXplKCk7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnQsIGZsb2F0IHdpZHRoLCBjb25zdCBGbG9hdFNpemUqIG9mZnNl
dCA9IDApCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250LCBmbG9hdCB3aWR0aCwgY29uc3QgR3JhcGhpY3NTaXplKiBvZmZzZXQgPSAwKQogICAgIHsK
ICAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9udCk7CiAKQEAgLTE2MywxNCArMTYzLDE0IEBA
CiAjZWxpZiBPUyhXSU5DRSkKICAgICAgICAgbV9hZHZhbmNlcy5hcHBlbmQod2lkdGgpOwogI2Vs
c2UKLSAgICAgICAgbV9hZHZhbmNlcy5hcHBlbmQoRmxvYXRTaXplKHdpZHRoLCAwKSk7CisgICAg
ICAgIG1fYWR2YW5jZXMuYXBwZW5kKEdyYXBoaWNzU2l6ZSh3aWR0aCwgMCkpOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIGlmIChvZmZzZXQpCiAgICAgICAgICAgICBtX29m
ZnNldHMuYXBwZW5kKCpvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX29mZnNl
dHMuYXBwZW5kKEZsb2F0U2l6ZSgpKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0cy5hcHBlbmQoR3Jh
cGhpY3NTaXplKCkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAjZW5k
aWYKQEAgLTIwMSw3ICsyMDEsNyBAQAogI2VsaWYgT1MoV0lOQ0UpCiAgICAgICAgIGxhc3RBZHZh
bmNlICs9IHdpZHRoOwogI2Vsc2UKLSAgICAgICAgbGFzdEFkdmFuY2UgKz0gRmxvYXRTaXplKHdp
ZHRoLCAwKTsKKyAgICAgICAgbGFzdEFkdmFuY2UgKz0gR3JhcGhpY3NTaXplKHdpZHRoLCAwKTsK
ICNlbmRpZgogICAgIH0KIApAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgVmVjdG9yPEdseXBoQnVm
ZmVyR2x5cGgsIDIwNDg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2Us
IDIwNDg+IG1fYWR2YW5jZXM7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgIFZlY3RvcjxGbG9hdFNp
emUsIDIwNDg+IG1fb2Zmc2V0czsKKyAgICBWZWN0b3I8R3JhcGhpY3NTaXplLCAyMDQ4PiBtX29m
ZnNldHM7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBjbGFzcyBHcmFwaGljc0xheWVyOwog
Y2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNz
IEdyYXBoaWNzUG9pbnQ7CiAKIGVudW0gR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgewogICAg
IEdyYXBoaWNzTGF5ZXJQYWludEJhY2tncm91bmQgPSAoMSA8PCAwKSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIEdyYWRpZW50X2gKIAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC03NCwxMSArNzQsMTEgQEAK
IAogICAgIGNsYXNzIEdyYWRpZW50IDogcHVibGljIEdlbmVyYXRvciB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
R3JhZGllbnQ+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3Jh
ZGllbnQocDAsIHAxKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R3Jh
ZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0aW8gPSAxKQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBm
bG9hdCByMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RS
YXRpbyA9IDEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR3Jh
ZGllbnQocDAsIHIwLCBwMSwgcjEsIGFzcGVjdFJhdGlvKSk7CiAgICAgICAgIH0KQEAgLTk0LDEx
ICs5NCwxMSBAQAogICAgICAgICBib29sIGlzUmFkaWFsKCkgY29uc3QgeyByZXR1cm4gbV9yYWRp
YWw7IH0KICAgICAgICAgYm9vbCBpc1plcm9TaXplKCkgY29uc3QgeyByZXR1cm4gbV9wMC54KCkg
PT0gbV9wMS54KCkgJiYgbV9wMC55KCkgPT0gbV9wMS55KCkgJiYgKCFtX3JhZGlhbCB8fCBtX3Iw
ID09IG1fcjEpOyB9CiAKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDAoKSBjb25zdCB7IHJl
dHVybiBtX3AwOyB9Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAxKCkgY29uc3QgeyByZXR1
cm4gbV9wMTsgfQorICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwMCgpIGNvbnN0IHsgcmV0
dXJuIG1fcDA7IH0KKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEoKSBjb25zdCB7IHJl
dHVybiBtX3AxOyB9CiAKLSAgICAgICAgdm9pZCBzZXRQMChjb25zdCBGbG9hdFBvaW50JiBwKSB7
IG1fcDAgPSBwOyB9Ci0gICAgICAgIHZvaWQgc2V0UDEoY29uc3QgRmxvYXRQb2ludCYgcCkgeyBt
X3AxID0gcDsgfQorICAgICAgICB2b2lkIHNldFAwKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIHsg
bV9wMCA9IHA7IH0KKyAgICAgICAgdm9pZCBzZXRQMShjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7
IG1fcDEgPSBwOyB9CiAKICAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXMoKSBjb25zdCB7IHJldHVy
biBtX3IwOyB9CiAgICAgICAgIGZsb2F0IGVuZFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fcjE7
IH0KQEAgLTEzMyw4ICsxMzMsOCBAQAogICAgICAgICAvLyBRdCBhbmQgQ0cgdHJhbnNmb3JtIHRo
ZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsg
fQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVk
RHJhd2luZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoSW50U2l6
ZSYgc2l6ZSwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsKIAogICAgICAgICB2b2lkIHNldFBsYXRm
b3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAKQEAgLTE0NCw4ICsxNDQsOCBAQAogI2VuZGlmCiAKICAg
ICBwcml2YXRlOgotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEpOwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwg
ZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0
aW8pOworICAgICAgICBHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcDEpOworICAgICAgICBHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBw
MCwgZmxvYXQgcjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNw
ZWN0UmF0aW8pOwogCiAgICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0g
MDsgfQogICAgICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwpAQCAtMTU0LDggKzE1NCw4IEBA
CiAgICAgICAgIHZvaWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKIAogICAgICAgICBib29sIG1f
cmFkaWFsOwotICAgICAgICBGbG9hdFBvaW50IG1fcDA7Ci0gICAgICAgIEZsb2F0UG9pbnQgbV9w
MTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBtX3AwOworICAgICAgICBHcmFwaGljc1BvaW50IG1f
cDE7CiAgICAgICAgIGZsb2F0IG1fcjA7CiAgICAgICAgIGZsb2F0IG1fcjE7CiAgICAgICAgIGZs
b2F0IG1fYXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhl
aWdodC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzQsNyArMTM0LDcgQEAKICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNw
YWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNp
emUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEdyYXBoaWNz
U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKIHsKICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKICAgICBt
X3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgc2V0UGxh
dGZvcm1TaGFkb3cob2Zmc2V0LCBibHVyLCBjb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExlZ2FjeVNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CiAgICAgbV9zdGF0
ZS5zaGFkb3dCbHVyID0gYmx1cjsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJTaGFkb3coKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxv
YXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUoKTsKICAg
ICBtX3N0YXRlLnNoYWRvd0JsdXIgPSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xv
cigpOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VSR0I7
CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgICAgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8
fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0Lmhl
aWdodCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coR3JhcGhpY3NTaXplJiBv
ZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UmIGNvbG9yU3BhY2Up
IGNvbnN0CiB7CiAgICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7CiAgICAgYmx1ciA9
IG1fc3RhdGUuc2hhZG93Qmx1cjsKQEAgLTM2OCwxMSArMzY4LDExIEBACiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFn
ZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNl
LCBHcmFwaGljc1JlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwog
fQogCiAjaWYgIU9TKFdJTkNFKSB8fCAoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzgx
LDcgKzM4MSw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg5LDcgKzM4OSw3IEBACiAgICAg
Zm9udC5kcmF3RW1waGFzaXNNYXJrcyh0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MDUsNyArNDA1LDcgQEAKICAgICBpZiAo
IWJpZGlSdW5zLnJ1bkNvdW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQg
Y3VyclBvaW50ID0gcG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBjdXJyUG9pbnQgPSBwb2ludDsK
ICAgICBCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsKICAg
ICB3aGlsZSAoYmlkaVJ1bikgewogICAgICAgICBUZXh0UnVuIHN1YnJ1biA9IHJ1bjsKQEAgLTQy
NSw3ICs0MjUsNyBAQAogICAgIGJpZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGludCBmcm9tLCBpbnQg
dG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwg
aW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgaW50IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC00MzMsNyArNDMzLDcgQEAKICAgICBmaWxsUmVjdChmb250LnNlbGVj
dGlvblJlY3RGb3JUZXh0KHJ1biwgcG9pbnQsIGgsIGZyb20sIHRvKSwgYmFja2dyb3VuZENvbG9y
LCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBp
bWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVz
dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDU3LDEwICs0NTcsMTAgQEAKICAgICAgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBJbnRlcnBvbGF0
aW9uTG93CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
bk5vbmUpOwotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlv
bigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRT
aXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJh
dyh0aGlzLCBHcmFwaGljc1JlY3QoZGVzdC5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUodHcsIHRo
KSksIEdyYXBoaWNzUmVjdChzcmMubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHRzdywgdHNoKSks
IHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBp
bWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcs
IHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0
eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBHcmFwaGljc1Jl
Y3QoZGVzdC5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUodHcsIHRoKSksIEdyYXBoaWNzUmVjdChz
cmMubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwg
b3ApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGlt
YWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50UG9pbnQmIHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQpAQCAtNTE0LDEwICs1MTQsMTAg
QEAKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUpCiB7Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3Bh
Y2UsIEZsb2F0UmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cisg
ICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChk
ZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKQEAgLTU0MSwxNiArNTQxLDE2IEBACiAgICAgICAgIEludGVycG9sYXRpb25R
dWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgSW50ZXJwb2xhdGlvbkxvdwog
ICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Ob25lKTsK
LSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVz
dC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24o
KSwgRmxvYXRTaXplKHRzdywgdHNoKSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAg
ICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0Lmxv
Y2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0dywgdGgpKSwgR3JhcGhpY3NSZWN0KHNyYy5sb2NhdGlv
bigpLCBHcmFwaGljc1NpemUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiAg
ICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRlcnBvbGF0aW9u
UXVhbGl0eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29s
b3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBG
bG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNl
LCBHcmFwaGljc1JlY3QoZGVzdC5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUodHcsIHRoKSksIEdy
YXBoaWNzUmVjdChzcmMubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHRzdywgdHNoKSksIG9wLCB1
c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiAjaWYgIVBMQVRGT1JNKFFUKQogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBjbGlwKEZsb2F0UmVj
dChyZWN0KSk7CisgICAgY2xpcChHcmFwaGljc1JlY3QocmVjdCkpOwogfQogI2VuZGlmCiAKQEAg
LTU3NCw3ICs1NzQsNyBAQAogICAgIGNsaXBPdXQocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYwMiwxNCArNjAyLDE0IEBA
CiAgICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdlbmVyYXRvciYgZ2Vu
ZXJhdG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCwgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGdlbmVyYXRvci5maWxsKHRoaXMsIHJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY5MSw3ICs2OTEsNyBAQAogI2VuZGlmCiAKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50
JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5T
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMo
R3JhcGhpY3NQb2ludCYgcDEsIEdyYXBoaWNzUG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwg
U3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CiAgICAgLy8gRm9yIG9kZCB3aWR0aHMsIHdlIGFkZCBp
biAwLjUgdG8gdGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBmbG9hdCBhcml0aG1ldGlj
CiAgICAgLy8gd29ya3Mgb3V0LiAgRm9yIGV4YW1wbGUsIHdpdGggYSBib3JkZXIgd2lkdGggb2Yg
MywgV2ViS2l0IHdpbGwgcGFzcyB1cyAoeTEreTIpLzIsIGUuZy4sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCkBAIC0xMDQsMTMg
KzEwNCwxMyBAQAogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNsaXAoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgICAgIHZvaWQgY2xp
cChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKSBjb25zdDsKIAogICAgICAg
ICAvLyBUaGUgZHJhdyBtZXRob2QgZHJhd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgd2l0
aG91dCBjb3B5aW5nIGl0LgotICAgICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCA9
IEdyYXBoaWNzUmVjdCgwLCAwLCAtMSwgLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Is
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpOwogICAgICAgICAK
ICAgICAgICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgogCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIApAQCAtMzQs
MjQgKzM0LDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHZW5lcmF0ZWRJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKK3ZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAg
ICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwogICAgIGNvbnRl
eHQtPmNsaXAoZHN0UmVjdCk7CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKGRzdFJlY3QueCgpLCBk
c3RSZWN0LnkoKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQot
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVj
dC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKSkpOworICAgICAg
ICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53
aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKSkpOwogICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZSgtc3JjUmVjdC54KCksIC1zcmNSZWN0LnkoKSk7Ci0gICAgY29udGV4dC0+
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKSwgKm1fZ2VuZXJhdG9yLmdl
dCgpKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgp
LCBtX3NpemUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOwogfQogCi12b2lkIEdlbmVyYXRlZEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBjb25zdCBHcmFw
aGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIEFsbG93IHRoZSBnZW5lcmF0b3IgdG8gcHJv
dmlkZSB2aXN1YWxseS1lcXVpdmFsZW50IHRpbGluZyBwYXJhbWV0ZXJzIGZvciBiZXR0ZXIgcGVy
Zm9ybWFuY2UuCiAgICAgSW50U2l6ZSBhZGp1c3RlZFNpemUgPSBtX3NpemU7Ci0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7CiAgICAgbV9nZW5lcmF0b3ItPmFkanVzdFBhcmFtZXRlcnNGb3JU
aWxlZERyYXdpbmcoYWRqdXN0ZWRTaXplLCBhZGp1c3RlZFNyY1JlY3QpOwogCiAgICAgLy8gQ3Jl
YXRlIGEgQml0bWFwSW1hZ2UgYW5kIGNhbGwgZHJhd1BhdHRlcm4gb24gaXQuCkBAIC02MSw3ICs2
MSw3IEBACiAKICAgICAvLyBGaWxsIHdpdGggdGhlIGdyYWRpZW50LgogICAgIEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLSAgICBncmFw
aGljc0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6
ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChH
cmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBhZGp1c3RlZFNpemUpLCAqbV9nZW5lcmF0b3Iu
Z2V0KCkpOwogCiAgICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNvbnRleHQu
CiAgICAgaW1hZ2VCdWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRl
c3RSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5
IEBACiAKICNpbmNsdWRlICJBbmltYXRpb24uaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJG
bG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgpAQCAtODAsNyArODAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEZsb2F0UG9pbnQzRDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQzRDsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVGV4dFN0cmVhbTsKQEAgLTIyNSwy
OSArMjI1LDI5IEBACiAgICAgLy8gVGhlIGxheWVyIHRoYXQgcmVwbGljYXRlcyB0aGlzIGxheWVy
IChpZiBhbnkpLgogICAgIEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwbGljYUxheWVyOyB9CiAKLSAgICBjb25zdCBGbG9hdFBvaW50JiByZXBsaWNhdGVk
TGF5ZXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYXRlZExheWVyUG9zaXRpb247
IH0KLSAgICB2b2lkIHNldFJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHApIHsgbV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbiA9IHA7IH0KKyAgICBjb25zdCBHcmFwaGlj
c1BvaW50JiByZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGlj
YXRlZExheWVyUG9zaXRpb247IH0KKyAgICB2b2lkIHNldFJlcGxpY2F0ZWRMYXllclBvc2l0aW9u
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIHsgbV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbiA9IHA7
IH0KIAogICAgIC8vIE9mZnNldCBpcyBvcmlnaW4gb2YgdGhlIHJlbmRlcmVyIG1pbnVzIG9yaWdp
biBvZiB0aGUgZ3JhcGhpY3MgbGF5ZXIgKHNvIGVpdGhlciB6ZXJvIG9yIG5lZ2F0aXZlKS4KICAg
ICBJbnRTaXplIG9mZnNldEZyb21SZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJv
bVJlbmRlcmVyOyB9CiAgICAgdm9pZCBzZXRPZmZzZXRGcm9tUmVuZGVyZXIoY29uc3QgSW50U2l6
ZSYgb2Zmc2V0KSB7IG1fb2Zmc2V0RnJvbVJlbmRlcmVyID0gb2Zmc2V0OyB9CiAKICAgICAvLyBU
aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyICh0aGUgbG9jYXRpb24gb2YgaXRzIHRvcC1sZWZ0IGNv
cm5lciBpbiBpdHMgcGFyZW50KQotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcG9zaXRpb24gPSBwOyB9CisgICAgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdmly
dHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIHsgbV9wb3NpdGlv
biA9IHA7IH0KICAgICAKICAgICAvLyBBbmNob3IgcG9pbnQ6ICgwLCAwKSBpcyB0b3AgbGVmdCwg
KDEsIDEpIGlzIGJvdHRvbSByaWdodC4gVGhlIGFuY2hvciBwb2ludAogICAgIC8vIGFmZmVjdHMg
dGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3Jtcy4KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIGFu
Y2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApIHsgbV9hbmNob3JQb2lu
dCA9IHA7IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIGFuY2hvclBvaW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2lu
dChjb25zdCBHcmFwaGljc1BvaW50M0QmIHApIHsgbV9hbmNob3JQb2ludCA9IHA7IH0KIAogICAg
IC8vIFRoZSBzaXplIG9mIHRoZSBsYXllci4KLSAgICBjb25zdCBGbG9hdFNpemUmIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIGNvbnN0IEdyYXBoaWNzU2l6
ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRT
aXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKICAgICAv
LyBUaGUgYm91bmRPcmlnaW4gYWZmZWN0cyB0aGUgb2Zmc2V0IGF0IHdoaWNoIGNvbnRlbnQgaXMg
cmVuZGVyZWQsIGFuZCBzdWJsYXllcnMgYXJlIHBvc2l0aW9uZWQuCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYgYm91bmRzT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHNPcmlnaW47IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbikg
eyBtX2JvdW5kc09yaWdpbiA9IG9yaWdpbjsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJv
dW5kc09yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzT3JpZ2luOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldEJvdW5kc09yaWdpbihjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4pIHsgbV9i
b3VuZHNPcmlnaW4gPSBvcmlnaW47IH0KIAogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpIHsgbV90cmFu
c2Zvcm0gPSB0OyB9CkBAIC0yODksNyArMjg5LDcgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKSA9IDA7CiAgICAgLy8gbWFyayB0aGUgZ2l2ZW4gcmVjdCAoaW4gbGF5ZXIg
Y29vcmRzKSBhcyBuZWVkaW5nIGRpc3BheS4gTmV2ZXIgZ29lcyBkZWVwLgotICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgPSAw
OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIHsgfTsK
IApAQCAtMzk4LDEwICszOTgsMTAgQEAKICAgICBJbnRTaXplIG1fb2Zmc2V0RnJvbVJlbmRlcmVy
OwogICAgIAogICAgIC8vIFBvc2l0aW9uIGlzIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgR3JhcGhp
Y3NMYXllcgotICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9h
bmNob3JQb2ludDsKLSAgICBGbG9hdFNpemUgbV9zaXplOwotICAgIEZsb2F0UG9pbnQgbV9ib3Vu
ZHNPcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9p
bnQzRCBtX2FuY2hvclBvaW50OworICAgIEdyYXBoaWNzU2l6ZSBtX3NpemU7CisgICAgR3JhcGhp
Y3NQb2ludCBtX2JvdW5kc09yaWdpbjsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJh
bnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fY2hpbGRyZW5UcmFuc2Zvcm07CkBA
IC00MzAsNyArNDMwLDcgQEAKICAgICBHcmFwaGljc0xheWVyKiBtX3JlcGxpY2FMYXllcjsgLy8g
QSBsYXllciB0aGF0IHJlcGxpY2F0ZXMgdGhpcyBsYXllci4gV2Ugb25seSBhbGxvdyBvbmUsIGZv
ciBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXBsaWNh
IGlzIG5vdCBwYXJlbnRlZDsgdGhpcyBpcyB0aGUgcHJpbWFyeSByZWZlcmVuY2UgdG8gaXQuCiAg
ICAgR3JhcGhpY3NMYXllciogbV9yZXBsaWNhdGVkTGF5ZXI7IC8vIEZvciBhIHJlcGxpY2EgbGF5
ZXIsIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBsYXllci4KLSAgICBGbG9hdFBvaW50IG1f
cmVwbGljYXRlZExheWVyUG9zaXRpb247IC8vIEZvciBhIHJlcGxpY2EgbGF5ZXIsIHRoZSBwb3Np
dGlvbiBvZiB0aGUgcmVwbGljYS4KKyAgICBHcmFwaGljc1BvaW50IG1fcmVwbGljYXRlZExheWVy
UG9zaXRpb247IC8vIEZvciBhIHJlcGxpY2EgbGF5ZXIsIHRoZSBwb3NpdGlvbiBvZiB0aGUgcmVw
bGljYS4KIAogICAgIEludFJlY3QgbV9jb250ZW50c1JlY3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFRyYW5zZm9ybWF0aW9uTWF0
cml4X2gKICNkZWZpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXhfaAogCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5o
IgogI2luY2x1ZGUgPHN0cmluZy5oPiAvL2ZvciBtZW1jcHkKICNpbmNsdWRlIDx3dGYvRmFzdEFs
bG9jQmFzZS5oPgpAQCAtNjAsOSArNjAsOSBAQAogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBj
bGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDNEOwotY2xhc3MgRmxvYXRSZWN0OwotY2xh
c3MgRmxvYXRRdWFkOworY2xhc3MgR3JhcGhpY3NQb2ludDNEOworY2xhc3MgR3JhcGhpY3NSZWN0
OworY2xhc3MgR3JhcGhpY3NRdWFkOwogCiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xMjMsMjEgKzEyMywyMSBAQAogICAgIHZv
aWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4MiwgZG91YmxlJiB5MikgY29uc3Qg
eyBtdWx0VmVjTWF0cml4KHgsIHksIHgyLCB5Mik7IH0KIAogICAgIC8vIE1hcCBhIDNEIHBvaW50
IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgM0QgcG9pbnQuCi0gICAgRmxvYXRQ
b2ludDNEIG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIGNvbnN0OworICAgIEdyYXBoaWNz
UG9pbnQzRCBtYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmKSBjb25zdDsKIAogICAgIC8v
IE1hcCBhIDJEIHBvaW50IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgMkQgcG9p
bnQuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaWdub3JlcyB0aGUgeiBjb21wb25lbnQsIGVmZmVj
dGl2ZWx5IHByb2plY3RpbmcgdGhlIHBvaW50IGludG8gdGhlIHo9MCBwbGFuZS4KLSAgICBGbG9h
dFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1Bv
aW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAgIC8vIExpa2Ug
dGhlIHZlcnNpb24gYWJvdmUsIGV4Y2VwdCB0aGF0IGl0IHJvdW5kcyB0aGUgbWFwcGVkIHBvaW50
IHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCiAgICAgSW50UG9pbnQgbWFwUG9pbnQoY29u
c3QgSW50UG9pbnQmIHApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcm91bmRlZEludFBv
aW50KG1hcFBvaW50KEZsb2F0UG9pbnQocCkpKTsKKyAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRQ
b2ludChtYXBQb2ludChHcmFwaGljc1BvaW50KHApKSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhl
IG1hdHJpeCBoYXMgM0QgY29tcG9uZW50cywgdGhlIHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQg
aXMKICAgICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVseSBwcm9qZWN0aW5nIHRoZSByZWN0IGludG8g
dGhlIHo9MCBwbGFuZQotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OworICAgIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0
OwogCiAgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRo
aXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBt
YXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgpAQCAtMTQ1LDE2ICsx
NDUsMTYgQEAKIAogICAgIC8vIElmIHRoZSBtYXRyaXggaGFzIDNEIGNvbXBvbmVudHMsIHRoZSB6
IGNvbXBvbmVudCBvZiB0aGUgcmVzdWx0IGlzCiAgICAgLy8gZHJvcHBlZCwgZWZmZWN0aXZlbHkg
cHJvamVjdGluZyB0aGUgcXVhZCBpbnRvIHRoZSB6PTAgcGxhbmUKLSAgICBGbG9hdFF1YWQgbWFw
UXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKyAgICBHcmFwaGljc1F1YWQgbWFwUXVhZChj
b25zdCBHcmFwaGljc1F1YWQmKSBjb25zdDsKIAogICAgIC8vIE1hcCBhIHBvaW50IG9uIHRoZSB6
PTAgcGxhbmUgaW50byBhIHBvaW50IG9uCiAgICAgLy8gdGhlIHBsYW5lIHdpdGggd2l0aCB0aGUg
dHJhbnNmb3JtIGFwcGxpZWQsIGJ5IGV4dGVuZGluZwogICAgIC8vIGEgcmF5IHBlcnBlbmRpY3Vs
YXIgdG8gdGhlIHNvdXJjZSBwbGFuZSBhbmQgY29tcHV0aW5nCiAgICAgLy8gdGhlIGxvY2FsIHgs
eSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgd2hlcmUgdGhhdCByYXkgaW50ZXJzZWN0cwogICAgIC8v
IHdpdGggdGhlIGRlc3RpbmF0aW9uIHBsYW5lLgotICAgIEZsb2F0UG9pbnQgcHJvamVjdFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IHByb2plY3RQb2lu
dChjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAgICAgLy8gUHJvamVjdHMgdGhlIGZvdXIg
Y29ybmVycyBvZiB0aGUgcXVhZAotICAgIEZsb2F0UXVhZCBwcm9qZWN0UXVhZChjb25zdCBGbG9h
dFF1YWQmKSBjb25zdDsKKyAgICBHcmFwaGljc1F1YWQgcHJvamVjdFF1YWQoY29uc3QgR3JhcGhp
Y3NRdWFkJikgY29uc3Q7CiAKICAgICBkb3VibGUgbTExKCkgY29uc3QgeyByZXR1cm4gbV9tYXRy
aXhbMF1bMF07IH0KICAgICB2b2lkIHNldE0xMShkb3VibGUgZikgeyBtX21hdHJpeFswXVswXSA9
IGY7IH0KQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIGJvb2wgaGFzUGVyc3BlY3RpdmUoKSBjb25z
dCB7IHJldHVybiBtX21hdHJpeFsyXVszXSAhPSAwLjBmOyB9CiAKICAgICAvLyByZXR1cm5zIGEg
dHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGEgcmVjdCB0byBhIHJlY3QKLSAgICBzdGF0aWMgVHJh
bnNmb3JtYXRpb25NYXRyaXggcmVjdFRvUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVjdFRvUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgIGJvb2wgaXNJbnZl
cnRpYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBA
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1F1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjcwLDcg
KzI3MCw3IEBACiAgICAgcmV0dXJuIHNoZWFyKDAsIHRhbihkZWcycmFkKGFuZ2xlKSkpOwogfQog
Ci1BZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KQorQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3
ZWVuUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0JiBzb3VyY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZGVzdCkKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAgIHRyYW5zZm9ybS50
cmFuc2xhdGUoZGVzdC54KCkgLSBzb3VyY2UueCgpLCBkZXN0LnkoKSAtIHNvdXJjZS55KCkpOwpA
QCAtMjkzLDQ0ICsyOTMsNDQgQEAKICAgICByZXR1cm4gSW50UG9pbnQobHJvdW5kKHgyKSwgbHJv
dW5kKHkyKSk7CiB9CiAKLUZsb2F0UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgQWZmaW5lVHJhbnNmb3Jt
OjptYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBkb3Vi
bGUgeDIsIHkyOwogICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwgeDIsIHkyKTsKIAotICAg
IHJldHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeDIpLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHkyKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobmFycm93UHJlY2lz
aW9uVG9HcmFwaGljc1VuaXQoeDIpLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh5Mikp
OwogfQogCiBJbnRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZy
ZWN0KSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoRmxvYXRS
ZWN0KHJlY3QpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdChHcmFwaGlj
c1JlY3QocmVjdCkpKTsKIH0KIAotRmxvYXRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CitHcmFwaGljc1JlY3QgQWZmaW5lVHJhbnNmb3Jt
OjptYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAoaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAgICBGbG9hdFJlY3QgbWFwcGVkUmVjdChy
ZWN0KTsKLSAgICAgICAgbWFwcGVkUmVjdC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90
cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzVdKSk7Cisg
ICAgICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0KHJlY3QpOworICAgICAgICBtYXBwZWRSZWN0
Lm1vdmUobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFuc2Zvcm1bNF0pLCBuYXJy
b3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChtX3RyYW5zZm9ybVs1XSkpOwogICAgICAgICByZXR1
cm4gbWFwcGVkUmVjdDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVzdWx0OworICAgIEdyYXBo
aWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHJlY3QubG9jYXRpb24o
KSkpOwotICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChGbG9hdFBvaW50KHJlY3QubWF4WCgpLCBy
ZWN0LnkoKSkpKTsKLSAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0Lm1h
eFgoKSwgcmVjdC5tYXhZKCkpKSk7Ci0gICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KEZsb2F0UG9p
bnQocmVjdC54KCksIHJlY3QubWF4WSgpKSkpOworICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChH
cmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSkpKTsKKyAgICByZXN1bHQuc2V0UDMo
bWFwUG9pbnQoR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkpKSk7CisgICAg
cmVzdWx0LnNldFA0KG1hcFBvaW50KEdyYXBoaWNzUG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgp
KSkpOwogICAgIHJldHVybiByZXN1bHQuYm91bmRpbmdCb3goKTsKIH0KIAotRmxvYXRRdWFkIEFm
ZmluZVRyYW5zZm9ybTo6bWFwUXVhZChjb25zdCBGbG9hdFF1YWQmIHEpIGNvbnN0CitHcmFwaGlj
c1F1YWQgQWZmaW5lVHJhbnNmb3JtOjptYXBRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgcSkgY29u
c3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAgICBGbG9h
dFF1YWQgbWFwcGVkUXVhZChxKTsKLSAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJh
bnNmb3JtWzVdKSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCBtYXBwZWRRdWFkKHEpOworICAgICAg
ICBtYXBwZWRRdWFkLm1vdmUobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFuc2Zv
cm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChtX3RyYW5zZm9ybVs1XSkpOwog
ICAgICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVzdWx0
OworICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHEu
cDEoKSkpOwogICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKICAgICByZXN1bHQu
c2V0UDMobWFwUG9pbnQocS5wMygpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsOSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9h
dFF1YWQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3MgR3Jh
cGhpY3NRdWFkOworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJ
bnRSZWN0OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBAIC03MCwxNCArNzAsMTQgQEAK
ICAgICAvLyBSb3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZh
bHVlLgogICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKLSAg
ICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFw
aGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAgIC8v
IFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0YW5nbGUgb3V0LiBUaGlzIGlzIGhlbHBm
dWwgZm9yIGJvdW5kaW5nCiAgICAgLy8gYm94IGNvbXB1dGF0aW9ucyBidXQgbWF5IG5vdCBiZSB3
aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4KICAgICBJbnRSZWN0IG1hcFJlY3QoY29u
c3QgSW50UmVjdCYpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJikgY29u
c3Q7CisgICAgR3JhcGhpY3NSZWN0IG1hcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7
CisgICAgR3JhcGhpY3NRdWFkIG1hcFF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJikgY29uc3Q7CiAK
ICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKIApAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAg
VHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAotQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3
ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCk7
CitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBHcmFwaGljc1JlY3Qm
IHNvdXJjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0KTsKIAogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0
cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTI4LDcgKzUyOCw3IEBACiAg
ICAgcmV0dXJuIHNjYWxlTm9uVW5pZm9ybSgxLjBmLCAtMS4wZik7CiB9CiAKLUZsb2F0UG9pbnQg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBj
b25zdAorR3JhcGhpY3NQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFBvaW50KGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBpcyBiYXNpY2FsbHkg
cmF5dHJhY2luZy4gV2UgaGF2ZSBhIHBvaW50IGluIHRoZSBkZXN0aW5hdGlvbgogICAgIC8vIHBs
YW5lIHdpdGggej0wLCBhbmQgd2UgY2FzdCBhIHJheSBwYXJhbGxlbCB0byB0aGUgei1heGlzIGZy
b20gdGhhdApAQCAtNTU2LDEyICs1NTYsMTIgQEAKICAgICAgICAgb3V0WSAvPSB3OwogICAgIH0K
IAotICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0PihvdXRYKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG91dFkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChzdGF0aWNfY2Fz
dDxHcmFwaGljc1VuaXQ+KG91dFgpLCBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG91dFkpKTsK
IH0KIAotRmxvYXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UXVhZChjb25zdCBG
bG9hdFF1YWQmIHEpIGNvbnN0CitHcmFwaGljc1F1YWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnBy
b2plY3RRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgcSkgY29uc3QKIHsKLSAgICBGbG9hdFF1YWQg
cHJvamVjdGVkUXVhZDsKKyAgICBHcmFwaGljc1F1YWQgcHJvamVjdGVkUXVhZDsKICAgICBwcm9q
ZWN0ZWRRdWFkLnNldFAxKHByb2plY3RQb2ludChxLnAxKCkpKTsKICAgICBwcm9qZWN0ZWRRdWFk
LnNldFAyKHByb2plY3RQb2ludChxLnAyKCkpKTsKICAgICBwcm9qZWN0ZWRRdWFkLnNldFAzKHBy
b2plY3RQb2ludChxLnAzKCkpKTsKQEAgLTU2OSw1NCArNTY5LDU0IEBACiAgICAgcmV0dXJuIHBy
b2plY3RlZFF1YWQ7CiB9CiAKLUZsb2F0UG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBv
aW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybWF0
aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAg
IGlmIChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKQotICAgICAgICByZXR1cm4gRmxvYXRQb2lu
dChwLngoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVswXSksIHAueSgpICsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1BvaW50KHAueCgpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVswXSks
IHAueSgpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsxXSkpOwogCiAg
ICAgZG91YmxlIHgsIHk7CiAgICAgbXVsdFZlY01hdHJpeChwLngoKSwgcC55KCksIHgsIHkpOwot
ICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChzdGF0aWNfY2FzdDxHcmFwaGlj
c1VuaXQ+KHgpLCBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHkpKTsKIH0KIAotRmxvYXRQb2lu
dDNEIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHAp
IGNvbnN0CitHcmFwaGljc1BvaW50M0QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNv
bnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkgY29uc3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJh
bnNsYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwLngoKSArIHN0YXRpY19j
YXN0PGZsb2F0PihtX21hdHJpeFszXVswXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cC55KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHAueigpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzJd
KSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QocC54KCkgKyBzdGF0aWNfY2FzdDxH
cmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwLnkoKSArIHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMV0pLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAueigpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0
PihtX21hdHJpeFszXVsyXSkpOwogCiAgICAgZG91YmxlIHgsIHksIHo7CiAgICAgbXVsdFZlY01h
dHJpeChwLngoKSwgcC55KCksIHAueigpLCB4LCB5LCB6KTsKLSAgICByZXR1cm4gRmxvYXRQb2lu
dDNEKHN0YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oeikpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0Qoc3RhdGljX2Nhc3Q8
R3JhcGhpY3NVbml0Pih4KSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih5KSwgc3RhdGljX2Nh
c3Q8R3JhcGhpY3NVbml0Pih6KSk7CiB9CiAKIEludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om1hcFJlY3QoY29uc3QgSW50UmVjdCAmcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChtYXBSZWN0KEZsb2F0UmVjdChyZWN0KSkpOworICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KG1hcFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpKSk7CiB9CiAKLUZsb2F0UmVjdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpIGNvbnN0CitH
cmFwaGljc1JlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiByKSBjb25zdAogewogICAgIGlmIChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCBtYXBwZWRSZWN0KHIpOwotICAgICAgICBtYXBwZWRSZWN0Lm1vdmUo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
bWF0cml4WzNdWzFdKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0KHIpOworICAg
ICAgICBtYXBwZWRSZWN0Lm1vdmUoc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFsz
XVswXSksIHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMV0pKTsKICAgICAg
ICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgRmxvYXRRdWFkIHJlc3VsdFF1YWQg
PSBtYXBRdWFkKEZsb2F0UXVhZChyKSk7CisgICAgR3JhcGhpY3NRdWFkIHJlc3VsdFF1YWQgPSBt
YXBRdWFkKEdyYXBoaWNzUXVhZChyKSk7CiAgICAgcmV0dXJuIHJlc3VsdFF1YWQuYm91bmRpbmdC
b3goKTsKIH0KIAotRmxvYXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0
IEZsb2F0UXVhZCYgcSkgY29uc3QKK0dyYXBoaWNzUXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bWFwUXVhZChjb25zdCBHcmFwaGljc1F1YWQmIHEpIGNvbnN0CiB7CiAgICAgaWYgKGlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uKCkpIHsKLSAgICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQocSk7Ci0g
ICAgICAgIG1hcHBlZFF1YWQubW92ZShzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0p
LCBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pKTsKKyAgICAgICAgR3JhcGhpY3NR
dWFkIG1hcHBlZFF1YWQocSk7CisgICAgICAgIG1hcHBlZFF1YWQubW92ZShzdGF0aWNfY2FzdDxH
cmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Piht
X21hdHJpeFszXVsxXSkpOwogICAgICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAg
ICBGbG9hdFF1YWQgcmVzdWx0OworICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0
LnNldFAxKG1hcFBvaW50KHEucDEoKSkpOwogICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAy
KCkpKTsKICAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQocS5wMygpKSk7CkBAIC04NzksNyArODc5
LDcgQEAKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KGNvbnN0IEZsb2F0UmVjdCYgZnJvbSwgY29uc3Qg
RmxvYXRSZWN0JiB0bykKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4
OjpyZWN0VG9SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJvbSwgY29uc3QgR3JhcGhpY3NSZWN0
JiB0bykKIHsKICAgICBBU1NFUlQoIWZyb20uaXNFbXB0eSgpKTsKICAgICByZXR1cm4gVHJhbnNm
b3JtYXRpb25NYXRyaXgodG8ud2lkdGgoKSAvIGZyb20ud2lkdGgoKSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRm9udERh
dGEuaCIKICNpbmNsdWRlICJGb250TWV0cmljcy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9k
ZS5oIgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIKQEAgLTEyOCw5ICsxMjgsOSBA
QAogICAgIGZsb2F0IGF2Z0NoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZnQ2hhcldpZHRo
OyB9CiAgICAgdm9pZCBzZXRBdmdDaGFyV2lkdGgoZmxvYXQgYXZnQ2hhcldpZHRoKSB7IG1fYXZn
Q2hhcldpZHRoID0gYXZnQ2hhcldpZHRoOyB9CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzRm9yR2x5
cGgoR2x5cGgpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkg
Y29uc3Q7CiAgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OworICAgIEdyYXBo
aWNzUmVjdCBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKICAgICBmbG9hdCBw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogCiAgICAgZmxvYXQgc3BhY2VXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VXaWR0aDsgfQpAQCAtMjIwLDcgKzIyMCw3IEBACiAg
ICAgfHwgKE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKFdYKSkKICAgICB2b2lkIGluaXRHRElGb250
KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUNvbW1vbkRlc3Ryb3koKTsKLSAgICBGbG9hdFJlY3QgYm91
bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBib3Vu
ZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CiAgICAgZmxvYXQgd2lkdGhGb3JHRElH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtMjMxLDcgKzIzMSw3IEBACiAg
ICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKICAgICBPd25QdHI8QWRkaXRpb25h
bEZvbnREYXRhPiBtX2ZvbnREYXRhOwogCi0gICAgbXV0YWJsZSBPd25QdHI8R2x5cGhNZXRyaWNz
TWFwPEZsb2F0UmVjdD4gPiBtX2dseXBoVG9Cb3VuZHNNYXA7CisgICAgbXV0YWJsZSBPd25QdHI8
R2x5cGhNZXRyaWNzTWFwPEdyYXBoaWNzUmVjdD4gPiBtX2dseXBoVG9Cb3VuZHNNYXA7CiAgICAg
bXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAgICAg
Ym9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwpAQCAtMjk5LDEyICsyOTksMTIgQEAKIH07CiAKICNp
ZiAhKFBMQVRGT1JNKFFUKSAmJiAhSEFWRShRUkFXRk9OVCkpCi1BTFdBWVNfSU5MSU5FIEZsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitB
TFdBWVNfSU5MSU5FIEdyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlw
aCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRz
OwogICAgIGlmIChtX2dseXBoVG9Cb3VuZHNNYXApIHsKICAgICAgICAgYm91bmRzID0gbV9nbHlw
aFRvQm91bmRzTWFwLT5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICBpZiAoYm91bmRz
LndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24pCkBAIC0zMTMsNyArMzEzLDcgQEAKIAogICAg
IGJvdW5kcyA9IHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgIGlmICghbV9nbHlw
aFRvQm91bmRzTWFwKQotICAgICAgICBtX2dseXBoVG9Cb3VuZHNNYXAgPSBhZG9wdFB0cihuZXcg
R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4pOworICAgICAgICBtX2dseXBoVG9Cb3VuZHNNYXAg
PSBhZG9wdFB0cihuZXcgR2x5cGhNZXRyaWNzTWFwPEdyYXBoaWNzUmVjdD4pOwogICAgIG1fZ2x5
cGhUb0JvdW5kc01hcC0+c2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBib3VuZHMpOwogICAgIHJl
dHVybiBib3VuZHM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoVHJhdmVyc2FsU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTkgKzI3LDE5IEBACiAKIHN0YXRpYyBjb25zdCBmbG9hdCBr
UGF0aFNlZ21lbnRMZW5ndGhUb2xlcmFuY2UgPSAwLjAwMDAxZjsKIAotc3RhdGljIGlubGluZSBG
bG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGZpcnN0LCBjb25zdCBGbG9hdFBv
aW50JiBzZWNvbmQpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUG9pbnQgbWlkUG9pbnQoY29uc3Qg
R3JhcGhpY3NQb2ludCYgZmlyc3QsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHNlY29uZCkKIHsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludCgoZmlyc3QueCgpICsgc2Vjb25kLngoKSkgLyAyLjBmLCAoZmly
c3QueSgpICsgc2Vjb25kLnkoKSkgLyAyLjBmKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludCgo
Zmlyc3QueCgpICsgc2Vjb25kLngoKSkgLyAyLjBmLCAoZmlyc3QueSgpICsgc2Vjb25kLnkoKSkg
LyAyLjBmKTsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZUxpbmUoY29uc3QgRmxv
YXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgZGlzdGFuY2VMaW5lKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHN0YXJ0LCBjb25zdCBHcmFwaGlj
c1BvaW50JiBlbmQpCiB7CiAgICAgcmV0dXJuIHNxcnRmKChlbmQueCgpIC0gc3RhcnQueCgpKSAq
IChlbmQueCgpIC0gc3RhcnQueCgpKSArIChlbmQueSgpIC0gc3RhcnQueSgpKSAqIChlbmQueSgp
IC0gc3RhcnQueSgpKSk7CiB9CiAKIHN0cnVjdCBRdWFkcmF0aWNCZXppZXIgewogICAgIFF1YWRy
YXRpY0JlemllcigpIHsgfQotICAgIFF1YWRyYXRpY0Jlemllcihjb25zdCBGbG9hdFBvaW50JiBz
LCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBGbG9hdFBvaW50JiBlKQorICAgIFF1YWRyYXRp
Y0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBHcmFwaGljc1BvaW50JiBjLCBj
b25zdCBHcmFwaGljc1BvaW50JiBlKQogICAgICAgICA6IHN0YXJ0KHMpCiAgICAgICAgICwgY29u
dHJvbChjKQogICAgICAgICAsIGVuZChlKQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICBsZWZ0
LmNvbnRyb2wgPSBtaWRQb2ludChzdGFydCwgY29udHJvbCk7CiAgICAgICAgIHJpZ2h0LmNvbnRy
b2wgPSBtaWRQb2ludChjb250cm9sLCBlbmQpOwogICAgICAgICAKLSAgICAgICAgRmxvYXRQb2lu
dCBsZWZ0Q29udHJvbFRvUmlnaHRDb250cm9sID0gbWlkUG9pbnQobGVmdC5jb250cm9sLCByaWdo
dC5jb250cm9sKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBsZWZ0Q29udHJvbFRvUmlnaHRDb250
cm9sID0gbWlkUG9pbnQobGVmdC5jb250cm9sLCByaWdodC5jb250cm9sKTsKICAgICAgICAgbGVm
dC5lbmQgPSBsZWZ0Q29udHJvbFRvUmlnaHRDb250cm9sOwogICAgICAgICByaWdodC5zdGFydCA9
IGxlZnRDb250cm9sVG9SaWdodENvbnRyb2w7CiAKQEAgLTY0LDE0ICs2NCwxNCBAQAogICAgICAg
ICByaWdodC5lbmQgPSBlbmQ7CiAgICAgfQogICAgIAotICAgIEZsb2F0UG9pbnQgc3RhcnQ7Ci0g
ICAgRmxvYXRQb2ludCBjb250cm9sOwotICAgIEZsb2F0UG9pbnQgZW5kOworICAgIEdyYXBoaWNz
UG9pbnQgc3RhcnQ7CisgICAgR3JhcGhpY3NQb2ludCBjb250cm9sOworICAgIEdyYXBoaWNzUG9p
bnQgZW5kOwogfTsKIAogc3RydWN0IEN1YmljQmV6aWVyIHsKICAgICBDdWJpY0JlemllcigpIHsg
fQotICAgIEN1YmljQmV6aWVyKGNvbnN0IEZsb2F0UG9pbnQmIHMsIGNvbnN0IEZsb2F0UG9pbnQm
IGMxLCBjb25zdCBGbG9hdFBvaW50JiBjMiwgY29uc3QgRmxvYXRQb2ludCYgZSkKKyAgICBDdWJp
Y0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBHcmFwaGljc1BvaW50JiBjMSwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYzIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGUpCiAgICAgICAg
IDogc3RhcnQocykKICAgICAgICAgLCBjb250cm9sMShjMSkKICAgICAgICAgLCBjb250cm9sMihj
MikKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgCiAgICAgdm9pZCBzcGxpdChDdWJpY0Jlemll
ciYgbGVmdCwgQ3ViaWNCZXppZXImIHJpZ2h0KSBjb25zdAogICAgIHsgICAgCi0gICAgICAgIEZs
b2F0UG9pbnQgc3RhcnRUb0NvbnRyb2wxID0gbWlkUG9pbnQoY29udHJvbDEsIGNvbnRyb2wyKTsK
KyAgICAgICAgR3JhcGhpY3NQb2ludCBzdGFydFRvQ29udHJvbDEgPSBtaWRQb2ludChjb250cm9s
MSwgY29udHJvbDIpOwogICAgICAgICAKICAgICAgICAgbGVmdC5zdGFydCA9IHN0YXJ0OwogICAg
ICAgICBsZWZ0LmNvbnRyb2wxID0gbWlkUG9pbnQoc3RhcnQsIGNvbnRyb2wxKTsKQEAgLTk2LDE1
ICs5NiwxNSBAQAogICAgICAgICByaWdodC5jb250cm9sMSA9IG1pZFBvaW50KHJpZ2h0LmNvbnRy
b2wyLCBzdGFydFRvQ29udHJvbDEpOwogICAgICAgICByaWdodC5lbmQgPSBlbmQ7CiAgICAgICAg
IAotICAgICAgICBGbG9hdFBvaW50IGxlZnRDb250cm9sMlRvUmlnaHRDb250cm9sMSA9IG1pZFBv
aW50KGxlZnQuY29udHJvbDIsIHJpZ2h0LmNvbnRyb2wxKTsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dCBsZWZ0Q29udHJvbDJUb1JpZ2h0Q29udHJvbDEgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wyLCBy
aWdodC5jb250cm9sMSk7CiAgICAgICAgIGxlZnQuZW5kID0gbGVmdENvbnRyb2wyVG9SaWdodENv
bnRyb2wxOwogICAgICAgICByaWdodC5zdGFydCA9IGxlZnRDb250cm9sMlRvUmlnaHRDb250cm9s
MTsKICAgICB9CiAgICAgCi0gICAgRmxvYXRQb2ludCBzdGFydDsKLSAgICBGbG9hdFBvaW50IGNv
bnRyb2wxOwotICAgIEZsb2F0UG9pbnQgY29udHJvbDI7Ci0gICAgRmxvYXRQb2ludCBlbmQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBzdGFydDsKKyAgICBHcmFwaGljc1BvaW50IGNvbnRyb2wxOworICAg
IEdyYXBoaWNzUG9pbnQgY29udHJvbDI7CisgICAgR3JhcGhpY3NQb2ludCBlbmQ7CiB9OwogCiAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBwb3NzaWJseSB2ZXJ5IHNsb3cgZHVlIHRvIHRoZSBp
ZnMgcmVxdWlyZWQgZm9yIHByb3BlciBwYXRoIG1lYXN1cmluZwpAQCAtMTY0LDIwICsxNjQsMjAg
QEAKICAgICByZXR1cm4gZGlzdGFuY2U7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6
bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRl
Ojptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9jdXJyZW50ID0g
bV9zdGFydCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9pbnQ7CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQorZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQpCiB7CiAgICAgZmxvYXQgZGlzdGFuY2UgPSBkaXN0YW5jZUxpbmUobV9jdXJy
ZW50LCBwb2ludCk7CiAgICAgbV9jdXJyZW50ID0gbV9jb250cm9sMSA9IG1fY29udHJvbDIgPSBw
b2ludDsKICAgICByZXR1cm4gZGlzdGFuY2U7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0
ZTo6cXVhZHJhdGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3Qg
RmxvYXRQb2ludCYgbmV3RW5kKQorZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNC
ZXppZXJUbyhjb25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9sLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBuZXdFbmQpCiB7CiAgICAgZmxvYXQgZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxRdWFkcmF0
aWNCZXppZXI+KCp0aGlzLCBRdWFkcmF0aWNCZXppZXIobV9jdXJyZW50LCBuZXdDb250cm9sLCBu
ZXdFbmQpKTsKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgcmV0dXJuIGRpc3RhbmNlOwogfQog
Ci1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2lu
dCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBGbG9h
dFBvaW50JiBuZXdFbmQpCitmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8o
Y29uc3QgR3JhcGhpY3NQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5l
d0NvbnRyb2wyLCBjb25zdCBHcmFwaGljc1BvaW50JiBuZXdFbmQpCiB7CiAgICAgZmxvYXQgZGlz
dGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1YmljQmV6aWVyKG1fY3Vy
cmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsKIApAQCAtMjA5LDcgKzIw
OSw3IEBACiAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIAogICAgIGlmICgobV9h
Y3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8fCBtX2FjdGlvbiA9PSBUcmF2ZXJzYWxO
b3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExlbmd0aCkg
ewotICAgICAgICBGbG9hdFNpemUgY2hhbmdlID0gbV9jdXJyZW50IC0gbV9wcmV2aW91czsKKyAg
ICAgICAgR3JhcGhpY3NTaXplIGNoYW5nZSA9IG1fY3VycmVudCAtIG1fcHJldmlvdXM7CiAgICAg
ICAgIGZsb2F0IHNsb3BlID0gYXRhbjJmKGNoYW5nZS5oZWlnaHQoKSwgY2hhbmdlLndpZHRoKCkp
OwogICAgICAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCkgewogICAg
ICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3RhbExlbmd0aDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsMTMgKzE3OCwxMyBAQAogICAgIEJp
dG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBH
cmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAjZW5kaWYKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogI2lmIChP
UyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKSkKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0
JiBkZXN0UmVjdCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEhBSUtVKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDkgKzc2LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEFmZmluZVRyYW5z
Zm9ybTsKLSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBj
bGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2ludDsKKyAgICBjbGFzcyBHcmFw
aGljc1JlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwogICAgIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXI7CiAKQEAgLTkyLDcgKzkyLDcgQEAK
IAogICAgIHN0cnVjdCBQYXRoRWxlbWVudCB7CiAgICAgICAgIFBhdGhFbGVtZW50VHlwZSB0eXBl
OwotICAgICAgICBGbG9hdFBvaW50KiBwb2ludHM7CisgICAgICAgIEdyYXBoaWNzUG9pbnQqIHBv
aW50czsKICAgICB9OwogCiAgICAgdHlwZWRlZiB2b2lkICgqUGF0aEFwcGxpZXJGdW5jdGlvbiko
dm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqKTsKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAg
ICAgICAgIFBhdGgoY29uc3QgUGF0aCYpOwogICAgICAgICBQYXRoJiBvcGVyYXRvcj0oY29uc3Qg
UGF0aCYpOwogCi0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIFdpbmRS
dWxlIHJ1bGUgPSBSVUxFX05PTlpFUk8pIGNvbnN0OwotICAgICAgICBib29sIHN0cm9rZUNvbnRh
aW5zKFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwotICAgICAgICBGbG9hdFJlY3Qgc3Ry
b2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKKyAgICAgICAg
Ym9vbCBjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiwgV2luZFJ1bGUgcnVsZSA9IFJVTEVf
Tk9OWkVSTykgY29uc3Q7CisgICAgICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVB
cHBsaWVyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgICAgICBHcmFwaGljc1Jl
Y3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBzdHJva2VCb3Vu
ZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiA9IDApIGNvbnN0OwogICAgICAgICAKICAgICAg
ICAgZmxvYXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0
aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBw
b2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OwogICAgICAgICBmbG9h
dCBub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgY2xlYXIoKTsKQEAgLTEyMCwyMyArMTIwLDIzIEBACiAgICAgICAgIC8vIEdl
dHMgdGhlIGN1cnJlbnQgcG9pbnQgb2YgdGhlIGN1cnJlbnQgcGF0aCwgd2hpY2ggaXMgY29uY2Vw
dHVhbGx5IHRoZSBmaW5hbCBwb2ludCByZWFjaGVkIGJ5IHRoZSBwYXRoIHNvIGZhci4KICAgICAg
ICAgLy8gTm90ZSB0aGUgUGF0aCBjYW4gYmUgZW1wdHkgKGlzRW1wdHkoKSA9PSB0cnVlKSBhbmQg
c3RpbGwgaGF2ZSBhIGN1cnJlbnQgcG9pbnQuCiAgICAgICAgIGJvb2wgaGFzQ3VycmVudFBvaW50
KCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50KCkgY29uc3Q7CisgICAg
ICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBt
b3ZlVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZExpbmVUbyhjb25zdCBG
bG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCk7Ci0gICAgICAgIHZv
aWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCk7
Ci0gICAgICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCByYWRpdXMpOworICAgICAgICB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50Jik7CisgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAg
ICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9p
bnQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGVuZFBvaW50KTsKKyAgICAgICAgdm9pZCBhZGRCZXpp
ZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGVuZFBvaW50KTsK
KyAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIGZsb2F0IHJhZGl1cyk7CiAgICAgICAgIHZvaWQgY2xvc2VTdWJwYXRoKCk7CiAK
LSAgICAgICAgdm9pZCBhZGRBcmMoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cywgZmxv
YXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSk7Ci0gICAg
ICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICAgICAgdm9pZCBhZGRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSk7Ci0gICAgICAgIHZv
aWQgYWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BM
ZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNp
emUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMp
OworICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgcmFkaXVz
LCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKTsK
KyAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgICAgICB2b2lk
IGFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgICAgIHZvaWQgYWRkUm91bmRl
ZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NTaXplJiByb3VuZGluZ1Jh
ZGlpKTsKKyAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBj
b25zdCBHcmFwaGljc1NpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9w
UmlnaHRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3Qg
R3JhcGhpY3NTaXplJiBib3R0b21SaWdodFJhZGl1cyk7CiAgICAgICAgIHZvaWQgYWRkUm91bmRl
ZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmKTsKIAotICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25z
dCBGbG9hdFNpemUmKTsKKyAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXpl
Jik7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQogCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICAgICAgdm9pZCB0cmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lk
IGFkZEJlemllcnNGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdo
dFJhZGl1cyk7CisgICAgICAgIHZvaWQgYWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgR3Jh
cGhpY3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21MZWZ0
UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKIAogICAgICAg
ICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxNSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAK
IGNsYXNzIEdlbmVyYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPEdlbmVyYXRvcj4gewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkdlbmVyYXRvcigpIHt9OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBm
aWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiAvKiBzaXplICov
LCBGbG9hdFJlY3QmIC8qIHNyY1JlY3QgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiAvKiBzaXplICovLCBH
cmFwaGljc1JlY3QmIC8qIHNyY1JlY3QgKi8pIHsgfQogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTY3JvbGxBbmltYXRvci5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNp
bmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTcyLDcg
KzcyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBH
cmFwaGljc1BvaW50JiBvZmZzZXQpCiB7CiAgICAgaWYgKG1fY3VycmVudFBvc1ggIT0gb2Zmc2V0
LngoKSB8fCBtX2N1cnJlbnRQb3NZICE9IG9mZnNldC55KCkpIHsKICAgICAgICAgbV9jdXJyZW50
UG9zWCA9IG9mZnNldC54KCk7CkBAIC0xMTksOSArMTE5LDkgQEAKIH0KICNlbmRpZgogCi1GbG9h
dFBvaW50IFNjcm9sbEFuaW1hdG9yOjpjdXJyZW50UG9zaXRpb24oKSBjb25zdAorR3JhcGhpY3NQ
b2ludCBTY3JvbGxBbmltYXRvcjo6Y3VycmVudFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gRmxvYXRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKTsKKyAgICByZXR1cm4g
R3JhcGhpY3NQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKTsKIH0KIAogdm9pZCBT
Y3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdJbWFnZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVm
aW5lIERyYWdJbWFnZV9oCiAKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiRmxvYXRT
aXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAvL3RoZXkgc2hv
dWxkIHJlbGVhc2UgdGhlIGlucHV0IGltYWdlLiAgQXMgYSBjb3JvbGxhcnkgdGhlc2UgbWV0aG9k
cyBkb24ndCBndWFyYW50ZWUKICAgICAvL3RoZSBpbnB1dCBpbWFnZSByZWYgd2lsbCBzdGlsbCBi
ZSB2YWxpZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjYWxsZWQKICAgICBEcmFnSW1hZ2VSZWYgZml0
RHJhZ0ltYWdlVG9NYXhTaXplKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0lt
YWdlKERyYWdJbWFnZVJlZiwgRmxvYXRTaXplIHNjYWxlKTsKKyAgICBEcmFnSW1hZ2VSZWYgc2Nh
bGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBHcmFwaGljc1NpemUgc2NhbGUpOwogICAgIERyYWdJ
bWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBm
bG9hdCBkZWx0YSk7CiAgICAgCiAgICAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21J
bWFnZShJbWFnZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbFZp
ZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bFZpZXdNYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbFZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bXBvcnQgIlNjcm9sbFZpZXcuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1w
b3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkdyYXBoaWNzUmVjdC5oIgogI2ltcG9ydCAiSW50
UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlzaW9uIDkw
OTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRo
KGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGluZmxhdGVkUmVj
dC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAg
IGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsK
LSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3Ip
KTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21G
YWN0b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAt
aW5mbGF0ZWRSZWN0LnkoKSk7CiAgICAgfQogICAgIApAQCAtMzQ4LDcgKzM0OCw3IEBACiAgICAg
ICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0
b3IpOwogICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQo
KSAvIHpvb21GYWN0b3IpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0
LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBo
aWNzU2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwogICAgIH0KICAgICAK
QEAgLTQ2Niw3ICs0NjYsNyBAQAogICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGlu
ZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBpbmZsYXRlZFJl
Y3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAgICAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55
KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpv
b21GYWN0b3IpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29t
RmFjdG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLWlu
ZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAgICAgICAgfQogICAgIH0gCkBA
IC01MzMsNyArNTMzLDcgQEAKICAgICAgICAgcmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgLyB6
b29tRmFjdG9yKTsKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsK
LSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3Ip
KTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21G
YWN0b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1yZWN0LngoKSwgLXJlY3QueSgp
KTsKICAgICB9CiAgICAgQ0dSZWN0IGJvdW5kcyhyZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNjEsNyArNjEsNyBAQAogICAg
IHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxv
YXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKICNpZiBFTkFCTEUo
UlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CkBAIC03MiwxMSArNzIsMTEgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxBbmltYXRpb25zKCk7CiAKLSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Q
b2ludChjb25zdCBHcmFwaGljc1BvaW50JiBuZXdQb3NpdGlvbik7CiAgICAgdm9pZCBpbW1lZGlh
dGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgpOwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xs
QnlEZWx0YVkoZmxvYXQgZGVsdGFZKTsKIAotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7CisgICAg
dm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIG5ld1Bvc2l0aW9uKTsKIAogICAgIHZvaWQgc2V0SXNEcmF3aW5nSW50b0xheWVy
KGJvb2wgYikgeyBtX2RyYXdpbmdJbnRvTGF5ZXIgPSBiOyB9CiAgICAgYm9vbCBpc0RyYXdpbmdJ
bnRvTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdJbnRvTGF5ZXI7IH0KQEAgLTEzMSw3
ICsxMzEsNyBAQAogCiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsWFBvc2l0aW9uSWZOZWNlc3Nhcnko
ZmxvYXQpIGNvbnN0OwogICAgIGZsb2F0IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5
KGZsb2F0KSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNl
c3NhcnkoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgYWRqdXN0
U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAK
ICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0
Y2hpbmcoKSBjb25zdDsKQEAgLTE1MiwxNSArMTUyLDE1IEBACiAgICAgYm9vbCBtX2RpZEN1bXVs
YXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbjsK
ICAgICAKICAgICBDRlRpbWVJbnRlcnZhbCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsK
LSAgICBGbG9hdFNpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOwotICAgIEZsb2F0U2l6ZSBtX3N0
cmV0Y2hTY3JvbGxGb3JjZTsKLSAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OworICAg
IEdyYXBoaWNzU2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7CisgICAgR3JhcGhpY3NTaXplIG1f
c3RyZXRjaFNjcm9sbEZvcmNlOworICAgIEdyYXBoaWNzU2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7
CiAKICAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4KICAgICBDRlRpbWVJbnRlcnZhbCBtX3N0YXJ0
VGltZTsKLSAgICBGbG9hdFNpemUgbV9zdGFydFN0cmV0Y2g7Ci0gICAgRmxvYXRQb2ludCBtX29y
aWdPcmlnaW47Ci0gICAgRmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5OworICAgIEdyYXBoaWNzU2l6
ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBHcmFwaGljc1BvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBH
cmFwaGljc1NpemUgbV9vcmlnVmVsb2NpdHk7CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+
IG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKICNlbmRpZgogICAgIGJvb2wgbV9kcmF3aW5nSW50b0xh
eWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
IAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVy
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsVmlldy5oIgpAQCAtOTAsNyArOTAsNyBAQAogICAgIGlmICghX2FuaW1hdG9yKQogICAgICAg
ICByZXR1cm4gTlNaZXJvUmVjdDsKIAotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY3VycmVudFBv
c2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICBXZWJDb3JlOjpHcmFw
aGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7
CiAgICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0
aW9uLnkoKSwgMCwgMCk7CiB9CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNl
dCkKIHsKICAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5dOwogICAg
IGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKQEAgLTUzOCw3ICs1MzgsNyBAQAogICAg
IHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEt
PmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdo
dCgpKSwgMCk7CiB9CiAKLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm9s
bFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0CitH
cmFwaGljc1BvaW50IFNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVj
ZXNzYXJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICgh
bV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKICAg
ICAgICAgcmV0dXJuIHBvc2l0aW9uOwpAQCAtNTQ2LDEyICs1NDYsMTIgQEAKICAgICBmbG9hdCBu
ZXdYID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJl
YS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0
aCgpKSwgMCk7CiAgICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlv
bi55KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKLSAgICByZXR1cm4gRmxvYXRQb2lu
dChuZXdYLCBuZXdZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChuZXdYLCBuZXdZKTsKIH0K
IAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBG
bG9hdFBvaW50JiBuZXdQb3NpdGlvbikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0
ZVNjcm9sbFRvUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pCiB7Ci0gICAg
RmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vz
c2FyeShuZXdQb3NpdGlvbik7CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0g
YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CiAgCiAgICAgaWYg
KGFkanVzdGVkUG9zaXRpb24ueCgpID09IG1fY3VycmVudFBvc1ggJiYgYWRqdXN0ZWRQb3NpdGlv
bi55KCkgPT0gbV9jdXJyZW50UG9zWSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTgzLDcgKzU4Myw3
IEBACiAgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgbmV3UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVT
Y3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bv
c2l0aW9uKQogewogICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcik7CiAgICAgQ0dG
bG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfcHJvZ3Jlc3Nd
OwpAQCAtODY1LDcgKzg2NSw3IEBACiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnBpbm5lZElu
RGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQogewotICAgIEZsb2F0U2l6ZSBs
aW1pdERlbHRhOworICAgIEdyYXBoaWNzU2l6ZSBsaW1pdERlbHRhOwogICAgIGlmIChmYWJzZihk
ZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKICAgICAgICAgaWYgKGRlbHRhWSA8IDApIHsKICAg
ICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFy
ZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKQEAgLTkzMyw3ICs5MzMsNyBAQAogICAgIGZsb2F0IGRl
bHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsKIAogICAgIC8vIFJlc2V0IG92
ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZh
cmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4KLSAgICBtX292ZXJmbG93U2Ny
b2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBHcmFw
aGljc1NpemUoKTsKIAogICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZl
bnQuZGVsdGFYKCk7CiAgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVu
dC5kZWx0YVkoKTsKQEAgLTk3MCw3ICs5NzAsNyBAQAogICAgICAgICAgICAgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2
ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRT
aXplKCk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKQEAgLTEw
NjAsOSArMTA2MCw5IEBACiAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0
aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKICAgICAgICAgICAgIG1f
c3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQo
KSArIGRlbHRhWSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShjZWlsZihl
bGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkp
LCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uu
aGVpZ2h0KCkpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG9yaWdPcmlnaW4gPSAobV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hBbW91bnQ7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKKyAgICAgICAgICAg
IEdyYXBoaWNzU2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVs
dGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JS
ZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7CisgICAgICAgICAg
ICBHcmFwaGljc1BvaW50IG9yaWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNv
bnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigp
KSAtIHN0cmV0Y2hBbW91bnQ7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IG5ld09yaWdpbiA9
IG9yaWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKIAogICAgICAgICAgICAgaWYgKG9yaWdPcmlnaW4g
IT0gbmV3T3JpZ2luKSB7CiAgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwpAQCAtMTA4OCw3ICsxMDg4LDcg
QEAKICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgIG1faWdub3Jl
TW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CiAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3Rh
bXAgPSAwOwotICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgIG1fbW9t
ZW50dW1WZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQ
aW5uZWRPbkxlZnQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxlclBpbm5l
ZFRvTWluaW11bVBvc2l0aW9uKCk7CiAgICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmln
aHQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11
bVBvc2l0aW9uKCk7CiAgICAgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA9IDA7CkBAIC0x
MDk4LDcgKzEwOTgsNyBAQAogICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91
bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0
cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKIAotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZs
b2F0U2l6ZSgpOworICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEdyYXBoaWNzU2l6ZSgpOwog
ICAgIAogICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKQEAgLTExMTUsNyArMTExNSw3IEBACiB7CiAg
ICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZv
XSBzeXN0ZW1VcHRpbWVdIC0gbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7CiAgICAgaWYg
KG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+PSBzY3JvbGxWZWxv
Y2l0eVplcm9pbmdUaW1lb3V0KQotICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNp
emUoKTsKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAg
ICBtX2luU2Nyb2xsR2VzdHVyZSA9IGZhbHNlOwogCkBAIC0xMTIzLDkgKzExMjMsOSBAQAogICAg
ICAgICByZXR1cm47CiAKICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2lu
Y2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAg
IG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0
U2l6ZSgpOworICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgbV9vcmln
T3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NT
aXplKCk7CiAKICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wLzYw
LjApOwogfQpAQCAtMTE0OSwxNSArMTE0OSwxNSBAQAogICAgIGlmICghbV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpIHsKICAgICAgICAgQ0ZUaW1l
SW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURh
dGVdIC0gbV9zdGFydFRpbWU7CiAKLSAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0
U2l6ZSgpKSB7CisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBHcmFwaGljc1NpemUoKSkg
ewogICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFu
Z0Ftb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgp
KSB7ICAgIAorICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEdyYXBoaWNzU2l6ZSgp
KSB7ICAgIAogICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Ci0g
ICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAg
ICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAg
ICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRj
aCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9p
bnQoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAg
ICAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgICAgICAg
ICAgICAgbV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAgICAgICAgICAgICAgIG1f
b3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkBAIC0xMTgyLDE3ICsxMTgyLDE3IEBACiAgICAgICAgICAgICAgICAg
bV9vcmlnVmVsb2NpdHkuc2V0SGVpZ2h0KDApOwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRQ
b2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRp
bWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwg
KGZsb2F0KXRpbWVEZWx0YSkpLAorICAgICAgICBHcmFwaGljc1BvaW50IGRlbHRhKHJvdW5kVG9E
ZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJl
dGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhl
bGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdW
ZWxvY2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKIAogICAgICAgICBpZiAoZmFi
cyhkZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKLSAgICAgICAgICAg
IEZsb2F0UG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CisgICAgICAgICAg
ICBHcmFwaGljc1BvaW50IG5ld09yaWdpbiA9IG1fb3JpZ09yaWdpbiArIGRlbHRhOwogCiAgICAg
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZShmYWxzZSk7CiAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdp
bik7CiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSh0cnVlKTsKIAotICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2gg
PSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAgICAgR3JhcGhp
Y3NTaXplIG5ld1N0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChy
ZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53aWR0aCgpKSk7CiAgICAgICAg
ICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKQEAgLTEyMDIsMTYgKzEyMDIsMTYgQEAKICAg
ICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVk
SW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOwogCiAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5k
VGltZXIuc3RvcCgpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNp
emUoKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gR3JhcGhpY3NTaXplKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAg
IG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICBtX29yaWdPcmlnaW4g
PSBGbG9hdFBvaW50KCk7Ci0gICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgp
OworICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKKyAgICAgICAg
ICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICAgICAgICAgIG1fb3JpZ1Zl
bG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsK
LSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICAgICAgbV9zdGFydFN0
cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBACiAgICAgLy8gZGVsZXRlIGl0LiBJdCB3aWxsIGJlIHJlbGVh
c2VkIHdoZW4gaXQgZmFsbHMgb3V0IG9mIHNjb3BlLgogfQogCi1SZXRhaW5QdHI8TlNJbWFnZT4g
c2NhbGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBGbG9hdFNpemUgc2NhbGUp
CitSZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+IGlt
YWdlLCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAgICAgTlNTaXplIG9yaWdpbmFsU2l6ZSA9IFtp
bWFnZS5nZXQoKSBzaXplXTsKICAgICBOU1NpemUgbmV3U2l6ZSA9IE5TTWFrZVNpemUoKG9yaWdp
bmFsU2l6ZS53aWR0aCAqIHNjYWxlLndpZHRoKCkpLCAob3JpZ2luYWxTaXplLmhlaWdodCAqIHNj
YWxlLmhlaWdodCgpKSk7CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgW1t0ZXh0Q29sb3Ig
Y29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0gZ2V0UmVkOiZy
ZWQgZ3JlZW46JmdyZWVuIGJsdWU6JmJsdWUgYWxwaGE6JmFscGhhXTsKICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldEZpbGxDb2xvcihtYWtlUkdCQShyZWQgKiAyNTUsIGdyZWVuICogMjU1LCBi
bHVlICogMjU1LCBhbHBoYSAqIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICAK
LSAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQoJmdyYXBoaWNzQ29udGV4dCwgcnVuLCBGbG9h
dFBvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9pbnQueSA6ICgtMSAqIHBvaW50LnkpKSkpOwor
ICAgICAgICB3ZWJDb3JlRm9udC5kcmF3VGV4dCgmZ3JhcGhpY3NDb250ZXh0LCBydW4sIEdyYXBo
aWNzUG9pbnQocG9pbnQueCwgKGZsaXBwZWQgPyBwb2ludC55IDogKC0xICogcG9pbnQueSkpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIWZsaXBwZWQpCiAgICAgICAgICAgICBDR0NvbnRleHRT
Y2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBsYXRm
b3JtU2NyZWVuLmgiCiAKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0
ICJQYWdlLmgiCkBAIC01MSwxMyArNTEsMTMgQEAKIC8vIFRoZXNlIGZ1bmN0aW9ucyBzY2FsZSBi
ZXR3ZWVuIHNjcmVlbiBhbmQgcGFnZSBjb29yZGluYXRlcyBiZWNhdXNlIEphdmFTY3JpcHQvRE9N
IG9wZXJhdGlvbnMgCiAvLyBhc3N1bWUgdGhhdCB0aGUgc2NyZWVuIGFuZCB0aGUgcGFnZSBzaGFy
ZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbS4KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lk
Z2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQo
KSB3aW5kb3ddIDogbmlsOwogICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVuRm9yV2luZG93
KHdpbmRvdykgZnJhbWVdLCB3aW5kb3cpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxl
UmVjdChXaWRnZXQqIHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdp
ZGdldCogd2lkZ2V0KQogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0
LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gOiBuaWw7CiAgICAgcmV0dXJuIHRvVXNlclNwYWNl
KFtzY3JlZW5Gb3JXaW5kb3cod2luZG93KSB2aXNpYmxlRnJhbWVdLCB3aW5kb3cpOwpAQCAtODUs
MTggKzg1LDE4IEBACiAjZW5kaWYKIH0KIAotRmxvYXRSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5T
UmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKQorR3JhcGhpY3NSZWN0IHRvVXNlclNw
YWNlKGNvbnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKQogewotICAgIEZs
b2F0UmVjdCB1c2VyUmVjdCA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHVzZXJSZWN0ID0gcmVj
dDsKICAgICB1c2VyUmVjdC5zZXRZKE5TTWF4WShbc2NyZWVuRm9yV2luZG93KGRlc3RpbmF0aW9u
KSBmcmFtZV0pIC0gKHVzZXJSZWN0LnkoKSArIHVzZXJSZWN0LmhlaWdodCgpKSk7IC8vIGZsaXAK
ICAgICBpZiAoZGVzdGluYXRpb24pCiAgICAgICAgIHVzZXJSZWN0LnNjYWxlKDEgLyB3aW5kb3dT
Y2FsZUZhY3RvcihkZXN0aW5hdGlvbikpOyAvLyBzY2FsZSBkb3duCiAgICAgcmV0dXJuIHVzZXJS
ZWN0OwogfQogCi1OU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIE5T
V2luZG93ICpzb3VyY2UpCitOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCiB7Ci0gICAgRmxvYXRSZWN0IGRldmljZVJlY3QgPSBy
ZWN0OworICAgIEdyYXBoaWNzUmVjdCBkZXZpY2VSZWN0ID0gcmVjdDsKICAgICBpZiAoc291cmNl
KQogICAgICAgICBkZXZpY2VSZWN0LnNjYWxlKHdpbmRvd1NjYWxlRmFjdG9yKHNvdXJjZSkpOyAv
LyBzY2FsZSB1cAogICAgIGRldmljZVJlY3Quc2V0WShOU01heFkoW3NjcmVlbkZvcldpbmRvdyhz
b3VyY2UpIGZyYW1lXSkgLSAoZGV2aWNlUmVjdC55KCkgKyBkZXZpY2VSZWN0LmhlaWdodCgpKSk7
IC8vIGZsaXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIsMTYgQEAKIHsKIH0KIAotZG91YmxlIENvbmVFZmZl
Y3Q6OmdhaW4oRmxvYXRQb2ludDNEIHNvdXJjZVBvc2l0aW9uLCBGbG9hdFBvaW50M0Qgc291cmNl
T3JpZW50YXRpb24sIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKQorZG91YmxlIENvbmVF
ZmZlY3Q6OmdhaW4oR3JhcGhpY3NQb2ludDNEIHNvdXJjZVBvc2l0aW9uLCBHcmFwaGljc1BvaW50
M0Qgc291cmNlT3JpZW50YXRpb24sIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKQog
ewogICAgIGlmIChzb3VyY2VPcmllbnRhdGlvbi5pc1plcm8oKSB8fCAoKG1faW5uZXJBbmdsZSA9
PSAzNjAuMCkgJiYgKG1fb3V0ZXJBbmdsZSA9PSAzNjAuMCkpKQogICAgICAgICByZXR1cm4gMS4w
OyAvLyBubyBjb25lIHNwZWNpZmllZCAtIHVuaXR5IGdhaW4KIAogICAgIC8vIE5vcm1hbGl6ZWQg
c291cmNlLWxpc3RlbmVyIHZlY3RvcgotICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVy
ID0gbGlzdGVuZXJQb3NpdGlvbiAtIHNvdXJjZVBvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQz
RCBzb3VyY2VUb0xpc3RlbmVyID0gbGlzdGVuZXJQb3NpdGlvbiAtIHNvdXJjZVBvc2l0aW9uOwog
ICAgIHNvdXJjZVRvTGlzdGVuZXIubm9ybWFsaXplKCk7CiAKLSAgICBGbG9hdFBvaW50M0Qgbm9y
bWFsaXplZFNvdXJjZU9yaWVudGF0aW9uID0gc291cmNlT3JpZW50YXRpb247CisgICAgR3JhcGhp
Y3NQb2ludDNEIG5vcm1hbGl6ZWRTb3VyY2VPcmllbnRhdGlvbiA9IHNvdXJjZU9yaWVudGF0aW9u
OwogICAgIG5vcm1hbGl6ZWRTb3VyY2VPcmllbnRhdGlvbi5ub3JtYWxpemUoKTsKIAogICAgIC8v
IEFuZ2xlIGJldHdlZW4gdGhlIHNvdXJjZSBvcmllbnRhdGlvbiB2ZWN0b3IgYW5kIHRoZSBzb3Vy
Y2UtbGlzdGVuZXIgdmVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9D
b25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmbmRlZiBDb25lX2gKICNkZWZp
bmUgQ29uZV9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50M0QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw3ICs0MCw3IEBACiAg
ICAgQ29uZUVmZmVjdCgpOwogCiAgICAgLy8gUmV0dXJucyBzY2FsYXIgZ2FpbiBmb3IgdGhlIGdp
dmVuIHNvdXJjZS9saXN0ZW5lciBwb3NpdGlvbnMvb3JpZW50YXRpb25zCi0gICAgZG91YmxlIGdh
aW4oRmxvYXRQb2ludDNEIHNvdXJjZVBvc2l0aW9uLCBGbG9hdFBvaW50M0Qgc291cmNlT3JpZW50
YXRpb24sIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKTsKKyAgICBkb3VibGUgZ2FpbihH
cmFwaGljc1BvaW50M0Qgc291cmNlUG9zaXRpb24sIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VPcmll
bnRhdGlvbiwgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24pOwogCiAgICAgLy8gQW5n
bGVzIGluIGRlZ3JlZXMKICAgICB2b2lkIHNldElubmVyQW5nbGUoZG91YmxlIGlubmVyQW5nbGUp
IHsgbV9pbm5lckFuZ2xlID0gaW5uZXJBbmdsZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3Jh
cGhpY3NQb2ludDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVB
cmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTcsNyArNTcsNyBAQAogICAgIC8vIFRoZSBiYXNl
IGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0ZWx5LCBuZXZlciBh
bmltYXRlcy4KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNv
bnN0IEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0KIApAQCAtNjgsNyArNjgsNyBA
QAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0
dXJlRXZlbnQmKTsKICNlbmRpZgogCi0gICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24oKSBj
b25zdDsKKyAgICBHcmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSB7IH0KIApAQCAtOTMsNyArOTMsNyBAQAog
ICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKIAogICAgIFNjcm9sbGFi
bGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOwotICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdl
IGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKKyAgICBmbG9hdCBt
X2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEdyYXBoaWNzUG9pbnQgaW4gb3JkZXIg
dG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3ViY2xhc3MgY29kZSBjb21w
bGV4aXR5LgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAKICAgICB9CiAgICAgCiAgICAgaWYgKHNy
Y1NpemUgPT0gb3JpZ2luYWxTaXplKQotICAgICAgICByZXR1cm4gcmVzaXplUmF0aW8gPiAwLjBm
ID8gc2NhbGVEcmFnSW1hZ2UoaW1hZ2UsIEZsb2F0U2l6ZShyZXNpemVSYXRpbywgcmVzaXplUmF0
aW8pKSA6IGltYWdlOworICAgICAgICByZXR1cm4gcmVzaXplUmF0aW8gPiAwLjBmID8gc2NhbGVE
cmFnSW1hZ2UoaW1hZ2UsIEdyYXBoaWNzU2l6ZShyZXNpemVSYXRpbywgcmVzaXplUmF0aW8pKSA6
IGltYWdlOwogICAgIAogICAgIC8vIFRoZSBpbWFnZSB3YXMgc2NhbGVkIGluIHRoZSB3ZWJwYWdl
IHNvIGF0IG1pbmltdW0gd2UgbXVzdCBhY2NvdW50IGZvciB0aGF0IHNjYWxpbmcKICAgICBmbG9h
dCBzY2FsZXggPSBzcmNTaXplLndpZHRoKCkgLyAoZmxvYXQpb3JpZ2luYWxTaXplLndpZHRoKCk7
CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHNjYWxleSAqPSByZXNpemVSYXRpbzsKICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIHNjYWxlRHJhZ0ltYWdlKGltYWdlLCBGbG9hdFNpemUoc2NhbGV4
LCBzY2FsZXkpKTsKKyAgICByZXR1cm4gc2NhbGVEcmFnSW1hZ2UoaW1hZ2UsIEdyYXBoaWNzU2l6
ZShzY2FsZXgsIHNjYWxleSkpOwogfQogICAgIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDcgKzI2OSw3IEBACiAgICAgICAg
IGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBkZWx0YSA9IHBvcyAtIG1fZG9j
dW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1lbnQgPSB0cnVlOwotICAgICAg
ICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBHcmFwaGljc1BvaW50IGN1cnJl
bnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQ
b3NpdGlvbigpOwogICAgICAgICBpbnQgZGVzdGluYXRpb25Qb3NpdGlvbiA9IChtX29yaWVudGF0
aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBjdXJyZW50UG9zaXRpb24ueCgpIDogY3VycmVu
dFBvc2l0aW9uLnkoKSkgKyBkZWx0YTsKICAgICAgICAgaWYgKGRlbHRhID4gMCkKICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uUG9zaXRpb24gPSBtaW4oZGVzdGluYXRpb25Qb3NpdGlvbiArIGRlbHRh
LCBtYXhpbXVtKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3Jl
ZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVl
bi5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
U2NyZWVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGxhdGZv
cm1TY3JlZW5faAogI2RlZmluZSBQbGF0Zm9ybVNjcmVlbl9oCiAKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMjEgKzQyLDIxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGlj
c1JlY3Q7CiAgICAgY2xhc3MgV2lkZ2V0OwogCiAgICAgaW50IHNjcmVlbkRlcHRoKFdpZGdldCop
OwogICAgIGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKTsKICAgICBib29sIHNj
cmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKTsKIAotICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdp
ZGdldCopOwotICAgIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopOworICAg
IEdyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOworICAgIEdyYXBoaWNzUmVjdCBzY3Jl
ZW5BdmFpbGFibGVSZWN0KFdpZGdldCopOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TU2Ny
ZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKik7CiAKLSAgICBGbG9hdFJlY3QgdG9Vc2Vy
U3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKLSAgICBOU1JlY3Qg
dG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKKyAgICBH
cmFwaGljc1JlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0
aW9uKTsKKyAgICBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3QmLCBOU1dp
bmRvdyAqc291cmNlKTsKIAogICAgIE5TUG9pbnQgZmxpcFNjcmVlblBvaW50KGNvbnN0IE5TUG9p
bnQmLCBOU1NjcmVlbiAqKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDgg
KzYwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRmxvYXRQb2ludDsK
LSAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2ludDsKKyAgICBjbGFz
cyBHcmFwaGljc1NpemU7CiAKICAgICAvLyBXaGVlbCBldmVudHMgY29tZSBpbiB0d28gZmxhdm9y
czoKICAgICAvLyBUaGUgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQgaXMgYSBmaW5lLWdyYWluZWQg
ZXZlbnQgdGhhdCBzcGVjaWZpZXMgdGhlIHByZWNpc2UgbnVtYmVyIG9mIHBpeGVscyB0byBzY3Jv
bGwuICBJdCBpcyBzZW50IGRpcmVjdGx5IGJ5IE1hY0Jvb2sgdG91Y2hwYWRzIG9uIE9TIFgsCkBA
IC0xODksNyArMTg5LDcgQEAKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwotICAg
ICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYXRpb24pOworICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdO
RCwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0YSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbG9jYXRp
b24pOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
CiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oIgogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlMaXN0Qm94LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgpA
QCAtNjg2LDcgKzY4Niw3IEBACiAgICAgQVNTRVJUKG1fcmVuZGVyZXIpOwogICAgIEludFJlY3Qg
Y29udGVudFJlY3QgPSBtX3JlbmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsK
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3JlbmRlcmVyLT5mcmFtZSgpLT52aWV3KCk7Ci0gICAg
RmxvYXRSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgR3Jh
cGhpY3NSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgdmll
d1JlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKICAgICByZXR1cm4gdmlld1JlY3QuaXNFbXB0
eSgpOwogfQpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKICAgICAKICAgICAvLyBhYnNvbHV0ZUZvY3Vz
UmluZ1F1YWRzIHdpbGwgcXVlcnkgdGhlIGhpZXJhcmNoeSBiZWxvdyB0aGlzIGVsZW1lbnQsIHdo
aWNoIGZvciBsYXJnZSB3ZWJwYWdlcyBjYW4gYmUgdmVyeSBzbG93LgogICAgIC8vIEZvciBhIHdl
YiBhcmVhLCB3aGljaCB3aWxsIGhhdmUgdGhlIG1vc3QgZWxlbWVudHMgb2YgYW55IGVsZW1lbnQs
IGFic29sdXRlUXVhZHMgc2hvdWxkIGJlIHVzZWQuCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVh
ZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgaWYgKG9iai0+aXNUZXh0
KCkpCiAgICAgICAgIHRvUmVuZGVyVGV4dChvYmopLT5hYnNvbHV0ZVF1YWRzKHF1YWRzLCBSZW5k
ZXJUZXh0OjpDbGlwVG9FbGxpcHNpcyk7CiAgICAgZWxzZSBpZiAoaXNXZWJBcmVhKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBACiAgICAgJHR5cGUgPX4gcy9TVkdBbmltYXRl
ZC8vOwogCiAgICAgaWYgKCR0eXBlIGVxICJQb2ludCIgb3IgJHR5cGUgZXEgIlJlY3QiKSB7Ci0g
ICAgICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0JHR5cGUuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJ
bmNsdWRlc3siR3JhcGhpY3MkdHlwZS5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCR0eXBlIGVxICJT
dHJpbmciKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlBsYXRmb3JtU3RyaW5nLmgifSA9IDE7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3
ICsyMTMsNyBAQAogICAgIH0KIAogICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7Ci0gICAgICAg
ICRzdmdQcm9wZXJ0eVR5cGUgPSAiU1ZHUG9pbnQiIGlmICRzdmdQcm9wZXJ0eVR5cGUgZXEgIkZs
b2F0UG9pbnQiOworICAgICAgICAkc3ZnUHJvcGVydHlUeXBlID0gIlNWR1BvaW50IiBpZiAkc3Zn
UHJvcGVydHlUeXBlIGVxICJHcmFwaGljc1BvaW50IjsKICAgICB9CiAKICAgICByZXR1cm4gKCRz
dmdQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlLCAkc3ZnTmF0aXZlVHlwZSk7CkBA
IC0yNzUsNyArMjc1LDcgQEAKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnRl
bXBsYXRlPHR5cGVuYW1lIFByb3BlcnR5VHlwZT4gY2xhc3MgU1ZHTGlzdFByb3BlcnR5VGVhck9m
ZjtcbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNs
YXNzIEZsb2F0UmVjdDtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGUgJiYgJHN2Z1Byb3BlcnR5VHlw
ZSBlcSAiRmxvYXRSZWN0IjsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyBHcmFw
aGljc1JlY3Q7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQcm9wZXJ0eVR5cGUgZXEg
IkdyYXBoaWNzUmVjdCI7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNsYXNz
TmFtZSB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3Iu
cG0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAi
U1ZHTnVtYmVyIiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPGZsb2F0PiIsCiAgICAgIlNWR051bWJl
ckxpc3QiID0+ICJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR051bWJlckxpc3Q+IiwKICAgICAi
U1ZHUGF0aFNlZ0xpc3QiID0+ICJTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiIsCi0gICAg
IlNWR1BvaW50IiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+IiwKKyAgICAiU1ZH
UG9pbnQiID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8R3JhcGhpY3NQb2ludD4iLAogICAgICJTVkdQ
b2ludExpc3QiID0+ICJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4iLAogICAg
ICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8+IiwKLSAgICAiU1ZHUmVjdCIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxG
bG9hdFJlY3Q+IiwKKyAgICAiU1ZHUmVjdCIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxHcmFwaGlj
c1JlY3Q+IiwKICAgICAiU1ZHU3RyaW5nTGlzdCIgPT4gIlNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRl
YXJPZmY8U1ZHU3RyaW5nTGlzdD4iLAogICAgICJTVkdUcmFuc2Zvcm0iID0+ICJTVkdQcm9wZXJ0
eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPiIsCiAgICAgIlNWR1RyYW5zZm9ybUxpc3QiID0+ICJTVkdU
cmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmIgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3cG9y
dEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmlld3Bv
cnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxl
VXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdy
YXBoaWNzUmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRl
KSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRhdGVT
dHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0
ZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAj
aW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTE1Niw5ICsxNTYsOSBAQAogICAgIHJldHVybiBhc3BlY3RSYXRp
bzsKIH0KIAotdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjp0cmFuc2Zvcm1SZWN0KEZsb2F0
UmVjdCYgZGVzdFJlY3QsIEZsb2F0UmVjdCYgc3JjUmVjdCkKK3ZvaWQgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbzo6dHJhbnNmb3JtUmVjdChHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBHcmFwaGljc1Jl
Y3QmIHNyY1JlY3QpCiB7Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IHNyY1JlY3Quc2l6ZSgp
OworICAgIEdyYXBoaWNzU2l6ZSBpbWFnZVNpemUgPSBzcmNSZWN0LnNpemUoKTsKICAgICBmbG9h
dCBvcmlnRGVzdFdpZHRoID0gZGVzdFJlY3Qud2lkdGgoKTsKICAgICBmbG9hdCBvcmlnRGVzdEhl
aWdodCA9IGRlc3RSZWN0LmhlaWdodCgpOwogICAgIHN3aXRjaCAobV9tZWV0T3JTbGljZSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICAgICByZXR1cm4gbV9zdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6Om1vdmVU
byhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2Rl
IG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAg
IGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIk0gJS42bGcgJS42bGcgIiwgdGFyZ2V0UG9pbnQueCgp
LCB0YXJnZXRQb2ludC55KCkpKTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgibSAlLjZsZyAlLjZsZyAiLCB0YXJnZXRQb2lu
dC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVy
OjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9k
ZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGluZVRvKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBpZiAo
bW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKFN0cmluZzo6Zm9ybWF0KCJMICUuNmxnICUuNmxnICIsIHRhcmdldFBvaW50LngoKSwgdGFy
Z2V0UG9pbnQueSgpKSk7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInYgJS42bGcgIiwgeSkpOwogfQogCi12b2lkIFNWR1Bh
dGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZl
VG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIkMgJS42bGcgJS42bGcg
JS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9pbnQy
LngoKSwgcG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKQEAg
LTc1LDcgKzc1LDcgQEAKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgiYyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgp
LCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54KCksIHRh
cmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRv
Q3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdC
dWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBj
b25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUp
CiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiUyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZs
ZyAiLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSkpOwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KFN0cmluZzo6Zm9ybWF0KCJzICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBvaW50Mi54KCks
IHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CiB9CiAKLXZv
aWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVN
b2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3Jt
YXQoIlEgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwg
dGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKQEAgLTkxLDcgKzkxLDcgQEAKICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgicSAlLjZsZyAlLjZs
ZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCB0YXJnZXRQb2ludC54KCks
IHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2
ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29v
cmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9RdWFk
cmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGlu
YXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlQgJS42bGcgJS42
bGcgIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKQEAgLTk5LDcgKzk5LDcg
QEAKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgidCAlLjZs
ZyAlLjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lk
IFNWR1BhdGhTdHJpbmdCdWlsZGVyOjphcmNUbyhmbG9hdCByMSwgZmxvYXQgcjIsIGZsb2F0IGFu
Z2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmlu
Z0J1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wgbGFy
Z2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3Jt
YXQoIkEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGcgIiwgcjEsIHIyLCBhbmds
ZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgU1ZHUG9pbnRM
aXN0OwogCiBib29sIHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciog
ZW5kLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsKIGJvb2wgcGFyc2VOdW1iZXJG
cm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRydWUp
OwogYm9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cmluZyYgcywgZmxvYXQm
IGgsIGZsb2F0JiB2KTsKIGJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25z
dCBVQ2hhciogZW5kLCBib29sJiBmbGFnKTsKLWJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYs
IEZsb2F0UmVjdCYpOworYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwgR3JhcGhpY3NSZWN0
Jik7CiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQgd2hpdGVzcGFjZSBjaGFyYWN0
ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhdGhzLmh0bWwjUGF0aERhdGFCTkYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogICAgIGlmICh0aGlzLT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQogICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hl
aWdodCh0cnVlKTsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCQm94OworICAgIEdyYXBoaWNzUmVj
dCBlZmZlY3RCQm94OwogICAgIGlmIChwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpCi0gICAgICAg
IGVmZmVjdEJCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCksCisgICAgICAg
IGVmZmVjdEJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQZXJjZW50YWdlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlQXNQZXJjZW50YWdl
KCkpOwogICAgIGVsc2UKLSAgICAgICAgZWZmZWN0QkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWUo
dGhpcyksCisgICAgICAgIGVmZmVjdEJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw3ICs1NSw3IEBACiAgICAgYm9vbCBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5dGVTdHJl
YW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBTVkdQYXRoQnl0ZVN0cmVhbSosIE93blB0cjxTVkdQYXRo
Qnl0ZVN0cmVhbT4mLCBmbG9hdCk7CiAgICAgYm9vbCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9t
U1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCBsZW5ndGgsIHVuc2ln
bmVkIGxvbmcmIHBhdGhTZWcpOwogICAgIGJvb2wgZ2V0VG90YWxMZW5ndGhPZlNWR1BhdGhCeXRl
U3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwgZmxvYXQmIHRvdGFsTGVuZ3RoKTsKLSAgICBib29s
IGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwg
ZmxvYXQgbGVuZ3RoLCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBnZXRQb2ludEF0TGVuZ3RoT2ZT
VkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGZsb2F0IGxlbmd0aCwgR3JhcGhp
Y3NQb2ludCYpOwogCiBwcml2YXRlOgogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29udGVudFN0eWxlVHlwZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Q29udGVudFN0eWxlVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOwog
Ci0gICAgRmxvYXRSZWN0IHZpZXdwb3J0KCkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdw
b3J0KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYg
Y29udGFpbmVyU2l6ZSkgeyBtX2NvbnRhaW5lclNpemUgPSBjb250YWluZXJTaXplOyBtX2hhc1Nl
dENvbnRhaW5lclNpemUgPSB0cnVlOyB9CiAgICAgSW50U2l6ZSBjb250YWluZXJTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9jb250YWluZXJTaXplOyB9CkBAIC03OCwxMyArNzgsMTMgQEAKICAgICB2
b2lkIHNldFVzZUN1cnJlbnRWaWV3KGJvb2wgY3VycmVudFZpZXcpOwogCiAgICAgU1ZHVmlld1Nw
ZWMqIGN1cnJlbnRWaWV3KCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGN1cnJlbnRWaWV3Qm94UmVj
dCgpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBjdXJyZW50Vmlld0JveFJlY3QoKSBjb25zdDsK
IAogICAgIGZsb2F0IGN1cnJlbnRTY2FsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q3VycmVudFNj
YWxlKGZsb2F0IHNjYWxlKTsKIAotICAgIEZsb2F0UG9pbnQmIGN1cnJlbnRUcmFuc2xhdGUoKSB7
IHJldHVybiBtX3RyYW5zbGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VHJhbnNsYXRlKGNv
bnN0IEZsb2F0UG9pbnQmKTsKKyAgICBHcmFwaGljc1BvaW50JiBjdXJyZW50VHJhbnNsYXRlKCkg
eyByZXR1cm4gbV90cmFuc2xhdGlvbjsgfQorICAgIHZvaWQgc2V0Q3VycmVudFRyYW5zbGF0ZShj
b25zdCBHcmFwaGljc1BvaW50Jik7CiAKICAgICAvLyBPbmx5IHVzZWQgZnJvbSB0aGUgYmluZGlu
Z3MuCiAgICAgdm9pZCB1cGRhdGVDdXJyZW50VHJhbnNsYXRlKCk7CkBAIC0xMDMsMTggKzEwMywx
OCBAQAogICAgIHZvaWQgdW5zdXNwZW5kUmVkcmF3QWxsKCk7CiAgICAgdm9pZCBmb3JjZVJlZHJh
dygpOwogCi0gICAgTm9kZUxpc3QqIGdldEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0
JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7Ci0gICAgTm9kZUxpc3QqIGdldEVuY2xv
c3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7
Ci0gICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgYm9vbCBjaGVja0VuY2xvc3VyZShTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgTm9kZUxpc3QqIGdldEludGVyc2VjdGlvbkxpc3QoY29uc3QgR3JhcGhpY3NSZWN0
JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7CisgICAgTm9kZUxpc3QqIGdldEVuY2xv
c3VyZUxpc3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVu
dCk7CisgICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50KiwgY29uc3QgR3JhcGhp
Y3NSZWN0Jik7CisgICAgYm9vbCBjaGVja0VuY2xvc3VyZShTVkdFbGVtZW50KiwgY29uc3QgR3Jh
cGhpY3NSZWN0Jik7CiAgICAgdm9pZCBkZXNlbGVjdEFsbCgpOwogCiAgICAgc3RhdGljIGZsb2F0
IGNyZWF0ZVNWR051bWJlcigpOwogICAgIHN0YXRpYyBTVkdMZW5ndGggY3JlYXRlU1ZHTGVuZ3Ro
KCk7CiAgICAgc3RhdGljIFNWR0FuZ2xlIGNyZWF0ZVNWR0FuZ2xlKCk7Ci0gICAgc3RhdGljIEZs
b2F0UG9pbnQgY3JlYXRlU1ZHUG9pbnQoKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NQb2ludCBjcmVh
dGVTVkdQb2ludCgpOwogICAgIHN0YXRpYyBTVkdNYXRyaXggY3JlYXRlU1ZHTWF0cml4KCk7Ci0g
ICAgc3RhdGljIEZsb2F0UmVjdCBjcmVhdGVTVkdSZWN0KCk7CisgICAgc3RhdGljIEdyYXBoaWNz
UmVjdCBjcmVhdGVTVkdSZWN0KCk7CiAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdU
cmFuc2Zvcm0oKTsKICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtIGNyZWF0ZVNWR1RyYW5zZm9ybUZy
b21NYXRyaXgoY29uc3QgU1ZHTWF0cml4Jik7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAgICAg
Ym9vbCBtX3VzZUN1cnJlbnRWaWV3OwogICAgIFJlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gbV90
aW1lQ29udGFpbmVyOwotICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGlvbjsKKyAgICBHcmFwaGlj
c1BvaW50IG1fdHJhbnNsYXRpb247CiAgICAgbXV0YWJsZSBPd25QdHI8U1ZHVmlld1NwZWM+IG1f
dmlld1NwZWM7CiAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgYm9vbCBtX2hhc1Nl
dENvbnRhaW5lclNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNh
bFN0YXRlQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNyBAQAogI2RlZmluZSBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyX2gKIAog
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKICNpbmNsdWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlICJT
VkdQYXRoQ29uc3VtZXIuaCIKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgdW5zaWduZWQgbG9u
ZyBwYXRoU2VnbWVudEluZGV4KCk7CiAgICAgZmxvYXQgdG90YWxMZW5ndGgoKTsKLSAgICBGbG9h
dFBvaW50IGN1cnJlbnRQb2ludCgpOworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50KCk7
CiAKICAgICB2b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGUq
IHRyYXZlcnNhbFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0cmF2ZXJzYWxTdGF0ZTsgfQog
ICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0aChmbG9hdCk7CkBAIC00NCwxOSArNDQsMTkgQEAKIAog
cHJpdmF0ZToKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNp
bmcgbW9kZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9v
bCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVUbyhj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIG1vdmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7
CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOwogCiBwcml2YXRl
OgogICAgIC8vIE5vdCB1c2VkIGZvciBQYXRoVHJhdmVyc2FsU3RhdGUuCiAgICAgdmlydHVhbCB2
b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwg
UGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2lu
dCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0
aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQs
IGZsb2F0LCBib29sLCBib29sLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUq
IG1fdHJhdmVyc2FsU3RhdGU7CiAgICAgZmxvYXQgbV9kZXNpcmVkTGVuZ3RoOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
QWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0Owog
CiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHsKIHB1YmxpYzoKQEAgLTYwLDcgKzYwLDcg
QEAKICAgICB2b2lkIHNldE1lZXRPclNsaWNlKHVuc2lnbmVkIHNob3J0LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdW5zaWduZWQgc2hvcnQgbWVldE9yU2xpY2UoKSBjb25zdCB7IHJldHVybiBtX21l
ZXRPclNsaWNlOyB9CiAKLSAgICB2b2lkIHRyYW5zZm9ybVJlY3QoRmxvYXRSZWN0JiBkZXN0UmVj
dCwgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKyAgICB2b2lkIHRyYW5zZm9ybVJlY3QoR3JhcGhpY3NS
ZWN0JiBkZXN0UmVjdCwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsKIAogICAgIEFmZmluZVRyYW5z
Zm9ybSBnZXRDVE0oZmxvYXQgbG9naWNYLCBmbG9hdCBsb2dpY1ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBsb2dpY1dpZHRoLCBmbG9hdCBsb2dpY0hlaWdodCwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhTdHJpbmdCdWlsZGVyX2gKIAog
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTM3LDE4ICszNywxOCBAQAogICAgIHZpcnR1YWwg
Ym9vbCBjb250aW51ZUNvbnN1bWluZygpIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIFVzZWQg
aW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFs
IHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGlu
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAgICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVk
UGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9h
dCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21v
b3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJv
b2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25z
dCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZs
b2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1
aWxkZXI7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE2ICsyMSwx
NiBAQAogI2RlZmluZSBTVkdSZWN0X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUHJvcGVy
dHlUcmFpdHMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEZs
b2F0UmVjdD4gewotICAgIHN0YXRpYyBGbG9hdFJlY3QgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KLSAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEZsb2F0UmVj
dCYgdHlwZSkKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxHcmFwaGljc1JlY3Q+IHsKKyAgICBz
dGF0aWMgR3JhcGhpY3NSZWN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OyB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBHcmFwaGljc1JlY3QmIHR5cGUp
CiAgICAgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKFN0cmluZzo6bnVtYmVyKHR5cGUueCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQAogCiBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBTVkdGRVBvaW50
TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFBvaW50TGln
aHRTb3VyY2U6OmNyZWF0ZShGbG9hdFBvaW50M0QoeCgpLCB5KCksIHooKSkpOworICAgIHJldHVy
biBQb2ludExpZ2h0U291cmNlOjpjcmVhdGUoR3JhcGhpY3NQb2ludDNEKHgoKSwgeSgpLCB6KCkp
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDggQEAKICNk
ZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlNWR1BhdGhCeXRlU3RyZWFtLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aENvbnN1bWVyLmgiCkBA
IC00MSwxOCArNDIsMTggQEAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHsgbV9ieXRlU3Ry
ZWFtID0gMDsgfQogCiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nL05vcm1hbGl6ZWRQ
YXJzaW5nIG1vZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYs
IGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBsaW5l
VG8oY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBt
b3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1v
ZGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFw
aGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKIAogICAg
IC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2b2lk
IGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVh
bCB2b2lkIGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZp
cnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRv
UXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25z
dCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXJj
VG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFn
LCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGlj
c1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1
YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgo
Y29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3
ZWVwRmxhZywgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlVHlwZT4KICAgICB2b2lkIHdyaXRlVHlwZShjb25zdCBC
eXRlVHlwZSYgdHlwZSkKQEAgLTc2LDEwICs3NywxMCBAQAogICAgICAgICB3cml0ZVR5cGUoZGF0
YSk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZUZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCisgICAgdm9pZCB3cml0ZUdyYXBoaWNzUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQpCiAgICAgewotICAgICAgICB3cml0ZUZsb2F0KHBvaW50LngoKSk7Ci0gICAgICAgIHdy
aXRlRmxvYXQocG9pbnQueSgpKTsKKyAgICAgICAgd3JpdGVGbG9hdChuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHBvaW50LngoKSkpOworICAgICAgICB3cml0ZUZsb2F0KG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQocG9pbnQueSgpKSk7CiAgICAgfQogCiAgICAgdm9pZCB3cml0ZVNlZ21lbnRUeXBlKHVu
c2lnbmVkIHNob3J0IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTVkdNYXNrRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCi0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgbWFza0JvdW5kaW5nQm94KGNvbnN0IEdyYXBoaWNz
UmVjdCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
eXRlU3RyZWFtU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDE1ICs0OCwxNSBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVh
ZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpw
YXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHRhcmdl
dFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9T
ZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewotICAgIHRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcyLDQyICs3Miw0MiBAQAogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2
ZVRvQ3ViaWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgcG9p
bnQyLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxv
YXRQb2ludCgpOwotICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9p
bnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHBvaW50MSA9IHJlYWRHcmFwaGljc1BvaW50KCk7
CisgICAgcG9pbnQyID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJl
YWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBv
aW50MiwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZs
b2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcG9p
bnQyID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGlj
c1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGlj
c1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwot
ICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBwb2ludDEgPSByZWFkR3Jh
cGhpY3NQb2ludCgpOworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VD
dXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jv
b2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSBy
ZWFkRmxvYXRQb2ludCgpOworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYg
bGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQm
IHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgcnggPSByZWFkRmxvYXQoKTsKICAgICByeSA9IHJl
YWRGbG9hdCgpOwogICAgIGFuZ2xlID0gcmVhZEZsb2F0KCk7CiAgICAgbGFyZ2VBcmMgPSByZWFk
RmxhZygpOwogICAgIHN3ZWVwID0gcmVhZEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRG
bG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkR3JhcGhpY3NQb2ludCgpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVk
ZSAiU1ZHUG9pbnRMaXN0LmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzgsNyArMzgsNyBAQAogICAgICAg
ICBpZiAoaSA+IDApCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICIpOyAvLyBGSVhNRTog
U2hvdWxkbid0IHdlIHVzZSBjb21tYXMgdG8gc2VwZXJhdGU/CiAKLSAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQgPSBhdChpKTsKKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQgPSBhdChpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIocG9pbnQu
eCgpKSArICcgJyArIFN0cmluZzo6bnVtYmVyKHBvaW50LnkoKSkpOwogICAgIH0KIApAQCAtNTYs
OSArNTYsOSBAQAogICAgIGlmICghaXRlbUNvdW50IHx8IGl0ZW1Db3VudCAhPSB0b0xpc3Quc2l6
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IGl0ZW1Db3VudDsgKytuKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGZyb20gPSBmcm9t
TGlzdC5hdChuKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdG8gPSB0b0xpc3QuYXQobik7
Ci0gICAgICAgIEZsb2F0UG9pbnQgc2VnbWVudCA9IEZsb2F0UG9pbnQoYWRqdXN0QW5pbWF0ZWRW
YWx1ZShmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCisgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGZyb20gPSBmcm9tTGlzdC5hdChuKTsKKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgdG8gPSB0b0xpc3QuYXQobik7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgc2VnbWVudCA9IEdy
YXBoaWNzUG9pbnQoYWRqdXN0QW5pbWF0ZWRWYWx1ZShmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVz
cyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0QW5pbWF0
ZWRWYWx1ZShmcm9tLnkoKSwgdG8ueSgpLCBwcm9ncmVzcykpOwogICAgICAgICByZXN1bHRMaXN0
LmFwcGVuZChzZWdtZW50KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkBAIC0zNSwxNCArMzUsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94
KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgcywgRmxvYXRSZWN0JiB2aWV3Qm94KQorYm9v
bCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJp
bmcmIHMsIEdyYXBoaWNzUmVjdCYgdmlld0JveCkKIHsKICAgICBjb25zdCBVQ2hhciogYyA9IHMu
Y2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjICsgcy5sZW5ndGgoKTsKICAg
ICByZXR1cm4gcGFyc2VWaWV3Qm94KGRvYywgYywgZW5kLCB2aWV3Qm94LCB0cnVlKTsKIH0KIAot
Ym9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1bWVudCogZG9jLCBjb25zdCBV
Q2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UmVjdCYgdmlld0JveCwgYm9vbCB2YWxp
ZGF0ZSkKK2Jvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goRG9jdW1lbnQqIGRvYywg
Y29uc3QgVUNoYXIqJiBjLCBjb25zdCBVQ2hhciogZW5kLCBHcmFwaGljc1JlY3QmIHZpZXdCb3gs
IGJvb2wgdmFsaWRhdGUpCiB7CiAgICAgU3RyaW5nIHN0cihjLCBlbmQgLSBjKTsKIApAQCAtNTQs
NyArNTQsNyBAQAogICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7CiAgICAgYm9vbCB2YWxpZCA9IHBh
cnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCB5KSAmJiBwYXJzZU51
bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIGhlaWdodCwgZmFsc2Up
OwogICAgIGlmICghdmFsaWRhdGUpIHsKLSAgICAgICAgdmlld0JveCA9IEZsb2F0UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgdmlld0JveCA9IEdyYXBoaWNzUmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICghdmFs
aWQpIHsKQEAgLTc2LDExICs3NiwxMSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgdmlld0JveCA9IEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB2aWV3
Qm94ID0gR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJh
bnNmb3JtKGNvbnN0IEZsb2F0UmVjdCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8sIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmll
d0hlaWdodCkKK0FmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdU
cmFuc2Zvcm0oY29uc3QgR3JhcGhpY3NSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbywgZmxvYXQgdmlld1dpZHRoLCBmbG9h
dCB2aWV3SGVpZ2h0KQogewogICAgIGlmICghdmlld0JveFJlY3Qud2lkdGgoKSB8fCAhdmlld0Jv
eFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTkx
LDcgKzkxLDcgQEAKIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShE
b2N1bWVudCogZG9jdW1lbnQsIEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAgICAgICBGbG9hdFJlY3Qgdmlld0Jv
eDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHZpZXdCb3g7CiAgICAgICAgIGlmICghYXR0ci0+dmFs
dWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIHBhcnNlVmlld0JveChkb2N1bWVudCwgYXR0ci0+
dmFsdWUoKSwgdmlld0JveCk7CiAgICAgICAgIHNldFZpZXdCb3hCYXNlVmFsdWUodmlld0JveCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcg
KzEzNSw3IEBACiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmZhcnRoZXN0Vmlld3BvcnRF
bGVtZW50KHRoaXMpOwogfQogCi1GbG9hdFJlY3QgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25z
dAorR3JhcGhpY3NSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRCQm94KFN0
eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKIHsKICAgICByZXR1
cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0QkJveCh0aGlzLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTEsMTYgKzIxMSwxNiBAQAogICAgICAgICBvYmplY3QtPnNldE5lZWRz
TGF5b3V0KHRydWUpOwogfQogCi1GbG9hdFJlY3QgU1ZHRmlsdGVyRWxlbWVudDo6ZmlsdGVyQm91
bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkgY29uc3QKK0dyYXBo
aWNzUmVjdCBTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGluZ0JveChjb25zdCBHcmFwaGlj
c1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBmaWx0ZXJC
Qm94OworICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJCQm94OwogICAgIGlmIChmaWx0ZXJVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKLSAgICAg
ICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVj
dEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAgICAgIGZp
bHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RC
b3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRp
bmdCb3guaGVpZ2h0KCkgKyBvYmplY3RCb3VuZGluZ0JveC55KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRp
bmdCb3gud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52
YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIGVs
c2UKLSAgICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWUodGhpcyksCisgICAg
ICAgIGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5j
bHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNjAsOCArMTYwLDggQEAKIHsKICAgICBBU1NF
UlQocGF0aC5pc0VtcHR5KCkpOwogCi0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4MSgpLnZh
bHVlKHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQ
b2ludCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5tb3Zl
VG8oR3JhcGhpY3NQb2ludCh4MSgpLnZhbHVlKHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7Cisg
ICAgcGF0aC5hZGRMaW5lVG8oR3JhcGhpY3NQb2ludCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZh
bHVlKHRoaXMpKSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxl
bmd0aHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE4ICsz
NCwxOCBAQAogewogfQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bW92ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAg
IEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzID8gIFBhdGhTZWdNb3ZlVG9SZWwgOiBQYXRoU2VnTW92ZVRvQWJzKTsK
LSAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhpY3NQb2lu
dCh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5l
VG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2Rl
KQordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJU
KG1fYnl0ZVN0cmVhbSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29v
cmRpbmF0ZXMgPyBQYXRoU2VnTGluZVRvUmVsIDogUGF0aFNlZ0xpbmVUb0Ficyk7Ci0gICAgd3Jp
dGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0
UG9pbnQpOwogfQogCiB2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvSG9yaXpv
bnRhbChmbG9hdCB4LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKQEAgLTYyLDM5ICs2MiwzOSBA
QAogICAgIHdyaXRlRmxvYXQoeSk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
OjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
IHsKICAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwgOiBQYXRoU2Vn
Q3VydmVUb0N1YmljQWJzKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQxKTsKLSAgICB3cml0
ZUZsb2F0UG9pbnQocG9pbnQyKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOwor
ICAgIHdyaXRlR3JhcGhpY3NQb2ludChwb2ludDEpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludChw
b2ludDIpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludCh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQg
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5h
dGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1Ymlj
U21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYg
dGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5
dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzID8gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCA6IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNT
bW9vdGhBYnMpOwotICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDIpOwotICAgIHdyaXRlRmxvYXRQ
b2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50Mik7CisgICAg
d3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2
b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRo
Q29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKICAgICB3
cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2
ZVRvUXVhZHJhdGljUmVsIDogUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMpOwotICAgIHdyaXRl
RmxvYXRQb2ludChwb2ludDEpOwotICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7Cisg
ICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50MSk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRh
cmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGlu
YXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFk
cmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGlu
YXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2Vn
bWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFk
cmF0aWNTbW9vdGhSZWwgOiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyk7Ci0gICAg
d3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFy
Z2V0UG9pbnQpOwogfQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8oZmxv
YXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dl
ZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2Rl
IG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZs
b2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBj
b25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUp
CiB7CiAgICAgQVNTRVJUKG1fYnl0ZVN0cmVhbSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZShtb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQXJjUmVsIDogUGF0aFNlZ0FyY0Ficyk7
CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICB3cml0ZUZsb2F0KGFuZ2xlKTsKICAgICB3cml0ZUZs
YWcobGFyZ2VBcmNGbGFnKTsKICAgICB3cml0ZUZsYWcoc3dlZXBGbGFnKTsKLSAgICB3cml0ZUZs
b2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludCh0YXJnZXRQb2lu
dCk7CiB9CiAKIHZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjbG9zZVBhdGgoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgog
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIK
QEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIGlmIChyYWRpdXNZIDw9IDApCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJh
ZGl1c1gsIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXNZLCByYWRpdXNYICogMiwgcmFkaXVzWSAq
IDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoR3JhcGhpY3NSZWN0KGN4KCkudmFsdWUodGhpcykg
LSByYWRpdXNYLCBjeSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzWSwgcmFkaXVzWCAqIDIsIHJhZGl1
c1kgKiAyKSk7CiB9CiAgCiBib29sIFNWR0VsbGlwc2VFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVM
ZW5ndGhzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAgICAgdm9pZCBjbGVhbnVwKCk7CiAKIHByaXZhdGU6
Ci0gICAgYm9vbCBkZWNvbXBvc2VBcmNUb0N1YmljKGZsb2F0LCBmbG9hdCwgZmxvYXQsIEZsb2F0
UG9pbnQmLCBGbG9hdFBvaW50JiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKTsK
KyAgICBib29sIGRlY29tcG9zZUFyY1RvQ3ViaWMoZmxvYXQsIGZsb2F0LCBmbG9hdCwgR3JhcGhp
Y3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZs
YWcpOwogICAgIHZvaWQgcGFyc2VDbG9zZVBhdGhTZWdtZW50KCk7CiAgICAgYm9vbCBwYXJzZU1v
dmVUb1NlZ21lbnQoKTsKICAgICBib29sIHBhcnNlTGluZVRvU2VnbWVudCgpOwpAQCAtNjIsOSAr
NjIsOSBAQAogICAgIFBhdGhQYXJzaW5nTW9kZSBtX3BhdGhQYXJzaW5nTW9kZTsKICAgICBTVkdQ
YXRoU2VnVHlwZSBtX2xhc3RDb21tYW5kOwogICAgIGJvb2wgbV9jbG9zZVBhdGg7Ci0gICAgRmxv
YXRQb2ludCBtX2NvbnRyb2xQb2ludDsKLSAgICBGbG9hdFBvaW50IG1fY3VycmVudFBvaW50Owot
ICAgIEZsb2F0UG9pbnQgbV9zdWJQYXRoUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2NvbnRy
b2xQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fY3VycmVudFBvaW50OworICAgIEdyYXBoaWNz
UG9pbnQgbV9zdWJQYXRoUG9pbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5j
cHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDEzICsyNTEsMTMgQEAKICAg
ICBpZiAoIXRvLmlzVmFsaWQoKSB8fCBmcm9tLnR5cGUoKSAhPSB0by50eXBlKCkpCiAgICAgICAg
IHJldHVybiAtMTsKICAgICBpZiAodG8udHlwZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9UUkFOU0xBVEUpIHsKLSAgICAgICAgRmxvYXRTaXplIGRpZmYgPSB0by50cmFuc2xhdGUo
KSAtIGZyb20udHJhbnNsYXRlKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBkaWZmID0gdG8udHJh
bnNsYXRlKCkgLSBmcm9tLnRyYW5zbGF0ZSgpOwogICAgICAgICByZXR1cm4gc3FydGYoZGlmZi53
aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwog
ICAgIH0KICAgICBpZiAodG8udHlwZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9S
T1RBVEUpCiAgICAgICAgIHJldHVybiBmYWJzZih0by5hbmdsZSgpIC0gZnJvbS5hbmdsZSgpKTsK
ICAgICBpZiAodG8udHlwZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRSkg
ewotICAgICAgICBGbG9hdFNpemUgZGlmZiA9IHRvLnNjYWxlKCkgLSBmcm9tLnNjYWxlKCk7Cisg
ICAgICAgIEdyYXBoaWNzU2l6ZSBkaWZmID0gdG8uc2NhbGUoKSAtIGZyb20uc2NhbGUoKTsKICAg
ICAgICAgcmV0dXJuIHNxcnRmKGRpZmYud2lkdGgoKSAqIGRpZmYud2lkdGgoKSArIGRpZmYuaGVp
Z2h0KCkgKiBkaWZmLmhlaWdodCgpKTsKICAgICB9CiAgICAgcmV0dXJuIC0xOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAK
IAogdm9pZCBTVkdWaWV3U3BlYzo6c2V0Vmlld0JveFN0cmluZyhjb25zdCBTdHJpbmcmIHZpZXdC
b3hTdHIpCiB7Ci0gICAgRmxvYXRSZWN0IHZpZXdCb3g7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdC
b3g7CiAgICAgY29uc3QgVUNoYXIqIGMgPSB2aWV3Qm94U3RyLmNoYXJhY3RlcnMoKTsKICAgICBj
b25zdCBVQ2hhciogZW5kID0gYyArIHZpZXdCb3hTdHIubGVuZ3RoKCk7CiAgICAgaWYgKCFwYXJz
ZVZpZXdCb3gobV9jb250ZXh0RWxlbWVudC0+ZG9jdW1lbnQoKSwgYywgZW5kLCB2aWV3Qm94LCBm
YWxzZSkpCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdT
cGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCB2aWV3Qm94OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB2
aWV3Qm94OwogICAgICAgICAgICAgICAgIGlmICghcGFyc2VWaWV3Qm94KG1fY29udGV4dEVsZW1l
bnQtPmRvY3VtZW50KCksIGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBzZXRWaWV3Qm94
QmFzZVZhbHVlKHZpZXdCb3gpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogCiBj
bGFzcyBTVkdMb2NhdGFibGUgewpAQCAtNDEsNyArNDEsNyBAQAogCiAgICAgZW51bSBTdHlsZVVw
ZGF0ZVN0cmF0ZWd5IHsgQWxsb3dTdHlsZVVwZGF0ZSwgRGlzYWxsb3dTdHlsZVVwZGF0ZSB9Owog
ICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVT
dHJhdGVneSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShT
dHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0ID0gMDsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gZ2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0VsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJiwgU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwpAQCAt
NTcsNyArNTcsNyBAQAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxv
Y2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0
IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGdl
dEJCb3goY29uc3QgU1ZHRWxlbWVudCosIFN0eWxlVXBkYXRlU3RyYXRlZ3kpOworICAgIHN0YXRp
YyBHcmFwaGljc1JlY3QgZ2V0QkJveChjb25zdCBTVkdFbGVtZW50KiwgU3R5bGVVcGRhdGVTdHJh
dGVneSk7CiAgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjb21wdXRlQ1RNKGNvbnN0IFNWR0Vs
ZW1lbnQqLCBDVE1TY29wZSwgU3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1pvb21FdmVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdab29tRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2Rl
ZmluZSBTVkdab29tRXZlbnRfaAogI2lmIEVOQUJMRShTVkcpCiAKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJVSUV2ZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDE3ICszMywxNyBAQAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNWR1pvb21FdmVudD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1pv
b21FdmVudCk7IH0KIAogICAgIC8vICdTVkdab29tRXZlbnQnIGZ1bmN0aW9ucwotICAgIEZsb2F0
UmVjdCB6b29tUmVjdFNjcmVlbigpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCB6b29tUmVjdFNj
cmVlbigpIGNvbnN0OwogCiAgICAgZmxvYXQgcHJldmlvdXNTY2FsZSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0UHJldmlvdXNTY2FsZShmbG9hdCk7CiAKLSAgICBGbG9hdFBvaW50IHByZXZpb3VzVHJh
bnNsYXRlKCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBwcmV2aW91c1RyYW5zbGF0ZSgpIGNv
bnN0OwogCiAgICAgZmxvYXQgbmV3U2NhbGUoKSBjb25zdDsKICAgICB2b2lkIHNldE5ld1NjYWxl
KGZsb2F0KTsKIAotICAgIEZsb2F0UG9pbnQgbmV3VHJhbnNsYXRlKCkgY29uc3Q7CisgICAgR3Jh
cGhpY3NQb2ludCBuZXdUcmFuc2xhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdab29t
RXZlbnQoKTsKQEAgLTUzLDEwICs1MywxMCBAQAogICAgIGZsb2F0IG1fbmV3U2NhbGU7CiAgICAg
ZmxvYXQgbV9wcmV2aW91c1NjYWxlOwogCi0gICAgRmxvYXRSZWN0IG1fem9vbVJlY3RTY3JlZW47
CisgICAgR3JhcGhpY3NSZWN0IG1fem9vbVJlY3RTY3JlZW47CiAKLSAgICBGbG9hdFBvaW50IG1f
bmV3VHJhbnNsYXRlOwotICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91c1RyYW5zbGF0ZTsKKyAgICBH
cmFwaGljc1BvaW50IG1fbmV3VHJhbnNsYXRlOworICAgIEdyYXBoaWNzUG9pbnQgbV9wcmV2aW91
c1RyYW5zbGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFJlY3RBbmlt
YXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBP
d25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNy
ZWF0ZVJlY3QobmV3IEZsb2F0UmVjdCk7CisgICAgT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gYW5p
bWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVSZWN0KG5ldyBHcmFwaGljc1JlY3Qp
OwogICAgIHBhcnNlUmVjdChzdHJpbmcsIGFuaW1hdGVkVHlwZS0+cmVjdCgpKTsKICAgICByZXR1
cm4gYW5pbWF0ZWRUeXBlLnJlbGVhc2UoKTsKIH0KQEAgLTY0LDE3ICs2NCwxNyBAQAogICAgIFNW
R0FuaW1hdGVFbGVtZW50KiBhbmltYXRpb25FbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0
ZUVsZW1lbnQqPihtX2FuaW1hdGlvbkVsZW1lbnQpOwogICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0
aW9uTW9kZSA9IGFuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKTsKICAgICAvLyBUbyBh
bmltYXRpb24gdXNlcyBjb250cmlidXRpb25zIGZyb20gdGhlIGxvd2VyIHByaW9yaXR5IGFuaW1h
dGlvbnMgYXMgdGhlIGJhc2UgdmFsdWUuCi0gICAgRmxvYXRSZWN0JiBhbmltYXRlZFJlY3QgPSBh
bmltYXRlZC0+cmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCYgYW5pbWF0ZWRSZWN0ID0gYW5pbWF0
ZWQtPnJlY3QoKTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAg
ICAgZnJvbS0+cmVjdCgpID0gYW5pbWF0ZWRSZWN0OwogICAgIAotICAgIGNvbnN0IEZsb2F0UmVj
dCYgZnJvbVJlY3QgPSBmcm9tLT5yZWN0KCk7Ci0gICAgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3Qg
PSB0by0+cmVjdCgpOwotICAgIEZsb2F0UmVjdCBuZXdSZWN0OyAgICAKKyAgICBjb25zdCBHcmFw
aGljc1JlY3QmIGZyb21SZWN0ID0gZnJvbS0+cmVjdCgpOworICAgIGNvbnN0IEdyYXBoaWNzUmVj
dCYgdG9SZWN0ID0gdG8tPnJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgbmV3UmVjdDsgICAgCiAg
ICAgaWYgKGFuaW1hdGlvbkVsZW1lbnQtPmNhbGNNb2RlKCkgPT0gQ2FsY01vZGVEaXNjcmV0ZSkK
ICAgICAgICAgbmV3UmVjdCA9IHBlcmNlbnRhZ2UgPCAwLjUgPyBmcm9tUmVjdCA6IHRvUmVjdDsK
ICAgICBlbHNlCi0gICAgICAgIG5ld1JlY3QgPSBGbG9hdFJlY3QoKHRvUmVjdC54KCkgLSBmcm9t
UmVjdC54KCkpICogcGVyY2VudGFnZSArIGZyb21SZWN0LngoKSwKKyAgICAgICAgbmV3UmVjdCA9
IEdyYXBoaWNzUmVjdCgodG9SZWN0LngoKSAtIGZyb21SZWN0LngoKSkgKiBwZXJjZW50YWdlICsg
ZnJvbVJlY3QueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b1JlY3QueSgpIC0g
ZnJvbVJlY3QueSgpKSAqIHBlcmNlbnRhZ2UgKyBmcm9tUmVjdC55KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHRvUmVjdC53aWR0aCgpIC0gZnJvbVJlY3Qud2lkdGgoKSkgKiBwZXJj
ZW50YWdlICsgZnJvbVJlY3Qud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dG9SZWN0LmhlaWdodCgpIC0gZnJvbVJlY3QuaGVpZ2h0KCkpICogcGVyY2VudGFnZSArIGZyb21S
ZWN0LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICBmbG9hdCB4VmFsdWUgPSB4
KCkudmFsdWUodGhpcyk7CiAgICAgZmxvYXQgeVZhbHVlID0geSgpLnZhbHVlKHRoaXMpOwogCi0g
ICAgRmxvYXRSZWN0IHJlY3QoeFZhbHVlLCB5VmFsdWUsIHdpZHRoVmFsdWUsIGhlaWdodFZhbHVl
KTsKKyAgICBHcmFwaGljc1JlY3QgcmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lkdGhWYWx1ZSwgaGVp
Z2h0VmFsdWUpOwogCiAgICAgYm9vbCBoYXNSeCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cnhB
dHRyKTsKICAgICBib29sIGhhc1J5ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeUF0dHIpOwpA
QCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgICAgICByeFZhbHVlID0gcnlWYWx1ZTsKICAgICAg
ICAgZWxzZSBpZiAoIWhhc1J5KQogICAgICAgICAgICAgcnlWYWx1ZSA9IHJ4VmFsdWU7Ci0gICAg
ICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJ4VmFsdWUsIHJ5VmFsdWUp
KTsKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBHcmFwaGljc1NpemUocnhWYWx1
ZSwgcnlWYWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIgKzIyLDEyIEBACiAjZGVmaW5l
IFNWR1RyYW5zZm9ybV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRTaXplOworY2xhc3MgR3JhcGhpY3NT
aXplOwogCiBjbGFzcyBTVkdUcmFuc2Zvcm0gewogcHVibGljOgpAQCAtNTIsNyArNTIsNyBAQAog
ICAgIHZvaWQgdXBkYXRlTWF0cml4KCk7CiAKICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KLSAgICBGbG9hdFBvaW50IHJvdGF0aW9uQ2VudGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9jZW50ZXI7IH0KKyAgICBHcmFwaGljc1BvaW50IHJvdGF0aW9uQ2VudGVyKCkgY29u
c3QgeyByZXR1cm4gbV9jZW50ZXI7IH0KIAogICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgc2V0VHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSk7
CkBAIC02Miw4ICs2Miw4IEBACiAgICAgdm9pZCBzZXRTa2V3WShmbG9hdCBhbmdsZSk7CiAgICAg
CiAgICAgLy8gSW50ZXJuYWwgdXNlIG9ubHkgKGFuaW1hdGlvbiBzeXN0ZW0pCi0gICAgRmxvYXRQ
b2ludCB0cmFuc2xhdGUoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgc2NhbGUoKSBjb25zdDsKKyAg
ICBHcmFwaGljc1BvaW50IHRyYW5zbGF0ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzU2l6ZSBzY2Fs
ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9
IFNWR19UUkFOU0ZPUk1fVU5LTk9XTjsgfQogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29u
c3Q7CkBAIC03Myw3ICs3Myw3IEBACiAKICAgICBTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKICAg
ICBmbG9hdCBtX2FuZ2xlOwotICAgIEZsb2F0UG9pbnQgbV9jZW50ZXI7CisgICAgR3JhcGhpY3NQ
b2ludCBtX2NlbnRlcjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9tYXRyaXg7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCAr
MjQsOCBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIK
ICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNzgsMzEgKzc4LDMxIEBACiAgICAgbV9tYXRyaXgu
dHJhbnNsYXRlKHR4LCB0eSk7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHVHJhbnNmb3JtOjp0cmFuc2xh
dGUoKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdUcmFuc2Zvcm06OnRyYW5zbGF0ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtX21hdHJpeC5lKCks
IG1fbWF0cml4LmYoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQ6Om5hcnJvd1ByZWNpc2lv
bihtX21hdHJpeC5lKCksIG1fbWF0cml4LmYoKSk7CiB9CiAKIHZvaWQgU1ZHVHJhbnNmb3JtOjpz
ZXRTY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCiB7CiAgICAgbV90eXBlID0gU1ZHX1RSQU5TRk9S
TV9TQ0FMRTsKICAgICBtX2FuZ2xlID0gMDsKLSAgICBtX2NlbnRlciA9IEZsb2F0UG9pbnQoKTsK
KyAgICBtX2NlbnRlciA9IEdyYXBoaWNzUG9pbnQoKTsKIAogICAgIG1fbWF0cml4Lm1ha2VJZGVu
dGl0eSgpOwogICAgIG1fbWF0cml4LnNjYWxlTm9uVW5pZm9ybShzeCwgc3kpOwogfQogCi1GbG9h
dFNpemUgU1ZHVHJhbnNmb3JtOjpzY2FsZSgpIGNvbnN0CitHcmFwaGljc1NpemUgU1ZHVHJhbnNm
b3JtOjpzY2FsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZTo6bmFycm93UHJlY2lz
aW9uKG1fbWF0cml4LmEoKSwgbV9tYXRyaXguZCgpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NTaXpl
OjpuYXJyb3dQcmVjaXNpb24obV9tYXRyaXguYSgpLCBtX21hdHJpeC5kKCkpOwogfQogCiB2b2lk
IFNWR1RyYW5zZm9ybTo6c2V0Um90YXRlKGZsb2F0IGFuZ2xlLCBmbG9hdCBjeCwgZmxvYXQgY3kp
CiB7CiAgICAgbV90eXBlID0gU1ZHX1RSQU5TRk9STV9ST1RBVEU7CiAgICAgbV9hbmdsZSA9IGFu
Z2xlOwotICAgIG1fY2VudGVyID0gRmxvYXRQb2ludChjeCwgY3kpOworICAgIG1fY2VudGVyID0g
R3JhcGhpY3NQb2ludChjeCwgY3kpOwogCiAgICAgLy8gVE9ETzogdG9TdHJpbmcoKSBpbXBsZW1l
bnRhdGlvbiwgd2hpY2ggY2FuIHNob3cgY3gsIGN5IChuZWVkIHRvIGJlIHN0b3JlZD8pCiAgICAg
bV9tYXRyaXgubWFrZUlkZW50aXR5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNWR1BhdGhFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgCiAgICAgZmxvYXQgZ2V0VG90YWxMZW5ndGgoKTsKLSAgICBGbG9hdFBvaW50IGdl
dFBvaW50QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpOworICAgIEdyYXBoaWNzUG9pbnQgZ2V0UG9p
bnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSk7CiAgICAgdW5zaWduZWQgbG9uZyBnZXRQYXRoU2Vn
QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpOwogCiAgICAgUGFzc1JlZlB0cjxTVkdQYXRoU2VnQ2xv
c2VQYXRoPiBjcmVhdGVTVkdQYXRoU2VnQ2xvc2VQYXRoKFNWR1BhdGhTZWdSb2xlIHJvbGUgPSBQ
YXRoU2VnVW5kZWZpbmVkUm9sZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0
LDEzIEBACiAgICAgfTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1vZGUoKSBjb25zdDsKIAotICAg
IEZsb2F0U2l6ZSBtX2FuaW1hdGVkVHJhbnNsYXRpb247CisgICAgR3JhcGhpY3NTaXplIG1fYW5p
bWF0ZWRUcmFuc2xhdGlvbjsKICAgICBmbG9hdCBtX2FuaW1hdGVkQW5nbGU7CiAKICAgICAvLyBO
b3RlOiB3ZSBkbyBub3Qgc3VwcG9ydCBwZXJjZW50YWdlIHZhbHVlcyBmb3IgdG8vZnJvbSBjb29y
ZHMgYXMgdGhlIHNwZWMgaW1wbGllcyB3ZSBzaG91bGQgKG9wZXJhIGRvZXNuJ3QgZWl0aGVyKQot
ICAgIEZsb2F0UG9pbnQgbV9mcm9tUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2Zyb21Qb2lu
dDsKICAgICBmbG9hdCBtX2Zyb21BbmdsZTsKLSAgICBGbG9hdFBvaW50IG1fdG9Qb2ludDsKKyAg
ICBHcmFwaGljc1BvaW50IG1fdG9Qb2ludDsKICAgICBmbG9hdCBtX3RvQW5nbGU7CiAKICAgICB1
bnNpZ25lZCBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6
ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVT
dHJhdGVneSkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Ojpn
ZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKIHsK
ICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRl
Z3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDI1ICszMCwyNSBAQAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3Mg
QXR0cmlidXRlOwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFw
aGljc1JlY3Q7CiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwogCiBjbGFzcyBTVkdGaXRU
b1ZpZXdCb3ggewogcHVibGljOgogICAgIHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpIHsgfQog
Ci0gICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25zdCBVQ2hhciomIHN0YXJ0LCBj
b25zdCBVQ2hhciogZW5kLCBGbG9hdFJlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVl
KTsKLSAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29u
c3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYs
IGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCk7CisgICAgYm9vbCBwYXJzZVZpZXdC
b3goRG9jdW1lbnQqLCBjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBHcmFw
aGljc1JlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKKyAgICBzdGF0aWMgQWZm
aW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgR3JhcGhpY3NSZWN0JiB2
aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYsIGZsb2F0IHZpZXdXaWR0
aCwgZmxvYXQgdmlld0hlaWdodCk7CiAKICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKERv
Y3VtZW50KiwgQXR0cmlidXRlKik7CiAgICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxR
dWFsaWZpZWROYW1lPiYpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3Qm94QmFzZVZh
bHVlKGNvbnN0IEdyYXBoaWNzUmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2Vy
dmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZShjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJikgPSAw
OwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiwgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmLCBHcmFwaGljc1JlY3QmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBACiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVt
ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxl
bWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0
ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29u
c3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRl
Z3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNv
bnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0o
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhTdHJp
bmdTb3VyY2VfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBA
IC00MywxNSArNDMsMTUgQEAKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShT
VkdQYXRoU2VnVHlwZSYpOwogICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQo
U1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21l
bnQoR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQo
R3JhcGhpY3NQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxT
ZWdtZW50KGZsb2F0Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50KGZsb2F0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7
Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9T
ZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2lu
dCYsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2lu
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBo
aWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYs
IEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIFN0cmluZyBtX3N0cmluZzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpZiBFTkFC
TEUoU1ZHKQogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ1LDggKzQ1LDggQEAKIAogICAgIGJvb2wgem9vbUFuZFBhbkVuYWJsZWQoKSBjb25zdDsKIAot
ICAgIHZvaWQgc3RhcnRQYW4oY29uc3QgRmxvYXRQb2ludCYgc3RhcnQpOwotICAgIHZvaWQgdXBk
YXRlUGFuKGNvbnN0IEZsb2F0UG9pbnQmIHBvcykgY29uc3Q7CisgICAgdm9pZCBzdGFydFBhbihj
b25zdCBHcmFwaGljc1BvaW50JiBzdGFydCk7CisgICAgdm9pZCB1cGRhdGVQYW4oY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9zKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdEb2N1bWVudChGcmFt
ZSosIGNvbnN0IEtVUkwmKTsKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBj
aGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKIAotICAgIEZsb2F0UG9pbnQg
bV90cmFuc2xhdGU7CisgICAgR3JhcGhpY3NQb2ludCBtX3RyYW5zbGF0ZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICBib29sIGNvbGxlY3RH
cmFkaWVudEF0dHJpYnV0ZXMoUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBj
YWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0
dHJpYnV0ZXMmLCBGbG9hdFBvaW50JiBmb2NhbFBvaW50LCBGbG9hdFBvaW50JiBjZW50ZXJQb2lu
dCwgZmxvYXQmIHJhZGl1cyk7CisgICAgdm9pZCBjYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0Fu
ZFJhZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMmLCBHcmFwaGljc1BvaW50JiBm
b2NhbFBvaW50LCBHcmFwaGljc1BvaW50JiBjZW50ZXJQb2ludCwgZmxvYXQmIHJhZGl1cyk7CiAK
IHByaXZhdGU6CiAgICAgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0
QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdM
aXN0QnVpbGRlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdMaXN0QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAK
IHsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNW
R1BhdGhTZWdMaXN0QnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBv
aW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9wYXRo
RWxlbWVudCk7CiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3QpOwpAQCAtNTksNyArNTksNyBAQAog
ICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0
aFNlZ01vdmV0b1JlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgbV9wYXRoU2Vn
Um9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bGluZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZH
UGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50
KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAg
IG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxSZWwoeSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdM
aXN0QnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb0N1
YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2Rl
IG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhT
ZWdMaXN0KTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5k
KG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodGFyZ2V0UG9p
bnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54
KCksIHBvaW50Mi55KCksIG1fcGF0aFNlZ1JvbGUpKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlz
dEJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3Zv
aWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFT
U0VSVChtX3BhdGhTZWdMaXN0KTsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBtX3BhdGhT
ZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQyLngoKSwg
cG9pbnQyLnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVp
bGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZH
UGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9w
YXRoU2VnTGlzdCk7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgbV9wYXRoU2VnTGlzdC0+
YXBwZW5kKG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVs
KHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDEueCgpLCBwb2ludDEueSgp
LCBtX3BhdGhTZWdSb2xlKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2
ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29v
cmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRp
bmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9wYXRoRWxlbWVudCk7CiAgICAgQVNTRVJU
KG1fcGF0aFNlZ0xpc3QpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIG1fcGF0aFNlZ0xp
c3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgbV9wYXRoU2VnUm9s
ZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZs
b2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBj
b25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2
b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9h
dCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGlj
c1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNT
RVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUs
MTYgKzE3NSwxNiBAQAogICAgICAgICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQog
Ci1GbG9hdFJlY3QgU1ZHTWFza0VsZW1lbnQ6Om1hc2tCb3VuZGluZ0JveChjb25zdCBGbG9hdFJl
Y3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAorR3JhcGhpY3NSZWN0IFNWR01hc2tFbGVtZW50
OjptYXNrQm91bmRpbmdCb3goY29uc3QgR3JhcGhpY3NSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkg
Y29uc3QKIHsKLSAgICBGbG9hdFJlY3QgbWFza0JCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1hc2tC
Qm94OwogICAgIGlmIChtYXNrVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpCi0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1
ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5k
aW5nQm94LngoKSwKKyAgICAgICAgbWFza0JCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdC
b3gueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KCkudmFsdWVBc1BlcmNlbnRh
Z2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlQXNQZXJjZW50YWdl
KCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVp
Z2h0KCkpOwogICAgIGVsc2UKLSAgICAgICAgbWFza0JCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVl
KHRoaXMpLAorICAgICAgICBtYXNrQkJveCA9IEdyYXBoaWNzUmVjdCh4KCkudmFsdWUodGhpcyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0KCkudmFsdWUodGhpcykpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwxNSBAQAogICAgIHZp
cnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJikgPSAwOwogICAg
IHZpcnR1YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlv
dXNDb21tYW5kKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9h
dFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhp
Y3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50KEdyYXBo
aWNzUG9pbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRhbFNl
Z21lbnQoZmxvYXQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxT
ZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZs
b2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9v
bCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1Bv
aW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9p
bnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1Nl
Z21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBHcmFwaGljc1BvaW50
JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCwzNyArMTMwLDM3IEBACiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJl
cigpKS5zdWJTdHJpbmdMZW5ndGgoY2hhcm51bSwgbmNoYXJzKTsKIH0KIAotRmxvYXRQb2ludCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hh
cm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitHcmFwaGljc1BvaW50IFNWR1RleHRDb250
ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZD
aGFycygpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiBG
bG9hdFBvaW50KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5zdGFydFBvc2l0aW9uT2ZDaGFyYWN0
ZXIoY2hhcm51bSk7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRF
bmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKK0dyYXBoaWNzUG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFbmRQb3NpdGlvbk9m
Q2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICBk
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAg
IGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZDaGFycygpKSB7CiAgICAgICAgIGVjID0gSU5ERVhf
U0laRV9FUlI7Ci0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgIHJldHVybiBH
cmFwaGljc1BvaW50KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJl
cigpKS5lbmRQb3NpdGlvbk9mQ2hhcmFjdGVyKGNoYXJudW0pOwogfQogCi1GbG9hdFJlY3QgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CiAKICAgICBpZiAoY2hhcm51bSA+IGdldE51bWJlck9mQ2hhcnMoKSkgewogICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKICAgICB9CiAKICAgICByZXR1cm4gU1ZHVGV4dFF1
ZXJ5KHJlbmRlcmVyKCkpLmV4dGVudE9mQ2hhcmFjdGVyKGNoYXJudW0pOwpAQCAtMTc4LDcgKzE3
OCw3IEBACiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5yb3RhdGlvbk9mQ2hh
cmFjdGVyKGNoYXJudW0pOwogfQogCi1pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRDaGFy
TnVtQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2ludCBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50KSBjb25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuY2hh
cmFjdGVyTnVtYmVyQXRQb3NpdGlvbihwb2ludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDIz
ICsxMjcsMjMgQEAKICAgICByZXR1cm4gbmV4dENvbW1hbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQor
Ym9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2lu
dCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBp
ZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1f
Y3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQ
b2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYg
dGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBpZiAo
IXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1fY3Vy
cmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2lu
dCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAog
ICAgIHJldHVybiBwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB5KTsKIH0KIAotYm9vbCBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYg
cG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQ
b2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50KQogewogICAgIGZsb2F0IHgxOwogICAgIGZsb2F0IHkxOwpAQCAtMTcyLDEzICsxNzIs
MTMgQEAKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkKICAg
ICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgcG9pbnQy
ID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gs
IHRvWSk7CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludCh4MSwgeTEpOworICAgIHBvaW50MiA9
IEdyYXBoaWNzUG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQo
dG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGljc1Bv
aW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBmbG9hdCB4MTsKICAgICBmbG9hdCB5MTsKQEAgLTE4
OSwxMiArMTg5LDEyIEBACiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5k
LCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOwot
ICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgcG9pbnQxID0gR3Jh
cGhpY3NQb2ludCh4MSwgeTEpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gs
IHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2ludCYgdGFy
Z2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgeDI7CiAgICAgZmxvYXQgeTI7CkBAIC0yMDUsMjMgKzIw
NSwyMyBAQAogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9YKQog
ICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICB0YXJn
ZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHBvaW50MiA9IEdyYXBoaWNzUG9p
bnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQodG9YLCB0b1kpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29s
IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQo
R3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0
IHRvWTsKICAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkKICAgICAg
ICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRh
cmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4
LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VB
cmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFy
Z2VBcmMsIGJvb2wmIHN3ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBm
bG9hdCB0b1g7CiAgICAgZmxvYXQgdG9ZOwpAQCAtMjMzLDcgKzIzMyw3IEBACiAgICAgICAgIHx8
ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51
bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICB0YXJnZXRQb2ludCA9IEdy
YXBoaWNzUG9pbnQodG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4
LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTVkdBbmltYXRlZFByb3Bl
cnR5VGVhck9mZjxGbG9hdFJlY3Q+IFNWR0FuaW1hdGVkUmVjdDsKK3R5cGVkZWYgU1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRlYXJPZmY8R3JhcGhpY3NSZWN0PiBTVkdBbmltYXRlZFJlY3Q7CiAKIC8vIEhl
bHBlciBtYWNyb3MgdG8gZGVjbGFyZS9kZWZpbmUgYSBTVkdBbmltYXRlZFJlY3Qgb2JqZWN0CiAj
ZGVmaW5lIERFQ0xBUkVfQU5JTUFURURfUkVDVChVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5
KSBcCi1ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZKFNWR0FuaW1hdGVkUmVjdCwgRmxvYXRSZWN0
LCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KQorREVDTEFSRV9BTklNQVRFRF9QUk9QRVJU
WShTVkdBbmltYXRlZFJlY3QsIEdyYXBoaWNzUmVjdCwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9w
ZXJ0eSkKIAogI2RlZmluZSBERUZJTkVfQU5JTUFURURfUkVDVChPd25lclR5cGUsIERPTUF0dHJp
YnV0ZSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkgXAogREVGSU5FX0FOSU1BVEVEX1BS
T1BFUlRZKEFuaW1hdGVkUmVjdCwgT3duZXJUeXBlLCBET01BdHRyaWJ1dGUsIERPTUF0dHJpYnV0
ZS5sb2NhbE5hbWUoKSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkKQEAgLTU0LDcgKzU0
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25QdHI8U1ZH
QW5pbWF0ZWRUeXBlPiYgZnJvbVZhbHVlLCBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiYgdG9WYWx1
ZSwgT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4mIGFuaW1hdGVkVmFsdWUpOwogICAgIHZpcnR1YWwg
ZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRvU3RyaW5nKTsKIAotICAgIHN0YXRpYyBib29sIHBhcnNlU1ZHUmVjdChjb25zdCBT
dHJpbmcmLCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZVNWR1JlY3QoY29uc3Qg
U3RyaW5nJiwgR3JhcGhpY3NSZWN0Jik7CiB9OwogI2VuZGlmIC8vIEVOQUJMRShTVkdfQU5JTUFU
SU9OKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNs
dWRlICJSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBA
IC0yMjAsMTYgKzIyMCwxNiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMoY29u
c3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBGbG9hdFBvaW50JiBmb2Nh
bFBvaW50LCBGbG9hdFBvaW50JiBjZW50ZXJQb2ludCwgZmxvYXQmIHJhZGl1cykKK3ZvaWQgU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1
cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIEdyYXBoaWNzUG9p
bnQmIGZvY2FsUG9pbnQsIEdyYXBoaWNzUG9pbnQmIGNlbnRlclBvaW50LCBmbG9hdCYgcmFkaXVz
KQogewogICAgIC8vIERldGVybWluZSBncmFkaWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFuZCBy
YWRpdXMKICAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBm
b2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmZ4KCkudmFsdWVBc1BlcmNlbnRhZ2Uo
KSwgYXR0cmlidXRlcy5meSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwotICAgICAgICBjZW50ZXJQ
b2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0
dHJpYnV0ZXMuY3koKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAgICAgZm9jYWxQb2ludCA9
IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0dHJp
YnV0ZXMuZnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAgICAgY2VudGVyUG9pbnQgPSBH
cmFwaGljc1BvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZUFzUGVyY2VudGFnZSgpLCBhdHRyaWJ1
dGVzLmN5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CiAgICAgICAgIHJhZGl1cyA9IGF0dHJpYnV0
ZXMucigpLnZhbHVlQXNQZXJjZW50YWdlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9jYWxQ
b2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVz
LmZ5KCkudmFsdWUodGhpcykpOwotICAgICAgICBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQoYXR0
cmlidXRlcy5jeCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLmN5KCkudmFsdWUodGhpcykpOwor
ICAgICAgICBmb2NhbFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmZ4KCkudmFsdWUo
dGhpcyksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZSh0aGlzKSk7CisgICAgICAgIGNlbnRlclBvaW50
ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMu
Y3koKS52YWx1ZSh0aGlzKSk7CiAgICAgICAgIHJhZGl1cyA9IGF0dHJpYnV0ZXMucigpLnZhbHVl
KHRoaXMpOwogICAgIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAKICAgICAgICAgZGVsdGFYID0g
Y29zZihhbmdsZSkgKiByYWRpdXNNYXg7CiAgICAgICAgIGRlbHRhWSA9IHNpbmYoYW5nbGUpICog
cmFkaXVzTWF4OwotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChkZWx0YVggKyBjZW50
ZXJQb2ludC54KCksIGRlbHRhWSArIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIGZvY2FsUG9p
bnQgPSBHcmFwaGljc1BvaW50KGRlbHRhWCArIGNlbnRlclBvaW50LngoKSwgZGVsdGFZICsgY2Vu
dGVyUG9pbnQueSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoQmxlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJsZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBACiB9CiAKIC8vIEhl
bHBlciBmdW5jdGlvbnMKLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBibGVuZEZsb2F0UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYiwgZmxvYXQgcHJvZ3Jlc3Mp
CitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUG9pbnQgYmxlbmRHcmFwaGljc1BvaW50KGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIsIGZsb2F0IHByb2dyZXNzKQog
ewotICAgIHJldHVybiBGbG9hdFBvaW50KChiLngoKSAtIGEueCgpKSAqIHByb2dyZXNzICsgYS54
KCksIChiLnkoKSAtIGEueSgpKSAqIHByb2dyZXNzICsgYS55KCkpOworICAgIHJldHVybiBHcmFw
aGljc1BvaW50KChiLngoKSAtIGEueCgpKSAqIHByb2dyZXNzICsgYS54KCksIChiLnkoKSAtIGEu
eSgpKSAqIHByb2dyZXNzICsgYS55KCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGJsZW5k
QW5pbWF0ZWRGbG9hdChmbG9hdCBmcm9tLCBmbG9hdCB0bywgZmxvYXQgcHJvZ3Jlc3MpCkBAIC02
NCwyNSArNjQsMjUgQEAKICAgICByZXR1cm4gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IGFuaW1WYWx1ZSArIGN1cnJlbnRWYWx1ZSA6IGFuaW1WYWx1ZSAtIGN1cnJlbnRWYWx1ZTsK
IH0KIAotRmxvYXRQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZEZsb2F0UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgZnJvbVBvaW50LCBjb25zdCBGbG9hdFBvaW50JiB0b1BvaW50KQor
R3JhcGhpY3NQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQo
Y29uc3QgR3JhcGhpY3NQb2ludCYgZnJvbVBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50JiB0b1Bv
aW50KQogewogICAgIGlmIChtX2Zyb21Nb2RlID09IG1fdG9Nb2RlKQotICAgICAgICByZXR1cm4g
YmxlbmRGbG9hdFBvaW50KGZyb21Qb2ludCwgdG9Qb2ludCwgbV9wcm9ncmVzcyk7CisgICAgICAg
IHJldHVybiBibGVuZEdyYXBoaWNzUG9pbnQoZnJvbVBvaW50LCB0b1BvaW50LCBtX3Byb2dyZXNz
KTsKIAogICAgIC8vIFRyYW5zZm9ybSB0b1BvaW50IHRvIHRoZSBjb29yZGluYXRlIG1vZGUgb2Yg
ZnJvbVBvaW50Ci0gICAgRmxvYXRQb2ludCBhbmltYXRlZFBvaW50ID0gdG9Qb2ludDsKKyAgICBH
cmFwaGljc1BvaW50IGFuaW1hdGVkUG9pbnQgPSB0b1BvaW50OwogICAgIGlmIChtX2Zyb21Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIGFuaW1hdGVkUG9pbnQgKz0gbV90b0N1
cnJlbnRQb2ludDsKICAgICBlbHNlCiAgICAgICAgIGFuaW1hdGVkUG9pbnQubW92ZSgtbV90b0N1
cnJlbnRQb2ludC54KCksIC1tX3RvQ3VycmVudFBvaW50LnkoKSk7CiAKLSAgICBhbmltYXRlZFBv
aW50ID0gYmxlbmRGbG9hdFBvaW50KGZyb21Qb2ludCwgYW5pbWF0ZWRQb2ludCwgbV9wcm9ncmVz
cyk7CisgICAgYW5pbWF0ZWRQb2ludCA9IGJsZW5kR3JhcGhpY3NQb2ludChmcm9tUG9pbnQsIGFu
aW1hdGVkUG9pbnQsIG1fcHJvZ3Jlc3MpOwogCiAgICAgaWYgKG1faXNJbkZpcnN0SGFsZk9mQW5p
bWF0aW9uKQogICAgICAgICByZXR1cm4gYW5pbWF0ZWRQb2ludDsKIAogICAgIC8vIFRyYW5zZm9y
bSB0aGUgYW5pbWF0ZWQgcG9pbnQgdG8gdGhlIGNvb3JkaW5hdGUgbW9kZSwgbmVlZGVkIGZvciB0
aGUgY3VycmVudCBwcm9ncmVzcy4KLSAgICBGbG9hdFBvaW50IGN1cnJlbnRQb2ludCA9IGJsZW5k
RmxvYXRQb2ludChtX2Zyb21DdXJyZW50UG9pbnQsIG1fdG9DdXJyZW50UG9pbnQsIG1fcHJvZ3Jl
c3MpOworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50ID0gYmxlbmRHcmFwaGljc1BvaW50
KG1fZnJvbUN1cnJlbnRQb2ludCwgbV90b0N1cnJlbnRQb2ludCwgbV9wcm9ncmVzcyk7CiAgICAg
aWYgKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIHJldHVybiBhbmlt
YXRlZFBvaW50ICsgY3VycmVudFBvaW50OwogCkBAIC05MiwxMyArOTIsMTMgQEAKIAogYm9vbCBT
VkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IGZy
b21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhp
Y3NQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1RhcmdldFBvaW50
OwogICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdldFBv
aW50KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0
UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3ZlVG8o
YmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwg
ZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2Rl
KTsKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJv
bVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5p
bWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQg
PSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBt
X2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90
b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDYs
MTMgKzEwNiwxMyBAQAogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQo
KQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9U
YXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFw
aGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlTGlu
ZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJz
ZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0
UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0ZWRH
cmFwaGljc1BvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJy
ZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0
UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1
cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBv
aW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0xNDgsMTkgKzE0OCwxOSBAQAogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZl
VG9DdWJpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAg
IEZsb2F0UG9pbnQgZnJvbVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0gICAg
RmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDE7Ci0gICAg
RmxvYXRQb2ludCB0b1BvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsK
KyAgICBHcmFwaGljc1BvaW50IGZyb21Qb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBmcm9tUG9p
bnQyOworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50
IHRvUG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgdG9Qb2ludDI7CiAgICAgaWYgKCFtX2Zyb21T
b3VyY2UtPnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChmcm9tUG9pbnQxLCBmcm9tUG9pbnQyLCBm
cm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUN1cnZlVG9DdWJp
Y1NlZ21lbnQodG9Qb2ludDEsIHRvUG9pbnQyLCB0b1RhcmdldFBvaW50KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljKGJsZW5kQW5pbWF0ZWRG
bG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFy
Z2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLAorICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpYyhi
bGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21Qb2lu
dDIsIHRvUG9pbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRl
ZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21N
b2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2lu
dCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsg
dG9UYXJnZXRQb2ludDsKQEAgLTE2OSwxNiArMTY5LDE2IEBACiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9p
bnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOworICAgIEdyYXBoaWNz
UG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVBvaW50MjsKKyAg
ICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1BvaW50
MjsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50
KGZyb21Qb2ludDIsIGZyb21UYXJnZXRQb2ludCkKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UtPnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCh0b1BvaW50MiwgdG9UYXJnZXRQb2ludCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJpY1Ntb290
aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21U
YXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisgICAgbV9jb25zdW1lci0+Y3VydmVUb0N1Ymlj
U21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQyKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEdyYXBoaWNz
UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2Rl
IDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCAr
IGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9U
YXJnZXRQb2ludDsKQEAgLTE4NywxNiArMTg3LDE2IEBACiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6
OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRh
cmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MTsKLSAgICBGbG9hdFBvaW50IHRv
VGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MTsKKyAgICBHcmFwaGljc1BvaW50
IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21Qb2ludDE7CisgICAgR3Jh
cGhpY3NQb2ludCB0b1RhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9Qb2ludDE7CiAg
ICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZnJvbVBv
aW50MSwgZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMoYmxlbmRBbmlt
YXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0
b1RhcmdldFBvaW50KSwKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKGJsZW5kQW5p
bWF0ZWRHcmFwaGljc1BvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21UYXJnZXRQ
b2ludCwgdG9UYXJnZXRQb2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAg
bV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
ZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50Owog
ICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwpAQCAtMjA1
LDEzICsyMDUsMTMgQEAKIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0g
ICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVRhcmdl
dFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQb2ludDsKICAgICBpZiAoIW1fZnJv
bVNvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmcm9tVGFyZ2V0UG9p
bnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhT
ZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2Nv
bnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJh
dGljU21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21UYXJnZXRQb2ludCwgdG9U
YXJnZXRQb2ludCksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1f
dG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9t
VGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0
UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjQsMTMgKzIyNCwxMyBAQAogICAgIGZsb2F0
IGZyb21BbmdsZTsKICAgICBib29sIGZyb21MYXJnZUFyYzsKICAgICBib29sIGZyb21Td2VlcDsK
LSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21U
YXJnZXRQb2ludDsKICAgICBmbG9hdCB0b1J4OwogICAgIGZsb2F0IHRvUnk7CiAgICAgZmxvYXQg
dG9BbmdsZTsKICAgICBib29sIHRvTGFyZ2VBcmM7CiAgICAgYm9vbCB0b1N3ZWVwOwotICAgIEZs
b2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7
CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQXJjVG9TZWdtZW50KGZyb21SeCwgZnJvbVJ5
LCBmcm9tQW5nbGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBmcm9tVGFyZ2V0UG9pbnQpCiAg
ICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUFyY1RvU2VnbWVudCh0b1J4LCB0b1J5LCB0b0Fu
Z2xlLCB0b0xhcmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRB
bmltYXRlZEZsb2F0KGZyb21BbmdsZSwgdG9BbmdsZSwgbV9wcm9ncmVzcyksCiAgICAgICAgICAg
ICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBmcm9tTGFyZ2VBcmMgOiB0
b0xhcmdlQXJjLAogICAgICAgICAgICAgICAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gZnJvbVN3ZWVwIDogdG9Td2VlcCwKLSAgICAgICAgICAgICAgICAgICAgICBibGVuZEFu
aW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLAorICAgICAg
ICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21UYXJnZXRQb2lu
dCwgdG9UYXJnZXRQb2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxm
T2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQ
b2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2lu
dCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVu
dFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQg
OiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAgLTM2NSw4ICszNjUsOCBAQAog
ICAgIG1fdG9Tb3VyY2UgPSAwOwogICAgIG1fZnJvbVNvdXJjZSA9IDA7CiAgICAgbV9jb25zdW1l
ciA9IDA7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gRmxvYXRQb2ludCgpOwotICAgIG1fdG9D
dXJyZW50UG9pbnQgPSBGbG9hdFBvaW50KCk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gR3Jh
cGhpY3NQb2ludCgpOworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUgIkZpbGVJY29uTG9hZGVy
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgcmV0dXJuIHJvb3RFbGVtZW50LT5o
ZWlnaHQoKS51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlOwogfQogCi12b2lkIFNW
R0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsK
ICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg5LDEyICsxODksMTIgQEAK
ICAgICBpZiAoY29tcG9zaXRlT3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlcikKICAgICAgICAgY29u
dGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZShk
c3RSZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNS
ZWN0LmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1NpemUgc2NhbGUoZHN0UmVjdC53aWR0aCgpIC8g
c3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKSk7CiAg
ICAgCiAgICAgLy8gV2UgY2FuIG9ubHkgZHJhdyB0aGUgZW50aXJlIGZyYW1lLCBjbGlwcGVkIHRv
IHRoZSByZWN0IHdlIHdhbnQuIFNvIGNvbXB1dGUgd2hlcmUgdGhlIHRvcCBsZWZ0CiAgICAgLy8g
b2YgdGhlIGltYWdlIHdvdWxkIGJlIGlmIHdlIHdlcmUgZHJhd2luZyB3aXRob3V0IGNsaXBwaW5n
LCBhbmQgdHJhbnNsYXRlIGFjY29yZGluZ2x5LgotICAgIEZsb2F0U2l6ZSB0b3BMZWZ0T2Zmc2V0
KHNyY1JlY3QubG9jYXRpb24oKS54KCkgKiBzY2FsZS53aWR0aCgpLCBzcmNSZWN0LmxvY2F0aW9u
KCkueSgpICogc2NhbGUuaGVpZ2h0KCkpOwotICAgIEZsb2F0UG9pbnQgZGVzdE9mZnNldCA9IGRz
dFJlY3QubG9jYXRpb24oKSAtIHRvcExlZnRPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHRvcExl
ZnRPZmZzZXQoc3JjUmVjdC5sb2NhdGlvbigpLngoKSAqIHNjYWxlLndpZHRoKCksIHNyY1JlY3Qu
bG9jYXRpb24oKS55KCkgKiBzY2FsZS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NQb2ludCBkZXN0
T2Zmc2V0ID0gZHN0UmVjdC5sb2NhdGlvbigpIC0gdG9wTGVmdE9mZnNldDsKIAogICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZShkZXN0T2Zmc2V0LngoKSwgZGVzdE9mZnNldC55KCkpOwogICAgIGNvbnRl
eHQtPnNjYWxlKHNjYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBACiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVJbWFnZT4gY3Jl
YXRlKEZpbHRlciosIFBhc3NSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvJik7CiAKLSAgICB2b2lkIHNldEFic29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYg
YWJzb2x1dGVTdWJyZWdpb24pIHsgbV9hYnNvbHV0ZVN1YnJlZ2lvbiA9IGFic29sdXRlU3VicmVn
aW9uOyB9CisgICAgdm9pZCBzZXRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBHcmFwaGljc1JlY3Qm
IGFic29sdXRlU3VicmVnaW9uKSB7IG1fYWJzb2x1dGVTdWJyZWdpb24gPSBhYnNvbHV0ZVN1YnJl
Z2lvbjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAg
ICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKLSAgICBGbG9h
dFJlY3QgbV9hYnNvbHV0ZVN1YnJlZ2lvbjsKKyAgICBHcmFwaGljc1JlY3QgbV9hYnNvbHV0ZVN1
YnJlZ2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0
ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQorU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgR3JhcGhpY3NSZWN0
JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVj
dEJCb3hNb2RlKQogICAgIDogRmlsdGVyKCkKICAgICAsIG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJz
b2x1dGVUcmFuc2Zvcm0pCiAgICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCkBAIC01MCw3ICs1MCw3IEBACiAgICAgcmV0dXJuIEZp
bHRlcjo6YXBwbHlWZXJ0aWNhbFNjYWxlKHZhbHVlKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24u
aGVpZ2h0KCkgLyBtX2ZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdG
aWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1Bhc3NSZWZQdHI8U1ZHRmlsdGVyPiBTVkdG
aWx0ZXI6OmNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBj
b25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBmaWx0ZXJS
ZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
VkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwg
dGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CkBAIC0zNSwzMCArMzUsMzAgQEAKIAogY2xhc3MgU1ZHRmlsdGVyIDogcHVibGljIEZpbHRlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgYm9vbCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRmlsdGVyPiBj
cmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3Qg
R3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgYm9vbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgZWZmZWN0Qm91bmRpbmdCb3hNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCQm94
TW9kZTsgfQogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247IH0K
KyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZmls
dGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQogCi0g
ICAgdmlydHVhbCBGbG9hdFBvaW50IG1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm0uaW52
ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsgfQotICAgIEZsb2F0UmVjdCBtYXBMb2NhbFJlY3RUb0Fi
c29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1
dGVUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NQb2ludCBt
YXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBj
b25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBQb2ludChwb2lu
dCk7IH0KKyAgICBHcmFwaGljc1JlY3QgbWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtLm1h
cFJlY3QocmVjdCk7IH0KIAogICAgIHZpcnR1YWwgZmxvYXQgYXBwbHlIb3Jpem9udGFsU2NhbGUo
ZmxvYXQgdmFsdWUpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgYXBwbHlWZXJ0aWNhbFNjYWxl
KGZsb2F0IHZhbHVlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdl
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0g
ICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRC
b3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHNvdXJjZUltYWdlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOyB9CisgICAgR3Jh
cGhpY3NSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3Vu
ZGluZ0JveDsgfQogCiBwcml2YXRlOgotICAgIFNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOworICAgIFNWR0ZpbHRl
cihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0
YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wg
ZWZmZWN0QkJveE1vZGUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zv
cm07Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZs
b2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmls
dGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKyAgICBHcmFwaGljc1Jl
Y3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247CisgICAgR3JhcGhpY3NSZWN0IG1fdGFy
Z2V0Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247
CisgICAgR3JhcGhpY3NSZWN0IG1fZmlsdGVyUmVnaW9uOwogICAgIGJvb2wgbV9lZmZlY3RCQm94
TW9kZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw4ICs0OSw4IEBACiB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkK
IHsKICAgICBBU1NFUlQobV9pbWFnZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2lu
dCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBwYWludFJlY3QobV9hYnNvbHV0
ZVN1YnJlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3QoR3JhcGhpY3NQb2ludCgpLCBt
X2ltYWdlLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBwYWludFJlY3QobV9hYnNvbHV0ZVN1
YnJlZ2lvbik7CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRS
ZWN0LCBzcmNSZWN0KTsKICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7
CiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsK
QEAgLTY1LDggKzY1LDggQEAKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7
Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KG1fYWJzb2x1dGVTdWJyZWdpb24pOworICAgIEdyYXBo
aWNzUmVjdCBzcmNSZWN0KEdyYXBoaWNzUG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBH
cmFwaGljc1JlY3QgZGVzdFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lvbik7CiAgICAgbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwogCiAgICAgSW50
UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBACiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5k
ZXgoc2l6ZV90KSB7IHJldHVybiAwOyB9CiAKICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBmcm9tUmVjdCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRmls
dGVyRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAg
ICAgdm9pZCBzZXRGaWx0ZXJSZXModW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNYLCB1bnNpZ25lZCBs
b25nIGZpbHRlclJlc1kpOwotICAgIEZsb2F0UmVjdCBmaWx0ZXJCb3VuZGluZ0JveChjb25zdCBG
bG9hdFJlY3QmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgZmlsdGVyQm91bmRpbmdCb3goY29u
c3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHRmlsdGVyRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMb2NhdGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMb2NhdGFibGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMb2NhdGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBACiAgICAgcmV0
dXJuIGZhcnRoZXN0OwogfQogCi1GbG9hdFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0
IFNWR0VsZW1lbnQqIGVsZW1lbnQsIFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJh
dGVneSkKK0dyYXBoaWNzUmVjdCBTVkdMb2NhdGFibGU6OmdldEJCb3goY29uc3QgU1ZHRWxlbWVu
dCogZWxlbWVudCwgU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewog
ICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAoc3R5bGVVcGRhdGVTdHJhdGVneSA9PSBBbGxv
d1N0eWxlVXBkYXRlKQpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgLy8gRklYTUU6IEV2ZW50dWFs
bHkgd2Ugc2hvdWxkIHN1cHBvcnQgZ2V0QkJveCBmb3IgZGV0YWNoZWQgZWxlbWVudHMuCiAgICAg
aWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cisg
ICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIHJldHVybiBlbGVtZW50LT5yZW5k
ZXJlcigpLT5vYmplY3RCb3VuZGluZ0JveCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1pvb21FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21FdmVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pv
b21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIHsKIH0KIAotRmxv
YXRSZWN0IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAorR3JhcGhpY3NSZWN0
IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3pv
b21SZWN0U2NyZWVuOwogfQpAQCAtNDYsNyArNDYsNyBAQAogICAgIG1fcHJldmlvdXNTY2FsZSA9
IHNjYWxlOwogfQogCi1GbG9hdFBvaW50IFNWR1pvb21FdmVudDo6cHJldmlvdXNUcmFuc2xhdGUo
KSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdab29tRXZlbnQ6OnByZXZpb3VzVHJhbnNsYXRlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9wcmV2aW91c1RyYW5zbGF0ZTsKIH0KQEAgLTYxLDcgKzYx
LDcgQEAKICAgICBtX25ld1NjYWxlID0gc2NhbGU7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHWm9vbUV2
ZW50OjpuZXdUcmFuc2xhdGUoKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdab29tRXZlbnQ6Om5l
d1RyYW5zbGF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbmV3VHJhbnNsYXRlOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEs
NyBAQAogICAgIHJldHVybiByYXJlU1ZHRGF0YSgpLT5lbGVtZW50SW5zdGFuY2VzKCk7CiB9CiAK
LWJvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goRmxvYXRSZWN0JiByZWN0LCBTVkdMb2NhdGFi
bGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK2Jvb2wg
U1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goR3JhcGhpY3NSZWN0JiByZWN0LCBTVkdMb2NhdGFibGU6
OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKIHsKICAgICBp
ZiAoaXNTdHlsZWRMb2NhdGFibGUoKSkgewogICAgICAgICByZWN0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHRoaXMpLT5nZXRCQm94KHN0eWxlVXBkYXRl
U3RyYXRlZ3kpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2Vn
TGlzdFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDIxICs1OSwyMSBAQAogICAgIHJl
dHVybiBwYXRoU2VnVHlwZTsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VN
b3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlz
dFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQog
ewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIG1vdmVU
byA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50Lmdl
dCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+
eSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQobW92ZVRvLT54KCksIG1vdmVU
by0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdU
eXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5h
dGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9z
ZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobGluZVRvLT54KCks
IGxpbmVUby0+eSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQobGluZVRvLT54
KCksIGxpbmVUby0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTUsNDcgKzk1LDQ3
IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBv
aW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGlj
c1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIEFTU0VS
VChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0
aFNlZ0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0N1cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYyogY3ViaWMgPSBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9zZWdtZW50LmdldCgpKTsKLSAg
ICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7Ci0gICAgcG9p
bnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOwotICAgIHRhcmdldFBv
aW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKKyAgICBwb2ludDEgPSBH
cmFwaGljc1BvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7CisgICAgcG9pbnQyID0gR3Jh
cGhpY3NQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOworICAgIHRhcmdldFBvaW50ID0g
R3JhcGhpY3NQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29s
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3Jh
cGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBB
U1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09
IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgp
ID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGgqIGN1YmljU21vb3RoID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChj
dWJpY1Ntb290aC0+eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOwotICAgIHRhcmdldFBvaW50ID0g
RmxvYXRQb2ludChjdWJpY1Ntb290aC0+eCgpLCBjdWJpY1Ntb290aC0+eSgpKTsKKyAgICBwb2lu
dDIgPSBHcmFwaGljc1BvaW50KGN1YmljU21vb3RoLT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7
CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGN1YmljU21vb3RoLT54KCksIGN1Ymlj
U21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0
U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwg
RmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJU
KG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicyB8
fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwp
OwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKiBxdWFkcmF0aWMgPSBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYyo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9p
bnQxID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eCgpLCBxdWFkcmF0aWMtPnkoKSk7
CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludChxdWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+
eTEoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHF1YWRyYXRpYy0+eCgpLCBx
dWFkcmF0aWMtPnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xp
c3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIEFT
U0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsKTsKICAgICBTVkdQYXRoU2Vn
U2luZ2xlQ29vcmRpbmF0ZSogcXVhZHJhdGljU21vb3RoID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z1NpbmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwotICAgIHRhcmdldFBvaW50ID0g
RmxvYXRQb2ludChxdWFkcmF0aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOwor
ICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChxdWFkcmF0aWNTbW9vdGgtPngoKSwgcXVh
ZHJhdGljU21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxv
YXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxv
YXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3
ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50
KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdBcmNBYnMg
fHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdBcmNSZWwpOwpAQCAtMTQ1LDcg
KzE0NSw3IEBACiAgICAgYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsKICAgICBsYXJnZUFyYyA9IGFy
Y1RvLT5sYXJnZUFyY0ZsYWcoKTsKICAgICBzd2VlcCA9IGFyY1RvLT5zd2VlcEZsYWcoKTsKLSAg
ICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7CisgICAg
dGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGFyY1RvLT54KCksIGFyY1RvLT55KCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJT
VkdQb2ludExpc3QuaCIKIAogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTE4OSw3ICsxODksNyBAQAog
ICAgIHJldHVybiBjdXIgPT0gZW5kOwogfQogCi1ib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcm
IHN0cmluZywgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb25zdCBVQ2hhciogcHRyID0gc3Ry
aW5nLmNoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxl
bmd0aCgpOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgZmxvYXQgd2lkdGggPSAwOwogICAgIGZs
b2F0IGhlaWdodCA9IDA7CiAgICAgYm9vbCB2YWxpZCA9IHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB4
KSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgeSkgJiYgcGFyc2VOdW1iZXIocHRyLCBlbmQsIHdp
ZHRoKSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgaGVpZ2h0LCBmYWxzZSk7Ci0gICAgcmVjdCA9
IEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZWN0ID0gR3JhcGhpY3NSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHJldHVybiB2YWxpZDsKIH0KIApAQCAtMjMyLDcg
KzIzMiw3IEBACiAgICAgICAgIH0KICAgICAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGN1ciwgZW5k
KTsKIAotICAgICAgICBwb2ludHNMaXN0LmFwcGVuZChGbG9hdFBvaW50KHhQb3MsIHlQb3MpKTsK
KyAgICAgICAgcG9pbnRzTGlzdC5hcHBlbmQoR3JhcGhpY3NQb2ludCh4UG9zLCB5UG9zKSk7CiAg
ICAgfQogICAgIHJldHVybiBjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZDsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MiwxMSArODIsMTEgQEAKICAgICB1bnNpZ25lZCBnZXROdW1iZXJPZkNoYXJz
KCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgY29uc3Q7CiAgICAg
ZmxvYXQgZ2V0U3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFy
cywgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZ2V0U3RhcnRQb3NpdGlv
bk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgRmxv
YXRQb2ludCBnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFy
bnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBnZXRTdGFydFBv
c2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAg
ICBHcmFwaGljc1BvaW50IGdldEVuZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgZ2V0RXh0ZW50T2ZDaGFyKHVu
c2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBmbG9hdCBnZXRSb3Rh
dGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAg
aW50IGdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBp
bnQgZ2V0Q2hhck51bUF0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAg
IHZvaWQgc2VsZWN0U3ViU3RyaW5nKHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywg
RXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgc3RhdGljIFNWR1RleHRDb250ZW50RWxlbWVu
dCogZWxlbWVudEZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5oIgogI2luY2x1ZGUg
IlNWR0VsZW1lbnRJbnN0YW5jZS5oIgpAQCAtMTk5LDE1ICsxOTksMTUgQEAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0YXJ0
RW5kUG9pbnRzKGNvbnN0IExpbmVhckdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRmxvYXRQb2ludCYgZW5kUG9pbnQpCit2b2lkIFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlU3RhcnRFbmRQb2ludHMoY29uc3QgTGluZWFyR3Jh
ZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBHcmFwaGljc1BvaW50JiBzdGFydFBvaW50LCBH
cmFwaGljc1BvaW50JiBlbmRQb2ludCkKIHsKICAgICAvLyBEZXRlcm1pbmUgZ3JhZGllbnQgc3Rh
cnQvZW5kIHBvaW50cwogICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKSB7Ci0g
ICAgICAgIHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMueDEoKS52YWx1ZUFzUGVy
Y2VudGFnZSgpLCBhdHRyaWJ1dGVzLnkxKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7Ci0gICAgICAg
IGVuZFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWVBc1BlcmNlbnRhZ2Uo
KSwgYXR0cmlidXRlcy55MigpLnZhbHVlQXNQZXJjZW50YWdlKCkpOworICAgICAgICBzdGFydFBv
aW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLngxKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwg
YXR0cmlidXRlcy55MSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOworICAgICAgICBlbmRQb2ludCA9
IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0dHJp
YnV0ZXMueTIoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBz
dGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngxKCkudmFsdWUodGhpcyksIGF0dHJp
YnV0ZXMueTEoKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIGVuZFBvaW50ID0gRmxvYXRQb2ludChh
dHRyaWJ1dGVzLngyKCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZSh0aGlzKSk7
CisgICAgICAgIHN0YXJ0UG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDEoKS52YWx1
ZSh0aGlzKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlKHRoaXMpKTsKKyAgICAgICAgZW5kUG9pbnQg
PSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDIoKS52YWx1ZSh0aGlzKSwgYXR0cmlidXRlcy55
MigpLnZhbHVlKHRoaXMpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtKiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFs
bG93U3R5bGVVcGRhdGUpIGNvbnN0OwogCiAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9y
IGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhzCiAgICAgdmlydHVhbCB2b2lk
IHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDkgQEAKICAgICByZXR1
cm4gdG90YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHUGF0aEVsZW1lbnQ6OmdldFBvaW50
QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQorR3JhcGhpY3NQb2ludCBTVkdQYXRoRWxlbWVudDo6Z2V0
UG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDsKKyAg
ICBHcmFwaGljc1BvaW50IHBvaW50OwogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpzZWxmKCkt
PmdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKG1fcGF0aEJ5dGVTdHJlYW0uZ2V0
KCksIGxlbmd0aCwgcG9pbnQpOwogICAgIHJldHVybiBwb2ludDsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnVpbGRlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAj
ZGVmaW5lIFNWR1BhdGhCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQYXRoLmgi
CiAjaW5jbHVkZSAiU1ZHUGF0aENvbnN1bWVyLmgiCiAKQEAgLTQzLDIxICs0MywyMSBAQAogICAg
IHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgeyBtX3BhdGggPSAwOyB9CiAKICAgICAvLyBVc2VkIGlu
IFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCi0gICAgdmlydHVhbCB2
b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRl
TW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50Jiwg
Ym9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1Bv
aW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlUGF0aCgpOwogCiAgICAgLy8gT25seSB1c2VkIGluIFVuYWx0ZXJlZFBh
cnNpbmcgbW9kZS4KICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0
aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2
b2lkIGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRy
YXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIGJvb2wsIGJvb2wsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1Ymlj
U21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVh
bCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
IAogICAgIFBhdGgqIG1fcGF0aDsKLSAgICBGbG9hdFBvaW50IG1fY3VycmVudDsKKyAgICBHcmFw
aGljc1BvaW50IG1fY3VycmVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQ29uc3VtZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjZGVmaW5lIFNWR1BhdGhDb25zdW1lcl9oCiAKICNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
IApAQCAtNTAsMTggKzUwLDE4IEBACiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSA9IDA7CiAK
ICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMu
Ci0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQs
IFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
dXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1v
dmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9k
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBh
dGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29u
c3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1Bv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0
aCgpID0gMDsKIAogICAgIC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCiAg
ICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9k
ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3Jk
aW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0
LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21v
b3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3Qg
R3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBHcmFw
aGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFy
Y1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxh
ZywgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+U1ZHUGF0aENvbnN1bWVyKCkgeyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDkw
OTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgcmV0dXJuIFBhdGgoKTsKIH0K
IAotc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBv
aW50KQorc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogewogICAgIGlmIChzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgaWYgKCFwYXJzZU51bWJlcihjdXIsIGVuZCwgeSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBwb2ludCA9IEZsb2F0UG9pbnQoeCwg
eSk7CisgICAgcG9pbnQgPSBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIAogICAgIC8vIGRpc2Fs
bG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZAogICAgIHJldHVybiAhc2tpcE9w
dGlvbmFsU3BhY2VzKGN1ciwgZW5kKTsKQEAgLTE4Nyw5ICsxODcsOSBAQAogYm9vbCBTVkdBbmlt
YXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYg
ZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykKIHsKICAgICBwYXJzZVBvaW50KGZy
b21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50IGJ5UG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCBieVBvaW50OwogICAgIHBhcnNlUG9pbnQoYnlTdHJpbmcsIGJ5UG9pbnQpOwot
ICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQueCgpICsgYnlQb2ludC54KCks
IG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKKyAgICBtX3RvUG9pbnQgPSBHcmFwaGlj
c1BvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55KCkgKyBi
eVBvaW50LnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIxNSw3ICsyMTUsNyBAQAog
ICAgICAgICBQYXRoIHBhdGggPSBhbmltYXRpb25QYXRoKCk7CiAgICAgICAgIGZsb2F0IHBvc2l0
aW9uT25QYXRoID0gcGF0aC5sZW5ndGgoKSAqIHBlcmNlbnRhZ2U7CiAgICAgICAgIGJvb2wgb2s7
Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBwYXRoLnBvaW50QXRMZW5ndGgocG9zaXRp
b25PblBhdGgsIG9rKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb3NpdGlvbiA9IHBhdGgucG9p
bnRBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOwogICAgICAgICBpZiAob2spIHsKICAgICAg
ICAgICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsK
ICAgICAgICAgICAgIFJvdGF0ZU1vZGUgcm90YXRlTW9kZSA9IHRoaXMtPnJvdGF0ZU1vZGUoKTsK
QEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgRmxvYXRTaXplIGRpZmYgPSBtX3RvUG9pbnQgLSBtX2Zyb21Qb2ludDsKKyAgICBHcmFwaGlj
c1NpemUgZGlmZiA9IG1fdG9Qb2ludCAtIG1fZnJvbVBvaW50OwogICAgIHRyYW5zZm9ybS0+dHJh
bnNsYXRlKGRpZmYud2lkdGgoKSAqIHBlcmNlbnRhZ2UgKyBtX2Zyb21Qb2ludC54KCksIGRpZmYu
aGVpZ2h0KCkgKiBwZXJjZW50YWdlICsgbV9mcm9tUG9pbnQueSgpKTsKIH0KICAgICAKQEAgLTI2
NSwxMyArMjY1LDEzIEBACiAKIGZsb2F0IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxh
dGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJp
bmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87CisgICAgR3Jh
cGhpY3NQb2ludCBmcm9tOworICAgIEdyYXBoaWNzUG9pbnQgdG87CiAgICAgaWYgKCFwYXJzZVBv
aW50KGZyb21TdHJpbmcsIGZyb20pKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFwYXJz
ZVBvaW50KHRvU3RyaW5nLCB0bykpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBGbG9hdFNpemUg
ZGlmZiA9IHRvIC0gZnJvbTsKKyAgICBHcmFwaGljc1NpemUgZGlmZiA9IHRvIC0gZnJvbTsKICAg
ICByZXR1cm4gc3FydGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQo
KSAqIGRpZmYuaGVpZ2h0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTkgKzMzLDE5IEBACiB7CiB9CiAKLXZvaWQgU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBi
b29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUpCit2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENv
b3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKICAgICBtX3Ry
YXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPm1vdmVUbyh0
YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bGlu
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCit2
b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3Ry
YXZlcnNhbFN0YXRlKTsKICAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1f
dHJhdmVyc2FsU3RhdGUtPmxpbmVUbyh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlKQordm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVy
OjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29v
cmRpbmF0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwogICAgIG1fdHJh
dmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+Y3ViaWNCZXpp
ZXJUbyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOwpAQCAtODgsNyArODgsNyBAQAogICAg
IHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBvaW50
IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgpCitHcmFwaGljc1Bv
aW50IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgpCiB7CiAgICAg
QVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwogICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5t
X2N1cnJlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIFNWR0Fu
Z2xlOwogY2xhc3MgU1ZHTGVuZ3RoOwogY2xhc3MgU1ZHTGVuZ3RoTGlzdDsKQEAgLTUyLDcgKzUy
LDcgQEAKICAgICBzdGF0aWMgUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBhdGgo
UGFzc093blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4pOwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNW
R0FuaW1hdGVkVHlwZT4gY3JlYXRlUG9pbnRMaXN0KFNWR1BvaW50TGlzdCopOwogICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUHJlc2VydmVBc3BlY3RSYXRpbyhT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKik7Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBjcmVhdGVSZWN0KEZsb2F0UmVjdCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFNW
R0FuaW1hdGVkVHlwZT4gY3JlYXRlUmVjdChHcmFwaGljc1JlY3QqKTsKICAgICBzdGF0aWMgUGFz
c093blB0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVN0cmluZyhTdHJpbmcqKTsKIAogICAgIEFu
aW1hdGVkUHJvcGVydHlUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KQEAgLTY5
LDcgKzY5LDcgQEAKICAgICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aCgpOwogICAgIFNWR1BvaW50
TGlzdCYgcG9pbnRMaXN0KCk7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVB
c3BlY3RSYXRpbygpOwotICAgIEZsb2F0UmVjdCYgcmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCYg
cmVjdCgpOwogICAgIFN0cmluZyYgc3RyaW5nKCk7CiAKICAgICBTdHJpbmcgdmFsdWVBc1N0cmlu
ZygpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIFNWR1BhdGhCeXRlU3RyZWFtKiBwYXRo
OwogICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiBwcmVzZXJ2ZUFzcGVjdFJhdGlvOwog
ICAgICAgICBTVkdQb2ludExpc3QqIHBvaW50TGlzdDsKLSAgICAgICAgRmxvYXRSZWN0KiByZWN0
OworICAgICAgICBHcmFwaGljc1JlY3QqIHJlY3Q7CiAgICAgICAgIFN0cmluZyogc3RyaW5nOwog
ICAgIH0gbV9kYXRhOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNw
cAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKQEAgLTkzLDcgKzkzLDcgQEAKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6
ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdUZXh0RWxl
bWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNv
bnN0CitHcmFwaGljc1JlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJh
dGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAogewogICAgIHJldHVybiBTVkdUcmFuc2Zv
cm1hYmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAKIHsKIH0KIAotdm9pZCBTVkdQYXRoQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50LCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUp
Cit2b2lkIFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NF
UlQobV9wYXRoKTsKICAgICBtX2N1cnJlbnQgPSBtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyB0YXJnZXRQb2ludCA6IG1fY3VycmVudCArIHRhcmdldFBvaW50OwpAQCAtNDIsMTQgKzQyLDE0
IEBACiAgICAgbV9wYXRoLT5tb3ZlVG8obV9jdXJyZW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnVp
bGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0
ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmxpbmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJU
KG1fcGF0aCk7CiAgICAgbV9jdXJyZW50ID0gbW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8g
dGFyZ2V0UG9pbnQgOiBtX2N1cnJlbnQgKyB0YXJnZXRQb2ludDsKICAgICBtX3BhdGgtPmFkZExp
bmVUbyhtX2N1cnJlbnQpOwogfQogCi12b2lkIFNWR1BhdGhCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0
IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQg
U1ZHUGF0aEJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGgpOwog
ICAgIGlmIChtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKICAgICBib29sIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoTGluZWFyR3JhZGllbnRBdHRy
aWJ1dGVzJik7Ci0gICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBvaW50cyhjb25zdCBMaW5lYXJH
cmFkaWVudEF0dHJpYnV0ZXMmLCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGbG9hdFBvaW50JiBl
bmRQb2ludCk7CisgICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBvaW50cyhjb25zdCBMaW5lYXJH
cmFkaWVudEF0dHJpYnV0ZXMmLCBHcmFwaGljc1BvaW50JiBzdGFydFBvaW50LCBHcmFwaGljc1Bv
aW50JiBlbmRQb2ludCk7CiAKIHByaXZhdGU6CiAgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdE
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE2ICs4MCwxNiBAQAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudDo6c3RhcnRQYW4oY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnQpCit2b2lkIFNWR0RvY3VtZW50OjpzdGFydFBhbihjb25zdCBHcmFwaGljc1BvaW50
JiBzdGFydCkKIHsKICAgICBpZiAocm9vdEVsZW1lbnQoKSkKLSAgICAgICAgbV90cmFuc2xhdGUg
PSBGbG9hdFBvaW50KHN0YXJ0LngoKSAtIHJvb3RFbGVtZW50KCktPmN1cnJlbnRUcmFuc2xhdGUo
KS54KCksIHJvb3RFbGVtZW50KCktPmN1cnJlbnRUcmFuc2xhdGUoKS55KCkgKyBzdGFydC55KCkp
OworICAgICAgICBtX3RyYW5zbGF0ZSA9IEdyYXBoaWNzUG9pbnQoc3RhcnQueCgpIC0gcm9vdEVs
ZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgpLngoKSwgcm9vdEVsZW1lbnQoKS0+Y3VycmVudFRy
YW5zbGF0ZSgpLnkoKSArIHN0YXJ0LnkoKSk7CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnQ6OnVwZGF0
ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNvbnN0Cit2b2lkIFNWR0RvY3VtZW50Ojp1cGRh
dGVQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zKSBjb25zdAogewogICAgIGlmIChyb290RWxl
bWVudCgpKSB7Ci0gICAgICAgIHJvb3RFbGVtZW50KCktPnNldEN1cnJlbnRUcmFuc2xhdGUoRmxv
YXRQb2ludChwb3MueCgpIC0gbV90cmFuc2xhdGUueCgpLCBtX3RyYW5zbGF0ZS55KCkgLSBwb3Mu
eSgpKSk7CisgICAgICAgIHJvb3RFbGVtZW50KCktPnNldEN1cnJlbnRUcmFuc2xhdGUoR3JhcGhp
Y3NQb2ludChwb3MueCgpIC0gbV90cmFuc2xhdGUueCgpLCBtX3RyYW5zbGF0ZS55KCkgLSBwb3Mu
eSgpKSk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+
cmVwYWludCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjZGVmaW5lIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNs
dWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgogI2luY2x1ZGUgIlNWR1BhdGhTb3VyY2UuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDMsMTUgKzQzLDE1IEBACiAgICAgdmlydHVh
bCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKTsKICAgICB2aXJ0dWFs
IFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9v
bCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxp
bmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVU
b0hvcml6b250YWxTZWdtZW50KGZsb2F0Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRv
VmVydGljYWxTZWdtZW50KGZsb2F0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBG
bG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29s
IHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwg
RmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
R3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmly
dHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50Jiwg
R3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNT
ZWdtZW50KEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBi
b29sJiwgYm9vbCYsIEdyYXBoaWNzUG9pbnQmKTsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKQEAgLTg2LDExICs4NiwxMSBAQAogICAgICAgICBy
ZXR1cm4gcmVhZFR5cGU8dW5zaWduZWQgc2hvcnQsIFVuc2lnbmVkU2hvcnRCeXRlPigpOwogICAg
IH0KIAotICAgIEZsb2F0UG9pbnQgcmVhZEZsb2F0UG9pbnQoKQorICAgIEdyYXBoaWNzUG9pbnQg
cmVhZEdyYXBoaWNzUG9pbnQoKQogICAgIHsKICAgICAgICAgZmxvYXQgeCA9IHJlYWRUeXBlPGZs
b2F0LCBGbG9hdEJ5dGU+KCk7CiAgICAgICAgIGZsb2F0IHkgPSByZWFkVHlwZTxmbG9hdCwgRmxv
YXRCeXRlPigpOwotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCh4LCB5KTsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgfQogCiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0q
IG1fc3RyZWFtOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFu
Y2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1EaXN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm0uaCIKIAogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTYyLDE0ICs2MiwxNCBA
QAogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRvIHN1YnRyYWN0IHRvIG1hdHJp
Y2VzCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9S
TV9ST1RBVEU6IHsKLSAgICAgICAgRmxvYXRTaXplIGNlbnRlckRpc3RhbmNlID0gdG9TVkdUcmFu
c2Zvcm0ucm90YXRpb25DZW50ZXIoKSAtIGZyb21TVkdUcmFuc2Zvcm0ucm90YXRpb25DZW50ZXIo
KTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNlbnRlckRpc3RhbmNlID0gdG9TVkdUcmFuc2Zvcm0u
cm90YXRpb25DZW50ZXIoKSAtIGZyb21TVkdUcmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKTsKICAg
ICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBmcm9tU1ZHVHJhbnNmb3Jt
LmFuZ2xlKCk7CiAgICAgICAgIG1fY3ggPSBjZW50ZXJEaXN0YW5jZS53aWR0aCgpOwogICAgICAg
ICBtX2N5ID0gY2VudGVyRGlzdGFuY2UuaGVpZ2h0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFOiB7Ci0gICAg
ICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbkRpc3RhbmNlID0gdG9TVkdUcmFuc2Zvcm0udHJhbnNs
YXRlKCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpOworICAgICAgICBHcmFwaGljc1Np
emUgdHJhbnNsYXRpb25EaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpIC0gZnJv
bVNWR1RyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRl
KHRyYW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgoKSwgdHJhbnNsYXRpb25EaXN0YW5jZS5oZWlnaHQo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgICAg
cmV0dXJuIHRyYW5zZm9ybTsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFO
U0ZPUk1fU0NBTEU6IHsKLSAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gZmlyc3Quc2NhbGUoKSAr
IHNlY29uZC5zY2FsZSgpOworICAgICAgICBHcmFwaGljc1NpemUgc2NhbGUgPSBmaXJzdC5zY2Fs
ZSgpICsgc2Vjb25kLnNjYWxlKCk7CiAgICAgICAgIHRyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53
aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CiAgICAg
fQpAQCAtMjA0LDIwICsyMDQsMjAgQEAKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9NQVRSSVg6CiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zvcm0odHJhbnNmb3JtLm1hdHJp
eCgpICogbV90cmFuc2Zvcm0pOwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1RSQU5TTEFURTogewotICAgICAgICBGbG9hdFBvaW50IHRyYW5zbGF0aW9uID0gdHJhbnNmb3Jt
LnRyYW5zbGF0ZSgpOwotICAgICAgICB0cmFuc2xhdGlvbiArPSBGbG9hdFNpemU6Om5hcnJvd1By
ZWNpc2lvbihtX3RyYW5zZm9ybS5lKCksIG1fdHJhbnNmb3JtLmYoKSk7CisgICAgICAgIEdyYXBo
aWNzUG9pbnQgdHJhbnNsYXRpb24gPSB0cmFuc2Zvcm0udHJhbnNsYXRlKCk7CisgICAgICAgIHRy
YW5zbGF0aW9uICs9IEdyYXBoaWNzU2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fdHJhbnNmb3JtLmUo
KSwgbV90cmFuc2Zvcm0uZigpKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFRyYW5zbGF0ZSh0
cmFuc2xhdGlvbi54KCksIHRyYW5zbGF0aW9uLnkoKSk7CiAgICAgICAgIHJldHVybiBuZXdUcmFu
c2Zvcm07CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxF
OiB7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRyYW5zZm9ybS5zY2FsZSgpOwotICAgICAg
ICBzY2FsZSArPSBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5hKCksIG1f
dHJhbnNmb3JtLmQoKSk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBzY2FsZSA9IHRyYW5zZm9ybS5z
Y2FsZSgpOworICAgICAgICBzY2FsZSArPSBHcmFwaGljc1NpemU6Om5hcnJvd1ByZWNpc2lvbiht
X3RyYW5zZm9ybS5hKCksIG1fdHJhbnNmb3JtLmQoKSk7CiAgICAgICAgIG5ld1RyYW5zZm9ybS5z
ZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiBu
ZXdUcmFuc2Zvcm07CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X1JPVEFURTogewogICAgICAgICAvLyBGSVhNRTogSSdtIG5vdCBjZXJ0YWluIHRoZSB0cmFuc2xh
dGlvbiBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseSBoZXJlCi0gICAgICAgIEZsb2F0UG9pbnQgY2Vu
dGVyID0gdHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQg
Y2VudGVyID0gdHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CiAgICAgICAgIG5ld1RyYW5zZm9y
bS5zZXRSb3RhdGUodHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNlbnRlci54KCkgKyBtX2N4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNlbnRlci55KCkgKyBtX2N5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQb2ludExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRM
aXN0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiAKLWNsYXNzIFNW
R1BvaW50TGlzdCA6IHB1YmxpYyBWZWN0b3I8RmxvYXRQb2ludD4geworY2xhc3MgU1ZHUG9pbnRM
aXN0IDogcHVibGljIFZlY3RvcjxHcmFwaGljc1BvaW50PiB7CiBwdWJsaWM6CiAgICAgU1ZHUG9p
bnRMaXN0KCkgeyB9CiAKQEAgLTQyLDcgKzQyLDcgQEAKIHRlbXBsYXRlPD4KIHN0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdQb2ludExpc3Q+IHsKICAgICBzdGF0aWMgU1ZHUG9pbnRMaXN0IGlu
aXRpYWxWYWx1ZSgpIHsgcmV0dXJuIFNWR1BvaW50TGlzdCgpOyB9Ci0gICAgdHlwZWRlZiBGbG9h
dFBvaW50IExpc3RJdGVtVHlwZTsKKyAgICB0eXBlZGVmIEdyYXBoaWNzUG9pbnQgTGlzdEl0ZW1U
eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAog
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw3ICs4Miw3IEBACiAKICAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0
YW5jZSo+JiBpbnN0YW5jZXNGb3JFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBib29sIGJvdW5kaW5n
Qm94KEZsb2F0UmVjdCYsIFNWR0xvY2F0YWJsZTo6U3R5bGVVcGRhdGVTdHJhdGVneSA9IFNWR0xv
Y2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgYm9vbCBib3VuZGluZ0JveChH
cmFwaGljc1JlY3QmLCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBTVkdMb2Nh
dGFibGU6OkFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRDdXJzb3JFbGVt
ZW50KFNWR0N1cnNvckVsZW1lbnQqKTsKICAgICB2b2lkIGN1cnNvckVsZW1lbnRSZW1vdmVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgcmV0dXJuIG9rOwog
fQogCi1ib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRQb2ludEF0TGVuZ3RoT2ZTVkdQYXRo
Qnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFtLCBmbG9hdCBsZW5ndGgsIEZsb2F0
UG9pbnQmIHBvaW50KQorYm9vbCBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6Z2V0UG9pbnRBdExlbmd0
aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qIHN0cmVhbSwgZmxvYXQgbGVu
Z3RoLCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBBU1NFUlQoc3RyZWFtKTsKICAgICBp
ZiAoc3RyZWFtLT5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgpAQCAtMTQyLDEzICsxNDIsMTMgQEAKICAgICBzZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OmNvbnRlbnRTdHlsZVR5cGVBdHRyLCB0eXBlKTsKIH0KIAotRmxvYXRSZWN0IFNW
R1NWR0VsZW1lbnQ6OnZpZXdwb3J0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTVkdFbGVtZW50
Ojp2aWV3cG9ydCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHZpZXdSZWN0YW5nbGU7CisgICAg
R3JhcGhpY3NSZWN0IHZpZXdSZWN0YW5nbGU7CiAgICAgaWYgKCFpc091dGVybW9zdFNWRygpKQot
ICAgICAgICB2aWV3UmVjdGFuZ2xlLnNldExvY2F0aW9uKEZsb2F0UG9pbnQoeCgpLnZhbHVlKHRo
aXMpLCB5KCkudmFsdWUodGhpcykpKTsKKyAgICAgICAgdmlld1JlY3RhbmdsZS5zZXRMb2NhdGlv
bihHcmFwaGljc1BvaW50KHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7CiAKLSAg
ICB2aWV3UmVjdGFuZ2xlLnNldFNpemUoRmxvYXRTaXplKHdpZHRoKCkudmFsdWUodGhpcyksIGhl
aWdodCgpLnZhbHVlKHRoaXMpKSk7ICAgIAorICAgIHZpZXdSZWN0YW5nbGUuc2V0U2l6ZShHcmFw
aGljc1NpemUod2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykpKTsgICAg
CiAgICAgcmV0dXJuIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld1JlY3RhbmdsZS53aWR0aCgp
LCB2aWV3UmVjdGFuZ2xlLmhlaWdodCgpKS5tYXBSZWN0KHZpZXdSZWN0YW5nbGUpOwogfQogCkBA
IC0yNDgsNyArMjQ4LDcgQEAKICAgICBmcmFtZS0+c2V0UGFnZVpvb21GYWN0b3Ioc2NhbGUpOwog
fQogCi12b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUcmFuc2xhdGUoY29uc3QgRmxvYXRQ
b2ludCYgdHJhbnNsYXRpb24pCit2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUcmFuc2xh
dGUoY29uc3QgR3JhcGhpY3NQb2ludCYgdHJhbnNsYXRpb24pCiB7CiAgICAgbV90cmFuc2xhdGlv
biA9IHRyYW5zbGF0aW9uOwogICAgIHVwZGF0ZUN1cnJlbnRUcmFuc2xhdGUoKTsKQEAgLTM4OSwx
OSArMzg5LDE5IEBACiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkK
IH0KIAotTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6OmdldEludGVyc2VjdGlvbkxpc3QoY29uc3Qg
RmxvYXRSZWN0JiwgU1ZHRWxlbWVudCopCitOb2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0SW50
ZXJzZWN0aW9uTGlzdChjb25zdCBHcmFwaGljc1JlY3QmLCBTVkdFbGVtZW50KikKIHsKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc0KQogICAgIHJldHVybiAwOwogfQog
Ci1Ob2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJl
Y3QmLCBTVkdFbGVtZW50KikKK05vZGVMaXN0KiBTVkdTVkdFbGVtZW50OjpnZXRFbmNsb3N1cmVM
aXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0VsZW1lbnQqKQogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzQpCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU1ZH
U1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK2Jvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVu
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICAvLyBUT0RPIDogdGFrZSBpbnRv
IGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAgICAgLy8gRklYTUU6IFdoeSBpcyBlbGVtZW50IGln
bm9yZWQ/PwpAQCAtNDA5LDcgKzQwOSw3IEBACiAgICAgcmV0dXJuIHJlY3QuaW50ZXJzZWN0cyhn
ZXRCQm94KCkpOwogfQogCi1ib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9zdXJlKFNWR0Vs
ZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIFNWR1NWR0VsZW1lbnQ6OmNoZWNr
RW5jbG9zdXJlKFNWR0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAg
Ly8gVE9ETyA6IHRha2UgaW50byBhY2NvdW50IHBvaW50ZXItZXZlbnRzPwogICAgIC8vIEZJWE1F
OiBXaHkgaXMgZWxlbWVudCBpZ25vcmVkPz8KQEAgLTQzOCw5ICs0MzgsOSBAQAogICAgIHJldHVy
biBTVkdBbmdsZSgpOwogfQogCi1GbG9hdFBvaW50IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1Bv
aW50KCkKK0dyYXBoaWNzUG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHUG9pbnQoKQogewot
ICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsKIH0K
IAogU1ZHTWF0cml4IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpCkBAIC00NDgsOSAr
NDQ4LDkgQEAKICAgICByZXR1cm4gU1ZHTWF0cml4KCk7CiB9CiAKLUZsb2F0UmVjdCBTVkdTVkdF
bGVtZW50OjpjcmVhdGVTVkdSZWN0KCkKK0dyYXBoaWNzUmVjdCBTVkdTVkdFbGVtZW50OjpjcmVh
dGVTVkdSZWN0KCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOwogfQogCiBTVkdUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHVHJh
bnNmb3JtKCkKQEAgLTQ3Niw3ICs0NzYsNyBAQAogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSBp
biBvdXIgQ1NTIHBhcmVudCBjb29yZGluYXRlIHNwYWNlCiAgICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggQ1NTIHRyYW5zZm9ybXMuCi0gICAgICAg
ICAgICBGbG9hdFBvaW50IGxvY2F0aW9uID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShGbG9h
dFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbG9jYXRp
b24gPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSwgZmFsc2UsIHRy
dWUpOwogCiAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIGhlcmUhIGxvY2FsVG9BYnNvbHV0ZSgp
IGluY2x1ZGVzIHRoZSB4L3kgb2Zmc2V0IGNvbWluZyBmcm9tIHRoZSB2aWV3Qm94VG9WaWV3VHJh
bnNmb3JtKCksIGJlY2F1c2UKICAgICAgICAgICAgIC8vIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9C
b3JkZXJCb3hUcmFuc2Zvcm0oKSAoY2FsbGVkIHRocm91Z2ggbWFwTG9jYWxUb0NvbnRhaW5lcigp
LCBjYWxsZWQgZnJvbSBsb2NhbFRvQWJzb2x1dGUoKSkKQEAgLTU2NiwxMiArNTY2LDEyIEBACiAg
ICAgcmV0dXJuICFwYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpOwogfQogCi1GbG9hdFJlY3Qg
U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBT
VkdTVkdFbGVtZW50OjpjdXJyZW50Vmlld0JveFJlY3QoKSBjb25zdAogewogICAgIGlmICh1c2VD
dXJyZW50VmlldygpKSB7CiAgICAgICAgIGlmIChTVkdWaWV3U3BlYyogdmlldyA9IGN1cnJlbnRW
aWV3KCkpIC8vIHdoYXQgaWYgd2Ugc2hvdWxkIHVzZSBpdCBidXQgaXQgaXMgbm90IHNldD8KICAg
ICAgICAgICAgIHJldHVybiB2aWV3LT52aWV3Qm94KCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogICAgIH0KIAogICAgIHJldHVy
biB2aWV3Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIlNWR0NpcmNs
ZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0
aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dEluc3RhbmNlLmgiCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICBpZiAocmFkaXVzIDw9IDApCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3goKS52YWx1
ZSh0aGlzKSAtIHJhZGl1cywgY3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgcmFkaXVzICogMiwg
cmFkaXVzICogMikpOworICAgIHBhdGguYWRkRWxsaXBzZShHcmFwaGljc1JlY3QoY3goKS52YWx1
ZSh0aGlzKSAtIHJhZGl1cywgY3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgcmFkaXVzICogMiwg
cmFkaXVzICogMikpOwogfQogCiBib29sIFNWR0NpcmNsZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2
ZUxlbmd0aHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9p
bnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQ
b2ludExpc3QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFBvaW50TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAKICAg
ICBpZiAoIWl0ZW1Db3VudCB8fCBpdGVtQ291bnQgIT0gdG9Qb2ludExpc3Quc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGl0ZW1Db3VudDsgKytu
KSB7Ci0gICAgICAgIEZsb2F0UG9pbnQmIHRvID0gdG9Qb2ludExpc3QuYXQobik7CisgICAgICAg
IEdyYXBoaWNzUG9pbnQmIHRvID0gdG9Qb2ludExpc3QuYXQobik7CiAgICAgICAgIHRvICs9IGZy
b21Qb2ludExpc3QuYXQobik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhCbGVuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxNCBAQAogICAgIGJvb2wgYmxl
bmRBcmNUb1NlZ21lbnQoKTsKIAogICAgIGZsb2F0IGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxv
YXQoZmxvYXQsIGZsb2F0LCBGbG9hdEJsZW5kTW9kZSk7Ci0gICAgRmxvYXRQb2ludCBibGVuZEFu
aW1hdGVkRmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBmcm9tLCBjb25zdCBGbG9hdFBvaW50
JiB0byk7CisgICAgR3JhcGhpY3NQb2ludCBibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChjb25z
dCBHcmFwaGljc1BvaW50JiBmcm9tLCBjb25zdCBHcmFwaGljc1BvaW50JiB0byk7CiAKICAgICBT
VkdQYXRoU291cmNlKiBtX2Zyb21Tb3VyY2U7CiAgICAgU1ZHUGF0aFNvdXJjZSogbV90b1NvdXJj
ZTsKICAgICBTVkdQYXRoQ29uc3VtZXIqIG1fY29uc3VtZXI7CiAKLSAgICBGbG9hdFBvaW50IG1f
ZnJvbUN1cnJlbnRQb2ludDsKLSAgICBGbG9hdFBvaW50IG1fdG9DdXJyZW50UG9pbnQ7CisgICAg
R3JhcGhpY3NQb2ludCBtX2Zyb21DdXJyZW50UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX3Rv
Q3VycmVudFBvaW50OwogICAgIAogICAgIFBhdGhDb29yZGluYXRlTW9kZSBtX2Zyb21Nb2RlOwog
ICAgIFBhdGhDb29yZGluYXRlTW9kZSBtX3RvTW9kZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw4ICs0MCw4IEBACiAKIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZFU3BvdExpZ2h0
RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIEZsb2F0UG9pbnQzRCBwb3MoeCgp
LCB5KCksIHooKSk7Ci0gICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvbihwb2ludHNBdFgoKSwgcG9p
bnRzQXRZKCksIHBvaW50c0F0WigpKTsKKyAgICBHcmFwaGljc1BvaW50M0QgcG9zKHgoKSwgeSgp
LCB6KCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBkaXJlY3Rpb24ocG9pbnRzQXRYKCksIHBvaW50
c0F0WSgpLCBwb2ludHNBdFooKSk7CiAKICAgICByZXR1cm4gU3BvdExpZ2h0U291cmNlOjpjcmVh
dGUocG9zLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQoKSwgbGltaXRpbmdDb25lQW5nbGUo
KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVk
ZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVu
dEluc3RhbmNlLmgiCkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICBpZiAoYXR0ck5hbWUgPT0gU1ZH
TmFtZXM6OnRhcmdldFlBdHRyKQogICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0VGFy
Z2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgoKSwgdGFyZ2V0WSgpKSk7CiAgICAgaWYgKGF0dHJO
YW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKLSAgICAgICByZXR1cm4gY29u
dm9sdmVNYXRyaXgtPnNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludChrZXJuZWxVbml0TGVu
Z3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpKSk7CisgICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0
cml4LT5zZXRLZXJuZWxVbml0TGVuZ3RoKEdyYXBoaWNzUG9pbnQoa2VybmVsVW5pdExlbmd0aFgo
KSwga2VybmVsVW5pdExlbmd0aFkoKSkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6
cHJlc2VydmVBbHBoYUF0dHIpCiAgICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0UHJl
c2VydmVBbHBoYShwcmVzZXJ2ZUFscGhhKCkpOwogCkBAIC0zMDcsNyArMzA3LDcgQEAKICAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmls
dGVyLAogICAgICAgICAgICAgICAgICAgICBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1
ZSksIGRpdmlzb3JWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgYmlhcygpLCBJbnRQb2ludCh0
YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksCi0gICAgICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFgoKSks
IHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgR3Jh
cGhpY3NQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpKSwgcHJl
c2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCku
YXBwZW5kKGlucHV0MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsNyBAQAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQog
I2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKICNpbmNsdWRl
ICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAtMTg5LDcgKzE4OSw3IEBA
CiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NPd25QdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QoRmxvYXRSZWN0KiByZWN0
KQorUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVj
dChHcmFwaGljc1JlY3QqIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJlY3QpOwogICAgIE93blB0cjxT
VkdBbmltYXRlZFR5cGU+IGFuaW1hdGVkVHlwZSA9IGFkb3B0UHRyKG5ldyBTVkdBbmltYXRlZFR5
cGUoQW5pbWF0ZWRSZWN0KSk7CkBAIC0yNzcsNyArMjc3LDcgQEAKICAgICByZXR1cm4gKm1fZGF0
YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogfQogCi1GbG9hdFJlY3QmIFNWR0FuaW1hdGVkVHlwZTo6
cmVjdCgpCitHcmFwaGljc1JlY3QmIFNWR0FuaW1hdGVkVHlwZTo6cmVjdCgpCiB7CiAgICAgQVNT
RVJUKG1fdHlwZSA9PSBBbmltYXRlZFJlY3QpOwogICAgIHJldHVybiAqbV9kYXRhLnJlY3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBTVkdQYXRoU2VnTGlzdEJ1
aWxkZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogI2lu
Y2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKQEAg
LTUxLDE4ICs1MSwxOCBAQAogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNu
Zy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwot
ICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0
aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3Vi
aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFw
aGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQ
YXRoKCk7CiAKICAgICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAg
IHZpcnR1YWwgdm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUp
OwogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0
aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBi
b29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50Jiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpOwogCiAgICAgU1ZHUGF0aEVsZW1lbnQqIG1fcGF0aEVsZW1lbnQ7CiAgICAgU1ZHUGF0
aFNlZ0xpc3QqIG1fcGF0aFNlZ0xpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk5LDcgKzY5OSw3IEBACiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJOb3QgYWxsb3dl
ZCB0byB1c2UgaW5kaXJlY3QgcmVmZXJlbmNlIGluIDxjbGlwLXBhdGg+Iik7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqPihuKS0+dG9DbGlwUGF0aChwYXRoKTsKLSAgICAgICAgICAgIHBhdGgudHJhbnNsYXRlKEZs
b2F0U2l6ZSh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSkpOworICAgICAgICAgICAg
cGF0aC50cmFuc2xhdGUoR3JhcGhpY3NTaXplKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRo
aXMpKSk7CiAgICAgICAgICAgICBwYXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3Jt
KCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1BhdHRlcm5B
dHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1BhdHRlcm5BdHRy
aWJ1dGVzLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1BhdHRlcm5B
dHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBTVkdMZW5n
dGggeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogICAgIFNWR0xlbmd0aCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBTVkdMZW5ndGggaGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oZWlnaHQ7IH0KLSAgICBGbG9hdFJlY3Qgdmlld0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld0JveDsgfQorICAgIEdyYXBoaWNzUmVjdCB2aWV3Qm94KCkgY29uc3QgeyByZXR1cm4gbV92
aWV3Qm94OyB9CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOyB9CiAgICAgYm9vbCBib3Vu
ZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsgfQogICAgIGJv
b2wgYm91bmRpbmdCb3hNb2RlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hN
b2RlQ29udGVudDsgfQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICBtX2hlaWdodFNldCA9IHRy
dWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Vmlld0JveChjb25zdCBGbG9hdFJlY3QmIHZh
bHVlKQorICAgIHZvaWQgc2V0Vmlld0JveChjb25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQogICAg
IHsKICAgICAgICAgbV92aWV3Qm94ID0gdmFsdWU7CiAgICAgICAgIG1fdmlld0JveFNldCA9IHRy
dWU7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICBTVkdMZW5ndGggbV95OwogICAgIFNWR0xlbmd0
aCBtX3dpZHRoOwogICAgIFNWR0xlbmd0aCBtX2hlaWdodDsKLSAgICBGbG9hdFJlY3QgbV92aWV3
Qm94OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdCb3g7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbyBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsK
ICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlQ29udGVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiAKIGJv
b2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50
IHRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFt
X3NvdXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC02OCw3ICs2OCw3IEBACiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VM
aW5lVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIEdyYXBo
aWNzUG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VMaW5lVG9TZWdt
ZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMTksOSArMTE5
LDkgQEAKIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQog
ewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZs
b2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAgR3Jh
cGhpY3NQb2ludCBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludDsKICAgICBp
ZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQocG9pbnQxLCBwb2ludDIsIHRh
cmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNDIsOCArMTQyLDggQEAK
IAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoKQog
ewotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludDsK
ICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQocG9pbnQy
LCB0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTU0LDcgKzE1NCw3
IEBACiAgICAgICAgIG1fY29udHJvbFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CiAKICAgICBpZiAo
bV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKLSAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2lu
dDEgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgcG9pbnQxLnNjYWxlKDIsIDIpOwogICAgICAg
ICBwb2ludDEubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9jb250cm9sUG9pbnQueSgpKTsK
ICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CkBAIC0xNzMsMTYg
KzE3MywxNiBAQAogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0
UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCB0YXJn
ZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KHBvaW50MSwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
bV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgbV9jb250
cm9sUG9pbnQgPSBwb2ludDE7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAg
ICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2ludC54KCksIDIgKiBtX2NvbnRyb2xQ
b2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAy
ICogbV9jb250cm9sUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9p
bnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsg
MiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIG1fY29udHJvbFBv
aW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewog
ICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVudFBvaW50LngoKSwgMiAqIG1fY3Vy
cmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIubW92ZSgzICogbV9jdXJyZW50UG9p
bnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiBi
b29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQog
ewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQ
b2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTQsMTEgKzIx
NCwxMSBAQAogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50OwogCiAgICAg
aWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7Ci0gICAgICAgIEZs
b2F0UG9pbnQgY3ViaWNQb2ludCA9IG1fY3VycmVudFBvaW50OworICAgICAgICBHcmFwaGljc1Bv
aW50IGN1YmljUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgY3ViaWNQb2ludC5zY2Fs
ZSgyLCAyKTsKICAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCksIC1t
X2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50MShtX2N1cnJlbnRQ
b2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50LnkoKSArIDIgKiBj
dWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50Lngo
KSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1YmljUG9pbnQu
eSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDEobV9jdXJyZW50UG9pbnQueCgpICsg
MiAqIGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55
KCkpOworICAgICAgICBHcmFwaGljc1BvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICog
Y3ViaWNQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CiAg
ICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewogICAgICAgICAgICAg
cG9pbnQyICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICAgICAgdGFyZ2V0UG9pbnQgKz0gbV9j
dXJyZW50UG9pbnQ7CkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICBmbG9hdCBhbmdsZTsKICAgICBi
b29sIGxhcmdlQXJjOwogICAgIGJvb2wgc3dlZXA7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dDsKKyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3VyY2UtPnBh
cnNlQXJjVG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJjLCBzd2VlcCwgdGFyZ2V0UG9p
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgIH0K
IAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewotICAg
ICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAgICBHcmFwaGlj
c1BvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpCiAgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQ
b2ludDsKICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKQEAgLTI4MCw5ICsy
ODAsOSBAQAogCiAgICAgbV9wYXRoUGFyc2luZ01vZGUgPSBwYXRoUGFyc2luZ01vZGU7CiAKLSAg
ICBtX2NvbnRyb2xQb2ludCA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX2N1cnJlbnRQb2ludCA9IEZs
b2F0UG9pbnQoKTsKLSAgICBtX3N1YlBhdGhQb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX2Nv
bnRyb2xQb2ludCA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICBtX2N1cnJlbnRQb2ludCA9IEdyYXBo
aWNzUG9pbnQoKTsKKyAgICBtX3N1YlBhdGhQb2ludCA9IEdyYXBoaWNzUG9pbnQoKTsKICAgICBt
X2Nsb3NlUGF0aCA9IHRydWU7CiAKICAgICAvLyBTa2lwIGFueSBsZWFkaW5nIHNwYWNlcy4KQEAg
LTQwMSwxNSArNDAxLDE1IEBACiAvLyBUaGlzIHdvcmtzIGJ5IGNvbnZlcnRpbmcgdGhlIFNWRyBh
cmMgdG8gInNpbXBsZSIgYmV6aWVycy4KIC8vIFBhcnRseSBhZGFwdGVkIGZyb20gTmlrbydzIGNv
ZGUgaW4ga2RlbGlicy9rZGVjb3JlL3N2Z2ljb25zLgogLy8gU2VlIGFsc28gU1ZHIGltcGxlbWVu
dGF0aW9uIG5vdGVzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvaW1wbG5vdGUuaHRtbCNBcmND
b252ZXJzaW9uRW5kcG9pbnRUb0NlbnRlcgotYm9vbCBTVkdQYXRoUGFyc2VyOjpkZWNvbXBvc2VB
cmNUb0N1YmljKGZsb2F0IGFuZ2xlLCBmbG9hdCByeCwgZmxvYXQgcnksIEZsb2F0UG9pbnQmIHBv
aW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZs
YWcpCitib29sIFNWR1BhdGhQYXJzZXI6OmRlY29tcG9zZUFyY1RvQ3ViaWMoZmxvYXQgYW5nbGUs
IGZsb2F0IHJ4LCBmbG9hdCByeSwgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50
JiBwb2ludDIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZykKIHsKLSAgICBGbG9h
dFNpemUgbWlkUG9pbnREaXN0YW5jZSA9IHBvaW50MSAtIHBvaW50MjsKKyAgICBHcmFwaGljc1Np
emUgbWlkUG9pbnREaXN0YW5jZSA9IHBvaW50MSAtIHBvaW50MjsKICAgICBtaWRQb2ludERpc3Rh
bmNlLnNjYWxlKDAuNWYpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBvaW50VHJhbnNmb3JtOwog
ICAgIHBvaW50VHJhbnNmb3JtLnJvdGF0ZSgtYW5nbGUpOwogCi0gICAgRmxvYXRQb2ludCB0cmFu
c2Zvcm1lZE1pZFBvaW50ID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludChtaWRQ
b2ludERpc3RhbmNlLndpZHRoKCksIG1pZFBvaW50RGlzdGFuY2UuaGVpZ2h0KCkpKTsKKyAgICBH
cmFwaGljc1BvaW50IHRyYW5zZm9ybWVkTWlkUG9pbnQgPSBwb2ludFRyYW5zZm9ybS5tYXBQb2lu
dChHcmFwaGljc1BvaW50KG1pZFBvaW50RGlzdGFuY2Uud2lkdGgoKSwgbWlkUG9pbnREaXN0YW5j
ZS5oZWlnaHQoKSkpOwogICAgIGZsb2F0IHNxdWFyZVJ4ID0gcnggKiByeDsKICAgICBmbG9hdCBz
cXVhcmVSeSA9IHJ5ICogcnk7CiAgICAgZmxvYXQgc3F1YXJlWCA9IHRyYW5zZm9ybWVkTWlkUG9p
bnQueCgpICogdHJhbnNmb3JtZWRNaWRQb2ludC54KCk7CkBAIC00MjksNyArNDI5LDcgQEAKIAog
ICAgIHBvaW50MSA9IHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KHBvaW50MSk7CiAgICAgcG9pbnQy
ID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQyKTsKLSAgICBGbG9hdFNpemUgZGVsdGEg
PSBwb2ludDIgLSBwb2ludDE7CisgICAgR3JhcGhpY3NTaXplIGRlbHRhID0gcG9pbnQyIC0gcG9p
bnQxOwogCiAgICAgZmxvYXQgZCA9IGRlbHRhLndpZHRoKCkgKiBkZWx0YS53aWR0aCgpICsgZGVs
dGEuaGVpZ2h0KCkgKiBkZWx0YS5oZWlnaHQoKTsKICAgICBmbG9hdCBzY2FsZUZhY3RvclNxdWFy
ZWQgPSBzdGQ6Om1heCgxIC8gZCAtIDAuMjVmLCAwLmYpOwpAQCAtNDM5LDcgKzQzOSw3IEBACiAg
ICAgICAgIHNjYWxlRmFjdG9yID0gLXNjYWxlRmFjdG9yOwogCiAgICAgZGVsdGEuc2NhbGUoc2Nh
bGVGYWN0b3IpOwotICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KDAuNWYg
KiAocG9pbnQxLngoKSArIHBvaW50Mi54KCkpIC0gZGVsdGEuaGVpZ2h0KCksCisgICAgR3JhcGhp
Y3NQb2ludCBjZW50ZXJQb2ludCA9IEdyYXBoaWNzUG9pbnQoMC41ZiAqIChwb2ludDEueCgpICsg
cG9pbnQyLngoKSkgLSBkZWx0YS5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjVmICogKHBvaW50MS55KCkgKyBwb2ludDIueSgpKSArIGRlbHRhLndp
ZHRoKCkpOwogCiAgICAgZmxvYXQgdGhldGExID0gYXRhbjJmKHBvaW50MS55KCkgLSBjZW50ZXJQ
b2ludC55KCksIHBvaW50MS54KCkgLSBjZW50ZXJQb2ludC54KCkpOwpAQCAtNDcwLDkgKzQ3MCw5
IEBACiAgICAgICAgIGZsb2F0IHNpbkVuZFRoZXRhID0gc2luZihlbmRUaGV0YSk7CiAgICAgICAg
IGZsb2F0IGNvc0VuZFRoZXRhID0gY29zZihlbmRUaGV0YSk7CiAKLSAgICAgICAgcG9pbnQxID0g
RmxvYXRQb2ludChjb3NTdGFydFRoZXRhIC0gdCAqIHNpblN0YXJ0VGhldGEsIHNpblN0YXJ0VGhl
dGEgKyB0ICogY29zU3RhcnRUaGV0YSk7CisgICAgICAgIHBvaW50MSA9IEdyYXBoaWNzUG9pbnQo
Y29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRhLCBzaW5TdGFydFRoZXRhICsgdCAqIGNv
c1N0YXJ0VGhldGEpOwogICAgICAgICBwb2ludDEubW92ZShjZW50ZXJQb2ludC54KCksIGNlbnRl
clBvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50
KGNvc0VuZFRoZXRhLCBzaW5FbmRUaGV0YSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0
UG9pbnQgPSBHcmFwaGljc1BvaW50KGNvc0VuZFRoZXRhLCBzaW5FbmRUaGV0YSk7CiAgICAgICAg
IHRhcmdldFBvaW50Lm1vdmUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkpOwogICAg
ICAgICBwb2ludDIgPSB0YXJnZXRQb2ludDsKICAgICAgICAgcG9pbnQyLm1vdmUodCAqIHNpbkVu
ZFRoZXRhLCAtdCAqIGNvc0VuZFRoZXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU2VnTGlzdFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjZGVmaW5lIFNWR1BhdGhTZWdMaXN0U291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRl
ICJTVkdQYXRoU2VnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKICNpbmNsdWRlICJT
VkdQYXRoU291cmNlLmgiCkBAIC00NSwxNSArNDUsMTUgQEAKICAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpOwogICAgIHZpcnR1YWwgU1ZHUGF0aFNl
Z1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpOwogCi0gICAgdmlydHVhbCBib29sIHBh
cnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlTGlu
ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlTW92ZVRvU2Vn
bWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvU2VnbWVu
dChHcmFwaGljc1BvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9yaXpvbnRh
bFNlZ21lbnQoZmxvYXQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9WZXJ0aWNhbFNl
Z21lbnQoZmxvYXQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50
KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9v
bCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQm
KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBv
aW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNU
b1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50
Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChHcmFwaGljc1Bv
aW50JiwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1Bv
aW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3Jh
cGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2
ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBi
b29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29s
JiwgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgY29uc3QgU1ZHUGF0aFNlZ0xpc3QmIG1fcGF0aFNl
Z0xpc3Q7CiAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IG1fc2VnbWVudDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjUsNyArMzY1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0g
ci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgcmV0dXJuIGFic1Bvcy54KCk7CiB9CiAKQEAgLTM3
Niw3ICszNzYsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBy
LT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICByZXR1cm4gYWJzUG9zLnkoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgcmV0dXJuIFBhdGgoKTsKICAgICAKICAgICAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICBG
bG9hdFBvaW50IGFic1BvcyA9IG9iai0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQ
b2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgpOwogCiAgICAgLy8gRGVmYXVsdCBz
aG91bGQgZGVmYXVsdCB0byB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmluZyBvYmplY3QuCiAgICAg
SW50U2l6ZSBzaXplID0gbV9sYXN0U2l6ZTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICBw
LnRyYW5zZm9ybSh6b29tVHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBwLnRyYW5zbGF0ZShhYnNQ
b3MgLSBGbG9hdFBvaW50KCkpOworICAgIHAudHJhbnNsYXRlKGFic1BvcyAtIEdyYXBoaWNzUG9p
bnQoKSk7CiAgICAgcmV0dXJuIHA7CiB9CiAgICAgCkBAIC0xNDcsOSArMTQ3LDkgQEAKICAgICAg
ICAgY2FzZSBQb2x5OgogICAgICAgICAgICAgaWYgKG1fY29vcmRzTGVuID49IDYpIHsKICAgICAg
ICAgICAgICAgICBpbnQgbnVtUG9pbnRzID0gbV9jb29yZHNMZW4gLyAyOwotICAgICAgICAgICAg
ICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQobV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRo
KSwgbV9jb29yZHNbMV0uY2FsY01pblZhbHVlKGhlaWdodCkpKTsKKyAgICAgICAgICAgICAgICBw
YXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCks
IG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7CiAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludChtX2Nvb3Jkc1tpICogMl0uY2FsY01pblZhbHVlKHdpZHRo
KSwgbV9jb29yZHNbaSAqIDIgKyAxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSkpOworICAgICAgICAg
ICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KG1fY29vcmRzW2kgKiAyXS5j
YWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1tpICogMiArIDFdLmNhbGNNaW5WYWx1ZShoZWln
aHQpKSk7CiAgICAgICAgICAgICAgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICBp
ZiAobV9jb29yZHNMZW4gPj0gMykgewogICAgICAgICAgICAgICAgIExlbmd0aCByYWRpdXMgPSBt
X2Nvb3Jkc1syXTsKICAgICAgICAgICAgICAgICBpbnQgciA9IG1pbihyYWRpdXMuY2FsY01pblZh
bHVlKHdpZHRoKSwgcmFkaXVzLmNhbGNNaW5WYWx1ZShoZWlnaHQpKTsKLSAgICAgICAgICAgICAg
ICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0
aCkgLSByLCBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSAtIHIsIDIgKiByLCAyICog
cikpOworICAgICAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShHcmFwaGljc1JlY3QobV9jb29y
ZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSAtIHIsIG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZSho
ZWlnaHQpIC0gciwgMiAqIHIsIDIgKiByKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBSZWN0OgpAQCAtMTY2LDExICsxNjYsMTEgQEAKICAgICAgICAg
ICAgICAgICBpbnQgeTAgPSBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KTsKICAgICAg
ICAgICAgICAgICBpbnQgeDEgPSBtX2Nvb3Jkc1syXS5jYWxjTWluVmFsdWUod2lkdGgpOwogICAg
ICAgICAgICAgICAgIGludCB5MSA9IG1fY29vcmRzWzNdLmNhbGNNaW5WYWx1ZShoZWlnaHQpOwot
ICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5
MSAtIHkwKSk7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KEdyYXBoaWNzUmVjdCh4MCwg
eTAsIHgxIC0geDAsIHkxIC0geTApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIERlZmF1bHQ6Ci0gICAgICAgICAgICBwYXRoLmFkZFJlY3QoRmxvYXRS
ZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgIHBhdGguYWRkUmVjdChHcmFw
aGljc1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgVW5rbm93bjoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
OCw3ICsxMjgsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgcHJvYmFibHkgcGFzcyB0cnVlIGZvciB1c2VUcmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQg
YWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludChz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWCgpLCBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBv
c2l0aW9uID0gcmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChHcmFwaGljc1BvaW50KHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldmVudCktPnBhZ2VYKCksIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQq
PihldmVudCktPnBhZ2VZKCkpKTsKICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRpb24ueCgpOwog
ICAgIGludCB5ID0gYWJzb2x1dGVQb3NpdGlvbi55KCk7CiAgICAgdXJsICs9ICI/IjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDMsMTMgKzIwMywxMyBAQAogICAgIHJldHVybiAwOwogfQogCi12b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpZERyYXcoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIgb3VyIGltYWdlIHNuYXBzaG90IGlmIHdl
IGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3goKSkgewotICAg
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKLSAgICAgICAg
RmxvYXRSZWN0IHIgPSBtYXBSZWN0KHJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKSwgZGVzdFJlY3QpOworICAgICAgICBHcmFwaGljc1JlY3QgZGVz
dFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHIgPSBt
YXBSZWN0KHJlY3QsIEdyYXBoaWNzUmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhl
aWdodCgpKSwgZGVzdFJlY3QpOwogICAgICAgICByLmludGVyc2VjdChkZXN0UmVjdCk7CiAgICAg
ICAgIGlmIChyLmlzRW1wdHkoKSB8fCBtX2RpcnR5UmVjdC5jb250YWlucyhyKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTI2NSw3ICsyNjUsNyBAQAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICAvLyBDbGVhciB0aGUgZGlydHkgcmVjdAotICAgIG1f
ZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9kaXJ0eVJlY3QgPSBHcmFwaGljc1JlY3Qo
KTsKIAogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTM3MSw3ICszNzEsNyBAQAogI2VuZGlmCiB9CiAKLUludFJlY3QgSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsUmVj
dCkgY29uc3QKK0ludFJlY3QgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZp
Y2UoY29uc3QgR3JhcGhpY3NSZWN0JiBsb2dpY2FsUmVjdCkgY29uc3QKIHsKICAgICAvLyBQcmV2
ZW50IHVuZGVyL292ZXJmbG93IGJ5IGVuc3VyaW5nIHRoZSByZWN0J3MgYm91bmRzIHN0YXkgd2l0
aGluIGludGVnZXItZXhwcmVzc2libGUgcmFuZ2UKICAgICBpbnQgbGVmdCA9IGNsYW1wVG9JbnRl
Z2VyKGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3RvcikpOwpAQCAtMzgy
LDcgKzM4Miw3IEBACiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQobGVmdCwgdG9wKSwgY29u
dmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiB9CiAK
LUludFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkgY29uc3QKK0ludFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6
OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgR3JhcGhpY3NTaXplJiBsb2dpY2FsU2l6ZSkg
Y29uc3QKIHsKICAgICAvLyBQcmV2ZW50IG92ZXJmbG93IGJ5IGVuc3VyaW5nIHRoZSByZWN0J3Mg
Ym91bmRzIHN0YXkgd2l0aGluIGludGVnZXItZXhwcmVzc2libGUgcmFuZ2UKICAgICBmbG9hdCB3
aWR0aCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKGxvZ2ljYWxTaXplLndpZHRoKCkgKiBtX3BhZ2VT
Y2FsZUZhY3RvcikpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiAKICAgICBtX2hhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlciA9IHRydWU7CiAKLSAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKHdpZHRoKCksIGhl
aWdodCgpKTsKKyAgICBHcmFwaGljc1NpemUgdW5zY2FsZWRTaXplKHdpZHRoKCksIGhlaWdodCgp
KTsKICAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6
ZSk7CiAgICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUuaGVpZ2h0KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTQzOSw3ICs0MzksNyBAQAogICAgIC8vIHdoZXJlIEltYWdlQnVmZmVyOjpjcmVh
dGUoKSByZXR1cm5zIDAsIGhvd2V2ZXIgd2UgY291bGQgc3RpbGwgYmUgbG93IG9uIG1lbW9yeS4K
ICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2ltYWdlQnVm
ZmVyLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZShzaXplLndpZHRoKCkgLyB1bnNjYWxlZFNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAvIHVuc2NhbGVkU2l6ZS5oZWlnaHQoKSkpOworICAg
IG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoR3JhcGhpY3NTaXplKHNpemUud2lkdGgo
KSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhl
aWdodCgpKSk7CiAgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyh0cnVlKTsKICAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoRGVmYXVsdEludGVycG9sYXRpb25RdWFsaXR5KTsKIApAQCAt
NDg3LDcgKzQ4Nyw3IEBACiBBZmZpbmVUcmFuc2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VU
cmFuc2Zvcm0oKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7
Ci0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgR3Jh
cGhpY3NTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgSW50U2l6ZSBz
aXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNpemUpOwogICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgaWYgKHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgSFRNTENhbnZhc0VsZW1lbnRfaAog
I2RlZmluZSBIVE1MQ2FudmFzRWxlbWVudF9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKIApAQCAtNTUsNyArNTUsNyBAQAogcHVibGljOgogICAgIHZpcnR1YWwg
fkNhbnZhc09ic2VydmVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChI
VE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgY2hhbmdlZFJlY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEdy
YXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2FudmFzUmVz
aXplZChIVE1MQ2FudmFzRWxlbWVudCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2FudmFzRGVz
dHJveWVkKEhUTUxDYW52YXNFbGVtZW50KikgPSAwOwogfTsKQEAgLTk1LDcgKzk1LDcgQEAKICAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAsIGVjKTsgfQogCiAgICAgLy8gVXNl
ZCBmb3IgcmVuZGVyaW5nCi0gICAgdm9pZCBkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IHZvaWQgZGlkRHJhdyhjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0g
ZmFsc2UpOwogCkBAIC0xMTEsOCArMTExLDggQEAKICAgICB2b2lkIG1ha2VQcmVzZW50YXRpb25D
b3B5KCk7CiAgICAgdm9pZCBjbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKIAotICAgIEludFJlY3Qg
Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBJbnRT
aXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAg
SW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0
OworICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBHcmFwaGljc1NpemUm
KSBjb25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRUb1ZhbGlkRGV2aWNlU2l6ZShmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0KSBjb25zdDsKIAogICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbigpIGNvbnN0OwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgYm9vbCBtX3JlbmRlcmVySXND
YW52YXM7CiAKICAgICBib29sIG1faWdub3JlUmVzZXQ7Ci0gICAgRmxvYXRSZWN0IG1fZGlydHlS
ZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX2RpcnR5UmVjdDsKIAogICAgIGZsb2F0IG1fcGFnZVNj
YWxlRmFjdG9yOwogICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaWZuZGVmIFNsaWRlclRodW1iRWxlbWVudF9o
CiAjZGVmaW5lIFNsaWRlclRodW1iRWxlbWVudF9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMu
aCIKQEAgLTQzLDcgKzQzLDcgQEAKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgSFRNTElucHV0
RWxlbWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNz
UG9pbnQ7CiAKIGNsYXNzIFNsaWRlclRodW1iRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVu
dCB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTA1LDcgKzUwNSw3IEBACiAgICAgZWxzZSB7CiAjZW5kaWYKICAgICAgICAgaWYgKCFt
X21hcmtlZENhbnZhc0RpcnR5KQotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXcoRmxvYXRS
ZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAg
ICAgICAgIGNhbnZhcygpLT5kaWREcmF3KEdyYXBoaWNzUmVjdCgwLCAwLCBjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBA
QAogCiAgICAgY2xhc3MgQ2FudmFzR3JhZGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNH
cmFkaWVudD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
R3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYg
cDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29u
c3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0dyYWRpZW50KHAwLCBwMSkp
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBj
cmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBw
MSwgZmxvYXQgcjEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBj
cmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwMSwgZmxvYXQgcjEpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQpAQCAtNTgs
OCArNTgsOCBAQAogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBDYW52YXNHcmFkaWVu
dChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOwotICAgICAgICBD
YW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBmbG9hdCByMSk7CisgICAgICAgIENhbnZhc0dyYWRpZW50KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSk7CisgICAgICAgIENhbnZhc0dy
YWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDEsIGZsb2F0IHIxKTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4g
bV9ncmFkaWVudDsKICAgICAgICAgYm9vbCBtX2Rhc2hiYXJkQ29tcGF0aWJpbGl0eU1vZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ1LDcgKzM0NSw3IEBACiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0QWxsQXR0
cmlidXRlc1RvRGVmYXVsdCgpCiB7CiAgICAgc3RhdGUoKS5tX2dsb2JhbEFscGhhID0gMTsKLSAg
ICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgc3RhdGUoKS5tX3No
YWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0g
MDsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAg
c3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7CkBAIC0zNTQs
NyArMzU0LDcgQEAKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnRleHQtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5zZXRMZWdhY3lTaGFkb3coR3Jh
cGhpY3NTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7
CiAgICAgY29udGV4dC0+c2V0QWxwaGEoMSk7CiAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogfQpAQCAtNTkxLDcgKzU5MSw3IEBACiAgICAg
fQogCiAgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKLSAgICBjLT5zY2Fs
ZShGbG9hdFNpemUoc3gsIHN5KSk7CisgICAgYy0+c2NhbGUoR3JhcGhpY3NTaXplKHN4LCBzeSkp
OwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3Jt
KDEuMCAvIHN4LCAxLjAgLyBzeSkpOwogfQogCkBAIC03NzcsNyArNzc3LDcgQEAKICAgICBpZiAo
bV9wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJvdW5k
UmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRSZWN0
ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwogICAgIGlmIChib3VuZFJlY3Qud2lkdGgoKSB8fCBi
b3VuZFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKIH0KQEAg
LTc4OCw3ICs3ODgsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFzdGF0ZSgpLm1faW52
ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2lu
dCh4LCB5KSk7CisgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KHgsIHkpKTsKIH0KIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyhmbG9hdCB4LCBmbG9hdCB5KQpA
QCAtNzk4LDExICs3OTgsMTEgQEAKICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHAxID0gRmxvYXRQb2ludCh4LCB5KTsK
KyAgICBHcmFwaGljc1BvaW50IHAxID0gR3JhcGhpY3NQb2ludCh4LCB5KTsKICAgICBpZiAoIW1f
cGF0aC5oYXNDdXJyZW50UG9pbnQoKSkKICAgICAgICAgbV9wYXRoLm1vdmVUbyhwMSk7CiAgICAg
ZWxzZSBpZiAocDEgIT0gbV9wYXRoLmN1cnJlbnRQb2ludCgpKQotICAgICAgICBtX3BhdGguYWRk
TGluZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworICAgICAgICBtX3BhdGguYWRkTGluZVRvKEdyYXBo
aWNzUG9pbnQoeCwgeSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cXVh
ZHJhdGljQ3VydmVUbyhmbG9hdCBjcHgsIGZsb2F0IGNweSwgZmxvYXQgeCwgZmxvYXQgeSkKQEAg
LTgxMiwxMSArODEyLDExIEBACiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghbV9wYXRoLmhhc0N1cnJlbnRQb2ludCgpKQotICAgICAg
ICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoY3B4LCBjcHkpKTsKKyAgICAgICAgbV9wYXRoLm1v
dmVUbyhHcmFwaGljc1BvaW50KGNweCwgY3B5KSk7CiAKLSAgICBGbG9hdFBvaW50IHAxID0gRmxv
YXRQb2ludCh4LCB5KTsKKyAgICBHcmFwaGljc1BvaW50IHAxID0gR3JhcGhpY3NQb2ludCh4LCB5
KTsKICAgICBpZiAocDEgIT0gbV9wYXRoLmN1cnJlbnRQb2ludCgpKQotICAgICAgICBtX3BhdGgu
YWRkUXVhZEN1cnZlVG8oRmxvYXRQb2ludChjcHgsIGNweSksIHAxKTsKKyAgICAgICAgbV9wYXRo
LmFkZFF1YWRDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQoY3B4LCBjcHkpLCBwMSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKGZsb2F0IGNwMXgsIGZsb2F0
IGNwMXksIGZsb2F0IGNwMngsIGZsb2F0IGNwMnksIGZsb2F0IHgsIGZsb2F0IHkpCkBAIC04MjYs
MTEgKzgyNiwxMSBAQAogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9w
YXRoLm1vdmVUbyhGbG9hdFBvaW50KGNwMXgsIGNwMXkpKTsKKyAgICAgICAgbV9wYXRoLm1vdmVU
byhHcmFwaGljc1BvaW50KGNwMXgsIGNwMXkpKTsKIAotICAgIEZsb2F0UG9pbnQgcDEgPSBGbG9h
dFBvaW50KHgsIHkpOworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBHcmFwaGljc1BvaW50KHgsIHkp
OwogICAgIGlmIChwMSAhPSBtX3BhdGguY3VycmVudFBvaW50KCkpCi0gICAgICAgIG1fcGF0aC5h
ZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3AxeCwgY3AxeSksIEZsb2F0UG9pbnQoY3AyeCwg
Y3AyeSksIHAxKTsKKyAgICAgICAgbV9wYXRoLmFkZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2lu
dChjcDF4LCBjcDF5KSwgR3JhcGhpY3NQb2ludChjcDJ4LCBjcDJ5KSwgcDEpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8oZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9h
dCB4MiwgZmxvYXQgeTIsIGZsb2F0IHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtODQ3LDggKzg0
Nyw4IEBACiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRmxvYXRQb2ludCBwMSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKLSAgICBGbG9hdFBv
aW50IHAyID0gRmxvYXRQb2ludCh4MiwgeTIpOworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBHcmFw
aGljc1BvaW50KHgxLCB5MSk7CisgICAgR3JhcGhpY3NQb2ludCBwMiA9IEdyYXBoaWNzUG9pbnQo
eDIsIHkyKTsKIAogICAgIGlmICghbV9wYXRoLmhhc0N1cnJlbnRQb2ludCgpKQogICAgICAgICBt
X3BhdGgubW92ZVRvKHAxKTsKQEAgLTg3NywxNSArODc3LDE1IEBACiAKICAgICAvLyBJZiAnc2En
IGFuZCAnZWEnIGRpZmZlciBieSBtb3JlIHRoYW4gMlBpLCBqdXN0IGFkZCBhIGNpcmNsZSBzdGFy
dGluZy9lbmRpbmcgYXQgJ3NhJwogICAgIGlmIChhbnRpY2xvY2t3aXNlICYmIHNhIC0gZWEgPj0g
MiAqIHBpRmxvYXQpIHsKLSAgICAgICAgbV9wYXRoLmFkZEFyYyhGbG9hdFBvaW50KHgsIHkpLCBy
LCBzYSwgc2EgLSAyICogcGlGbG9hdCwgYW50aWNsb2Nrd2lzZSk7CisgICAgICAgIG1fcGF0aC5h
ZGRBcmMoR3JhcGhpY3NQb2ludCh4LCB5KSwgciwgc2EsIHNhIC0gMiAqIHBpRmxvYXQsIGFudGlj
bG9ja3dpc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghYW50aWNsb2Nrd2lz
ZSAmJiBlYSAtIHNhID49IDIgKiBwaUZsb2F0KSB7Ci0gICAgICAgIG1fcGF0aC5hZGRBcmMoRmxv
YXRQb2ludCh4LCB5KSwgciwgc2EsIHNhICsgMiAqIHBpRmxvYXQsIGFudGljbG9ja3dpc2UpOwor
ICAgICAgICBtX3BhdGguYWRkQXJjKEdyYXBoaWNzUG9pbnQoeCwgeSksIHIsIHNhLCBzYSArIDIg
KiBwaUZsb2F0LCBhbnRpY2xvY2t3aXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fcGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2EsIGVhLCBhbnRpY2xvY2t3aXNl
KTsKKyAgICBtX3BhdGguYWRkQXJjKEdyYXBoaWNzUG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50
aWNsb2Nrd2lzZSk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlUmVjdEZvckNhbnZhcyhmbG9h
dCYgeCwgZmxvYXQmIHksIGZsb2F0JiB3aWR0aCwgZmxvYXQmIGhlaWdodCkKQEAgLTkxOCwxMSAr
OTE4LDExIEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkg
ewotICAgICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworICAgICAgICBtX3Bh
dGgubW92ZVRvKEdyYXBoaWNzUG9pbnQoeCwgeSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9wYXRoLmFkZFJlY3QoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICBtX3BhdGguYWRkUmVjdChHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogfQog
CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtOTY0LDkgKzk2NCw5IEBACiAKICAg
ICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKICNpZiBQTEFURk9STShRVCkKLSAgICAgICAgRmxv
YXRSZWN0IGRpcnR5UmVjdCA9IG1fcGF0aC5wbGF0Zm9ybVBhdGgoKS5jb250cm9sUG9pbnRSZWN0
KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGgucGxhdGZvcm1QYXRo
KCkuY29udHJvbFBvaW50UmVjdCgpOwogI2Vsc2UKLSAgICAgICAgRmxvYXRSZWN0IGRpcnR5UmVj
dCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGRpcnR5UmVj
dCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKICNlbmRpZgogICAgICAgICAvLyBGYXN0IGFwcHJv
eGltYXRpb24gb2YgdGhlIHN0cm9rZSdzIGJvdW5kaW5nIHJlY3QuCiAgICAgICAgIC8vIFRoaXMg
eWllbGRzIGEgc2xpZ2h0bHkgb3ZlcnNpemVkIHJlY3QgYnV0IGlzIHZlcnkgZmFzdApAQCAtMTAw
Myw5ICsxMDAzLDkgQEAKICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHBvaW50KHgsIHkpOworICAgIEdyYXBo
aWNzUG9pbnQgcG9pbnQoeCwgeSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCku
bV90cmFuc2Zvcm07Ci0gICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmludmVy
c2UoKS5tYXBQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCB0cmFuc2Zvcm1lZFBvaW50
ID0gY3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CiAgICAgaWYgKCFpc2Zpbml0ZSh0cmFu
c2Zvcm1lZFBvaW50LngoKSkgfHwgIWlzZmluaXRlKHRyYW5zZm9ybWVkUG9pbnQueSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3BhdGguY29udGFpbnModHJhbnNmb3Jt
ZWRQb2ludCk7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVj
dCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOwogCiAgICAgc2F2ZSgpOwogICAgIHNldEFsbEF0dHJpYnV0ZXNUb0Rl
ZmF1bHQoKTsKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAgICAgaWYgKGdyYWRpZW50ICYmIGdyYWRp
ZW50LT5pc1plcm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCByZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpOwogCiAgICAgaWYgKHNob3VsZERpc3BsYXlUcmFuc3BhcmVuY3lFbHNld2hlcmUo
KSkKICAgICAgICAgZGlzcGxheVRyYW5zcGFyZW5jeUVsc2V3aGVyZTxJbnRSZWN0PihlbmNsb3Np
bmdJbnRSZWN0KHJlY3QpKTsKQEAgLTEwNzcsOSArMTA3Nyw5IEBACiAgICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKKyAgICBHcmFw
aGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3VuZGluZ1JlY3QuaW5mbGF0ZShs
aW5lV2lkdGggLyAyKTsKIAogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKQEAg
LTExMDgsNyArMTEwOCw3IEBACiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
aGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1cikKIHsKLSAgICBzdGF0
ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRl
KCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAgICAgc3Rh
dGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IENv
bG9yOjp0cmFuc3BhcmVudDsKICAgICBhcHBseVNoYWRvdygpOwpAQCAtMTExOSwxNCArMTExOSwx
NCBAQAogICAgIGlmICghcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKHN0YXRlKCkubV9zaGFkb3dD
b2xvciwgY29sb3IsIGNhbnZhcygpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGUoKS5t
X3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1f
c2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCku
bV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBhcHBseVNoYWRvdygpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQs
IGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCkKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zm
c2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZz
ZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0Js
dXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBMzJGcm9tRmxv
YXRzKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIDEuMGYpOwogCkBAIC0xMTM0LDcg
KzExMzQsNyBAQAogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYy0+c2V0TGVn
YWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVy
LCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGMtPnNl
dExlZ2FjeVNoYWRvdyhHcmFwaGljc1NpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hh
ZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBo
YSkKQEAgLTExNDUsMTkgKzExNDUsMTkgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RhdGUo
KS5tX3NoYWRvd0NvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBhbHBoYSk7Ci0g
ICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwog
ICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5t
X3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0
YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxv
YXQgYWxwaGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdp
ZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBzdGF0
ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlM
ZXZlbCwgZ3JheUxldmVsLCBhbHBoYSk7CiAKQEAgLTExNjUsMTIgKzExNjUsMTIgQEAKICAgICBp
ZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNp
emUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRv
d0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjLT5zZXRMZWdhY3lTaGFkb3coR3Jh
cGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCku
bV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxv
YXQgYmx1ciwgZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBzdGF0
ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRl
KCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAgICAgc3Rh
dGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IG1h
a2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogCkBAIC0xMTc4LDEyICsxMTc4LDEyIEBA
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3co
RmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCku
bV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hh
ZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBz
dGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0
IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBo
ZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBzdGF0ZSgpLm1f
c2hhZG93Q29sb3IgPSBtYWtlUkdCQUZyb21DTVlLQShjLCBtLCB5LCBrLCBhKTsKIApAQCAtMTE5
OCwxMyArMTE5OCwxMyBAQAogICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihkYy0+cGxh
dGZvcm1Db250ZXh0KCksIGFkanVzdGVkU2hhZG93U2l6ZSh3aWR0aCwgLWhlaWdodCksIGJsdXIs
IHNoYWRvd0NvbG9yKTsKICAgICBDR0NvbG9yUmVsZWFzZShzaGFkb3dDb2xvcik7CiAjZWxzZQot
ICAgIGRjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgYmx1ciwg
c3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBkYy0+c2V0
TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdodCksIGJsdXIsIHN0YXRlKCku
bV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAjZW5kaWYKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBzdGF0ZSgpLm1f
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9
IEdyYXBoaWNzU2l6ZSgpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gMDsKICAgICBzdGF0
ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAgYXBwbHlTaGFkb3co
KTsKQEAgLTEyMTgsNyArMTIxOCw3IEBACiAKICAgICBmbG9hdCB3aWR0aCA9IHN0YXRlKCkubV9z
aGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLm1fc2hhZG93
T2Zmc2V0LmhlaWdodCgpOwotICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgs
IC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXpl
KHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9CiAKIHN0YXRpYyBJbnRTaXplIHNpemUoSFRN
TEltYWdlRWxlbWVudCogaW1hZ2UpCkBAIC0xMjM3LDkgKzEyMzcsOSBAQAogfQogI2VuZGlmCiAK
LXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorc3RhdGljIGlubGluZSBHcmFwaGljc1JlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtaW4ocmVjdC54KCksIHJl
Y3QubWF4WCgpKSwKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5t
YXhYKCkpLAogICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4
KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgp
LCAtcmVjdC5oZWlnaHQoKSkpOwpAQCAtMTI2Myw3ICsxMjYzLDcgQEAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBJbnRTaXplIHMgPSBzaXplKGltYWdlKTsKLSAgICBkcmF3SW1hZ2UoaW1h
Z2UsIEZsb2F0UmVjdCgwLCAwLCBzLndpZHRoKCksIHMuaGVpZ2h0KCkpLCBGbG9hdFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEdyYXBoaWNzUmVj
dCgwLCAwLCBzLndpZHRoKCksIHMuaGVpZ2h0KCkpLCBHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCksIGVjKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJ
bWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwKQEAgLTEyNzQsMTUgKzEyNzQsMTUgQEAKICAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIEZsb2F0UmVjdChk
eCwgZHksIGR3LCBkaCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEdyYXBoaWNzUmVjdChz
eCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKIH0KIAot
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRy
YXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGRyYXdJbWFnZShpbWFnZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3RhdGUoKS5tX2dsb2JhbENv
bXBvc2l0ZSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQ29tcG9zaXRlT3BlcmF0b3ImIG9wLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2Uo
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBDb21wb3NpdGVPcGVyYXRvciYgb3AsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghaW1hZ2UpIHsKICAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKQEAgLTEzMDEsMTAgKzEzMDEsMTAgQEAKICAgICBpZiAoIWltYWdlLT5j
b21wbGV0ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFNy
Y1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3QpOwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVk
RHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1h
bGl6ZWRTcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qg
bm9ybWFsaXplZERzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwogCi0gICAgRmxvYXRS
ZWN0IGltYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoaW1hZ2UpKTsKKyAg
ICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0ID0gR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwg
c2l6ZShpbWFnZSkpOwogICAgIGlmICghaW1hZ2VSZWN0LmNvbnRhaW5zKG5vcm1hbGl6ZWRTcmNS
ZWN0KSB8fCAhc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKSB7CiAgICAgICAg
IGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTEzNDIsMjUgKzEzNDIs
MjUgQEAKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBkcmF3SW1hZ2UoY2FudmFzLCBGbG9hdFJlY3QoMCwgMCwgY2FudmFzLT53aWR0
aCgpLCBjYW52YXMtPmhlaWdodCgpKSwgRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBl
Yyk7CisgICAgZHJhd0ltYWdlKGNhbnZhcywgR3JhcGhpY3NSZWN0KDAsIDAsIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSksIEdyYXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KSwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMsCiAgICAgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBz
dywgZmxvYXQgc2gsCiAgICAgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdChz
eCwgc3ksIHN3LCBzaCksIEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKKyAgICBkcmF3
SW1hZ2UoY2FudmFzLCBHcmFwaGljc1JlY3Qoc3gsIHN5LCBzdywgc2gpLCBHcmFwaGljc1JlY3Qo
ZHgsIGR5LCBkdywgZGgpLCBlYyk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqIHNvdXJjZUNhbnZhcywgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LAotICAgIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52
YXNFbGVtZW50KiBzb3VyY2VDYW52YXMsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKKyAg
ICBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGlmICghc291cmNlQ2FudmFzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGbG9hdFJlY3Qgc3JjQ2FudmFzUmVjdCA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIHNvdXJjZUNhbnZhcy0+c2l6ZSgpKTsKKyAgICBHcmFwaGlj
c1JlY3Qgc3JjQ2FudmFzUmVjdCA9IEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIHNvdXJj
ZUNhbnZhcy0+c2l6ZSgpKTsKIAogICAgIGlmICghc3JjQ2FudmFzUmVjdC53aWR0aCgpIHx8ICFz
cmNDYW52YXNSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CkBAIC0xNDI0LDE3ICsxNDI0LDE3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSW50
U2l6ZSBzID0gc2l6ZSh2aWRlbyk7Ci0gICAgZHJhd0ltYWdlKHZpZGVvLCBGbG9hdFJlY3QoMCwg
MCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
LCBlYyk7CisgICAgZHJhd0ltYWdlKHZpZGVvLCBHcmFwaGljc1JlY3QoMCwgMCwgcy53aWR0aCgp
LCBzLmhlaWdodCgpKSwgR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sCiAgICAgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gs
CiAgICAgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIGRyYXdJbWFnZSh2aWRlbywgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNo
KSwgRmxvYXRSZWN0KGR4LCBkeSwgZHcsIGRoKSwgZWMpOworICAgIGRyYXdJbWFnZSh2aWRlbywg
R3JhcGhpY3NSZWN0KHN4LCBzeSwgc3csIHNoKSwgR3JhcGhpY3NSZWN0KGR4LCBkeSwgZHcsIGRo
KSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXZpZGVvKSB7CkBA
IC0xNDQ3LDcgKzE0NDcsNyBAQAogICAgIGlmICh2aWRlby0+cmVhZHlTdGF0ZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORyB8fCB2aWRlby0+cmVhZHlTdGF0ZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OkhBVkVfTUVUQURBVEEpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UmVjdCB2aWRlb1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKHZpZGVvKSk7Cisg
ICAgR3JhcGhpY3NSZWN0IHZpZGVvUmVjdCA9IEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCks
IHNpemUodmlkZW8pKTsKICAgICBpZiAoIXZpZGVvUmVjdC5jb250YWlucyhub3JtYWxpemVSZWN0
KHNyY1JlY3QpKSB8fCAhc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKSB7CiAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjcsNyAr
MTQ2Nyw3IEBACiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjKTsK
ICAgICBjLT5jbGlwKGRzdFJlY3QpOwogICAgIGMtPnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0
UmVjdC55KCkpOwotICAgIGMtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0LndpZHRoKCkgLyBzcmNS
ZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKSk7CisgICAg
Yy0+c2NhbGUoR3JhcGhpY3NTaXplKGRzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKSwg
ZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKICAgICBjLT50cmFuc2xhdGUo
LXNyY1JlY3QueCgpLCAtc3JjUmVjdC55KCkpOwogICAgIHZpZGVvLT5wYWludEN1cnJlbnRGcmFt
ZUluQ29udGV4dChjLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUodmlkZW8pKSk7CiAgICAgc3Rh
dGVTYXZlci5yZXN0b3JlKCk7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogICAgICAgICBvcCA9IENv
bXBvc2l0ZVNvdXJjZU92ZXI7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGRyYXdJbWFn
ZShpbWFnZSwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgRmxvYXRSZWN0KGR4LCBkeSwgZHcs
IGRoKSwgb3AsIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEdyYXBoaWNzUmVjdChzeCwgc3ks
IHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCksIG9wLCBlYyk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKQEAgLTE1
MTEsNyArMTUxMSw3IEBACiB7CiAgICAgQVNTRVJUKHNob3VsZERpc3BsYXlUcmFuc3BhcmVuY3lF
bHNld2hlcmUoKSk7CiAKLSAgICBGbG9hdFJlY3QgY2FudmFzUmVjdCgwLCAwLCBjYW52YXMoKS0+
d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3QgY2FudmFzUmVj
dCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKICAgICBjYW52
YXNSZWN0ID0gc3RhdGUoKS5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChjYW52YXNSZWN0
KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CkBAIC0xNTM5
LDcgKzE1MzksNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8Q2Fu
dmFzR3JhZGllbnQ+IGdyYWRpZW50ID0gQ2FudmFzR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50
KHgwLCB5MCksIEZsb2F0UG9pbnQoeDEsIHkxKSk7CisgICAgUmVmUHRyPENhbnZhc0dyYWRpZW50
PiBncmFkaWVudCA9IENhbnZhc0dyYWRpZW50OjpjcmVhdGUoR3JhcGhpY3NQb2ludCh4MCwgeTAp
LCBHcmFwaGljc1BvaW50KHgxLCB5MSkpOwogICAgIHByZXBhcmVHcmFkaWVudEZvckRhc2hib2Fy
ZChncmFkaWVudC5nZXQoKSk7CiAgICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKIH0KQEAg
LTE1NTYsNyArMTU1Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0
cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0
UG9pbnQoeDAsIHkwKSwgcjAsIEZsb2F0UG9pbnQoeDEsIHkxKSwgcjEpOworICAgIFJlZlB0cjxD
YW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEdyYXBoaWNz
UG9pbnQoeDAsIHkwKSwgcjAsIEdyYXBoaWNzUG9pbnQoeDEsIHkxKSwgcjEpOwogICAgIHByZXBh
cmVHcmFkaWVudEZvckRhc2hib2FyZChncmFkaWVudC5nZXQoKSk7CiAgICAgcmV0dXJuIGdyYWRp
ZW50LnJlbGVhc2UoKTsKIH0KQEAgLTE2MDUsNyArMTYwNSw3IEBACiAgICAgcmV0dXJuIENhbnZh
c1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmNvcGllZEltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFks
IGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEdyYXBoaWNzUmVjdCYgciwg
dW5zaWduZWQgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29u
dGV4dCgpOwogICAgIGlmICghYykKQEAgLTE2MTMsNyArMTYxMyw3IEBACiAgICAgaWYgKCFzdGF0
ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGRp
cnR5UmVjdCA9IHI7CisgICAgR3JhcGhpY3NSZWN0IGRpcnR5UmVjdCA9IHI7CiAgICAgaWYgKG9w
dGlvbnMgJiBDYW52YXNEaWREcmF3QXBwbHlUcmFuc2Zvcm0pIHsKICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CiAgICAgICAgIGRpcnR5UmVjdCA9IGN0
bS5tYXBSZWN0KHIpOwpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKIAogICAgIGlmIChvcHRpb25zICYg
Q2FudmFzRGlkRHJhd0FwcGx5U2hhZG93ICYmIGFscGhhQ2hhbm5lbChzdGF0ZSgpLm1fc2hhZG93
Q29sb3IpKSB7CiAgICAgICAgIC8vIFRoZSBzaGFkb3cgZ2V0cyBhcHBsaWVkIGFmdGVyIHRyYW5z
Zm9ybWF0aW9uCi0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KGRpcnR5UmVjdCk7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0KGRpcnR5UmVjdCk7CiAgICAgICAgIHNoYWRvd1Jl
Y3QubW92ZShzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hhZG93UmVjdC5pbmZs
YXRlKHN0YXRlKCkubV9zaGFkb3dCbHVyKTsKICAgICAgICAgZGlydHlSZWN0LnVuaXRlKHNoYWRv
d1JlY3QpOwpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZShmYWJzKHN3KSwgZmFicyhzaCkpOworICAgIEdy
YXBoaWNzU2l6ZSB1bnNjYWxlZFNpemUoZmFicyhzdyksIGZhYnMoc2gpKTsKICAgICBJbnRTaXpl
IHNjYWxlZFNpemUgPSBjYW52YXMoKS0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNp
emUpOwogICAgIGlmIChzY2FsZWRTaXplLndpZHRoKCkgPCAxKQogICAgICAgICBzY2FsZWRTaXpl
LnNldFdpZHRoKDEpOwpAQCAtMTcxNSw3ICsxNzE1LDcgQEAKICAgICAgICAgc2ggPSAtc2g7CiAg
ICAgfQogICAgIAotICAgIEZsb2F0UmVjdCB1bnNjYWxlZFJlY3Qoc3gsIHN5LCBzdywgc2gpOwor
ICAgIEdyYXBoaWNzUmVjdCB1bnNjYWxlZFJlY3Qoc3gsIHN5LCBzdywgc2gpOwogICAgIEludFJl
Y3Qgc2NhbGVkUmVjdCA9IGNhbnZhcygpLT5jb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVk
UmVjdCk7CiAgICAgaWYgKHNjYWxlZFJlY3Qud2lkdGgoKSA8IDEpCiAgICAgICAgIHNjYWxlZFJl
Y3Quc2V0V2lkdGgoMSk7CkBAIC0xNzY3LDcgKzE3NjcsNyBAQAogICAgICAgICBkaXJ0eUhlaWdo
dCA9IC1kaXJ0eUhlaWdodDsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QoZGlydHlY
LCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKKyAgICBHcmFwaGljc1JlY3QgY2xp
cFJlY3QoZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKICAgICBjbGlw
UmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQo
KSkpOwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGlj
X2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGNsaXBSZWN0KTsKQEAgLTE5MTMsNyArMTkxMyw3IEBACiAgICAgVGV4dFJ1biB0ZXh0UnVuKHN0
cmluZywgbGVuZ3RoLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biwgZGlyZWN0aW9uLCBvdmVycmlkZSwgVGV4dFJ1bjo6Tm9Sb3VuZGluZyk7CiAKICAgICAvLyBE
cmF3IHRoZSBpdGVtIHRleHQgYXQgdGhlIGNvcnJlY3QgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBs
b2NhdGlvbih4LCB5KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2F0aW9uKHgsIHkpOwogICAgIHN3
aXRjaCAoc3RhdGUoKS5tX3RleHRCYXNlbGluZSkgewogICAgIGNhc2UgVG9wVGV4dEJhc2VsaW5l
OgogICAgIGNhc2UgSGFuZ2luZ1RleHRCYXNlbGluZToKQEAgLTE5NTIsNyArMTk1Miw3IEBACiAg
ICAgfQogCiAgICAgLy8gVGhlIHNsb3AgYnVpbHQgaW4gdG8gdGhpcyBtYXNrIHJlY3QgbWF0Y2hl
cyB0aGUgaGV1cmlzdGljIHVzZWQgaW4gRm9udENHV2luLmNwcCBmb3IgR0RJIHRleHQuCi0gICAg
RmxvYXRSZWN0IHRleHRSZWN0ID0gRmxvYXRSZWN0KGxvY2F0aW9uLngoKSAtIGZvbnRNZXRyaWNz
LmhlaWdodCgpIC8gMiwgbG9jYXRpb24ueSgpIC0gZm9udE1ldHJpY3MuYXNjZW50KCkgLSBmb250
TWV0cmljcy5saW5lR2FwKCksCisgICAgR3JhcGhpY3NSZWN0IHRleHRSZWN0ID0gR3JhcGhpY3NS
ZWN0KGxvY2F0aW9uLngoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpIC8gMiwgbG9jYXRpb24ueSgp
IC0gZm9udE1ldHJpY3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5saW5lR2FwKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICsgZm9udE1ldHJpY3MuaGVpZ2h0KCks
IGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkpOwogICAgIGlmICghZmlsbCkKICAgICAgICAgdGV4
dFJlY3QuaW5mbGF0ZShjLT5zdHJva2VUaGlja25lc3MoKSAvIDIpOwpAQCAtMjAwNiw3ICsyMDA2
LDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2hlbiBzdHJva2luZyB0ZXh0LCBwb2ludHkg
bWl0ZXJzIGNhbiBleHRlbmQgb3V0c2lkZSBvZiB0ZXh0UmVjdCwgc28gd2UKICAgICAgICAgLy8g
cHVudCBhbmQgZGlydHkgdGhlIHdob2xlIGNhbnZhcy4KLSAgICAgICAgZGlkRHJhdyhGbG9hdFJl
Y3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworICAgICAg
ICBkaWREcmF3KEdyYXBoaWNzUmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCkt
PmhlaWdodCgpKSk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2Fu
dmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBG
bG9hdFBvaW50JiBwMSkKK0NhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBHcmFw
aGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEpCiAgICAgOiBtX2dyYWRpZW50
KEdyYWRpZW50OjpjcmVhdGUocDAsIHAxKSkKICAgICAsIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5
TW9kZShmYWxzZSkKIHsKIH0KIAotQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0
IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIx
KQorQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAw
LCBmbG9hdCByMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxKQogICAgIDogbV9n
cmFkaWVudChHcmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKICAgICAsIG1fZGFzaGJh
cmRDb21wYXRpYmlsaXR5TW9kZShmYWxzZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiA5
MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NT
aXplLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNp
bmNsdWRlICJQYXRoLmgiCkBAIC00Niw3ICs0Niw3IEBACiBjbGFzcyBDYW52YXNHcmFkaWVudDsK
IGNsYXNzIENhbnZhc1BhdHRlcm47CiBjbGFzcyBDYW52YXNTdHlsZTsKLWNsYXNzIEZsb2F0UmVj
dDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhU
TUxDYW52YXNFbGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKQEAgLTE2OCwxNyArMTY4
LDE3IEBACiAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCosIGZsb2F0IHgsIGZs
b2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVt
ZW50KiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9h
dCBkdywgZmxvYXQgZGgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdJbWFnZShIVE1M
SW1hZ2VFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VF
bGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3Qm
IGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFz
RWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRy
YXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1M
Q2FudmFzRWxlbWVudCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLCBm
bG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9yJiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNv
bnN0IENvbXBvc2l0ZU9wZXJhdG9yJiwgRXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShWSURF
TykKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQg
eSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQq
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGZsb2F0IHN4LCBm
bG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3
LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRl
b0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1l
bnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
UmVjdCwgRXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICB2b2lkIGRyYXdJbWFnZUZyb21S
ZWN0KEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCBzeCA9IDAsIGZsb2F0IHN5ID0gMCwgZmxvYXQg
c3cgPSAwLCBmbG9hdCBzaCA9IDAsCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgICAgTGluZUNh
cCBtX2xpbmVDYXA7CiAgICAgICAgIExpbmVKb2luIG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0
IG1fbWl0ZXJMaW1pdDsKLSAgICAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OworICAgICAg
ICBHcmFwaGljc1NpemUgbV9zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGZsb2F0IG1fc2hhZG93Qmx1
cjsKICAgICAgICAgUkdCQTMyIG1fc2hhZG93Q29sb3I7CiAgICAgICAgIGZsb2F0IG1fZ2xvYmFs
QWxwaGE7CkBAIC0yNzUsNyArMjc1LDcgQEAKIAogICAgIHZvaWQgYXBwbHlTaGFkb3coKTsKIAot
ICAgIHZvaWQgZGlkRHJhdyhjb25zdCBGbG9hdFJlY3QmLCB1bnNpZ25lZCBvcHRpb25zID0gQ2Fu
dmFzRGlkRHJhd0FwcGx5QWxsKTsKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgR3JhcGhpY3NSZWN0
JiwgdW5zaWduZWQgb3B0aW9ucyA9IENhbnZhc0RpZERyYXdBcHBseUFsbCk7CiAKICAgICBHcmFw
aGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCIKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiB2b2lkIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIEZs
b2F0UmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3Qo
KTsKKyAgICBHcmFwaGljc1JlY3QgZnJhbWVSZWN0ID0gbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgp
LT53aW5kb3dSZWN0KCk7CiAgICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7CiAgICAgbV9mcm9udGVu
ZFBhZ2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogCiBuYW1lc3BhY2UgewogCi1Q
YXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQorUGF0aCBxdWFkVG9QYXRoKGNv
bnN0IEdyYXBoaWNzUXVhZCYgcXVhZCkKIHsKICAgICBQYXRoIHF1YWRQYXRoOwogICAgIHF1YWRQ
YXRoLm1vdmVUbyhxdWFkLnAxKCkpOwpAQCAtNTgsNyArNTgsNyBAQAogICAgIHJldHVybiBxdWFk
UGF0aDsKIH0KIAotdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQordm9pZCBk
cmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR3JhcGhpY3NR
dWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQogewogICAgIHN0YXRpYyBjb25zdCBp
bnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIG91dGxpbmVD
b2xvcig2MiwgODYsIDE4MCwgMjI4KTsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICBjb250ZXh0LmZp
bGxQYXRoKHF1YWRQYXRoKTsKIH0KIAotdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0
UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCit2b2lkIGRyYXdPdXRsaW5l
ZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUXVh
ZCYgcXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxD
b2xvcikKIHsKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1
YWRUb1BhdGgoY2xpcFF1YWQpOwpAQCAtOTIsMTQgKzkyLDE0IEBACiAgICAgY29udGV4dC5yZXN0
b3JlKCk7CiB9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFk
ZGluZ1F1YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBt
YXJnaW5RdWFkLCBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdodE1vZGUgbW9kZSkKK3ZvaWQg
ZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdyYXBo
aWNzUXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcGFkZGluZ1F1YWQsIGNv
bnN0IEdyYXBoaWNzUXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBtYXJnaW5R
dWFkLCBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdodE1vZGUgbW9kZSkKIHsKICAgICBzdGF0
aWMgY29uc3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7CiAgICAg
c3RhdGljIGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxNjApOwog
ICAgIHN0YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxOTIp
OwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hDb2xvcigxMjUsIDE3MywgMjE3LCAy
MjgpOwogCi0gICAgRmxvYXRRdWFkIGNsaXBRdWFkOworICAgIEdyYXBoaWNzUXVhZCBjbGlwUXVh
ZDsKICAgICBpZiAobW9kZSA9PSBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdodE1hcmdpbiB8
fCAobW9kZSA9PSBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdodEFsbCAmJiBtYXJnaW5RdWFk
ICE9IGJvcmRlclF1YWQpKSB7CiAgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250
ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBtYXJnaW5Cb3hDb2xvcik7CiAgICAgICAgIGNs
aXBRdWFkID0gYm9yZGVyUXVhZDsKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgY2xpcFF1YWQsIGNsaXBRdWFkLCBjb250ZW50Qm94
Q29sb3IpOwogfQogCi12b2lkIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxpbmVC
b3hRdWFkcykKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgbGluZUJv
eFF1YWRzKQogewogICAgIHN0YXRpYyBjb25zdCBDb2xvciBsaW5lQm94Q29sb3IoMTI1LCAxNzMs
IDIxNywgMTI4KTsKIApAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgcmV0dXJuIG1haW5GcmFtZVBv
aW50IC0gSW50UG9pbnQoKTsKIH0KIAotdm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNv
bnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2Vi
Q29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQordm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gs
IGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBvdmVybGF5UmVj
dCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQogewogICAgIHN0YXRpYyBjb25zdCBpbnQg
cmVjdEluZmxhdGVQeCA9IDQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAx
MjsKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIEludFJlY3QgdGl0bGVBbmNob3JCb3ggPSBib3Vu
ZGluZ0JveDsKIAogICAgIEZyYW1lVmlldyogdmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEZsb2F0UmVjdCBvdmVybGF5UmVjdCA9IHZpZXct
PnZpc2libGVDb250ZW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBvdmVybGF5UmVjdCA9IHZp
ZXctPnZpc2libGVDb250ZW50UmVjdCgpOwogICAgIGlmICghb3ZlcmxheVJlY3QuY29udGFpbnMo
Ym91bmRpbmdCb3gpICYmICFib3VuZGluZ0JveC5jb250YWlucyhlbmNsb3NpbmdJbnRSZWN0KG92
ZXJsYXlSZWN0KSkpCiAgICAgICAgIG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CiAgICAgY29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlSZWN0LngoKSwgLW92ZXJsYXlS
ZWN0LnkoKSk7CkBAIC0yNjcsMTAgKzI2NywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpICsgcmVuZGVyQm94
LT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpblRv
cCgpICsgcmVuZGVyQm94LT5tYXJnaW5Cb3R0b20oKSk7CiAKIAotICAgICAgICBGbG9hdFF1YWQg
YWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KGNvbnRlbnRCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVy
Qm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7Ci0gICAgICAg
IEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQg
PSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOwor
ICAgICAgICBHcmFwaGljc1F1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KGNvbnRlbnRCb3gpKTsKKyAgICAgICAgR3JhcGhpY3NR
dWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBo
aWNzUmVjdChwYWRkaW5nQm94KSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCBhYnNCb3JkZXJRdWFk
ID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChib3JkZXJCb3gp
KTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmdpbkJveCkpOwogCiAgICAgICAgIGFic0Nv
bnRlbnRRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKICAgICAgICAgYWJzUGFkZGluZ1F1YWQu
bW92ZShtYWluRnJhbWVPZmZzZXQpOwpAQCAtMjgyLDcgKzI4Miw3IEBACiAgICAgICAgIGRyYXdI
aWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBh
YnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBtb2RlKTsKICAgICB9IGVsc2UgaWYgKHJlbmRl
cmVyLT5pc1JlbmRlcklubGluZSgpIHx8IGlzU1ZHUmVuZGVyZXIpIHsKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzaG93IG1hcmdpbnMvcGFkZGluZy9ib3JkZXIgZm9yIGlubGluZXMuCi0g
ICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGxpbmVCb3hRdWFkczsKKyAgICAgICAgVmVjdG9yPEdy
YXBoaWNzUXVhZD4gbGluZUJveFF1YWRzOwogICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFk
cyhsaW5lQm94UXVhZHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUJv
eFF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgbGluZUJveFF1YWRzW2ldICs9IG1haW5G
cmFtZU9mZnNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDEx
ICsxMDU2LDYgQEAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0
U2hhZG93LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UXVhZC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREYXRhLmNwcApAQCAtMTA3Myw2ICsxMDY4LDExIEBACiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1BvaW50M0QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1NpemUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NU
eXBlcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAKICAg
ICBib29sIGNvbnRhaW5zQ2FyZXRPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7IC8vIGZhbHNlIGZv
ciBvZmZzZXQgYWZ0ZXIgbGluZSBicmVhawogCiAgICAgLy8gTmVlZHMgdG8gYmUgcHVibGljLCBz
byB0aGUgc3RhdGljIHBhaW50VGV4dFdpdGhTaGFkb3dzKCkgZnVuY3Rpb24gY2FuIHVzZSBpdC4K
LSAgICBzdGF0aWMgRmxvYXRTaXplIGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgU2hhZG93RGF0YSosIGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3Qs
IGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRhbCk7CisgICAgc3RhdGlj
IEdyYXBoaWNzU2l6ZSBhcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFNoYWRvd0RhdGEqLCBjb25zdCBHcmFwaGljc1JlY3QmIHRleHRSZWN0LCBib29s
IHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwpOwogCiBwcml2YXRlOgogICAg
IElubGluZVRleHRCb3gqIG1fcHJldlRleHRCb3g7IC8vIFRoZSBwcmV2aW91cyBib3ggdGhhdCBh
bHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdApAQCAtMTY1LDE4ICsxNjUsMTggQEAKICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkZW5vdGUgbm8gdHJ1bmNhdGlvbiAodGhlIHdob2xlIHJ1biBwYWlu
dHMpIGFuZCBmdWxsIHRydW5jYXRpb24gKG5vdGhpbmcgcGFpbnRzIGF0IGFsbCkuCiAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250
JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJr
ZXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKLSAgICB2b2lkIHBhaW50Q29t
cG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYpOworICAgIHZvaWQgcGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYg
Ym94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBpbnQgc3RhcnRQb3MsIGludCBl
bmRQb3MpOworICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQm
LCBib29sIGJhY2tncm91bmQpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZShH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIGNvbnN0IENv
bXBvc2l0aW9uVW5kZXJsaW5lJik7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgcGFpbnRD
dXN0b21IaWdobGlnaHQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUpOwogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBpbnQgZGVjb3JhdGlvbiwg
Y29uc3QgU2hhZG93RGF0YSopOwotICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZv
bnQmKTsKLSAgICB2b2lkIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRl
clN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7Ci0gICAgdm9pZCBwYWludFRleHRN
YXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94
T3JpZ2luLCBpbnQgZGVjb3JhdGlvbiwgY29uc3QgU2hhZG93RGF0YSopOworICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3Jp
Z2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50U3BlbGxpbmdP
ckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94
T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wg
Z3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250Jik7CiAgICAgdm9pZCBjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50
TWFya2VyKERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CiAKICAg
ICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcigpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw3IEBACiAKICAgICB2
b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNvbnN0IEZpbGxMYXllciosIGNv
bnN0IEludFJlY3QmIHBhaW50UmVjdCwgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkmKTsKICAgICB2
b2lkIGdldEJvcmRlckVkZ2VJbmZvKGNsYXNzIEJvcmRlckVkZ2VbXSwgYm9vbCBpbmNsdWRlTG9n
aWNhbExlZnRFZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSA9IHRydWUp
IGNvbnN0OwotICAgIGJvb2wgYm9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShjb25zdCBGbG9h
dFNpemUmIGNvbnRleHRTY2FsZSkgY29uc3Q7CisgICAgYm9vbCBib3JkZXJPYnNjdXJlc0JhY2tn
cm91bmRFZGdlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdDsKIAogICAg
IGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiwgSW1hZ2UqLCBj
b25zdCB2b2lkKiwgY29uc3QgSW50U2l6ZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQAogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNp
bmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtODY5LDMxICs4NjksMzEg
QEAKICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKG9sZFN0
cm9rZVN0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IHF1YWRbNF07CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHF1
YWRbNF07CiAgICAgICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICAgICAgICAgICAgICBjYXNl
IEJTVG9wOgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0gRmxvYXRQb2ludCh4MSArIG1h
eCgtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMV0g
PSBGbG9hdFBvaW50KHgxICsgbWF4KGFkamFjZW50V2lkdGgxLCAwKSwgeTIpOwotICAgICAgICAg
ICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCh4MiAtIG1heChhZGphY2VudFdpZHRoMiwg
MCksIHkyKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQoeDIgLSBt
YXgoLWFkamFjZW50V2lkdGgyLCAwKSwgeTEpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzBd
ID0gR3JhcGhpY3NQb2ludCh4MSArIG1heCgtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSk7CisgICAg
ICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBHcmFwaGljc1BvaW50KHgxICsgbWF4KGFkamFjZW50
V2lkdGgxLCAwKSwgeTIpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0gR3JhcGhpY3NQ
b2ludCh4MiAtIG1heChhZGphY2VudFdpZHRoMiwgMCksIHkyKTsKKyAgICAgICAgICAgICAgICAg
ICAgcXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIgLSBtYXgoLWFkamFjZW50V2lkdGgyLCAwKSwg
eTEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEJT
Qm90dG9tOgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0gRmxvYXRQb2ludCh4MSArIG1h
eChhZGphY2VudFdpZHRoMSwgMCksIHkxKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9
IEZsb2F0UG9pbnQoeDEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSwgeTIpOwotICAgICAgICAg
ICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCh4MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIs
IDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHgyIC0g
bWF4KGFkamFjZW50V2lkdGgyLCAwKSwgeTEpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzBd
ID0gR3JhcGhpY3NQb2ludCh4MSArIG1heChhZGphY2VudFdpZHRoMSwgMCksIHkxKTsKKyAgICAg
ICAgICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBoaWNzUG9pbnQoeDEgKyBtYXgoLWFkamFjZW50
V2lkdGgxLCAwKSwgeTIpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0gR3JhcGhpY3NQ
b2ludCh4MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApLCB5Mik7CisgICAgICAgICAgICAgICAg
ICAgIHF1YWRbM10gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSwg
eTEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEJT
TGVmdDoKLSAgICAgICAgICAgICAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQoeDEsIHkxICsg
bWF4KC1hZGphY2VudFdpZHRoMSwgMCkpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0g
RmxvYXRQb2ludCh4MSwgeTIgLSBtYXgoLWFkamFjZW50V2lkdGgyLCAwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KHgyLCB5MiAtIG1heChhZGphY2VudFdpZHRo
MiwgMCkpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gRmxvYXRQb2ludCh4MiwgeTEg
KyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFswXSA9
IEdyYXBoaWNzUG9pbnQoeDEsIHkxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCkpOworICAgICAg
ICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhpY3NQb2ludCh4MSwgeTIgLSBtYXgoLWFkamFj
ZW50V2lkdGgyLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBHcmFwaGljc1Bv
aW50KHgyLCB5MiAtIG1heChhZGphY2VudFdpZHRoMiwgMCkpOworICAgICAgICAgICAgICAgICAg
ICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiwgeTEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDAp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBCU1Jp
Z2h0OgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0gRmxvYXRQb2ludCh4MSwgeTEgKyBt
YXgoYWRqYWNlbnRXaWR0aDEsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEZs
b2F0UG9pbnQoeDEsIHkyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KHgyLCB5MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIs
IDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQoeDIsIHkxICsg
bWF4KC1hZGphY2VudFdpZHRoMSwgMCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0g
R3JhcGhpY3NQb2ludCh4MSwgeTEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBoaWNzUG9pbnQoeDEsIHkyIC0gbWF4KGFkamFjZW50
V2lkdGgyLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBHcmFwaGljc1BvaW50
KHgyLCB5MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAg
cXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCkp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTA4NSw3
ICsxMDg1LDcgQEAKIEludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dChib29sIHVzZVRyYW5zZm9ybXMpCiB7CiAgICAgaWYgKHVzZVRyYW5zZm9ybXMpIHsKLSAgICAg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+
IHF1YWRzOwogICAgICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsKIAogICAgICAgICBzaXplX3Qg
biA9IHF1YWRzLnNpemUoKTsKQEAgLTEwOTgsNyArMTA5OCw3IEBACiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUo
KTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIFZl
Y3RvcjxJbnRSZWN0PiByZWN0czsKICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBmbG9vcmVkTGF5
b3V0UG9pbnQoYWJzUG9zKSk7CiAKQEAgLTExMTIsMjAgKzExMTIsMjAgQEAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1
c1JpbmdRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgVmVjdG9yPElu
dFJlY3Q+IHJlY3RzOwogICAgIC8vIEZJWE1FOiBhZGRGb2N1c1JpbmdSZWN0cygpIG5lZWRzIHRv
IGJlIHBhc3NlZCB0aGlzIHRyYW5zZm9ybS11bmF3YXJlCiAgICAgLy8gbG9jYWxUb0Fic29sdXRl
KCkgb2Zmc2V0IGhlcmUgYmVjYXVzZSBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKCkK
ICAgICAvLyBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdC4gVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVj
dGx5IHdpdGggdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4KLSAgICBGbG9hdFBvaW50
IGFic29sdXRlUG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBHcmFwaGljc1BvaW50IGFi
c29sdXRlUG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAgICBhZGRGb2N1c1JpbmdSZWN0cyhy
ZWN0cywgZmxvb3JlZEludFBvaW50KGFic29sdXRlUG9pbnQpKTsKICAgICBzaXplX3QgY291bnQg
PSByZWN0cy5zaXplKCk7IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewogICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKICAgICAgICAgcmVjdC5tb3ZlKC1h
YnNvbHV0ZVBvaW50LngoKSwgLWFic29sdXRlUG9pbnQueSgpKTsKLSAgICAgICAgcXVhZHMuYXBw
ZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJlY3QpKSk7CisgICAgICAgIHF1YWRz
LmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChyZWN0KSkpOwogICAgIH0K
IH0KIApAQCAtMTgyMyw3ICsxODIzLDcgQEAKICAgICByZXR1cm4gdmlldygpLT52aWV3UmVjdCgp
OwogfQogCi1GbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29u
c3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1dGUoY29uc3QgR3Jh
cGhpY3NQb2ludCYgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zKSBj
b25zdAogewogICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRl
OjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgbG9jYWxQb2ludCk7CiAgICAgbWFwTG9jYWxUb0Nv
bnRhaW5lcigwLCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwpAQCAtMTgz
Miw3ICsxODMyLDcgQEAKICAgICByZXR1cm4gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclBvaW50
KCk7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRvTG9jYWwoY29uc3Qg
RmxvYXRQb2ludCYgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3Jt
cykgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRvTG9jYWwoY29u
c3QgR3JhcGhpY3NQb2ludCYgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJh
bnNmb3JtcykgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFu
c2Zvcm1TdGF0ZTo6VW5hcHBseUludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24sIGNvbnRhaW5lclBv
aW50KTsKICAgICBtYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChmaXhlZCwgdXNlVHJhbnNmb3Jtcywg
dHJhbnNmb3JtU3RhdGUpOwpAQCAtMTg5OSw3ICsxODk5LDcgQEAKICAgICBpZiAoY29udGFpbmVy
T2JqZWN0ICYmIGNvbnRhaW5lck9iamVjdC0+aGFzTGF5ZXIoKSAmJiBjb250YWluZXJPYmplY3Qt
PnN0eWxlKCktPmhhc1BlcnNwZWN0aXZlKCkpIHsKICAgICAgICAgLy8gUGVycHNlY3RpdmUgb24g
dGhlIGNvbnRhaW5lciBhZmZlY3RzIHVzLCBzbyB3ZSBoYXZlIHRvIGZhY3RvciBpdCBpbiBoZXJl
LgogICAgICAgICBBU1NFUlQoY29udGFpbmVyT2JqZWN0LT5oYXNMYXllcigpKTsKLSAgICAgICAg
RmxvYXRQb2ludCBwZXJzcGVjdGl2ZU9yaWdpbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29u
dGFpbmVyT2JqZWN0KS0+bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKKyAgICAgICAgR3Jh
cGhpY3NQb2ludCBwZXJzcGVjdGl2ZU9yaWdpbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29u
dGFpbmVyT2JqZWN0KS0+bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKIAogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZU1hdHJpeDsKICAgICAgICAgcGVyc3BlY3Rp
dmVNYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShjb250YWluZXJPYmplY3QtPnN0eWxlKCktPnBlcnNw
ZWN0aXZlKCkpOwpAQCAtMTkxMyw3ICsxOTEzLDcgQEAKICNlbmRpZgogfQogCi1GbG9hdFF1YWQg
UmVuZGVyT2JqZWN0Ojpsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2Fs
UXVhZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQp
IGNvbnN0CitHcmFwaGljc1F1YWQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvQ29udGFpbmVyUXVhZChj
b25zdCBHcmFwaGljc1F1YWQmIGxvY2FsUXVhZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CiAgICAgLy8gVHJhY2sgdGhlIHBvaW50
IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQncyBib3VuZGluZyBib3guIEFzIG1hcExvY2FsVG9D
b250YWluZXIoKSBjYWxscyBvZmZzZXRGcm9tQ29udGFpbmVyKCksCiAgICAgLy8gaXQgd2lsbCB1
c2UgdGhhdCBwb2ludCBhcyB0aGUgcmVmZXJlbmNlIHBvaW50IHRvIGRlY2lkZSB3aGljaCBjb2x1
bW4ncyB0cmFuc2Zvcm0gdG8gYXBwbHkgaW4gbXVsdGlwbGUtY29sdW1uIGJsb2Nrcy4KQEAgLTIz
NzEsNyArMjM3MSw3IEBACiAgICAgICAgICAgICByZWdpb24uY2xpcC5zZXRXaWR0aCgwKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7
CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAgICAg
ICAgIHJlZ2lvbi5ib3VuZHMuc2V0WChhYnNQb3MueCgpICsgc3R5bGVSZWdpb24ub2Zmc2V0Lmxl
ZnQoKS52YWx1ZSgpKTsKICAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRZKGFic1Bvcy55KCkgKyBz
dHlsZVJlZ2lvbi5vZmZzZXQudG9wKCkudmFsdWUoKSk7CiAKQEAgLTI1ODcsMjQgKzI1ODcsMjQg
QEAKICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogfQogCi1G
bG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGlj
c1JlY3QgUmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBH
cmFwaGljc1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6c3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVjdDo6c3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIC8vIFJldHVybnMgdGhl
IHNtYWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRlbnQK
IC8vIHJlc3BlY3RpbmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9r
ZS13aWR0aCBhbmQgbWFya2VycwotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVjdDo6cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJPYmplY3Q6OmxvY2FsVHJhbnNmb3JtKCkg
Y29uc3QKQEAgLTI2MTksNyArMjYxOSw3IEBACiAgICAgcmV0dXJuIGlkZW50aXR5OwogfQogCi1i
b29sIFJlbmRlck9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wg
UmVuZGVyT2JqZWN0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01NDUsMTIgKzU0NSwxMiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZsb2F0
UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIGNv
bnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JiByKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVy
T2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CiB7
Ci0gICAgRmxvYXRSZWN0IHBhcnRSZWN0KGlucHV0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHBh
cnRSZWN0KGlucHV0UmVjdCk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0d2Vl
biB0aGUgcGFydCByZW5kZXJlciBhbmQgdGhlIGlucHV0IHJlbmRlcmVyCi0gICAgRmxvYXRTaXpl
IG9mZnNldEZyb21JbnB1dFJlbmRlcmVyOworICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXRGcm9tSW5w
dXRSZW5kZXJlcjsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRl
cmVyOwogICAgIHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7
CiAgICAgICAgIFJlbmRlck9iamVjdCogY29udGFpbmluZ1JlbmRlcmVyID0gcmVuZGVyZXItPmNv
bnRhaW5lcigpOwpAQCAtNzkzLDcgKzc5Myw3IEBACiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRX
aWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIGluZmxhdGVk
UmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRl
ZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6
b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUo
R3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsK
ICAgICB9CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogCiAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy0+
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoMiAqIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCAwKTsKLSAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgtMSwgMSkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKC0xLCAxKSk7CiAgICAgfQogICAg
IAogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QubG9jYXRpb24oKSk7CkBAIC0xMDI5LDEyICsx
MDI5LDEyIEBACiAKICAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNlID0gZGV2aWNlUkdCQ29sb3JT
cGFjZVJlZigpOwogCi0gICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50KHIueCgpLCByLnkoKSwgci53
aWR0aCgpLCByLmhlaWdodCgpIC8gMi4wZik7CisgICAgR3JhcGhpY3NSZWN0IHRvcEdyYWRpZW50
KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0
IENHRnVuY3Rpb25DYWxsYmFja3MgdG9wQ2FsbGJhY2tzID0geyAwLCBUb3BHcmFkaWVudEludGVy
cG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IHRvcEZ1bmN0aW9u
KEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJnRvcENh
bGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRD
RiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54
KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3Jh
ZGllbnQubWF4WSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCi0gICAg
RmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnkoKSArIHIuaGVpZ2h0
KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICogcmFkaXVzLCByLmhlaWdodCgpIC8gMi4wZik7
CisgICAgR3JhcGhpY3NSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnkoKSAr
IHIuaGVpZ2h0KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICogcmFkaXVzLCByLmhlaWdodCgp
IC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgYm90dG9tQ2FsbGJhY2tz
ID0geyAwLCBCb3R0b21HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRy
PENHRnVuY3Rpb25SZWY+IGJvdHRvbUZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUo
TlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJmJvdHRvbUNhbGxiYWNrcykpOwogICAgIFJldGFpblB0
cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVu
dC55KCkpLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50Lm1h
eFkoKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKQEAgLTExMDYsMTgg
KzExMDYsMTggQEAKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxl
KCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgby0+c3R5bGUoKS0+
Y29sb3JTcGFjZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9T
dHJva2UpOwogCi0gICAgRmxvYXRQb2ludCBhcnJvdzFbM107Ci0gICAgYXJyb3cxWzBdID0gRmxv
YXRQb2ludChsZWZ0RWRnZSwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwot
ICAgIGFycm93MVsxXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZ
IC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cxWzJdID0gRmxvYXRQb2lu
dChsZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJy
b3dzIC8gMi4wZiAtIGFycm93SGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IGFycm93MVszXTsK
KyAgICBhcnJvdzFbMF0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlLCBjZW50ZXJZIC0gc3BhY2VC
ZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzFdID0gR3JhcGhpY3NQb2ludChsZWZ0
RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsK
KyAgICBhcnJvdzFbMl0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIu
MGYsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmIC0gYXJyb3dIZWlnaHQpOwog
CiAgICAgLy8gRHJhdyB0aGUgdG9wIGFycm93CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdD
b252ZXhQb2x5Z29uKDMsIGFycm93MSwgdHJ1ZSk7CiAKLSAgICBGbG9hdFBvaW50IGFycm93Mlsz
XTsKLSAgICBhcnJvdzJbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBjZW50ZXJZICsgc3BhY2VC
ZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cyWzFdID0gRmxvYXRQb2ludChsZWZ0RWRn
ZSArIGFycm93V2lkdGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKLSAg
ICBhcnJvdzJbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNl
bnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmICsgYXJyb3dIZWlnaHQpOworICAgIEdy
YXBoaWNzUG9pbnQgYXJyb3cyWzNdOworICAgIGFycm93MlswXSA9IEdyYXBoaWNzUG9pbnQobGVm
dEVkZ2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBhcnJvdzJb
MV0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSArIHNwYWNl
QmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93MlsyXSA9IEdyYXBoaWNzUG9pbnQobGVm
dEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAv
IDIuMGYgKyBhcnJvd0hlaWdodCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gYXJyb3cKICAg
ICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgYXJyb3cyLCB0cnVlKTsK
QEAgLTEzNDEsNyArMTM0MSw3IEBACiAgICAgICAgICAgICBbc2xpZGVyVGh1bWJDZWxsIHN0b3BU
cmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpuaWwgbW91c2VJc1VwOllFU107
CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CisgICAgR3JhcGhpY3NSZWN0IGJv
dW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIg
c2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlk
ZXIuCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkKICAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkgKyB2ZXJ0
aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwpA
QCAtMTM0OSwxMiArMTM0OSwxMiBAQAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICAKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0
ID0gYm91bmRzOworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3QgPSBib3VuZHM7CiAgICAg
aWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1
bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5z
ZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3Qu
eSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2
ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhp
Y3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9
CiAgICAgCkBAIC0xMzYyLDEyICsxMzYyLDEyIEBACiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJk
YXI6Ly9wcm9ibGVtLzk0MjE3ODE+LgogICAgIGlmICghby0+dmlldygpLT5mcmFtZVZpZXcoKS0+
ZG9jdW1lbnRWaWV3KCkpIHsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgw
LCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhp
Y3NTaXplKDEsIC0xKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwg
LSh1bnpvb21lZFJlY3QueSgpICsgdW56b29tZWRSZWN0LmhlaWdodCgpKSk7CiAgICAgfQogI2Vs
aWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgw
LCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRT
aXplKDEsIC0xKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSgx
LCAtMSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwgLSh1bnpvb21lZFJl
Y3QueSgpICsgdW56b29tZWRSZWN0LmhlaWdodCgpKSk7CiAjZW5kaWYKICAgICAKQEAgLTEzOTQs
NyArMTM5NCw3IEBACiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qu
d2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56
b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZl
bCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21M
ZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUo
LXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAKQEAgLTE0ODYs
NyArMTQ4Niw3IEBACiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCk7CiAKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1
dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVj
dCgpKV07CisgICAgR3JhcGhpY3NSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBjYW5jZWxCdXR0
b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3Qo
KSldOwogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAvLyBUYWtlIGNhcmUgb2YgY2Fz
ZXMgd2hlcmUgdGhlIGNhbmNlbCBidXR0b24gd2FzIG5vdCBhbGlnbmVkIHdpdGggdGhlIHJpZ2h0
IGJvcmRlciBvZiB0aGUgaW5wdXQgZWxlbWVudCAoZm9yIGUuZy4KQEAgLTE0OTksMTIgKzE0OTks
MTIgQEAKIAogICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5y
ZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAKLSAgICBGbG9hdFJlY3QgdW56b29tZWRS
ZWN0KGxvY2FsQm91bmRzKTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91
bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0
LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgdW56
b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwog
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVu
em9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRT
aXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
Y2FsZShHcmFwaGljc1NpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55
KCkpOwogICAgIH0KIApAQCAtMTU3MSw3ICsxNTcxLDcgQEAKIAogICAgIHVwZGF0ZUFjdGl2ZVN0
YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOwogCi0gICAgRmxvYXRSZWN0IGxvY2Fs
Qm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+
cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAgIEdyYXBoaWNzUmVjdCBsb2NhbEJv
dW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJl
bmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRU
b1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAg
ICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBp
blZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKQEAgLTE2MDcsNyArMTYwNyw3IEBACiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CiAg
ICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCi0gICAg
RmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRz
Ok5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAgIEdyYXBo
aWNzUmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpO
U1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKICAgICBsb2NhbEJv
dW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxC
b3VuZHMsIHIpOwogICAgIAogICAgIEludFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsK
QEAgLTE2MTUsNyArMTYxNSw3IEBACiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpv
b21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRI
ZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgp
KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWws
IHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NT
aXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50
cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAK
QEAgLTE3MTEsMTUgKzE3MTEsMTUgQEAKIH0KIAogLy8gVXRpbGl0eSB0byBzY2FsZSB3aGVuIHRo
ZSBVSSBwYXJ0IGFyZSBub3Qgc2NhbGVkIGJ5IHdrRHJhd01lZGlhVUlQYXJ0Ci1zdGF0aWMgRmxv
YXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFs
UmVjdCkKK3N0YXRpYyBHcmFwaGljc1JlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVu
dENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQogewogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KG9yaWdp
bmFsUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdChvcmlnaW5hbFJlY3QpOwog
ICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZiAmJiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1l
ZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lKSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRX
aWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVk
UmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21l
ZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6
b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUo
R3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIHVuem9vbWVkUmVjdDsKQEAgLTE4MTAsNyArMTgxMCw3IEBACiAg
ICAgQ29udGV4dENvbnRhaW5lciBjZ0NvbnRleHRDb250YWluZXIocGFpbnRJbmZvLmNvbnRleHQp
OwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQo
KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5j
b250ZXh0KTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5k
QWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICBHcmFwaGljc1JlY3Qg
dW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywg
cGFpbnRJbmZvLCByKTsKICAgICB3a0RyYXdNZWRpYVNsaWRlclRyYWNrKG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIGNvbnRleHQsIHVuem9vbWVkUmVjdCwgCiAgICAgICAgIHRpbWVMb2FkZWQsIGN1
cnJlbnRUaW1lLCBkdXJhdGlvbiwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xODg0LDcgKzE4ODQsNyBAQAogCiAgICAgQ29udGV4dENvbnRh
aW5lciBjZ0NvbnRleHRDb250YWluZXIocGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIEZs
b2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29u
dGV4dChvLCBwYWludEluZm8sIHIpOworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3QgPSBn
ZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOwog
ICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LCBtZWRpYUNvbnRy
b2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250YWluZXIuY29udGV4dCgpLCB1bnpvb21lZFJlY3Qs
IGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpA
QCAtMTg5Nyw3ICsxODk3LDcgQEAKIAogICAgIENvbnRleHRDb250YWluZXIgY2dDb250ZXh0Q29u
dGFpbmVyKHBhaW50SW5mby5jb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRS
ZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZv
LCByKTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5k
QWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKICAgICB3a0RyYXdNZWRpYVVJ
UGFydChNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBj
Z0NvbnRleHRDb250YWluZXIuY29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0
U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKIAog
I2luY2x1ZGUgIkNvbGxhcHNlZEJvcmRlclZhbHVlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01h
cmtlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRldGFpbHNNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzNiArNDQsMzYgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBQYXRoIGNyZWF0ZVBhdGgoY29uc3QgRmxv
YXRQb2ludCogcGF0aCkKK3N0YXRpYyBQYXRoIGNyZWF0ZVBhdGgoY29uc3QgR3JhcGhpY3NQb2lu
dCogcGF0aCkKIHsKICAgICBQYXRoIHJlc3VsdDsKLSAgICByZXN1bHQubW92ZVRvKEZsb2F0UG9p
bnQocGF0aFswXS54KCksIHBhdGhbMF0ueSgpKSk7CisgICAgcmVzdWx0Lm1vdmVUbyhHcmFwaGlj
c1BvaW50KHBhdGhbMF0ueCgpLCBwYXRoWzBdLnkoKSkpOwogICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgNDsgKytpKQotICAgICAgICByZXN1bHQuYWRkTGluZVRvKEZsb2F0UG9pbnQocGF0aFtpXS54
KCksIHBhdGhbaV0ueSgpKSk7CisgICAgICAgIHJlc3VsdC5hZGRMaW5lVG8oR3JhcGhpY3NQb2lu
dChwYXRoW2ldLngoKSwgcGF0aFtpXS55KCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBz
dGF0aWMgUGF0aCBjcmVhdGVEb3duQXJyb3dQYXRoKCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50
c1s0XSA9IHsgRmxvYXRQb2ludCgwLjBmLCAwLjA3ZiksIEZsb2F0UG9pbnQoMC41ZiwgMC45M2Yp
LCBGbG9hdFBvaW50KDEuMGYsIDAuMDdmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjA3ZikgfTsKKyAg
ICBHcmFwaGljc1BvaW50IHBvaW50c1s0XSA9IHsgR3JhcGhpY3NQb2ludCgwLjBmLCAwLjA3Ziks
IEdyYXBoaWNzUG9pbnQoMC41ZiwgMC45M2YpLCBHcmFwaGljc1BvaW50KDEuMGYsIDAuMDdmKSwg
R3JhcGhpY3NQb2ludCgwLjBmLCAwLjA3ZikgfTsKICAgICByZXR1cm4gY3JlYXRlUGF0aChwb2lu
dHMpOwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVVcEFycm93UGF0aCgpCiB7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludHNbNF0gPSB7IEZsb2F0UG9pbnQoMC4wZiwgMC45M2YpLCBGbG9hdFBvaW50KDAu
NWYsIDAuMDdmKSwgRmxvYXRQb2ludCgxLjBmLCAwLjkzZiksIEZsb2F0UG9pbnQoMC4wZiwgMC45
M2YpIH07CisgICAgR3JhcGhpY3NQb2ludCBwb2ludHNbNF0gPSB7IEdyYXBoaWNzUG9pbnQoMC4w
ZiwgMC45M2YpLCBHcmFwaGljc1BvaW50KDAuNWYsIDAuMDdmKSwgR3JhcGhpY3NQb2ludCgxLjBm
LCAwLjkzZiksIEdyYXBoaWNzUG9pbnQoMC4wZiwgMC45M2YpIH07CiAgICAgcmV0dXJuIGNyZWF0
ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBhdGggY3JlYXRlTGVmdEFycm93UGF0aCgpCiB7
Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0UG9pbnQoMS4wZiwgMC4wZiksIEZs
b2F0UG9pbnQoMC4xNGYsIDAuNWYpLCBGbG9hdFBvaW50KDEuMGYsIDEuMGYpLCBGbG9hdFBvaW50
KDEuMGYsIDAuMGYpIH07CisgICAgR3JhcGhpY3NQb2ludCBwb2ludHNbNF0gPSB7IEdyYXBoaWNz
UG9pbnQoMS4wZiwgMC4wZiksIEdyYXBoaWNzUG9pbnQoMC4xNGYsIDAuNWYpLCBHcmFwaGljc1Bv
aW50KDEuMGYsIDEuMGYpLCBHcmFwaGljc1BvaW50KDEuMGYsIDAuMGYpIH07CiAgICAgcmV0dXJu
IGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBhdGggY3JlYXRlUmlnaHRBcnJvd1Bh
dGgoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnRzWzRdID0geyBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuODZmLCAwLjVmKSwgRmxvYXRQb2ludCgwLjBmLCAxLjBmKSwgRmxv
YXRQb2ludCgwLjBmLCAwLjBmKSB9OworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnRzWzRdID0geyBH
cmFwaGljc1BvaW50KDAuMGYsIDAuMGYpLCBHcmFwaGljc1BvaW50KDAuODZmLCAwLjVmKSwgR3Jh
cGhpY3NQb2ludCgwLjBmLCAxLjBmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAwLjBmKSB9OwogICAg
IHJldHVybiBjcmVhdGVQYXRoKHBvaW50cyk7CiB9CiAKQEAgLTExNiw3ICsxMTYsNyBAQAogewog
ICAgIFBhdGggcmVzdWx0ID0gZ2V0Q2Fub25pY2FsUGF0aCgpOwogICAgIHJlc3VsdC50cmFuc2Zv
cm0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUobG9naWNhbEhlaWdodCgpKSk7Ci0gICAgcmVzdWx0
LnRyYW5zbGF0ZShGbG9hdFNpemUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSkpOworICAgIHJlc3Vs
dC50cmFuc2xhdGUoR3JhcGhpY3NTaXplKG9yaWdpbi54KCksIG9yaWdpbi55KCkpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDI1ICszMjcsMjUgQEAKICAgICAgICAgcGFy
ZW50KCktPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiB9CiAKLUZsb2F0UG9pbnQgSW5s
aW5lQm94Ojpsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCkKK0dyYXBoaWNzUG9pbnQgSW5saW5l
Qm94Ojpsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCkKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkt
PnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFBvaW50KHgoKSwgeSgpKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoeCgpLCB5
KCkpOwogICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHJvb3QoKS0+YmxvY2soKTsKICAgICBpZiAo
YmxvY2stPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVy
biBGbG9hdFBvaW50KHgoKSwgYmxvY2stPmhlaWdodCgpIC0gaGVpZ2h0KCkgLSB5KCkpOworICAg
ICAgICByZXR1cm4gR3JhcGhpY3NQb2ludCh4KCksIGJsb2NrLT5oZWlnaHQoKSAtIGhlaWdodCgp
IC0geSgpKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KGJsb2NrLT53aWR0
aCgpIC0gd2lkdGgoKSAtIHgoKSwgeSgpKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQo
YmxvY2stPndpZHRoKCkgLSB3aWR0aCgpIC0geCgpLCB5KCkpOwogfQogCi12b2lkIElubGluZUJv
eDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgSW5saW5lQm94Ojpm
bGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmICghcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIHJvb3QoKS0+YmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOwogfQog
Ci1GbG9hdFBvaW50IElubGluZUJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQorR3JhcGhpY3NQb2ludCBJbmxpbmVCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBpZiAoIXJlbmRlcmVyKCktPnN0eWxl
KCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb2ludDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsNyArMTI0LDcgQEAKICAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29v
cmRzLiBJZ25vcmVzIHRyYW5zZm9ybXMuCiAgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUNvbnRlbnRC
b3goKSBjb25zdDsKICAgICAvLyBUaGUgY29udGVudCBib3ggY29udmVydGVkIHRvIGFic29sdXRl
IGNvb3JkcyAodGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50KS4KLSAgICBGbG9hdFF1YWQg
YWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0OworICAgIEdyYXBoaWNzUXVhZCBhYnNvbHV0ZUNv
bnRlbnRRdWFkKCkgY29uc3Q7CiAKICAgICAvLyBCb3VuZHMgb2YgdGhlIG91dGxpbmUgYm94IGlu
IGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcwogICAgIHZpcnR1YWwgSW50UmVj
dCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50
Q29udGFpbmVyKi8sIEludFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNv
bnN0OwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbGxhcHNl
ZE1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQWZ0ZXIoKTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3Rv
cjxHcmFwaGljc1F1YWQ+Jik7CiAgICAgCiAgICAgSW50UmVjdCByZWZsZWN0aW9uQm94KCkgY29u
c3Q7CiAgICAgaW50IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdDsKQEAgLTM5NCw4ICszOTQsOCBA
QAogICAgIExheW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKICAgICBJbnRTaXplIGZsaXBGb3JXcml0aW5nTW9kZShj
b25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UmVj
dCYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3QmKSBj
b25zdDsKKyAgICBHcmFwaGljc1BvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBHcmFwaGlj
c1BvaW50JikgY29uc3Q7CisgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0
JikgY29uc3Q7CiAgICAgSW50U2l6ZSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCkg
Y29uc3Q7CiAKICAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtNDA2LDcgKzQwNiw3IEBACiAgICAgUmVuZGVy
T3ZlcmZsb3cqIGhhc1JlbmRlck92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdy5n
ZXQoKTsgfQogCiAgICAgdmlydHVhbCBib29sIG5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxh
dGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljUmF0aW9JbmZv
cm1hdGlvbihGbG9hdFNpemUmIC8qIGludHJpbnNpY1JhdGlvICovLCBib29sJiAvKiBpc1BlcmNl
bnRhZ2VJbnRyaW5zaWNTaXplICovKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24oR3JhcGhpY3NTaXplJiAvKiBpbnRyaW5zaWNSYXRp
byAqLywgYm9vbCYgLyogaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSAqLykgY29uc3QgeyB9CiAK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDkw
OTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjkyLDcgKzY5Miw3IEBACiAgICAgICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAg
ICAgICBzdGFydFJlc2l6aW5nKG1fY29scywgZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkueCgpIC0g
cG9zLngoKSk7CiAgICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1fcm93cywgZXZ0LT5hYnNvbHV0
ZUxvY2F0aW9uKCkueSgpIC0gcG9zLnkoKSk7CiAgICAgICAgICAgICBpZiAobV9jb2xzLm1fc3Bs
aXRCZWluZ1Jlc2l6ZWQgIT0gbm9TcGxpdCB8fCBtX3Jvd3MubV9zcGxpdEJlaW5nUmVzaXplZCAh
PSBub1NwbGl0KSB7CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQg
fHwgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZ0LT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwb3MgPSBsb2Nh
bFRvQWJzb2x1dGUoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zID0gbG9jYWxUb0Fi
c29sdXRlKCk7CiAgICAgICAgICAgICBjb250aW51ZVJlc2l6aW5nKG1fY29scywgZXZ0LT5hYnNv
bHV0ZUxvY2F0aW9uKCkueCgpIC0gcG9zLngoKSk7CiAgICAgICAgICAgICBjb250aW51ZVJlc2l6
aW5nKG1fcm93cywgZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkueSgpIC0gcG9zLnkoKSk7CiAgICAg
ICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBl
dnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaWZu
ZGVmIExheW91dFR5cGVzX2gKICNkZWZpbmUgTGF5b3V0VHlwZXNfaAogCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwyMiArNDYsMjIgQEAKIHR5cGVkZWYgSW50
U2l6ZSBMYXlvdXRTaXplOwogdHlwZWRlZiBJbnRSZWN0IExheW91dFJlY3Q7CiAKLWlubGluZSBM
YXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoraW5s
aW5lIExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiB9CiAKLWlubGluZSBM
YXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKK2lubGlu
ZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkK
IHsKICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOwogfQogCi1pbmxpbmUgTGF5b3V0UG9p
bnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCitpbmxpbmUgTGF5b3V0
UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAg
cmV0dXJuIGZsb29yZWRJbnRQb2ludChwKTsKIH0KIAotaW5saW5lIExheW91dFBvaW50IGZsb29y
ZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCitpbmxpbmUgTGF5b3V0UG9pbnQgZmxv
b3JlZExheW91dFBvaW50KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcykKIHsKICAgICByZXR1cm4gZmxv
b3JlZEludFBvaW50KHMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVh
ZC5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgpAQCAtMzcyLDEyICszNzIsMTIgQEAK
ICAgICAvLyBzaW5jZSBzdHJva2Utd2lkdGggaXMgaWdub3JlZCAoYW5kIG1hcmtlciBzaXplIGNh
biBkZXBlbmQgb24gc3Ryb2tlLXdpZHRoKS4KICAgICAvLyBvYmplY3RCb3VuZGluZ0JveCBpcyBy
ZXR1cm5lZCBsb2NhbCBjb29yZGluYXRlcy4KICAgICAvLyBUaGUgbmFtZSBvYmplY3RCb3VuZGlu
Z0JveCBpcyB0YWtlbiBmcm9tIHRoZSBTVkcgMS4xIHNwZWMuCi0gICAgdmlydHVhbCBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJv
dW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlY3RhbmdsZSBl
bmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRlbnQKICAgICAvLyByZXNwZWN0aW5nIGNs
aXBwaW5nLCBtYXNraW5nLCBmaWx0ZXJzLCBvcGFjaXR5LCBzdHJva2Utd2lkdGggYW5kIG1hcmtl
cnMKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIG9ubHkgcmV0dXJucyB0aGUgdHJhbnNmb3Jt
PSIiIHZhbHVlIGZyb20gdGhlIGVsZW1lbnQKICAgICAvLyBtb3N0IGNhbGxzaXRlcyB3YW50IGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBpbnN0ZWFkLgpAQCAtMzg3LDEwICszODcsMTAgQEAKICAg
ICAvLyBUaGlzIGluY2x1ZGVzIGFueSB2aWV3cG9ydCB0cmFuc2Zvcm1zIGFuZCB4L3kgb2Zmc2V0
cyBhcyB3ZWxsIGFzIHRoZSB0cmFuc2Zvcm09IiIgdmFsdWUgb2ZmIHRoZSBlbGVtZW50LgogICAg
IHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkg
Y29uc3Q7CiAKLSAgICAvLyBTVkcgdXNlcyBGbG9hdFBvaW50IHByZWNpc2UgaGl0IHRlc3Rpbmcs
IGFuZCBwYXNzZXMgdGhlIHBvaW50IGluIHBhcmVudAorICAgIC8vIFNWRyB1c2VzIEdyYXBoaWNz
UG9pbnQgcHJlY2lzZSBoaXQgdGVzdGluZywgYW5kIHBhc3NlcyB0aGUgcG9pbnQgaW4gcGFyZW50
CiAgICAgLy8gY29vcmRpbmF0ZXMgaW5zdGVhZCBvZiBpbiByZXBhaW50IGNvbnRhaW5lciBjb29y
ZGluYXRlcy4gIEV2ZW50dWFsbHkgdGhlCiAgICAgLy8gcmVzdCBvZiB0aGUgcmVuZGVyaW5nIHRy
ZWUgd2lsbCBtb3ZlIHRvIGEgc2ltaWxhciBtb2RlbC4KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJv
b2wgbm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsK
ICNlbmRpZgogCiAgICAgYm9vbCBpc0Fub255bW91cygpIGNvbnN0IHsgcmV0dXJuIG1faXNBbm9u
eW1vdXM7IH0KQEAgLTU3NSwxNiArNTc1LDE2IEBACiAKICAgICAvLyBDb252ZXJ0IHRoZSBnaXZl
biBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcwogICAgIC8vIEZJWE1FOiBUZW1w
b3JhcnkuIElmIHVzZVRyYW5zZm9ybXMgaXMgdHJ1ZSwgdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNj
b3VudC4gRXZlbnR1YWxseSBsb2NhbFRvQWJzb2x1dGUoKSB3aWxsIGFsd2F5cyBiZSB0cmFuc2Zv
cm0tYXdhcmUuCi0gICAgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUoY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVz
ZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9j
YWwoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zv
cm1zID0gZmFsc2UpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxUb0Fic29sdXRlKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGxvY2FsUG9pbnQgPSBHcmFwaGljc1BvaW50KCksIGJvb2wgZml4
ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OworICAgIEdyYXBo
aWNzUG9pbnQgYWJzb2x1dGVUb0xvY2FsKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGZpeGVk
ID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKIAogICAgIC8vIENv
bnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzLCB0YWtpbmcgdHJhbnNm
b3JtcyBpbnRvIGFjY291bnQuCi0gICAgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29u
c3QgRmxvYXRRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0CisgICAgR3JhcGhp
Y3NRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJiBxdWFkLCBib29s
IGZpeGVkID0gZmFsc2UpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbG9jYWxUb0NvbnRh
aW5lclF1YWQocXVhZCwgMCwgZml4ZWQpOwogICAgIH0KICAgICAvLyBDb252ZXJ0IGEgbG9jYWwg
cXVhZCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiBjb250YWluZXIsIHRha2luZyB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICBGbG9hdFF1YWQgbG9jYWxUb0NvbnRhaW5lclF1YWQo
Y29uc3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIGxvY2FsVG9Db250
YWluZXJRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJu
IHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVyKCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0cmFu
c2Zvcm1zKS4gSW4gbXVsdGktY29sdW1uIGxheW91dCwKICAgICAvLyBkaWZmZXJlbnQgb2Zmc2V0
cyBhcHBseSBhdCBkaWZmZXJlbnQgcG9pbnRzLCBzbyByZXR1cm4gdGhlIG9mZnNldCB0aGF0IGFw
cGxpZXMgdG8gdGhlIGdpdmVuIHBvaW50LgpAQCAtNTk3LDkgKzU5Nyw5IEBACiAgICAgSW50UmVj
dCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAK
ICAgICAvLyBCdWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBhYnNvbHV0ZSBjb29yZHMgZm9yIGxp
bmUgYm94ZXMKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1
YWQ+JikgeyB9CiAKLSAgICB2b2lkIGFic29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mKTsKKyAgICB2b2lkIGFic29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEdyYXBoaWNz
UXVhZD4mKTsKIAogICAgIC8vIHRoZSByZWN0IHRoYXQgd2lsbCBiZSBwYWludGVkIGlmIHRoaXMg
b2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFpbnRpbmdSb290CiAgICAgTGF5b3V0UmVjdCBwYWlu
dGluZ1Jvb3RSZWN0KExheW91dFJlY3QmIHRvcExldmVsUmVjdCk7CkBAIC0xMDc5LDI3ICsxMDc5
LDI3IEBACiAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbSh2YWx1ZSwgcmVuZGVyZXIt
PnN0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpv
b20oRmxvYXRRdWFkJiBxdWFkLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIHZvaWQg
YWRqdXN0R3JhcGhpY3NRdWFkRm9yQWJzb2x1dGVab29tKEdyYXBoaWNzUXVhZCYgcXVhZCwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBmbG9hdCB6b29tID0gcmVuZGVyZXItPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICBpZiAoem9vbSAhPSAxKQogICAgICAgICBxdWFkLnNj
YWxlKDEgLyB6b29tLCAxIC8gem9vbSk7CiB9CiAKLWlubGluZSB2b2lkIGFkanVzdEZsb2F0UmVj
dEZvckFic29sdXRlWm9vbShGbG9hdFJlY3QmIHJlY3QsIFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CitpbmxpbmUgdm9pZCBhZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNvbHV0ZVpvb20oR3JhcGhpY3NS
ZWN0JiByZWN0LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGZsb2F0IHpvb20gPSBy
ZW5kZXJlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmICh6b29tICE9IDEpCiAg
ICAgICAgIHJlY3Quc2NhbGUoMSAvIHpvb20sIDEgLyB6b29tKTsKIH0KIAotaW5saW5lIHZvaWQg
YWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgcGFnZVNj
YWxlKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkRm9yUGFnZVNjYWxlKEdyYXBoaWNz
UXVhZCYgcXVhZCwgZmxvYXQgcGFnZVNjYWxlKQogewogICAgIGlmIChwYWdlU2NhbGUgIT0gMSkK
ICAgICAgICAgcXVhZC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAxIC8gcGFnZVNjYWxlKTsKIH0KIAot
aW5saW5lIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxlKEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgcGFnZVNjYWxlKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yUGFnZVNj
YWxlKEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxlKQogewogICAgIGlmIChwYWdl
U2NhbGUgIT0gMSkKICAgICAgICAgcmVjdC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAxIC8gcGFnZVNj
YWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5j
bHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgpAQCAtNzQyLDE1ICs3NDIsMTUgQEAKICAgICByZXR1cm4gdDsKIH0KIAotRmxv
YXRQb2ludCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4oKSBjb25zdAorR3JhcGhpY3NQ
b2ludCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4oKSBjb25zdAogewogICAgIGlmICgh
cmVuZGVyZXIoKS0+aGFzVHJhbnNmb3JtKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiAKICAgICBjb25zdCBJbnRSZWN0IGJv
cmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3JkZXJCb3hSZWN0KCk7CiAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKIAotICAgIHJldHVybiBG
bG9hdFBvaW50KHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKS5jYWxjRmxvYXRWYWx1ZShib3Jk
ZXJCb3gud2lkdGgoKSksCisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoc3R5bGUtPnBlcnNwZWN0
aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC53aWR0aCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUo
Ym9yZGVyQm94LmhlaWdodCgpKSk7CiB9CiAKQEAgLTExMjQsNyArMTEyNCw3IEBACiAgICAgaWYg
KHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgKCFhbmNlc3RvckxheWVyIHx8IGFuY2VzdG9y
TGF5ZXIgPT0gcmVuZGVyZXIoKS0+dmlldygpLT5sYXllcigpKSkgewogICAgICAgICAvLyBJZiB0
aGUgZml4ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3QsIGp1c3QgYWRkIGluIHRoZSBv
ZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBieSBjYWxsaW5nCiAgICAgICAg
IC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3LgotICAgICAgICBGbG9hdFBv
aW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIHRy
dWUpOworICAgICAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZShHcmFwaGljc1BvaW50KCksIHRydWUpOwogICAgICAgICBsb2NhdGlvbiArPSBmbG9v
cmVkSW50U2l6ZShhYnNQb3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTM2NSw3ICsx
MzY1LDcgQEAKICAgICAgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0
ZWQgYWZ0ZXIgc2Nyb2xsaW5nCiAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0Q2FyZXRS
ZWN0TmVlZHNVcGRhdGUoKTsKIAotICAgICAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1v
dmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgICAgIEdyYXBoaWNzUXVh
ZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gR3JhcGhpY3NRdWFkKHJlY3RGb3JSZXBhaW50
KTsKICAgICAgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCiAgICAgICAgICAgICBxdWFkRm9yRmFr
ZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1v
dmVFdmVudCk7CkBAIC0xNDAxLDcgKzE0MDEsNyBAQAogICAgICAgICAvLyBUaGlzIHdpbGwgcHJl
dmVudCB1cyBmcm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNhZmFy
aSBSU1MuCiAgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgICAgIEFT
U0VSVChib3gpOwotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGJveC0+bG9jYWxUb0Fic29s
dXRlKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gYm94LT5sb2NhbFRvQWJzb2x1
dGUoKTsKICAgICAgICAgYWJzUG9zLm1vdmUoYm94LT5ib3JkZXJMZWZ0KCksIGJveC0+Ym9yZGVy
VG9wKCkpOwogCiAgICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGFic1Bvcy54
KCkgKyBzY3JvbGxYT2Zmc2V0KCksIGFic1Bvcy55KCkgKyBzY3JvbGxZT2Zmc2V0KCksIGJveC0+
Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CkBAIC0yOTA0LDEwICsyOTA0LDEw
IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRmxhdHRlbiB0aGUgcG9pbnQgaW50byB0
aGUgdGFyZ2V0IHBsYW5lCi0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCA9IHRyYW5zZm9ybVN0
YXRlLm1hcHBlZFBvaW50KCk7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludCA9IHRyYW5z
Zm9ybVN0YXRlLm1hcHBlZFBvaW50KCk7CiAgICAgCiAgICAgLy8gTm93IG1hcCB0aGUgcG9pbnQg
YmFjayB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0sIHdoaWNoIGNvbXB1dGVzIFouCi0gICAgRmxvYXRQ
b2ludDNEIGJhY2ttYXBwZWRQb2ludCA9IHRyYW5zZm9ybVN0YXRlLm1fYWNjdW11bGF0ZWRUcmFu
c2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKHRhcmdldFBvaW50KSk7CisgICAgR3JhcGhpY3NQ
b2ludDNEIGJhY2ttYXBwZWRQb2ludCA9IHRyYW5zZm9ybVN0YXRlLm1fYWNjdW11bGF0ZWRUcmFu
c2Zvcm0ubWFwUG9pbnQoR3JhcGhpY3NQb2ludDNEKHRhcmdldFBvaW50KSk7CiAgICAgcmV0dXJu
IGJhY2ttYXBwZWRQb2ludC56KCk7CiB9CiAKQEAgLTI5MjQsNyArMjkyNCw3IEBACiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBuZWVkIHRvIG1h
a2UgdHJhbnNmb3JtIHN0YXRlLCB0aGVuIGJhc2UgaXQgb2ZmIG9mIGhpdFRlc3RQb2ludCwKICAg
ICAgICAgLy8gd2hpY2ggaXMgcmVsYXRpdmUgdG8gcm9vdExheWVyLgotICAgICAgICB0cmFuc2Zv
cm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3JlYXRlKGhpdFRlc3RQb2ludCwg
RmxvYXRRdWFkKGhpdFRlc3RSZWN0KSk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlID0gSGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFBvaW50LCBHcmFwaGljc1F1YWQoaGl0
VGVzdFJlY3QpKTsKICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBvZmZz
ZXQpOwogICAgIH0KICAgICAKQEAgLTM0OTEsNyArMzQ5MSw3IEBACiAgICAgUmVuZGVyTGF5ZXIq
IGNsaXBwaW5nUm9vdExheWVyID0gY2xpcHBpbmdSb290KCk7CiAgICAgSW50UmVjdCBsYXllckJv
dW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKICAgICBj
YWxjdWxhdGVSZWN0cyhjbGlwcGluZ1Jvb3RMYXllciwgcmVuZGVyVmlldy0+ZG9jdW1lbnRSZWN0
KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVS
ZWN0KTsKLSAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGZvcmVncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKyAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKGZvcmVncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKIH0KIAogSW50UmVjdCBSZW5kZXJMYXllcjo6c2VsZkNsaXBSZWN0KCkgY29uc3QK
QEAgLTM1MDAsNyArMzUwMCw3IEBACiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdExheWVy
ID0gY2xpcHBpbmdSb290KCk7CiAgICAgSW50UmVjdCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJl
Y3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKICAgICBjYWxjdWxhdGVSZWN0cyhjbGlw
cGluZ1Jvb3RMYXllciwgcmVuZGVyVmlldy0+ZG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBi
YWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICByZXR1cm4g
Y2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRR
dWFkKGJhY2tncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4g
Y2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhp
Y3NRdWFkKGJhY2tncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAogdm9p
ZCBSZW5kZXJMYXllcjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IEludFJlY3Qm
IGJvdW5kcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMTYgKzI1MiwxNiBAQAogICAgIHZvaWQgc2V0TGF5
b3V0T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKTsKICAgICB2b2lkIHNldFZpc3VhbE92ZXJmbG93KGNvbnN0IExheW91
dFJlY3QmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7CiAKLSAg
ICBGbG9hdFJlY3QgZnJhbWVSZWN0SW5jbHVkaW5nTGluZUhlaWdodChMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKKyAgICBHcmFwaGljc1JlY3QgZnJhbWVS
ZWN0SW5jbHVkaW5nTGluZUhlaWdodChMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUJvdHRvbSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QobV90b3BMZWZ0LngoKSwgbGluZVRvcCwgd2lkdGgoKSwg
bGluZUJvdHRvbSAtIGxpbmVUb3ApOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGxpbmVUb3As
IG1fdG9wTGVmdC55KCksIGxpbmVCb3R0b20gLSBsaW5lVG9wLCBoZWlnaHQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1fdG9wTGVmdC54KCksIGxpbmVUb3AsIHdpZHRoKCks
IGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChsaW5l
VG9wLCBtX3RvcExlZnQueSgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCwgaGVpZ2h0KCkpOwogICAg
IH0KICAgICAKLSAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWln
aHQoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIGNvbnN0CisgICAg
R3JhcGhpY3NSZWN0IGxvZ2ljYWxGcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0KExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdChsb2dpY2FsTGVmdCgpLCBsaW5lVG9wLCBsb2dpY2FsV2lkdGgoKSwg
bGluZUJvdHRvbSAtIGxpbmVUb3ApOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGxvZ2lj
YWxMZWZ0KCksIGxpbmVUb3AsIGxvZ2ljYWxXaWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRC
YXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRB
bmRCYXNlbGluZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVtYmVkZGVkT2JqZWN0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4
LDcgQEAKICAgICAKICAgICB2b2lkIHNldE1pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQo
Ym9vbCk7CiAgICAgYm9vbCBpc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihNb3VzZUV2ZW50Kik7
Ci0gICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgmLCBGbG9hdFJl
Y3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmLCBUZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0
aCk7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEdyYXBoaWNzUmVjdCYgY29udGVudFJlY3QsIFBhdGgmLCBH
cmFwaGljc1JlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmLCBUZXh0UnVuJiwgZmxvYXQm
IHRleHRXaWR0aCk7CiAKICAgICBTdHJpbmcgbV9yZXBsYWNlbWVudFRleHQ7CiAgICAgYm9vbCBt
X2hhc0ZhbGxiYWNrQ29udGVudDsgLy8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBIVE1MT2JqZWN0
RWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTAgKzEwOCwxMCBAQAogICAgIAogICAgIHdpZHRoICs9
IHRvcFN0YXJ0U2hpZnQ7CiAgICAgCi0gICAgRmxvYXRQb2ludCB0b3BTdGFydChhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggLSB0b3BTdGFydFNoaWZ0LCBhZGp1c3RlZFBhaW50
T2Zmc2V0LnkoKSk7Ci0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpICsgZnJvbnRXaWR0aCAqIGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICwgYWRqdXN0ZWRQ
YWludE9mZnNldC55KCkgKyBtYXhIZWlnaHQgKyBnUmFkaWNhbEJhc2VQYWQpOwotICAgIEZsb2F0
UG9pbnQgdG9wTGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFk
aWNhbFRvcExlZnRQb2ludFhQb3MgLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGdSYWRpY2Fs
VG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7Ci0gICAgRmxvYXRQb2ludCBsZWZ0RW5kKGFk
anVzdGVkUGFpbnRPZmZzZXQueCgpICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hp
ZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHRvcFN0YXJ0KGFk
anVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAtIHRvcFN0YXJ0U2hpZnQsIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50IGJvdHRvbUxlZnQoYWRqdXN0
ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxCb3R0b21Qb2ludFhQb3Mg
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7
CisgICAgR3JhcGhpY3NQb2ludCB0b3BMZWZ0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJv
bnRXaWR0aCAqIGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKKyAgICBHcmFwaGlj
c1BvaW50IGxlZnRFbmQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLCB0b3BMZWZ0LnkoKSArIGdS
YWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwogICAgIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5mby5jb250ZXh0KTsKICAgICAK
QEAgLTEyMyw3ICsxMjMsNyBAQAogICAgIAogICAgIFBhdGggcm9vdDsKICAgICAKLSAgICByb290
Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRoICwgYWRqdXN0ZWRQYWludE9m
ZnNldC55KCkpKTsKKyAgICByb290Lm1vdmVUbyhHcmFwaGljc1BvaW50KHRvcFN0YXJ0LngoKSAr
IHdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3IHRvcAogICAg
IHJvb3QuYWRkTGluZVRvKHRvcFN0YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29y
bmVyIHRvIGJvdHRvbSBwb2ludCBvZiByYWRpY2FsCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICBt
YXNrLm1vdmVUbyh0b3BTdGFydCk7CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CiAg
ICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2lu
dCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVu
ZC55KCkpKTsKKyAgICBtYXNrLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BMZWZ0Lngo
KSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAog
ICAgIGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTAgKzE0MiwxMCBAQAogICAgIExheW91
dFVuaXQgc3RhcnQgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGluZGV4V2lkdGggKyBnUmFk
aWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSByb290UGFk
OwogICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAr
IHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBhZCk7CiAgICAgCi0gICAgRmxv
YXRQb2ludCB0b3BTdGFydChzdGFydCAtIHRvcFN0YXJ0U2hpZnQsIHBhaW50T2Zmc2V0LnkoKSk7
Ci0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHN0YXJ0IC0gZ1JhZGljYWxCb3R0b21Qb2ludFhQ
b3MgKiBmcm9udFdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhIZWlnaHQgKyBn
UmFkaWNhbEJhc2VQYWQpOwotICAgIEZsb2F0UG9pbnQgdG9wTGVmdChzdGFydCAtIGdSYWRpY2Fs
VG9wTGVmdFBvaW50WFBvcyAqIGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSAr
IGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7Ci0gICAgRmxvYXRQb2ludCBs
ZWZ0RW5kKHN0YXJ0IC0gZnJvbnRXaWR0aCAsIHRvcExlZnQueSgpICsgZ1JhZGljYWxMZWZ0RW5k
WVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BTdGFy
dChzdGFydCAtIHRvcFN0YXJ0U2hpZnQsIHBhaW50T2Zmc2V0LnkoKSk7CisgICAgR3JhcGhpY3NQ
b2ludCBib3R0b21MZWZ0KHN0YXJ0IC0gZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdp
ZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhIZWlnaHQgKyBnUmFkaWNhbEJhc2VQ
YWQpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdChzdGFydCAtIGdSYWRpY2FsVG9wTGVmdFBv
aW50WFBvcyAqIGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGdSYWRpY2Fs
VG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7CisgICAgR3JhcGhpY3NQb2ludCBsZWZ0RW5k
KHN0YXJ0IC0gZnJvbnRXaWR0aCAsIHRvcExlZnQueSgpICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0
ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwogICAgIApAQCAtMTU3LDcgKzE1Nyw3IEBA
CiAgICAgCiAgICAgUGF0aCByb290OwogICAgIAotICAgIHJvb3QubW92ZVRvKEZsb2F0UG9pbnQo
dG9wU3RhcnQueCgpICsgd2lkdGgsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CisgICAgcm9v
dC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3IHRvcAogICAgIHJvb3QuYWRkTGluZVRvKHRvcFN0
YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29ybmVyIHRvIGJvdHRvbSBwb2ludCBv
ZiByYWRpY2FsCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICBtYXNrLm1vdmVUbyh0b3BTdGFydCk7
CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CiAgICAgbWFzay5hZGRMaW5lVG8odG9w
TGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBs
ZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKKyAgICBtYXNrLmFk
ZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICog
dG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+Y2xp
cChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzExLDcgKzE3MTEs
NyBAQAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgY29tcHV0ZVJlY3RG
b3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgcmVj
dCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5l
cikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWlu
ZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKICAgICAKICAgICByZXR1cm4gcmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTks
NyArMTk5LDcgQEAKICAgICAgICAgaWYgKHJlY3QpIHsKICAgICAgICAgICAgIC8vIFRoZSBpbWFn
ZSBjaGFuZ2VkIHJlY3QgaXMgaW4gc291cmNlIGltYWdlIGNvb3JkaW5hdGVzIChwcmUtem9vbWlu
ZyksCiAgICAgICAgICAgICAvLyBzbyBtYXAgZnJvbSB0aGUgYm91bmRzIG9mIHRoZSBpbWFnZSB0
byB0aGUgY29udGVudHNCb3guCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QobWFwUmVjdCgqcmVjdCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZVJlc291
cmNlLT5pbWFnZVNpemUoMS4wZikpLCBjb250ZW50Qm94UmVjdCgpKSk7CisgICAgICAgICAgICBy
ZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdCgqcmVjdCwgR3JhcGhpY3NSZWN0
KEdyYXBoaWNzUG9pbnQoKSwgbV9pbWFnZVJlc291cmNlLT5pbWFnZVNpemUoMS4wZikpLCBjb250
ZW50Qm94UmVjdCgpKSk7CiAgICAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRvby1sYXJnZSBj
aGFuZ2VkIHJlY3RzLgogICAgICAgICAgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KGNvbnRlbnRC
b3hSZWN0KCkpOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKLSNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJG
b250VHJhbnNjb2Rlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKQEAgLTI2OSw3ICsyNjksNyBAQAogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0
ZVJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCkKIHsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4
dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKLSAgICAgICAgcmVjdHMuYXBw
ZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoRmxvYXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgYm94
LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgpKSkpOworICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9z
aW5nTGF5b3V0UmVjdChHcmFwaGljc1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBib3gtPnRvcExl
ZnQoKSwgYm94LT5zaXplKCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0
c0ZvclJhbmdlKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAg
ICAgICAgICAgICAgICAgIHIuc2V0WChzZWxlY3Rpb25SZWN0LngoKSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRRdWFkKHIpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAgICAg
ICAgIHJlY3RzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChyKSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQpOwogICAgICAgICAgICAgSW50
UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFsRW5kKTsKQEAgLTMxMyw3ICsz
MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRYKGJveC0+eCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZWN0
cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocikpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCkpOworICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVR
dWFkKEdyYXBoaWNzUXVhZChyKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDMsNyArMzQzLDcgQEAKICAgICByZXR1cm4gSW50
UmVjdCgpOwogfQogICAgIAotdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxG
bG9hdFF1YWQ+JiBxdWFkcywgQ2xpcHBpbmdPcHRpb24gb3B0aW9uKQordm9pZCBSZW5kZXJUZXh0
OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcywgQ2xpcHBpbmdPcHRp
b24gb3B0aW9uKQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAgICAgICAgIEludFJlY3QgYm91
bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwpAQCAtMzU2LDE2ICszNTYsMTYg
QEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldEhlaWdo
dChlbGxpcHNpc1JlY3QubWF4WSgpIC0gYm91bmRhcmllcy55KCkpOwogICAgICAgICB9Ci0gICAg
ICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3VuZGFyaWVz
KSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1Jl
Y3QoYm91bmRhcmllcykpKTsKICAgICB9CiB9CiAgICAgCi12b2lkIFJlbmRlclRleHQ6OmFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsKICAgICBhYnNvbHV0ZVF1
YWRzKHF1YWRzLCBOb0NsaXBwaW5nKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1
YWRzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3ZvaWQgUmVuZGVyVGV4dDo6YWJz
b2x1dGVRdWFkc0ZvclJhbmdlKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcywgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpCiB7CiAgICAgLy8g
V29yayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVkIGlzc3Vlcy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB1
bnNpZ25lZHMsIGFuZCBpcyBvZnRlbiBwYXNzZWQgVUlOVF9NQVgKICAgICAvLyB0byBtZWFuICJh
bGwgdGhlIHdheSB0byB0aGUgZW5kIi4gSW5saW5lVGV4dEJveCBjb29yZGluYXRlcyBhcmUgdW5z
aWduZWRzLCBzbyBjaGFuZ2luZyB0aGlzIApAQCAtMzkxLDcgKzM5MSw3IEBACiAgICAgICAgICAg
ICAgICAgICAgIHIuc2V0WChzZWxlY3Rpb25SZWN0LngoKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KHIpKSk7CisgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChHcmFwaGljc1JlY3QocikpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7CiAgICAgICAgICAg
ICBJbnRSZWN0IHIgPSBib3gtPnNlbGVjdGlvblJlY3Qoc3RhcnQsIHJlYWxFbmQpOwpAQCAtNDA2
LDcgKzQwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByLnNldFgoYm94LT54KCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyKSkpOworICAgICAg
ICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChy
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTc2LDcgKzk3Niw3IEBA
CiAgICAgcmV0dXJuIGN1cnJQb3MgPj0gKGZyb20gKyBsZW4pOwogfQogCi1GbG9hdFBvaW50IFJl
bmRlclRleHQ6OmZpcnN0UnVuT3JpZ2luKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyVGV4
dDo6Zmlyc3RSdW5PcmlnaW4oKSBjb25zdAogewogICAgIHJldHVybiBJbnRQb2ludChmaXJzdFJ1
blgoKSwgZmlyc3RSdW5ZKCkpOwogfQpAQCAtMTMzMyw3ICsxMzMzLDcgQEAKICAgICAgICAgZmxv
YXQgeSA9IGlzSG9yaXpvbnRhbCA/IGZpcnN0VGV4dEJveCgpLT55KCkgOiBsb2dpY2FsTGVmdFNp
ZGU7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gaXNIb3Jpem9udGFsID8gbG9naWNhbFJpZ2h0U2lk
ZSAtIGxvZ2ljYWxMZWZ0U2lkZSA6IGxhc3RUZXh0Qm94KCktPmxvZ2ljYWxCb3R0b20oKSAtIHg7
CiAgICAgICAgIGZsb2F0IGhlaWdodCA9IGlzSG9yaXpvbnRhbCA/IGxhc3RUZXh0Qm94KCktPmxv
Z2ljYWxCb3R0b20oKSAtIHkgOiBsb2dpY2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlOwot
ICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7CisgICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTQxOCw3ICsxNDE4LDcgQEAKICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpCiAgICAgICAg
ICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7CiAKLSAgICAgICAgcmVjdCA9IGxv
Y2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFk
KEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBACiAgICAgUmVuZGVyQ29tYmluZVRleHQoTm9kZSosIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4pOwogCiAgICAgdm9pZCBjb21iaW5lVGV4dCgpOwotICAgIHZvaWQgYWRqdXN0
VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihHcmFwaGljc1BvaW50JiB0ZXh0
T3JpZ2luLCBjb25zdCBHcmFwaGljc1JlY3QmIGJveFJlY3QpIGNvbnN0OwogICAgIHZvaWQgY2hh
cmFjdGVyc1RvUmVuZGVyKGludCBzdGFydCwgY29uc3QgVUNoYXIqJiBjaGFyYWN0ZXJzLCBpbnQm
IGxlbmd0aCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbWJpbmVkOyB9CiAgICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9u
dCkgY29uc3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBACiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIg
PDwgcC55KCkgPDwgIikiOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGbG9hdFBvaW50JiBwKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICB0cyA8PCAiKCI7ICAgIAog
ICAgIGlmIChoYXNGcmFjdGlvbnMocC54KCkpKQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgcmV0
dXJuIHRzIDw8ICIpIjsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmxvYXRTaXplJiBzKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgR3JhcGhpY3NTaXplJiBzKQogewogICAgIHRzIDw8ICJ3aWR0aD0iOwogICAg
IGlmIChoYXNGcmFjdGlvbnMocy53aWR0aCgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyAr
MTk1LDcgQEAKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZW5kUG9zID0gdGV4dFJ1
bi5sZW5ndGgoKTsKIAotICAgIEludFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxl
Y3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbFRv
cCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIEludFJlY3QgciA9IGVuY2xvc2luZ0lu
dFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBHcmFwaGljc1BvaW50KGxv
Z2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOwogCiAgICAgaW50
IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54KCkgPiBsb2dpY2FsUmlnaHQo
KSkKQEAgLTM1MCw5ICszNTAsOSBAQAogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVk
aW5nRmxpcHBpbmcoKTsKKyAgICBHcmFwaGljc1BvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5j
bHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0
KTsKLSAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7CisgICAgR3JhcGhpY3NS
ZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1
bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMo
cmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpIHsKICAgICAgICAgcmVuZGVy
ZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2lu
dEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogICAgICAg
ICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5v
ZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgcmVjdCkpCkBAIC0zNjEsMjYgKzM2MSwyNiBAQAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotRmxvYXRTaXplIElubGluZVRleHRCb3g6OmFwcGx5U2hhZG93
VG9HcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3csIGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3QsIGJvb2wgc3Ryb2tlZCwgYm9v
bCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRhbCkKK0dyYXBoaWNzU2l6ZSBJbmxpbmVUZXh0Qm94Ojph
cHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBHcmFwaGljc1JlY3QmIHRleHRSZWN0LCBib29s
IHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwpCiB7CiAgICAgaWYgKCFzaGFk
b3cpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
U2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIGV4dHJhT2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSBl
eHRyYU9mZnNldDsKICAgICBpbnQgc2hhZG93WCA9IGhvcml6b250YWwgPyBzaGFkb3ctPngoKSA6
IHNoYWRvdy0+eSgpOwogICAgIGludCBzaGFkb3dZID0gaG9yaXpvbnRhbCA/IHNoYWRvdy0+eSgp
IDogLXNoYWRvdy0+eCgpOwotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoc2hhZG93WCwgc2hh
ZG93WSk7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldChzaGFkb3dYLCBzaGFkb3dZKTsK
ICAgICBpbnQgc2hhZG93Qmx1ciA9IHNoYWRvdy0+Ymx1cigpOwogICAgIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvciA9IHNoYWRvdy0+Y29sb3IoKTsKIAogICAgIGlmIChzaGFkb3ctPm5leHQoKSB8
fCBzdHJva2VkIHx8ICFvcGFxdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QodGV4
dFJlY3QpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2hhZG93UmVjdCh0ZXh0UmVjdCk7CiAgICAg
ICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzaGFkb3dCbHVyKTsKICAgICAgICAgc2hhZG93UmVjdC5t
b3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgY29u
dGV4dC0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICBleHRyYU9mZnNldCA9IEZsb2F0U2l6
ZSgwLCAyICogdGV4dFJlY3QuaGVpZ2h0KCkgKyBtYXgoMC4wZiwgc2hhZG93T2Zmc2V0LmhlaWdo
dCgpKSArIHNoYWRvd0JsdXIpOworICAgICAgICBleHRyYU9mZnNldCA9IEdyYXBoaWNzU2l6ZSgw
LCAyICogdGV4dFJlY3QuaGVpZ2h0KCkgKyBtYXg8R3JhcGhpY3NVbml0PigwLjBmLCBzaGFkb3dP
ZmZzZXQuaGVpZ2h0KCkpICsgc2hhZG93Qmx1cik7CiAgICAgICAgIHNoYWRvd09mZnNldCAtPSBl
eHRyYU9mZnNldDsKICAgICB9CiAKQEAgLTM4OCw4ICszODgsOCBAQAogICAgIHJldHVybiBleHRy
YU9mZnNldDsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNl
dCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cs
IGJvb2wgc3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQorc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0
aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50
IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQg
dHJ1bmNhdGlvblBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50JiB0ZXh0T3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBib3hSZWN0LCBj
b25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQog
ewogICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQtPmZpbGxDb2xvcigpOwogICAgIENvbG9y
U3BhY2UgZmlsbENvbG9yU3BhY2UgPSBjb250ZXh0LT5maWxsQ29sb3JTcGFjZSgpOwpAQCAtNDYw
LDcgKzQ2MCw3IEBACiAKIGVudW0gUm90YXRpb25EaXJlY3Rpb24geyBDb3VudGVyY2xvY2t3aXNl
LCBDbG9ja3dpc2UgfTsKIAotc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb24o
Y29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBSb3RhdGlvbkRpcmVjdGlvbiBjbG9ja3dpc2UpCitz
dGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjb25zdCBHcmFwaGljc1JlY3Qm
IGJveFJlY3QsIFJvdGF0aW9uRGlyZWN0aW9uIGNsb2Nrd2lzZSkKIHsKICAgICByZXR1cm4gY2xv
Y2t3aXNlID8gQWZmaW5lVHJhbnNmb3JtKDAsIDEsIC0xLCAwLCBib3hSZWN0LngoKSArIGJveFJl
Y3QubWF4WSgpLCBib3hSZWN0Lm1heFkoKSAtIGJveFJlY3QueCgpKQogICAgICAgICA6IEFmZmlu
ZVRyYW5zZm9ybSgwLCAtMSwgMSwgMCwgYm94UmVjdC54KCkgLSBib3hSZWN0Lm1heFkoKSwgYm94
UmVjdC54KCkgKyBib3hSZWN0Lm1heFkoKSk7CkBAIC01MTksOSArNTE5LDkgQEAKICAgICAKICAg
ICBhZGp1c3RlZFBhaW50T2Zmc2V0Lm1vdmUoMCwgc3R5bGVUb1VzZS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IDAgOiAtbG9naWNhbEhlaWdodCgpKTsKIAotICAgIEZsb2F0UG9pbnQgYm94
T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOworICAgIEdyYXBoaWNzUG9pbnQg
Ym94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOwogICAgIGJveE9yaWdpbi5t
b3ZlKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7Ci0g
ICAgRmxvYXRSZWN0IGJveFJlY3QoYm94T3JpZ2luLCBMYXlvdXRTaXplKGxvZ2ljYWxXaWR0aCgp
LCBsb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICBHcmFwaGljc1JlY3QgYm94UmVjdChib3hPcmlnaW4s
IExheW91dFNpemUobG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQoKSkpOwogCiAgICAgUmVu
ZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCA9IHN0eWxlVG9Vc2UtPmhhc1RleHRDb21iaW5l
KCkgJiYgdGV4dFJlbmRlcmVyKCktPmlzQ29tYmluZVRleHQoKSAmJiB0b1JlbmRlckNvbWJpbmVU
ZXh0KHRleHRSZW5kZXJlcigpKS0+aXNDb21iaW5lZCgpID8gdG9SZW5kZXJDb21iaW5lVGV4dCh0
ZXh0UmVuZGVyZXIoKSkgOiAwOwogCkBAIC01MzYsNyArNTM2LDcgQEAKICAgICAvLyBTZXQgb3Vy
IGZvbnQuCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9Vc2UtPmZvbnQoKTsKIAotICAg
IEZsb2F0UG9pbnQgdGV4dE9yaWdpbiA9IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSwgYm94T3Jp
Z2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAgR3JhcGhpY3NQb2lu
dCB0ZXh0T3JpZ2luID0gR3JhcGhpY3NQb2ludChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgp
ICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKIAogICAgIGlmIChjb21iaW5lZFRleHQp
CiAgICAgICAgIGNvbWJpbmVkVGV4dC0+YWRqdXN0VGV4dE9yaWdpbih0ZXh0T3JpZ2luLCBib3hS
ZWN0KTsKQEAgLTY5MSw3ICs2OTEsNyBAQAogCiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFRleHRSdW4sIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciwgMSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNN
YXJrVGV4dFJ1biA9IGNvbWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4
dFJ1biA6IHRleHRSdW47Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRP
cmlnaW4gPSBjb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0
LndpZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgp
KSA6IHRleHRPcmlnaW47CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGVtcGhhc2lzTWFya1Rl
eHRPcmlnaW4gPSBjb21iaW5lZFRleHQgPyBHcmFwaGljc1BvaW50KGJveE9yaWdpbi54KCkgKyBi
b3hSZWN0LndpZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFz
Y2VudCgpKSA6IHRleHRPcmlnaW47CiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDbG9ja3dp
c2UpKTsKIApAQCAtNzE3LDcgKzcxNyw3IEBACiAKICAgICAgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVGV4dFJ1biwgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoJm9iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNp
c01hcmtUZXh0UnVuID0gY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJU
ZXh0UnVuIDogdGV4dFJ1bjsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgZW1waGFzaXNNYXJrVGV4
dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIGJveFJl
Y3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpIDogdGV4dE9yaWdpbjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgZW1waGFzaXNNYXJr
VGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSAr
IGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpIDogdGV4dE9yaWdpbjsKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRleHQpCiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENsb2Nr
d2lzZSkpOwogCkBAIC03ODYsNyArNzg2LDcgQEAKICAgICBlUG9zID0gbWluKGVuZFBvcyAtIG1f
c3RhcnQsIChpbnQpbV9sZW4pOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRleHRC
b3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQp
CiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtODIzLDkgKzgyMyw5IEBACiAKICAgICBpbnQgZGVsdGFZID0gcmVuZGVyZXIoKS0+c3R5
bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBs
b2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQg
c2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgRmxvYXRQb2ludCBsb2NhbE9yaWdp
bihib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKKyAgICBHcmFwaGljc1Bv
aW50IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOwog
Ci0gICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvY2FsT3JpZ2luLCBGbG9hdFNpemUobV9sb2dpY2Fs
V2lkdGgsIHNlbEhlaWdodCkpOworICAgIEdyYXBoaWNzUmVjdCBjbGlwUmVjdChsb2NhbE9yaWdp
biwgR3JhcGhpY3NTaXplKG1fbG9naWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKICAgICBmbG9hdCBt
YXhYID0gZmxvb3JmKGNsaXBSZWN0Lm1heFgoKSk7CiAgICAgY2xpcFJlY3Quc2V0WChmbG9vcmYo
Y2xpcFJlY3QueCgpKSk7CiAgICAgY2xpcFJlY3Quc2V0V2lkdGgobWF4WCAtIGNsaXBSZWN0Lngo
KSk7CkBAIC04MzQsNyArODM0LDcgQEAKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4
dChmb250LCB0ZXh0UnVuLCBsb2NhbE9yaWdpbiwgc2VsSGVpZ2h0LCBjLCBzdHlsZS0+Y29sb3JT
cGFjZSgpLCBzUG9zLCBlUG9zKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBv
c2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQg
c3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRp
b25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGludCBz
dGFydFBvcywgaW50IGVuZFBvcykKIHsKICAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKICAgICBp
bnQgc1BvcyA9IG1heChzdGFydFBvcyAtIG9mZnNldCwgMCk7CkBAIC04NTEsNyArODUxLDcgQEAK
IAogICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dy
aXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2lj
YWxUb3AoKSAtIHNlbGVjdGlvblRvcCgpOwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25I
ZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9y
aWdpbi55KCkgLSBkZWx0YVkpOworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxPcmlnaW4oYm94T3Jp
Z2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hs
aWdodEZvclRleHQoZm9udCwgY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCksIGxvY2FsT3Jp
Z2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogfQog
CkBAIC04NjcsMjAgKzg2NywyMCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBSb290SW5saW5l
Qm94KiByID0gcm9vdCgpOwotICAgIEZsb2F0UmVjdCByb290UmVjdChwYWludE9mZnNldC54KCkg
KyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlvblRvcCgpLCByLT5sb2dpY2FsV2lk
dGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCB0ZXh0UmVjdChwYWludE9m
ZnNldC54KCkgKyB4KCksIHJvb3RSZWN0LnkoKSwgbG9naWNhbFdpZHRoKCksIHJvb3RSZWN0Lmhl
aWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3Qgcm9vdFJlY3QocGFpbnRPZmZzZXQueCgpICsgci0+
eCgpLCBwYWludE9mZnNldC55KCkgKyBzZWxlY3Rpb25Ub3AoKSwgci0+bG9naWNhbFdpZHRoKCks
IHNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3QgdGV4dFJlY3QocGFpbnRPZmZz
ZXQueCgpICsgeCgpLCByb290UmVjdC55KCksIGxvZ2ljYWxXaWR0aCgpLCByb290UmVjdC5oZWln
aHQoKSk7CiAKICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGlnaGxp
Z2h0KHJlbmRlcmVyKCktPm5vZGUoKSwgdHlwZSwgdGV4dFJlY3QsIHJvb3RSZWN0LCB0cnVlLCBm
YWxzZSk7CiB9CiAKICNlbmRpZgogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
aW50IGRlY28sIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKK3ZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgYm94T3JpZ2luLCBpbnQgZGVjbywgY29uc3QgU2hhZG93RGF0YSogc2hhZG93KQogewog
ICAgIGlmIChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQogICAgICAgICByZXR1cm47
CiAKLSAgICBGbG9hdFBvaW50IGxvY2FsT3JpZ2luID0gYm94T3JpZ2luOworICAgIEdyYXBoaWNz
UG9pbnQgbG9jYWxPcmlnaW4gPSBib3hPcmlnaW47CiAKICAgICBmbG9hdCB3aWR0aCA9IG1fbG9n
aWNhbFdpZHRoOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewpAQCAt
OTA1LDkgKzkwNSw5IEBACiAgICAgYm9vbCBzZXRDbGlwID0gZmFsc2U7CiAgICAgaW50IGV4dHJh
T2Zmc2V0ID0gMDsKICAgICBpZiAoIWxpbmVzQXJlT3BhcXVlICYmIHNoYWRvdyAmJiBzaGFkb3ct
Pm5leHQoKSkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QobG9jYWxPcmlnaW4sIEZsb2F0
U2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBjbGlwUmVj
dChsb2NhbE9yaWdpbiwgR3JhcGhpY3NTaXplKHdpZHRoLCBiYXNlbGluZSArIDIpKTsKICAgICAg
ICAgZm9yIChjb25zdCBTaGFkb3dEYXRhKiBzID0gc2hhZG93OyBzOyBzID0gcy0+bmV4dCgpKSB7
Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXpl
KHdpZHRoLCBiYXNlbGluZSArIDIpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dS
ZWN0KGxvY2FsT3JpZ2luLCBHcmFwaGljc1NpemUod2lkdGgsIGJhc2VsaW5lICsgMikpOwogICAg
ICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHMtPmJsdXIoKSk7CiAgICAgICAgICAgICBpbnQg
c2hhZG93WCA9IGlzSG9yaXpvbnRhbCgpID8gcy0+eCgpIDogcy0+eSgpOwogICAgICAgICAgICAg
aW50IHNoYWRvd1kgPSBpc0hvcml6b250YWwoKSA/IHMtPnkoKSA6IC1zLT54KCk7CkBAIC05MzQs
NyArOTM0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCBzaGFkb3dYID0gaXNI
b3Jpem9udGFsKCkgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOwogICAgICAgICAgICAgaW50
IHNoYWRvd1kgPSBpc0hvcml6b250YWwoKSA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgpOwot
ICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZ
IC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xvcigpLCBjb2xvclNw
YWNlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93
WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5ibHVyKCksIHNoYWRvdy0+Y29sb3Io
KSwgY29sb3JTcGFjZSk7CiAgICAgICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgICAgICAg
ICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTk0Myw3ICs5NDMsNyBA
QAogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lLCBjb2xvclNw
YWNlKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
ICAgICAgICAgICAgIC8vIExlYXZlIG9uZSBwaXhlbCBvZiB3aGl0ZSBiZXR3ZWVuIHRoZSBiYXNl
bGluZSBhbmQgdGhlIHVuZGVybGluZS4KLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdMaW5lRm9y
VGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxPcmlnaW4ueSgpICsgYmFzZWxp
bmUgKyAxKSwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0xp
bmVGb3JUZXh0KEdyYXBoaWNzUG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkg
KyBiYXNlbGluZSArIDEpLCB3aWR0aCwgaXNQcmludGluZyk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGRlY28gJiBPVkVSTElORSkgewogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3Iob3ZlcmxpbmUsIGNvbG9yU3BhY2UpOwpAQCAtOTUzLDcgKzk1Myw3IEBACiAgICAgICAgIGlm
IChkZWNvICYgTElORV9USFJPVUdIKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihsaW5ldGhyb3VnaCwgY29sb3JTcGFjZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZv
clRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSArIDIgKiBi
YXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5k
cmF3TGluZUZvclRleHQoR3JhcGhpY3NQb2ludChsb2NhbE9yaWdpbi54KCksIGxvY2FsT3JpZ2lu
LnkoKSArIDIgKiBiYXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmludGluZyk7CiAgICAgICAgIH0K
ICAgICB9IHdoaWxlIChzaGFkb3cpOwogCkBAIC05NzgsNyArOTc4LDcgQEAKICAgICB9CiB9CiAK
LXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGlj
c0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2Vy
KiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFt
bWFyKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdy
YXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgRG9jdW1l
bnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBi
b29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJr
ZXJzICg1MzI3ODg3KQogICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+cHJpbnRp
bmcoKSkKQEAgLTEwMDksNyArMTAwOSw3IEBACiAgICAgICAgIC8vIENhbGN1bGF0ZSBzdGFydCAm
IHdpZHRoCiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBw
ZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20o
KSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgpOwogICAgICAgICBpbnQgc2VsSGVpZ2h0
ID0gc2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChib3hP
cmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOwogICAg
ICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpOwogCiAgICAg
ICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoZSBkb2N1bWVudCBtYXJrZXJzIHRvIGZsb2F0IHJlY3Rz
LgpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKICAgICAgICAgLy8gZGlzcGxheSBhIHRvb2xUaXAuIFdl
IGRvbid0IGRvIHRoaXMgZm9yIG1pc3NwZWxsaW5nIG1hcmtlcnMuCiAgICAgICAgIGlmIChncmFt
bWFyKSB7CiAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmUoLWJveE9yaWdpbi54KCksIC1ib3hP
cmlnaW4ueSgpKTsKLSAgICAgICAgICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKKyAgICAgICAgICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEdyYXBoaWNzUmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAg
ICAgICAgICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJl
Y3QobWFya2VyUmVjdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQzLDEwICsxMDQzLDEwIEBA
CiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5kZXJsaW5l
IHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAgICB1bmRl
cmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5kcmF3TGluZUZvclRl
eHRDaGVja2luZyhGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnko
KSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVGb3JNYXJr
ZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dENoZWNraW5n
KEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgdW5k
ZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtlclR5cGUo
bWFya2VyLT50eXBlKCkpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRj
aE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYg
Zm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3ND
b250ZXh0KiBwdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtl
ciogbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAg
Ly8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0IGFzIGZvciBzZWxlY3Rpb24sIHNv
IHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIGhpZ2hsaWdodCBhcmUgb24KICAgICAv
LyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgpAQCAtMTA1
OSw3ICsxMDU5LDcgQEAKIAogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVj
dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCByZWN0IGlzIGluIGFi
c29sdXRlIGNvb3JkaW5hdGVzLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBvaW50KHgoKSwgc2VsZWN0
aW9uVG9wKCkpLCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsKLSAgICBtYXJrZXJSZWN0ID0gcmVu
ZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CisgICAgbWFya2VyUmVjdCA9IHJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOwogICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJl
Y3QobWFya2VyUmVjdCk7CiAgICAgCiAgICAgLy8gT3B0aW9uYWxseSBoaWdobGlnaHQgdGhlIHRl
eHQKQEAgLTEwNjksOCArMTA2OSw4IEBACiAgICAgICAgICAgICByZW5kZXJlcigpLT50aGVtZSgp
LT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCk7CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcHQpOwogICAgICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwgMCwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7
ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotICAgICAgICBwdC0+Y2xpcChGbG9hdFJlY3Qo
Ym94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSwgbV9sb2dpY2FsV2lkdGgsIHNl
bEhlaWdodCkpOwotICAgICAgICBwdC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgcnVuLCBG
bG9hdFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpLCBzZWxIZWln
aHQsIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKKyAgICAgICAgcHQt
PmNsaXAoR3JhcGhpY3NSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVks
IG1fbG9naWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKKyAgICAgICAgcHQtPmRyYXdIaWdobGlnaHRG
b3JUZXh0KGZvbnQsIHJ1biwgR3JhcGhpY3NQb2ludChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4u
eSgpIC0gZGVsdGFZKSwgc2VsSGVpZ2h0LCBjb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1Bv
cywgZVBvcyk7CiAgICAgfQogfQogCkBAIC0xMDg3LDExICsxMDg3LDExIEBACiAgICAgCiAgICAg
Ly8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2Vy
LgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rp
b25SZWN0Rm9yVGV4dChydW4sIHN0YXJ0UG9pbnQsIGgsIHNQb3MsIGVQb3MpKTsKLSAgICBtYXJr
ZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2Vy
UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgbWFya2VyUmVjdCA9IHJlbmRlcmVy
KCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmtlclJlY3QpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOwogICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5z
ZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiB9CiAgICAgCi12b2lkIElubGluZVRleHRCb3g6
OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29s
IGJhY2tncm91bmQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdy
YXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCiB7CiAgICAg
aWYgKCFyZW5kZXJlcigpLT5ub2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNTQsNyArMTE1
NCw3IEBACiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25V
bmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkKK3ZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQqIGN0eCwgY29u
c3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYg
dW5kZXJsaW5lKQogewogICAgIGlmIChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQog
ICAgICAgICByZXR1cm47CkBAIC0xMTk2LDcgKzExOTYsNyBAQAogCiAgICAgY3R4LT5zZXRTdHJv
a2VDb2xvcih1bmRlcmxpbmUuY29sb3IsIHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2Uo
KSk7CiAgICAgY3R4LT5zZXRTdHJva2VUaGlja25lc3MobGluZVRoaWNrbmVzcyk7Ci0gICAgY3R4
LT5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9y
aWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkgLSBsaW5lVGhpY2tuZXNzKSwgd2lkdGgsIHRleHRS
ZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmludGluZygpKTsKKyAgICBjdHgtPmRyYXdMaW5lRm9y
VGV4dChHcmFwaGljc1BvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSAr
IGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MpLCB3aWR0aCwgdGV4dFJlbmRlcmVyKCkt
PmRvY3VtZW50KCktPnByaW50aW5nKCkpOwogfQogCiBpbnQgSW5saW5lVGV4dEJveDo6Y2FyZXRN
aW5PZmZzZXQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4Myw3ICs1ODMsNyBAQAogICAgIEludFJlY3QgYWRqdXN0ZWRSZWN0ID0gYm9yZGVyUmVjdDsK
ICAgICAvLyBXZSBuZWVkIHRvIHNocmluayB0aGUgYm9yZGVyIGJ5IG9uZSBkZXZpY2UgcGl4ZWwg
b24gZWFjaCBzaWRlLgogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0o
KTsKLSAgICBGbG9hdFNpemUgY29udGV4dFNjYWxlKHN0YXRpY19jYXN0PGZsb2F0PihjdG0ueFNj
YWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgpKSk7CisgICAgR3JhcGhpY3NT
aXplIGNvbnRleHRTY2FsZShzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnhTY2FsZSgpKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUoKSkpOwogICAgIGFkanVzdGVkUmVjdC5pbmZsYXRlWCgt
Y2VpbGYoMSAvIGNvbnRleHRTY2FsZS53aWR0aCgpKSk7CiAgICAgYWRqdXN0ZWRSZWN0LmluZmxh
dGVZKC1jZWlsZigxIC8gY29udGV4dFNjYWxlLmhlaWdodCgpKSk7CiAgICAgcmV0dXJuIGFkanVz
dGVkUmVjdDsKQEAgLTE5MzYsMjYgKzE5MzYsMjYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9p
ZCBmaW5kSW5uZXJWZXJ0ZXgoY29uc3QgRmxvYXRQb2ludCYgb3V0ZXJDb3JuZXIsIGNvbnN0IEZs
b2F0UG9pbnQmIGlubmVyQ29ybmVyLCBjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJQb2ludCwgRmxv
YXRQb2ludCYgcmVzdWx0KQorc3RhdGljIHZvaWQgZmluZElubmVyVmVydGV4KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIG91dGVyQ29ybmVyLCBjb25zdCBHcmFwaGljc1BvaW50JiBpbm5lckNvcm5lciwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgY2VudGVyUG9pbnQsIEdyYXBoaWNzUG9pbnQmIHJlc3VsdCkK
IHsKICAgICAvLyBJZiB0aGUgbGluZSBiZXR3ZWVuIG91dGVyIGFuZCBpbm5lciBjb3JuZXIgaXMg
dG93YXJkcyB0aGUgaG9yaXpvbnRhbCwgaW50ZXJzZWN0IHdpdGggYSB2ZXJ0aWNhbCBsaW5lIHRo
cm91Z2ggdGhlIGNlbnRlciwKICAgICAvLyBvdGhlcndpc2Ugd2l0aCBhIGhvcml6b250YWwgbGlu
ZSB0aHJvdWdoIHRoZSBjZW50ZXIuIFRoZSBwb2ludHMgdGhhdCBmb3JtIHRoaXMgbGluZSBhcmUg
YXJiaXRyYXJ5ICh3ZSB1c2UgMCwgMTAwKS4KICAgICAvLyBOb3RlIHRoYXQgaWYgZmluZEludGVy
c2VjdGlvbiBmYWlscywgaXQgd2lsbCBsZWF2ZSByZXN1bHQgdW50b3VjaGVkLgogICAgIGlmIChm
YWJzKG91dGVyQ29ybmVyLngoKSAtIGlubmVyQ29ybmVyLngoKSkgPiBmYWJzKG91dGVyQ29ybmVy
LnkoKSAtIGlubmVyQ29ybmVyLnkoKSkpCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJD
b3JuZXIsIGlubmVyQ29ybmVyLCBGbG9hdFBvaW50KGNlbnRlclBvaW50LngoKSwgMCksIEZsb2F0
UG9pbnQoY2VudGVyUG9pbnQueCgpLCAxMDApLCByZXN1bHQpOworICAgICAgICBmaW5kSW50ZXJz
ZWN0aW9uKG91dGVyQ29ybmVyLCBpbm5lckNvcm5lciwgR3JhcGhpY3NQb2ludChjZW50ZXJQb2lu
dC54KCksIDApLCBHcmFwaGljc1BvaW50KGNlbnRlclBvaW50LngoKSwgMTAwKSwgcmVzdWx0KTsK
ICAgICBlbHNlCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJDb3JuZXIsIGlubmVyQ29y
bmVyLCBGbG9hdFBvaW50KDAsIGNlbnRlclBvaW50LnkoKSksIEZsb2F0UG9pbnQoMTAwLCBjZW50
ZXJQb2ludC55KCkpLCByZXN1bHQpOworICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyQ29y
bmVyLCBpbm5lckNvcm5lciwgR3JhcGhpY3NQb2ludCgwLCBjZW50ZXJQb2ludC55KCkpLCBHcmFw
aGljc1BvaW50KDEwMCwgY2VudGVyUG9pbnQueSgpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IFJv
dW5kZWRSZWN0JiBpbm5lckJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCb3hTaWRlIHNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9v
bCBzZWNvbmRFZGdlTWF0Y2hlcykKIHsKLSAgICBGbG9hdFBvaW50IHF1YWRbNF07CisgICAgR3Jh
cGhpY3NQb2ludCBxdWFkWzRdOwogCiAgICAgY29uc3QgSW50UmVjdCYgb3V0ZXJSZWN0ID0gb3V0
ZXJCb3JkZXIucmVjdCgpOwogICAgIGNvbnN0IEludFJlY3QmIGlubmVyUmVjdCA9IGlubmVyQm9y
ZGVyLnJlY3QoKTsKIAotICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQoaW5uZXJSZWN0LmxvY2F0
aW9uKCkueCgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlubmVyUmVjdC53aWR0aCgpKSAvIDIsIGlu
bmVyUmVjdC5sb2NhdGlvbigpLnkoKSArIHN0YXRpY19jYXN0PGZsb2F0Pihpbm5lclJlY3QuaGVp
Z2h0KCkpIC8gMik7CisgICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQb2ludChpbm5lclJlY3QubG9j
YXRpb24oKS54KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJSZWN0LndpZHRoKCkpIC8gMiwg
aW5uZXJSZWN0LmxvY2F0aW9uKCkueSgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlubmVyUmVjdC5o
ZWlnaHQoKSkgLyAyKTsKIAogICAgIC8vIEZvciBlYWNoIHNpZGUsIGNyZWF0ZSBhIHF1YWQgdGhh
dCBlbmNvbXBhc3NlcyBhbGwgcGFydHMgb2YgdGhhdCBzaWRlIHRoYXQgbWF5IGRyYXcsCiAgICAg
Ly8gaW5jbHVkaW5nIGFyZWFzIGluc2lkZSB0aGUgaW5uZXJCb3JkZXIuCkBAIC0yMDMzLDE4ICsy
MDMzLDE4IEBACiAgICAgfQogCiAgICAgLy8gU3F1YXJlIG9mZiB0aGUgZW5kIHdoaWNoIHNob3Vs
ZG4ndCBiZSBhZmZlY3RlZCBieSBhbnRpYWxpYXNpbmcsIGFuZCBjbGlwLgotICAgIEZsb2F0UG9p
bnQgZmlyc3RRdWFkWzRdOworICAgIEdyYXBoaWNzUG9pbnQgZmlyc3RRdWFkWzRdOwogICAgIGZp
cnN0UXVhZFswXSA9IHF1YWRbMF07CiAgICAgZmlyc3RRdWFkWzFdID0gcXVhZFsxXTsKLSAgICBm
aXJzdFF1YWRbMl0gPSBzaWRlID09IEJTVG9wIHx8IHNpZGUgPT0gQlNCb3R0b20gPyBGbG9hdFBv
aW50KHF1YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkKLSAgICAgICAgOiBGbG9hdFBvaW50KHF1YWRb
Ml0ueCgpLCBxdWFkWzNdLnkoKSk7CisgICAgZmlyc3RRdWFkWzJdID0gc2lkZSA9PSBCU1RvcCB8
fCBzaWRlID09IEJTQm90dG9tID8gR3JhcGhpY3NQb2ludChxdWFkWzNdLngoKSwgcXVhZFsyXS55
KCkpCisgICAgICAgIDogR3JhcGhpY3NQb2ludChxdWFkWzJdLngoKSwgcXVhZFszXS55KCkpOwog
ICAgIGZpcnN0UXVhZFszXSA9IHF1YWRbM107CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwQ29u
dmV4UG9seWdvbig0LCBmaXJzdFF1YWQsICFmaXJzdEVkZ2VNYXRjaGVzKTsKIAotICAgIEZsb2F0
UG9pbnQgc2Vjb25kUXVhZFs0XTsKKyAgICBHcmFwaGljc1BvaW50IHNlY29uZFF1YWRbNF07CiAg
ICAgc2Vjb25kUXVhZFswXSA9IHF1YWRbMF07Ci0gICAgc2Vjb25kUXVhZFsxXSA9IHNpZGUgPT0g
QlNUb3AgfHwgc2lkZSA9PSBCU0JvdHRvbSA/IEZsb2F0UG9pbnQocXVhZFswXS54KCksIHF1YWRb
MV0ueSgpKQotICAgICAgICA6IEZsb2F0UG9pbnQocXVhZFsxXS54KCksIHF1YWRbMF0ueSgpKTsK
KyAgICBzZWNvbmRRdWFkWzFdID0gc2lkZSA9PSBCU1RvcCB8fCBzaWRlID09IEJTQm90dG9tID8g
R3JhcGhpY3NQb2ludChxdWFkWzBdLngoKSwgcXVhZFsxXS55KCkpCisgICAgICAgIDogR3JhcGhp
Y3NQb2ludChxdWFkWzFdLngoKSwgcXVhZFswXS55KCkpOwogICAgIHNlY29uZFF1YWRbMl0gPSBx
dWFkWzJdOwogICAgIHNlY29uZFF1YWRbM10gPSBxdWFkWzNdOwogICAgIC8vIEFudGlhbGlhc2lu
ZyBhZmZlY3RzIHRoZSBzZWNvbmQgc2lkZS4KQEAgLTIwODEsNyArMjA4MSw3IEBACiAgICAgICAg
ICFob3Jpem9udGFsIHx8IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UpOwogfQogCi1ib29sIFJlbmRl
ckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlKGNvbnN0IEZsb2F0
U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAorYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9y
ZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShjb25zdCBHcmFwaGljc1NpemUmIGNvbnRleHRTY2Fs
ZSkgY29uc3QKIHsKICAgICBCb3JkZXJFZGdlIGVkZ2VzWzRdOwogICAgIGdldEJvcmRlckVkZ2VJ
bmZvKGVkZ2VzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKQEAgLTE2Miw5ICsxNjIsOSBAQAogICAgIAogICAgIEludFNpemUgY29udGVudE9mZnNl
dEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CiAgICAgLy8gUmVzdWx0IGlzIHRyYW5zZm9ybSBv
cmlnaW4gaW4gcGl4ZWxzLgotICAgIEZsb2F0UG9pbnQzRCBjb21wdXRlVHJhbnNmb3JtT3JpZ2lu
KGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludDNEIGNv
bXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdDsKICAg
ICAvLyBSZXN1bHQgaXMgcGVyc3BlY3RpdmUgb3JpZ2luIGluIHBpeGVscy4KLSAgICBGbG9hdFBv
aW50IGNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNv
bnN0OworICAgIEdyYXBoaWNzUG9pbnQgY29tcHV0ZVBlcnNwZWN0aXZlT3JpZ2luKGNvbnN0IElu
dFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyT3BhY2l0eShj
b25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oY29uc3Qg
UmVuZGVyU3R5bGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAKICNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJv
eC5oIgpAQCAtNDcxLDcgKzQ3MSw3IEBACiAgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUmVj
dHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgIGVs
c2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBm
b3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9hdFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQg
KyBjdXJyLT50b3BMZWZ0KCksIGN1cnItPnNpemUoKSkpKTsKKyAgICAgICAgICAgIHJlY3RzLmFw
cGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBoaWNzUmVjdChhY2N1bXVsYXRlZE9mZnNldCAr
IGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSkpOwogICAgIH0gZWxzZQogICAgICAgICBy
ZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0U2l6ZSgpKSk7
CiAKQEAgLTQ5OSwxMSArNDk5LDExIEBACiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCog
cm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gt
PnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0
TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAg
ICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmly
c3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBjdXJyQm94LT5pbmxpbmVC
b3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgb2Zmc2V0LmhlaWdodCgp
ICsgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSAr
IGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRoKCkgKyBjdXJyQm94LT5pbmxp
bmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgb2Zmc2V0LmhlaWdo
dCgpICsgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQo
KSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53
aWR0aCgpICsgbG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgpICsgY3VyckJveC0+aW5saW5lQm94
V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3Vy
ckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdpbkJv
dHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KG9mZnNl
dC53aWR0aCgpICsgbG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgpICsgY3VyckJveC0+aW5saW5l
Qm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdodCwg
Y3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdp
bkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVj
dChyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1Jl
bmRlcklubGluZSgpKSB7CkBAIC01MTYsMTQgKzUxNiwxNCBAQAogICAgICAgICAgICAgICAgICAg
ICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RC
b3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94
LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lk
dGgoKSArIGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KG9mZnNldC53aWR0
aCgpICsgY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsg
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2Fs
UmlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0KTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
RmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgbG9naWNhbFRvcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3As
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmhlaWdodCgpICsgY2hpbGRMaW5l
LT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9naWNhbEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgp
ICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7CkBAIC01MzYsMzcgKzUzNiwzNyBA
QAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJv
b3QoKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxU
b3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0
eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUo
cm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHls
ZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWln
aHQoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAg
IEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsg
Y2hpbGRUZXh0LT54KCksIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRoKCkgKyBjaGlsZFRleHQtPngoKSwgb2Zmc2V0
LmhlaWdodCgpICsgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNh
bEhlaWdodCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0
KCkgKyBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lk
dGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQu
d2lkdGgoKSArIGxvZ2ljYWxUb3AsIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkVGV4dC0+eSgpLCBs
b2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgICAgICAg
ICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUXVh
ZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewogICAgIGlmICghYWx3YXlzQ3JlYXRl
TGluZUJveGVzKCkpCiAgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUXVhZHModGhpcywgcXVh
ZHMpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkg
ewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKLSAg
ICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnIt
PndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBsb2Nh
bFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgp
KTsKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVj
dCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgpKSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRv
QWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgpKSk7CiAKICAgICBpZiAoY29udGludWF0aW9uKCkp
CiAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKIH0KIAotdm9p
ZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5s
aW5lKiBjb250YWluZXIsIFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVySW5s
aW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFp
bmVyLCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgaWYgKCFjdWxsZWRJbmxp
bmVGaXJzdExpbmVCb3goKSkgewotICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QoKSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRl
UXVhZChHcmFwaGljc1JlY3QoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01ODMs
MTEgKzU4MywxMSBAQAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBj
dXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigp
LT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBs
b2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBGbG9h
dFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+
bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFy
Z2luTGVmdCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChjdXJyQm94LT5pbmxpbmVCb3hX
cmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgY3VyckJv
eC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0
KCksIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGN1cnJCb3gtPmlubGluZUJveFdy
YXBwZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJC
b3gtPmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0
b20oKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChsb2dpY2Fs
VG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRv
cCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRv
cCgpICsgY3VyckJveC0+bWFyZ2luQm90dG9tKCkpOwogICAgICAgICAgICAgICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKQEAgLTYwMCwxNCArNjAwLDE0
IEBACiAgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZExp
bmUtPnJvb3QoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94
LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWlu
ZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmlj
cygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBj
b250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgcmVzdWx0OwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGNoaWxk
TGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQo
KSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGxvZ2ljYWxUb3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdp
bkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgp
ICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dp
Y2FsUmlnaHQoKSk7CkBAIC02MjAsMTEgKzYyMCwxMSBAQAogICAgICAgICAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJl
cigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGlu
dCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0
eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBG
bG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxv
Z2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gR3JhcGhpY3NSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxv
Z2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQt
PnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQt
PnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc2OCwxNSArNzY4LDE1IEBACiAgICAgICAgIGZsb2F0
IHkgPSBpc0hvcml6b250YWwgPyBmaXJzdExpbmVCb3goKS0+eSgpIDogbG9naWNhbExlZnRTaWRl
OwogICAgICAgICBmbG9hdCB3aWR0aCA9IGlzSG9yaXpvbnRhbCA/IGxvZ2ljYWxSaWdodFNpZGUg
LSBsb2dpY2FsTGVmdFNpZGUgOiBsYXN0TGluZUJveCgpLT5sb2dpY2FsQm90dG9tKCkgLSB4Owog
ICAgICAgICBmbG9hdCBoZWlnaHQgPSBpc0hvcml6b250YWwgPyBsYXN0TGluZUJveCgpLT5sb2dp
Y2FsQm90dG9tKCkgLSB5IDogbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKLSAg
ICAgICAgcmVzdWx0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCkpOworICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBoaWNz
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQm91bmRpbmdCb3goY29u
c3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVySW5s
aW5lOjpjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5l
cikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgIEdyYXBoaWNzUmVjdCByZXN1
bHQ7CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpKQpAQCAtNzkxLDkgKzc5MSw5IEBACiAgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVy
ZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25a
ZXJvKEZsb2F0UmVjdChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gt
Pm1hcmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1h
cmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChjdXJy
Qm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgbG9n
aWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJC
b3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9n
aWNhbFRvcCwgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJn
aW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJn
aW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bml0ZUlmTm9uWmVybyhHcmFwaGljc1JlY3QobG9naWNhbFRvcCwgY3VyckJveC0+
aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhl
aWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gt
Pm1hcmdpbkJvdHRvbSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
ci0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNu
J3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCkBAIC04MDYsMTIg
KzgwNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gt
PmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5l
ci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNv
bnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0
KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChjaGls
ZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0
KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dp
Y2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdy
YXBoaWNzUmVjdChsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
TGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExl
ZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpKTsKQEAgLTgyNSw5ICs4MjUs
OSBAQAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRv
cCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShy
b290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxl
KHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdo
dCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2lj
YWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChjaGlsZFRl
eHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhl
aWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9n
aWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0KGxvZ2ljYWxUb3AsIGNoaWxk
VGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzQwLDEyICsxMzQwLDEyIEBACiAg
ICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6
ZShhZGRpdGlvbmFsT2Zmc2V0KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoSW5saW5lRmxv
d0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVC
b3goKSkKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEZsb2F0
UmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwgYWRkaXRpb25hbE9mZnNldC55
KCkgKyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOworICAgICAg
ICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoR3JhcGhpY3NSZWN0KGFkZGl0
aW9uYWxPZmZzZXQueCgpICsgY3Vyci0+eCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGN1cnIt
PnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7CiAgICAgfQogCiAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlz
TGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBvcyhhZGRpdGlvbmFsT2Zm
c2V0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zKGFkZGl0aW9uYWxPZmZzZXQpOwog
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRy
YW5zZm9ybXMuCiAgICAgICAgICAgICBpZiAoY3Vyci0+aGFzTGF5ZXIoKSkgCiAgICAgICAgICAg
ICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CkBAIC0xNTM2LDcgKzE1MzYsNyBA
QAogICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKCk7Cisg
ICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGUo
KTsKICAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRYKGFic1Bvcy54KCkgKyByZWdpb24uYm91bmRz
LngoKSk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQb3MueSgpICsgcmVnaW9uLmJv
dW5kcy55KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAg
LTQ2MSw5ICs0NjEsOSBAQAogICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFjY3VtdWxhdGVk
T2Zmc2V0LCBzaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewotICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKKyAgICBxdWFk
cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoMCwgMCwgd2lkdGgoKSwg
aGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgp
CkBAIC00NzYsMTUgKzQ3NiwxNSBAQAogSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVu
dEJveCgpIGNvbnN0CiB7CiAgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKLSAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAg
IEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSk7
CiAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0
OwogfQogCi1GbG9hdFF1YWQgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QK
K0dyYXBoaWNzUXVhZCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAogewog
ICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgcmV0dXJuIGxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlY3QpKTsKKyAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRl
UXVhZChHcmFwaGljc1JlY3QocmVjdCkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJveDo6b3V0bGlu
ZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEludFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0CkBAIC00OTIs
NyArNDkyLDcgQEAKICAgICBJbnRSZWN0IGJveCA9IGJvcmRlckJvdW5kaW5nQm94KCk7CiAgICAg
YWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKIAotICAgIEZsb2F0UXVhZCBjb250
YWluZXJSZWxhdGl2ZVF1YWQgPSBGbG9hdFJlY3QoYm94KTsKKyAgICBHcmFwaGljc1F1YWQgY29u
dGFpbmVyUmVsYXRpdmVRdWFkID0gR3JhcGhpY3NSZWN0KGJveCk7CiAgICAgaWYgKGNhY2hlZE9m
ZnNldFRvUmVwYWludENvbnRhaW5lcikKICAgICAgICAgY29udGFpbmVyUmVsYXRpdmVRdWFkLm1v
dmUoY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyLT54KCksIGNhY2hlZE9mZnNldFRvUmVw
YWludENvbnRhaW5lci0+eSgpKTsKICAgICBlbHNlCkBAIC04MTcsNyArODE3LDcgQEAKICAgICAg
ICAgcmV0dXJuIEJhY2tncm91bmRCbGVlZE5vbmU7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3Rt
ID0gY29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgRmxvYXRTaXplIGNvbnRleHRTY2FsaW5nKHN0YXRp
Y19jYXN0PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2Fs
ZSgpKSk7CisgICAgR3JhcGhpY3NTaXplIGNvbnRleHRTY2FsaW5nKHN0YXRpY19jYXN0PGZsb2F0
PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgpKSk7CiAgICAg
aWYgKGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29udGV4dFNjYWxpbmcpKQogICAgICAg
ICByZXR1cm4gQmFja2dyb3VuZEJsZWVkU2hyaW5rQmFja2dyb3VuZDsKICAgICAKQEAgLTEwODUs
MTEgKzEwODUsMTEgQEAKICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVCb3hXcmFwcGVy
KCk7CiAgICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkgOiAw
OwogICAgIGlmIChyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByb290UmVjdChwYWludE9mZnNldC54
KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVjdGlvblRvcCgpLCByLT5sb2dp
Y2FsV2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgICAgICBGbG9hdFJlY3QgaW1h
Z2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290
UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByb290UmVjdChwYWludE9mZnNl
dC54KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVjdGlvblRvcCgpLCByLT5s
b2dpY2FsV2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOworICAgICAgICBHcmFwaGljc1Jl
Y3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgp
LCByb290UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBi
ZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGltYWdl
UmVjdChwYWludE9mZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHkoKSwgd2lkdGgo
KSwgaGVpZ2h0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0
LngoKSArIHgoKSwgcGFpbnRPZmZzZXQueSgpICsgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAg
ICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9k
ZSgpLCB0eXBlLCBpbWFnZVJlY3QsIGltYWdlUmVjdCwgYmVoaW5kVGV4dCwgZmFsc2UpOwogICAg
IH0KIH0KQEAgLTEzNTUsNyArMTM1NSw3IEBACiAgICAgICAgIGJveC0+cmVtb3ZlKCk7CiAgICAg
ICAgIGJveC0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICB9IGVsc2UgaWYgKGlzUmVwbGFj
ZWQoKSkgewotICAgICAgICBzZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChi
b3gtPngoKSwgYm94LT55KCkpKSk7CisgICAgICAgIHNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2lu
dChHcmFwaGljc1BvaW50KGJveC0+eCgpLCBib3gtPnkoKSkpKTsKICAgICAgICAgbV9pbmxpbmVC
b3hXcmFwcGVyID0gYm94OwogICAgIH0KIH0KQEAgLTM0NDAsMTQgKzM0NDAsMTQgQEAKICAgICBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEludFNpemUob2Zmc2V0LndpZHRoKCks
IGhlaWdodCgpIC0gb2Zmc2V0LmhlaWdodCgpKSA6IEludFNpemUod2lkdGgoKSAtIG9mZnNldC53
aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwogfQogCi1GbG9hdFBvaW50IFJlbmRlckJveDo6Zmxp
cEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAorR3JhcGhp
Y3NQb2ludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBHcmFwaGljc1BvaW50
JiBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IEZsb2F0UG9pbnQocG9zaXRpb24ueCgpLCBoZWlnaHQoKSAt
IHBvc2l0aW9uLnkoKSkgOiBGbG9hdFBvaW50KHdpZHRoKCkgLSBwb3NpdGlvbi54KCksIHBvc2l0
aW9uLnkoKSk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBHcmFwaGlj
c1BvaW50KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55KCkpIDogR3JhcGhpY3NQ
b2ludCh3aWR0aCgpIC0gcG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogfQogCi12b2lkIFJl
bmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQg
UmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0JiByZWN0KSBjb25zdAog
ewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJDb2x1bW5J
bmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgpAQCAtMjc0Nyw3ICsyNzQ3LDcgQEAKICAgICAgICAgcmV0dXJuIEdhcFJlY3RzKCk7CiAK
ICAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zCi0gICAgVHJhbnNm
b3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGly
ZWN0aW9uLCBGbG9hdFBvaW50KCkpOworICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0YXRl
KFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgR3JhcGhpY3NQb2ludCgp
KTsKICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZhbHNlLCBmYWxz
ZSwgdHJhbnNmb3JtU3RhdGUpOwogICAgIEludFBvaW50IG9mZnNldEZyb21SZXBhaW50Q29udGFp
bmVyID0gcm91bmRlZEludFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpOwogCkBA
IC0yNzc2LDcgKzI3NzYsNyBAQAogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkgewog
ICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRz
KTsKICAgICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsQm91bmRzKTsK
LSAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVh
ZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCBsYXllci0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRv
Q29udGFpbmVyUXVhZChHcmFwaGljc1JlY3QobG9jYWxCb3VuZHMpLCBsYXllci0+cmVuZGVyZXIo
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNC
b3VuZHMubW92ZShsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBsYXllci0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRz
KGdhcFJlY3RzQm91bmRzKTsKQEAgLTU3MzMsNyArNTczMyw3IEBACiAgICAgICAgIHJlY3RzLmFw
cGVuZChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAotdm9pZCBS
ZW5kZXJCbG9jazo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lk
IFJlbmRlckJsb2NrOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykK
IHsKICAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5j
bHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQogICAgIC8vIGlubGlu
ZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVt
IHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCkBAIC01NzQxLDEyICs1NzQxLDEyIEBACiAgICAg
aWYgKGlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxvd3MgdGhhdCBhcmUgaG9yaXpvbnRhbC4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NzgxCi0gICAg
ICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpLAorICAg
ICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNl
ZE1hcmdpbkJlZm9yZSgpICsgY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgIHF1YWRz
LmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgICAgICBjb250aW51
YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHF1YWRz
LmFwcGVuZChSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdp
ZHRoKCksIGhlaWdodCgpKSkpOworICAgICAgICBxdWFkcy5hcHBlbmQoUmVuZGVyQm94Ojpsb2Nh
bFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsK
IH0KIAogSW50UmVjdCBSZW5kZXJCbG9jazo6cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCkKQEAg
LTU4NzQsMTAgKzU4NzQsMTAgQEAKIAogICAgICAgICAgICAgaW50IG15UmlnaHQgPSB4ICsgY2Fy
ZXRXaWR0aDsKICAgICAgICAgICAgIC8vIEZJWE1FOiB3aHkgY2FsbCBsb2NhbFRvQWJzb2x1dGVG
b3JDb250ZW50KCkgdHdpY2UgaGVyZSwgdG9vPwotICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNS
aWdodFBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXlSaWdodCwgMCkpOworICAg
ICAgICAgICAgR3JhcGhpY3NQb2ludCBhYnNSaWdodFBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEdy
YXBoaWNzUG9pbnQobXlSaWdodCwgMCkpOwogCiAgICAgICAgICAgICBpbnQgY29udGFpbmVyUmln
aHQgPSBjb250YWluaW5nQmxvY2soKS0+eCgpICsgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
Rm9yQ29udGVudCgpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNDb250YWluZXJQb2ludCA9
IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KGNvbnRhaW5lclJpZ2h0LCAwKSk7CisgICAgICAg
ICAgICBHcmFwaGljc1BvaW50IGFic0NvbnRhaW5lclBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEdy
YXBoaWNzUG9pbnQoY29udGFpbmVyUmlnaHQsIDApKTsKIAogICAgICAgICAgICAgKmV4dHJhV2lk
dGhUb0VuZE9mTGluZSA9IGFic0NvbnRhaW5lclBvaW50LngoKSAtIGFic1JpZ2h0UG9pbnQueCgp
OwogICAgICAgICB9CkBAIC01OTIwLDEyICs1OTIwLDEyIEBACiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0
TWFya2VyKCkgJiYgY3Vyci0+aXNCb3goKSkgewogICAgICAgICAgICAgICAgIFJlbmRlckJveCog
Ym94ID0gdG9SZW5kZXJCb3goY3Vycik7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3M7
CisgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwb3M7CiAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCiAgICAg
ICAgICAgICAgICAgaWYgKGJveC0+bGF5ZXIoKSkgCiAgICAgICAgICAgICAgICAgICAgIHBvcyA9
IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcG9zID0gRmxvYXRQb2ludChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJveC0+
eCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC0+eSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcG9zID0gR3JhcGhpY3NQb2ludChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJveC0+eCgpLCBh
ZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC0+eSgpKTsKICAgICAgICAgICAgICAgICBib3gtPmFk
ZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQocG9zKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNyAr
Mzg2LDcgQEAKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIsIHJvb3RMYXllciBp
cyB0aGUgbGF5ZXIgaXRzZWxmLgogICAgICAgICBJbnRSZWN0IHBhcmVudENsaXBSZWN0ID0gbV9v
d25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3RvciwgdHJ1ZSk7CiAgICAg
ICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludEluZm86OmluZmluaXRlUmVjdCgpKTsK
LSAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
KSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVudExvY2F0
aW9uKSk7CisgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRQb3NpdGlvbihHcmFw
aGljc1BvaW50KCkgKyAocGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQ
YXJlbnRMb2NhdGlvbikpOwogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0U2l6
ZShwYXJlbnRDbGlwUmVjdC5zaXplKCkpOwogCiAgICAgICAgIC8vIGJhY2tncm91bmRSZWN0IGlz
IHJlbGF0aXZlIHRvIGNvbXBBbmNlc3Rvciwgc28gc3VidHJhY3QgZGVsdGFYL2RlbHRhWSB0byBn
ZXQgYmFjayB0byBsb2NhbCBjb29yZHMuCkBAIC0zOTYsNyArMzk2LDcgQEAKICAgICAgICAgZ3Jh
cGhpY3NMYXllclBhcmVudExvY2F0aW9uID0gcGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKTsKICAg
ICB9CiAKLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSArIChy
ZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50
TG9jYXRpb24pKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9uKEdyYXBoaWNzUG9p
bnQoKSArIChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBncmFwaGljc0xh
eWVyUGFyZW50TG9jYXRpb24pKTsKICAgICAKICAgICBJbnRTaXplIG9sZE9mZnNldEZyb21SZW5k
ZXJlciA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAgICAgbV9ncmFw
aGljc0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIobG9jYWxDb21wb3NpdGluZ0JvdW5kcy5s
b2NhdGlvbigpIC0gSW50UG9pbnQoKSk7CkBAIC00MDUsOCArNDA1LDggQEAKICAgICBpZiAob2xk
T2Zmc2V0RnJvbVJlbmRlcmVyICE9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVy
KCkpCiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgCi0g
ICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX2dyYXBoaWNzTGF5ZXItPnNpemUoKTsKLSAgICBGbG9h
dFNpemUgbmV3U2l6ZSA9IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuc2l6ZSgpOworICAgIEdy
YXBoaWNzU2l6ZSBvbGRTaXplID0gbV9ncmFwaGljc0xheWVyLT5zaXplKCk7CisgICAgR3JhcGhp
Y3NTaXplIG5ld1NpemUgPSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnNpemUoKTsKICAgICBp
ZiAob2xkU2l6ZSAhPSBuZXdTaXplKSB7CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0U2l6
ZShuZXdTaXplKTsKICAgICAgICAgLy8gQSBib3VuZHMgY2hhbmdlIHdpbGwgYWxtb3N0IGFsd2F5
cyByZXF1aXJlIHJlZGlzcGxheS4gVXN1YWxseSB0aGF0IHJlZGlzcGxheQpAQCAtNDE5LDcgKzQx
OSw3IEBACiAgICAgSW50UmVjdCBjbGlwcGluZ0JveDsKICAgICBpZiAobV9jbGlwcGluZ0xheWVy
KSB7CiAgICAgICAgIGNsaXBwaW5nQm94ID0gY2xpcEJveCh0b1JlbmRlckJveChyZW5kZXJlcigp
KSk7Ci0gICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsg
KGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9u
KCkpKTsKKyAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50
KCkgKyAoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9j
YXRpb24oKSkpOwogICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNldFNpemUoY2xpcHBpbmdCb3gu
c2l6ZSgpKTsKICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIo
Y2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIEludFBvaW50KCkpOwogICAgIH0KQEAgLTQyOSw3ICs0
MjksNyBAQAogICAgICAgICAgICAgbV9tYXNrTGF5ZXItPnNldFNpemUobV9ncmFwaGljc0xheWVy
LT5zaXplKCkpOwogICAgICAgICAgICAgbV9tYXNrTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwog
ICAgICAgICB9Ci0gICAgICAgIG1fbWFza0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KCkp
OworICAgICAgICBtX21hc2tMYXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgpKTsKICAg
ICAgICAgbV9tYXNrTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihtX2dyYXBoaWNzTGF5ZXIt
Pm9mZnNldEZyb21SZW5kZXJlcigpKTsKICAgICB9CiAgICAgCkBAIC00NDAsOSArNDQwLDkgQEAK
ICAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5z
aXplKCkpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9uIGxh
eWVyIGRpbWVuc2lvbnMKLSAgICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNv
bXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNE
IHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKICAg
ICAgICAgLy8gQ29tcHV0ZSB0aGUgYW5jaG9yIHBvaW50LCB3aGljaCBpcyBpbiB0aGUgY2VudGVy
IG9mIHRoZSByZW5kZXJlciBib3ggdW5sZXNzIHRyYW5zZm9ybS1vcmlnaW4gaXMgc2V0LgotICAg
ICAgICBGbG9hdFBvaW50M0QgYW5jaG9yKHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMud2lkdGgo
KSAgIT0gMC4wZiA/ICgobGF5ZXJCb3VuZHMueCgpIC0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5k
cy54KCkpICsgdHJhbnNmb3JtT3JpZ2luLngoKSkgLyByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRz
LndpZHRoKCkgIDogMC41ZiwKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvcihyZWxhdGl2
ZUNvbXBvc2l0aW5nQm91bmRzLndpZHRoKCkgICE9IDAuMGYgPyAoKGxheWVyQm91bmRzLngoKSAt
IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMueCgpKSArIHRyYW5zZm9ybU9yaWdpbi54KCkpIC8g
cmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy53aWR0aCgpICA6IDAuNWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5oZWlnaHQoKSAhPSAwLjBm
ID8gKChsYXllckJvdW5kcy55KCkgLSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnkoKSkgKyB0
cmFuc2Zvcm1PcmlnaW4ueSgpKSAvIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuaGVpZ2h0KCkg
OiAwLjVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbi56KCkp
OwogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hvcik7CkBAIC00
NjQsMTcgKzQ2NCwxNyBAQAogICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQzRCgwLjVmLCAwLjVmLCAwKSk7CisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QW5jaG9y
UG9pbnQoR3JhcGhpY3NQb2ludDNEKDAuNWYsIDAuNWYsIDApKTsKICAgICB9CiAKICAgICBpZiAo
bV9mb3JlZ3JvdW5kTGF5ZXIpIHsKLSAgICAgICAgRmxvYXRQb2ludCBmb3JlZ3JvdW5kUG9zaXRp
b247Ci0gICAgICAgIEZsb2F0U2l6ZSBmb3JlZ3JvdW5kU2l6ZSA9IG5ld1NpemU7CisgICAgICAg
IEdyYXBoaWNzUG9pbnQgZm9yZWdyb3VuZFBvc2l0aW9uOworICAgICAgICBHcmFwaGljc1NpemUg
Zm9yZWdyb3VuZFNpemUgPSBuZXdTaXplOwogICAgICAgICBJbnRTaXplIGZvcmVncm91bmRPZmZz
ZXQgPSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogICAgICAgICBpZiAo
bV9jbGlwcGluZ0xheWVyKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgY2xpcHBpbmcg
bGF5ZXIgKHdoaWNoIGNsaXBzIGRlc2NlbmRhbnRzKSwgdGhlbiB0aGUgZm9yZWdyb3VuZCBsYXll
ciBpcyBhIGNoaWxkIG9mIGl0LAogICAgICAgICAgICAgLy8gc28gdGhhdCBpdCBnZXRzIGNvcnJl
Y3RseSBzb3J0ZWQgd2l0aCBjaGlsZHJlbi4gSW4gdGhhdCBjYXNlLCBwb3NpdGlvbiByZWxhdGl2
ZSB0byB0aGUgY2xpcHBpbmcgbGF5ZXIuCi0gICAgICAgICAgICBmb3JlZ3JvdW5kU2l6ZSA9IEZs
b2F0U2l6ZShjbGlwcGluZ0JveC5zaXplKCkpOworICAgICAgICAgICAgZm9yZWdyb3VuZFNpemUg
PSBHcmFwaGljc1NpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgICAgIGZvcmVncm91
bmRPZmZzZXQgPSBjbGlwcGluZ0JveC5sb2NhdGlvbigpIC0gSW50UG9pbnQoKTsKICAgICAgICAg
fQogCkBAIC00ODksOSArNDg5LDkgQEAKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSByZWZsZWN0
aW9uIGxheWVyIGhhcyB0aGUgYm91bmRzIG9mIG1fb3duaW5nTGF5ZXItPnJlZmxlY3Rpb25MYXll
cigpLAogICAgICAgICAvLyBidXQgdGhlIHJlZmxlY3RlZCBsYXllciBpcyB0aGUgYm91bmRzIG9m
IHRoaXMgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYXBwcm9wcmlhdGVseS4KLSAg
ICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gY29tcG9zaXRlZEJvdW5kcygpOwotICAgICAg
ICBGbG9hdFJlY3QgcmVmbGVjdGlvbkxheWVyQm91bmRzID0gcmVmbGVjdGlvbkJhY2tpbmctPmNv
bXBvc2l0ZWRCb3VuZHMoKTsKLSAgICAgICAgcmVmbGVjdGlvbkJhY2tpbmctPmdyYXBoaWNzTGF5
ZXIoKS0+c2V0UmVwbGljYXRlZExheWVyUG9zaXRpb24oRmxvYXRQb2ludCgpICsgKGxheWVyQm91
bmRzLmxvY2F0aW9uKCkgLSByZWZsZWN0aW9uTGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOworICAg
ICAgICBHcmFwaGljc1JlY3QgbGF5ZXJCb3VuZHMgPSBjb21wb3NpdGVkQm91bmRzKCk7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCByZWZsZWN0aW9uTGF5ZXJCb3VuZHMgPSByZWZsZWN0aW9uQmFja2lu
Zy0+Y29tcG9zaXRlZEJvdW5kcygpOworICAgICAgICByZWZsZWN0aW9uQmFja2luZy0+Z3JhcGhp
Y3NMYXllcigpLT5zZXRSZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAo
bGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlZmxlY3Rpb25MYXllckJvdW5kcy5sb2NhdGlvbigp
KSk7CiAgICAgfQogCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1JlY3QoY29udGVu
dHNCb3goKSk7CkBAIC05OTMsMTEgKzk5MywxMSBAQAogICAgIGltYWdlLT5zdGFydEFuaW1hdGlv
bigpOwogfQogCi1GbG9hdFBvaW50M0QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlVHJhbnNm
b3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3QKK0dyYXBoaWNzUG9pbnQz
RCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgSW50UmVj
dCYgYm9yZGVyQm94KSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVy
KCktPnN0eWxlKCk7CiAKLSAgICBGbG9hdFBvaW50M0Qgb3JpZ2luOworICAgIEdyYXBoaWNzUG9p
bnQzRCBvcmlnaW47CiAgICAgb3JpZ2luLnNldFgoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgoKS5j
YWxjRmxvYXRWYWx1ZShib3JkZXJCb3gud2lkdGgoKSkpOwogICAgIG9yaWdpbi5zZXRZKHN0eWxl
LT50cmFuc2Zvcm1PcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94LmhlaWdodCgpKSk7
CiAgICAgb3JpZ2luLnNldFooc3R5bGUtPnRyYW5zZm9ybU9yaWdpblooKSk7CkBAIC0xMDA1LDE0
ICsxMDA1LDE0IEBACiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAotRmxvYXRQb2ludCBSZW5kZXJM
YXllckJhY2tpbmc6OmNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3Jk
ZXJCb3gpIGNvbnN0CitHcmFwaGljc1BvaW50IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBl
cnNwZWN0aXZlT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3QKIHsKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogCiAgICAgZmxvYXQgYm94
V2lkdGggPSBib3JkZXJCb3gud2lkdGgoKTsKICAgICBmbG9hdCBib3hIZWlnaHQgPSBib3JkZXJC
b3guaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFBvaW50IG9yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50
IG9yaWdpbjsKICAgICBvcmlnaW4uc2V0WChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCkuY2Fs
Y0Zsb2F0VmFsdWUoYm94V2lkdGgpKTsKICAgICBvcmlnaW4uc2V0WShzdHlsZS0+cGVyc3BlY3Rp
dmVPcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUoYm94SGVpZ2h0KSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDkgQEAKICAgICBpZiAoY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRmxvYXRS
ZWN0IGNvbnRlbnRSZWN0OworICAgIEdyYXBoaWNzUmVjdCBjb250ZW50UmVjdDsKICAgICBQYXRo
IHBhdGg7Ci0gICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CisgICAgR3JhcGhpY3NS
ZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRm9udCBmb250OwogICAgIFRleHRSdW4gcnVu
KCIiKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CkBAIC0xNzcsMTAgKzE3NywxMCBAQAogICAgIGZs
b2F0IGxhYmVsWSA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueSgpICsg
KHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0
KCkpIC8gMiArIGZvbnRNZXRyaWNzLmFzY2VudCgpKTsKICAgICBjb250ZXh0LT5zZXRBbHBoYSht
X21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRQcmVzc2Vk
VGV4dE9wYWNpdHkgOiByZXBsYWNlbWVudFRleHRUZXh0T3BhY2l0eSk7CiAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKLSAgICBj
b250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGxhYmVsWCwgbGFiZWxZ
KSk7CisgICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgR3JhcGhpY3NQb2ludChs
YWJlbFgsIGxhYmVsWSkpOwogfQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBs
YWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgmIHBhdGgsIEZsb2F0UmVjdCYgcmVwbGFjZW1l
bnRUZXh0UmVjdCwgRm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYgdGV4dFdpZHRoKQor
Ym9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBHcmFwaGljc1JlY3QmIGNvbnRlbnRS
ZWN0LCBQYXRoJiBwYXRoLCBHcmFwaGljc1JlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQm
IGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkKIHsKICAgICBjb250ZW50UmVj
dCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29udGVudFJlY3QubW92ZUJ5KGFjY3VtdWxhdGVk
T2Zmc2V0KTsKQEAgLTIwMCwxMiArMjAwLDEyIEBACiAgICAgcnVuID0gVGV4dFJ1bihtX3JlcGxh
Y2VtZW50VGV4dCk7CiAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0aChydW4pOwogICAgIAotICAg
IHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0U2l6ZShGbG9hdFNpemUodGV4dFdpZHRoICsgcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luICogMiwgcmVwbGFjZW1lbnRU
ZXh0Um91bmRlZFJlY3RIZWlnaHQpKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldFNpemUo
R3JhcGhpY3NTaXplKHRleHRXaWR0aCArIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0TGVmdFJp
Z2h0VGV4dE1hcmdpbiAqIDIsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0SGVpZ2h0KSk7CiAg
ICAgZmxvYXQgeCA9IChjb250ZW50UmVjdC5zaXplKCkud2lkdGgoKSAvIDIgLSByZXBsYWNlbWVu
dFRleHRSZWN0LnNpemUoKS53aWR0aCgpIC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLngo
KTsKICAgICBmbG9hdCB5ID0gKGNvbnRlbnRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBs
YWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIpICsgY29udGVudFJlY3QubG9jYXRp
b24oKS55KCk7Ci0gICAgcmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50
KHgsIHkpKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9p
bnQoeCwgeSkpOwogICAgIAotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVwbGFjZW1lbnRUZXh0
UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNl
bWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVw
bGFjZW1lbnRUZXh0UmVjdCwgR3JhcGhpY3NTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0
UmFkaXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC0yNTEsOSArMjUxLDkgQEAKICAKIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmpl
Y3Q6OmlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZlbnQqIGV2ZW50KQogewotICAg
IEZsb2F0UmVjdCBjb250ZW50UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgY29udGVudFJlY3Q7CiAg
ICAgUGF0aCBwYXRoOwotICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0OworICAgIEdy
YXBoaWNzUmVjdCByZXBsYWNlbWVudFRleHRSZWN0OwogICAgIEZvbnQgZm9udDsKICAgICBUZXh0
UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDgg
KzI3LDggQEAKICNkZWZpbmUgVHJhbnNmb3JtU3RhdGVfaAogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsNyArNDQsNyBAQAogICAgIGVudW0g
VHJhbnNmb3JtQWNjdW11bGF0aW9uIHsgRmxhdHRlblRyYW5zZm9ybSwgQWNjdW11bGF0ZVRyYW5z
Zm9ybSB9OwogCiAgICAgLy8gSWYgcXVhZCBpcyBub24tbnVsbCwgaXQgd2lsbCBiZSBtYXBwZWQK
LSAgICBUcmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1EaXJlY3Rpb24gbWFwcGluZ0RpcmVjdGlvbiwg
Y29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRRdWFkKiBxdWFkID0gMCkKKyAgICBUcmFu
c2Zvcm1TdGF0ZShUcmFuc2Zvcm1EaXJlY3Rpb24gbWFwcGluZ0RpcmVjdGlvbiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NRdWFkKiBxdWFkID0gMCkKICAgICAgICAgOiBt
X2xhc3RQbGFuYXJQb2ludChwKQogICAgICAgICAsIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKGZh
bHNlKQogICAgICAgICAsIG1fbWFwUXVhZChxdWFkICE9IDApCkBAIC02NSwxOCArNjUsMTggQEAK
ICAgICB2b2lkIGZsYXR0ZW4oKTsKIAogICAgIC8vIFJldHVybiB0aGUgY29vcmRzIG9mIHRoZSBw
b2ludCBvciBxdWFkIGluIHRoZSBsYXN0IGZsYXR0ZW5lZCBsYXllcgotICAgIEZsb2F0UG9pbnQg
bGFzdFBsYW5hclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGxhbmFyUG9pbnQ7IH0KLSAg
ICBGbG9hdFF1YWQgbGFzdFBsYW5hclF1YWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJR
dWFkOyB9CisgICAgR3JhcGhpY3NQb2ludCBsYXN0UGxhbmFyUG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RQbGFuYXJQb2ludDsgfQorICAgIEdyYXBoaWNzUXVhZCBsYXN0UGxhbmFyUXVhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclF1YWQ7IH0KIAogICAgIC8vIFJldHVybiB0aGUg
cG9pbnQgb3IgcXVhZCBtYXBwZWQgdGhyb3VnaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0KLSAgICBG
bG9hdFBvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQo
KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7CisgICAgR3Jh
cGhpY3NRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIGZsYXR0
ZW5XaXRoVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgCi0gICAg
RmxvYXRQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKLSAgICBGbG9hdFF1YWQgbV9sYXN0UGxhbmFy
UXVhZDsKKyAgICBHcmFwaGljc1BvaW50IG1fbGFzdFBsYW5hclBvaW50OworICAgIEdyYXBoaWNz
UXVhZCBtX2xhc3RQbGFuYXJRdWFkOwogCiAgICAgLy8gV2Ugb25seSBhbGxvY2F0ZSB0aGUgdHJh
bnNmb3JtIGlmIHdlIG5lZWQgdG8KICAgICBPd25QdHI8VHJhbnNmb3JtYXRpb25NYXRyaXg+IG1f
YWNjdW11bGF0ZWRUcmFuc2Zvcm07CkBAIC04Nyw3ICs4Nyw3IEBACiAKIGNsYXNzIEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU+IGNyZWF0
ZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1F1YWQmIHF1YWQpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZShw
LCBxdWFkKSk7CiAgICAgfQpAQCAtMTAxLDE3ICsxMDEsMTcgQEAKICAgICB2b2lkIHRyYW5zbGF0
ZShpbnQgeCwgaW50IHksIFRyYW5zZm9ybUFjY3VtdWxhdGlvbik7CiAgICAgdm9pZCBhcHBseVRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtRnJvbUNvbnRhaW5l
ciwgVHJhbnNmb3JtQWNjdW11bGF0aW9uKTsKIAotICAgIEZsb2F0UG9pbnQgbWFwcGVkUG9pbnQo
KSBjb25zdDsKLSAgICBGbG9hdFF1YWQgbWFwcGVkUXVhZCgpIGNvbnN0OworICAgIEdyYXBoaWNz
UG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKKyAgICBHcmFwaGljc1F1YWQgbWFwcGVkUXVhZCgp
IGNvbnN0OwogICAgIHZvaWQgZmxhdHRlbigpOwogCi0gICAgRmxvYXRQb2ludCBtX2xhc3RQbGFu
YXJQb2ludDsKLSAgICBGbG9hdFF1YWQgbV9sYXN0UGxhbmFyUXVhZDsKKyAgICBHcmFwaGljc1Bv
aW50IG1fbGFzdFBsYW5hclBvaW50OworICAgIEdyYXBoaWNzUXVhZCBtX2xhc3RQbGFuYXJRdWFk
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm07CiAgICAg
Ym9vbCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybTsKIAogcHJpdmF0ZToKLSAgICBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRRdWFkJiBxdWFk
KQorICAgIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBj
b25zdCBHcmFwaGljc1F1YWQmIHF1YWQpCiAgICAgICAgIDogbV9sYXN0UGxhbmFyUG9pbnQocCkK
ICAgICAgICAgLCBtX2xhc3RQbGFuYXJRdWFkKHF1YWQpCiAgICAgICAgICwgbV9hY2N1bXVsYXRp
bmdUcmFuc2Zvcm0oZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAg
ICAgIC8vIHN0eWxlIHBvaW50ZXIpLgogICAgICAgICBpZiAoc3R5bGUoKSkgewogICAgICAgICAg
ICAgaWYgKCFuZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAgIHNldFdpZGdldEdlb21ldHJ5
KEludFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoY29udGVudEJveFJlY3QoKSkp
LmJvdW5kaW5nQm94KCkpLCBjb250ZW50Qm94UmVjdCgpLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgc2V0V2lkZ2V0R2VvbWV0cnkoSW50UmVjdChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNz
UXVhZChjb250ZW50Qm94UmVjdCgpKSkuYm91bmRpbmdCb3goKSksIGNvbnRlbnRCb3hSZWN0KCku
c2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSkKICAgICAgICAgICAgICAgICBtX3dpZGdldC0+aGlkZSgpOwogICAgICAgICAgICAgZWxzZSB7
CkBAIC0zMjcsNyArMzI3LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBjb250
ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKLSAgICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJv
eCA9IEludFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoY29udGVudEJveCkpLmJv
dW5kaW5nQm94KCkpOworICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94ID0gSW50UmVjdChs
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChjb250ZW50Qm94KSkuYm91bmRpbmdCb3go
KSk7CiAgICAgYm9vbCBib3VuZHNDaGFuZ2VkID0gc2V0V2lkZ2V0R2VvbWV0cnkoYWJzb2x1dGVD
b250ZW50Qm94LCBjb250ZW50Qm94LnNpemUoKSk7CiAKICAgICAvLyBpZiB0aGUgZnJhbWUgYm91
bmRzIGdvdCBjaGFuZ2VkLCBvciBpZiB2aWV3IG5lZWRzIGxheW91dCAocG9zc2libHkgaW5kaWNh
dGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbWFy
Z2luRW5kKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8
TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmly
dHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogICAgIHZp
cnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IExheW91dFBvaW50JikgY29uc3Q7CiAKQEAgLTk4LDEyICs5OCwxMiBAQAogCiAgICAgdmlydHVh
bCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRmxv
YXRSZWN0IGN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFp
bmVyKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgY3VsbGVkSW5saW5lQm91bmRpbmdCb3goY29u
c3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogICAgIEludFJlY3QgY3VsbGVkSW5s
aW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIElubGluZUJveCogY3Vs
bGVkSW5saW5lRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAgICAgSW5saW5lQm94KiBjdWxsZWRJbmxp
bmVMYXN0TGluZUJveCgpIGNvbnN0OwogICAgIHZvaWQgY3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0
cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEludFJlY3Q+JiwgY29uc3Qg
SW50U2l6ZSYpOwotICAgIHZvaWQgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyhjb25zdCBSZW5k
ZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVhZD4mKTsKKyAgICB2b2lkIGN1bGxl
ZElubGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3Rv
cjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICB2b2lkIGFkZENoaWxkVG9Db250aW51YXRpb24oUmVu
ZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgdmly
dHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1Miw3ICsxNTIsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBIaWdobGlnaHQgYWN0
cyBhcyBhIHNlbGVjdGlvbiBpbmZsYXRpb24uCi0gICAgRmxvYXRSZWN0IHJvb3RSZWN0KDAsIHNl
bGVjdGlvblRvcCgpLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIEdy
YXBoaWNzUmVjdCByb290UmVjdCgwLCBzZWxlY3Rpb25Ub3AoKSwgbG9naWNhbFdpZHRoKCksIHNl
bGVjdGlvbkhlaWdodCgpKTsKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KHJlbmRl
cmVyKCktPm5vZGUoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGlnaGxpZ2h0KCksIHJvb3RSZWN0
KSk7CiAgICAgc2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJlY3RzKGluZmxhdGVkUmVjdCwgaW5mbGF0
ZWRSZWN0LCBsaW5lVG9wKCksIGxpbmVCb3R0b20oKSk7CiB9CkBAIC0xNzAsOCArMTcwLDggQEAK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBpbmZsYXRlZCByZWN0IHNvIHRoYXQg
d2UgY2FuIHByb3Blcmx5IGhpdCB0ZXN0LgotICAgIEZsb2F0UmVjdCByb290UmVjdChwYWludE9m
ZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlvblRvcCgpLCBsb2dpY2Fs
V2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3Qg
PSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hsaWdodFJlY3QocmVuZGVyZXIo
KS0+bm9kZSgpLCBoaWdobGlnaHRUeXBlLCByb290UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHJv
b3RSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcGFpbnRPZmZzZXQueSgpICsgc2VsZWN0aW9u
VG9wKCksIGxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgR3JhcGhpY3NS
ZWN0IGluZmxhdGVkUmVjdCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y3VzdG9tSGlnaGxp
Z2h0UmVjdChyZW5kZXJlcigpLT5ub2RlKCksIGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKICAg
ICBpZiAoaW5mbGF0ZWRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQogICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHJlbmRlcmVyKCkt
Pm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMyLDcgKzYzMiw3IEBACiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRT
ZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlv
bik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJl
Y3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9p
ZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICBMYXlvdXRVbml0
IGRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGRlc2lyZWRDb2x1bW5D
b3VudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQAogCiAg
ICAgLy8gQ29tcHV0ZSB0aGUgdG9wIGxlZnQgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50
LCBidXQgdXNlCiAgICAgLy8gdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgZWxlbWVudCB0byBzaXpl
IHRoZSBwb3B1cC4KLSAgICBGbG9hdFBvaW50IGFic1RvcExlZnQgPSBsb2NhbFRvQWJzb2x1dGUo
RmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNUb3BMZWZ0
ID0gbG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIElu
dFJlY3QgYWJzQm91bmRzID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKICAgICBhYnNCb3Vu
ZHMuc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KGFic1RvcExlZnQpKTsKICAgICBtX3BvcHVw
LT5zaG93KGFic0JvdW5kcywgZG9jdW1lbnQoKS0+dmlldygpLApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCkBAIC0zMzEsOSArMzMxLDkgQEAKICAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChh
Y2N1bXVsYXRlZE9mZnNldCwgbV9sYXllci0+c2l6ZSgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyVmll
dzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlclZp
ZXc6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewotICAgIHF1
YWRzLmFwcGVuZChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2xheWVyLT5zaXplKCkpKTsKKyAg
ICBxdWFkcy5hcHBlbmQoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgbV9sYXllci0+c2l6
ZSgpKSk7CiB9CiAKIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihS
ZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0KQpAQCAtMzc5LDcgKzM3OSw3IEBA
CiAgICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRp
bmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVz
LgogICAgICAgICBJbnRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgpOwogICAgICAgICBpZiAo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29u
dGFpbmVyKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRh
aW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3VyclJlY3QpKTsKKyAgICAgICAg
ICAgIEdyYXBoaWNzUXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29s
dXRlUXVhZChHcmFwaGljc1JlY3QoY3VyclJlY3QpKTsKICAgICAgICAgICAgIGN1cnJSZWN0ID0g
YWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyAKICAgICAgICAgfQogICAgICAgICBzZWxS
ZWN0LnVuaXRlKGN1cnJSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlv
dXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91
dFN0YXRlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBACiAgICAgYm9v
bCBmaXhlZCA9IHJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSAmJiByZW5kZXJlci0+c3R5bGUoKS0+
cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwogICAgIGlmIChmaXhlZCkgewogICAgICAgICAv
LyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAg
ICAgICAgRmxvYXRQb2ludCBmaXhlZE9mZnNldCA9IHJlbmRlcmVyLT52aWV3KCktPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIHRydWUpOworICAgICAgICBHcmFwaGljc1BvaW50IGZpeGVk
T2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQo
KSwgdHJ1ZSk7CiAgICAgICAgIG1fcGFpbnRPZmZzZXQgPSBMYXlvdXRTaXplKGZpeGVkT2Zmc2V0
LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9mZnNldDsKICAgICB9IGVsc2UKICAgICAgICAgbV9w
YWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZzZXQ7CkBAIC0xMTcsNyArMTE3
LDcgQEAKICNlbmRpZgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29u
dGFpbmVyKCk7Ci0gICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxv
Y2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICBHcmFwaGljc1Bv
aW50IGFic0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNz
UG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIG1fcGFpbnRPZmZzZXQgPSBMYXlvdXRTaXplKGFi
c0NvbnRlbnRQb2ludC54KCksIGFic0NvbnRlbnRQb2ludC55KCkpOwogCiAgICAgaWYgKGNvbnRh
aW5lci0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5
LDcgQEAKICAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gNDsKIAogICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9p
bnQgYWJzT2Zmc2V0ID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNP
ZmZzZXQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKIAogICAgIEludFBvaW50IGN1cnJlbnRNb3VzZVBv
c2l0aW9uID0gZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7
CiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBp
cyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3cs
IHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CkBAIC01MjEsNyArNTIxLDcgQEAKIGludCBSZW5k
ZXJMaXN0Qm94OjpzY3JvbGxUb3dhcmQoY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uKQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1z
LgotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhp
Y3NQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAgICBpbnQgb2Zmc2V0WCA9IGRl
c3RpbmF0aW9uLngoKSAtIGFic1Bvcy54KCk7CiAgICAgaW50IG9mZnNldFkgPSBkZXN0aW5hdGlv
bi55KCkgLSBhYnNQb3MueSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0
VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRl
ZiBIaXRUZXN0UmVzdWx0X2gKICNkZWZpbmUgSGl0VGVzdFJlc3VsdF9oCiAKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRU
eXBlcy5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHJl
Y3QtYmFzZWQgaGl0IHRlc3QgYW5kIG5lZWRzIHRvIGNvbnRpbnVlIHVudGlsIHRoZSByZWN0IGlz
IGZ1bGx5CiAgICAgLy8gZW5jbG9zZWQgYnkgdGhlIGJvdW5kYXJpZXMgb2YgYSBub2RlLgogICAg
IGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFJlY3QmID0gSW50UmVjdCgpKTsKLSAg
ICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IExheW91dFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBib29sIGFkZE5v
ZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBI
aXRUZXN0UmVzdWx0Jik7CiAKICAgICAvLyBJZiBtX3JlY3RCYXNlZFRlc3RSZXN1bHQgaXMgMCB0
aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1fcmVjdEJhc2VkVGVzdFJlc3Vs
dC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
CiAKICAgICBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKIAot
ICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBp
bnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxv
YXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OworICAgIEdyYXBoaWNz
UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRl
cmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgR3JhcGhpY3NSZWN0
JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OwogICAgIAogICAgIC8vIEdldCB0
aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gIFVzZWQgYnkgc29tZSBvZiB0aGUg
Y29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZv
ckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWM6
CiAgICAgRWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0KiBvYmosIGNvbnN0IEF0b21pY1N0cmluZyYg
ZWxsaXBzaXNTdHIsIElubGluZUZsb3dCb3gqIHBhcmVudCwKICAgICAgICAgICAgICAgICBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc1ZlcnRpY2Fs
LCBJbmxpbmVCb3gqIG1hcmt1cEJveCkKLSAgICAgICAgOiBJbmxpbmVCb3gob2JqLCBGbG9hdFBv
aW50KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGlj
YWwsIDAsIDAsIHBhcmVudCkKKyAgICAgICAgOiBJbmxpbmVCb3gob2JqLCBHcmFwaGljc1BvaW50
KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWws
IDAsIDAsIHBhcmVudCkKICAgICAgICAgLCBtX2hlaWdodChoZWlnaHQpCiAgICAgICAgICwgbV9z
dHIoZWxsaXBzaXNTdHIpCiAgICAgICAgICwgbV9tYXJrdXBCb3gobWFya3VwQm94KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwMyw3ICs1MDMsNyBAQAogSW50UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRl
ck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBpbnQgeSA9IC1zaXplLmhlaWdodCgpOwotICAgIEZs
b2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQ
b2ludChtdXRlQnV0dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsKKyAgICBH
cmFwaGljc1BvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fic29sdXRlKEdy
YXBoaWNzUG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7
CiAgICAgaWYgKGFic1BvaW50LnkoKSA8IDApCiAgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LT5o
ZWlnaHQoKTsKICAgICByZXR1cm4gSW50UG9pbnQoMCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEsMTUgKzcxLDE1IEBACiB9CiAKIC8vIFV0aWxpdHkgdG8gc2Nh
bGUgd2hlbiB0aGUgVUkgcGFydCBhcmUgbm90IHNjYWxlZCBieSB3a0RyYXdNZWRpYVVJUGFydAot
c3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
ICZvcmlnaW5hbFJlY3QpCitzdGF0aWMgR3JhcGhpY3NSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFk
anVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKIHsKICAgICBmbG9hdCB6b29tTGV2
ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgRmxvYXRSZWN0IHVuem9vbWVk
UmVjdChvcmlnaW5hbFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3Qob3JpZ2lu
YWxSZWN0KTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRS
ZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAg
dW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwp
OwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCks
IHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVj
dC55KCkpOwogICAgIH0KICAgICByZXR1cm4gdW56b29tZWRSZWN0OwpAQCAtMTQ2LDcgKzE0Niw3
IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZWRpYVNsaWRlcjogewogICAg
ICAgICAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVk
aWFFbGVtZW50KG8pKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9
IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7
CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVk
UmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgICAg
ICAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayh0aGVtZVN0eWxlLCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVkaWFFbGVtZW50LT5wZXJjZW50
TG9hZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1lZGlhRWxlbWVudC0+Y3VycmVu
dFRpbWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4OSw3ICsxODksNyBAQAogCiAg
ICAgZmxvYXQgem9vbUxldmVsID0gbXV0ZUJ1dHRvbkJveC0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwogICAgIGludCB5ID0geU9mZnNldCAqIHpvb21MZXZlbCArIG11dGVCdXR0b25Cb3gtPm9m
ZnNldEhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvaW50ID0g
bXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQobXV0ZUJ1dHRvbkJveC0+
b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb2lu
dCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KG11dGVCdXR0
b25Cb3gtPm9mZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUpOwogICAgIGlmIChhYnNQb2ludC55
KCkgPCAwKQogICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+aGVpZ2h0KCk7CiAgICAgcmV0dXJu
IEludFBvaW50KHhPZmZzZXQgKiB6b29tTGV2ZWwsIHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHVGV4dFF1ZXJ5X2gKIAogI2lmIEVOQUJMRShTVkcp
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiU1ZHVGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0z
OCwxMSArMzgsMTEgQEAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBjb25zdDsK
ICAgICBmbG9hdCB0ZXh0TGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgc3ViU3RyaW5nTGVuZ3Ro
KHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0gICAgRmxv
YXRQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0
OwotICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlv
bikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9zaXRpb25PZkNo
YXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CiAgICAgZmxvYXQgcm90YXRpb25PZkNo
YXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGV4dGVudE9m
Q2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBpbnQgY2hhcmFjdGVyTnVt
YmVyQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0
IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAgICBpbnQgY2hh
cmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAKICAg
ICAvLyBQdWJsaWMgaGVscGVyIHN0cnVjdC4gUHJpdmF0ZSBjbGFzc2VzIGluIFNWR1RleHRRdWVy
eSBpbmhlcml0IGZyb20gaXQuCiAgICAgc3RydWN0IERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VS
YWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsOCArNTAsOCBAQAogICAgIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCogcmFk
aWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
Kj4oZ3JhZGllbnRFbGVtZW50KTsKIAogICAgIC8vIERldGVybWluZSBncmFkaWVudCBmb2NhbC9j
ZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKLSAgICBGbG9hdFBvaW50IGZvY2FsUG9pbnQ7Ci0gICAg
RmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZvY2FsUG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQb2ludDsKICAgICBmbG9hdCByYWRpdXM7CiAgICAgcmFk
aWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyht
X2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCByYWRpdXMpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQgKzQxLDE0IEBACiAgICAgLy8gV2Ugc2VhcmNo
IGZvciB0aGUgcm9vdCB0ZXh0IGVsZW1lbnQgYW5kIHRha2UgaXRzIGJvdW5kaW5nIGJveC4KICAg
ICAvLyBJdCBpcyBhbHNvIG5lY2Vzc2FyeSB0byB0YWtlIHRoZSBzdHJva2UgYW5kIHJlcGFpbnQg
cmVjdCBvZgogICAgIC8vIHRoaXMgZWxlbWVudCwgc2luY2Ugd2UgbmVlZCBpdCBmb3IgZmlsdGVy
cy4KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1
YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50
UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9D
b250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNl
VHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBJbmxpbmVGbG93Qm94KiBjcmVhdGVJbmxpbmVGbG93Qm94KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29s
cy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQAog
ICAgIH0KIH0KIAotYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQorYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZm
ZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIEludFNpemUg
aW1hZ2VTaXplKHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dC5zaXplKCkpKTsKICAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZShTVkdJbWFnZUJ1ZmZl
clRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkp
KTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICBBU1NFUlQoaW1hZ2VDb250ZXh0KTsKIAogICAgIC8v
IENvbXBlbnNhdGUgcm91bmRpbmcgZWZmZWN0cywgYXMgdGhlIGFic29sdXRlIHRhcmdldCByZWN0
IGlzIHVzaW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIHRoZSBpbWFnZSBidWZmZXIgc2l6
ZSBpcyBpbnRlZ2VyLgotICAgIGltYWdlQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHVuY2xhbXBl
ZEltYWdlU2l6ZS53aWR0aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LndpZHRoKCksIHVuY2xhbXBl
ZEltYWdlU2l6ZS5oZWlnaHQoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOworICAg
IGltYWdlQ29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHVuY2xhbXBlZEltYWdlU2l6ZS53aWR0
aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LndpZHRoKCksIHVuY2xhbXBlZEltYWdlU2l6ZS5oZWln
aHQoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOwogCiAgICAgaW1hZ2VCdWZmZXIg
PSBpbWFnZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05MSw3ICs5MSw3IEBACiAg
ICAgY29udGVudFRyYW5zZm9ybWF0aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb247CiB9
CiAKLXZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQordm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9J
bWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVjdCYgY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpCiB7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChpbWFnZUJ1ZmZlcik7CkBAIC0xMDgsMTcgKzEwOCwx
NyBAQAogICAgICAgICBpbWFnZUJ1ZmZlci5jbGVhcigpOwogfQogCi1JbnRTaXplIFNWR0ltYWdl
QnVmZmVyVG9vbHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorSW50U2l6ZSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2Fz
dDxpbnQ+KGxyb3VuZGYoc2l6ZS53aWR0aCgpKSksIHN0YXRpY19jYXN0PGludD4obHJvdW5kZihz
aXplLmhlaWdodCgpKSkpOwogfQogCi1GbG9hdFJlY3QgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xh
bXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQorR3JhcGhpY3NSZWN0
IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJl
cihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGFic29s
dXRlVGFyZ2V0UmVjdCkKIHsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogCiAgICAgY29uc3QgUmVu
ZGVyU1ZHUm9vdCogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVj
dChyZW5kZXJlcik7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBh
YnNvbHV0ZVRhcmdldFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdl
dFJlY3QgPSBhYnNvbHV0ZVRhcmdldFJlY3Q7CiAgICAgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dC5pbnRlcnNlY3Qoc3ZnUm9vdC0+ZnJhbWVSZWN0KCkpOwogICAgIHJldHVybiBjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTIx
LDcgKzEyMSw3IEBACiAgICAgcmV0dXJuIGJ1aWxkZXIucmVsZWFzZSgpOwogfQogCi1ib29sIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgRmxvYXRTaXplJiBzY2FsZSkKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmZpdHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplLCBHcmFw
aGljc1NpemUmIHNjYWxlKQogewogICAgIGJvb2wgbWF0Y2hlc0ZpbHRlclNpemUgPSB0cnVlOwog
ICAgIGlmIChzaXplLndpZHRoKCkgPiBrTWF4RmlsdGVyU2l6ZSkgewpAQCAtMTU3LDcgKzE1Nyw3
IEBACiAgICAgfQogCiAgICAgT3duUHRyPEZpbHRlckRhdGE+IGZpbHRlckRhdGEoYWRvcHRQdHIo
bmV3IEZpbHRlckRhdGEpKTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NSZWN0IHRhcmdldEJvdW5kaW5n
Qm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogCiAgICAgU1ZHRmlsdGVyRWxlbWVu
dCogZmlsdGVyRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkp
OwogICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBmaWx0ZXJFbGVtZW50LT5maWx0ZXJCb3Vu
ZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CkBAIC0xNzQsMTAgKzE3NCwxMCBAQAogICAgIGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFi
c29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUo
KSwgYWJzb2x1dGVUcmFuc2Zvcm0uZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5mKCkpOwogCiAgICAg
Ly8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRy
YXdpbmcgcmVnaW9uLgotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBm
aWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEt
PmJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJv
a2VCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJp
ZXMgPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRl
ckRhdGEtPmJvdW5kYXJpZXMpOworICAgIEdyYXBoaWNzUmVjdCBkcmF3aW5nUmVnaW9uID0gb2Jq
ZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZp
bHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdp
b24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdp
bmdSZWdpb24pOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0
ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24p
OwogCiAgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgogICAgIGJvb2wgcHJpbWl0
aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZlVW5pdHMoKSA9PSBT
VkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CkBAIC0xOTAsNyAr
MTkwLDcgQEAKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGZvciB0aGUgdXNl
IG9mIGZpbHRlclJlcy4KICAgICAvLyBBbHNvIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcv
ZmlsdGVycy5odG1sI0ZpbHRlckVmZmVjdHNSZWdpb24KLSAgICBGbG9hdFNpemUgc2NhbGUoMSwg
MSk7CisgICAgR3JhcGhpY3NTaXplIHNjYWxlKDEsIDEpOwogICAgIGlmIChmaWx0ZXJFbGVtZW50
LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIpKSB7CiAgICAgICAgIHNjYWxl
LnNldFdpZHRoKGZpbHRlckVsZW1lbnQtPmZpbHRlclJlc1goKSAvIGFic29sdXRlRmlsdGVyQm91
bmRhcmllcy53aWR0aCgpKTsKICAgICAgICAgc2NhbGUuc2V0SGVpZ2h0KGZpbHRlckVsZW1lbnQt
PmZpbHRlclJlc1koKSAvIGFic29sdXRlRmlsdGVyQm91bmRhcmllcy5oZWlnaHQoKSk7CkBAIC0y
MDAsNyArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRGV0ZXJtaW5l
IHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VC
dWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9h
dFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247CisgICAgR3JhcGhp
Y3NSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOwogICAgIHRlbXBT
b3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBmaXRz
SW5NYXhpbXVtSW1hZ2VTaXplKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwogCkBAIC0y
MTIsNyArMjEyLDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihs
YXN0RWZmZWN0KTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZm
ZWN0UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhF
ZmZlY3RSZWN0KCk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28g
YmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgogICAgIGlmICghZml0c0luTWF4aW11bUltYWdlU2l6ZShzdWJS
ZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICBzb3Vy
Y2VHcmFwaGljQ29udGV4dC0+c2NhbGUoc2NhbGUpOwogCiAgICAgc291cmNlR3JhcGhpY0NvbnRl
eHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7Ci0g
ICAgc291cmNlR3JhcGhpY0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2l6ZSgpKSk7CisgICAgc291cmNlR3JhcGhpY0NvbnRl
eHQtPmNsZWFyUmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBhYnNvbHV0ZURyYXdp
bmdSZWdpb24uc2l6ZSgpKSk7CiAgICAgZmlsdGVyRGF0YS0+c291cmNlR3JhcGhpY0J1ZmZlciA9
IHNvdXJjZUdyYXBoaWMucmVsZWFzZSgpOwogICAgIGZpbHRlckRhdGEtPnNhdmVkQ29udGV4dCA9
IGNvbnRleHQ7CiAKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICAgICBpZiAocmVzdWx0SW1hZ2Up
IHsKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwogCi0gICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndp
ZHRoKCksIDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQo
KSkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKDEgLyBmaWx0ZXJE
YXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS0+
ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPmNsaXAobGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5jb2xvclNw
YWNlKCksIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+c2NhbGUoZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwpAQCAt
MzI3LDEyICszMjcsMTIgQEAKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyLmNs
ZWFyKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VC
b3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkK
IHsKICAgICBpZiAoU1ZHRmlsdGVyRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Zp
bHRlckVsZW1lbnQqPihub2RlKCkpKQogICAgICAgICByZXR1cm4gZWxlbWVudC0+ZmlsdGVyQm91
bmRpbmdCb3gob2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpKTsKIAotICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMiArNDQs
MTIgQEAKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JikK
K3ZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFw
aGljc1F1YWQ+JikKIHsKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFrZSB1cCBzcGFj
ZSBvciBwYWludAogfQogCi1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpu
b2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGlu
ZWFyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBACiAgICAgU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVsZW1lbnQpOwogCiAgICAgLy8g
RGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKLSAgICBGbG9hdFBvaW50IHN0YXJ0
UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBlbmRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0
UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludDsKICAgICBsaW5lYXJHcmFkaWVudEVs
ZW1lbnQtPmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKG1fYXR0cmlidXRlcywgc3RhcnRQb2ludCwg
ZW5kUG9pbnQpOwogCiAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50OjpjcmVh
dGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlJl
bmRlclNWR1RleHRQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlNWR0lu
bGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1
LDggQEAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3Jk
aW5hdGVTeXN0ZW0odGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgRmxv
YXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGV4
dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRS
ZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVU
YXJnZXRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1
dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKKyAgICBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9
IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJl
cih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOwogICAgIGlmIChjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0x
MDksNyArMTA5LDcgQEAKIAogc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gY2xpcFRvVGV4
dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
cmFwaGljc1JlY3QmIHRhcmdldFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBncmFkaWVudFRyYW5zZm9ybSkKQEAgLTEyMiwxNCArMTIyLDE0IEBACiAgICAgQWZmaW5lVHJh
bnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1
bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290
QmxvY2ssIGFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdl
dFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOwotICAgIEZsb2F0
UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xh
bXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRl
VGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29s
dXRlVHJhbnNmb3JtLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0
KTsKIAogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQs
IGFic29sdXRlVHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBpbWFnZUJ1ZmZl
cik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIGlmIChib3VuZGluZ0JveE1v
ZGUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0JveCA9IHRleHRSb290QmxvY2st
Pm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXNrQm91bmRpbmdC
b3ggPSB0ZXh0Um9vdEJsb2NrLT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgICAgICBtYXRyaXgu
dHJhbnNsYXRlKG1hc2tCb3VuZGluZ0JveC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOwogICAg
ICAgICBtYXRyaXguc2NhbGVOb25Vbmlmb3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNr
Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIH0KQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAgICAg
Ly8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMg
bm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCiAg
ICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIp
IHdpbGwgYmUgaWdub3JlZC4KLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5n
Qm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgIGlmIChib3VuZGluZ0JveE1v
ZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3Jh
ZGllbnRUcmFuc2Zvcm07CiAgICAgICAgICAgICBjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybShn
cmFkaWVudFRyYW5zZm9ybSk7CiAKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0Owor
ICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3Q7CiAgICAgICAgICAgICBncmFkaWVu
dERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNsaXBUb1RleHRNYXNr
KGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIHRhcmdldFJlY3QsIG9iamVjdCwgYm91bmRpbmdCb3hN
b2RlKCksIGdyYWRpZW50VHJhbnNmb3JtKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxs
R3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVudCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUsNyArNTY1LDcgQEAKICAgICAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgYm9vbCBvayA9IGZhbHNlOwotICAgICAgICAgICAg
RmxvYXRQb2ludCBwb2ludCA9IG1fdGV4dFBhdGgucG9pbnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNl
dCwgb2spOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludCA9IG1fdGV4dFBhdGgucG9p
bnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOwogICAgICAgICAgICAgQVNTRVJUKG9rKTsK
IAogICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21D
YWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxl
KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAg
dmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCop
OwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gQ2xpcHBlclJlc291cmNlVHlwZTsgfQogICAgIAotICAgIGJvb2wgaGl0VGVz
dENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBi
b29sIGhpdFRlc3RDbGlwQ29udGVudChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGlj
c1BvaW50Jik7CiAKICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGNsaXBQYXRoVW5pdHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkp
LT5jbGlwUGF0aFVuaXRzKCk7IH0KIApAQCAtNjQsMTMgKzY0LDEzIEBACiBwcml2YXRlOgogICAg
IC8vIGNsaXBQYXRoIGNhbiBiZSBjbGlwcGVkIHRvbywgYnV0IGRvbid0IGhhdmUgYSBib3VuZGlu
Z0JveCBvciByZXBhaW50UmVjdC4gU28gd2UgY2FuJ3QgY2FsbAogICAgIC8vIGFwcGx5UmVzb3Vy
Y2UgZGlyZWN0bHkgYW5kIHVzZSB0aGUgcmVjdHMgZnJvbSB0aGUgb2JqZWN0LCBzaW5jZSB0aGV5
IGFyZSBlbXB0eSBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VzCi0gICAgYm9vbCBhcHBseUNsaXBwaW5n
VG9Db250ZXh0KFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIEdyYXBoaWNzQ29udGV4dCopOwotICAgIGJvb2wgcGF0aE9ubHlDbGlwcGluZyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBib29sIGRyYXdDb250ZW50SW50b01h
c2tJbWFnZShDbGlwcGVyRGF0YSosIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gp
OworICAgIGJvb2wgYXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3QqLCBjb25zdCBH
cmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBHcmFwaGljc0NvbnRleHQqKTsKKyAg
ICBib29sIHBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NS
ZWN0Jik7CisgICAgYm9vbCBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqLCBj
b25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KTsKICAgICB2b2lkIGNhbGN1bGF0
ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wgbV9pbnZhbGlkYXRpb25CbG9j
a2VkOwotICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZGFyaWVzOworICAgIEdyYXBoaWNzUmVjdCBt
X2NsaXBCb3VuZGFyaWVzOwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ2xpcHBlckRhdGEq
PiBtX2NsaXBwZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDExICsxMTIsMTEgQEAKICAgICAgICAgdXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IG9s
ZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKKyAgICBHcmFwaGljc1JlY3Qgb2xkVmlld3BvcnQgPSBt
X3ZpZXdwb3J0OwogCiAgICAgLy8gQ2FjaGUgdmlld3BvcnQgYm91bmRhcmllcwotICAgIEZsb2F0
UG9pbnQgdmlld3BvcnRMb2NhdGlvbihmb3JlaWduLT54KCkudmFsdWUoZm9yZWlnbiksIGZvcmVp
Z24tPnkoKS52YWx1ZShmb3JlaWduKSk7Ci0gICAgbV92aWV3cG9ydCA9IEZsb2F0UmVjdCh2aWV3
cG9ydExvY2F0aW9uLCBGbG9hdFNpemUoZm9yZWlnbi0+d2lkdGgoKS52YWx1ZShmb3JlaWduKSwg
Zm9yZWlnbi0+aGVpZ2h0KCkudmFsdWUoZm9yZWlnbikpKTsKKyAgICBHcmFwaGljc1BvaW50IHZp
ZXdwb3J0TG9jYXRpb24oZm9yZWlnbi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCku
dmFsdWUoZm9yZWlnbikpOworICAgIG1fdmlld3BvcnQgPSBHcmFwaGljc1JlY3Qodmlld3BvcnRM
b2NhdGlvbiwgR3JhcGhpY3NTaXplKGZvcmVpZ24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZv
cmVpZ24tPmhlaWdodCgpLnZhbHVlKGZvcmVpZ24pKSk7CiAgICAgaWYgKCF1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzSW5QYXJlbnRzKQogICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJl
bnRzID0gb2xkVmlld3BvcnQgIT0gbV92aWV3cG9ydDsKIApAQCAtMTQyLDkgKzE0Miw5IEBACiAg
ICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogfQogCi1ib29sIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVu
dCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBsb2NhbFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsK
KyAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRyYW5zZm9ybSgpLmludmVyc2Uo
KS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAogICAgIC8vIEVhcmx5IGV4aXQgaWYgbG9jYWwg
cG9pbnQgaXMgbm90IGNvbnRhaW5lZCBpbiBjbGlwcGVkIHZpZXdwb3J0IGFyZWEKICAgICBpZiAo
U1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSAmJiAhbV92aWV3cG9ydC5j
b250YWlucyhsb2NhbFBvaW50KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHTWFya2VyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHTWFya2VyRGF0YS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMyArNDQs
MTMgQEAKICAgICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX29yaWdpbjsgfQorICAgIEdyYXBoaWNzUG9pbnQgb3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW47IH0KICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyKCkgY29u
c3QgeyByZXR1cm4gbV9tYXJrZXI7IH0KIAogICAgIGZsb2F0IGN1cnJlbnRBbmdsZSgpIGNvbnN0
CiAgICAgewotICAgICAgICBGbG9hdFNpemUgaW5zbG9wZUNoYW5nZSA9IG1faW5zbG9wZVBvaW50
c1sxXSAtIG1faW5zbG9wZVBvaW50c1swXTsKLSAgICAgICAgRmxvYXRTaXplIG91dHNsb3BlQ2hh
bmdlID0gbV9vdXRzbG9wZVBvaW50c1sxXSAtIG1fb3V0c2xvcGVQb2ludHNbMF07CisgICAgICAg
IEdyYXBoaWNzU2l6ZSBpbnNsb3BlQ2hhbmdlID0gbV9pbnNsb3BlUG9pbnRzWzFdIC0gbV9pbnNs
b3BlUG9pbnRzWzBdOworICAgICAgICBHcmFwaGljc1NpemUgb3V0c2xvcGVDaGFuZ2UgPSBtX291
dHNsb3BlUG9pbnRzWzFdIC0gbV9vdXRzbG9wZVBvaW50c1swXTsKIAogICAgICAgICBkb3VibGUg
aW5zbG9wZSA9IHJhZDJkZWcoYXRhbjIoaW5zbG9wZUNoYW5nZS5oZWlnaHQoKSwgaW5zbG9wZUNo
YW5nZS53aWR0aCgpKSk7CiAgICAgICAgIGRvdWJsZSBvdXRzbG9wZSA9IHJhZDJkZWcoYXRhbjIo
b3V0c2xvcGVDaGFuZ2UuaGVpZ2h0KCksIG91dHNsb3BlQ2hhbmdlLndpZHRoKCkpKTsKQEAgLTgw
LDcgKzgwLDcgQEAKICAgICAgICAgbV9tYXJrZXIgPSBtYXJrZXI7CiAgICAgfQogCi0gICAgdm9p
ZCB1cGRhdGVPdXRzbG9wZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICB2b2lkIHVwZGF0
ZU91dHNsb3BlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogICAgIHsKICAgICAgICAgbV9v
dXRzbG9wZVBvaW50c1swXSA9IG1fb3JpZ2luOwogICAgICAgICBtX291dHNsb3BlUG9pbnRzWzFd
ID0gcG9pbnQ7CkBAIC04OCw3ICs4OCw3IEBACiAKICAgICB2b2lkIHVwZGF0ZU1hcmtlckRhdGFG
b3JQYXRoRWxlbWVudChjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKICAgICB7Ci0gICAgICAg
IEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwogCiAgICAgICAgIHN3aXRjaCAoZWxlbWVu
dC0+dHlwZSkgewogICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoK
QEAgLTEwOSwxMiArMTA5LDEyIEBACiAgICAgICAgIGNhc2UgUGF0aEVsZW1lbnRDbG9zZVN1YnBh
dGg6CiAgICAgICAgICAgICB1cGRhdGVJbnNsb3BlKHBvaW50c1swXSk7CiAgICAgICAgICAgICBt
X29yaWdpbiA9IG1fc3VicGF0aFN0YXJ0OwotICAgICAgICAgICAgbV9zdWJwYXRoU3RhcnQgPSBG
bG9hdFBvaW50KCk7CisgICAgICAgICAgICBtX3N1YnBhdGhTdGFydCA9IEdyYXBoaWNzUG9pbnQo
KTsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUluc2xvcGUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgdm9pZCB1cGRhdGVJbnNsb3BlKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50KQogICAgIHsKICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzBdID0g
bV9vcmlnaW47CiAgICAgICAgIG1faW5zbG9wZVBvaW50c1sxXSA9IHBvaW50OwpAQCAtMTIyLDEw
ICsxMjIsMTAgQEAKIAogICAgIFR5cGUgbV90eXBlOwogICAgIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBtX21hcmtlcjsKLSAgICBGbG9hdFBvaW50IG1fb3JpZ2luOwotICAgIEZsb2F0UG9pbnQg
bV9zdWJwYXRoU3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2luc2xvcGVQb2ludHNbMl07Ci0gICAg
RmxvYXRQb2ludCBtX291dHNsb3BlUG9pbnRzWzJdOworICAgIEdyYXBoaWNzUG9pbnQgbV9vcmln
aW47CisgICAgR3JhcGhpY3NQb2ludCBtX3N1YnBhdGhTdGFydDsKKyAgICBHcmFwaGljc1BvaW50
IG1faW5zbG9wZVBvaW50c1syXTsKKyAgICBHcmFwaGljc1BvaW50IG1fb3V0c2xvcGVQb2ludHNb
Ml07CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQAogICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewogICAgICAgICAgU1ZHU1ZHRWxlbWVu
dCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1lbnQpOwogCi0gICAgICAg
ICBGbG9hdFJlY3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OwotICAgICAgICAgbV92aWV3cG9y
dCA9IEZsb2F0UmVjdChzdmctPngoKS52YWx1ZShzdmcpCisgICAgICAgICBHcmFwaGljc1JlY3Qg
b2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OworICAgICAgICAgbV92aWV3cG9ydCA9IEdyYXBoaWNz
UmVjdChzdmctPngoKS52YWx1ZShzdmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgc3ZnLT55KCkudmFsdWUoc3ZnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IHN2Zy0+d2lkdGgoKS52YWx1ZShzdmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgc3ZnLT5oZWlnaHQoKS52YWx1ZShzdmcpKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAvLyBy
ZXR1cm4gdmlld3BvcnRUcmFuc2xhdGlvbiAqIGxvY2FsVHJhbnNmb3JtKCkgKiB2aWV3cG9ydFRy
YW5zZm9ybSgpCiB9CiAKLWJvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJ
bnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCkKK2Jvb2wg
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCkKIHsKICAgICAvLyBSZXNwZWN0IHRoZSB2
aWV3cG9ydCBjbGlwICh3aGljaCBpcyBpbiBwYXJlbnQgY29vcmRzKQogICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICBpZiAoIWZpcnN0
Q2hpbGQoKSAmJiAhc2VsZldpbGxQYWludCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFJlY3QgcmVwYWludFJlY3QgPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAg
IEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCk7CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWlu
dFJlY3QocmVwYWludFJlY3QsIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSwgcGFpbnRJbmZvKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDgsMjcgKzE0OCwyNyBAQAogCiB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7Ci0gICAgbV9vYmplY3RCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fb2Jq
ZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94
ID0gR3JhcGhpY3NSZWN0KCk7CisgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBHcmFwaGljc1Jl
Y3QoKTsKIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0Jv
eGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRpbmdCb3gsIG1fc3Ryb2tlQm91bmRpbmdCb3gsIG1fcmVw
YWludEJvdW5kaW5nQm94KTsKICAgICBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50
UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwogfQogCi1ib29s
IFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR0Nv
bnRhaW5lcjo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFy
ZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgLy8gR2l2ZSBSZW5kZXJT
VkdWaWV3cG9ydENvbnRhaW5lciBhIGNoYW5jZSB0byBhcHBseSBpdHMgdmlld3BvcnQgY2xpcAog
ICAgIGlmICghcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChwb2ludEluUGFyZW50KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICBH
cmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJz
ZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0
Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
bGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2Nh
bFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEdyYXBo
aWNzUG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewog
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2lu
dChsb2NhbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2MiwxMSBAQAogICAgIH0KIH0KIAot
RmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitHcmFwaGljc1JlY3Qg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKIHsKLSAgICBGbG9hdFJlY3QgdW5pdGVS
ZWN0OwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0
Qm91bmRhcmllcygpOwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGlu
Z0JveDsKKyAgICBHcmFwaGljc1JlY3QgdW5pdGVSZWN0OworICAgIEdyYXBoaWNzUmVjdCBzdWJy
ZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOworICAgIEdyYXBo
aWNzUmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKICAgICBTVkdGaWx0ZXIq
IGZpbHRlciA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlcio+KGVmZmVjdC0+ZmlsdGVyKCkpOwogICAg
IEFTU0VSVChmaWx0ZXIpOwogCkBAIC04NSw3ICs4NSw3IEBACiAgICAgaWYgKGZpbHRlci0+ZWZm
ZWN0Qm91bmRpbmdCb3hNb2RlKCkpIHsKICAgICAgICAgc3VicmVnaW9uID0gdW5pdGVSZWN0Owog
ICAgICAgICAvLyBBdm9pZCB0aGUgY2FsbGluZyBvZiBhIHZpcnR1YWwgbWV0aG9kIHNldmVyYWwg
dGltZXMuCi0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci0+dGFy
Z2V0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHRhcmdldEJvdW5kaW5nQm94
ID0gZmlsdGVyLT50YXJnZXRCb3VuZGluZ0JveCgpOwogCiAgICAgICAgIGlmIChlZmZlY3QtPmhh
c1goKSkKICAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRYKHRhcmdldEJvdW5kaW5nQm94LngoKSAr
IHN1YnJlZ2lvbkJvdW5kaW5nQm94LngoKSAqIHRhcmdldEJvdW5kaW5nQm94LndpZHRoKCkpOwpA
QCAtMTE0LDggKzExNCw4IEBACiAKICAgICBlZmZlY3QtPnNldEZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihzdWJyZWdpb24pOwogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlU3VicmVnaW9uID0gZmls
dGVyLT5tYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChzdWJyZWdpb24pOwotICAgIEZsb2F0U2l6
ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCk7CisgICAgR3Jh
cGhpY3NSZWN0IGFic29sdXRlU3VicmVnaW9uID0gZmlsdGVyLT5tYXBMb2NhbFJlY3RUb0Fic29s
dXRlUmVjdChzdWJyZWdpb24pOworICAgIEdyYXBoaWNzU2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0g
ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUo
ZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKIAog
ICAgIC8vIEZFSW1hZ2UgbmVlZHMgdGhlIHVuY2xpcHBlZCBzdWJyZWdpb24gaW4gYWJzb2x1dGUg
Y29vcmRpbmF0ZXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CkBAIC0xMjQsNyArMTI0LDcgQEAK
ICAgICAgICAgc3RhdGljX2Nhc3Q8RkVJbWFnZSo+KGVmZmVjdCktPnNldEFic29sdXRlU3VicmVn
aW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAogICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVj
dCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0
ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAgIEdyYXBoaWNzUmVjdCBhYnNv
bHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CiAgICAgYWJz
b2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpLCBm
aWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKICAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNl
Y3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgb2JqZWN0Qm91bmRpbmdCb3ggZm9yIERSVCByZXN1bHRzIGFuZCBmaWx0ZXJzIGF0IHRoZSBt
b21lbnQuCiAgICAgLy8gVGhpcyBzaG91bGQgYmUgZml4ZWQgdG8gZ2l2ZSBiYWNrIHRoZSBvYmpl
Y3RCb3VuZGluZ0JveCBvZiB0aGUgdGV4dCByb290LgotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9i
amVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0
dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UGF0dGVybi5oIgogI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVzLmgiCkBAIC01MywxNiArNTMs
MTYgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9k
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgq
KTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsg
fQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29u
c3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KICAgICBzdGF0aWMgUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHNfcmVzb3VyY2VUeXBlOwogCiBwcml2YXRlOgotICAgIGJvb2wgYnVpbGRUaWxlSW1h
Z2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25z
dCBTVkdQYXR0ZXJuRWxlbWVudCosIEZsb2F0UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsIEFmZmlu
ZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKKyAgICBib29sIGJ1aWxkVGls
ZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwg
Y29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBHcmFwaGljc1JlY3QmIHBhdHRlcm5Cb3VuZGFyaWVz
LCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CiAKLSAgICBQYXNz
T3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVCb3VuZGFyaWVzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3Qm
IGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdl
VHJhbnNmb3JtKSBjb25zdDsKKyAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxl
SW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBHcmFw
aGljc1JlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKIAogICAg
IGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMgOiAxOwogICAgIFBhdHRlcm5B
dHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgi
CiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCkBAIC03OCw3ICs3OCw3IEBACiB7CiB9CiAK
LWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCitib29sIFJlbmRlclNWR1Bh
dGg6OmZpbGxDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgYm9vbCByZXF1aXJl
c0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQogewogICAgIGlmICghbV9maWxsQm91bmRpbmdCb3gu
Y29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MCw3ICs5MCw3IEBA
CiAgICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgZmlsbFJ1bGUpOwogfQogCi1ib29s
IFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBi
b29sIHJlcXVpcmVzU3Ryb2tlKQorYm9vbCBSZW5kZXJTVkdQYXRoOjpzdHJva2VDb250YWlucyhj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKIHsKICAgICBp
ZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICBpZiAocGFpbnRJbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElE
REVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgR3Jh
cGhpY3NSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsK
ICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVj
dChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJbmZvKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNDMsMTMgKzI0MywxMyBAQAogICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7
CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
clNWR1BhdGg6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIC8vIFdlIG9ubHkgZHJh
dyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCiAgICAg
aWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52
ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxQ
b2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQp
OwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMs
IGxvY2FsUG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzAsMjkgKzI3MCwyOSBA
QAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdQYXRoOjpj
YWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCiB7CiAgICAgU1ZHRWxlbWVudCogc3ZnRWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkpOwogICAgIEFTU0VSVChzdmdF
bGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIGlmICghc3ZnRWxlbWVudC0+
aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7CiAKICAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1lbnQpOwogICAgIGlmICghc3R5
bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBBU1NFUlQoc3ZnU3R5
bGUtPmhhc01hcmtlcnMoKSk7CiAKICAgICBTVkdSZXNvdXJjZXMqIHJlc291cmNlcyA9IFNWR1Jl
c291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJPYmplY3QodGhpcyk7CiAgICAg
aWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1hcmtl
clN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwogICAgIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1pZCgpOwogICAgIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMtPm1hcmtlckVuZCgpOwogICAg
IGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFya2VyRW5kKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAg
IHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91bmRhcmllcyhtYXJrZXJTdGFy
dCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0eWxlLT5zdHJva2VXaWR0aCgpLnZhbHVlKHN2
Z0VsZW1lbnQpLCBtX3BhdGgpOwogfQpAQCAtMzAwLDkgKzMwMCw5IEBACiB2b2lkIFJlbmRlclNW
R1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQogewogICAgIGlmIChtX3BhdGguaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAg
IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9y
ZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAgICAgbV9maWxsQm91bmRpbmdC
b3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0Jv
eCA9IEdyYXBoaWNzUmVjdCgpOworICAgICAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEdyYXBo
aWNzUmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMTksNyArMzE5LDcgQEAK
ICAgICB9CiAKICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSkgewotICAgICAgICBGbG9h
dFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAg
ICAgICAgR3JhcGhpY3NSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lm
TmVlZGVkKCk7CiAgICAgICAgIGlmICghbWFya2VyQm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUobWFya2VyQm91bmRzKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAog
fTsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQYXRoOwogY2xhc3MgUmVuZGVyT2JqZWN0
OwpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3Qg
UGF0aCopIHsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVu
ZGVyT2JqZWN0KikgPSAwOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJj
ZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJl
ZUVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUg
IlNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1VzZUVs
ZW1lbnQuaCIKQEAgLTQyLDkgKzQyLDkgQEAKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1No
YWRvd1RyZWVDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAKLUZsb2F0U2l6ZSBTVkdT
aGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudDo6Y29udGFpbmVyVHJhbnNsYXRpb24oKSBjb25zdAor
R3JhcGhpY3NTaXplIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Ojpjb250YWluZXJUcmFu
c2xhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShtX3hPZmZzZXQudmFsdWUo
dGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSht
X3hPZmZzZXQudmFsdWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8RWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNsb25lRWxlbWVu
dFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDkgQEAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAg
ICAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0
aW9uKTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw5ICs0NCw5IEBACiAgICAgLy8gUmVuZGVyT2JqZWN0J3MgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbnMgQVNTRVJUX05PVF9SRUFDSEVEKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJ
bnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tl
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsg
fQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQAogICAgIHJldHVybiBp
dC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAgCi12b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdAordm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBo
cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QK
IHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwogICAgIFNWR0ZvbnRGYWNl
RWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKQEAgLTExNCwxMSArMTE0LDExIEBACiAgICAg
ZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc2l6
ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAgICAgQVNTRVJUKGFjdGl2ZVBh
aW50aW5nUmVzb3VyY2UpOwogCi0gICAgRmxvYXRQb2ludCBnbHlwaE9yaWdpbjsKKyAgICBHcmFw
aGljc1BvaW50IGdseXBoT3JpZ2luOwogICAgIGdseXBoT3JpZ2luLnNldFgoc3ZnRm9udERhdGEt
Pmhvcml6b250YWxPcmlnaW5YKCkgKiBzY2FsZSk7CiAgICAgZ2x5cGhPcmlnaW4uc2V0WShzdmdG
b250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblkoKSAqIHNjYWxlKTsKIAotICAgIEZsb2F0UG9pbnQg
Y3VycmVudFBvaW50ID0gcG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9pbnQgPSBw
b2ludDsKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+
dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6
IEFwcGx5VG9GaWxsTW9kZTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7CiAgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChmcm9tICsgaSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQAog
ICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZS0+b3BhY2l0eSgpOwogICAgIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKTsKICAgICBpZiAob3BhY2l0eSA8IDEgfHwg
c2hhZG93KSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IG9iamVjdC0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHJlcGFpbnRS
ZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogCiAgICAgICAg
IGlmIChvcGFjaXR5IDwgMSkgewogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAo
cmVwYWludFJlY3QpOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6
OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFp
bmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHN0cm9rZUJvdW5k
aW5nQm94LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKK3ZvaWQgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBj
b250YWluZXIsIEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEdyYXBoaWNzUmVjdCYg
c3Ryb2tlQm91bmRpbmdCb3gsIEdyYXBoaWNzUmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQogewog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlm
IChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKQpAQCAtMTg1LDcgKzE4NSw3IEBACiAg
ICAgfQogfQogCi1ib29sIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBh
aW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVwYWludFJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQorYm9v
bCBTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxv
Y2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKIHsKICAgICBpZiAobG9j
YWxUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICByZXR1cm4gbG9jYWxSZXBhaW50UmVj
dC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgIHJl
dHVybiBvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9ISURERU47CiB9CiAKLXZvaWQg
U1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0KQordm9pZCBTVkdS
ZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzUmVjdCYgcmVwYWludFJlY3QpCiB7CiAgICAgQVNT
RVJUKG9iamVjdCk7CiAKQEAgLTMwNSw3ICszMDUsNyBAQAogICAgICAgICBzaGFkb3ctPmFkanVz
dFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOwogfQogCi1ib29sIFNWR1JlbmRlclN1cHBvcnQ6
OnBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQorYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBB
U1NFUlQob2JqZWN0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQAogICAgICAgICBpZiAobWFya2VyLT50eXBlKCkgIT0gRG9jdW1lbnRN
YXJrZXI6OlRleHRNYXRjaCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0
UmVjdCBtYXJrZXJSZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgbWFya2VyUmVjdDsKICAgICAg
ICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICAgICAgaWYgKCFib3gt
PmlzU1ZHSW5saW5lVGV4dEJveCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTMy
LDcgKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Qm94LT5tYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9z
aXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QgPSB0ZXh0Qm94LT5z
ZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRp
b24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgZnJhZ21lbnRSZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVu
dChmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uLCBz
dHlsZSk7CiAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShm
cmFnbWVudFRyYW5zZm9ybSk7CiAgICAgICAgICAgICAgICAgaWYgKCFmcmFnbWVudFRyYW5zZm9y
bS5pc0lkZW50aXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdt
ZW50VHJhbnNmb3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
UG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VSZXNvdXJjZS5o
IgpAQCAtOTQsOCArOTQsOCBAQAogewogICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2UgPSBzdGF0
aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOwogCi0gICAgRmxvYXRSZWN0IG9sZEJv
dW5kYXJpZXMgPSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIG1fb2JqZWN0Qm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoaW1hZ2UtPngoKS52YWx1ZShpbWFnZSksIGltYWdlLT55KCkudmFsdWUoaW1h
Z2UpLCBpbWFnZS0+d2lkdGgoKS52YWx1ZShpbWFnZSksIGltYWdlLT5oZWlnaHQoKS52YWx1ZShp
bWFnZSkpOworICAgIEdyYXBoaWNzUmVjdCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RCb3VuZGlu
Z0JveDsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KGltYWdlLT54KCku
dmFsdWUoaW1hZ2UpLCBpbWFnZS0+eSgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPndpZHRoKCkudmFs
dWUoaW1hZ2UpLCBpbWFnZS0+aGVpZ2h0KCkudmFsdWUoaW1hZ2UpKTsKICAgICBpZiAobV9vYmpl
Y3RCb3VuZGluZ0JveCAhPSBvbGRCb3VuZGFyaWVzKSB7CiAgICAgICAgIG1fdXBkYXRlQ2FjaGVk
UmVwYWludFJlY3QgPSB0cnVlOwogICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKQEAgLTEw
OCw3ICsxMDgsNyBAQAogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIW1faW1hZ2VSZXNvdXJj
ZS0+aGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBHcmFwaGljc1JlY3Qg
Ym91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlmICgh
U1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5n
Qm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQogICAgICAgICByZXR1cm47CiAKQEAg
LTEyMyw4ICsxMjMsOCBAQAogCiAgICAgICAgICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6cHJl
cGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50SW5mbykpIHsKICAgICAgICAg
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZSgpOwot
ICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7
Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UtPndpZHRoKCks
IGltYWdlLT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0
ID0gbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3Qgc3Jj
UmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKTsKIAogICAgICAgICAg
ICAgICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1h
Z2VFbGVtZW50Kj4obm9kZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VFbGVtZW50LT5w
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkuYWxpZ24oKSAhPSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgfQog
fQogCi1ib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVy
U1ZHSW1hZ2U6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIC8vIFdlIG9ubHkgZHJh
dyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRoZW4uCiAgICAg
aWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCkBAIC0xNTAsNyArMTUwLDcg
QEAKICAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1
bGVzOjpTVkdfSU1BR0VfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50
cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklT
SUJMRSk7CiAgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsK
LSAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
LmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2lu
dChwb2ludEluUGFyZW50KTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoIVNWR1JlbmRlclN1
cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICBBU1NFUlQoY29udGFp
bmluZ0Jsb2NrKTsKIAogICAgIC8vIE1hcCBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBwb2ludCwg
YXMgdGhlIGNoYXJhY3RlciBvcmlnaW5zIHN0b3JlZCBpbiB0aGUgdGV4dCBmcmFnbWVudHMgdXNl
IGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludChwb2lu
dCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50KHBvaW50KTsKICAgICBhYnNvbHV0
ZVBvaW50Lm1vdmVCeShjb250YWluaW5nQmxvY2stPmxvY2F0aW9uKCkpOwogCiAgICAgZmxvYXQg
Y2xvc2VzdERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwpAQCAt
MTk5LDcgKzE5OSw3IEBACiAgICAgICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXplID0gZnJh
Z21lbnRzLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFn
bWVudHNTaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJh
Z21lbnQgPSBmcmFnbWVudHMuYXQoaSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZnJhZ21lbnRS
ZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21lbnQud2lkdGgsIGZy
YWdtZW50LmhlaWdodCk7CisgICAgICAgICAgICBHcmFwaGljc1JlY3QgZnJhZ21lbnRSZWN0KGZy
YWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21lbnQud2lkdGgsIGZyYWdtZW50
LmhlaWdodCk7CiAgICAgICAgICAgICBmcmFnbWVudC5idWlsZEZyYWdtZW50VHJhbnNmb3JtKGZy
YWdtZW50VHJhbnNmb3JtKTsKICAgICAgICAgICAgIGlmICghZnJhZ21lbnRUcmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKQogICAgICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50VHJhbnNm
b3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0
VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKQEAgLTE1
Myw3ICsxNTMsNyBAQAogICAgICAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKIAogICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gb25seSBsYXlvdXQgdGhlIGNoaWxkIGJv
eGVzLCBpZiBuZWVkZWQuCi0gICAgRmxvYXRSZWN0IG9sZEJvdW5kYXJpZXMgPSBvYmplY3RCb3Vu
ZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvbGRCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRp
bmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgZm9yY2VMYXlvdXRJ
bmxpbmVDaGlsZHJlbigpOwogCkBAIC0xODIsMTQgKzE4MiwxNCBAQAogICAgIHJldHVybiBib3g7
CiB9CiAKLWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
clNWR1RleHQ6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIFBvaW50ZXJFdmVudHNI
aXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6OlNWR19URVhUX0hJVFRFU1RJ
TkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7CiAgICAgYm9vbCBpc1Zpc2li
bGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpOwogICAgIGlmIChpc1Zpc2li
bGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CiAgICAgICAgIGlmICgoaGl0UnVsZXMu
Y2FuSGl0U3Ryb2tlICYmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSB8fCAhaGl0
UnVsZXMucmVxdWlyZVN0cm9rZSkpCiAgICAgICAgICAgICB8fCAoaGl0UnVsZXMuY2FuSGl0Rmls
bCAmJiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpIHx8ICFoaXRSdWxlcy5yZXF1aXJl
RmlsbCkpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
LmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAogICAgICAgICAgICAgaWYgKCFT
VkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgCkBAIC0yMjQsNyArMjI0LDcgQEAK
ICAgICByZXR1cm4gY2xvc2VzdEJveC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChMYXlv
dXRQb2ludChwb2ludEluQ29udGVudHMueCgpLCBjbG9zZXN0Qm94LT55KCkpKTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykK
K3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYg
cXVhZHMpCiB7CiAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91
bmRpbmdCb3goKSkpOwogfQpAQCAtMjQ1LDkgKzI0NSw5IEBACiAgICAgUmVuZGVyQmxvY2s6OnBh
aW50KGJsb2NrSW5mbywgSW50UG9pbnQoKSk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0
OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHVGV4dDo6
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGFy
aWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRh
cmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2
Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBpZiAoIXN2Z1N0eWxlLT5oYXNTdHJv
a2UoKSkKICAgICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kYXJpZXM7CkBAIC0yNTgsOSArMjU4LDkg
QEAKICAgICByZXR1cm4gc3Ryb2tlQm91bmRhcmllczsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNW
R1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKK0dyYXBoaWNzUmVj
dCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0CiB7
Ci0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBH
cmFwaGljc1JlY3QgcmVwYWludFJlY3QgPSBzdHJva2VCb3VuZGluZ0JveCgpOwogICAgIFNWR1Jl
bmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCByZXBh
aW50UmVjdCk7CiAKICAgICBpZiAoY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdyA9IHN0eWxl
KCktPnRleHRTaGFkb3coKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBACiAKICAgICAvLyBTcGVjOiBX
aGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVtZW50IGhhcyBubyB3aWR0aCBv
ciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNpZmllZCwKICAgICAvLyB0aGVu
IHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBhIGZpbHRlcikgd2lsbCBiZSBp
Z25vcmVkLgotICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0
Qm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgaWYgKG1fYXR0cmlidXRlcy5ib3VuZGluZ0Jv
eE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucyB0byBidWls
ZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgotICAgICAgICBGbG9hdFJlY3QgdGlsZUJv
dW5kYXJpZXM7CisgICAgICAgIEdyYXBoaWNzUmVjdCB0aWxlQm91bmRhcmllczsKICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHRpbGVJbWFnZVRyYW5zZm9ybTsKICAgICAgICAgaWYgKCFidWlsZFRp
bGVJbWFnZVRyYW5zZm9ybShvYmplY3QsIG1fYXR0cmlidXRlcywgcGF0dGVybkVsZW1lbnQsIHRp
bGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0pKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0
ZVRyYW5zZm9ybTsKICAgICAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRy
YW5zZm9ybSk7CiAKLSAgICAgICAgRmxvYXRSZWN0IGFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBh
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVCb3VuZGFyaWVzKTsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IGFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0
KHRpbGVCb3VuZGFyaWVzKTsKIAogICAgICAgICAvLyBCdWlsZCB0aWxlIGltYWdlLgogICAgICAg
ICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0ZVRpbGVJbWFnZShvYmplY3Qs
IG1fYXR0cmlidXRlcywgdGlsZUJvdW5kYXJpZXMsIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRp
bGVJbWFnZVRyYW5zZm9ybSk7CkBAIC0xOTYsMTkgKzE5NiwxOSBAQAogICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKIH0KIAotc3RhdGljIGlubGluZSBGbG9hdFJlY3QgY2FsY3VsYXRlUGF0dGVybkJv
dW5kYXJpZXMoY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3Qm
IG9iamVjdEJvdW5kaW5nQm94LAorc3RhdGljIGlubGluZSBHcmFwaGljc1JlY3QgY2FsY3VsYXRl
UGF0dGVybkJvdW5kYXJpZXMoY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
cmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHBhdHRl
cm5FbGVtZW50KQogewogICAgIEFTU0VSVChwYXR0ZXJuRWxlbWVudCk7CiAKICAgICBpZiAoYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChhdHRy
aWJ1dGVzLngoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgo
KSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChh
dHRyaWJ1dGVzLngoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lk
dGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVzLnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVp
Z2h0KCkgKyBvYmplY3RCb3VuZGluZ0JveC55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
YXR0cmlidXRlcy53aWR0aCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0Jv
eC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuaGVpZ2h0KCku
dmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKIAotICAg
IHJldHVybiBGbG9hdFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWUocGF0dGVybkVsZW1lbnQpLAor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoYXR0cmlidXRlcy54KCkudmFsdWUocGF0dGVybkVsZW1l
bnQpLAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy55KCkudmFsdWUocGF0dGVybkVs
ZW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy53aWR0aCgpLnZhbHVlKHBh
dHRlcm5FbGVtZW50KSwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuaGVpZ2h0KCku
dmFsdWUocGF0dGVybkVsZW1lbnQpKTsKQEAgLTIxNywxMyArMjE3LDEzIEBACiBib29sIFJlbmRl
clNWR1Jlc291cmNlUGF0dGVybjo6YnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQ
YXR0ZXJuRWxlbWVudCogcGF0dGVybkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0JiBwYXR0ZXJuQm91bmRhcmll
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc1JlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgdGlsZUlt
YWdlVHJhbnNmb3JtKSBjb25zdAogewogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgQVNTRVJU
KHBhdHRlcm5FbGVtZW50KTsKIAotICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IHJl
bmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgIHBhdHRlcm5Cb3Vu
ZGFyaWVzID0gY2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoYXR0cmlidXRlcywgb2JqZWN0Qm91
bmRpbmdCb3gsIHBhdHRlcm5FbGVtZW50KTsgCiAgICAgaWYgKHBhdHRlcm5Cb3VuZGFyaWVzLndp
ZHRoKCkgPD0gMCB8fCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQoKSA8PSAwKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yNDEsMTYgKzI0MSwxNiBAQAogCiBQYXNzT3duUHRyPEltYWdlQnVm
ZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmpl
Y3QqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdy
YXBoaWNzUmVjdCYgdGlsZUJvdW5kYXJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3Qm
IGFic29sdXRlVGlsZUJvdW5kYXJpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3QKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKIAogICAg
IC8vIENsYW1wIHRpbGUgaW1hZ2Ugc2l6ZSBhZ2FpbnN0IFNWRyB2aWV3cG9ydCBzaXplLCBhcyBs
YXN0IHJlc29ydCwgdG8gYXZvaWQgYWxsb2NhdGluZyBodWdlIGltYWdlIGJ1ZmZlcnMuCi0gICAg
RmxvYXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290
T2JqZWN0KG9iamVjdCktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRl
bnRCb3hSZWN0ID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KG9iamVjdCkt
PmNvbnRlbnRCb3hSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGlsZUJv
dW5kYXJpZXMgPSBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzOworICAgIEdyYXBoaWNzUmVjdCBjbGFt
cGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVGlsZUJvdW5kYXJpZXM7CiAgICAg
aWYgKGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgPiBjb250ZW50Qm94UmVj
dC53aWR0aCgpKQogICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRXaWR0
aChjb250ZW50Qm94UmVjdC53aWR0aCgpKTsKIApAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgQVNT
RVJUKHRpbGVJbWFnZUNvbnRleHQpOwogCiAgICAgLy8gVGhlIGltYWdlIGJ1ZmZlciByZXByZXNl
bnRzIHRoZSBmaW5hbCByZW5kZXJlZCBzaXplLCBzbyB0aGUgY29udGVudCBoYXMgdG8gYmUgc2Nh
bGVkICh0byBhdm9pZCBwaXhlbGF0aW9uKS4KLSAgICB0aWxlSW1hZ2VDb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoYWJzb2x1dGVUaWxlQm91bmRhcmllcy53aWR0aCgpIC8gdGlsZUJvdW5kYXJpZXMu
d2lkdGgoKSwKKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoYWJzb2x1
dGVUaWxlQm91bmRhcmllcy53aWR0aCgpIC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVUaWxlQm91bmRhcmllcy5o
ZWlnaHQoKSAvIHRpbGVCb3VuZGFyaWVzLmhlaWdodCgpKSk7CiAKICAgICAvLyBBcHBseSB0aWxl
IGltYWdlIHRyYW5zZm9ybWF0aW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBF
TkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTEg
KzQ1LDExIEBACiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsgfQot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
bV92aWV3cG9ydDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsgfQorICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsg
fQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV92aWV3cG9ydDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsgfQogCi0gICAg
dmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
bik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVu
dCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludElu
Q29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RB
Y3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZvcmVpZ25PYmplY3QoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0K
IAogICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7Ci0gICAgRmxvYXRSZWN0IG1f
dmlld3BvcnQ7CisgICAgR3JhcGhpY3NSZWN0IG1fdmlld3BvcnQ7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbG9jYWxUcmFuc2Zvcm07CiAgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2Nh
bFRvUGFyZW50VHJhbnNmb3JtOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBF
TkFCTEUoU1ZHKQogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzcsNyBAQAogCiAgICAgdmlydHVhbCBi
b29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0Nv
bnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRl
ck9iamVjdCopIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRl
clNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBzX3Jlc291cmNl
VHlwZTsgfQogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsOSArNDUsOSBAQAogICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBw
b2ludEluUGFyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xp
cChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50KTsKIAotICAgIEZsb2F0UmVjdCBt
X3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0OwogICAgIG11dGFibGUgQWZm
aW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH07CiAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDI4ICs1MywyOCBAQAogCiAgICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50Jik7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdC
b3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJv
dW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFw
aGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBt
X3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICAv
LyBBbGxvdyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhl
IHJpZ2h0IHRpbWUgaW4gbGF5b3V0KCkKICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxU
cmFuc2Zvcm0oKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCks
IHBhaW50KCkgYW5kIG5vZGVBdEZsb2F0UG9pbnQoKQorICAgIC8vIEFsbG93IFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWVzIGluIGxheW91dCgp
LCBwYWludCgpIGFuZCBub2RlQXRHcmFwaGljc1BvaW50KCkKICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1ZpZXdwb3J0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50
SW5mbyYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNv
bnN0IEZsb2F0UG9pbnQmIC8qcG9pbnRJblBhcmVudCovKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgR3JhcGhpY3NQb2lu
dCYgLypwb2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgc2VsZldp
bGxQYWludCgpOwogICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwogCiBwcml2YXRl
OgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0UmVjdCBt
X29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94Owot
ICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9v
YmplY3RCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsK
KyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CiAgICAgYm9vbCBtX25lZWRz
Qm91bmRhcmllc1VwZGF0ZSA6IDE7CiB9OwogICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jvb3RfaAogCiAjaWYgRU5BQkxFKFNWRykK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJCb3guaCIKIAogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKQEAgLTM5
LDcgKzM5LDcgQEAKICAgICBleHBsaWNpdCBSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQq
KTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSb290KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29t
cHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24oRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbywg
Ym9vbCYgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEdyYXBoaWNzU2l6ZSYgaW50cmluc2lj
UmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpIGNvbnN0OwogICAgIGNvbnN0
IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGls
ZHJlbjsgfQogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAm
bV9jaGlsZHJlbjsgfQogCkBAIC03MSwxMiArNzEsMTIgQEAKIAogICAgIHZpcnR1YWwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICBi
b29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBmaWxsQ29udGFp
bnMoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMo
Y29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Ci0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X3N0cm9rZUJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsg
fQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIApAQCAtOTYsMTAgKzk2LDEwIEBACiAgICAg
QWZmaW5lVHJhbnNmb3JtIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAg
IFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0U2l6ZSBtX3ZpZXdw
b3J0U2l6ZTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJl
Y3QgbV9zdHJva2VCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdC
b3g7CisgICAgR3JhcGhpY3NTaXplIG1fdmlld3BvcnRTaXplOworICAgIEdyYXBoaWNzUmVjdCBt
X29iamVjdEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94
OworICAgIEdyYXBoaWNzUmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAgICBtdXRhYmxlIEFm
ZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2lzTGF5
b3V0U2l6ZUNoYW5nZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5zZm9y
bVVwZGF0ZSA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgbmFt
ZSwgdmFsdWUpOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGbG9hdFJlY3QgJnIpCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBHcmFwaGljc1JlY3QgJnIpCiB7CiAgICAgdHMgPDwgImF0ICgiOyAKICAgICBpZiAo
aGFzRnJhY3Rpb25zKHIueCgpKSkgCkBAIC01MzQsNyArNTM0LDcgQEAKICAgICAgICAgd3JpdGVO
YW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZlVW5pdHMiLCBmaWx0ZXItPnByaW1pdGl2ZVVuaXRz
KCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9s
ZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCi0gICAgICAgIEZsb2F0
UmVjdCBkdW1teVJlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBkdW1teVJlY3Q7CiAgICAgICAg
IFJlZlB0cjxTVkdGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5l
VHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwogICAg
ICAgICBpZiAoUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXIgPSBmaWx0ZXItPmJ1aWxk
UHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChGaWx0ZXJF
ZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCkBAIC01ODAsOCArNTgw
LDggQEAKICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jb2xsZWN0R3JhZGllbnRBdHRy
aWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgICAgICB3cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGll
cyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmlidXRlcy5ncmFkaWVudFRyYW5z
Zm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKIAotICAgICAgICBGbG9hdFBv
aW50IHN0YXJ0UG9pbnQ7Ci0gICAgICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQgc3RhcnRQb2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludDsK
ICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhh
dHRyaWJ1dGVzLCBzdGFydFBvaW50LCBlbmRQb2ludCk7CiAKICAgICAgICAgdHMgPDwgIiBbc3Rh
cnQ9IiA8PCBzdGFydFBvaW50IDw8ICJdIFtlbmQ9IiA8PCBlbmRQb2ludCA8PCAiXVxuIjsKQEAg
LTU5Niw4ICs1OTYsOCBAQAogICAgICAgICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNvbGxlY3RH
cmFkaWVudEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHdyaXRlQ29tbW9uR3JhZGll
bnRQcm9wZXJ0aWVzKHRzLCBhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpLCBhdHRyaWJ1dGVzLmdy
YWRpZW50VHJhbnNmb3JtKCksIGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogCi0gICAg
ICAgIEZsb2F0UG9pbnQgZm9jYWxQb2ludDsKLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2lu
dDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBmb2NhbFBvaW50OworICAgICAgICBHcmFwaGljc1Bv
aW50IGNlbnRlclBvaW50OwogICAgICAgICBmbG9hdCByYWRpdXM7CiAgICAgICAgIHJhZGlhbEdy
YWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMoYXR0cmli
dXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7CiAKQEAgLTY0MCw3ICs2NDAs
NyBAQAogICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHRleHQsIGluZGVudCk7CiAKICAgICAv
LyBXaHkgbm90IGp1c3QgbGluZXNCb3VuZGluZ0JveCgpPwotICAgIHRzIDw8ICIgIiA8PCBGbG9h
dFJlY3QodGV4dC5maXJzdFJ1bk9yaWdpbigpLCB0ZXh0LmxpbmVzQm91bmRpbmdCb3goKS5zaXpl
KCkpIDw8ICJcbiI7CisgICAgdHMgPDwgIiAiIDw8IEdyYXBoaWNzUmVjdCh0ZXh0LmZpcnN0UnVu
T3JpZ2luKCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSkgPDwgIlxuIjsKICAgICB3
cml0ZVJlc291cmNlcyh0cywgdGV4dCwgaW5kZW50KTsKICAgICB3cml0ZVNWR0lubGluZVRleHRC
b3hlcyh0cywgdGV4dCwgaW5kZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC02
MSw3ICs2MSw3IEBACiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlbW92ZUFsbENs
aWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQogewotICAgIG1fbWFza0Nv
bnRlbnRCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9tYXNrQ29udGVudEJvdW5kYXJp
ZXMgPSBHcmFwaGljc1JlY3QoKTsKICAgICBpZiAoIW1fbWFza2VyLmlzRW1wdHkoKSkgewogICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMobV9tYXNrZXIpOwogICAgICAgICBtX21hc2tlci5jbGVhcigp
OwpAQCAtOTgsOCArOTgsOCBAQAogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9y
bTsKICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0
ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKIAot
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRS
ZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJl
Y3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Cisg
ICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZl
clRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNv
bHV0ZVRhcmdldFJlY3QpOwogCiAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIWNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIFNWR01hc2tFbGVt
ZW50KiBtYXNrRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIC8vIEV2ZW50dWFsbHkgYWRqdXN0IHRoZSBtYXNrIGlt
YWdlIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3guCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb247CiAgICAgaWYgKG1h
c2tFbGVtZW50LT5tYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGlu
Z0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgICAg
ICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54
KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgIG1hc2tDb250ZW50VHJhbnNmb3Jt
YXRpb24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJv
dW5kaW5nQm94LmhlaWdodCgpKTsKICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+Y29uY2F0Q1RN
KG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24pOwpAQCAtMTc1LDEzICsxNzUsMTMgQEAKICAgICB9
CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVzb3VyY2VCb3VuZGlu
Z0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAg
ICBTVkdNYXNrRWxlbWVudCogbWFza0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVu
dCo+KG5vZGUoKSk7CiAgICAgQVNTRVJUKG1hc2tFbGVtZW50KTsKIAotICAgIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBGbG9h
dFJlY3QgbWFza0JvdW5kYXJpZXMgPSBtYXNrRWxlbWVudC0+bWFza0JvdW5kaW5nQm94KG9iamVj
dEJvdW5kaW5nQm94KTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NSZWN0IG1hc2tCb3VuZGFyaWVz
ID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGluZ0JveCk7CiAKICAg
ICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNrIGNsaXBwaW5nIHJl
Y3Qgb2YgdGhlIG1hc2suCiAgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQpAQCAtMTkwLDcgKzE5
MCw3IEBACiAgICAgaWYgKG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzLmlzRW1wdHkoKSkKICAgICAg
ICAgY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IG1h
c2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAgR3JhcGhpY3NSZWN0IG1hc2tS
ZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CiAgICAgaWYgKG1hc2tFbGVtZW50LT5tYXNr
Q29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgICAgIHRy
YW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGluZ0Jv
eC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIC8vIFRoZXkgZGVwZW5kIG9uIHRoZSBSZW5kZXJPYmplY3QgYXJndW1lbnQg
b2YgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UuCi0gICAgc3RhdGljIEZs
b2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0Kik7
CisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oRmlsdGVyRWZmZWN0Kik7CiAKICAgICBpbmxpbmUgdm9pZCBwcmltaXRpdmVBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQAogICAgIHJldHVybiAw
OwogfQogCi1GbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRG
cmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlv
biwgaW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUpCitHcmFwaGljc1JlY3QgU1ZH
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0
RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBS
ZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3Np
dGlvbik7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAgLTEwMywxMyArMTAzLDEzIEBACiAKICAgICBj
b25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVyLT5zY2FsZWRGb250KCk7CiAgICAg
Y29uc3QgRm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250TWV0
cmljcygpOwotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55
KTsKKyAgICBHcmFwaGljc1BvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7
CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkKICAgICAgICAgdGV4dE9yaWdpbi5zY2FsZShz
Y2FsaW5nRmFjdG9yLCBzY2FsaW5nRmFjdG9yKTsKIAogICAgIHRleHRPcmlnaW4ubW92ZSgwLCAt
c2NhbGVkRm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiAKLSAgICBGbG9hdFJlY3Qgc2VsZWN0
aW9uUmVjdCA9IHNjYWxlZEZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1
bihzdHlsZSwgZnJhZ21lbnQpLCB0ZXh0T3JpZ2luLCBmcmFnbWVudC5oZWlnaHQgKiBzY2FsaW5n
RmFjdG9yLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgR3JhcGhpY3NSZWN0IHNl
bGVjdGlvblJlY3QgPSBzY2FsZWRGb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRl
eHRSdW4oc3R5bGUsIGZyYWdtZW50KSwgdGV4dE9yaWdpbiwgZnJhZ21lbnQuaGVpZ2h0ICogc2Nh
bGluZ0ZhY3Rvciwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogICAgIGlmIChzY2FsaW5n
RmFjdG9yID09IDEpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25SZWN0OwogCkBAIC0xMzIsNyAr
MTMyLDcgQEAKICAgICBBU1NFUlQoc3R5bGUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdt
ZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OworICAgIEdyYXBoaWNz
UmVjdCBzZWxlY3Rpb25SZWN0OwogICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwog
ICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAg
ICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhm
cmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QgPSBz
ZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRp
b24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGZy
YWdtZW50UmVjdCA9IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdt
ZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwgc3R5bGUpOwogICAgICAgICBm
cmFnbWVudC5idWlsZEZyYWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAg
ICAgaWYgKCFmcmFnbWVudFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgICAgICBmcmFn
bWVudFJlY3QgPSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CkBAIC01
NzksNyArNTc5LDcgQEAKICAgICBpZiAoZnJhZ21lbnQud2lkdGggPD0gMCAmJiB0aGlja25lc3Mg
PD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBkZWNvcmF0aW9uT3JpZ2lu
KGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworICAgIEdyYXBoaWNzUG9pbnQgZGVjb3JhdGlvbk9y
aWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKICAgICBmbG9hdCB3aWR0aCA9IGZyYWdtZW50
LndpZHRoOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBzY2FsZWRGb250TWV0cmljcyA9IHNjYWxl
ZEZvbnQuZm9udE1ldHJpY3MoKTsKIApAQCAtNTk4LDcgKzU5OCw3IEBACiAgICAgZGVjb3JhdGlv
bk9yaWdpbi5tb3ZlKDAsIC1zY2FsZWRGb250TWV0cmljcy5mbG9hdEFzY2VudCgpICsgcG9zaXRp
b25PZmZzZXRGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIHNjYWxlZEZvbnRNZXRyaWNzLCB0aGlj
a25lc3MpKTsKIAogICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJlY3QoRmxvYXRSZWN0KGRl
Y29yYXRpb25PcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgdGhpY2tuZXNzKSkpOworICAgIHBhdGgu
YWRkUmVjdChHcmFwaGljc1JlY3QoZGVjb3JhdGlvbk9yaWdpbiwgR3JhcGhpY3NTaXplKHdpZHRo
LCB0aGlja25lc3MpKSk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5nUmVzb3VyY2UoY29udGV4
dCwgc2NhbGluZ0ZhY3RvciwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0aW9uU3R5bGUpKQog
ICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCAmcGF0aCk7CkBAIC02MTUs
MjEgKzYxNSwyMSBAQAogICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVuZGVyZXIt
PnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdHlsZS0+dGV4
dFNoYWRvdygpOwogCi0gICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50LngsIGZyYWdt
ZW50LnkpOwotICAgIEZsb2F0U2l6ZSB0ZXh0U2l6ZShmcmFnbWVudC53aWR0aCwgZnJhZ21lbnQu
aGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21l
bnQueSk7CisgICAgR3JhcGhpY3NTaXplIHRleHRTaXplKGZyYWdtZW50LndpZHRoLCBmcmFnbWVu
dC5oZWlnaHQpOwogCiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkgewogICAgICAgICB0ZXh0
T3JpZ2luLnNjYWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpOwogICAgICAgICB0ZXh0
U2l6ZS5zY2FsZShzY2FsaW5nRmFjdG9yKTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3Qgc2hhZG93
UmVjdChGbG9hdFBvaW50KHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSAtIHNjYWxlZEZv
bnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKSwgdGV4dFNpemUpOworICAgIEdyYXBoaWNz
UmVjdCBzaGFkb3dSZWN0KEdyYXBoaWNzUG9pbnQodGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4u
eSgpIC0gc2NhbGVkRm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpLCB0ZXh0U2l6ZSk7
CiAKICAgICBkbyB7CiAgICAgICAgIGlmICghcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQ
YWludGluZyhjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCB0ZXh0UnVuLCBzdHlsZSkpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBGbG9hdFNpemUgZXh0cmFPZmZzZXQ7CisgICAgICAgIEdy
YXBoaWNzU2l6ZSBleHRyYU9mZnNldDsKICAgICAgICAgaWYgKHNoYWRvdykKICAgICAgICAgICAg
IGV4dHJhT2Zmc2V0ID0gYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChjb250ZXh0LCBzaGFk
b3csIHNoYWRvd1JlY3QsIGZhbHNlIC8qIHN0cm9rZWQgKi8sIHRydWUgLyogb3BhcXVlICovLCB0
cnVlIC8qIGhvcml6b250YWwgKi8pOwogCkBAIC03MDMsNyArNzAzLDcgQEAKIAogSW50UmVjdCBT
VkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QKIHsKLSAgICBGbG9h
dFJlY3QgdGV4dFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHRleHRSZWN0OwogCiAgICAgUmVuZGVy
U1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHRoaXMt
PnRleHRSZW5kZXJlcigpKTsKICAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKQEAgLTcxNyw3ICs3
MTcsNyBAQAogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRz
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7
ICsraSkgewogICAgICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gbV90ZXh0
RnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBGbG9hdFJlY3QgZnJhZ21lbnRSZWN0KGZyYWdtZW50
LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21lbnQud2lkdGgsIGZyYWdtZW50LmhlaWdo
dCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBmcmFnbWVudFJlY3QoZnJhZ21lbnQueCwgZnJhZ21l
bnQueSAtIGJhc2VsaW5lLCBmcmFnbWVudC53aWR0aCwgZnJhZ21lbnQuaGVpZ2h0KTsKICAgICAg
ICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9ybSk7CiAg
ICAgICAgIGlmICghZnJhZ21lbnRUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAg
ZnJhZ21lbnRSZWN0ID0gZnJhZ21lbnRUcmFuc2Zvcm0ubWFwUmVjdChmcmFnbWVudFJlY3QpOwpA
QCAtNzM4LDkgKzczOCw5IEBACiAgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWly
ZVZpc2libGUpIHsKICAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHJlbmRl
cmVyKCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpIHx8ICFoaXRSdWxlcy5yZXF1
aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChyZW5k
ZXJlcigpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVp
cmVGaWxsKSkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luKHgoKSwgeSgpKTsK
KyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luKHgoKSwgeSgpKTsKICAgICAgICAg
ICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgICAgICAgICAgRmxv
YXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0
IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgICAgICAgICAgaWYgKHJlY3QuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFp
bmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2Rl
KCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB2aXJ0dWFsIEludFJlY3Qgb3V0
bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIEludFBvaW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhW
ZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
OwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5z
Zm9ybVN0YXRlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAog
I2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcl9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgi
CiAjaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgpAQCAtNDYsMTkgKzQ2LDE5IEBACiAgICAg
dm9pZCBkcmF3KFBhaW50SW5mbyYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgLy8g
Q2FsY3VsYXRlcyBtYXJrZXIgYm91bmRhcmllcywgbWFwcGVkIHRvIHRoZSB0YXJnZXQgZWxlbWVu
dCdzIGNvb3JkaW5hdGUgc3BhY2UKLSAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRhcmllcyhjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIG1hcmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdDsKKyAgICBHcmFw
aGljc1JlY3QgbWFya2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hcmtlclRy
YW5zZm9ybWF0aW9uKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVZpZXdwb3J0Q2xp
cChQYWludEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIGNhbGNWaWV3cG9ydCgpOwogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWFy
a2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFu
c2Zvcm1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9h
dCBzdHJva2VXaWR0aCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJv
dW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmly
dHVhbCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJl
dHVybiBHcmFwaGljc1JlY3QoKTsgfQogCi0gICAgRmxvYXRQb2ludCByZWZlcmVuY2VQb2ludCgp
IGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcmVmZXJlbmNlUG9pbnQoKSBjb25zdDsKICAgICBm
bG9hdCBhbmdsZSgpIGNvbnN0OwogICAgIFNWR01hcmtlclVuaXRzVHlwZSBtYXJrZXJVbml0cygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpLT5t
YXJrZXJVbml0cygpOyB9CiAKQEAgLTY4LDEyICs2OCwxMiBAQAogcHJpdmF0ZToKICAgICAvLyBH
ZW5lcmF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNhYmxlIHRvIHJlbmRlciBtYXJrZXIg
Y29udGVudC4gSGFuZGxlcyBzY2FsaW5nIHRoZSBtYXJrZXIgY29udGVudAogICAgIC8vIGFjb3Jk
aW5nIHRvIFNWR3MgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBjb25jZXB0LCB3aGVuIGEgc3Ry
b2tlV2lkdGggdmFsdWUgIT0gLTEgaXMgcGFzc2VkIGluLgotICAgIEFmZmluZVRyYW5zZm9ybSBt
YXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjb250ZW50
VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgc3Ryb2tlV2lk
dGggPSAtMSkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zv
cm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsK
IAogICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAg
bXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotICAgIEZs
b2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJM
YXlvdXRJbmZvLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwx
NCBAQAogICAgIFNWR01hcmtlckxheW91dEluZm8oKTsKICAgICB+U1ZHTWFya2VyTGF5b3V0SW5m
bygpOwogCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2Vy
LCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJva2VXaWR0aCwg
Y29uc3QgUGF0aCYpOworICAgIEdyYXBoaWNzUmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciwgZmxvYXQgc3Ry
b2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIGRyYXdNYXJrZXJzKFBhaW50SW5mbyYp
OwogCiAgICAgLy8gVXNlZCBieSBzdGF0aWMgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMgaW4gU1ZH
TWFya2VyTGF5b3V0SW5mby5jcHAKICAgICBTVkdNYXJrZXJEYXRhJiBtYXJrZXJEYXRhKCkgeyBy
ZXR1cm4gbV9tYXJrZXJEYXRhOyB9CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1h
cmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWlkTWFya2VyOyB9CiAgICAgaW50JiBlbGVtZW50SW5k
ZXgoKSB7IHJldHVybiBtX2VsZW1lbnRJbmRleDsgfQotICAgIHZvaWQgYWRkTGF5b3V0ZWRNYXJr
ZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZs
b2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSk7CiAgICAg
dm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEz
ICsyNiwxMyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlNWR01hcmtlckxheW91
dEluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xh
c3MgR3JhcGhpY3NQb2ludDsKIGNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKIGNsYXNzIFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwogCkBAIC00OCwxMiArNDgsMTIgQEAKIAogcHJpdmF0
ZToKICAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBz
dHJva2UKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1
aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAg
Ym9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9r
ZSA9IHRydWUpOworICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBi
b29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJP
KTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIHJl
cXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFu
ZE1hcmtlckJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsg
fQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CiAgICAgdmlydHVh
bCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRo
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwg
dm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVu
dCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNzUG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICBHcmFwaGljc1JlY3QgY2FsY3VsYXRlTWFy
a2VyQm91bmRzSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsK
IAogcHJpdmF0ZToKQEAgLTc3LDkgKzc3LDkgQEAKICAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1V
cGRhdGUgOiAxOwogCiAgICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFJlY3QgbV9m
aWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdC
b3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVj
dCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CiAgICAg
U1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fbG9jYWxUcmFuc2Zvcm07CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWlu
ZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDcgQEAKICAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmdUYWcp
IHx8ICFzdGF0aWNfY2FzdDxTVkdHRWxlbWVudCo+KGVsZW1lbnQpLT5pc1NoYWRvd1RyZWVDb250
YWluZXJFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBuZWVkc1VwZGF0ZTsKIAotICAgIEZsb2F0
U2l6ZSB0cmFuc2xhdGlvbiA9IHN0YXRpY19jYXN0PFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVt
ZW50Kj4oZWxlbWVudCktPmNvbnRhaW5lclRyYW5zbGF0aW9uKCk7CisgICAgR3JhcGhpY3NTaXpl
IHRyYW5zbGF0aW9uID0gc3RhdGljX2Nhc3Q8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQq
PihlbGVtZW50KS0+Y29udGFpbmVyVHJhbnNsYXRpb24oKTsKICAgICBpZiAoIXRyYW5zbGF0aW9u
LndpZHRoKCkgJiYgIXRyYW5zbGF0aW9uLmhlaWdodCgpKQogICAgICAgICByZXR1cm4gbmVlZHNV
cGRhdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJl
ZUVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdTaGFkb3dUcmVlRWxlbWVudHMuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxNCArMjYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFNp
emU7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBTVkdVc2VFbGVtZW50OwogCiBjbGFzcyBT
VkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCopOwogCi0gICAgRmxvYXRTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9u
KCkgY29uc3Q7CisgICAgR3JhcGhpY3NTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBT
VkdMZW5ndGgmIHkpCiAgICAgewogICAgICAgICBtX3hPZmZzZXQgPSB4OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQAogICAgIH0KIAogICAgIHVuc2lnbmVkIHBv
c2l0aW9uOwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50
IHN0YXJ0UG9zaXRpb247CiB9OwogCiBib29sIFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9m
Q2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50KSBjb25zdApAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgaWYgKCFtYXBTdGFydEVu
ZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ZGF0YS0+c3RhcnRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7
CisgICAgZGF0YS0+c3RhcnRQb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQoZnJhZ21lbnQueCwgZnJh
Z21lbnQueSk7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAgICBTVkdUZXh0TWV0
cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVy
eURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0
aW9uKTsKQEAgLTM1NCwxMCArMzU0LDEwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0
UG9pbnQgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9z
aXRpb24pIGNvbnN0CitHcmFwaGljc1BvaW50IFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9m
Q2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgIHJldHVy
biBHcmFwaGljc1BvaW50KCk7CiAKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhIGRh
dGEocG9zaXRpb24pOwogICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6c3Rh
cnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOwpAQCAtMzcyLDcgKzM3Miw3IEBACiAgICAg
fQogCiAgICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludCBlbmRQb3NpdGlvbjsK
KyAgICBHcmFwaGljc1BvaW50IGVuZFBvc2l0aW9uOwogfTsKIAogYm9vbCBTVkdUZXh0UXVlcnk6
OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICBp
ZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRh
LCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21lbnQueCwg
ZnJhZ21lbnQueSk7CisgICAgZGF0YS0+ZW5kUG9zaXRpb24gPSBHcmFwaGljc1BvaW50KGZyYWdt
ZW50LngsIGZyYWdtZW50LnkpOwogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1Rl
eHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIs
IGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCwgc3RhcnRQb3NpdGlvbiArIDEpOwogICAgIGlmIChx
dWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQpAQCAtNDAxLDEwICs0MDEsMTAgQEAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFy
YWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CitHcmFwaGljc1BvaW50IFNWR1RleHRRdWVy
eTo6ZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAg
ICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgp
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2ludCgpOwogCiAgICAgRW5kUG9zaXRpb25PZkNo
YXJhY3RlckRhdGEgZGF0YShwb3NpdGlvbik7CiAgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZH
VGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOwpAQCAtNDYyLDE1ICs0
NjIsMTUgQEAKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3NpdGlvbjsKLSAgICBGbG9hdFJlY3Qg
ZXh0ZW50OworICAgIEdyYXBoaWNzUmVjdCBleHRlbnQ7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZv
aWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRh
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgRmxv
YXRSZWN0JiBleHRlbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFy
aWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgR3JhcGhpY3NSZWN0JiBleHRlbnQpCiB7CiAg
ICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5zY2FsaW5n
RmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwogCi0gICAgZXh0ZW50LnNldExv
Y2F0aW9uKEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSAtIHF1ZXJ5RGF0YS0+dGV4
dFJlbmRlcmVyLT5zY2FsZWRGb250KCkuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpIC8gc2Nh
bGluZ0ZhY3RvcikpOworICAgIGV4dGVudC5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KGZyYWdt
ZW50LngsIGZyYWdtZW50LnkgLSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c2NhbGVkRm9udCgp
LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSAvIHNjYWxpbmdGYWN0b3IpKTsKIAogICAgIGlm
IChzdGFydFBvc2l0aW9uKSB7CiAgICAgICAgIFNWR1RleHRNZXRyaWNzIG1ldHJpY3MgPSBTVkdU
ZXh0TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVy
LCBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQsIHN0YXJ0UG9zaXRpb24pOwpAQCAtNDgxLDcgKzQ4
MSw3IEBACiAgICAgfQogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1RleHRNZXRy
aWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdt
ZW50LmNoYXJhY3Rlck9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOwotICAgIGV4dGVudC5zZXRT
aXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3MuaGVpZ2h0KCkpKTsKKyAgICBl
eHRlbnQuc2V0U2l6ZShHcmFwaGljc1NpemUobWV0cmljcy53aWR0aCgpLCBtZXRyaWNzLmhlaWdo
dCgpKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgZnJh
Z21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9ybSwgU1ZHVGV4dEZy
YWdtZW50OjpUcmFuc2Zvcm1JZ25vcmluZ1RleHRMZW5ndGgpOwpAQCAtNTA0LDEwICs1MDQsMTAg
QEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IFNWR1RleHRRdWVyeTo6ZXh0ZW50
T2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZHVGV4
dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAg
ICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIEV4dGVudE9mQ2hhcmFjdGVy
RGF0YSBkYXRhKHBvc2l0aW9uKTsKICAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVl
cnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2spOwpAQCAtNTE2LDE5ICs1MTYsMTkgQEAKIAog
Ly8gY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbigpIGltcGxlbWVudGF0aW9uCiBzdHJ1Y3QgQ2hh
cmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgewotICAgIENo
YXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKGNvbnN0IEZsb2F0UG9pbnQmIHF1ZXJ5UG9zaXRp
b24pCisgICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEoY29uc3QgR3JhcGhpY3NQb2lu
dCYgcXVlcnlQb3NpdGlvbikKICAgICAgICAgOiBwb3NpdGlvbihxdWVyeVBvc2l0aW9uKQogICAg
IHsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQg
cG9zaXRpb247CiB9OwogCiBib29sIFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3Np
dGlvbkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFn
bWVudCkgY29uc3QKIHsKICAgICBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSogZGF0YSA9
IHN0YXRpY19jYXN0PENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKj4ocXVlcnlEYXRhKTsK
IAotICAgIEZsb2F0UmVjdCBleHRlbnQ7CisgICAgR3JhcGhpY3NSZWN0IGV4dGVudDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3RoOyArK2kpIHsKICAgICAgICAg
aW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKICAgICAg
ICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CkBAIC01NDUsNyArNTQ1LDcg
QEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51
bWJlckF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIGNvbnN0CitpbnQgU1ZH
VGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mywy
OCArNDMsMjggQEAKICAgICByZXR1cm4gYm94OwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHSW5s
aW5lOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHSW5s
aW5lOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFJlbmRlck9i
amVjdCogb2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9y
KHRoaXMpKQogICAgICAgICByZXR1cm4gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogCi0g
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAot
RmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAorR3Jh
cGhpY3NSZWN0IFJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewog
ICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9IFJlbmRlclNWR1RleHQ6OmxvY2F0
ZVJlbmRlclNWR1RleHRBbmNlc3Rvcih0aGlzKSkKICAgICAgICAgcmV0dXJuIG9iamVjdC0+c3Ry
b2tlQm91bmRpbmdCb3goKTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6OnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdJbmxp
bmU6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIHsKICAgICBpZiAoY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdU
ZXh0QW5jZXN0b3IodGhpcykpCiAgICAgICAgIHJldHVybiBvYmplY3QtPnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgpOwogfQogCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZTo6Y2xpcHBlZE92
ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIpCkBAIC04MiwxNSArODIsMTUgQEAKICAgICBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRv
Q29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHVzZVRyYW5zZm9ybXMsIGZpeGVkLCB0
cmFuc2Zvcm1TdGF0ZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW5saW5lOjphYnNvbHV0ZVF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVyU1ZHSW5saW5lOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsKICAgICBSZW5kZXJPYmplY3Qq
IG9iamVjdCA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcih0aGlz
KTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHRl
eHRCb3VuZGluZ0JveCA9IG9iamVjdC0+c3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGlj
c1JlY3QgdGV4dEJvdW5kaW5nQm94ID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOwogICAg
IGZvciAoSW5saW5lRmxvd0JveCogYm94ID0gZmlyc3RMaW5lQm94KCk7IGJveDsgYm94ID0gYm94
LT5uZXh0TGluZUJveCgpKQotICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QodGV4dEJvdW5kaW5nQm94LngoKSArIGJveC0+eCgpLCB0ZXh0Qm91bmRpbmdC
b3gueSgpICsgYm94LT55KCksIGJveC0+bG9naWNhbFdpZHRoKCksIGJveC0+bG9naWNhbEhlaWdo
dCgpKSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGlj
c1JlY3QodGV4dEJvdW5kaW5nQm94LngoKSArIGJveC0+eCgpLCB0ZXh0Qm91bmRpbmdCb3gueSgp
ICsgYm94LT55KCksIGJveC0+bG9naWNhbFdpZHRoKCksIGJveC0+bG9naWNhbEhlaWdodCgpKSkp
OwogfQogCiB2b2lkIFJlbmRlclNWR0lubGluZTo6d2lsbEJlRGVzdHJveWVkKCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBo
aWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNz
IFJlbmRlckJveE1vZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNTIsMTMgKzUy
LDEzIEBACiAgICAgc3RhdGljIGJvb2wgaXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKIAogICAgIC8vIENhbGN1bGF0ZXMgdGhlIHJlcGFpbnRSZWN0IGluIGNvbWJpbmF0aW9u
IHdpdGggZmlsdGVyLCBjbGlwcGVyIGFuZCBtYXNrZXIgaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0g
ICAgc3RhdGljIHZvaWQgaW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0IFJl
bmRlck9iamVjdCosIEZsb2F0UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIGludGVyc2VjdFJlcGFp
bnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqLCBHcmFwaGljc1JlY3QmKTsK
IAogICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHBvaW50IGxpZXMgaW4gYSBj
bGlwcGluZyBhcmVhCi0gICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJP
YmplY3QqLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBw
aW5nQXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKLSAgICBzdGF0
aWMgdm9pZCBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3Qq
IGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiBzdHJv
a2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOwotICAgIHN0YXRp
YyBib29sIHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxv
Y2FsUmVwYWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNv
bnN0IFBhaW50SW5mbyYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVDb250YWluZXJCb3VuZGlu
Z0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBHcmFwaGljc1JlY3QmIG9iamVj
dEJvdW5kaW5nQm94LCBHcmFwaGljc1JlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBHcmFwaGljc1Jl
Y3QmIHJlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIGJvb2wgcGFpbnRJbmZvSW50ZXJz
ZWN0c1JlcGFpbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJik7CiAK
ICAgICAvLyBJbXBvcnRhbnQgZnVuY3Rpb25zIHVzZWQgYnkgbmVhcmx5IGFsbCBTVkcgcmVuZGVy
ZXJzIGNlbnRyYWxpemluZyBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9ucyAvIHJlcGFpbnQgcmVj
dCBjYWxjdWxhdGlvbnMKICAgICBzdGF0aWMgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChSZW5kZXJPYmplY3QqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHZvaWQgc2V0QWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZSogb2JqZWN0KSB7IG1fYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZSA9IG9iamVjdDsgfQogCiAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgV2lkdGhJdGVyYXRvciYsIFVDaGFy
MzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVk
JiBhZHZhbmNlTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBm
cm9tLCBpbnQgdG8sIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGZs
b2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBp
bnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdDsKICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQAogewogfQogCi12b2lk
IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0U2l6
ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpIGNvbnN0
Cit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEdy
YXBoaWNzU2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNpY1Np
emUpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogaHR0cDovL2Rldi53My5vcmcvU1ZHL3Byb2ZpbGVz
LzEuMUYyL3B1Ymxpc2gvY29vcmRzLmh0bWwjSW50cmluc2ljU2l6aW5nCiAgICAgLy8gVGhlIGlu
dHJpbnNpYyBhc3BlY3QgcmF0aW8gb2YgdGhlIHZpZXdwb3J0IG9mIFNWRyBjb250ZW50IGlzIG5l
Y2Vzc2FyeSBmb3IgZXhhbXBsZSwgd2hlbiBpbmNsdWRpbmcKQEAgLTc2LDcgKzc2LDcgQEAKICAg
ICAvLyDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZXMgYWZ0ZXIgcmVzb2x2
aW5nIGJvdGggdmFsdWVzIHRvIHVzZXIgdW5pdHMuCiAgICAgaXNQZXJjZW50YWdlSW50cmluc2lj
U2l6ZSA9IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5oZWlnaHQoKS5pc0ZpeGVkKCkpIHsKLSAgICAgICAgaW50cmluc2ljUmF0aW8gPSBGbG9h
dFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEdyYXBo
aWNzU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTkwLDcgKzkwLDcgQEAKICAgICAvLyBhY2NvdW50IGZvciBjZXJ0YWluIGNhc2VzIG9mIHRoZSBp
bnRyaW5zaWMgd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9uIGluIFJlbmRlclBhcnQ6OmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aC9IZWlnaHQuCiAgICAgaWYgKGludHJpbnNpY1JhdGlvLmlzRW1w
dHkoKSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpICYmIHN0eWxlKCktPmhlaWdodCgp
LmlzUGVyY2VudCgpKSB7CiAgICAgICAgIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUgPSB0cnVl
OwotICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEZsb2F0U2l6ZShzdHlsZSgpLT53aWR0aCgpLnBl
cmNlbnQoKSwgc3R5bGUoKS0+aGVpZ2h0KCkucGVyY2VudCgpKTsKKyAgICAgICAgaW50cmluc2lj
UmF0aW8gPSBHcmFwaGljc1NpemUoc3R5bGUoKS0+d2lkdGgoKS5wZXJjZW50KCksIHN0eWxlKCkt
PmhlaWdodCgpLnBlcmNlbnQoKSk7CiAgICAgfQogfQogCkBAIC0zNDUsNyArMzQ1LDcgQEAKICAg
ICBpZiAoIXN2Zy0+aGFzU2V0Q29udGFpbmVyU2l6ZSgpKSB7CiAgICAgICAgIC8vIEluIHRoZSBu
b3JtYWwgY2FzZSBvZiA8c3ZnPiBiZWluZyBzdGFuZC1hbG9uZSBvciBpbiBhIENTU0JveE1vZGVs
IG9iamVjdCB3ZSB1c2UKICAgICAgICAgLy8gUmVuZGVyQm94Ojp3aWR0aCgpL2hlaWdodCgpICh3
aGljaCBwdWxscyBkYXRhIGZyb20gUmVuZGVyU3R5bGUpCi0gICAgICAgIG1fdmlld3BvcnRTaXpl
ID0gRmxvYXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAgICAgbV92aWV3cG9ydFNpemUg
PSBHcmFwaGljc1NpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAvLyBGSVhNRTogQ2hlY2sgaG93IFNWR0ltYWdl
ICsgem9vbWluZyBpcyBzdXBwb3NlZCB0byBiZSBoYW5kbGVkPwogICAgIFNWR0xlbmd0aCB3aWR0
aCA9IHN2Zy0+d2lkdGgoKTsKICAgICBTVkdMZW5ndGggaGVpZ2h0ID0gc3ZnLT5oZWlnaHQoKTsK
LSAgICBtX3ZpZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aC51bml0VHlwZSgpID09IExlbmd0
aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZVdpZHRoVmFsdWUoKSA6IHdpZHRoLnZhbHVl
KHN2ZyksCisgICAgbV92aWV3cG9ydFNpemUgPSBHcmFwaGljc1NpemUod2lkdGgudW5pdFR5cGUo
KSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSA/IHN2Zy0+cmVsYXRpdmVXaWR0aFZhbHVlKCkgOiB3
aWR0aC52YWx1ZShzdmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC51
bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZUhlaWdodFZh
bHVlKCkgOiBoZWlnaHQudmFsdWUoc3ZnKSk7CiB9CiAKQEAgLTM2NSw3ICszNjUsNyBAQAogICAg
IEludFNpemUgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlck9yaWdpblRvQ29udGVudEJveCgpOwog
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihub2Rl
KCkpOwogICAgIGZsb2F0IHNjYWxlID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIEZs
b2F0UG9pbnQgdHJhbnNsYXRlID0gc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCk7CisgICAgR3JhcGhp
Y3NQb2ludCB0cmFuc2xhdGUgPSBzdmctPmN1cnJlbnRUcmFuc2xhdGUoKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gY3RtKHNjYWxlLCAwLCAwLCBzY2FsZSwgYm9yZGVyQW5kUGFkZGluZy53aWR0aCgp
ICsgdHJhbnNsYXRlLngoKSwgYm9yZGVyQW5kUGFkZGluZy5oZWlnaHQoKSArIHRyYW5zbGF0ZS55
KCkpOwogICAgIHJldHVybiBjdG0gKiBzdmctPnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgo
KSAvIHNjYWxlLCBoZWlnaHQoKSAvIHNjYWxlKTsKIH0KQEAgLTQwNiw3ICs0MDYsNyBAQAogICAg
IHJlcGFpbnRSZWN0ID0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpLm1hcFJlY3QocmVwYWlu
dFJlY3QpOwogCiAgICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9ydCBjbGlwIC0gbm90IGFmZmVj
dGVkIGJ5IG92ZXJmbG93IHNldHRpbmdzICAgIAotICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChl
bmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fdmlld3BvcnRTaXplKSkp
OworICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVj
dChHcmFwaGljc1BvaW50KCksIG1fdmlld3BvcnRTaXplKSkpOwogCiAgICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBpZiAoY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQpAQCAtNDI3LDkgKzQyNyw5
IEBACiAKIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7Ci0g
ICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1fc3Ryb2tlQm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVj
dCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICBtX3N0
cm9rZUJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CisgICAgbV9yZXBhaW50Qm91bmRpbmdC
b3ggPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250
YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRpbmdCb3gsIG1fc3Ryb2tlQm91
bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKICAgICBTVkdSZW5kZXJTdXBwb3J0Ojpp
bnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdC
b3gpOwpAQCAtNDQ5LDEwICs0NDksMTAgQEAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50ID0g
bG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50
KTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5u
b2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlv
bikpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRHcmFwaGljc1BvaW50KHJlcXVlc3QsIHJl
c3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBDU1MvSFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyByZWxhdGl2ZSB0byB0aGUgYm9y
ZGVyIGJveCwgcmlnaHQ/CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnRJbkJvcmRlckJveCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbm9kZUF0RmxvYXRQb2lu
dCgpIGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgaGl0IHRlc3RzIHlldC4KKyAgICAgICAgICAg
IC8vIEZJWE1FOiBub2RlQXRHcmFwaGljc1BvaW50KCkgZG9lc24ndCBoYW5kbGUgcmVjdC1iYXNl
ZCBoaXQgdGVzdHMgeWV0LgogICAgICAgICAgICAgcmVzdWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lcik7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgpAQCAtNTMsOSArNTMsOSBA
QAogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKLSAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91
bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWlu
dEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJv
dW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNv
bnN0IExheW91dFBvaW50Jik7CiAKQEAgLTY0LDE1ICs2NCwxNSBAQAogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5Q
YXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRHcmFwaGljc1Bv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNm
b3JtOyB9CiAKICAgICBib29sIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QgOiAxOwogICAgIGJv
b2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9j
YWxUcmFuc2Zvcm07Ci0gICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgRmxv
YXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX29iamVjdEJv
dW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAgICBP
d25QdHI8UmVuZGVySW1hZ2VSZXNvdXJjZT4gbV9pbWFnZVJlc291cmNlOwogfTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9i
amVjdC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAKICAgICBJbnRSZWN0IGJveCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsK
IAotICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVy
UXVhZChGbG9hdFJlY3QoYm94KSwgcmVwYWludENvbnRhaW5lcik7CisgICAgR3JhcGhpY3NRdWFk
IGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVj
dChib3gpLCByZXBhaW50Q29udGFpbmVyKTsKICAgICByZXR1cm4gY29udGFpbmVyUmVsYXRpdmVR
dWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKQEAgLTc2LDcgKzc2LDcgQEAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlclNWR01vZGVs
T2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsKICAg
ICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgdm9pZCBz
ZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCkgeyBtX25lZWRzUG9zaXRpb25pbmdWYWx1
ZXNVcGRhdGUgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBk
YXRlKCkgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CisgICAgdmlydHVh
bCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAog
ICAgIHN0YXRpYyBSZW5kZXJTVkdUZXh0KiBsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoUmVu
ZGVyT2JqZWN0Kik7CiAgICAgc3RhdGljIGNvbnN0IFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRl
clNWR1RleHRBbmNlc3Rvcihjb25zdCBSZW5kZXJPYmplY3QqKTsKQEAgLTU0LDIxICs1NCwyMSBA
QAogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAK
ICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcExv
Y2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJv
b2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
ZnJhbWVSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3QgeyByZXR1cm4gZnJhbWVSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNm
b3JtOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOSArNzQsOSBAQAogICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsKIH0KIAotRmxvYXRSZWN0IFJl
bmRlclNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6Om1hcmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBt
YXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgY29vcmRpbmF0ZXMg
PSBSZW5kZXJTVkdDb250YWluZXI6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Cisg
ICAgR3JhcGhpY3NSZWN0IGNvb3JkaW5hdGVzID0gUmVuZGVyU1ZHQ29udGFpbmVyOjpyZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogCiAgICAgLy8gTWFwIHJlcGFpbnQgcmVjdCBpbnRv
IHBhcmVudCBjb29yZGluYXRlIHNwYWNlLCBpbiB3aGljaCB0aGUgbWFya2VyIGJvdW5kYXJpZXMg
aGF2ZSB0byBiZSBldmFsdWF0ZWQKICAgICBjb29yZGluYXRlcyA9IGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKS5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKQEAgLTkyLDEyICs5MiwxMiBAQAogICAgIC8v
IHJldHVybiB2aWV3cG9ydFRyYW5zbGF0aW9uICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0
VHJhbnNmb3JtKCk7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJl
ZmVyZW5jZVBvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKIHsKICAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJr
ZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKICAgICBBU1NFUlQo
bWFya2VyKTsKIAotICAgIHJldHVybiBGbG9hdFBvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1h
cmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOworICAgIHJldHVybiBHcmFwaGlj
c1BvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVl
KG1hcmtlcikpOwogfQogCiBmbG9hdCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6YW5nbGUoKSBj
b25zdApAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgcmV0dXJuIGFuZ2xlOwogfQogCi1BZmZpbmVU
cmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlclRyYW5zZm9ybWF0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYXV0b0FuZ2xlLCBmbG9hdCBzdHJva2VXaWR0
aCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2Vy
VHJhbnNmb3JtYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBhdXRvQW5n
bGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIFNWR01hcmtlckVsZW1lbnQqIG1h
cmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpOwogICAgIEFTU0VS
VChtYXJrZXIpOwpAQCAtMTM1LDEwICsxMzUsMTAgQEAKICAgICBSZW5kZXJTVkdDb250YWluZXI6
OnBhaW50KGluZm8sIEludFBvaW50KCkpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2lu
LCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlcjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4s
IGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIC8vIFRoZSAnb3JpZ2luJyBjb29yZGlu
YXRlIG1hcHMgdG8gU1ZHcyByZWZYL3JlZlksIGdpdmVuIGluIGNvb3JkaW5hdGVzIHJlbGF0aXZl
IHRvIHRoZSB2aWV3cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUgbWFya2VyCi0gICAgRmxvYXRQb2lu
dCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBvaW50KG9yaWdpbik7Cisg
ICAgR3JhcGhpY3NQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBv
aW50KG9yaWdpbik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBjb250
ZW50VHJhbnNmb3JtYXRpb247CiAgICAgaWYgKHN0cm9rZVdpZHRoICE9IC0xKQpAQCAtMTY2LDcg
KzE2Niw3IEBACiAKICAgICBmbG9hdCB3ID0gbWFya2VyLT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1h
cmtlcik7CiAgICAgZmxvYXQgaCA9IG1hcmtlci0+bWFya2VySGVpZ2h0KCkudmFsdWUobWFya2Vy
KTsKLSAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KDAsIDAsIHcsIGgpOworICAgIG1fdmlld3Bv
cnQgPSBHcmFwaGljc1JlY3QoMCwgMCwgdywgaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxh
eW91dEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAgICAgKytlbGVt
ZW50SW5kZXg7CiB9CiAKLUZsb2F0UmVjdCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpjYWxjdWxhdGVC
b3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1h
cmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmIHBhdGgpCitHcmFwaGljc1JlY3Qg
U1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2FsY3VsYXRlQm91bmRhcmllcyhSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogc3RhcnRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIs
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBlbmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdpZHRoLCBj
b25zdCBQYXRoJiBwYXRoKQogewogICAgIG1fbGF5b3V0LmNsZWFyKCk7CiAgICAgbV9taWRNYXJr
ZXIgPSBtaWRNYXJrZXI7CkBAIC04MCwxMiArODAsMTIgQEAKICAgICB9CiAKICAgICBpZiAobV9s
YXlvdXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJl
dHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRv
ciBpdCA9IG1fbGF5b3V0LmJlZ2luKCk7CiAgICAgVmVjdG9yPE1hcmtlckxheW91dD46Oml0ZXJh
dG9yIGVuZCA9IG1fbGF5b3V0LmVuZCgpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRzOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgTWFya2VyTGF5b3V0JiBsYXlvdXQgPSAqaXQ7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZs
b2F0IGFuZ2xlKQordm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyLCBjb25zdCBHcmFwaGljc1BvaW50JiBvcmln
aW4sIGZsb2F0IGFuZ2xlKQogewogICAgIEFTU0VSVChtYXJrZXIpOwogICAgIG1fbGF5b3V0LmFw
cGVuZChNYXJrZXJMYXlvdXQobWFya2VyLCBtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0aW9uKG9y
aWdpbiwgYW5nbGUsIG1fc3Ryb2tlV2lkdGgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdy
YXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBoaWNzU2l6ZTsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZW5k
ZXJCbG9jazsKIGNsYXNzIFJlbmRlckltYWdlOwpAQCAtNjEsNyArNjEsNyBAQAogLy8gaGVscGVy
IG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJl
bmRlciB0cmVlLgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBDb2xvciYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxv
YXRSZWN0Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBHcmFw
aGljc1JlY3QmKTsKIAogLy8gaGVscGVyIG9wZXJhdG9ycyBzcGVjaWZpYyB0byBkdW1waW5nIHRo
ZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAg
dGhlIHJlbmRlciB0cmVlCiAvLyB0aGVzZSBjb3VsZCBiZSBkZWZpbmVkIGluIHNlcGFyYXRlIG5h
bWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVzZSBnZW5lcmljIHNpZ25hdHVyZXMgdW5pbnRl
bnRpb25hbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJf
aAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQ4LDcgKzQ4LDcgQEAKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZShib29sIG1hcmtGb3JJbnZh
bGlkYXRpb24gPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hl
KFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogICAgIHZp
cnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3Jh
cGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKKyAgICB2aXJ0
dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwogCiAg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrVW5pdHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSktPm1hc2tVbml0cygpOyB9CiAgICAg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrQ29udGVudFVuaXRzKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpLT5tYXNrQ29udGVudFVuaXRz
KCk7IH0KQEAgLTYwLDcgKzYwLDcgQEAKICAgICB2b2lkIGRyYXdDb250ZW50SW50b01hc2tJbWFn
ZShNYXNrZXJEYXRhKiwgY29uc3QgU1ZHTWFza0VsZW1lbnQqLCBSZW5kZXJPYmplY3QqKTsKICAg
ICB2b2lkIGNhbGN1bGF0ZU1hc2tDb250ZW50UmVwYWludFJlY3QoKTsKIAotICAgIEZsb2F0UmVj
dCBtX21hc2tDb250ZW50Qm91bmRhcmllczsKKyAgICBHcmFwaGljc1JlY3QgbV9tYXNrQ29udGVu
dEJvdW5kYXJpZXM7CiAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBNYXNrZXJEYXRhKj4gbV9t
YXNrZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJ
bmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDks
OCBAQAogCiAgICAgdm9pZCBjb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24oKTsK
IAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVh
bCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBHcmFwaGlj
c1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogICAgIElubGlu
ZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBACiAgICAgdm9pZCBz
ZXRTdGFydHNOZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0
Q2h1bmsgPSBuZXdUZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJh
Z21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4
dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRp
b24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopOworICAgIEdyYXBoaWNz
UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYs
IGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBSZW5k
ZXJTdHlsZSopOwogCiBwcml2YXRlOgogICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJTdHlsZSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZl
clRvb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywyMSBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1JlY3Q7CitjbGFzcyBHcmFwaGljc1NpemU7CiBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKIGNsYXNzIFNWR0lt
YWdlQnVmZmVyVG9vbHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR0ltYWdlQnVmZmVy
VG9vbHMpOwogcHVibGljOgotICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNwYWNlKTsKKyAg
ICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBHcmFwaGljc1JlY3QmIGFic29s
dXRlVGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRS
ZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSk7CiAgICAgc3RhdGljIHZvaWQg
cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBSZW5kZXJPYmplY3QqLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJ
bWFnZUJ1ZmZlcj4mKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25z
dCBHcmFwaGljc1JlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1
ZmZlcj4mKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRl
cm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9iamVjdCosIEFmZmluZVRyYW5z
Zm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEZs
b2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVk
SW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBHcmFwaGljc1Jl
Y3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVj
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KTsKKyAgICBzdGF0aWMg
SW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogCiBw
cml2YXRlOgogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHMoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVm
aW5lIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyX2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJM
RShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKQEAgLTUyLDggKzUyLDggQEAK
ICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBzYXZlZENvbnRleHQ7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwotICAgIEZsb2F0U2l6
ZSBzY2FsZTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRhcmllczsKKyAgICBHcmFwaGljc1NpemUg
c2NhbGU7CiAgICAgYm9vbCBidWlsZGVkIDogMTsKICAgICBib29sIG1hcmtlZEZvclJlbW92YWwg
OiAxOwogfTsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3Vy
Y2VNb2RlLCBjb25zdCBQYXRoKik7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJv
dW5kaW5nQm94KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291
cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKICAgICBQYXNzUmVmUHRyPFNWR0ZpbHRl
ckJ1aWxkZXI+IGJ1aWxkUHJpbWl0aXZlcyhGaWx0ZXIqKTsKIApAQCAtODcsNyArODcsNyBAQAog
ICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZs
b2F0U2l6ZSYpOworICAgIGJvb2wgZml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBHcmFwaGlj
c1NpemUmLCBHcmFwaGljc1NpemUmKTsKIAogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmls
dGVyRGF0YSo+IG1fZmlsdGVyOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTcwLDcgKzcwLDcgQEAKICAgICBpZiAobV9p
bnZhbGlkYXRpb25CbG9ja2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NsaXBCb3VuZGFy
aWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9jbGlwQm91bmRhcmllcyA9IEdyYXBoaWNzUmVjdCgp
OwogICAgIGlmICghbV9jbGlwcGVyLmlzRW1wdHkoKSkgewogICAgICAgICBkZWxldGVBbGxWYWx1
ZXMobV9jbGlwcGVyKTsKICAgICAgICAgbV9jbGlwcGVyLmNsZWFyKCk7CkBAIC0xMDQsNyArMTA0
LDcgQEAKICAgICByZXR1cm4gYXBwbHlDbGlwcGluZ1RvQ29udGV4dChvYmplY3QsIG9iamVjdC0+
b2JqZWN0Qm91bmRpbmdCb3goKSwgb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpLCBjb250ZXh0KTsKIH0KIAotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhP
bmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIG9i
amVjdEJvdW5kaW5nQm94KQorYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5
Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIG9i
amVjdEJvdW5kaW5nQm94KQogewogICAgIC8vIElmIHRoZSBjdXJyZW50IGNsaXAtcGF0aCBnZXRz
IGNsaXBwZWQgaXRzZWxmLCB3ZSBoYXZlIHRvIGZhbGxiYWNrIHRvIG1hc2tpbmcuCiAgICAgaWYg
KCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwcGVyUmVzb3VyY2UoKS5pc0VtcHR5KCkpCkBAIC0x
NTAsMTMgKzE1MCwxMyBAQAogICAgIH0KICAgICAvLyBUaGUgU1ZHIHNwZWNpZmljYXRpb24gd2Fu
dHMgdXMgdG8gY2xpcCBldmVyeXRoaW5nLCBpZiBjbGlwLXBhdGggZG9lc24ndCBoYXZlIGEgY2hp
bGQuCiAgICAgaWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgY2xpcFBhdGguYWRkUmVj
dChGbG9hdFJlY3QoKSk7CisgICAgICAgIGNsaXBQYXRoLmFkZFJlY3QoR3JhcGhpY3NSZWN0KCkp
OwogICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLCBjbGlwUnVsZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5n
VG9Db250ZXh0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJv
dW5kaW5nQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCwgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQorYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0Nv
bnRleHQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91
bmRpbmdCb3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHJlcGFpbnRSZWN0LCBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2NsaXBwZXIuY29udGFpbnMob2JqZWN0KSkKICAgICAg
ICAgbV9jbGlwcGVyLnNldChvYmplY3QsIG5ldyBDbGlwcGVyRGF0YSk7CkBAIC0xNzIsOCArMTcy
LDggQEAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3Jk
aW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZXBhaW50UmVj
dCk7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBh
YnNvbHV0ZVRhcmdldFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJlY3Qg
PSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc1Jl
Y3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVj
dCk7CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcERhdGEgJiYgIWNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6
Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikp
CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSog
Y2xpcHBlckRhdGEsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpCitib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJE
YXRhKiBjbGlwcGVyRGF0YSwgY29uc3QgR3JhcGhpY3NSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkK
IHsKICAgICBBU1NFUlQoY2xpcHBlckRhdGEpOwogICAgIEFTU0VSVChjbGlwcGVyRGF0YS0+Y2xp
cE1hc2tJbWFnZSk7CkBAIC0yOTMsOSArMjkzLDkgQEAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiBv
YmplY3RCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9kZUF0UG9pbnQpCitib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEdyYXBoaWNz
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5vZGVBdFBvaW50
KQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBub2RlQXRQb2ludDsKKyAgICBHcmFwaGljc1Bv
aW50IHBvaW50ID0gbm9kZUF0UG9pbnQ7CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2lu
dEluQ2xpcHBpbmdBcmVhKHRoaXMsIHBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMTQsMTQgKzMxNCwxNCBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEludFBv
aW50IGhpdFBvaW50OwogICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7Ci0g
ICAgICAgIGlmIChyZW5kZXJlci0+bm9kZUF0RmxvYXRQb2ludChIaXRUZXN0UmVxdWVzdChIaXRU
ZXN0UmVxdWVzdDo6U1ZHQ2xpcENvbnRlbnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdy
b3VuZCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+bm9kZUF0R3JhcGhpY3NQb2ludChIaXRUZXN0
UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZHQ2xpcENvbnRlbnQpLCByZXN1bHQsIHBvaW50LCBI
aXRUZXN0Rm9yZWdyb3VuZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCitHcmFwaGljc1JlY3Qg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCogb2JqZWN0KQogewogICAgIC8vIFJlc291cmNlIHdhcyBub3QgbGF5b3V0ZWQgeWV0LiBHaXZl
IGJhY2sgdGhlIGJvdW5kaW5nQm94IG9mIHRoZSBvYmplY3QuCiAgICAgaWYgKHNlbGZOZWVkc0xh
eW91dCgpKQpAQCAtMzMxLDcgKzMzMSw3IEBACiAgICAgICAgIGNhbGN1bGF0ZUNsaXBDb250ZW50
UmVwYWludFJlY3QoKTsKIAogICAgIGlmIChzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQq
Pihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG9i
amVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG9i
amVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRpbmdCb3gueSgpKTsKICAgICAgICAgdHJh
bnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RC
b3VuZGluZ0JveC5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIu
aCIKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNo
b3J0IHJlc291cmNlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJl
bmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1v
ZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5n
Qm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBH
cmFwaGljc1JlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRTdG9wcyhHcmFkaWVu
dERhdGEqLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAKIAogICAgIC8vIDEwLjMuMiBJbmxpbmUs
IHJlcGxhY2VkIGVsZW1lbnRzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1ZGV0Lmh0
bWwjaW5saW5lLXJlcGxhY2VkLXdpZHRoCiAgICAgYm9vbCBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNT
aXplID0gZmFsc2U7Ci0gICAgRmxvYXRTaXplIGludHJpbnNpY1JhdGlvOworICAgIEdyYXBoaWNz
U2l6ZSBpbnRyaW5zaWNSYXRpbzsKICAgICBpZiAoY29udGVudFJlbmRlcmVyKSB7CiAgICAgICAg
IGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24oaW50cmlu
c2ljUmF0aW8sIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpOwogICAgICAgICBjb250ZW50UmVu
ZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXItPnN0eWxlKCk7CkBAIC0zMjYsNyArMzI2LDcgQEAK
IAogICAgIC8vIDEwLjYuMiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1lbnRzOiBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9DU1MyMS92aXN1ZGV0Lmh0bWwjaW5saW5lLXJlcGxhY2VkLWhlaWdodAogICAgIGJv
b2wgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSA9IGZhbHNlOwotICAgIEZsb2F0U2l6ZSBpbnRy
aW5zaWNSYXRpbzsKKyAgICBHcmFwaGljc1NpemUgaW50cmluc2ljUmF0aW87CiAgICAgaWYgKGNv
bnRlbnRSZW5kZXJlcikgewogICAgICAgICBjb250ZW50UmVuZGVyZXItPmNvbXB1dGVJbnRyaW5z
aWNSYXRpb0luZm9ybWF0aW9uKGludHJpbnNpY1JhdGlvLCBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNT
aXplKTsKICAgICAgICAgY29udGVudFJlbmRlclN0eWxlID0gY29udGVudFJlbmRlcmVyLT5zdHls
ZSgpOwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAgICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQog
ICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVjdCk7CiAg
ICAgZWxzZQotICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KHJl
Y3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBy
ZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoR3JhcGhpY3NSZWN0KHJlY3QpLCByZXBhaW50Q29u
dGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIAogICAgIHJldHVybiByZWN0Owog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAKICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMo
VmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICB2b2lkIHNldE1heGltYWxPdXRsaW5lU2l6ZShpbnQgbyk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDI1LDcg
KzQyNSw3IEBACiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBsYXllciBoYXMgYSAtd2Via2l0
LXBlcnNwZWN0aXZlLgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHBl
cnNwZWN0aXZlLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJz
cGVjdGl2ZVRyYW5zZm9ybSgpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgcGVyc3BlY3RpdmVPcmln
aW4oKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IHBlcnNwZWN0aXZlT3JpZ2luKCkgY29uc3Q7
CiAgICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxl
KCktPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNEUHJlc2VydmUzRDsgfQog
ICAgIGJvb2wgaGFzM0RUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybSAmJiAh
bV90cmFuc2Zvcm0tPmlzQWZmaW5lKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw3ICs1
MzksNyBAQAogICAgIHJldHVybiAhcmVjdC5jb250YWlucyhyZWN0Rm9yUG9pbnQocG9pbnRJbkNv
bnRhaW5lcikpOwogfQogCi1ib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRl
c3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVj
dEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNv
bnRhaW5lciwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIC8vIElmIGl0IGlzIG5v
dCBhIHJlY3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhhcyB0byBiZSBuby1vcC4KICAg
ICAvLyBSZXR1cm4gZmFsc2UsIHNvIHRoZSBoaXQgdGVzdCBzdG9wcy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgZmxhdHRlbldpdGhUcmFuc2Zvcm0oKm1fYWNjdW11
bGF0ZWRUcmFuc2Zvcm0pOwogfQogCi1GbG9hdFBvaW50IFRyYW5zZm9ybVN0YXRlOjptYXBwZWRQ
b2ludCgpIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybVN0YXRlOjptYXBwZWRQb2ludCgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKQogICAgICAgICByZXR1
cm4gbV9sYXN0UGxhbmFyUG9pbnQ7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgcmV0dXJuIG1fYWNj
dW11bGF0ZWRUcmFuc2Zvcm0tPmludmVyc2UoKS5wcm9qZWN0UG9pbnQobV9sYXN0UGxhbmFyUG9p
bnQpOwogfQogCi1GbG9hdFF1YWQgVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFF1YWQoKSBjb25zdAor
R3JhcGhpY3NRdWFkIFRyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFkKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybiBtX2xhc3RQbGFuYXJR
dWFkOwpAQCAtMTY0LDEyICsxNjQsMTIgQEAKICAgICBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybSA9
IGZhbHNlOwogfQogCi1GbG9hdFBvaW50IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVk
UG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1h
cHBlZFBvaW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5p
bnZlcnNlKCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKIH0KIAotRmxvYXRRdWFk
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUXVhZCgpIGNvbnN0CitHcmFwaGljc1F1
YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFkKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFF1YWQobV9sYXN0
UGxhbmFyUXVhZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hh
ZG93RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
aGFkb3dEYXRhLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1NoYWRvd0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQAogICAg
IHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvdykgeyBtX25leHQgPSBz
aGFkb3c7IH0KIAogICAgIHZvaWQgYWRqdXN0UmVjdEZvclNoYWRvdyhJbnRSZWN0JiwgaW50IGFk
ZGl0aW9uYWxPdXRsaW5lU2l6ZSA9IDApIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0UmVjdEZvclNo
YWRvdyhGbG9hdFJlY3QmLCBpbnQgYWRkaXRpb25hbE91dGxpbmVTaXplID0gMCkgY29uc3Q7Cisg
ICAgdm9pZCBhZGp1c3RSZWN0Rm9yU2hhZG93KEdyYXBoaWNzUmVjdCYsIGludCBhZGRpdGlvbmFs
T3V0bGluZVNpemUgPSAwKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1feDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHls
ZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
VkdSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0Owog
Y2xhc3MgSW50UmVjdDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgxLDcgKzgxLDcgQEAKICAgICByZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgp
IC0gc2hhZG93VG9wICsgc2hhZG93Qm90dG9tKTsKIH0KIAotdm9pZCBTaGFkb3dEYXRhOjphZGp1
c3RSZWN0Rm9yU2hhZG93KEZsb2F0UmVjdCYgcmVjdCwgaW50IGFkZGl0aW9uYWxPdXRsaW5lU2l6
ZSkgY29uc3QKK3ZvaWQgU2hhZG93RGF0YTo6YWRqdXN0UmVjdEZvclNoYWRvdyhHcmFwaGljc1Jl
Y3QmIHJlY3QsIGludCBhZGRpdGlvbmFsT3V0bGluZVNpemUpIGNvbnN0CiB7CiAgICAgTGF5b3V0
VW5pdCBzaGFkb3dMZWZ0ID0gMDsKICAgICBMYXlvdXRVbml0IHNoYWRvd1JpZ2h0ID0gMDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBACiAgICAgcmV0dXJuIFJl
bmRlclRleHQ6OndpZHRoKGZyb20sIGxlbmd0aCwgZm9udCwgeFBvc2l0aW9uLCBmYWxsYmFja0Zv
bnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6YWRqdXN0
VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QpIGNvbnN0Cit2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjphZGp1c3RUZXh0T3JpZ2luKEdyYXBo
aWNzUG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCkgY29uc3QK
IHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICB0ZXh0T3JpZ2luLm1vdmUoYm94UmVj
dC5oZWlnaHQoKSAvIDIgLSBjZWlsZihtX2NvbWJpbmVkVGV4dFdpZHRoKSAvIDIsIHN0eWxlKCkt
PmZvbnQoKS5waXhlbFNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDExIEBACiAgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICB2b2lkIGFic29sdXRlUmVjdHNGb3JSYW5nZShWZWN0
b3I8SW50UmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNl
dCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7Ci0gICAgdm9pZCBh
YnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8
R3JhcGhpY3NRdWFkPiYpOworICAgIHZvaWQgYWJzb2x1dGVRdWFkc0ZvclJhbmdlKFZlY3RvcjxH
cmFwaGljc1F1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAKICAgICBl
bnVtIENsaXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKLSAgICB2
b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBDbGlwcGluZ09wdGlvbiBvcHRp
b24gPSBOb0NsaXBwaW5nKTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNz
UXVhZD4mLCBDbGlwcGluZ09wdGlvbiBvcHRpb24gPSBOb0NsaXBwaW5nKTsKIAogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsK
IApAQCAtODUsNyArODUsNyBAQAogICAgIHZpcnR1YWwgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94
KCkgY29uc3Q7CiAgICAgSW50UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBj
b25zdDsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RSdW5PcmlnaW4oKSBjb25zdDsKKyAgICBHcmFw
aGljc1BvaW50IGZpcnN0UnVuT3JpZ2luKCkgY29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5YKCkg
Y29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5ZKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksNyArNTU5LDcgQEAKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFib3VuZHNDb21wdXRlZCkgewotICAgICAgICBsYXllckJvdW5kcyA9IGxh
eWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsYXllci0+bG9j
YWxCb3VuZGluZ0JveCgpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgbGF5ZXJC
b3VuZHMgPSBsYXllci0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1Jl
Y3QobGF5ZXItPmxvY2FsQm91bmRpbmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAg
ICAgICAgIC8vIEVtcHR5IHJlY3RzIG5ldmVyIGludGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0
byBmb3IgdGhlIHB1cnBvc2VzIG9mIG92ZXJsYXAgdGVzdGluZy4KICAgICAgICAgaWYgKGxheWVy
Qm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxheWVyQm91bmRzLnNldFNpemUoSW50U2l6
ZSgxLCAxKSk7CkBAIC02NDQsNyArNjQ0LDcgQEAKICAgICBJbnRSZWN0IGFic0JvdW5kczsKICAg
ICBpZiAob3ZlcmxhcE1hcCAmJiAhb3ZlcmxhcE1hcC0+aXNFbXB0eSgpKSB7CiAgICAgICAgIC8v
IElmIHdlJ3JlIHRlc3RpbmcgZm9yIG92ZXJsYXAsIHdlIG9ubHkgbmVlZCB0byBjb21wb3NpdGUg
aWYgd2Ugb3ZlcmxhcCBzb21ldGhpbmcgdGhhdCBpcyBhbHJlYWR5IGNvbXBvc2l0ZWQuCi0gICAg
ICAgIGFic0JvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKKyAgICAgICAgYWJzQm91bmRzID0gbGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoR3JhcGhpY3NSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5nQm94KCkpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOwogICAgICAgICAvLyBFbXB0eSByZWN0cyBuZXZlciBpbnRlcnNlY3QsIGJ1
dCB3ZSBuZWVkIHRoZW0gdG8gZm9yIHRoZSBwdXJwb3NlcyBvZiBvdmVybGFwIHRlc3RpbmcuCiAg
ICAgICAgIGlmIChhYnNCb3VuZHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgYWJzQm91bmRzLnNl
dFNpemUoSW50U2l6ZSgxLCAxKSk7CkBAIC05NDUsNyArOTQ1LDcgQEAKICAgICAgICAgbV9jbGlw
TGF5ZXItPnNldFNpemUoZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UgLyogZXhj
bHVkZSBzY3JvbGxiYXJzICovKS5zaXplKCkpOwogCiAgICAgICAgIEludFBvaW50IHNjcm9sbFBv
c2l0aW9uID0gZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBtX3Njcm9sbExh
eWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQ
b3NpdGlvbi55KCkpKTsKKyAgICAgICAgbV9zY3JvbGxMYXllci0+c2V0UG9zaXRpb24oR3JhcGhp
Y3NQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7CiAgICAg
ICAgIHVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoKTsKICAgICB9CiB9CkBAIC05NTMsNyAr
OTUzLDcgQEAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRTY3JvbGwo
Y29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIGlmIChtX3Njcm9sbExheWVy
KQotICAgICAgICBtX3Njcm9sbExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQ
b3NpdGlvbi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkpKTsKKyAgICAgICAgbV9zY3JvbGxMYXll
ci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xs
UG9zaXRpb24ueSgpKSk7CiB9CiAKIFN0cmluZyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVy
VHJlZUFzVGV4dChib29sIHNob3dEZWJ1Z0luZm8pCkBAIC0xNjE3LDggKzE2MTcsOCBAQAogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXROYW1lKCJSb290IHBs
YXRmb3JtIik7CiAjZW5kaWYKLSAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRTaXplKEZs
b2F0U2l6ZShtX3JlbmRlclZpZXctPm1heFhMYXlvdXRPdmVyZmxvdygpLCBtX3JlbmRlclZpZXct
Pm1heFlMYXlvdXRPdmVyZmxvdygpKSk7Ci0gICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRT
aXplKEdyYXBoaWNzU2l6ZShtX3JlbmRlclZpZXctPm1heFhMYXlvdXRPdmVyZmxvdygpLCBtX3Jl
bmRlclZpZXctPm1heFlMYXlvdXRPdmVyZmxvdygpKSk7CisgICAgICAgIG1fcm9vdENvbnRlbnRM
YXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgpKTsKIAogICAgICAgICAvLyBOZWVkIHRv
IGNsaXAgdG8gcHJldmVudCB0cmFuc2Zvcm1lZCBjb250ZW50IHNob3dpbmcgb3V0c2lkZSB0aGlz
IGZyYW1lCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVl
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw3IEBACiAgICAgewogICAgIH0KIAotICAgIElubGluZUJveChSZW5kZXJP
YmplY3QqIG9iaiwgRmxvYXRQb2ludCB0b3BMZWZ0LCBmbG9hdCBsb2dpY2FsV2lkdGgsIGJvb2wg
Zmlyc3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAorICAgIElubGluZUJveChSZW5kZXJPYmplY3Qq
IG9iaiwgR3JhcGhpY3NQb2ludCB0b3BMZWZ0LCBmbG9hdCBsb2dpY2FsV2lkdGgsIGJvb2wgZmly
c3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAogICAgICAgICAgICAgICBib29sIGRpcnR5LCBib29s
IGV4dHJhY3RlZCwgYm9vbCBpc0hvcml6b250YWwsIElubGluZUJveCogbmV4dCwgSW5saW5lQm94
KiBwcmV2LCBJbmxpbmVGbG93Qm94KiBwYXJlbnQpCiAgICAgICAgIDogbV9uZXh0KG5leHQpCiAg
ICAgICAgICwgbV9wcmV2KHByZXYpCkBAIC0yMzIsMTEgKzIzMiwxMSBAQAogICAgIGZsb2F0IHko
KSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgpOyB9CiAgICAgZmxvYXQgdG9wKCkgY29uc3Qg
eyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQogCi0gICAgY29uc3QgRmxvYXRQb2ludCYgdG9wTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQ7IH0KIAogICAgIGZsb2F0IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsV2lkdGgoKSA6IGxvZ2lj
YWxIZWlnaHQoKTsgfQogICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbCgpID8gbG9naWNhbEhlaWdodCgpIDogbG9naWNhbFdpZHRoKCk7IH0KLSAgICBGbG9hdFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOyB9Cisg
ICAgR3JhcGhpY3NTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHdpZHRoKCksIGhl
aWdodCgpKTsgfQogICAgIGZsb2F0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGVmdCgpICsgd2lk
dGgoKTsgfQogICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHRvcCgpICsgaGVpZ2h0
KCk7IH0KIApAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgLy8gVGhlIGxvZ2ljYWwgaGVpZ2h0IGlz
IG91ciBleHRlbnQgaW4gdGhlIGJsb2NrIGZsb3cgZGlyZWN0aW9uLCBpLmUuLCBoZWlnaHQgZm9y
IGhvcml6b250YWwgdGV4dCBhbmQgd2lkdGggZm9yIHZlcnRpY2FsIHRleHQuCiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1l
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gSW50UmVjdChtX3RvcExlZnQu
eCgpLCBtX3RvcExlZnQueSgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKSA6IElu
dFJlY3QobV90b3BMZWZ0LnkoKSwgbV90b3BMZWZ0LngoKSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQoKSk7IH0KKyAgICBHcmFwaGljc1JlY3QgbG9naWNhbEZyYW1lUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gSW50UmVjdChtX3RvcExlZnQueCgpLCBtX3RvcExl
ZnQueSgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKSA6IEludFJlY3QobV90b3BM
ZWZ0LnkoKSwgbV90b3BMZWZ0LngoKSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7
IH0KIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2Vs
aW5lVHlwZSkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+YmFzZWxpbmVQb3NpdGlv
bihiYXNlbGluZVR5cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250YWxM
aW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOyB9CiAgICAgdmly
dHVhbCBpbnQgbGluZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJveE1vZGVsT2JqZWN0KCktPmxp
bmVIZWlnaHQobV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBW
ZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KQEAgLTMxNiw5ICszMTYs
OSBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IGxvY2F0aW9u
SW5jbHVkaW5nRmxpcHBpbmcoKTsKLSAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJl
Y3QmKTsKLSAgICBGbG9hdFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgR3JhcGhpY3NQb2ludCBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CisgICAg
dm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0Jik7CisgICAgR3JhcGhpY3NQb2lu
dCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgR3JhcGhpY3NQb2ludCYpOwogICAgIHZvaWQgZmxp
cEZvcldyaXRpbmdNb2RlKEludFJlY3QmKTsKICAgICBJbnRQb2ludCBmbGlwRm9yV3JpdGluZ01v
ZGUoY29uc3QgSW50UG9pbnQmKTsKIApAQCAtMzM0LDcgKzMzNCw3IEBACiBwdWJsaWM6CiAgICAg
UmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogCi0gICAgRmxvYXRQb2ludCBtX3RvcExlZnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBtX3RvcExlZnQ7CiAgICAgZmxvYXQgbV9sb2dpY2FsV2lkdGg7CiAg
ICAgCiAgICAgLy8gU29tZSBvZiB0aGVzZSBiaXRzIGFyZSBhY3R1YWxseSBmb3Igc3ViY2xhc3Nl
cyBhbmQgbW92ZWQgaGVyZSB0byBjb21wYWN0IHRoZSBzdHJ1Y3R1cmVzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDggKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxl
bWVudDsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGlj
c1BvaW50OworY2xhc3MgR3JhcGhpY3NTaXplOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBJbnRQb2lu
dDsKIGNsYXNzIEludFJlY3Q7CkBAIC03MCw4ICs3MCw4IEBACiAKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRSZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJdGVtPgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVmVj
dG9yPEl0ZW0+JiB2ZWN0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjIwLDggKzIyMCw4IEBACiAJCTBGRDMwODBGMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFt
ZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDMwODBEMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCAqLzsgfTsKIAkJMEZE
MzA4RDUxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDhEMzExN0QxNjg0MDBBNzkxRjcg
LyogUmVuZGVySUZyYW1lLmNwcCAqLzsgfTsKIAkJMEZEMzA4RDYxMTdEMTY4NTAwQTc5MUY3IC8q
IFJlbmRlcklGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEMzA4RDQxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5oICovOyB9Owot
CQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ3MjM4MDBFQzhCRDkzMDBDQTVERDcg
LyogRmxvYXRRdWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEZENzIzODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ3MjM4MTBFQzhCRDkz
MDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLzsgfTsKKwkJMEZENzIzODIwRUM4QkQ5MzAwQ0E1
REQ3IC8qIEdyYXBoaWNzUXVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDcyMzgz
MEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdy
YXBoaWNzUXVhZC5jcHAgKi87IH07CiAJCTBGRjUwMjVCMTAyQkE5MDEwMDY2RjM5QSAvKiBET01T
dHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY1MDI1OTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5oICovOyB9OwogCQkw
RkY1MDI1QzEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjUwMjVBMTAyQkE5MDEwMDY2RjM5
QSAvKiBET01TdHlsZU1lZGlhLm1tICovOyB9OwogCQkwRkY1MDI2MzEwMkJBOTJDMDA2NkYzOUEg
LyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkY1MDI2MjEwMkJBOTJCMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRp
YUludGVybmFsLmggKi87IH07CkBAIC00MzI4LDkgKzQzMjgsOSBAQAogCQlCMjY2Q0Q0RDBDM0FF
QzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEIwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZH
RXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJQjI2NkNENEUwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZH
RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjY2Q0Q0QzBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uaCAqLzsgfTsKIAkJ
QjI3NTM1NTgwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkEwQjA1
MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovOyB9OwotCQlCMjc1
MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50Q0cuY3BwICovOyB9OwotCQlCMjc1MzU1QTBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLzsgfTsK
LQkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJEMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi87IH07CisJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRD
Ry5jcHAgKi87IH07CisJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RD
Ry5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3BwICovOyB9OworCQlCMjc1
MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUUwQjA1MzgxNDAwMkNFNjRG
IC8qIEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovOyB9OwogCQlC
Mjc1MzU1RjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMTBCMDUzODE0MDAyQ0U2
NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi87IH07CiAJCUIyNzUzNTYwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludENHLmNwcCAqLzsg
fTsKQEAgLTQzNDEsMTIgKzQzNDEsMTIgQEAKIAkJQjI3NTM1NjUwQjA1MzgxNDAwMkNFNjRGIC8q
IFBERkRvY3VtZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmgg
Ki87IH07CiAJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzODBCMDUzODE0MDAy
Q0U2NEYgLyogQ29sb3IuY3BwICovOyB9OwogCQlCMjc1MzU2NzBCMDUzODE0MDAyQ0U2NEYgLyog
Q29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNzUzNTY4MEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCAqLzsgfTsKLQkJ
QjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQjI3NTM1NkEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQzBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmNwcCAqLzsgfTsKLQkJQjI3NTM1NkIwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNzUzNTZDMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5j
cHAgKi87IH07Ci0JCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNGMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQ
b2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5jcHAgKi87IH07CisJCUIy
NzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYg
LyogR3JhcGhpY3NQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUIyNzUzNTZBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0Mw
QjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdC5jcHAgKi87IH07CisJCUIyNzUzNTZCMEIw
NTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGlj
c1JlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNFMEIwNTM4MTQwMDJD
RTY0RiAvKiBHcmFwaGljc1NpemUuY3BwICovOyB9OworCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NkUw
QjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NkYwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgKi87
IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDIwQjA1MzgxNDAwMkNFNjRG
IC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTQzNTcsOSArNDM1Nyw5IEBACiAJCUIyNzUzNTc1MEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc2MEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1NEEwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tICov
OyB9OwotCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRCMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tICovOyB9OwotCQlCMjc1MzU3OTBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdE1h
Yy5tbSAqLzsgfTsKLQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZU1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi87IH07CisJCUIyNzUzNTc4MEIw
NTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEIwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzUG9pbnRNYWMubW0gKi87IH07CisJCUIyNzUzNTc5MEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1JlY3RNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0TWFjLm1tICov
OyB9OworCQlCMjc1MzU3QTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEQwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSAqLzsgfTsKIAkJQjI3NTM1N0IwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1t
ICovOyB9OwogCQlCMjc1MzU3QzBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0RjBCMDUz
ODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi87IH07CiAJCUIyNzUzNTdEMEIwNTM4MTQw
MDJDRTY0RiAvKiBJbnRSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RNYWMubW0g
Ki87IH07CkBAIC00NDgwLDggKzQ0ODAsOCBAQAogCQlCMkNCOTI2MjBCNUJEQTAyMDA5QkFBNzgg
LyogRE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1l
bnRJbnN0YW5jZS5tbSAqLzsgfTsKIAkJQjJDQjkyNjMwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNW
R0VsZW1lbnRJbnN0YW5jZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5z
dGFuY2VMaXN0LmggKi87IH07CiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdF
bGVtZW50SW5zdGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0
YW5jZUxpc3QubW0gKi87IH07Ci0JCUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBv
aW50M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJFMjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgKi87IH07Ci0JCUIy
RTI3Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAv
KiBGbG9hdFBvaW50M0QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlE
MEIwRjJCMDkwMEYxN0M3QiAvKiBHcmFwaGljc1BvaW50M0QuY3BwICovOyB9OworCQlCMkUyN0NB
MDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyog
R3JhcGhpY3NQb2ludDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQjJFNEVDOTcwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkU0RUM5NDBE
MDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCAqLzsgfTsKIAkJQjJFNEVDOTgwRDAw
QzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFNEVDOTUwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21F
dmVudC5oICovOyB9OwogCQlCMkVEOTc3MTBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250
ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLzsgfTsK
QEAgLTY1OTUsOCArNjU5NSw4IEBACiAJCTBGRDMwODBEMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5k
ZXJGcmFtZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRnJh
bWVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDMwOEQzMTE3RDE2ODQw
MEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVySUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEMzA4RDQxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJJRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFF1YWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFF1YWQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MDBFQzhCRDkzMDBDQTVERDcgLyogR3JhcGhp
Y3NRdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzUXVhZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MTBFQzhCRDkzMDBDQTVERDcg
LyogR3JhcGhpY3NRdWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdyYXBoaWNzUXVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjUwMjU5
MTAyQkE5MDEwMDY2RjM5QSAvKiBET01TdHlsZU1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTVN0eWxlTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZGNTAyNUExMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWEubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TdHlsZU1lZGlhLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY1MDI2MjEwMkJBOTJCMDA2NkYzOUEgLyogRE9NU3R5
bGVNZWRpYUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0
eWxlTWVkaWFJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5MTQs
OSArMTA5MTQsOSBAQAogCQlCMjY2Q0Q0QjBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHRXhjZXB0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NkNENEMwQzNBRUM2NTAw
RUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1NWR0V4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZsb2F0UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUz
NTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZUNHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzUG9pbnRDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NQb2ludENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1
MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1JlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NTaXpl
Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMDBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMxMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50Q0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5MjcsMTIgKzEwOTI3LDEyIEBACiAJCUIyNzUzNTM3
MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQREZEb2N1bWVudEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0MwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxv
YXRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0QwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmxvYXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTNFMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZsb2F0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0U2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NQb2ludC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFw
aGljc1BvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1Bv
aW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTNDMEIwNTM4MTQwMDJD
RTY0RiAvKiBHcmFwaGljc1JlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdyYXBoaWNzUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
NzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1NpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogR3Jh
cGhpY3NTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1Np
emUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDAwQjA1MzgxNDAwMkNF
NjRGIC8qIEljb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDEwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQyMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTQzLDkgKzEwOTQzLDkgQEAKIAkJQjI3
NTM1NDcwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3
NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRTaXplSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjc1MzU0QTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JNYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50TWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0UG9pbnRN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTRDMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRmxvYXRSZWN0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
Mjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0U2l6ZU1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1NEIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9p
bnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhp
Y3NQb2ludE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1NEMwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc1JlY3RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhpY3NTaXpl
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0RTBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gSW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTRG
MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBJbnRQb2ludE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW50UmVjdE1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMDcwLDggKzExMDcwLDggQEAKIAkJQjJDQjkyNUUw
QjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2UubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3OCAvKiBE
T01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VM
aXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVNWR0Vs
ZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRTI3
QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhp
Y3NQb2ludDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc1BvaW50M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkUyN0M5RTBC
MEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFwaGljc1BvaW50M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHWm9vbUV2ZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTUwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pv
b21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHWm9vbUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk2MEQwMEMyMkIwMDQzMjY0
MyAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdab29tRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NzksMTQgKzE3ODc5LDE0
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGQ0YzMzIzMEYy
Qjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKLQkJCQlCMjc1MzUyQjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKLQkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLAotCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAwMjFFQjVEIC8qIEdy
YWRpZW50Q0cuY3BwICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGlj
c0NvbnRleHQzRENHLmNwcCAqLywKIAkJCQlCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBH
cmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAorCQkJCUIyNzUzNTJCMEIwNTM4
MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovLAorCQkJCUIyNzUzNTJDMEIwNTM4
MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RDRy5jcHAgKi8sCisJCQkJQjI3NTM1MkQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCAqLywKIAkJCQlCMkExMEI5MzBCMzgxOEQ3
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCiAJCQkJMjI5MkIyN0IxMzU2NjY5NDAw
Q0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKIAkJCQkyMkJEOUY4MDEzNTM2NEZF
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKQEAgLTE3OTE1LDkgKzE3OTE1LDYg
QEAKIAkJCQkzN0MyMzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmggKi8sCiAJCQkJMzdDMjM4MUYxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJv
bGxlckFUU1VJLmNwcCAqLywKIAkJCQkzN0MyMzgyMDEwOThDODQyMDBFRjlGNzIgLyogQ29tcGxl
eFRleHRDb250cm9sbGVyQ29yZVRleHQuY3BwICovLAotCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tICovLAotCQkJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8sCi0JCQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZU1hYy5tbSAqLywKIAkJCQlCMkFGRkM3NDBEMDBBNUMxMDAzMDA3NEQgLyogRm9u
dENhY2hlTWFjLm1tICovLAogCQkJCTM3QzIzNjBBMTA5N0VERUQwMEVGOUY3MiAvKiBGb250Q29t
cGxleFRleHRNYWMuY3BwICovLAogCQkJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLywKQEAgLTE3OTI2LDYgKzE3OTIzLDkgQEAKIAkJCQlC
MkFGRkM3QjBEMDBBNUMxMDAzMDA3NEQgLyogR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwICovLAog
CQkJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAq
LywKIAkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1t
ICovLAorCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1t
ICovLAorCQkJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RNYWMubW0g
Ki8sCisJCQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSAq
LywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSAqLywKIAkJCQlC
Mjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMubW0gKi8sCiAJCQkJQjI3NTM1NEYw
QjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tICovLApAQCAtMTc5NzAsMTYgKzE3OTcw
LDYgQEAKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JTcGFjZS5oICovLAog
CQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKIAkJCQk2RTY3
RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCi0JCQkJQjI3NTM1M0Ew
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLAotCQkJCUIyNzUzNTNCMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCi0JCQkJQjJFMjdDOUQwQjBGMkIwOTAwRjE3
QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgKi8sCi0JCQkJQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdC
IC8qIEZsb2F0UG9pbnQzRC5oICovLAotCQkJCTBGRDcyMzgxMEVDOEJEOTMwMENBNURENyAvKiBG
bG9hdFF1YWQuY3BwICovLAotCQkJCTBGRDcyMzgwMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1
YWQuaCAqLywKLQkJCQlCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmNwcCAq
LywKLQkJCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmggKi8sCi0JCQkJ
QjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5jcHAgKi8sCi0JCQkJQjI3NTM1
M0YwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oICovLAogCQkJCUIyQzNEQTRGMEQwMDZD
RDYwMEVGNkYyNiAvKiBGb250LmNwcCAqLywKIAkJCQlCMkMzREE1MDBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udC5oICovLAogCQkJCUJDQjkyRDRFMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxp
bmUuaCAqLywKQEAgLTE4MDIxLDYgKzE4MDExLDE2IEBACiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAw
NTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBBMEYxMkEyNjkwMDUx
RDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5
IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKKwkJCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NQb2ludC5jcHAgKi8sCisJCQkJQjI3NTM1M0IwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzUG9pbnQuaCAqLywKKwkJCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyog
R3JhcGhpY3NQb2ludDNELmNwcCAqLywKKwkJCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyog
R3JhcGhpY3NQb2ludDNELmggKi8sCisJCQkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdy
YXBoaWNzUXVhZC5jcHAgKi8sCisJCQkJMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBo
aWNzUXVhZC5oICovLAorCQkJCUIyNzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1Jl
Y3QuY3BwICovLAorCQkJCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3Qu
aCAqLywKKwkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmNwcCAq
LywKKwkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggKi8sCiAJ
CQkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovLAogCQkJ
CUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8sCiAJCQkJNzdB
MTdBN0ExMkYyODkwQjAwNEUwMkY2IC8qIEdyYXBoaWNzVHlwZXMzRC5oICovLApAQCAtMjExODAs
MTEgKzIxMTgwLDExIEBACiAJCQkJNDlFRUNERTYxMDUwM0MyNDAwMDk5RkFCIC8qIEZsb2F0MzJB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCQzVEODIxMzhCNEM0RTAwQTBDRjhBIC8qIEZs
b2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5
IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI3NTM1NjkwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyRTI3Q0EwMEIw
RjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDcy
MzgyMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIy
NzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogR3JhcGhpY3NR
dWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogR3Jh
cGhpY3NSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYg
LyogR3JhcGhpY3NTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDk5M0JFNjBCMkYyQjFDMDA1
MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjIyODc4NDBC
NERCMzIyMDAwQzM0REYgLyogRm9jdXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
QzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAqLywKQEAgLTI0MDg4
LDE3ICsyNDA4OCwxNyBAQAogCQkJCUE4Q0ZGMDREMEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRh
YmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVDREU1MTA1MDNDMjQwMDA5OUZB
QiAvKiBGbG9hdDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkVCQzVEODExMzhCNEM0
RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU2
ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlC
MkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRNYWMu
bW0gaW4gU291cmNlcyAqLywKLQkJCQkwRkQ3MjM4MzBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRR
dWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTZBMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1NUEwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTc5MEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU2QzBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUz
NTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCMjc1MzU3QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9p
bnQzRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUzNTc4MEIwNTM4MTQw
MDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZENzIz
ODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCMjc1MzU2QTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RDRy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU3OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NS
ZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NkMwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1QjBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1N0Ew
QjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw3IEBACiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFu
Z2VkUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1l
bnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGNoYW5nZWRSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBjYW52
YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQ
b2ludDsKIGNsYXNzIEdyYWRpZW50OwogCiBlbnVtIENTU0dyYWRpZW50VHlwZSB7IENTU0xpbmVh
ckdyYWRpZW50LCBDU1NSYWRpYWxHcmFkaWVudCB9OwpAQCAtODAsNyArODAsNyBAQAogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgSW50U2l6ZSYpID0gMDsKIAogICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZy
b250IGVuZCB2YWx1ZXMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0
aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSwgY29uc3QgSW50U2l6ZSYpOworICAgIEdyYXBoaWNzUG9pbnQgY29tcHV0ZUVu
ZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmKTsKICAgICAKICAgICBi
b29sIGlzQ2FjaGVhYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTIgKzE0MiwxMiBAQAog
ICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gMDsKICAgICBib29sIGNvbXB1dGVkR3JhZGllbnRM
ZW5ndGggPSBmYWxzZTsKICAgICAKLSAgICBGbG9hdFBvaW50IGdyYWRpZW50U3RhcnQgPSBncmFk
aWVudC0+cDAoKTsKLSAgICBGbG9hdFBvaW50IGdyYWRpZW50RW5kOworICAgIEdyYXBoaWNzUG9p
bnQgZ3JhZGllbnRTdGFydCA9IGdyYWRpZW50LT5wMCgpOworICAgIEdyYXBoaWNzUG9pbnQgZ3Jh
ZGllbnRFbmQ7CiAgICAgaWYgKGlzTGluZWFyR3JhZGllbnQoKSkKICAgICAgICAgZ3JhZGllbnRF
bmQgPSBncmFkaWVudC0+cDEoKTsKICAgICBlbHNlIGlmIChpc1JhZGlhbEdyYWRpZW50KCkpCi0g
ICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEZsb2F0U2l6ZShncmFkaWVudC0+
ZW5kUmFkaXVzKCksIDApOworICAgICAgICBncmFkaWVudEVuZCA9IGdyYWRpZW50U3RhcnQgKyBH
cmFwaGljc1NpemUoZ3JhZGllbnQtPmVuZFJhZGl1cygpLCAwKTsKICAgICAgICAgCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU0dy
YWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKQEAgLTE2MSw3ICsxNjEsNyBAQAog
ICAgICAgICAgICAgZWxzZSBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgo
dHlwZSkpIHsKICAgICAgICAgICAgICAgICBmbG9hdCBsZW5ndGggPSBzdG9wLm1fcG9zaXRpb24t
PmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlLCByb290U3R5bGUsIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCkpOwogICAgICAgICAgICAgICAgIGlmICghY29tcHV0ZWRHcmFkaWVudExlbmd0aCkgewot
ICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQg
LSBncmFkaWVudEVuZCk7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBncmFkaWVu
dFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50RW5kKTsKICAgICAgICAgICAgICAgICAgICAg
Z3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlhZ29uYWxMZW5ndGgoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gKGdyYWRpZW50TGVu
Z3RoID4gMCkgPyBsZW5ndGggLyBncmFkaWVudExlbmd0aCA6IDA7CkBAIC0yNDYsNyArMjQ2LDcg
QEAKICAgICAgICAgICAgIC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJv
eC4KICAgICAgICAgICAgIGlmIChpc1JhZGlhbEdyYWRpZW50KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgRmxv
YXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQpOworICAgICAg
ICAgICAgICAgICAgICBHcmFwaGljc1NpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBn
cmFkaWVudEVuZCk7CiAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50TGVuZ3RoID0gZ3JhZGll
bnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIApAQCAtMzEwLDEwICszMTAsMTAgQEAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtU3RvcHM7ICsraSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAo
c3RvcHNbaV0ub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2NhbGU7CiAKLSAgICAgICAgICAgIEZs
b2F0UG9pbnQgcDAgPSBncmFkaWVudC0+cDAoKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEg
PSBncmFkaWVudC0+cDEoKTsKLSAgICAgICAgICAgIGdyYWRpZW50LT5zZXRQMChGbG9hdFBvaW50
KHAwLngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngoKSAtIHAwLngoKSksIHAwLnkoKSArIGZpcnN0
T2Zmc2V0ICogKHAxLnkoKSAtIHAwLnkoKSkpKTsKLSAgICAgICAgICAgIGdyYWRpZW50LT5zZXRQ
MShGbG9hdFBvaW50KHAxLngoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgp
KSwgcDEueSgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS55KCkgLSBwMC55KCkpKSk7CisgICAg
ICAgICAgICBHcmFwaGljc1BvaW50IHAwID0gZ3JhZGllbnQtPnAwKCk7CisgICAgICAgICAgICBH
cmFwaGljc1BvaW50IHAxID0gZ3JhZGllbnQtPnAxKCk7CisgICAgICAgICAgICBncmFkaWVudC0+
c2V0UDAoR3JhcGhpY3NQb2ludChwMC54KCkgKyBmaXJzdE9mZnNldCAqIChwMS54KCkgLSBwMC54
KCkpLCBwMC55KCkgKyBmaXJzdE9mZnNldCAqIChwMS55KCkgLSBwMC55KCkpKSk7CisgICAgICAg
ICAgICBncmFkaWVudC0+c2V0UDEoR3JhcGhpY3NQb2ludChwMS54KCkgKyAobGFzdE9mZnNldCAt
IDEpICogKHAxLngoKSAtIHAwLngoKSksIHAxLnkoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEu
eSgpIC0gcDAueSgpKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnQoKSkg
ewogICAgICAgICAgICAgLy8gUmF0aGVyIHRoYW4gc2NhbGluZyB0aGUgcG9pbnRzIDwgMCwgd2Ug
dHJ1bmNhdGUgdGhlbSwgc28gb25seSBzY2FsZSBhY2NvcmRpbmcgdG8gdGhlIGxhcmdlc3QgcG9p
bnQuCiAgICAgICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IDA7CkBAIC0zOTUsOSArMzk1LDkg
QEAKICAgICB9CiB9CiAKLUZsb2F0UG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVuZFBv
aW50KENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBJbnRTaXpl
JiBzaXplKQorR3JhcGhpY3NQb2ludCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlRW5kUG9pbnQo
Q1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0LCBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmIHNp
emUpCiB7Ci0gICAgRmxvYXRQb2ludCByZXN1bHQ7CisgICAgR3JhcGhpY3NQb2ludCByZXN1bHQ7
CiAKICAgICBpZiAoZmlyc3QpCiAgICAgICAgIHJlc3VsdC5zZXRYKHBvc2l0aW9uRnJvbVZhbHVl
KGZpcnN0LCBzdHlsZSwgcm9vdFN0eWxlLCBzaXplLCB0cnVlKSk7CkBAIC00NzMsNyArNDczLDcg
QEAKIH0KIAogLy8gQ29tcHV0ZSB0aGUgZW5kcG9pbnRzIHNvIHRoYXQgYSBncmFkaWVudCBvZiB0
aGUgZ2l2ZW4gYW5nbGUgY292ZXJzIGEgYm94IG9mIHRoZSBnaXZlbiBzaXplLgotc3RhdGljIHZv
aWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBGbG9hdFBvaW50JiBmaXJzdFBvaW50LCBGbG9hdFBvaW50JiBzZWNvbmRQb2ludCkKK3N0YXRp
YyB2b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9hdCBhbmdsZURlZywgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgR3JhcGhpY3NQb2ludCYgZmlyc3RQb2ludCwgR3JhcGhpY3NQb2ludCYgc2Vjb25kUG9p
bnQpCiB7CiAgICAgYW5nbGVEZWcgPSBmbW9kZihhbmdsZURlZywgMzYwKTsKICAgICBpZiAoYW5n
bGVEZWcgPCAwKQpAQCAtNTEyLDcgKzUxMiw3IEBACiAgICAgLy8gQ29tcHV0ZSBzdGFydCBjb3Ju
ZXIgcmVsYXRpdmUgdG8gY2VudGVyLgogICAgIGZsb2F0IGhhbGZIZWlnaHQgPSBzaXplLmhlaWdo
dCgpIC8gMjsKICAgICBmbG9hdCBoYWxmV2lkdGggPSBzaXplLndpZHRoKCkgLyAyOwotICAgIEZs
b2F0UG9pbnQgZW5kQ29ybmVyOworICAgIEdyYXBoaWNzUG9pbnQgZW5kQ29ybmVyOwogICAgIGlm
IChhbmdsZURlZyA8IDkwKQogICAgICAgICBlbmRDb3JuZXIuc2V0KGhhbGZXaWR0aCwgaGFsZkhl
aWdodCk7CiAgICAgZWxzZSBpZiAoYW5nbGVEZWcgPCAxODApCkBAIC01MzksOCArNTM5LDggQEAK
ICAgICAKICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogCi0gICAgRmxvYXRQb2ludCBmaXJz
dFBvaW50OwotICAgIEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBm
aXJzdFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgc2Vjb25kUG9pbnQ7CiAgICAgaWYgKG1fYW5n
bGUpIHsKICAgICAgICAgZmxvYXQgYW5nbGUgPSBtX2FuZ2xlLT5nZXRGbG9hdFZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKICAgICAgICAgZW5kUG9pbnRzRnJvbUFuZ2xlKGFuZ2xl
LCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CkBAIC02NDksMTkgKzY0OSwxOSBAQAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENv
cm5lcihjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0UG9p
bnQmIGNvcm5lcikKK3N0YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb25zdCBH
cmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1NpemUmIHNpemUsIEdyYXBoaWNzUG9pbnQm
IGNvcm5lcikKIHsKLSAgICBGbG9hdFBvaW50IHRvcExlZnQ7Ci0gICAgZmxvYXQgdG9wTGVmdERp
c3RhbmNlID0gRmxvYXRTaXplKHAgLSB0b3BMZWZ0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdy
YXBoaWNzUG9pbnQgdG9wTGVmdDsKKyAgICBmbG9hdCB0b3BMZWZ0RGlzdGFuY2UgPSBHcmFwaGlj
c1NpemUocCAtIHRvcExlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBGbG9hdFBvaW50IHRv
cFJpZ2h0KHNpemUud2lkdGgoKSwgMCk7Ci0gICAgZmxvYXQgdG9wUmlnaHREaXN0YW5jZSA9IEZs
b2F0U2l6ZShwIC0gdG9wUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQb2lu
dCB0b3BSaWdodChzaXplLndpZHRoKCksIDApOworICAgIGZsb2F0IHRvcFJpZ2h0RGlzdGFuY2Ug
PSBHcmFwaGljc1NpemUocCAtIHRvcFJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxv
YXRQb2ludCBib3R0b21MZWZ0KDAsIHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbUxl
ZnREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gYm90dG9tTGVmdCkuZGlhZ29uYWxMZW5ndGgoKTsK
KyAgICBHcmFwaGljc1BvaW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZmxv
YXQgYm90dG9tTGVmdERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0b21MZWZ0KS5kaWFn
b25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21SaWdodChzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbVJpZ2h0RGlzdGFuY2UgPSBGbG9hdFNp
emUocCAtIGJvdHRvbVJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQg
Ym90dG9tUmlnaHQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBmbG9hdCBib3R0
b21SaWdodERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0b21SaWdodCkuZGlhZ29uYWxM
ZW5ndGgoKTsKIAogICAgIGNvcm5lciA9IHRvcExlZnQ7CiAgICAgZmxvYXQgbWluRGlzdGFuY2Ug
PSB0b3BMZWZ0RGlzdGFuY2U7CkBAIC02ODIsMTkgKzY4MiwxOSBAQAogICAgIHJldHVybiBtaW5E
aXN0YW5jZTsKIH0KIAotc3RhdGljIGZsb2F0IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihjb25z
dCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0UG9pbnQmIGNvcm5l
cikKK3N0YXRpYyBmbG9hdCBkaXN0YW5jZVRvRmFydGhlc3RDb3JuZXIoY29uc3QgR3JhcGhpY3NQ
b2ludCYgcCwgY29uc3QgR3JhcGhpY3NTaXplJiBzaXplLCBHcmFwaGljc1BvaW50JiBjb3JuZXIp
CiB7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0OwotICAgIGZsb2F0IHRvcExlZnREaXN0YW5jZSA9
IEZsb2F0U2l6ZShwIC0gdG9wTGVmdCkuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1Bv
aW50IHRvcExlZnQ7CisgICAgZmxvYXQgdG9wTGVmdERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAg
LSB0b3BMZWZ0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCB0b3BSaWdodChz
aXplLndpZHRoKCksIDApOwotICAgIGZsb2F0IHRvcFJpZ2h0RGlzdGFuY2UgPSBGbG9hdFNpemUo
cCAtIHRvcFJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wUmln
aHQoc2l6ZS53aWR0aCgpLCAwKTsKKyAgICBmbG9hdCB0b3BSaWdodERpc3RhbmNlID0gR3JhcGhp
Y3NTaXplKHAgLSB0b3BSaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKIAotICAgIEZsb2F0UG9pbnQg
Ym90dG9tTGVmdCgwLCBzaXplLmhlaWdodCgpKTsKLSAgICBmbG9hdCBib3R0b21MZWZ0RGlzdGFu
Y2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbUxlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgR3Jh
cGhpY3NQb2ludCBib3R0b21MZWZ0KDAsIHNpemUuaGVpZ2h0KCkpOworICAgIGZsb2F0IGJvdHRv
bUxlZnREaXN0YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gYm90dG9tTGVmdCkuZGlhZ29uYWxMZW5n
dGgoKTsKIAotICAgIEZsb2F0UG9pbnQgYm90dG9tUmlnaHQoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKLSAgICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSBi
b3R0b21SaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1BvaW50IGJvdHRvbVJp
Z2h0KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZmxvYXQgYm90dG9tUmlnaHRE
aXN0YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gYm90dG9tUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7
CiAKICAgICBjb3JuZXIgPSB0b3BMZWZ0OwogICAgIGZsb2F0IG1heERpc3RhbmNlID0gdG9wTGVm
dERpc3RhbmNlOwpAQCAtNzE3LDcgKzcxNyw3IEBACiAKIC8vIENvbXB1dGUgaG9yaXpvbnRhbCBy
YWRpdXMgb2YgZWxsaXBzZSB3aXRoIGNlbnRlciBhdCAwLDAgd2hpY2ggcGFzc2VzIHRocm91Z2gg
cCwgYW5kIGhhcwogLy8gd2lkdGgvaGVpZ2h0IGdpdmVuIGJ5IGFzcGVjdFJhdGlvLgotc3RhdGlj
IGlubGluZSBmbG9hdCBob3Jpem9udGFsRWxsaXBzZVJhZGl1cyhjb25zdCBGbG9hdFNpemUmIHAs
IGZsb2F0IGFzcGVjdFJhdGlvKQorc3RhdGljIGlubGluZSBmbG9hdCBob3Jpem9udGFsRWxsaXBz
ZVJhZGl1cyhjb25zdCBHcmFwaGljc1NpemUmIHAsIGZsb2F0IGFzcGVjdFJhdGlvKQogewogICAg
IC8vIHheMi9hXjIgKyB5XjIvYl4yID0gMQogICAgIC8vIGEvYiA9IGFzcGVjdFJhdGlvLCBiID0g
YS9hc3BlY3RSYXRpbwpAQCAtNzMyLDEzICs3MzIsMTMgQEAKICAgICAKICAgICBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5y
ZW5kZXJTdHlsZSgpOwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBv
aW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJv
b3RTdHlsZSwgc2l6ZSk7CisgICAgR3JhcGhpY3NQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVu
ZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCks
IHJvb3RTdHlsZSwgc2l6ZSk7CiAgICAgaWYgKCFtX2ZpcnN0WCkKICAgICAgICAgZmlyc3RQb2lu
dC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwogICAgIGlmICghbV9maXJzdFkpCiAgICAgICAgIGZp
cnN0UG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7CiAKLSAgICBGbG9hdFBvaW50IHNlY29u
ZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgp
LCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKKyAgICBHcmFwaGljc1BvaW50
IHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZ
LmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKICAgICBpZiAoIW1f
c2Vjb25kWCkKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAyKTsKICAg
ICBpZiAoIW1fc2Vjb25kWSkKQEAgLTgxNCw3ICs4MTQsNyBAQAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zZXN0Q29ybmVyOiB7Ci0gICAgICAgICAgICBG
bG9hdFBvaW50IGNvcm5lcjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgY29ybmVyOwogICAg
ICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihzZWNvbmRQ
b2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICAgICAgICAgIGlmIChzaGFwZSA9PSBDaXJjbGUpCiAg
ICAgICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gZGlzdGFuY2U7CkBAIC04MzEsNyArODMxLDcg
QEAKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRmFydGhlc3RDb3JuZXI6IHsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgY29ybmVyOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjb3JuZXI7
CiAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihz
ZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICAgICAgICAgIGlmIChzaGFwZSA9PSBDaXJj
bGUpCiAgICAgICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gZGlzdGFuY2U7CkBAIC04NTQsNyAr
ODU0LDcgQEAKICAgICAvLyBhZGRTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVh
dGluZyBncmFkaWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKICAgICBpZiAobV9yZXBl
YXRpbmcpIHsKLSAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7CisgICAgICAgIEdyYXBoaWNzUG9p
bnQgY29ybmVyOwogICAgICAgICBtYXhFeHRlbnQgPSBkaXN0YW5jZVRvRmFydGhlc3RDb3JuZXIo
c2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDYW52YXNWYWx1ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5n
ZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSZWN0KQordm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpCiB7CiAgICAgSW50UmVjdCBpbWFnZUNoYW5nZVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBSZW5kZXJPYmplY3RTaXpl
Q291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0Lmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCkBAIC0yNzUsNyArMjc1LDcgQEAKIHN0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9N
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAg
RmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmll
dygpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgaW50IGggPSAwOwogICAgICAgICBpbnQg
diA9IDA7CiAgICAgICAgIGlmIChwYXJzZUFzcGVjdFJhdGlvKHZhbHVlLCBoLCB2KSkKQEAgLTMw
OSw3ICszMDksNyBAQAogc3RhdGljIGJvb2wgZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qg
c2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOworICAg
ICAgICBHcmFwaGljc1JlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gZnJhbWUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICByZXR1
cm4gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8
aW50PihzZy5oZWlnaHQoKSksIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSksIG9wKTsKICAgICB9CkBAIC0z
MjEsNyArMzIxLDcgQEAKIHN0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qg
c2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOworICAg
ICAgICBHcmFwaGljc1JlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gZnJhbWUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICByZXR1
cm4gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8
aW50PihzZy53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkt
PmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlKSwgb3ApOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAjaW5jbHVk
ZSAiQ29uZS5oIgogI2luY2x1ZGUgIkRpc3RhbmNlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNE
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSAiUGFubmVyLmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC03NSwxNiArNzUsMTYgQEAKICAgICB2b2lkIHNl
dFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCk7CiAKICAgICAvLyBQb3NpdGlvbgotICAgIEZs
b2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICB2
b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9wb3NpdGlvbiA9
IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQorICAgIEdyYXBoaWNzUG9pbnQzRCBwb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9wb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQzRCh4LCB5
LCB6KTsgfQogCiAgICAgLy8gT3JpZW50YXRpb24KLSAgICBGbG9hdFBvaW50M0Qgb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlv
bihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50YXRpb24gPSBGbG9hdFBvaW50
M0QoeCwgeSwgeik7IH0KKyAgICBHcmFwaGljc1BvaW50M0Qgb3JpZW50YXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50YXRpb24gPSBHcmFwaGljc1BvaW50M0QoeCwgeSwg
eik7IH0KIAogICAgIC8vIFZlbG9jaXR5Ci0gICAgRmxvYXRQb2ludDNEIHZlbG9jaXR5KCkgY29u
c3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQotICAgIHZvaWQgc2V0VmVsb2NpdHkoZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0gRmxvYXRQb2ludDNEKHgsIHksIHopOyB9
CisgICAgR3JhcGhpY3NQb2ludDNEIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0
eTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHkoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBt
X3ZlbG9jaXR5ID0gR3JhcGhpY3NQb2ludDNEKHgsIHksIHopOyB9CiAKICAgICAvLyBEaXN0YW5j
ZSBwYXJhbWV0ZXJzCiAgICAgdW5zaWduZWQgc2hvcnQgZGlzdGFuY2VNb2RlbCgpIHsgcmV0dXJu
IG1fZGlzdGFuY2VFZmZlY3QubW9kZWwoKTsgfQpAQCAtMTI5LDkgKzEyOSw5IEBACiAgICAgT3du
UHRyPFBhbm5lcj4gbV9wYW5uZXI7CiAgICAgdW5zaWduZWQgbV9wYW5uaW5nTW9kZWw7CiAKLSAg
ICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9vcmllbnRhdGlv
bjsKLSAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9w
b3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9vcmllbnRhdGlvbjsKKyAgICBHcmFwaGlj
c1BvaW50M0QgbV92ZWxvY2l0eTsKIAogICAgIC8vIEdhaW4KICAgICBSZWZQdHI8QXVkaW9HYWlu
PiBtX2Rpc3RhbmNlR2FpbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBACiAg
ICAgbV9kaXN0YW5jZUdhaW4gPSBBdWRpb0dhaW46OmNyZWF0ZSgiZGlzdGFuY2VHYWluIiwgMS4w
LCAwLjAsIDEuMCk7CiAgICAgbV9jb25lR2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRlKCJjb25lR2Fp
biIsIDEuMCwgMC4wLCAxLjApOwogCi0gICAgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCgwLCAw
LCAwKTsKLSAgICBtX29yaWVudGF0aW9uID0gRmxvYXRQb2ludDNEKDEsIDAsIDApOwotICAgIG1f
dmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7CisgICAgbV9wb3NpdGlvbiA9IEdyYXBo
aWNzUG9pbnQzRCgwLCAwLCAwKTsKKyAgICBtX29yaWVudGF0aW9uID0gR3JhcGhpY3NQb2ludDNE
KDEsIDAsIDApOworICAgIG1fdmVsb2NpdHkgPSBHcmFwaGljc1BvaW50M0QoMCwgMCwgMCk7CiAg
ICAgCiAgICAgc2V0VHlwZShOb2RlVHlwZVBhbm5lcik7CiAKQEAgLTE2NSw4ICsxNjUsOCBAQAog
ICAgIGRvdWJsZSBhemltdXRoID0gMC4wOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2Ut
bGlzdGVuZXIgdmVjdG9yCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24gPSBsaXN0
ZW5lcigpLT5wb3NpdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VMaXN0ZW5lciA9IG1f
cG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5l
clBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAgICBHcmFwaGljc1BvaW50M0Qg
c291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKIAogICAgIGlm
IChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgewogICAgICAgICAvLyBkZWdlbmVyYXRlIGNhc2Ug
aWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhlIHNhbWUgcG9pbnQKQEAgLTE3OCwxOSAr
MTc4LDE5IEBACiAgICAgc291cmNlTGlzdGVuZXIubm9ybWFsaXplKCk7CiAKICAgICAvLyBBbGln
biBheGVzCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnQgPSBsaXN0ZW5lcigpLT5vcmll
bnRhdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclVwID0gbGlzdGVuZXIoKS0+dXBW
ZWN0b3IoKTsKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJSaWdodCA9IGxpc3RlbmVyRnJvbnQu
Y3Jvc3MobGlzdGVuZXJVcCk7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyRnJvbnQgPSBs
aXN0ZW5lcigpLT5vcmllbnRhdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lclVw
ID0gbGlzdGVuZXIoKS0+dXBWZWN0b3IoKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJS
aWdodCA9IGxpc3RlbmVyRnJvbnQuY3Jvc3MobGlzdGVuZXJVcCk7CiAgICAgbGlzdGVuZXJSaWdo
dC5ub3JtYWxpemUoKTsKIAotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lckZyb250Tm9ybSA9IGxp
c3RlbmVyRnJvbnQ7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyRnJvbnROb3JtID0gbGlz
dGVuZXJGcm9udDsKICAgICBsaXN0ZW5lckZyb250Tm9ybS5ub3JtYWxpemUoKTsKIAotICAgIEZs
b2F0UG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlzdGVuZXJGcm9udE5vcm0pOwor
ICAgIEdyYXBoaWNzUG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlzdGVuZXJGcm9u
dE5vcm0pOwogCiAgICAgZG91YmxlIHVwUHJvamVjdGlvbiA9IHNvdXJjZUxpc3RlbmVyLmRvdCh1
cCk7CiAKLSAgICBGbG9hdFBvaW50M0QgcHJvamVjdGVkU291cmNlID0gc291cmNlTGlzdGVuZXIg
LSB1cFByb2plY3Rpb24gKiB1cDsKKyAgICBHcmFwaGljc1BvaW50M0QgcHJvamVjdGVkU291cmNl
ID0gc291cmNlTGlzdGVuZXIgLSB1cFByb2plY3Rpb24gKiB1cDsKICAgICBwcm9qZWN0ZWRTb3Vy
Y2Uubm9ybWFsaXplKCk7CiAKICAgICBhemltdXRoID0gMTgwLjAgKiBhY29zKHByb2plY3RlZFNv
dXJjZS5kb3QobGlzdGVuZXJSaWdodCkpIC8gcGlEb3VibGU7CkBAIC0yMzIsOCArMjMyLDggQEAK
ICAgICBpZiAoZG9wcGxlckZhY3RvciA+IDAuMCkgewogICAgICAgICBkb3VibGUgc3BlZWRPZlNv
dW5kID0gbGlzdGVuZXIoKS0+c3BlZWRPZlNvdW5kKCk7CiAKLSAgICAgICAgY29uc3QgRmxvYXRQ
b2ludDNEICZzb3VyY2VWZWxvY2l0eSA9IG1fdmVsb2NpdHk7Ci0gICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQzRCAmbGlzdGVuZXJWZWxvY2l0eSA9IGxpc3RlbmVyKCktPnZlbG9jaXR5KCk7CisgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmc291cmNlVmVsb2NpdHkgPSBtX3ZlbG9jaXR5Owor
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50M0QgJmxpc3RlbmVyVmVsb2NpdHkgPSBsaXN0ZW5l
cigpLT52ZWxvY2l0eSgpOwogCiAgICAgICAgIC8vIERvbid0IGJvdGhlciBpZiBib3RoIHNvdXJj
ZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0eQogICAgICAgICBib29sIHNvdXJjZUhhc1Zl
bG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVybygpOwpAQCAtMjQxLDggKzI0MSw4IEBACiAK
ICAgICAgICAgaWYgKHNvdXJjZUhhc1ZlbG9jaXR5IHx8IGxpc3RlbmVySGFzVmVsb2NpdHkpIHsK
ICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlIHRvIGxpc3RlbmVyIHZlY3Rvcgot
ICAgICAgICAgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24gPSBsaXN0ZW5lcigpLT5w
b3NpdGlvbigpOwotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHNvdXJjZVRvTGlzdGVuZXIgPSBt
X3Bvc2l0aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQz
RCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbV9wb3NpdGlvbiAtIGxpc3RlbmVy
UG9zaXRpb247CiAKICAgICAgICAgICAgIGRvdWJsZSBzb3VyY2VMaXN0ZW5lck1hZ25pdHVkZSA9
IHNvdXJjZVRvTGlzdGVuZXIubGVuZ3RoKCk7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiBmbG9h
dCBBdWRpb1Bhbm5lck5vZGU6OmRpc3RhbmNlQ29uZUdhaW4oKQogewotICAgIEZsb2F0UG9pbnQz
RCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAgICBHcmFwaGlj
c1BvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7CiAKICAg
ICBkb3VibGUgbGlzdGVuZXJEaXN0YW5jZSA9IG1fcG9zaXRpb24uZGlzdGFuY2VUbyhsaXN0ZW5l
clBvc2l0aW9uKTsKICAgICBkb3VibGUgZGlzdGFuY2VHYWluID0gbV9kaXN0YW5jZUVmZmVjdC5n
YWluKGxpc3RlbmVyRGlzdGFuY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9MaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
TGlzdGVuZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9B
dWRpb0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYg
QXVkaW9MaXN0ZW5lcl9oCiAjZGVmaW5lIEF1ZGlvTGlzdGVuZXJfaAogCi0jaW5jbHVkZSAiRmxv
YXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NSwyNyAr
NDUsMjcgQEAKICAgICB9CiAKICAgICAvLyBQb3NpdGlvbgotICAgIHZvaWQgc2V0UG9zaXRpb24o
ZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgeyBzZXRQb3NpdGlvbihGbG9hdFBvaW50M0Qo
eCwgeSwgeikpOyB9Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50M0QgJnBv
c2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQz
RCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRQ
b3NpdGlvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSB7IHNldFBvc2l0aW9uKEdyYXBo
aWNzUG9pbnQzRCh4LCB5LCB6KSk7IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBo
aWNzUG9pbnQzRCAmcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9CisgICAgY29u
c3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KIAogICAgIC8vIE9yaWVudGF0aW9uCiAgICAgdm9pZCBzZXRPcmllbnRhdGlvbihkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdXBYLCBkb3VibGUgdXBZLCBkb3VibGUgdXBa
KQogICAgIHsKLSAgICAgICAgc2V0T3JpZW50YXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsK
LSAgICAgICAgc2V0VXBWZWN0b3IoRmxvYXRQb2ludDNEKHVwWCwgdXBZLCB1cFopKTsKKyAgICAg
ICAgc2V0T3JpZW50YXRpb24oR3JhcGhpY3NQb2ludDNEKHgsIHksIHopKTsKKyAgICAgICAgc2V0
VXBWZWN0b3IoR3JhcGhpY3NQb2ludDNEKHVwWCwgdXBZLCB1cFopKTsKICAgICB9Ci0gICAgdm9p
ZCBzZXRPcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50M0QgJm9yaWVudGF0aW9uKSB7IG1fb3Jp
ZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgb3JpZW50
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisgICAgdm9pZCBzZXRPcmll
bnRhdGlvbihjb25zdCBHcmFwaGljc1BvaW50M0QgJm9yaWVudGF0aW9uKSB7IG1fb3JpZW50YXRp
b24gPSBvcmllbnRhdGlvbjsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgb3JpZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CiAKICAgICAvLyBVcC12ZWN0b3IK
LSAgICB2b2lkIHNldFVwVmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQzRCAmdXBWZWN0b3IpIHsgbV91
cFZlY3RvciA9IHVwVmVjdG9yOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiB1cFZlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdXBWZWN0b3I7IH0KKyAgICB2b2lkIHNldFVwVmVjdG9yKGNvbnN0
IEdyYXBoaWNzUG9pbnQzRCAmdXBWZWN0b3IpIHsgbV91cFZlY3RvciA9IHVwVmVjdG9yOyB9Cisg
ICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiB1cFZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXBW
ZWN0b3I7IH0KIAogICAgIC8vIFZlbG9jaXR5Ci0gICAgdm9pZCBzZXRWZWxvY2l0eShkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB6KSB7IHNldFZlbG9jaXR5KEZsb2F0UG9pbnQzRCh4LCB5LCB6
KSk7IH0KLSAgICB2b2lkIHNldFZlbG9jaXR5KGNvbnN0IEZsb2F0UG9pbnQzRCAmdmVsb2NpdHkp
IHsgbV92ZWxvY2l0eSA9IHZlbG9jaXR5OyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiB2ZWxv
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0KKyAgICB2b2lkIHNldFZlbG9jaXR5
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgc2V0VmVsb2NpdHkoR3JhcGhpY3NQb2lu
dDNEKHgsIHksIHopKTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHkoY29uc3QgR3JhcGhpY3NQb2lu
dDNEICZ2ZWxvY2l0eSkgeyBtX3ZlbG9jaXR5ID0gdmVsb2NpdHk7IH0KKyAgICBjb25zdCBHcmFw
aGljc1BvaW50M0QmIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQogCiAg
ICAgLy8gRG9wcGxlciBmYWN0b3IKICAgICB2b2lkIHNldERvcHBsZXJGYWN0b3IoZG91YmxlIGRv
cHBsZXJGYWN0b3IpIHsgbV9kb3BwbGVyRmFjdG9yID0gZG9wcGxlckZhY3RvcjsgfQpAQCAtNzks
MTEgKzc5LDExIEBACiAgICAgQXVkaW9MaXN0ZW5lcigpOwogCiAgICAgLy8gUG9zaXRpb24gLyBP
cmllbnRhdGlvbgotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQz
RCBtX29yaWVudGF0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX3VwVmVjdG9yOworICAgIEdyYXBo
aWNzUG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX29yaWVudGF0aW9u
OworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3VwVmVjdG9yOwogCi0gICAgRmxvYXRQb2ludDNEIG1f
dmVsb2NpdHk7CisgICAgR3JhcGhpY3NQb2ludDNEIG1fdmVsb2NpdHk7CiAKICAgICBkb3VibGUg
bV9kb3BwbGVyRmFjdG9yOwogICAgIGRvdWJsZSBtX3NwZWVkT2ZTb3VuZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1
NCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1TdWJtaXNz
aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTMyNjIsOCArMzI2Miw4IEBACiAgICAgLy8g
c3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgcGFnZS4gV2UgY2FuIG9ubHkgcmVzaXplIHRoZSB3aW5k
b3csIHNvCiAgICAgLy8gYWRqdXN0IGZvciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3aW5k
b3cgc2l6ZSBhbmQgdGhlIHBhZ2Ugc2l6ZS4KIAotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0ID0g
cGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKLSAgICBGbG9hdFNpemUgcGFnZVNpemUgPSBw
YWdlLT5jaHJvbWUoKS0+cGFnZVJlY3QoKS5zaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IHdpbmRv
d1JlY3QgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzU2l6ZSBw
YWdlU2l6ZSA9IHBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgpLnNpemUoKTsKICAgICBpZiAoZmVh
dHVyZXMueFNldCkKICAgICAgICAgd2luZG93UmVjdC5zZXRYKGZlYXR1cmVzLngpOwogICAgIGlm
IChmZWF0dXJlcy55U2V0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5o
IgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKQEAgLTg5LDEwICs4OSwxMCBA
QAogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKSB7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3
aW5kb3dSZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNz
UmVjdCB3aW5kb3dSZWN0KCkgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0
dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAK
ICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCkgeyByZXR1cm4gMS5mOyB9CiAKQEAgLTUx
Nyw3ICs1MTcsNyBAQAogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0
dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICNpZiBVU0UoQVVUT0NPUlJFQ1RJT05fUEFO
RUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzaG93
Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBACiAjaW5j
bHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZvY3VzRGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPgpAQCAtMjEwMiwxMiArMjEw
MiwxMiBAQAogICAgIGlzUmVzaXphYmxlID0gbV91aUNsaWVudC5pc1Jlc2l6YWJsZSh0aGlzKTsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0IEZsb2F0UmVjdCYg
bmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0V2luZG93RnJhbWUoY29uc3Qg
R3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBtX3VpQ2xpZW50LnNldFdpbmRv
d0ZyYW1lKHRoaXMsIG1fcGFnZUNsaWVudC0+Y29udmVydFRvRGV2aWNlU3BhY2UobmV3V2luZG93
RnJhbWUpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFdpbmRvd0ZyYW1lKEZsb2F0UmVj
dCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoR3Jh
cGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBuZXdXaW5kb3dGcmFtZSA9IG1fcGFn
ZUNsaWVudC0+Y29udmVydFRvVXNlclNwYWNlKG1fdWlDbGllbnQud2luZG93RnJhbWUodGhpcykp
OwogfQpAQCAtMjMyNyw3ICsyMzI3LDcgQEAKICAgICBtX2ZpbmRDbGllbnQuZGlkQ291bnRTdHJp
bmdNYXRjaGVzKHRoaXMsIHN0cmluZywgbWF0Y2hDb3VudCk7CiB9CiAKLXZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRGaW5kSW5kaWNhdG9yKGNvbnN0IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVj
dGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRl
bnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KQordm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRJ
bmRpY2F0b3IoY29uc3QgR3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlcywgY29uc3QgVmVjdG9yPEdyYXBoaWNzUmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVj
dENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdl
SGFuZGxlLCBib29sIGZhZGVPdXQpCiB7CiAgICAgUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGZpbmRJ
bmRpY2F0b3IgPSBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMsIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb250ZW50SW1h
Z2VIYW5kbGUpOwogICAgIG1fcGFnZUNsaWVudC0+c2V0RmluZEluZGljYXRvcihmaW5kSW5kaWNh
dG9yLnJlbGVhc2UoKSwgZmFkZU91dCk7CkBAIC0yNjgyLDggKzI2ODIsOCBAQAogewogICAgIEFT
U0VSVChjYW5Db2FsZXNjZShhLCBiKSk7CiAKLSAgICBGbG9hdFNpemUgbWVyZ2VkRGVsdGEgPSBh
LmRlbHRhKCkgKyBiLmRlbHRhKCk7Ci0gICAgRmxvYXRTaXplIG1lcmdlZFdoZWVsVGlja3MgPSBh
LndoZWVsVGlja3MoKSArIGIud2hlZWxUaWNrcygpOworICAgIEdyYXBoaWNzU2l6ZSBtZXJnZWRE
ZWx0YSA9IGEuZGVsdGEoKSArIGIuZGVsdGEoKTsKKyAgICBHcmFwaGljc1NpemUgbWVyZ2VkV2hl
ZWxUaWNrcyA9IGEud2hlZWxUaWNrcygpICsgYi53aGVlbFRpY2tzKCk7CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBiLnBvc2l0
aW9uKCksIGIuZ2xvYmFsUG9zaXRpb24oKSwgbWVyZ2VkRGVsdGEsIG1lcmdlZFdoZWVsVGlja3Ms
IGIuZ3JhbnVsYXJpdHkoKSwgYi5waGFzZSgpLCBiLm1vbWVudHVtUGhhc2UoKSwgYi5oYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzKCksIGIubW9kaWZpZXJzKCksIGIudGltZXN0YW1wKCkpOwpAQCAt
MzE0NCwxMiArMzE0NCwxMiBAQAogICAgIHJldHVybiBtX3VpQ2xpZW50LmZvb3RlckhlaWdodCh0
aGlzLCBmcmFtZSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIG1fdWlDbGllbnQuZHJhd0hlYWRlcih0aGlzLCBmcmFtZSwgcmVjdCk7CiB9CiAK
LXZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd0Zvb3RlcihXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fdWlDbGll
bnQuZHJhd0Zvb3Rlcih0aGlzLCBmcmFtZSwgcmVjdCk7CiB9CkBAIC0zMzI4LDcgKzMzMjgsNyBA
QAogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBXZWJQ
YWdlUHJveHk6OnNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYlBhZ2VQcm94
eTo6c2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKICAgICBtX3BhZ2VDbGllbnQt
PnNob3dDb3JyZWN0aW9uUGFuZWwoKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSlwYW5l
bFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJlcGxh
Y2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1Jl
ZlB0cjxGaW5kSW5kaWNhdG9yPiBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKQorUGFzc1JlZlB0cjxGaW5kSW5kaWNh
dG9yPiBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgR3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEdyYXBoaWNzUmVjdD4mIHRleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgY29udGVudEltYWdlSGFuZGxlKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGNvbnRlbnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRs
ZSk7CiAgICAgaWYgKCFjb250ZW50SW1hZ2UpCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGaW5kSW5kaWNhdG9yKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzLCB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29udGVudEltYWdlLnJl
bGVhc2UoKSkpOwogfQogCi1GaW5kSW5kaWNhdG9yOjpGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGlu
YXRlcywgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZSkKK0ZpbmRJbmRp
Y2F0b3I6OkZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNz
UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKQogICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcyhzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykKICAgICAsIG1f
dGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25S
ZWN0Q29vcmRpbmF0ZXMpCiAgICAgLCBtX2NvbnRlbnRJbWFnZShjb250ZW50SW1hZ2UpCkBAIC05
OCwxOCArOTgsMTggQEAKIHsKIH0KIAotc3RhdGljIEZsb2F0UmVjdCBpbmZsYXRlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVYLCBmbG9hdCBpbmZsYXRlWSkKK3N0YXRp
YyBHcmFwaGljc1JlY3QgaW5mbGF0ZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBmbG9h
dCBpbmZsYXRlWCwgZmxvYXQgaW5mbGF0ZVkpCiB7Ci0gICAgRmxvYXRSZWN0IGluZmxhdGVkUmVj
dCA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGluZmxhdGVkUmVjdCA9IHJlY3Q7CiAgICAgaW5m
bGF0ZWRSZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKICAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVko
aW5mbGF0ZVkpOwogICAgIAogICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7CiB9CiAKLUZsb2F0UmVj
dCBGaW5kSW5kaWNhdG9yOjpmcmFtZVJlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IEZpbmRJbmRp
Y2F0b3I6OmZyYW1lUmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtX3NlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLngoKSAtIGxlZnRCb3JkZXJUaGlja25lc3MsIG1f
c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueSgpIC0gdG9wQm9yZGVyVGhpY2tuZXNz
LAorICAgIHJldHVybiBHcmFwaGljc1JlY3QobV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlcy54KCkgLSBsZWZ0Qm9yZGVyVGhpY2tuZXNzLCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nv
b3JkaW5hdGVzLnkoKSAtIHRvcEJvcmRlclRoaWNrbmVzcywKICAgICAgICAgICAgICAgICAgICAg
IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMud2lkdGgoKSArIHJpZ2h0Qm9yZGVy
VGhpY2tuZXNzICsgbGVmdEJvcmRlclRoaWNrbmVzcywKICAgICAgICAgICAgICAgICAgICAgIG1f
c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMuaGVpZ2h0KCkgKyB0b3BCb3JkZXJUaGlj
a25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25lc3MpOwogfQpAQCAtMTM0LDEwICsxMzQsMTAgQEAK
ICAgICByZXR1cm4gQ29sb3IoZ3JhZGllbnREYXJrUmVkLCBncmFkaWVudERhcmtHcmVlbiwgZ3Jh
ZGllbnREYXJrQmx1ZSwgZ3JhZGllbnREYXJrQWxwaGEpOwogfQogCi1zdGF0aWMgUGF0aCBwYXRo
V2l0aFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGF0aFJlY3QsIGZsb2F0IHJhZGl1cykK
K3N0YXRpYyBQYXRoIHBhdGhXaXRoUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBwYXRo
UmVjdCwgZmxvYXQgcmFkaXVzKQogewogICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHBhdGhSZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKKyAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHBhdGhSZWN0LCBHcmFwaGljc1NpemUocmFkaXVzLCByYWRpdXMpKTsKIAog
ICAgIHJldHVybiBwYXRoOwogfQpAQCAtMTQ1LDE1ICsxNDUsMTUgQEAKIHZvaWQgRmluZEluZGlj
YXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0UmVjdHNJ
blNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5zaXplKCk7ICsraSkgewotICAgICAgICBGbG9hdFJl
Y3QgdGV4dFJlY3QgPSBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzW2ldOwor
ICAgICAgICBHcmFwaGljc1JlY3QgdGV4dFJlY3QgPSBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVj
dENvb3JkaW5hdGVzW2ldOwogICAgICAgICB0ZXh0UmVjdC5tb3ZlKGxlZnRCb3JkZXJUaGlja25l
c3MsIHRvcEJvcmRlclRoaWNrbmVzcyk7CiAKLSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJl
Y3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdo
dEJvcmRlciwgdmVydGljYWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIpOwotICAgICAgICBG
bG9hdFJlY3QgaW5uZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9udGFs
UGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRl
cik7CisgICAgICAgIEdyYXBoaWNzUmVjdCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4
dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0
c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGlubmVyUGF0
aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdo
dEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwogCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNp
emUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRv
d0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFk
b3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7CiAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGxpZ2h0Qm9yZGVyQ29sb3IoKSwgQ29sb3JT
cGFjZURldmljZVJHQik7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0
aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKICAgICAgICAg
fQpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhSb3VuZGVkUmVjdChpbm5lclBhdGhSZWN0LCBj
b3JuZXJSYWRpdXMpKTsKLSAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBH
cmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJl
Y3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC5tYXhZ
KCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6
Y3JlYXRlKEdyYXBoaWNzUG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgp
KSwgR3JhcGhpY3NQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC5tYXhZKCkp
KTsKICAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMCwgZ3JhZGllbnRMaWdodENv
bG9yKCkpOwogICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLCBncmFkaWVudERh
cmtDb2xvcigpKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsR3JhZGllbnQo
Z3JhZGllbnQpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAKICAgICAgICAgewogICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0g
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKEZsb2F0U2l6ZShyb3VuZGYobGVm
dEJvcmRlclRoaWNrbmVzcyksIHJvdW5kZih0b3BCb3JkZXJUaGlja25lc3MpKSk7CisgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKEdyYXBoaWNzU2l6ZShyb3VuZGYobGVmdEJv
cmRlclRoaWNrbmVzcyksIHJvdW5kZih0b3BCb3JkZXJUaGlja25lc3MpKSk7CiAgICAgICAgICAg
ICBtX2NvbnRlbnRJbWFnZS0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBJbnRQb2ludCgwLCAwKSwg
bV9jb250ZW50SW1hZ2UtPmJvdW5kcygpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVs
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBACiAgICAgZGlzbWlzc0ludGVybmFs
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBmYWxzZSk7CiB9CiAK
LXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmlldywgQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNl
bWVudFN0cmluZ3MpCit2b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhXS1ZpZXcqIHZpZXcsIENv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIGRpc21pc3NJbnRlcm5hbChSZWFz
b25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFsc2UpOwogICAgIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0J
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgsNyBAQAogICAgIG1fcGFn
ZUNsaWVudC0+c2V0RHJhZ0ltYWdlKGNsaWVudFBvc2l0aW9uLCBkcmFnSW1hZ2UucmVsZWFzZSgp
LCBpc0xpbmtEcmFnKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0JKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW1wb3J0IDxDYXJi
b24vQ2FyYm9uLmg+IC8vIEZvciBTZXRTeXN0ZW1VSU1vZGUoKQogI2ltcG9ydCA8SU9LaXQvcHdy
X21ndC9JT1BNTGliLmg+IC8vIEZvciBJT1BNQXNzZXJ0aW9uQ3JlYXRlKCkKICNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3Qu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJOU1dpbmRvd0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViS2l0
U3lzdGVtSW50ZXJmYWNlLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0Nv
cnJlY3Rpb25QYW5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvQ29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNyBAQAogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3JyZWN0aW9u
UGFuZWwoKTsKLSAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZS
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVw
bGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICBTdHJpbmcgZGlzbWlzcyhXZWJDb3Jl
OjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICBzdGF0aWMgdm9pZCBy
ZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdLVmlldyosIE5TQ29ycmVjdGlvblJlc3BvbnNl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDgg
Kzc3LDggQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dElucHV0U3RhdGUoYm9vbCB1cGRh
dGVTZWN1cmVJbnB1dFN0YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUZXh0SW5wdXRTdGF0
ZSgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9h
dFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVu
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICAKQEAgLTExNCw3ICsxMTQsNyBAQAogICAg
IHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBTdHJpbmcmLCBk
b3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25hcnlQb3B1cEluZm8mKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogCi0gICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRT
dHJpbmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWwpOwogICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdl
YkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6
QXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYz
LDcgKzYzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUv
S2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4K
QEAgLTI0OTAsNyArMjQ5MCw3IEBACiAgICAgdGhlUG9pbnQgPSBbW3NlbGYgd2luZG93XSBjb252
ZXJ0U2NyZWVuVG9CYXNlOnRoZVBvaW50XTsKICAgICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQ
b2ludDp0aGVQb2ludCBmcm9tVmlldzpuaWxdOwogCi0gICAgX2RhdGEtPl9wYWdlLT5wZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oRmxvYXRQb2ludCh0aGVQb2ludC54LCB0aGVQb2lu
dC55KSk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oR3JhcGhpY3NQb2ludCh0aGVQb2ludC54LCB0aGVQb2ludC55KSk7CiB9CiAKIC0gKE5TSW50
ZWdlcilzcGVsbENoZWNrZXJEb2N1bWVudFRhZwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJv
eHkuaCIKICNpbXBvcnQgIldlYlBvcHVwTWVudVByb3h5TWFjLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0N1cnNvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tl
eWJvYXJkRXZlbnQuaD4KQEAgLTI2OSwxMiArMjY5LDEyIEBACiAgICAgW21fd2tWaWV3IF9yZXNl
dFRleHRJbnB1dFN0YXRlXTsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitHcmFwaGljc1JlY3QgUGFnZUNs
aWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKIH0K
IAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIHJldHVybiBbbV93a1ZpZXcg
X2NvbnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKIH0KQEAgLTQyNCw3ICs0MjQsNyBAQAogI2VuZGlm
CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlv
blBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93Q29ycmVjdGlvblBh
bmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBpZiAoIWlzVmlld1Zpc2libGUoKSB8fCAhaXNWaWV3
SW5XaW5kb3coKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgY2xhc3MgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3Vyc29yOwogICAgIGNsYXNzIERyYWdEYXRhOwot
ICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xhc3Mg
SW50U2l6ZTsKICAgICBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiAgICAgc3RydWN0IFRleHRDaGVj
a2luZ1Jlc3VsdDsKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgIHZvaWQgaGlkZUZpbmRVSSgpOwog
ICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1
bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhj
b25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKLSAgICB2b2lkIHNldEZpbmRJbmRp
Y2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29y
ZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29u
dGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpOworICAgIHZvaWQgc2V0RmluZEluZGljYXRv
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBj
b250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCk7CiAgICAgdm9pZCBkaWRGaW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwogICAgIHZvaWQgZGlkRmFpbFRv
RmluZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICNpZiBQTEFURk9STShXSU4pCkBAIC00MzQsMTIg
KzQzNCwxMiBAQAogCiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKICAg
ICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRl
cihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBk
cmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAg
ICB2b2lkIGRyYXdIZWFkZXIoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0Jik7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gRGljdGlvbmFy
eS4KLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYpOwogI2VuZGlmCiAKICAgICB2b2lk
IHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBXZWJGcmFtZVBy
b3h5KiwgdWludDY0X3QgbGlzdGVuZXJJRCk7CkBAIC02MzIsOCArNjMyLDggQEAKICAgICB2b2lk
IGdldFN0YXR1c0JhcklzVmlzaWJsZShib29sJiBzdGF0dXNCYXJJc1Zpc2libGUpOwogICAgIHZv
aWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7CiAgICAgdm9pZCBnZXRJc1Jlc2l6
YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBzZXRXaW5kb3dGcmFtZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGdldFdpbmRvd0ZyYW1lKFdlYkNvcmU6OkZs
b2F0UmVjdCYpOworICAgIHZvaWQgc2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NSZWN0Jik7CisgICAgdm9pZCBnZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
KTsKICAgICB2b2lkIHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3Jl
ZW5Qb2ludCwgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKICAgICB2b2lkIHdpbmRv
d1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdSZWN0LCBXZWJDb3JlOjpJbnRS
ZWN0JiByZXN1bHQpOwogICAgIHZvaWQgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3QgZnJhbWVJRCwgYm9vbCYgc2hvdWxkQ2xvc2UpOwpA
QCAtNzY5LDcgKzc2OSw3IEBACiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgc3Vic3RpdHV0
aW9uc1BhbmVsSXNTaG93aW5nKGJvb2wmKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9X
X0xFT1BBUkQpCi0gICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KTsKKyAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwog
ICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHJlYXNvbik7CiAgICAgdm9p
ZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgU3RyaW5nJiByZXN1
bHQpOwogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShpbnQzMl90IHJlc3Bv
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
NTAsOCArNTAsOCBAQAogICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChib29sIHN0YXR1
c0JhcklzVmlzaWJsZSkKICAgICBTZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxlKQogICAg
IEdldElzUmVzaXphYmxlKCkgLT4gKGJvb2wgaXNSZXNpemFibGUpCi0gICAgU2V0V2luZG93RnJh
bWUoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRvd0ZyYW1lKCkg
LT4gKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKKyAgICBTZXRXaW5kb3dGcmFtZShX
ZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93RnJhbWUpCisgICAgR2V0V2luZG93RnJhbWUoKSAt
PiAoV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd0ZyYW1lKQogICAgIFNjcmVlblRvV2luZG93
KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50UG9pbnQgd2lu
ZG93UG9pbnQpCiAgICAgV2luZG93VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCByZWN0KSAtPiAo
V2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkKICAgICBSdW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwoV1RGOjpTdHJpbmcgbWVzc2FnZSwgdWludDY0X3QgZnJhbWVJRCkgLT4gKGJvb2wgc2hv
dWxkQ2xvc2UpCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgICMgRmluZCBtZXNzYWdlcwogICAg
IERpZENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNo
Q291bnQpCi0gICAgU2V0RmluZEluZGljYXRvcihXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9u
UmVjdCwgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KQorICAg
IFNldEZpbmRJbmRpY2F0b3IoV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHNlbGVjdGlvblJlY3QsIFZl
Y3RvcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+IHRleHRSZWN0cywgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCkKICAgICBEaWRG
aW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKICAgICBE
aWRGYWlsVG9GaW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZykKICNpZiBQTEFURk9STShXSU4p
CkBAIC0yNDYsNyArMjQ2LDcgQEAKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgICMgQXV0b2NvcnJlY3Rpb24gbWVzc2Fn
ZXMKLSAgICBTaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBXZWJDb3JlOjpG
bG9hdFJlY3QgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZWRTdHJp
bmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4gYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpCisgICAgU2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVs
VHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
U3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogICAgIERpc21pc3NDb3JyZWN0
aW9uUGFuZWwoaW50MzJfdCByZWFzb24pCiAgICAgRGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24o
aW50MzJfdCByZWFzb24pIC0+IChTdHJpbmcgcmVzdWx0KQogICAgIFJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIFN0cmluZyByZXBsYWNlZFN0cmluZywg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlVJQ2xpZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAj
aW5jbHVkZSAiV2ViTnVtYmVyLmgiCiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICBtX2NsaWVudC5z
ZXRJc1Jlc2l6YWJsZSh0b0FQSShwYWdlKSwgcmVzaXphYmxlLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKIH0KIAotdm9pZCBXZWJVSUNsaWVudDo6c2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiBw
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKQordm9pZCBXZWJVSUNsaWVudDo6c2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBHcmFwaGljc1JlY3QmIGZyYW1lKQogewog
ICAgIGlmICghbV9jbGllbnQuc2V0V2luZG93RnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTI1
MiwxMiArMjUyLDEyIEBACiAgICAgbV9jbGllbnQuc2V0V2luZG93RnJhbWUodG9BUEkocGFnZSks
IHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLUZsb2F0UmVjdCBXZWJV
SUNsaWVudDo6d2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlKQorR3JhcGhpY3NSZWN0IFdl
YlVJQ2xpZW50Ojp3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UpCiB7CiAgICAgaWYgKCFt
X2NsaWVudC5nZXRXaW5kb3dGcmFtZSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAg
ICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKLSAgICByZXR1cm4gdG9GbG9hdFJlY3QobV9j
bGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pKTsK
KyAgICByZXR1cm4gdG9HcmFwaGljc1JlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEko
cGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pKTsKIH0KIAogYm9vbCBXZWJVSUNsaWVudDo6Y2Fu
UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QKQEAgLTMzMiw3ICszMzIsNyBAQAog
ICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFnZSksIHRvQVBJKGZyYW1l
KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2ViVUlDbGllbnQ6OmRyYXdIZWFk
ZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJVSUNsaWVudDo6ZHJhd0hlYWRlcihXZWJQYWdl
UHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5kcmF3SGVhZGVyKQogICAgICAgICBy
ZXR1cm47CkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICBtX2NsaWVudC5kcmF3SGVhZGVyKHRvQVBJ
KHBhZ2UpLCB0b0FQSShmcmFtZSksIHRvQVBJKHJlY3QpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsK
IH0KIAotdm9pZCBXZWJVSUNsaWVudDo6ZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdl
YkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IFdlYlVJQ2xpZW50OjpkcmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94
eSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAo
IW1fY2xpZW50LmRyYXdGb290ZXIpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsOCArMTMxLDgg
QEAKICNpZiBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0
cmluZz4mKSA9IDA7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBjb252
ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKSA9IDA7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzUmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50
IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgPSAwOwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgPSAwOwogICAgIApAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgdmlydHVhbCBDR0NvbnRleHRS
ZWYgY29udGFpbmluZ1dpbmRvd0dyYXBoaWNzQ29udGV4dCgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3RyaW5nJiwgZG91YmxlIHNjYWxl
RmFjdG9yLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
aG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5n
cykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNv
cnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
aXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0
aW9uUGFuZWwpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVs
U29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViQ29yZTo6RWRp
dG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsK
ICAgICBjbGFzcyBJbnRTaXplOwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KQEAgLTg0
LDggKzg0LDggQEAKICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBhZ2VQcm94eSopOwogICAgIHZv
aWQgc2V0SXNSZXNpemFibGUoV2ViUGFnZVByb3h5KiwgYm9vbCk7CiAKLSAgICB2b2lkIHNldFdp
bmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkqKTsKKyAgICB2b2lk
IHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCYpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkq
KTsKIAogICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3Q7CiAg
ICAgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViUGFnZVByb3h5KiwgY29uc3Qg
U3RyaW5nJiwgV2ViRnJhbWVQcm94eSopOwpAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgLy8gUHJp
bnRpbmcuCiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0KFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJv
eHkqKTsKICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94
eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5Kiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYlBhZ2VQ
cm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2
b2lkIGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkqLCBX
ZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAgICAgdm9pZCBw
cmludEZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqKTsKIAogICAgIGJvb2wgY2Fu
UnVuTW9kYWwoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5k
aWNhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRp
Y2F0b3IuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmlu
ZEluZGljYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEZp
bmRJbmRpY2F0b3JfaAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUmVjdC5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00MCwyMyArNDAsMjMgQEAKIAogY2xhc3MgRmlu
ZEluZGljYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbmRJbmRpY2F0b3I+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5h
dGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENv
b3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFu
ZGxlKTsKICAgICB+RmluZEluZGljYXRvcigpOwogCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNl
bGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFt
ZVJlY3QoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzOyB9CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGZyYW1lUmVjdCgpIGNv
bnN0OwogCi0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7IH0K
KyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsgfQogCiAg
ICAgU2hhcmVhYmxlQml0bWFwKiBjb250ZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRJbWFnZS5nZXQoKTsgfQogCiAgICAgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAKIHByaXZhdGU6Ci0gICAg
RmluZEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UpOworICAgIEZpbmRJbmRpY2F0b3IoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29u
dGVudEltYWdlKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NlbGVjdGlvblJlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzOwotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkdyYXBoaWNzUmVjdD4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKICAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2NvbnRlbnRJbWFnZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICBpZiAoIXBhZ2VIZWlnaHRJblBpeGVscykKICAgICAg
ICAgcGFnZUhlaWdodEluUGl4ZWxzID0gY29yZUZyYW1lLT52aWV3KCktPmhlaWdodCgpOwogCi0g
ICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEZsb2F0U2l6
ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFBy
aW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEdyYXBoaWNzU2l6ZShwYWdlV2lk
dGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKIGludCBJbmplY3RlZEJ1bmRs
ZTo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBpZCwgZG91YmxlIHBhZ2VXaWR0aEluUGl4ZWxzLCBkb3VibGUgcGFnZUhlaWdodEluUGl4ZWxz
KQpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgaWYgKCFwYWdlSGVpZ2h0SW5QaXhlbHMpCiAgICAg
ICAgIHBhZ2VIZWlnaHRJblBpeGVscyA9IGNvcmVGcmFtZS0+dmlldygpLT5oZWlnaHQoKTsKIAot
ICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEZs
b2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgcmV0
dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgR3JhcGhpY3NT
aXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIAogU3RyaW5n
IEluamVjdGVkQnVuZGxlOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhXZWJGcmFtZSogZnJh
bWUsIGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwg
aW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlT3ZlcmxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZU92ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAK
IAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0TmVlZHNEaXNwbGF5KFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLUmVjdCByZWN0KQogewotICAgIHRvSW1w
bChidW5kbGVQYWdlT3ZlcmxheVJlZiktPnNldE5lZWRzRGlzcGxheShlbmNsb3NpbmdJbnRSZWN0
KHRvRmxvYXRSZWN0KHJlY3QpKSk7CisgICAgdG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+
c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2luZ0ludFJlY3QodG9HcmFwaGljc1JlY3QocmVjdCkpKTsK
IH0KIAogZmxvYXQgV0tCdW5kbGVQYWdlT3ZlcmxheUZyYWN0aW9uRmFkZWRJbihXS0J1bmRsZVBh
Z2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VPdmVybGF5UmVmKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFj
L05ldHNjYXBlUGx1Z2luTWFjLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIGRvdWJsZSBzb3VyY2VYSW5TY3Jl
ZW5TcGFjZTsKICAgICBkb3VibGUgc291cmNlWUluU2NyZWVuU3BhY2U7CiAKLSAgICBGbG9hdFBv
aW50IHNvdXJjZUluU2NyZWVuU3BhY2U7CisgICAgR3JhcGhpY3NQb2ludCBzb3VyY2VJblNjcmVl
blNwYWNlOwogICAgIHN3aXRjaCAoc291cmNlU3BhY2UpIHsKICAgICBjYXNlIE5QQ29vcmRpbmF0
ZVNwYWNlUGx1Z2luOgogICAgICAgICBzb3VyY2VYSW5TY3JlZW5TcGFjZSA9IHNvdXJjZVggKyBt
X3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcy54KCkgKyBtX3ZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMueCgpICsgbV9ucFdpbmRvdy54OwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1MiwxMCBA
QAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKTsKICAgICAKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAgICAgCiAgICAgdmlydHVhbCBmbG9hdCBzY2Fs
ZUZhY3RvcigpOwogICAgIApAQCAtMTQ5LDE3ICsxNDksMTcgQEAKIAogICAgIHZpcnR1YWwgdm9p
ZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogICAgIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRv
bWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSosIGNvbnN0
IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJveFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGluZVJlY3QsCisgICAgdmlydHVhbCBXZWJD
b3JlOjpHcmFwaGljc1JlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChXZWJDb3JlOjpOb2RlKiwgY29u
c3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYg
bGluZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChXZWJDb3Jl
OjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBsaW5lUmVj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiZWhpbmRUZXh0
LCBib29sIGVudGlyZUxpbmUpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXBsYWNl
V2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxvYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBTdHJpbmcmIGdl
bmVyYXRlZEZpbGVuYW1lKTsKICAgICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0ZVJlcGxhY2VtZW50
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEN1
c3RvbVNjcm9sbGJhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSwgCisgICAgdmlydHVhbCBi
b29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYsIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFy
Q29udHJvbFN0YXRlLCBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0LCBib29sIHZl
cnRpY2FsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1
ZSwgZmxvYXQgcHJvcG9ydGlvbiwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9t
T3ZlcmhhbmdBcmVhKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJFZGl0b3JDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCShyZXZpc2lvbiA5
MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3IEBACiB9
CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBh
bmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewog
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29ycmVjdGlvblBh
bmVsKHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJl
cGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk1LDI0ICs5NSwyNCBAQAogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lk
IFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHdpbmRvd0Zy
YW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiB3aW5kb3dGcmFtZSkKIHsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2V0V2luZG93RnJhbWUod2luZG93RnJhbWUpKTsKIH0KIAotRmxvYXRSZWN0IFdlYkNo
cm9tZUNsaWVudDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21lQ2xpZW50Ojp3
aW5kb3dSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgbmV3V2luZG93RnJhbWU7CisgICAgR3JhcGhp
Y3NSZWN0IG5ld1dpbmRvd0ZyYW1lOwogCiAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRvd0Zy
YW1lKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRvd0ZyYW1lOjpSZXBseShuZXdX
aW5kb3dGcmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIHJldHVybiBuZXdXaW5k
b3dGcmFtZTsKIH0KIAotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQorR3Jh
cGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQogewotICAgIHJldHVybiBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBtX3BhZ2UtPnNpemUoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdChHcmFwaGljc1BvaW50KCksIG1fcGFnZS0+c2l6ZSgpKTsKIH0KIAogZmxvYXQgV2ViQ2hy
b21lQ2xpZW50OjpzY2FsZUZhY3RvcigpCkBAIC01NTksMTMgKzU1OSwxMyBAQAogewogfQogCi1G
bG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUqLCBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3QpCitHcmFwaGlj
c1JlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUqLCBjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGluZVJlY3QpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdCgpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdo
bGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBi
b3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJlaGluZFRleHQsIGJvb2wg
ZW50aXJlTGluZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNTgyLDcgKzU4Miw3IEBA
CiAgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVVSUNsaWVudCgpLmdlbmVyYXRlRmls
ZUZvclVwbG9hZChtX3BhZ2UsIHBhdGgpOwogfQogCi1ib29sIFdlYkNocm9tZUNsaWVudDo6cGFp
bnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUsIAorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Ny
b2xsYmFyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNjcm9sbGJhckNv
bnRyb2xTaXplLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Y3JvbGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQsIGJvb2wgdmVy
dGljYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
dmFsdWUsIGZsb2F0IHByb3BvcnRpb24sIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzaykKIHsKQEAg
LTU5MCw3ICs1OTAsNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJDaHJvbWVD
bGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYpCitib29sIFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNrZXIq
LCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25zdCBXVEY6OlN0cmluZyYp
OwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJE
KQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVs
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29y
cmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQAogCiAjaWYgUExBVEZPUk0oTUFD
KQogICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgotICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQorICAgIFBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpHcmFwaGljc1BvaW50IHBvaW50KQogI2VuZGlm
CiAKICAgICBQcmVmZXJlbmNlc0RpZENoYW5nZShXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUg
c3RvcmUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQ0LDcgKzY0NCw3IEBACiAgICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKCk7CiAKICAg
ICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBjcmVhdGVHcmFwaGlj
c0NvbnRleHQoYml0bWFwLmdldCgpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZShtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCksIG1fd2ViUGFnZS0+dXNlclNw
YWNlU2NhbGVGYWN0b3IoKSkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoR3JhcGhpY3NT
aXplKG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKSwgbV93ZWJQYWdlLT51c2VyU3Bh
Y2VTY2FsZUZhY3RvcigpKSk7CiAKICAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBi
b3VuZHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTQsNyArOTE0LDcgQEAKICAg
ICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKICAgICAKICAgICBpZiAoc2NhbGUpCi0gICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3Rv
cikpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShzY2FsZUZh
Y3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICAKICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0
ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgZnJhbWVWaWV3LT5wYWludENvbnRlbnRzKGdy
YXBoaWNzQ29udGV4dC5nZXQoKSwgcmVjdCk7CkBAIC0yMjgyLDcgKzIyODIsNyBAQAogICAgIG1f
cHJpbnRDb250ZXh0LT5iZWdpbihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJ
bmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KTsKIAogICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0Owot
ICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKEZsb2F0UmVjdCgwLCAwLCBwcmlu
dEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0
KSwgMCwgMCwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yLCBmdWxsUGFnZUhlaWdodCwg
dHJ1ZSk7CisgICAgbV9wcmludENvbnRleHQtPmNvbXB1dGVQYWdlUmVjdHMoR3JhcGhpY3NSZWN0
KDAsIDAsIHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxl
UGFwZXJIZWlnaHQpLCAwLCAwLCBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3IsIGZ1bGxQ
YWdlSGVpZ2h0LCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjplbmRQcmludGluZygpCkBAIC0y
Mjk5LDcgKzIyOTksNyBAQAogCiAgICAgaWYgKG1fcHJpbnRDb250ZXh0KSB7CiAgICAgICAgIHJl
c3VsdFBhZ2VSZWN0cyA9IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdHMoKTsKLSAgICAgICAgcmVz
dWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0gbV9wcmludENvbnRleHQtPmNvbXB1dGVB
dXRvbWF0aWNTY2FsZUZhY3RvcihGbG9hdFNpemUocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lk
dGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpICogcHJpbnRJbmZvLnBhZ2VTZXR1
cFNjYWxlRmFjdG9yOworICAgICAgICByZXN1bHRUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcg
PSBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yKEdyYXBoaWNzU2l6
ZShwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVy
SGVpZ2h0KSkgKiBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3I7CiAgICAgfQogCiAgICAg
Ly8gSWYgd2UncmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBhY3R1YWxseSBwcmludCBhdCBs
ZWFzdCBhIGJsYW5rIHBhZ2UuCkBAIC0yMzMwLDcgKzIzMzAsNyBAQAogICAgICAgICBDR1BERkNv
bnRleHRCZWdpblBhZ2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBjdHgoY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIGN0eC5zY2FsZShG
bG9hdFNpemUoMSwgLTEpKTsKKyAgICAgICAgY3R4LnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkp
OwogICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1yZWN0LmhlaWdodCgpKTsKICAgICAgICAgbV9w
cmludENvbnRleHQtPnNwb29sUmVjdChjdHgsIHJlY3QpOwogCkBAIC0yMzY2LDcgKzIzNjYsNyBA
QAogICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQuZ2V0KCksIHBhZ2VJ
bmZvLmdldCgpKTsKIAogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGN0eChjb250ZXh0Lmdl
dCgpKTsKLSAgICAgICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAgICAg
ICAgIGN0eC5zY2FsZShHcmFwaGljc1NpemUoMSwgLTEpKTsKICAgICAgICAgICAgIGN0eC50cmFu
c2xhdGUoMCwgLW1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdlKS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRl
eHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgcmV0dXJuIGlzUG9zaXRp
b25JblJhbmdlKHBvc2l0aW9uLCBzZWxlY3RlZFJhbmdlLmdldCgpKTsKIH0KIAotdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYg
ZmxvYXRQb2ludCkKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZsb2F0UG9pbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNTI5LDcgKzUyOSw3
IEBACiAgICAgaWYgKCFmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+
IHF1YWRzOwogICAgIHJhbmdlLT50ZXh0UXVhZHMocXVhZHMpOwogICAgIGlmIChxdWFkcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzOCw3ICs1MzgsNyBAQAogICAgIAogICAgIERp
Y3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICBkaWN0aW9uYXJ5UG9w
dXBJbmZvLnR5cGUgPSB0eXBlOwotICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gRmxv
YXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpKTsKKyAgICBkaWN0aW9uYXJ5UG9w
dXBJbmZvLm9yaWdpbiA9IEdyYXBoaWNzUG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0Lnko
KSk7CiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5mb250SW5mby5mb250QXR0cmlidXRlRGljdGlv
bmFyeSA9IGZvbnREZXNjcmlwdG9yQXR0cmlidXRlczsKICNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gKENGRGlj
dGlvbmFyeVJlZilvcHRpb25zOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIC8vIFdlIHdhbnQgdGhlIHNlbGVjdGlv
biByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcy4KICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzID0gc2VsZWN0ZWRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHNlbGVjdGlvblJlY3QpOwogICAgIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0
czsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0ZXh0UmVjdHM7CiAgICAgc2VsZWN0ZWRGcmFt
ZS0+c2VsZWN0aW9uKCktPmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXModGV4dFJlY3Rz
KTsKIAogICAgIC8vIENyZWF0ZSBhIGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50IHRoZSBmaW5kIGlu
ZGljYXRvciB0ZXh0IGludG8gaXQuCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgdGV4dCByZWN0cyBpbiBzZWxlY3Rpb24gcmVj
dCBjb29yZGluYXRlcy4KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlv
blJlY3RDb29yZGluYXRlczsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0ZXh0UmVjdHNJblNl
bGVjdGlvblJlY3RDb29yZGluYXRlczsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRleHRSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBJbnRSZWN0IHRleHRSZWN0SW5TZWxl
Y3Rpb25SZWN0Q29vcmRpbmF0ZXMgPSBzZWxlY3RlZEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdHNbaV0pKTsKQEAgLTIxOSw3ICsyMTksNyBA
QAogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEZpbmRJbmRp
Y2F0b3IoRmxvYXRSZWN0KCksIFZlY3RvcjxGbG9hdFJlY3Q+KCksIGhhbmRsZSwgZmFsc2UpKTsK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RmluZEluZGlj
YXRvcihHcmFwaGljc1JlY3QoKSwgVmVjdG9yPEdyYXBoaWNzUmVjdD4oKSwgaGFuZGxlLCBmYWxz
ZSkpOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZhbHNlOwogfQogCkBAIC0zMDIs
NyArMzAyLDcgQEAKICAgICB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRT
aGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVy
UmFkaXVzLCBob2xlU2hhZG93Q29sb3IoZnJhY3Rpb25GYWRlZEluKSwgQ29sb3JTcGFjZVNSR0Ip
OworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEdyYXBoaWNzU2l6ZShzaGFkb3dP
ZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgaG9sZVNoYWRvd0NvbG9y
KGZyYWN0aW9uRmFkZWRJbiksIENvbG9yU3BhY2VTUkdCKTsKICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldEZpbGxDb2xvcihob2xlRmlsbENvbG9yKGZyYWN0aW9uRmFkZWRJbiksIENvbG9yU3Bh
Y2VTUkdCKTsKIAogICAgICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVz
LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhv
c3RDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2NhL0xheWVyVHJlZUhvc3RDQS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMywxNiArMTMzLDE2IEBACiAKICAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2Vz
IG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxh
eSBpcyBuZWVkZWQKICAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBG
bG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwor
ICAgIEdyYXBoaWNzU2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
aXplKCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUp
OwogCiAgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAg
ICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWln
aHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAw
LCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgICAgICBm
bG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG5ld1NpemUu
aGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoR3JhcGhpY3NSZWN0KG9sZFNpemUud2lk
dGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKICAg
ICB9CiAKICAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZs
b2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVp
Z2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEdyYXBoaWNzUmVjdCgwLCBvbGRTaXplLmhl
aWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdo
dCgpKSk7CiAKICAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQogICAgICAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIwLDcg
KzUyMCw3IEBACiAgICAgdm9pZCBzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmlu
ZyYpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpHcmFwaGljc1BvaW50
Jik7CiAgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKERpY3Rpb25hcnlQ
b3B1cEluZm86OlR5cGUsIFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6UmFuZ2UqLCBOU0RpY3Rp
b25hcnkgKm9wdGlvbnMpOwogCiAgICAgdm9pZCBzZXRXaW5kb3dJc1Zpc2libGUoYm9vbCB3aW5k
b3dJc1Zpc2libGUpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNz
YWdlcy5weQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAg
ICAnV2ViQ29yZTo6QW5pbWF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6OkVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQnLAogICAgICAgICAnV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnLAot
ICAgICAgICAnV2ViQ29yZTo6RmxvYXRQb2ludDNEJywKKyAgICAgICAgJ1dlYkNvcmU6OkdyYXBo
aWNzUG9pbnQzRCcsCiAgICAgICAgICdXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJywKICAgICAgICAg
J1dlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uJywKICAgICAgICAgJ1dlYkNvcmU6
OktleXByZXNzQ29tbWFuZCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2
ZW50RmFjdG9yeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dl
YkV2ZW50RmFjdG9yeS5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA5Nyw3ICsxMDk3
LDcgQEAKICAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyAgICAgICAgICAgPSBtb2Rp
ZmllcnNGb3JFdmVudChldmVudCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAgICAgICAg
ICAgICAgICAgID0gW2V2ZW50IHRpbWVzdGFtcF07CiAgICAgCi0gICAgcmV0dXJuIFdlYldoZWVs
RXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBJbnRQb2ludChwb3NpdGlvbiksIEludFBvaW50KGdsb2Jh
bFBvc2l0aW9uKSwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdoZWVsVGlj
a3NYLCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBwaGFzZSwgbW9tZW50dW1QaGFzZSwgaGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworICAgIHJldHVy
biBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgSW50UG9pbnQocG9zaXRpb24pLCBJbnRQ
b2ludChnbG9iYWxQb3NpdGlvbiksIEdyYXBoaWNzU2l6ZShkZWx0YVgsIGRlbHRhWSksIEdyYXBo
aWNzU2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgcGhhc2UsIG1v
bWVudHVtUGhhc2UsIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIG1vZGlmaWVycywgdGltZXN0
YW1wKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktl
eWJvYXJkRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqKQpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51SXRl
bS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgpA
QCAtMTg4LDkgKzE4OCw5IEBACiAKIC8qIEdlb21ldHJ5IGNvbnZlcnNpb25zICovCiAKLWlubGlu
ZSBXZWJDb3JlOjpGbG9hdFJlY3QgdG9GbG9hdFJlY3QoY29uc3QgV0tSZWN0JiB3a1JlY3QpCitp
bmxpbmUgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHRvR3JhcGhpY3NSZWN0KGNvbnN0IFdLUmVjdCYg
d2tSZWN0KQogewotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJlY3Qoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdrUmVjdC5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qub3JpZ2luLnkp
LAorICAgIHJldHVybiBXZWJDb3JlOjpHcmFwaGljc1JlY3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdr
UmVjdC5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qub3JpZ2luLnkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5zaXpl
LndpZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5zaXplLmhlaWdodCkpOwogfQogCkBA
IC0yMTAsNyArMjEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHdrUmVjdC5zaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50Pih3a1JlY3Quc2l6ZS5o
ZWlnaHQpKTsKIH0KIAotaW5saW5lIFdLUmVjdCB0b0FQSShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIHJlY3QpCitpbmxpbmUgV0tSZWN0IHRvQVBJKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCYgcmVjdCkKIHsKICAgICBXS1JlY3Qgd2tSZWN0OwogICAgIHdrUmVjdC5vcmlnaW4ueCA9IHJl
Y3QueCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAKICAgICBj
bGFzcyBDcmVkZW50aWFsOwogICAgIGNsYXNzIEN1cnNvcjsKICAgICBjbGFzcyBEYXRhYmFzZURl
dGFpbHM7Ci0gICAgY2xhc3MgRmxvYXRQb2ludDsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7Ci0gICAg
Y2xhc3MgRmxvYXRTaXplOworICAgIGNsYXNzIEdyYXBoaWNzUG9pbnQ7CisgICAgY2xhc3MgR3Jh
cGhpY3NSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzU2l6ZTsKICAgICBjbGFzcyBIVFRQSGVhZGVy
TWFwOwogICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIEludFJlY3Q7CkBAIC02Myw3ICs2
Myw3IEBACiAjaWYgUExBVEZPUk0oUVQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
QW5pbWF0aW9uOwotICAgIGNsYXNzIEZsb2F0UG9pbnQzRDsKKyAgICBjbGFzcyBHcmFwaGljc1Bv
aW50M0Q7CiAgICAgY2xhc3MgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgY2xhc3Mg
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOwogICAgIGNsYXNzIFBlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uOwpAQCAtODEsMTkgKzgxLDE5IEBACiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50PiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2Vi
Q29yZTo6RmxvYXRQb2ludCYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpHcmFwaGljc1BvaW50PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYpOwogfTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKLSAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNv
cmU6OkZsb2F0UmVjdCYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpHcmFwaGljc1JlY3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogfTsKIAotdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFNpemU+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZs
b2F0U2l6ZSYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFw
aGljc1NpemU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYpOwogfTsKIAogdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJbnRQb2ludD4gewpAQCAtMjAzLDkgKzIwMyw5
IEBACiB9OwogCiAjaWYgUExBVEZPUk0oUVQpCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQzRD4g
eworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc1BvaW50M0QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NQb2ludDNEJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okxlbmd0aD4gewpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJXaGVlbEV2ZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7ICAgIAogCi1XZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2
ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IEZsb2F0U2l6ZSYg
d2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVycyBtb2RpZmllcnMs
IGRvdWJsZSB0aW1lc3RhbXApCitXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlw
ZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgd2hlZWxU
aWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJs
ZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkK
ICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2Jh
bFBvc2l0aW9uKQpAQCAtNDksNyArNDksNyBAQAogfQogCiAjaWYgUExBVEZPUk0oTUFDKQotV2Vi
V2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIGRl
bHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgYm9vbCBoYXNQcmVjaXNlU2Nyb2xs
aW5nRGVsdGFzLCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKQorV2ViV2hl
ZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
biwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBHcmFwaGljc1NpemUmIGRl
bHRhLCBjb25zdCBHcmFwaGljc1NpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgYm9vbCBoYXNQcmVjaXNlU2Ny
b2xsaW5nRGVsdGFzLCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKQogICAg
IDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApCiAgICAgLCBtX3Bvc2l0aW9u
KHBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIERpY3Rpb25hcnlQb3B1cElu
Zm9faAogCiAjaW5jbHVkZSAiRm9udEluZm8uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9p
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUG9pbnQuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OSw3ICs0OSw3IEBACiAgICAg
ICAgIEhvdEtleQogICAgIH07CiAKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbjsKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc1BvaW50IG9yaWdpbjsKICAgICBGb250SW5mbyBmb250SW5mbzsK
ICAgICBUeXBlIHR5cGU7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyAr
NDMsNyBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NQb2ludDNELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oPgpAQCAtNjIs
MzYgKzYyLDM2IEBACiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotdm9pZCBBcmd1bWVudENvZGVy
PEZsb2F0UG9pbnQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9h
dFBvaW50JiBmbG9hdFBvaW50KQordm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzUG9pbnQ+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc1BvaW50JiBmbG9h
dFBvaW50KQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludD46OmVuY29kZShl
bmNvZGVyLCBmbG9hdFBvaW50KTsKKyAgICBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNzUG9p
bnQ+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludCk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2Rl
cjxGbG9hdFBvaW50Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRQb2lu
dCYgZmxvYXRQb2ludCkKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50Pjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgR3JhcGhpY3NQb2ludCYgZmxvYXRQb2ludCkKIHsK
LSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZGVjb2RlKGRlY29k
ZXIsIGZsb2F0UG9pbnQpOworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNz
UG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludCk7CiB9CiAKIAotdm9pZCBBcmd1bWVu
dENvZGVyPEZsb2F0UmVjdD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZmxvYXRSZWN0KQordm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzUmVjdD46
OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZmxv
YXRSZWN0KQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZW5jb2RlKGVu
Y29kZXIsIGZsb2F0UmVjdCk7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1JlY3Q+
OjplbmNvZGUoZW5jb2RlciwgZmxvYXRSZWN0KTsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPEZs
b2F0UmVjdD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEZsb2F0UmVjdCYgZmxv
YXRSZWN0KQorYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzUmVjdD46OmRlY29kZShBcmd1bWVu
dERlY29kZXIqIGRlY29kZXIsIEdyYXBoaWNzUmVjdCYgZmxvYXRSZWN0KQogewotICAgIHJldHVy
biBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFJl
Y3QpOworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNzUmVjdD46OmRlY29k
ZShkZWNvZGVyLCBmbG9hdFJlY3QpOwogfQogCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFNp
emU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFNpemUmIGZs
b2F0U2l6ZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc1NpemUmIGZsb2F0U2l6ZSkKIHsKLSAg
ICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29kZShlbmNvZGVyLCBmbG9hdFNp
emUpOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NTaXplPjo6ZW5jb2RlKGVuY29k
ZXIsIGZsb2F0U2l6ZSk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBGbG9hdFNpemUmIGZsb2F0U2l6ZSkKK2Jvb2wg
QXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBHcmFwaGljc1NpemUmIGZsb2F0U2l6ZSkKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1l
bnRDb2RlcjxGbG9hdFNpemU+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRTaXplKTsKKyAgICByZXR1
cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+OjpkZWNvZGUoZGVjb2RlciwgZmxv
YXRTaXplKTsKIH0KIAogCkBAIC01NTIsMTQgKzU1MiwxNCBAQAogCiAjaWYgUExBVEZPUk0oUVQp
CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxHcmFwaGljc1BvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyLCBjb25zdCBHcmFwaGljc1BvaW50M0QmIGZsb2F0UG9pbnQzRCkKIHsKLSAgICBTaW1wbGVB
cmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50M0Qp
OworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2ludDNEPjo6ZW5jb2RlKGVuY29k
ZXIsIGZsb2F0UG9pbnQzRCk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+
OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBGbG9hdFBvaW50M0QmIGZsb2F0UG9p
bnQzRCkKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50M0Q+OjpkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc1BvaW50M0QmIGZsb2F0UG9pbnQzRCkKIHsKLSAg
ICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoZGVjb2Rl
ciwgZmxvYXRQb2ludDNEKTsKKyAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGlj
c1BvaW50M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludDNEKTsKIH0KIAogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogLy8g
RklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBtb3ZlIHRvIG1ha2VpbmcgdGhlIFdlYkNvcmUvUGxh
dGZvcm1Gb29FdmVudHMgdHJpdmlhbCBjbGFzc2VzIHNvIHRoYXQKIC8vIHdlIGNhbiB1c2UgdGhl
bSBhcyB0aGUgZXZlbnQgdHlwZS4KIAotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1NpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFBv
aW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE3NywxNSArMTc3
LDE1IEBACiAKICAgICBXZWJXaGVlbEV2ZW50KCkgeyB9CiAKLSAgICBXZWJXaGVlbEV2ZW50KFR5
cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRhLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBNb2RpZmll
cnMsIGRvdWJsZSB0aW1lc3RhbXApOworICAgIFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIE1vZGlmaWVycywgZG91
YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFdlYldoZWVsRXZlbnQoVHlw
ZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgZGVsdGEsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHksIFBoYXNlIHBo
YXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywg
TW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGRlbHRhLCBjb25z
dCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBQaGFzZSBw
aGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSxib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMs
IE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjZW5kaWYKIAogICAgIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAg
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxQb3NpdGlvbjsgfQotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSBkZWx0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVsdGE7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUg
d2hlZWxUaWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxUaWNrczsgfQorICAgIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzU2l6ZSBkZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsdGE7IH0KKyAg
ICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUgd2hlZWxUaWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fd2hlZWxUaWNrczsgfQogICAgIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R3JhbnVsYXJpdHk+KG1fZ3JhbnVsYXJpdHkpOyB9CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIFBoYXNlIHBoYXNlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UGhhc2U+KG1fcGhhc2UpOyB9CkBAIC0yMDEsOCArMjAxLDggQEAKIAogICAgIFdlYkNvcmU6Oklu
dFBvaW50IG1fcG9zaXRpb247CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9nbG9iYWxQb3NpdGlv
bjsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9kZWx0YTsKLSAgICBXZWJDb3JlOjpGbG9hdFNp
emUgbV93aGVlbFRpY2tzOworICAgIFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSBtX2RlbHRhOworICAg
IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSBtX3doZWVsVGlja3M7CiAgICAgdWludDMyX3QgbV9ncmFu
dWxhcml0eTsgLy8gR3JhbnVsYXJpdHkKICNpZiBQTEFURk9STShNQUMpCiAgICAgdWludDMyX3Qg
bV9waGFzZTsgLy8gUGhhc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100734</attachid>
            <date>2011-07-13 17:06:28 -0700</date>
            <delta_ts>2011-07-14 14:21:09 -0700</delta_ts>
            <desc>Trying Again</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>993261</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYs
MTAgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxl
Q2hvb3Nlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlSWNvbkxvYWRlci5oPgotI2ltcG9ydCA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ljb24uaD4KQEAgLTE1OCwyMCArMTU4LDIwIEBACiAvLyBUaGVzZSBmdW5jdGlvbnMg
c2NhbGUgYmV0d2VlbiB3aW5kb3cgYW5kIFdlYlZpZXcgY29vcmRpbmF0ZXMgYmVjYXVzZSBKYXZh
U2NyaXB0L0RPTSBvcGVyYXRpb25zIAogLy8gYXNzdW1lIHRoYXQgdGhlIFdlYlZpZXcgYW5kIHRo
ZSB3aW5kb3cgc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAKLXZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICBOU1JlY3Qgd2luZG93UmVjdCA9IHRvRGV2aWNlU3BhY2UocmVjdCwgW21fd2ViVmlldyB3
aW5kb3ddKTsKICAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpt
X3dlYlZpZXcgc2V0RnJhbWU6d2luZG93UmVjdF07CiB9CiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVD
bGllbnQ6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93
UmVjdCgpCiB7CiAgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBbW21fd2ViVmlldyBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlld0ZyYW1lOm1fd2ViVmlld107CiAgICAgcmV0dXJuIHRvVXNlclNw
YWNlKHdpbmRvd1JlY3QsIFttX3dlYlZpZXcgd2luZG93XSk7CiB9CiAKIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGFkZCBBUEkgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhpcy4KLUZsb2F0UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6
OnBhZ2VSZWN0KCkKIHsKICAgICByZXR1cm4gW21fd2ViVmlldyBmcmFtZV07CiB9CkBAIC03Mzgs
NyArNzM4LDcgQEAKIAogI2VuZGlmCiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3Rv
bUhpZ2hsaWdodFJlY3QoTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVSZWN0KQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3Vz
dG9tSGlnaGxpZ2h0UmVjdChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgbGluZVJlY3QpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogCkBAIC03NTUsNyArNzU1LDcgQEAKICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIH0K
IAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqIG5vZGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGxpbmVSZWN0LAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9t
SGlnaGxpZ2h0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBib3hSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0LAogICAgIGJv
b2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04NjMsNyArODYzLDcgQEAKIH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBw
YW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5n
Qm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0
aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1fY29ycmVjdGlvblBhbmVsLnNob3cobV93
ZWJWaWV3LCBwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVwbGFjZWRT
dHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFu
ZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29y
cmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTQsNyAr
NTQsNyBAQAogICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsSWdub3JlZCwgZmFsc2UpOwogfQogCi12b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhX
ZWJWaWV3KiB2aWV3LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlv
blBhbmVsOjpzaG93KFdlYlZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSB0eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KQogewogICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsSWdub3JlZCwgZmFsc2UpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEwICs0MCwxMCBAQAogICAgIAogICAgIHZpcnR1YWwgdm9pZCBjaHJv
bWVEZXN0cm95ZWQoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3
aW5kb3dSZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2lu
ZG93UmVjdCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAgICAgdmly
dHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkBAIC0xMjksMTAgKzEyOSwxMCBAQAogCiAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKIAotICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9k
ZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCBjdXN0b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgdHlwZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBsaW5lUmVj
dCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUq
LCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgdHlwZSwKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0LAor
ICAgICAgICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QsCiAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9v
bCBlbnRpcmVMaW5lKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5
Ym9hcmRVSU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzcsNyArMTM3LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShi
b29sIGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhX
ZWJDb3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNr
LCBjb25zdCBXVEY6OlN0cmluZyYpOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmlu
Z3MpOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bCk7CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29y
ZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
Q29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAKIHB1YmxpYzoKICAgICBDb3JyZWN0aW9uUGFuZWwoKTsKICAgICB+Q29ycmVjdGlv
blBhbmVsKCk7Ci0gICAgdm9pZCBzaG93KFdlYlZpZXcqLCBXZWJDb3JlOjpDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hP
ZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZvaWQgc2hvdyhXZWJWaWV3KiwgV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICBTdHJpbmcgZGlzbWlzcyhXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICBzdGF0aWMgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYlZpZXcqLCBOU0NvcnJlY3Rpb25SZXNw
b25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJp
bmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXRO
U1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDcgQEAKICAgICAgICAgW1t0ZXh0Q29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2
aWNlUkdCQ29sb3JTcGFjZV0gZ2V0UmVkOiZyZWQgZ3JlZW46JmdyZWVuIGJsdWU6JmJsdWUgYWxw
aGE6JmFscGhhXTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihtYWtlUkdC
QShyZWQgKiAyNTUsIGdyZWVuICogMjU1LCBibHVlICogMjU1LCBhbHBoYSAqIDI1NSksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogCi0gICAgICAgIHdlYkNvcmVGb250LmRyYXdUZXh0KCZncmFwaGlj
c0NvbnRleHQsIHJ1biwgRmxvYXRQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50LnkgOiAo
LTEgKiBwb2ludC55KSkpKTsKKyAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQoJmdyYXBoaWNz
Q29udGV4dCwgcnVuLCBHcmFwaGljc1BvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9pbnQueSA6
ICgtMSAqIHBvaW50LnkpKSkpOwogCiAgICAgICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3NSwxMiArMjc1LDEyIEBACiAKIC0gKGludClwYWdlTnVtYmVyRm9yRWxlbWVudDooRE9N
RWxlbWVudCopZWxlbWVudDooZmxvYXQpcGFnZVdpZHRoSW5QaXhlbHM6KGZsb2F0KXBhZ2VIZWln
aHRJblBpeGVscwogewotICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVt
ZW50KGNvcmUoZWxlbWVudCksIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdo
dEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1l
bnQoY29yZShlbGVtZW50KSwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVp
Z2h0SW5QaXhlbHMpKTsKIH0KIAogLSAoaW50KW51bWJlck9mUGFnZXM6KGZsb2F0KXBhZ2VXaWR0
aEluUGl4ZWxzOihmbG9hdClwYWdlSGVpZ2h0SW5QaXhlbHMKIHsKLSAgICByZXR1cm4gUHJpbnRD
b250ZXh0OjpudW1iZXJPZlBhZ2VzKF9wcml2YXRlLT5jb3JlRnJhbWUsIEZsb2F0U2l6ZShwYWdl
V2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29u
dGV4dDo6bnVtYmVyT2ZQYWdlcyhfcHJpdmF0ZS0+Y29yZUZyYW1lLCBHcmFwaGljc1NpemUocGFn
ZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCiAtIChOU1N0cmluZyAq
KXBhZ2VQcm9wZXJ0eTooY29uc3QgY2hhciAqKXByb3BlcnR5TmFtZTooaW50KXBhZ2VOdW1iZXIK
QEAgLTMwNSw3ICszMDUsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7Ci0gICAgUHJpbnRDb250ZXh0OjpzcG9vbEFs
bFBhZ2VzV2l0aEJvdW5kYXJpZXMoY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6
ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgUHJpbnRDb250
ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoY29yZUZyYW1lLCBncmFwaGljc0NvbnRl
eHQsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7
CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVuZGVyTm9k
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlbmRlck5v
ZGUubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJS
ZW5kZXJOb2RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBACiAgICAgRnJhbWUq
IGZyYW1lID0gZnJhbWVWaWV3ID8gZnJhbWVWaWV3LT5mcmFtZSgpIDogMDsKIAogICAgIC8vIEZJ
WE1FOiBicm9rZW4gd2l0aCB0cmFuc2Zvcm1zCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBub2Rl
LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1Bv
cyA9IG5vZGUtPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCkpOwogICAgIGludCB4ID0g
MDsKICAgICBpbnQgeSA9IDA7CiAgICAgaW50IHdpZHRoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ4LDcgKzEzNDgs
NyBAQAogICAgIGZsb2F0IHByaW50SGVpZ2h0ID0gcm9vdC0+c3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHBhZ2VTaXplLmhlaWdodCA6IGRvY3VtZW50UmVjdC5oZWlnaHQoKSAv
IHByaW50U2NhbGVGYWN0b3I7CiAKICAgICBQcmludENvbnRleHQgcHJpbnRDb250ZXh0KF9wcml2
YXRlLT5jb3JlRnJhbWUpOwotICAgIHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBh
Z2VTaXplKEZsb2F0U2l6ZShwcmludFdpZHRoLCBwcmludEhlaWdodCksIHRydWUpOworICAgIHBy
aW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKEdyYXBoaWNzU2l6ZShwcmlu
dFdpZHRoLCBwcmludEhlaWdodCksIHRydWUpOwogICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYg
cGFnZVJlY3RzID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0cygpOwogCiAgICAgc2l6ZV90IHNpemUg
PSBwYWdlUmVjdHMuc2l6ZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTkwLDEyICs5MCwxMiBAQAogI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgpAQCAtMjE0NywxMyArMjE0NywxMyBAQAogCiAgICAg
ZmxvYXQgcGFnZUxvZ2ljYWxXaWR0aCA9IGlzSG9yaXpvbnRhbCA/IHBhZ2VXaWR0aCA6IHBhZ2VI
ZWlnaHQ7CiAgICAgZmxvYXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwgPyBwYWdl
SGVpZ2h0IDogcGFnZVdpZHRoOwotICAgIEZsb2F0U2l6ZSBtaW5MYXlvdXRTaXplKHBhZ2VMb2dp
Y2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAgICBHcmFwaGljc1NpemUgbWluTGF5b3V0
U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCk7CiAgICAgZmxvYXQgbWF4
aW11bVNocmlua1JhdGlvID0gMTsKIAogICAgIC8vIElmIHdlIGFyZSBhIGZyYW1lc2V0IGp1c3Qg
cHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lzZSByZWxheW91
dAogICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFnZSB3aWR0aC4KICAgICBpZiAoc2hyaW5rVG9G
aXQgJiYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVT
ZXQoKSkpIHsKLSAgICAgICAgbWluTGF5b3V0U2l6ZSA9IGZyYW1lLT5yZXNpemVQYWdlUmVjdHNL
ZWVwaW5nUmF0aW8oRmxvYXRTaXplKHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0
KSwgRmxvYXRTaXplKHBhZ2VMb2dpY2FsV2lkdGggKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmlt
dW1TaHJpbmtGYWN0b3IsIHBhZ2VMb2dpY2FsSGVpZ2h0ICogX1dlYkhUTUxWaWV3UHJpbnRpbmdN
aW5pbXVtU2hyaW5rRmFjdG9yKSk7CisgICAgICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVz
aXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRoLCBw
YWdlTG9naWNhbEhlaWdodCksIEdyYXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRoICogX1dlYkhU
TUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYWdlTG9naWNhbEhlaWdodCAqIF9X
ZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOwogICAgICAgICBtYXhpbXVt
U2hyaW5rUmF0aW8gPSBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgLyBf
V2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7CiAgICAgfQogCkBAIC0yMTgz
LDEzICsyMTgzLDEzIEBACiAKICAgICBmbG9hdCBwYWdlTG9naWNhbFdpZHRoID0gaXNIb3Jpem9u
dGFsID8gcGFnZVNpemUud2lkdGggOiBwYWdlU2l6ZS5oZWlnaHQ7CiAgICAgZmxvYXQgcGFnZUxv
Z2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwgPyBwYWdlU2l6ZS5oZWlnaHQgOiBwYWdlU2l6ZS53
aWR0aDsKLSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdl
TG9naWNhbEhlaWdodCk7CisgICAgR3JhcGhpY3NTaXplIG1pbkxheW91dFNpemUocGFnZUxvZ2lj
YWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIGZsb2F0IG1heGltdW1TaHJpbmtSYXRp
byA9IDE7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhl
IGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQKICAgICAvLyBhY2Nv
cmRpbmcgdG8gdGhlIHBhZ2Ugd2lkdGguCiAgICAgaWYgKHNocmlua1RvRml0ICYmICghZnJhbWUt
PmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpKSB7Ci0gICAg
ICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZs
b2F0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEZsb2F0U2l6ZShw
YWdlTG9naWNhbFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9y
LCBwYWdlTG9naWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0Zh
Y3RvcikpOworICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tl
ZXBpbmdSYXRpbyhHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWln
aHQpLCBHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCAqIF9XZWJIVE1MVmlld1ByaW50aW5n
TWluaW11bVNocmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWlnaHQgKiBfV2ViSFRNTFZpZXdQcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKICAgICAgICAgbWF4aW11bVNocmlua1JhdGlvID0g
X1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yIC8gX1dlYkhUTUxWaWV3UHJp
bnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOwogICAgIH0KIApAQCAtMzAyMiw5ICszMDIyLDkgQEAK
IAogICAgIGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKICAg
ICAgICAgaWYgKG1pblBhZ2VMb2dpY2FsV2lkdGggPiAwLjApIHsKLSAgICAgICAgICAgIEZsb2F0
U2l6ZSBwYWdlU2l6ZShtaW5QYWdlTG9naWNhbFdpZHRoLCBtaW5QYWdlTG9naWNhbEhlaWdodCk7
CisgICAgICAgICAgICBHcmFwaGljc1NpemUgcGFnZVNpemUobWluUGFnZUxvZ2ljYWxXaWR0aCwg
bWluUGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1l
bnQoKSAmJiBjb3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSAmJiAhY29yZUZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgICAgICAgICAgcGFnZVNpemUgPSBGbG9hdFNpemUobWluUGFnZUxvZ2lj
YWxIZWlnaHQsIG1pblBhZ2VMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgIHBhZ2VTaXpl
ID0gR3JhcGhpY3NTaXplKG1pblBhZ2VMb2dpY2FsSGVpZ2h0LCBtaW5QYWdlTG9naWNhbFdpZHRo
KTsKICAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91dEZvclBhZ2luYXRpb24ocGFnZVNp
emUsIG1heGltdW1TaHJpbmtSYXRpbywgYWRqdXN0Vmlld1NpemUgPyBBZGp1c3RWaWV3U2l6ZSA6
IERvTm90QWRqdXN0Vmlld1NpemUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29y
ZVZpZXctPmZvcmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7CkBAIC01OTcxLDcgKzU5NzEsNyBA
QAogICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBWZWN0b3I8RmxvYXRSZWN0PiBsaXN0OworICAgIFZlY3RvcjxHcmFwaGljc1JlY3Q+IGxp
c3Q7CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQogICAg
ICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5nZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5n
bGVzKGxpc3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcg
KzEzOSw3IEBACiBfX1pOM1dURjZTdHJpbmdDMUVQSzEwX19DRlN0cmluZwogX19aTjdXZWJDb3Jl
MTBDcmVkZW50aWFsQzFFUktOM1dURjZTdHJpbmdFUzRfTlNfMjFDcmVkZW50aWFsUGVyc2lzdGVu
Y2VFCiBfX1pON1dlYkNvcmUxMENyZWRlbnRpYWxDMUV2Ci1fX1pON1dlYkNvcmUxMEZsb2F0UG9p
bnRDMUVSS05TXzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEMxRVJLTlNf
OEludFBvaW50RQogX19aTjdXZWJDb3JlMTBKU0RvY3VtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRl
RVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUK
IF9fWk43V2ViQ29yZTEwSlNEb2N1bWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxME1vdXNlRXZl
bnQ2Y3JlYXRlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzlET01X
aW5kb3dFRUVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RWlOUzVfSU5TXzROb2RlRUVFCkBAIC0y
MjAsOSArMjIwLDkgQEAKIF9fWk43V2ViQ29yZTExc3RhcnRPZldvcmRFUktOU18xNVZpc2libGVQ
b3NpdGlvbkVOU185RVdvcmRTaWRlRQogX19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzdfTlNS
ZWN0UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTF3cml0ZVRvRmlsZUVpUEtjaQotX19aTjdXZWJD
b3JlMTJDaHJvbWVDbGllbnQyMHBhaW50Q3VzdG9tU2Nyb2xsYmFyRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzlGbG9hdFJlY3RFTlNfMjBTY3JvbGxiYXJDb250cm9sU2l6ZUVqTlNfMTNTY3Jv
bGxiYXJQYXJ0RWJmZmoKK19fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbVNj
cm9sbGJhckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVOU18yMFNj
cm9sbGJhckNvbnRyb2xTaXplRWpOU18xM1Njcm9sbGJhclBhcnRFYmZmagogX19aTjdXZWJDb3Jl
MTJDaHJvbWVDbGllbnQyM3BhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdJbnRSZWN0RVM1X1M1XwotX19aTjdXZWJDb3JlMTJDaHJvbWVDbGllbnQyM3Bh
aW50Q3VzdG9tU2Nyb2xsQ29ybmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJl
Y3RFCitfX1pON1dlYkNvcmUxMkNocm9tZUNsaWVudDIzcGFpbnRDdXN0b21TY3JvbGxDb3JuZXJF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUx
MkVkaXRpbmdTdHlsZUQxRXYKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTBtb3VzZU1vdmVk
RVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxMG1vdXNlTW92ZWRFUktOU18x
OFBsYXRmb3JtTW91c2VFdmVudEUKQEAgLTI2NSwxNCArMjY1LDE0IEBACiBfX1pON1dlYkNvcmUx
MkpTRE9NV3JhcHBlcjM0dmlydHVhbEZ1bmN0aW9uVG9QcmV2ZW50V2Vha1Z0YWJsZUV2CiBfX1pO
N1dlYkNvcmUxMlBvcHVwTWVudU1hY0MxRVBOU18xNVBvcHVwTWVudUNsaWVudEUKIF9fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0MTJwYWdlUHJvcGVydHlFUE5TXzVGcmFtZUVQS2NpCi1fX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDEzbnVtYmVyT2ZQYWdlc0VQTlNfNUZyYW1lRVJLTlNfOUZsb2F0
U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTZjb21wdXRlUGFnZVJlY3RzRVJLTlNf
OUZsb2F0UmVjdEVmZmZSZmIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTNudW1iZXJPZlBh
Z2VzRVBOU181RnJhbWVFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43V2ViQ29yZTEyUHJpbnRD
b250ZXh0MTZjb21wdXRlUGFnZVJlY3RzRVJLTlNfMTJHcmFwaGljc1JlY3RFZmZmUmZiCiBfX1pO
N1dlYkNvcmUxMlByaW50Q29udGV4dDE2aXNQYWdlQm94VmlzaWJsZUVQTlNfNUZyYW1lRWkKLV9f
Wk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjBwYWdlTnVtYmVyRm9yRWxlbWVudEVQTlNfN0VsZW1l
bnRFUktOU185RmxvYXRTaXplRQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1i
ZXJGb3JFbGVtZW50RVBOU183RWxlbWVudEVSS05TXzEyR3JhcGhpY3NTaXplRQogX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHQyNnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzRVBOU181RnJhbWVF
aWlpaWlpaQotX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyN2NvbXB1dGVBdXRvbWF0aWNTY2Fs
ZUZhY3RvckVSS05TXzlGbG9hdFNpemVFCi1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3c3Bv
b2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzRVBOU181RnJhbWVFUk5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFn
ZVJlY3RzV2l0aFBhZ2VTaXplRVJLTlNfOUZsb2F0U2l6ZUViCitfX1pON1dlYkNvcmUxMlByaW50
Q29udGV4dDI3Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yRVJLTlNfMTJHcmFwaGljc1NpemVF
CitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVz
RVBOU181RnJhbWVFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1NpemVFCitf
X1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI4Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUVS
S05TXzEyR3JhcGhpY3NTaXplRWIKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0M2VuZEV2CiBf
X1pON1dlYkNvcmUxMlByaW50Q29udGV4dDViZWdpbkVmZgogX19aTjdXZWJDb3JlMTJQcmludENv
bnRleHQ5c3Bvb2xQYWdlRVJOU18xNUdyYXBoaWNzQ29udGV4dEVpZgpAQCAtMzI1LDcgKzMyNSw3
IEBACiBfX1pON1dlYkNvcmUxM1R5cGluZ0NvbW1hbmQzOWluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckluUXVvdGVkQ29udGVudEVQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFw
cGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzROb2RlRQog
X19aTjdXZWJDb3JlMTNkaXJlY3RvcnlOYW1lRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3Jl
MTN0b0RldmljZVNwYWNlRVJLTlNfOUZsb2F0UmVjdEVQOE5TV2luZG93CitfX1pON1dlYkNvcmUx
M3RvRGV2aWNlU3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVQOE5TV2luZG93CiBfX1pON1dlYkNv
cmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJD
b3JlMTN0b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJl
c291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCkBAIC00MDks
MTYgKzQwOSwxNiBAQAogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJFZgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzRQ
YXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzdJbnRSZWN0RQot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05TXzlGbG9hdFJlY3RFCitfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRzYXZlRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0NXNjYWxlRVJLTlNfOUZsb2F0U2l6ZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0NXNjYWxlRVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDdyZXN0b3JlRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxQYXRoRVJL
TlNfNFBhdGhFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlG
bG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzlG
bG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQotX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCitfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfNUNvbG9y
RU5TXzEwQ29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWNsZWFyUmVj
dEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJh
d0ltYWdlRVBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOEludFBvaW50RU5TXzE3Q29t
cG9zaXRlT3BlcmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dF
UktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCitfX1pON1dlYkNv
cmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU18xMkdyYXBoaWNzU2l6ZUVmUktOU181
Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5dHJh
bnNsYXRlRWZmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEMxRVA5Q0dDb250ZXh0CiBf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEQxRXYKQEAgLTQ4OSw3ICs0ODksNyBAQAogX19a
TjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQogX19aTjdXZWJDb3JlMTZk
ZWxldGVBbGxDb29raWVzRXYKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSSzdfTlNS
ZWN0Ci1fX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185RmxvYXRSZWN0RQorX19a
TjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dl
YkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE2c3RhcnRPZlBhcmFncmFwaEVS
S05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQog
X19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTI0Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdl
RVJLTlNfMTVQcm90ZWN0aW9uU3BhY2VFCkBAIC03MTYsNyArNzE2LDcgQEAKIF9fWk43V2ViQ29y
ZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0UGFnZUMxRVJOUzBfMTFQYWdlQ2xpZW50
c0UKIF9fWk43V2ViQ29yZTRQYWdlRDFFdgotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRS
ZWN0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmU0UGF0aDE0
YWRkUm91bmRlZFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzEyR3JhcGhpY3NTaXplRQog
X19aTjdXZWJDb3JlNFBhdGhDMUV2CiBfX1pON1dlYkNvcmU0UGF0aEQxRXYKIF9fWk43V2ViQ29y
ZTRjb3JlRVAyME5TVVJMUHJvdGVjdGlvblNwYWNlCkBAIC03MzQsNyArNzM0LDcgQEAKIF9fWk43
V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnRFUktOU184SW50UG9pbnRFCiBf
X1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnRFUDdOU0FycmF5UE5T
XzdFbGVtZW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
RWZmCi1fX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05T
XzlGbG9hdFNpemVFUzNfCitfX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tlZXBp
bmdSYXRpb0VSS05TXzEyR3JhcGhpY3NTaXplRVMzXwogX19aTjdXZWJDb3JlNUZyYW1lMjhzZWFy
Y2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50RVA3TlNBcnJheVBOU183RWxlbWVudEVQbVBiCiBfX1pO
N1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFIVE1MRnJhbWVPd25lckVsZW1l
bnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCiBfX1pON1dlYkNvcmU1RnJhbWU3c2V0Vmlld0VO
M1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVFCkBAIC04MjQsNyArODI0LDcgQEAKIF9f
Wk43V2ViQ29yZTdJbnRSZWN0NXNjYWxlRWYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXVuaXRlRVJL
UzBfCiBfX1pON1dlYkNvcmU3SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk43V2ViQ29yZTdJ
bnRSZWN0QzFFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzEy
R3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlN0ludFNpemVDMUVSSzdfTlNTaXplCiBfX1pON1dl
YkNvcmU3VGV4dFJ1bjE5YWxsb3dzUm91bmRpbmdIYWNrc0V2CiBfX1pON1dlYkNvcmU3VGV4dFJ1
bjIxc19hbGxvd3NSb3VuZGluZ0hhY2tzRQpAQCAtODUwLDcgKzg1MCw3IEBACiBfX1pON1dlYkNv
cmU4Rm9ybURhdGE2Y3JlYXRlRVBLdm0KIF9fWk43V2ViQ29yZThGb3JtRGF0YUQxRXYKIF9fWk43
V2ViQ29yZThHcmFkaWVudDEyYWRkQ29sb3JTdG9wRWZSS05TXzVDb2xvckUKLV9fWk43V2ViQ29y
ZThHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RVMzXworX19aTjdXZWJDb3JlOEdyYWRpZW50
QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfCiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhf
TlNQb2ludAogX19aTjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5v
ZGVFRUVpTlMwXzEwQW5jaG9yVHlwZUUKIF9fWk43V2ViQ29yZThTZXR0aW5nczE0c2V0SmF2YUVu
YWJsZWRFYgpAQCAtOTI5LDkgKzkyOSw5IEBACiBfX1pON1dlYkNvcmU4dG9TdHJpbmdFUktOM1dU
RjZWZWN0b3JJTlNfMTFQcm94eVNlcnZlckVMbTBFRUUKIF9fWk43V2ViQ29yZTlET01XaW5kb3cz
MGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RE9NV2luZG93
MzZkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHNFdgotX19aTjdXZWJDb3JlOUZs
b2F0UmVjdEMxRVJLN19OU1JlY3QKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRS
ZWN0RQotX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCitfX1pON1dlYkNv
cmUxMkdyYXBoaWNzUmVjdEMxRVJLN19OU1JlY3QKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0
QzFFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NTaXplQzFFUktOU183SW50
U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJD
b3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlGb250
Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCkBAIC05NTMsNyArOTUzLDcgQEAKIF9fWk43
V2ViQ29yZTlGcmFtZVZpZXcyMWZsdXNoRGVmZXJyZWRSZXBhaW50c0V2CiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjJzZXRCYXNlQmFja2dyb3VuZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdXZWJD
b3JlOUZyYW1lVmlldzIzdXBkYXRlQ2FuSGF2ZVNjcm9sbGJhcnNFdgotX19aTjdXZWJDb3JlOUZy
YW1lVmlldzI0Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uRVJLTlNfOUZsb2F0U2l6ZUVmTlNfMTlB
ZGp1c3RWaWV3U2l6ZU9yTm90RQorX19aTjdXZWJDb3JlOUZyYW1lVmlldzI0Zm9yY2VMYXlvdXRG
b3JQYWdpbmF0aW9uRVJLTlNfMTJHcmFwaGljc1NpemVFZk5TXzE5QWRqdXN0Vmlld1NpemVPck5v
dEUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkRVBm
ZmZmCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjlzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVl
bkViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3Mzd1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVk
UmVjdXJzaXZlRXYKQEAgLTEwMzcsNyArMTAzNyw3IEBACiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50
aWFsNHVzZXJFdgogX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDdpc0VtcHR5RXYKIF9fWk5LN1dl
YkNvcmUxMENyZWRlbnRpYWw4cGFzc3dvcmRFdgotX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2
OF9OU1BvaW50RXYKK19fWk5LN1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRjdjhfTlNQb2ludEV2CiBf
X1pOSzdXZWJDb3JlMTBQbHVnaW5EYXRhMTZzdXBwb3J0c01pbWVUeXBlRVJLTjNXVEY2U3RyaW5n
RQogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDE2bGluZXNCb3VuZGluZ0JveEV2CiBfX1pOSzdX
ZWJDb3JlMTBSZW5kZXJUZXh0OWZpcnN0UnVuWEV2CkBAIC0xMDg4LDcgKzEwODgsNyBAQAogX19a
Tks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlFdgogX19a
Tks3V2ViQ29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKLV9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE1
bG9jYWxUb0Fic29sdXRlRVJLTlNfMTBGbG9hdFBvaW50RWJiCitfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEzR3JhcGhpY3NQb2ludEViYgogX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0NHZpZXdFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0
N2NoaWxkQXRFagogX19aTks3V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MTR3aW5kb3dDbGlwUmVjdEV2
CkBAIC0xMTM4LDcgKzExMzgsNyBAQAogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xNWNv
cHlUeXBpbmdTdHlsZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJblBhc3N3
b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNlZEFuZEFj
dGl2ZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVU
ZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRUVFCitfX1pOSzdX
ZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlc0VS
TjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NSZWN0RUxtMEVFRQogX19aTks3V2ViQ29yZTE0RnJh
bWVTZWxlY3Rpb242Ym91bmRzRWIKIF9fWk5LN1dlYkNvcmUxNFJlbmRlckxpc3RJdGVtMTBtYXJr
ZXJUZXh0RXYKIF9fWk5LN1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTBjb25uZWN0aW9uRXYKQEAg
LTEyMDksNyArMTIwOSw3IEBACiBfX1pOSzdXZWJDb3JlMjdBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUJhc2U1ZXJyb3JFdgogX19aTks3V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNl
NmlzTnVsbEV2CiBfX1pOSzdXZWJDb3JlNEZvbnQ1d2lkdGhFUktOU183VGV4dFJ1bkVQTjNXVEY3
SGFzaFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQdHJIYXNoSVM4X0VFTlM0XzEwSGFz
aFRyYWl0c0lTOF9FRUVFUE5TXzEzR2x5cGhPdmVyZmxvd0UKLV9fWk5LN1dlYkNvcmU0Rm9udDhk
cmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQ
b2ludEVpaQorX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pOSzdXZWJDb3JlNEtV
UkwxMHByb3RvY29sSXNFUEtjCiBfX1pOSzdXZWJDb3JlNEtVUkwxMWNyZWF0ZUNGVVJMRXYKIF9f
Wk5LN1dlYkNvcmU0S1VSTDExaXNMb2NhbEZpbGVFdgpAQCAtMTI0NSw3ICsxMjQ1LDcgQEAKIF9f
Wk5LN1dlYkNvcmU1UmFuZ2U0dGV4dEV2CiBfX1pOSzdXZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVS
aQogX19aTks3V2ViQ29yZTVSYW5nZTlmaXJzdE5vZGVFdgotX19aTks3V2ViQ29yZTVSYW5nZTl0
ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRWIKK19fWk5LN1dlYkNv
cmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVF
YgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNyZWF0ZVdpbmRvd0VQTlNfNUZyYW1lRVJLTlNfMTZG
cmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5kb3dGZWF0dXJlc0VSS05TXzE2TmF2aWdhdGlvbkFj
dGlvbkUKIF9fWk5LN1dlYkNvcmU2Q3Vyc29yMTRwbGF0Zm9ybUN1cnNvckV2CiBfX1pOSzdXZWJD
b3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0RXYKQEAgLTEzMTEsOCArMTMxMSw4IEBACiBfX1pOSzdX
ZWJDb3JlOFBvc2l0aW9uMjZ0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5
RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb244dXBzdHJlYW1FTlNfMjdFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOURPTVdpbmRvdzI3cGVuZGluZ1VubG9hZEV2ZW50
TGlzdGVuZXJzRXYKLV9fWk5LN1dlYkNvcmU5RmxvYXRRdWFkMTFib3VuZGluZ0JveEV2Ci1fX1pO
SzdXZWJDb3JlOUZsb2F0UmVjdGN2N19OU1JlY3RFdgorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NR
dWFkMTFib3VuZGluZ0JveEV2CitfX1pOSzdXZWJDb3JlMTJHcmFwaGljc1JlY3RjdjdfTlNSZWN0
RXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMTJ0cmF2ZXJzZU5leHRFUEtOU181RnJhbWVFCiBf
X1pOSzdXZWJDb3JlOUZyYW1lVHJlZTE0aXNEZXNjZW5kYW50T2ZFUEtOU181RnJhbWVFCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVHJlZTIwdHJhdmVyc2VOZXh0V2l0aFdyYXBFYgpJbmRleDogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0NzMsMTYgKzI0NzMsNiBA
QAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFR2F1c3Np
YW5CbHVyTkVPTi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L2FybS9GRUxpZ2h0aW5nTkVPTi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmggXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250QmFzZWxpbmUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmggXApAQCAtMjUxOSw2ICsyNTA5LDE2IEBACiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzUG9pbnQzRC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzUG9pbnQzRC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1BvaW50LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NQb2ludC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1F1YWQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1F1YWQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0Lmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzM0QuaCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vV2hlZWxFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9XaGVlbEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogewogfQog
Ci1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHdoZWVsVGlja3MsIGNv
bnN0IEZsb2F0UG9pbnQmIHJhd0RlbHRhLAorV2hlZWxFdmVudDo6V2hlZWxFdmVudChjb25zdCBH
cmFwaGljc1BvaW50JiB3aGVlbFRpY2tzLCBjb25zdCBHcmFwaGljc1BvaW50JiByYXdEZWx0YSwK
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQ
b2ludCYgc2NyZWVuTG9jYXRpb24sIGNvbnN0IEludFBvaW50JiBwYWdlTG9jYXRpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRL
ZXksIGJvb2wgbWV0YUtleSkKQEAgLTk2LDcgKzk2LDcgQEAKICAgICBpZiAoIShldmVudC5kZWx0
YVgoKSB8fCBldmVudC5kZWx0YVkoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEV2ZW50
KFdoZWVsRXZlbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGV2ZW50LndoZWVsVGlja3NYKCksIGV2ZW50
LndoZWVsVGlja3NZKCkpLCBGbG9hdFBvaW50KGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVko
KSksIGdyYW51bGFyaXR5KGV2ZW50KSwKKyAgICBzZXRFdmVudChXaGVlbEV2ZW50OjpjcmVhdGUo
R3JhcGhpY3NQb2ludChldmVudC53aGVlbFRpY2tzWCgpLCBldmVudC53aGVlbFRpY2tzWSgpKSwg
R3JhcGhpY3NQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCkpLCBncmFudWxhcml0
eShldmVudCksCiAgICAgICAgIHZpZXcsIEludFBvaW50KGV2ZW50Lmdsb2JhbFgoKSwgZXZlbnQu
Z2xvYmFsWSgpKSwgSW50UG9pbnQoZXZlbnQueCgpLCBldmVudC55KCkpLCBldmVudC5jdHJsS2V5
KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkpKTsK
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQAogdm9pZCBNb3VzZVJlbGF0ZWRFdmVu
dDo6Y29tcHV0ZVBhZ2VMb2NhdGlvbigpCiB7CiAgICAgZmxvYXQgem9vbUZhY3RvciA9IHBhZ2Va
b29tRmFjdG9yKHRoaXMpOwotICAgIHNldEFic29sdXRlTG9jYXRpb24ocm91bmRlZEludFBvaW50
KEZsb2F0UG9pbnQocGFnZVgoKSAqIHpvb21GYWN0b3IsIHBhZ2VZKCkgKiB6b29tRmFjdG9yKSkp
OworICAgIHNldEFic29sdXRlTG9jYXRpb24ocm91bmRlZEludFBvaW50KEdyYXBoaWNzUG9pbnQo
cGFnZVgoKSAqIHpvb21GYWN0b3IsIHBhZ2VZKCkgKiB6b29tRmFjdG9yKSkpOwogfQogCiB2b2lk
IE1vdXNlUmVsYXRlZEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpCkBAIC0xNDksNyArMTQ5LDcgQEAK
ICAgICAvLyBBZGp1c3Qgb2Zmc2V0TG9jYXRpb24gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdl
dCdzIHBvc2l0aW9uLgogICAgIGlmICghaXNTaW11bGF0ZWQoKSkgewogICAgICAgICBpZiAoUmVu
ZGVyT2JqZWN0KiByID0gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgRmxv
YXRQb2ludCBsb2NhbFBvcyA9IHItPmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZUxvY2F0aW9uKCks
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxQb3MgPSByLT5h
YnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAg
ICAgICBtX29mZnNldExvY2F0aW9uID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9zKTsKICAgICAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMSAvIHBhZ2Vab29tRmFjdG9yKHRoaXMpOwogICAg
ICAgICAgICAgaWYgKHNjYWxlRmFjdG9yICE9IDEuMGYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTE5LDEyICs1MTksMTIgQEAKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAg
ICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBxdWFkczsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChp
c1NWR0VsZW1lbnQoKSAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgYm91bmRp
bmcgcmVjdGFuZ2xlIGZyb20gdGhlIFNWRyBtb2RlbC4KICAgICAgICAgY29uc3QgU1ZHRWxlbWVu
dCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0VsZW1lbnQqPih0aGlzKTsKLSAg
ICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGxvY2FsUmVj
dDsKICAgICAgICAgaWYgKHN2Z0VsZW1lbnQtPmJvdW5kaW5nQm94KGxvY2FsUmVjdCkpCiAgICAg
ICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChsb2Nh
bFJlY3QpKTsKICAgICB9IGVsc2UKQEAgLTU1Nyw3ICs1NTcsNyBAQAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgU1ZHIGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBIYW5kbGUgdGFibGUvaW5saW5lLXRh
YmxlIHdpdGggYSBjYXB0aW9uLgogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAg
VmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgcmVuZGVyQm94TW9kZWxPYmplY3QtPmFi
c29sdXRlUXVhZHMocXVhZHMpOwogCiAgICAgZmxvYXQgcGFnZVNjYWxlID0gMTsKQEAgLTU3MCw5
ICs1NzAsOSBAQAogICAgICAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVu
dFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBhZGp1c3RG
bG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlckJveE1vZGVsT2JqZWN0KTsK
KyAgICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tpXSwg
cmVuZGVyQm94TW9kZWxPYmplY3QpOwogICAgICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQot
ICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwgcGFn
ZVNjYWxlKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JQYWdlU2NhbGUo
cXVhZHNbaV0sIHBhZ2VTY2FsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU4MywxMiArNTgz
LDEyIEBACiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBWZWN0b3I8R3Jh
cGhpY3NRdWFkPiBxdWFkczsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChpc1NWR0VsZW1lbnQo
KSAmJiByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xl
IGZyb20gdGhlIFNWRyBtb2RlbC4KICAgICAgICAgY29uc3QgU1ZHRWxlbWVudCogc3ZnRWxlbWVu
dCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0VsZW1lbnQqPih0aGlzKTsKLSAgICAgICAgRmxvYXRS
ZWN0IGxvY2FsUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGxvY2FsUmVjdDsKICAgICAgICAg
aWYgKHN2Z0VsZW1lbnQtPmJvdW5kaW5nQm94KGxvY2FsUmVjdCkpCiAgICAgICAgICAgICBxdWFk
cy5hcHBlbmQocmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKICAg
ICB9IGVsc2UKQEAgLTYwMiw3ICs2MDIsNyBAQAogICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUoKTsKIAotICAgIEZsb2F0UmVjdCByZXN1
bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCByZXN1bHQgPSBx
dWFkc1swXS5ib3VuZGluZ0JveCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgp
KTsKIApAQCAtNjExLDEwICs2MTEsMTAgQEAKICAgICAgICAgcmVzdWx0Lm1vdmUoLXZpc2libGVD
b250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKICAgICB9CiAKLSAgICBh
ZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigpKTsKKyAgICBh
ZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigpKTsKICAg
ICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBhZGp1c3RGbG9hdFJl
Y3RGb3JQYWdlU2NhbGUocmVzdWx0LCBmcmFtZS0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgICAg
ICAgICAgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgZnJhbWUtPnBhZ2VT
Y2FsZUZhY3RvcigpKTsKICAgICB9CiAKICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRlKHJl
c3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQAogY2xhc3MgRXZl
bnQ7CiBjbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgRmxv
YXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnRSZWN0OwpAQCAtNDI4LDggKzQyOCw4IEBACiAgICAgdmly
dHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAKICAgICAvLyBHZXR0aW5nIHBv
aW50cyBpbnRvIGFuZCBvdXQgb2Ygc2NyZWVuIHNwYWNlCi0gICAgRmxvYXRQb2ludCBjb252ZXJ0
VG9QYWdlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGNvbnZlcnRG
cm9tUGFnZShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBjb252
ZXJ0VG9QYWdlKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50
IGNvbnZlcnRGcm9tUGFnZShjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAKICAgICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEludGVncmF0aW9uIHdpdGggcmVuZGVyaW5nIHRy
ZWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIzLDcgKzEx
MjMsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFt
ZS0+cGFnZVpvb21GYWN0b3IoKTsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChGbG9hdFBvaW50KGNlbnRlclggKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxYKCksIGNl
bnRlclkgKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxZKCkpKTsKKyAgICBJbnRQb2ludCBw
b2ludCA9IHJvdW5kZWRJbnRQb2ludChHcmFwaGljc1BvaW50KGNlbnRlclggKiB6b29tRmFjdG9y
ICsgdmlldygpLT5zY3JvbGxYKCksIGNlbnRlclkgKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3Jv
bGxZKCkpKTsKIAogICAgIGludCB0eXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKIApAQCAtMTE3MSw3ICsxMTcxLDcgQEAKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7
Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludCh4ICogem9v
bUZhY3RvciAgKyBmcmFtZVZpZXctPnNjcm9sbFgoKSwgeSAqIHpvb21GYWN0b3IgKyBmcmFtZVZp
ZXctPnNjcm9sbFkoKSkpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEdy
YXBoaWNzUG9pbnQoeCAqIHpvb21GYWN0b3IgICsgZnJhbWVWaWV3LT5zY3JvbGxYKCksIHkgKiB6
b29tRmFjdG9yICsgZnJhbWVWaWV3LT5zY3JvbGxZKCkpKTsKIAogICAgIGlmICghZnJhbWVWaWV3
LT52aXNpYmxlQ29udGVudFJlY3QoKS5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKIHsKIH0KIAotQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RM
aXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK0NsaWVudFJlY3RMaXN0OjpDbGll
bnRSZWN0TGlzdChjb25zdCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgbV9s
aXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocXVhZHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJEZWxldGVCdXR0b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTg0OSw3ICs4NDksNyBAQAogICAg
ICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZGVsZXRlQnV0dG9uQ29udHJvbGxl
cigpLT5lbmFibGUoKTsKIH0KIAotYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3Ju
ZXIoRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVy
TGVmdENvcm5lcihHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgIFJl
bmRlck9iamVjdCAqcCA9IG87CiAKICAgICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
KSwgZmFsc2UsIHRydWUpOworICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFw
aGljc1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC04ODMsMTQgKzg4MywxNCBAQAogICAgICAgICBBU1NFUlQobyk7CiAKICAgICAgICAgaWYg
KCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgcG9pbnQg
PSBvLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAg
ICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIGZhbHNlLCB0
cnVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHAtPm5vZGUoKSAmJiBwLT5ub2RlKCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNC
UigpICYmICF0b1JlbmRlclRleHQobyktPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gZG8gbm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIHRoYXQgaXMgYSBj
aGlsZCBvciBuZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcgogICAgICAgICB9IGVsc2UgaWYgKChv
LT5pc1RleHQoKSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAg
ICAgIHBvaW50ID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgcG9pbnQgPSBHcmFwaGljc1Bv
aW50KCk7CiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG8pLT5m
aXJzdFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUodG9SZW5kZXJUZXh0
KG8pLT5saW5lc0JvdW5kaW5nQm94KCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9SZW5kZXJUZXh0KG8pLT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5lVG9wKCkpOwpAQCAt
OTA2LDE0ICs5MDYsMTQgQEAKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBhbnkg
Y2hpbGRyZW4gb3Igc2libGluZ3MgdGhhdCBjb3VsZCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUg
c2Nyb2xsIHBvc2l0aW9uLCB3ZSBtdXN0IGJlCiAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZG9j
dW1lbnQuICBTY3JvbGwgdG8gdGhlIGJvdHRvbS4gRklYTUU6IHdobyBzYWlkIGFueXRoaW5nIGFi
b3V0IHNjcm9sbGluZz8KICAgICBpZiAoIW8gJiYgZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAg
ICAgIHBvaW50ID0gRmxvYXRQb2ludCgwLCBkb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzSGVp
Z2h0KCkpOworICAgICAgICBwb2ludCA9IEdyYXBoaWNzUG9pbnQoMCwgZG9jdW1lbnQoKS0+dmll
dygpLT5jb250ZW50c0hlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3Rs
eSB3aXRoIHRyYW5zZm9ybXMuCi1ib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3Ju
ZXIoRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIENvbnRhaW5lck5vZGU6OmdldExvd2Vy
UmlnaHRDb3JuZXIoR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5k
ZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICBS
ZW5kZXJPYmplY3QqIG8gPSByZW5kZXJlcigpOwogICAgIGlmICghby0+aXNJbmxpbmUoKSB8fCBv
LT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChv
KTsKLSAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9p
bnQoKSwgZmFsc2UsIHRydWUpOwogICAgICAgICBwb2ludC5tb3ZlKGJveC0+c2l6ZSgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTQ0LDcgKzk0NCw3IEBACiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKG8pOwogICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgICAgICBwb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICAgICAgICAg
IHBvaW50ID0gR3JhcGhpY3NQb2ludCgpOwogICAgICAgICAgICAgaWYgKG8tPmlzVGV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChvKTsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IGxpbmVzQm94ID0gdGV4dC0+bGluZXNCb3VuZGluZ0JveCgp
OwpAQCAtOTY0LDcgKzk2NCw3IEBACiAKIEludFJlY3QgQ29udGFpbmVyTm9kZTo6Z2V0UmVjdCgp
IGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludCAgdXBwZXJMZWZ0LCBsb3dlclJpZ2h0OworICAgIEdy
YXBoaWNzUG9pbnQgIHVwcGVyTGVmdCwgbG93ZXJSaWdodDsKICAgICBib29sIGZvdW5kVXBwZXJM
ZWZ0ID0gZ2V0VXBwZXJMZWZ0Q29ybmVyKHVwcGVyTGVmdCk7CiAgICAgYm9vbCBmb3VuZExvd2Vy
UmlnaHQgPSBnZXRMb3dlclJpZ2h0Q29ybmVyKGxvd2VyUmlnaHQpOwogICAgIApAQCAtOTc3LDcg
Kzk3Nyw3IEBACiAgICAgICAgICAgICB1cHBlckxlZnQgPSBsb3dlclJpZ2h0OwogICAgIH0gCiAK
LSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodXBwZXJMZWZ0LCBsb3dlclJp
Z2h0LmV4cGFuZGVkVG8odXBwZXJMZWZ0KSAtIHVwcGVyTGVmdCkpOworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdCh1cHBlckxlZnQsIGxvd2VyUmlnaHQuZXhwYW5kZWRU
byh1cHBlckxlZnQpIC0gdXBwZXJMZWZ0KSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6c2V0
Rm9jdXMoYm9vbCByZWNlaXZlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjZGVmaW5lIFJhbmdlX2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhv
bGRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUmFu
Z2VCb3VuZGFyeVBvaW50LmgiCkBAIC00MSw3ICs0MSw3IEBACiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwotY2xhc3MgRmxvYXRR
dWFkOworY2xhc3MgR3JhcGhpY3NRdWFkOwogY2xhc3MgTm9kZVdpdGhJbmRleDsKIGNsYXNzIFRl
eHQ7CiAKQEAgLTExNSw5ICsxMTUsOSBAQAogICAgIC8vIE5vdCB0cmFuc2Zvcm0tZnJpZW5kbHkK
ICAgICB2b2lkIHRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCA9IGZhbHNlKTsKICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKLSAgICB2b2lkIHRleHRR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2Up
IGNvbnN0OwotICAgIHZvaWQgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgIHZvaWQg
dGV4dFF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQg
PSBmYWxzZSkgY29uc3Q7CisgICAgdm9pZCBnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEdy
YXBoaWNzUXVhZD4mKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0KCkgY29u
c3Q7CiAKICAgICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSopOwogICAg
IHZvaWQgbm9kZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlKik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1doZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRl
ZiBXaGVlbEV2ZW50X2gKICNkZWZpbmUgV2hlZWxFdmVudF9oCiAKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIk1vdXNlUmVsYXRl
ZEV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDggKzM4LDggQEAKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXaGVlbEV2ZW50KTsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXaGVlbEV2ZW50PiBjcmVhdGUoY29uc3Qg
RmxvYXRQb2ludCYgd2hlZWxUaWNrcywKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHJh
d0RlbHRhLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+
IHZpZXcsCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdoZWVsRXZlbnQ+IGNyZWF0ZShjb25z
dCBHcmFwaGljc1BvaW50JiB3aGVlbFRpY2tzLAorICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcmF3RGVsdGEsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4gdmlldywKICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JlZW5Mb2NhdGlv
biwgY29uc3QgSW50UG9pbnQmIHBhZ2VMb2NhdGlvbiwKICAgICAgICAgICAgIGJvb2wgY3RybEtl
eSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSkKICAgICAgICAgewpA
QCAtNjcsNyArNjcsNyBAQAogCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2hlZWxFdmVudCgpOwot
ICAgICAgICBXaGVlbEV2ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHdoZWVsVGlja3MsIGNvbnN0IEZs
b2F0UG9pbnQmIHJhd0RlbHRhLAorICAgICAgICBXaGVlbEV2ZW50KGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHdoZWVsVGlja3MsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHJhd0RlbHRhLAogICAgICAgICAg
ICAgICAgICAgIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmll
dz4sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBj
b25zdCBJbnRQb2ludCYgcGFnZUxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDcgKzg0Myw3IEBACiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwotICAgIEZsb2F0UG9pbnQgYWJzUG9z
ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQ
b3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICByZW5kZXJlcigpLT5hYnNv
bHV0ZVJlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQoYWJzUG9zKSk7CiAgICAgc2l6ZV90IG4g
PSByZWN0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCkBAIC0y
MjYyLDcgKzIyNjIsNyBAQAogICAgICAgICAgICAgICAgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VE
SU5HIHwgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlM7CiB9CiAKLUZsb2F0UG9pbnQgTm9kZTo6
Y29udmVydFRvUGFnZShjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAorR3JhcGhpY3NQb2ludCBO
b2RlOjpjb252ZXJ0VG9QYWdlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAg
Ly8gSWYgdGhlcmUgaXMgYSByZW5kZXJlciwganVzdCBhc2sgaXQgdG8gZG8gdGhlIGNvbnZlcnNp
b24KICAgICBpZiAocmVuZGVyZXIoKSkKQEAgLTIyNzcsNyArMjI3Nyw3IEBACiAgICAgcmV0dXJu
IHA7CiB9CiAKLUZsb2F0UG9pbnQgTm9kZTo6Y29udmVydEZyb21QYWdlKGNvbnN0IEZsb2F0UG9p
bnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShjb25zdCBH
cmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIC8vIElmIHRoZXJlIGlzIGEgcmVuZGVyZXIs
IGp1c3QgYXNrIGl0IHRvIGRvIHRoZSBjb252ZXJzaW9uCiAgICAgaWYgKHJlbmRlcmVyKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUg
IkNsaWVudFJlY3RMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC0xNjUzLDcgKzE2NTMsNyBAQAogICAgIH0K
IH0KIAotdm9pZCBSYW5nZTo6dGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQpIGNvbnN0Cit2b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9y
PEdyYXBoaWNzUXVhZD4mIHF1YWRzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkgY29uc3QKIHsK
ICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgTm9k
ZSogZW5kQ29udGFpbmVyID0gbV9lbmQuY29udGFpbmVyKCk7CkBAIC0xOTE0LDcgKzE5MTQsNyBA
QAogCiAgICAgbV9vd25lckRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFw
aGljc1F1YWQ+IHF1YWRzOwogICAgIGdldEJvcmRlckFuZFRleHRRdWFkcyhxdWFkcyk7CiAKICAg
ICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7CkBAIC0xOTIyLDExICsxOTIy
LDExIEBACiAKIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gUmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKKyAg
ICBHcmFwaGljc1JlY3QgcmVjdCA9IGJvdW5kaW5nUmVjdCgpOwogICAgIHJldHVybiByZWN0Lmlz
RW1wdHkoKSA/IDAgOiBDbGllbnRSZWN0OjpjcmVhdGUocmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lk
IGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCitzdGF0aWMgdm9pZCBhZGp1c3RHcmFwaGljc1F1YWRzRm9yU2Nyb2xsQW5kQWJz
b2x1dGVab29tQW5kUGFnZVNjYWxlKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcywgRG9jdW1l
bnQqIGRvY3VtZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIEZyYW1lVmlldyog
dmlldyA9IGRvY3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpAQCAtMTk0MSwxMyArMTk0
MSwxMyBAQAogICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsr
aSkgewogICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlz
aWJsZUNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRl
Wm9vbShxdWFkc1tpXSwgcmVuZGVyZXIpOworICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JB
YnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKICAgICAgICAgaWYgKHBhZ2VTY2FsZSAh
PSAxKQotICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBw
YWdlU2NhbGUpOworICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkRm9yUGFnZVNjYWxlKHF1
YWRzW2ldLCBwYWdlU2NhbGUpOwogICAgIH0KIH0KIAotdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5k
VGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QKK3ZvaWQgUmFuZ2U6Omdl
dEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpIGNvbnN0CiB7
CiAgICAgTm9kZSogc3RhcnRDb250YWluZXIgPSBtX3N0YXJ0LmNvbnRhaW5lcigpOwogICAgIE5v
ZGUqIGVuZENvbnRhaW5lciA9IG1fZW5kLmNvbnRhaW5lcigpOwpAQCAtMTk2Myw5ICsxOTYzLDkg
QEAKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgaWYg
KCFub2RlU2V0LmNvbnRhaW5zKG5vZGUtPnBhcmVudE5vZGUoKSkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGVsZW1lbnRRdWFkczsKKyAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gZWxlbWVudFF1YWRzOwogICAgICAgICAgICAg
ICAgICAgICByZW5kZXJCb3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVhZHMp
OwotICAgICAgICAgICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1
dGVab29tQW5kUGFnZVNjYWxlKGVsZW1lbnRRdWFkcywgbV9vd25lckRvY3VtZW50LmdldCgpLCBy
ZW5kZXJCb3hNb2RlbE9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdEdyYXBoaWNz
UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoZWxlbWVudFF1YWRzLCBt
X293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKIAogICAgICAgICAg
ICAgICAgICAgICBxdWFkcy5hcHBlbmQoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgICAgICB9
CkBAIC0xOTc2LDkgKzE5NzYsOSBAQAogICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9
IChub2RlID09IHN0YXJ0Q29udGFpbmVyKSA/IG1fc3RhcnQub2Zmc2V0KCkgOiAwOwogICAgICAg
ICAgICAgICAgIGludCBlbmRPZmZzZXQgPSAobm9kZSA9PSBlbmRDb250YWluZXIpID8gbV9lbmQu
b2Zmc2V0KCkgOiBJTlRfTUFYOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAgICAgICAgICAgICBWZWN0b3I8R3JhcGhp
Y3NRdWFkPiB0ZXh0UXVhZHM7CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dC0+YWJzb2x1dGVR
dWFkc0ZvclJhbmdlKHRleHRRdWFkcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VT
Y2FsZSh0ZXh0UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7CisgICAg
ICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZFBhZ2VTY2FsZSh0ZXh0UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7
CiAKICAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQodGV4dFF1YWRzKTsKICAgICAgICAgICAg
IH0KQEAgLTE5ODcsMTkgKzE5ODcsMTkgQEAKIH0KIAogICAgIAotRmxvYXRSZWN0IFJhbmdlOjpi
b3VuZGluZ1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJhbmdlOjpib3VuZGluZ1JlY3QoKSBj
b25zdAogewogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBtX293bmVy
RG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7
CiAgICAgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKHF1YWRzKTsKICAgICBpZiAocXVhZHMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIAotICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgR3JhcGhpY3NSZWN0IHJlc3Vs
dDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQogICAgICAg
ICByZXN1bHQudW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0NsaWVudFJlY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xp
ZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaWZuZGVmIENsaWVu
dFJlY3RfaAogI2RlZmluZSBDbGllbnRSZWN0X2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzksNyArMzksNyBAQAogICAgIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IENsaWVudFJlY3QpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaWVudFJlY3Q+IGNyZWF0ZShjb25zdCBJbnRSZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ2xpZW50UmVjdChyZWN0KSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xp
ZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IENsaWVudFJlY3QocmVjdCkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaWVu
dFJlY3Q+IGNyZWF0ZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbGllbnRSZWN0KHJlY3QpKTsgfQogCiAgICAgICAgIGZsb2F0IHRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC55KCk7IH0KICAgICAgICAgZmxvYXQgcmlnaHQoKSBjb25zdCB7IHJldHVy
biBtX3JlY3QubWF4WCgpOyB9CkBAIC01MSw5ICs1MSw5IEBACiAgICAgcHJpdmF0ZToKICAgICAg
ICAgQ2xpZW50UmVjdCgpOwogICAgICAgICBDbGllbnRSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgQ2xpZW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgQ2xpZW50UmVjdChj
b25zdCBHcmFwaGljc1JlY3QmKTsKIAotICAgICAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgICAg
ICBHcmFwaGljc1JlY3QgbV9yZWN0OwogICAgIH07IAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Citj
bGFzcyBHcmFwaGljc1BvaW50OwogICAgIAogdHlwZWRlZiB2b2lkICgqTm9kZUNhbGxiYWNrKShO
b2RlKiwgdW5zaWduZWQpOwogCkBAIC0xMDksOCArMTA5LDggQEAKIAogICAgIHN0YXRpYyB2b2lk
IGRpc3BhdGNoUG9zdEF0dGFjaENhbGxiYWNrcygpOwogCi0gICAgYm9vbCBnZXRVcHBlckxlZnRD
b3JuZXIoRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihG
bG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoR3JhcGhpY3NQ
b2ludCYpIGNvbnN0OworICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihHcmFwaGljc1BvaW50
JikgY29uc3Q7CiAKICAgICBOb2RlKiBtX2ZpcnN0Q2hpbGQ7CiAgICAgTm9kZSogbV9sYXN0Q2hp
bGQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBDbGllbnRSZWN0TGlzdF9oCiAjZGVmaW5lIENsaWVu
dFJlY3RMaXN0X2gKIAotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UXVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zOSw3ICszOSw3IEBACiAgICAg
Y2xhc3MgQ2xpZW50UmVjdExpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDbGllbnRSZWN0TGlzdD4g
ewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0TGlzdCk7IH0KLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IGNyZWF0ZShjb25zdCBWZWN0b3I8
RmxvYXRRdWFkPiYgcXVhZHMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0TGlzdChx
dWFkcykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBjcmVh
dGUoY29uc3QgVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ2xpZW50UmVjdExpc3QocXVhZHMpKTsgfQogICAgICAgICB+Q2xpZW50UmVjdExpc3QoKTsK
IAogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIENsaWVudFJlY3RMaXN0KCk7Ci0gICAgICAgIENsaWVudFJl
Y3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgICAgIENsaWVudFJlY3RMaXN0
KGNvbnN0IFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICAgICAgVmVjdG9yPFJlZlB0cjxD
bGllbnRSZWN0PiA+IG1fbGlzdDsKICAgICB9OyAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
bGllbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVj
dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiB7CiB9CiAKLUNsaWVudFJlY3Q6
OkNsaWVudFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorQ2xpZW50UmVjdDo6Q2xpZW50UmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiAgICAgOiBtX3JlY3QocmVjdCkKIHsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTE1NSw3
ICsxNTUsNyBAQAogCiB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFz
c1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQp
CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdl
VG9SZXBsYWNlLmdldCgpKTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dS
ZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwogICAgIGlmIChib3VuZGluZ0JveC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVw
bGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwpAQCAtMjk4LDcg
KzI5OCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBs
YWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RG
b3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9j
b3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKICAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJl
Y3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwg
bV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+KCkpOwogICAgIH0KQEAgLTMxNiw3
ICszMTYsNyBAQAogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zLmZp
cnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9jb3JyZWN0
aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVS
ZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCA9IHdpbmRv
d1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0
KCkpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNs
aWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5wYW5lbFR5
cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcsIHRv
cFN1Z2dlc3Rpb24sIHN1Z2dlc3Rpb25zKTsKICAgICB9CkBAIC0zNjIsMTQgKzM2MiwxNCBAQAog
ICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZShj
b25zdCBSYW5nZSogcmFuZ2UpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+dmlldygpOwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHRleHRRdWFkczsKICAgICByYW5nZS0+
dGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRpbmdSZWN0OwogICAgIHNpemVfdCBzaXplID0gdGV4dFF1YWRzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgYm91
bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgpAQCAtMTEz
NCw3ICsxMTM0LDcgQEAKICAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChyZWN0KTsKICAgICBpZiAo
Y2FyZXRQYWludGVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChjYXJldFBhaW50ZXIp
LT5mbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsKLSAgICByZXR1cm4gY2FyZXRQYWludGVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworICAgIHJldHVybiBjYXJldFBhaW50ZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
R3JhcGhpY3NSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKIExh
eW91dFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoKQpAQCAtMTczMiw3
ICsxNzMyLDcgQEAKICAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5zaG91
bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CiAK
LUZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpIGNvbnN0CitHcmFwaGljc1JlY3QgRnJhbWVTZWxlY3Rpb246OmJvdW5kcyhib29sIGNsaXBU
b1Zpc2libGVDb250ZW50KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBtX2ZyYW1l
LT5jb250ZW50UmVuZGVyZXIoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3
KCk7CkBAIC0xNzQzLDIwICsxNzQzLDIwIEBACiAgICAgcmV0dXJuIGNsaXBUb1Zpc2libGVDb250
ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZpc2libGVDb250ZW50UmVj
dCgpKSA6IHNlbGVjdGlvblJlY3Q7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBw
ZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMpIGNv
bnN0Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVz
KFZlY3RvcjxHcmFwaGljc1JlY3Q+JiByZWN0YW5nbGVzKSBjb25zdAogewogICAgIFJlbmRlclZp
ZXcqIHJvb3QgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKICAgICBpZiAoIXJvb3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2Zy
YW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCB2aXNp
YmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwog
Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4g
cXVhZHM7CiAgICAgdG9Ob3JtYWxpemVkUmFuZ2UoKS0+dGV4dFF1YWRzKHF1YWRzLCB0cnVlKTsK
IAogICAgIHNpemVfdCBzaXplID0gcXVhZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0g
aW50ZXJzZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCksIHZpc2libGVDb250
ZW50UmVjdCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJz
ZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCksIHZpc2libGVDb250ZW50UmVj
dCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc0NCw3ICsyNzQ0LDcgQEAK
ICAgICBBU1NFUlQoc3RhcnRSZW5kZXJlcik7CiAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9
IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0
T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKICAgICBpZiAoc3RhcnRDYXJldFJlY3Qg
IT0gSW50UmVjdCgpKQotICAgICAgICBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHN0YXJ0Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKKyAgICAgICAgc3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChzdGFydENhcmV0UmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CiAKICAgICBJbmxpbmVCb3gqIGVuZElubGluZUJveDsKICAgICBpbnQgZW5k
Q2FyZXRPZmZzZXQ7CkBAIC0yNzU3LDcgKzI3NTcsNyBAQAogICAgIEFTU0VSVChlbmRSZW5kZXJl
cik7CiAgICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxDYXJldFJl
Y3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CiAgICAgaWYgKGVuZENhcmV0UmVjdCAh
PSBJbnRSZWN0KCkpCi0gICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOworICAgICAgICBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChHcmFwaGljc1JlY3QoZW5kQ2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IAogICAgIGlmIChzdGFydENhcmV0UmVjdC55KCkgPT0gZW5kQ2FyZXRSZWN0LnkoKSkgewogICAg
ICAgICAvLyBzdGFydCBhbmQgZW5kIGFyZSBvbiB0aGUgc2FtZSBsaW5lCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjMz
LDkgKzIzMyw5IEBACiAgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4pOwogICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi0gICAgRmxvYXRSZWN0IGJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAK
LSAgICB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVj
dD4mKSBjb25zdDsKKyAgICB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVj
dG9yPEdyYXBoaWNzUmVjdD4mKSBjb25zdDsKIAogICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVu
dEZvcm0oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw3ICs1MDksNyBAQAogewogICAgIEFT
U0VSVChyb290KTsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gcm9vdC0+Ymxv
Y2soKTsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlQmxvY2tQb2ludCA9IGNvbnRhaW5pbmdCbG9j
ay0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNv
bHV0ZUJsb2NrUG9pbnQgPSBjb250YWluaW5nQmxvY2stPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGlj
c1BvaW50KCkpOwogICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKQog
ICAgICAgICBhYnNvbHV0ZUJsb2NrUG9pbnQgLT0gY29udGFpbmluZ0Jsb2NrLT5sYXllcigpLT5z
Y3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcg
QEAKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCkBAIC01OTMsNyArNTkzLDcgQEAKICAgICBpZiAobG9jYWxSZWN0Lmlz
RW1wdHkoKSB8fCAhcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBy
ZXR1cm4gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEdyYXBoaWNzUmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwogfQogCiBpbnQgVmlzaWJsZVBvc2l0aW9uOjpsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0Rp
cmVjdGlvbk5hdmlnYXRpb24oKSBjb25zdApAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgLy8gVGhp
cyBpZ25vcmVzIHRyYW5zZm9ybXMgb24gcHVycG9zZSwgZm9yIG5vdy4gVmVydGljYWwgbmF2aWdh
dGlvbiBpcyBkb25lCiAgICAgLy8gd2l0aG91dCBjb25zdWx0aW5nIHRyYW5zZm9ybXMsIHNvIHRo
YXQgJ3VwJyBpbiB0cmFuc2Zvcm1lZCB0ZXh0IGlzICd1cCcKICAgICAvLyByZWxhdGl2ZSB0byB0
aGUgdGV4dCwgbm90IGFic29sdXRlICd1cCcuCi0gICAgRmxvYXRQb2ludCBjYXJldFBvaW50ID0g
cmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShsb2NhbFJlY3QubG9jYXRpb24oKSk7CisgICAgR3Jh
cGhpY3NQb2ludCBjYXJldFBvaW50ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShsb2NhbFJl
Y3QubG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNhcmV0UG9pbnQueCgpIDogY2FyZXRQb2ludC55
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsNyArMTI0LDcgQEAKIAogICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CiAgICAg
VGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCB3aW5kb3dS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKICAgICB2b2lkIG1hcmtQcmVjZWRpbmdX
aGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5k
Kik7CiAKICAgICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBjbGFzcyBF
bGVtZW50OwogICAgIGNsYXNzIEZpbGVDaG9vc2VyOwogICAgIGNsYXNzIEZpbGVJY29uTG9hZGVy
OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xh
c3MgRnJhbWU7CiAgICAgY2xhc3MgR2VvbG9jYXRpb247CiAgICAgY2xhc3MgR3JhcGhpY3NMYXll
cjsKQEAgLTc5LDEwICs3OSwxMCBAQAogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lk
IGNocm9tZURlc3Ryb3llZCgpID0gMDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICAgICAgdmlydHVhbCBGbG9h
dFJlY3Qgd2luZG93UmVjdCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1Jl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JikgPSAwOworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVj
dCB3aW5kb3dSZWN0KCkgPSAwOwogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cGFnZVJlY3QoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCkg
PSAwOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpID0gMDsK
ICAgICAKQEAgLTIwOSwxNyArMjA5LDE3IEBACiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVs
YXRlVmlzaXRlZExpbmtzKCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY3VzdG9tSGln
aGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGxpbmVSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50
Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwKICAgICAg
ICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsKICAgICAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBs
b2FkKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RyaW5nJiBnZW5lcmF0ZWRGaWxlbmFtZSk7CiAgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKKyAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTdGF0ZSwgU2Ny
b2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBmbG9hdCBwcm9wb3J0aW9uLCBT
Y3JvbGxiYXJDb250cm9sUGFydE1hc2spOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0
b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0
b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVk
ZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtMjY3LDcgKzI2Nyw3IEBACiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnRVbmRlck1vdXNlLT5mcmFtZSgpOwogICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBmcmFtZSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMTsKLSAgICBJbnRQb2ludCBw
b2ludCA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KHAueCgpICogem9vbUZhY3RvciwgcC55
KCkgKiB6b29tRmFjdG9yKSk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQo
R3JhcGhpY3NQb2ludChwLngoKSAqIHpvb21GYWN0b3IsIHAueSgpICogem9vbUZhY3RvcikpOwog
CiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogICAgIGNs
YXNzIENocm9tZUNsaWVudDsKICAgICBjbGFzcyBGaWxlQ2hvb3NlcjsKICAgICBjbGFzcyBGaWxl
SWNvbkxvYWRlcjsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0
OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEdlb2xvY2F0aW9uOwogICAgIGNsYXNzIEhp
dFRlc3RSZXN1bHQ7CkBAIC04NywxMCArODcsMTAgQEAKICAgICAgICAgdm9pZCBjb250ZW50c1Np
emVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwogICAgICAgICB2b2lkIGxh
eW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldFdpbmRvd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKSBj
b25zdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKSBjb25zdDsKIAotICAgICAg
ICBGbG9hdFJlY3QgcGFnZVJlY3QoKSBjb25zdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHBhZ2VS
ZWN0KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcigpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0y
NjEwLDcgKzI2MTAsNyBAQAogICAgIGxheW91dChhbGxvd1N1YnRyZWUpOwogfQogCi12b2lkIEZy
YW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNp
emUsIGZsb2F0IG1heGltdW1TaHJpbmtGYWN0b3IsIEFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxk
QWRqdXN0Vmlld1NpemUpCit2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9u
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtGYWN0b3Is
IEFkanVzdFZpZXdTaXplT3JOb3Qgc2hvdWxkQWRqdXN0Vmlld1NpemUpCiB7CiAgICAgLy8gRHVt
cGluZyBleHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fZnJhbWUtPnJlbmRlcmVyKCkpLmFzY2lpKCkg
aXMgYSBnb29kIHRyaWNrIHRvIHNlZQogICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGluZ3MgYmVmb3Jl
IGFuZCBhZnRlciB0aGUgbGF5b3V0CkBAIC0yNjc3LDcgKzI2NzcsNyBAQAogCiBJbnRSZWN0IEZy
YW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBJbnRSZWN0JiByZW5kZXJlclJlY3QpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCByZWN0
ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlbmRlcmVyUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KHJlbmRlcmVyUmVjdCkpLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CiAKICAgICAvLyBDb252ZXJ0IGZyb20gcGFnZSAoImFic29sdXRlIikgdG8g
RnJhbWVWaWV3IGNvb3JkaW5hdGVzLgogICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCw4IEBACiAKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBo
aWNzU2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFJlY3Q7CiAKQEAgLTQz
LDE4ICs0MywxOCBAQAogICAgIC8vIEJyZWFrIHVwIGEgcGFnZSBpbnRvIHJlY3RzIHdpdGhvdXQg
cmVsYXlvdXQuCiAgICAgLy8gRklYTUU6IFRoaXMgbWVhbnMgdGhhdCBDU1MgcGFnZSBicmVha3Mg
d29uJ3QgYmUgb24gcGFnZSBib3VuZGFyeSBpZiB0aGUgc2l6ZSBpcyBkaWZmZXJlbnQgdGhhbiB3
aGF0IHdhcyBwYXNzZWQgdG8gYmVnaW4oKS4gVGhhdCdzIHByb2JhYmx5IG5vdCBhbHdheXMgZGVz
aXJhYmxlLgogICAgIC8vIEZJWE1FOiBIZWFkZXIgYW5kIGZvb3RlciBoZWlnaHQgc2hvdWxkIGJl
IGFwcGxpZWQgYmVmb3JlIGxheW91dCwgbm90IGFmdGVyLgotICAgIC8vIEZJWE1FOiBUaGUgcHJp
bnRSZWN0IGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB0byBkZXRlcm1pbmUgcGFnZSBhc3BlY3QgcmF0
aW8sIGl0IHdvdWxkIGJlIGJldHRlciB0byBwYXNzIGEgRmxvYXRTaXplIHdpdGggcGFnZSBkaW1l
bnNpb25zIGluc3RlYWQuCi0gICAgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVj
dCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxv
YXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6
b250YWxUaWxpbmcgPSBmYWxzZSk7CisgICAgLy8gRklYTUU6IFRoZSBwcmludFJlY3QgYXJndW1l
bnQgaXMgb25seSB1c2VkIHRvIGRldGVybWluZSBwYWdlIGFzcGVjdCByYXRpbywgaXQgd291bGQg
YmUgYmV0dGVyIHRvIHBhc3MgYSBHcmFwaGljc1NpemUgd2l0aCBwYWdlIGRpbWVuc2lvbnMgaW5z
dGVhZC4KKyAgICB2b2lkIGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0JiBwcmlu
dFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2Vy
U2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRp
bGluZyA9IGZhbHNlKTsKIAogICAgIC8vIERlcHJlY2F0ZWQuIFBhZ2Ugc2l6ZSBjb21wdXRhdGlv
biBpcyBhbHJlYWR5IGluIHRoaXMgY2xhc3MsIGNsaWVudHMgc2hvdWxkbid0IGJlIGNvcHlpbmcg
aXQuCi0gICAgdm9pZCBjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpOworICAgIHZv
aWQgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VT
aXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAogICAgIC8vIFRoZXNl
IGFyZSBvbmx5IHZhbGlkIGFmdGVyIHBhZ2UgcmVjdHMgYXJlIGNvbXB1dGVkLgogICAgIHNpemVf
dCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VSZWN0cy5zaXplKCk7IH0KICAgICBj
b25zdCBJbnRSZWN0JiBwYWdlUmVjdChzaXplX3QgcGFnZU51bWJlcikgY29uc3QgeyByZXR1cm4g
bV9wYWdlUmVjdHNbcGFnZU51bWJlcl07IH0KICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBh
Z2VSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJlY3RzOyB9CiAKLSAgICBmbG9hdCBjb21w
dXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgRmxvYXRTaXplJiBhdmFpbGFibGVQYXBlclNp
emUpOworICAgIGZsb2F0IGNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3Rvcihjb25zdCBHcmFwaGlj
c1NpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSk7CiAKICAgICAvLyBFbnRlciBwcmludCBtb2RlLCB1
cGRhdGluZyBsYXlvdXQgZm9yIG5ldyBwYWdlIHNpemUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBj
YW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGFwcGx5IG5ldyBwcmludCBvcHRpb25zIHdp
dGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4gbW9kZS4KQEAgLTY5LDIyICs2OSwyMiBAQAogICAg
IHZvaWQgZW5kKCk7CiAKICAgICAvLyBVc2VkIGJ5IGxheW91dCB0ZXN0cy4KLSAgICBzdGF0aWMg
aW50IHBhZ2VOdW1iZXJGb3JFbGVtZW50KEVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmIHBhZ2VT
aXplSW5QaXhlbHMpOyAvLyBSZXR1cm5zIC0xIGlmIHBhZ2UgaXNuJ3QgZm91bmQuCisgICAgc3Rh
dGljIGludCBwYWdlTnVtYmVyRm9yRWxlbWVudChFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NTaXpl
JiBwYWdlU2l6ZUluUGl4ZWxzKTsgLy8gUmV0dXJucyAtMSBpZiBwYWdlIGlzbid0IGZvdW5kLgog
ICAgIHN0YXRpYyBTdHJpbmcgcGFnZVByb3BlcnR5KEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcik7CiAgICAgc3RhdGljIGJvb2wgaXNQYWdlQm94
VmlzaWJsZShGcmFtZSogZnJhbWUsIGludCBwYWdlTnVtYmVyKTsKICAgICBzdGF0aWMgU3RyaW5n
IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKEZyYW1lKiBmcmFtZSwgaW50IHBhZ2VOdW1iZXIs
IGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBp
bnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCk7Ci0gICAgc3RhdGljIGludCBudW1iZXJP
ZlBhZ2VzKEZyYW1lKiwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBz
dGF0aWMgaW50IG51bWJlck9mUGFnZXMoRnJhbWUqLCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VT
aXplSW5QaXhlbHMpOwogICAgIC8vIERyYXcgYWxsIHBhZ2VzIGludG8gYSBncmFwaGljcyBjb250
ZXh0IHdpdGggbGluZXMgd2hpY2ggbWVhbiBwYWdlIGJvdW5kYXJpZXMuCiAgICAgLy8gVGhlIGhl
aWdodCBvZiB0aGUgZ3JhcGhpY3MgY29udGV4dCBzaG91bGQgYmUKICAgICAvLyAocGFnZVNpemVJ
blBpeGVscy5oZWlnaHQoKSArIDEpICogbnVtYmVyLW9mLXBhZ2VzIC0gMQotICAgIHN0YXRpYyB2
b2lkIHNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyhGcmFtZSosIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscyk7CisgICAgc3RhdGljIHZvaWQgc3Bv
b2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
R3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKIAogcHJvdGVjdGVkOgogICAgIEZyYW1l
KiBtX2ZyYW1lOwogICAgIFZlY3RvcjxJbnRSZWN0PiBtX3BhZ2VSZWN0czsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBGbG9h
dFNpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAg
ICB2b2lkIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGlj
c1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAog
ICAgIC8vIFVzZWQgdG8gcHJldmVudCBtaXN1c2VzIG9mIGJlZ2luKCkgYW5kIGVuZCgpIChlLmcu
LCBjYWxsIGVuZCB3aXRob3V0IGJlZ2luKS4KICAgICBib29sIG1faXNQcmludGluZzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTYxLDcgKzE2MSw3IEBACiAg
ICAgICAgIGFkZGl0aW9uYWxGZWF0dXJlcy5hcHBlbmQoa2V5U3RyaW5nKTsKIH0KIAotV2luZG93
RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJp
bmcsIGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCkKK1dpbmRvd0ZlYXR1cmVz
OjpXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBjb25z
dCBHcmFwaGljc1JlY3QmIHNjcmVlbkF2YWlsYWJsZVJlY3QpCiAgICAgOiB3aWR0aFNldCh0cnVl
KQogICAgICwgaGVpZ2h0U2V0KHRydWUpCiAgICAgLCBtZW51QmFyVmlzaWJsZShmYWxzZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1
Myw4IEBACiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50VGFyZ2V0Owot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7
CitjbGFzcyBHcmFwaGljc1F1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxGcmFtZVNldEVs
ZW1lbnQ7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgIHZv
aWQgdXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7CiAKICAgICB2b2lkIGRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbigpOwotICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRT
b29uSW5RdWFkKGNvbnN0IEZsb2F0UXVhZCYpOworICAgIHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VN
b3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYpOwogCiAgICAgSGl0VGVzdFJl
c3VsdCBoaXRUZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYsIGJvb2wgYWxsb3dTaGFk
b3dDb250ZW50LCBib29sIGlnbm9yZUNsaXBwaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0U2Nyb2xsYmFycyBzY3JvbGxiYXJzID0gRG9u
dEhpdFRlc3RTY3JvbGxiYXJzLApAQCAtMjkxLDcgKzI5MSw3IEBACiAKICAgICBib29sIGRpc3Bh
dGNoRHJhZ1NyY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIGJvb2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNv
bnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICBib29sIGRyYWdIeXN0ZXJlc2lzRXhjZWVk
ZWQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JU
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5oCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBG
bG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0OwogCiAgICAgc3RydWN0IFdpbmRvd0Zl
YXR1cmVzIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZWxldGUgdGhpcyBjb25zdHJ1Y3Rv
ciBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBjaGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCkBA
IC01NSw3ICs1NSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBXaW5kb3dGZWF0dXJlcyhjb25z
dCBTdHJpbmcmIHdpbmRvd0ZlYXR1cmVzU3RyaW5nKTsKLSAgICAgICAgV2luZG93RmVhdHVyZXMo
Y29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlc1N0cmluZywgY29uc3QgRmxvYXRSZWN0JiBzY3Jl
ZW5BdmFpbGFibGVSZWN0KTsKKyAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBk
aWFsb2dGZWF0dXJlc1N0cmluZywgY29uc3QgR3JhcGhpY3NSZWN0JiBzY3JlZW5BdmFpbGFibGVS
ZWN0KTsKIAogICAgICAgICBmbG9hdCB4OwogICAgICAgICBib29sIHhTZXQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNs
dWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC02NTksNyArNjU5LDcgQEAKICAgICAgICAg
aWYgKCFlZGl0YWJsZUVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFy
Z2V0Tm9kZS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoc2VsZWN0aW9u
RW5kUG9pbnQpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoc2VsZWN0aW9u
RW5kUG9pbnQpKTsKICAgICAgICAgc2VsZWN0aW9uRW5kUG9pbnQgPSByb3VuZGVkSW50UG9pbnQo
ZWRpdGFibGVFbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2lu
dCkpOwogICAgICAgICB0YXJnZXROb2RlID0gZWRpdGFibGVFbGVtZW50OwogICAgIH0KQEAgLTIz
NTQsNyArMjM1NCw3IEBACiAgICAgICAgIG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIuc3RhcnRP
bmVTaG90KGZha2VNb3VzZU1vdmVJbnRlcnZhbCk7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpk
aXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFk
KQordm9pZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVh
ZChjb25zdCBHcmFwaGljc1F1YWQmIHF1YWQpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9m
cmFtZS0+dmlldygpOwogICAgIGlmICghdmlldykKQEAgLTI2ODQsNyArMjY4NCw3IEBACiB9CiAK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotYm9vbCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJl
c2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbikg
Y29uc3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjpkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGZsb2F0RHJhZ1ZpZXdwb3J0TG9jYXRpb24pIGNvbnN0CiB7CiAgICAgSW50
UG9pbnQgZHJhZ1ZpZXdwb3J0TG9jYXRpb24oKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9u
LngoKSwgKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uLnkoKSk7CiAgICAgcmV0dXJuIGRy
YWdIeXN0ZXJlc2lzRXhjZWVkZWQoZHJhZ1ZpZXdwb3J0TG9jYXRpb24pOwpAQCAtMjg0Nyw3ICsy
ODQ3LDcgQEAKICAgICAgICAgaWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1R5cGUgPT0gRHJhZ1NvdXJj
ZUFjdGlvbkRIVE1MKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0
ZSgpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgICAgIEludFNpemUgZGVsdGEgPSBtX21vdXNl
RG93blBvcyAtIHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOwogICAgICAgICAgICAgICAgIGRyYWdT
dGF0ZSgpLm1fZHJhZ0NsaXBib2FyZC0+c2V0RHJhZ0ltYWdlRWxlbWVudChkcmFnU3RhdGUoKS5t
X2RyYWdTcmMuZ2V0KCksIHRvUG9pbnQoZGVsdGEpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogCiAjaW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTU2LDcgKzE1
Niw3IEBACiAgICAgfTsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86
OlBhbmVsVHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVu
dFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29u
Rm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShB
dXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5o
IgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01NDgsNyArNTQ4LDcgQEAKICAgICByZXR1cm4gdmll
dygpLT5iYXNlQmFja2dyb3VuZENvbG9yKCkuYmxlbmQoaHRtbEJhY2tncm91bmRDb2xvcikuYmxl
bmQoYm9keUJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJv
b2wgcHJpbnRpbmcsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJp
bmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKK3ZvaWQg
RnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFn
ZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91
bGRBZGp1c3RWaWV3U2l6ZSkKIHsKICAgICAvLyBJbiBzZXR0aW5nIHByaW50aW5nLCB3ZSBzaG91
bGQgbm90IHZhbGlkYXRlIHJlc291cmNlcyBhbHJlYWR5IGNhY2hlZCBmb3IgdGhlIGRvY3VtZW50
LgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3
MDQKQEAgLTU3MSwxMSArNTcxLDExIEBACiAgICAgICAgIGNoaWxkLT5zZXRQcmludGluZyhwcmlu
dGluZywgSW50U2l6ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CiB9CiAKLUZsb2F0U2l6
ZSBGcmFtZTo6cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKGNvbnN0IEZsb2F0U2l6ZSYgb3Jp
Z2luYWxTaXplLCBjb25zdCBGbG9hdFNpemUmIGV4cGVjdGVkU2l6ZSkKK0dyYXBoaWNzU2l6ZSBG
cmFtZTo6cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb3Jp
Z2luYWxTaXplLCBjb25zdCBHcmFwaGljc1NpemUmIGV4cGVjdGVkU2l6ZSkKIHsKLSAgICBGbG9h
dFNpemUgcmVzdWx0U2l6ZTsKKyAgICBHcmFwaGljc1NpemUgcmVzdWx0U2l6ZTsKICAgICBpZiAo
IWNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisgICAgICAg
IHJldHVybiBHcmFwaGljc1NpemUoKTsKIAogICAgIGlmIChjb250ZW50UmVuZGVyZXIoKS0+c3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBmbG9hdCByYXRpbyA9
IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAvIG9yaWdpbmFsU2l6ZS53aWR0aCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9F
dmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQAogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3Mg
RXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7Ci0gICAgY2xhc3Mg
RmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAg
ICBjbGFzcyBIaXN0b3J5OwogICAgIGNsYXNzIElEQkZhY3Rvcnk7CkBAIC0xMDYsNyArMTA2LDcg
QEAKICAgICAgICAgc3RhdGljIGJvb2wgZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZl
bnRzKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50
cygpOwogCi0gICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdFdpbmRvd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiBzY3JlZW4sIEZsb2F0UmVjdCYgd2luZG93LCBjb25zdCBGbG9hdFJlY3QmIHBlbmRpbmdD
aGFuZ2VzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0V2luZG93UmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHNjcmVlbiwgR3JhcGhpY3NSZWN0JiB3aW5kb3csIGNvbnN0IEdyYXBoaWNzUmVj
dCYgcGVuZGluZ0NoYW5nZXMpOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRo
aXMgZnVuY3Rpb24gb25jZSBWOCBzaG93TW9kYWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9N
V2luZG93LgogICAgICAgICBzdGF0aWMgdm9pZCBwYXJzZU1vZGFsRGlhbG9nRmVhdHVyZXMoY29u
c3QgU3RyaW5nJiwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIGNsYXNzIENvbG9yOwog
Y2xhc3MgRXZlbnQ7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFz
cyBGcmFtZTsKIGNsYXNzIEZyYW1lQWN0aW9uU2NoZWR1bGVyOwogY2xhc3MgSW50UmVjdDsKQEAg
LTIzMiw3ICsyMzIsNyBAQAogICAgIHZvaWQgc2V0SXNWaXN1YWxseU5vbkVtcHR5KCkgeyBtX2lz
VmlzdWFsbHlOb25FbXB0eSA9IHRydWU7IH0KIAogICAgIHZvaWQgZm9yY2VMYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUgPSBmYWxzZSk7Ci0gICAgdm9pZCBmb3JjZUxheW91dEZvclBhZ2luYXRpb24o
Y29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua0ZhY3RvciwgQWRq
dXN0Vmlld1NpemVPck5vdCk7CisgICAgdm9pZCBmb3JjZUxheW91dEZvclBhZ2luYXRpb24oY29u
c3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua0ZhY3RvciwgQWRq
dXN0Vmlld1NpemVPck5vdCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgcmV0YWlu
ZWQgYmVjYXVzZSBvZiBlbWJlZGRlZCBXZWJWaWV3cyBpbiBBcHBLaXQuICBXaGVuIGEgV2ViVmll
dyBpcyBlbWJlZGRlZCBpbnNpZGUKICAgICAvLyBzb21lIGVuY2xvc2luZyB2aWV3IHdpdGggYXV0
by1wYWdpbmF0aW9uLCBubyBjYWxsIGhhcHBlbnMgdG8gcmVzaXplIHRoZSB2aWV3LiAgVGhlIG5l
dyBwYWdpbmF0aW9uIG1vZGVsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDgg
KzE0Nyw4IEBACiAKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3Q7IC8vIGNhbiBi
ZSBOVUxMCiAKLSAgICAgICAgdm9pZCBzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjb25zdCBG
bG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8sIEFkanVzdFZpZXdT
aXplT3JOb3QpOwotICAgICAgICBGbG9hdFNpemUgcmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlv
KGNvbnN0IEZsb2F0U2l6ZSYgb3JpZ2luYWxTaXplLCBjb25zdCBGbG9hdFNpemUmIGV4cGVjdGVk
U2l6ZSk7CisgICAgICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywgY29uc3QgR3Jh
cGhpY3NTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvLCBBZGp1c3RWaWV3
U2l6ZU9yTm90KTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdS
YXRpbyhjb25zdCBHcmFwaGljc1NpemUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgR3JhcGhpY3NTaXpl
JiBleHBlY3RlZFNpemUpOwogCiAgICAgICAgIGJvb2wgaW5WaWV3U291cmNlTW9kZSgpIGNvbnN0
OwogICAgICAgICB2b2lkIHNldEluVmlld1NvdXJjZU1vZGUoYm9vbCA9IHRydWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAK
ICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMzIwLDcgKzMyMCw3IEBA
CiAvLyAgICBzY3JlZW4gcmVjdC4KIC8vIDUpIFRyYW5zbGF0ZSB0aGUgd2luZG93IHJlY3QgY29v
cmRpbmF0ZXMgdG8gYmUgd2l0aGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mCiAvLyAgICB0aGUg
c2NyZWVuIHJlY3QuCi12b2lkIERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBGbG9h
dFJlY3QmIHNjcmVlbiwgRmxvYXRSZWN0JiB3aW5kb3csIGNvbnN0IEZsb2F0UmVjdCYgcGVuZGlu
Z0NoYW5nZXMpCit2b2lkIERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBHcmFwaGlj
c1JlY3QmIHNjcmVlbiwgR3JhcGhpY3NSZWN0JiB3aW5kb3csIGNvbnN0IEdyYXBoaWNzUmVjdCYg
cGVuZGluZ0NoYW5nZXMpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIGluIGEgdmFsaWQgc3Rh
dGUgYmVmb3JlIGFkanVzdGluZyBkaW1lbnNpb25zLgogICAgIEFTU0VSVChpc2Zpbml0ZShzY3Jl
ZW4ueCgpKSk7CkBAIC0zNDMsOCArMzQzLDggQEAKICAgICAgICAgd2luZG93LnNldEhlaWdodChw
ZW5kaW5nQ2hhbmdlcy5oZWlnaHQoKSk7CiAgICAgCiAgICAgLy8gUmVzaXplIHRoZSB3aW5kb3cg
dG8gYmV0d2VlbiAxMDAgYW5kIHRoZSBzY3JlZW4gd2lkdGggYW5kIGhlaWdodC4KLSAgICB3aW5k
b3cuc2V0V2lkdGgobWluKG1heCgxMDAuMGYsIHdpbmRvdy53aWR0aCgpKSwgc2NyZWVuLndpZHRo
KCkpKTsKLSAgICB3aW5kb3cuc2V0SGVpZ2h0KG1pbihtYXgoMTAwLjBmLCB3aW5kb3cuaGVpZ2h0
KCkpLCBzY3JlZW4uaGVpZ2h0KCkpKTsKKyAgICB3aW5kb3cuc2V0V2lkdGgobWluKG1heDxHcmFw
aGljc1VuaXQ+KDEwMC4wZiwgd2luZG93LndpZHRoKCkpLCBzY3JlZW4ud2lkdGgoKSkpOworICAg
IHdpbmRvdy5zZXRIZWlnaHQobWluKG1heDxHcmFwaGljc1VuaXQ+KDEwMC4wZiwgd2luZG93Lmhl
aWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8gQ29uc3RyYWluIHRoZSB3
aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KICAgICB3aW5kb3cuc2V0WChtYXgoc2NyZWVu
LngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5tYXhYKCkgLSB3aW5kb3cud2lkdGgoKSkpKTsK
QEAgLTEzMTUsNyArMTMxNSw3IEBACiAKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIEZsb2F0UG9pbnQgcGFnZVBv
aW50KHAtPngoKSwgcC0+eSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHBhZ2VQb2ludChwLT54KCks
IHAtPnkoKSk7CiAgICAgcGFnZVBvaW50ID0gbm9kZS0+Y29udmVydFRvUGFnZShwYWdlUG9pbnQp
OwogICAgIHJldHVybiBXZWJLaXRQb2ludDo6Y3JlYXRlKHBhZ2VQb2ludC54KCksIHBhZ2VQb2lu
dC55KCkpOwogfQpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAogICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgRmxvYXRQ
b2ludCBub2RlUG9pbnQocC0+eCgpLCBwLT55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgbm9kZVBv
aW50KHAtPngoKSwgcC0+eSgpKTsKICAgICBub2RlUG9pbnQgPSBub2RlLT5jb252ZXJ0RnJvbVBh
Z2Uobm9kZVBvaW50KTsKICAgICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShub2RlUG9pbnQu
eCgpLCBub2RlUG9pbnQueSgpKTsKIH0KQEAgLTE0MDAsOCArMTQwMCw4IEBACiAgICAgaWYgKG1f
ZnJhbWUgIT0gcGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IHVw
ZGF0ZSA9IGZyOworICAgIEdyYXBoaWNzUmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dS
ZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZSA9IGZyOwogICAgIHVwZGF0ZS5tb3ZlKHgs
IHkpOwogICAgIC8vIFNlY3VyaXR5IGNoZWNrICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJz
YWxCcm93c2VyV3JpdGUgdG8gZGlzYWJsZSB0aGlzIGNoZWNrLi4uKQogICAgIGFkanVzdFdpbmRv
d1JlY3Qoc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSwgZnIs
IHVwZGF0ZSk7CkBAIC0xNDIwLDEwICsxNDIwLDEwIEBACiAgICAgaWYgKG1fZnJhbWUgIT0gcGFn
ZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBmciA9IHBh
Z2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IHNyID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICBHcmFwaGljc1JlY3Qg
ZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBzciA9
IHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgZnIu
c2V0TG9jYXRpb24oc3IubG9jYXRpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHVwZGF0ZSA9IGZyOwor
ICAgIEdyYXBoaWNzUmVjdCB1cGRhdGUgPSBmcjsKICAgICB1cGRhdGUubW92ZSh4LCB5KTsgICAg
IAogICAgIC8vIFNlY3VyaXR5IGNoZWNrICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJzYWxC
cm93c2VyV3JpdGUgdG8gZGlzYWJsZSB0aGlzIGNoZWNrLi4uKQogICAgIGFkanVzdFdpbmRvd1Jl
Y3Qoc3IsIGZyLCB1cGRhdGUpOwpAQCAtMTQ0Miw5ICsxNDQyLDkgQEAKICAgICBpZiAobV9mcmFt
ZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0
IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKLSAgICBGbG9hdFNpemUgZGVzdCA9
IGZyLnNpemUoKSArIEZsb2F0U2l6ZSh4LCB5KTsKLSAgICBGbG9hdFJlY3QgdXBkYXRlKGZyLmxv
Y2F0aW9uKCksIGRlc3QpOworICAgIEdyYXBoaWNzUmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53
aW5kb3dSZWN0KCk7CisgICAgR3JhcGhpY3NTaXplIGRlc3QgPSBmci5zaXplKCkgKyBHcmFwaGlj
c1NpemUoeCwgeSk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZShmci5sb2NhdGlvbigpLCBkZXN0
KTsKICAgICBhZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZy
YW1lKCktPnZpZXcoKSksIGZyLCB1cGRhdGUpOwogICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRXaW5k
b3dSZWN0KGZyKTsKIH0KQEAgLTE0NjEsOSArMTQ2MSw5IEBACiAgICAgaWYgKG1fZnJhbWUgIT0g
cGFnZS0+bWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBmciA9
IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRTaXplIGRlc3QgPSBGbG9h
dFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgRmxvYXRSZWN0IHVwZGF0ZShmci5sb2NhdGlvbigp
LCBkZXN0KTsKKyAgICBHcmFwaGljc1JlY3QgZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVj
dCgpOworICAgIEdyYXBoaWNzU2l6ZSBkZXN0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIEdyYXBoaWNzUmVjdCB1cGRhdGUoZnIubG9jYXRpb24oKSwgZGVzdCk7CiAgICAgYWRq
dXN0V2luZG93UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCkpLCBmciwgdXBkYXRlKTsKICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcik7
CiB9CkBAIC0xODI2LDcgKzE4MjYsNyBAQAogICAgIH0KIAogICAgIFdpbmRvd0ZlYXR1cmVzIHdp
bmRvd0ZlYXR1cmVzKHdpbmRvd0ZlYXR1cmVzU3RyaW5nKTsKLSAgICBGbG9hdFJlY3Qgd2luZG93
UmVjdCh3aW5kb3dGZWF0dXJlcy54U2V0ID8gd2luZG93RmVhdHVyZXMueCA6IDAsIHdpbmRvd0Zl
YXR1cmVzLnlTZXQgPyB3aW5kb3dGZWF0dXJlcy55IDogMCwKKyAgICBHcmFwaGljc1JlY3Qgd2lu
ZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54U2V0ID8gd2luZG93RmVhdHVyZXMueCA6IDAsIHdpbmRv
d0ZlYXR1cmVzLnlTZXQgPyB3aW5kb3dGZWF0dXJlcy55IDogMCwKICAgICAgICAgd2luZG93RmVh
dHVyZXMud2lkdGhTZXQgPyB3aW5kb3dGZWF0dXJlcy53aWR0aCA6IDAsIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodFNldCA/IHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA6IDApOwogICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLT5wYWdlKCk7CiAgICAgRE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KHNjcmVl
bkF2YWlsYWJsZVJlY3QocGFnZSA/IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkgOiAwKSwgd2lu
ZG93UmVjdCwgd2luZG93UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZpbGVJY29uTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKQEAgLTEzMiwx
NyArMTMyLDE3IEBACiAgICAgbV9jbGllbnQtPnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCk7CiB9
CiAKLXZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29u
c3QKK3ZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkg
Y29uc3QKIHsKICAgICBtX2NsaWVudC0+c2V0V2luZG93UmVjdChyZWN0KTsKIH0KIAotRmxvYXRS
ZWN0IENocm9tZTo6d2luZG93UmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3QgQ2hyb21lOjp3aW5k
b3dSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jbGllbnQtPndpbmRvd1JlY3QoKTsKIH0K
IAotRmxvYXRSZWN0IENocm9tZTo6cGFnZVJlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IENocm9t
ZTo6cGFnZVJlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudC0+cGFnZVJlY3QoKTsK
IH0KQEAgLTUxMywxMiArNTEzLDEyIEBACiB7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6
OmN1c3RvbUhpZ2hsaWdodFJlY3QoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZs
b2F0UmVjdCYpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewotICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLXZv
aWQgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiwgY29uc3QgQXRvbWlj
U3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCkK
K3ZvaWQgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgYm9v
bCwgYm9vbCkKIHsKIH0KIApAQCAtNTMzLDE0ICs1MzMsMTQgQEAKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBTY3JvbGxiYXJDb250cm9sU2l6ZSwKK2Jvb2wg
Q2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmLCBTY3JvbGxiYXJDb250cm9sU2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBh
cnQsIGJvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQs
IGZsb2F0LCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2spCiB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIENocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikKK2Jvb2wgQ2hyb21lQ2xpZW50OjpwYWludEN1c3Rv
bVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewog
ICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyZWVu
LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU2NyZWVuLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBlbmQoKTsKIH0KIAotdm9p
ZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBwcmludFJl
Y3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2Nh
bGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRpbGlu
ZykKK3ZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEdyYXBoaWNzUmVj
dCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxv
YXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6
b250YWxUaWxpbmcpCiB7CiAgICAgbV9wYWdlUmVjdHMuY2xlYXIoKTsKICAgICBvdXRQYWdlSGVp
Z2h0ID0gMDsKQEAgLTcwLDcgKzcwLDcgQEAKIAogICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0b1Jl
bmRlclZpZXcobV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSk7CiAgICAgY29uc3QgSW50
UmVjdCYgZG9jdW1lbnRSZWN0ID0gdmlldy0+ZG9jdW1lbnRSZWN0KCk7Ci0gICAgRmxvYXRTaXpl
IHBhZ2VTaXplID0gbV9mcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0U2l6
ZShwcmludFJlY3Qud2lkdGgoKSwgcHJpbnRSZWN0LmhlaWdodCgpKSwgRmxvYXRTaXplKGRvY3Vt
ZW50UmVjdC53aWR0aCgpLCBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHcmFwaGljc1Np
emUgcGFnZVNpemUgPSBtX2ZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oR3JhcGhp
Y3NTaXplKHByaW50UmVjdC53aWR0aCgpLCBwcmludFJlY3QuaGVpZ2h0KCkpLCBHcmFwaGljc1Np
emUoZG9jdW1lbnRSZWN0LndpZHRoKCksIGRvY3VtZW50UmVjdC5oZWlnaHQoKSkpOwogICAgIGZs
b2F0IHBhZ2VXaWR0aCA9IHBhZ2VTaXplLndpZHRoKCk7CiAgICAgZmxvYXQgcGFnZUhlaWdodCA9
IHBhZ2VTaXplLmhlaWdodCgpOwogCkBAIC04MiwxNiArODIsMTYgQEAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChGbG9h
dFNpemUocGFnZVdpZHRoIC8gdXNlclNjYWxlRmFjdG9yLCBwYWdlSGVpZ2h0IC8gdXNlclNjYWxl
RmFjdG9yKSwgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICBjb21wdXRlUGFnZVJlY3RzV2l0
aFBhZ2VTaXplSW50ZXJuYWwoR3JhcGhpY3NTaXplKHBhZ2VXaWR0aCAvIHVzZXJTY2FsZUZhY3Rv
ciwgcGFnZUhlaWdodCAvIHVzZXJTY2FsZUZhY3RvciksIGFsbG93SG9yaXpvbnRhbFRpbGluZyk7
CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxp
bmcpCit2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShjb25z
dCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGls
aW5nKQogewogICAgIG1fcGFnZVJlY3RzLmNsZWFyKCk7CiAgICAgY29tcHV0ZVBhZ2VSZWN0c1dp
dGhQYWdlU2l6ZUludGVybmFsKHBhZ2VTaXplSW5QaXhlbHMsIGFsbG93SG9yaXpvbnRhbFRpbGlu
Zyk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXpl
SW50ZXJuYWwoY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzLCBib29sIGFsbG93SW5s
aW5lRGlyZWN0aW9uVGlsaW5nKQordm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNX
aXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMs
IGJvb2wgYWxsb3dJbmxpbmVEaXJlY3Rpb25UaWxpbmcpCiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5k
b2N1bWVudCgpIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwgIW1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NSwxMyArMTY1LDEzIEBACiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGFkanVzdCBwcmlu
dGluZyBwYXJhbWV0ZXJzIHdpdGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4gbW9kZS4KICAgICBt
X2lzUHJpbnRpbmcgPSB0cnVlOwogCi0gICAgRmxvYXRTaXplIG1pbkxheW91dFNpemUgPSBtX2Zy
YW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
LCBGbG9hdFNpemUod2lkdGggKiBwcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIGhlaWdodCAq
IHByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOworICAgIEdyYXBoaWNzU2l6ZSBtaW5MYXlv
dXRTaXplID0gbV9mcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6
ZSh3aWR0aCwgaGVpZ2h0KSwgR3JhcGhpY3NTaXplKHdpZHRoICogcHJpbnRpbmdNaW5pbXVtU2hy
aW5rRmFjdG9yLCBoZWlnaHQgKiBwcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKIAogICAg
IC8vIFRoaXMgY2hhbmdlcyBsYXlvdXQsIHNvIGNhbGxlcnMgbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCB0aGV5IGRvbid0IHBhaW50IHRvIHNjcmVlbiB3aGlsZSBpbiBwcmludGluZyBtb2RlLgogICAg
IG1fZnJhbWUtPnNldFByaW50aW5nKHRydWUsIG1pbkxheW91dFNpemUsIHByaW50aW5nTWF4aW11
bVNocmlua0ZhY3RvciAvIHByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgQWRqdXN0Vmlld1Np
emUpOwogfQogCi1mbG9hdCBQcmludENvbnRleHQ6OmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3Rv
cihjb25zdCBGbG9hdFNpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSkKK2Zsb2F0IFByaW50Q29udGV4
dDo6Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yKGNvbnN0IEdyYXBoaWNzU2l6ZSYgYXZhaWxh
YmxlUGFwZXJTaXplKQogewogICAgIGlmICghbV9mcmFtZS0+dmlldygpKQogICAgICAgICByZXR1
cm4gMTsKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgIGZsb2F0IHNjYWxlID0gd2lkdGggLyBwYWdl
UmVjdC53aWR0aCgpOwogCiAgICAgY3R4LnNhdmUoKTsKLSAgICBjdHguc2NhbGUoRmxvYXRTaXpl
KHNjYWxlLCBzY2FsZSkpOworICAgIGN0eC5zY2FsZShHcmFwaGljc1NpemUoc2NhbGUsIHNjYWxl
KSk7CiAgICAgY3R4LnRyYW5zbGF0ZSgtcGFnZVJlY3QueCgpLCAtcGFnZVJlY3QueSgpKTsKICAg
ICBjdHguY2xpcChwYWdlUmVjdCk7CiAgICAgbV9mcmFtZS0+dmlldygpLT5wYWludENvbnRlbnRz
KCZjdHgsIHBhZ2VSZWN0KTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogewogICAgIEFTU0VSVChtX2lz
UHJpbnRpbmcpOwogICAgIG1faXNQcmludGluZyA9IGZhbHNlOwotICAgIG1fZnJhbWUtPnNldFBy
aW50aW5nKGZhbHNlLCBGbG9hdFNpemUoKSwgMCwgQWRqdXN0Vmlld1NpemUpOworICAgIG1fZnJh
bWUtPnNldFByaW50aW5nKGZhbHNlLCBHcmFwaGljc1NpemUoKSwgMCwgQWRqdXN0Vmlld1NpemUp
OwogfQogCiBzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIGVuY2xvc2luZ0JveE1vZGVsT2Jq
ZWN0KFJlbmRlck9iamVjdCogb2JqZWN0KQpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgcmV0dXJu
IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKIH0KIAotaW50IFByaW50Q29udGV4dDo6
cGFnZU51bWJlckZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgRmxvYXRTaXplJiBw
YWdlU2l6ZUluUGl4ZWxzKQoraW50IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQog
ewogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBub3QgZnJlZWQgZHVyaW5nIHRoZSBs
YXlvdXQuCiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnRSZWYoZWxlbWVudCk7CkBAIC0yNDEs
MTAgKzI0MSwxMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBGcmFtZSogZnJhbWUgPSBl
bGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIEZsb2F0UmVjdCBwYWdlUmVjdChGbG9h
dFBvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBHcmFwaGljc1JlY3QgcGFnZVJl
Y3QoR3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBpeGVscyk7CiAgICAgUHJpbnRDb250
ZXh0IHByaW50Q29udGV4dChmcmFtZSk7CiAgICAgcHJpbnRDb250ZXh0LmJlZ2luKHBhZ2VSZWN0
LndpZHRoKCksIHBhZ2VSZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFNpemUgc2NhbGVkUGFnZVNp
emUgPSBwYWdlU2l6ZUluUGl4ZWxzOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZWRQYWdlU2l6ZSA9
IHBhZ2VTaXplSW5QaXhlbHM7CiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUtPnZpZXco
KS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAgIHByaW50
Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXplLCBmYWxz
ZSk7CiAKQEAgLTI5OSwyMSArMjk5LDIxIEBACiAgICAgICAgICAgIFN0cmluZzo6bnVtYmVyKG1h
cmdpblRvcCkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihtYXJnaW5SaWdodCkgKyAnICcgKyBTdHJp
bmc6Om51bWJlcihtYXJnaW5Cb3R0b20pICsgJyAnICsgU3RyaW5nOjpudW1iZXIobWFyZ2luTGVm
dCk7CiB9CiAKLWludCBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoRnJhbWUqIGZyYW1lLCBj
b25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMpCitpbnQgUHJpbnRDb250ZXh0OjpudW1i
ZXJPZlBhZ2VzKEZyYW1lKiBmcmFtZSwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4
ZWxzKQogewogICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAotICAgIEZs
b2F0UmVjdCBwYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAg
ICBHcmFwaGljc1JlY3QgcGFnZVJlY3QoR3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBp
eGVscyk7CiAgICAgUHJpbnRDb250ZXh0IHByaW50Q29udGV4dChmcmFtZSk7CiAgICAgcHJpbnRD
b250ZXh0LmJlZ2luKHBhZ2VSZWN0LndpZHRoKCksIHBhZ2VSZWN0LmhlaWdodCgpKTsKICAgICAv
LyBBY2NvdW50IGZvciBzaHJpbmstdG8tZml0LgotICAgIEZsb2F0U2l6ZSBzY2FsZWRQYWdlU2l6
ZSA9IHBhZ2VTaXplSW5QaXhlbHM7CisgICAgR3JhcGhpY3NTaXplIHNjYWxlZFBhZ2VTaXplID0g
cGFnZVNpemVJblBpeGVsczsKICAgICBzY2FsZWRQYWdlU2l6ZS5zY2FsZShmcmFtZS0+dmlldygp
LT5jb250ZW50c1NpemUoKS53aWR0aCgpIC8gcGFnZVJlY3Qud2lkdGgoKSk7CiAgICAgcHJpbnRD
b250ZXh0LmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemUoc2NhbGVkUGFnZVNpemUsIGZhbHNl
KTsKICAgICByZXR1cm4gcHJpbnRDb250ZXh0LnBhZ2VDb3VudCgpOwogfQogCi12b2lkIFByaW50
Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKEZyYW1lKiBmcmFtZSwgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBp
eGVscykKK3ZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoRnJh
bWUqIGZyYW1lLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhp
Y3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQogewogICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkg
fHwgIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm47CkBAIC0zMjQsNyArMzI0LDcgQEAKICAgICBwcmludENvbnRleHQuYmVnaW4o
cGFnZVNpemVJblBpeGVscy53aWR0aCgpLCBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpKTsKIAog
ICAgIGZsb2F0IHBhZ2VIZWlnaHQ7Ci0gICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHBhZ2VTaXplSW5QaXhlbHMpLCAwLCAwLCAxLCBw
YWdlSGVpZ2h0KTsKKyAgICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0cyhHcmFwaGljc1Jl
Y3QoR3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBpeGVscyksIDAsIDAsIDEsIHBhZ2VI
ZWlnaHQpOwogCiAgICAgY29uc3QgZmxvYXQgcGFnZVdpZHRoID0gcGFnZVNpemVJblBpeGVscy53
aWR0aCgpOwogICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFnZVJlY3RzID0gcHJpbnRDb250
ZXh0LnBhZ2VSZWN0cygpOwpAQCAtMzMyLDExICszMzIsMTEgQEAKIAogICAgIC8vIEZpbGwgdGhl
IHdob2xlIGJhY2tncm91bmQgYnkgd2hpdGUuCiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihDb2xvcigyNTUsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ3Jh
cGhpY3NDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBwYWdlV2lkdGgsIHRvdGFsSGVp
Z2h0KSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBw
YWdlV2lkdGgsIHRvdGFsSGVpZ2h0KSk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwog
ICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgdG90YWxIZWlnaHQpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBncmFwaGljc0NvbnRleHQu
c2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAKICAgICBpbnQgY3VycmVudEhlaWdodCA9IDA7
CiAgICAgZm9yIChzaXplX3QgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgcGFnZVJlY3RzLnNp
emUoKTsgcGFnZUluZGV4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsKIGNs
YXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB2aXJ0dWFsIH5T
Y3JvbGxhYmxlQXJlYSgpOwogCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwotICAgIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAgICAgdm9p
ZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZs
b2F0IG9mZnNldCk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZs
b2F0IHgpOwogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB4
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCkBAIC05OSw3ICs5OSw3IEBACiAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9y
KCktPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwog
fQogCi12b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQordm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAg
ICBzY3JvbGxBbmltYXRvcigpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0
KTsKIH0KQEAgLTExNCwxMiArMTE0LDEyIEBACiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCkKIHsKLSAgICBzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludCh4LCBzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50
UG9zaXRpb24oKS55KCkpKTsKKyAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oR3Jh
cGhpY3NQb2ludCh4LCBzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsK
IH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihmbG9hdCB5KQogewotICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBv
aW50KHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOworICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihHcmFwaGljc1BvaW50KHNjcm9sbEFuaW1hdG9y
KCktPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOwogfQogCiB2b2lkIFNjcm9sbGFibGVBcmVh
OjpoYW5kbGVXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNp
bmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGll
bnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTE4NCw3ICsx
ODQsNyBAQAogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKICAgICAgICAg
UmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwogCi0gICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQ7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBzaGFkb3dPZmZzZXQ7CiAKICAgICAgICAgZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzOwogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyOwpAQCAtMjg1LDcg
KzI4NSw3IEBACiAgICAgICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQgZHJhd0Nv
bnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgc2hv
dWxkQW50aWFsaWFzID0gZmFsc2UpOworICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlh
cyA9IGZhbHNlKTsKIAogICAgICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAg
ICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKQEAgLTI5MywyMyArMjkzLDIzIEBACiAg
ICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRlci1yYWRpdXMgaW4gQ1NTKSBqdXN0
IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQuCiAgICAgICAgIHZvaWQgc3Ryb2tlQXJj
KGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3Bhbik7CiAKLSAgICAg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwotICAgICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdlbmVyYXRvciYpOwotICAgICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IENv
bG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiwgR2VuZXJhdG9yJik7CisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAg
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0
b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVm
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7
CiAgICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBJbnRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKIAotICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7
CiAKLSAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVX
aWR0aCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBmbG9h
dCBsaW5lV2lkdGgpOwogCiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9y
ID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7
CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgICAgIHZvaWQgZHJh
d0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENv
bXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAg
ICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIC0xLCAtMSksCiAg
ICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29t
cG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CkBAIC0z
MjEsNDUgKzMyMSw0NSBAQAogICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9
IGZhbHNlKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAt
MSwgLTEpLAorICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25z
dCBHcmFwaGljc1JlY3QmIHNyY1JlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgLTEsIC0xKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKIAogICAgICAgICB2
b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwog
ICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkg
Y29uc3Q7CiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9p
ZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGNsaXAoY29uc3QgR3JhcGhp
Y3NSZWN0Jik7CiAgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IFJvdW5kZWRS
ZWN0Jik7CiAgICAgICAgIHZvaWQgYWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVj
dCYsIGludCB0aGlja25lc3MpOwogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgSW50UmVjdCYp
OwogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYpOwog
ICAgICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7Ci0gICAgICAgIHZv
aWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCos
IGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7Ci0gICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGlwQ29udmV4
UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiwgYm9vbCBhbnRp
YWxpYXMgPSB0cnVlKTsKKyAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgICAgICAKICAgICAgICAgSW50UmVjdCBjbGlw
Qm91bmRzKCkgY29uc3Q7CiAKICAgICAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdp
bmdNb2RlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzKTsKIAotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEp
OwotICAgICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0
UnVuJiAsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBm
cm9tID0gMCwgaW50IHRvID0gLTEpOwotICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBG
b250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBk
cmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFj
ZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQgZHJhd1RleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udCYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBH
cmFwaGljc1BvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgICAgIHZvaWQg
ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYpOworICAgICAgICB2b2lkIGRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEZvbnQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBoLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsK
IAogICAgICAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CiAgICAgICAgICAgICBSb3VuZEFsbFNpZGVz
LAogICAgICAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCiAgICAgICAgIH07Ci0gICAg
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5k
aW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpOworICAgICAgICBHcmFwaGljc1JlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNp
ZGVzKTsKIAotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4
dChjb25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwogICAg
ICAgICBlbnVtIFRleHRDaGVja2luZ0xpbmVTdHlsZSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tp
bmdTcGVsbGluZ0xpbmVTdHlsZSwKICAgICAgICAgICAgIFRleHRDaGVja2luZ0dyYW1tYXJMaW5l
U3R5bGUsCiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXBsYWNlbWVudExpbmVTdHlsZQogICAg
ICAgICB9OwotICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlKTsKKyAgICAgICAgdm9p
ZCBkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgd2lk
dGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSk7CiAKICAgICAgICAgYm9vbCBwYWludGluZ0Rpc2Fi
bGVkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdEaXNhYmxlZChib29sKTsKQEAg
LTM3MSwxMiArMzcxLDEyIEBACiAgICAgICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
IAogICAgICAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFNoYWRv
dyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Up
OworICAgICAgICB2b2lkIHNldFNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmLCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAgICAgICAvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KICAg
ICAgICAgLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAg
ICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNv
bnN0IEdyYXBoaWNzU2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7
CiAKLSAgICAgICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYsIENv
bG9yU3BhY2UmKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRTaGFkb3coR3JhcGhpY3NTaXplJiwg
ZmxvYXQmLCBDb2xvciYsIENvbG9yU3BhY2UmKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVhclNo
YWRvdygpOwogCiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVj
dD4mLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CkBAIC00MDAsOSArNDAw
LDkgQEAKICAgICAgICAgdm9pZCBjYW52YXNDbGlwKGNvbnN0IFBhdGgmKTsKICAgICAgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpOworICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogICAgICAg
ICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAgICAgIHZvaWQgdHJhbnNs
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsgfQorICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUm
IHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KICAgICAg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CiAKICAgICAgICAgdm9pZCBzZXRV
UkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRSZWN0Jik7CkBAIC00MTYsMTMgKzQxNiwx
MyBAQAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSgpIGNv
bnN0OwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZVRyYW5zZm9ybSgpOwogICAgICAg
ICB2b2lkIHJlc2V0QWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgR3JhZGllbnQqKTsKLSAgICAgICAgdm9pZCBkcmF3VGV4dChj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsK
KyAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFkaWVu
dCopOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBo
cywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpOwogICAgICAgICB2b2lkIGRyYXdGcmFtZUNv
bnRyb2woY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgc3RhdGUp
OwogICAgICAgICB2b2lkIGRyYXdGb2N1c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCk7CiAgICAg
ICAgIHZvaWQgcGFpbnRUZXh0RmllbGQoY29uc3QgSW50UmVjdCYgcmVjdCwgdW5zaWduZWQgc3Rh
dGUpOwogICAgICAgICB2b2lkIGRyYXdCaXRtYXAoU2hhcmVkQml0bWFwKiwgY29uc3QgSW50UmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgdm9pZCBkcmF3
Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAqLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNp
emUpOworICAgICAgICB2b2lkIGRyYXdCaXRtYXBQYXR0ZXJuKFNoYXJlZEJpdG1hcCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RS
ZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7CiAgICAgICAgIHZvaWQgZHJhd0lj
b24oSElDT04gaWNvbiwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgVUlOVCBmbGFncyk7CiAgICAg
ICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0
QWxwaGFCbGVuZCA9IGZhbHNlLCBib29sIG1heUNyZWF0ZUJpdG1hcCA9IHRydWUpOyAvLyBUaGUg
cGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNvbXBvc2l0aW5n
IGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgpAQCAtNDc5LDcgKzQ3OSw3IEBACiAjaWYgUExB
VEZPUk0oV1gpCiAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgYSBidWcgd2hl
cmVieSBnZXR0aW5nIGFuIEhEQyBmcm9tIGEgR0RJKyBjb250ZXh0CiAgICAgICAgIC8vIGxvc2Vz
IHRoZSBzY2FsZSBvcGVyYXRpb25zIGFwcGxpZWQgdG8gdGhlIGNvbnRleHQuCi0gICAgICAgIEZs
b2F0U2l6ZSBjdXJyZW50U2NhbGUoKTsgCisgICAgICAgIEdyYXBoaWNzU2l6ZSBjdXJyZW50U2Nh
bGUoKTsgCiAgICAgICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIApAQCAtNTEzLDcgKzUxMyw3IEBACiAKICAgICAgICAgdm9pZCBz
ZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBj
b25zdCBJbnRTaXplJik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lk
dGgsIFN0cm9rZVN0eWxlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKEdyYXBoaWNzUG9pbnQmIHAxLCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgc3Ry
b2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGxh
dGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CkBAIC01MzgsNyArNTM4LDcgQEAK
ICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKICAgICAgICAg
dm9pZCBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wpOwogCi0gICAgICAgIHZvaWQg
c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29s
b3ImLCBDb2xvclNwYWNlKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBH
cmFwaGljc1NpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAg
ICAgICB2b2lkIGNsZWFyUGxhdGZvcm1TaGFkb3coKTsKIAogICAgICAgICB2b2lkIHNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiVGV4dHVyZS5o
IgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC0xNDQsMTAgKzE0NCwx
MCBAQAogICAgIHJldHVybiBib3VuZHM7CiB9CiAKLUZsb2F0UmVjdCBUaWxpbmdEYXRhOjp0aWxl
Qm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3QKK0dyYXBoaWNzUmVjdCBUaWxpbmdEYXRh
Ojp0aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3QKIHsKICAgICBhc3NlcnRUaWxl
KHRpbGUpOwotICAgIEZsb2F0UmVjdCBib3VuZHModGlsZUJvdW5kcyh0aWxlKSk7CisgICAgR3Jh
cGhpY3NSZWN0IGJvdW5kcyh0aWxlQm91bmRzKHRpbGUpKTsKICAgICBib3VuZHMuc2NhbGUoMS4w
ZiAvIG1fdG90YWxTaXplWCwgMS4wZiAvIG1fdG90YWxTaXplWSk7CiAgICAgcmV0dXJuIGJvdW5k
czsKIH0KQEAgLTIxMywyMSArMjEzLDIxIEBACiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgciAt
IHgsIGIgLSB5KTsKIH0KIAotSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGlj
ZXMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0ICZzcmNSZWN0KSBjb25zdAorSW50UmVjdCBUaWxp
bmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
ICZzcmNSZWN0KSBjb25zdAogewogICAgIHJldHVybiBvdmVybGFwcGVkVGlsZUluZGljZXMoZW5j
bG9zaW5nSW50UmVjdChzcmNSZWN0KSk7CiB9CiAKLXZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0
RHJhd1F1YWQoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGludCB0aWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QqIG5ld1NyYywgRmxvYXRSZWN0KiBuZXdEc3QpIGNvbnN0Cit2b2lkIFRpbGluZ0RhdGE6Omlu
dGVyc2VjdERyYXdRdWFkKGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0KiBuZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25zdAog
ewogICAgIC8vIEludGVyc2VjdCB3aXRoIHRpbGUKLSAgICBGbG9hdFJlY3QgdGlsZUJvdW5kcyA9
IHRoaXMtPnRpbGVCb3VuZHModGlsZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3RJbnRlcnNlY3Rl
ZCA9IHNyY1JlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVCb3VuZHMgPSB0aGlzLT50aWxlQm91
bmRzKHRpbGUpOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQgPSBzcmNSZWN0
OwogICAgIHNyY1JlY3RJbnRlcnNlY3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7CiAKICAgICBp
ZiAoc3JjUmVjdEludGVyc2VjdGVkLmlzRW1wdHkoKSkgewotICAgICAgICAqbmV3U3JjID0gKm5l
d0RzdCA9IEZsb2F0UmVjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgKm5ld1NyYyA9ICpuZXdEc3Qg
PSBHcmFwaGljc1JlY3QoMCwgMCwgMCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTI0MSw3ICsyNDEsNyBAQAogICAgICAgICAtdGlsZUJvdW5kcy54KCkgKyBtX2JvcmRlclRleGVs
cywKICAgICAgICAgLXRpbGVCb3VuZHMueSgpICsgbV9ib3JkZXJUZXhlbHMpOwogCi0gICAgKm5l
d0RzdCA9IEZsb2F0UmVjdCgKKyAgICAqbmV3RHN0ID0gR3JhcGhpY3NSZWN0KAogICAgICAgICBz
cmNSZWN0SW50ZXJzZWN0ZWROb3JtWCAqIGRzdFJlY3Qud2lkdGgoKSArIGRzdFJlY3QueCgpLAog
ICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWROb3JtWSAqIGRzdFJlY3QuaGVpZ2h0KCkgKyBkc3RS
ZWN0LnkoKSwKICAgICAgICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVcgKiBkc3RSZWN0LndpZHRo
KCksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
aWxpbmdEYXRhLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBo
aWNzUmVjdDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRQb2ludDsKIApAQCAtNjIsMTcgKzYy
LDE3IEBACiAgICAgSW50UmVjdCB0aWxlQm91bmRzKGludCB0aWxlKSBjb25zdDsKICAgICBJbnRS
ZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBjb25zdDsKICAgICBJbnRSZWN0IHRp
bGVCb3VuZHNXaXRoT3V0ZXJCb3JkZXIoaW50IHRpbGUpIGNvbnN0OwotICAgIEZsb2F0UmVjdCB0
aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHRp
bGVCb3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdDsKICAgICBpbnQgdGlsZVBvc2l0aW9u
WChpbnQgeEluZGV4KSBjb25zdDsKICAgICBpbnQgdGlsZVBvc2l0aW9uWShpbnQgeUluZGV4KSBj
b25zdDsKICAgICBpbnQgdGlsZVNpemVYKGludCB4SW5kZXgpIGNvbnN0OwogICAgIGludCB0aWxl
U2l6ZVkoaW50IHlJbmRleCkgY29uc3Q7CiAgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGlj
ZXMoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7Ci0gICAgSW50UmVjdCBvdmVybGFwcGVk
VGlsZUluZGljZXMoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBJbnRSZWN0
IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QpIGNvbnN0
OwogCiAgICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjb29yZGlu
YXRlcyBmb3IgYSBkcmF3aW5nIHF1YWQKICAgICAvLyBpbiB0ZXhlbCB1bml0cywgcmV0dXJucyBh
ZGp1c3RlZCBkYXRhIHRvIHJlbmRlciBqdXN0IHRoZSBvbmUgdGlsZS4KLSAgICB2b2lkIGludGVy
c2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBpbnQgdGlsZSwgRmxvYXRSZWN0KiBuZXdTcmMsIEZsb2F0UmVjdCogbmV3RHN0KSBj
b25zdDsKKyAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwgR3JhcGhpY3NSZWN0
KiBuZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25zdDsKIAogICAgIC8vIERpZmZlcmVu
Y2UgYmV0d2VlbiB0aWxlQm91bmQncyBhbmQgdGlsZUJvdW5kV2l0aEJvcmRlcidzIGxvY2F0aW9u
KCkuCiAgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNldCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgJKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRy
aWNzTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDkgKzk2LDkgQEAKICAgICByZXR1cm4gY0ds
eXBoU2l6ZVVua25vd247CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIEZsb2F0UmVjdCBHbHlwaE1l
dHJpY3NNYXA8RmxvYXRSZWN0Pjo6dW5rbm93bk1ldHJpY3MoKQordGVtcGxhdGU8PiBpbmxpbmUg
R3JhcGhpY3NSZWN0IEdseXBoTWV0cmljc01hcDxHcmFwaGljc1JlY3Q+Ojp1bmtub3duTWV0cmlj
cygpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCBjR2x5cGhTaXplVW5rbm93biwgY0ds
eXBoU2l6ZVVua25vd24pOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoMCwgMCwgY0dseXBoU2l6
ZVVua25vd24sIGNHbHlwaFNpemVVbmtub3duKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgVD4gdHlw
ZW5hbWUgR2x5cGhNZXRyaWNzTWFwPFQ+OjpHbHlwaE1ldHJpY3NQYWdlKiBHbHlwaE1ldHJpY3NN
YXA8VD46OmxvY2F0ZVBhZ2VTbG93Q2FzZSh1bnNpZ25lZCBwYWdlTnVtYmVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAKIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQogewogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgcGFpbnRS
ZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+Zmls
dGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcs
NyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludDNEJiBwKQorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkK
IHsKICAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpIDw8ICIgej0iIDw8
IHAueigpOwogICAgIHJldHVybiB0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDcgKzczLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFw
aGljc1BvaW50M0QmIHApCiB7CiAgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBw
LnkoKSA8PCAiIHo9IiA8PCBwLnooKTsKICAgICByZXR1cm4gdHM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBA
QAogdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAg
IEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVj
dCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHBhaW50UmVj
dCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRl
ci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigp
LmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBh
aW50UmVjdCkpOwogfQpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgc2V0SXNBbHBoYUltYWdlKHRy
dWUpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0KEdyYXBoaWNzUG9p
bnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCog
ZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpmaWx0ZXJDb250ZXh0KTsKICAgICBmaWx0ZXJDb250
ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihmaWx0ZXItPnNvdXJjZUltYWdlKCksIGltYWdlUmVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIs
OSBAQAogCiAgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMg
dGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBv
ZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lm
aWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5t
YXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGls
ZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4
RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gaW4t
Pm1heEVmZmVjdFJlY3QoKTsKKyAgICBHcmFwaGljc1BvaW50IGluTWF4RWZmZWN0TG9jYXRpb24g
PSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQgbWF4RWZmZWN0TG9jYXRp
b24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKICAgICBpZiAoaW4tPmZpbHRlckVmZmVj
dFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKICAgICAgICAgRmlsdGVy
KiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXItPmZp
bHRlclJlZ2lvbigpOwpAQCAtODYsNyArODYsNyBAQAogICAgIHBhdHRlcm4tPnNldFBhdHRlcm5T
cGFjZVRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGZp
bHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQt
PnNldEZpbGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAg
ZmlsdGVyQ29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3
IEBACiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKTsKKyAgICBHcmFwaGljc1JlY3Qgc3JjUmVjdCA9IEdyYXBoaWNz
UmVjdCgwLCAwLCAtMSwgLTEpOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNP
TVBPU0lURV9PUEVSQVRPUl9PVkVSOgogICAgICAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoaW4yLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4
NCw3IEBACiAgICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNl
TGlnaHRpbmcpCiAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQg
KiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5
VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgR3JhcGhpY3NQ
b2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CiAgICAgICAg
ICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0
aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4
cG9uZW50ID09IDEpCkBAIC0xOTMsMTYgKzE5MywxNiBAQAogICAgICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8g
aGFsZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7Ci0gICAgICAgIG5v
cm1hbFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0
b3IueCgpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLSAgICAgICAgbm9ybWFsVmVjdG9yLnNldFko
ZmFjdG9yWSAqIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWwyRFZlY3Rvci55KCkpICogZGF0YS5z
dXJmYWNlU2NhbGUpOworICAgICAgICBHcmFwaGljc1BvaW50M0Qgbm9ybWFsVmVjdG9yOworICAg
ICAgICBub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0
Pihub3JtYWwyRFZlY3Rvci54KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAgICAgICBub3Jt
YWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pihub3JtYWwy
RFZlY3Rvci55KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwogICAgICAgICBub3JtYWxWZWN0b3Iu
c2V0WigxKTsKICAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9y
Lmxlbmd0aCgpOwogCiAgICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpE
aWZmdXNlTGlnaHRpbmcpCiAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29u
c3RhbnQgKiAobm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3Jt
YWxWZWN0b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CiAgICAgICAgICAgICBoYWxmd2F5VmVj
dG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGgpOwogICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCkBA
IC0zMTAsNyArMzEwLDcgQEAKICAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0g
d2lkdGggKiBjUGl4ZWxTaXplOwogICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRo
IC0gMTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAgICBw
YWludGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJl
ZCgpLCBtX2xpZ2h0aW5nQ29sb3IuZ3JlZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7Cisg
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gR3JhcGhpY3NQb2ludDNEKG1fbGlnaHRpbmdD
b2xvci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5ibHVl
KCkpOwogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEocGFpbnRpbmdEYXRhKTsK
IAogICAgIC8vIFRvcC9MZWZ0IGNvcm5lci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDggQEAKICAgICBGRVR1cmJ1
bGVuY2UoRmlsdGVyKiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwg
Ym9vbCk7CiAKICAgICBpbmxpbmUgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAg
ZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgIHVuc2lnbmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
aW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBmbG9h
dCBub2lzZTJEKGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmLCBjb25zdCBHcmFwaGljc1BvaW50
Jik7CisgICAgdW5zaWduZWQgY2hhciBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChp
bnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOwogICAgIGlu
bGluZSB2b2lkIGZpbGxSZWdpb24oQnl0ZUFycmF5KiwgUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQp
OwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKICNkZWZpbmUgRmlsdGVyX2gKIAogI2lmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNDEsMjQgKzQxLDI0IEBACiAgICAgICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IHNvdXJjZUlt
YWdlOyB9CiAgICAgICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291
cmNlSW1hZ2UuZ2V0KCk7IH0KIAotICAgICAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgICAgICB2b2lkIHNldEZp
bHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmls
dGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICAgICAgR3JhcGhpY3NTaXpl
IGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0K
KyAgICAgICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEdyYXBoaWNzU2l6ZSYgZmls
dGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9
CiAKICAgICAgICAgdmlydHVhbCBmbG9hdCBhcHBseUhvcml6b250YWxTY2FsZShmbG9hdCB2YWx1
ZSkgY29uc3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24ud2lkdGgoKTsgfQog
ICAgICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5VmVydGljYWxTY2FsZShmbG9hdCB2YWx1ZSkgY29u
c3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24uaGVpZ2h0KCk7IH0KICAgICAg
ICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsK
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9M
b2NhbFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KCk7
IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1BvaW50IG1hcEFic29sdXRlUG9pbnRUb0xvY2Fs
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQo
KTsgfQogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBj
b25zdCA9IDA7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1f
c291cmNlSW1hZ2U7Ci0gICAgICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CisgICAg
ICAgIEdyYXBoaWNzU2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmIEVOQUJMRShG
SUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1LDcgKzQ1
LDcgQEAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmls
dGVyKiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IElu
dFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiwKKyAgICAgICAgICAgIGZs
b2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLAogICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAg
SW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7CkBAIC02Niw4ICs2Niw4IEBACiAgICAgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5
cGUpOwogCi0gICAgRmxvYXRQb2ludCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3Q7Ci0gICAgYm9v
bCBzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBHcmFwaGljc1Bv
aW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdDsKKyAgICBib29sIHNldEtlcm5lbFVuaXRMZW5n
dGgoY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkgY29u
c3Q7CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwpAQCAtOTAsNyArOTAsNyBAQAog
ICAgIH07CiAKICAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciosIGNvbnN0IEludFNpemUmLCBm
bG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwg
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICAgICAg
ICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
Ym9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2
ZUFscGhhVmFsdWVzPgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIGZsb2F0IG1fYmlhczsKICAg
ICBJbnRQb2ludCBtX3RhcmdldE9mZnNldDsKICAgICBFZGdlTW9kZVR5cGUgbV9lZGdlTW9kZTsK
LSAgICBGbG9hdFBvaW50IG1fa2VybmVsVW5pdExlbmd0aDsKKyAgICBHcmFwaGljc1BvaW50IG1f
a2VybmVsVW5pdExlbmd0aDsKICAgICBib29sIG1fcHJlc2VydmVBbHBoYTsKICAgICBWZWN0b3I8
ZmxvYXQ+IG1fa2VybmVsTWF0cml4OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBACiAKIHZvaWQgRkVPZmZzZXQ6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHBh
aW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZpbHRl
ciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLT5h
cHBseUhvcml6b250YWxTY2FsZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9k
eSkpOwogICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKQEAgLTg5LDcg
Kzg5LDcgQEAKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0g
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1JlY3QgZHJhd2luZ1JlZ2lvbiA9
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAg
IEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgZHJhd2luZ1JlZ2lvbi5tb3Zl
KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZm
ZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lv
bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTcgKzMwLDE3IEBACiAKIGNsYXNzIFNwb3RMaWdodFNvdXJjZSA6
IHB1YmxpYyBMaWdodFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3Bv
dExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwKLSAgICAg
ICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwb3RMaWdo
dFNvdXJjZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9zaXRpb24sCisgICAgICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgZGlyZWN0aW9uLCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3BvdExpZ2h0U291cmNlKHBvc2l0aW9uLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25l
bnQsIGxpbWl0aW5nQ29uZUFuZ2xlKSk7CiAgICAgfQogCi0gICAgY29uc3QgRmxvYXRQb2ludDNE
JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBjb25zdCBHcmFw
aGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAg
IGJvb2wgc2V0WChmbG9hdCk7CiAgICAgYm9vbCBzZXRZKGZsb2F0KTsKICAgICBib29sIHNldFoo
ZmxvYXQpOwotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kaXJlY3Rpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgYm9vbCBzZXRQb2ludHNBdFgoZmxv
YXQpOwogICAgIGJvb2wgc2V0UG9pbnRzQXRZKGZsb2F0KTsKICAgICBib29sIHNldFBvaW50c0F0
WihmbG9hdCk7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBT
cG90TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQ
b2ludDNEJiBkaXJlY3Rpb24sCisgICAgU3BvdExpZ2h0U291cmNlKGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgcG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgZGlyZWN0aW9uLAogICAgICAg
ICBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKICAgICAg
ICAgOiBMaWdodFNvdXJjZShMU19TUE9UKQogICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24p
CkBAIC02Niw4ICs2Niw4IEBACiAgICAgewogICAgIH0KIAotICAgIEZsb2F0UG9pbnQzRCBtX3Bv
c2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2RpcmVjdGlvbjsKKyAgICBHcmFwaGljc1BvaW50
M0QgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9kaXJlY3Rpb247CiAKICAgICBm
bG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdo
dFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKIAogY2xhc3MgUG9pbnRMaWdodFNvdXJjZSA6
IHB1YmxpYyBMaWdodFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UG9p
bnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UG9pbnRMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgcG9zaXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBv
aW50TGlnaHRTb3VyY2UocG9zaXRpb24pKTsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFBvaW50
M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAg
ICAgYm9vbCBzZXRYKGZsb2F0KTsKICAgICBib29sIHNldFkoZmxvYXQpOwogICAgIGJvb2wgc2V0
WihmbG9hdCk7CkBAIC00NiwxMyArNDYsMTMgQEAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IFBvaW50TGlnaHRTb3VyY2UoY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbikKKyAgICBQb2lu
dExpZ2h0U291cmNlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9zaXRpb24pCiAgICAgICAgIDog
TGlnaHRTb3VyY2UoTFNfUE9JTlQpCiAgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAg
ICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQ
b2ludDNEIG1fcG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNyBAQAogI2RlZmluZSBGaWx0ZXJFZmZlY3RfaAogCiAjaWYgRU5BQkxFKEZJTFRFUlMpCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgpAQCAtNzYsOCArNzYs
OCBAQAogICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlUGFpbnRSZWN0OyB9CiAgICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJ
bnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1
dGVQYWludFJlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RS
ZWN0OyB9IAorICAgIEdyYXBoaWNzUmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9tYXhFZmZlY3RSZWN0OyB9CisgICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0
OyB9IAogCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCkgPSAwOwpAQCAtMTAzLDExICsxMDMsMTEgQEAKICAgICBib29sIGhhc0hlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9CiAgICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2
YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZhbHVlOyB9CiAKLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b247IH0KLSAgICB2b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
biA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEdyYXBo
aWNzUmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CiAKLSAgICBGbG9hdFJlY3QgZWZm
ZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAg
IHZvaWQgc2V0RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJp
ZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQorICAgIEdyYXBo
aWNzUmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFy
aWVzOyB9CisgICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVz
OyB9CiAKICAgICBGaWx0ZXIqIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9CiAKQEAgLTEz
MCw3ICsxMzAsNyBAQAogICAgIAogICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIg
cHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNv
bHV0ZSBjb29yZGluYXRlIHNwYWNlLgogICAgIC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNo
b3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBtX21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0
IG1fbWF4RWZmZWN0UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9tYXhFZmZlY3RSZWN0OwogICAg
IEZpbHRlciogbV9maWx0ZXI7CiAKIHByaXZhdGU6CkBAIC0xNDEsMTEgKzE0MSwxMSBAQAogCiAg
ICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRo
ZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgLy8g
VGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOworICAgIEdyYXBoaWNzUmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKIAogICAg
IC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpFbGVtZW50LiBJ
cyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2YgdGhlCiAgICAgLy8gZmlsdGVy
IHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91bmRh
cmllczsKKyAgICBHcmFwaGljc1JlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOwogICAgIGJvb2wgbV9o
YXNYOwogICAgIGJvb2wgbV9oYXNZOwogICAgIGJvb2wgbV9oYXNXaWR0aDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDUsNyArMjQ1LDcgQEAKIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0
ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGFi
c29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwogCiAgICAgdW5zaWdu
ZWQga2VybmVsU2l6ZVggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKIAogdm9pZCBGRU1vcnBo
b2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgcGFp
bnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwog
ICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgcGFpbnRSZWN0LmluZmxh
dGVYKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9yYWRpdXNYKSk7CiAgICAgcGFpbnRS
ZWN0LmluZmxhdGVZKGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVzWSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcg
QEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29sb3IgY29sb3IgPSBjb2xvcldpdGhPdmVycmlk
ZUFscGhhKGZsb29kQ29sb3IoKS5yZ2IoKSwgZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdElt
YWdlLT5jb250ZXh0KCktPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCktPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogfQogCiB2b2lkIEZFRmxvb2Q6OmR1bXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQAog
ICAgICAgICBub2lzZVZhbHVlIC09IG5ld1ZhbHVlIC0gMTsKIH0KIAotZmxvYXQgRkVUdXJidWxl
bmNlOjpub2lzZTJEKGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29u
c3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCitmbG9hdCBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQo
aW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBub2lzZVZlY3RvcikKIHsKICAgICBzdHJ1Y3QgTm9pc2UgewogICAgICAgICBpbnQgbm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKQEAgLTI3Niw3ICsyNzYsNyBAQAogICAgIHJldHVybiBs
aW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsKIH0KIAotdW5zaWduZWQgY2hhciBGRVR1cmJ1
bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit1bnNpZ25l
ZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50
IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkKIHsKICAgICBmbG9hdCB0aWxlV2lkdGggPSBwYWludGluZ0RhdGEuZmlsdGVyU2l6
ZS53aWR0aCgpOwogICAgIEFTU0VSVCh0aWxlV2lkdGggPiAwKTsKQEAgLTMxMCw3ICszMTAsNyBA
QAogICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgcGFpbnRpbmdE
YXRhLmhlaWdodDsKICAgICB9CiAgICAgZmxvYXQgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0g
MDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIG1fYmFzZUZyZXF1ZW5j
eVgsIHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1ZW5jeVkpOworICAgIEdyYXBoaWNzUG9pbnQgbm9p
c2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9iYXNl
RnJlcXVlbmN5WSk7CiAgICAgZmxvYXQgcmF0aW8gPSAxOwogICAgIGZvciAoaW50IG9jdGF2ZSA9
IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKICAgICAgICAgaWYgKG1fdHlw
ZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBA
QAogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgQVNTRVJUKGZpbHRl
cik7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+
YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJl
Y3QoYWJzb2x1dGVQYWludFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVBhaW50UmVj
dCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVj
dCBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7CiAgICAgYWJzb2x1
dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgp
LCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAgICAgYWJzb2x1dGVQYWludFJl
Y3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOwogICAgIGFic29sdXRlUGFpbnRSZWN0
LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwpAQCAtODgsMTEgKzg4LDExIEBACiAgICAgICAg
IHJldHVybjsKIAogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3N0ZFgpLCBm
aWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3N0ZFkpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKTsKKyAgICBHcmFwaGljc1NpemUgYmx1clJhZGl1cyhmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fc3RkWCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc3Rk
WSkpOworICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXQoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2Fs
ZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwogCi0gICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJh
d2luZ1JlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1Jl
Y3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJhd2luZ1Jl
Z2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCiAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlID0gaW4tPmFzSW1hZ2VCdWZmZXIoKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIHJlc3Vs
dEltYWdlLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCksIHNo
YWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpKTsKIAogICAgIHJlc3VsdENv
bnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7Ci0gICAgcmVz
dWx0Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICByZXN1bHRDb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBh
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgIHJlc3VsdENvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0lt
YWdlQnVmZmVyKHNvdXJjZUltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9u
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIEZFQ29udm9sdmVNYXRyaXg6
OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsCiAgICAgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtl
cm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsTWF0cml4KQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQog
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXpl
KQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCkBAIC01Miw3ICs1Miw3IEBACiAKIFBhc3NSZWZQ
dHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEZpbHRlciogZmls
dGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0
IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZl
QWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZF
Q29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRP
ZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAogICAgICAgICBwcmVzZXJ2ZUFscGhh
LCBrZXJuZWxNYXRyaXgpKTsKQEAgLTEzMSwxMiArMTMxLDEyIEBACiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUZsb2F0UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsVW5pdExlbmd0aCgpIGNv
bnN0CitHcmFwaGljc1BvaW50IEZFQ29udm9sdmVNYXRyaXg6Omtlcm5lbFVuaXRMZW5ndGgoKSBj
b25zdAogewogICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IAogfQogCi1ib29sIEZFQ29u
dm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCkKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aChj
b25zdCBHcmFwaGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoKQogewogICAgIGlmIChtX2tlcm5l
bFVuaXRMZW5ndGggPT0ga2VybmVsVW5pdExlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDcgQEAKICNkZWZpbmUgTGlnaHRTb3VyY2VfaAogCiAjaWYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCkBAIC00OSwxMiArNDksMTIgQEAKICAgICAvLyBhIHJlZmVyZW5jZSB0byB0aGUgZm9sbG93
aW5nIHN0cnVjdHVyZQogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewogICAgICAgICAvLyBTVkdG
RUxpZ2h0aW5nIGFsc28gdXNlIHRoZW0KLSAgICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9y
OwotICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JWZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9p
bnQzRCBsaWdodFZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGNvbG9yVmVjdG9yOwog
ICAgICAgICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKICAgICAgICAgLy8gUHJpdmF0ZSBtZW1i
ZXJzCi0gICAgICAgIEZsb2F0UG9pbnQzRCBkaXJlY3Rpb25WZWN0b3I7Ci0gICAgICAgIEZsb2F0
UG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBkaXJl
Y3Rpb25WZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBwcml2YXRlQ29sb3JWZWN0b3I7
CiAgICAgICAgIGZsb2F0IGNvbmVDdXRPZmZMaW1pdDsKICAgICAgICAgZmxvYXQgY29uZUZ1bGxM
aWdodDsKICAgICAgICAgaW50IHNwZWN1bGFyRXhwb25lbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIDIw
MDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNz
U2l6ZV9oCisjZGVmaW5lIEdyYXBoaWNzU2l6ZV9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBVU0UoQ0cpIHx8IChQTEFURk9STShX
WCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRlZiBz
dHJ1Y3QgQ0dTaXplIENHU2l6ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExB
VEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpIHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFU
S0lUKSkKKyNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwor
dHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIE5TU2l6ZTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfTlNT
aXplIE5TU2l6ZTsKKyNlbmRpZgorI2VuZGlmCisKKworI2lmIFVTRShDRykKK3R5cGVkZWYgQ0dG
bG9hdCBHcmFwaGljc1VuaXQ7CisjZWxzZQordHlwZWRlZiBmbG9hdCBHcmFwaGljc1VuaXQ7Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRTaXplOworCitjbGFzcyBH
cmFwaGljc1NpemUgeworcHVibGljOgorICAgIEdyYXBoaWNzU2l6ZSgpIDogbV93aWR0aCgwKSwg
bV9oZWlnaHQoMCkgeyB9CisgICAgR3JhcGhpY3NTaXplKEdyYXBoaWNzVW5pdCB3aWR0aCwgR3Jh
cGhpY3NVbml0IGhlaWdodCkgOiBtX3dpZHRoKHdpZHRoKSwgbV9oZWlnaHQoaGVpZ2h0KSB7IH0K
KyAgICBHcmFwaGljc1NpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgc3RhdGljIEdyYXBoaWNz
U2l6ZSBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKKworICAg
IEdyYXBoaWNzVW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBHcmFw
aGljc1VuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKworICAgIHZvaWQg
c2V0V2lkdGgoR3JhcGhpY3NVbml0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQorICAgIHZv
aWQgc2V0SGVpZ2h0KEdyYXBoaWNzVW5pdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0K
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hl
aWdodCA8PSAwOyB9CisKKyAgICBHcmFwaGljc1VuaXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoIC8gbV9oZWlnaHQ7IH0KKworICAgIHZvaWQgZXhwYW5kKEdyYXBoaWNzVW5p
dCB3aWR0aCwgR3JhcGhpY3NVbml0IGhlaWdodCkKKyAgICB7CisgICAgICAgIG1fd2lkdGggKz0g
d2lkdGg7CisgICAgICAgIG1faGVpZ2h0ICs9IGhlaWdodDsKKyAgICB9CisKKyAgICB2b2lkIHNj
YWxlKEdyYXBoaWNzVW5pdCBzKSB7IHNjYWxlKHMsIHMpOyB9CisKKyAgICB2b2lkIHNjYWxlKEdy
YXBoaWNzVW5pdCBzY2FsZVgsIEdyYXBoaWNzVW5pdCBzY2FsZVkpCisgICAgeworICAgICAgICBt
X3dpZHRoICo9IHNjYWxlWDsKKyAgICAgICAgbV9oZWlnaHQgKj0gc2NhbGVZOworICAgIH0KKwor
ICAgIEdyYXBoaWNzU2l6ZSBleHBhbmRlZFRvKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhpY3NTaXplKG1fd2lkdGggPiBvdGhlci5t
X3dpZHRoID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA+
IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisg
ICAgR3JhcGhpY3NTaXplIHNocnVua1RvKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgIHJldHVybiBHcmFwaGljc1NpemUobV93aWR0aCA8IG90aGVyLm1fd2lk
dGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhl
ci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIEdy
YXBoaWNzVW5pdCBkaWFnb25hbExlbmd0aCgpIGNvbnN0OworICAgIEdyYXBoaWNzVW5pdCBkaWFn
b25hbExlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2lkdGgg
KiBtX3dpZHRoICsgbV9oZWlnaHQgKiBtX2hlaWdodDsKKyAgICB9CisKKyAgICBHcmFwaGljc1Np
emUgdHJhbnNwb3NlZFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
U2l6ZShtX2hlaWdodCwgbV93aWR0aCk7CisgICAgfQorCisjaWYgVVNFKENHKSB8fCAoUExBVEZP
Uk0oV1gpICYmIE9TKERBUldJTikpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKyAgICBl
eHBsaWNpdCBHcmFwaGljc1NpemUoY29uc3QgQ0dTaXplJik7IC8vIGRvbid0IGRvIHRoaXMgaW1w
bGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7Cisj
ZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNf
U0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgICB8fCAoUExBVEZPUk0oQ0hST01J
VU0pICYmIE9TKERBUldJTikpIHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKKyAgICBl
eHBsaWNpdCBHcmFwaGljc1NpemUoY29uc3QgTlNTaXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGlt
cGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0Owor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NVbml0IG1fd2lkdGgsIG1faGVpZ2h0Owor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dyYXBoaWNzVW5pdCBuYXJyb3dQcmVjaXNpb25U
b0dyYXBoaWNzVW5pdChUKTsKKyAgICAKK3RlbXBsYXRlPD4KK2lubGluZSBHcmFwaGljc1VuaXQg
bmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoZG91YmxlIG51bWJlcikKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihudW1iZXIpOworfQorCitpbmxpbmUgR3JhcGhp
Y3NTaXplJiBvcGVyYXRvcis9KEdyYXBoaWNzU2l6ZSYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBi
KQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53aWR0aCgpKTsKKyAgICBhLnNldEhl
aWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGlu
ZSBHcmFwaGljc1NpemUmIG9wZXJhdG9yLT0oR3JhcGhpY3NTaXplJiBhLCBjb25zdCBHcmFwaGlj
c1NpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgLSBiLndpZHRoKCkpOworICAg
IGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEdyYXBoaWNzU2l6ZSBvcGVyYXRvcisoY29uc3QgR3JhcGhpY3NTaXplJiBhLCBj
b25zdCBHcmFwaGljc1NpemUmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShhLndpZHRo
KCkgKyBiLndpZHRoKCksIGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEdy
YXBoaWNzU2l6ZSBvcGVyYXRvci0oY29uc3QgR3JhcGhpY3NTaXplJiBhLCBjb25zdCBHcmFwaGlj
c1NpemUmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShhLndpZHRoKCkgLSBiLndpZHRo
KCksIGEuaGVpZ2h0KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEdyYXBoaWNzU2l6ZSBv
cGVyYXRvci0oY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQoreworICAgIHJldHVybiBHcmFwaGlj
c1NpemUoLXNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEdyYXBoaWNzU2l6ZSYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBiKQor
eworICAgIHJldHVybiBhLndpZHRoKCkgPT0gYi53aWR0aCgpICYmIGEuaGVpZ2h0KCkgPT0gYi5o
ZWlnaHQoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHcmFwaGljc1NpemUm
IGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICE9IGIu
d2lkdGgoKSB8fCBhLmhlaWdodCgpICE9IGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBJbnRTaXpl
IHJvdW5kZWRJbnRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gSW50
U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLndpZHRoKCkpKSwgc3RhdGljX2Nhc3Q8aW50
Pihyb3VuZGYocC5oZWlnaHQoKSkpKTsKK30KKworaW5saW5lIEludFNpemUgZXhwYW5kZWRJbnRT
aXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShjbGFtcFRv
SW50ZWdlcihjZWlsZihwLndpZHRoKCkpKSwgY2xhbXBUb0ludGVnZXIoY2VpbGYocC5oZWlnaHQo
KSkpKTsKK30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBHcmFwaGlj
c1NpemUmIHApCit7CisgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocC53aWR0
aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLmhlaWdodCgpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEdyYXBoaWNzU2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZv
cm1DQUFuaW1hdGlvbk1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0
aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpz
ZXRGcm9tVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAg
ICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDIw
LDcgKzQyMCw3IEBACiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnZh
bHVlXV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBG
bG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVl
KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAgICAgW3N0
YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFs
dWVzOmFycmF5XTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29u
c3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEdyYXBoaWNzUG9pbnQzRD4mIHZhbHVlKQogewogICAg
IGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1D
QUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqIGRpcnR5
UmVjdCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAoZGlydHlS
ZWN0KQpAQCAtNDA0LDI1ICs0MDQsMjUgQEAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmJvdW5kcygpIGNvbnN0CitHcmFwaGlj
c1JlY3QgUGxhdGZvcm1DQUxheWVyOjpib3VuZHMoKSBjb25zdAogewogICAgIHJldHVybiBbbV9s
YXllci5nZXQoKSBib3VuZHNdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRz
KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRz
KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0Qm91bmRzOnZhbHVlXTsKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBv
c2l0aW9uKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBvc2l0aW9u
KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gW21fbGF5ZXIuZ2V0KCkgcG9zaXRpb25d
OwotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIuZ2V0
KCkgelBvc2l0aW9uXSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChwb2ludC54LCBwb2lu
dC55LCBbbV9sYXllci5nZXQoKSB6UG9zaXRpb25dKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5
ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSldOwpAQCAtNDMwLDE3ICs0MzAs
MTcgQEAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UG9pbnQzRCBQ
bGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBQbGF0
Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0g
W21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdOwogICAgIGZsb2F0IHogPSAwOwogI2lmIEhBVkVf
TU9ERVJOX1FVQVJUWkNPUkUKICAgICB6ID0gW21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRaXTsK
ICNlbmRpZgotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9pbnQueSwgeik7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChwb2ludC54LCBwb2ludC55LCB6KTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFs
dWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQ
b2ludDNEJiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBb
bV9sYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVl
LnkoKSldOwpAQCAtNTg4LDEyICs1ODgsMTIgQEAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzUmVjdCgpIGNvbnN0
CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50c1JlY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBjb250ZW50c1JlY3RdOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lk
IFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFs
dWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0
KCkgc2V0Q29udGVudHNSZWN0OnZhbHVlXTsKQEAgLTY5NCwxMiArNjk0LDEyIEBACiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1GbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVyOjpm
cmFtZSgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFtZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIGZyYW1lXTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcjo6c2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRGcmFtZTp2YWx1
ZV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKQEAgLTc5LDcgKzc5LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGlzVHJhbnNm
b3JtVHlwZUZsb2F0UG9pbnQzRChUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJh
bnNmb3JtVHlwZSkKK3N0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQzRChU
cmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKIHsKICAgICBz
d2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsKICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEU6CkBAIC05NCw3ICs5NCw3IEBACiAKIHN0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZU51bWJl
cihUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKIHsKLSAg
ICByZXR1cm4gIWlzVHJhbnNmb3JtVHlwZVRyYW5zZm9ybWF0aW9uTWF0cml4KHRyYW5zZm9ybVR5
cGUpICYmICFpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtVHlwZSk7CisgICAg
cmV0dXJuICFpc1RyYW5zZm9ybVR5cGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zvcm1UeXBl
KSAmJiAhaXNUcmFuc2Zvcm1UeXBlR3JhcGhpY3NQb2ludDNEKHRyYW5zZm9ybVR5cGUpOwogfQog
CiBzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0
cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBmbG9hdCYgdmFsdWUpCkBAIC0xMjgs
NyArMTI4LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGdldFRyYW5zZm9ybUZ1bmN0aW9u
VmFsdWUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCwgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHRyYW5zZm9ybVR5cGUsIGNvbnN0IEludFNpemUmIHNpemUs
IEZsb2F0UG9pbnQzRCYgdmFsdWUpCitzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZh
bHVlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBH
cmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIHN3aXRjaCAodHJhbnNmb3JtVHlwZSkgewog
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKQEAgLTM3NSw3ICszNzUsNyBAQAog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChSZXBsaWNhdGVkTGF5ZXJDaGFuZ2VkKTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX3Bvc2l0aW9uKQogICAgICAgICByZXR1
cm47CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoR2Vv
bWV0cnlDaGFuZ2VkKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5j
aG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb2ludCkKIHsKICAgICBpZiAocG9pbnQg
PT0gbV9hbmNob3JQb2ludCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBp
ZiAoc2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQAog
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0Qm91bmRzT3JpZ2luKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdp
bikKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgR3JhcGhpY3NQ
b2ludCYgb3JpZ2luKQogewogICAgIGlmIChvcmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCiAgICAg
ICAgIHJldHVybjsKQEAgLTU2MSwxOSArNTYxLDE5IEBACiAKIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpzZXROZWVkc0Rpc3BsYXkoKQogewotICAgIEZsb2F0UmVjdCBodWdlUmVjdCgtbnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsIC1udW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8g
MiwKKyAgICBHcmFwaGljc1JlY3QgaHVnZVJlY3QoLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCkgLyAyLCAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCksIG51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWF4KCkpOwogCiAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGh1Z2VSZWN0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgcmVjdChyKTsKLSAgICBGbG9hdFJlY3QgbGF5ZXJC
b3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHIpOwor
ICAgIEdyYXBoaWNzUmVjdCBsYXllckJvdW5kcyhHcmFwaGljc1BvaW50KCksIG1fc2l6ZSk7CiAg
ICAgcmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHMpOwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTc2LDE4ICs5NzYsMTggQEAKICAgICBpZiAobmVlZFRpbGVk
TGF5ZXIgIT0gbV91c2luZ1RpbGVkTGF5ZXIpCiAgICAgICAgIHN3YXBGcm9tT3JUb1RpbGVkTGF5
ZXIobmVlZFRpbGVkTGF5ZXIpOwogCi0gICAgRmxvYXRTaXplIHVzZWRTaXplID0gbV91c2luZ1Rp
bGVkTGF5ZXIgPyBjb25zdHJhaW5lZFNpemUoKSA6IG1fc2l6ZTsKLSAgICBGbG9hdFJlY3QgYm91
bmRzUmVjdChtX2JvdW5kc09yaWdpbiwgdXNlZFNpemUpOworICAgIEdyYXBoaWNzU2l6ZSB1c2Vk
U2l6ZSA9IG1fdXNpbmdUaWxlZExheWVyID8gY29uc3RyYWluZWRTaXplKCkgOiBtX3NpemU7Cisg
ICAgR3JhcGhpY3NSZWN0IGJvdW5kc1JlY3QobV9ib3VuZHNPcmlnaW4sIHVzZWRTaXplKTsKIAog
ICAgIC8vIFVwZGF0ZSBwb3NpdGlvbi4KICAgICAvLyBQb3NpdGlvbiBpcyBvZmZzZXQgb24gdGhl
IGxheWVyIGJ5IHRoZSBsYXllciBhbmNob3IgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBwb3NQb2lu
dChtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogdXNlZFNpemUud2lkdGgoKSwg
bV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAqIHVzZWRTaXplLmhlaWdodCgpKTsK
KyAgICBHcmFwaGljc1BvaW50IHBvc1BvaW50KG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2lu
dC54KCkgKiB1c2VkU2l6ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQu
eSgpICogdXNlZFNpemUuaGVpZ2h0KCkpOwogICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlv
bihwb3NQb2ludCk7CiAKICAgICBpZiAoTGF5ZXJNYXAqIGxheWVyQ2xvbmVNYXAgPSBwcmltYXJ5
TGF5ZXJDbG9uZXMoKSkgewogICAgICAgICBMYXllck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bGF5ZXJDbG9uZU1hcC0+ZW5kKCk7CiAgICAgICAgIGZvciAoTGF5ZXJNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbGF5ZXJDbG9uZU1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IGNsb25lUG9zaXRpb24gPSBwb3NQb2ludDsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQgY2xvbmVQb3NpdGlvbiA9IHBvc1BvaW50OwogICAgICAgICAgICAgaWYg
KG1fcmVwbGljYUxheWVyICYmIGlzUmVwbGljYXRlZFJvb3RDbG9uZShpdC0+Zmlyc3QpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNwZWNpYWwtY2FzZSBwb3NpdGlvbiBmb3Ig
dGhlIHJvb3Qgb2YgYSBjbG9uZSBzdWJ0cmVlLAogICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdl
IHNldCB1cCBpbiByZXBsaWNhdGVkTGF5ZXJSb290KCkuCkBAIC0xMTgxLDggKzExODEsOCBAQAog
ICAgIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIAogICAgIC8vIFNldCBwcm9wZXJ0
aWVzIG9mIG1fbGF5ZXIgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIHNpbmNlIHRoZXNlIGFyZSBl
eHByZXNzZWQgb24gb24gdGhlIHN0cnVjdHVyYWwgbGF5ZXIuCi0gICAgRmxvYXRQb2ludCBwb2lu
dChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpOwotICAgIEZs
b2F0UG9pbnQzRCBhbmNob3JQb2ludCgwLjVmLCAwLjVmLCAwKTsKKyAgICBHcmFwaGljc1BvaW50
IHBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdodCgpIC8gMi4wZik7Cisg
ICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50KDAuNWYsIDAuNWYsIDApOwogICAgIG1fbGF5
ZXItPnNldFBvc2l0aW9uKHBvaW50KTsKICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChhbmNo
b3JQb2ludCk7CiAgICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4
KCkpOwpAQCAtMTMxMSw4ICsxMzExLDggQEAKICAgICBpZiAoIW1fY29udGVudHNMYXllcikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBwb2ludChtX2NvbnRlbnRzUmVjdC54KCks
IG1fY29udGVudHNSZWN0LnkoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgbV9jb250ZW50
c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9p
bnQgcG9pbnQobV9jb250ZW50c1JlY3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpOworICAgIEdy
YXBoaWNzUmVjdCByZWN0KDAsIDAsIG1fY29udGVudHNSZWN0LndpZHRoKCksIG1fY29udGVudHNS
ZWN0LmhlaWdodCgpKTsKIAogICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24ocG9pbnQp
OwogICAgIG1fY29udGVudHNMYXllci0+c2V0Qm91bmRzKHJlY3QpOwpAQCAtMTM4Nyw3ICsxMzg3
LDcgQEAKICAgICBHcmFwaGljc0xheWVyQ0EqIHJlcGxpY2F0ZWRMYXllciA9IHN0YXRpY19jYXN0
PEdyYXBoaWNzTGF5ZXJDQSo+KG1fcmVwbGljYXRlZExheWVyKTsKICAgICAKICAgICBSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBjbG9uZWRMYXllclJvb3QgPSByZXBsaWNhdGVkTGF5ZXItPmZldGNo
Q2xvbmVMYXllcnModGhpcywgcmVwbGljYVN0YXRlLCBSb290Q2xvbmVMZXZlbCk7Ci0gICAgRmxv
YXRQb2ludCBjbG9uZVJvb3RQb3NpdGlvbiA9IHJlcGxpY2F0ZWRMYXllci0+cG9zaXRpb25Gb3JD
bG9uZVJvb3RMYXllcigpOworICAgIEdyYXBoaWNzUG9pbnQgY2xvbmVSb290UG9zaXRpb24gPSBy
ZXBsaWNhdGVkTGF5ZXItPnBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKIAogICAgIC8vIFJl
cGxpY2Egcm9vdCBoYXMgbm8gb2Zmc2V0IG9yIHRyYW5zZm9ybQogICAgIGNsb25lZExheWVyUm9v
dC0+c2V0UG9zaXRpb24oY2xvbmVSb290UG9zaXRpb24pOwpAQCAtMTc4OSwxMiArMTc4OSwxMiBA
QAogICAgICAgICAgICAgZmxvYXQgdG9WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1
bmN0aW9uVmFsdWUoZW5kVmFsdWUtPnZhbHVlKCktPmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zv
cm1PcFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRU
b1ZhbHVlKHRvVmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtVHlwZUZsb2F0
UG9pbnQzRCh0cmFuc2Zvcm1PcFR5cGUpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgZnJv
bVZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQz
RCh0cmFuc2Zvcm1PcFR5cGUpKSB7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50M0QgZnJvbVZh
bHVlOwogICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZShzdGFydFZhbHVlLT52
YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCBmcm9t
VmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRGcm9tVmFsdWUoZnJvbVZhbHVlKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHRvVmFsdWU7CisgICAgICAg
ICAgICBHcmFwaGljc1BvaW50M0QgdG9WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1
bmN0aW9uVmFsdWUoZW5kVmFsdWUtPnZhbHVlKCktPmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zv
cm1PcFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRU
b1ZhbHVlKHRvVmFsdWUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTgyNiw3ICsxODI2LDcgQEAK
IHsKICAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOwogICAgIFZlY3RvcjxmbG9hdD4gZmxvYXRW
YWx1ZXM7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQzRD4gZmxvYXRQb2ludDNEVmFsdWVzOworICAg
IFZlY3RvcjxHcmFwaGljc1BvaW50M0Q+IGZsb2F0UG9pbnQzRFZhbHVlczsKICAgICBWZWN0b3I8
VHJhbnNmb3JtYXRpb25NYXRyaXg+IHRyYW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzOwogICAgIFZl
Y3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+IHRpbWluZ0Z1bmN0aW9uczsKIApAQCAtMTg0OSw4
ICsxODQ5LDggQEAKICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZTsKICAgICAgICAgICAgICAg
ICBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKHRyYW5zZm9ybU9wLCB0cmFuc2Zvcm1PcFR5cGUs
IGJveFNpemUsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBmbG9hdFZhbHVlcy5hcHBlbmQodmFs
dWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0Qo
dHJhbnNmb3JtT3BUeXBlKSkgewotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCB2YWx1ZTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2Zvcm1UeXBlR3JhcGhpY3NQb2ludDNEKHRy
YW5zZm9ybU9wVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50M0QgdmFsdWU7
CiAgICAgICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZSh0cmFuc2Zvcm1PcCwg
dHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZmxvYXRQ
b2ludDNEVmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTg3
MSw3ICsxODcxLDcgQEAKICAgICAKICAgICBpZiAoaXNUcmFuc2Zvcm1UeXBlTnVtYmVyKHRyYW5z
Zm9ybU9wVHlwZSkpCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVzKGZsb2F0VmFsdWVz
KTsKLSAgICBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtT3BU
eXBlKSkKKyAgICBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0QodHJhbnNm
b3JtT3BUeXBlKSkKICAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXMoZmxvYXRQb2ludDNE
VmFsdWVzKTsKICAgICBlbHNlCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVzKHRyYW5z
Zm9ybWF0aW9uTWF0cml4VmFsdWVzKTsKQEAgLTE5OTQsOSArMTk5NCw5IEBACiAgICAgfQogfQog
Ci1GbG9hdFNpemUgR3JhcGhpY3NMYXllckNBOjpjb25zdHJhaW5lZFNpemUoKSBjb25zdAorR3Jh
cGhpY3NTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRTaXplKCkgY29uc3QKIHsKLSAg
ICBGbG9hdFNpemUgY29uc3RyYWluZWRTaXplID0gbV9zaXplOworICAgIEdyYXBoaWNzU2l6ZSBj
b25zdHJhaW5lZFNpemUgPSBtX3NpemU7CiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBmbG9hdCB0aWxlQ29s
dW1ucyA9IGNlaWxmKG1fc2l6ZS53aWR0aCgpIC8ga1RpbGVkTGF5ZXJUaWxlU2l6ZSk7CiAgICAg
ZmxvYXQgdGlsZVJvd3MgPSBjZWlsZihtX3NpemUuaGVpZ2h0KCkgLyBrVGlsZWRMYXllclRpbGVT
aXplKTsKQEAgLTIwMTgsNyArMjAxOCw3IEBACiAgICAgcmV0dXJuIGNvbnN0cmFpbmVkU2l6ZTsK
IH0KIAotYm9vbCBHcmFwaGljc0xheWVyQ0E6OnJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBGbG9h
dFNpemUmIHNpemUpIGNvbnN0Citib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExh
eWVyKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBpZiAoIW1fZHJhd3ND
b250ZW50IHx8ICFtX2FsbG93VGlsZWRMYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjExOSw5ICsyMTE5LDkgQEAKICAgICAgICAgICAgIDAuMGYsIDAuMGYsIDEuMGYsIDAuMGYsCiAg
ICAgICAgICAgICAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKICAgICAgICAgY29udGVudHNMYXll
ci0+c2V0VHJhbnNmb3JtKGZsaXBwZXIpOwotICAgICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50M0QoMCwgMSwgMCkpOworICAgICAgICBjb250ZW50c0xheWVyLT5z
ZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50M0QoMCwgMSwgMCkpOwogICAgIH0gZWxzZQotICAg
ICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAg
ICAgIGNvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KEdyYXBoaWNzUG9pbnQzRCgpKTsKIAog
ICAgIGlmIChzaG93RGVidWdCb3JkZXJzKCkpIHsKICAgICAgICAgY29udGVudHNMYXllci0+c2V0
Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMCwgMTI4LCAxODApKTsKQEAgLTIxODAsMTQgKzIxODAsMTQg
QEAKICAgICBtX2NvbnRlbnRzTGF5ZXJDbG9uZXMgPSBudWxscHRyOwogfQogCi1GbG9hdFBvaW50
IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNvbnN0CitHcmFw
aGljc1BvaW50IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNv
bnN0CiB7CiAgICAgLy8gVGhpcyBjYW4gZ2V0IGNhbGxlZCBkdXJpbmcgYSBzeW5jIHdoZW4gd2Un
dmUganVzdCByZW1vdmVkIHRoZSBtX3JlcGxpY2FMYXllci4KICAgICBpZiAoIW1fcmVwbGljYUxh
eWVyKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludCgpOwogCi0gICAgRmxvYXRQb2ludCByZXBsaWNhUG9zaXRpb24gPSBtX3JlcGxpY2FM
YXllci0+cmVwbGljYXRlZExheWVyUG9zaXRpb24oKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChy
ZXBsaWNhUG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKSwK
KyAgICBHcmFwaGljc1BvaW50IHJlcGxpY2FQb3NpdGlvbiA9IG1fcmVwbGljYUxheWVyLT5yZXBs
aWNhdGVkTGF5ZXJQb3NpdGlvbigpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHJlcGxpY2FQ
b3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAg
ICAgICAgICAgICAgICAgIHJlcGxpY2FQb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50LnkoKSAq
IG1fc2l6ZS5oZWlnaHQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCArNzEsMTAgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRl
ZExheWVyKEdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQzRCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCkBA
IC05NSw3ICs5NSw3IEBACiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogICAgIHZv
aWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJzKCk7CiAgICAgdm9pZCBjb21taXRM
YXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOwogCi0gICAgRmxvYXRTaXplIGNvbnN0cmFpbmVk
U2l6ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzU2l6ZSBjb25zdHJhaW5lZFNpemUoKSBjb25zdDsK
IAotICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0Owor
ICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIGNvbnN0Owog
ICAgIHZvaWQgc3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpOwogCiAg
ICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGRlZmF1bHRDb250ZW50c09yaWVu
dGF0aW9uKCkgY29uc3Q7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogICAgIGJvb2wgaGFzQ2xvbmVM
YXllcnMoKSBjb25zdCB7IHJldHVybiBtX2xheWVyQ2xvbmVzOyB9CiAgICAgdm9pZCByZW1vdmVD
bG9uZUxheWVycygpOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigp
IGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNv
bnN0OwogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTGF5ZXJDaGFuZ2VUb1JlcGxpY2FzKCk7CiAg
ICAgCkBAIC0zOTUsNyArMzk1LDcgQEAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8TGF5ZXJQcm9wZXJ0eUFuaW1hdGlvbj4gPiBBbmltYXRpb25zTWFwOwogICAgIEFuaW1hdGlv
bnNNYXAgbV9ydW5uaW5nQW5pbWF0aW9uczsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGly
dHlSZWN0czsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiBtX2RpcnR5UmVjdHM7CiAgICAgCiAg
ICAgTGF5ZXJDaGFuZ2VGbGFncyBtX3VuY29tbWl0dGVkQ2hhbmdlczsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKICAg
ICB2b2lkIHNldE5lZWRzTGF5b3V0KCk7CiAKIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEZsb2F0UmVjdCogZGlydHlSZWN0ID0gMCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXko
Y29uc3QgR3JhcGhpY3NSZWN0KiBkaXJ0eVJlY3QgPSAwKTsKICAgICAKICAgICAvLyBUaGlzIHRl
bGxzIHRoZSBsYXllciB0cmVlIHRvIGNvbW1pdCBjaGFuZ2VzIGFuZCBwZXJmb3JtIGEgcmVuZGVy
LCB3aXRob3V0IGRvIGEgc2V0TmVlZHNEaXNwbGF5IG9uIGFueSBsYXllci4KICAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0KCk7CkBAIC0xMTcsMTUgKzExNywxNSBAQAogICAgIGJvb2wgaXNPcGFxdWUo
KSBjb25zdDsKICAgICB2b2lkIHNldE9wYXF1ZShib29sKTsKIAotICAgIEZsb2F0UmVjdCBib3Vu
ZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgR3Jh
cGhpY3NSZWN0Jik7CiAKLSAgICBGbG9hdFBvaW50M0QgcG9zaXRpb24oKSBjb25zdDsKLSAgICB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9uKEZsb2F0UG9pbnQzRChwb3Mu
eCgpLCBwb3MueSgpLCAwKSk7IH0KKyAgICBHcmFwaGljc1BvaW50M0QgcG9zaXRpb24oKSBjb25z
dDsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOworICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zKSB7IHNldFBvc2l0aW9uKEdy
YXBoaWNzUG9pbnQzRChwb3MueCgpLCBwb3MueSgpLCAwKSk7IH0KIAotICAgIEZsb2F0UG9pbnQz
RCBhbmNob3JQb2ludCgpIGNvbnN0OwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxv
YXRQb2ludDNEJik7CisgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50KCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmKTsKIAogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CkBAIC0xNTQsOCArMTU0LDggQEAKICAg
ICBDRlR5cGVSZWYgY29udGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRlbnRzKENGVHlw
ZVJlZik7CiAKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRl
bnRzUmVjdCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYpOwogCiAgICAgdm9pZCBzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSk7CiAg
ICAgdm9pZCBzZXRNYWduaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpOwpAQCAtMTc1LDggKzE3
NSw4IEBACiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJik7CiAKLSAgICBGbG9hdFJlY3QgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZy
YW1lKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBmcmFtZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAgICBmbG9hdCBzcGVl
ZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3BlZWQoZmxvYXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDb2xvci5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OSw3ICs0OSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NS
ZWN0OwogY2xhc3MgUGxhdGZvcm1DQUFuaW1hdGlvbjsKIGNsYXNzIFRpbWluZ0Z1bmN0aW9uOwog
CkBAIC0xMTEsMjAgKzExMSwyMCBAQAogICAgIC8vIEJhc2ljLWFuaW1hdGlvbiBwcm9wZXJ0aWVz
LgogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGZsb2F0KTsKICAgICB2b2lkIHNldEZyb21WYWx1ZShj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHZvaWQgc2V0RnJvbVZh
bHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYpOworICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYpOwogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNvcmU6OkNv
bG9yJik7CiAgICAgdm9pZCBjb3B5RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0
aW9uKik7CiAKICAgICB2b2lkIHNldFRvVmFsdWUoZmxvYXQpOwogICAgIHZvaWQgc2V0VG9WYWx1
ZShjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHZvaWQgc2V0VG9W
YWx1ZShjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgR3Jh
cGhpY3NQb2ludDNEJik7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jik7CiAgICAgdm9pZCBjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiop
OwogCiAgICAgLy8gS2V5ZnJhbWUtYW5pbWF0aW9uIHByb3BlcnRpZXMuCiAgICAgdm9pZCBzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4mKTsKLSAgICB2b2lkIHNldFZhbHVl
cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYpOworICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxHcmFwaGljc1BvaW50M0Q+Jik7CiAgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvbG9yPiYpOwogICAgIHZvaWQgY29weVZhbHVlc0Zyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTcsOSArNTcsOSBAQAogICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkZXN0UmVjdCk7CiAgICAgCiAgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0
cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgOiBt
X2dlbmVyYXRvcihnZW5lcmF0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgcmV0dXJuIHBhdGg7CiB9
CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQsIFdpbmRSdWxl
IHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQgJnBv
aW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIGlmICghYm91bmRpbmdSZWN0KCkuY29u
dGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzMsNyArMTMzLDcgQEAK
ICAgICByZXR1cm4gcmV0OwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0
eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29s
IFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGFwcGxpZXIpOwogCkBA
IC0xNTIsNyArMTUyLDcgQEAKICAgICByZXR1cm4gaGl0U3VjY2VzczsKIH0KIAotdm9pZCBQYXRo
Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBQYXRoOjp0cmFuc2xhdGUo
Y29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5z
bGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIDAsIDEsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dNdXRhYmxlUGF0aFJlZiBuZXdQYXRoID0gQ0dQYXRoQ3Jl
YXRlTXV0YWJsZSgpOwpAQCAtMTYxLDEyICsxNjEsMTIgQEAKICAgICBtX3BhdGggPSBuZXdQYXRo
OwogfQogCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVj
dCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBDR1BhdGhHZXRCb3Vu
ZGluZ0JveChtX3BhdGgpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKIApAQCAtMTg2LDI3
ICsxODYsMjcgQEAKICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogewogICAgIENHUGF0aE1vdmVUb1BvaW50KG1fcGF0aCwgMCwgcG9pbnQueCgp
LCBwb2ludC55KCkpOwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwKQordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChtX3BhdGgsIDAsIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZv
aWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0
UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGNwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIENHUGF0aEFkZFF1YWRDdXJ2ZVRv
UG9pbnQobV9wYXRoLCAwLCBjcC54KCksIGNwLnkoKSwgcC54KCksIHAueSgpKTsKIH0KIAotdm9p
ZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxv
YXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRCZXppZXJD
dXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY3Ay
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIENHUGF0aEFkZEN1cnZlVG9Qb2ludCht
X3BhdGgsIDAsIGNwMS54KCksIGNwMS55KCksIGNwMi54KCksIGNwMi55KCksIHAueCgpLCBwLnko
KSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgcmFkaXVz
KQogewogICAgIENHUGF0aEFkZEFyY1RvUG9pbnQobV9wYXRoLCAwLCBwMS54KCksIHAxLnkoKSwg
cDIueCgpLCBwMi55KCksIHJhZGl1cyk7CiB9CkBAIC0yMTYsMTkgKzIxNiwxOSBAQAogICAgIENH
UGF0aENsb3NlU3VicGF0aChtX3BhdGgpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBG
bG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgY2xvY2t3aXNl
KQordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxv
YXQgc2EsIGZsb2F0IGVhLCBib29sIGNsb2Nrd2lzZSkKIHsKICAgICAvLyBXb3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vNTE4OTIzMz4gQ0dQYXRoQWRkQXJjIGhhbmdzIG9yIGNyYXNoZXMg
d2hlbiBwYXNzZWQgaW5mIGFzIHN0YXJ0IG9yIGVuZCBhbmdsZQogICAgIGlmIChpc2Zpbml0ZShz
YSkgJiYgaXNmaW5pdGUoZWEpKQogICAgICAgICBDR1BhdGhBZGRBcmMobV9wYXRoLCAwLCBwLngo
KSwgcC55KCksIHIsIHNhLCBlYSwgY2xvY2t3aXNlKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHIpCiB7CiAgICAgQ0dQYXRoQWRkUmVjdChtX3BhdGgsIDAsIHIpOwogfQogCi12b2lkIFBh
dGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQYXRoOjphZGRFbGxpcHNl
KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBDR1BhdGhBZGRFbGxpcHNlSW5SZWN0KG1f
cGF0aCwgMCwgcik7CiB9CkBAIC0yNDksNyArMjQ5LDcgQEAKICAgICByZXR1cm4gIWlzRW1wdHko
KTsKIH0KICAgICAKLUZsb2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCitHcmFw
aGljc1BvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAogewogICAgIHJldHVybiBDR1Bh
dGhHZXRDdXJyZW50UG9pbnQobV9wYXRoKTsKIH0KQEAgLTI2NSw3ICsyNjUsNyBAQAogc3RhdGlj
IHZvaWQgQ0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIodm9pZCAqaW5mbywgY29uc3QgQ0dQYXRo
RWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBQYXRoQXBwbGllckluZm8qIHBpbmZvID0gKFBhdGhB
cHBsaWVySW5mbyopaW5mbzsKLSAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAgICBHcmFwaGlj
c1BvaW50IHBvaW50c1szXTsKICAgICBQYXRoRWxlbWVudCBwZWxlbWVudDsKICAgICBwZWxlbWVu
dC50eXBlID0gKFBhdGhFbGVtZW50VHlwZSllbGVtZW50LT50eXBlOwogICAgIHBlbGVtZW50LnBv
aW50cyA9IHBvaW50czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDMsNyArMTAzLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVu
dDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKIHsKICAgICBjb250ZXh0LT5jbGlwKHJlY3QpOwogICAgIHBhaW50KGNvbnRleHQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NSw3ICsxNTUsNyBAQAogICAgIHJldHVybiBtX2RvY3VtZW50ID8gQ0dQREZEb2N1bWVudEdl
dE51bWJlck9mUGFnZXMobV9kb2N1bWVudCkgOiAwOwogfQogCi12b2lkIFBERkRvY3VtZW50SW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3ApCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFtX2Rv
Y3VtZW50IHx8IG1fY3VycmVudFBhZ2UgPT0gLTEpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsMTAgKzE3MCwxMCBAQAogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9y
KCkpCiAgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpLCBz
dHJva2VDb2xvclNwYWNlKCkpOwogICAgICAgICBDR1JlY3QgcmVjdHNbNF0gPSB7Ci0gICAgICAg
ICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIDEpLAotICAg
ICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIDEsIHJlY3Qud2lkdGgo
KSwgMSksCi0gICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgMSwg
cmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QubWF4WCgpIC0g
MSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdodCgpIC0gMikKKyAgICAgICAgICAgIEdyYXBo
aWNzUmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCisgICAgICAgICAg
ICBHcmFwaGljc1JlY3QocmVjdC54KCksIHJlY3QubWF4WSgpIC0gMSwgcmVjdC53aWR0aCgpLCAx
KSwKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCAxLCBy
ZWN0LmhlaWdodCgpIC0gMiksCisgICAgICAgICAgICBHcmFwaGljc1JlY3QocmVjdC5tYXhYKCkg
LSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKQogICAgICAgICB9OwogICAg
ICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgcmVjdHMsIDQpOwogICAgICAgICBpZiAo
b2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9yKCkpCkBAIC0xOTIsOCArMTkyLDggQEAKIAogICAg
IGZsb2F0IHdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICBGbG9hdFBvaW50IHAxID0g
cG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCBw
MSA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHAyID0gcG9pbnQyOwogICAgIGJvb2wgaXNW
ZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CiAgICAgCiAgICAgLy8gRm9yIG9kZCB3
aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8gdGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBm
bG9hdCBhcml0aG1ldGljCkBAIC0yNDcsMTEgKzI0NywxMSBAQAogICAgICAgICAvLyBhcHBlYXJh
bmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rh
c2hlZCBsaW5lLgogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigp
LCBzdHJva2VDb2xvclNwYWNlKCkpOyAgLy8gVGhlIHNhdmUvcmVzdG9yZSBtYWtlIGl0IHNhZmUg
dG8gbXV0YXRlIHRoZSBmaWxsIGNvbG9yIGhlcmUgd2l0aG91dCBzZXR0aW5nIGl0IGJhY2sgdG8g
dGhlIG9sZCBjb2xvci4KICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGggLyAy
LCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdp
ZHRoLCB3aWR0aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3Jh
cGhpY3NSZWN0KHAxLngoKSAtIHdpZHRoIC8gMiwgcDEueSgpIC0gd2lkdGgsIHdpZHRoLCB3aWR0
aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3JhcGhpY3NSZWN0
KHAyLngoKSAtIHdpZHRoIC8gMiwgcDIueSgpLCB3aWR0aCwgd2lkdGgpKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChw
MS54KCkgLSB3aWR0aCwgcDEueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpKTsKLSAgICAg
ICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChwMi54KCksIHAyLnko
KSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxs
UmVjdChjb250ZXh0LCBHcmFwaGljc1JlY3QocDEueCgpIC0gd2lkdGgsIHAxLnkoKSAtIHdpZHRo
IC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250
ZXh0LCBHcmFwaGljc1JlY3QocDIueCgpLCBwMi55KCkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0
aCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3
aWR0aCBvZiAzMCBwaXhlbHMuCkBAIC0zMjksNyArMzI5LDcgQEAKICAgICBmbG9hdCByZXZlcnNl
U2NhbGVGYWN0b3IgPSB3IC8gaDsKIAogICAgIGlmICh3ICE9IGgpCi0gICAgICAgIHNjYWxlKEZs
b2F0U2l6ZSgxLCBzY2FsZUZhY3RvcikpOworICAgICAgICBzY2FsZShHcmFwaGljc1NpemUoMSwg
c2NhbGVGYWN0b3IpKTsKIAogICAgIGZsb2F0IGhSYWRpdXMgPSB3IC8gMjsKICAgICBmbG9hdCB2
UmFkaXVzID0gaCAvIDI7CkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICBDR0NvbnRleHRBZGRBcmMo
Y29udGV4dCwgeCArIGhSYWRpdXMsICh5ICsgdlJhZGl1cykgKiByZXZlcnNlU2NhbGVGYWN0b3Is
IGhSYWRpdXMsIHN0YXJ0LCBlbmQsIHRydWUpOwogCiAgICAgaWYgKHcgIT0gaCkKLSAgICAgICAg
c2NhbGUoRmxvYXRTaXplKDEsIHJldmVyc2VTY2FsZUZhY3RvcikpOworICAgICAgICBzY2FsZShH
cmFwaGljc1NpemUoMSwgcmV2ZXJzZVNjYWxlRmFjdG9yKSk7CiAKICAgICBmbG9hdCB3aWR0aCA9
IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGludCBwYXRXaWR0aCA9IDA7CkBAIC0zOTksNyArMzk5
LDcgQEAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi1zdGF0aWMg
dm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1iZXJPZlBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIHZvaWQgYWRkQ29udmV4UG9s
eWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEdyYXBo
aWNzUG9pbnQqIHBvaW50cykKIHsKICAgICBBU1NFUlQobnVtYmVyT2ZQb2ludHMgPiAwKTsKIApA
QCAtNDA5LDcgKzQwOSw3IEBACiAgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywg
Y29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3Qg
R3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFz
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90
IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFz
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJP
ZlBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhcykKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC01NTQsNyAr
NTU0LDcgQEAKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewogICAgICAgICBpZiAo
aGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5ib3VuZGlu
Z1JlY3QoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1Jl
Y3QoKTsKICAgICAgICAgICAgIENHTGF5ZXJSZWYgbGF5ZXIgPSBDR0xheWVyQ3JlYXRlV2l0aENv
bnRleHQoY29udGV4dCwgQ0dTaXplTWFrZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCAw
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRleHQgPSBDR0xheWVyR2V0Q29u
dGV4dChsYXllcik7CiAKQEAgLTYwOSw3ICs2MDksNyBAQAogCiAgICAgaWYgKG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnQpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgICAgICBG
bG9hdFJlY3QgcmVjdCA9IHBhdGguYm91bmRpbmdSZWN0KCk7CisgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgcmVjdCA9IHBhdGguYm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAgICBmbG9hdCBsaW5l
V2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKICAgICAgICAgICAgIGZsb2F0IGRvdWJsZUxpbmVX
aWR0aCA9IGxpbmVXaWR0aCAqIDI7CiAgICAgICAgICAgICBmbG9hdCBsYXllcldpZHRoID0gY2Vp
bGYocmVjdC53aWR0aCgpICsgZG91YmxlTGluZVdpZHRoKTsKQEAgLTY2Miw3ICs2NjIsNyBAQAog
ICAgIHJldHVybiBzdGF0ZS5zaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgc3RhdGUuc2hhZG93Q29s
b3IuYWxwaGEoKSAmJiBzdGF0ZS5zaGFkb3dCbHVyOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICAgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0Js
dXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5z
aGFkb3dDb2xvclNwYWNlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEdyYXBo
aWNzU2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1f
c3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7CiAgICAgICAgIGNv
bnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3codGhpcywgcmVjdCwgUm91bmRlZFJlY3Q6OlJhZGlp
KCkpOwogICAgIH0KIApAQCAtNzEyLDcgKzcxMiw3IEBACiAgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzMxLDcgKzcz
MSw3IEBACiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEZsb2F0U2l6ZShzaGFk
b3dCbHVyLCBzaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3Bh
Y2UpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KHRoaXMsIHJlY3QsIFJv
dW5kZWRSZWN0OjpSYWRpaSgpKTsKICAgICB9CiAKQEAgLTc2NCw3ICs3NjQsNyBAQAogICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaGFk
b3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAg
ICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93
Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRl
LnNoYWRvd0NvbG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coR3Jh
cGhpY3NTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwg
bV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKICAgICAgICAg
Y29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdyh0aGlzLCByZWN0LCBSb3VuZGVkUmVjdDo6UmFk
aWkodG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiAgICAgfQog
CkBAIC04MTcsNyArODE3LDcgQEAKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0
KTsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgp
LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3co
RmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwg
bV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKKyAgICAgICAg
U2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEdyYXBoaWNzU2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dC
bHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUu
c2hhZG93Q29sb3JTcGFjZSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hhZG93
KHRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdC5yZWN0KCksIHJvdW5kZWRIb2xlUmVjdC5yYWRp
aSgpKTsKICAgICB9CiAKQEAgLTgzMCw3ICs4MzAsNyBAQAogICAgIHNldEZpbGxDb2xvcihvbGRG
aWxsQ29sb3IsIG9sZEZpbGxDb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTkxNSw3ICs5MTUsNyBAQAogICAgIHJlc3RvcmUoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBH
cmFwaGljc1NpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtOTkwLDE0ICs5OTAsMTQgQEAKICAgICBDR0NvbnRleHRTZXRBbHBoYShw
bGF0Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0
KCksIHIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMjQsNyArMTEy
NCw3IEBACiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3NSw3ICsxMTc1LDcg
QEAKICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKHQuYSwgdC5iLCB0LmMsIHQuZCwgdC50eCwg
dC50eSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorR3Jh
cGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgcmV0dXJuIHJlY3Q7CkBAIC0xMjE3LDEzICsxMjE3LDEzIEBACiAg
ICAgaWYgKGRldmljZU9yaWdpbi54ID09IGRldmljZUxvd2VyUmlnaHQueCAmJiByZWN0LndpZHRo
KCkpCiAgICAgICAgIGRldmljZUxvd2VyUmlnaHQueCArPSAxOwogCi0gICAgRmxvYXRQb2ludCBy
b3VuZGVkT3JpZ2luID0gRmxvYXRQb2ludChkZXZpY2VPcmlnaW4ueCAvIGRldmljZVNjYWxlWCwg
ZGV2aWNlT3JpZ2luLnkgLyBkZXZpY2VTY2FsZVkpOwotICAgIEZsb2F0UG9pbnQgcm91bmRlZExv
d2VyUmlnaHQgPSBGbG9hdFBvaW50KGRldmljZUxvd2VyUmlnaHQueCAvIGRldmljZVNjYWxlWCwg
ZGV2aWNlTG93ZXJSaWdodC55IC8gZGV2aWNlU2NhbGVZKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0
KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CisgICAg
R3JhcGhpY3NQb2ludCByb3VuZGVkT3JpZ2luID0gR3JhcGhpY3NQb2ludChkZXZpY2VPcmlnaW4u
eCAvIGRldmljZVNjYWxlWCwgZGV2aWNlT3JpZ2luLnkgLyBkZXZpY2VTY2FsZVkpOworICAgIEdy
YXBoaWNzUG9pbnQgcm91bmRlZExvd2VyUmlnaHQgPSBHcmFwaGljc1BvaW50KGRldmljZUxvd2Vy
UmlnaHQueCAvIGRldmljZVNjYWxlWCwgZGV2aWNlTG93ZXJSaWdodC55IC8gZGV2aWNlU2NhbGVZ
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJp
Z2h0IC0gcm91bmRlZE9yaWdpbik7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjQ5LDcgKzEy
NDksNyBAQAogICAgICAgICAvLyBXZSB0cnkgdG8gcm91bmQgYWxsIHBhcmFtZXRlcnMgdG8gaW50
ZWdlciBib3VuZGFyaWVzIGluIGRldmljZSBzcGFjZS4gSWYgcm91bmRpbmcgcGl4ZWxzIGluIGRl
dmljZSBzcGFjZQogICAgICAgICAvLyBtYWtlcyBvdXIgdGhpY2tuZXNzIG1vcmUgdGhhbiBkb3Vi
bGUsIHRoZW4gdGhlcmUgbXVzdCBiZSBhIHNocmlua2luZy1zY2FsZSBmYWN0b3IgYW5kIHJvdW5k
aW5nIHRvIHBpeGVscwogICAgICAgICAvLyBpbiBkZXZpY2Ugc3BhY2Ugd2lsbCBtYWtlIHRoZSB1
bmRlcmxpbmVzIHRvbyB0aGljay4KLSAgICAgICAgQ0dSZWN0IGxpbmVSZWN0ID0gcm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoeCwgeSwgbGluZUxlbmd0aCwgYWRqdXN0ZWRUaGlja25lc3Mp
LCBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMpOworICAgICAgICBDR1JlY3QgbGluZVJlY3QgPSBy
b3VuZFRvRGV2aWNlUGl4ZWxzKEdyYXBoaWNzUmVjdCh4LCB5LCBsaW5lTGVuZ3RoLCBhZGp1c3Rl
ZFRoaWNrbmVzcyksIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucyk7CiAgICAgICAgIGlmIChsaW5l
UmVjdC5zaXplLmhlaWdodCA8IHRoaWNrbmVzcyAqIDIuMCkgewogICAgICAgICAgICAgeCA9IGxp
bmVSZWN0Lm9yaWdpbi54OwogICAgICAgICAgICAgeSA9IGxpbmVSZWN0Lm9yaWdpbi55OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgUERGRG9jdW1lbnRJbWFnZV9oCiAjZGVmaW5lIFBERkRvY3VtZW50
SW1hZ2VfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAKQEAg
LTYyLDE1ICs2MiwxNSBAQAogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Owog
CiAgICAgICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgICAgICAKICAgICAg
ICAgdm9pZCBzZXRDdXJyZW50UGFnZShpbnQpOwogICAgICAgICBpbnQgcGFnZUNvdW50KCkgY29u
c3Q7CiAgICAgICAgIHZvaWQgYWRqdXN0Q1RNKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OwogCiAg
ICAgICAgIENHUERGRG9jdW1lbnRSZWYgbV9kb2N1bWVudDsKLSAgICAgICAgRmxvYXRSZWN0IG1f
bWVkaWFCb3g7Ci0gICAgICAgIEZsb2F0UmVjdCBtX2Nyb3BCb3g7CisgICAgICAgIEdyYXBoaWNz
UmVjdCBtX21lZGlhQm94OworICAgICAgICBHcmFwaGljc1JlY3QgbV9jcm9wQm94OwogICAgICAg
ICBmbG9hdCBtX3JvdGF0aW9uOwogICAgICAgICBpbnQgbV9jdXJyZW50UGFnZTsKICAgICB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDkg
QEAKICAgICB2b2lkIHNhdmUoKSB7fQogICAgIHZvaWQgcmVzdG9yZSgpIHt9CiAgICAgdm9pZCBm
bHVzaCgpIHt9Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIHt9CisgICAgdm9pZCBj
bGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYpIHt9CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKSB7
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikge30KKyAgICB2b2lkIHNjYWxlKGNv
bnN0IEdyYXBoaWNzU2l6ZSYpIHt9CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIHt9CkBAIC03OCw5ICs3OCw5IEBACiAgICAgdm9pZCBzYXZlKCk7CiAg
ICAgdm9pZCByZXN0b3JlKCk7CiAgICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgY2xpcChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsaXAoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAg
dm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
OworICAgIHZvaWQgc2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJik7CiAgICAgdm9pZCByb3RhdGUo
ZmxvYXQpOwogICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCk7CiAgICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fY29udGV4dD0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dChjZ0NvbnRl
eHQuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAg
IG1fY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAgICAgbV9jb250ZXh0LT50
cmFuc2xhdGUoMCwgLXNpemUuaGVpZ2h0KCkpOwogICAgIHN1Y2Nlc3MgPSB0cnVlOwogfQpAQCAt
MjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tX2NvbG9yU3Bh
Y2UsIGRhdGEubV9iaXRtYXBJbmZvLCBkYXRhLm1fZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVl
LCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAor
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKCFtX2Fj
Y2VsZXJhdGVSZW5kZXJpbmcpIHsKQEAgLTIyMCw4ICsyMjAsOCBAQAogICAgIH0KIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKSB7CiAgICAg
ICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKQEAgLTIzOCw3ICsyMzgsNyBAQAog
ICAgIH0KIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHRUb0NsaXAsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0VG9DbGlwLCBjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dFRvQ2xpcCA9
IGNvbnRleHRUb0NsaXAtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZTsKQEAgLTI1MCw3ICsyNTAsNyBAQAogI2VuZGlmCiAgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgcmVjdC54KCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlw
LCAxLCAtMSk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhwbGF0Zm9ybUNvbnRleHRUb0NsaXAs
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgaW1hZ2UuZ2V0KCkpOworICAg
IENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0VG9DbGlwLCBHcmFwaGljc1JlY3Qo
R3JhcGhpY3NQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlLmdldCgpKTsKICAgICBDR0NvbnRl
eHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHRUb0NsaXAsIDEsIC0xKTsKICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlwLCAtcmVjdC54KCksIC1yZWN0LnkoKSAt
IHJlY3QuaGVpZ2h0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0IHJlY3QgPSBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgRmxv
YXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhl
aWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgICAgICBHcmFwaGljc1JlY3QoMCwgMCwgQ0dJbWFn
ZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2Up
KSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2Up
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUNHLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAg
cmV0dXJuIFJldGFpblB0cjxDRkFycmF5UmVmPihBZG9wdENGLCBhcnJheSk7CiB9CiAKLXZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBzdGFydEFuaW1hdGlvbigp
OwogCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZs
b2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKTsKKyAgICBHcmFw
aGljc1VuaXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOwogICAg
IGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIw
Niw4ICsyMDYsOCBAQAogCiAgICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlv
biBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiBy
ZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKICAgICAvLyBhbmQgdGhlbiBzZXQg
YSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5LgotICAgIEZsb2F0
UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7Ci0gICAgRmxvYXRTaXplIHNlbGZTaXpl
ID0gY3VycmVudEZyYW1lU2l6ZSgpOworICAgIEdyYXBoaWNzUmVjdCBhZGp1c3RlZERlc3RSZWN0
ID0gZGVzdFJlY3Q7CisgICAgR3JhcGhpY3NTaXplIHNlbGZTaXplID0gY3VycmVudEZyYW1lU2l6
ZSgpOwogICAgIGlmIChzcmNSZWN0LnNpemUoKSAhPSBzZWxmU2l6ZSkgewogICAgICAgICBDR0lu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5ID0gQ0dDb250ZXh0R2V0SW50
ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCk7CiAgICAgICAgIC8vIFdoZW4gdGhlIGltYWdlIGlz
IHNjYWxlZCB1c2luZyBoaWdoLXF1YWxpdHkgaW50ZXJwb2xhdGlvbiwgd2UgY3JlYXRlIGEgdGVt
cG9yYXJ5IENHSW1hZ2UKQEAgLTIxNSwxMiArMjE1LDEyIEBACiAgICAgICAgIC8vIGludGVycG9s
YXRpb24gc21vb3RoZXMgc2hhcnAgZWRnZXMsIGNhdXNpbmcgcGl4ZWxzIGZyb20gb3V0c2lkZSB0
aGUgc291cmNlIHJlY3QgdG8gYmxlZWQKICAgICAgICAgLy8gaW50byB0aGUgZGVzdGluYXRpb24g
cmVjdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MTEyOTA5Pi4KICAgICAgICAgc2hvdWxkVXNlU3Vi
aW1hZ2UgPSAoaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0ga0NHSW50ZXJwb2xhdGlvbk5vbmUpICYm
IChzcmNSZWN0LnNpemUoKSAhPSBkZXN0UmVjdC5zaXplKCkgfHwgIWN0eHQtPmdldENUTSgpLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgICAgICBmbG9hdCB4U2NhbGUg
PSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOwotICAgICAgICBmbG9hdCB5U2Nh
bGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIEdyYXBo
aWNzVW5pdCB4U2NhbGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOworICAg
ICAgICBHcmFwaGljc1VuaXQgeVNjYWxlID0gc3JjUmVjdC5oZWlnaHQoKSAvIGRlc3RSZWN0Lmhl
aWdodCgpOwogICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2UpIHsKLSAgICAgICAgICAgIEZs
b2F0UmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OwotICAgICAgICAgICAgZmxvYXQgbGVmdFBh
ZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7Ci0gICAgICAgICAgICBm
bG9hdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOworICAg
ICAgICAgICAgR3JhcGhpY3NSZWN0IHN1YmltYWdlUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgICAg
ICBHcmFwaGljc1VuaXQgbGVmdFBhZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29yKHNyY1JlY3Qu
eCgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzVW5pdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkg
LSBmbG9vcihzcmNSZWN0LnkoKSk7CiAKICAgICAgICAgICAgIHN1YmltYWdlUmVjdC5tb3ZlKC1s
ZWZ0UGFkZGluZywgLXRvcFBhZGRpbmcpOwogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5t
b3ZlKC1sZWZ0UGFkZGluZyAvIHhTY2FsZSwgLXRvcFBhZGRpbmcgLyB5U2NhbGUpOwpAQCAtMjM3
LDggKzIzNyw4IEBACiAgICAgICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkgLyB5U2NhbGUpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVj
dC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2FsZSkpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKEZsb2F0U2l6ZShzZWxmU2l6ZS53aWR0aCgpIC8geFNjYWxlLCBzZWxmU2l6
ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRM
b2NhdGlvbihHcmFwaGljc1BvaW50KGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxl
LCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2FsZSkpOworICAgICAgICAgICAgYWRq
dXN0ZWREZXN0UmVjdC5zZXRTaXplKEdyYXBoaWNzU2l6ZShzZWxmU2l6ZS53aWR0aCgpIC8geFNj
YWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkKQEAgLTI3MCwxMSArMjcw
LDExIEBACiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29u
dGV4dFJlZiBjb250ZXh0KQogewogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilp
bmZvOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29u
dGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRo
KGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOworICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rldmlj
ZVBpeGVscyhHcmFwaGljc1JlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSkpKSwgaW1hZ2UpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
KQogICAgICAgICByZXR1cm47CkBAIC0yOTIsMTUgKzI5MiwxNSBAQAogICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICAKICAgICAvLyBDb21wdXRlIHRoZSBzY2FsZWQg
dGlsZSBzaXplLgotICAgIGZsb2F0IHNjYWxlZFRpbGVIZWlnaHQgPSB0aWxlUmVjdC5oZWlnaHQo
KSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpOworICAgIEdy
YXBoaWNzVW5pdCBzY2FsZWRUaWxlSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiBuYXJyb3dQ
cmVjaXNpb25Ub0dyYXBoaWNzVW5pdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSk7CiAgICAgCiAgICAg
Ly8gV2UgaGF2ZSB0byBhZGp1c3QgdGhlIHBoYXNlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB3ZSdy
ZSBpbiBDYXJ0ZXNpYW4gc3BhY2Ugbm93ICh3aXRoIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2Yg
ZGVzdFJlY3QgYmVpbmcKICAgICAvLyB0aGUgb3JpZ2luKS4KLSAgICBmbG9hdCBhZGp1c3RlZFgg
PSBwaGFzZS54KCkgLSBkZXN0UmVjdC54KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29u
dGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBv
dXQuCi0gICAgZmxvYXQgYWRqdXN0ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgp
IC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChw
YXR0ZXJuVHJhbnNmb3JtLmQoKSkgKyBzY2FsZWRUaWxlSGVpZ2h0KTsKKyAgICBHcmFwaGljc1Vu
aXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpIC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICog
bmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOyAvLyBX
ZSB0cmFuc2xhdGVkIHRoZSBjb250ZXh0IHNvIHRoYXQgZGVzdFJlY3QueCgpIGlzIHRoZSBvcmln
aW4sIHNvIHN1YnRyYWN0IGl0IG91dC4KKyAgICBHcmFwaGljc1VuaXQgYWRqdXN0ZWRZID0gZGVz
dFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgp
ICogbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5kKCkpICsg
c2NhbGVkVGlsZUhlaWdodCk7CiAKICAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGls
ZUltYWdlKTsKKyAgICBHcmFwaGljc1VuaXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdl
KTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKICAgICBpZiAodGlsZVJl
Y3Quc2l6ZSgpID09IHNpemUoKSkKQEAgLTMxOSwxNCArMzE5LDE0IEBACiAgICAgLy8gaXRzIGJ1
ZmZlciBpcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBvdmVyYWxsIGltYWdlLiAgQmVjYXVzZSBhIHBh
cnRpYWxseSBkZWNvZGVkIENHSW1hZ2VSZWYgd2l0aCBhIHNtYWxsZXIgd2lkdGggb3IgaGVpZ2h0
IHRoYW4gdGhlCiAgICAgLy8gb3ZlcmFsbCBpbWFnZSBidWZmZXIgbmVlZHMgdG8gdGlsZSB3aXRo
ICJnYXBzIiwgd2UgY2FuJ3QgdXNlIHRoZSBvcHRpbWl6ZWQgdGlsaW5nIGNhbGwgaW4gdGhhdCBj
YXNlLgogICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgdXNlIENHQ29udGV4dERyYXdUaWxlZEltYWdl
IHdpdGggc2NhbGVkIHRpbGVzIG9uIExlb3BhcmQsIGJlY2F1c2UgaXQgc3VmZmVycyBmcm9tIHJv
dW5kaW5nIGVycm9ycy4gIFNub3cgTGVvcGFyZCBpcyBvay4KLSAgICBmbG9hdCBzY2FsZWRUaWxl
V2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJu
VHJhbnNmb3JtLmEoKSk7Ci0gICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2Up
OworICAgIEdyYXBoaWNzVW5pdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICog
bmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOworICAg
IEdyYXBoaWNzVW5pdCB3ID0gQ0dJbWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7CiAjaWZkZWYgQlVJ
TERJTkdfT05fTEVPUEFSRAogICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6
ZSgpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNj
YWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVpZ2h0KCkpCiAjZWxzZQogICAgIGlmICh3ID09
IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpKQogI2VuZGlmCi0gICAgICAg
IENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNvbnRleHQsIEZsb2F0UmVjdChhZGp1c3RlZFgsIGFk
anVzdGVkWSwgc2NhbGVkVGlsZVdpZHRoLCBzY2FsZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0
KCkpOworICAgICAgICBDR0NvbnRleHREcmF3VGlsZWRJbWFnZShjb250ZXh0LCBHcmFwaGljc1Jl
Y3QoYWRqdXN0ZWRYLCBhZGp1c3RlZFksIHNjYWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdo
dCksIHN1YkltYWdlLmdldCgpKTsKICAgICBlbHNlIHsKIAogICAgIC8vIE9uIExlb3BhcmQgYW5k
IG5ld2VyLCB0aGlzIGNvZGUgbm93IG9ubHkgcnVucyBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1h
Z2VzIHdob3NlIGJ1ZmZlcnMgZG8gbm90IHlldCBtYXRjaCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRo
ZSBpbWFnZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShBVkZPVU5EQVRJT04pCiAKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTI1MSw3ICsyNTEs
NyBAQAogCiAgICAgU3RyaW5nIG1fYXNzZXRVUkw7CiAgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQg
bV9wcmVsb2FkOwotICAgIEZsb2F0U2l6ZSBtX3NjYWxlRmFjdG9yOworICAgIEdyYXBoaWNzU2l6
ZSBtX3NjYWxlRmFjdG9yOwogCiAgICAgSW50U2l6ZSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAg
IG11dGFibGUgZmxvYXQgbV9jYWNoZWRNYXhUaW1lTG9hZGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0J
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQAogICAgIGlmIChpbWFnZSkgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwogICAgICAgICBjb250
ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOworICAgICAgICBjb250
ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgY29udGV4dC0+
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KTsKICAgICAgICAg
SW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUocmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBwYWludFJlY3Qud2lkdGgoKSwgcGFpbnRS
ZWN0LmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcy
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBH
cmFwaGljc1JlY3Q7CiAKIGNsYXNzIEludFJlY3QgewogcHVibGljOgpAQCAtODIsNyArODIsNyBA
QAogICAgIEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAg
ICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBleHBs
aWNpdCBJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCk7IC8vIGRvbid0IGRvIHRoaXMg
aW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIEludFBvaW50IGxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NRdWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgR3JhcGhpY3NRdWFkX2gKKyNkZWZpbmUgR3JhcGhpY3NRdWFk
X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBH
cmFwaGljc1F1YWQgaXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBvZnRlbiByZXByZXNlbnRp
bmcgdGhlIHJlc3VsdCBvZgorLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0aHJvdWdoIHRyYW5zZm9y
bXMuIFdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQorLy8gcG9pbnRzIGFyZSBpbiBj
bG9ja3dpc2Ugb3JkZXIgZnJvbSB0b3AgbGVmdC4KK2NsYXNzIEdyYXBoaWNzUXVhZCB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NRdWFkKCkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NRdWFk
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcDMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHA0KQorICAgICAgICA6IG1f
cDEocDEpCisgICAgICAgICwgbV9wMihwMikKKyAgICAgICAgLCBtX3AzKHAzKQorICAgICAgICAs
IG1fcDQocDQpCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzUXVhZChjb25zdCBHcmFwaGlj
c1JlY3QmIGluUmVjdCkKKyAgICAgICAgOiBtX3AxKGluUmVjdC5sb2NhdGlvbigpKQorICAgICAg
ICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0LnkoKSkKKyAgICAgICAgLCBtX3AzKGluUmVj
dC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCisgICAgICAgICwgbV9wNChpblJlY3QueCgpLCBpblJl
Y3QubWF4WSgpKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50IHAxKCkgY29uc3Qg
eyByZXR1cm4gbV9wMTsgfQorICAgIEdyYXBoaWNzUG9pbnQgcDIoKSBjb25zdCB7IHJldHVybiBt
X3AyOyB9CisgICAgR3JhcGhpY3NQb2ludCBwMygpIGNvbnN0IHsgcmV0dXJuIG1fcDM7IH0KKyAg
ICBHcmFwaGljc1BvaW50IHA0KCkgY29uc3QgeyByZXR1cm4gbV9wNDsgfQorCisgICAgdm9pZCBz
ZXRQMShjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDEgPSBwOyB9CisgICAgdm9pZCBzZXRQ
Mihjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDIgPSBwOyB9CisgICAgdm9pZCBzZXRQMyhj
b25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDMgPSBwOyB9CisgICAgdm9pZCBzZXRQNChjb25z
dCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDQgPSBwOyB9CisKKyAgICAvLyBpc0VtcHR5IHRlc3Rz
IHRoYXQgdGhlIGJvdW5kaW5nIGJveCBpcyBlbXB0eS4gVGhpcyB3aWxsIG5vdCBpZGVudGlmeQor
ICAgIC8vICJzbGFudGVkIiBlbXB0eSBxdWFkcy4KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBib3VuZGluZ0JveCgpLmlzRW1wdHkoKTsgfQorCisgICAgLy8gVGVzdHMgd2hldGhl
ciB0aGlzIHF1YWQgY2FuIGJlIGxvc3NsZXNzbHkgcmVwcmVzZW50ZWQgYnkgYSBHcmFwaGljc1Jl
Y3QsCisgICAgLy8gdGhhdCBpcywgaWYgdHdvIGVkZ2VzIGFyZSBwYXJhbGxlbCB0byB0aGUgeC1h
eGlzIGFuZCB0aGUgb3RoZXIgdHdvCisgICAgLy8gYXJlIHBhcmFsbGVsIHRvIHRoZSB5LWF4aXMu
IElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBH
cmFwaGljc1JlY3QgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGJvdW5kaW5nQm94KCkuCisgICAgYm9v
bCBpc1JlY3RpbGluZWFyKCkgY29uc3Q7CisKKyAgICAvLyBUZXN0cyB3aGV0aGVyIHRoZSBnaXZl
biBwb2ludCBpcyBpbnNpZGUsIG9yIG9uIGFuIGVkZ2Ugb3IgY29ybmVyIG9mIHRoaXMgcXVhZC4K
KyAgICBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworCisg
ICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZm91ciBjb3JuZXJzIG9mIG90aGVyIGFyZSBpbnNpZGUs
IG9yIGNvaW5jaWRlbnQgd2l0aCB0aGUgc2lkZXMgb2YgdGhpcyBxdWFkLgorICAgIC8vIE5vdGUg
dGhhdCB0aGlzIG9ubHkgd29ya3MgZm9yIGNvbnZleCBxdWFkcywgYnV0IHRoYXQgaW5jbHVkZXMg
YWxsIHF1YWRzIHRoYXQgb3JpZ2luYXRlCisgICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4K
KyAgICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBHcmFwaGljc1F1YWQmKSBjb25zdDsKKworICAg
IEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OworICAgIEludFJlY3QgZW5jbG9zaW5n
Qm91bmRpbmdCb3goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QoYm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEdyYXBoaWNz
U2l6ZSYgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9wMSArPSBvZmZzZXQ7CisgICAgICAgIG1f
cDIgKz0gb2Zmc2V0OworICAgICAgICBtX3AzICs9IG9mZnNldDsKKyAgICAgICAgbV9wNCArPSBv
ZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKEdyYXBoaWNzVW5pdCBkeCwgR3JhcGhpY3NV
bml0IGR5KQorICAgIHsKKyAgICAgICAgbV9wMS5tb3ZlKGR4LCBkeSk7CisgICAgICAgIG1fcDIu
bW92ZShkeCwgZHkpOworICAgICAgICBtX3AzLm1vdmUoZHgsIGR5KTsKKyAgICAgICAgbV9wNC5t
b3ZlKGR4LCBkeSk7CisgICAgfQorCisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQgZHgsIEdy
YXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fcDEuc2NhbGUoZHgsIGR5KTsKKyAgICAg
ICAgbV9wMi5zY2FsZShkeCwgZHkpOworICAgICAgICBtX3AzLnNjYWxlKGR4LCBkeSk7CisgICAg
ICAgIG1fcDQuc2NhbGUoZHgsIGR5KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NQ
b2ludCBtX3AxOworICAgIEdyYXBoaWNzUG9pbnQgbV9wMjsKKyAgICBHcmFwaGljc1BvaW50IG1f
cDM7CisgICAgR3JhcGhpY3NQb2ludCBtX3A0OworfTsKKworaW5saW5lIEdyYXBoaWNzUXVhZCYg
b3BlcmF0b3IrPShHcmFwaGljc1F1YWQmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAg
ICBhLm1vdmUoYik7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBHcmFwaGljc1F1YWQmIG9w
ZXJhdG9yLT0oR3JhcGhpY3NRdWFkJiBhLCBjb25zdCBHcmFwaGljc1NpemUmIGIpCit7CisgICAg
YS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHcmFwaGljc1F1YWQmIGEsIGNvbnN0IEdyYXBoaWNz
UXVhZCYgYikKK3sKKyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAmJgorICAgICAgICAgICBh
LnAyKCkgPT0gYi5wMigpICYmIAorICAgICAgICAgICBhLnAzKCkgPT0gYi5wMygpICYmCisgICAg
ICAgICAgIGEucDQoKSA9PSBiLnA0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgR3JhcGhpY3NRdWFkJiBhLCBjb25zdCBHcmFwaGljc1F1YWQmIGIpCit7CisgICAgcmV0dXJu
IGEucDEoKSAhPSBiLnAxKCkgfHwKKyAgICAgICAgICAgYS5wMigpICE9IGIucDIoKSB8fCAKKyAg
ICAgICAgICAgYS5wMygpICE9IGIucDMoKSB8fAorICAgICAgICAgICBhLnA0KCkgIT0gYi5wNCgp
OworfQorCit9ICAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8gR3JhcGhpY3NR
dWFkX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZl
cnNhbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGF0aFRyYXZlcnNhbFN0YXRlX2gKICNkZWZpbmUg
UGF0aFRyYXZlcnNhbFN0YXRlX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTAgKzQy
LDEwIEBACiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rpb24pOwogCiAg
ICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgIGZsb2F0IHF1
YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9hdFBvaW50
JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsK
KyAgICBmbG9hdCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgIGZsb2F0IHF1YWRy
YXRpY0JlemllclRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiBuZXdDb250cm9sMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3Q29udHJvbDIsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CiAgICAgCiAgICAgdm9pZCBwcm9jZXNzU2VnbWVu
dCgpOwogCkBAIC01MywxNyArNTMsMTcgQEAKICAgICBQYXRoVHJhdmVyc2FsQWN0aW9uIG1fYWN0
aW9uOwogICAgIGJvb2wgbV9zdWNjZXNzOwogCi0gICAgRmxvYXRQb2ludCBtX2N1cnJlbnQ7Ci0g
ICAgRmxvYXRQb2ludCBtX3N0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9jb250cm9sMTsKLSAgICBG
bG9hdFBvaW50IG1fY29udHJvbDI7CisgICAgR3JhcGhpY3NQb2ludCBtX2N1cnJlbnQ7CisgICAg
R3JhcGhpY3NQb2ludCBtX3N0YXJ0OworICAgIEdyYXBoaWNzUG9pbnQgbV9jb250cm9sMTsKKyAg
ICBHcmFwaGljc1BvaW50IG1fY29udHJvbDI7CiAKICAgICBmbG9hdCBtX3RvdGFsTGVuZ3RoOwog
ICAgIHVuc2lnbmVkIG1fc2VnbWVudEluZGV4OwogICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aDsK
IAogICAgIC8vIEZvciBub3JtYWwgY2FsY3VsYXRpb25zCi0gICAgRmxvYXRQb2ludCBtX3ByZXZp
b3VzOworICAgIEdyYXBoaWNzUG9pbnQgbV9wcmV2aW91czsKICAgICBmbG9hdCBtX25vcm1hbEFu
Z2xlOyAvLyBkZWdyZWVzCiB9OyAgICAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCisKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzU2l6ZTo6R3JhcGhpY3NTaXplKGNvbnN0IEludFNpemUm
IHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQor
eworfQorCitHcmFwaGljc1VuaXQgR3JhcGhpY3NTaXplOjpkaWFnb25hbExlbmd0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNxcnRmKGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpKTsKK30KKworR3Jh
cGhpY3NTaXplIEdyYXBoaWNzU2l6ZTo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91
YmxlIGhlaWdodCkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXplKG5hcnJvd1ByZWNpc2lvblRv
R3JhcGhpY3NVbml0KHdpZHRoKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoaGVpZ2h0
KSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNs
dWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQzLDcgKzQzLDcg
QEAKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0YXRpY19jYXN0
PFBhdGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8pOwogICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX3N1
Y2Nlc3MpCiAgICAgICAgIHJldHVybjsKLSAgICBGbG9hdFBvaW50KiBwb2ludHMgPSBlbGVtZW50
LT5wb2ludHM7CisgICAgR3JhcGhpY3NQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwog
ICAgIGZsb2F0IHNlZ21lbnRMZW5ndGggPSAwOwogICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkg
ewogICAgICAgICBjYXNlIFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ6CkBAIC03Myw3ICs3Myw3IEBA
CiAgICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fdG90YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9p
bnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorR3Jh
cGhpY3NQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNv
bnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aCk7CiAgICAgdHJhdmVyc2FsU3RhdGUubV9k
ZXNpcmVkTGVuZ3RoID0gbGVuZ3RoOwpAQCAtOTcsMTMgKzk3LDEzIEBACiAgICAgYWRkUm91bmRl
ZFJlY3Qoci5yZWN0KCksIHIucmFkaWkoKS50b3BMZWZ0KCksIHIucmFkaWkoKS50b3BSaWdodCgp
LCByLnJhZGlpKCkuYm90dG9tTGVmdCgpLCByLnJhZGlpKCkuYm90dG9tUmlnaHQoKSk7CiB9CiAK
LXZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NTaXplJiByb3VuZGluZ1JhZGlpKQog
ewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRT
aXplIHJhZGl1cyhyb3VuZGluZ1JhZGlpKTsKLSAgICBGbG9hdFNpemUgaGFsZlNpemUocmVjdC53
aWR0aCgpIC8gMiwgcmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEdyYXBoaWNzU2l6ZSByYWRpdXMo
cm91bmRpbmdSYWRpaSk7CisgICAgR3JhcGhpY3NTaXplIGhhbGZTaXplKHJlY3Qud2lkdGgoKSAv
IDIsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAogICAgIC8vIElmIHJ4IGlzIGdyZWF0ZXIgdGhhbiBo
YWxmIG9mIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCiAgICAgLy8gdGhlbiBzZXQgcnggdG8g
aGFsZiBvZiB0aGUgd2lkdGggKHJlcXVpcmVkIGluIFNWRyBzcGVjKQpAQCAtMTE4LDcgKzExOCw3
IEBACiAgICAgYWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KHJlY3QsIHJhZGl1cywgcmFkaXVzLCBy
YWRpdXMsIHJhZGl1cyk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkUm91bmRl
ZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc1NpemUmIHRvcExl
ZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21SaWdo
dFJhZGl1cykKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTEzOSwyNiArMTM5LDI2IEBACiAvLyBUaGlzIGlzIDEta2FwcGEsIHdoZXJlIGthcHBhID0gNCAq
IChzcXJ0KDIpIC0gMSkgLyAzCiBzdGF0aWMgY29uc3QgZmxvYXQgZ0NpcmNsZUNvbnRyb2xQb2lu
dCA9IDAuNDQ3NzE1ZjsKIAotdm9pZCBQYXRoOjphZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJh
ZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21SaWdodFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRk
QmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3Jh
cGhpY3NTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIHRvcFJpZ2h0UmFk
aXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNz
U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCiB7Ci0gICAgbW92ZVRvKEZsb2F0UG9pbnQocmVjdC54
KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgbW92ZVRvKEdyYXBo
aWNzUG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CiAK
LSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0Lm1heFgoKSAtIHRvcFJpZ2h0UmFkaXVzLndp
ZHRoKCksIHJlY3QueSgpKSk7Ci0gICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3Qu
bWF4WCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJl
Y3QueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJl
Y3QueSgpICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwK
LSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QueSgpICsg
dG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0
Lm1heFgoKSwgcmVjdC5tYXhZKCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOwotICAg
IGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgLSBi
b3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLAotICAgICAg
ICAgICAgICAgICAgICAgRmxvYXRQb2ludChyZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVz
LndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0Lm1heFkoKSksCi0gICAgICAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QubWF4WCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lk
dGgoKSwgcmVjdC5tYXhZKCkpKTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSAr
IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgcmVjdC5tYXhZKCkpKTsKLSAgICBhZGRCZXppZXJD
dXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgKiBn
Q2lyY2xlQ29udHJvbFBvaW50LCByZWN0Lm1heFkoKSksCi0gICAgICAgICAgICAgICAgICAgICBG
bG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0
KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQocmVjdC54KCksIHJlY3QubWF4WSgpIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwot
ICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExlZnRSYWRp
dXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCks
IHJlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQp
LAotICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChyZWN0LngoKSArIHRvcExlZnRSYWRp
dXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJl
Y3QueSgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCkgLSB0b3BS
aWdodFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIGFkZEJlemllckN1cnZlVG8oR3Jh
cGhpY3NQb2ludChyZWN0Lm1heFgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xl
Q29udHJvbFBvaW50LCByZWN0LnkoKSksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1Bv
aW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0Np
cmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJl
Y3QubWF4WCgpLCByZWN0LnkoKSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRk
TGluZVRvKEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIC0gYm90dG9tUmln
aHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQo
cmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBn
Q2lyY2xlQ29udHJvbFBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQo
cmVjdC5tYXhYKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQ
b2ludCwgcmVjdC5tYXhZKCkpLAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChy
ZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJlY3QubWF4WSgpKSk7Cisg
ICAgYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0UmFkaXVzLndp
ZHRoKCksIHJlY3QubWF4WSgpKSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhHcmFwaGljc1BvaW50
KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2lu
dCwgcmVjdC5tYXhZKCkpLAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0
LngoKSwgcmVjdC5tYXhZKCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNv
bnRyb2xQb2ludCksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QueCgp
LCByZWN0Lm1heFkoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRMaW5l
VG8oR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdo
dCgpKSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhHcmFwaGljc1BvaW50KHJlY3QueCgpLCByZWN0
LnkoKSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAg
ICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVz
LndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCisgICAgICAgICAgICAg
ICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCBy
ZWN0LnkoKSkpOwogCiAgICAgY2xvc2VTdWJwYXRoKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBACiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSkKK0dyYWRpZW50OjpHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcDEpCiAgICAgOiBtX3JhZGlhbChmYWxzZSkKICAgICAsIG1f
cDAocDApCiAgICAgLCBtX3AxKHAxKQpAQCAtNDcsNyArNDcsNyBAQAogICAgIHBsYXRmb3JtSW5p
dCgpOwogfQogCi1HcmFkaWVudDo6R3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0
IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvKQor
R3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbykKICAgICA6
IG1fcmFkaWFsKHRydWUpCiAgICAgLCBtX3AwKHAwKQogICAgICwgbV9wMShwMSkKQEAgLTY2LDcg
KzY2LDcgQEAKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6YWRq
dXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNy
Y1JlY3QpCit2b2lkIEdyYWRpZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKElu
dFNpemUmIHNpemUsIEdyYXBoaWNzUmVjdCYgc3JjUmVjdCkKIHsKICAgICBpZiAobV9yYWRpYWwp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5j
bHVkZSAiRm9udFRyYW5zY29kZXIuaCIKICNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9O
VCkKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgIG1fZm9udExpc3QtPmludmFsaWRhdGUoZm9udFNl
bGVjdG9yKTsKIH0KIAotdm9pZCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxl
IHdlIGFyZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9h
ZGluZy4KICAgICBpZiAobG9hZGluZ0N1c3RvbUZvbnRzKCkpCkBAIC0xNTksNyArMTU5LDcgQEAK
ICAgICByZXR1cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRv
KTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250
cygpKQogICAgICAgICByZXR1cm47CkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICByZXR1cm4gZmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1bik7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICB0byA9ICh0byA9
PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisKKyNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkZs
b2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8bGltaXRz
PgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc1Bv
aW50OjpHcmFwaGljc1BvaW50KGNvbnN0IEludFBvaW50JiBwKSA6IG1feChwLngoKSksIG1feShw
LnkoKSkKK3sKK30KKwordm9pZCBHcmFwaGljc1BvaW50Ojpub3JtYWxpemUoKQoreworICAgIEdy
YXBoaWNzVW5pdCB0ZW1wTGVuZ3RoID0gbGVuZ3RoKCk7CisKKyAgICBpZiAodGVtcExlbmd0aCkg
eworICAgICAgICBtX3ggLz0gdGVtcExlbmd0aDsKKyAgICAgICAgbV95IC89IHRlbXBMZW5ndGg7
CisgICAgfQorfQorCitHcmFwaGljc1VuaXQgR3JhcGhpY3NQb2ludDo6bGVuZ3RoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJlZCgpKTsKK30KKworR3JhcGhpY3NQb2lu
dCBHcmFwaGljc1BvaW50OjptYXRyaXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgZG91YmxlIG5ld1gsIG5ld1k7CisgICAgdHJhbnNmb3Jt
Lm1hcChzdGF0aWNfY2FzdDxkb3VibGU+KG1feCksIHN0YXRpY19jYXN0PGRvdWJsZT4obV95KSwg
bmV3WCwgbmV3WSk7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvbihuZXdYLCBuZXdZKTsKK30K
KworR3JhcGhpY3NQb2ludCBHcmFwaGljc1BvaW50OjptYXRyaXhUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBkb3VibGUgbmV3WCwg
bmV3WTsKKyAgICB0cmFuc2Zvcm0ubWFwKHN0YXRpY19jYXN0PGRvdWJsZT4obV94KSwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihtX3kpLCBuZXdYLCBuZXdZKTsKKyAgICByZXR1cm4gbmFycm93UHJlY2lz
aW9uKG5ld1gsIG5ld1kpOworfQorCitHcmFwaGljc1BvaW50IEdyYXBoaWNzUG9pbnQ6Om5hcnJv
d1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9p
bnQobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoeCksIG5hcnJvd1ByZWNpc2lvblRvR3Jh
cGhpY3NVbml0KHkpKTsKK30KKworR3JhcGhpY3NVbml0IGZpbmRTbG9wZShjb25zdCBHcmFwaGlj
c1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIEdyYXBoaWNzVW5pdCYgYykKK3sK
KyAgICBpZiAocDIueCgpID09IHAxLngoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8R3JhcGhpY3NVbml0Pjo6aW5maW5pdHkoKTsKKworICAgIC8vIHkgPSBteCArIGMKKyAg
ICBHcmFwaGljc1VuaXQgc2xvcGUgPSAocDIueSgpIC0gcDEueSgpKSAvIChwMi54KCkgLSBwMS54
KCkpOworICAgIGMgPSBwMS55KCkgLSBzbG9wZSAqIHAxLngoKTsKKyAgICByZXR1cm4gc2xvcGU7
Cit9CisKK2Jvb2wgZmluZEludGVyc2VjdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGQxLCBjb25zdCBHcmFw
aGljc1BvaW50JiBkMiwgR3JhcGhpY3NQb2ludCYgaW50ZXJzZWN0aW9uKSAKK3sKKyAgICBHcmFw
aGljc1VuaXQgcE9mZnNldCA9IDA7CisgICAgR3JhcGhpY3NVbml0IHBTbG9wZSA9IGZpbmRTbG9w
ZShwMSwgcDIsIHBPZmZzZXQpOworCisgICAgR3JhcGhpY3NVbml0IGRPZmZzZXQgPSAwOworICAg
IEdyYXBoaWNzVW5pdCBkU2xvcGUgPSBmaW5kU2xvcGUoZDEsIGQyLCBkT2Zmc2V0KTsKKworICAg
IGlmIChkU2xvcGUgPT0gcFNsb3BlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKHBTbG9wZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPEdyYXBoaWNzVW5pdD46OmluZmluaXR5
KCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uLnNldFgocDEueCgpKTsKKyAgICAgICAgaW50ZXJz
ZWN0aW9uLnNldFkoZFNsb3BlICogaW50ZXJzZWN0aW9uLngoKSArIGRPZmZzZXQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRTbG9wZSA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPEdyYXBoaWNzVW5pdD46OmluZmluaXR5KCkpIHsKKyAgICAgICAgaW50ZXJzZWN0aW9uLnNl
dFgoZDEueCgpKTsKKyAgICAgICAgaW50ZXJzZWN0aW9uLnNldFkocFNsb3BlICogaW50ZXJzZWN0
aW9uLngoKSArIHBPZmZzZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgLy8gRmluZCB4IGF0IGludGVyc2VjdGlvbiwgd2hlcmUgeXMgb3ZlcmxhcDsgeCA9IChjJyAt
IGMpIC8gKG0gLSBtJykKKyAgICBpbnRlcnNlY3Rpb24uc2V0WCgoZE9mZnNldCAtIHBPZmZzZXQp
IC8gKHBTbG9wZSAtIGRTbG9wZSkpOworICAgIGludGVyc2VjdGlvbi5zZXRZKHBTbG9wZSAqIGlu
dGVyc2VjdGlvbi54KCkgKyBwT2Zmc2V0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NRdWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzVW5pdCBtaW40KEdyYXBoaWNzVW5pdCBh
LCBHcmFwaGljc1VuaXQgYiwgR3JhcGhpY3NVbml0IGMsIEdyYXBoaWNzVW5pdCBkKQoreworICAg
IHJldHVybiBtaW4obWluKGEsIGIpLCBtaW4oYywgZCkpOworfQorCitzdGF0aWMgaW5saW5lIEdy
YXBoaWNzVW5pdCBtYXg0KEdyYXBoaWNzVW5pdCBhLCBHcmFwaGljc1VuaXQgYiwgR3JhcGhpY3NV
bml0IGMsIEdyYXBoaWNzVW5pdCBkKQoreworICAgIHJldHVybiBtYXgobWF4KGEsIGIpLCBtYXgo
YywgZCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NVbml0IGRvdChjb25zdCBHcmFwaGljc1NpemUm
IGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi53
aWR0aCgpICsgYS5oZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29sIGlzUG9p
bnRJblRyaWFuZ2xlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHQxLCBjb25zdCBHcmFwaGljc1BvaW50JiB0MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdDMpCit7
CisgICAgLy8gQ29tcHV0ZSB2ZWN0b3JzICAgICAgICAKKyAgICBHcmFwaGljc1NpemUgdjAgPSB0
MyAtIHQxOworICAgIEdyYXBoaWNzU2l6ZSB2MSA9IHQyIC0gdDE7CisgICAgR3JhcGhpY3NTaXpl
IHYyID0gcCAtIHQxOworICAgIAorICAgIC8vIENvbXB1dGUgZG90IHByb2R1Y3RzCisgICAgR3Jh
cGhpY3NVbml0IGRvdDAwID0gZG90KHYwLCB2MCk7CisgICAgR3JhcGhpY3NVbml0IGRvdDAxID0g
ZG90KHYwLCB2MSk7CisgICAgR3JhcGhpY3NVbml0IGRvdDAyID0gZG90KHYwLCB2Mik7CisgICAg
R3JhcGhpY3NVbml0IGRvdDExID0gZG90KHYxLCB2MSk7CisgICAgR3JhcGhpY3NVbml0IGRvdDEy
ID0gZG90KHYxLCB2Mik7CisKKyAgICAvLyBDb21wdXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVz
CisgICAgR3JhcGhpY3NVbml0IGludkRlbm9tID0gMS4wZiAvIChkb3QwMCAqIGRvdDExIC0gZG90
MDEgKiBkb3QwMSk7CisgICAgR3JhcGhpY3NVbml0IHUgPSAoZG90MTEgKiBkb3QwMiAtIGRvdDAx
ICogZG90MTIpICogaW52RGVub207CisgICAgR3JhcGhpY3NVbml0IHYgPSAoZG90MDAgKiBkb3Qx
MiAtIGRvdDAxICogZG90MDIpICogaW52RGVub207CisKKyAgICAvLyBDaGVjayBpZiBwb2ludCBp
cyBpbiB0cmlhbmdsZQorICAgIHJldHVybiAodSA+PSAwKSAmJiAodiA+PSAwKSAmJiAodSArIHYg
PD0gMSk7Cit9CisKK0dyYXBoaWNzUmVjdCBHcmFwaGljc1F1YWQ6OmJvdW5kaW5nQm94KCkgY29u
c3QKK3sKKyAgICBHcmFwaGljc1VuaXQgbGVmdCAgID0gbWluNChtX3AxLngoKSwgbV9wMi54KCks
IG1fcDMueCgpLCBtX3A0LngoKSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCAgICA9IG1pbjQobV9w
MS55KCksIG1fcDIueSgpLCBtX3AzLnkoKSwgbV9wNC55KCkpOworCisgICAgR3JhcGhpY3NVbml0
IHJpZ2h0ICA9IG1heDQobV9wMS54KCksIG1fcDIueCgpLCBtX3AzLngoKSwgbV9wNC54KCkpOwor
ICAgIEdyYXBoaWNzVW5pdCBib3R0b20gPSBtYXg0KG1fcDEueSgpLCBtX3AyLnkoKSwgbV9wMy55
KCksIG1fcDQueSgpKTsKKyAgICAKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGxlZnQsIHRvcCwg
cmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOworfQorCitib29sIEdyYXBoaWNzUXVhZDo6aXNS
ZWN0aWxpbmVhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3AxLngoKSA9PSBtX3AyLngoKSAm
JiBtX3AyLnkoKSA9PSBtX3AzLnkoKSAmJiBtX3AzLngoKSA9PSBtX3A0LngoKSAmJiBtX3A0Lnko
KSA9PSBtX3AxLnkoKSkKKyAgICAgICAgfHwgKG1fcDEueSgpID09IG1fcDIueSgpICYmIG1fcDIu
eCgpID09IG1fcDMueCgpICYmIG1fcDMueSgpID09IG1fcDQueSgpICYmIG1fcDQueCgpID09IG1f
cDEueCgpKTsKK30KKworYm9vbCBHcmFwaGljc1F1YWQ6OmNvbnRhaW5zUG9pbnQoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQb2ludEluVHJpYW5nbGUocCwg
bV9wMSwgbV9wMiwgbV9wMykgfHwgaXNQb2ludEluVHJpYW5nbGUocCwgbV9wMSwgbV9wMywgbV9w
NCk7Cit9IAorCisvLyBOb3RlIHRoYXQgd2Ugb25seSBoYW5kbGUgY29udmV4IHF1YWRzIGhlcmUu
Citib29sIEdyYXBoaWNzUXVhZDo6Y29udGFpbnNRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQob3RoZXIucDEoKSkgJiYgY29u
dGFpbnNQb2ludChvdGhlci5wMigpKSAmJiBjb250YWluc1BvaW50KG90aGVyLnAzKCkpICYmIGNv
bnRhaW5zUG9pbnQob3RoZXIucDQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBACiAgICAgcmV0dXJuIGRhdGFDaGFuZ2VkKGFs
bERhdGFSZWNlaXZlZCk7CiB9CiAKLXZvaWQgSW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcihHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Cit2b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChjb2xv
ci5hbHBoYSgpIDw9IDApCiAgICAgICAgIHJldHVybjsKQEAgLTg3LDcgKzg3LDcgQEAKICAgICBj
dHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgRmxvYXRTaXplIGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzU2l6ZSBjYWxj
dWxhdGVQYXR0ZXJuU2NhbGUoY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFw
aGljc1JlY3QmIHNyY1JlY3QsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlKQogewogICAgIGZsb2F0IHNjYWxlWCA9IDEuMGYsIHNjYWxlWSA9IDEuMGY7CiAgICAg
CkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogICAgIGlmICh2UnVsZSA9PSBJbWFnZTo6UmVwZWF0VGls
ZSkKICAgICAgICAgc2NhbGVZID0gc2NhbGVYOwogICAgIAotICAgIHJldHVybiBGbG9hdFNpemUo
c2NhbGVYLCBzY2FsZVkpOworICAgIHJldHVybiBHcmFwaGljc1NpemUoc2NhbGVYLCBzY2FsZVkp
OwogfQogCiAKLXZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25z
dCBGbG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1Bv
aW50JiBzcmNQb2ludCwgY29uc3QgR3JhcGhpY3NTaXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBp
ZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9y
KGN0eHQsIGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwpAQCAt
MTE3LDIzICsxMTcsMjMgQEAKICAgICBBU1NFUlQoIWlzQml0bWFwSW1hZ2UoKSB8fCBzdGF0aWNf
Y2FzdDxCaXRtYXBJbWFnZSo+KHRoaXMpLT5ub3RTb2xpZENvbG9yKCkpOwogI2VuZGlmCiAKLSAg
ICBGbG9hdFNpemUgaW50cmluc2ljVGlsZVNpemUgPSBzaXplKCk7CisgICAgR3JhcGhpY3NTaXpl
IGludHJpbnNpY1RpbGVTaXplID0gc2l6ZSgpOwogICAgIGlmIChoYXNSZWxhdGl2ZVdpZHRoKCkp
CiAgICAgICAgIGludHJpbnNpY1RpbGVTaXplLnNldFdpZHRoKHNjYWxlZFRpbGVTaXplLndpZHRo
KCkpOwogICAgIGlmIChoYXNSZWxhdGl2ZUhlaWdodCgpKQogICAgICAgICBpbnRyaW5zaWNUaWxl
U2l6ZS5zZXRIZWlnaHQoc2NhbGVkVGlsZVNpemUuaGVpZ2h0KCkpOwogCi0gICAgRmxvYXRTaXpl
IHNjYWxlKHNjYWxlZFRpbGVTaXplLndpZHRoKCkgLyBpbnRyaW5zaWNUaWxlU2l6ZS53aWR0aCgp
LAorICAgIEdyYXBoaWNzU2l6ZSBzY2FsZShzY2FsZWRUaWxlU2l6ZS53aWR0aCgpIC8gaW50cmlu
c2ljVGlsZVNpemUud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgc2NhbGVkVGlsZVNpemUu
aGVpZ2h0KCkgLyBpbnRyaW5zaWNUaWxlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBGbG9hdFJlY3Qg
b25lVGlsZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IG9uZVRpbGVSZWN0OwogICAgIG9uZVRpbGVS
ZWN0LnNldFgoZGVzdFJlY3QueCgpICsgZm1vZGYoZm1vZGYoLXNyY1BvaW50LngoKSwgc2NhbGVk
VGlsZVNpemUud2lkdGgoKSkgLSBzY2FsZWRUaWxlU2l6ZS53aWR0aCgpLCBzY2FsZWRUaWxlU2l6
ZS53aWR0aCgpKSk7CiAgICAgb25lVGlsZVJlY3Quc2V0WShkZXN0UmVjdC55KCkgKyBmbW9kZihm
bW9kZigtc3JjUG9pbnQueSgpLCBzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSkgLSBzY2FsZWRUaWxl
U2l6ZS5oZWlnaHQoKSwgc2NhbGVkVGlsZVNpemUuaGVpZ2h0KCkpKTsKICAgICBvbmVUaWxlUmVj
dC5zZXRTaXplKHNjYWxlZFRpbGVTaXplKTsKICAgICAKICAgICAvLyBDaGVjayBhbmQgc2VlIGlm
IGEgc2luZ2xlIGRyYXcgb2YgdGhlIGltYWdlIGNhbiBjb3ZlciB0aGUgZW50aXJlIGFyZWEgd2Ug
YXJlIHN1cHBvc2VkIHRvIHRpbGUuICAgIAogICAgIGlmIChvbmVUaWxlUmVjdC5jb250YWlucyhk
ZXN0UmVjdCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IHZpc2libGVTcmNSZWN0OworICAgICAgICBH
cmFwaGljc1JlY3QgdmlzaWJsZVNyY1JlY3Q7CiAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgo
KGRlc3RSZWN0LngoKSAtIG9uZVRpbGVSZWN0LngoKSkgLyBzY2FsZS53aWR0aCgpKTsKICAgICAg
ICAgdmlzaWJsZVNyY1JlY3Quc2V0WSgoZGVzdFJlY3QueSgpIC0gb25lVGlsZVJlY3QueSgpKSAv
IHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0V2lkdGgoZGVzdFJl
Y3Qud2lkdGgoKSAvIHNjYWxlLndpZHRoKCkpOwpAQCAtMTQzLDE0ICsxNDMsMTQgQEAKICAgICB9
CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9y
bSgpLnNjYWxlTm9uVW5pZm9ybShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAg
RmxvYXRSZWN0IHRpbGVSZWN0KEZsb2F0UG9pbnQoKSwgaW50cmluc2ljVGlsZVNpemUpOyAgICAK
KyAgICBHcmFwaGljc1JlY3QgdGlsZVJlY3QoR3JhcGhpY3NQb2ludCgpLCBpbnRyaW5zaWNUaWxl
U2l6ZSk7ICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVj
dCk7CiAgICAgCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAogLy8gRklYTUU6IE1lcmdlIHdp
dGggdGhlIG90aGVyIGRyYXdUaWxlZCBldmVudHVhbGx5LCBzaW5jZSB3ZSBuZWVkIGEgY29tYmlu
YXRpb24gb2YgYm90aCBmb3Igc29tZSB0aGluZ3MuCi12b2lkIEltYWdlOjpkcmF3VGlsZWQoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpkcmF3
VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3Qs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZS
dWxlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7
ICAgIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewogICAgICAgICBmaWxsV2l0
aFNvbGlkQ29sb3IoY3R4dCwgZHN0UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2Us
IG9wKTsKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgIGlmICh2UnVsZSA9PSBSb3VuZFRpbGUpCiAg
ICAgICAgIHZSdWxlID0gUmVwZWF0VGlsZTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGNhbGN1
bGF0ZVBhdHRlcm5TY2FsZShkc3RSZWN0LCBzcmNSZWN0LCBoUnVsZSwgdlJ1bGUpOworICAgIEdy
YXBoaWNzU2l6ZSBzY2FsZSA9IGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShkc3RSZWN0LCBzcmNSZWN0
LCBoUnVsZSwgdlJ1bGUpOwogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtID0g
QWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKIAogICAgIC8vIFdlIHdhbnQgdG8gY29uc3RydWN0IHRoZSBwaGFzZSBzdWNoIHRo
YXQgdGhlIHBhdHRlcm4gaXMgY2VudGVyZWQgKHdoZW4gc3RyZXRjaCBpcyBub3QKQEAgLTE3NCw3
ICsxNzQsNyBAQAogICAgICAgICBoUGhhc2UgLT0gZm1vZGYoZHN0UmVjdC53aWR0aCgpLCBzY2Fs
ZS53aWR0aCgpICogc3JjUmVjdC53aWR0aCgpKSAvIDIuMGY7CiAgICAgaWYgKHZSdWxlID09IElt
YWdlOjpSZXBlYXRUaWxlKQogICAgICAgICB2UGhhc2UgLT0gZm1vZGYoZHN0UmVjdC5oZWlnaHQo
KSwgc2NhbGUuaGVpZ2h0KCkgKiBzcmNSZWN0LmhlaWdodCgpKSAvIDIuMGY7Ci0gICAgRmxvYXRQ
b2ludCBwYXR0ZXJuUGhhc2UoZHN0UmVjdC54KCkgLSBoUGhhc2UsIGRzdFJlY3QueSgpIC0gdlBo
YXNlKTsKKyAgICBHcmFwaGljc1BvaW50IHBhdHRlcm5QaGFzZShkc3RSZWN0LngoKSAtIGhQaGFz
ZSwgZHN0UmVjdC55KCkgLSB2UGhhc2UpOwogICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5QaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBv
cCwgZHN0UmVjdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSw3ICs5OSw3IEBACiAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyAtPSBtX3J1bldpZHRo
U29GYXI7CiAKICAgICBmbG9hdCBsYXN0Um91bmRpbmdXaWR0aCA9IG1fZmluYWxSb3VuZGluZ1dp
ZHRoOwotICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kczsKIAog
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZv
bnQoKTsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZv
bnQ7CkBAIC0yMzgsOSArMjM4LDkgQEAKICAgICAgICAgbGFzdFJvdW5kaW5nV2lkdGggPSB3aWR0
aCAtIG9sZFdpZHRoOwogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykgewot
ICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91bmRp
bmdCb3hZLCBib3VuZHMubWF4WSgpKTsKLSAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0Jv
eFkgPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLnkoKSk7Ci0gICAgICAgICAg
ICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZsb2F0PigwLCBib3VuZHMubWF4WCgpIC0gd2lk
dGgpOworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBo
Qm91bmRpbmdCb3hZLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLm1heFkoKSkpOworICAgICAg
ICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZ
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLnkoKSkpOworICAgICAgICAgICAgbV9sYXN0R2x5
cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5tYXhY
KCkpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKICNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNDMwLDE3ICs0
MzAsMTcgQEAKIAogdm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCwgTGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0
CiB7Ci0gICAgaWYgKG1fcG9zaXRpb24gIT0gRmxvYXRQb2ludCgpKSB7CisgICAgaWYgKG1fcG9z
aXRpb24gIT0gR3JhcGhpY3NQb2ludCgpKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQgKyAxKTsKICAgICAgICAgdHMgPDwgIihwb3NpdGlvbiAiIDw8IG1fcG9zaXRpb24ueCgpIDw8
ICIgIiA8PCBtX3Bvc2l0aW9uLnkoKSA8PCAiKVxuIjsKICAgICB9CiAKLSAgICBpZiAobV9ib3Vu
ZHNPcmlnaW4gIT0gRmxvYXRQb2ludCgpKSB7CisgICAgaWYgKG1fYm91bmRzT3JpZ2luICE9IEdy
YXBoaWNzUG9pbnQoKSkgewogICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAg
ICAgICAgIHRzIDw8ICIoYm91bmRzIG9yaWdpbiAiIDw8IG1fYm91bmRzT3JpZ2luLngoKSA8PCAi
ICIgPDwgbV9ib3VuZHNPcmlnaW4ueSgpIDw8ICIpXG4iOwogICAgIH0KIAotICAgIGlmIChtX2Fu
Y2hvclBvaW50ICE9IEZsb2F0UG9pbnQzRCgwLjVmLCAwLjVmLCAwKSkgeworICAgIGlmIChtX2Fu
Y2hvclBvaW50ICE9IEdyYXBoaWNzUG9pbnQzRCgwLjVmLCAwLjVmLCAwKSkgewogICAgICAgICB3
cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAgICAgICAgIHRzIDw8ICIoYW5jaG9yICIgPDwg
bV9hbmNob3JQb2ludC54KCkgPDwgIiAiIDw8IG1fYW5jaG9yUG9pbnQueSgpIDw8ICIpXG4iOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9p
bnQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NQb2ludDNELmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQzRC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludDNELmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBHcmFwaGljc1BvaW50M0Q6Om5vcm1hbGl6ZSgpCit7CisgICAgZmxvYXQg
dGVtcExlbmd0aCA9IGxlbmd0aCgpOworCisgICAgaWYgKHRlbXBMZW5ndGgpIHsKKyAgICAgICAg
bV94IC89IHRlbXBMZW5ndGg7CisgICAgICAgIG1feSAvPSB0ZW1wTGVuZ3RoOworICAgICAgICBt
X3ogLz0gdGVtcExlbmd0aDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRl
ICJTaGFkb3dCbHVyLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0TGFzdFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUm
IHJhZGl1cywgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkK
KyAgICB2b2lkIHNldExhc3RTaGFkb3dWYWx1ZXMoY29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMs
IGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkpCiAgICAg
ewogICAgICAgICBtX2xhc3RXYXNJbnNldCA9IGZhbHNlOwogICAgICAgICBtX2xhc3RSYWRpdXMg
PSByYWRpdXM7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIG1fbGFzdFJhZGlpID0gcmFkaWk7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRMYXN0SW5zZXRTaGFkb3dWYWx1ZXMoY29uc3QgRmxvYXRT
aXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25z
dCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQorICAgIHZvaWQgc2V0TGFzdEluc2V0U2hhZG93
VmFsdWVzKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZHMsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkK
ICAgICB7CiAgICAgICAgIG1fbGFzdFdhc0luc2V0ID0gdHJ1ZTsKICAgICAgICAgbV9sYXN0SW5z
ZXRCb3VuZHMgPSBib3VuZHM7CkBAIC0xMDQsMTQgKzEwNCwxNCBAQAogICAgICAgICBtX2xhc3RS
YWRpaSA9IHJhZGlpOwogICAgIH0KICAgICAKLSAgICBib29sIG1hdGNoZXNMYXN0U2hhZG93KGNv
bnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6
UmFkaWkmIHJhZGlpKSBjb25zdAorICAgIGJvb2wgbWF0Y2hlc0xhc3RTaGFkb3coY29uc3QgR3Jh
cGhpY3NTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpS
YWRpaSYgcmFkaWkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9sYXN0V2FzSW5zZXQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBtX2xhc3RSYWRpdXMgPT0g
cmFkaXVzICYmIG1fbGFzdENvbG9yID09IGNvbG9yICYmIG1fbGFzdENvbG9yU3BhY2UgPT0gY29s
b3JTcGFjZSAmJiBzaGFkb3dSZWN0ID09IG1fbGFzdFNoYWRvd1JlY3QgJiYgcmFkaWkgPT0gbV9s
YXN0UmFkaWk7CiAgICAgfQogCi0gICAgYm9vbCBtYXRjaGVzTGFzdEluc2V0U2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVj
dCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkgY29uc3QKKyAgICBib29sIG1hdGNo
ZXNMYXN0SW5zZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5k
cywgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFk
aWkmIHJhZGlpKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2xhc3RXYXNJbnNldCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MSwxOCArMTQxLDE4IEBACiAgICAgdm9pZCBj
bGVhclNjcmF0Y2hCdWZmZXIoKQogICAgIHsKICAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgICAgIG1fbGFzdFJhZGl1cyA9IEZsb2F0U2l6ZSgpOworICAgICAgICBtX2xhc3RS
YWRpdXMgPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiAKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+
IG1faW1hZ2VCdWZmZXI7CiAgICAgVGltZXI8U2NyYXRjaEJ1ZmZlcj4gbV9wdXJnZVRpbWVyOwog
ICAgIAotICAgIEZsb2F0UmVjdCBtX2xhc3RJbnNldEJvdW5kczsKLSAgICBGbG9hdFJlY3QgbV9s
YXN0U2hhZG93UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9sYXN0SW5zZXRCb3VuZHM7CisgICAg
R3JhcGhpY3NSZWN0IG1fbGFzdFNoYWRvd1JlY3Q7CiAgICAgUm91bmRlZFJlY3Q6OlJhZGlpIG1f
bGFzdFJhZGlpOwogICAgIENvbG9yIG1fbGFzdENvbG9yOwogICAgIENvbG9yU3BhY2UgbV9sYXN0
Q29sb3JTcGFjZTsKLSAgICBGbG9hdFNpemUgbV9sYXN0UmFkaXVzOworICAgIEdyYXBoaWNzU2l6
ZSBtX2xhc3RSYWRpdXM7CiAgICAgYm9vbCBtX2xhc3RXYXNJbnNldDsKICAgICAKICNpZiAhQVNT
RVJUX0RJU0FCTEVECkBAIC0xNjgsNyArMTY4LDcgQEAKIAogc3RhdGljIGNvbnN0IGludCB0ZW1w
bGF0ZVNpZGVMZW5ndGggPSAxOwogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEZsb2F0
U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdy
YXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgOiBtX2NvbG9yKGNvbG9yKQog
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCiAgICAgLCBtX2JsdXJSYWRpdXMocmFkaXVz
KQpAQCAtMTg2LDcgKzE4Niw3IEBACiB7CiB9CiAKLXZvaWQgU2hhZG93Qmx1cjo6c2V0U2hhZG93
VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wgaWdub3JlVHJh
bnNmb3JtcykKK3ZvaWQgU2hhZG93Qmx1cjo6c2V0U2hhZG93VmFsdWVzKGNvbnN0IEdyYXBoaWNz
U2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wgaWdub3JlVHJhbnNmb3JtcykKIHsKICAg
ICBtX2JsdXJSYWRpdXMgPSByYWRpdXM7CiAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7CkBAIC0yMDAs
NyArMjAwLDcgQEAKIHZvaWQgU2hhZG93Qmx1cjo6dXBkYXRlU2hhZG93Qmx1clZhbHVlcygpCiB7
CiAgICAgLy8gTGltaXQgYmx1ciByYWRpdXMgdG8gMTI4IHRvIGF2b2lkIGxvdHMgb2YgdmVyeSBl
eHBlbnNpdmUgYmx1cnJpbmcuCi0gICAgbV9ibHVyUmFkaXVzID0gbV9ibHVyUmFkaXVzLnNocnVu
a1RvKEZsb2F0U2l6ZSgxMjgsIDEyOCkpOworICAgIG1fYmx1clJhZGl1cyA9IG1fYmx1clJhZGl1
cy5zaHJ1bmtUbyhHcmFwaGljc1NpemUoMTI4LCAxMjgpKTsKIAogICAgIC8vIFRoZSB0eXBlIG9m
IHNoYWRvdyBpcyBkZWNpZGVkIGJ5IHRoZSBibHVyIHJhZGl1cywgc2hhZG93IG9mZnNldCwgYW5k
IHNoYWRvdyBjb2xvci4KICAgICBpZiAoIW1fY29sb3IuaXNWYWxpZCgpIHx8ICFtX2NvbG9yLmFs
cGhhKCkpIHsKQEAgLTI2NCw4ICsyNjQsOCBAQAogewogICAgIG1fdHlwZSA9IE5vU2hhZG93Owog
ICAgIG1fY29sb3IgPSBDb2xvcigpOwotICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZSgpOwot
ICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgbV9ibHVyUmFkaXVzID0gR3JhcGhpY3NT
aXplKCk7CisgICAgbV9vZmZzZXQgPSBHcmFwaGljc1NpemUoKTsKIH0KIAogdm9pZCBTaGFkb3dC
bHVyOjpibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEsIGNvbnN0IEludFNp
emUmIHNpemUsIGludCByb3dTdHJpZGUpCkBAIC0zNjMsMTcgKzM2MywxNyBAQAogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBDYWxjdWxhdGUgdHJhbnNmb3JtZWQgdW5pdCB2ZWN0b3JzLgotICAg
IGNvbnN0IEZsb2F0UXVhZCB1bml0UXVhZChGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEs
IDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KDAsIDEpLCBGbG9h
dFBvaW50KDEsIDEpKTsKLSAgICBjb25zdCBGbG9hdFF1YWQgdHJhbnNmb3JtZWRVbml0UXVhZCA9
IHRyYW5zZm9ybS5tYXBRdWFkKHVuaXRRdWFkKTsKKyAgICBjb25zdCBHcmFwaGljc1F1YWQgdW5p
dFF1YWQoR3JhcGhpY3NQb2ludCgwLCAwKSwgR3JhcGhpY3NQb2ludCgxLCAwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCgwLCAxKSwgR3JhcGhpY3NQb2ludCgx
LCAxKSk7CisgICAgY29uc3QgR3JhcGhpY3NRdWFkIHRyYW5zZm9ybWVkVW5pdFF1YWQgPSB0cmFu
c2Zvcm0ubWFwUXVhZCh1bml0UXVhZCk7CiAKICAgICAvLyBDYWxjdWxhdGUgWCBheGlzIHNjYWxl
IGZhY3Rvci4KLSAgICBjb25zdCBGbG9hdFNpemUgeFVuaXRDaGFuZ2UgPSB0cmFuc2Zvcm1lZFVu
aXRRdWFkLnAyKCkgLSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAxKCk7CisgICAgY29uc3QgR3JhcGhp
Y3NTaXplIHhVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMigpIC0gdHJhbnNmb3Jt
ZWRVbml0UXVhZC5wMSgpOwogICAgIGNvbnN0IGZsb2F0IHhBeGlzU2NhbGUgPSBzcXJ0Zih4VW5p
dENoYW5nZS53aWR0aCgpICogeFVuaXRDaGFuZ2Uud2lkdGgoKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICArIHhVbml0Q2hhbmdlLmhlaWdodCgpICogeFVuaXRDaGFuZ2UuaGVp
Z2h0KCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIFkgYXhpcyBzY2FsZSBmYWN0b3IuCi0gICAgY29u
c3QgRmxvYXRTaXplIHlVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMygpIC0gdHJh
bnNmb3JtZWRVbml0UXVhZC5wMSgpOworICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSB5VW5pdENoYW5n
ZSA9IHRyYW5zZm9ybWVkVW5pdFF1YWQucDMoKSAtIHRyYW5zZm9ybWVkVW5pdFF1YWQucDEoKTsK
ICAgICBjb25zdCBmbG9hdCB5QXhpc1NjYWxlID0gc3FydGYoeVVuaXRDaGFuZ2Uud2lkdGgoKSAq
IHlVbml0Q2hhbmdlLndpZHRoKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KyB5VW5pdENoYW5nZS5oZWlnaHQoKSAqIHlVbml0Q2hhbmdlLmhlaWdodCgpKTsKIApAQCAtMzk1
LDE3ICszOTUsMTcgQEAKICAgICByZXR1cm4gZWRnZVNpemU7CiB9CiAKLUludFJlY3QgU2hhZG93
Qmx1cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
CitJbnRSZWN0IFNoYWRvd0JsdXI6OmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIEludFNpemUgZWRnZVNpemUgPSBibHVycmVkRWRn
ZVNpemUoKTsKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gb2YgdGhlIGJsdXJy
ZWQgYW5kL29yIHRyYW5zZm9ybWVkIGxheWVyLgotICAgIEZsb2F0UmVjdCBsYXllclJlY3Q7Cisg
ICAgR3JhcGhpY3NSZWN0IGxheWVyUmVjdDsKICAgICBJbnRTaXplIGluZmxhdGlvbjsKIAogICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsKICAg
ICBpZiAobV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAmJiAhdHJhbnNmb3JtLmlzSWRlbnRpdHko
KSkgewotICAgICAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRQb2x5Z29uID0gdHJhbnNmb3JtLm1h
cFF1YWQoRmxvYXRRdWFkKHNoYWRvd2VkUmVjdCkpOworICAgICAgICBHcmFwaGljc1F1YWQgdHJh
bnNmb3JtZWRQb2x5Z29uID0gdHJhbnNmb3JtLm1hcFF1YWQoR3JhcGhpY3NRdWFkKHNoYWRvd2Vk
UmVjdCkpOwogICAgICAgICB0cmFuc2Zvcm1lZFBvbHlnb24ubW92ZShtX29mZnNldCk7CiAgICAg
ICAgIGxheWVyUmVjdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUXVhZCh0cmFuc2Zvcm1lZFBv
bHlnb24pLmJvdW5kaW5nQm94KCk7CiAgICAgfSBlbHNlIHsKQEAgLTQyMCw3ICs0MjAsNyBAQAog
ICAgICAgICBpbmZsYXRpb24gPSBlZGdlU2l6ZTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgdW5j
bGlwcGVkTGF5ZXJSZWN0ID0gbGF5ZXJSZWN0OworICAgIEdyYXBoaWNzUmVjdCB1bmNsaXBwZWRM
YXllclJlY3QgPSBsYXllclJlY3Q7CiAKICAgICBpZiAoIWNsaXBSZWN0LmNvbnRhaW5zKGVuY2xv
c2luZ0ludFJlY3QobGF5ZXJSZWN0KSkpIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIHRvdGFsbHkg
b3V0c2lkZSB0aGUgY2xpcCByZWdpb24sIHdlIGFyZW4ndCBwYWludGluZyBhdCBhbGwuCkBAIC00
NDAsMTggKzQ0MCwxOCBAQAogCiAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBpbmZsYXRpb247CiAg
ICAgZnJhbWVTaXplLnNjYWxlKDIpOwotICAgIG1fc291cmNlUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCBzaGFkb3dlZFJlY3Qud2lkdGgoKSArIGZyYW1lU2l6ZS53aWR0aCgpLCBzaGFkb3dlZFJlY3Qu
aGVpZ2h0KCkgKyBmcmFtZVNpemUuaGVpZ2h0KCkpOwotICAgIG1fbGF5ZXJPcmlnaW4gPSBGbG9h
dFBvaW50KGxheWVyUmVjdC54KCksIGxheWVyUmVjdC55KCkpOworICAgIG1fc291cmNlUmVjdCA9
IEdyYXBoaWNzUmVjdCgwLCAwLCBzaGFkb3dlZFJlY3Qud2lkdGgoKSArIGZyYW1lU2l6ZS53aWR0
aCgpLCBzaGFkb3dlZFJlY3QuaGVpZ2h0KCkgKyBmcmFtZVNpemUuaGVpZ2h0KCkpOworICAgIG1f
bGF5ZXJPcmlnaW4gPSBHcmFwaGljc1BvaW50KGxheWVyUmVjdC54KCksIGxheWVyUmVjdC55KCkp
OwogICAgIG1fbGF5ZXJTaXplID0gbGF5ZXJSZWN0LnNpemUoKTsKIAotICAgIGNvbnN0IEZsb2F0
UG9pbnQgdW5jbGlwcGVkTGF5ZXJPcmlnaW4gPSBGbG9hdFBvaW50KHVuY2xpcHBlZExheWVyUmVj
dC54KCksIHVuY2xpcHBlZExheWVyUmVjdC55KCkpOwotICAgIGNvbnN0IEZsb2F0U2l6ZSBjbGlw
cGVkT3V0ID0gdW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3JpZ2luOworICAgIGNvbnN0
IEdyYXBoaWNzUG9pbnQgdW5jbGlwcGVkTGF5ZXJPcmlnaW4gPSBHcmFwaGljc1BvaW50KHVuY2xp
cHBlZExheWVyUmVjdC54KCksIHVuY2xpcHBlZExheWVyUmVjdC55KCkpOworICAgIGNvbnN0IEdy
YXBoaWNzU2l6ZSBjbGlwcGVkT3V0ID0gdW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3Jp
Z2luOwogCiAgICAgLy8gU2V0IHRoZSBvcmlnaW4gYXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0
aGUgc2NyYXRjaCBpbWFnZSwgb3IsIGluIGNhc2UgdGhlcmUncyBhIGNsaXBwZWQKICAgICAvLyBv
dXQgcmVnaW9uLCBzZXQgdGhlIG9yaWdpbiBhY2NvcmRpbmdseSB0byB0aGUgZnVsbCBib3VuZGlu
ZyByZWN0J3MgdG9wLWxlZnQgY29ybmVyLgogICAgIGZsb2F0IHRyYW5zbGF0aW9uWCA9IC1zaGFk
b3dlZFJlY3QueCgpICsgaW5mbGF0aW9uLndpZHRoKCkgLSBmYWJzZihjbGlwcGVkT3V0LndpZHRo
KCkpOwogICAgIGZsb2F0IHRyYW5zbGF0aW9uWSA9IC1zaGFkb3dlZFJlY3QueSgpICsgaW5mbGF0
aW9uLmhlaWdodCgpIC0gZmFic2YoY2xpcHBlZE91dC5oZWlnaHQoKSk7Ci0gICAgbV9sYXllckNv
bnRleHRUcmFuc2xhdGlvbiA9IEZsb2F0U2l6ZSh0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7
CisgICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEdyYXBoaWNzU2l6ZSh0cmFuc2xhdGlv
blgsIHRyYW5zbGF0aW9uWSk7CiAKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChsYXllclJl
Y3QpOwogfQpAQCAtNDY3LDEzICs0NjcsMTMgQEAKICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBtX2xh
eWVyU2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xpcFRvSW1hZ2VCdWZm
ZXIoKSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIsCiAgICAgICAgIC8v
IGJ1dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAgdG8gdGhlIGZpbGxl
ZCBwYXJ0IGZpcnN0LgotICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAoRmxvYXRSZWN0KG1f
bGF5ZXJPcmlnaW4sIG1fbGF5ZXJTaXplKSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xp
cChHcmFwaGljc1JlY3QobV9sYXllck9yaWdpbiwgbV9sYXllclNpemUpKTsKICAgICB9Ci0gICAg
Z3JhcGhpY3NDb250ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIEZsb2F0UmVj
dChtX2xheWVyT3JpZ2luLCBidWZmZXJTaXplKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlw
VG9JbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIEdyYXBoaWNzUmVjdChtX2xheWVyT3JpZ2luLCBi
dWZmZXJTaXplKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9jb2xvciwg
bV9jb2xvclNwYWNlKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKLSAg
ICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChtX2xheWVyT3JpZ2luLCBtX3Nv
dXJjZVJlY3Quc2l6ZSgpKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChHcmFwaGlj
c1JlY3QobV9sYXllck9yaWdpbiwgbV9zb3VyY2VSZWN0LnNpemUoKSkpOwogfQogCiBzdGF0aWMg
dm9pZCBjb21wdXRlU2xpY2VTaXplc0Zyb21SYWRpaShjb25zdCBJbnRTaXplJiB0d2ljZVJhZGl1
cywgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgaW50JiBsZWZ0U2xpY2UsIGludCYg
cmlnaHRTbGljZSwgaW50JiB0b3BTbGljZSwgaW50JiBib3R0b21TbGljZSkKQEAgLTUwMyw3ICs1
MDMsNyBAQAogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU2lkZUxlbmd0aCArIHRvcFNsaWNl
ICsgYm90dG9tU2xpY2UpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93KEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2Vk
UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKK3ZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlp
KQogewogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3Qo
Z3JhcGhpY3NDb250ZXh0LCBzaGFkb3dlZFJlY3QsIGdyYXBoaWNzQ29udGV4dC0+Y2xpcEJvdW5k
cygpKTsKICAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKQEAgLTUzMCw3ICs1MzAsNyBAQAog
ICAgIGRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhncmFwaGljc0NvbnRleHQsIHNoYWRvd2VkUmVj
dCwgcmFkaWksIHRlbXBsYXRlU2l6ZSwgZWRnZVNpemUpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6
OmRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVk
UmVjdDo6UmFkaWkmIGhvbGVSYWRpaSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRp
aSYgaG9sZVJhZGlpKQogewogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJC
b3VuZGluZ1JlY3QoZ3JhcGhpY3NDb250ZXh0LCByZWN0LCBncmFwaGljc0NvbnRleHQtPmNsaXBC
b3VuZHMoKSk7CiAgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCkBAIC01NTcsMjAgKzU1Nywy
MCBAQAogICAgIGRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoZ3JhcGhpY3NDb250ZXh0LCByZWN0
LCBob2xlUmVjdCwgaG9sZVJhZGlpLCB0ZW1wbGF0ZVNpemUsIGVkZ2VTaXplKTsKIH0KIAotdm9p
ZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBS
b3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCit2b2lk
IFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0
IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKIHsK
ICAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVm
ZmVyKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QgPSBzaGFk
b3dlZFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0ID0g
c2hhZG93ZWRSZWN0OwogICAgIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0Lm1vdmUobV9sYXll
ckNvbnRleHRUcmFuc2xhdGlvbik7CiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5t
YXRjaGVzTGFzdFNoYWRvdyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURl
dmljZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHJhZGlpKSkgewogICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250
ZXh0KTsKIAogICAgICAgICAvLyBBZGQgYSBwaXhlbCB0byBhdm9pZCBsYXRlciBlZGdlIGFsaWFz
aW5nIHdoZW4gcm90YXRlZC4KLSAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0
UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXllclNpemUuaGVpZ2h0KCkg
KyAxKSk7CisgICAgICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChHcmFwaGljc1JlY3QoMCwg
MCwgbV9sYXllclNpemUud2lkdGgoKSArIDEsIG1fbGF5ZXJTaXplLmhlaWdodCgpICsgMSkpOwog
ICAgICAgICBzaGFkb3dDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRleHRUcmFuc2xhdGlv
bik7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBpZiAocmFkaWkuaXNaZXJvKCkpCkBAIC01OTEs
MTYgKzU5MSwxNiBAQAogICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRj
aEJ1ZmZlclB1cmdlKCk7CiB9CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0
aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6
UmFkaWkmIGhvbGVSYWRpaSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQordm9pZCBTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
aG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpLCBjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QpCiB7CiAgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hh
cmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIW1fbGF5
ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJ1ZmZlclJlbGF0aXZl
UmVjdCA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGJ1ZmZlclJlbGF0aXZlUmVjdCA9IHJlY3Q7
CiAgICAgYnVmZmVyUmVsYXRpdmVSZWN0Lm1vdmUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7
CiAKLSAgICBGbG9hdFJlY3QgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCA9IGhvbGVSZWN0OworICAg
IEdyYXBoaWNzUmVjdCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0ID0gaG9sZVJlY3Q7CiAgICAgYnVm
ZmVyUmVsYXRpdmVIb2xlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAg
ICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5tYXRjaGVzTGFzdEluc2V0U2hhZG93KG1f
Ymx1clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxh
dGl2ZVJlY3QsIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QsIGhvbGVSYWRpaSkpIHsKQEAgLTYwOCw3
ICs2MDgsNyBAQAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnNoYWRvd0NvbnRleHQpOwogCiAgICAgICAgIC8vIEFkZCBhIHBpeGVsIHRvIGF2b2lkIGxhdGVy
IGVkZ2UgYWxpYXNpbmcgd2hlbiByb3RhdGVkLgotICAgICAgICBzaGFkb3dDb250ZXh0LT5jbGVh
clJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgKyAxLCBtX2xheWVyU2l6
ZS5oZWlnaHQoKSArIDEpKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEdyYXBo
aWNzUmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXllclNpemUuaGVpZ2h0
KCkgKyAxKSk7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4
dFRyYW5zbGF0aW9uKTsKIAogICAgICAgICBQYXRoIHBhdGg7CkBAIC02NjQsNyArNjY0LDcgQEAK
ICAgICAgdGhlIHNoYWRvdy4KICAqLwogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6
OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXpl
JiBlZGdlU2l6ZSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkm
IHJhZGlpLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VT
aXplKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhp
Y3NDb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7CkBAIC02NzQs
OCArNjc0LDggQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRHJhdyB0aGUgcmVjdGFuZ2xl
IHdpdGggaG9sZS4KLSAgICBGbG9hdFJlY3QgdGVtcGxhdGVCb3VuZHMoMCwgMCwgdGVtcGxhdGVT
aXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IHRlbXBs
YXRlSG9sZSA9IEZsb2F0UmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwg
dGVtcGxhdGVTaXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXpl
LmhlaWdodCgpIC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3QgdGVt
cGxhdGVCb3VuZHMoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWln
aHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlSG9sZSA9IEdyYXBoaWNzUmVjdChlZGdl
U2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwgdGVtcGxhdGVTaXplLndpZHRoKCkgLSAy
ICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpIC0gMiAqIGVkZ2VTaXpl
LmhlaWdodCgpKTsKIAogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkubWF0Y2hlc0xh
c3RJbnNldFNoYWRvdyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwgdGVtcGxh
dGVCb3VuZHMsIHRlbXBsYXRlSG9sZSwgcmFkaWkpKSB7CiAgICAgICAgIC8vIERyYXcgc2hhZG93
IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCkBAIC02OTksMTIgKzY5OSwxMiBAQAogICAgICAgICBT
Y3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRMYXN0SW5zZXRTaGFkb3dWYWx1ZXMobV9ibHVyUmFk
aXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlQm91bmRzLCB0ZW1wbGF0ZUhvbGUs
IHJhZGlpKTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKKyAg
ICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3VuZGluZ1JlY3QubW92
ZShtX29mZnNldCk7CiAKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVSZWN0ID0gaG9sZVJlY3Q7Cisg
ICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlUmVjdCA9IGhvbGVSZWN0OwogICAgIGRlc3RIb2xlUmVj
dC5tb3ZlKG1fb2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVCb3VuZHMgPSBkZXN0SG9s
ZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlQm91bmRzID0gZGVzdEhvbGVSZWN0Owog
ICAgIGRlc3RIb2xlQm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkpOwogICAgIGRlc3RI
b2xlQm91bmRzLmluZmxhdGVZKGVkZ2VTaXplLmhlaWdodCgpKTsKIApAQCAtNzI2LDcgKzcyNiw3
IEBACiAgICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVy
Z2UoKTsKIH0KIAotdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93ZWRS
ZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXplJiB0ZW1w
bGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VTaXplKQordm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkm
IHJhZGlpLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VT
aXplKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhp
Y3NDb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7CkBAIC03MzUs
MTQgKzczNSwxNCBAQAogICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGbG9hdFJlY3QgdGVtcGxhdGVTaGFkb3cgPSBGbG9hdFJlY3QoZWRnZVNpemUud2lkdGgo
KSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gMiAqIGVkZ2VTaXpl
LndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIgKiBlZGdlU2l6ZS5oZWlnaHQoKSk7
CisgICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlU2hhZG93ID0gR3JhcGhpY3NSZWN0KGVkZ2VTaXpl
LndpZHRoKCksIGVkZ2VTaXplLmhlaWdodCgpLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIDIgKiBl
ZGdlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSAyICogZWRnZVNpemUuaGVp
Z2h0KCkpOwogCiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5tYXRjaGVzTGFzdFNo
YWRvdyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwgdGVtcGxhdGVTaGFkb3cs
IHJhZGlpKSkgewogICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIHRoZSBJbWFnZUJ1ZmZlci4K
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5j
b250ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2hhZG93U3RhdGVT
YXZlcigqc2hhZG93Q29udGV4dCk7CiAKLSAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0
KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdo
dCgpKSk7CisgICAgICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChHcmFwaGljc1JlY3QoMCwg
MCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSkpOwogICAgICAg
ICBzaGFkb3dDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyYWRpaS5pc1plcm8oKSkKQEAgLTc1OCw3
ICs3NTgsNyBAQAogICAgICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRMYXN0U2hhZG93
VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0ZW1wbGF0ZVNoYWRv
dywgcmFkaWkpOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBzaGFkb3dCb3VuZHMgPSBzaGFkb3dl
ZFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHNoYWRvd0JvdW5kcyA9IHNoYWRvd2VkUmVjdDsKICAg
ICBzaGFkb3dCb3VuZHMubW92ZShtX29mZnNldC53aWR0aCgpLCBtX29mZnNldC5oZWlnaHQoKSk7
CiAgICAgc2hhZG93Qm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkpOwogICAgIHNoYWRv
d0JvdW5kcy5pbmZsYXRlWShlZGdlU2l6ZS5oZWlnaHQoKSk7CkBAIC03NjksNyArNzY5LDcgQEAK
ICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgp
OwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdMYXllclBpZWNlcyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dCb3VuZHMsIGNvbnN0IFJv
dW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUmIGJ1ZmZlclBhZGRpbmcsIGNv
bnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgU2hhZG93RGlyZWN0aW9uIGRpcmVjdGlvbikKK3Zv
aWQgU2hhZG93Qmx1cjo6ZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd0JvdW5kcywgY29uc3QgUm91bmRlZFJl
Y3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgYnVmZmVyUGFkZGluZywgY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplLCBTaGFkb3dEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIGNv
bnN0IEludFNpemUgdHdpY2VSYWRpdXMgPSBJbnRTaXplKGJ1ZmZlclBhZGRpbmcud2lkdGgoKSAq
IDIsIGJ1ZmZlclBhZGRpbmcuaGVpZ2h0KCkgKiAyKTsKIApAQCAtNzgzLDcgKzc4Myw3IEBACiAg
ICAgaW50IGNlbnRlckhlaWdodCA9IHNoYWRvd0JvdW5kcy5oZWlnaHQoKSAtIHRvcFNsaWNlIC0g
Ym90dG9tU2xpY2U7CiAKICAgICBpZiAoZGlyZWN0aW9uID09IE91dGVyU2hhZG93KSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzaGFkb3dJbnRlcmlvcihzaGFkb3dCb3VuZHMueCgpICsgbGVmdFNsaWNl
LCBzaGFkb3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQp
OworICAgICAgICBHcmFwaGljc1JlY3Qgc2hhZG93SW50ZXJpb3Ioc2hhZG93Qm91bmRzLngoKSAr
IGxlZnRTbGljZSwgc2hhZG93Qm91bmRzLnkoKSArIHRvcFNsaWNlLCBjZW50ZXJXaWR0aCwgY2Vu
dGVySGVpZ2h0KTsKICAgICAgICAgaWYgKCFzaGFkb3dJbnRlcmlvci5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3ND
b250ZXh0KTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fY29s
b3IsIG1fY29sb3JTcGFjZSk7CkBAIC03OTMsMTIgKzc5MywxMiBAQAogCiAgICAgLy8gTm90ZSB0
aGF0IGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIGlzIGZhc3RlciB0aGFuIGNyZWF0aW5nIGEgSW1h
Z2UgYW5kIGRyYXdpbmcgdGhhdCwKICAgICAvLyBiZWNhdXNlIEltYWdlQnVmZmVyOjpkcmF3KCkg
a25vd3MgdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gY29weSB0aGUgaW1hZ2UgYml0cy4KLSAgICBG
bG9hdFJlY3QgY2VudGVyUmVjdChzaGFkb3dCb3VuZHMueCgpICsgbGVmdFNsaWNlLCBzaGFkb3dC
b3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQpOworICAgIEdy
YXBoaWNzUmVjdCBjZW50ZXJSZWN0KHNoYWRvd0JvdW5kcy54KCkgKyBsZWZ0U2xpY2UsIHNoYWRv
d0JvdW5kcy55KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCk7CiAgICAg
Y2VudGVyUmVjdCA9IGdyYXBoaWNzQ29udGV4dC0+cm91bmRUb0RldmljZVBpeGVscyhjZW50ZXJS
ZWN0KTsKICAgICAKICAgICAvLyBUb3Agc2lkZS4KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBG
bG9hdFJlY3QobGVmdFNsaWNlLCAwLCB0ZW1wbGF0ZVNpZGVMZW5ndGgsIHRvcFNsaWNlKTsKLSAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC54KCksIGNlbnRlclJl
Y3QueSgpIC0gdG9wU2xpY2UsIGNlbnRlclJlY3Qud2lkdGgoKSwgdG9wU2xpY2UpOworICAgIEdy
YXBoaWNzUmVjdCB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdChsZWZ0U2xpY2UsIDAsIHRlbXBsYXRl
U2lkZUxlbmd0aCwgdG9wU2xpY2UpOworICAgIEdyYXBoaWNzUmVjdCBkZXN0UmVjdCA9IEdyYXBo
aWNzUmVjdChjZW50ZXJSZWN0LngoKSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgY2VudGVy
UmVjdC53aWR0aCgpLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJl
Y3QpOwogCiAgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCkBAIC04MDksOCArODA5LDggQEAK
ICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAKICAgICAvLyBMZWZ0IHNpZGUu
Ci0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwgdGVtcGxh
dGVTaWRlTGVuZ3RoKTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0UmVjdChjZW50ZXJSZWN0LngoKSAt
IGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCksIGxlZnRTbGljZSwgY2VudGVyUmVjdC5oZWlnaHQo
KSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgdG9wU2xpY2UsIGxlZnRTbGljZSwg
dGVtcGxhdGVTaWRlTGVuZ3RoKTsKKyAgICBkZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJS
ZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCksIGxlZnRTbGljZSwgY2VudGVyUmVj
dC5oZWlnaHQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXll
ckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAg
Ly8gUmlnaHQgc2lkZS4KQEAgLTgyMSwyMyArODIxLDIzIEBACiAgICAgZ3JhcGhpY3NDb250ZXh0
LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0
UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gVG9wIGxlZnQgY29ybmVyLgotICAgIHRpbGVSZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpOwotICAgIGRlc3RSZWN0ID0g
RmxvYXRSZWN0KGNlbnRlclJlY3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0LnkoKSAtIHRv
cFNsaWNlLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVj
dCgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKKyAgICBkZXN0UmVjdCA9IEdyYXBoaWNzUmVj
dChjZW50ZXJSZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwg
bGVmdFNsaWNlLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3Qp
OwogCiAgICAgLy8gVG9wIHJpZ2h0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCh0
ZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNl
KTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0UmVjdChjZW50ZXJSZWN0Lm1heFgoKSwgY2VudGVyUmVj
dC55KCkgLSB0b3BTbGljZSwgcmlnaHRTbGljZSwgdG9wU2xpY2UpOworICAgIHRpbGVSZWN0ID0g
R3JhcGhpY3NSZWN0KHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmlnaHRTbGljZSwgMCwgcmlnaHRT
bGljZSwgdG9wU2xpY2UpOworICAgIGRlc3RSZWN0ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJlY3Qu
bWF4WCgpLCBjZW50ZXJSZWN0LnkoKSAtIHRvcFNsaWNlLCByaWdodFNsaWNlLCB0b3BTbGljZSk7
CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gQm90dG9tIHJp
Z2h0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCh0ZW1wbGF0ZVNpemUud2lkdGgo
KSAtIHJpZ2h0U2xpY2UsIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIGJvdHRvbVNsaWNlLCByaWdo
dFNsaWNlLCBib3R0b21TbGljZSk7Ci0gICAgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVj
dC5tYXhYKCksIGNlbnRlclJlY3QubWF4WSgpLCByaWdodFNsaWNlLCBib3R0b21TbGljZSk7Cisg
ICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QodGVtcGxhdGVTaXplLndpZHRoKCkgLSByaWdodFNs
aWNlLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90
dG9tU2xpY2UpOworICAgIGRlc3RSZWN0ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJlY3QubWF4WCgp
LCBjZW50ZXJSZWN0Lm1heFkoKSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpOwogICAgIGdyYXBo
aWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIEJvdHRvbSBsZWZ0IGNvcm5lci4K
LSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0
b21TbGljZSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSk7Ci0gICAgZGVzdFJlY3QgPSBGbG9hdFJl
Y3QoY2VudGVyUmVjdC54KCkgLSBsZWZ0U2xpY2UsIGNlbnRlclJlY3QubWF4WSgpLCBsZWZ0U2xp
Y2UsIGJvdHRvbVNsaWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCB0ZW1wbGF0
ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSk7Cisg
ICAgZGVzdFJlY3QgPSBHcmFwaGljc1JlY3QoY2VudGVyUmVjdC54KCkgLSBsZWZ0U2xpY2UsIGNl
bnRlclJlY3QubWF4WSgpLCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKTsKICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRlc3RSZWN0LCB0aWxlUmVjdCk7CiB9CiAKQEAgLTg2MiwxMCArODYyLDEwIEBACiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKICAgICBz
aGFkb3dDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOwog
ICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwot
ICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUu
d2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CisgICAgc2hhZG93Q29udGV4dC0+Zmls
bFJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNp
emUuaGVpZ2h0KCkpKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBTaGFkb3dCbHVyOjpiZWdpblNo
YWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCAqY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXll
ckFyZWEpCitHcmFwaGljc0NvbnRleHQqIFNoYWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIoR3Jh
cGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSkKIHsK
ICAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRleHQpOwogCkBAIC04NzgsNyArODc4LDcgQEAKIAog
ICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4
dCgpOwogICAgIHNoYWRvd0NvbnRleHQtPnNhdmUoKTsKLSAgICBzaGFkb3dDb250ZXh0LT5jbGVh
clJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhl
aWdodCgpKSk7CisgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEdyYXBoaWNzUmVjdCgwLCAw
LCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSkpOwogCiAgICAgc2hh
ZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogICAgIHJl
dHVybiBzaGFkb3dDb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3Mg
R3JhcGhpY3NQb2ludDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEZvbnREYXRhOwogY2xh
c3MgRm9udE1ldHJpY3M7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwpAQCAtOTMsMTQgKzkzLDE0
IEBACiAKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0Owog
Ci0gICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwotICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBo
aWNzUG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAogICAgIGZsb2F0
IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZh
bGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGZsb2F0IHdp
ZHRoKGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdDsKIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxv
YXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0
UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGludCBoLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICBHcmFwaGlj
c1JlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CiAKICAgICBi
b29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxD
YXBzKCk7IH0KIApAQCAtMTYxLDE0ICsxNjEsMTQgQEAKIAogICAgIC8vIFJldHVybnMgdGhlIGlu
aXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAg
ICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3
RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0
bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdTaW1wbGVU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0Zv
clNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVG
b250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgR3Jh
cGhpY3NQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgR2x5cGhCdWZmZXIqLCBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNv
bnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAg
ICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgR3Jh
cGhpY3NSZWN0IHNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25z
dCBHcmFwaGljc1BvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwogCiAgICAg
Ym9vbCBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiwgR2x5cGhE
YXRhJikgY29uc3Q7CiAKQEAgLTE3OSwxMSArMTc5LDExIEBACiAKICAgICAvLyBSZXR1cm5zIHRo
ZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgogICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBo
QnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0
OwotICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAgICAg
ZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9
IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
KyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
OwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZs
b2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFz
cyBGb250OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgR2x5cGhCdWZmZXI7CkBAIC0x
MzcsNyArMTM3LDcgQEAKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1
biYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBj
dXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29u
c3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBmbG9hdCBmbG9h
dFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFy
c0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QgPSAwOwogI2VuZGlmCiAgICAgfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NS
ZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzUmVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
KworI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworR3JhcGhpY3NSZWN0OjpHcmFwaGljc1JlY3QoY29uc3QgSW50UmVjdCYg
cikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1fc2l6ZShyLnNpemUoKSkKK3sKK30KKwor
R3JhcGhpY3NSZWN0IEdyYXBoaWNzUmVjdDo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3Vi
bGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQoreworICAgIHJldHVybiBHcmFwaGlj
c1JlY3QobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoeCksIG5hcnJvd1ByZWNpc2lvblRv
R3JhcGhpY3NVbml0KHkpLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh3aWR0aCksIG5h
cnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KGhlaWdodCkpOworfQorCitib29sIEdyYXBoaWNz
UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIG90aGVyKSBjb25zdAoreworICAg
IC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFz
IHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQorICAgICAg
ICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisgICAgICAgICYm
IHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NSZWN0Ojpjb250YWlucyhjb25zdCBHcmFwaGljc1JlY3QmIG90aGVyKSBjb25zdAorewor
ICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKKyAg
ICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOworfQor
Cit2b2lkIEdyYXBoaWNzUmVjdDo6aW50ZXJzZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIp
Cit7CisgICAgR3JhcGhpY3NVbml0IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOworICAgIEdyYXBo
aWNzVW5pdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKKyAgICBHcmFwaGljc1VuaXQgciA9IG1p
bihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgR3JhcGhpY3NVbml0IGIgPSBtaW4obWF4WSgp
LCBvdGhlci5tYXhZKCkpOworCisgICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xl
IGZvciBub24taW50ZXJzZWN0aW5nIGNhc2VzLgorICAgIGlmIChsID49IHIgfHwgdCA+PSBiKSB7
CisgICAgICAgIGwgPSAwOworICAgICAgICB0ID0gMDsKKyAgICAgICAgciA9IDA7CisgICAgICAg
IGIgPSAwOworICAgIH0KKworICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCBy
LCBiKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnVuaXRlKGNvbnN0IEdyYXBoaWNzUmVjdCYg
b3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAg
aWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc0VtcHR5KCkp
IHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEdyYXBoaWNzVW5pdCBsID0gbWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBHcmFwaGljc1VuaXQg
dCA9IG1pbih5KCksIG90aGVyLnkoKSk7CisgICAgR3JhcGhpY3NVbml0IHIgPSBtYXgobWF4WCgp
LCBvdGhlci5tYXhYKCkpOworICAgIEdyYXBoaWNzVW5pdCBiID0gbWF4KG1heFkoKSwgb3RoZXIu
bWF4WSgpKTsKKworICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsK
K30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEdyYXBoaWNzUmVj
dCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisg
ICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhl
cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdyYXBoaWNzVW5pdCBsZWZ0ID0gbWlu
KHgoKSwgb3RoZXIueCgpKTsKKyAgICBHcmFwaGljc1VuaXQgdG9wID0gbWluKHkoKSwgb3RoZXIu
eSgpKTsKKyAgICBHcmFwaGljc1VuaXQgcmlnaHQgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkp
OworICAgIEdyYXBoaWNzVW5pdCBib3R0b20gPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOwor
CisgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRv
bSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NSZWN0OjpzY2FsZShHcmFwaGljc1VuaXQgc3gsIEdyYXBo
aWNzVW5pdCBzeSkKK3sKKyAgICBtX2xvY2F0aW9uLnNldFgoeCgpICogc3gpOworICAgIG1fbG9j
YXRpb24uc2V0WSh5KCkgKiBzeSk7CisgICAgbV9zaXplLnNldFdpZHRoKHdpZHRoKCkgKiBzeCk7
CisgICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAqIHN5KTsKK30KKwordm9pZCBHcmFwaGlj
c1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwMSkKK3sKKyAgICBHcmFwaGljc1VuaXQgbGVmdCA9IG1pbihwMC54KCksIHAxLngo
KSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCA9IG1pbihwMC55KCksIHAxLnkoKSk7CisgICAgR3Jh
cGhpY3NVbml0IHJpZ2h0ID0gbWF4KHAwLngoKSwgcDEueCgpKTsKKyAgICBHcmFwaGljc1VuaXQg
Ym90dG9tID0gbWF4KHAwLnkoKSwgcDEueSgpKTsKKworICAgIHNldExvY2F0aW9uQW5kU2l6ZUZy
b21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQorCituYW1lc3BhY2UgeworLy8g
SGVscGVycyBmb3IgMy0gYW5kIDQtd2F5IG1heCBhbmQgbWluLgorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK1QgbWluMyhjb25zdCBUJiB2MSwgY29uc3QgVCYgdjIsIGNvbnN0IFQmIHYzKQorewor
ICAgIHJldHVybiBtaW4obWluKHYxLCB2MiksIHYzKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitUIG1heDMoY29uc3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MykKK3sKKyAg
ICByZXR1cm4gbWF4KG1heCh2MSwgdjIpLCB2Myk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorVCBtaW40KGNvbnN0IFQmIHYxLCBjb25zdCBUJiB2MiwgY29uc3QgVCYgdjMsIGNvbnN0IFQm
IHY0KQoreworICAgIHJldHVybiBtaW4obWluKHYxLCB2MiksIG1pbih2MywgdjQpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUIG1heDQoY29uc3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBj
b25zdCBUJiB2MywgY29uc3QgVCYgdjQpCit7CisgICAgcmV0dXJuIG1heChtYXgodjEsIHYyKSwg
bWF4KHYzLCB2NCkpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBHcmFw
aGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIpCit7CisgICAgR3JhcGhpY3NV
bml0IGxlZnQgPSBtaW4zKHAwLngoKSwgcDEueCgpLCBwMi54KCkpOworICAgIEdyYXBoaWNzVW5p
dCB0b3AgPSBtaW4zKHAwLnkoKSwgcDEueSgpLCBwMi55KCkpOworICAgIEdyYXBoaWNzVW5pdCBy
aWdodCA9IG1heDMocDAueCgpLCBwMS54KCksIHAyLngoKSk7CisgICAgR3JhcGhpY3NVbml0IGJv
dHRvbSA9IG1heDMocDAueSgpLCBwMS55KCksIHAyLnkoKSk7CisKKyAgICBzZXRMb2NhdGlvbkFu
ZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKwordm9pZCBHcmFw
aGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAzKQoreworICAgIEdyYXBoaWNzVW5pdCBsZWZ0ID0gbWluNChwMC54KCksIHAxLngoKSwg
cDIueCgpLCBwMy54KCkpOworICAgIEdyYXBoaWNzVW5pdCB0b3AgPSBtaW40KHAwLnkoKSwgcDEu
eSgpLCBwMi55KCksIHAzLnkoKSk7CisgICAgR3JhcGhpY3NVbml0IHJpZ2h0ID0gbWF4NChwMC54
KCksIHAxLngoKSwgcDIueCgpLCBwMy54KCkpOworICAgIEdyYXBoaWNzVW5pdCBib3R0b20gPSBt
YXg0KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7CisKKyAgICBzZXRMb2NhdGlvbkFu
ZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKworSW50UmVjdCBl
bmNsb3NpbmdJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGlj
c1VuaXQgbGVmdCA9IGZsb29yKHJlY3QueCgpKTsKKyAgICBHcmFwaGljc1VuaXQgdG9wID0gZmxv
b3IocmVjdC55KCkpOworICAgIEdyYXBoaWNzVW5pdCB3aWR0aCA9IGNlaWwocmVjdC5tYXhYKCkp
IC0gbGVmdDsKKyAgICBHcmFwaGljc1VuaXQgaGVpZ2h0ID0gY2VpbChyZWN0Lm1heFkoKSkgLSB0
b3A7CisgICAgCisgICAgcmV0dXJuIEludFJlY3QoY2xhbXBUb0ludGVnZXIobGVmdCksIGNsYW1w
VG9JbnRlZ2VyKHRvcCksIAorICAgICAgICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRo
KSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisKK0dyYXBoaWNzUmVjdCBtYXBSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBH
cmFwaGljc1JlY3QmIGRlc3RSZWN0KQoreworICAgIGlmIChzcmNSZWN0LndpZHRoKCkgPT0gMCB8
fCBzcmNSZWN0LmhlaWdodCgpID09IDApCisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsK
KworICAgIEdyYXBoaWNzVW5pdCB3aWR0aFNjYWxlID0gZGVzdFJlY3Qud2lkdGgoKSAvIHNyY1Jl
Y3Qud2lkdGgoKTsKKyAgICBHcmFwaGljc1VuaXQgaGVpZ2h0U2NhbGUgPSBkZXN0UmVjdC5oZWln
aHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChkZXN0UmVj
dC54KCkgKyAoci54KCkgLSBzcmNSZWN0LngoKSkgKiB3aWR0aFNjYWxlLAorICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJlY3QueSgpICsgKHIueSgpIC0gc3JjUmVjdC55KCkpICogaGVpZ2h0U2Nh
bGUsCisgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCkgKiB3aWR0aFNjYWxlLCByLmhlaWdo
dCgpICogaGVpZ2h0U2NhbGUpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5v
a2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNzUG9pbnRf
aAorI2RlZmluZSBHcmFwaGljc1BvaW50X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgor
I2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lm
IFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRlZiBzdHJ1Y3QgQ0dQ
b2ludCBDR1BvaW50OworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShD
SFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBOU1BvaW50OworI2Vsc2UK
K3R5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CisjZW5kaWYKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oUVQpCisjaW5jbHVkZSAicWdsb2JhbC5oIgorUVRfQkVHSU5fTkFNRVNQQUNFCitj
bGFzcyBRUG9pbnRGOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisKKyNpZiBQTEFURk9STShI
QUlLVSkKK2NsYXNzIEJQb2ludDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCitzdHJ1Y3QgU2tQ
b2ludDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5z
Zm9ybTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgSW50UG9pbnQ7CitjbGFz
cyBJbnRTaXplOworCitjbGFzcyBHcmFwaGljc1BvaW50IHsKK3B1YmxpYzoKKyAgICBHcmFwaGlj
c1BvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBHcmFwaGljc1BvaW50KEdyYXBoaWNz
VW5pdCB4LCBHcmFwaGljc1VuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KKyAgICBHcmFwaGlj
c1BvaW50KGNvbnN0IEludFBvaW50Jik7CisKKworICAgIHN0YXRpYyBHcmFwaGljc1BvaW50IHpl
cm8oKSB7IHJldHVybiBHcmFwaGljc1BvaW50KCk7IH0KKworICAgIHN0YXRpYyBHcmFwaGljc1Bv
aW50IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHkpOworCisgICAgR3JhcGhpY3NV
bml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBHcmFwaGljc1VuaXQgeSgpIGNvbnN0
IHsgcmV0dXJuIG1feTsgfQorCisgICAgdm9pZCBzZXRYKEdyYXBoaWNzVW5pdCB4KSB7IG1feCA9
IHg7IH0KKyAgICB2b2lkIHNldFkoR3JhcGhpY3NVbml0IHkpIHsgbV95ID0geTsgfQorICAgIHZv
aWQgc2V0KEdyYXBoaWNzVW5pdCB4LCBHcmFwaGljc1VuaXQgeSkKKyAgICB7CisgICAgICAgIG1f
eCA9IHg7CisgICAgICAgIG1feSA9IHk7CisgICAgfQorICAgIHZvaWQgbW92ZShHcmFwaGljc1Vu
aXQgZHgsIEdyYXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1feCArPSBkeDsKKyAgICAg
ICAgbV95ICs9IGR5OworICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgSW50U2l6ZSYgYSkKKyAg
ICB7CisgICAgICAgIG1feCArPSBhLndpZHRoKCk7CisgICAgICAgIG1feSArPSBhLmhlaWdodCgp
OworICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgR3JhcGhpY3NTaXplJiBhKQorICAgIHsKKyAg
ICAgICAgbV94ICs9IGEud2lkdGgoKTsKKyAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7CisgICAg
fQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEludFBvaW50JiBhKQorICAgIHsKKyAgICAgICAgbV94
ICs9IGEueCgpOworICAgICAgICBtX3kgKz0gYS55KCk7CisgICAgfQorICAgIHZvaWQgbW92ZUJ5
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEpCisgICAgeworICAgICAgICBtX3ggKz0gYS54KCk7Cisg
ICAgICAgIG1feSArPSBhLnkoKTsKKyAgICB9CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQg
c3gsIEdyYXBoaWNzVW5pdCBzeSkKKyAgICB7CisgICAgICAgIG1feCAqPSBzeDsKKyAgICAgICAg
bV95ICo9IHN5OworICAgIH0KKworICAgIHZvaWQgbm9ybWFsaXplKCk7CisKKyAgICBHcmFwaGlj
c1VuaXQgZG90KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV94ICogYS54KCkgKyBtX3kgKiBhLnkoKTsKKyAgICB9CisKKyAgICBHcmFwaGljc1Vu
aXQgbGVuZ3RoKCkgY29uc3Q7CisgICAgR3JhcGhpY3NVbml0IGxlbmd0aFNxdWFyZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKKyAgICB9CisK
KyAgICBHcmFwaGljc1BvaW50IGV4cGFuZGVkVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2ludChzdGQ6Om1heChtX3gs
IG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7CisgICAgfQorCisgICAgR3Jh
cGhpY3NQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUG9pbnQobV95LCBtX3gpOworICAgIH0KKworI2lmIFVTRShDRykgfHwgVVNFKFNL
SUFfT05fTUFDX0NIUk9NSVVNKQorICAgIEdyYXBoaWNzUG9pbnQoY29uc3QgQ0dQb2ludCYpOwor
ICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMp
KSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyAgICBH
cmFwaGljc1BvaW50KGNvbnN0IE5TUG9pbnQmKTsKKyAgICBvcGVyYXRvciBOU1BvaW50KCkgY29u
c3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIEdyYXBoaWNzUG9pbnQoY29uc3Qg
UVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oSEFJS1UpCisgICAgR3JhcGhpY3NQb2ludChjb25zdCBCUG9pbnQmKTsKKyAgICBv
cGVyYXRvciBCUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCisgICAgb3Bl
cmF0b3IgU2tQb2ludCgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQoY29uc3QgU2tQb2ludCYp
OworI2VuZGlmCisKKyAgICBHcmFwaGljc1BvaW50IG1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgbWF0cml4VHJhbnNm
b3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEdyYXBo
aWNzVW5pdCBtX3gsIG1feTsKK307CisKKworaW5saW5lIEdyYXBoaWNzUG9pbnQmIG9wZXJhdG9y
Kz0oR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBiKQoreworICAgIGEubW92
ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3Jh
cGhpY3NQb2ludCYgb3BlcmF0b3IrPShHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBiKQoreworICAgIGEubW92ZShiLngoKSwgYi55KCkpOworICAgIHJldHVybiBhOworfQor
CitpbmxpbmUgR3JhcGhpY3NQb2ludCYgb3BlcmF0b3ItPShHcmFwaGljc1BvaW50JiBhLCBjb25z
dCBHcmFwaGljc1NpemUmIGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgp
KTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0b3IrKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1
cm4gR3JhcGhpY3NQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkgKyBiLmhlaWdodCgpKTsK
K30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQo
YS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7Cit9CisKK2lubGluZSBHcmFwaGljc1NpemUg
b3BlcmF0b3ItKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIp
Cit7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgp
KTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0b3ItKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1BvaW50
JiBiKQoreworICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHcmFwaGljc1BvaW50JiBhLCBjb25zdCBH
cmFwaGljc1BvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSAhPSBiLngoKSB8fCBhLnkoKSAh
PSBiLnkoKTsKK30KKworaW5saW5lIEdyYXBoaWNzVW5pdCBvcGVyYXRvciooY29uc3QgR3JhcGhp
Y3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYikKK3sKKyAgICAvLyBkb3QgcHJvZHVj
dAorICAgIHJldHVybiBhLmRvdChiKTsKK30KKworaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQ
b2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChzdGF0
aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLnko
KSkpKTsKK30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBHcmFwaGlj
c1BvaW50JiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHAueCgp
KSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOworfQorCitpbmxpbmUgSW50U2l6ZSBmbG9vcmVk
SW50U2l6ZShjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAgIHJldHVybiBJbnRTaXplKHN0
YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7Cit9CisKK0dy
YXBoaWNzVW5pdCBmaW5kU2xvcGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHAyLCBHcmFwaGljc1VuaXQmIGMpOworCisvLyBGaW5kIHBvaW50IHdoZXJlIGxp
bmVzIHRocm91Z2ggdGhlIHR3byBwYWlycyBvZiBwb2ludHMgaW50ZXJzZWN0LiBSZXR1cm5zIGZh
bHNlIGlmIHRoZSBsaW5lcyBkb24ndCBpbnRlcnNlY3QuCitib29sIGZpbmRJbnRlcnNlY3Rpb24o
Y29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBjb25zdCBH
cmFwaGljc1BvaW50JiBkMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDIsIEdyYXBoaWNzUG9pbnQm
IGludGVyc2VjdGlvbik7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYsOSBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9h
dFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3MgR3Jh
cGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NTaXplOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtMTUzLDIxICsx
NTMsMjEgQEAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRmb3JtVGhlbWVJ
Y29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2UoSW1h
Z2VPYnNlcnZlciogPSAwKTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxXaXRoU29saWRDb2xvcihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbG9yJiwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICBzdGF0
aWMgdm9pZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICAvLyBUaGUgQ29sb3JTcGFjZSBwYXJhbWV0ZXIg
d2lsbCBvbmx5IGJlIHVzZWQgZm9yIHVudGFnZ2VkIGltYWdlcy4KICNpZiBQTEFURk9STShXSU4p
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9CiAjZW5kaWYK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSA9IDA7Ci0gICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBz
cmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ip
ID0gMDsKKyAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHNyY1BvaW50LCBjb25zdCBHcmFw
aGljc1NpemUmIHRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpOworICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBUaWxlUnVs
ZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvcik7CiAKICAgICAvLyBTdXBwb3J0aW5nIHRpbGVkIGRyYXdpbmcKICAgICB2
aXJ0dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFsc2U7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRo
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFzdFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAj
aW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCkBA
IC0zNTEsNyArMzUxLDcgQEAKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLXZvaWQg
Rm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAordm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBo
cythZHZhbmNlcytmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CkBAIC0zNjEsMTEgKzM2MSwxMSBAQAogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFy
dFgsIHBvaW50LnkoKSk7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9p
bnQueSgpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwg
c3RhcnRQb2ludCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlh
bEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0
bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0zNzMsMTUgKzM3MywxNSBAQAog
ICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRy
YXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9p
bnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOworICAgIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEdyYXBoaWNzUG9pbnQo
cG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCi12b2lkIEZvbnQ6
OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogeyAgIAogICAgIC8vIERyYXcg
ZWFjaCBjb250aWd1b3VzIHJ1biBvZiBnbHlwaHMgdGhhdCB1c2UgdGhlIHNhbWUgZm9udCBkYXRh
LgogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRE
YXRhQXQoMCk7Ci0gICAgRmxvYXRTaXplIG9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KDAp
OwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NTaXplIG9m
ZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KDApOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQ
b2ludChwb2ludCk7CiAgICAgZmxvYXQgbmV4dFggPSBzdGFydFBvaW50LngoKTsKICAgICBpbnQg
bGFzdEZyb20gPSAwOwogICAgIGludCBuZXh0R2x5cGggPSAwOwpAQCAtMzkwLDcgKzM5MCw3IEBA
CiAjZW5kaWYKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAg
ICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5m
b250RGF0YUF0KG5leHRHbHlwaCk7Ci0gICAgICAgIEZsb2F0U2l6ZSBuZXh0T2Zmc2V0ID0gZ2x5
cGhCdWZmZXIub2Zmc2V0QXQobmV4dEdseXBoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIG5leHRP
ZmZzZXQgPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChuZXh0R2x5cGgpOwogCiAgICAgICAgIGlmIChu
ZXh0Rm9udERhdGEgIT0gZm9udERhdGEgfHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKICNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQpAQCAtNDIwLDcgKzQyMCw3IEBACiBpbmxpbmUgc3RhdGljIGZsb2F0
IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIEds
eXBoIGdseXBoKQogewogICAgIGlmIChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBmb250RGF0
YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRzID0g
Zm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgcmV0dXJuIGJvdW5kcy54
KCkgKyBib3VuZHMud2lkdGgoKSAvIDI7CiAgICAgfQogICAgIC8vIEZJWE1FOiBVc2UgZ2x5cGgg
Ym91bmRzIG9uY2UgdGhleSBtYWtlIHNlbnNlIGZvciB2ZXJ0aWNhbCBmb250cy4KQEAgLTQzMiw3
ICs0MzIsNyBAQAogICAgIHJldHVybiBvZmZzZXRUb01pZGRsZU9mR2x5cGgoZ2x5cGhCdWZmZXIu
Zm9udERhdGFBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CiAKLXZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBHbHlwaERhdGEgbWFy
a0dseXBoRGF0YTsKICAgICBpZiAoIWdldEVtcGhhc2lzTWFya0dseXBoRGF0YShtYXJrLCBtYXJr
R2x5cGhEYXRhKSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogICAgIEdseXBoIHNwYWNlR2x5cGggPSBt
YXJrRm9udERhdGEtPnNwYWNlR2x5cGgoKTsKIAogICAgIGZsb2F0IG1pZGRsZU9mTGFzdEdseXBo
ID0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgMCk7Ci0gICAgRmxv
YXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0gb2Zmc2V0
VG9NaWRkbGVPZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgpKTsKKyAg
ICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpICsgbWlkZGxlT2ZMYXN0R2x5cGgg
LSBvZmZzZXRUb01pZGRsZU9mR2x5cGgobWFya0ZvbnREYXRhLCBtYXJrR2x5cGgpLCBwb2ludC55
KCkpOwogCiAgICAgR2x5cGhCdWZmZXIgbWFya0J1ZmZlcjsKICAgICBmb3IgKGludCBpID0gMDsg
aSArIDEgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkgewpAQCAtNDc2LDcgKzQ3Niw3IEBACiAg
ICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVj
dGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZv
bnQ6OnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewog
ICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZhbmNlKGZyb20pOwpA
QCAtNDg4LDEwICs0ODgsMTAgQEAKICAgICBpZiAocnVuLnJ0bCgpKSB7CiAgICAgICAgIGl0LmFk
dmFuY2UocnVuLmxlbmd0aCgpKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGl0Lm1fcnVu
V2lkdGhTb0ZhcjsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsg
dG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0
b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGgg
LSBhZnRlcldpZHRoKSwgaCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoZmxvb3JmKHBv
aW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9p
bnQueCgpICsgdG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZihwb2ludC54KCkgKyB0
b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOwogICAgIH0KIAotICAgIHJldHVybiBGbG9hdFJl
Y3QoZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9p
bnQueCgpICsgYWZ0ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBo
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0
aCksIHBvaW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIGFmdGVyV2lkdGgpIC0gZmxvb3JmKHBv
aW50LngoKSArIGJlZm9yZVdpZHRoKSwgaCk7CiB9CiAKIGludCBGb250OjpvZmZzZXRGb3JQb3Np
dGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlIDxh
bGdvcml0aG0+CiAKIHVzaW5nIHN0ZDo6bWF4OwpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUludFJlY3Q6OkludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorSW50
UmVjdDo6SW50UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKElu
dFBvaW50KHN0YXRpY19jYXN0PGludD4oci54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHIueSgpKSkp
CiAgICAgLCBtX3NpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHIud2lkdGgoKSksIHN0YXRp
Y19jYXN0PGludD4oci5oZWlnaHQoKSkpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
QEAgLTUwLDE5ICs1MCwxOSBAQAogICAgICAgICBCbHVyU2hhZG93CiAgICAgfTsKIAotICAgIFNo
YWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgIFNoYWRvd0JsdXIoY29uc3QgR3JhcGhp
Y3NTaXplJiByYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYs
IENvbG9yU3BhY2UpOwogICAgIFNoYWRvd0JsdXIoKTsKIAotICAgIHZvaWQgc2V0U2hhZG93VmFs
dWVzKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIENv
bG9yU3BhY2UsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKKyAgICB2b2lkIHNldFNo
YWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmLCBjb25zdCBHcmFwaGljc1NpemUmICwgY29u
c3QgQ29sb3ImLCBDb2xvclNwYWNlLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAK
ICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgaWdub3JlVHJhbnNmb3Jt
cykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdub3JlVHJhbnNmb3JtczsgfQogICAg
IGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luU2hhZG93TGF5
ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpOworICAgIEdy
YXBoaWNzQ29udGV4dCogYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBH
cmFwaGljc1JlY3QmIGxheWVyQXJlYSk7CiAgICAgdm9pZCBlbmRTaGFkb3dMYXllcihHcmFwaGlj
c0NvbnRleHQqKTsKIAotICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJik7Ci0gICAgdm9pZCBk
cmF3SW5zZXRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkp
OworICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJik7CisgICAgdm9pZCBkcmF3SW5zZXRT
aGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkpOwog
CiAgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYs
IGludCBzdHJpZGUpOwogCkBAIC04MSwxNiArODEsMTYgQEAKICAgICAgICAgSW5uZXJTaGFkb3cK
ICAgICB9OwogICAgIAotICAgIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KTsKKyAgICBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGF5ZXJBcmVhLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCk7CiAgICAgSW50U2l6ZSB0ZW1wbGF0ZVNpemUoY29uc3QgSW50U2l6ZSYgYmx1
cnJlZEVkZ2VTaXplLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmKSBjb25zdDsKIAotICAgIHZv
aWQgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFJlY3QmIGxheWVy
UmVjdCk7Ci0gICAgdm9pZCBkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50
U2l6ZSYgc2hhZG93VGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBibHVycmVkRWRnZVNpemUp
OworICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IElu
dFJlY3QmIGxheWVyUmVjdCk7CisgICAgdm9pZCBkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJh
ZGlpJiwgY29uc3QgSW50U2l6ZSYgc2hhZG93VGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBi
bHVycmVkRWRnZVNpemUpOwogCi0gICAgdm9pZCBkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5n
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYgaG9s
ZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCk7Ci0gICAgdm9pZCBkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5k
ZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgYmx1cnJlZEVkZ2VTaXplKTsKKyAgICB2b2lkIGRyYXdJbnNldFNoYWRvd1dpdGhv
dXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0KTsKKyAgICB2b2lkIGRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0JiBo
b2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50U2l6ZSYgc2hhZG93
VGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBibHVycmVkRWRnZVNpemUpOwogICAgIAotICAg
IHZvaWQgZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYg
c2hhZG93Qm91bmRzLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiBy
b3VuZGVkUmFkaXVzLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlv
bik7CisgICAgdm9pZCBkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzaGFkb3dCb3VuZHMsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0
IEludFNpemUmIHJvdW5kZWRSYWRpdXMsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgU2hh
ZG93RGlyZWN0aW9uKTsKICAgICAKICAgICB2b2lkIGJsdXJTaGFkb3dCdWZmZXIoY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplKTsKICAgICB2b2lkIGJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihj
b25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpOwpAQCAtMTAyLDE1ICsxMDIsMTUgQEAKIAogICAg
IENvbG9yIG1fY29sb3I7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Ci0gICAgRmxvYXRT
aXplIG1fYmx1clJhZGl1czsKLSAgICBGbG9hdFNpemUgbV9vZmZzZXQ7CisgICAgR3JhcGhpY3NT
aXplIG1fYmx1clJhZGl1czsKKyAgICBHcmFwaGljc1NpemUgbV9vZmZzZXQ7CiAKICAgICBJbWFn
ZUJ1ZmZlciogbV9sYXllckltYWdlOyAvLyBCdWZmZXIgdG8gd2hlcmUgdGhlIHRlbXBvcmFyeSBz
aGFkb3cgd2lsbCBiZSBkcmF3biB0by4KIAotICAgIEZsb2F0UmVjdCBtX3NvdXJjZVJlY3Q7IC8v
IFN1Yi1yZWN0IG9mIG1fbGF5ZXJJbWFnZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFkb3cgcGl4ZWxz
LgotICAgIEZsb2F0UG9pbnQgbV9sYXllck9yaWdpbjsgLy8gVG9wLWxlZnQgY29ybmVyIG9mIHRo
ZSAocG9zc2libHkgY2xpcHBlZCkgYm91bmRpbmcgcmVjdCB0byBkcmF3IHRoZSBzaGFkb3cgdG8u
Ci0gICAgRmxvYXRTaXplIG1fbGF5ZXJTaXplOyAvLyBTaXplIG9mIG1fbGF5ZXJJbWFnZSBwaXhl
bHMgdGhhdCBuZWVkIGJsdXJyaW5nLgotICAgIEZsb2F0U2l6ZSBtX2xheWVyQ29udGV4dFRyYW5z
bGF0aW9uOyAvLyBUcmFuc2xhdGlvbiB0byBhcHBseSB0byBtX2xheWVyQ29udGV4dCBmb3IgdGhl
IHNoYWRvdyB0byBiZSBjb3JyZWN0bHkgY2xpcHBlZC4KKyAgICBHcmFwaGljc1JlY3QgbV9zb3Vy
Y2VSZWN0OyAvLyBTdWItcmVjdCBvZiBtX2xheWVySW1hZ2UgdGhhdCBjb250YWlucyB0aGUgc2hh
ZG93IHBpeGVscy4KKyAgICBHcmFwaGljc1BvaW50IG1fbGF5ZXJPcmlnaW47IC8vIFRvcC1sZWZ0
IGNvcm5lciBvZiB0aGUgKHBvc3NpYmx5IGNsaXBwZWQpIGJvdW5kaW5nIHJlY3QgdG8gZHJhdyB0
aGUgc2hhZG93IHRvLgorICAgIEdyYXBoaWNzU2l6ZSBtX2xheWVyU2l6ZTsgLy8gU2l6ZSBvZiBt
X2xheWVySW1hZ2UgcGl4ZWxzIHRoYXQgbmVlZCBibHVycmluZy4KKyAgICBHcmFwaGljc1NpemUg
bV9sYXllckNvbnRleHRUcmFuc2xhdGlvbjsgLy8gVHJhbnNsYXRpb24gdG8gYXBwbHkgdG8gbV9s
YXllckNvbnRleHQgZm9yIHRoZSBzaGFkb3cgdG8gYmUgY29ycmVjdGx5IGNsaXBwZWQuCiAKICAg
ICBib29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVy
UHJpdmF0ZVFUS2l0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NTaXplLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgX19PQkpDX18K
QEAgLTIwMCw3ICsyMDAsNyBAQAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3
b3JrU3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAg
IEludFJlY3QgbV9yZWN0OwotICAgIEZsb2F0U2l6ZSBtX3NjYWxlRmFjdG9yOworICAgIEdyYXBo
aWNzU2l6ZSBtX3NjYWxlRmFjdG9yOwogICAgIHVuc2lnbmVkIG1fZW5hYmxlZFRyYWNrQ291bnQ7
CiAgICAgdW5zaWduZWQgbV90b3RhbFRyYWNrQ291bnQ7CiAgICAgZmxvYXQgbV9yZXBvcnRlZER1
cmF0aW9uOwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICAgZG91YmxlIG1fdGltZVN0YXJ0ZWRQbGF5
aW5nOwogICAgIGRvdWJsZSBtX3RpbWVTdG9wcGVkUGxheWluZzsKICNlbmRpZgotICAgIG11dGFi
bGUgRmxvYXRTaXplIG1fY2FjaGVkTmF0dXJhbFNpemU7CisgICAgbXV0YWJsZSBHcmFwaGljc1Np
emUgbV9jYWNoZWROYXR1cmFsU2l6ZTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw3ICs3OCw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMs
IGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5
cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQpCiB7CiAgICAgQ0dDb250
ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKIApAQCAt
MTA2LDcgKzEwNiw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIENHQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRN
YXRyaXgoY29udGV4dCkpOwogCi0gICAgICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gRmxvYXRQ
b2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2Nl
bnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50
KCkpOworICAgICAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQocG9pbnQu
eCgpLCBwb2ludC55KCkgKyBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9ncmFw
aGljQmFzZWxpbmUpIC0gZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKTsKICAgICAg
ICAgICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBD
R1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlv
bnNbaV0sIHRyYW5zbGF0aW9uc1RyYW5zZm9ybSk7CkBAIC0xMzcsNyArMTM3LDcgQEAKICNlbmRp
ZgogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Cit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogCkBAIC0yMTUsNyArMjE1LDcgQEAKICAgICAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dD
b250ZXh0LCBwbGF0Zm9ybURhdGEubV9zaXplKTsKIAogCi0gICAgRmxvYXRTaXplIHNoYWRvd09m
ZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zmc2V0OwogICAgIGZsb2F0IHNoYWRvd0Js
dXI7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNw
YWNlOwpAQCAtMjMyLDE1ICsyMzIsMTUgQEAKICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBw
b2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBh
cmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29v
cmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC0+
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dHbHlwaHNX
aXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBj
Z0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoR3JhcGhp
Y3NQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBo
cyk7CiAgICAgICAgIGlmIChmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgICAg
ICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBmb250LT5z
eW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlw
aEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlw
aHMpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhHcmFwaGljc1BvaW50KHNo
YWRvd1RleHRYICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksIGZv
bnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGZp
bGxDb2xvciwgZmlsbENvbG9yU3BhY2UpOwogICAgIH0KIAogICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICBpZiAoZm9udC0+c3lu
dGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0
UG9pbnQocG9pbnQueCgpICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkp
LCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5j
ZXMoR3JhcGhpY3NQb2ludChwb2ludC54KCkgKyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCks
IHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKIAogICAgIGlmIChoYXNTaW1w
bGVTaGFkb3cpCiAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29tcGxl
eFRleHRDb250cm9sbGVyLmgiCiAKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC00ODksNyArNDg5LDcgQEAKICAgICAg
ICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRv
dGFsIGV4cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4g
dGhlIHJ1bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhwYW5zaW9uOwor
ICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NVbml0IHByZXZpb3VzRXhwYW5zaW9uID0g
bV9leHBhbnNpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRyZWF0QXNTcGFjZSAm
JiAhbV9hZnRlckV4cGFuc2lvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRh
a2UgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBiZWZvcmUgdGhpcyBpZGVvZ3JhcGguCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9leHBhbnNpb24gLT0gbV9leHBhbnNpb25QZXJPcHBv
cnR1bml0eTsKQEAgLTU1MSw3ICs1NTEsNyBAQAogICAgICAgICAgICAgbV9hZGp1c3RlZEFkdmFu
Y2VzLmFwcGVuZChhZHZhbmNlKTsKICAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5k
KGdseXBoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRz
ID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIEdyYXBoaWNz
UmVjdCBnbHlwaEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAg
ICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGdseXBoT3JpZ2luLnkpOwog
ICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IG1pbihtX21pbkdseXBoQm91bmRp
bmdCb3hYLCBnbHlwaEJvdW5kcy54KCkpOwogICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5n
Qm94WCA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4
dE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9h
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNl
bGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENv
bnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4pOwpAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAg
Ly8gVXNpbmcgcm91bmRmKCkgcmF0aGVyIHRoYW4gY2VpbGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2Ug
YXMgYSBjb21wcm9taXNlIHRvIGVuc3VyZSBjb3JyZWN0IGNhcmV0IHBvc2l0aW9uaW5nCiAgICAg
aWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCB0b3RhbFdpZHRoID0gY29udHJvbGxlci50
b3RhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoZmxvb3JmKHBvaW50LngoKSAr
IHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsg
dG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRo
IC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGZsb29yZihw
b2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHBv
aW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsg
dG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKICAgICB9IAogCi0gICAgcmV0dXJuIEZsb2F0
UmVjdChmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihw
b2ludC54KCkgKyBhZnRlcldpZHRoKSAtIGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCks
IGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdp
ZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsgYWZ0ZXJXaWR0aCkgLSBmbG9vcmYo
cG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsKIH0KIAogZmxvYXQgRm9udDo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBp
bnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9y
VGV4dEVtcGhhc2lzKSBjb25zdApAQCAtODAsNyArODAsNyBAQAogICAgIHJldHVybiBpbml0aWFs
QWR2YW5jZTsKIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGgg
YnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBn
bHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTkyLDExICs5MiwxMSBAQAog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93IGF0IHRo
ZSBzdGFydGluZyBwb2ludCByZXR1cm5lZCBpbiBzdGFydFguCi0gICAgRmxvYXRQb2ludCBzdGFy
dFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQo
c3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGds
eXBoQnVmZmVyLCBzdGFydFBvaW50KTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
c0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAg
IGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTEwNCw3
ICsxMDQsNyBAQAogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1h
cmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwor
ICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEdy
YXBoaWNzUG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQog
CiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3Zl
cmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJCaXRt
YXBJbWFnZS5oIgogCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkdyYXBoaWNzUmVj
dC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0J
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQAog
fQogCiAvLyBXZWJLaXQgb24gTWFjIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gY29tcG9uZW50LCBz
byBpdCBtdXN0IHVzZSB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gYXJ0d29yayBmb3IgdW5kZXJsaW5l
Lgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxl
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0
eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
U2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9y
dCAiQ29sb3IuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NSZWN0
LmgiCiAjaW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKICNpbXBvcnQgIkZv
bnREZXNjcmlwdGlvbi5oIgpAQCAtMzg2LDkgKzM4Niw5IEBACiAgICAgICAgICAgIFtuYW1lIGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJNb25vdHlwZUNvcnNpdmEiXSAhPSBOU09yZGVyZWRTYW1l
OwogfQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CitHcmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveDsKICAgICBib3VuZGluZ0JveCA9
IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwgPyBrQ1RGb250VmVydGlj
YWxPcmllbnRhdGlvbiA6IGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sICZnbHlwaCwgMCwg
MSk7CiAgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKICAgICBpZiAo
bV9zeW50aGV0aWNCb2xkT2Zmc2V0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSwxOCArMTg1LDE4IEBA
CiAgICAgc2l6ZV90IG1fY3VycmVudFJ1bjsKICAgICB1bnNpZ25lZCBtX2dseXBoSW5DdXJyZW50
UnVuOwogICAgIHVuc2lnbmVkIG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGg7Ci0gICAgZmxvYXQg
bV9maW5hbFJvdW5kaW5nV2lkdGg7Ci0gICAgZmxvYXQgbV9leHBhbnNpb247Ci0gICAgZmxvYXQg
bV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAgICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247
CisgICAgR3JhcGhpY3NVbml0IG1fZmluYWxSb3VuZGluZ1dpZHRoOworICAgIEdyYXBoaWNzVW5p
dCBtX2V4cGFuc2lvbjsKKyAgICBHcmFwaGljc1VuaXQgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eTsKKyAgICBHcmFwaGljc1VuaXQgbV9sZWFkaW5nRXhwYW5zaW9uOwogICAgIGJvb2wgbV9hZnRl
ckV4cGFuc2lvbjsKIAogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxs
YmFja0ZvbnRzOwogCi0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9h
dCBtX21heEdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0Jv
eFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKKyAgICBHcmFwaGljc1VuaXQg
bV9taW5HbHlwaEJvdW5kaW5nQm94WDsKKyAgICBHcmFwaGljc1VuaXQgbV9tYXhHbHlwaEJvdW5k
aW5nQm94WDsKKyAgICBHcmFwaGljc1VuaXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKKyAgICBH
cmFwaGljc1VuaXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKIAogICAgIHVuc2lnbmVkIG1fbGFz
dFJvdW5kaW5nR2x5cGg7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyNiw3ICs4MjYs
NyBAQAogICAgIC8vICAgIGRpbWVuc2lvbnMsIGFzcGVjdCByYXRpbywgY2xlYW4gYXBlcnR1cmUs
IHJlc29sdXRpb24sIGFuZCBzbyBmb3J0aCwgYXMgZGVmaW5lZCBmb3IgdGhlIAogICAgIC8vICAg
IGZvcm1hdCB1c2VkIGJ5IHRoZSByZXNvdXJjZQogICAgIAotICAgIEZsb2F0U2l6ZSBuYXR1cmFs
U2l6ZShbW21fcXRNb3ZpZS5nZXQoKSBhdHRyaWJ1dGVGb3JLZXk6UVRNb3ZpZU5hdHVyYWxTaXpl
QXR0cmlidXRlXSBzaXplVmFsdWVdKTsKKyAgICBHcmFwaGljc1NpemUgbmF0dXJhbFNpemUoW1tt
X3F0TW92aWUuZ2V0KCkgYXR0cmlidXRlRm9yS2V5OlFUTW92aWVOYXR1cmFsU2l6ZUF0dHJpYnV0
ZV0gc2l6ZVZhbHVlXSk7CiAgICAgaWYgKG5hdHVyYWxTaXplLmlzRW1wdHkoKSAmJiBtX2lzU3Ry
ZWFtaW5nKSB7CiAgICAgICAgIC8vIEhUVFAgTGl2ZSBTdHJlYW1zIHdpbGwgb2NjYXNpb25hbGx5
IHJldHVybiB7MCwwfSBuYXR1cmFsIHNpemVzIHdoaWxlIHNjcnViYmluZy4KICAgICAgICAgLy8g
V29yayBhcm91bmQgdGhpcyBwcm9ibGVtICg8cmRhcjovL3Byb2JsZW0vOTA3ODU2Mz4pIGJ5IHJl
dHVybmluZyB0aGUgbGFzdCB2YWxpZCAKQEAgLTEzMDYsNyArMTMwNiw3IEBACiAgICAgW21fb2Jq
Y09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOllFU107CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuZXdDb250ZXh0OwotICAg
IEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigxLjBmLCAtMS4wZik7CisgICAgR3JhcGhpY3NTaXplIHNj
YWxlRmFjdG9yKDEuMGYsIC0xLjBmKTsKICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgw
LCAwKSwgSW50U2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpKTsKIAogI2lmIFBMQVRGT1JNKFFU
KSAmJiBVU0UoUVRLSVQpCkBAIC0xMzcxLDcgKzEzNzEsNyBAQAogICAgICAgICAgICAgU3RyaW5n
IHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJTEuMmYiLCBmcmFtZVJhdGUpOwogICAgICAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKICAgICAg
ICAgICAgIGNvbnN0IENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsgICAgCisgICAgICAgICAgICBjb250ZXh0
LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsgICAgCiAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvciwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaWZuZGVmIEdseXBoQnVmZmVyX2gKICNkZWZp
bmUgR2x5cGhCdWZmZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC02MCw3ICs2MCw3IEBACiB0eXBlZGVm
IEdseXBoIEdseXBoQnVmZmVyR2x5cGg7CiAjZW5kaWYKIAotLy8gQ0cgdXNlcyBDR1NpemUgaW5z
dGVhZCBvZiBGbG9hdFNpemUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIGFkdmFuY2VzKCkKKy8vIENH
IHVzZXMgQ0dTaXplIGluc3RlYWQgb2YgR3JhcGhpY3NTaXplIHNvIHRoYXQgdGhlIHJlc3VsdCBv
ZiBhZHZhbmNlcygpCiAvLyBjYW4gYmUgcGFzc2VkIGRpcmVjdGx5IHRvIENHQ29udGV4dFNob3dH
bHlwaHNXaXRoQWR2YW5jZXMgaW4gRm9udE1hYy5tbQogI2lmIFVTRShDRykgfHwgKFBMQVRGT1JN
KFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCiB0eXBlZGVm
IENHU2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CkBAIC02OSw3ICs2OSw3IEBACiAvLyBzbyB3ZSBj
YW4gc2F2ZSBtZW1vcnkgc3BhY2Ugb24gZW1iZWRkZWQgZGV2aWNlcyBieSBzdG9yaW5nIG9ubHkg
dGhlIHdpZHRoCiB0eXBlZGVmIGZsb2F0IEdseXBoQnVmZmVyQWR2YW5jZTsKICNlbHNlCi10eXBl
ZGVmIEZsb2F0U2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7Cit0eXBlZGVmIEdyYXBoaWNzU2l6ZSBH
bHlwaEJ1ZmZlckFkdmFuY2U7CiAjZW5kaWYKIAogY2xhc3MgR2x5cGhCdWZmZXIgewpAQCAtMTA5
LDcgKzEwOSw3IEBACiAgICAgICAgIG1fYWR2YW5jZXNbaW5kZXgyXSA9IHM7CiAKICNpZiBQTEFU
Rk9STShXSU4pCi0gICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBtX29mZnNldHNbaW5kZXgxXTsK
KyAgICAgICAgR3JhcGhpY3NTaXplIG9mZnNldCA9IG1fb2Zmc2V0c1tpbmRleDFdOwogICAgICAg
ICBtX29mZnNldHNbaW5kZXgxXSA9IG1fb2Zmc2V0c1tpbmRleDJdOwogICAgICAgICBtX29mZnNl
dHNbaW5kZXgyXSA9IG9mZnNldDsKICNlbmRpZgpAQCAtMTM1LDE3ICsxMzUsMTcgQEAKICNlbmRp
ZgogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBvZmZzZXRBdChpbnQgaW5kZXgpIGNvbnN0CisgICAg
R3JhcGhpY3NTaXplIG9mZnNldEF0KGludCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKICNlbHNlCiAgICAgICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBhZGQo
R2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgY29u
c3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZvaWQgYWRkKEdseXBoIGdseXBoLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udCwgZmxvYXQgd2lkdGgsIGNvbnN0IEdyYXBoaWNzU2l6ZSog
b2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIG1fZm9udERhdGEuYXBwZW5kKGZvbnQpOwogCkBA
IC0xNjMsMTQgKzE2MywxNCBAQAogI2VsaWYgT1MoV0lOQ0UpCiAgICAgICAgIG1fYWR2YW5jZXMu
YXBwZW5kKHdpZHRoKTsKICNlbHNlCi0gICAgICAgIG1fYWR2YW5jZXMuYXBwZW5kKEZsb2F0U2l6
ZSh3aWR0aCwgMCkpOworICAgICAgICBtX2FkdmFuY2VzLmFwcGVuZChHcmFwaGljc1NpemUod2lk
dGgsIDApKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBpZiAob2Zmc2V0
KQogICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZCgqb2Zmc2V0KTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZChGbG9hdFNpemUoKSk7CisgICAgICAgICAgICBt
X29mZnNldHMuYXBwZW5kKEdyYXBoaWNzU2l6ZSgpKTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9Q
QVJBTShvZmZzZXQpOwogI2VuZGlmCkBAIC0yMDEsNyArMjAxLDcgQEAKICNlbGlmIE9TKFdJTkNF
KQogICAgICAgICBsYXN0QWR2YW5jZSArPSB3aWR0aDsKICNlbHNlCi0gICAgICAgIGxhc3RBZHZh
bmNlICs9IEZsb2F0U2l6ZSh3aWR0aCwgMCk7CisgICAgICAgIGxhc3RBZHZhbmNlICs9IEdyYXBo
aWNzU2l6ZSh3aWR0aCwgMCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTIxMCw3ICsyMTAsNyBAQAog
ICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAyMDQ4PiBtX2dseXBoczsKICAgICBWZWN0b3I8
R2x5cGhCdWZmZXJBZHZhbmNlLCAyMDQ4PiBtX2FkdmFuY2VzOwogI2lmIFBMQVRGT1JNKFdJTikK
LSAgICBWZWN0b3I8RmxvYXRTaXplLCAyMDQ4PiBtX29mZnNldHM7CisgICAgVmVjdG9yPEdyYXBo
aWNzU2l6ZSwgMjA0OD4gbV9vZmZzZXRzOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBo
aWNzUmVjdF9oCisjZGVmaW5lIEdyYXBoaWNzUmVjdF9oCisKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKK3R5cGVk
ZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQorI2lmZGVmIE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0
OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OworI2VuZGlmCisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKFFUKQorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUmVjdEY7CitR
VF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykK
K2NsYXNzIHd4UmVjdDJERG91YmxlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShIQUlLVSkKK2Ns
YXNzIEJSZWN0OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkKK3N0cnVjdCBTa1JlY3Q7CisjZW5k
aWYKKworI2lmIFVTRShDQUlSTykKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19yZWN0YW5nbGUgY2Fp
cm9fcmVjdGFuZ2xlX3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExB
VEZPUk0oT1BFTlZHKQorY2xhc3MgVkdSZWN0OworI2VuZGlmCisKK2NsYXNzIEludFJlY3Q7Citj
bGFzcyBJbnRQb2ludDsKKworY2xhc3MgR3JhcGhpY3NSZWN0IHsKK3B1YmxpYzoKKyAgICBHcmFw
aGljc1JlY3QoKSB7IH0KKyAgICBHcmFwaGljc1JlY3QoY29uc3QgR3JhcGhpY3NQb2ludCYgbG9j
YXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0aW9uKGxv
Y2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEdyYXBoaWNzUmVjdChHcmFwaGljc1VuaXQg
eCwgR3JhcGhpY3NVbml0IHksIEdyYXBoaWNzVW5pdCB3aWR0aCwgR3JhcGhpY3NVbml0IGhlaWdo
dCkKKyAgICAgICAgOiBtX2xvY2F0aW9uKEdyYXBoaWNzUG9pbnQoeCwgeSkpLCBtX3NpemUoR3Jh
cGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBHcmFwaGljc1JlY3QoY29uc3QgSW50
UmVjdCYpOworCisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBuYXJyb3dQcmVjaXNpb24oZG91Ymxl
IHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOworCisgICAgR3JhcGhp
Y3NQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAgICBHcmFw
aGljc1NpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdm9pZCBzZXRM
b2NhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBsb2NhdGlvbikgeyBtX2xvY2F0aW9uID0gbG9j
YXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSB7IG1f
c2l6ZSA9IHNpemU7IH0KKworICAgIEdyYXBoaWNzVW5pdCB4KCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhdGlvbi54KCk7IH0KKyAgICBHcmFwaGljc1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YXRpb24ueSgpOyB9CisgICAgR3JhcGhpY3NVbml0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkg
KyB3aWR0aCgpOyB9CisgICAgR3JhcGhpY3NVbml0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkg
KyBoZWlnaHQoKTsgfQorICAgIEdyYXBoaWNzVW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOyB9CisgICAgR3JhcGhpY3NVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKEdyYXBoaWNzVW5pdCB4KSB7IG1f
bG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShHcmFwaGljc1VuaXQgeSkgeyBtX2xv
Y2F0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFdpZHRoKEdyYXBoaWNzVW5pdCB3aWR0aCkg
eyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoR3JhcGhpY3NV
bml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIEdyYXBoaWNz
UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NQb2ludCh4KCkgKyB3aWR0aCgp
IC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0IEdyYXBo
aWNzU2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0YTsgfSAKKyAgICB2b2lkIG1vdmVC
eShjb25zdCBHcmFwaGljc1BvaW50JiBkZWx0YSkgeyBtX2xvY2F0aW9uLm1vdmUoZGVsdGEueCgp
LCBkZWx0YS55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEdyYXBoaWNzVW5pdCBkeCwgR3JhcGhpY3NV
bml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9CisKKyAgICB2b2lkIGV4cGFuZChj
b25zdCBHcmFwaGljc1NpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KKyAgICB2b2lkIGV4
cGFuZChHcmFwaGljc1VuaXQgZHcsIEdyYXBoaWNzVW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3
LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgeyBt
X3NpemUgLT0gc2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoR3JhcGhpY3NVbml0IGR3LCBHcmFw
aGljc1VuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKworICAgIHZvaWQgc2hp
ZnRYRWRnZVRvKEdyYXBoaWNzVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NVbml0
IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAgc2V0V2lk
dGgoc3RkOjptYXg8R3JhcGhpY3NVbml0PigwLjBmLCB3aWR0aCgpIC0gZGVsdGEpKTsKKyAgICB9
CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oR3JhcGhpY3NVbml0IGVkZ2UpCisgICAgeworICAg
ICAgICBHcmFwaGljc1VuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBzZXRXaWR0
aChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIHdpZHRoKCkgKyBkZWx0YSkpOworICAgIH0K
KyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhHcmFwaGljc1VuaXQgZWRnZSkKKyAgICB7CisgICAgICAg
IEdyYXBoaWNzVW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNldFkoZWRnZSk7Cisg
ICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIGhlaWdodCgpIC0g
ZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oR3JhcGhpY3NVbml0IGVk
Z2UpCisgICAgeworICAgICAgICBHcmFwaGljc1VuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOwor
ICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8R3JhcGhpY3NVbml0PigwLjBmLCBoZWlnaHQoKSAr
IGRlbHRhKSk7CisgICAgfQorCisgICAgR3JhcGhpY3NQb2ludCBtaW5YTWluWUNvcm5lcigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQKKyAgICBHcmFw
aGljc1BvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NQb2ludCht
X2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlw
aWNhbGx5IHRvcFJpZ2h0CisgICAgR3JhcGhpY3NQb2ludCBtaW5YTWF4WUNvcm5lcigpIGNvbnN0
IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsg
bV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEdyYXBoaWNz
UG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1BvaW50KG1fbG9j
YXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdo
dCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKKworICAgIGJvb2wgaW50ZXJzZWN0cyhj
b25zdCBHcmFwaGljc1JlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEdyYXBo
aWNzUmVjdCYpIGNvbnN0OworCisgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgR3JhcGhpY3NSZWN0
Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lkIHVuaXRl
SWZOb25aZXJvKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworCisgICAgLy8gTm90ZSwgdGhpcyBkb2Vz
bid0IG1hdGNoIHdoYXQgSW50UmVjdDo6Y29udGFpbnMoSW50UG9pbnQmKSBkb2VzOyB0aGUgaW50
IHZlcnNpb24KKyAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4
MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCisgICAgYm9v
bCBjb250YWlucyhHcmFwaGljc1VuaXQgcHgsIEdyYXBoaWNzVW5pdCBweSkgY29uc3QKKyAgICAg
ICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkg
PD0gbWF4WSgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9CisKKyAg
ICB2b2lkIGluZmxhdGVYKEdyYXBoaWNzVW5pdCBkeCkgeworICAgICAgICBtX2xvY2F0aW9uLnNl
dFgobV9sb2NhdGlvbi54KCkgLSBkeCk7CisgICAgICAgIG1fc2l6ZS5zZXRXaWR0aChtX3NpemUu
d2lkdGgoKSArIGR4ICsgZHgpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGVZKEdyYXBoaWNzVW5p
dCBkeSkgeworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7Cisg
ICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7CisgICAg
fQorICAgIHZvaWQgaW5mbGF0ZShHcmFwaGljc1VuaXQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0
ZVkoZCk7IH0KKyAgICB2b2lkIHNjYWxlKEdyYXBoaWNzVW5pdCBzKSB7IHNjYWxlKHMsIHMpOyB9
CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSk7CisKKyAg
ICBHcmFwaGljc1JlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1Jl
Y3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkp
OyB9CisKKyAgICAvLyBSZS1pbml0aWFsaXplcyB0aGlzIHJlY3RhbmdsZSB0byBmaXQgdGhlIHNl
dHMgb2YgcGFzc2VkIHBvaW50cy4KKyAgICB2b2lkIGZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSk7CisgICAgdm9pZCBmaXRUb1BvaW50
cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAyKTsKKyAgICB2b2lkIGZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzKTsKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFf
T05fTUFDX0NIUk9NSVVNKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBDR1JlY3QmKTsKKyAgICBv
cGVyYXRvciBDR1JlY3QoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisg
ICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyAgICBHcmFwaGlj
c1JlY3QoY29uc3QgTlNSZWN0Jik7CisgICAgb3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBRUmVjdEYmKTsK
KyAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybWFsaXpl
ZCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkgJiYgVVNFKFdYR0MpCisgICAg
R3JhcGhpY3NSZWN0KGNvbnN0IHd4UmVjdDJERG91YmxlJik7CisgICAgb3BlcmF0b3Igd3hSZWN0
MkREb3VibGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgR3Jh
cGhpY3NSZWN0KGNvbnN0IEJSZWN0Jik7CisgICAgb3BlcmF0b3IgQlJlY3QoKSBjb25zdDsKKyNl
bmRpZgorCisjaWYgVVNFKFNLSUEpCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IFNrUmVjdCYpOwor
ICAgIG9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShPUEVO
VkcpCisgICAgb3BlcmF0b3IgVkdSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShDQUlS
TykKKyAgICBHcmFwaGljc1JlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3QmKTsKKyAgICBvcGVy
YXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
R3JhcGhpY3NQb2ludCBtX2xvY2F0aW9uOworICAgIEdyYXBoaWNzU2l6ZSBtX3NpemU7CisKKyAg
ICB2b2lkIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhHcmFwaGljc1VuaXQgbGVmdCwgR3Jh
cGhpY3NVbml0IHRvcCwgR3JhcGhpY3NVbml0IHJpZ2h0LCBHcmFwaGljc1VuaXQgYm90dG9tKQor
ICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXQobGVmdCwgdG9wKTsKKyAgICAgICAgbV9zaXpl
LnNldFdpZHRoKHJpZ2h0IC0gbGVmdCk7CisgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQoYm90dG9t
IC0gdG9wKTsKKyAgICB9Cit9OworCitpbmxpbmUgR3JhcGhpY3NSZWN0IGludGVyc2VjdGlvbihj
b25zdCBHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYikKK3sKKyAgICBHcmFw
aGljc1JlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJuIGM7Cit9CisK
K2lubGluZSBHcmFwaGljc1JlY3QgdW5pb25SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgYSwgY29u
c3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIEdyYXBoaWNzUmVjdCBjID0gYTsKKyAgICBjLnVu
aXRlKGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgR3JhcGhpY3NSZWN0JiBvcGVyYXRv
cis9KEdyYXBoaWNzUmVjdCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIGEubW92
ZShiLngoKSwgYi55KCkpOworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53aWR0aCgpKTsK
KyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7
Cit9CisKK2lubGluZSBHcmFwaGljc1JlY3Qgb3BlcmF0b3IrKGNvbnN0IEdyYXBoaWNzUmVjdCYg
YSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIEdyYXBoaWNzUmVjdCBjID0gYTsKKyAg
ICBjICs9IGI7CisgICAgcmV0dXJuIGM7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgR3JhcGhpY3NSZWN0JiBhLCBjb25zdCBHcmFwaGljc1JlY3QmIGIpCit7CisgICAgcmV0dXJu
IGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5zaXplKCk7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NSZWN0JiBhLCBjb25zdCBH
cmFwaGljc1JlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBiLmxvY2F0aW9u
KCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Cit9CisKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVj
dChjb25zdCBHcmFwaGljc1JlY3QmKTsKKworLy8gTWFwIHJlY3QgciBmcm9tIHNyY1JlY3QgdG8g
YW4gZXF1aXZhbGVudCByZWN0IGluIGRlc3RSZWN0LgorR3JhcGhpY3NSZWN0IG1hcFJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0JiByLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZGVzdFJlY3QpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBG
bG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIAogZW51bSBHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSB7CiAgICAgR3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZCA9ICgxIDw8IDAp
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgR3JhZGllbnRf
aAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAg
LTc0LDExICs3NCwxMSBAQAogCiAgICAgY2xhc3MgR3JhZGllbnQgOiBwdWJsaWMgR2VuZXJhdG9y
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYWRpZW50PiBjcmVh
dGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAw
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9h
dCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyA9
IDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQg
cjEsIGZsb2F0IGFzcGVjdFJhdGlvID0gMSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcjAsIHAxLCByMSwgYXNwZWN0UmF0aW8pKTsKICAg
ICAgICAgfQpAQCAtOTQsMTEgKzk0LDExIEBACiAgICAgICAgIGJvb2wgaXNSYWRpYWwoKSBjb25z
dCB7IHJldHVybiBtX3JhZGlhbDsgfQogICAgICAgICBib29sIGlzWmVyb1NpemUoKSBjb25zdCB7
IHJldHVybiBtX3AwLngoKSA9PSBtX3AxLngoKSAmJiBtX3AwLnkoKSA9PSBtX3AxLnkoKSAmJiAo
IW1fcmFkaWFsIHx8IG1fcjAgPT0gbV9yMSk7IH0KIAotICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwMCgpIGNvbnN0IHsgcmV0dXJuIG1fcDA7IH0KLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cDEoKSBjb25zdCB7IHJldHVybiBtX3AxOyB9CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAwKCkgY29uc3QgeyByZXR1cm4gbV9wMDsgfQorICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50
JiBwMSgpIGNvbnN0IHsgcmV0dXJuIG1fcDE7IH0KIAotICAgICAgICB2b2lkIHNldFAwKGNvbnN0
IEZsb2F0UG9pbnQmIHApIHsgbV9wMCA9IHA7IH0KLSAgICAgICAgdm9pZCBzZXRQMShjb25zdCBG
bG9hdFBvaW50JiBwKSB7IG1fcDEgPSBwOyB9CisgICAgICAgIHZvaWQgc2V0UDAoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCkgeyBtX3AwID0gcDsgfQorICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHApIHsgbV9wMSA9IHA7IH0KIAogICAgICAgICBmbG9hdCBzdGFydFJhZGl1
cygpIGNvbnN0IHsgcmV0dXJuIG1fcjA7IH0KICAgICAgICAgZmxvYXQgZW5kUmFkaXVzKCkgY29u
c3QgeyByZXR1cm4gbV9yMTsgfQpAQCAtMTMzLDggKzEzMyw4IEBACiAgICAgICAgIC8vIFF0IGFu
ZCBDRyB0cmFuc2Zvcm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZQogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQ
YXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEludFNpemUmIHNpemUsIEZsb2F0UmVjdCYgc3JjUmVj
dCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdy
YXBoaWNzUmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRp
bGVkRHJhd2luZyhJbnRTaXplJiBzaXplLCBHcmFwaGljc1JlY3QmIHNyY1JlY3QpOwogCiAgICAg
ICAgIHZvaWQgc2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKIApAQCAtMTQ0LDggKzE0NCw4
IEBACiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0
UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7Ci0gICAgICAgIEdyYWRpZW50KGNvbnN0
IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIx
LCBmbG9hdCBhc3BlY3RSYXRpbyk7CisgICAgICAgIEdyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSk7CisgICAgICAgIEdyYWRpZW50KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZs
b2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyk7CiAKICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQo
KSB7IG1fZ3JhZGllbnQgPSAwOyB9CiAgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CkBA
IC0xNTQsOCArMTU0LDggQEAKICAgICAgICAgdm9pZCBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOwog
CiAgICAgICAgIGJvb2wgbV9yYWRpYWw7Ci0gICAgICAgIEZsb2F0UG9pbnQgbV9wMDsKLSAgICAg
ICAgRmxvYXRQb2ludCBtX3AxOworICAgICAgICBHcmFwaGljc1BvaW50IG1fcDA7CisgICAgICAg
IEdyYXBoaWNzUG9pbnQgbV9wMTsKICAgICAgICAgZmxvYXQgbV9yMDsKICAgICAgICAgZmxvYXQg
bV9yMTsKICAgICAgICAgZmxvYXQgbV9hc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3Jh
ZGllbnQsIHdpZHRoIC8gaGVpZ2h0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29s
b3IoY29sb3IsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29s
b3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3coY29uc3QgR3JhcGhpY3NTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBj
b2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0
ID0gb2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CkBAIC0xNDMsNyArMTQz
LDcgQEAKICAgICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yLCBjb2xvclNw
YWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExlZ2FjeVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KGNv
bnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9m
ZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwpAQCAtMTU3LDcgKzE1Nyw3IEBA
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiB7Ci0gICAgbV9zdGF0ZS5z
aGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEdy
YXBoaWNzU2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IDA7CiAgICAgbV9zdGF0ZS5z
aGFkb3dDb2xvciA9IENvbG9yKCk7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlID0gQ29s
b3JTcGFjZURldmljZVJHQjsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICAgICAmJiAobV9z
dGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0
U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlJiBjb2xvclNwYWNlKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRv
dyhHcmFwaGljc1NpemUmIG9mZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSkgY29uc3QKIHsKICAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09m
ZnNldDsKICAgICBibHVyID0gbV9zdGF0ZS5zaGFkb3dCbHVyOwpAQCAtMzY4LDExICszNjgsMTEg
QEAKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
CiB7Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0
KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgZHJhd0ltYWdlKGltYWdl
LCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxv
d1F1YWxpdHlTY2FsZSk7CiB9CiAKICNpZiAhT1MoV0lOQ0UpIHx8IChQTEFURk9STShRVCkgJiYg
IUhBVkUoUVJBV0ZPTlQpKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBmcm9tLCBpbnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0zODEsNyArMzgxLDcgQEAKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01h
cmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zODks
NyArMzg5LDcgQEAKICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywg
cG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4
dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNSw3ICs0
MDUsNyBAQAogICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRmxvYXRQb2ludCBjdXJyUG9pbnQgPSBwb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGN1
cnJQb2ludCA9IHBvaW50OwogICAgIEJpZGlDaGFyYWN0ZXJSdW4qIGJpZGlSdW4gPSBiaWRpUnVu
cy5maXJzdFJ1bigpOwogICAgIHdoaWxlIChiaWRpUnVuKSB7CiAgICAgICAgIFRleHRSdW4gc3Vi
cnVuID0gcnVuOwpAQCAtNDI1LDcgKzQyNSw3IEBACiAgICAgYmlkaVJ1bnMuZGVsZXRlUnVucygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxpZ2h0
Rm9yVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50LCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzMyw3ICs0MzMsNyBAQAogICAgIGZp
bGxSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8p
LCBiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkZXN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC00NTcsMTAgKzQ1NywxMCBA
QAogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFs
aXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOwogICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIGJlIEludGVycG9sYXRpb25Mb3cKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uTm9uZSk7Ci0gICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIEZsb2F0
UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5s
b2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7Cisg
ICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIEdyYXBoaWNzUmVjdChkZXN0LmxvY2F0aW9uKCksIEdy
YXBoaWNzU2l6ZSh0dywgdGgpKSwgR3JhcGhpY3NSZWN0KHNyYy5sb2NhdGlvbigpLCBHcmFwaGlj
c1NpemUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CiAgICAgICAgIHNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkocHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9u
KCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNp
emUodHN3LCB0c2gpKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CisgICAgICAgIGltYWdlLT5kcmF3
KHRoaXMsIEdyYXBoaWNzUmVjdChkZXN0LmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0dywgdGgp
KSwgR3JhcGhpY3NSZWN0KHNyYy5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUodHN3LCB0c2gpKSwg
c3R5bGVDb2xvclNwYWNlLCBvcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEludFNpemUmIHRp
bGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCkBA
IC01MTQsMTAgKzUxNCwxMCBAQAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1h
Z2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFj
ZSwgR3JhcGhpY3NSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZGVzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8ICFpbWFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQxLDE2ICs1NDEsMTYgQEAKICAgICAg
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBJ
bnRlcnBvbGF0aW9uTG93CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50
ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3Bh
Y2UsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRS
ZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxp
dHlTY2FsZSk7CisgICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgR3Jh
cGhpY3NSZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0aCkpLCBHcmFwaGlj
c1JlY3Qoc3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkpLCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShwcmV2
aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2UtPmRy
YXcodGhpcywgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9h
dFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywg
dHNoKSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICBpbWFnZS0+ZHJhdyh0aGlz
LCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0LmxvY2F0aW9uKCksIEdyYXBoaWNz
U2l6ZSh0dywgdGgpKSwgR3JhcGhpY3NSZWN0KHNyYy5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUo
dHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
UVQpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIGNsaXAoRmxvYXRSZWN0KHJlY3QpKTsKKyAgICBjbGlwKEdyYXBoaWNzUmVjdChyZWN0KSk7
CiB9CiAjZW5kaWYKIApAQCAtNTc0LDcgKzU3NCw3IEBACiAgICAgY2xpcE91dChwYXRoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBi
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NjAyLDE0ICs2MDIsMTQgQEAKICAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShtb2RlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgZ2VuZXJhdG9yLmZp
bGwodGhpcywgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkxLDcgKzY5MSw3IEBA
CiAjZW5kaWYKIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgs
IFN0cm9rZVN0eWxlIHBlblN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVU
b1BpeGVsQm91bmRhcmllcyhHcmFwaGljc1BvaW50JiBwMSwgR3JhcGhpY3NQb2ludCYgcDIsIGZs
b2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKICAgICAvLyBGb3Igb2Rk
IHdpZHRocywgd2UgYWRkIGluIDAuNSB0byB0aGUgYXBwcm9wcmlhdGUgeC95IHNvIHRoYXQgdGhl
IGZsb2F0IGFyaXRobWV0aWMKICAgICAvLyB3b3JrcyBvdXQuICBGb3IgZXhhbXBsZSwgd2l0aCBh
IGJvcmRlciB3aWR0aCBvZiAzLCBXZWJLaXQgd2lsbCBwYXNzIHVzICh5MSt5MikvMiwgZS5nLiwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKQEAgLTEwNCwxMyArMTA0LDEzIEBACiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZvaWQgY2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYp
IGNvbnN0OwogCiAgICAgICAgIC8vIFRoZSBkcmF3IG1ldGhvZCBkcmF3cyB0aGUgY29udGVudHMg
b2YgdGhlIGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgaXQuCi0gICAgICAgIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0x
LCAtMSksCisgICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
ciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0
UmVjdCk7CiAgICAgICAgIAogICAgICAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVt
aW5hbmNlTWFzaygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdlbmVy
YXRlZEltYWdlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogCkBAIC0zNCwyNCArMzQsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwogICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3Np
dGVPcCk7CiAgICAgY29udGV4dC0+Y2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LT50cmFuc2xh
dGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKICAgICBpZiAoZHN0UmVjdC5zaXplKCkgIT0g
c3JjUmVjdC5zaXplKCkpCi0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0
LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0Lmhl
aWdodCgpKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShkc3RSZWN0Lndp
ZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdo
dCgpKSk7CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgp
KTsKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3NpemUp
LCAqbV9nZW5lcmF0b3IuZ2V0KCkpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVj
dChHcmFwaGljc1BvaW50KCksIG1fc2l6ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CiB9CiAKLXZv
aWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHZW5lcmF0ZWRJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQWxsb3cgdGhl
IGdlbmVyYXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5nIHBhcmFtZXRl
cnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KICAgICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG1f
c2l6ZTsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBHcmFw
aGljc1JlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKICAgICBtX2dlbmVyYXRvci0+YWRq
dXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVkU3JjUmVj
dCk7CiAKICAgICAvLyBDcmVhdGUgYSBCaXRtYXBJbWFnZSBhbmQgY2FsbCBkcmF3UGF0dGVybiBv
biBpdC4KQEAgLTYxLDcgKzYxLDcgQEAKIAogICAgIC8vIEZpbGwgd2l0aCB0aGUgZ3JhZGllbnQu
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgYWRqdXN0ZWRTaXplKSwgKm1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICBncmFwaGljc0Nv
bnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIGFkanVzdGVkU2l6
ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CiAKICAgICAvLyBUaWxlIHRoZSBpbWFnZSBidWZmZXIg
aW50byB0aGUgY29udGV4dC4KICAgICBpbWFnZUJ1ZmZlci0+ZHJhd1BhdHRlcm4oY29udGV4dCwg
YWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNl
LCBjb21wb3NpdGVPcCwgZGVzdFJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgogI2luY2x1ZGUg
IkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQz
RC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC04MCw3ICs4MCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDNEOworY2xhc3MgR3JhcGhpY3NQ
b2ludDNEOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBUZXh0
U3RyZWFtOwpAQCAtMjI1LDI5ICsyMjUsMjkgQEAKICAgICAvLyBUaGUgbGF5ZXIgdGhhdCByZXBs
aWNhdGVzIHRoaXMgbGF5ZXIgKGlmIGFueSkuCiAgICAgR3JhcGhpY3NMYXllciogcmVwbGljYUxh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXI7IH0KIAotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNh
dGVkTGF5ZXJQb3NpdGlvbjsgfQotICAgIHZvaWQgc2V0UmVwbGljYXRlZExheWVyUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcCkgeyBtX3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uID0gcDsgfQor
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0UmVwbGlj
YXRlZExheWVyUG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3JlcGxpY2F0ZWRM
YXllclBvc2l0aW9uID0gcDsgfQogCiAgICAgLy8gT2Zmc2V0IGlzIG9yaWdpbiBvZiB0aGUgcmVu
ZGVyZXIgbWludXMgb3JpZ2luIG9mIHRoZSBncmFwaGljcyBsYXllciAoc28gZWl0aGVyIHplcm8g
b3IgbmVnYXRpdmUpLgogICAgIEludFNpemUgb2Zmc2V0RnJvbVJlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9vZmZzZXRGcm9tUmVuZGVyZXI7IH0KICAgICB2b2lkIHNldE9mZnNldEZyb21SZW5k
ZXJlcihjb25zdCBJbnRTaXplJiBvZmZzZXQpIHsgbV9vZmZzZXRGcm9tUmVuZGVyZXIgPSBvZmZz
ZXQ7IH0KIAogICAgIC8vIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIgKHRoZSBsb2NhdGlvbiBv
ZiBpdHMgdG9wLWxlZnQgY29ybmVyIGluIGl0cyBwYXJlbnQpCi0gICAgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wb3NpdGlvbiA9IHA7IH0K
KyAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2lu
dCYgcCkgeyBtX3Bvc2l0aW9uID0gcDsgfQogICAgIAogICAgIC8vIEFuY2hvciBwb2ludDogKDAs
IDApIGlzIHRvcCBsZWZ0LCAoMSwgMSkgaXMgYm90dG9tIHJpZ2h0LiBUaGUgYW5jaG9yIHBvaW50
CiAgICAgLy8gYWZmZWN0cyB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm1zLgotICAgIGNvbnN0
IEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYg
cCkgeyBtX2FuY2hvclBvaW50ID0gcDsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYW5j
aG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CisgICAgdmlydHVhbCB2
b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkgeyBtX2FuY2hvclBv
aW50ID0gcDsgfQogCiAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGxheWVyLgotICAgIGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAg
Y29uc3QgR3JhcGhpY3NTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSB7IG1fc2l6ZSA9
IHNpemU7IH0KIAogICAgIC8vIFRoZSBib3VuZE9yaWdpbiBhZmZlY3RzIHRoZSBvZmZzZXQgYXQg
d2hpY2ggY29udGVudCBpcyByZW5kZXJlZCwgYW5kIHN1YmxheWVycyBhcmUgcG9zaXRpb25lZC4K
LSAgICBjb25zdCBGbG9hdFBvaW50JiBib3VuZHNPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2Jv
dW5kc09yaWdpbjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxv
YXRQb2ludCYgb3JpZ2luKSB7IG1fYm91bmRzT3JpZ2luID0gb3JpZ2luOyB9CisgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYm91bmRzT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHNPcmln
aW47IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIG9yaWdpbikgeyBtX2JvdW5kc09yaWdpbiA9IG9yaWdpbjsgfQogCiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCkgeyBtX3RyYW5zZm9ybSA9IHQ7IH0KQEAgLTI4OSw3ICsyODksNyBAQAogCiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKICAgICAvLyBtYXJrIHRoZSBnaXZl
biByZWN0IChpbiBsYXllciBjb29yZHMpIGFzIG5lZWRpbmcgZGlzcGF5LiBOZXZlciBnb2VzIGRl
ZXAuCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkgeyB9OwogCkBAIC0zOTgsMTAgKzM5OCwxMCBAQAogICAgIEludFNpemUgbV9v
ZmZzZXRGcm9tUmVuZGVyZXI7CiAgICAgCiAgICAgLy8gUG9zaXRpb24gaXMgcmVsYXRpdmUgdG8g
dGhlIHBhcmVudCBHcmFwaGljc0xheWVyCi0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAg
IEZsb2F0UG9pbnQzRCBtX2FuY2hvclBvaW50OwotICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci0gICAg
RmxvYXRQb2ludCBtX2JvdW5kc09yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IG1fcG9zaXRpb247
CisgICAgR3JhcGhpY3NQb2ludDNEIG1fYW5jaG9yUG9pbnQ7CisgICAgR3JhcGhpY3NTaXplIG1f
c2l6ZTsKKyAgICBHcmFwaGljc1BvaW50IG1fYm91bmRzT3JpZ2luOwogCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jaGls
ZHJlblRyYW5zZm9ybTsKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgIEdyYXBoaWNzTGF5ZXIqIG1f
cmVwbGljYUxheWVyOyAvLyBBIGxheWVyIHRoYXQgcmVwbGljYXRlcyB0aGlzIGxheWVyLiBXZSBv
bmx5IGFsbG93IG9uZSwgZm9yIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIHJlcGxpY2EgaXMgbm90IHBhcmVudGVkOyB0aGlzIGlzIHRoZSBwcmltYXJ5IHJl
ZmVyZW5jZSB0byBpdC4KICAgICBHcmFwaGljc0xheWVyKiBtX3JlcGxpY2F0ZWRMYXllcjsgLy8g
Rm9yIGEgcmVwbGljYSBsYXllciwgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGxheWVyLgot
ICAgIEZsb2F0UG9pbnQgbV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbjsgLy8gRm9yIGEgcmVwbGlj
YSBsYXllciwgdGhlIHBvc2l0aW9uIG9mIHRoZSByZXBsaWNhLgorICAgIEdyYXBoaWNzUG9pbnQg
bV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbjsgLy8gRm9yIGEgcmVwbGljYSBsYXllciwgdGhlIHBv
c2l0aW9uIG9mIHRoZSByZXBsaWNhLgogCiAgICAgSW50UmVjdCBtX2NvbnRlbnRzUmVjdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQ
b2ludDNELmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1BvaW50M0QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
d2Via2l0Lm9yZz4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgR3JhcGhpY3NQb2ludDNEX2gKKyNkZWZpbmUgR3JhcGhp
Y3NQb2ludDNEX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHcmFwaGljc1BvaW50M0QgeworcHVibGljOgorICAgIEdyYXBoaWNz
UG9pbnQzRCgpCisgICAgICAgIDogbV94KDApCisgICAgICAgICwgbV95KDApCisgICAgICAgICwg
bV96KDApCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzUG9pbnQzRChHcmFwaGljc1VuaXQg
eCwgR3JhcGhpY3NVbml0IHksIEdyYXBoaWNzVW5pdCB6KQorICAgICAgICA6IG1feCh4KQorICAg
ICAgICAsIG1feSh5KQorICAgICAgICAsIG1feih6KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFw
aGljc1BvaW50M0QoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKKyAgICAgICAgOiBtX3gocC54KCkp
CisgICAgICAgICwgbV95KHAueSgpKQorICAgICAgICAsIG1feigwKQorICAgIHsKKyAgICB9CisK
KyAgICBHcmFwaGljc1BvaW50M0QoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKQorICAgICAgICA6
IG1feChwLngoKSkKKyAgICAgICAgLCBtX3kocC55KCkpCisgICAgICAgICwgbV96KHAueigpKQor
ICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1VuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsg
fQorICAgIHZvaWQgc2V0WChHcmFwaGljc1VuaXQgeCkgeyBtX3ggPSB4OyB9CisKKyAgICBHcmFw
aGljc1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorICAgIHZvaWQgc2V0WShHcmFwaGlj
c1VuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICBHcmFwaGljc1VuaXQgeigpIGNvbnN0IHsgcmV0
dXJuIG1fejsgfQorICAgIHZvaWQgc2V0WihHcmFwaGljc1VuaXQgeikgeyBtX3ogPSB6OyB9Cisg
ICAgdm9pZCBzZXQoR3JhcGhpY3NVbml0IHgsIEdyYXBoaWNzVW5pdCB5LCBHcmFwaGljc1VuaXQg
eikKKyAgICB7CisgICAgICAgIG1feCA9IHg7CisgICAgICAgIG1feSA9IHk7CisgICAgICAgIG1f
eiA9IHo7CisgICAgfQorICAgIHZvaWQgbW92ZShHcmFwaGljc1VuaXQgZHgsIEdyYXBoaWNzVW5p
dCBkeSwgR3JhcGhpY3NVbml0IGR6KQorICAgIHsKKyAgICAgICAgbV94ICs9IGR4OworICAgICAg
ICBtX3kgKz0gZHk7CisgICAgICAgIG1feiArPSBkejsKKyAgICB9CisgICAgdm9pZCBzY2FsZShH
cmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSwgR3JhcGhpY3NVbml0IHN6KQorICAgIHsK
KyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kgKj0gc3k7CisgICAgICAgIG1feiAqPSBz
ejsKKyAgICB9CisKKyAgICBib29sIGlzWmVybygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIW1feCAmJiAhbV95ICYmICFtX3o7CisgICAgfQorCisgICAgdm9pZCBub3JtYWxpemUoKTsK
KworICAgIEdyYXBoaWNzVW5pdCBkb3QoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBhKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIGEueCgpICsgbV95ICogYS55KCkgKyBtX3ogKiBh
LnooKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoaXMgR3JhcGhpY3NQb2ludDNEIHRvIHRoZSBj
cm9zcyBwcm9kdWN0IG9mIHRoZSBwYXNzZWQgdHdvLgorICAgIC8vIEl0IGlzIHNhZmUgZm9yICJ0
aGlzIiB0byBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb3IgYm90aCBvZiB0aGUKKyAgICAvLyBhcmd1
bWVudHMuCisgICAgdm9pZCBjcm9zcyhjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgYikKKyAgICB7CisgICAgICAgIEdyYXBoaWNzVW5pdCB4ID0gYS55KCkg
KiBiLnooKSAtIGEueigpICogYi55KCk7CisgICAgICAgIEdyYXBoaWNzVW5pdCB5ID0gYS56KCkg
KiBiLngoKSAtIGEueCgpICogYi56KCk7CisgICAgICAgIEdyYXBoaWNzVW5pdCB6ID0gYS54KCkg
KiBiLnkoKSAtIGEueSgpICogYi54KCk7CisgICAgICAgIG1feCA9IHg7CisgICAgICAgIG1feSA9
IHk7CisgICAgICAgIG1feiA9IHo7CisgICAgfQorCisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rp
b24gcmV0dXJuaW5nICJ0aGlzIGNyb3NzIHBvaW50IiBhcyBhCisgICAgLy8gc3RhY2stYWxsb2Nh
dGVkIHJlc3VsdC4KKyAgICBHcmFwaGljc1BvaW50M0QgY3Jvc3MoY29uc3QgR3JhcGhpY3NQb2lu
dDNEJiBwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5jcm9zcygqdGhpcywgcG9pbnQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIEdyYXBoaWNzVW5pdCBsZW5ndGhTcXVhcmVkKCkgY29uc3QgeyBy
ZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQorICAgIEdyYXBoaWNzVW5pdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOyB9CisgICAgCisgICAgR3JhcGhpY3NV
bml0IGRpc3RhbmNlVG8oY29uc3QgR3JhcGhpY3NQb2ludDNEJiBhKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc1VuaXQgbV94OworICAgIEdyYXBoaWNzVW5pdCBtX3k7CisgICAgR3Jh
cGhpY3NVbml0IG1fejsKK307CisKK2lubGluZSBHcmFwaGljc1BvaW50M0QmIG9wZXJhdG9yICs9
KEdyYXBoaWNzUG9pbnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQoreworICAgIGEu
bW92ZShiLngoKSwgYi55KCksIGIueigpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEdy
YXBoaWNzUG9pbnQzRCYgb3BlcmF0b3IgLT0oR3JhcGhpY3NQb2ludDNEJiBhLCBjb25zdCBHcmFw
aGljc1BvaW50M0QmIGIpCit7CisgICAgYS5tb3ZlKC1iLngoKSwgLWIueSgpLCAtYi56KCkpOwor
ICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludDNEIG9wZXJhdG9yKyhjb25z
dCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikKK3sKKyAgICBy
ZXR1cm4gR3JhcGhpY3NQb2ludDNEKGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCksIGEueigp
ICsgYi56KCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludDNEIG9wZXJhdG9yLShjb25zdCBH
cmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikKK3sKKyAgICByZXR1
cm4gR3JhcGhpY3NQb2ludDNEKGEueCgpIC0gYi54KCksIGEueSgpIC0gYi55KCksIGEueigpIC0g
Yi56KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdyYXBoaWNzUG9pbnQz
RCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQoreworICAgIHJldHVybiBhLngoKSA9PSBi
LngoKSAmJiBhLnkoKSA9PSBiLnkoKSAmJiBhLnooKSA9PSBiLnooKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCkg
fHwgYS56KCkgIT0gYi56KCk7Cit9CisKK2lubGluZSBHcmFwaGljc1VuaXQgb3BlcmF0b3IqKGNv
bnN0IEdyYXBoaWNzUG9pbnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQoreworICAg
IC8vIGRvdCBwcm9kdWN0CisgICAgcmV0dXJuIGEuZG90KGIpOworfQorCitpbmxpbmUgR3JhcGhp
Y3NQb2ludDNEIG9wZXJhdG9yKihHcmFwaGljc1VuaXQgaywgY29uc3QgR3JhcGhpY3NQb2ludDNE
JiB2KQoreworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QoayAqIHYueCgpLCBrICogdi55KCks
IGsgKiB2LnooKSk7Cit9CisKK2lubGluZSBHcmFwaGljc1BvaW50M0Qgb3BlcmF0b3IqKGNvbnN0
IEdyYXBoaWNzUG9pbnQzRCYgdiwgR3JhcGhpY3NVbml0IGspCit7CisgICAgcmV0dXJuIEdyYXBo
aWNzUG9pbnQzRChrICogdi54KCksIGsgKiB2LnkoKSwgayAqIHYueigpKTsKK30KKworaW5saW5l
IEdyYXBoaWNzVW5pdCBHcmFwaGljc1BvaW50M0Q6OmRpc3RhbmNlVG8oY29uc3QgR3JhcGhpY3NQ
b2ludDNEJiBhKSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMgLSBhKS5sZW5ndGgoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3JhcGhpY3NQb2ludDNEX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNm
b3JtYXRpb25NYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKICNkZWZpbmUgVHJhbnNmb3JtYXRpb25NYXRyaXhfaAog
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNp
bmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgPHN0cmluZy5oPiAvL2ZvciBtZW1jcHkKICNp
bmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgpAQCAtNjAsOSArNjAsOSBAQAogCiBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDNEOwotY2xh
c3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRRdWFkOworY2xhc3MgR3JhcGhpY3NQb2ludDNEOwor
Y2xhc3MgR3JhcGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NRdWFkOwogCiBjbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xMjMsMjEg
KzEyMywyMSBAQAogICAgIHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4Miwg
ZG91YmxlJiB5MikgY29uc3QgeyBtdWx0VmVjTWF0cml4KHgsIHksIHgyLCB5Mik7IH0KIAogICAg
IC8vIE1hcCBhIDNEIHBvaW50IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgM0Qg
cG9pbnQuCi0gICAgRmxvYXRQb2ludDNEIG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIGNv
bnN0OworICAgIEdyYXBoaWNzUG9pbnQzRCBtYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0Qm
KSBjb25zdDsKIAogICAgIC8vIE1hcCBhIDJEIHBvaW50IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwg
cmV0dXJuaW5nIGEgMkQgcG9pbnQuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaWdub3JlcyB0aGUg
eiBjb21wb25lbnQsIGVmZmVjdGl2ZWx5IHByb2plY3RpbmcgdGhlIHBvaW50IGludG8gdGhlIHo9
MCBwbGFuZS4KLSAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKKyAgICBHcmFwaGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25z
dDsKIAogICAgIC8vIExpa2UgdGhlIHZlcnNpb24gYWJvdmUsIGV4Y2VwdCB0aGF0IGl0IHJvdW5k
cyB0aGUgbWFwcGVkIHBvaW50IHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCiAgICAgSW50
UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gcm91bmRlZEludFBvaW50KG1hcFBvaW50KEZsb2F0UG9pbnQocCkpKTsKKyAgICAgICAg
cmV0dXJuIHJvdW5kZWRJbnRQb2ludChtYXBQb2ludChHcmFwaGljc1BvaW50KHApKSk7CiAgICAg
fQogCiAgICAgLy8gSWYgdGhlIG1hdHJpeCBoYXMgM0QgY29tcG9uZW50cywgdGhlIHogY29tcG9u
ZW50IG9mIHRoZSByZXN1bHQgaXMKICAgICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVseSBwcm9qZWN0
aW5nIHRoZSByZWN0IGludG8gdGhlIHo9MCBwbGFuZQotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYpIGNvbnN0OwogCiAgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVk
IHJlY3RhbmdsZSBvdXQuIFRoaXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3gg
Y29tcHV0YXRpb25zIGJ1dCBtYXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRl
eHRzLgpAQCAtMTQ1LDE2ICsxNDUsMTYgQEAKIAogICAgIC8vIElmIHRoZSBtYXRyaXggaGFzIDNE
IGNvbXBvbmVudHMsIHRoZSB6IGNvbXBvbmVudCBvZiB0aGUgcmVzdWx0IGlzCiAgICAgLy8gZHJv
cHBlZCwgZWZmZWN0aXZlbHkgcHJvamVjdGluZyB0aGUgcXVhZCBpbnRvIHRoZSB6PTAgcGxhbmUK
LSAgICBGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKyAgICBHcmFw
aGljc1F1YWQgbWFwUXVhZChjb25zdCBHcmFwaGljc1F1YWQmKSBjb25zdDsKIAogICAgIC8vIE1h
cCBhIHBvaW50IG9uIHRoZSB6PTAgcGxhbmUgaW50byBhIHBvaW50IG9uCiAgICAgLy8gdGhlIHBs
YW5lIHdpdGggd2l0aCB0aGUgdHJhbnNmb3JtIGFwcGxpZWQsIGJ5IGV4dGVuZGluZwogICAgIC8v
IGEgcmF5IHBlcnBlbmRpY3VsYXIgdG8gdGhlIHNvdXJjZSBwbGFuZSBhbmQgY29tcHV0aW5nCiAg
ICAgLy8gdGhlIGxvY2FsIHgseSBwb3NpdGlvbiBvZiB0aGUgcG9pbnQgd2hlcmUgdGhhdCByYXkg
aW50ZXJzZWN0cwogICAgIC8vIHdpdGggdGhlIGRlc3RpbmF0aW9uIHBsYW5lLgotICAgIEZsb2F0
UG9pbnQgcHJvamVjdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGlj
c1BvaW50IHByb2plY3RQb2ludChjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAgICAgLy8g
UHJvamVjdHMgdGhlIGZvdXIgY29ybmVycyBvZiB0aGUgcXVhZAotICAgIEZsb2F0UXVhZCBwcm9q
ZWN0UXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKyAgICBHcmFwaGljc1F1YWQgcHJvamVj
dFF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJikgY29uc3Q7CiAKICAgICBkb3VibGUgbTExKCkgY29u
c3QgeyByZXR1cm4gbV9tYXRyaXhbMF1bMF07IH0KICAgICB2b2lkIHNldE0xMShkb3VibGUgZikg
eyBtX21hdHJpeFswXVswXSA9IGY7IH0KQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIGJvb2wgaGFz
UGVyc3BlY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeFsyXVszXSAhPSAwLjBmOyB9CiAK
ICAgICAvLyByZXR1cm5zIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGEgcmVjdCB0byBhIHJl
Y3QKLSAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVjdFRvUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRy
aXggcmVjdFRvUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmKTsK
IAogICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmlu
ZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAKICNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgcmV0dXJuIHNoZWFyKDAsIHRhbihkZWcy
cmFkKGFuZ2xlKSkpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KQorQWZmaW5lVHJh
bnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0JiBzb3VyY2UsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZGVzdCkKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVzdC54KCkgLSBzb3VyY2UueCgpLCBkZXN0Lnko
KSAtIHNvdXJjZS55KCkpOwpAQCAtMjkzLDQ0ICsyOTMsNDQgQEAKICAgICByZXR1cm4gSW50UG9p
bnQobHJvdW5kKHgyKSwgbHJvdW5kKHkyKSk7CiB9CiAKLUZsb2F0UG9pbnQgQWZmaW5lVHJhbnNm
b3JtOjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK0dyYXBoaWNzUG9p
bnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkg
Y29uc3QKIHsKICAgICBkb3VibGUgeDIsIHkyOwogICAgIG1hcChwb2ludC54KCksIHBvaW50Lnko
KSwgeDIsIHkyKTsKIAotICAgIHJldHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoeDIpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkyKSk7CisgICAgcmV0dXJuIEdyYXBoaWNz
UG9pbnQobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoeDIpLCBuYXJyb3dQcmVjaXNpb25U
b0dyYXBoaWNzVW5pdCh5MikpOwogfQogCiBJbnRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVj
dChjb25zdCBJbnRSZWN0ICZyZWN0KSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KG1hcFJlY3QoRmxvYXRSZWN0KHJlY3QpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QobWFwUmVjdChHcmFwaGljc1JlY3QocmVjdCkpKTsKIH0KIAotRmxvYXRSZWN0IEFmZmluZVRy
YW5zZm9ybTo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CitHcmFwaGljc1Jl
Y3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29u
c3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAgICBGbG9h
dFJlY3QgbWFwcGVkUmVjdChyZWN0KTsKLSAgICAgICAgbWFwcGVkUmVjdC5tb3ZlKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1f
dHJhbnNmb3JtWzVdKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0KHJlY3QpOwor
ICAgICAgICBtYXBwZWRSZWN0Lm1vdmUobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90
cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChtX3RyYW5zZm9ybVs1
XSkpOwogICAgICAgICByZXR1cm4gbWFwcGVkUmVjdDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQg
cmVzdWx0OworICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBv
aW50KHJlY3QubG9jYXRpb24oKSkpOwotICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChGbG9hdFBv
aW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSkpKTsKLSAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQo
RmxvYXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkpKSk7Ci0gICAgcmVzdWx0LnNldFA0
KG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgpKSkpOworICAgIHJlc3Vs
dC5zZXRQMihtYXBQb2ludChHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSkpKTsK
KyAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQoR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwgcmVj
dC5tYXhZKCkpKSk7CisgICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KEdyYXBoaWNzUG9pbnQocmVj
dC54KCksIHJlY3QubWF4WSgpKSkpOwogICAgIHJldHVybiByZXN1bHQuYm91bmRpbmdCb3goKTsK
IH0KIAotRmxvYXRRdWFkIEFmZmluZVRyYW5zZm9ybTo6bWFwUXVhZChjb25zdCBGbG9hdFF1YWQm
IHEpIGNvbnN0CitHcmFwaGljc1F1YWQgQWZmaW5lVHJhbnNmb3JtOjptYXBRdWFkKGNvbnN0IEdy
YXBoaWNzUXVhZCYgcSkgY29uc3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24o
KSkgewotICAgICAgICBGbG9hdFF1YWQgbWFwcGVkUXVhZChxKTsKLSAgICAgICAgbWFwcGVkUXVh
ZC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzVdKSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCBtYXBw
ZWRRdWFkKHEpOworICAgICAgICBtYXBwZWRRdWFkLm1vdmUobmFycm93UHJlY2lzaW9uVG9HcmFw
aGljc1VuaXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCht
X3RyYW5zZm9ybVs1XSkpOwogICAgICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAg
ICBGbG9hdFF1YWQgcmVzdWx0OworICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0
LnNldFAxKG1hcFBvaW50KHEucDEoKSkpOwogICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAy
KCkpKTsKICAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQocS5wMygpKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
QWZmaW5lVHJhbnNmb3JtLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsOSArNDgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
UG9pbnQ7Ci1jbGFzcyBGbG9hdFF1YWQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1BvaW50OworY2xhc3MgR3JhcGhpY3NRdWFkOworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3Mg
SW50UG9pbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBA
IC03MCwxNCArNzAsMTQgQEAKICAgICAvLyBSb3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0byB0aGUg
bmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgogICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQm
KSBjb25zdDsKIAogICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0YW5nbGUg
b3V0LiBUaGlzIGlzIGhlbHBmdWwgZm9yIGJvdW5kaW5nCiAgICAgLy8gYm94IGNvbXB1dGF0aW9u
cyBidXQgbWF5IG5vdCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4KICAgICBJ
bnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IG1h
cFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcFF1YWQoY29u
c3QgRmxvYXRRdWFkJikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IG1hcFJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JikgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcFF1YWQoY29uc3QgR3JhcGhp
Y3NRdWFkJikgY29uc3Q7CiAKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKIApAQCAtMTkx
LDcgKzE5MSw3IEBACiAgICAgVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAotQWZmaW5lVHJh
bnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdCk7CitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhj
b25zdCBHcmFwaGljc1JlY3QmIHNvdXJjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0KTsKIAog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBA
QAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
NTI4LDcgKzUyOCw3IEBACiAgICAgcmV0dXJuIHNjYWxlTm9uVW5pZm9ybSgxLjBmLCAtMS4wZik7
CiB9CiAKLUZsb2F0UG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwKSBjb25zdAorR3JhcGhpY3NQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6cHJvamVjdFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAgLy8g
VGhpcyBpcyBiYXNpY2FsbHkgcmF5dHJhY2luZy4gV2UgaGF2ZSBhIHBvaW50IGluIHRoZSBkZXN0
aW5hdGlvbgogICAgIC8vIHBsYW5lIHdpdGggej0wLCBhbmQgd2UgY2FzdCBhIHJheSBwYXJhbGxl
bCB0byB0aGUgei1heGlzIGZyb20gdGhhdApAQCAtNTU2LDEyICs1NTYsMTIgQEAKICAgICAgICAg
b3V0WSAvPSB3OwogICAgIH0KIAotICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZs
b2F0PihvdXRYKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG91dFkpKTsKKyAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludChzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG91dFgpLCBzdGF0aWNfY2FzdDxHcmFw
aGljc1VuaXQ+KG91dFkpKTsKIH0KIAotRmxvYXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpw
cm9qZWN0UXVhZChjb25zdCBGbG9hdFF1YWQmIHEpIGNvbnN0CitHcmFwaGljc1F1YWQgVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnByb2plY3RRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgcSkgY29uc3QK
IHsKLSAgICBGbG9hdFF1YWQgcHJvamVjdGVkUXVhZDsKKyAgICBHcmFwaGljc1F1YWQgcHJvamVj
dGVkUXVhZDsKICAgICBwcm9qZWN0ZWRRdWFkLnNldFAxKHByb2plY3RQb2ludChxLnAxKCkpKTsK
ICAgICBwcm9qZWN0ZWRRdWFkLnNldFAyKHByb2plY3RQb2ludChxLnAyKCkpKTsKICAgICBwcm9q
ZWN0ZWRRdWFkLnNldFAzKHByb2plY3RQb2ludChxLnAzKCkpKTsKQEAgLTU2OSw1NCArNTY5LDU0
IEBACiAgICAgcmV0dXJuIHByb2plY3RlZFF1YWQ7CiB9CiAKLUZsb2F0UG9pbnQgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CitHcmFwaGlj
c1BvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50
JiBwKSBjb25zdAogewogICAgIGlmIChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKQotICAgICAg
ICByZXR1cm4gRmxvYXRQb2ludChwLngoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFsz
XVswXSksIHAueSgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSk7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc1BvaW50KHAueCgpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0
PihtX21hdHJpeFszXVswXSksIHAueSgpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21h
dHJpeFszXVsxXSkpOwogCiAgICAgZG91YmxlIHgsIHk7CiAgICAgbXVsdFZlY01hdHJpeChwLngo
KSwgcC55KCksIHgsIHkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0
Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChz
dGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHgpLCBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHkp
KTsKIH0KIAotRmxvYXRQb2ludDNEIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApIGNvbnN0CitHcmFwaGljc1BvaW50M0QgVHJhbnNmb3JtYXRpb25N
YXRyaXg6Om1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkgY29uc3QKIHsKICAgICBp
ZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQz
RChwLngoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVswXSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcC55KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11b
MV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueigpICsgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fbWF0cml4WzNdWzJdKSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QocC54
KCkgKyBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzBdKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwLnkoKSArIHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obV9t
YXRyaXhbM11bMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueigpICsgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsyXSkpOwogCiAgICAgZG91YmxlIHgsIHks
IHo7CiAgICAgbXVsdFZlY01hdHJpeChwLngoKSwgcC55KCksIHAueigpLCB4LCB5LCB6KTsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludDNEKHN0YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeikpOworICAgIHJldHVybiBHcmFwaGljc1Bv
aW50M0Qoc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih4KSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NV
bml0Pih5KSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih6KSk7CiB9CiAKIEludFJlY3QgVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVjdCAmcmVjdCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtYXBSZWN0KEZsb2F0UmVjdChyZWN0KSkpOwor
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpKSk7
CiB9CiAKLUZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpIGNvbnN0CitHcmFwaGljc1JlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKSBjb25zdAogewogICAgIGlmIChpc0lkZW50aXR5T3JU
cmFuc2xhdGlvbigpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXBwZWRSZWN0KHIpOwotICAgICAg
ICBtYXBwZWRSZWN0Lm1vdmUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzBdKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBt
YXBwZWRSZWN0KHIpOworICAgICAgICBtYXBwZWRSZWN0Lm1vdmUoc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NVbml0PihtX21hdHJpeFszXVswXSksIHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obV9tYXRy
aXhbM11bMV0pKTsKICAgICAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgRmxv
YXRRdWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEZsb2F0UXVhZChyKSk7CisgICAgR3JhcGhpY3NR
dWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEdyYXBoaWNzUXVhZChyKSk7CiAgICAgcmV0dXJuIHJl
c3VsdFF1YWQuYm91bmRpbmdCb3goKTsKIH0KIAotRmxvYXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjptYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QKK0dyYXBoaWNzUXVhZCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVhZChjb25zdCBHcmFwaGljc1F1YWQmIHEpIGNvbnN0CiB7
CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKLSAgICAgICAgRmxvYXRRdWFk
IG1hcHBlZFF1YWQocSk7Ci0gICAgICAgIG1hcHBlZFF1YWQubW92ZShzdGF0aWNfY2FzdDxmbG9h
dD4obV9tYXRyaXhbM11bMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pKTsK
KyAgICAgICAgR3JhcGhpY3NRdWFkIG1hcHBlZFF1YWQocSk7CisgICAgICAgIG1hcHBlZFF1YWQu
bW92ZShzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzBdKSwgc3RhdGljX2Nh
c3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsxXSkpOwogICAgICAgICByZXR1cm4gbWFwcGVk
UXVhZDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVzdWx0OworICAgIEdyYXBoaWNzUXVhZCBy
ZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHEucDEoKSkpOwogICAgIHJlc3VsdC5z
ZXRQMihtYXBQb2ludChxLnAyKCkpKTsKICAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQocS5wMygp
KSk7CkBAIC04NzksNyArODc5LDcgQEAKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLVRyYW5zZm9y
bWF0aW9uTWF0cml4IFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KGNvbnN0IEZsb2F0
UmVjdCYgZnJvbSwgY29uc3QgRmxvYXRSZWN0JiB0bykKK1RyYW5zZm9ybWF0aW9uTWF0cml4IFRy
YW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJvbSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiB0bykKIHsKICAgICBBU1NFUlQoIWZyb20uaXNFbXB0eSgpKTsK
ICAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgodG8ud2lkdGgoKSAvIGZyb20ud2lkdGgo
KSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRlICJGb250TWV0cmljcy5oIgogI2luY2x1
ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNsdWRl
ICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMuaCIK
QEAgLTEyOCw5ICsxMjgsOSBAQAogICAgIGZsb2F0IGF2Z0NoYXJXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXZnQ2hhcldpZHRoOyB9CiAgICAgdm9pZCBzZXRBdmdDaGFyV2lkdGgoZmxvYXQgYXZn
Q2hhcldpZHRoKSB7IG1fYXZnQ2hhcldpZHRoID0gYXZnQ2hhcldpZHRoOyB9CiAKLSAgICBGbG9h
dFJlY3QgYm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBib3Vu
ZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgp
IGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBj
b25zdDsKICAgICBmbG9hdCBwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogCiAg
ICAgZmxvYXQgc3BhY2VXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VXaWR0aDsgfQpAQCAt
MjIwLDcgKzIyMCw3IEBACiAgICAgfHwgKE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKFdYKSkKICAg
ICB2b2lkIGluaXRHRElGb250KCk7CiAgICAgdm9pZCBwbGF0Zm9ybUNvbW1vbkRlc3Ryb3koKTsK
LSAgICBGbG9hdFJlY3QgYm91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OworICAg
IEdyYXBoaWNzUmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CiAgICAg
ZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CiAjZW5kaWYKIApAQCAt
MjMxLDcgKzIzMSw3IEBACiAgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKICAg
ICBPd25QdHI8QWRkaXRpb25hbEZvbnREYXRhPiBtX2ZvbnREYXRhOwogCi0gICAgbXV0YWJsZSBP
d25QdHI8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4gPiBtX2dseXBoVG9Cb3VuZHNNYXA7Cisg
ICAgbXV0YWJsZSBPd25QdHI8R2x5cGhNZXRyaWNzTWFwPEdyYXBoaWNzUmVjdD4gPiBtX2dseXBo
VG9Cb3VuZHNNYXA7CiAgICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhU
b1dpZHRoTWFwOwogCiAgICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwpAQCAtMjk5LDEyICsy
OTksMTIgQEAKIH07CiAKICNpZiAhKFBMQVRGT1JNKFFUKSAmJiAhSEFWRShRUkFXRk9OVCkpCi1B
TFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRzRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEdyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0
YTo6Ym91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzWmVyb1dp
ZHRoU3BhY2VHbHlwaChnbHlwaCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRzOwogICAgIGlmIChtX2dseXBoVG9Cb3VuZHNNYXApIHsKICAgICAg
ICAgYm91bmRzID0gbV9nbHlwaFRvQm91bmRzTWFwLT5tZXRyaWNzRm9yR2x5cGgoZ2x5cGgpOwog
ICAgICAgICBpZiAoYm91bmRzLndpZHRoKCkgIT0gY0dseXBoU2l6ZVVua25vd24pCkBAIC0zMTMs
NyArMzEzLDcgQEAKIAogICAgIGJvdW5kcyA9IHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoZ2x5cGgp
OwogICAgIGlmICghbV9nbHlwaFRvQm91bmRzTWFwKQotICAgICAgICBtX2dseXBoVG9Cb3VuZHNN
YXAgPSBhZG9wdFB0cihuZXcgR2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4pOworICAgICAgICBt
X2dseXBoVG9Cb3VuZHNNYXAgPSBhZG9wdFB0cihuZXcgR2x5cGhNZXRyaWNzTWFwPEdyYXBoaWNz
UmVjdD4pOwogICAgIG1fZ2x5cGhUb0JvdW5kc01hcC0+c2V0TWV0cmljc0ZvckdseXBoKGdseXBo
LCBib3VuZHMpOwogICAgIHJldHVybiBib3VuZHM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTkgKzI3LDE5IEBACiAKIHN0
YXRpYyBjb25zdCBmbG9hdCBrUGF0aFNlZ21lbnRMZW5ndGhUb2xlcmFuY2UgPSAwLjAwMDAxZjsK
IAotc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGZp
cnN0LCBjb25zdCBGbG9hdFBvaW50JiBzZWNvbmQpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUG9p
bnQgbWlkUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgZmlyc3QsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHNlY29uZCkKIHsKLSAgICByZXR1cm4gRmxvYXRQb2ludCgoZmlyc3QueCgpICsgc2Vjb25k
LngoKSkgLyAyLjBmLCAoZmlyc3QueSgpICsgc2Vjb25kLnkoKSkgLyAyLjBmKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NQb2ludCgoZmlyc3QueCgpICsgc2Vjb25kLngoKSkgLyAyLjBmLCAoZmlyc3Qu
eSgpICsgc2Vjb25kLnkoKSkgLyAyLjBmKTsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBkaXN0
YW5jZUxpbmUoY29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkK
K3N0YXRpYyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VMaW5lKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHN0
YXJ0LCBjb25zdCBHcmFwaGljc1BvaW50JiBlbmQpCiB7CiAgICAgcmV0dXJuIHNxcnRmKChlbmQu
eCgpIC0gc3RhcnQueCgpKSAqIChlbmQueCgpIC0gc3RhcnQueCgpKSArIChlbmQueSgpIC0gc3Rh
cnQueSgpKSAqIChlbmQueSgpIC0gc3RhcnQueSgpKSk7CiB9CiAKIHN0cnVjdCBRdWFkcmF0aWNC
ZXppZXIgewogICAgIFF1YWRyYXRpY0JlemllcigpIHsgfQotICAgIFF1YWRyYXRpY0Jlemllcihj
b25zdCBGbG9hdFBvaW50JiBzLCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBGbG9hdFBvaW50
JiBlKQorICAgIFF1YWRyYXRpY0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBH
cmFwaGljc1BvaW50JiBjLCBjb25zdCBHcmFwaGljc1BvaW50JiBlKQogICAgICAgICA6IHN0YXJ0
KHMpCiAgICAgICAgICwgY29udHJvbChjKQogICAgICAgICAsIGVuZChlKQpAQCAtNTYsNyArNTYs
NyBAQAogICAgICAgICBsZWZ0LmNvbnRyb2wgPSBtaWRQb2ludChzdGFydCwgY29udHJvbCk7CiAg
ICAgICAgIHJpZ2h0LmNvbnRyb2wgPSBtaWRQb2ludChjb250cm9sLCBlbmQpOwogICAgICAgICAK
LSAgICAgICAgRmxvYXRQb2ludCBsZWZ0Q29udHJvbFRvUmlnaHRDb250cm9sID0gbWlkUG9pbnQo
bGVmdC5jb250cm9sLCByaWdodC5jb250cm9sKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBsZWZ0
Q29udHJvbFRvUmlnaHRDb250cm9sID0gbWlkUG9pbnQobGVmdC5jb250cm9sLCByaWdodC5jb250
cm9sKTsKICAgICAgICAgbGVmdC5lbmQgPSBsZWZ0Q29udHJvbFRvUmlnaHRDb250cm9sOwogICAg
ICAgICByaWdodC5zdGFydCA9IGxlZnRDb250cm9sVG9SaWdodENvbnRyb2w7CiAKQEAgLTY0LDE0
ICs2NCwxNCBAQAogICAgICAgICByaWdodC5lbmQgPSBlbmQ7CiAgICAgfQogICAgIAotICAgIEZs
b2F0UG9pbnQgc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBjb250cm9sOwotICAgIEZsb2F0UG9pbnQg
ZW5kOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnQ7CisgICAgR3JhcGhpY3NQb2ludCBjb250cm9s
OworICAgIEdyYXBoaWNzUG9pbnQgZW5kOwogfTsKIAogc3RydWN0IEN1YmljQmV6aWVyIHsKICAg
ICBDdWJpY0JlemllcigpIHsgfQotICAgIEN1YmljQmV6aWVyKGNvbnN0IEZsb2F0UG9pbnQmIHMs
IGNvbnN0IEZsb2F0UG9pbnQmIGMxLCBjb25zdCBGbG9hdFBvaW50JiBjMiwgY29uc3QgRmxvYXRQ
b2ludCYgZSkKKyAgICBDdWJpY0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBH
cmFwaGljc1BvaW50JiBjMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGUpCiAgICAgICAgIDogc3RhcnQocykKICAgICAgICAgLCBjb250cm9sMShjMSkKICAg
ICAgICAgLCBjb250cm9sMihjMikKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgCiAgICAgdm9p
ZCBzcGxpdChDdWJpY0JlemllciYgbGVmdCwgQ3ViaWNCZXppZXImIHJpZ2h0KSBjb25zdAogICAg
IHsgICAgCi0gICAgICAgIEZsb2F0UG9pbnQgc3RhcnRUb0NvbnRyb2wxID0gbWlkUG9pbnQoY29u
dHJvbDEsIGNvbnRyb2wyKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBzdGFydFRvQ29udHJvbDEg
PSBtaWRQb2ludChjb250cm9sMSwgY29udHJvbDIpOwogICAgICAgICAKICAgICAgICAgbGVmdC5z
dGFydCA9IHN0YXJ0OwogICAgICAgICBsZWZ0LmNvbnRyb2wxID0gbWlkUG9pbnQoc3RhcnQsIGNv
bnRyb2wxKTsKQEAgLTk2LDE1ICs5NiwxNSBAQAogICAgICAgICByaWdodC5jb250cm9sMSA9IG1p
ZFBvaW50KHJpZ2h0LmNvbnRyb2wyLCBzdGFydFRvQ29udHJvbDEpOwogICAgICAgICByaWdodC5l
bmQgPSBlbmQ7CiAgICAgICAgIAotICAgICAgICBGbG9hdFBvaW50IGxlZnRDb250cm9sMlRvUmln
aHRDb250cm9sMSA9IG1pZFBvaW50KGxlZnQuY29udHJvbDIsIHJpZ2h0LmNvbnRyb2wxKTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBsZWZ0Q29udHJvbDJUb1JpZ2h0Q29udHJvbDEgPSBtaWRQb2lu
dChsZWZ0LmNvbnRyb2wyLCByaWdodC5jb250cm9sMSk7CiAgICAgICAgIGxlZnQuZW5kID0gbGVm
dENvbnRyb2wyVG9SaWdodENvbnRyb2wxOwogICAgICAgICByaWdodC5zdGFydCA9IGxlZnRDb250
cm9sMlRvUmlnaHRDb250cm9sMTsKICAgICB9CiAgICAgCi0gICAgRmxvYXRQb2ludCBzdGFydDsK
LSAgICBGbG9hdFBvaW50IGNvbnRyb2wxOwotICAgIEZsb2F0UG9pbnQgY29udHJvbDI7Ci0gICAg
RmxvYXRQb2ludCBlbmQ7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydDsKKyAgICBHcmFwaGljc1Bv
aW50IGNvbnRyb2wxOworICAgIEdyYXBoaWNzUG9pbnQgY29udHJvbDI7CisgICAgR3JhcGhpY3NQ
b2ludCBlbmQ7CiB9OwogCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBwb3NzaWJseSB2ZXJ5
IHNsb3cgZHVlIHRvIHRoZSBpZnMgcmVxdWlyZWQgZm9yIHByb3BlciBwYXRoIG1lYXN1cmluZwpA
QCAtMTY0LDIwICsxNjQsMjAgQEAKICAgICByZXR1cm4gZGlzdGFuY2U7CiB9CiAKLWZsb2F0IFBh
dGhUcmF2ZXJzYWxTdGF0ZTo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorZmxvYXQg
UGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7
CiAgICAgbV9jdXJyZW50ID0gbV9zdGFydCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9p
bnQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWZsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bGluZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpsaW5l
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgZmxvYXQgZGlzdGFuY2UgPSBk
aXN0YW5jZUxpbmUobV9jdXJyZW50LCBwb2ludCk7CiAgICAgbV9jdXJyZW50ID0gbV9jb250cm9s
MSA9IG1fY29udHJvbDIgPSBwb2ludDsKICAgICByZXR1cm4gZGlzdGFuY2U7CiB9CiAKLWZsb2F0
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJhdGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYg
bmV3Q29udHJvbCwgY29uc3QgRmxvYXRQb2ludCYgbmV3RW5kKQorZmxvYXQgUGF0aFRyYXZlcnNh
bFN0YXRlOjpxdWFkcmF0aWNCZXppZXJUbyhjb25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9s
LCBjb25zdCBHcmFwaGljc1BvaW50JiBuZXdFbmQpCiB7CiAgICAgZmxvYXQgZGlzdGFuY2UgPSBj
dXJ2ZUxlbmd0aDxRdWFkcmF0aWNCZXppZXI+KCp0aGlzLCBRdWFkcmF0aWNCZXppZXIobV9jdXJy
ZW50LCBuZXdDb250cm9sLCBuZXdFbmQpKTsKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgcmV0
dXJuIGRpc3RhbmNlOwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmN1YmljQmV6aWVy
VG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0Nv
bnRyb2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCitmbG9hdCBQYXRoVHJhdmVyc2FsU3Rh
dGU6OmN1YmljQmV6aWVyVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBHcmFwaGljc1BvaW50JiBuZXdFbmQp
CiB7CiAgICAgZmxvYXQgZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMs
IEN1YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQp
KTsKIApAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CiAgICAg
ICAgIAogICAgIGlmICgobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8fCBtX2Fj
dGlvbiA9PSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVuZ3RoID49
IG1fZGVzaXJlZExlbmd0aCkgewotICAgICAgICBGbG9hdFNpemUgY2hhbmdlID0gbV9jdXJyZW50
IC0gbV9wcmV2aW91czsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNoYW5nZSA9IG1fY3VycmVudCAt
IG1fcHJldmlvdXM7CiAgICAgICAgIGZsb2F0IHNsb3BlID0gYXRhbjJmKGNoYW5nZS5oZWlnaHQo
KSwgY2hhbmdlLndpZHRoKCkpOwogICAgICAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9p
bnRBdExlbmd0aCkgewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3Ro
IC0gbV90b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsMTMg
KzE3OCwxMyBAQAogICAgIEJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKICNpZiBQ
TEFURk9STShXSU4pCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6
ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNy
Y1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAj
ZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKIAogI2lmIChPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKSkKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEhB
SUtVKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNz
IEZsb2F0UmVjdDsKLSAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2lu
dDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwogICAg
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXI7CiAK
QEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHN0cnVjdCBQYXRoRWxlbWVudCB7CiAgICAgICAgIFBh
dGhFbGVtZW50VHlwZSB0eXBlOwotICAgICAgICBGbG9hdFBvaW50KiBwb2ludHM7CisgICAgICAg
IEdyYXBoaWNzUG9pbnQqIHBvaW50czsKICAgICB9OwogCiAgICAgdHlwZWRlZiB2b2lkICgqUGF0
aEFwcGxpZXJGdW5jdGlvbikodm9pZCogaW5mbywgY29uc3QgUGF0aEVsZW1lbnQqKTsKQEAgLTEw
NiwxMyArMTA2LDEzIEBACiAgICAgICAgIFBhdGgoY29uc3QgUGF0aCYpOwogICAgICAgICBQYXRo
JiBvcGVyYXRvcj0oY29uc3QgUGF0aCYpOwogCi0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIFdpbmRSdWxlIHJ1bGUgPSBSVUxFX05PTlpFUk8pIGNvbnN0OwotICAgICAg
ICBib29sIHN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwotICAg
ICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAw
KSBjb25zdDsKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiwgV2lu
ZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykgY29uc3Q7CisgICAgICAgIGJvb2wgc3Ryb2tlQ29u
dGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0Owor
ICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgICAgIEdyYXBo
aWNzUmVjdCBzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiA9IDApIGNvbnN0
OwogICAgICAgICAKICAgICAgICAgZmxvYXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0
UG9pbnQgcG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAg
ICAgR3JhcGhpY3NQb2ludCBwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNv
bnN0OwogICAgICAgICBmbG9hdCBub3JtYWxBbmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9v
bCYgb2spIGNvbnN0OwogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKQEAgLTEyMCwyMyArMTIwLDIz
IEBACiAgICAgICAgIC8vIEdldHMgdGhlIGN1cnJlbnQgcG9pbnQgb2YgdGhlIGN1cnJlbnQgcGF0
aCwgd2hpY2ggaXMgY29uY2VwdHVhbGx5IHRoZSBmaW5hbCBwb2ludCByZWFjaGVkIGJ5IHRoZSBw
YXRoIHNvIGZhci4KICAgICAgICAgLy8gTm90ZSB0aGUgUGF0aCBjYW4gYmUgZW1wdHkgKGlzRW1w
dHkoKSA9PSB0cnVlKSBhbmQgc3RpbGwgaGF2ZSBhIGN1cnJlbnQgcG9pbnQuCiAgICAgICAgIGJv
b2wgaGFzQ3VycmVudFBvaW50KCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBv
aW50KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50KCkgY29uc3Q7
CiAKLSAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lk
IGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkUXVhZEN1cnZl
VG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQ
b2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBj
b250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9h
dFBvaW50JiBlbmRQb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMpOworICAgICAgICB2b2lkIG1vdmVU
byhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEdy
YXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGVuZFBvaW50KTsKKyAg
ICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQ
b2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGVuZFBvaW50KTsKKyAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHJhZGl1cyk7CiAgICAgICAgIHZvaWQg
Y2xvc2VTdWJwYXRoKCk7CiAKLSAgICAgICAgdm9pZCBhZGRBcmMoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50
aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2b2lkIGFk
ZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdS
YWRpaSk7Ci0gICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYg
Ym90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBHcmFwaGljc1Bv
aW50JiwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9v
bCBhbnRpY2xvY2t3aXNlKTsKKyAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpOworICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAg
ICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhp
Y3NTaXplJiByb3VuZGluZ1JhZGlpKTsKKyAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1NpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9t
TGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21SaWdodFJhZGl1cyk7CiAgICAg
ICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmKTsKIAotICAgICAgICB2
b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICAgICAgdm9pZCB0cmFuc2xhdGUo
Y29uc3QgR3JhcGhpY3NTaXplJik7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3Jt
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAg
ICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiAKICAgICBwcml2
YXRlOgotICAgICAgICB2b2lkIGFkZEJlemllcnNGb3JSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9w
UmlnaHRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiBib3R0b21SaWdodFJhZGl1cyk7CisgICAgICAgIHZvaWQgYWRkQmV6aWVyc0ZvclJv
dW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgR3JhcGhp
Y3NTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbVJpZ2h0
UmFkaXVzKTsKIAogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgbV9wYXRoOwogICAgIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVy
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNSArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdlbmVyYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPEdl
bmVyYXRvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkdlbmVyYXRvcigpIHt9OwogICAgIAot
ICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJ
bnRTaXplJiAvKiBzaXplICovLCBGbG9hdFJlY3QmIC8qIHNyY1JlY3QgKi8pIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJbnRT
aXplJiAvKiBzaXplICovLCBHcmFwaGljc1JlY3QmIC8qIHNyY1JlY3QgKi8pIHsgfQogfTsKIAog
fSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBT
Y3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBvZmZzZXQpCiB7CiAgICAgaWYgKG1fY3Vy
cmVudFBvc1ggIT0gb2Zmc2V0LngoKSB8fCBtX2N1cnJlbnRQb3NZICE9IG9mZnNldC55KCkpIHsK
ICAgICAgICAgbV9jdXJyZW50UG9zWCA9IG9mZnNldC54KCk7CkBAIC0xMTksOSArMTE5LDkgQEAK
IH0KICNlbmRpZgogCi1GbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yOjpjdXJyZW50UG9zaXRpb24o
KSBjb25zdAorR3JhcGhpY3NQb2ludCBTY3JvbGxBbmltYXRvcjo6Y3VycmVudFBvc2l0aW9uKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQ
b3NZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQ
b3NZKTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjZGVmaW5lIERyYWdJbWFnZV9oCiAKICNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTkwLDcgKzkwLDcg
QEAKICAgICAvL3RoZXkgc2hvdWxkIHJlbGVhc2UgdGhlIGlucHV0IGltYWdlLiAgQXMgYSBjb3Jv
bGxhcnkgdGhlc2UgbWV0aG9kcyBkb24ndCBndWFyYW50ZWUKICAgICAvL3RoZSBpbnB1dCBpbWFn
ZSByZWYgd2lsbCBzdGlsbCBiZSB2YWxpZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjYWxsZWQKICAg
ICBEcmFnSW1hZ2VSZWYgZml0RHJhZ0ltYWdlVG9NYXhTaXplKERyYWdJbWFnZVJlZiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgRHJhZ0lt
YWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiwgRmxvYXRTaXplIHNjYWxlKTsKKyAg
ICBEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBHcmFwaGljc1NpemUg
c2NhbGUpOwogICAgIERyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJh
Z0ltYWdlUmVmIGltYWdlLCBmbG9hdCBkZWx0YSk7CiAgICAgCiAgICAgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKIAogI2ltcG9ydCAiQmxvY2tF
eGNlcHRpb25zLmgiCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkdyYXBoaWNzUmVj
dC5oIgogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAi
Tm90SW1wbGVtZW50ZWQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVN
YWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNyArMjcyLDcgQEAKICAgICAgICAgaW5m
bGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAg
ICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9v
bUZhY3Rvcik7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBp
bmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21G
YWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXpl
KHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1p
bmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CiAgICAgfQogICAgIApAQCAtMzQ4
LDcgKzM0OCw3IEBACiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qu
d2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGlu
ZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRl
eHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNv
bnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CiAgICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55
KCkpOwogICAgIH0KICAgICAKQEAgLTQ2Niw3ICs0NjYsNyBAQAogICAgICAgICAgICAgaW5mbGF0
ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAg
ICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpv
b21GYWN0b3IpOwogICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54
KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRT
aXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxl
KEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgICAgICBjb250
ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAg
ICAgICAgfQogICAgIH0gCkBAIC01MzMsNyArNTMzLDcgQEAKICAgICAgICAgcmVjdC5zZXRXaWR0
aChyZWN0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVj
dC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUocmVj
dC54KCksIHJlY3QueSgpKTsKLSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21G
YWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXpl
KHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1y
ZWN0LngoKSwgLXJlY3QueSgpKTsKICAgICB9CiAgICAgQ0dSZWN0IGJvdW5kcyhyZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaWYgRU5BQkxF
KFNNT09USF9TQ1JPTExJTkcpCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAt
NjEsNyArNjEsNyBAQAogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50
Jik7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRs
ZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkBAIC03MiwxMSArNzIsMTEgQEAKIAog
ICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CiAKLSAgICB2b2lkIGltbWVkaWF0
ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOworICAgIHZvaWQg
aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBuZXdQb3NpdGlvbik7
CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgpOwogICAgIHZv
aWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZmxvYXQgZGVsdGFZKTsKIAotICAgIHZvaWQgaW1t
ZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBu
ZXdQb3NpdGlvbik7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5p
bWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9uKTsKIAogICAgIHZvaWQgc2V0
SXNEcmF3aW5nSW50b0xheWVyKGJvb2wgYikgeyBtX2RyYXdpbmdJbnRvTGF5ZXIgPSBiOyB9CiAg
ICAgYm9vbCBpc0RyYXdpbmdJbnRvTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdJbnRv
TGF5ZXI7IH0KQEAgLTEzMSw3ICsxMzEsNyBAQAogCiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsWFBv
c2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0OwogICAgIGZsb2F0IGFkanVzdFNjcm9sbFlQ
b3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGFkanVzdFNj
cm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEdy
YXBoaWNzUG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBHcmFwaGlj
c1BvaW50JikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgYm9vbCBh
bGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdDsKQEAgLTE1MiwxNSArMTUyLDE1IEBACiAg
ICAgYm9vbCBtX2RpZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3Np
dGVEaXJlY3Rpb25PZlBpbjsKICAgICAKICAgICBDRlRpbWVJbnRlcnZhbCBtX2xhc3RNb21lbnR1
bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBGbG9hdFNpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOwot
ICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKLSAgICBGbG9hdFNpemUgbV9tb21l
bnR1bVZlbG9jaXR5OworICAgIEdyYXBoaWNzU2l6ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7Cisg
ICAgR3JhcGhpY3NTaXplIG1fc3RyZXRjaFNjcm9sbEZvcmNlOworICAgIEdyYXBoaWNzU2l6ZSBt
X21vbWVudHVtVmVsb2NpdHk7CiAKICAgICAvLyBSdWJiZXIgYmFuZCBzdGF0ZS4KICAgICBDRlRp
bWVJbnRlcnZhbCBtX3N0YXJ0VGltZTsKLSAgICBGbG9hdFNpemUgbV9zdGFydFN0cmV0Y2g7Ci0g
ICAgRmxvYXRQb2ludCBtX29yaWdPcmlnaW47Ci0gICAgRmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5
OworICAgIEdyYXBoaWNzU2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBHcmFwaGljc1BvaW50IG1f
b3JpZ09yaWdpbjsKKyAgICBHcmFwaGljc1NpemUgbV9vcmlnVmVsb2NpdHk7CiAgICAgVGltZXI8
U2Nyb2xsQW5pbWF0b3JNYWM+IG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKICNlbmRpZgogICAgIGJv
b2wgbV9kcmF3aW5nSW50b0xheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAKLSNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgpAQCAtOTAsNyArOTAsNyBAQAogICAgIGlmICgh
X2FuaW1hdG9yKQogICAgICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIAotICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsK
KyAgICBXZWJDb3JlOjpHcmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+
Y3VycmVudFBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9u
LngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwgMCk7CiB9CiAKQEAgLTUxNiw3ICs1MTYsNyBA
QAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQordm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0
KCkgX3N0b3BSdW5dOwogICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKQEAgLTUz
OCw3ICs1MzgsNyBAQAogICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24s
IG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxl
QXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CiB9CiAKLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0
b3JNYWM6OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pIGNvbnN0CitHcmFwaGljc1BvaW50IFNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RT
Y3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSBj
b25zdAogewogICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UoKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwpAQCAtNTQ2LDEyICs1NDYs
MTIgQEAKICAgICBmbG9hdCBuZXdYID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngo
KSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7CiAgICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4o
bWluPGZsb2F0Pihwb3NpdGlvbi55KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgp
LmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKLSAg
ICByZXR1cm4gRmxvYXRQb2ludChuZXdYLCBuZXdZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dChuZXdYLCBuZXdZKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3
UG9zaXRpb24pCiB7Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Ny
b2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CisgICAgR3JhcGhpY3NQb2ludCBh
ZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3Np
dGlvbik7CiAgCiAgICAgaWYgKGFkanVzdGVkUG9zaXRpb24ueCgpID09IG1fY3VycmVudFBvc1gg
JiYgYWRqdXN0ZWRQb3NpdGlvbi55KCkgPT0gbV9jdXJyZW50UG9zWSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNTgzLDcgKzU4Myw3IEBACiAgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAK
LXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxB
bmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlv
bkhlbHBlcik7CiAgICAgQ0dGbG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBl
ci5nZXQoKSBfcHJvZ3Jlc3NdOwpAQCAtODY1LDcgKzg2NSw3IEBACiAKIGJvb2wgU2Nyb2xsQW5p
bWF0b3JNYWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQog
ewotICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOworICAgIEdyYXBoaWNzU2l6ZSBsaW1pdERlbHRh
OwogICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKICAgICAgICAgaWYg
KGRlbHRhWSA8IDApIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVw
LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKQEAgLTkzMyw3ICs5MzMs
NyBAQAogICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsK
IAogICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8g
cmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4K
LSAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICBtX292ZXJmbG93
U2Nyb2xsRGVsdGEgPSBHcmFwaGljc1NpemUoKTsKIAogICAgIGZsb2F0IGV2ZW50Q29hbGVzY2Vk
RGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7CiAgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWRE
ZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsKQEAgLTk3MCw3ICs5NzAsNyBAQAogICAgICAg
ICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFt
cCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1
bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkg
PSBHcmFwaGljc1NpemUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlT
dHJldGNoZWQpIHsKQEAgLTEwNjAsOSArMTA2MCw5IEBACiAgICAgICAgICAgICBtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5zZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFY
KTsKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5oZWlnaHQoKSArIGRlbHRhWSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBk
YW1wZWREZWx0YShjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Ny
b2xsRm9yY2Uud2lkdGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9z
dHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG9y
aWdPcmlnaW4gPSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRp
b24oKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hBbW91bnQ7
Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBkYW1wZWRE
ZWx0YTsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBkYW1wZWREZWx0YShjZWlsZihlbGFzdGlj
RGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSkpLCBjZWls
ZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0
KCkpKSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IG9yaWdPcmlnaW4gPSAobV9zY3JvbGxh
YmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbE9yaWdpbigpKSAtIHN0cmV0Y2hBbW91bnQ7CisgICAgICAgICAgICBHcmFwaGlj
c1BvaW50IG5ld09yaWdpbiA9IG9yaWdPcmlnaW4gKyBkYW1wZWREZWx0YTsKIAogICAgICAgICAg
ICAgaWYgKG9yaWdPcmlnaW4gIT0gbmV3T3JpZ2luKSB7CiAgICAgICAgICAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwpA
QCAtMTA4OCw3ICsxMDg4LDcgQEAKICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZh
bHNlOwogICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CiAgICAgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwotICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0
U2l6ZSgpOworICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIG1f
c2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6
b250YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCk7CiAgICAgbV9zY3JvbGxlcklu
aXRpYWxseVBpbm5lZE9uUmlnaHQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3Jv
bGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCk7CiAgICAgbV9jdW11bGF0aXZlSG9yaXpvbnRh
bFNjcm9sbCA9IDA7CkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50Lndp
ZHRoKCkpKTsKICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRh
Rm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKIAotICAgIG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9
IEdyYXBoaWNzU2l6ZSgpOwogICAgIAogICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNB
Y3RpdmUoKSkKICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKQEAgLTExMTUs
NyArMTExNSw3IEBACiB7CiAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdIC0gbV9sYXN0TW9tZW50dW1TY3JvbGxU
aW1lc3RhbXA7CiAgICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVE
ZWx0YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQotICAgICAgICBtX21vbWVudHVt
VmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gR3Jh
cGhpY3NTaXplKCk7CiAKICAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IGZhbHNlOwogCkBAIC0xMTIz
LDkgKzExMjMsOSBAQAogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0YXJ0VGltZSA9IFtOU0Rh
dGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9
IEZsb2F0U2l6ZSgpOwotICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX29y
aWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NT
aXplKCk7CisgICAgbV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fb3JpZ1Zl
bG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3Rh
cnRSZXBlYXRpbmcoMS4wLzYwLjApOwogfQpAQCAtMTE0OSwxNSArMTE0OSwxNSBAQAogICAgIGlm
ICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMp
IHsKICAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50ZXJ2
YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CiAKLSAgICAgICAgaWYgKG1fc3Rh
cnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9
PSBHcmFwaGljc1NpemUoKSkgewogICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9s
bGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJl
dGNoID09IEZsb2F0U2l6ZSgpKSB7ICAgIAorICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNo
ID09IEdyYXBoaWNzU2l6ZSgpKSB7ICAgIAogICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJh
bmRUaW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBG
bG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBo
aWNzU2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAg
ICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fb3Jp
Z09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9
IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NT
aXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOwor
ICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xMTgyLDE3ICsxMTgyLDE3IEBA
CiAgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0SGVpZ2h0KDApOwogICAgICAgICB9
CiAKLSAgICAgICAgRmxvYXRQb2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJv
KGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmln
VmVsb2NpdHkud2lkdGgoKSwgKGZsb2F0KXRpbWVEZWx0YSkpLAorICAgICAgICBHcmFwaGljc1Bv
aW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGlt
ZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAo
ZmxvYXQpdGltZURlbHRhKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0Rldmlj
ZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gu
aGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsK
IAogICAgICAgICBpZiAoZmFicyhkZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49
IDEpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsg
ZGVsdGE7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IG5ld09yaWdpbiA9IG1fb3JpZ09yaWdp
biArIGRlbHRhOwogCiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiAgICAgICAgICAgICBpbW1lZGlhdGVTY3Jv
bGxUb1BvaW50KG5ld09yaWdpbik7CiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSh0cnVlKTsKIAotICAgICAgICAgICAgRmxv
YXRTaXplIG5ld1N0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwor
ICAgICAgICAgICAgR3JhcGhpY3NTaXplIG5ld1N0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5v
dmVyaGFuZ0Ftb3VudCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3N0cmV0Y2hTY3Jv
bGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53
aWR0aCgpKSk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVi
b3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKQEAgLTEyMDIs
MTYgKzEyMDIsMTYgQEAKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRl
UnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOwogCiAgICAgICAgICAg
ICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Ny
b2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
ID0gR3JhcGhpY3NTaXplKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fc3RhcnRUaW1l
ID0gMDsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAg
ICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAgICAgICBtX29yaWdWZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBHcmFwaGlj
c1NpemUoKTsKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9pbnQoKTsKKyAg
ICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2lu
Y2VSZWZlcmVuY2VEYXRlXTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsK
KyAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiB9CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBACiAgICAgLy8gZGVsZXRlIGl0
LiBJdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gaXQgZmFsbHMgb3V0IG9mIHNjb3BlLgogfQogCi1S
ZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdl
LCBGbG9hdFNpemUgc2NhbGUpCitSZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0
YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAgICAgTlNTaXpl
IG9yaWdpbmFsU2l6ZSA9IFtpbWFnZS5nZXQoKSBzaXplXTsKICAgICBOU1NpemUgbmV3U2l6ZSA9
IE5TTWFrZVNpemUoKG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndpZHRoKCkpLCAob3JpZ2lu
YWxTaXplLmhlaWdodCAqIHNjYWxlLmhlaWdodCgpKSk7CkBAIC0yMTEsNyArMjExLDcgQEAKICAg
ICAgICAgW1t0ZXh0Q29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29s
b3JTcGFjZV0gZ2V0UmVkOiZyZWQgZ3JlZW46JmdyZWVuIGJsdWU6JmJsdWUgYWxwaGE6JmFscGhh
XTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihtYWtlUkdCQShyZWQgKiAy
NTUsIGdyZWVuICogMjU1LCBibHVlICogMjU1LCBhbHBoYSAqIDI1NSksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgICAgICAKLSAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQoJmdyYXBoaWNz
Q29udGV4dCwgcnVuLCBGbG9hdFBvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9pbnQueSA6ICgt
MSAqIHBvaW50LnkpKSkpOworICAgICAgICB3ZWJDb3JlRm9udC5kcmF3VGV4dCgmZ3JhcGhpY3ND
b250ZXh0LCBydW4sIEdyYXBoaWNzUG9pbnQocG9pbnQueCwgKGZsaXBwZWQgPyBwb2ludC55IDog
KC0xICogcG9pbnQueSkpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWZsaXBwZWQpCiAgICAg
ICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0JKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVu
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgor
I2ltcG9ydCAiR3JhcGhpY3NSZWN0LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJh
bWVWaWV3LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkBAIC01MSwxMyArNTEsMTMgQEAKIC8vIFRoZXNl
IGZ1bmN0aW9ucyBzY2FsZSBiZXR3ZWVuIHNjcmVlbiBhbmQgcGFnZSBjb29yZGluYXRlcyBiZWNh
dXNlIEphdmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMgCiAvLyBhc3N1bWUgdGhhdCB0aGUgc2NyZWVu
IGFuZCB0aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbS4KIAotRmxvYXRS
ZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVjdChX
aWRnZXQqIHdpZGdldCkKIHsKICAgICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdl
dC0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddIDogbmlsOwogICAgIHJldHVybiB0b1VzZXJTcGFj
ZShbc2NyZWVuRm9yV2luZG93KHdpbmRvdykgZnJhbWVdLCB3aW5kb3cpOwogfQogCi1GbG9hdFJl
Y3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3Jl
ZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIE5TV2luZG93ICp3aW5kb3cg
PSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gOiBuaWw7CiAgICAg
cmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW5Gb3JXaW5kb3cod2luZG93KSB2aXNpYmxlRnJhbWVd
LCB3aW5kb3cpOwpAQCAtODUsMTggKzg1LDE4IEBACiAjZW5kaWYKIH0KIAotRmxvYXRSZWN0IHRv
VXNlclNwYWNlKGNvbnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKQorR3Jh
cGhpY3NSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3Rp
bmF0aW9uKQogewotICAgIEZsb2F0UmVjdCB1c2VyUmVjdCA9IHJlY3Q7CisgICAgR3JhcGhpY3NS
ZWN0IHVzZXJSZWN0ID0gcmVjdDsKICAgICB1c2VyUmVjdC5zZXRZKE5TTWF4WShbc2NyZWVuRm9y
V2luZG93KGRlc3RpbmF0aW9uKSBmcmFtZV0pIC0gKHVzZXJSZWN0LnkoKSArIHVzZXJSZWN0Lmhl
aWdodCgpKSk7IC8vIGZsaXAKICAgICBpZiAoZGVzdGluYXRpb24pCiAgICAgICAgIHVzZXJSZWN0
LnNjYWxlKDEgLyB3aW5kb3dTY2FsZUZhY3RvcihkZXN0aW5hdGlvbikpOyAvLyBzY2FsZSBkb3du
CiAgICAgcmV0dXJuIHVzZXJSZWN0OwogfQogCi1OU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCitOU1JlY3QgdG9EZXZpY2VTcGFjZShj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCiB7Ci0gICAgRmxvYXRS
ZWN0IGRldmljZVJlY3QgPSByZWN0OworICAgIEdyYXBoaWNzUmVjdCBkZXZpY2VSZWN0ID0gcmVj
dDsKICAgICBpZiAoc291cmNlKQogICAgICAgICBkZXZpY2VSZWN0LnNjYWxlKHdpbmRvd1NjYWxl
RmFjdG9yKHNvdXJjZSkpOyAvLyBzY2FsZSB1cAogICAgIGRldmljZVJlY3Quc2V0WShOU01heFko
W3NjcmVlbkZvcldpbmRvdyhzb3VyY2UpIGZyYW1lXSkgLSAoZGV2aWNlUmVjdC55KCkgKyBkZXZp
Y2VSZWN0LmhlaWdodCgpKSk7IC8vIGZsaXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0NvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0NvbmUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0NvbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIsMTYgQEAKIHsKIH0K
IAotZG91YmxlIENvbmVFZmZlY3Q6OmdhaW4oRmxvYXRQb2ludDNEIHNvdXJjZVBvc2l0aW9uLCBG
bG9hdFBvaW50M0Qgc291cmNlT3JpZW50YXRpb24sIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0
aW9uKQorZG91YmxlIENvbmVFZmZlY3Q6OmdhaW4oR3JhcGhpY3NQb2ludDNEIHNvdXJjZVBvc2l0
aW9uLCBHcmFwaGljc1BvaW50M0Qgc291cmNlT3JpZW50YXRpb24sIEdyYXBoaWNzUG9pbnQzRCBs
aXN0ZW5lclBvc2l0aW9uKQogewogICAgIGlmIChzb3VyY2VPcmllbnRhdGlvbi5pc1plcm8oKSB8
fCAoKG1faW5uZXJBbmdsZSA9PSAzNjAuMCkgJiYgKG1fb3V0ZXJBbmdsZSA9PSAzNjAuMCkpKQog
ICAgICAgICByZXR1cm4gMS4wOyAvLyBubyBjb25lIHNwZWNpZmllZCAtIHVuaXR5IGdhaW4KIAog
ICAgIC8vIE5vcm1hbGl6ZWQgc291cmNlLWxpc3RlbmVyIHZlY3RvcgotICAgIEZsb2F0UG9pbnQz
RCBzb3VyY2VUb0xpc3RlbmVyID0gbGlzdGVuZXJQb3NpdGlvbiAtIHNvdXJjZVBvc2l0aW9uOwor
ICAgIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbGlzdGVuZXJQb3NpdGlvbiAt
IHNvdXJjZVBvc2l0aW9uOwogICAgIHNvdXJjZVRvTGlzdGVuZXIubm9ybWFsaXplKCk7CiAKLSAg
ICBGbG9hdFBvaW50M0Qgbm9ybWFsaXplZFNvdXJjZU9yaWVudGF0aW9uID0gc291cmNlT3JpZW50
YXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG5vcm1hbGl6ZWRTb3VyY2VPcmllbnRhdGlvbiA9
IHNvdXJjZU9yaWVudGF0aW9uOwogICAgIG5vcm1hbGl6ZWRTb3VyY2VPcmllbnRhdGlvbi5ub3Jt
YWxpemUoKTsKIAogICAgIC8vIEFuZ2xlIGJldHdlZW4gdGhlIHNvdXJjZSBvcmllbnRhdGlvbiB2
ZWN0b3IgYW5kIHRoZSBzb3VyY2UtbGlzdGVuZXIgdmVjdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9Db25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQ29uZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0NvbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lm
bmRlZiBDb25lX2gKICNkZWZpbmUgQ29uZV9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MCw3ICs0MCw3IEBACiAgICAgQ29uZUVmZmVjdCgpOwogCiAgICAgLy8gUmV0dXJucyBzY2Fs
YXIgZ2FpbiBmb3IgdGhlIGdpdmVuIHNvdXJjZS9saXN0ZW5lciBwb3NpdGlvbnMvb3JpZW50YXRp
b25zCi0gICAgZG91YmxlIGdhaW4oRmxvYXRQb2ludDNEIHNvdXJjZVBvc2l0aW9uLCBGbG9hdFBv
aW50M0Qgc291cmNlT3JpZW50YXRpb24sIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKTsK
KyAgICBkb3VibGUgZ2FpbihHcmFwaGljc1BvaW50M0Qgc291cmNlUG9zaXRpb24sIEdyYXBoaWNz
UG9pbnQzRCBzb3VyY2VPcmllbnRhdGlvbiwgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyUG9zaXRp
b24pOwogCiAgICAgLy8gQW5nbGVzIGluIGRlZ3JlZXMKICAgICB2b2lkIHNldElubmVyQW5nbGUo
ZG91YmxlIGlubmVyQW5nbGUpIHsgbV9pbm5lckFuZ2xlID0gaW5uZXJBbmdsZTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsK
IGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTcsNyArNTcsNyBA
QAogICAgIC8vIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGlt
bWVkaWF0ZWx5LCBuZXZlciBhbmltYXRlcy4KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVs
dGlwbGllcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIFNjcm9sbGFibGVB
cmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWE7IH0K
IApAQCAtNjgsNyArNjgsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVHZXN0dXJlRXZlbnQo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKICNlbmRpZgogCi0gICAgRmxvYXRQb2ludCBj
dXJyZW50UG9zaXRpb24oKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlv
bigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSB7IH0KIApA
QCAtOTMsNyArOTMsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQo
KTsKIAogICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOwotICAgIGZsb2F0IG1f
Y3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byBy
ZWR1Y2UKKyAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEdyYXBo
aWNzUG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8g
c3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRHJhZ0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAKICAgICB9
CiAgICAgCiAgICAgaWYgKHNyY1NpemUgPT0gb3JpZ2luYWxTaXplKQotICAgICAgICByZXR1cm4g
cmVzaXplUmF0aW8gPiAwLjBmID8gc2NhbGVEcmFnSW1hZ2UoaW1hZ2UsIEZsb2F0U2l6ZShyZXNp
emVSYXRpbywgcmVzaXplUmF0aW8pKSA6IGltYWdlOworICAgICAgICByZXR1cm4gcmVzaXplUmF0
aW8gPiAwLjBmID8gc2NhbGVEcmFnSW1hZ2UoaW1hZ2UsIEdyYXBoaWNzU2l6ZShyZXNpemVSYXRp
bywgcmVzaXplUmF0aW8pKSA6IGltYWdlOwogICAgIAogICAgIC8vIFRoZSBpbWFnZSB3YXMgc2Nh
bGVkIGluIHRoZSB3ZWJwYWdlIHNvIGF0IG1pbmltdW0gd2UgbXVzdCBhY2NvdW50IGZvciB0aGF0
IHNjYWxpbmcKICAgICBmbG9hdCBzY2FsZXggPSBzcmNTaXplLndpZHRoKCkgLyAoZmxvYXQpb3Jp
Z2luYWxTaXplLndpZHRoKCk7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHNjYWxleSAqPSBy
ZXNpemVSYXRpbzsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHNjYWxlRHJhZ0ltYWdlKGltYWdl
LCBGbG9hdFNpemUoc2NhbGV4LCBzY2FsZXkpKTsKKyAgICByZXR1cm4gc2NhbGVEcmFnSW1hZ2Uo
aW1hZ2UsIEdyYXBoaWNzU2l6ZShzY2FsZXgsIHNjYWxleSkpOwogfQogICAgIAogRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDcg
KzI2OSw3IEBACiAgICAgICAgIGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBk
ZWx0YSA9IHBvcyAtIG1fZG9jdW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1l
bnQgPSB0cnVlOwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBH
cmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOwogICAgICAgICBpbnQgZGVzdGluYXRpb25Qb3Np
dGlvbiA9IChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBjdXJyZW50UG9z
aXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKSkgKyBkZWx0YTsKICAgICAgICAgaWYgKGRl
bHRhID4gMCkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUG9zaXRpb24gPSBtaW4oZGVzdGluYXRp
b25Qb3NpdGlvbiArIGRlbHRhLCBtYXhpbXVtKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1TY3JlZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgUGxhdGZvcm1TY3JlZW5faAogI2RlZmluZSBQbGF0Zm9ybVNjcmVlbl9oCiAK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMjEg
KzQyLDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZsb2F0UmVjdDsK
KyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xhc3MgV2lkZ2V0OwogCiAgICAgaW50IHNj
cmVlbkRlcHRoKFdpZGdldCopOwogICAgIGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRn
ZXQqKTsKICAgICBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKTsKIAotICAgIEZsb2F0
UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOwotICAgIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVS
ZWN0KFdpZGdldCopOworICAgIEdyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOworICAg
IEdyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKik7CiAKLSAg
ICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0
aW9uKTsKLSAgICBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRv
dyAqc291cmNlKTsKKyAgICBHcmFwaGljc1JlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0Jiwg
TlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKKyAgICBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBH
cmFwaGljc1JlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKIAogICAgIE5TUG9pbnQgZmxpcFNjcmVl
blBvaW50KGNvbnN0IE5TUG9pbnQmLCBOU1NjcmVlbiAqKTsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgRmxvYXRQb2ludDsKLSAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhp
Y3NQb2ludDsKKyAgICBjbGFzcyBHcmFwaGljc1NpemU7CiAKICAgICAvLyBXaGVlbCBldmVudHMg
Y29tZSBpbiB0d28gZmxhdm9yczoKICAgICAvLyBUaGUgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQg
aXMgYSBmaW5lLWdyYWluZWQgZXZlbnQgdGhhdCBzcGVjaWZpZXMgdGhlIHByZWNpc2UgbnVtYmVy
IG9mIHBpeGVscyB0byBzY3JvbGwuICBJdCBpcyBzZW50IGRpcmVjdGx5IGJ5IE1hY0Jvb2sgdG91
Y2hwYWRzIG9uIE9TIFgsCkBAIC0xODksNyArMTg5LDcgQEAKIAogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGlz
TW91c2VIV2hlZWwpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgY29uc3QgRmxv
YXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24pOworICAgICAgICBQbGF0
Zm9ybVdoZWVsRXZlbnQoSFdORCwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0YSwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgbG9jYXRpb24pOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5o
IgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgpAQCAtNjg2LDcgKzY4Niw3IEBACiAgICAgQVNTRVJUKG1fcmVuZGVy
ZXIpOwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBtX3JlbmRlcmVyLT5hYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3JlbmRlcmVyLT5mcmFt
ZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7CiAgICAgdmlld1JlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKICAgICByZXR1
cm4gdmlld1JlY3QuaXNFbXB0eSgpOwogfQpAQCAtMTQyNiw3ICsxNDI2LDcgQEAKICAgICAKICAg
ICAvLyBhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzIHdpbGwgcXVlcnkgdGhlIGhpZXJhcmNoeSBiZWxv
dyB0aGlzIGVsZW1lbnQsIHdoaWNoIGZvciBsYXJnZSB3ZWJwYWdlcyBjYW4gYmUgdmVyeSBzbG93
LgogICAgIC8vIEZvciBhIHdlYiBhcmVhLCB3aGljaCB3aWxsIGhhdmUgdGhlIG1vc3QgZWxlbWVu
dHMgb2YgYW55IGVsZW1lbnQsIGFic29sdXRlUXVhZHMgc2hvdWxkIGJlIHVzZWQuCi0gICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAg
ICAgaWYgKG9iai0+aXNUZXh0KCkpCiAgICAgICAgIHRvUmVuZGVyVGV4dChvYmopLT5hYnNvbHV0
ZVF1YWRzKHF1YWRzLCBSZW5kZXJUZXh0OjpDbGlwVG9FbGxpcHNpcyk7CiAgICAgZWxzZSBpZiAo
aXNXZWJBcmVhKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBACiAgICAgJHR5
cGUgPX4gcy9TVkdBbmltYXRlZC8vOwogCiAgICAgaWYgKCR0eXBlIGVxICJQb2ludCIgb3IgJHR5
cGUgZXEgIlJlY3QiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IkZsb2F0JHR5cGUuaCJ9ID0g
MTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siR3JhcGhpY3MkdHlwZS5oIn0gPSAxOwogICAgIH0g
ZWxzaWYgKCR0eXBlIGVxICJTdHJpbmciKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlBsYXRm
b3JtU3RyaW5nLmgifSA9IDE7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtp
bmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgIH0KIAogICAgIGlmICgkc3ZnUHJvcGVy
dHlUeXBlKSB7Ci0gICAgICAgICRzdmdQcm9wZXJ0eVR5cGUgPSAiU1ZHUG9pbnQiIGlmICRzdmdQ
cm9wZXJ0eVR5cGUgZXEgIkZsb2F0UG9pbnQiOworICAgICAgICAkc3ZnUHJvcGVydHlUeXBlID0g
IlNWR1BvaW50IiBpZiAkc3ZnUHJvcGVydHlUeXBlIGVxICJHcmFwaGljc1BvaW50IjsKICAgICB9
CiAKICAgICByZXR1cm4gKCRzdmdQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlLCAk
c3ZnTmF0aXZlVHlwZSk7CkBAIC0yNzUsNyArMjc1LDcgQEAKICAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbnRlbXBsYXRlPHR5cGVuYW1lIFByb3BlcnR5VHlwZT4gY2xhc3MgU1ZH
TGlzdFByb3BlcnR5VGVhck9mZjtcbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJcbmNsYXNzIEZsb2F0UmVjdDtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGUg
JiYgJHN2Z1Byb3BlcnR5VHlwZSBlcSAiRmxvYXRSZWN0IjsKKyAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiXG5jbGFzcyBHcmFwaGljc1JlY3Q7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRz
dmdQcm9wZXJ0eVR5cGUgZXEgIkdyYXBoaWNzUmVjdCI7CiAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlxuY2xhc3MgJGNsYXNzTmFtZSB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
cHVibGljOlxuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03Niwx
MCArNzYsMTAgQEAKICAgICAiU1ZHTnVtYmVyIiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPGZsb2F0
PiIsCiAgICAgIlNWR051bWJlckxpc3QiID0+ICJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNWR051
bWJlckxpc3Q+IiwKICAgICAiU1ZHUGF0aFNlZ0xpc3QiID0+ICJTVkdQYXRoU2VnTGlzdFByb3Bl
cnR5VGVhck9mZiIsCi0gICAgIlNWR1BvaW50IiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0
UG9pbnQ+IiwKKyAgICAiU1ZHUG9pbnQiID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8R3JhcGhpY3NQ
b2ludD4iLAogICAgICJTVkdQb2ludExpc3QiID0+ICJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmPFNW
R1BvaW50TGlzdD4iLAogICAgICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIiA9PiAiU1ZHUHJvcGVy
dHlUZWFyT2ZmPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+IiwKLSAgICAiU1ZHUmVjdCIgPT4gIlNW
R1Byb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+IiwKKyAgICAiU1ZHUmVjdCIgPT4gIlNWR1Byb3Bl
cnR5VGVhck9mZjxHcmFwaGljc1JlY3Q+IiwKICAgICAiU1ZHU3RyaW5nTGlzdCIgPT4gIlNWR1N0
YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHU3RyaW5nTGlzdD4iLAogICAgICJTVkdUcmFuc2Zv
cm0iID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPiIsCiAgICAgIlNWR1RyYW5z
Zm9ybUxpc3QiID0+ICJTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmIgpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICAgICB2aXJ0dWFsIFNWR0VsZW1l
bnQqIG5lYXJlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1l
bnQqIGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kg
PSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5
ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE1Niw5ICsxNTYsOSBAQAogICAg
IHJldHVybiBhc3BlY3RSYXRpbzsKIH0KIAotdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjp0
cmFuc2Zvcm1SZWN0KEZsb2F0UmVjdCYgZGVzdFJlY3QsIEZsb2F0UmVjdCYgc3JjUmVjdCkKK3Zv
aWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmVjdChHcmFwaGljc1JlY3QmIGRl
c3RSZWN0LCBHcmFwaGljc1JlY3QmIHNyY1JlY3QpCiB7Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6
ZSA9IHNyY1JlY3Quc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBpbWFnZVNpemUgPSBzcmNSZWN0
LnNpemUoKTsKICAgICBmbG9hdCBvcmlnRGVzdFdpZHRoID0gZGVzdFJlY3Qud2lkdGgoKTsKICAg
ICBmbG9hdCBvcmlnRGVzdEhlaWdodCA9IGRlc3RSZWN0LmhlaWdodCgpOwogICAgIHN3aXRjaCAo
bV9tZWV0T3JTbGljZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdC
dWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmlu
Z0J1aWxkZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU3RyaW5nQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICAg
ICByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0
cmluZ0J1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjptb3Zl
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIk0gJS42bGcgJS42bGcg
IiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKQEAgLTQzLDcgKzQzLDcgQEAK
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgibSAlLjZsZyAl
LjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNW
R1BhdGhTdHJpbmdCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQs
IFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGlu
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJMICUuNmxnICUuNmxnICIsIHRh
cmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInYgJS42bGcgIiwgeSkp
OwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0
cmluZ0J1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3Jt
YXQoIkMgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQxLngoKSwg
cG9pbnQxLnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJn
ZXRQb2ludC55KCkpKTsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiYyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAl
LjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0
YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJp
bmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBj
b25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2
b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cykKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiUyAlLjZs
ZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2lu
dC54KCksIHRhcmdldFBvaW50LnkoKSkpOwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzICUuNmxnICUuNmxnICUuNmxnICUu
NmxnICIsIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9p
bnQueSgpKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9RdWFkcmF0
aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpj
dXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlm
IChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoIlEgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQx
LngoKSwgcG9pbnQxLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKQEAg
LTkxLDcgKzkxLDcgQEAKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEueSgp
LCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhT
dHJpbmdCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1
aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpm
b3JtYXQoIlQgJS42bGcgJS42bGcgIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkp
KTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgidCAlLjZsZyAlLjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjphcmNUbyhmbG9hdCByMSwg
ZmxvYXQgcjIsIGZsb2F0IGFuZ2xlLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcs
IGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
K3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxv
YXQgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlm
IChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoU3RyaW5nOjpmb3JtYXQoIkEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42
bGcgIiwgcjEsIHIyLCBhbmdsZSwgbGFyZ2VBcmNGbGFnLCBzd2VlcEZsYWcsIHRhcmdldFBvaW50
LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFy
c2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNl
clV0aWxpdGllcy5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXJzZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0
OwogY2xhc3MgU1ZHUG9pbnRMaXN0OwogCiBib29sIHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYg
cHRyLCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsK
IGJvb2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIGZsb2F0JiBudW1iZXIs
IGJvb2wgc2tpcCA9IHRydWUpOwogYm9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0
IFN0cmluZyYgcywgZmxvYXQmIGgsIGZsb2F0JiB2KTsKIGJvb2wgcGFyc2VBcmNGbGFnKGNvbnN0
IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBib29sJiBmbGFnKTsKLWJvb2wgcGFyc2VS
ZWN0KGNvbnN0IFN0cmluZyYsIEZsb2F0UmVjdCYpOworYm9vbCBwYXJzZVJlY3QoY29uc3QgU3Ry
aW5nJiwgR3JhcGhpY3NSZWN0Jik7CiAKIC8vIFNWRyBhbGxvd3Mgc2V2ZXJhbCBkaWZmZXJlbnQg
d2hpdGVzcGFjZSBjaGFyYWN0ZXJzOgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL3BhdGhz
Lmh0bWwjUGF0aERhdGFCTkYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiA5
MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogICAgIGlm
ICh0aGlzLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQogICAgICAgICBmaWx0
ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCQm94
OworICAgIEdyYXBoaWNzUmVjdCBlZmZlY3RCQm94OwogICAgIGlmIChwcmltaXRpdmVCb3VuZGlu
Z0JveE1vZGUpCi0gICAgICAgIGVmZmVjdEJCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVlQXNQZXJj
ZW50YWdlKCksCisgICAgICAgIGVmZmVjdEJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1
ZUFzUGVyY2VudGFnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgp
LnZhbHVlQXNQZXJjZW50YWdlKCkpOwogICAgIGVsc2UKLSAgICAgICAgZWZmZWN0QkJveCA9IEZs
b2F0UmVjdCh4KCkudmFsdWUodGhpcyksCisgICAgICAgIGVmZmVjdEJCb3ggPSBHcmFwaGljc1Jl
Y3QoeCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52
YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVl
KHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRo
aXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBACiAgICAgYm9vbCBidWlsZEFuaW1h
dGVkU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBTVkdQYXRoQnl0ZVN0cmVh
bSosIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mLCBmbG9hdCk7CiAgICAgYm9vbCBnZXRTVkdQ
YXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBm
bG9hdCBsZW5ndGgsIHVuc2lnbmVkIGxvbmcmIHBhdGhTZWcpOwogICAgIGJvb2wgZ2V0VG90YWxM
ZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwgZmxvYXQmIHRvdGFs
TGVuZ3RoKTsKLSAgICBib29sIGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKFNW
R1BhdGhCeXRlU3RyZWFtKiwgZmxvYXQgbGVuZ3RoLCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBn
ZXRQb2ludEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGZs
b2F0IGxlbmd0aCwgR3JhcGhpY3NQb2ludCYpOwogCiBwcml2YXRlOgogICAgIFNWR1BhdGhQYXJz
ZXJGYWN0b3J5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29udGVudFN0
eWxlVHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVudFN0eWxlVHlwZShjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUpOwogCi0gICAgRmxvYXRSZWN0IHZpZXdwb3J0KCkgY29uc3Q7CisgICAg
R3JhcGhpY3NSZWN0IHZpZXdwb3J0KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENvbnRhaW5lclNp
emUoY29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkgeyBtX2NvbnRhaW5lclNpemUgPSBjb250
YWluZXJTaXplOyBtX2hhc1NldENvbnRhaW5lclNpemUgPSB0cnVlOyB9CiAgICAgSW50U2l6ZSBj
b250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJTaXplOyB9CkBAIC03OCwx
MyArNzgsMTMgQEAKICAgICB2b2lkIHNldFVzZUN1cnJlbnRWaWV3KGJvb2wgY3VycmVudFZpZXcp
OwogCiAgICAgU1ZHVmlld1NwZWMqIGN1cnJlbnRWaWV3KCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0
IGN1cnJlbnRWaWV3Qm94UmVjdCgpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBjdXJyZW50Vmll
d0JveFJlY3QoKSBjb25zdDsKIAogICAgIGZsb2F0IGN1cnJlbnRTY2FsZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKTsKIAotICAgIEZsb2F0UG9pbnQmIGN1
cnJlbnRUcmFuc2xhdGUoKSB7IHJldHVybiBtX3RyYW5zbGF0aW9uOyB9Ci0gICAgdm9pZCBzZXRD
dXJyZW50VHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBHcmFwaGljc1BvaW50JiBj
dXJyZW50VHJhbnNsYXRlKCkgeyByZXR1cm4gbV90cmFuc2xhdGlvbjsgfQorICAgIHZvaWQgc2V0
Q3VycmVudFRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKICAgICAvLyBPbmx5IHVz
ZWQgZnJvbSB0aGUgYmluZGluZ3MuCiAgICAgdm9pZCB1cGRhdGVDdXJyZW50VHJhbnNsYXRlKCk7
CkBAIC0xMDMsMTggKzEwMywxOCBAQAogICAgIHZvaWQgdW5zdXNwZW5kUmVkcmF3QWxsKCk7CiAg
ICAgdm9pZCBmb3JjZVJlZHJhdygpOwogCi0gICAgTm9kZUxpc3QqIGdldEludGVyc2VjdGlvbkxp
c3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7Ci0gICAg
Tm9kZUxpc3QqIGdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCog
cmVmZXJlbmNlRWxlbWVudCk7Ci0gICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50
KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgYm9vbCBjaGVja0VuY2xvc3VyZShTVkdFbGVtZW50
KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgTm9kZUxpc3QqIGdldEludGVyc2VjdGlvbkxpc3Qo
Y29uc3QgR3JhcGhpY3NSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7CisgICAg
Tm9kZUxpc3QqIGdldEVuY2xvc3VyZUxpc3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgU1ZHRWxlbWVu
dCogcmVmZXJlbmNlRWxlbWVudCk7CisgICAgYm9vbCBjaGVja0ludGVyc2VjdGlvbihTVkdFbGVt
ZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgYm9vbCBjaGVja0VuY2xvc3VyZShTVkdF
bGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdm9pZCBkZXNlbGVjdEFsbCgpOwog
CiAgICAgc3RhdGljIGZsb2F0IGNyZWF0ZVNWR051bWJlcigpOwogICAgIHN0YXRpYyBTVkdMZW5n
dGggY3JlYXRlU1ZHTGVuZ3RoKCk7CiAgICAgc3RhdGljIFNWR0FuZ2xlIGNyZWF0ZVNWR0FuZ2xl
KCk7Ci0gICAgc3RhdGljIEZsb2F0UG9pbnQgY3JlYXRlU1ZHUG9pbnQoKTsKKyAgICBzdGF0aWMg
R3JhcGhpY3NQb2ludCBjcmVhdGVTVkdQb2ludCgpOwogICAgIHN0YXRpYyBTVkdNYXRyaXggY3Jl
YXRlU1ZHTWF0cml4KCk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjcmVhdGVTVkdSZWN0KCk7Cisg
ICAgc3RhdGljIEdyYXBoaWNzUmVjdCBjcmVhdGVTVkdSZWN0KCk7CiAgICAgc3RhdGljIFNWR1Ry
YW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm0oKTsKICAgICBzdGF0aWMgU1ZHVHJhbnNmb3JtIGNy
ZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgoY29uc3QgU1ZHTWF0cml4Jik7CiAKQEAgLTE3Miw3
ICsxNzIsNyBAQAogCiAgICAgYm9vbCBtX3VzZUN1cnJlbnRWaWV3OwogICAgIFJlZlB0cjxTTUlM
VGltZUNvbnRhaW5lcj4gbV90aW1lQ29udGFpbmVyOwotICAgIEZsb2F0UG9pbnQgbV90cmFuc2xh
dGlvbjsKKyAgICBHcmFwaGljc1BvaW50IG1fdHJhbnNsYXRpb247CiAgICAgbXV0YWJsZSBPd25Q
dHI8U1ZHVmlld1NwZWM+IG1fdmlld1NwZWM7CiAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7
CiAgICAgYm9vbCBtX2hhc1NldENvbnRhaW5lclNpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBTVkdQYXRoVHJhdmVyc2Fs
U3RhdGVCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQYXRoVHJhdmVyc2FsU3Rh
dGUuaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKIApAQCAtMzQsNyArMzQsNyBAQAog
CiAgICAgdW5zaWduZWQgbG9uZyBwYXRoU2VnbWVudEluZGV4KCk7CiAgICAgZmxvYXQgdG90YWxM
ZW5ndGgoKTsKLSAgICBGbG9hdFBvaW50IGN1cnJlbnRQb2ludCgpOworICAgIEdyYXBoaWNzUG9p
bnQgY3VycmVudFBvaW50KCk7CiAKICAgICB2b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQ
YXRoVHJhdmVyc2FsU3RhdGUqIHRyYXZlcnNhbFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0
cmF2ZXJzYWxTdGF0ZTsgfQogICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0aChmbG9hdCk7CkBAIC00
NCwxOSArNDQsMTkgQEAKIAogcHJpdmF0ZToKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlz
bmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAg
dmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBh
dGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1
YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
UGF0aCgpOwogCiBwcml2YXRlOgogICAgIC8vIE5vdCB1c2VkIGZvciBQYXRoVHJhdmVyc2FsU3Rh
dGUuCiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGlu
YXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsaW5l
VG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9v
dGgoY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBi
b29sLCBib29sLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChj
b25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRv
UXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0
aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBh
cmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQ
YXRoVHJhdmVyc2FsU3RhdGUqIG1fdHJhdmVyc2FsU3RhdGU7CiAgICAgZmxvYXQgbV9kZXNpcmVk
TGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgR3JhcGhpY3NSZWN0OwogCiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHsKIHB1Ymxp
YzoKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB2b2lkIHNldE1lZXRPclNsaWNlKHVuc2lnbmVkIHNo
b3J0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdW5zaWduZWQgc2hvcnQgbWVldE9yU2xpY2UoKSBj
b25zdCB7IHJldHVybiBtX21lZXRPclNsaWNlOyB9CiAKLSAgICB2b2lkIHRyYW5zZm9ybVJlY3Qo
RmxvYXRSZWN0JiBkZXN0UmVjdCwgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKyAgICB2b2lkIHRyYW5z
Zm9ybVJlY3QoR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsK
IAogICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oZmxvYXQgbG9naWNYLCBmbG9hdCBsb2dpY1ks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsb2dpY1dpZHRoLCBmbG9hdCBsb2dp
Y0hlaWdodCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVp
bGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhT
dHJpbmdCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTM3LDE4ICszNywx
OCBAQAogICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUNvbnN1bWluZygpIHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFyc2luZyBt
b2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNs
b3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2
ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNv
bnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAgICAvLyBPbmx5
IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9I
b3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBs
aW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRp
Yyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYs
IFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMo
Y29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBhcmNU
byhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAgICAgU3RyaW5n
QnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdC5oCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDE2ICsyMSwxNiBAQAogI2RlZmluZSBTVkdSZWN0X2gKIAogI2lmIEVOQUJMRShT
VkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiU1ZHUHJvcGVydHlUcmFpdHMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8Pgotc3RydWN0IFNW
R1Byb3BlcnR5VHJhaXRzPEZsb2F0UmVjdD4gewotICAgIHN0YXRpYyBGbG9hdFJlY3QgaW5pdGlh
bFZhbHVlKCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICBzdGF0aWMgU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IEZsb2F0UmVjdCYgdHlwZSkKK3N0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxHcmFw
aGljc1JlY3Q+IHsKKyAgICBzdGF0aWMgR3JhcGhpY3NSZWN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0
dXJuIEdyYXBoaWNzUmVjdCgpOyB9CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBH
cmFwaGljc1JlY3QmIHR5cGUpCiAgICAgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKHR5cGUueCgpKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBQYXNzUmVmUHRyPExpZ2h0
U291cmNlPiBTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShGbG9hdFBvaW50M0QoeCgpLCB5KCks
IHooKSkpOworICAgIHJldHVybiBQb2ludExpZ2h0U291cmNlOjpjcmVhdGUoR3JhcGhpY3NQb2lu
dDNEKHgoKSwgeSgpLCB6KCkpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDcgKzIxLDggQEAKICNkZWZpbmUgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyX2gKIAogI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2luY2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtLmgiCiAjaW5jbHVkZSAiU1ZH
UGF0aENvbnN1bWVyLmgiCkBAIC00MSwxOCArNDIsMTggQEAKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YW51cCgpIHsgbV9ieXRlU3RyZWFtID0gMDsgfQogCiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQ
YXJzaW5nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8o
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAg
IHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2Vk
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBj
bG9zZVBhdGgoKTsKIAogICAgIC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUu
CiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRl
TW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRp
bmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZp
cnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1
YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0Zs
YWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFy
Z2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlVHlwZT4KICAgICB2b2lk
IHdyaXRlVHlwZShjb25zdCBCeXRlVHlwZSYgdHlwZSkKQEAgLTc2LDEwICs3NywxMCBAQAogICAg
ICAgICB3cml0ZVR5cGUoZGF0YSk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZUZsb2F0UG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgdm9pZCB3cml0ZUdyYXBoaWNzUG9pbnQoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiAgICAgewotICAgICAgICB3cml0ZUZsb2F0KHBvaW50
LngoKSk7Ci0gICAgICAgIHdyaXRlRmxvYXQocG9pbnQueSgpKTsKKyAgICAgICAgd3JpdGVGbG9h
dChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBvaW50LngoKSkpOworICAgICAgICB3cml0ZUZsb2F0
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocG9pbnQueSgpKSk7CiAgICAgfQogCiAgICAgdm9pZCB3
cml0ZVNlZ21lbnRUeXBlKHVuc2lnbmVkIHNob3J0IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01hc2tFbGVtZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR01hc2tFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdNYXNrRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0Jv
eChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgbWFza0JvdW5kaW5n
Qm94KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFNWR01hc2tF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDE1ICs0OCwxNSBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21lbnRUeXBlKCkpOwogfQogCi1ib29sIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQpCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoR3Jh
cGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQ
b2ludCgpOworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9T
ZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewot
ICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJl
YWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTcyLDQyICs3Miw0
MiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
OjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVh
bVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MSwg
R3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAg
ICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50
KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHBvaW50MSA9IHJl
YWRHcmFwaGljc1BvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKKyAg
ICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9v
bCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50
KEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0g
ICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9h
dFBvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKKyAgICB0YXJnZXRQ
b2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxv
YXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQb2lu
dCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAgICBwb2ludDEgPSBy
ZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAg
ICBwb2ludDEgPSByZWFkR3JhcGhpY3NQb2ludCgpOworICAgIHRhcmdldFBvaW50ID0gcmVhZEdy
YXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50
JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0g
ICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHRhcmdldFBvaW50ID0gcmVh
ZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZs
b2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50
KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29s
JiBzd2VlcCwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgcnggPSByZWFkRmxv
YXQoKTsKICAgICByeSA9IHJlYWRGbG9hdCgpOwogICAgIGFuZ2xlID0gcmVhZEZsb2F0KCk7CiAg
ICAgbGFyZ2VBcmMgPSByZWFkRmxhZygpOwogICAgIHN3ZWVwID0gcmVhZEZsYWcoKTsKLSAgICB0
YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkR3Jh
cGhpY3NQb2ludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUG9pbnRMaXN0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUG9pbnRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2lmIEVO
QUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzgs
NyArMzgsNyBAQAogICAgICAgICBpZiAoaSA+IDApCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiICIpOyAvLyBGSVhNRTogU2hvdWxkbid0IHdlIHVzZSBjb21tYXMgdG8gc2VwZXJhdGU/CiAK
LSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQgPSBhdChpKTsKKyAgICAgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQgPSBhdChpKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIocG9pbnQueCgpKSArICcgJyArIFN0cmluZzo6bnVtYmVyKHBvaW50LnkoKSkp
OwogICAgIH0KIApAQCAtNTYsOSArNTYsOSBAQAogICAgIGlmICghaXRlbUNvdW50IHx8IGl0ZW1D
b3VudCAhPSB0b0xpc3Quc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yICh1
bnNpZ25lZCBuID0gMDsgbiA8IGl0ZW1Db3VudDsgKytuKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGZyb20gPSBmcm9tTGlzdC5hdChuKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
dG8gPSB0b0xpc3QuYXQobik7Ci0gICAgICAgIEZsb2F0UG9pbnQgc2VnbWVudCA9IEZsb2F0UG9p
bnQoYWRqdXN0QW5pbWF0ZWRWYWx1ZShmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCisgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZyb20gPSBmcm9tTGlzdC5hdChuKTsKKyAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludCYgdG8gPSB0b0xpc3QuYXQobik7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQgc2VnbWVudCA9IEdyYXBoaWNzUG9pbnQoYWRqdXN0QW5pbWF0ZWRWYWx1ZShmcm9tLngo
KSwgdG8ueCgpLCBwcm9ncmVzcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRqdXN0QW5pbWF0ZWRWYWx1ZShmcm9tLnkoKSwgdG8ueSgpLCBwcm9ncmVzcykpOwog
ICAgICAgICByZXN1bHRMaXN0LmFwcGVuZChzZWdtZW50KTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkBAIC0z
NSwxNCArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VWaWV3Qm94KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgcywgRmxvYXRS
ZWN0JiB2aWV3Qm94KQorYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1bWVu
dCogZG9jLCBjb25zdCBTdHJpbmcmIHMsIEdyYXBoaWNzUmVjdCYgdmlld0JveCkKIHsKICAgICBj
b25zdCBVQ2hhciogYyA9IHMuY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBj
ICsgcy5sZW5ndGgoKTsKICAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGRvYywgYywgZW5kLCB2aWV3
Qm94LCB0cnVlKTsKIH0KIAotYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1
bWVudCogZG9jLCBjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UmVjdCYg
dmlld0JveCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3goRG9jdW1lbnQqIGRvYywgY29uc3QgVUNoYXIqJiBjLCBjb25zdCBVQ2hhciogZW5kLCBHcmFw
aGljc1JlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUpCiB7CiAgICAgU3RyaW5nIHN0cihjLCBl
bmQgLSBjKTsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgIGZsb2F0IGhlaWdodCA9IDAuMGY7CiAg
ICAgYm9vbCB2YWxpZCA9IHBhcnNlTnVtYmVyKGMsIGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIoYywg
ZW5kLCB5KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihjLCBl
bmQsIGhlaWdodCwgZmFsc2UpOwogICAgIGlmICghdmFsaWRhdGUpIHsKLSAgICAgICAgdmlld0Jv
eCA9IEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgdmlld0JveCA9IEdy
YXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGlmICghdmFsaWQpIHsKQEAgLTc2LDExICs3NiwxMSBAQAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdmlld0JveCA9IEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICB2aWV3Qm94ID0gR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHRml0VG9WaWV3Qm94
Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEZsb2F0UmVjdCYgdmlld0JveFJlY3QsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8sIGZsb2F0IHZp
ZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkKK0FmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdC
b3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgR3JhcGhpY3NSZWN0JiB2aWV3Qm94UmVj
dCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbywgZmxv
YXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KQogewogICAgIGlmICghdmlld0JveFJlY3Qu
d2lkdGgoKSB8fCAhdmlld0JveFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKQEAgLTkxLDcgKzkxLDcgQEAKIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShEb2N1bWVudCogZG9jdW1lbnQsIEF0dHJpYnV0ZSogYXR0cikKIHsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAgICAg
ICBGbG9hdFJlY3Qgdmlld0JveDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHZpZXdCb3g7CiAgICAg
ICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIHBhcnNlVmlld0Jv
eChkb2N1bWVudCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCk7CiAgICAgICAgIHNldFZpZXdCb3hC
YXNlVmFsdWUodmlld0JveCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6
OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KHRoaXMpOwogfQogCi1GbG9hdFJlY3QgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVw
ZGF0ZVN0cmF0ZWd5KSBjb25zdAorR3JhcGhpY3NSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkg
Y29uc3QKIHsKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0QkJveCh0aGlzLCBzdHls
ZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsMTYgKzIxMSwxNiBAQAogICAgICAg
ICBvYmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCi1GbG9hdFJlY3QgU1ZHRmlsdGVy
RWxlbWVudDo6ZmlsdGVyQm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGlu
Z0JveCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGlu
Z0JveChjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAogewotICAg
IEZsb2F0UmVjdCBmaWx0ZXJCQm94OworICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJCQm94OwogICAg
IGlmIChmaWx0ZXJVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWCkKLSAgICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWVBc1Bl
cmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0Jv
eC54KCksCisgICAgICAgIGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJj
ZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gu
eCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFn
ZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkgKyBvYmplY3RCb3VuZGluZ0JveC55KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFn
ZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gu
aGVpZ2h0KCkpOwogICAgIGVsc2UKLSAgICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCku
dmFsdWUodGhpcyksCisgICAgICAgIGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVl
KHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNjAsOCArMTYw
LDggQEAKIHsKICAgICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOwogCi0gICAgcGF0aC5tb3ZlVG8o
RmxvYXRQb2ludCh4MSgpLnZhbHVlKHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7Ci0gICAgcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMp
KSk7CisgICAgcGF0aC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh4MSgpLnZhbHVlKHRoaXMpLCB5MSgp
LnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5hZGRMaW5lVG8oR3JhcGhpY3NQb2ludCh4MigpLnZh
bHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVsZW1lbnQ6
OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDE4ICszNCwxOCBAQAogewogfQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRo
Q29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjptb3Zl
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVu
dFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gIFBhdGhTZWdNb3ZlVG9SZWwgOiBQ
YXRoU2VnTW92ZVRvQWJzKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAg
IHdyaXRlR3JhcGhpY3NQb2ludCh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhD
b29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZVN0cmVhbSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZSht
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnTGluZVRvUmVsIDogUGF0aFNlZ0xp
bmVUb0Ficyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdy
YXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwogfQogCiB2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlcjo6bGluZVRvSG9yaXpvbnRhbChmbG9hdCB4LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
QEAgLTYyLDM5ICs2MiwzOSBAQAogICAgIHdyaXRlRmxvYXQoeSk7CiB9CiAKLXZvaWQgU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
OjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29v
cmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKICAgICB3cml0
ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRv
Q3ViaWNSZWwgOiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQo
cG9pbnQxKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQyKTsKLSAgICB3cml0ZUZsb2F0UG9p
bnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludChwb2ludDEpOworICAgIHdy
aXRlR3JhcGhpY3NQb2ludChwb2ludDIpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludCh0YXJnZXRQ
b2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNT
bW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQog
ewogICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9
PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCA6IFBh
dGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMpOwotICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDIp
OwotICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1Bv
aW50KHBvaW50Mik7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0KIAot
dm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1
YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9i
eXRlU3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGlu
YXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsIDogUGF0aFNlZ0N1cnZlVG9RdWFkcmF0
aWNBYnMpOwotICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDEpOwotICAgIHdyaXRlRmxvYXRQb2lu
dCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50MSk7CisgICAgd3Jp
dGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJl
YW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwgOiBQYXRoU2VnQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aEFicyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0
ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwogfQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJn
ZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6
YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcs
IGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZVN0cmVhbSk7CiAgICAgd3Jp
dGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQXJjUmVs
IDogUGF0aFNlZ0FyY0Ficyk7CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICB3cml0ZUZsb2F0KGFu
Z2xlKTsKICAgICB3cml0ZUZsYWcobGFyZ2VBcmNGbGFnKTsKICAgICB3cml0ZUZsYWcoc3dlZXBG
bGFnKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhp
Y3NQb2ludCh0YXJnZXRQb2ludCk7CiB9CiAKIHZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
OjpjbG9zZVBhdGgoKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGxpcHNlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJTVkdF
bGxpcHNlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJTVkdF
bGVtZW50SW5zdGFuY2UuaCIKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIGlmIChyYWRpdXNZIDw9
IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QoY3go
KS52YWx1ZSh0aGlzKSAtIHJhZGl1c1gsIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXNZLCByYWRp
dXNYICogMiwgcmFkaXVzWSAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoR3JhcGhpY3NSZWN0
KGN4KCkudmFsdWUodGhpcykgLSByYWRpdXNYLCBjeSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzWSwg
cmFkaXVzWCAqIDIsIHJhZGl1c1kgKiAyKSk7CiB9CiAgCiBib29sIFNWR0VsbGlwc2VFbGVtZW50
OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhQYXJzZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAgICAgdm9pZCBjbGVh
bnVwKCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBkZWNvbXBvc2VBcmNUb0N1YmljKGZsb2F0LCBm
bG9hdCwgZmxvYXQsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgYm9vbCBsYXJnZUFyY0ZsYWcs
IGJvb2wgc3dlZXBGbGFnKTsKKyAgICBib29sIGRlY29tcG9zZUFyY1RvQ3ViaWMoZmxvYXQsIGZs
b2F0LCBmbG9hdCwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcpOwogICAgIHZvaWQgcGFyc2VDbG9zZVBhdGhTZWdtZW50KCk7
CiAgICAgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoKTsKICAgICBib29sIHBhcnNlTGluZVRvU2Vn
bWVudCgpOwpAQCAtNjIsOSArNjIsOSBAQAogICAgIFBhdGhQYXJzaW5nTW9kZSBtX3BhdGhQYXJz
aW5nTW9kZTsKICAgICBTVkdQYXRoU2VnVHlwZSBtX2xhc3RDb21tYW5kOwogICAgIGJvb2wgbV9j
bG9zZVBhdGg7Ci0gICAgRmxvYXRQb2ludCBtX2NvbnRyb2xQb2ludDsKLSAgICBGbG9hdFBvaW50
IG1fY3VycmVudFBvaW50OwotICAgIEZsb2F0UG9pbnQgbV9zdWJQYXRoUG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCBtX2NvbnRyb2xQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fY3VycmVudFBv
aW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9zdWJQYXRoUG9pbnQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUx
LDEzICsyNTEsMTMgQEAKICAgICBpZiAoIXRvLmlzVmFsaWQoKSB8fCBmcm9tLnR5cGUoKSAhPSB0
by50eXBlKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAodG8udHlwZSgpID09IFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEUpIHsKLSAgICAgICAgRmxvYXRTaXplIGRp
ZmYgPSB0by50cmFuc2xhdGUoKSAtIGZyb20udHJhbnNsYXRlKCk7CisgICAgICAgIEdyYXBoaWNz
U2l6ZSBkaWZmID0gdG8udHJhbnNsYXRlKCkgLSBmcm9tLnRyYW5zbGF0ZSgpOwogICAgICAgICBy
ZXR1cm4gc3FydGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAq
IGRpZmYuaGVpZ2h0KCkpOwogICAgIH0KICAgICBpZiAodG8udHlwZSgpID09IFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9ST1RBVEUpCiAgICAgICAgIHJldHVybiBmYWJzZih0by5hbmdsZSgp
IC0gZnJvbS5hbmdsZSgpKTsKICAgICBpZiAodG8udHlwZSgpID09IFNWR1RyYW5zZm9ybTo6U1ZH
X1RSQU5TRk9STV9TQ0FMRSkgewotICAgICAgICBGbG9hdFNpemUgZGlmZiA9IHRvLnNjYWxlKCkg
LSBmcm9tLnNjYWxlKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBkaWZmID0gdG8uc2NhbGUoKSAt
IGZyb20uc2NhbGUoKTsKICAgICAgICAgcmV0dXJuIHNxcnRmKGRpZmYud2lkdGgoKSAqIGRpZmYu
d2lkdGgoKSArIGRpZmYuaGVpZ2h0KCkgKiBkaWZmLmhlaWdodCgpKTsKICAgICB9CiAgICAgcmV0
dXJuIC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAKIAogdm9pZCBTVkdWaWV3U3BlYzo6c2V0Vmlld0JveFN0cmluZyhj
b25zdCBTdHJpbmcmIHZpZXdCb3hTdHIpCiB7Ci0gICAgRmxvYXRSZWN0IHZpZXdCb3g7CisgICAg
R3JhcGhpY3NSZWN0IHZpZXdCb3g7CiAgICAgY29uc3QgVUNoYXIqIGMgPSB2aWV3Qm94U3RyLmNo
YXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogZW5kID0gYyArIHZpZXdCb3hTdHIubGVuZ3Ro
KCk7CiAgICAgaWYgKCFwYXJzZVZpZXdCb3gobV9jb250ZXh0RWxlbWVudC0+ZG9jdW1lbnQoKSwg
YywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgICAg
ICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVjICE9ICcoJykKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGN1cnJWaWV3
U3BlYysrOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCB2aWV3Qm94OworICAgICAgICAgICAg
ICAgIEdyYXBoaWNzUmVjdCB2aWV3Qm94OwogICAgICAgICAgICAgICAgIGlmICghcGFyc2VWaWV3
Qm94KG1fY29udGV4dEVsZW1lbnQtPmRvY3VtZW50KCksIGN1cnJWaWV3U3BlYywgZW5kLCB2aWV3
Qm94LCBmYWxzZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICBzZXRWaWV3Qm94QmFzZVZhbHVlKHZpZXdCb3gpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xvY2F0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMb2NhdGFibGUuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TG9jYXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFz
cyBTVkdFbGVtZW50OwogCiBjbGFzcyBTVkdMb2NhdGFibGUgewpAQCAtNDEsNyArNDEsNyBAQAog
CiAgICAgZW51bSBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHsgQWxsb3dTdHlsZVVwZGF0ZSwgRGlzYWxs
b3dTdHlsZVVwZGF0ZSB9OwogICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5
bGVVcGRhdGVTdHJhdGVneSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGdl
dEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNv
bnN0ID0gMDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0VHJhbnNmb3JtVG9FbGVtZW50KFNWR0Vs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJiwgU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVV
cGRhdGUpIGNvbnN0OwpAQCAtNTcsNyArNTcsNyBAQAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJs
ZTo6Q1RNU2NvcGUpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAKLSAgICBz
dGF0aWMgRmxvYXRSZWN0IGdldEJCb3goY29uc3QgU1ZHRWxlbWVudCosIFN0eWxlVXBkYXRlU3Ry
YXRlZ3kpOworICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgZ2V0QkJveChjb25zdCBTVkdFbGVtZW50
KiwgU3R5bGVVcGRhdGVTdHJhdGVneSk7CiAgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjb21w
dXRlQ1RNKGNvbnN0IFNWR0VsZW1lbnQqLCBDVE1TY29wZSwgU3R5bGVVcGRhdGVTdHJhdGVneSk7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNyArMjMsNyBAQAogI2RlZmluZSBTVkdab29tRXZlbnRfaAogI2lmIEVOQUJMRShTVkcpCiAK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJVSUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDE3ICszMywxNyBA
QAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1pvb21FdmVudD4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR1pvb21FdmVudCk7IH0KIAogICAgIC8vICdTVkdab29tRXZlbnQnIGZ1
bmN0aW9ucwotICAgIEZsb2F0UmVjdCB6b29tUmVjdFNjcmVlbigpIGNvbnN0OworICAgIEdyYXBo
aWNzUmVjdCB6b29tUmVjdFNjcmVlbigpIGNvbnN0OwogCiAgICAgZmxvYXQgcHJldmlvdXNTY2Fs
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJldmlvdXNTY2FsZShmbG9hdCk7CiAKLSAgICBGbG9h
dFBvaW50IHByZXZpb3VzVHJhbnNsYXRlKCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBwcmV2
aW91c1RyYW5zbGF0ZSgpIGNvbnN0OwogCiAgICAgZmxvYXQgbmV3U2NhbGUoKSBjb25zdDsKICAg
ICB2b2lkIHNldE5ld1NjYWxlKGZsb2F0KTsKIAotICAgIEZsb2F0UG9pbnQgbmV3VHJhbnNsYXRl
KCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBuZXdUcmFuc2xhdGUoKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBTVkdab29tRXZlbnQoKTsKQEAgLTUzLDEwICs1MywxMCBAQAogICAgIGZsb2F0
IG1fbmV3U2NhbGU7CiAgICAgZmxvYXQgbV9wcmV2aW91c1NjYWxlOwogCi0gICAgRmxvYXRSZWN0
IG1fem9vbVJlY3RTY3JlZW47CisgICAgR3JhcGhpY3NSZWN0IG1fem9vbVJlY3RTY3JlZW47CiAK
LSAgICBGbG9hdFBvaW50IG1fbmV3VHJhbnNsYXRlOwotICAgIEZsb2F0UG9pbnQgbV9wcmV2aW91
c1RyYW5zbGF0ZTsKKyAgICBHcmFwaGljc1BvaW50IG1fbmV3VHJhbnNsYXRlOworICAgIEdyYXBo
aWNzUG9pbnQgbV9wcmV2aW91c1RyYW5zbGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCShyZXZpc2lvbiA5
MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBT
VkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y29uc3RydWN0RnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBhbmltYXRlZFR5cGUgPSBT
VkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QobmV3IEZsb2F0UmVjdCk7CisgICAgT3duUHRyPFNW
R0FuaW1hdGVkVHlwZT4gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVSZWN0
KG5ldyBHcmFwaGljc1JlY3QpOwogICAgIHBhcnNlUmVjdChzdHJpbmcsIGFuaW1hdGVkVHlwZS0+
cmVjdCgpKTsKICAgICByZXR1cm4gYW5pbWF0ZWRUeXBlLnJlbGVhc2UoKTsKIH0KQEAgLTY0LDE3
ICs2NCwxNyBAQAogICAgIFNWR0FuaW1hdGVFbGVtZW50KiBhbmltYXRpb25FbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnQqPihtX2FuaW1hdGlvbkVsZW1lbnQpOwogICAgIEFu
aW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGFuaW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1v
ZGUoKTsKICAgICAvLyBUbyBhbmltYXRpb24gdXNlcyBjb250cmlidXRpb25zIGZyb20gdGhlIGxv
d2VyIHByaW9yaXR5IGFuaW1hdGlvbnMgYXMgdGhlIGJhc2UgdmFsdWUuCi0gICAgRmxvYXRSZWN0
JiBhbmltYXRlZFJlY3QgPSBhbmltYXRlZC0+cmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCYgYW5p
bWF0ZWRSZWN0ID0gYW5pbWF0ZWQtPnJlY3QoKTsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBU
b0FuaW1hdGlvbikKICAgICAgICAgZnJvbS0+cmVjdCgpID0gYW5pbWF0ZWRSZWN0OwogICAgIAot
ICAgIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QgPSBmcm9tLT5yZWN0KCk7Ci0gICAgY29uc3Qg
RmxvYXRSZWN0JiB0b1JlY3QgPSB0by0+cmVjdCgpOwotICAgIEZsb2F0UmVjdCBuZXdSZWN0OyAg
ICAKKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIGZyb21SZWN0ID0gZnJvbS0+cmVjdCgpOworICAg
IGNvbnN0IEdyYXBoaWNzUmVjdCYgdG9SZWN0ID0gdG8tPnJlY3QoKTsKKyAgICBHcmFwaGljc1Jl
Y3QgbmV3UmVjdDsgICAgCiAgICAgaWYgKGFuaW1hdGlvbkVsZW1lbnQtPmNhbGNNb2RlKCkgPT0g
Q2FsY01vZGVEaXNjcmV0ZSkKICAgICAgICAgbmV3UmVjdCA9IHBlcmNlbnRhZ2UgPCAwLjUgPyBm
cm9tUmVjdCA6IHRvUmVjdDsKICAgICBlbHNlCi0gICAgICAgIG5ld1JlY3QgPSBGbG9hdFJlY3Qo
KHRvUmVjdC54KCkgLSBmcm9tUmVjdC54KCkpICogcGVyY2VudGFnZSArIGZyb21SZWN0LngoKSwK
KyAgICAgICAgbmV3UmVjdCA9IEdyYXBoaWNzUmVjdCgodG9SZWN0LngoKSAtIGZyb21SZWN0Lngo
KSkgKiBwZXJjZW50YWdlICsgZnJvbVJlY3QueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh0b1JlY3QueSgpIC0gZnJvbVJlY3QueSgpKSAqIHBlcmNlbnRhZ2UgKyBmcm9tUmVjdC55
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvUmVjdC53aWR0aCgpIC0gZnJvbVJl
Y3Qud2lkdGgoKSkgKiBwZXJjZW50YWdlICsgZnJvbVJlY3Qud2lkdGgoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodG9SZWN0LmhlaWdodCgpIC0gZnJvbVJlY3QuaGVpZ2h0KCkpICog
cGVyY2VudGFnZSArIGZyb21SZWN0LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUmVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcgQEAKICAg
ICBmbG9hdCB4VmFsdWUgPSB4KCkudmFsdWUodGhpcyk7CiAgICAgZmxvYXQgeVZhbHVlID0geSgp
LnZhbHVlKHRoaXMpOwogCi0gICAgRmxvYXRSZWN0IHJlY3QoeFZhbHVlLCB5VmFsdWUsIHdpZHRo
VmFsdWUsIGhlaWdodFZhbHVlKTsKKyAgICBHcmFwaGljc1JlY3QgcmVjdCh4VmFsdWUsIHlWYWx1
ZSwgd2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWUpOwogCiAgICAgYm9vbCBoYXNSeCA9IGhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6cnhBdHRyKTsKICAgICBib29sIGhhc1J5ID0gaGFzQXR0cmlidXRlKFNW
R05hbWVzOjpyeUF0dHIpOwpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgICAgICByeFZhbHVl
ID0gcnlWYWx1ZTsKICAgICAgICAgZWxzZSBpZiAoIWhhc1J5KQogICAgICAgICAgICAgcnlWYWx1
ZSA9IHJ4VmFsdWU7Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXpl
KHJ4VmFsdWUsIHJ5VmFsdWUpKTsKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBH
cmFwaGljc1NpemUocnhWYWx1ZSwgcnlWYWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTIg
KzIyLDEyIEBACiAjZGVmaW5lIFNWR1RyYW5zZm9ybV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVk
ZSAiU1ZHTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRTaXpl
OworY2xhc3MgR3JhcGhpY3NTaXplOwogCiBjbGFzcyBTVkdUcmFuc2Zvcm0gewogcHVibGljOgpA
QCAtNTIsNyArNTIsNyBAQAogICAgIHZvaWQgdXBkYXRlTWF0cml4KCk7CiAKICAgICBmbG9hdCBh
bmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KLSAgICBGbG9hdFBvaW50IHJvdGF0aW9u
Q2VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9jZW50ZXI7IH0KKyAgICBHcmFwaGljc1BvaW50IHJv
dGF0aW9uQ2VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9jZW50ZXI7IH0KIAogICAgIHZvaWQgc2V0
TWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgc2V0VHJhbnNsYXRlKGZs
b2F0IHR4LCBmbG9hdCB0eSk7CkBAIC02Miw4ICs2Miw4IEBACiAgICAgdm9pZCBzZXRTa2V3WShm
bG9hdCBhbmdsZSk7CiAgICAgCiAgICAgLy8gSW50ZXJuYWwgdXNlIG9ubHkgKGFuaW1hdGlvbiBz
eXN0ZW0pCi0gICAgRmxvYXRQb2ludCB0cmFuc2xhdGUoKSBjb25zdDsKLSAgICBGbG9hdFNpemUg
c2NhbGUoKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IHRyYW5zbGF0ZSgpIGNvbnN0OworICAg
IEdyYXBoaWNzU2l6ZSBzY2FsZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlICE9IFNWR19UUkFOU0ZPUk1fVU5LTk9XTjsgfQogICAgIFN0cmluZyB2
YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CkBAIC03Myw3ICs3Myw3IEBACiAKICAgICBTVkdUcmFuc2Zv
cm1UeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2FuZ2xlOwotICAgIEZsb2F0UG9pbnQgbV9jZW50
ZXI7CisgICAgR3JhcGhpY3NQb2ludCBtX2NlbnRlcjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9t
YXRyaXg7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogCiAj
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR1NW
R0VsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNzgsMzEgKzc4LDMx
IEBACiAgICAgbV9tYXRyaXgudHJhbnNsYXRlKHR4LCB0eSk7CiB9CiAKLUZsb2F0UG9pbnQgU1ZH
VHJhbnNmb3JtOjp0cmFuc2xhdGUoKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdUcmFuc2Zvcm06
OnRyYW5zbGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNp
c2lvbihtX21hdHJpeC5lKCksIG1fbWF0cml4LmYoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9p
bnQ6Om5hcnJvd1ByZWNpc2lvbihtX21hdHJpeC5lKCksIG1fbWF0cml4LmYoKSk7CiB9CiAKIHZv
aWQgU1ZHVHJhbnNmb3JtOjpzZXRTY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCiB7CiAgICAgbV90
eXBlID0gU1ZHX1RSQU5TRk9STV9TQ0FMRTsKICAgICBtX2FuZ2xlID0gMDsKLSAgICBtX2NlbnRl
ciA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX2NlbnRlciA9IEdyYXBoaWNzUG9pbnQoKTsKIAogICAg
IG1fbWF0cml4Lm1ha2VJZGVudGl0eSgpOwogICAgIG1fbWF0cml4LnNjYWxlTm9uVW5pZm9ybShz
eCwgc3kpOwogfQogCi1GbG9hdFNpemUgU1ZHVHJhbnNmb3JtOjpzY2FsZSgpIGNvbnN0CitHcmFw
aGljc1NpemUgU1ZHVHJhbnNmb3JtOjpzY2FsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0
U2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fbWF0cml4LmEoKSwgbV9tYXRyaXguZCgpKTsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NTaXplOjpuYXJyb3dQcmVjaXNpb24obV9tYXRyaXguYSgpLCBtX21hdHJp
eC5kKCkpOwogfQogCiB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0Um90YXRlKGZsb2F0IGFuZ2xlLCBm
bG9hdCBjeCwgZmxvYXQgY3kpCiB7CiAgICAgbV90eXBlID0gU1ZHX1RSQU5TRk9STV9ST1RBVEU7
CiAgICAgbV9hbmdsZSA9IGFuZ2xlOwotICAgIG1fY2VudGVyID0gRmxvYXRQb2ludChjeCwgY3kp
OworICAgIG1fY2VudGVyID0gR3JhcGhpY3NQb2ludChjeCwgY3kpOwogCiAgICAgLy8gVE9ETzog
dG9TdHJpbmcoKSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggY2FuIHNob3cgY3gsIGN5IChuZWVkIHRv
IGJlIHN0b3JlZD8pCiAgICAgbV9tYXRyaXgubWFrZUlkZW50aXR5KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQAog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BhdGhFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCiAgICAgZmxvYXQgZ2V0VG90YWxMZW5ndGgoKTsK
LSAgICBGbG9hdFBvaW50IGdldFBvaW50QXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpOworICAgIEdy
YXBoaWNzUG9pbnQgZ2V0UG9pbnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSk7CiAgICAgdW5zaWdu
ZWQgbG9uZyBnZXRQYXRoU2VnQXRMZW5ndGgoZmxvYXQgZGlzdGFuY2UpOwogCiAgICAgUGFzc1Jl
ZlB0cjxTVkdQYXRoU2VnQ2xvc2VQYXRoPiBjcmVhdGVTVkdQYXRoU2VnQ2xvc2VQYXRoKFNWR1Bh
dGhTZWdSb2xlIHJvbGUgPSBQYXRoU2VnVW5kZWZpbmVkUm9sZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsMTMgKzU0LDEzIEBACiAgICAgfTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1v
ZGUoKSBjb25zdDsKIAotICAgIEZsb2F0U2l6ZSBtX2FuaW1hdGVkVHJhbnNsYXRpb247CisgICAg
R3JhcGhpY3NTaXplIG1fYW5pbWF0ZWRUcmFuc2xhdGlvbjsKICAgICBmbG9hdCBtX2FuaW1hdGVk
QW5nbGU7CiAKICAgICAvLyBOb3RlOiB3ZSBkbyBub3Qgc3VwcG9ydCBwZXJjZW50YWdlIHZhbHVl
cyBmb3IgdG8vZnJvbSBjb29yZHMgYXMgdGhlIHNwZWMgaW1wbGllcyB3ZSBzaG91bGQgKG9wZXJh
IGRvZXNuJ3QgZWl0aGVyKQotICAgIEZsb2F0UG9pbnQgbV9mcm9tUG9pbnQ7CisgICAgR3JhcGhp
Y3NQb2ludCBtX2Zyb21Qb2ludDsKICAgICBmbG9hdCBtX2Zyb21BbmdsZTsKLSAgICBGbG9hdFBv
aW50IG1fdG9Qb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fdG9Qb2ludDsKICAgICBmbG9hdCBt
X3RvQW5nbGU7CiAKICAgICB1bnNpZ25lZCBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlzdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAgICAgcmV0
dXJuIFNWR0xvY2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZs
b2F0UmVjdCBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3Ry
YXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVT
dHJhdGVneSkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRCQm94KHRoaXMs
IHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
dFRvVmlld0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9W
aWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI1ICszMCwyNSBAQAogY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogY2xhc3MgQXR0cmlidXRlOwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGbG9h
dFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
OwogCiBjbGFzcyBTVkdGaXRUb1ZpZXdCb3ggewogcHVibGljOgogICAgIHZpcnR1YWwgflNWR0Zp
dFRvVmlld0JveCgpIHsgfQogCi0gICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25z
dCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFJlY3QmIHZpZXdCb3gsIGJv
b2wgdmFsaWRhdGUgPSB0cnVlKTsKLSAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hU
b1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbyYsIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCk7Cisg
ICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kLCBHcmFwaGljc1JlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVl
KTsKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29u
c3QgR3JhcGhpY3NSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
byYsIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCk7CiAKICAgICBib29sIHBhcnNl
TWFwcGVkQXR0cmlidXRlKERvY3VtZW50KiwgQXR0cmlidXRlKik7CiAgICAgYm9vbCBpc0tub3du
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2b2lkIGFkZFN1cHBvcnRlZEF0
dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCi0gICAgdmlydHVhbCB2b2lkIHNl
dFZpZXdCb3hCYXNlVmFsdWUoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaWV3Qm94QmFzZVZhbHVlKGNvbnN0IEdyYXBoaWNzUmVjdCYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZShjb25zdCBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvJikgPSAwOwogCiBwcml2YXRlOgotICAgIGJvb2wgcGFyc2VWaWV3Qm94KERv
Y3VtZW50KiwgY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBwYXJzZVZpZXdC
b3goRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBHcmFwaGljc1JlY3QmKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBu
ZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBm
YXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxs
b3dTdHlsZVVwZGF0ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RN
KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKICAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFs
bG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1h
dGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoU3RyaW5nU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhTdHJpbmdTb3VyY2UuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFN0cmluZ1NvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAj
ZGVmaW5lIFNWR1BhdGhTdHJpbmdTb3VyY2VfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNvdXJjZS5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC00MywxNSArNDMsMTUgQEAKICAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpOwogICAgIHZpcnR1YWwgU1ZHUGF0aFNl
Z1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUxpbmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9p
bnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBi
b29sJiwgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChHcmFwaGljc1Bv
aW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVh
bCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxv
YXQmLCBib29sJiwgYm9vbCYsIEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIFN0cmluZyBtX3N0cmlu
ZzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcg
KzIzLDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDggKzQ1LDggQEAKIAogICAgIGJvb2wgem9vbUFuZFBhbkVu
YWJsZWQoKSBjb25zdDsKIAotICAgIHZvaWQgc3RhcnRQYW4oY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnQpOwotICAgIHZvaWQgdXBkYXRlUGFuKGNvbnN0IEZsb2F0UG9pbnQmIHBvcykgY29uc3Q7Cisg
ICAgdm9pZCBzdGFydFBhbihjb25zdCBHcmFwaGljc1BvaW50JiBzdGFydCk7CisgICAgdm9pZCB1
cGRhdGVQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBTVkdEb2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwmKTsKQEAgLTU1LDcgKzU1LDcgQEAKIAog
ICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsK
IAotICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGU7CisgICAgR3JhcGhpY3NQb2ludCBtX3RyYW5z
bGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAK
ICAgICBib29sIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoUmFkaWFsR3JhZGllbnRBdHRyaWJ1
dGVzJik7Ci0gICAgdm9pZCBjYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhjb25z
dCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMmLCBGbG9hdFBvaW50JiBmb2NhbFBvaW50LCBGbG9h
dFBvaW50JiBjZW50ZXJQb2ludCwgZmxvYXQmIHJhZGl1cyk7CisgICAgdm9pZCBjYWxjdWxhdGVG
b2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMm
LCBHcmFwaGljc1BvaW50JiBmb2NhbFBvaW50LCBHcmFwaGljc1BvaW50JiBjZW50ZXJQb2ludCwg
ZmxvYXQmIHJhZGl1cyk7CiAKIHByaXZhdGU6CiAgICAgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAKIHsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1v
dmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVN
b2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsK
ICAgICBBU1NFUlQobV9wYXRoRWxlbWVudCk7CiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3QpOwpA
QCAtNTksNyArNTksNyBAQAogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxl
bWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBv
aW50LnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRl
cjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8oY29uc3QgR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFT
U0VSVChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC04OSw3
ICs4OSw3IEBACiAgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5j
cmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoeSwgbV9wYXRoU2VnUm9sZSkpOwogfQog
Ci12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0
QnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwog
ICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgbV9w
YXRoU2VnTGlzdC0+YXBwZW5kKG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNSZWwodGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50MS54KCksIHBv
aW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIG1fcGF0aFNlZ1JvbGUpKTsKIH0KIAot
dm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRp
bmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNT
bW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0
aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKQEAgLTEwOSw3ICsxMDksNyBA
QAogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lk
IFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50
KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAg
ICAgbV9wYXRoU2VnTGlzdC0+YXBwZW5kKG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2lu
dDEueCgpLCBwb2ludDEueSgpLCBtX3BhdGhTZWdSb2xlKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9wYXRoRWxl
bWVudCk7CiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3QpOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAg
ICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6
YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcs
IGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6YXJjVG8oZmxvYXQg
cjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBG
bGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2Rl
IG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhT
ZWdMaXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzUsMTYgKzE3NSwxNiBAQAogICAgICAgICBvYmplY3QtPnNldE5lZWRz
TGF5b3V0KHRydWUpOwogfQogCi1GbG9hdFJlY3QgU1ZHTWFza0VsZW1lbnQ6Om1hc2tCb3VuZGlu
Z0JveChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAorR3JhcGhpY3NS
ZWN0IFNWR01hc2tFbGVtZW50OjptYXNrQm91bmRpbmdCb3goY29uc3QgR3JhcGhpY3NSZWN0JiBv
YmplY3RCb3VuZGluZ0JveCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgbWFza0JCb3g7CisgICAg
R3JhcGhpY3NSZWN0IG1hc2tCQm94OwogICAgIGlmIChtYXNrVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCi0gICAgICAgIG1hc2tCQm94ID0g
RmxvYXRSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lk
dGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKKyAgICAgICAgbWFza0JCb3ggPSBHcmFwaGlj
c1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgp
ICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5
KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpICsgb2Jq
ZWN0Qm91bmRpbmdCb3gueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgp
LnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIGVsc2UKLSAgICAgICAgbWFza0JCb3ggPSBG
bG9hdFJlY3QoeCgpLnZhbHVlKHRoaXMpLAorICAgICAgICBtYXNrQkJveCA9IEdyYXBoaWNzUmVj
dCh4KCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1
ZSh0aGlzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZSh0aGlz
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkudmFsdWUodGhpcykpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1
ICszNiwxNSBAQAogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhT
ZWdUeXBlJikgPSAwOwogICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZH
UGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvU2VnbWVudChGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1v
dmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VM
aW5lVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBv
aW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQ
b2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBm
bG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNz
UG9pbnQmLCBHcmFwaGljc1BvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKSA9IDA7
CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQ
b2ludCYsIEdyYXBoaWNzUG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJv
b2wmLCBHcmFwaGljc1BvaW50JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwzNyArMTMwLDM3IEBACiAgICAgcmV0dXJuIFNW
R1RleHRRdWVyeShyZW5kZXJlcigpKS5zdWJTdHJpbmdMZW5ndGgoY2hhcm51bSwgbmNoYXJzKTsK
IH0KIAotRmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25P
ZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitHcmFwaGlj
c1BvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1bnNp
Z25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICBkb2N1bWVudCgp
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGlmIChjaGFy
bnVtID4gZ2V0TnVtYmVyT2ZDaGFycygpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
Ci0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1Bv
aW50KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5zdGFy
dFBvc2l0aW9uT2ZDaGFyYWN0ZXIoY2hhcm51bSk7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK0dyYXBoaWNzUG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKIAogICAgIGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZDaGFycygpKSB7CiAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNW
R1RleHRRdWVyeShyZW5kZXJlcigpKS5lbmRQb3NpdGlvbk9mQ2hhcmFjdGVyKGNoYXJudW0pOwog
fQogCi1GbG9hdFJlY3QgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRFeHRlbnRPZkNoYXIodW5z
aWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBpZiAoY2hhcm51bSA+IGdldE51bWJlck9m
Q2hhcnMoKSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmV4dGVudE9mQ2hhcmFjdGVyKGNoYXJu
dW0pOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgcmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJl
cigpKS5yb3RhdGlvbk9mQ2hhcmFjdGVyKGNoYXJudW0pOwogfQogCi1pbnQgU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpnZXRDaGFyTnVtQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKK2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldENoYXJOdW1BdFBvc2l0aW9uKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBTVkdUZXh0UXVl
cnkocmVuZGVyZXIoKSkuY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihwb2ludCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI3LDIzICsxMjcsMjMgQEAKICAgICByZXR1cm4gbmV4dENvbW1hbmQ7CiB9
CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1Nl
Z21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAg
IGZsb2F0IHRvWTsKICAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkg
fHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdl
dFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21l
bnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZs
b2F0IHRvWTsKICAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwg
IXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdldFBv
aW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTE1Nyw3ICsxNTcsNyBAQAogICAgIHJldHVybiBwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5k
LCB5KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIEdy
YXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIGZsb2F0IHgxOwogICAgIGZsb2F0IHkx
OwpAQCAtMTcyLDEzICsxNzIsMTMgQEAKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVu
dCwgbV9lbmQsIHRvWCkKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQs
IHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgx
LCB5MSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHRhcmdldFBvaW50
ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludCh4MSwg
eTEpOworICAgIHBvaW50MiA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2lu
dCA9IEdyYXBoaWNzUG9pbnQodG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYg
cG9pbnQxLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBmbG9hdCB4MTsKICAg
ICBmbG9hdCB5MTsKQEAgLTE4OSwxMiArMTg5LDEyIEBACiAgICAgICAgIHx8ICFwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJl
bnQsIG1fZW5kLCB0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxv
YXRQb2ludCh4MSwgeTEpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7
CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludCh4MSwgeTEpOworICAgIHRhcmdldFBvaW50ID0g
R3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZH
UGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50
JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50Miwg
R3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgeDI7CiAgICAgZmxvYXQg
eTI7CkBAIC0yMDUsMjMgKzIwNSwyMyBAQAogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJy
ZW50LCBtX2VuZCwgdG9YKQogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2Vu
ZCwgdG9ZKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQo
eDIsIHkyKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHBv
aW50MiA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNz
UG9pbnQodG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxv
YXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwg
bV9lbmQsIHRvWCkKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRv
WSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQo
dG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VBcmNU
b1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VB
cmMsIGJvb2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0
JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCkKIHsKICAgICBmbG9hdCB0b1g7CiAgICAgZmxvYXQgdG9ZOwpAQCAtMjMzLDcgKzIz
Myw3IEBACiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAg
ICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAg
ICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQodG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5oCShyZXZpc2lvbiA5
MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTEgKzI4LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRl
ZiBTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+IFNWR0FuaW1hdGVkUmVjdDsK
K3R5cGVkZWYgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8R3JhcGhpY3NSZWN0PiBTVkdBbmlt
YXRlZFJlY3Q7CiAKIC8vIEhlbHBlciBtYWNyb3MgdG8gZGVjbGFyZS9kZWZpbmUgYSBTVkdBbmlt
YXRlZFJlY3Qgb2JqZWN0CiAjZGVmaW5lIERFQ0xBUkVfQU5JTUFURURfUkVDVChVcHBlclByb3Bl
cnR5LCBMb3dlclByb3BlcnR5KSBcCi1ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZKFNWR0FuaW1h
dGVkUmVjdCwgRmxvYXRSZWN0LCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KQorREVDTEFS
RV9BTklNQVRFRF9QUk9QRVJUWShTVkdBbmltYXRlZFJlY3QsIEdyYXBoaWNzUmVjdCwgVXBwZXJQ
cm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkKIAogI2RlZmluZSBERUZJTkVfQU5JTUFURURfUkVDVChP
d25lclR5cGUsIERPTUF0dHJpYnV0ZSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkgXAog
REVGSU5FX0FOSU1BVEVEX1BST1BFUlRZKEFuaW1hdGVkUmVjdCwgT3duZXJUeXBlLCBET01BdHRy
aWJ1dGUsIERPTUF0dHJpYnV0ZS5sb2NhbE5hbWUoKSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9w
ZXJ0eSkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiYgZnJvbVZhbHVlLCBPd25QdHI8U1ZHQW5p
bWF0ZWRUeXBlPiYgdG9WYWx1ZSwgT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4mIGFuaW1hdGVkVmFs
dWUpOwogICAgIHZpcnR1YWwgZmxvYXQgY2FsY3VsYXRlRGlzdGFuY2UoY29uc3QgU3RyaW5nJiBm
cm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKIAotICAgIHN0YXRpYyBib29sIHBh
cnNlU1ZHUmVjdChjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgYm9vbCBw
YXJzZVNWR1JlY3QoY29uc3QgU3RyaW5nJiwgR3JhcGhpY3NSZWN0Jik7CiB9OwogI2VuZGlmIC8v
IEVOQUJMRShTVkdfQU5JTUFUSU9OKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKICNpbmNsdWRlICJSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCkBAIC0yMjAsMTYgKzIyMCwxNiBAQAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50ZXJQ
b2ludHNBbmRSYWRpdXMoY29uc3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVz
LCBGbG9hdFBvaW50JiBmb2NhbFBvaW50LCBGbG9hdFBvaW50JiBjZW50ZXJQb2ludCwgZmxvYXQm
IHJhZGl1cykKK3ZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWxjdWxhdGVGb2NhbENl
bnRlclBvaW50c0FuZFJhZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMsIEdyYXBoaWNzUG9pbnQmIGZvY2FsUG9pbnQsIEdyYXBoaWNzUG9pbnQmIGNlbnRlclBv
aW50LCBmbG9hdCYgcmFkaXVzKQogewogICAgIC8vIERldGVybWluZSBncmFkaWVudCBmb2NhbC9j
ZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKICAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1v
ZGUoKSkgewotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmZ4KCku
dmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy5meSgpLnZhbHVlQXNQZXJjZW50YWdlKCkp
OwotICAgICAgICBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVl
QXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMuY3koKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAg
ICAgICAgZm9jYWxQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAg
ICAgY2VudGVyUG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZUFzUGVy
Y2VudGFnZSgpLCBhdHRyaWJ1dGVzLmN5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CiAgICAgICAg
IHJhZGl1cyA9IGF0dHJpYnV0ZXMucigpLnZhbHVlQXNQZXJjZW50YWdlKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZm9jYWxQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVl
KHRoaXMpLCBhdHRyaWJ1dGVzLmZ5KCkudmFsdWUodGhpcykpOwotICAgICAgICBjZW50ZXJQb2lu
dCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLmN5
KCkudmFsdWUodGhpcykpOworICAgICAgICBmb2NhbFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRy
aWJ1dGVzLmZ4KCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZSh0aGlzKSk7Cisg
ICAgICAgIGNlbnRlclBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWUo
dGhpcyksIGF0dHJpYnV0ZXMuY3koKS52YWx1ZSh0aGlzKSk7CiAgICAgICAgIHJhZGl1cyA9IGF0
dHJpYnV0ZXMucigpLnZhbHVlKHRoaXMpOwogICAgIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAK
ICAgICAgICAgZGVsdGFYID0gY29zZihhbmdsZSkgKiByYWRpdXNNYXg7CiAgICAgICAgIGRlbHRh
WSA9IHNpbmYoYW5nbGUpICogcmFkaXVzTWF4OwotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQ
b2ludChkZWx0YVggKyBjZW50ZXJQb2ludC54KCksIGRlbHRhWSArIGNlbnRlclBvaW50LnkoKSk7
CisgICAgICAgIGZvY2FsUG9pbnQgPSBHcmFwaGljc1BvaW50KGRlbHRhWCArIGNlbnRlclBvaW50
LngoKSwgZGVsdGFZICsgY2VudGVyUG9pbnQueSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICsz
NSw5IEBACiB9CiAKIC8vIEhlbHBlciBmdW5jdGlvbnMKLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2lu
dCBibGVuZEZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYg
YiwgZmxvYXQgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUG9pbnQgYmxlbmRHcmFw
aGljc1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIs
IGZsb2F0IHByb2dyZXNzKQogewotICAgIHJldHVybiBGbG9hdFBvaW50KChiLngoKSAtIGEueCgp
KSAqIHByb2dyZXNzICsgYS54KCksIChiLnkoKSAtIGEueSgpKSAqIHByb2dyZXNzICsgYS55KCkp
OworICAgIHJldHVybiBHcmFwaGljc1BvaW50KChiLngoKSAtIGEueCgpKSAqIHByb2dyZXNzICsg
YS54KCksIChiLnkoKSAtIGEueSgpKSAqIHByb2dyZXNzICsgYS55KCkpOwogfQogCiBzdGF0aWMg
aW5saW5lIGZsb2F0IGJsZW5kQW5pbWF0ZWRGbG9hdChmbG9hdCBmcm9tLCBmbG9hdCB0bywgZmxv
YXQgcHJvZ3Jlc3MpCkBAIC02NCwyNSArNjQsMjUgQEAKICAgICByZXR1cm4gbV90b01vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcyA/IGFuaW1WYWx1ZSArIGN1cnJlbnRWYWx1ZSA6IGFuaW1WYWx1
ZSAtIGN1cnJlbnRWYWx1ZTsKIH0KIAotRmxvYXRQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRB
bmltYXRlZEZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgZnJvbVBvaW50LCBjb25zdCBGbG9h
dFBvaW50JiB0b1BvaW50KQorR3JhcGhpY3NQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmlt
YXRlZEdyYXBoaWNzUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgZnJvbVBvaW50LCBjb25zdCBH
cmFwaGljc1BvaW50JiB0b1BvaW50KQogewogICAgIGlmIChtX2Zyb21Nb2RlID09IG1fdG9Nb2Rl
KQotICAgICAgICByZXR1cm4gYmxlbmRGbG9hdFBvaW50KGZyb21Qb2ludCwgdG9Qb2ludCwgbV9w
cm9ncmVzcyk7CisgICAgICAgIHJldHVybiBibGVuZEdyYXBoaWNzUG9pbnQoZnJvbVBvaW50LCB0
b1BvaW50LCBtX3Byb2dyZXNzKTsKIAogICAgIC8vIFRyYW5zZm9ybSB0b1BvaW50IHRvIHRoZSBj
b29yZGluYXRlIG1vZGUgb2YgZnJvbVBvaW50Ci0gICAgRmxvYXRQb2ludCBhbmltYXRlZFBvaW50
ID0gdG9Qb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGFuaW1hdGVkUG9pbnQgPSB0b1BvaW50Owog
ICAgIGlmIChtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIGFuaW1h
dGVkUG9pbnQgKz0gbV90b0N1cnJlbnRQb2ludDsKICAgICBlbHNlCiAgICAgICAgIGFuaW1hdGVk
UG9pbnQubW92ZSgtbV90b0N1cnJlbnRQb2ludC54KCksIC1tX3RvQ3VycmVudFBvaW50LnkoKSk7
CiAKLSAgICBhbmltYXRlZFBvaW50ID0gYmxlbmRGbG9hdFBvaW50KGZyb21Qb2ludCwgYW5pbWF0
ZWRQb2ludCwgbV9wcm9ncmVzcyk7CisgICAgYW5pbWF0ZWRQb2ludCA9IGJsZW5kR3JhcGhpY3NQ
b2ludChmcm9tUG9pbnQsIGFuaW1hdGVkUG9pbnQsIG1fcHJvZ3Jlc3MpOwogCiAgICAgaWYgKG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uKQogICAgICAgICByZXR1cm4gYW5pbWF0ZWRQb2ludDsK
IAogICAgIC8vIFRyYW5zZm9ybSB0aGUgYW5pbWF0ZWQgcG9pbnQgdG8gdGhlIGNvb3JkaW5hdGUg
bW9kZSwgbmVlZGVkIGZvciB0aGUgY3VycmVudCBwcm9ncmVzcy4KLSAgICBGbG9hdFBvaW50IGN1
cnJlbnRQb2ludCA9IGJsZW5kRmxvYXRQb2ludChtX2Zyb21DdXJyZW50UG9pbnQsIG1fdG9DdXJy
ZW50UG9pbnQsIG1fcHJvZ3Jlc3MpOworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50ID0g
YmxlbmRHcmFwaGljc1BvaW50KG1fZnJvbUN1cnJlbnRQb2ludCwgbV90b0N1cnJlbnRQb2ludCwg
bV9wcm9ncmVzcyk7CiAgICAgaWYgKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAg
ICAgICAgIHJldHVybiBhbmltYXRlZFBvaW50ICsgY3VycmVudFBvaW50OwogCkBAIC05MiwxMyAr
OTIsMTMgQEAKIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KCkKIHsK
LSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0
UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCB0b1RhcmdldFBvaW50OwogICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZU1vdmVUb1Nl
Z21lbnQoZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFyc2VNb3Zl
VG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50
LCB0b1RhcmdldFBvaW50KSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9m
cm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRl
ZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgZmFsc2UsIG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBm
cm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAg
ICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0
b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMDYsMTMgKzEwNiwxMyBAQAogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpi
bGVuZExpbmVUb1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50Owot
ICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21UYXJn
ZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zy
b21Tb3VyY2UtPnBhcnNlTGluZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8
ICFtX3RvU291cmNlLT5wYXJzZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLCBtX2lzSW5GaXJzdEhhbGZP
ZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgbV9jb25zdW1lci0+bGlu
ZVRvKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQ
b2ludCksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2Rl
KTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRp
bmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0
UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRp
bmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDgsMTkgKzE0OCwxOSBAQAogCiBib29sIFNWR1BhdGhC
bGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgZnJv
bVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MTsKLSAgICBGbG9hdFBvaW50
IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9p
bnQgdG9Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MjsKKyAgICBHcmFwaGljc1BvaW50
IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21Qb2ludDE7CisgICAgR3Jh
cGhpY3NQb2ludCBmcm9tUG9pbnQyOworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQb2ludDsK
KyAgICBHcmFwaGljc1BvaW50IHRvUG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgdG9Qb2ludDI7
CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChmcm9tUG9p
bnQxLCBmcm9tUG9pbnQyLCBmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNl
LT5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQodG9Qb2ludDEsIHRvUG9pbnQyLCB0b1RhcmdldFBv
aW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb0N1
YmljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50
MiwgdG9Qb2ludDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFuaW1hdGVk
RmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLAorICAgIG1fY29uc3Vt
ZXItPmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tUG9pbnQxLCB0
b1BvaW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFw
aGljc1BvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1Rhcmdl
dFBvaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZB
bmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2lu
dCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6
IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBv
aW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBt
X3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAgLTE2OSwxNiArMTY5LDE2IEBACiAK
IGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7
Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9p
bnQyOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9p
bnQyOworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9p
bnQgZnJvbVBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCB0b1BvaW50MjsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRv
Q3ViaWNTbW9vdGhTZWdtZW50KGZyb21Qb2ludDIsIGZyb21UYXJnZXRQb2ludCkKICAgICAgICAg
fHwgIW1fdG9Tb3VyY2UtPnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCh0b1BvaW50Miwg
dG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0
b1BvaW50MiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0
ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisgICAgbV9jb25z
dW1lci0+Y3VydmVUb0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21Q
b2ludDIsIHRvUG9pbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxl
bmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9
IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1f
ZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50
ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3Rv
Q3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAgLTE4NywxNiArMTg3LDE2IEBACiAKIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAg
IEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MTsK
LSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MTsK
KyAgICBHcmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZy
b21Qb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCB0b1RhcmdldFBvaW50OworICAgIEdyYXBoaWNz
UG9pbnQgdG9Qb2ludDE7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQoZnJvbVBvaW50MSwgZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90
b1NvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQ
b2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9R
dWFkcmF0aWMoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQo
ZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRv
UXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQx
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGlj
c1BvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUg
OiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsg
ZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1Rh
cmdldFBvaW50OwpAQCAtMjA1LDEzICsyMDUsMTMgQEAKIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6
YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBm
cm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OworICAgIEdyYXBo
aWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQb2lu
dDsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2Vn
bWVudChmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksIG1faXNJbkZp
cnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBtX2NvbnN1
bWVyLT5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZy
b21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zy
b21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21D
dXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2ludCA9IG1f
dG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJl
bnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjQsMTMgKzIy
NCwxMyBAQAogICAgIGZsb2F0IGZyb21BbmdsZTsKICAgICBib29sIGZyb21MYXJnZUFyYzsKICAg
ICBib29sIGZyb21Td2VlcDsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBH
cmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKICAgICBmbG9hdCB0b1J4OwogICAgIGZsb2F0
IHRvUnk7CiAgICAgZmxvYXQgdG9BbmdsZTsKICAgICBib29sIHRvTGFyZ2VBcmM7CiAgICAgYm9v
bCB0b1N3ZWVwOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1Bv
aW50IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQXJjVG9TZWdt
ZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5nbGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBm
cm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUFyY1RvU2VnbWVu
dCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xhcmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0KGZyb21BbmdsZSwgdG9BbmdsZSwgbV9wcm9n
cmVzcyksCiAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBmcm9tTGFyZ2VBcmMgOiB0b0xhcmdlQXJjLAogICAgICAgICAgICAgICAgICAgICAgIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gZnJvbVN3ZWVwIDogdG9Td2VlcCwKLSAgICAgICAgICAg
ICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFy
Z2V0UG9pbnQpLAorICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGljc1Bv
aW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCiAgICAgICAgICAgICAgICAgICAg
ICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwog
ICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2lu
dDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRl
cyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAg
LTM2NSw4ICszNjUsOCBAQAogICAgIG1fdG9Tb3VyY2UgPSAwOwogICAgIG1fZnJvbVNvdXJjZSA9
IDA7CiAgICAgbV9jb25zdW1lciA9IDA7Ci0gICAgbV9mcm9tQ3VycmVudFBvaW50ID0gRmxvYXRQ
b2ludCgpOwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBGbG9hdFBvaW50KCk7CisgICAgbV9mcm9t
Q3VycmVudFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fdG9DdXJyZW50UG9pbnQgPSBH
cmFwaGljc1BvaW50KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1
ZGUgIkZpbGVJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgcmV0
dXJuIHJvb3RFbGVtZW50LT5oZWlnaHQoKS51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50
YWdlOwogfQogCi12b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBTVkdJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTg5LDEyICsxODksMTIgQEAKICAgICBpZiAoY29tcG9zaXRlT3AgIT0gQ29tcG9zaXRlU291cmNl
T3ZlcikKICAgICAgICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKIAotICAg
IEZsb2F0U2l6ZSBzY2FsZShkc3RSZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJl
Y3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1NpemUgc2NhbGUo
ZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpIC8gc3Jj
UmVjdC5oZWlnaHQoKSk7CiAgICAgCiAgICAgLy8gV2UgY2FuIG9ubHkgZHJhdyB0aGUgZW50aXJl
IGZyYW1lLCBjbGlwcGVkIHRvIHRoZSByZWN0IHdlIHdhbnQuIFNvIGNvbXB1dGUgd2hlcmUgdGhl
IHRvcCBsZWZ0CiAgICAgLy8gb2YgdGhlIGltYWdlIHdvdWxkIGJlIGlmIHdlIHdlcmUgZHJhd2lu
ZyB3aXRob3V0IGNsaXBwaW5nLCBhbmQgdHJhbnNsYXRlIGFjY29yZGluZ2x5LgotICAgIEZsb2F0
U2l6ZSB0b3BMZWZ0T2Zmc2V0KHNyY1JlY3QubG9jYXRpb24oKS54KCkgKiBzY2FsZS53aWR0aCgp
LCBzcmNSZWN0LmxvY2F0aW9uKCkueSgpICogc2NhbGUuaGVpZ2h0KCkpOwotICAgIEZsb2F0UG9p
bnQgZGVzdE9mZnNldCA9IGRzdFJlY3QubG9jYXRpb24oKSAtIHRvcExlZnRPZmZzZXQ7CisgICAg
R3JhcGhpY3NTaXplIHRvcExlZnRPZmZzZXQoc3JjUmVjdC5sb2NhdGlvbigpLngoKSAqIHNjYWxl
LndpZHRoKCksIHNyY1JlY3QubG9jYXRpb24oKS55KCkgKiBzY2FsZS5oZWlnaHQoKSk7CisgICAg
R3JhcGhpY3NQb2ludCBkZXN0T2Zmc2V0ID0gZHN0UmVjdC5sb2NhdGlvbigpIC0gdG9wTGVmdE9m
ZnNldDsKIAogICAgIGNvbnRleHQtPnRyYW5zbGF0ZShkZXN0T2Zmc2V0LngoKSwgZGVzdE9mZnNl
dC55KCkpOwogICAgIGNvbnRleHQtPnNjYWxlKHNjYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVJbWFnZT4gY3JlYXRlKEZpbHRlciosIFBhc3NSZWZQdHI8SW1hZ2U+LCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CiAKLSAgICB2b2lkIHNldEFic29sdXRlU3VicmVnaW9u
KGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTdWJyZWdpb24pIHsgbV9hYnNvbHV0ZVN1YnJlZ2lv
biA9IGFic29sdXRlU3VicmVnaW9uOyB9CisgICAgdm9pZCBzZXRBYnNvbHV0ZVN1YnJlZ2lvbihj
b25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlU3VicmVnaW9uKSB7IG1fYWJzb2x1dGVTdWJyZWdp
b24gPSBhYnNvbHV0ZVN1YnJlZ2lvbjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIFJlZlB0cjxJ
bWFnZT4gbV9pbWFnZTsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpbzsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVN1YnJlZ2lvbjsKKyAgICBHcmFwaGlj
c1JlY3QgbV9hYnNvbHV0ZVN1YnJlZ2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNv
dXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQorU1ZHRmls
dGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEdy
YXBoaWNzUmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZmlsdGVy
UmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQogICAgIDogRmlsdGVyKCkKICAgICAsIG1fYWJz
b2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCiAgICAgLCBtX2Fic29sdXRlU291cmNl
RHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCkBAIC01MCw3ICs1MCw3
IEBACiAgICAgcmV0dXJuIEZpbHRlcjo6YXBwbHlWZXJ0aWNhbFNjYWxlKHZhbHVlKSAqIG1fYWJz
b2x1dGVGaWx0ZXJSZWdpb24uaGVpZ2h0KCkgLyBtX2ZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKIH0K
IAotUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1Bhc3NSZWZQ
dHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291
cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0
QkJveE1vZGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsy
NCw4IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NTaXplLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNSwzMCArMzUsMzAgQEAKIAogY2xhc3MgU1ZHRmlsdGVy
IDogcHVibGljIEZpbHRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRmls
dGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgYm9v
bCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZWZmZWN0Qm91bmRpbmdCb3hNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZmZlY3RCQm94TW9kZTsgfQogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVy
UmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1
dGVGaWx0ZXJSZWdpb247IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBmaWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgdmlydHVh
bCBHcmFwaGljc1JlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUZp
bHRlclJlZ2lvbjsgfQogCi0gICAgdmlydHVhbCBGbG9hdFBvaW50IG1hcEFic29sdXRlUG9pbnRU
b0xvY2FsUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIG1fYWJz
b2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsgfQotICAgIEZsb2F0UmVj
dCBtYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0
IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsgfQorICAgIHZpcnR1
YWwgR3JhcGhpY3NQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtLmludmVy
c2UoKS5tYXBQb2ludChwb2ludCk7IH0KKyAgICBHcmFwaGljc1JlY3QgbWFwTG9jYWxSZWN0VG9B
YnNvbHV0ZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlVHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7IH0KIAogICAgIHZpcnR1YWwgZmxvYXQgYXBw
bHlIb3Jpem9udGFsU2NhbGUoZmxvYXQgdmFsdWUpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQg
YXBwbHlWZXJ0aWNhbFNjYWxlKGZsb2F0IHZhbHVlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVTb3VyY2VE
cmF3aW5nUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3Qg
eyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0
IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5n
UmVnaW9uOyB9CisgICAgR3JhcGhpY3NSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCiBwcml2YXRlOgotICAgIFNWR0ZpbHRlcihj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3Qm
IGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3Vu
ZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1v
ZGUpOworICAgIFNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29u
c3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBm
aWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3
aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0
UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lv
bjsKKyAgICBHcmFwaGljc1JlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247CisgICAg
R3JhcGhpY3NSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1fYWJz
b2x1dGVGaWx0ZXJSZWdpb247CisgICAgR3JhcGhpY3NSZWN0IG1fZmlsdGVyUmVnaW9uOwogICAg
IGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBACiB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkKIHsKICAgICBBU1NFUlQobV9pbWFnZSk7Ci0gICAgRmxvYXRSZWN0
IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBw
YWludFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3Qo
R3JhcGhpY3NQb2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBwYWlu
dFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lvbik7CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRy
YW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKICAgICBwYWludFJlY3QuaW50ZXJzZWN0
KG1heEVmZmVjdFJlY3QoKSk7CiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChwYWludFJlY3QpKTsKQEAgLTY1LDggKzY1LDggQEAKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KG1fYWJzb2x1dGVTdWJy
ZWdpb24pOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0KEdyYXBoaWNzUG9pbnQoKSwgbV9pbWFn
ZS0+c2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgZGVzdFJlY3QobV9hYnNvbHV0ZVN1YnJlZ2lv
bik7CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNy
Y1JlY3QpOwogCiAgICAgSW50UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiAgICAgdmlydHVhbCBOYXRpdmVJ
bWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KSB7IHJldHVybiAwOyB9CiAKICAgICBTVkdJbWFn
ZShJbWFnZU9ic2VydmVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBmcm9tUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVh
bCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBmcm9tUmVj
dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0b1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHRmlsdGVyRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCiAgICAgdm9pZCBzZXRGaWx0ZXJSZXModW5zaWduZWQgbG9uZyBmaWx0
ZXJSZXNYLCB1bnNpZ25lZCBsb25nIGZpbHRlclJlc1kpOwotICAgIEZsb2F0UmVjdCBmaWx0ZXJC
b3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgZmls
dGVyQm91bmRpbmdCb3goY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgU1ZHRmlsdGVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBACiAgICAgcmV0dXJuIGZhcnRoZXN0OwogfQogCi1GbG9hdFJlY3QgU1ZHTG9jYXRh
YmxlOjpnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIFN0eWxlVXBkYXRlU3RyYXRl
Z3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKK0dyYXBoaWNzUmVjdCBTVkdMb2NhdGFibGU6OmdldEJC
b3goY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVw
ZGF0ZVN0cmF0ZWd5KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAoc3R5bGVVcGRh
dGVTdHJhdGVneSA9PSBBbGxvd1N0eWxlVXBkYXRlKQpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAg
Ly8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQgZ2V0QkJveCBmb3IgZGV0YWNo
ZWQgZWxlbWVudHMuCiAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIHJl
dHVybiBlbGVtZW50LT5yZW5kZXJlcigpLT5vYmplY3RCb3VuZGluZ0JveCgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKIHsKIH0KIAotRmxvYXRSZWN0IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBj
b25zdAorR3JhcGhpY3NSZWN0IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAog
ewogICAgIHJldHVybiBtX3pvb21SZWN0U2NyZWVuOwogfQpAQCAtNDYsNyArNDYsNyBAQAogICAg
IG1fcHJldmlvdXNTY2FsZSA9IHNjYWxlOwogfQogCi1GbG9hdFBvaW50IFNWR1pvb21FdmVudDo6
cHJldmlvdXNUcmFuc2xhdGUoKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdab29tRXZlbnQ6OnBy
ZXZpb3VzVHJhbnNsYXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wcmV2aW91c1RyYW5zbGF0
ZTsKIH0KQEAgLTYxLDcgKzYxLDcgQEAKICAgICBtX25ld1NjYWxlID0gc2NhbGU7CiB9CiAKLUZs
b2F0UG9pbnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSBjb25zdAorR3JhcGhpY3NQb2lu
dCBTVkdab29tRXZlbnQ6Om5ld1RyYW5zbGF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbmV3
VHJhbnNsYXRlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMSw3ICsyMTEsNyBAQAogICAgIHJldHVybiByYXJlU1ZHRGF0YSgpLT5lbGVtZW50
SW5zdGFuY2VzKCk7CiB9CiAKLWJvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goRmxvYXRSZWN0
JiByZWN0LCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJh
dGVneSkgY29uc3QKK2Jvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goR3JhcGhpY3NSZWN0JiBy
ZWN0LCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVn
eSkgY29uc3QKIHsKICAgICBpZiAoaXNTdHlsZWRMb2NhdGFibGUoKSkgewogICAgICAgICByZWN0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHRoaXMpLT5n
ZXRCQm94KHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdMaXN0U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDIx
ICs1OSwyMSBAQAogICAgIHJldHVybiBwYXRoU2VnVHlwZTsKIH0KIAotYm9vbCBTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQor
Ym9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEdyYXBoaWNzUG9p
bnQmIHRhcmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVCht
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8fCBtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZHUGF0aFNlZ1Npbmds
ZUNvb3JkaW5hdGUqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5nbGVDb29yZGlu
YXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQobW92
ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQo
bW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBT
VkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEdy
YXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAg
IEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb0FicyB8fCBt
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7CiAgICAgU1ZHUGF0
aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdTaW5n
bGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0
UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBo
aWNzUG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtOTUsNDcgKzk1LDQ3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNW
R1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2lu
dCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQmIHRhcmdldFBv
aW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBh
dGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhT
ZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpYyogY3ViaWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4obV9z
ZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBjdWJp
Yy0+eTEoKSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnky
KCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgp
KTsKKyAgICBwb2ludDEgPSBHcmFwaGljc1BvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEoKSk7
CisgICAgcG9pbnQyID0gR3JhcGhpY3NQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkpOwor
ICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50
LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMgfHwgbV9zZWdt
ZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwpOwogICAg
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqIGN1YmljU21vb3RoID0gc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9p
bnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkpOwot
ICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eCgpLCBjdWJpY1Ntb290
aC0+eSgpKTsKKyAgICBwb2ludDIgPSBHcmFwaGljc1BvaW50KGN1YmljU21vb3RoLT54MigpLCBj
dWJpY1Ntb290aC0+eTIoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGN1Ymlj
U21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZs
b2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhT
ZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQm
IHBvaW50MSwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgQVNTRVJUKG1fc2Vn
bWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKiBxdWFk
cmF0aWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYyo+KG1fc2VnbWVu
dC5nZXQoKSk7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngxKCksIHF1YWRy
YXRpYy0+eTEoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eCgp
LCBxdWFkcmF0aWMtPnkoKSk7CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludChxdWFkcmF0aWMt
PngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50
KHF1YWRyYXRpYy0+eCgpLCBxdWFkcmF0aWMtPnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNl
Z21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNl
OjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMgfHwgbV9z
ZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVs
KTsKICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogcXVhZHJhdGljU21vb3RoID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkpOwot
ICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWNTbW9vdGgtPngoKSwgcXVhZHJh
dGljU21vb3RoLT55KCkpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChxdWFkcmF0
aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYg
cngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAs
IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYg
bGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAg
ICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgp
ID09IFBhdGhTZWdBcmNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdB
cmNSZWwpOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgYW5nbGUgPSBhcmNUby0+YW5nbGUoKTsK
ICAgICBsYXJnZUFyYyA9IGFyY1RvLT5sYXJnZUFyY0ZsYWcoKTsKICAgICBzd2VlcCA9IGFyY1Rv
LT5zd2VlcEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQoYXJjVG8tPngoKSwg
YXJjVG8tPnkoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGFyY1RvLT54KCks
IGFyY1RvLT55KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKIAogI2luY2x1ZGUgPGxpbWl0cz4KQEAg
LTE4OSw3ICsxODksNyBAQAogICAgIHJldHVybiBjdXIgPT0gZW5kOwogfQogCi1ib29sIHBhcnNl
UmVjdChjb25zdCBTdHJpbmcmIHN0cmluZywgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBwYXJzZVJl
Y3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb25z
dCBVQ2hhciogcHRyID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogZW5k
ID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgZmxvYXQg
d2lkdGggPSAwOwogICAgIGZsb2F0IGhlaWdodCA9IDA7CiAgICAgYm9vbCB2YWxpZCA9IHBhcnNl
TnVtYmVyKHB0ciwgZW5kLCB4KSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgeSkgJiYgcGFyc2VO
dW1iZXIocHRyLCBlbmQsIHdpZHRoKSAmJiBwYXJzZU51bWJlcihwdHIsIGVuZCwgaGVpZ2h0LCBm
YWxzZSk7Ci0gICAgcmVjdCA9IEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBy
ZWN0ID0gR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHJldHVybiB2YWxp
ZDsKIH0KIApAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgICAgIH0KICAgICAgICAgc2tpcE9wdGlv
bmFsU3BhY2VzKGN1ciwgZW5kKTsKIAotICAgICAgICBwb2ludHNMaXN0LmFwcGVuZChGbG9hdFBv
aW50KHhQb3MsIHlQb3MpKTsKKyAgICAgICAgcG9pbnRzTGlzdC5hcHBlbmQoR3JhcGhpY3NQb2lu
dCh4UG9zLCB5UG9zKSk7CiAgICAgfQogICAgIHJldHVybiBjdXIgPT0gZW5kICYmICFkZWxpbVBh
cnNlZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50
LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMSArODIsMTEgQEAKICAgICB1bnNpZ25l
ZCBnZXROdW1iZXJPZkNoYXJzKCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVu
Z3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0U3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIGNoYXJu
dW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIEZsb2F0UG9p
bnQgZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2Rl
JikgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBj
aGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGdldEV4dGVudE9m
Q2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgR3JhcGhp
Y3NQb2ludCBnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGdldEVuZFBvc2l0aW9uT2ZDaGFyKHVu
c2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qg
Z2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
ICAgICBmbG9hdCBnZXRSb3RhdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7Ci0gICAgaW50IGdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKKyAgICBpbnQgZ2V0Q2hhck51bUF0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQ
b2ludCYpIGNvbnN0OwogICAgIHZvaWQgc2VsZWN0U3ViU3RyaW5nKHVuc2lnbmVkIGNoYXJudW0s
IHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgc3RhdGljIFNW
R1RleHRDb250ZW50RWxlbWVudCogZWxlbWVudEZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiTGluZWFyR3Jh
ZGllbnRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgpAQCAtMTk5LDE1ICsxOTks
MTUgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQ6OmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKGNvbnN0IExpbmVhckdyYWRpZW50QXR0cmlidXRl
cyYgYXR0cmlidXRlcywgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRmxvYXRQb2ludCYgZW5kUG9p
bnQpCit2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlU3RhcnRFbmRQb2lu
dHMoY29uc3QgTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBHcmFwaGljc1Bv
aW50JiBzdGFydFBvaW50LCBHcmFwaGljc1BvaW50JiBlbmRQb2ludCkKIHsKICAgICAvLyBEZXRl
cm1pbmUgZ3JhZGllbnQgc3RhcnQvZW5kIHBvaW50cwogICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5k
aW5nQm94TW9kZSgpKSB7Ci0gICAgICAgIHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0
ZXMueDEoKS52YWx1ZUFzUGVyY2VudGFnZSgpLCBhdHRyaWJ1dGVzLnkxKCkudmFsdWVBc1BlcmNl
bnRhZ2UoKSk7Ci0gICAgICAgIGVuZFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngyKCku
dmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy55MigpLnZhbHVlQXNQZXJjZW50YWdlKCkp
OworICAgICAgICBzdGFydFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLngxKCkudmFs
dWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwor
ICAgICAgICBlbmRQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVlQXNQ
ZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngxKCku
dmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIGVuZFBv
aW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMu
eTIoKS52YWx1ZSh0aGlzKSk7CisgICAgICAgIHN0YXJ0UG9pbnQgPSBHcmFwaGljc1BvaW50KGF0
dHJpYnV0ZXMueDEoKS52YWx1ZSh0aGlzKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlKHRoaXMpKTsK
KyAgICAgICAgZW5kUG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDIoKS52YWx1ZSh0
aGlzKSwgYXR0cmlidXRlcy55MigpLnZhbHVlKHRoaXMpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKIAotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5
bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGdldEJCb3goU3R5bGVV
cGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogCiAgICAgLy8gImJhc2Ug
Y2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVudHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhz
CiAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNvbnN0IHsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDkg
KzkzLDkgQEAKICAgICByZXR1cm4gdG90YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHUGF0
aEVsZW1lbnQ6OmdldFBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQorR3JhcGhpY3NQb2ludCBT
VkdQYXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgpCiB7Ci0gICAgRmxv
YXRQb2ludCBwb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50OwogICAgIFNWR1BhdGhQYXJz
ZXJGYWN0b3J5OjpzZWxmKCktPmdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKG1f
cGF0aEJ5dGVTdHJlYW0uZ2V0KCksIGxlbmd0aCwgcG9pbnQpOwogICAgIHJldHVybiBwb2ludDsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIFNWR1BhdGhCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShT
VkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIK
ICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aENvbnN1bWVyLmgiCiAKQEAgLTQz
LDIxICs0MywyMSBAQAogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgeyBtX3BhdGggPSAwOyB9
CiAKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9k
ZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9z
ZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAg
dmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOwogCiAgICAgLy8gT25seSB1
c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4KICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9y
aXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0
ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFy
Y1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFw
aGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25z
dCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2ws
IGJvb2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIAogICAgIFBhdGgqIG1fcGF0aDsKLSAgICBGbG9hdFBvaW50IG1f
Y3VycmVudDsKKyAgICBHcmFwaGljc1BvaW50IG1fY3VycmVudDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQ29uc3VtZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgJKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIFNWR1BhdGhDb25zdW1lcl9oCiAK
ICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIApAQCAtNTAsMTggKzUwLDE4IEBACiAgICAgdmlydHVhbCB2b2lk
IGNsZWFudXAoKSA9IDA7CiAKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFs
aXplZFBhcnNpbmcgbW9kZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBv
aW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQs
IFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3Qg
R3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGNsb3NlUGF0aCgpID0gMDsKIAogICAgIC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVy
ZWRQYXJzaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQs
IFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNh
bChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhm
bG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNv
bnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGlj
c1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRp
Y1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNG
bGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+U1ZHUGF0aENvbnN1bWVyKCkg
eyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAg
cmV0dXJuIFBhdGgoKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcm
IHMsIEZsb2F0UG9pbnQmIHBvaW50KQorc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMsIEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmIChzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgaWYgKCFwYXJzZU51
bWJlcihjdXIsIGVuZCwgeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBwb2lu
dCA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgcG9pbnQgPSBHcmFwaGljc1BvaW50KHgsIHkpOwog
ICAgIAogICAgIC8vIGRpc2FsbG93IGFueXRoaW5nIGV4Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZAog
ICAgIHJldHVybiAhc2tpcE9wdGlvbmFsU3BhY2VzKGN1ciwgZW5kKTsKQEAgLTE4Nyw5ICsxODcs
OSBAQAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFs
dWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykKIHsK
ICAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAgICBGbG9hdFBvaW50
IGJ5UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBieVBvaW50OwogICAgIHBhcnNlUG9pbnQoYnlT
dHJpbmcsIGJ5UG9pbnQpOwotICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQobV9mcm9tUG9pbnQu
eCgpICsgYnlQb2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQueSgpKTsKKyAgICBt
X3RvUG9pbnQgPSBHcmFwaGljc1BvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBt
X2Zyb21Qb2ludC55KCkgKyBieVBvaW50LnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTIxNSw3ICsyMTUsNyBAQAogICAgICAgICBQYXRoIHBhdGggPSBhbmltYXRpb25QYXRoKCk7CiAg
ICAgICAgIGZsb2F0IHBvc2l0aW9uT25QYXRoID0gcGF0aC5sZW5ndGgoKSAqIHBlcmNlbnRhZ2U7
CiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBwYXRoLnBv
aW50QXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBw
b3NpdGlvbiA9IHBhdGgucG9pbnRBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOwogICAgICAg
ICBpZiAob2spIHsKICAgICAgICAgICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBvc2l0aW9uLngo
KSwgcG9zaXRpb24ueSgpKTsKICAgICAgICAgICAgIFJvdGF0ZU1vZGUgcm90YXRlTW9kZSA9IHRo
aXMtPnJvdGF0ZU1vZGUoKTsKQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgRmxvYXRTaXplIGRpZmYgPSBtX3RvUG9pbnQgLSBtX2Zyb21Q
b2ludDsKKyAgICBHcmFwaGljc1NpemUgZGlmZiA9IG1fdG9Qb2ludCAtIG1fZnJvbVBvaW50Owog
ICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKGRpZmYud2lkdGgoKSAqIHBlcmNlbnRhZ2UgKyBtX2Zy
b21Qb2ludC54KCksIGRpZmYuaGVpZ2h0KCkgKiBwZXJjZW50YWdlICsgbV9mcm9tUG9pbnQueSgp
KTsKIH0KICAgICAKQEAgLTI2NSwxMyArMjY1LDEzIEBACiAKIGZsb2F0IFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50OjpjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNv
bnN0IFN0cmluZyYgdG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tOwotICAgIEZsb2F0
UG9pbnQgdG87CisgICAgR3JhcGhpY3NQb2ludCBmcm9tOworICAgIEdyYXBoaWNzUG9pbnQgdG87
CiAgICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZyb20pKQogICAgICAgICByZXR1cm4g
LTE7CiAgICAgaWYgKCFwYXJzZVBvaW50KHRvU3RyaW5nLCB0bykpCiAgICAgICAgIHJldHVybiAt
MTsKLSAgICBGbG9hdFNpemUgZGlmZiA9IHRvIC0gZnJvbTsKKyAgICBHcmFwaGljc1NpemUgZGlm
ZiA9IHRvIC0gZnJvbTsKICAgICByZXR1cm4gc3FydGYoZGlmZi53aWR0aCgpICogZGlmZi53aWR0
aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTkgKzMzLDE5IEBACiB7CiB9CiAK
LXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUpCit2b2lkIFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQ
b2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNh
bFN0YXRlKTsKICAgICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVy
c2FsU3RhdGUtPm1vdmVUbyh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFRyYXZlcnNh
bFN0YXRlQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRo
Q29vcmRpbmF0ZU1vZGUpCit2b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmxpbmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQog
ewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKICAgICBtX3RyYXZlcnNhbFN0YXRlLT5t
X3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPmxpbmVUbyh0YXJnZXRQb2ludCk7CiB9
CiAKLXZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9h
dFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlKQordm9pZCBTVkdQYXRoVHJh
dmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2Fs
U3RhdGUpOwogICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJz
YWxTdGF0ZS0+Y3ViaWNCZXppZXJUbyhwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpOwpAQCAt
ODgsNyArODgsNyBAQAogICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3Ro
OwogfQogCi1GbG9hdFBvaW50IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQ
b2ludCgpCitHcmFwaGljc1BvaW50IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJl
bnRQb2ludCgpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwogICAgIHJldHVybiBt
X3RyYXZlcnNhbFN0YXRlLT5tX2N1cnJlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVkVHlwZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNz
UmVjdDsKIGNsYXNzIFNWR0FuZ2xlOwogY2xhc3MgU1ZHTGVuZ3RoOwogY2xhc3MgU1ZHTGVuZ3Ro
TGlzdDsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBzdGF0aWMgUGFzc093blB0cjxTVkdBbmltYXRl
ZFR5cGU+IGNyZWF0ZVBhdGgoUGFzc093blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4pOwogICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUG9pbnRMaXN0KFNWR1BvaW50
TGlzdCopOwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUHJl
c2VydmVBc3BlY3RSYXRpbyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKik7Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVSZWN0KEZsb2F0UmVjdCopOworICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlUmVjdChHcmFwaGljc1JlY3Qq
KTsKICAgICBzdGF0aWMgUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVN0cmluZyhT
dHJpbmcqKTsKIAogICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KQEAgLTY5LDcgKzY5LDcgQEAKICAgICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0
aCgpOwogICAgIFNWR1BvaW50TGlzdCYgcG9pbnRMaXN0KCk7CiAgICAgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbyYgcHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIEZsb2F0UmVjdCYgcmVjdCgpOwor
ICAgIEdyYXBoaWNzUmVjdCYgcmVjdCgpOwogICAgIFN0cmluZyYgc3RyaW5nKCk7CiAKICAgICBT
dHJpbmcgdmFsdWVBc1N0cmluZygpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIFNWR1Bh
dGhCeXRlU3RyZWFtKiBwYXRoOwogICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvOwogICAgICAgICBTVkdQb2ludExpc3QqIHBvaW50TGlzdDsKLSAgICAg
ICAgRmxvYXRSZWN0KiByZWN0OworICAgICAgICBHcmFwaGljc1JlY3QqIHJlY3Q7CiAgICAgICAg
IFN0cmluZyogc3RyaW5nOwogICAgIH0gbV9kYXRhOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRFbGVtZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNs
dWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTkzLDcgKzkzLDcgQEAKICAgICByZXR1cm4g
U1ZHVHJhbnNmb3JtYWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZs
b2F0UmVjdCBTVkdUZXh0RWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxl
VXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJC
b3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAogewogICAg
IHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRl
Z3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIHsKIH0KIAotdm9pZCBTVkdQYXRoQnVpbGRlcjo6
bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBib29sIGNsb3NlZCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3QgR3Jh
cGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKIHsKICAgICBBU1NFUlQobV9wYXRoKTsKICAgICBtX2N1cnJlbnQgPSBtb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyB0YXJnZXRQb2ludCA6IG1fY3VycmVudCArIHRhcmdldFBvaW50
OwpAQCAtNDIsMTQgKzQyLDE0IEBACiAgICAgbV9wYXRoLT5tb3ZlVG8obV9jdXJyZW50KTsKIH0K
IAotdm9pZCBTVkdQYXRoQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmxpbmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aCk7CiAgICAgbV9jdXJyZW50ID0gbW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdGFyZ2V0UG9pbnQgOiBtX2N1cnJlbnQgKyB0YXJnZXRQb2ludDsK
ICAgICBtX3BhdGgtPmFkZExpbmVUbyhtX2N1cnJlbnQpOwogfQogCi12b2lkIFNWR1BhdGhCdWls
ZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0
ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAg
IEFTU0VSVChtX3BhdGgpOwogICAgIGlmIChtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CiAKICAgICBib29sIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMo
TGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBv
aW50cyhjb25zdCBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmLCBGbG9hdFBvaW50JiBzdGFydFBv
aW50LCBGbG9hdFBvaW50JiBlbmRQb2ludCk7CisgICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBv
aW50cyhjb25zdCBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmLCBHcmFwaGljc1BvaW50JiBzdGFy
dFBvaW50LCBHcmFwaGljc1BvaW50JiBlbmRQb2ludCk7CiAKIHByaXZhdGU6CiAgICAgU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE2ICs4
MCwxNiBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTVkdEb2N1bWVudDo6c3RhcnRQ
YW4oY29uc3QgRmxvYXRQb2ludCYgc3RhcnQpCit2b2lkIFNWR0RvY3VtZW50OjpzdGFydFBhbihj
b25zdCBHcmFwaGljc1BvaW50JiBzdGFydCkKIHsKICAgICBpZiAocm9vdEVsZW1lbnQoKSkKLSAg
ICAgICAgbV90cmFuc2xhdGUgPSBGbG9hdFBvaW50KHN0YXJ0LngoKSAtIHJvb3RFbGVtZW50KCkt
PmN1cnJlbnRUcmFuc2xhdGUoKS54KCksIHJvb3RFbGVtZW50KCktPmN1cnJlbnRUcmFuc2xhdGUo
KS55KCkgKyBzdGFydC55KCkpOworICAgICAgICBtX3RyYW5zbGF0ZSA9IEdyYXBoaWNzUG9pbnQo
c3RhcnQueCgpIC0gcm9vdEVsZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgpLngoKSwgcm9vdEVs
ZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgpLnkoKSArIHN0YXJ0LnkoKSk7CiB9CiAKLXZvaWQg
U1ZHRG9jdW1lbnQ6OnVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNvbnN0Cit2b2lk
IFNWR0RvY3VtZW50Ojp1cGRhdGVQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zKSBjb25zdAog
ewogICAgIGlmIChyb290RWxlbWVudCgpKSB7Ci0gICAgICAgIHJvb3RFbGVtZW50KCktPnNldEN1
cnJlbnRUcmFuc2xhdGUoRmxvYXRQb2ludChwb3MueCgpIC0gbV90cmFuc2xhdGUueCgpLCBtX3Ry
YW5zbGF0ZS55KCkgLSBwb3MueSgpKSk7CisgICAgICAgIHJvb3RFbGVtZW50KCktPnNldEN1cnJl
bnRUcmFuc2xhdGUoR3JhcGhpY3NQb2ludChwb3MueCgpIC0gbV90cmFuc2xhdGUueCgpLCBtX3Ry
YW5zbGF0ZS55KCkgLSBwb3MueSgpKSk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlX2gKIAog
I2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgogI2luY2x1ZGUgIlNW
R1BhdGhTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDMsMTUgKzQz
LDE1IEBACiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5
cGUmKTsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5kKFNWR1BhdGhTZWdU
eXBlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoRmxvYXRQb2ludCYp
OwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpOwogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KGZsb2F0Jik7CiAgICAgdmlydHVh
bCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZs
b2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdt
ZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3Vy
dmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50Jik7
Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9h
dCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1
cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGlj
c1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7
CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3Jh
cGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYs
IGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEdyYXBoaWNzUG9pbnQmKTsKIAogI2lmIENP
TVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKQEAgLTg2LDExICs4
NiwxMSBAQAogICAgICAgICByZXR1cm4gcmVhZFR5cGU8dW5zaWduZWQgc2hvcnQsIFVuc2lnbmVk
U2hvcnRCeXRlPigpOwogICAgIH0KIAotICAgIEZsb2F0UG9pbnQgcmVhZEZsb2F0UG9pbnQoKQor
ICAgIEdyYXBoaWNzUG9pbnQgcmVhZEdyYXBoaWNzUG9pbnQoKQogICAgIHsKICAgICAgICAgZmxv
YXQgeCA9IHJlYWRUeXBlPGZsb2F0LCBGbG9hdEJ5dGU+KCk7CiAgICAgICAgIGZsb2F0IHkgPSBy
ZWFkVHlwZTxmbG9hdCwgRmxvYXRCeXRlPigpOwotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCh4
LCB5KTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgfQogCiAgICAg
U1ZHUGF0aEJ5dGVTdHJlYW0qIG1fc3RyZWFtOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RyYW5zZm9ybURpc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDgg
KzIyLDggQEAKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1EaXN0YW5jZS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1NpemUuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKIAogI2luY2x1ZGUgPG1hdGguaD4K
QEAgLTYyLDE0ICs2MiwxNCBAQAogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRv
IHN1YnRyYWN0IHRvIG1hdHJpY2VzCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNWR1RyYW5z
Zm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6IHsKLSAgICAgICAgRmxvYXRTaXplIGNlbnRlckRp
c3RhbmNlID0gdG9TVkdUcmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKSAtIGZyb21TVkdUcmFuc2Zv
cm0ucm90YXRpb25DZW50ZXIoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNlbnRlckRpc3RhbmNl
ID0gdG9TVkdUcmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKSAtIGZyb21TVkdUcmFuc2Zvcm0ucm90
YXRpb25DZW50ZXIoKTsKICAgICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkg
LSBmcm9tU1ZHVHJhbnNmb3JtLmFuZ2xlKCk7CiAgICAgICAgIG1fY3ggPSBjZW50ZXJEaXN0YW5j
ZS53aWR0aCgpOwogICAgICAgICBtX2N5ID0gY2VudGVyRGlzdGFuY2UuaGVpZ2h0KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1f
VFJBTlNMQVRFOiB7Ci0gICAgICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbkRpc3RhbmNlID0gdG9T
VkdUcmFuc2Zvcm0udHJhbnNsYXRlKCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpOwor
ICAgICAgICBHcmFwaGljc1NpemUgdHJhbnNsYXRpb25EaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAgbV90
cmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgoKSwgdHJhbnNsYXRp
b25EaXN0YW5jZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzUsNyAr
MTM1LDcgQEAKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKICAgICB9CiAgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsKLSAgICAgICAgRmxvYXRTaXplIHNjYWxl
ID0gZmlyc3Quc2NhbGUoKSArIHNlY29uZC5zY2FsZSgpOworICAgICAgICBHcmFwaGljc1NpemUg
c2NhbGUgPSBmaXJzdC5zY2FsZSgpICsgc2Vjb25kLnNjYWxlKCk7CiAgICAgICAgIHRyYW5zZm9y
bS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVy
biB0cmFuc2Zvcm07CiAgICAgfQpAQCAtMjA0LDIwICsyMDQsMjAgQEAKICAgICBjYXNlIFNWR1Ry
YW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9NQVRSSVg6CiAgICAgICAgIHJldHVybiBTVkdUcmFuc2Zv
cm0odHJhbnNmb3JtLm1hdHJpeCgpICogbV90cmFuc2Zvcm0pOwogICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURTogewotICAgICAgICBGbG9hdFBvaW50IHRyYW5z
bGF0aW9uID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgpOwotICAgICAgICB0cmFuc2xhdGlvbiArPSBG
bG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5lKCksIG1fdHJhbnNmb3JtLmYo
KSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgdHJhbnNsYXRpb24gPSB0cmFuc2Zvcm0udHJhbnNs
YXRlKCk7CisgICAgICAgIHRyYW5zbGF0aW9uICs9IEdyYXBoaWNzU2l6ZTo6bmFycm93UHJlY2lz
aW9uKG1fdHJhbnNmb3JtLmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKICAgICAgICAgbmV3VHJhbnNm
b3JtLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGlvbi54KCksIHRyYW5zbGF0aW9uLnkoKSk7CiAgICAg
ICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpT
VkdfVFJBTlNGT1JNX1NDQUxFOiB7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZSA9IHRyYW5zZm9y
bS5zY2FsZSgpOwotICAgICAgICBzY2FsZSArPSBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbiht
X3RyYW5zZm9ybS5hKCksIG1fdHJhbnNmb3JtLmQoKSk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBz
Y2FsZSA9IHRyYW5zZm9ybS5zY2FsZSgpOworICAgICAgICBzY2FsZSArPSBHcmFwaGljc1NpemU6
Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5hKCksIG1fdHJhbnNmb3JtLmQoKSk7CiAgICAg
ICAgIG5ld1RyYW5zZm9ybS5zZXRTY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7
CiAgICAgICAgIHJldHVybiBuZXdUcmFuc2Zvcm07CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURTogewogICAgICAgICAvLyBGSVhNRTogSSdtIG5vdCBj
ZXJ0YWluIHRoZSB0cmFuc2xhdGlvbiBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseSBoZXJlCi0gICAg
ICAgIEZsb2F0UG9pbnQgY2VudGVyID0gdHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CisgICAg
ICAgIEdyYXBoaWNzUG9pbnQgY2VudGVyID0gdHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CiAg
ICAgICAgIG5ld1RyYW5zZm9ybS5zZXRSb3RhdGUodHJhbnNmb3JtLmFuZ2xlKCkgKyBtX2FuZ2xl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlci54KCkgKyBtX2N4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlci55KCkgKyBtX2N5KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUG9pbnRMaXN0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BvaW50TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNz
UG9pbnQ7CiAKLWNsYXNzIFNWR1BvaW50TGlzdCA6IHB1YmxpYyBWZWN0b3I8RmxvYXRQb2ludD4g
eworY2xhc3MgU1ZHUG9pbnRMaXN0IDogcHVibGljIFZlY3RvcjxHcmFwaGljc1BvaW50PiB7CiBw
dWJsaWM6CiAgICAgU1ZHUG9pbnRMaXN0KCkgeyB9CiAKQEAgLTQyLDcgKzQyLDcgQEAKIHRlbXBs
YXRlPD4KIHN0cnVjdCBTVkdQcm9wZXJ0eVRyYWl0czxTVkdQb2ludExpc3Q+IHsKICAgICBzdGF0
aWMgU1ZHUG9pbnRMaXN0IGluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIFNWR1BvaW50TGlzdCgpOyB9
Ci0gICAgdHlwZWRlZiBGbG9hdFBvaW50IExpc3RJdGVtVHlwZTsKKyAgICB0eXBlZGVmIEdyYXBo
aWNzUG9pbnQgTGlzdEl0ZW1UeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3Vy
Y2UuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBACiAKICAgICBjb25zdCBIYXNo
U2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXNGb3JFbGVtZW50KCkgY29uc3Q7CiAK
LSAgICBib29sIGJvdW5kaW5nQm94KEZsb2F0UmVjdCYsIFNWR0xvY2F0YWJsZTo6U3R5bGVVcGRh
dGVTdHJhdGVneSA9IFNWR0xvY2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAg
Ym9vbCBib3VuZGluZ0JveChHcmFwaGljc1JlY3QmLCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRl
U3RyYXRlZ3kgPSBTVkdMb2NhdGFibGU6OkFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXRDdXJzb3JFbGVtZW50KFNWR0N1cnNvckVsZW1lbnQqKTsKICAgICB2b2lkIGN1cnNv
ckVsZW1lbnRSZW1vdmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNl
ckZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFy
c2VyRmFjdG9yeS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhQYXJzZXJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBA
CiAgICAgcmV0dXJuIG9rOwogfQogCi1ib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRQb2lu
dEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFtLCBm
bG9hdCBsZW5ndGgsIEZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBTVkdQYXRoUGFyc2VyRmFjdG9y
eTo6Z2V0UG9pbnRBdExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0q
IHN0cmVhbSwgZmxvYXQgbGVuZ3RoLCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBBU1NF
UlQoc3RyZWFtKTsKICAgICBpZiAoc3RyZWFtLT5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtMTQyLDEzICsxNDIsMTMgQEAK
ICAgICBzZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNvbnRlbnRTdHlsZVR5cGVBdHRyLCB0eXBlKTsK
IH0KIAotRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KCkgY29uc3QKK0dyYXBoaWNz
UmVjdCBTVkdTVkdFbGVtZW50Ojp2aWV3cG9ydCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHZp
ZXdSZWN0YW5nbGU7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdSZWN0YW5nbGU7CiAgICAgaWYgKCFp
c091dGVybW9zdFNWRygpKQotICAgICAgICB2aWV3UmVjdGFuZ2xlLnNldExvY2F0aW9uKEZsb2F0
UG9pbnQoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKKyAgICAgICAgdmlld1Jl
Y3RhbmdsZS5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZh
bHVlKHRoaXMpKSk7CiAKLSAgICB2aWV3UmVjdGFuZ2xlLnNldFNpemUoRmxvYXRTaXplKHdpZHRo
KCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKSk7ICAgIAorICAgIHZpZXdSZWN0
YW5nbGUuc2V0U2l6ZShHcmFwaGljc1NpemUod2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCku
dmFsdWUodGhpcykpKTsgICAgCiAgICAgcmV0dXJuIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmll
d1JlY3RhbmdsZS53aWR0aCgpLCB2aWV3UmVjdGFuZ2xlLmhlaWdodCgpKS5tYXBSZWN0KHZpZXdS
ZWN0YW5nbGUpOwogfQogCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICBmcmFtZS0+c2V0UGFnZVpv
b21GYWN0b3Ioc2NhbGUpOwogfQogCi12b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRUcmFu
c2xhdGUoY29uc3QgRmxvYXRQb2ludCYgdHJhbnNsYXRpb24pCit2b2lkIFNWR1NWR0VsZW1lbnQ6
OnNldEN1cnJlbnRUcmFuc2xhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgdHJhbnNsYXRpb24pCiB7
CiAgICAgbV90cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uOwogICAgIHVwZGF0ZUN1cnJlbnRUcmFu
c2xhdGUoKTsKQEAgLTM4OSwxOSArMzg5LDE5IEBACiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBt
ZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAotTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6OmdldEludGVy
c2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCopCitOb2RlTGlzdCogU1ZH
U1ZHRWxlbWVudDo6Z2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBHcmFwaGljc1JlY3QmLCBTVkdF
bGVtZW50KikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDExMjc0KQog
ICAgIHJldHVybiAwOwogfQogCi1Ob2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0RW5jbG9zdXJl
TGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KikKK05vZGVMaXN0KiBTVkdTVkdFbGVt
ZW50OjpnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0VsZW1lbnQqKQog
ewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzQpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLWJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVu
dCosIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRl
cnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICAv
LyBUT0RPIDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAgICAgLy8gRklYTUU6
IFdoeSBpcyBlbGVtZW50IGlnbm9yZWQ/PwpAQCAtNDA5LDcgKzQwOSw3IEBACiAgICAgcmV0dXJu
IHJlY3QuaW50ZXJzZWN0cyhnZXRCQm94KCkpOwogfQogCi1ib29sIFNWR1NWR0VsZW1lbnQ6OmNo
ZWNrRW5jbG9zdXJlKFNWR0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIFNW
R1NWR0VsZW1lbnQ6OmNoZWNrRW5jbG9zdXJlKFNWR0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QpCiB7CiAgICAgLy8gVE9ETyA6IHRha2UgaW50byBhY2NvdW50IHBvaW50ZXItZXZl
bnRzPwogICAgIC8vIEZJWE1FOiBXaHkgaXMgZWxlbWVudCBpZ25vcmVkPz8KQEAgLTQzOCw5ICs0
MzgsOSBAQAogICAgIHJldHVybiBTVkdBbmdsZSgpOwogfQogCi1GbG9hdFBvaW50IFNWR1NWR0Vs
ZW1lbnQ6OmNyZWF0ZVNWR1BvaW50KCkKK0dyYXBoaWNzUG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3Jl
YXRlU1ZHUG9pbnQoKQogewotICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUG9pbnQoKTsKIH0KIAogU1ZHTWF0cml4IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01h
dHJpeCgpCkBAIC00NDgsOSArNDQ4LDkgQEAKICAgICByZXR1cm4gU1ZHTWF0cml4KCk7CiB9CiAK
LUZsb2F0UmVjdCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdSZWN0KCkKK0dyYXBoaWNzUmVjdCBT
VkdTVkdFbGVtZW50OjpjcmVhdGVTVkdSZWN0KCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBTVkdUcmFuc2Zvcm0gU1ZHU1ZHRWxl
bWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtKCkKQEAgLTQ3Niw3ICs0NzYsNyBAQAogICAgICAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsKICAgICAgICAg
ICAgIC8vIFRyYW5zbGF0ZSBpbiBvdXIgQ1NTIHBhcmVudCBjb29yZGluYXRlIHNwYWNlCiAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggQ1NTIHRy
YW5zZm9ybXMuCi0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2F0aW9uID0gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIEdy
YXBoaWNzUG9pbnQgbG9jYXRpb24gPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNz
UG9pbnQoKSwgZmFsc2UsIHRydWUpOwogCiAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIGhlcmUh
IGxvY2FsVG9BYnNvbHV0ZSgpIGluY2x1ZGVzIHRoZSB4L3kgb2Zmc2V0IGNvbWluZyBmcm9tIHRo
ZSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKCksIGJlY2F1c2UKICAgICAgICAgICAgIC8vIFJlbmRl
clNWR1Jvb3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSAoY2FsbGVkIHRocm91Z2ggbWFw
TG9jYWxUb0NvbnRhaW5lcigpLCBjYWxsZWQgZnJvbSBsb2NhbFRvQWJzb2x1dGUoKSkKQEAgLTU2
NiwxMiArNTY2LDEyIEBACiAgICAgcmV0dXJuICFwYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgp
OwogfQogCi1GbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXdCb3hSZWN0KCkgY29u
c3QKK0dyYXBoaWNzUmVjdCBTVkdTVkdFbGVtZW50OjpjdXJyZW50Vmlld0JveFJlY3QoKSBjb25z
dAogewogICAgIGlmICh1c2VDdXJyZW50VmlldygpKSB7CiAgICAgICAgIGlmIChTVkdWaWV3U3Bl
YyogdmlldyA9IGN1cnJlbnRWaWV3KCkpIC8vIHdoYXQgaWYgd2Ugc2hvdWxkIHVzZSBpdCBidXQg
aXQgaXMgbm90IHNldD8KICAgICAgICAgICAgIHJldHVybiB2aWV3LT52aWV3Qm94KCk7Ci0gICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwog
ICAgIH0KIAogICAgIHJldHVybiB2aWV3Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
I2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICBp
ZiAocmFkaXVzIDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhdGguYWRkRWxsaXBzZShG
bG9hdFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgY3koKS52YWx1ZSh0aGlzKSAtIHJh
ZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMikpOworICAgIHBhdGguYWRkRWxsaXBzZShHcmFw
aGljc1JlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1cywgY3koKS52YWx1ZSh0aGlzKSAtIHJh
ZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMikpOwogfQogCiBib29sIFNWR0NpcmNsZUVsZW1l
bnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZWRQb2ludExpc3QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDcgQEAKICAgICBpZiAoIWl0ZW1Db3VudCB8fCBpdGVtQ291bnQgIT0gdG9Qb2lu
dExpc3Quc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IGl0ZW1Db3VudDsgKytuKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQmIHRvID0gdG9Qb2ludExp
c3QuYXQobik7CisgICAgICAgIEdyYXBoaWNzUG9pbnQmIHRvID0gdG9Qb2ludExpc3QuYXQobik7
CiAgICAgICAgIHRvICs9IGZyb21Qb2ludExpc3QuYXQobik7CiAgICAgfQogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwx
NCBAQAogICAgIGJvb2wgYmxlbmRBcmNUb1NlZ21lbnQoKTsKIAogICAgIGZsb2F0IGJsZW5kQW5p
bWF0ZWREaW1lbnNvbmFsRmxvYXQoZmxvYXQsIGZsb2F0LCBGbG9hdEJsZW5kTW9kZSk7Ci0gICAg
RmxvYXRQb2ludCBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBmcm9t
LCBjb25zdCBGbG9hdFBvaW50JiB0byk7CisgICAgR3JhcGhpY3NQb2ludCBibGVuZEFuaW1hdGVk
R3JhcGhpY3NQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBmcm9tLCBjb25zdCBHcmFwaGljc1Bv
aW50JiB0byk7CiAKICAgICBTVkdQYXRoU291cmNlKiBtX2Zyb21Tb3VyY2U7CiAgICAgU1ZHUGF0
aFNvdXJjZSogbV90b1NvdXJjZTsKICAgICBTVkdQYXRoQ29uc3VtZXIqIG1fY29uc3VtZXI7CiAK
LSAgICBGbG9hdFBvaW50IG1fZnJvbUN1cnJlbnRQb2ludDsKLSAgICBGbG9hdFBvaW50IG1fdG9D
dXJyZW50UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2Zyb21DdXJyZW50UG9pbnQ7CisgICAg
R3JhcGhpY3NQb2ludCBtX3RvQ3VycmVudFBvaW50OwogICAgIAogICAgIFBhdGhDb29yZGluYXRl
TW9kZSBtX2Zyb21Nb2RlOwogICAgIFBhdGhDb29yZGluYXRlTW9kZSBtX3RvTW9kZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBACiAKIFBhc3NSZWZQdHI8TGlnaHRTb3Vy
Y2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIEZs
b2F0UG9pbnQzRCBwb3MoeCgpLCB5KCksIHooKSk7Ci0gICAgRmxvYXRQb2ludDNEIGRpcmVjdGlv
bihwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKyAgICBHcmFwaGljc1Bv
aW50M0QgcG9zKHgoKSwgeSgpLCB6KCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBkaXJlY3Rpb24o
cG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7CiAKICAgICByZXR1cm4gU3Bv
dExpZ2h0U291cmNlOjpjcmVhdGUocG9zLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQoKSwg
bGltaXRpbmdDb25lQW5nbGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICBp
ZiAoYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKQogICAgICAgIHJldHVybiBjb252
b2x2ZU1hdHJpeC0+c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgoKSwgdGFyZ2V0WSgp
KSk7CiAgICAgaWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikK
LSAgICAgICByZXR1cm4gY29udm9sdmVNYXRyaXgtPnNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQ
b2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpKSk7CisgICAgICAg
cmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRLZXJuZWxVbml0TGVuZ3RoKEdyYXBoaWNzUG9pbnQo
a2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSkpOwogICAgIGlmIChhdHRy
TmFtZSA9PSBTVkdOYW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCiAgICAgICAgIHJldHVybiBjb252
b2x2ZU1hdHJpeC0+c2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhhKCkpOwogCkBAIC0zMDcs
NyArMzA3LDcgQEAKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbnZvbHZl
TWF0cml4OjpjcmVhdGUoZmlsdGVyLAogICAgICAgICAgICAgICAgICAgICBJbnRTaXplKG9yZGVy
WFZhbHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAg
YmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCks
Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2Vy
bmVsVW5pdExlbmd0aFgoKSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKKyAgICAg
ICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxV
bml0TGVuZ3RoWCgpKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwogICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxl
YXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJM
RShTVkdfQU5JTUFUSU9OKQogI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHlwZS5oIgogCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZH
QW5nbGUuaCIKICNpbmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpA
QCAtMTg5LDcgKzE4OSw3IEBACiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZS5yZWxlYXNlKCk7CiB9
CiAKLVBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJl
Y3QoRmxvYXRSZWN0KiByZWN0KQorUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlUmVjdChHcmFwaGljc1JlY3QqIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJl
Y3QpOwogICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+IGFuaW1hdGVkVHlwZSA9IGFkb3B0UHRy
KG5ldyBTVkdBbmltYXRlZFR5cGUoQW5pbWF0ZWRSZWN0KSk7CkBAIC0yNzcsNyArMjc3LDcgQEAK
ICAgICByZXR1cm4gKm1fZGF0YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogfQogCi1GbG9hdFJlY3Qm
IFNWR0FuaW1hdGVkVHlwZTo6cmVjdCgpCitHcmFwaGljc1JlY3QmIFNWR0FuaW1hdGVkVHlwZTo6
cmVjdCgpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFJlY3QpOwogICAgIHJldHVy
biAqbV9kYXRhLnJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0
QnVpbGRlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U2VnTGlzdEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2RlZmlu
ZSBTVkdQYXRoU2VnTGlzdEJ1aWxkZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlNWR1Bh
dGhDb25zdW1lci5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
UGF0aFNlZ0xpc3QuaCIKQEAgLTUxLDE4ICs1MSwxOCBAQAogICAgIH0KIAogICAgIC8vIFVzZWQg
aW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFs
IHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGlu
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAgICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVk
UGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9h
dCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21v
b3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJv
b2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25z
dCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZs
b2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAgICAgU1ZHUGF0aEVsZW1lbnQqIG1fcGF0aEVs
ZW1lbnQ7CiAgICAgU1ZHUGF0aFNlZ0xpc3QqIG1fcGF0aFNlZ0xpc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk5LDcgKzY5OSw3
IEBACiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9y
dEVycm9yKCJOb3QgYWxsb3dlZCB0byB1c2UgaW5kaXJlY3QgcmVmZXJlbmNlIGluIDxjbGlwLXBh
dGg+Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQqPihuKS0+dG9DbGlwUGF0aChwYXRoKTsKLSAgICAgICAgICAg
IHBhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlz
KSkpOworICAgICAgICAgICAgcGF0aC50cmFuc2xhdGUoR3JhcGhpY3NTaXplKHgoKS52YWx1ZSh0
aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7CiAgICAgICAgICAgICBwYXRoLnRyYW5zZm9ybShhbmlt
YXRlZExvY2FsVHJhbnNmb3JtKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1BhdHRlcm5BdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAKICAgICBTVkdMZW5ndGggeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogICAgIFNWR0xl
bmd0aCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBTVkdMZW5ndGggaGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLSAgICBGbG9hdFJlY3Qgdmlld0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld0JveDsgfQorICAgIEdyYXBoaWNzUmVjdCB2aWV3Qm94KCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3Qm94OyB9CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlv
OyB9CiAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5n
Qm94TW9kZTsgfQogICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlQ29udGVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRpbmdCb3hNb2RlQ29udGVudDsgfQpAQCAtODcsNyArODcsNyBAQAogICAgICAg
ICBtX2hlaWdodFNldCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Vmlld0JveChj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQorICAgIHZvaWQgc2V0Vmlld0JveChjb25zdCBHcmFwaGlj
c1JlY3QmIHZhbHVlKQogICAgIHsKICAgICAgICAgbV92aWV3Qm94ID0gdmFsdWU7CiAgICAgICAg
IG1fdmlld0JveFNldCA9IHRydWU7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICBTVkdMZW5ndGgg
bV95OwogICAgIFNWR0xlbmd0aCBtX3dpZHRoOwogICAgIFNWR0xlbmd0aCBtX2hlaWdodDsKLSAg
ICBGbG9hdFJlY3QgbV92aWV3Qm94OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdCb3g7CiAgICAg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CiAgICAgYm9vbCBt
X2JvdW5kaW5nQm94TW9kZTsKICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlQ29udGVudDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw3IEBACiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VNb3ZlVG9TZWdtZW50KCkK
IHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0
UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRhcmdldFBvaW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC02OCw3ICs2OCw3IEBACiAKIGJvb2wgU1ZH
UGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdl
dFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJj
ZS0+cGFyc2VMaW5lVG9TZWdtZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0xMTksOSArMTE5LDkgQEAKIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9DdWJpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9p
bnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2lu
dCBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCB0
YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
cG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xNDIsOCArMTQyLDggQEAKIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9p
bnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDI7CisgICAgR3JhcGhpY3NQ
b2ludCB0YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnQocG9pbnQyLCB0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgIG1fY29udHJvbFBvaW50ID0gbV9jdXJyZW50
UG9pbnQ7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAg
R3JhcGhpY3NQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgcG9pbnQxLnNj
YWxlKDIsIDIpOwogICAgICAgICBwb2ludDEubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9j
b250cm9sUG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKSB7CkBAIC0xNzMsMTYgKzE3MywxNiBAQAogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAg
IEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAg
R3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KHBvaW50MSwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcp
IHsKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBwb2ludDE7Ci0gICAgICAgIEZsb2F0UG9pbnQg
cG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQxID0g
bV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2ludC54
KCksIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0
YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9sUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkg
KyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDIo
dGFyZ2V0UG9pbnQueCgpICsgMiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgp
ICsgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRp
dmVDb29yZGluYXRlcykgewogICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVudFBv
aW50LngoKSwgMiAqIG1fY3VycmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIubW92
ZSgzICogbV9jdXJyZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAgLTIw
Myw3ICsyMDMsNyBAQAogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCB0YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9R
dWFkcmF0aWNTbW9vdGhTZWdtZW50KHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0yMTQsMTEgKzIxNCwxMSBAQAogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3Vy
cmVudFBvaW50OwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJz
aW5nKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3ViaWNQb2ludCA9IG1fY3VycmVudFBvaW50Owor
ICAgICAgICBHcmFwaGljc1BvaW50IGN1YmljUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKICAgICAg
ICAgY3ViaWNQb2ludC5zY2FsZSgyLCAyKTsKICAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2Nv
bnRyb2xQb2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50
IHBvaW50MShtX2N1cnJlbnRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVu
dFBvaW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQyKHRhcmdldFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgp
ICsgMiAqIGN1YmljUG9pbnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDEobV9j
dXJyZW50UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55KCkg
KyAyICogY3ViaWNQb2ludC55KCkpOworICAgICAgICBHcmFwaGljc1BvaW50IHBvaW50Mih0YXJn
ZXRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBj
dWJpY1BvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykgewogICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICAgICAg
dGFyZ2V0UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICBm
bG9hdCBhbmdsZTsKICAgICBib29sIGxhcmdlQXJjOwogICAgIGJvb2wgc3dlZXA7Ci0gICAgRmxv
YXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAg
IGlmICghbV9zb3VyY2UtPnBhcnNlQXJjVG9TZWdtZW50KHJ4LCByeSwgYW5nbGUsIGxhcmdlQXJj
LCBzd2VlcCwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI2Myw3
ICsyNjMsNyBAQAogICAgIH0KIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxp
emVkUGFyc2luZykgewotICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50
OworICAgICAgICBHcmFwaGljc1BvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAg
ICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpCiAgICAgICAgICAgICB0YXJnZXRQ
b2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQ
b2ludDsKQEAgLTI4MCw5ICsyODAsOSBAQAogCiAgICAgbV9wYXRoUGFyc2luZ01vZGUgPSBwYXRo
UGFyc2luZ01vZGU7CiAKLSAgICBtX2NvbnRyb2xQb2ludCA9IEZsb2F0UG9pbnQoKTsKLSAgICBt
X2N1cnJlbnRQb2ludCA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX3N1YlBhdGhQb2ludCA9IEZsb2F0
UG9pbnQoKTsKKyAgICBtX2NvbnRyb2xQb2ludCA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICBtX2N1
cnJlbnRQb2ludCA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICBtX3N1YlBhdGhQb2ludCA9IEdyYXBo
aWNzUG9pbnQoKTsKICAgICBtX2Nsb3NlUGF0aCA9IHRydWU7CiAKICAgICAvLyBTa2lwIGFueSBs
ZWFkaW5nIHNwYWNlcy4KQEAgLTQwMSwxNSArNDAxLDE1IEBACiAvLyBUaGlzIHdvcmtzIGJ5IGNv
bnZlcnRpbmcgdGhlIFNWRyBhcmMgdG8gInNpbXBsZSIgYmV6aWVycy4KIC8vIFBhcnRseSBhZGFw
dGVkIGZyb20gTmlrbydzIGNvZGUgaW4ga2RlbGlicy9rZGVjb3JlL3N2Z2ljb25zLgogLy8gU2Vl
IGFsc28gU1ZHIGltcGxlbWVudGF0aW9uIG5vdGVzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcv
aW1wbG5vdGUuaHRtbCNBcmNDb252ZXJzaW9uRW5kcG9pbnRUb0NlbnRlcgotYm9vbCBTVkdQYXRo
UGFyc2VyOjpkZWNvbXBvc2VBcmNUb0N1YmljKGZsb2F0IGFuZ2xlLCBmbG9hdCByeCwgZmxvYXQg
cnksIEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcpCitib29sIFNWR1BhdGhQYXJzZXI6OmRlY29tcG9zZUFyY1Rv
Q3ViaWMoZmxvYXQgYW5nbGUsIGZsb2F0IHJ4LCBmbG9hdCByeSwgR3JhcGhpY3NQb2ludCYgcG9p
bnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVw
RmxhZykKIHsKLSAgICBGbG9hdFNpemUgbWlkUG9pbnREaXN0YW5jZSA9IHBvaW50MSAtIHBvaW50
MjsKKyAgICBHcmFwaGljc1NpemUgbWlkUG9pbnREaXN0YW5jZSA9IHBvaW50MSAtIHBvaW50MjsK
ICAgICBtaWRQb2ludERpc3RhbmNlLnNjYWxlKDAuNWYpOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHBvaW50VHJhbnNmb3JtOwogICAgIHBvaW50VHJhbnNmb3JtLnJvdGF0ZSgtYW5nbGUpOwogCi0g
ICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZE1pZFBvaW50ID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9p
bnQoRmxvYXRQb2ludChtaWRQb2ludERpc3RhbmNlLndpZHRoKCksIG1pZFBvaW50RGlzdGFuY2Uu
aGVpZ2h0KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IHRyYW5zZm9ybWVkTWlkUG9pbnQgPSBwb2lu
dFRyYW5zZm9ybS5tYXBQb2ludChHcmFwaGljc1BvaW50KG1pZFBvaW50RGlzdGFuY2Uud2lkdGgo
KSwgbWlkUG9pbnREaXN0YW5jZS5oZWlnaHQoKSkpOwogICAgIGZsb2F0IHNxdWFyZVJ4ID0gcngg
KiByeDsKICAgICBmbG9hdCBzcXVhcmVSeSA9IHJ5ICogcnk7CiAgICAgZmxvYXQgc3F1YXJlWCA9
IHRyYW5zZm9ybWVkTWlkUG9pbnQueCgpICogdHJhbnNmb3JtZWRNaWRQb2ludC54KCk7CkBAIC00
MjksNyArNDI5LDcgQEAKIAogICAgIHBvaW50MSA9IHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KHBv
aW50MSk7CiAgICAgcG9pbnQyID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQyKTsKLSAg
ICBGbG9hdFNpemUgZGVsdGEgPSBwb2ludDIgLSBwb2ludDE7CisgICAgR3JhcGhpY3NTaXplIGRl
bHRhID0gcG9pbnQyIC0gcG9pbnQxOwogCiAgICAgZmxvYXQgZCA9IGRlbHRhLndpZHRoKCkgKiBk
ZWx0YS53aWR0aCgpICsgZGVsdGEuaGVpZ2h0KCkgKiBkZWx0YS5oZWlnaHQoKTsKICAgICBmbG9h
dCBzY2FsZUZhY3RvclNxdWFyZWQgPSBzdGQ6Om1heCgxIC8gZCAtIDAuMjVmLCAwLmYpOwpAQCAt
NDM5LDcgKzQzOSw3IEBACiAgICAgICAgIHNjYWxlRmFjdG9yID0gLXNjYWxlRmFjdG9yOwogCiAg
ICAgZGVsdGEuc2NhbGUoc2NhbGVGYWN0b3IpOwotICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQg
PSBGbG9hdFBvaW50KDAuNWYgKiAocG9pbnQxLngoKSArIHBvaW50Mi54KCkpIC0gZGVsdGEuaGVp
Z2h0KCksCisgICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQb2ludCA9IEdyYXBoaWNzUG9pbnQoMC41
ZiAqIChwb2ludDEueCgpICsgcG9pbnQyLngoKSkgLSBkZWx0YS5oZWlnaHQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmICogKHBvaW50MS55KCkgKyBwb2lu
dDIueSgpKSArIGRlbHRhLndpZHRoKCkpOwogCiAgICAgZmxvYXQgdGhldGExID0gYXRhbjJmKHBv
aW50MS55KCkgLSBjZW50ZXJQb2ludC55KCksIHBvaW50MS54KCkgLSBjZW50ZXJQb2ludC54KCkp
OwpAQCAtNDcwLDkgKzQ3MCw5IEBACiAgICAgICAgIGZsb2F0IHNpbkVuZFRoZXRhID0gc2luZihl
bmRUaGV0YSk7CiAgICAgICAgIGZsb2F0IGNvc0VuZFRoZXRhID0gY29zZihlbmRUaGV0YSk7CiAK
LSAgICAgICAgcG9pbnQxID0gRmxvYXRQb2ludChjb3NTdGFydFRoZXRhIC0gdCAqIHNpblN0YXJ0
VGhldGEsIHNpblN0YXJ0VGhldGEgKyB0ICogY29zU3RhcnRUaGV0YSk7CisgICAgICAgIHBvaW50
MSA9IEdyYXBoaWNzUG9pbnQoY29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRhLCBzaW5T
dGFydFRoZXRhICsgdCAqIGNvc1N0YXJ0VGhldGEpOwogICAgICAgICBwb2ludDEubW92ZShjZW50
ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgdGFyZ2V0
UG9pbnQgPSBGbG9hdFBvaW50KGNvc0VuZFRoZXRhLCBzaW5FbmRUaGV0YSk7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGNvc0VuZFRoZXRhLCBzaW5F
bmRUaGV0YSk7CiAgICAgICAgIHRhcmdldFBvaW50Lm1vdmUoY2VudGVyUG9pbnQueCgpLCBjZW50
ZXJQb2ludC55KCkpOwogICAgICAgICBwb2ludDIgPSB0YXJnZXRQb2ludDsKICAgICAgICAgcG9p
bnQyLm1vdmUodCAqIHNpbkVuZFRoZXRhLCAtdCAqIGNvc0VuZFRoZXRhKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhTZWdMaXN0U291cmNlX2gKIAogI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xp
c3QuaCIKICNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCkBAIC00NSwxNSArNDUsMTUgQEAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpOwogICAg
IHZpcnR1YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpOwogCi0g
ICAgdmlydHVhbCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBi
b29sIHBhcnNlTW92ZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29s
IHBhcnNlTGluZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VD
dXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYp
OwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQ
b2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYs
IGJvb2wmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1Ymlj
U2VnbWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNz
UG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50
Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBm
bG9hdCYsIGJvb2wmLCBib29sJiwgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgY29uc3QgU1ZHUGF0
aFNlZ0xpc3QmIG1fcGF0aFNlZ0xpc3Q7CiAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IG1fc2VnbWVu
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4K
LSAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBo
aWNzUG9pbnQgYWJzUG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgcmV0dXJuIGFic1Bv
cy54KCk7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgot
ICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhp
Y3NQb2ludCBhYnNQb3MgPSByLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICByZXR1cm4gYWJzUG9z
LnkoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgcmV0dXJuIFBhdGgo
KTsKICAgICAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGgg
dHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IG9iai0+bG9jYWxUb0Fic29sdXRl
KCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgpOwog
CiAgICAgLy8gRGVmYXVsdCBzaG91bGQgZGVmYXVsdCB0byB0aGUgc2l6ZSBvZiB0aGUgY29udGFp
bmluZyBvYmplY3QuCiAgICAgSW50U2l6ZSBzaXplID0gbV9sYXN0U2l6ZTsKQEAgLTExNCw3ICsx
MTQsNyBAQAogICAgICAgICBwLnRyYW5zZm9ybSh6b29tVHJhbnNmb3JtKTsKICAgICB9CiAKLSAg
ICBwLnRyYW5zbGF0ZShhYnNQb3MgLSBGbG9hdFBvaW50KCkpOworICAgIHAudHJhbnNsYXRlKGFi
c1BvcyAtIEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgcmV0dXJuIHA7CiB9CiAgICAgCkBAIC0xNDcs
OSArMTQ3LDkgQEAKICAgICAgICAgY2FzZSBQb2x5OgogICAgICAgICAgICAgaWYgKG1fY29vcmRz
TGVuID49IDYpIHsKICAgICAgICAgICAgICAgICBpbnQgbnVtUG9pbnRzID0gbV9jb29yZHNMZW4g
LyAyOwotICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQobV9jb29yZHNbMF0u
Y2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbMV0uY2FsY01pblZhbHVlKGhlaWdodCkpKTsK
KyAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KG1fY29vcmRzWzBdLmNh
bGNNaW5WYWx1ZSh3aWR0aCksIG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7CiAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBudW1Qb2ludHM7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludChtX2Nvb3Jkc1tpICogMl0u
Y2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbaSAqIDIgKyAxXS5jYWxjTWluVmFsdWUoaGVp
Z2h0KSkpOworICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhHcmFwaGljc1BvaW50
KG1fY29vcmRzW2kgKiAyXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1tpICogMiArIDFd
LmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7CiAgICAgICAgICAgICAgICAgcGF0aC5jbG9zZVN1YnBh
dGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTU3LDcgKzE1Nyw3
IEBACiAgICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gMykgewogICAgICAgICAgICAgICAg
IExlbmd0aCByYWRpdXMgPSBtX2Nvb3Jkc1syXTsKICAgICAgICAgICAgICAgICBpbnQgciA9IG1p
bihyYWRpdXMuY2FsY01pblZhbHVlKHdpZHRoKSwgcmFkaXVzLmNhbGNNaW5WYWx1ZShoZWlnaHQp
KTsKLSAgICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KG1fY29vcmRzWzBd
LmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0
KSAtIHIsIDIgKiByLCAyICogcikpOworICAgICAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShH
cmFwaGljc1JlY3QobV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSAtIHIsIG1fY29vcmRz
WzFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpIC0gciwgMiAqIHIsIDIgKiByKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWN0OgpAQCAtMTY2LDExICsx
NjYsMTEgQEAKICAgICAgICAgICAgICAgICBpbnQgeTAgPSBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFs
dWUoaGVpZ2h0KTsKICAgICAgICAgICAgICAgICBpbnQgeDEgPSBtX2Nvb3Jkc1syXS5jYWxjTWlu
VmFsdWUod2lkdGgpOwogICAgICAgICAgICAgICAgIGludCB5MSA9IG1fY29vcmRzWzNdLmNhbGNN
aW5WYWx1ZShoZWlnaHQpOwotICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3Qo
eDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKSk7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0
KEdyYXBoaWNzUmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERlZmF1bHQ6Ci0gICAgICAgICAgICBw
YXRoLmFkZFJlY3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAg
IHBhdGguYWRkUmVjdChHcmFwaGljc1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW5rbm93bjoKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgcGFzcyB0cnVlIGZvciB1c2VUcmFuc2Zvcm1z
LgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWCgp
LCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgpKSk7CisgICAgR3JhcGhp
Y3NQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0gcmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChHcmFw
aGljc1BvaW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPnBhZ2VYKCksIHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPnBhZ2VZKCkpKTsKICAgICBpbnQgeCA9IGFic29s
dXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJzb2x1dGVQb3NpdGlvbi55KCk7CiAgICAg
dXJsICs9ICI/IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsMTMgKzIwMywxMyBAQAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmRpZERyYXcoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIgb3VyIGlt
YWdlIHNuYXBzaG90IGlmIHdlIGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSBy
ZW5kZXJCb3goKSkgewotICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJv
eFJlY3QoKTsKLSAgICAgICAgRmxvYXRSZWN0IHIgPSBtYXBSZWN0KHJlY3QsIEZsb2F0UmVjdCgw
LCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZGVzdFJlY3QpOworICAgICAg
ICBHcmFwaGljc1JlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKKyAgICAgICAg
R3JhcGhpY3NSZWN0IHIgPSBtYXBSZWN0KHJlY3QsIEdyYXBoaWNzUmVjdCgwLCAwLCBzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZGVzdFJlY3QpOwogICAgICAgICByLmludGVyc2Vj
dChkZXN0UmVjdCk7CiAgICAgICAgIGlmIChyLmlzRW1wdHkoKSB8fCBtX2RpcnR5UmVjdC5jb250
YWlucyhyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI2NSw3ICsyNjUsNyBAQAogdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICAvLyBDbGVhciB0aGUg
ZGlydHkgcmVjdAotICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9kaXJ0eVJl
Y3QgPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MSw3ICszNzEsNyBAQAogI2VuZGlmCiB9CiAKLUlu
dFJlY3QgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxv
YXRSZWN0JiBsb2dpY2FsUmVjdCkgY29uc3QKK0ludFJlY3QgSFRNTENhbnZhc0VsZW1lbnQ6OmNv
bnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgR3JhcGhpY3NSZWN0JiBsb2dpY2FsUmVjdCkgY29u
c3QKIHsKICAgICAvLyBQcmV2ZW50IHVuZGVyL292ZXJmbG93IGJ5IGVuc3VyaW5nIHRoZSByZWN0
J3MgYm91bmRzIHN0YXkgd2l0aGluIGludGVnZXItZXhwcmVzc2libGUgcmFuZ2UKICAgICBpbnQg
bGVmdCA9IGNsYW1wVG9JbnRlZ2VyKGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2Fs
ZUZhY3RvcikpOwpAQCAtMzgyLDcgKzM4Miw3IEBACiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CiAKLUludFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dp
Y2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkgY29uc3QKK0ludFNpemUg
SFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgR3JhcGhpY3NT
aXplJiBsb2dpY2FsU2l6ZSkgY29uc3QKIHsKICAgICAvLyBQcmV2ZW50IG92ZXJmbG93IGJ5IGVu
c3VyaW5nIHRoZSByZWN0J3MgYm91bmRzIHN0YXkgd2l0aGluIGludGVnZXItZXhwcmVzc2libGUg
cmFuZ2UKICAgICBmbG9hdCB3aWR0aCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKGxvZ2ljYWxTaXpl
LndpZHRoKCkgKiBtX3BhZ2VTY2FsZUZhY3RvcikpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiAKICAg
ICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IHRydWU7CiAKLSAgICBGbG9hdFNpemUgdW5zY2Fs
ZWRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBHcmFwaGljc1NpemUgdW5zY2FsZWRTaXpl
KHdpZHRoKCksIGhlaWdodCgpKTsKICAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRv
RGV2aWNlKHVuc2NhbGVkU2l6ZSk7CiAgICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUuaGVp
Z2h0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzOSw3ICs0MzksNyBAQAogICAgIC8vIHdoZXJl
IEltYWdlQnVmZmVyOjpjcmVhdGUoKSByZXR1cm5zIDAsIGhvd2V2ZXIgd2UgY291bGQgc3RpbGwg
YmUgbG93IG9uIG1lbW9yeS4KICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVy
bjsKLSAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZShzaXplLndp
ZHRoKCkgLyB1bnNjYWxlZFNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAvIHVuc2NhbGVkU2l6
ZS5oZWlnaHQoKSkpOworICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoR3JhcGhp
Y3NTaXplKHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
IC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKSk7CiAgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKICAgICBtX2ltYWdlQnVmZmVyLT5j
b250ZXh0KCktPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoRGVmYXVsdEludGVycG9sYXRp
b25RdWFsaXR5KTsKIApAQCAtNDg3LDcgKzQ4Nyw3IEBACiBBZmZpbmVUcmFuc2Zvcm0gSFRNTENh
bnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAogewogICAgIEFTU0VSVChtX2hhc0Ny
ZWF0ZWRJbWFnZUJ1ZmZlcik7Ci0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBo
ZWlnaHQoKSk7CisgICAgR3JhcGhpY3NTaXplIHVuc2NhbGVkU2l6ZSh3aWR0aCgpLCBoZWlnaHQo
KSk7CiAgICAgSW50U2l6ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNp
emUpOwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgaWYgKHNpemUud2lkdGgo
KSAmJiBzaXplLmhlaWdodCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgSFRN
TENhbnZhc0VsZW1lbnRfaAogI2RlZmluZSBIVE1MQ2FudmFzRWxlbWVudF9oCiAKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIApAQCAtNTUsNyArNTUsNyBAQAogcHVi
bGljOgogICAgIHZpcnR1YWwgfkNhbnZhc09ic2VydmVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgY2hh
bmdlZFJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFz
RWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50KikgPSAwOwogfTsKQEAg
LTk1LDcgKzk1LDcgQEAKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAsIGVj
KTsgfQogCiAgICAgLy8gVXNlZCBmb3IgcmVuZGVyaW5nCi0gICAgdm9pZCBkaWREcmF3KGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZGlkRHJhdyhjb25zdCBHcmFwaGljc1JlY3QmKTsKIAog
ICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogCkBAIC0xMTEsOCArMTExLDggQEAKICAgICB2b2lk
IG1ha2VQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgdm9pZCBjbGVhclByZXNlbnRhdGlvbkNvcHko
KTsKIAotICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdDsKLSAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRT
aXplJikgY29uc3Q7CisgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEdy
YXBoaWNzUmVjdCYpIGNvbnN0OworICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShj
b25zdCBHcmFwaGljc1NpemUmKSBjb25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRUb1ZhbGlkRGV2
aWNlU2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25zdDsKIAogICAgIFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAg
Ym9vbCBtX3JlbmRlcmVySXNDYW52YXM7CiAKICAgICBib29sIG1faWdub3JlUmVzZXQ7Ci0gICAg
RmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX2RpcnR5UmVjdDsKIAog
ICAgIGZsb2F0IG1fcGFnZVNjYWxlRmFjdG9yOwogICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRo
dW1iRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaWZuZGVmIFNs
aWRlclRodW1iRWxlbWVudF9oCiAjZGVmaW5lIFNsaWRlclRodW1iRWxlbWVudF9oCiAKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUg
IkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGVDb25zdGFudHMuaCIKQEAgLTQzLDcgKzQzLDcgQEAKIGNsYXNzIEhUTUxFbGVtZW50
OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEV2ZW50OwotY2xhc3MgRmxvYXRQb2lu
dDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiAKIGNsYXNzIFNsaWRlclRodW1iRWxlbWVudCA6IHB1
YmxpYyBIVE1MRGl2RWxlbWVudCB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDkw
OTI5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDcgKzUwNSw3IEBACiAgICAgZWxzZSB7CiAjZW5k
aWYKICAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KQotICAgICAgICAgICAgY2FudmFz
KCktPmRpZERyYXcoRmxvYXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNhbnZhcygpLT5kaWREcmF3KEdyYXBoaWNzUmVjdCgw
LCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDExICszOCwxMSBAQAogCiAgICAgY2xhc3MgQ2FudmFzR3JhZGllbnQgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYW52YXNHcmFkaWVudD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwg
Y29uc3QgRmxvYXRQb2ludCYgcDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dy
YWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAxKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZh
c0dyYWRpZW50KHAwLCBwMSkpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBj
b25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIw
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsK
ICAgICAgICAgfQpAQCAtNTgsOCArNTgsOCBAQAogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAg
ICAgICBDYW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEpOwotICAgICAgICBDYW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxv
YXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSk7CisgICAgICAgIENhbnZhc0dy
YWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSk7
CisgICAgICAgIENhbnZhc0dyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCBy
MCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxKTsKICAgICAgICAgCiAgICAgICAg
IFJlZlB0cjxHcmFkaWVudD4gbV9ncmFkaWVudDsKICAgICAgICAgYm9vbCBtX2Rhc2hiYXJkQ29t
cGF0aWJpbGl0eU1vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQ1LDcgKzM0NSw3IEBACiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0QWxsQXR0cmlidXRlc1RvRGVmYXVsdCgpCiB7CiAgICAgc3RhdGUoKS5tX2ds
b2JhbEFscGhhID0gMTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7
CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIHN0YXRl
KCkubV9zaGFkb3dCbHVyID0gMDsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6
dHJhbnNwYXJlbnQ7CiAgICAgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9IENvbXBvc2l0ZVNv
dXJjZU92ZXI7CkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGNvbnRleHQtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwg
Q29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5z
ZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29s
b3JTcGFjZURldmljZVJHQik7CiAgICAgY29udGV4dC0+c2V0QWxwaGEoMSk7CiAgICAgY29udGV4
dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogfQpAQCAtNTkx
LDcgKzU5MSw3IEBACiAgICAgfQogCiAgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5z
Zm9ybTsKLSAgICBjLT5zY2FsZShGbG9hdFNpemUoc3gsIHN5KSk7CisgICAgYy0+c2NhbGUoR3Jh
cGhpY3NTaXplKHN4LCBzeSkpOwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3Jt
KCkuc2NhbGVOb25Vbmlmb3JtKDEuMCAvIHN4LCAxLjAgLyBzeSkpOwogfQogCkBAIC03NzcsNyAr
Nzc3LDcgQEAKICAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRmxvYXRSZWN0IGJvdW5kUmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICBHcmFw
aGljc1JlY3QgYm91bmRSZWN0ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwogICAgIGlmIChib3Vu
ZFJlY3Qud2lkdGgoKSB8fCBib3VuZFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1fcGF0aC5jbG9z
ZVN1YnBhdGgoKTsKIH0KQEAgLTc4OCw3ICs3ODgsNyBAQAogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGF0
aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1Bv
aW50KHgsIHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyhm
bG9hdCB4LCBmbG9hdCB5KQpAQCAtNzk4LDExICs3OTgsMTEgQEAKICAgICBpZiAoIXN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHAxID0g
RmxvYXRQb2ludCh4LCB5KTsKKyAgICBHcmFwaGljc1BvaW50IHAxID0gR3JhcGhpY3NQb2ludCh4
LCB5KTsKICAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9pbnQoKSkKICAgICAgICAgbV9wYXRo
Lm1vdmVUbyhwMSk7CiAgICAgZWxzZSBpZiAocDEgIT0gbV9wYXRoLmN1cnJlbnRQb2ludCgpKQot
ICAgICAgICBtX3BhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworICAgICAgICBtX3Bh
dGguYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQoeCwgeSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6cXVhZHJhdGljQ3VydmVUbyhmbG9hdCBjcHgsIGZsb2F0IGNweSwgZmxv
YXQgeCwgZmxvYXQgeSkKQEAgLTgxMiwxMSArODEyLDExIEBACiAgICAgaWYgKCFzdGF0ZSgpLm1f
aW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9wYXRoLmhhc0N1cnJl
bnRQb2ludCgpKQotICAgICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoY3B4LCBjcHkpKTsK
KyAgICAgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KGNweCwgY3B5KSk7CiAKLSAgICBG
bG9hdFBvaW50IHAxID0gRmxvYXRQb2ludCh4LCB5KTsKKyAgICBHcmFwaGljc1BvaW50IHAxID0g
R3JhcGhpY3NQb2ludCh4LCB5KTsKICAgICBpZiAocDEgIT0gbV9wYXRoLmN1cnJlbnRQb2ludCgp
KQotICAgICAgICBtX3BhdGguYWRkUXVhZEN1cnZlVG8oRmxvYXRQb2ludChjcHgsIGNweSksIHAx
KTsKKyAgICAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQoY3B4LCBjcHkp
LCBwMSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRv
KGZsb2F0IGNwMXgsIGZsb2F0IGNwMXksIGZsb2F0IGNwMngsIGZsb2F0IGNwMnksIGZsb2F0IHgs
IGZsb2F0IHkpCkBAIC04MjYsMTEgKzgyNiwxMSBAQAogICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9p
bnQoKSkKLSAgICAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KGNwMXgsIGNwMXkpKTsKKyAg
ICAgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KGNwMXgsIGNwMXkpKTsKIAotICAgIEZs
b2F0UG9pbnQgcDEgPSBGbG9hdFBvaW50KHgsIHkpOworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBH
cmFwaGljc1BvaW50KHgsIHkpOwogICAgIGlmIChwMSAhPSBtX3BhdGguY3VycmVudFBvaW50KCkp
Ci0gICAgICAgIG1fcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3AxeCwgY3AxeSks
IEZsb2F0UG9pbnQoY3AyeCwgY3AyeSksIHAxKTsKKyAgICAgICAgbV9wYXRoLmFkZEJlemllckN1
cnZlVG8oR3JhcGhpY3NQb2ludChjcDF4LCBjcDF5KSwgR3JhcGhpY3NQb2ludChjcDJ4LCBjcDJ5
KSwgcDEpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8oZmxvYXQg
eDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtODQ3LDggKzg0Nyw4IEBACiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNU
TSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBwMSA9IEZsb2F0UG9pbnQoeDEs
IHkxKTsKLSAgICBGbG9hdFBvaW50IHAyID0gRmxvYXRQb2ludCh4MiwgeTIpOworICAgIEdyYXBo
aWNzUG9pbnQgcDEgPSBHcmFwaGljc1BvaW50KHgxLCB5MSk7CisgICAgR3JhcGhpY3NQb2ludCBw
MiA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyKTsKIAogICAgIGlmICghbV9wYXRoLmhhc0N1cnJlbnRQ
b2ludCgpKQogICAgICAgICBtX3BhdGgubW92ZVRvKHAxKTsKQEAgLTg3NywxNSArODc3LDE1IEBA
CiAKICAgICAvLyBJZiAnc2EnIGFuZCAnZWEnIGRpZmZlciBieSBtb3JlIHRoYW4gMlBpLCBqdXN0
IGFkZCBhIGNpcmNsZSBzdGFydGluZy9lbmRpbmcgYXQgJ3NhJwogICAgIGlmIChhbnRpY2xvY2t3
aXNlICYmIHNhIC0gZWEgPj0gMiAqIHBpRmxvYXQpIHsKLSAgICAgICAgbV9wYXRoLmFkZEFyYyhG
bG9hdFBvaW50KHgsIHkpLCByLCBzYSwgc2EgLSAyICogcGlGbG9hdCwgYW50aWNsb2Nrd2lzZSk7
CisgICAgICAgIG1fcGF0aC5hZGRBcmMoR3JhcGhpY3NQb2ludCh4LCB5KSwgciwgc2EsIHNhIC0g
MiAqIHBpRmxvYXQsIGFudGljbG9ja3dpc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICghYW50aWNsb2Nrd2lzZSAmJiBlYSAtIHNhID49IDIgKiBwaUZsb2F0KSB7Ci0gICAgICAg
IG1fcGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2EsIHNhICsgMiAqIHBpRmxvYXQs
IGFudGljbG9ja3dpc2UpOworICAgICAgICBtX3BhdGguYWRkQXJjKEdyYXBoaWNzUG9pbnQoeCwg
eSksIHIsIHNhLCBzYSArIDIgKiBwaUZsb2F0LCBhbnRpY2xvY2t3aXNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fcGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2Es
IGVhLCBhbnRpY2xvY2t3aXNlKTsKKyAgICBtX3BhdGguYWRkQXJjKEdyYXBoaWNzUG9pbnQoeCwg
eSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRl
UmVjdEZvckNhbnZhcyhmbG9hdCYgeCwgZmxvYXQmIHksIGZsb2F0JiB3aWR0aCwgZmxvYXQmIGhl
aWdodCkKQEAgLTkxOCwxMSArOTE4LDExIEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
d2lkdGggJiYgIWhlaWdodCkgewotICAgICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwg
eSkpOworICAgICAgICBtX3BhdGgubW92ZVRvKEdyYXBoaWNzUG9pbnQoeCwgeSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wYXRoLmFkZFJlY3QoRmxvYXRSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICBtX3BhdGguYWRkUmVjdChHcmFwaGljc1JlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwogfQogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtOTY0
LDkgKzk2NCw5IEBACiAKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKICNpZiBQTEFURk9S
TShRVCkKLSAgICAgICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fcGF0aC5wbGF0Zm9ybVBhdGgo
KS5jb250cm9sUG9pbnRSZWN0KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3QgPSBt
X3BhdGgucGxhdGZvcm1QYXRoKCkuY29udHJvbFBvaW50UmVjdCgpOwogI2Vsc2UKLSAgICAgICAg
RmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgR3Jh
cGhpY3NSZWN0IGRpcnR5UmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKICNlbmRpZgogICAg
ICAgICAvLyBGYXN0IGFwcHJveGltYXRpb24gb2YgdGhlIHN0cm9rZSdzIGJvdW5kaW5nIHJlY3Qu
CiAgICAgICAgIC8vIFRoaXMgeWllbGRzIGEgc2xpZ2h0bHkgb3ZlcnNpemVkIHJlY3QgYnV0IGlz
IHZlcnkgZmFzdApAQCAtMTAwMyw5ICsxMDAzLDkgQEAKICAgICBpZiAoIXN0YXRlKCkubV9pbnZl
cnRpYmxlQ1RNKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHBvaW50
KHgsIHkpOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQoeCwgeSk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07Ci0gICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1l
ZFBvaW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NQb2lu
dCB0cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CiAgICAg
aWYgKCFpc2Zpbml0ZSh0cmFuc2Zvcm1lZFBvaW50LngoKSkgfHwgIWlzZmluaXRlKHRyYW5zZm9y
bWVkUG9pbnQueSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3BhdGgu
Y29udGFpbnModHJhbnNmb3JtZWRQb2ludCk7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0
dXJuOwotICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEdyYXBo
aWNzUmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgc2F2ZSgpOwogICAgIHNl
dEFsbEF0dHJpYnV0ZXNUb0RlZmF1bHQoKTsKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAgICAgaWYg
KGdyYWRpZW50ICYmIGdyYWRpZW50LT5pc1plcm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEdyYXBoaWNzUmVj
dCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYgKHNob3VsZERpc3BsYXlUcmFu
c3BhcmVuY3lFbHNld2hlcmUoKSkKICAgICAgICAgZGlzcGxheVRyYW5zcGFyZW5jeUVsc2V3aGVy
ZTxJbnRSZWN0PihlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKQEAgLTEwNzcsOSArMTA3Nyw5IEBA
CiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0
IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0
ID0gcmVjdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3Vu
ZGluZ1JlY3QuaW5mbGF0ZShsaW5lV2lkdGggLyAyKTsKIAogICAgIGMtPnN0cm9rZVJlY3QocmVj
dCwgbGluZVdpZHRoKTsKQEAgLTExMDgsNyArMTEwOCw3IEBACiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
Ymx1cikKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgs
IGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCku
bV9zaGFkb3dDb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICBhcHBseVNoYWRvdygpOwpA
QCAtMTExOSwxNCArMTExOSwxNCBAQAogICAgIGlmICghcGFyc2VDb2xvck9yQ3VycmVudENvbG9y
KHN0YXRlKCkubV9zaGFkb3dDb2xvciwgY29sb3IsIGNhbnZhcygpKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWln
aHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBhcHBseVNoYWRvdygp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCkKIHsKLSAgICBz
dGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0
YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAgICAg
c3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9
IG1ha2VSR0JBMzJGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIDEu
MGYpOwogCkBAIC0xMTM0LDcgKzExMzQsNyBAQAogICAgIGlmICghYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0
YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworICAgIGMtPnNldExlZ2FjeVNoYWRvdyhHcmFwaGljc1NpemUod2lkdGgsIC1oZWln
aHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNo
YWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcm
IGNvbG9yLCBmbG9hdCBhbHBoYSkKQEAgLTExNDUsMTkgKzExNDUsMTkgQEAKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBo
YShyZ2JhLCBhbHBoYSk7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXpl
KHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKIAogICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAt
aGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3
aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZs
b2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVy
ID0gYmx1cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQTMyRnJvbUZsb2F0
cyhncmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSk7CiAKQEAgLTExNjUsMTIg
KzExNjUsMTIgQEAKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGMtPnNldExl
Z2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1
ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjLT5z
ZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3No
YWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxv
YXQgYSkKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgs
IGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCku
bV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogCkBAIC0x
MTc4LDEyICsxMTc4LDEyIEBACiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3No
YWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRl
KCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0
IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3Jh
cGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1
cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQUZyb21DTVlLQShjLCBtLCB5
LCBrLCBhKTsKIApAQCAtMTE5OCwxMyArMTE5OCwxMyBAQAogICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihkYy0+cGxhdGZvcm1Db250ZXh0KCksIGFkanVzdGVkU2hhZG93U2l6ZSh3aWR0
aCwgLWhlaWdodCksIGJsdXIsIHNoYWRvd0NvbG9yKTsKICAgICBDR0NvbG9yUmVsZWFzZShzaGFk
b3dDb2xvcik7CiAjZWxzZQotICAgIGRjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRo
LCAtaGVpZ2h0KSwgYmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBkYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdo
dCksIGJsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAj
ZW5kaWYKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyU2hhZG93KCkK
IHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAgc3RhdGUo
KS5tX3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIHN0YXRlKCkubV9zaGFkb3dC
bHVyID0gMDsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
CiAgICAgYXBwbHlTaGFkb3coKTsKQEAgLTEyMTgsNyArMTIxOCw3IEBACiAKICAgICBmbG9hdCB3
aWR0aCA9IHN0YXRlKCkubV9zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICBmbG9hdCBoZWlnaHQg
PSBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgIGMtPnNldExlZ2FjeVNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUo
KS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjLT5zZXRMZWdhY3lT
aGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIs
IHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9CiAKIHN0YXRp
YyBJbnRTaXplIHNpemUoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCkBAIC0xMjM3LDkgKzEyMzcs
OSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IG5vcm1hbGl6ZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorc3RhdGljIGlubGluZSBHcmFwaGljc1JlY3Qgbm9ybWFs
aXplUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dChtaW4ocmVjdC54KCksIHJlY3QubWF4WCgpKSwKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1p
bihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAogICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4
WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAg
IG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5oZWlnaHQoKSkpOwpAQCAtMTI2Myw3ICsxMjYzLDcg
QEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBJbnRTaXplIHMgPSBzaXplKGltYWdlKTsK
LSAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdCgwLCAwLCBzLndpZHRoKCksIHMuaGVpZ2h0
KCkpLCBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGVjKTsKKyAgICBkcmF3SW1hZ2Uo
aW1hZ2UsIEdyYXBoaWNzUmVjdCgwLCAwLCBzLndpZHRoKCksIHMuaGVpZ2h0KCkpLCBHcmFwaGlj
c1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGVjKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwKQEAgLTEyNzQs
MTUgKzEyNzQsMTUgQEAKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChzeCwgc3ksIHN3
LCBzaCksIEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1h
Z2UsIEdyYXBoaWNzUmVjdChzeCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3
LCBkaCksIGVjKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIGRyYXdJbWFnZShpbWFnZSwgc3JjUmVjdCwgZHN0UmVjdCwg
c3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQ29tcG9zaXRl
T3BlcmF0b3ImIG9wLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBDb21wb3Np
dGVPcGVyYXRvciYgb3AsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghaW1hZ2UpIHsK
ICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKQEAgLTEzMDEsMTAgKzEzMDEsMTAgQEAK
ICAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFJlY3Qgbm9ybWFsaXplZFNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1JlY3QpOwotICAgIEZs
b2F0UmVjdCBub3JtYWxpemVkRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZHN0UmVjdCk7CisgICAg
R3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWRTcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0KTsK
KyAgICBHcmFwaGljc1JlY3Qgbm9ybWFsaXplZERzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJl
Y3QpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHNpemUoaW1hZ2UpKTsKKyAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0ID0gR3JhcGhpY3NSZWN0
KEdyYXBoaWNzUG9pbnQoKSwgc2l6ZShpbWFnZSkpOwogICAgIGlmICghaW1hZ2VSZWN0LmNvbnRh
aW5zKG5vcm1hbGl6ZWRTcmNSZWN0KSB8fCAhc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0Lmhl
aWdodCgpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsK
QEAgLTEzNDIsMjUgKzEzNDIsMjUgQEAKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkcmF3SW1hZ2UoY2FudmFzLCBGbG9hdFJlY3Qo
MCwgMCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSwgRmxvYXRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpLCBlYyk7CisgICAgZHJhd0ltYWdlKGNhbnZhcywgR3JhcGhpY3NSZWN0
KDAsIDAsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSksIEdyYXBoaWNzUmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCiAgICAgZmxvYXQgc3gs
IGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsCiAgICAgZmxvYXQgZHgsIGZsb2F0IGR5LCBm
bG9hdCBkdywgZmxvYXQgZGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGRyYXdJbWFnZShj
YW52YXMsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIEZsb2F0UmVjdChkeCwgZHksIGR3LCBk
aCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoY2FudmFzLCBHcmFwaGljc1JlY3Qoc3gsIHN5LCBzdywg
c2gpLCBHcmFwaGljc1JlY3QoZHgsIGR5LCBkdywgZGgpLCBlYyk7CiB9CiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqIHNvdXJjZUNh
bnZhcywgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAotICAgIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBzb3VyY2VDYW52YXMsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgc3JjUmVjdCwKKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGlmICghc291cmNlQ2FudmFzKSB7CiAgICAgICAgIGVjID0gVFlQ
RV9NSVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGbG9hdFJlY3Qg
c3JjQ2FudmFzUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNvdXJjZUNhbnZhcy0+c2l6
ZSgpKTsKKyAgICBHcmFwaGljc1JlY3Qgc3JjQ2FudmFzUmVjdCA9IEdyYXBoaWNzUmVjdChHcmFw
aGljc1BvaW50KCksIHNvdXJjZUNhbnZhcy0+c2l6ZSgpKTsKIAogICAgIGlmICghc3JjQ2FudmFz
UmVjdC53aWR0aCgpIHx8ICFzcmNDYW52YXNSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CkBAIC0xNDI0LDE3ICsxNDI0LDE3IEBACiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgSW50U2l6ZSBzID0gc2l6ZSh2aWRlbyk7Ci0gICAgZHJhd0ltYWdlKHZp
ZGVvLCBGbG9hdFJlY3QoMCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgRmxvYXRSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7CisgICAgZHJhd0ltYWdlKHZpZGVvLCBHcmFwaGljc1Jl
Y3QoMCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpLCBlYyk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCiAgICAgZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gsCiAgICAgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxv
YXQgZGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGRyYXdJbWFnZSh2aWRlbywgRmxvYXRS
ZWN0KHN4LCBzeSwgc3csIHNoKSwgRmxvYXRSZWN0KGR4LCBkeSwgZHcsIGRoKSwgZWMpOworICAg
IGRyYXdJbWFnZSh2aWRlbywgR3JhcGhpY3NSZWN0KHN4LCBzeSwgc3csIHNoKSwgR3JhcGhpY3NS
ZWN0KGR4LCBkeSwgZHcsIGRoKSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGNvbnN0IEdyYXBo
aWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAoIXZpZGVvKSB7CkBAIC0xNDQ3LDcgKzE0NDcsNyBAQAogICAgIGlmICh2aWRlby0+cmVh
ZHlTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORyB8fCB2aWRlby0+cmVh
ZHlTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVfTUVUQURBVEEpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZsb2F0UmVjdCB2aWRlb1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBzaXplKHZpZGVvKSk7CisgICAgR3JhcGhpY3NSZWN0IHZpZGVvUmVjdCA9IEdyYXBoaWNzUmVj
dChHcmFwaGljc1BvaW50KCksIHNpemUodmlkZW8pKTsKICAgICBpZiAoIXZpZGVvUmVjdC5jb250
YWlucyhub3JtYWxpemVSZWN0KHNyY1JlY3QpKSB8fCAhc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNS
ZWN0LmhlaWdodCgpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJl
dHVybjsKQEAgLTE0NjcsNyArMTQ2Nyw3IEBACiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpjKTsKICAgICBjLT5jbGlwKGRzdFJlY3QpOwogICAgIGMtPnRyYW5zbGF0
ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgIGMtPnNjYWxlKEZsb2F0U2l6ZShkc3RS
ZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0
LmhlaWdodCgpKSk7CisgICAgYy0+c2NhbGUoR3JhcGhpY3NTaXplKGRzdFJlY3Qud2lkdGgoKSAv
IHNyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsK
ICAgICBjLT50cmFuc2xhdGUoLXNyY1JlY3QueCgpLCAtc3JjUmVjdC55KCkpOwogICAgIHZpZGVv
LT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChjLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUo
dmlkZW8pKSk7CiAgICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7CkBAIC0xNDg1LDcgKzE0ODUsNyBA
QAogICAgICAgICBvcCA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjOwotICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgRmxv
YXRSZWN0KGR4LCBkeSwgZHcsIGRoKSwgb3AsIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEdy
YXBoaWNzUmVjdChzeCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCks
IG9wLCBlYyk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRBbHBoYShm
bG9hdCBhbHBoYSkKQEAgLTE1MTEsNyArMTUxMSw3IEBACiB7CiAgICAgQVNTRVJUKHNob3VsZERp
c3BsYXlUcmFuc3BhcmVuY3lFbHNld2hlcmUoKSk7CiAKLSAgICBGbG9hdFJlY3QgY2FudmFzUmVj
dCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBHcmFw
aGljc1JlY3QgY2FudmFzUmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhl
aWdodCgpKTsKICAgICBjYW52YXNSZWN0ID0gc3RhdGUoKS5tX3RyYW5zZm9ybS5pbnZlcnNlKCku
bWFwUmVjdChjYW52YXNSZWN0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdD
b250ZXh0KCk7CkBAIC0xNTM5LDcgKzE1MzksNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50ID0gQ2FudmFzR3JhZGllbnQ6
OmNyZWF0ZShGbG9hdFBvaW50KHgwLCB5MCksIEZsb2F0UG9pbnQoeDEsIHkxKSk7CisgICAgUmVm
UHRyPENhbnZhc0dyYWRpZW50PiBncmFkaWVudCA9IENhbnZhc0dyYWRpZW50OjpjcmVhdGUoR3Jh
cGhpY3NQb2ludCh4MCwgeTApLCBHcmFwaGljc1BvaW50KHgxLCB5MSkpOwogICAgIHByZXBhcmVH
cmFkaWVudEZvckRhc2hib2FyZChncmFkaWVudC5nZXQoKSk7CiAgICAgcmV0dXJuIGdyYWRpZW50
LnJlbGVhc2UoKTsKIH0KQEAgLTE1NTYsNyArMTU1Niw3IEBACiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFk
aWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAsIHkwKSwgcjAsIEZsb2F0UG9pbnQoeDEsIHkxKSwg
cjEpOworICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFkaWVu
dDo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQoeDAsIHkwKSwgcjAsIEdyYXBoaWNzUG9pbnQoeDEsIHkx
KSwgcjEpOwogICAgIHByZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChncmFkaWVudC5nZXQoKSk7
CiAgICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKIH0KQEAgLTE2MDUsNyArMTYwNSw3IEBA
CiAgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmNvcGllZEltYWdlKCks
IHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7CiB9CiAKLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWdu
ZWQgb3B0aW9ucykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0
IEdyYXBoaWNzUmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKQEAgLTE2MTMsNyArMTYxMyw3
IEBACiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IHI7CisgICAgR3JhcGhpY3NSZWN0IGRpcnR5UmVj
dCA9IHI7CiAgICAgaWYgKG9wdGlvbnMgJiBDYW52YXNEaWREcmF3QXBwbHlUcmFuc2Zvcm0pIHsK
ICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CiAgICAg
ICAgIGRpcnR5UmVjdCA9IGN0bS5tYXBSZWN0KHIpOwpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKIAog
ICAgIGlmIChvcHRpb25zICYgQ2FudmFzRGlkRHJhd0FwcGx5U2hhZG93ICYmIGFscGhhQ2hhbm5l
bChzdGF0ZSgpLm1fc2hhZG93Q29sb3IpKSB7CiAgICAgICAgIC8vIFRoZSBzaGFkb3cgZ2V0cyBh
cHBsaWVkIGFmdGVyIHRyYW5zZm9ybWF0aW9uCi0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0
KGRpcnR5UmVjdCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0KGRpcnR5UmVjdCk7
CiAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93UmVjdC5pbmZsYXRlKHN0YXRlKCkubV9zaGFkb3dCbHVyKTsKICAgICAgICAgZGly
dHlSZWN0LnVuaXRlKHNoYWRvd1JlY3QpOwpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZShmYWJzKHN3KSwg
ZmFicyhzaCkpOworICAgIEdyYXBoaWNzU2l6ZSB1bnNjYWxlZFNpemUoZmFicyhzdyksIGZhYnMo
c2gpKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYW52YXMoKS0+Y29udmVydExvZ2ljYWxU
b0RldmljZSh1bnNjYWxlZFNpemUpOwogICAgIGlmIChzY2FsZWRTaXplLndpZHRoKCkgPCAxKQog
ICAgICAgICBzY2FsZWRTaXplLnNldFdpZHRoKDEpOwpAQCAtMTcxNSw3ICsxNzE1LDcgQEAKICAg
ICAgICAgc2ggPSAtc2g7CiAgICAgfQogICAgIAotICAgIEZsb2F0UmVjdCB1bnNjYWxlZFJlY3Qo
c3gsIHN5LCBzdywgc2gpOworICAgIEdyYXBoaWNzUmVjdCB1bnNjYWxlZFJlY3Qoc3gsIHN5LCBz
dywgc2gpOwogICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IGNhbnZhcygpLT5jb252ZXJ0TG9naWNh
bFRvRGV2aWNlKHVuc2NhbGVkUmVjdCk7CiAgICAgaWYgKHNjYWxlZFJlY3Qud2lkdGgoKSA8IDEp
CiAgICAgICAgIHNjYWxlZFJlY3Quc2V0V2lkdGgoMSk7CkBAIC0xNzY3LDcgKzE3NjcsNyBAQAog
ICAgICAgICBkaXJ0eUhlaWdodCA9IC1kaXJ0eUhlaWdodDsKICAgICB9CiAKLSAgICBGbG9hdFJl
Y3QgY2xpcFJlY3QoZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKKyAg
ICBHcmFwaGljc1JlY3QgY2xpcFJlY3QoZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5
SGVpZ2h0KTsKICAgICBjbGlwUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLT53aWR0
aCgpLCBkYXRhLT5oZWlnaHQoKSkpOwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNfY2Fz
dDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKQEAgLTE5MTMsNyArMTkxMyw3IEBACiAgICAg
VGV4dFJ1biB0ZXh0UnVuKHN0cmluZywgbGVuZ3RoLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgVGV4dFJ1bjo6Tm9Sb3Vu
ZGluZyk7CiAKICAgICAvLyBEcmF3IHRoZSBpdGVtIHRleHQgYXQgdGhlIGNvcnJlY3QgcG9pbnQu
Ci0gICAgRmxvYXRQb2ludCBsb2NhdGlvbih4LCB5KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2F0
aW9uKHgsIHkpOwogICAgIHN3aXRjaCAoc3RhdGUoKS5tX3RleHRCYXNlbGluZSkgewogICAgIGNh
c2UgVG9wVGV4dEJhc2VsaW5lOgogICAgIGNhc2UgSGFuZ2luZ1RleHRCYXNlbGluZToKQEAgLTE5
NTIsNyArMTk1Miw3IEBACiAgICAgfQogCiAgICAgLy8gVGhlIHNsb3AgYnVpbHQgaW4gdG8gdGhp
cyBtYXNrIHJlY3QgbWF0Y2hlcyB0aGUgaGV1cmlzdGljIHVzZWQgaW4gRm9udENHV2luLmNwcCBm
b3IgR0RJIHRleHQuCi0gICAgRmxvYXRSZWN0IHRleHRSZWN0ID0gRmxvYXRSZWN0KGxvY2F0aW9u
LngoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpIC8gMiwgbG9jYXRpb24ueSgpIC0gZm9udE1ldHJp
Y3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5saW5lR2FwKCksCisgICAgR3JhcGhpY3NSZWN0IHRl
eHRSZWN0ID0gR3JhcGhpY3NSZWN0KGxvY2F0aW9uLngoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgp
IC8gMiwgbG9jYXRpb24ueSgpIC0gZm9udE1ldHJpY3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5s
aW5lR2FwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICsgZm9u
dE1ldHJpY3MuaGVpZ2h0KCksIGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkpOwogICAgIGlmICgh
ZmlsbCkKICAgICAgICAgdGV4dFJlY3QuaW5mbGF0ZShjLT5zdHJva2VUaGlja25lc3MoKSAvIDIp
OwpAQCAtMjAwNiw3ICsyMDA2LDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2hlbiBzdHJv
a2luZyB0ZXh0LCBwb2ludHkgbWl0ZXJzIGNhbiBleHRlbmQgb3V0c2lkZSBvZiB0ZXh0UmVjdCwg
c28gd2UKICAgICAgICAgLy8gcHVudCBhbmQgZGlydHkgdGhlIHdob2xlIGNhbnZhcy4KLSAgICAg
ICAgZGlkRHJhdyhGbG9hdFJlY3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOworICAgICAgICBkaWREcmF3KEdyYXBoaWNzUmVjdCgwLCAwLCBjYW52YXMoKS0+
d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3Bw
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dy
YWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEzIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0
UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK0NhbnZhc0dyYWRpZW50OjpDYW52YXNH
cmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEp
CiAgICAgOiBtX2dyYWRpZW50KEdyYWRpZW50OjpjcmVhdGUocDAsIHAxKSkKICAgICAsIG1fZGFz
aGJhcmRDb21wYXRpYmlsaXR5TW9kZShmYWxzZSkKIHsKIH0KIAotQ2FudmFzR3JhZGllbnQ6OkNh
bnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQ
b2ludCYgcDEsIGZsb2F0IHIxKQorQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZs
b2F0IHIxKQogICAgIDogbV9ncmFkaWVudChHcmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIx
KSkKICAgICAsIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5TW9kZShmYWxzZSkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC00Niw3ICs0Niw3IEBACiBjbGFz
cyBDYW52YXNHcmFkaWVudDsKIGNsYXNzIENhbnZhc1BhdHRlcm47CiBjbGFzcyBDYW52YXNTdHls
ZTsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVu
dDsKQEAgLTE2OCwxNyArMTY4LDE3IEBACiAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTEltYWdlRWxl
bWVudCosIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJ
bWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFn
ZUVsZW1lbnQqLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRy
YXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBj
b25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRy
YXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3csIGZsb2F0IHNoLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50Kiwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBv
c2l0ZU9wZXJhdG9yJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxD
YW52YXNFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRyYXdJbWFnZShIVE1M
SW1hZ2VFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9yJiwgRXhjZXB0aW9uQ29kZSYp
OwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MVmlkZW9FbGVtZW50
KiwgZmxvYXQgeCwgZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZHJhd0ltYWdl
KEhUTUxWaWRlb0VsZW1lbnQqLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOwogI2VuZGlmCiAKICAgICB2
b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCBzeCA9IDAsIGZs
b2F0IHN5ID0gMCwgZmxvYXQgc3cgPSAwLCBmbG9hdCBzaCA9IDAsCkBAIC0yNDEsNyArMjQxLDcg
QEAKICAgICAgICAgTGluZUNhcCBtX2xpbmVDYXA7CiAgICAgICAgIExpbmVKb2luIG1fbGluZUpv
aW47CiAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKLSAgICAgICAgRmxvYXRTaXplIG1fc2hh
ZG93T2Zmc2V0OworICAgICAgICBHcmFwaGljc1NpemUgbV9zaGFkb3dPZmZzZXQ7CiAgICAgICAg
IGZsb2F0IG1fc2hhZG93Qmx1cjsKICAgICAgICAgUkdCQTMyIG1fc2hhZG93Q29sb3I7CiAgICAg
ICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CkBAIC0yNzUsNyArMjc1LDcgQEAKIAogICAgIHZvaWQg
YXBwbHlTaGFkb3coKTsKIAotICAgIHZvaWQgZGlkRHJhdyhjb25zdCBGbG9hdFJlY3QmLCB1bnNp
Z25lZCBvcHRpb25zID0gQ2FudmFzRGlkRHJhd0FwcGx5QWxsKTsKKyAgICB2b2lkIGRpZERyYXco
Y29uc3QgR3JhcGhpY3NSZWN0JiwgdW5zaWduZWQgb3B0aW9ucyA9IENhbnZhc0RpZERyYXdBcHBs
eUFsbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUg
IkNocm9tZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBm
bG9hdCB5KQogewotICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hy
b21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgZnJhbWVSZWN0ID0gbV9mcm9u
dGVuZFBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7CiAgICAgZnJhbWVSZWN0Lm1vdmUoeCwg
eSk7CiAgICAgbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyYW1lUmVj
dCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hs
aWdodGVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NTm9kZUhpZ2hsaWdodGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAog
CiBuYW1lc3BhY2UgewogCi1QYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQor
UGF0aCBxdWFkVG9QYXRoKGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCkKIHsKICAgICBQYXRoIHF1
YWRQYXRoOwogICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkpOwpAQCAtNTgsNyArNTgsNyBA
QAogICAgIHJldHVybiBxdWFkUGF0aDsKIH0KIAotdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYg
ZmlsbENvbG9yKQordm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgR3JhcGhpY3NRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQogewog
ICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7CiAgICAgc3RhdGljIGNv
bnN0IENvbG9yIG91dGxpbmVDb2xvcig2MiwgODYsIDE4MCwgMjI4KTsKQEAgLTgzLDcgKzgzLDcg
QEAKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsKIH0KIAotdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQm
IHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Ip
Cit2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBjbGlwUXVhZCwg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcikKIHsKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBQYXRo
IGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwpAQCAtOTIsMTQgKzkyLDE0IEBA
CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNv
bnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwg
Y29uc3QgRmxvYXRRdWFkJiBtYXJnaW5RdWFkLCBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdo
dE1vZGUgbW9kZSkKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEdyYXBoaWNzUXVh
ZCYgcGFkZGluZ1F1YWQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgR3Jh
cGhpY3NRdWFkJiBtYXJnaW5RdWFkLCBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdodE1vZGUg
bW9kZSkKIHsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwgMTcz
LCAyMTcsIDEyOCk7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigxMjUs
IDE3MywgMjE3LCAxNjApOwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xvcigx
MjUsIDE3MywgMjE3LCAxOTIpOwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hDb2xv
cigxMjUsIDE3MywgMjE3LCAyMjgpOwogCi0gICAgRmxvYXRRdWFkIGNsaXBRdWFkOworICAgIEdy
YXBoaWNzUXVhZCBjbGlwUXVhZDsKICAgICBpZiAobW9kZSA9PSBET01Ob2RlSGlnaGxpZ2h0ZXI6
OkhpZ2hsaWdodE1hcmdpbiB8fCAobW9kZSA9PSBET01Ob2RlSGlnaGxpZ2h0ZXI6OkhpZ2hsaWdo
dEFsbCAmJiBtYXJnaW5RdWFkICE9IGJvcmRlclF1YWQpKSB7CiAgICAgICAgIGRyYXdPdXRsaW5l
ZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBtYXJnaW5Cb3hD
b2xvcik7CiAgICAgICAgIGNsaXBRdWFkID0gYm9yZGVyUXVhZDsKQEAgLTExOCw3ICsxMTgsNyBA
QAogICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgY2xpcFF1YWQsIGNs
aXBRdWFkLCBjb250ZW50Qm94Q29sb3IpOwogfQogCi12b2lkIGRyYXdIaWdobGlnaHRGb3JMaW5l
Qm94ZXNPclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9y
PEZsb2F0UXVhZD4mIGxpbmVCb3hRdWFkcykKK3ZvaWQgZHJhd0hpZ2hsaWdodEZvckxpbmVCb3hl
c09yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8R3Jh
cGhpY3NRdWFkPiYgbGluZUJveFF1YWRzKQogewogICAgIHN0YXRpYyBjb25zdCBDb2xvciBsaW5l
Qm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsKIApAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAg
cmV0dXJuIG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKIH0KIAotdm9pZCBkcmF3RWxlbWVu
dFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSW50UmVj
dCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgRmxvYXRSZWN0
JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQordm9pZCBkcmF3RWxl
bWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwgY29uc3QgSW50
UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQogewogICAg
IHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7CiAgICAgc3RhdGljIGNvbnN0IGlu
dCBmb250SGVpZ2h0UHggPSAxMjsKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIEludFJlY3QgdGl0
bGVBbmNob3JCb3ggPSBib3VuZGluZ0JveDsKIAogICAgIEZyYW1lVmlldyogdmlldyA9IGNvbnRh
aW5pbmdGcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAgIEZsb2F0UmVjdCBv
dmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVj
dCBvdmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwogICAgIGlmICghb3Zl
cmxheVJlY3QuY29udGFpbnMoYm91bmRpbmdCb3gpICYmICFib3VuZGluZ0JveC5jb250YWlucyhl
bmNsb3NpbmdJbnRSZWN0KG92ZXJsYXlSZWN0KSkpCiAgICAgICAgIG92ZXJsYXlSZWN0ID0gdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgY29udGV4dC50cmFuc2xhdGUoLW92ZXJsYXlS
ZWN0LngoKSwgLW92ZXJsYXlSZWN0LnkoKSk7CkBAIC0yNjcsMTAgKzI2NywxMCBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2lu
TGVmdCgpICsgcmVuZGVyQm94LT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyBy
ZW5kZXJCb3gtPm1hcmdpblRvcCgpICsgcmVuZGVyQm94LT5tYXJnaW5Cb3R0b20oKSk7CiAKIAot
ICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1Bh
ZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRk
aW5nQm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRR
dWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KG1hcmdpbkJveCkpOworICAgICAgICBHcmFwaGljc1F1YWQgYWJzQ29udGVudFF1YWQgPSBy
ZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KGNvbnRlbnRCb3gpKTsK
KyAgICAgICAgR3JhcGhpY3NRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChwYWRkaW5nQm94KSk7CisgICAgICAgIEdyYXBoaWNz
UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBo
aWNzUmVjdChib3JkZXJCb3gpKTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIGFic01hcmdpblF1YWQg
PSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmdpbkJveCkp
OwogCiAgICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKICAgICAg
ICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwpAQCAtMjgyLDcgKzI4Miw3
IEBACiAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goY29udGV4dCwgYWJzQ29udGVudFF1YWQs
IGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFkLCBtb2RlKTsKICAg
ICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpIHx8IGlzU1ZHUmVuZGVyZXIp
IHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzaG93IG1hcmdpbnMvcGFkZGluZy9ib3Jk
ZXIgZm9yIGlubGluZXMuCi0gICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IGxpbmVCb3hRdWFkczsK
KyAgICAgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gbGluZUJveFF1YWRzOwogICAgICAgICByZW5k
ZXJlci0+YWJzb2x1dGVRdWFkcyhsaW5lQm94UXVhZHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgbGluZUJv
eFF1YWRzW2ldICs9IG1haW5GcmFtZU9mZnNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMDU2LDExICsxMDU2LDYgQEAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmNwcApAQCAtMTA3Myw2ICsxMDY4LDEx
IEBACiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NRdWFkLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTIsNyArMTUyLDcgQEAKICAgICBib29sIGNvbnRhaW5zQ2FyZXRPZmZzZXQoaW50IG9mZnNldCkg
Y29uc3Q7IC8vIGZhbHNlIGZvciBvZmZzZXQgYWZ0ZXIgbGluZSBicmVhawogCiAgICAgLy8gTmVl
ZHMgdG8gYmUgcHVibGljLCBzbyB0aGUgc3RhdGljIHBhaW50VGV4dFdpdGhTaGFkb3dzKCkgZnVu
Y3Rpb24gY2FuIHVzZSBpdC4KLSAgICBzdGF0aWMgRmxvYXRTaXplIGFwcGx5U2hhZG93VG9HcmFw
aGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2hhZG93RGF0YSosIGNvbnN0IEZs
b2F0UmVjdCYgdGV4dFJlY3QsIGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUsIGJvb2wgaG9yaXpv
bnRhbCk7CisgICAgc3RhdGljIEdyYXBoaWNzU2l6ZSBhcHBseVNoYWRvd1RvR3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNoYWRvd0RhdGEqLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHRleHRSZWN0LCBib29sIHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwp
OwogCiBwcml2YXRlOgogICAgIElubGluZVRleHRCb3gqIG1fcHJldlRleHRCb3g7IC8vIFRoZSBw
cmV2aW91cyBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdApAQCAtMTY1LDE4ICsx
NjUsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAvLyBkZW5vdGUgbm8gdHJ1bmNhdGlvbiAo
dGhlIHdob2xlIHJ1biBwYWludHMpIGFuZCBmdWxsIHRydW5jYXRpb24gKG5vdGhpbmcgcGFpbnRz
IGF0IGFsbCkuCiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3Jv
dW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lk
IHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsK
LSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYpOwor
ICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBp
bnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOworICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJT
dHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGJhY2tncm91bmQpOworICAgIHZvaWQgcGFpbnRDb21w
b3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBi
b3hPcmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUpOwogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwYWlu
dERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBpbnQgZGVjb3JhdGlvbiwgY29uc3QgU2hhZG93RGF0YSopOwotICAgIHZvaWQgcGFpbnRTZWxl
Y3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5k
ZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKLSAgICB2b2lkIHBhaW50U3BlbGxpbmdPckdyYW1tYXJN
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1
bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7Ci0g
ICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBG
b250Jik7CisgICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBpbnQgZGVjb3JhdGlvbiwgY29uc3QgU2hhZG93RGF0
YSopOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2
b2lkIHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwg
Y29uc3QgRm9udCYsIGJvb2wgZ3JhbW1hcik7CisgICAgdm9pZCBwYWludFRleHRNYXRjaE1hcmtl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIERvY3Vt
ZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CiAgICAgdm9pZCBjb21wdXRl
UmVjdEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBj
b25zdCBGb250Jik7CiAKICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25C
ZWhhdmlvcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcg
KzE4Miw3IEBACiAKICAgICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNv
bnN0IEZpbGxMYXllciosIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgQmFja2dyb3VuZEltYWdl
R2VvbWV0cnkmKTsKICAgICB2b2lkIGdldEJvcmRlckVkZ2VJbmZvKGNsYXNzIEJvcmRlckVkZ2Vb
XSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNh
bFJpZ2h0RWRnZSA9IHRydWUpIGNvbnN0OwotICAgIGJvb2wgYm9yZGVyT2JzY3VyZXNCYWNrZ3Jv
dW5kRWRnZShjb25zdCBGbG9hdFNpemUmIGNvbnRleHRTY2FsZSkgY29uc3Q7CisgICAgYm9vbCBi
b3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgY29udGV4dFNj
YWxlKSBjb25zdDsKIAogICAgIGJvb2wgc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3ND
b250ZXh0KiwgSW1hZ2UqLCBjb25zdCB2b2lkKiwgY29uc3QgSW50U2l6ZSYpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNpbmNsdWRl
ICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKLSNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpA
QCAtODY5LDMxICs4NjksMzEgQEAKICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKG9sZFN0cm9rZVN0eWxlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHF1YWRbNF07CisgICAgICAgICAg
ICBHcmFwaGljc1BvaW50IHF1YWRbNF07CiAgICAgICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIEJTVG9wOgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0g
RmxvYXRQb2ludCh4MSArIG1heCgtYWRqYWNlbnRXaWR0aDEsIDApLCB5MSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHF1YWRbMV0gPSBGbG9hdFBvaW50KHgxICsgbWF4KGFkamFjZW50V2lkdGgxLCAw
KSwgeTIpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCh4MiAtIG1h
eChhZGphY2VudFdpZHRoMiwgMCksIHkyKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9
IEZsb2F0UG9pbnQoeDIgLSBtYXgoLWFkamFjZW50V2lkdGgyLCAwKSwgeTEpOworICAgICAgICAg
ICAgICAgICAgICBxdWFkWzBdID0gR3JhcGhpY3NQb2ludCh4MSArIG1heCgtYWRqYWNlbnRXaWR0
aDEsIDApLCB5MSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBHcmFwaGljc1BvaW50
KHgxICsgbWF4KGFkamFjZW50V2lkdGgxLCAwKSwgeTIpOworICAgICAgICAgICAgICAgICAgICBx
dWFkWzJdID0gR3JhcGhpY3NQb2ludCh4MiAtIG1heChhZGphY2VudFdpZHRoMiwgMCksIHkyKTsK
KyAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIgLSBtYXgoLWFk
amFjZW50V2lkdGgyLCAwKSwgeTEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEJTQm90dG9tOgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0g
RmxvYXRQb2ludCh4MSArIG1heChhZGphY2VudFdpZHRoMSwgMCksIHkxKTsKLSAgICAgICAgICAg
ICAgICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoeDEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAw
KSwgeTIpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCh4MiAtIG1h
eCgtYWRqYWNlbnRXaWR0aDIsIDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbM10g
PSBGbG9hdFBvaW50KHgyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSwgeTEpOworICAgICAgICAg
ICAgICAgICAgICBxdWFkWzBdID0gR3JhcGhpY3NQb2ludCh4MSArIG1heChhZGphY2VudFdpZHRo
MSwgMCksIHkxKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBoaWNzUG9pbnQo
eDEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSwgeTIpOworICAgICAgICAgICAgICAgICAgICBx
dWFkWzJdID0gR3JhcGhpY3NQb2ludCh4MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApLCB5Mik7
CisgICAgICAgICAgICAgICAgICAgIHF1YWRbM10gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KGFk
amFjZW50V2lkdGgyLCAwKSwgeTEpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEJTTGVmdDoKLSAgICAgICAgICAgICAgICAgICAgcXVhZFswXSA9IEZs
b2F0UG9pbnQoeDEsIHkxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCkpOwotICAgICAgICAgICAg
ICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCh4MSwgeTIgLSBtYXgoLWFkamFjZW50V2lkdGgy
LCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KHgyLCB5MiAt
IG1heChhZGphY2VudFdpZHRoMiwgMCkpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0g
RmxvYXRQb2ludCh4MiwgeTEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApKTsKKyAgICAgICAgICAg
ICAgICAgICAgcXVhZFswXSA9IEdyYXBoaWNzUG9pbnQoeDEsIHkxICsgbWF4KC1hZGphY2VudFdp
ZHRoMSwgMCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhpY3NQb2ludCh4
MSwgeTIgLSBtYXgoLWFkamFjZW50V2lkdGgyLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1
YWRbMl0gPSBHcmFwaGljc1BvaW50KHgyLCB5MiAtIG1heChhZGphY2VudFdpZHRoMiwgMCkpOwor
ICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiwgeTEgKyBtYXgo
YWRqYWNlbnRXaWR0aDEsIDApKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBCU1JpZ2h0OgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0gRmxv
YXRQb2ludCh4MSwgeTEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApKTsKLSAgICAgICAgICAgICAg
ICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoeDEsIHkyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KHgyLCB5MiAtIG1h
eCgtYWRqYWNlbnRXaWR0aDIsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEZs
b2F0UG9pbnQoeDIsIHkxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCkpOworICAgICAgICAgICAg
ICAgICAgICBxdWFkWzBdID0gR3JhcGhpY3NQb2ludCh4MSwgeTEgKyBtYXgoYWRqYWNlbnRXaWR0
aDEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBoaWNzUG9pbnQoeDEs
IHkyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRb
Ml0gPSBHcmFwaGljc1BvaW50KHgyLCB5MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkxICsgbWF4KC1h
ZGphY2VudFdpZHRoMSwgMCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIApAQCAtMTA4NSw3ICsxMDg1LDcgQEAKIEludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9ybXMpCiB7CiAgICAgaWYgKHVzZVRy
YW5zZm9ybXMpIHsKLSAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgICAgIFZl
Y3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsK
IAogICAgICAgICBzaXplX3QgbiA9IHF1YWRzLnNpemUoKTsKQEAgLTEwOTgsNyArMTA5OCw3IEBA
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBhYnNQb3Mg
PSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9B
YnNvbHV0ZSgpOwogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKICAgICBhYnNvbHV0ZVJlY3Rz
KHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoYWJzUG9zKSk7CiAKQEAgLTExMTIsMjAgKzExMTIs
MjAgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1
dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlck9i
amVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMp
CiB7CiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwogICAgIC8vIEZJWE1FOiBhZGRGb2N1c1Jp
bmdSZWN0cygpIG5lZWRzIHRvIGJlIHBhc3NlZCB0aGlzIHRyYW5zZm9ybS11bmF3YXJlCiAgICAg
Ly8gbG9jYWxUb0Fic29sdXRlKCkgb2Zmc2V0IGhlcmUgYmVjYXVzZSBSZW5kZXJJbmxpbmU6OmFk
ZEZvY3VzUmluZ1JlY3RzKCkKICAgICAvLyBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdC4gVGhpcyBk
b2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50
cy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAg
ICBHcmFwaGljc1BvaW50IGFic29sdXRlUG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAgICBh
ZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KGFic29sdXRlUG9pbnQpKTsK
ICAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7IAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKICAg
ICAgICAgcmVjdC5tb3ZlKC1hYnNvbHV0ZVBvaW50LngoKSwgLWFic29sdXRlUG9pbnQueSgpKTsK
LSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHJlY3Qp
KSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVh
ZChyZWN0KSkpOwogICAgIH0KIH0KIApAQCAtMTgyMyw3ICsxODIzLDcgQEAKICAgICByZXR1cm4g
dmlldygpLT52aWV3UmVjdCgpOwogfQogCi1GbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxU
b0Fic29sdXRlKGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wg
dXNlVHJhbnNmb3JtcykgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRv
QWJzb2x1dGUoY29uc3QgR3JhcGhpY3NQb2ludCYgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9v
bCB1c2VUcmFuc2Zvcm1zKSBjb25zdAogewogICAgIFRyYW5zZm9ybVN0YXRlIHRyYW5zZm9ybVN0
YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwgbG9jYWxQb2ludCk7
CiAgICAgbWFwTG9jYWxUb0NvbnRhaW5lcigwLCBmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNm
b3JtU3RhdGUpOwpAQCAtMTgzMiw3ICsxODMyLDcgQEAKICAgICByZXR1cm4gdHJhbnNmb3JtU3Rh
dGUubGFzdFBsYW5hclBvaW50KCk7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQs
IGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVRvTG9jYWwoY29uc3QgR3JhcGhpY3NQb2ludCYgY29udGFpbmVyUG9pbnQsIGJvb2wg
Zml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1TdGF0ZSB0
cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBseUludmVyc2VUcmFuc2Zvcm1EaXJl
Y3Rpb24sIGNvbnRhaW5lclBvaW50KTsKICAgICBtYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChmaXhl
ZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUpOwpAQCAtMTg5OSw3ICsxODk5LDcgQEAK
ICAgICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9iamVjdC0+aGFzTGF5ZXIoKSAm
JiBjb250YWluZXJPYmplY3QtPnN0eWxlKCktPmhhc1BlcnNwZWN0aXZlKCkpIHsKICAgICAgICAg
Ly8gUGVycHNlY3RpdmUgb24gdGhlIGNvbnRhaW5lciBhZmZlY3RzIHVzLCBzbyB3ZSBoYXZlIHRv
IGZhY3RvciBpdCBpbiBoZXJlLgogICAgICAgICBBU1NFUlQoY29udGFpbmVyT2JqZWN0LT5oYXNM
YXllcigpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwZXJzcGVjdGl2ZU9yaWdpbiA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmln
aW4oKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwZXJzcGVjdGl2ZU9yaWdpbiA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmln
aW4oKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZU1hdHJpeDsK
ICAgICAgICAgcGVyc3BlY3RpdmVNYXRyaXguYXBwbHlQZXJzcGVjdGl2ZShjb250YWluZXJPYmpl
Y3QtPnN0eWxlKCktPnBlcnNwZWN0aXZlKCkpOwpAQCAtMTkxMyw3ICsxOTEzLDcgQEAKICNlbmRp
ZgogfQogCi1GbG9hdFF1YWQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvQ29udGFpbmVyUXVhZChjb25z
dCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGJvb2wgZml4ZWQpIGNvbnN0CitHcmFwaGljc1F1YWQgUmVuZGVyT2JqZWN0Ojpsb2Nh
bFRvQ29udGFpbmVyUXVhZChjb25zdCBHcmFwaGljc1F1YWQmIGxvY2FsUXVhZCwgUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CiAgICAg
Ly8gVHJhY2sgdGhlIHBvaW50IGF0IHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQncyBib3VuZGluZyBi
b3guIEFzIG1hcExvY2FsVG9Db250YWluZXIoKSBjYWxscyBvZmZzZXRGcm9tQ29udGFpbmVyKCks
CiAgICAgLy8gaXQgd2lsbCB1c2UgdGhhdCBwb2ludCBhcyB0aGUgcmVmZXJlbmNlIHBvaW50IHRv
IGRlY2lkZSB3aGljaCBjb2x1bW4ncyB0cmFuc2Zvcm0gdG8gYXBwbHkgaW4gbXVsdGlwbGUtY29s
dW1uIGJsb2Nrcy4KQEAgLTIzNzEsNyArMjM3MSw3IEBACiAgICAgICAgICAgICByZWdpb24uY2xp
cC5zZXRXaWR0aCgwKTsKICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0g
bG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gbG9jYWxU
b0Fic29sdXRlKCk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WChhYnNQb3MueCgpICsgc3R5
bGVSZWdpb24ub2Zmc2V0LmxlZnQoKS52YWx1ZSgpKTsKICAgICAgICAgcmVnaW9uLmJvdW5kcy5z
ZXRZKGFic1Bvcy55KCkgKyBzdHlsZVJlZ2lvbi5vZmZzZXQudG9wKCkudmFsdWUoKSk7CiAKQEAg
LTI1ODcsMjQgKzI1ODcsMjQgQEAKICAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzQm91bmRhcmll
c1VwZGF0ZSgpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlck9i
amVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVj
dDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9
CiAKIC8vIFJldHVybnMgdGhlIHNtYWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRo
ZSBwYWludGVkIGNvbnRlbnQKIC8vIHJlc3BlY3RpbmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRl
cnMsIG9wYWNpdHksIHN0cm9rZS13aWR0aCBhbmQgbWFya2VycwotRmxvYXRSZWN0IFJlbmRlck9i
amVjdDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAorR3JhcGhpY3NSZWN0
IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJPYmplY3Q6
OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKQEAgLTI2MTksNyArMjYxOSw3IEBACiAgICAgcmV0dXJu
IGlkZW50aXR5OwogfQogCi1ib29sIFJlbmRlck9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiwgSGl0
VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBI
aXRUZXN0QWN0aW9uKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0J
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsMTIgKzU0NSwxMiBAQAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0
KiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0
JiByKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGlu
Z1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmpl
Y3QqIHBhcnRSZW5kZXJlciwgY29uc3QgR3JhcGhpY3NSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IElu
dFJlY3QmIHIpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhcnRSZWN0KGlucHV0UmVjdCk7Cisg
ICAgR3JhcGhpY3NSZWN0IHBhcnRSZWN0KGlucHV0UmVjdCk7CiAgICAgCiAgICAgLy8gQ29tcHV0
ZSBhbiBvZmZzZXQgYmV0d2VlbiB0aGUgcGFydCByZW5kZXJlciBhbmQgdGhlIGlucHV0IHJlbmRl
cmVyCi0gICAgRmxvYXRTaXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyOworICAgIEdyYXBoaWNz
U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gcGFydFJlbmRlcmVyOwogICAgIHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAh
PSBpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogY29udGFpbmluZ1JlbmRl
cmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwpAQCAtNzkzLDcgKzc5Myw3IEBACiAgICAgICAg
IGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7
CiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8g
em9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRl
ZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1p
bmZsYXRlZFJlY3QueSgpKTsKICAgICB9CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogCiAgICAgaWYg
KCFyZW5kZXJQcm9ncmVzcy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMiAqIHJlY3QueCgpICsgcmVjdC53
aWR0aCgpLCAwKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgt
MSwgMSkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKC0x
LCAxKSk7CiAgICAgfQogICAgIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QubG9jYXRpb24o
KSk7CkBAIC0xMDI5LDEyICsxMDI5LDEyIEBACiAKICAgICBDR0NvbG9yU3BhY2VSZWYgY3NwYWNl
ID0gZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpOwogCi0gICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50
KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpIC8gMi4wZik7CisgICAgR3JhcGhp
Y3NSZWN0IHRvcEdyYWRpZW50KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpIC8g
Mi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgdG9wQ2FsbGJhY2tzID0geyAw
LCBUb3BHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rp
b25SZWY+IHRvcEZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVM
TCwgNCwgTlVMTCwgJnRvcENhbGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+
IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50
TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKHRvcEdy
YWRpZW50LngoKSwgdG9wR3JhZGllbnQubWF4WSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOwogCi0gICAgRmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVz
LCByLnkoKSArIHIuaGVpZ2h0KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICogcmFkaXVzLCBy
LmhlaWdodCgpIC8gMi4wZik7CisgICAgR3JhcGhpY3NSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgp
ICsgcmFkaXVzLCByLnkoKSArIHIuaGVpZ2h0KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICog
cmFkaXVzLCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFj
a3MgYm90dG9tQ2FsbGJhY2tzID0geyAwLCBCb3R0b21HcmFkaWVudEludGVycG9sYXRlLCBOVUxM
IH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IGJvdHRvbUZ1bmN0aW9uKEFkb3B0Q0Ys
IENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJmJvdHRvbUNhbGxiYWNr
cykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNoYWRpbmcoQWRvcHRDRiwg
Q0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54
KCksICBib3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCks
IGJvdHRvbUdyYWRpZW50Lm1heFkoKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFs
c2UpKTsKQEAgLTExMDYsMTggKzExMDYsMTggQEAKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgby0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwogCi0gICAgRmxvYXRQb2ludCBhcnJvdzFbM107Ci0g
ICAgYXJyb3cxWzBdID0gRmxvYXRQb2ludChsZWZ0RWRnZSwgY2VudGVyWSAtIHNwYWNlQmV0d2Vl
bkFycm93cyAvIDIuMGYpOwotICAgIGFycm93MVsxXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBh
cnJvd1dpZHRoLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJy
b3cxWzJdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZ
IC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZiAtIGFycm93SGVpZ2h0KTsKKyAgICBHcmFwaGlj
c1BvaW50IGFycm93MVszXTsKKyAgICBhcnJvdzFbMF0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdl
LCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzFdID0g
R3JhcGhpY3NQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdl
ZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBhcnJvdzFbMl0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdl
ICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBm
IC0gYXJyb3dIZWlnaHQpOwogCiAgICAgLy8gRHJhdyB0aGUgdG9wIGFycm93CiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIGFycm93MSwgdHJ1ZSk7CiAKLSAgICBG
bG9hdFBvaW50IGFycm93MlszXTsKLSAgICBhcnJvdzJbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdl
LCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cyWzFdID0g
RmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5B
cnJvd3MgLyAyLjBmKTsKLSAgICBhcnJvdzJbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJy
b3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmICsgYXJy
b3dIZWlnaHQpOworICAgIEdyYXBoaWNzUG9pbnQgYXJyb3cyWzNdOworICAgIGFycm93MlswXSA9
IEdyYXBoaWNzUG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAy
LjBmKTsKKyAgICBhcnJvdzJbMV0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0
aCwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93MlsyXSA9
IEdyYXBoaWNzUG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIHNw
YWNlQmV0d2VlbkFycm93cyAvIDIuMGYgKyBhcnJvd0hlaWdodCk7CiAKICAgICAvLyBEcmF3IHRo
ZSBib3R0b20gYXJyb3cKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24o
MywgYXJyb3cyLCB0cnVlKTsKQEAgLTEzNDEsNyArMTM0MSw3IEBACiAgICAgICAgICAgICBbc2xp
ZGVyVGh1bWJDZWxsIHN0b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpu
aWwgbW91c2VJc1VwOllFU107CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7Cisg
ICAgR3JhcGhpY3NSZWN0IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRo
ZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRy
YXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgYm91bmRzLnNldEhlaWdodChib3Vu
ZHMuaGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwpAQCAtMTM0OSwxMiArMTM0OSwxMiBAQAogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICAKLSAgICBGbG9h
dFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJl
Y3QgPSBib3VuZHM7CiAgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVuem9v
bWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAg
ICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxl
dmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3Qu
eCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxl
KEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21l
ZFJlY3QueSgpKTsKICAgICB9CiAgICAgCkBAIC0xMzYyLDEyICsxMzYyLDEyIEBACiAgICAgLy8g
V29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzk0MjE3ODE+LgogICAgIGlmICghby0+dmll
dygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCkpIHsKICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnRyYW5zbGF0ZSgwLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT50cmFuc2xhdGUoMCwgLSh1bnpvb21lZFJlY3QueSgpICsgdW56b29tZWRSZWN0LmhlaWdo
dCgpKSk7CiAgICAgfQogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnRyYW5zbGF0ZSgwLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNj
YWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xh
dGUoMCwgLSh1bnpvb21lZFJlY3QueSgpICsgdW56b29tZWRSZWN0LmhlaWdodCgpKSk7CiAjZW5k
aWYKICAgICAKQEAgLTEzOTQsNyArMTM5NCw3IEBACiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRX
aWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVk
UmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21l
ZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6
b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUo
R3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsK
ICAgICB9CiAKQEAgLTE0ODYsNyArMTQ4Niw3IEBACiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBv
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMg
PSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJC
b3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CisgICAgR3JhcGhpY3NSZWN0IGxvY2FsQm91bmRzID0g
W3NlYXJjaCBjYW5jZWxCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94
KCktPmJvcmRlckJveFJlY3QoKSldOwogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAv
LyBUYWtlIGNhcmUgb2YgY2FzZXMgd2hlcmUgdGhlIGNhbmNlbCBidXR0b24gd2FzIG5vdCBhbGln
bmVkIHdpdGggdGhlIHJpZ2h0IGJvcmRlciBvZiB0aGUgaW5wdXQgZWxlbWVudCAoZm9yIGUuZy4K
QEAgLTE0OTksMTIgKzE0OTksMTIgQEAKIAogICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFp
bnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAKLSAgICBG
bG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKKyAgICBHcmFwaGljc1JlY3QgdW56
b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAg
ICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxl
dmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0
KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVu
em9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxldmVsLCB6b29tTGV2ZWwp
KTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0Lngo
KSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIApAQCAtMTU3MSw3ICsxNTcxLDcgQEAKIAog
ICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOwogCi0g
ICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91
bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAgIEdy
YXBoaWNzUmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5k
czpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKICAgICBsb2Nh
bEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9j
YWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhG
cmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKQEAgLTE2MDcsNyAr
MTYwNyw3IEBACiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7CiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpOwogCi0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hC
dXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJl
Y3QoKSldOworICAgIEdyYXBoaWNzUmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0
dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0
KCkpXTsKICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVu
ZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwogICAgIAogICAgIEludFJlY3QgdW56b29tZWRS
ZWN0KGxvY2FsQm91bmRzKTsKQEAgLTE2MTUsNyArMTYxNSw3IEBACiAgICAgICAgIHVuem9vbWVk
UmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAg
IHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVs
KTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgp
LCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4
dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJl
Y3QueSgpKTsKICAgICB9CiAKQEAgLTE3MTEsMTUgKzE3MTEsMTUgQEAKIH0KIAogLy8gVXRpbGl0
eSB0byBzY2FsZSB3aGVuIHRoZSBVSSBwYXJ0IGFyZSBub3Qgc2NhbGVkIGJ5IHdrRHJhd01lZGlh
VUlQYXJ0Ci1zdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRD
b250ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKK3N0YXRpYyBHcmFwaGljc1JlY3QgZ2V0VW56b29tZWRS
ZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQogewogICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBGbG9hdFJlY3Qg
dW56b29tZWRSZWN0KG9yaWdpbmFsUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVj
dChvcmlnaW5hbFJlY3QpOwogICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZiAmJiBtZWRpYUNvbnRy
b2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lKSB7CiAgICAgICAg
IHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7
CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8g
em9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21l
ZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11
bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHVuem9vbWVkUmVjdDsKQEAgLTE4
MTAsNyArMTgxMCw3IEBACiAgICAgQ29udGV4dENvbnRhaW5lciBjZ0NvbnRleHRDb250YWluZXIo
cGFpbnRJbmZvLmNvbnRleHQpOwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY2dDb250ZXh0
Q29udGFpbmVyLmNvbnRleHQoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0g
Z2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsK
KyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0
Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKICAgICB3a0RyYXdNZWRpYVNsaWRlclRy
YWNrKG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGNvbnRleHQsIHVuem9vbWVkUmVjdCwgCiAgICAg
ICAgIHRpbWVMb2FkZWQsIGN1cnJlbnRUaW1lLCBkdXJhdGlvbiwgZ2V0TWVkaWFVSVBhcnRTdGF0
ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODg0LDcgKzE4ODQsNyBAQAog
CiAgICAgQ29udGV4dENvbnRhaW5lciBjZ0NvbnRleHRDb250YWluZXIocGFpbnRJbmZvLmNvbnRl
eHQpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZv
LmNvbnRleHQpOwotICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RB
bmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOworICAgIEdyYXBoaWNzUmVj
dCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChv
LCBwYWludEluZm8sIHIpOwogICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVE
aXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250YWluZXIuY29udGV4
dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpAQCAtMTg5Nyw3ICsxODk3LDcgQEAKIAogICAgIENvbnRleHRDb250
YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250ZXh0KTsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBG
bG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENv
bnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0ID0g
Z2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsK
ICAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNv
bnRyb2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250YWluZXIuY29udGV4dCgpLCB1bnpvb21lZFJl
Y3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNlbGwuaCIKIAogI2luY2x1ZGUgIkNvbGxhcHNlZEJvcmRlclZhbHVlLmgiCi0jaW5j
bHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TFRhYmxlQ2VsbEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJEZXRhaWxzTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCwzNiArNDQsMzYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBQYXRoIGNy
ZWF0ZVBhdGgoY29uc3QgRmxvYXRQb2ludCogcGF0aCkKK3N0YXRpYyBQYXRoIGNyZWF0ZVBhdGgo
Y29uc3QgR3JhcGhpY3NQb2ludCogcGF0aCkKIHsKICAgICBQYXRoIHJlc3VsdDsKLSAgICByZXN1
bHQubW92ZVRvKEZsb2F0UG9pbnQocGF0aFswXS54KCksIHBhdGhbMF0ueSgpKSk7CisgICAgcmVz
dWx0Lm1vdmVUbyhHcmFwaGljc1BvaW50KHBhdGhbMF0ueCgpLCBwYXRoWzBdLnkoKSkpOwogICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgNDsgKytpKQotICAgICAgICByZXN1bHQuYWRkTGluZVRvKEZs
b2F0UG9pbnQocGF0aFtpXS54KCksIHBhdGhbaV0ueSgpKSk7CisgICAgICAgIHJlc3VsdC5hZGRM
aW5lVG8oR3JhcGhpY3NQb2ludChwYXRoW2ldLngoKSwgcGF0aFtpXS55KCkpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVEb3duQXJyb3dQYXRoKCkKIHsKLSAg
ICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgRmxvYXRQb2ludCgwLjBmLCAwLjA3ZiksIEZsb2F0
UG9pbnQoMC41ZiwgMC45M2YpLCBGbG9hdFBvaW50KDEuMGYsIDAuMDdmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjA3ZikgfTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1s0XSA9IHsgR3JhcGhpY3NQ
b2ludCgwLjBmLCAwLjA3ZiksIEdyYXBoaWNzUG9pbnQoMC41ZiwgMC45M2YpLCBHcmFwaGljc1Bv
aW50KDEuMGYsIDAuMDdmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAwLjA3ZikgfTsKICAgICByZXR1
cm4gY3JlYXRlUGF0aChwb2ludHMpOwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVVcEFycm93UGF0
aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0UG9pbnQoMC4wZiwgMC45
M2YpLCBGbG9hdFBvaW50KDAuNWYsIDAuMDdmKSwgRmxvYXRQb2ludCgxLjBmLCAwLjkzZiksIEZs
b2F0UG9pbnQoMC4wZiwgMC45M2YpIH07CisgICAgR3JhcGhpY3NQb2ludCBwb2ludHNbNF0gPSB7
IEdyYXBoaWNzUG9pbnQoMC4wZiwgMC45M2YpLCBHcmFwaGljc1BvaW50KDAuNWYsIDAuMDdmKSwg
R3JhcGhpY3NQb2ludCgxLjBmLCAwLjkzZiksIEdyYXBoaWNzUG9pbnQoMC4wZiwgMC45M2YpIH07
CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBhdGggY3JlYXRl
TGVmdEFycm93UGF0aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0UG9p
bnQoMS4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4xNGYsIDAuNWYpLCBGbG9hdFBvaW50KDEuMGYs
IDEuMGYpLCBGbG9hdFBvaW50KDEuMGYsIDAuMGYpIH07CisgICAgR3JhcGhpY3NQb2ludCBwb2lu
dHNbNF0gPSB7IEdyYXBoaWNzUG9pbnQoMS4wZiwgMC4wZiksIEdyYXBoaWNzUG9pbnQoMC4xNGYs
IDAuNWYpLCBHcmFwaGljc1BvaW50KDEuMGYsIDEuMGYpLCBHcmFwaGljc1BvaW50KDEuMGYsIDAu
MGYpIH07CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBhdGgg
Y3JlYXRlUmlnaHRBcnJvd1BhdGgoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnRzWzRdID0geyBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuODZmLCAwLjVmKSwgRmxvYXRQb2lu
dCgwLjBmLCAxLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSB9OworICAgIEdyYXBoaWNzUG9p
bnQgcG9pbnRzWzRdID0geyBHcmFwaGljc1BvaW50KDAuMGYsIDAuMGYpLCBHcmFwaGljc1BvaW50
KDAuODZmLCAwLjVmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAxLjBmKSwgR3JhcGhpY3NQb2ludCgw
LjBmLCAwLjBmKSB9OwogICAgIHJldHVybiBjcmVhdGVQYXRoKHBvaW50cyk7CiB9CiAKQEAgLTEx
Niw3ICsxMTYsNyBAQAogewogICAgIFBhdGggcmVzdWx0ID0gZ2V0Q2Fub25pY2FsUGF0aCgpOwog
ICAgIHJlc3VsdC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUobG9naWNhbEhlaWdo
dCgpKSk7Ci0gICAgcmVzdWx0LnRyYW5zbGF0ZShGbG9hdFNpemUob3JpZ2luLngoKSwgb3JpZ2lu
LnkoKSkpOworICAgIHJlc3VsdC50cmFuc2xhdGUoR3JhcGhpY3NTaXplKG9yaWdpbi54KCksIG9y
aWdpbi55KCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDI1ICszMjcs
MjUgQEAKICAgICAgICAgcGFyZW50KCktPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7CiB9
CiAKLUZsb2F0UG9pbnQgSW5saW5lQm94Ojpsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCkKK0dy
YXBoaWNzUG9pbnQgSW5saW5lQm94Ojpsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCkKIHsKICAg
ICBpZiAoIXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkp
Ci0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KHgoKSwgeSgpKTsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzUG9pbnQoeCgpLCB5KCkpOwogICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHJvb3QoKS0+
YmxvY2soKTsKICAgICBpZiAoYmxvY2stPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KHgoKSwgYmxvY2stPmhlaWdodCgpIC0gaGVp
Z2h0KCkgLSB5KCkpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2ludCh4KCksIGJsb2NrLT5o
ZWlnaHQoKSAtIGhlaWdodCgpIC0geSgpKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBGbG9h
dFBvaW50KGJsb2NrLT53aWR0aCgpIC0gd2lkdGgoKSAtIHgoKSwgeSgpKTsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUG9pbnQoYmxvY2stPndpZHRoKCkgLSB3aWR0aCgpIC0geCgpLCB5KCkpOwog
fQogCi12b2lkIElubGluZUJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgSW5saW5lQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0JiByZWN0KQog
ewogICAgIGlmICghcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJvb3QoKS0+YmxvY2soKS0+ZmxpcEZvcldyaXRp
bmdNb2RlKHJlY3QpOwogfQogCi1GbG9hdFBvaW50IElubGluZUJveDo6ZmxpcEZvcldyaXRpbmdN
b2RlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorR3JhcGhpY3NQb2ludCBJbmxpbmVCb3g6OmZs
aXBGb3JXcml0aW5nTW9kZShjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBpZiAo
IXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAg
ICAgIHJldHVybiBwb2ludDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAvLyBUaGUgY29udGVudCBi
b3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5zZm9ybXMuCiAgICAgTGF5b3V0UmVj
dCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsKICAgICAvLyBUaGUgY29udGVudCBib3ggY29u
dmVydGVkIHRvIGFic29sdXRlIGNvb3JkcyAodGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50
KS4KLSAgICBGbG9hdFF1YWQgYWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0OworICAgIEdyYXBo
aWNzUXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3Q7CiAKICAgICAvLyBCb3VuZHMgb2Yg
dGhlIG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3Jtcwog
ICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIEludFBvaW50KiBjYWNoZWRPZmZzZXRUb1Jl
cGFpbnRDb250YWluZXIpIGNvbnN0OwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQWZ0
ZXIoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAgICAgCiAgICAgSW50UmVjdCBy
ZWZsZWN0aW9uQm94KCkgY29uc3Q7CiAgICAgaW50IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdDsK
QEAgLTM5NCw4ICszOTQsOCBAQAogICAgIExheW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZUlu
Y2x1ZGluZ0NvbHVtbnMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKICAgICBJbnRTaXplIGZs
aXBGb3JXcml0aW5nTW9kZShjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdm9pZCBmbGlwRm9y
V3JpdGluZ01vZGUoSW50UmVjdCYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZmxpcEZvcldyaXRp
bmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZsaXBGb3JXcml0aW5n
TW9kZShGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGZsaXBGb3JXcml0aW5n
TW9kZShjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CisgICAgdm9pZCBmbGlwRm9yV3JpdGlu
Z01vZGUoR3JhcGhpY3NSZWN0JikgY29uc3Q7CiAgICAgSW50U2l6ZSBsb2NhdGlvbk9mZnNldElu
Y2x1ZGluZ0ZsaXBwaW5nKCkgY29uc3Q7CiAKICAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVy
Zmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtNDA2LDcgKzQw
Niw3IEBACiAgICAgUmVuZGVyT3ZlcmZsb3cqIGhhc1JlbmRlck92ZXJmbG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyZmxvdy5nZXQoKTsgfQogCiAgICAgdmlydHVhbCBib29sIG5lZWRzUHJlZmVy
cmVkV2lkdGhzUmVjYWxjdWxhdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
SW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIC8qIGludHJpbnNpY1JhdGlvICov
LCBib29sJiAvKiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplICovKSBjb25zdCB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24oR3JhcGhpY3NTaXpl
JiAvKiBpbnRyaW5zaWNSYXRpbyAqLywgYm9vbCYgLyogaXNQZXJjZW50YWdlSW50cmluc2ljU2l6
ZSAqLykgY29uc3QgeyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVz
dHJveWVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNl
dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDcgKzY5Miw3IEBACiAgICAgICAg
IGlmIChuZWVkc0xheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBp
ZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwb3MgPSBsb2Nh
bFRvQWJzb2x1dGUoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zID0gbG9jYWxUb0Fi
c29sdXRlKCk7CiAgICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1fY29scywgZXZ0LT5hYnNvbHV0
ZUxvY2F0aW9uKCkueCgpIC0gcG9zLngoKSk7CiAgICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1f
cm93cywgZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkueSgpIC0gcG9zLnkoKSk7CiAgICAgICAgICAg
ICBpZiAobV9jb2xzLm1fc3BsaXRCZWluZ1Jlc2l6ZWQgIT0gbm9TcGxpdCB8fCBtX3Jvd3MubV9z
cGxpdEJlaW5nUmVzaXplZCAhPSBub1NwbGl0KSB7CkBAIC03MDIsNyArNzAyLDcgQEAKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQgfHwgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSkgewotICAgICAgICAgICAgRmxv
YXRQb2ludCBwb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9p
bnQgcG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAgICAgICBjb250aW51ZVJlc2l6aW5n
KG1fY29scywgZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkueCgpIC0gcG9zLngoKSk7CiAgICAgICAg
ICAgICBjb250aW51ZVJlc2l6aW5nKG1fcm93cywgZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkueSgp
IC0gcG9zLnkoKSk7CiAgICAgICAgICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNldXBFdmVudCAmJiBldnQtPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBACiAjaWZuZGVmIExheW91dFR5cGVzX2gKICNkZWZpbmUgTGF5b3V0VHlwZXNf
aAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwyMiArNDYs
MjIgQEAKIHR5cGVkZWYgSW50U2l6ZSBMYXlvdXRTaXplOwogdHlwZWRlZiBJbnRSZWN0IExheW91
dFJlY3Q7CiAKLWlubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoraW5saW5lIExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVj
dCk7CiB9CiAKLWlubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkKK2lubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3Qg
R3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOwogfQog
Ci1pbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHApCitpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHApCiB7CiAgICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChwKTsKIH0KIAotaW5saW5l
IExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCitpbmxp
bmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcykK
IHsKICAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KHMpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVk
ZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgpAQCAt
MzcyLDEyICszNzIsMTIgQEAKICAgICAvLyBzaW5jZSBzdHJva2Utd2lkdGggaXMgaWdub3JlZCAo
YW5kIG1hcmtlciBzaXplIGNhbiBkZXBlbmQgb24gc3Ryb2tlLXdpZHRoKS4KICAgICAvLyBvYmpl
Y3RCb3VuZGluZ0JveCBpcyByZXR1cm5lZCBsb2NhbCBjb29yZGluYXRlcy4KICAgICAvLyBUaGUg
bmFtZSBvYmplY3RCb3VuZGluZ0JveCBpcyB0YWtlbiBmcm9tIHRoZSBTVkcgMS4xIHNwZWMuCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIHNt
YWxsZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRlbnQKICAg
ICAvLyByZXNwZWN0aW5nIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0ZXJzLCBvcGFjaXR5LCBzdHJv
a2Utd2lkdGggYW5kIG1hcmtlcnMKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIG9ubHkgcmV0
dXJucyB0aGUgdHJhbnNmb3JtPSIiIHZhbHVlIGZyb20gdGhlIGVsZW1lbnQKICAgICAvLyBtb3N0
IGNhbGxzaXRlcyB3YW50IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBpbnN0ZWFkLgpAQCAtMzg3
LDEwICszODcsMTAgQEAKICAgICAvLyBUaGlzIGluY2x1ZGVzIGFueSB2aWV3cG9ydCB0cmFuc2Zv
cm1zIGFuZCB4L3kgb2Zmc2V0cyBhcyB3ZWxsIGFzIHRoZSB0cmFuc2Zvcm09IiIgdmFsdWUgb2Zm
IHRoZSBlbGVtZW50LgogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICAvLyBTVkcgdXNlcyBGbG9hdFBvaW50IHBy
ZWNpc2UgaGl0IHRlc3RpbmcsIGFuZCBwYXNzZXMgdGhlIHBvaW50IGluIHBhcmVudAorICAgIC8v
IFNWRyB1c2VzIEdyYXBoaWNzUG9pbnQgcHJlY2lzZSBoaXQgdGVzdGluZywgYW5kIHBhc3NlcyB0
aGUgcG9pbnQgaW4gcGFyZW50CiAgICAgLy8gY29vcmRpbmF0ZXMgaW5zdGVhZCBvZiBpbiByZXBh
aW50IGNvbnRhaW5lciBjb29yZGluYXRlcy4gIEV2ZW50dWFsbHkgdGhlCiAgICAgLy8gcmVzdCBv
ZiB0aGUgcmVuZGVyaW5nIHRyZWUgd2lsbCBtb3ZlIHRvIGEgc2ltaWxhciBtb2RlbC4KLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50
LCBIaXRUZXN0QWN0aW9uKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0Fub255bW91cygpIGNvbnN0
IHsgcmV0dXJuIG1faXNBbm9ueW1vdXM7IH0KQEAgLTU3NSwxNiArNTc1LDE2IEBACiAKICAgICAv
LyBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcwog
ICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkuIElmIHVzZVRyYW5zZm9ybXMgaXMgdHJ1ZSwgdGFrZSB0
cmFuc2Zvcm1zIGludG8gYWNjb3VudC4gRXZlbnR1YWxseSBsb2NhbFRvQWJzb2x1dGUoKSB3aWxs
IGFsd2F5cyBiZSB0cmFuc2Zvcm0tYXdhcmUuCi0gICAgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1
dGUoY29uc3QgRmxvYXRQb2ludCYgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBmaXhl
ZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgRmxvYXRQ
b2ludCBhYnNvbHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgZml4ZWQgPSBmYWxz
ZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQg
bG9jYWxUb0Fic29sdXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxvY2FsUG9pbnQgPSBHcmFwaGlj
c1BvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2Up
IGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVUb0xvY2FsKGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBj
b25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFic29sdXRlIGNvb3JkaW5h
dGVzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCi0gICAgRmxvYXRRdWFkIGxvY2Fs
VG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFsc2Up
IGNvbnN0CisgICAgR3JhcGhpY3NRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgR3JhcGhp
Y3NRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbG9jYWxUb0NvbnRhaW5lclF1YWQocXVhZCwgMCwgZml4ZWQpOwogICAgIH0KICAgICAv
LyBDb252ZXJ0IGEgbG9jYWwgcXVhZCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiBjb250
YWluZXIsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICBGbG9hdFF1YWQgbG9j
YWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgR3JhcGhp
Y3NRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYsIFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0
OwogCiAgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVyKCkgcmVuZGVy
ZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKS4gSW4gbXVsdGktY29sdW1uIGxheW91dCwKICAgICAv
LyBkaWZmZXJlbnQgb2Zmc2V0cyBhcHBseSBhdCBkaWZmZXJlbnQgcG9pbnRzLCBzbyByZXR1cm4g
dGhlIG9mZnNldCB0aGF0IGFwcGxpZXMgdG8gdGhlIGdpdmVuIHBvaW50LgpAQCAtNTk3LDkgKzU5
Nyw5IEBACiAgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5z
Zm9ybXMgPSBmYWxzZSk7CiAKICAgICAvLyBCdWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBhYnNv
bHV0ZSBjb29yZHMgZm9yIGxpbmUgYm94ZXMKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRz
KFZlY3RvcjxHcmFwaGljc1F1YWQ+JikgeyB9CiAKLSAgICB2b2lkIGFic29sdXRlRm9jdXNSaW5n
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKKyAgICB2b2lkIGFic29sdXRlRm9jdXNSaW5nUXVh
ZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogICAgIC8vIHRoZSByZWN0IHRoYXQgd2lsbCBi
ZSBwYWludGVkIGlmIHRoaXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFpbnRpbmdSb290CiAg
ICAgTGF5b3V0UmVjdCBwYWludGluZ1Jvb3RSZWN0KExheW91dFJlY3QmIHRvcExldmVsUmVjdCk7
CkBAIC0xMDc5LDI3ICsxMDc5LDI3IEBACiAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9v
bSh2YWx1ZSwgcmVuZGVyZXItPnN0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBhZGp1c3RGbG9h
dFF1YWRGb3JBYnNvbHV0ZVpvb20oRmxvYXRRdWFkJiBxdWFkLCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkRm9yQWJzb2x1dGVab29tKEdyYXBo
aWNzUXVhZCYgcXVhZCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBmbG9hdCB6b29t
ID0gcmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICBpZiAoem9vbSAhPSAx
KQogICAgICAgICBxdWFkLnNjYWxlKDEgLyB6b29tLCAxIC8gem9vbSk7CiB9CiAKLWlubGluZSB2
b2lkIGFkanVzdEZsb2F0UmVjdEZvckFic29sdXRlWm9vbShGbG9hdFJlY3QmIHJlY3QsIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCitpbmxpbmUgdm9pZCBhZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNv
bHV0ZVpvb20oR3JhcGhpY3NSZWN0JiByZWN0LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewog
ICAgIGZsb2F0IHpvb20gPSByZW5kZXJlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogICAg
IGlmICh6b29tICE9IDEpCiAgICAgICAgIHJlY3Quc2NhbGUoMSAvIHpvb20sIDEgLyB6b29tKTsK
IH0KIAotaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKEZsb2F0UXVhZCYg
cXVhZCwgZmxvYXQgcGFnZVNjYWxlKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkRm9y
UGFnZVNjYWxlKEdyYXBoaWNzUXVhZCYgcXVhZCwgZmxvYXQgcGFnZVNjYWxlKQogewogICAgIGlm
IChwYWdlU2NhbGUgIT0gMSkKICAgICAgICAgcXVhZC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAxIC8g
cGFnZVNjYWxlKTsKIH0KIAotaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxl
KEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxlKQoraW5saW5lIHZvaWQgYWRqdXN0R3Jh
cGhpY3NSZWN0Rm9yUGFnZVNjYWxlKEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxl
KQogewogICAgIGlmIChwYWdlU2NhbGUgIT0gMSkKICAgICAgICAgcmVjdC5zY2FsZSgxIC8gcGFn
ZVNjYWxlLCAxIC8gcGFnZVNjYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJF
dmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtNzQyLDE1ICs3NDIsMTUgQEAKICAgICBy
ZXR1cm4gdDsKIH0KIAotRmxvYXRQb2ludCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4o
KSBjb25zdAorR3JhcGhpY3NQb2ludCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4oKSBj
b25zdAogewogICAgIGlmICghcmVuZGVyZXIoKS0+aGFzVHJhbnNmb3JtKCkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiAKICAg
ICBjb25zdCBJbnRSZWN0IGJvcmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5ib3Jk
ZXJCb3hSZWN0KCk7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUo
KTsKIAotICAgIHJldHVybiBGbG9hdFBvaW50KHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKS5j
YWxjRmxvYXRWYWx1ZShib3JkZXJCb3gud2lkdGgoKSksCisgICAgcmV0dXJuIEdyYXBoaWNzUG9p
bnQoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC53
aWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5Z
KCkuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94LmhlaWdodCgpKSk7CiB9CiAKQEAgLTExMjQsNyAr
MTEyNCw3IEBACiAgICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgKCFhbmNlc3Rv
ckxheWVyIHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVyZXIoKS0+dmlldygpLT5sYXllcigpKSkg
ewogICAgICAgICAvLyBJZiB0aGUgZml4ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3Qs
IGp1c3QgYWRkIGluIHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBi
eSBjYWxsaW5nCiAgICAgICAgIC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3
LgotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50KCksIHRydWUpOworICAgICAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IHJl
bmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIHRydWUpOwogICAgICAg
ICBsb2NhdGlvbiArPSBmbG9vcmVkSW50U2l6ZShhYnNQb3MpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTM2NSw3ICsxMzY1LDcgQEAKICAgICAgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCiAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAotICAgICAgICBGbG9hdFF1YWQg
cXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7Cisg
ICAgICAgIEdyYXBoaWNzUXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gR3JhcGhpY3NR
dWFkKHJlY3RGb3JSZXBhaW50KTsKICAgICAgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCiAgICAg
ICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQo
cXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CkBAIC0xNDAxLDcgKzE0MDEsNyBAQAogICAgICAg
ICAvLyBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0
aGUgc2xpZGVyIGluIFNhZmFyaSBSU1MuCiAgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7CiAgICAgICAgIEFTU0VSVChib3gpOwotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9
IGJveC0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0g
Ym94LT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgYWJzUG9zLm1vdmUoYm94LT5ib3JkZXJM
ZWZ0KCksIGJveC0+Ym9yZGVyVG9wKCkpOwogCiAgICAgICAgIEludFJlY3QgbGF5ZXJCb3VuZHMg
PSBJbnRSZWN0KGFic1Bvcy54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIGFic1Bvcy55KCkgKyBzY3Jv
bGxZT2Zmc2V0KCksIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CkBA
IC0yOTA0LDEwICsyOTA0LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRmxhdHRl
biB0aGUgcG9pbnQgaW50byB0aGUgdGFyZ2V0IHBsYW5lCi0gICAgRmxvYXRQb2ludCB0YXJnZXRQ
b2ludCA9IHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCk7CisgICAgR3JhcGhpY3NQb2ludCB0
YXJnZXRQb2ludCA9IHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCk7CiAgICAgCiAgICAgLy8g
Tm93IG1hcCB0aGUgcG9pbnQgYmFjayB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0sIHdoaWNoIGNvbXB1
dGVzIFouCi0gICAgRmxvYXRQb2ludDNEIGJhY2ttYXBwZWRQb2ludCA9IHRyYW5zZm9ybVN0YXRl
Lm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKHRhcmdldFBvaW50
KSk7CisgICAgR3JhcGhpY3NQb2ludDNEIGJhY2ttYXBwZWRQb2ludCA9IHRyYW5zZm9ybVN0YXRl
Lm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0ubWFwUG9pbnQoR3JhcGhpY3NQb2ludDNEKHRhcmdldFBv
aW50KSk7CiAgICAgcmV0dXJuIGJhY2ttYXBwZWRQb2ludC56KCk7CiB9CiAKQEAgLTI5MjQsNyAr
MjkyNCw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3Qg
dGltZSB3ZSBuZWVkIHRvIG1ha2UgdHJhbnNmb3JtIHN0YXRlLCB0aGVuIGJhc2UgaXQgb2ZmIG9m
IGhpdFRlc3RQb2ludCwKICAgICAgICAgLy8gd2hpY2ggaXMgcmVsYXRpdmUgdG8gcm9vdExheWVy
LgotICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3Jl
YXRlKGhpdFRlc3RQb2ludCwgRmxvYXRRdWFkKGhpdFRlc3RSZWN0KSk7CisgICAgICAgIHRyYW5z
Zm9ybVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFBvaW50
LCBHcmFwaGljc1F1YWQoaGl0VGVzdFJlY3QpKTsKICAgICAgICAgY29udmVydFRvTGF5ZXJDb29y
ZHMocm9vdExheWVyLCBvZmZzZXQpOwogICAgIH0KICAgICAKQEAgLTM0OTEsNyArMzQ5MSw3IEBA
CiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdExheWVyID0gY2xpcHBpbmdSb290KCk7CiAg
ICAgSW50UmVjdCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBv
dXRsaW5lUmVjdDsKICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwcGluZ1Jvb3RMYXllciwgcmVuZGVy
Vmlldy0+ZG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdy
b3VuZFJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJl
bmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGZvcmVncm91bmRSZWN0KSku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJl
bmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKGZvcmVncm91bmRSZWN0
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAogSW50UmVjdCBSZW5kZXJMYXllcjo6c2Vs
ZkNsaXBSZWN0KCkgY29uc3QKQEAgLTM1MDAsNyArMzUwMCw3IEBACiAgICAgUmVuZGVyTGF5ZXIq
IGNsaXBwaW5nUm9vdExheWVyID0gY2xpcHBpbmdSb290KCk7CiAgICAgSW50UmVjdCBsYXllckJv
dW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKICAgICBj
YWxjdWxhdGVSZWN0cyhjbGlwcGluZ1Jvb3RMYXllciwgcmVuZGVyVmlldy0+ZG9jdW1lbnRSZWN0
KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVS
ZWN0KTsKLSAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGJhY2tncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKyAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKGJhY2tncm91bmRSZWN0KSkuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzKGNvbnN0IEludFJlY3QmIGJvdW5kcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMTYgKzI1MiwxNiBA
QAogICAgIHZvaWQgc2V0TGF5b3V0T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYsIExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKICAgICB2b2lkIHNldFZpc3VhbE92
ZXJmbG93KGNvbnN0IExheW91dFJlY3QmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSk7CiAKLSAgICBGbG9hdFJlY3QgZnJhbWVSZWN0SW5jbHVkaW5nTGluZUhlaWdo
dChMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKKyAgICBH
cmFwaGljc1JlY3QgZnJhbWVSZWN0SW5jbHVkaW5nTGluZUhlaWdodChMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hv
cml6b250YWwoKSkKLSAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QobV90b3BMZWZ0LngoKSwg
bGluZVRvcCwgd2lkdGgoKSwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KGxpbmVUb3AsIG1fdG9wTGVmdC55KCksIGxpbmVCb3R0b20gLSBsaW5lVG9wLCBo
ZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1fdG9wTGVmdC54KCks
IGxpbmVUb3AsIHdpZHRoKCksIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdChsaW5lVG9wLCBtX3RvcExlZnQueSgpLCBsaW5lQm90dG9tIC0gbGluZVRv
cCwgaGVpZ2h0KCkpOwogICAgIH0KICAgICAKLSAgICBGbG9hdFJlY3QgbG9naWNhbEZyYW1lUmVj
dEluY2x1ZGluZ0xpbmVIZWlnaHQoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20pIGNvbnN0CisgICAgR3JhcGhpY3NSZWN0IGxvZ2ljYWxGcmFtZVJlY3RJbmNsdWRpbmdM
aW5lSGVpZ2h0KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChsb2dpY2FsTGVmdCgpLCBsaW5lVG9w
LCBsb2dpY2FsV2lkdGgoKSwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOworICAgICAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KGxvZ2ljYWxMZWZ0KCksIGxpbmVUb3AsIGxvZ2ljYWxXaWR0aCgpLCBsaW5l
Qm90dG9tIC0gbGluZVRvcCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZGVzY2VuZGFudHNIYXZl
U2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudHNI
YXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAKICAgICB2b2lkIHNldE1pc3NpbmdQbHVnaW5J
bmRpY2F0b3JJc1ByZXNzZWQoYm9vbCk7CiAgICAgYm9vbCBpc0luTWlzc2luZ1BsdWdpbkluZGlj
YXRvcihNb3VzZUV2ZW50Kik7Ci0gICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJl
Y3QsIFBhdGgmLCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmLCBUZXh0UnVu
JiwgZmxvYXQmIHRleHRXaWR0aCk7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRy
eShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEdyYXBoaWNzUmVjdCYgY29u
dGVudFJlY3QsIFBhdGgmLCBHcmFwaGljc1JlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQm
LCBUZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCk7CiAKICAgICBTdHJpbmcgbV9yZXBsYWNlbWVu
dFRleHQ7CiAgICAgYm9vbCBtX2hhc0ZhbGxiYWNrQ29udGVudDsgLy8gRklYTUU6IFRoaXMgYmVs
b25ncyBvbiBIVE1MT2JqZWN0RWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAkocmV2
aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFNxdWFyZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTAgKzEwOCwxMCBAQAog
ICAgIAogICAgIHdpZHRoICs9IHRvcFN0YXJ0U2hpZnQ7CiAgICAgCi0gICAgRmxvYXRQb2ludCB0
b3BTdGFydChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggLSB0b3BTdGFydFNo
aWZ0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7Ci0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0
KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAqIGdSYWRpY2FsQm90dG9tUG9p
bnRYUG9zICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhIZWlnaHQgKyBnUmFkaWNhbEJh
c2VQYWQpOwotICAgIEZsb2F0UG9pbnQgdG9wTGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IGZyb250V2lkdGggKiBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSArIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7Ci0gICAgRmxv
YXRQb2ludCBsZWZ0RW5kKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICwgdG9wTGVmdC55KCkgKyBn
UmFkaWNhbExlZnRFbmRZU2hpZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICBHcmFwaGlj
c1BvaW50IHRvcFN0YXJ0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAtIHRv
cFN0YXJ0U2hpZnQsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50
IGJvdHRvbUxlZnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGlj
YWxCb3R0b21Qb2ludFhQb3MgLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCAr
IGdSYWRpY2FsQmFzZVBhZCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BMZWZ0KGFkanVzdGVkUGFp
bnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAqIGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVp
Z2h0KTsKKyAgICBHcmFwaGljc1BvaW50IGxlZnRFbmQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkg
LCB0b3BMZWZ0LnkoKSArIGdSYWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXpl
KCkpOwogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqaW5m
by5jb250ZXh0KTsKICAgICAKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgIAogICAgIFBhdGggcm9v
dDsKICAgICAKLSAgICByb290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRo
ICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKKyAgICByb290Lm1vdmVUbyhHcmFwaGljc1Bv
aW50KHRvcFN0YXJ0LngoKSArIHdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAg
ICAvLyBkcmF3IHRvcAogICAgIHJvb3QuYWRkTGluZVRvKHRvcFN0YXJ0KTsKICAgICAvLyBkcmF3
IGZyb20gdG9wIGxlZnQgY29ybmVyIHRvIGJvdHRvbSBwb2ludCBvZiByYWRpY2FsCkBAIC0xNDMs
NyArMTQzLDcgQEAKICAgICBtYXNrLm1vdmVUbyh0b3BTdGFydCk7CiAgICAgbWFzay5hZGRMaW5l
VG8oYm90dG9tTGVmdCk7CiAgICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7Ci0gICAgbWFzay5h
ZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRv
cExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKKyAgICBtYXNrLmFkZExpbmVUbyhHcmFwaGljc1Bv
aW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0
RW5kLnkoKSkpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTAgKzE0
MiwxMCBAQAogICAgIExheW91dFVuaXQgc3RhcnQgPSBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IGluZGV4V2lkdGggKyBnUmFkaWNhbExlZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgp
LnZhbHVlKCkgLSByb290UGFkOwogICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBh
ZCk7CiAgICAgCi0gICAgRmxvYXRQb2ludCB0b3BTdGFydChzdGFydCAtIHRvcFN0YXJ0U2hpZnQs
IHBhaW50T2Zmc2V0LnkoKSk7Ci0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHN0YXJ0IC0gZ1Jh
ZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55
KCkgKyBtYXhIZWlnaHQgKyBnUmFkaWNhbEJhc2VQYWQpOwotICAgIEZsb2F0UG9pbnQgdG9wTGVm
dChzdGFydCAtIGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAqIGZyb250V2lkdGggLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7
Ci0gICAgRmxvYXRQb2ludCBsZWZ0RW5kKHN0YXJ0IC0gZnJvbnRXaWR0aCAsIHRvcExlZnQueSgp
ICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgR3Jh
cGhpY3NQb2ludCB0b3BTdGFydChzdGFydCAtIHRvcFN0YXJ0U2hpZnQsIHBhaW50T2Zmc2V0Lnko
KSk7CisgICAgR3JhcGhpY3NQb2ludCBib3R0b21MZWZ0KHN0YXJ0IC0gZ1JhZGljYWxCb3R0b21Q
b2ludFhQb3MgKiBmcm9udFdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhIZWln
aHQgKyBnUmFkaWNhbEJhc2VQYWQpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdChzdGFydCAt
IGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAqIGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSArIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7CisgICAgR3Jh
cGhpY3NQb2ludCBsZWZ0RW5kKHN0YXJ0IC0gZnJvbnRXaWR0aCAsIHRvcExlZnQueSgpICsgZ1Jh
ZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAgICAgCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwogICAgIApA
QCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgCiAgICAgUGF0aCByb290OwogICAgIAotICAgIHJvb3Qu
bW92ZVRvKEZsb2F0UG9pbnQodG9wU3RhcnQueCgpICsgd2lkdGgsIGFkanVzdGVkUGFpbnRPZmZz
ZXQueSgpKSk7CisgICAgcm9vdC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh0b3BTdGFydC54KCkgKyB3
aWR0aCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3IHRvcAogICAgIHJv
b3QuYWRkTGluZVRvKHRvcFN0YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29ybmVy
IHRvIGJvdHRvbSBwb2ludCBvZiByYWRpY2FsCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICBtYXNr
Lm1vdmVUbyh0b3BTdGFydCk7CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CiAgICAg
bWFzay5hZGRMaW5lVG8odG9wTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgy
ICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55
KCkpKTsKKyAgICBtYXNrLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BMZWZ0LngoKSAt
IGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAogICAg
IGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzExLDcgKzE3MTEsNyBAQAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAg
ICAgICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwogICAg
IGVsc2UKLSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0
KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVj
dCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENvbnRh
aW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAKICAgICByZXR1cm4gcmVjdDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgaWYgKHJlY3QpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBpbWFnZSBjaGFuZ2VkIHJlY3QgaXMgaW4gc291cmNlIGltYWdlIGNvb3Jk
aW5hdGVzIChwcmUtem9vbWluZyksCiAgICAgICAgICAgICAvLyBzbyBtYXAgZnJvbSB0aGUgYm91
bmRzIG9mIHRoZSBpbWFnZSB0byB0aGUgY29udGVudHNCb3guCi0gICAgICAgICAgICByZXBhaW50
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdCgqcmVjdCwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgbV9pbWFnZVJlc291cmNlLT5pbWFnZVNpemUoMS4wZikpLCBjb250ZW50Qm94UmVjdCgp
KSk7CisgICAgICAgICAgICByZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdCgq
cmVjdCwgR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgbV9pbWFnZVJlc291cmNlLT5pbWFn
ZVNpemUoMS4wZikpLCBjb250ZW50Qm94UmVjdCgpKSk7CiAgICAgICAgICAgICAvLyBHdWFyZCBh
Z2FpbnN0IHRvby1sYXJnZSBjaGFuZ2VkIHJlY3RzLgogICAgICAgICAgICAgcmVwYWludFJlY3Qu
aW50ZXJzZWN0KGNvbnRlbnRCb3hSZWN0KCkpOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRWxs
aXBzaXNCb3guaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1
YWQuaCIKICNpbmNsdWRlICJGb250VHJhbnNjb2Rlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTI2OSw3ICsyNjksNyBAQAogdm9pZCBS
ZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBmb3IgKElubGluZVRleHRC
b3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkK
LSAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoRmxvYXRSZWN0KGFjY3Vt
dWxhdGVkT2Zmc2V0ICsgYm94LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgpKSkpOworICAgICAgICBy
ZWN0cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChHcmFwaGljc1JlY3QoYWNjdW11bGF0ZWRP
ZmZzZXQgKyBib3gtPnRvcExlZnQoKSwgYm94LT5zaXplKCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVy
VGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtMjk4
LDcgKzI5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHIuc2V0WChzZWxlY3Rpb25SZWN0Lngo
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHIpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpKTsKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdy
YXBoaWNzUXVhZChyKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQp
OwogICAgICAgICAgICAgSW50UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFs
RW5kKTsKQEAgLTMxMyw3ICszMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRY
KGJveC0+eCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQo
cikpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChyKSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDMsNyArMzQzLDcg
QEAKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogICAgIAotdm9pZCBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgQ2xpcHBpbmdPcHRpb24gb3B0aW9u
KQordm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBx
dWFkcywgQ2xpcHBpbmdPcHRpb24gb3B0aW9uKQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCog
Ym94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAg
ICAgICAgIEludFJlY3QgYm91bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwpA
QCAtMzU2LDE2ICszNTYsMTYgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBi
b3VuZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgpIC0gYm91bmRhcmllcy55KCkp
OwogICAgICAgICB9Ci0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChib3VuZGFyaWVzKSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChHcmFwaGljc1JlY3QoYm91bmRhcmllcykpKTsKICAgICB9CiB9CiAgICAgCi12b2lk
IFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9p
ZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykK
IHsKICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzLCBOb0NsaXBwaW5nKTsKIH0KIAotdm9pZCBSZW5k
ZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3Zv
aWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKFZlY3RvcjxHcmFwaGljc1F1YWQ+
JiBxdWFkcywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25I
ZWlnaHQpCiB7CiAgICAgLy8gV29yayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVkIGlzc3Vlcy4gVGhp
cyBmdW5jdGlvbiB0YWtlcyB1bnNpZ25lZHMsIGFuZCBpcyBvZnRlbiBwYXNzZWQgVUlOVF9NQVgK
ICAgICAvLyB0byBtZWFuICJhbGwgdGhlIHdheSB0byB0aGUgZW5kIi4gSW5saW5lVGV4dEJveCBj
b29yZGluYXRlcyBhcmUgdW5zaWduZWRzLCBzbyBjaGFuZ2luZyB0aGlzIApAQCAtMzkxLDcgKzM5
MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHIuc2V0WChzZWxlY3Rpb25SZWN0LngoKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHIpKSk7CisgICAgICAgICAgICBxdWFkcy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QocikpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEs
IGVuZCk7CiAgICAgICAgICAgICBJbnRSZWN0IHIgPSBib3gtPnNlbGVjdGlvblJlY3Qoc3RhcnQs
IHJlYWxFbmQpOwpAQCAtNDA2LDcgKzQwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBy
LnNldFgoYm94LT54KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UmVjdChyKSkpOworICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVR
dWFkKEdyYXBoaWNzUmVjdChyKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtOTc2LDcgKzk3Niw3IEBACiAgICAgcmV0dXJuIGN1cnJQb3MgPj0gKGZyb20gKyBsZW4pOwog
fQogCi1GbG9hdFBvaW50IFJlbmRlclRleHQ6OmZpcnN0UnVuT3JpZ2luKCkgY29uc3QKK0dyYXBo
aWNzUG9pbnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSBjb25zdAogewogICAgIHJldHVy
biBJbnRQb2ludChmaXJzdFJ1blgoKSwgZmlyc3RSdW5ZKCkpOwogfQpAQCAtMTMzMyw3ICsxMzMz
LDcgQEAKICAgICAgICAgZmxvYXQgeSA9IGlzSG9yaXpvbnRhbCA/IGZpcnN0VGV4dEJveCgpLT55
KCkgOiBsb2dpY2FsTGVmdFNpZGU7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gaXNIb3Jpem9udGFs
ID8gbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZSA6IGxhc3RUZXh0Qm94KCktPmxv
Z2ljYWxCb3R0b20oKSAtIHg7CiAgICAgICAgIGZsb2F0IGhlaWdodCA9IGlzSG9yaXpvbnRhbCA/
IGxhc3RUZXh0Qm94KCktPmxvZ2ljYWxCb3R0b20oKSAtIHkgOiBsb2dpY2FsUmlnaHRTaWRlIC0g
bG9naWNhbExlZnRTaWRlOwotICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0lu
dFJlY3QoR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtMTQxOCw3ICsxNDE4LDcgQEAKICAgICAgICAgaWYgKGNiLT5oYXND
b2x1bW5zKCkpCiAgICAgICAgICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocmVjdCk7CiAK
LSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVw
YWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVjdCA9IGxv
Y2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lciku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVjdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAgICAgUmVuZGVyQ29tYmluZVRleHQo
Tm9kZSosIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOwogCiAgICAgdm9pZCBjb21iaW5lVGV4dCgp
OwotICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25z
dCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihH
cmFwaGljc1BvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBHcmFwaGljc1JlY3QmIGJveFJlY3QpIGNv
bnN0OwogICAgIHZvaWQgY2hhcmFjdGVyc1RvUmVuZGVyKGludCBzdGFydCwgY29uc3QgVUNoYXIq
JiBjaGFyYWN0ZXJzLCBpbnQmIGxlbmd0aCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVkOyB9CiAgICAgZmxvYXQgY29tYmluZWRUZXh0V2lk
dGgoY29uc3QgRm9udCYgZm9udCkgY29uc3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlz
aW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBACiAgICAgcmV0dXJuIHRzIDw8ICIo
IiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwogfQogCi1UZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFBvaW50JiBwKQorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAg
ICB0cyA8PCAiKCI7ICAgIAogICAgIGlmIChoYXNGcmFjdGlvbnMocC54KCkpKQpAQCAtMTA5LDcg
KzEwOSw3IEBACiAgICAgcmV0dXJuIHRzIDw8ICIpIjsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRTaXplJiBzKQorVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NTaXplJiBzKQogewogICAgIHRz
IDw8ICJ3aWR0aD0iOwogICAgIGlmIChoYXNGcmFjdGlvbnMocy53aWR0aCgpKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAg
ICAgZW5kUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIEludFJlY3QgciA9IGVuY2xvc2lu
Z0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50KGxv
Z2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIEludFJl
Y3QgciA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVu
LCBHcmFwaGljc1BvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1Bvcywg
ZVBvcykpOwogCiAgICAgaW50IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54
KCkgPiBsb2dpY2FsUmlnaHQoKSkKQEAgLTM1MCw5ICszNTAsOSBAQAogICAgIGlmIChpc0xpbmVC
cmVhaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IGJveE9yaWdp
biA9IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKKyAgICBHcmFwaGljc1BvaW50IGJveE9y
aWdpbiA9IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZUJ5
KGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUo
KSk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgIGlmICht
X3RydW5jYXRpb24gIT0gY0Z1bGxUcnVuY2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAm
JiByZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkp
IHsKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBG
b3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVk
T2Zmc2V0KSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVz
dWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgcmVjdCkpCkBAIC0zNjEs
MjYgKzM2MSwyNiBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRmxvYXRTaXplIElubGluZVRl
eHRCb3g6OmFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3Qs
IGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRhbCkKK0dyYXBoaWNzU2l6
ZSBJbmxpbmVUZXh0Qm94OjphcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHRleHRSZWN0LCBib29sIHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwp
CiB7CiAgICAgaWYgKCFzaGFkb3cpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIGV4dHJhT2Zmc2V0Owor
ICAgIEdyYXBoaWNzU2l6ZSBleHRyYU9mZnNldDsKICAgICBpbnQgc2hhZG93WCA9IGhvcml6b250
YWwgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOwogICAgIGludCBzaGFkb3dZID0gaG9yaXpv
bnRhbCA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgpOwotICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQoc2hhZG93WCwgc2hhZG93WSk7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldChz
aGFkb3dYLCBzaGFkb3dZKTsKICAgICBpbnQgc2hhZG93Qmx1ciA9IHNoYWRvdy0+Ymx1cigpOwog
ICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciA9IHNoYWRvdy0+Y29sb3IoKTsKIAogICAgIGlm
IChzaGFkb3ctPm5leHQoKSB8fCBzdHJva2VkIHx8ICFvcGFxdWUpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IHNoYWRvd1JlY3QodGV4dFJlY3QpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2hhZG93UmVj
dCh0ZXh0UmVjdCk7CiAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzaGFkb3dCbHVyKTsKICAg
ICAgICAgc2hhZG93UmVjdC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIGNvbnRleHQtPnNh
dmUoKTsKICAgICAgICAgY29udGV4dC0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICBleHRy
YU9mZnNldCA9IEZsb2F0U2l6ZSgwLCAyICogdGV4dFJlY3QuaGVpZ2h0KCkgKyBtYXgoMC4wZiwg
c2hhZG93T2Zmc2V0LmhlaWdodCgpKSArIHNoYWRvd0JsdXIpOworICAgICAgICBleHRyYU9mZnNl
dCA9IEdyYXBoaWNzU2l6ZSgwLCAyICogdGV4dFJlY3QuaGVpZ2h0KCkgKyBtYXg8R3JhcGhpY3NV
bml0PigwLjBmLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpICsgc2hhZG93Qmx1cik7CiAgICAgICAg
IHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKICAgICB9CiAKQEAgLTM4OCw4ICszODgsOCBA
QAogICAgIHJldHVybiBleHRyYU9mZnNldDsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0
aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50
IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQg
dHJ1bmNhdGlvblBvaW50LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQorc3RhdGlj
IHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcm
IGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50JiB0
ZXh0T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhp
Y3NSZWN0JiBib3hSZWN0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwg
Ym9vbCBob3Jpem9udGFsKQogewogICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQtPmZpbGxD
b2xvcigpOwogICAgIENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2UgPSBjb250ZXh0LT5maWxsQ29s
b3JTcGFjZSgpOwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAKIGVudW0gUm90YXRpb25EaXJlY3Rpb24g
eyBDb3VudGVyY2xvY2t3aXNlLCBDbG9ja3dpc2UgfTsKIAotc3RhdGljIGlubGluZSBBZmZpbmVU
cmFuc2Zvcm0gcm90YXRpb24oY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBSb3RhdGlvbkRpcmVj
dGlvbiBjbG9ja3dpc2UpCitzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihj
b25zdCBHcmFwaGljc1JlY3QmIGJveFJlY3QsIFJvdGF0aW9uRGlyZWN0aW9uIGNsb2Nrd2lzZSkK
IHsKICAgICByZXR1cm4gY2xvY2t3aXNlID8gQWZmaW5lVHJhbnNmb3JtKDAsIDEsIC0xLCAwLCBi
b3hSZWN0LngoKSArIGJveFJlY3QubWF4WSgpLCBib3hSZWN0Lm1heFkoKSAtIGJveFJlY3QueCgp
KQogICAgICAgICA6IEFmZmluZVRyYW5zZm9ybSgwLCAtMSwgMSwgMCwgYm94UmVjdC54KCkgLSBi
b3hSZWN0Lm1heFkoKSwgYm94UmVjdC54KCkgKyBib3hSZWN0Lm1heFkoKSk7CkBAIC01MTksOSAr
NTE5LDkgQEAKICAgICAKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0Lm1vdmUoMCwgc3R5bGVUb1Vz
ZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAtbG9naWNhbEhlaWdodCgpKTsKIAot
ICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOwor
ICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygp
OwogICAgIGJveE9yaWdpbi5tb3ZlKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSk7Ci0gICAgRmxvYXRSZWN0IGJveFJlY3QoYm94T3JpZ2luLCBMYXlvdXRT
aXplKGxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICBHcmFwaGljc1JlY3Qg
Ym94UmVjdChib3hPcmlnaW4sIExheW91dFNpemUobG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWln
aHQoKSkpOwogCiAgICAgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCA9IHN0eWxlVG9V
c2UtPmhhc1RleHRDb21iaW5lKCkgJiYgdGV4dFJlbmRlcmVyKCktPmlzQ29tYmluZVRleHQoKSAm
JiB0b1JlbmRlckNvbWJpbmVUZXh0KHRleHRSZW5kZXJlcigpKS0+aXNDb21iaW5lZCgpID8gdG9S
ZW5kZXJDb21iaW5lVGV4dCh0ZXh0UmVuZGVyZXIoKSkgOiAwOwogCkBAIC01MzYsNyArNTM2LDcg
QEAKICAgICAvLyBTZXQgb3VyIGZvbnQuCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9V
c2UtPmZvbnQoKTsKIAotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiA9IEZsb2F0UG9pbnQoYm94
T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7
CisgICAgR3JhcGhpY3NQb2ludCB0ZXh0T3JpZ2luID0gR3JhcGhpY3NQb2ludChib3hPcmlnaW4u
eCgpLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKIAogICAg
IGlmIChjb21iaW5lZFRleHQpCiAgICAgICAgIGNvbWJpbmVkVGV4dC0+YWRqdXN0VGV4dE9yaWdp
bih0ZXh0T3JpZ2luLCBib3hSZWN0KTsKQEAgLTY5MSw3ICs2OTEsNyBAQAogCiAgICAgICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4sIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVy
VGV4dFJ1biwgKCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMSkpOwogICAgICAgICAgICAg
VGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4dFJ1biA9IGNvbWJpbmVkVGV4dCA/IG9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IHRleHRSdW47Ci0gICAgICAgICAgICBGbG9hdFBvaW50
IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBjb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9y
aWdpbi54KCkgKyBib3hSZWN0LndpZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250
TWV0cmljcygpLmFzY2VudCgpKSA6IHRleHRPcmlnaW47CisgICAgICAgICAgICBHcmFwaGljc1Bv
aW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBjb21iaW5lZFRleHQgPyBHcmFwaGljc1BvaW50
KGJveE9yaWdpbi54KCkgKyBib3hSZWN0LndpZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9u
dC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IHRleHRPcmlnaW47CiAgICAgICAgICAgICBpZiAo
Y29tYmluZWRUZXh0KQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlv
bihib3hSZWN0LCBDbG9ja3dpc2UpKTsKIApAQCAtNzE3LDcgKzcxNyw3IEBACiAKICAgICAgICAg
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4dFJ1biwgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0
ZXJUZXh0UnVuLCAoJm9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKSk7CiAgICAgICAgICAg
ICBUZXh0UnVuJiBlbXBoYXNpc01hcmtUZXh0UnVuID0gY29tYmluZWRUZXh0ID8gb2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuIDogdGV4dFJ1bjsKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94
T3JpZ2luLngoKSArIGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpIDogdGV4dE9yaWdpbjsKKyAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEdyYXBoaWNzUG9p
bnQoYm94T3JpZ2luLngoKSArIGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBm
b250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpIDogdGV4dE9yaWdpbjsKICAgICAgICAgICAgIGlm
IChjb21iaW5lZFRleHQpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0
aW9uKGJveFJlY3QsIENsb2Nrd2lzZSkpOwogCkBAIC03ODYsNyArNzg2LDcgQEAKICAgICBlUG9z
ID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwogfQogCi12b2lkIElubGluZVRl
eHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQp
Cit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIzLDkgKzgyMyw5IEBACiAKICAgICBpbnQgZGVsdGFZ
ID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2Vs
ZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rp
b25Ub3AoKTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgRmxv
YXRQb2ludCBsb2NhbE9yaWdpbihib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZ
KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9yaWdp
bi55KCkgLSBkZWx0YVkpOwogCi0gICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvY2FsT3JpZ2luLCBG
bG9hdFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbEhlaWdodCkpOworICAgIEdyYXBoaWNzUmVjdCBj
bGlwUmVjdChsb2NhbE9yaWdpbiwgR3JhcGhpY3NTaXplKG1fbG9naWNhbFdpZHRoLCBzZWxIZWln
aHQpKTsKICAgICBmbG9hdCBtYXhYID0gZmxvb3JmKGNsaXBSZWN0Lm1heFgoKSk7CiAgICAgY2xp
cFJlY3Quc2V0WChmbG9vcmYoY2xpcFJlY3QueCgpKSk7CiAgICAgY2xpcFJlY3Quc2V0V2lkdGgo
bWF4WCAtIGNsaXBSZWN0LngoKSk7CkBAIC04MzQsNyArODM0LDcgQEAKICAgICBjb250ZXh0LT5k
cmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhbE9yaWdpbiwgc2VsSGVpZ2h0
LCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKIH0KIAotdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lkIElubGluZVRleHRC
b3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEZvbnQmIGZvbnQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKIHsKICAgICBpbnQgb2Zmc2V0
ID0gbV9zdGFydDsKICAgICBpbnQgc1BvcyA9IG1heChzdGFydFBvcyAtIG9mZnNldCwgMCk7CkBA
IC04NTEsNyArODUxLDcgQEAKIAogICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLT5zdHlsZSgp
LT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2lj
YWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgpOwogICAgIGludCBzZWxI
ZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50IGxvY2FsT3JpZ2luKGJv
eE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOworICAgIEdyYXBoaWNzUG9pbnQg
bG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7CiAgICAg
Y29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgY29uc3RydWN0VGV4dFJ1bihzdHls
ZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCks
IHNQb3MsIGVQb3MpOwogfQogCkBAIC04NjcsMjAgKzg2NywyMCBAQAogICAgICAgICByZXR1cm47
CiAKICAgICBSb290SW5saW5lQm94KiByID0gcm9vdCgpOwotICAgIEZsb2F0UmVjdCByb290UmVj
dChwYWludE9mZnNldC54KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlvblRv
cCgpLCByLT5sb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0UmVj
dCB0ZXh0UmVjdChwYWludE9mZnNldC54KCkgKyB4KCksIHJvb3RSZWN0LnkoKSwgbG9naWNhbFdp
ZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3Qgcm9vdFJlY3QocGFp
bnRPZmZzZXQueCgpICsgci0+eCgpLCBwYWludE9mZnNldC55KCkgKyBzZWxlY3Rpb25Ub3AoKSwg
ci0+bG9naWNhbFdpZHRoKCksIHNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3Qg
dGV4dFJlY3QocGFpbnRPZmZzZXQueCgpICsgeCgpLCByb290UmVjdC55KCksIGxvZ2ljYWxXaWR0
aCgpLCByb290UmVjdC5oZWlnaHQoKSk7CiAKICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHJlbmRlcmVyKCktPm5vZGUoKSwgdHlwZSwgdGV4dFJlY3Qs
IHJvb3RSZWN0LCB0cnVlLCBmYWxzZSk7CiB9CiAKICNlbmRpZgogCi12b2lkIElubGluZVRleHRC
b3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgaW50IGRlY28sIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBpbnQgZGVjbywgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93KQogewogICAgIGlmIChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9u
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IGxvY2FsT3JpZ2luID0gYm94T3Jp
Z2luOworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxPcmlnaW4gPSBib3hPcmlnaW47CiAKICAgICBm
bG9hdCB3aWR0aCA9IG1fbG9naWNhbFdpZHRoOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05v
VHJ1bmNhdGlvbikgewpAQCAtOTA1LDkgKzkwNSw5IEBACiAgICAgYm9vbCBzZXRDbGlwID0gZmFs
c2U7CiAgICAgaW50IGV4dHJhT2Zmc2V0ID0gMDsKICAgICBpZiAoIWxpbmVzQXJlT3BhcXVlICYm
IHNoYWRvdyAmJiBzaGFkb3ctPm5leHQoKSkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3Qo
bG9jYWxPcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7CisgICAgICAgIEdy
YXBoaWNzUmVjdCBjbGlwUmVjdChsb2NhbE9yaWdpbiwgR3JhcGhpY3NTaXplKHdpZHRoLCBiYXNl
bGluZSArIDIpKTsKICAgICAgICAgZm9yIChjb25zdCBTaGFkb3dEYXRhKiBzID0gc2hhZG93OyBz
OyBzID0gcy0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChsb2Nh
bE9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCBiYXNlbGluZSArIDIpKTsKKyAgICAgICAgICAgIEdy
YXBoaWNzUmVjdCBzaGFkb3dSZWN0KGxvY2FsT3JpZ2luLCBHcmFwaGljc1NpemUod2lkdGgsIGJh
c2VsaW5lICsgMikpOwogICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHMtPmJsdXIoKSk7
CiAgICAgICAgICAgICBpbnQgc2hhZG93WCA9IGlzSG9yaXpvbnRhbCgpID8gcy0+eCgpIDogcy0+
eSgpOwogICAgICAgICAgICAgaW50IHNoYWRvd1kgPSBpc0hvcml6b250YWwoKSA/IHMtPnkoKSA6
IC1zLT54KCk7CkBAIC05MzQsNyArOTM0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGludCBzaGFkb3dYID0gaXNIb3Jpem9udGFsKCkgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgp
OwogICAgICAgICAgICAgaW50IHNoYWRvd1kgPSBpc0hvcml6b250YWwoKSA/IHNoYWRvdy0+eSgp
IDogLXNoYWRvdy0+eCgpOwotICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6
ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93
LT5jb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhH
cmFwaGljc1NpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5ibHVy
KCksIHNoYWRvdy0+Y29sb3IoKSwgY29sb3JTcGFjZSk7CiAgICAgICAgICAgICBzZXRTaGFkb3cg
PSB0cnVlOwogICAgICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0K
QEAgLTk0Myw3ICs5NDMsNyBAQAogICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
dW5kZXJsaW5lLCBjb2xvclNwYWNlKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0
eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAgICAgIC8vIExlYXZlIG9uZSBwaXhlbCBvZiB3aGl0
ZSBiZXR3ZWVuIHRoZSBiYXNlbGluZSBhbmQgdGhlIHVuZGVybGluZS4KLSAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdMaW5lRm9yVGV4dChGbG9hdFBvaW50KGxvY2FsT3JpZ2luLngoKSwgbG9jYWxP
cmlnaW4ueSgpICsgYmFzZWxpbmUgKyAxKSwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEdyYXBoaWNzUG9pbnQobG9jYWxPcmlnaW4ueCgp
LCBsb2NhbE9yaWdpbi55KCkgKyBiYXNlbGluZSArIDEpLCB3aWR0aCwgaXNQcmludGluZyk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGRlY28gJiBPVkVSTElORSkgewogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3Iob3ZlcmxpbmUsIGNvbG9yU3BhY2UpOwpAQCAtOTUzLDcgKzk1
Myw3IEBACiAgICAgICAgIGlmIChkZWNvICYgTElORV9USFJPVUdIKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihsaW5ldGhyb3VnaCwgY29sb3JTcGFjZSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxvY2Fs
T3JpZ2luLnkoKSArIDIgKiBiYXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoR3JhcGhpY3NQb2ludChsb2NhbE9yaWdp
bi54KCksIGxvY2FsT3JpZ2luLnkoKSArIDIgKiBiYXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmlu
dGluZyk7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChzaGFkb3cpOwogCkBAIC05NzgsNyArOTc4
LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3Jh
bW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9u
dCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5n
T3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3Bl
bGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+
ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkKQEAgLTEwMDksNyArMTAwOSw3IEBACiAgICAgICAgIC8v
IENhbGN1bGF0ZSBzdGFydCAmIHdpZHRoCiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigp
LT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20o
KSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgpOwogICAg
ICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgICAgIEZsb2F0UG9p
bnQgc3RhcnRQb2ludChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55
KCkgLSBkZWx0YVkpOwogICAgICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5
bGUsIGZvbnQpOwogCiAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoZSBkb2N1bWVudCBtYXJr
ZXJzIHRvIGZsb2F0IHJlY3RzLgpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKICAgICAgICAgLy8gZGlz
cGxheSBhIHRvb2xUaXAuIFdlIGRvbid0IGRvIHRoaXMgZm9yIG1pc3NwZWxsaW5nIG1hcmtlcnMu
CiAgICAgICAgIGlmIChncmFtbWFyKSB7CiAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmUoLWJv
eE9yaWdpbi54KCksIC1ib3hPcmlnaW4ueSgpKTsKLSAgICAgICAgICAgIG1hcmtlclJlY3QgPSBy
ZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigp
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKICAgICAgICAgICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJr
ZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MDQzLDEwICsxMDQzLDEwIEBACiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBw
bGFjZSB0aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcg
Z2FwLgogICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAg
IHB0LT5kcmF3TGluZUZvclRleHRDaGVja2luZyhGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBz
dGFydCwgYm94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tp
bmdMaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CisgICAgcHQtPmRyYXdM
aW5lRm9yVGV4dENoZWNraW5nKEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBi
b3hPcmlnaW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVT
dHlsZUZvck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0
Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3Jp
Z2luLCBEb2N1bWVudE1hcmtlciogbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZv
bnQmIGZvbnQpCiB7CiAgICAgLy8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0IGFz
IGZvciBzZWxlY3Rpb24sIHNvIHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIGhpZ2hs
aWdodCBhcmUgb24KICAgICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3Rp
Y2tpbmcgb3V0LgpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIAogICAgIC8vIEFsd2F5cyBjb21wdXRl
IGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21w
dXRlZCByZWN0IGlzIGluIGFic29sdXRlIGNvb3JkaW5hdGVzLgogICAgIEludFJlY3QgbWFya2Vy
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIElu
dFBvaW50KHgoKSwgc2VsZWN0aW9uVG9wKCkpLCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsKLSAg
ICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
bWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgbWFya2VyUmVjdCA9IHJl
bmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmtlclJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJr
ZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgCiAgICAgLy8gT3B0aW9uYWxs
eSBoaWdobGlnaHQgdGhlIHRleHQKQEAgLTEwNjksOCArMTA2OSw4IEBACiAgICAgICAgICAgICBy
ZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcHQp
OwogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwgMCwgc3R5
bGUtPmNvbG9yU3BhY2UoKSk7ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotICAgICAgICBw
dC0+Y2xpcChGbG9hdFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSwg
bV9sb2dpY2FsV2lkdGgsIHNlbEhlaWdodCkpOwotICAgICAgICBwdC0+ZHJhd0hpZ2hsaWdodEZv
clRleHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkg
LSBkZWx0YVkpLCBzZWxIZWlnaHQsIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBl
UG9zKTsKKyAgICAgICAgcHQtPmNsaXAoR3JhcGhpY3NSZWN0KGJveE9yaWdpbi54KCksIGJveE9y
aWdpbi55KCkgLSBkZWx0YVksIG1fbG9naWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKKyAgICAgICAg
cHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHJ1biwgR3JhcGhpY3NQb2ludChib3hPcmln
aW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKSwgc2VsSGVpZ2h0LCBjb2xvciwgc3R5bGUt
PmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiAgICAgfQogfQogCkBAIC0xMDg3LDExICsxMDg3
LDExIEBACiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgbWFya2VyLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHN0YXJ0UG9pbnQsIGgsIHNQb3Ms
IGVQb3MpKTsKLSAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgbWFy
a2VyUmVjdCA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1h
cmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIHRvUmVuZGVyZWREb2N1bWVu
dE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiB9CiAgICAgCi12
b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCog
cHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50
RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJh
Y2tncm91bmQpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5ub2RlKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTExNTQsNyArMTE1NCw3IEBACiAgICAgfQogfQogCi12b2lkIElubGluZVRleHRCb3g6
OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGlu
ZSkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGlj
c0NvbnRleHQqIGN0eCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21w
b3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQogewogICAgIGlmIChtX3RydW5jYXRpb24gPT0g
Y0Z1bGxUcnVuY2F0aW9uKQogICAgICAgICByZXR1cm47CkBAIC0xMTk2LDcgKzExOTYsNyBAQAog
CiAgICAgY3R4LT5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmUuY29sb3IsIHJlbmRlcmVyKCktPnN0
eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgY3R4LT5zZXRTdHJva2VUaGlja25lc3MobGluZVRo
aWNrbmVzcyk7Ci0gICAgY3R4LT5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkgLSBsaW5lVGhpY2tu
ZXNzKSwgd2lkdGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmludGluZygpKTsKKyAg
ICBjdHgtPmRyYXdMaW5lRm9yVGV4dChHcmFwaGljc1BvaW50KGJveE9yaWdpbi54KCkgKyBzdGFy
dCwgYm94T3JpZ2luLnkoKSArIGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MpLCB3aWR0
aCwgdGV4dFJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCkpOwogfQogCiBpbnQgSW5s
aW5lVGV4dEJveDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMsNyBAQAogICAgIEludFJlY3QgYWRqdXN0ZWRS
ZWN0ID0gYm9yZGVyUmVjdDsKICAgICAvLyBXZSBuZWVkIHRvIHNocmluayB0aGUgYm9yZGVyIGJ5
IG9uZSBkZXZpY2UgcGl4ZWwgb24gZWFjaCBzaWRlLgogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0g
PSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICBGbG9hdFNpemUgY29udGV4dFNjYWxlKHN0YXRpY19j
YXN0PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgp
KSk7CisgICAgR3JhcGhpY3NTaXplIGNvbnRleHRTY2FsZShzdGF0aWNfY2FzdDxmbG9hdD4oY3Rt
LnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUoKSkpOwogICAgIGFkanVz
dGVkUmVjdC5pbmZsYXRlWCgtY2VpbGYoMSAvIGNvbnRleHRTY2FsZS53aWR0aCgpKSk7CiAgICAg
YWRqdXN0ZWRSZWN0LmluZmxhdGVZKC1jZWlsZigxIC8gY29udGV4dFNjYWxlLmhlaWdodCgpKSk7
CiAgICAgcmV0dXJuIGFkanVzdGVkUmVjdDsKQEAgLTE5MzYsMjYgKzE5MzYsMjYgQEAKIH0KICNl
bmRpZgogCi1zdGF0aWMgdm9pZCBmaW5kSW5uZXJWZXJ0ZXgoY29uc3QgRmxvYXRQb2ludCYgb3V0
ZXJDb3JuZXIsIGNvbnN0IEZsb2F0UG9pbnQmIGlubmVyQ29ybmVyLCBjb25zdCBGbG9hdFBvaW50
JiBjZW50ZXJQb2ludCwgRmxvYXRQb2ludCYgcmVzdWx0KQorc3RhdGljIHZvaWQgZmluZElubmVy
VmVydGV4KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG91dGVyQ29ybmVyLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBpbm5lckNvcm5lciwgY29uc3QgR3JhcGhpY3NQb2ludCYgY2VudGVyUG9pbnQsIEdyYXBo
aWNzUG9pbnQmIHJlc3VsdCkKIHsKICAgICAvLyBJZiB0aGUgbGluZSBiZXR3ZWVuIG91dGVyIGFu
ZCBpbm5lciBjb3JuZXIgaXMgdG93YXJkcyB0aGUgaG9yaXpvbnRhbCwgaW50ZXJzZWN0IHdpdGgg
YSB2ZXJ0aWNhbCBsaW5lIHRocm91Z2ggdGhlIGNlbnRlciwKICAgICAvLyBvdGhlcndpc2Ugd2l0
aCBhIGhvcml6b250YWwgbGluZSB0aHJvdWdoIHRoZSBjZW50ZXIuIFRoZSBwb2ludHMgdGhhdCBm
b3JtIHRoaXMgbGluZSBhcmUgYXJiaXRyYXJ5ICh3ZSB1c2UgMCwgMTAwKS4KICAgICAvLyBOb3Rl
IHRoYXQgaWYgZmluZEludGVyc2VjdGlvbiBmYWlscywgaXQgd2lsbCBsZWF2ZSByZXN1bHQgdW50
b3VjaGVkLgogICAgIGlmIChmYWJzKG91dGVyQ29ybmVyLngoKSAtIGlubmVyQ29ybmVyLngoKSkg
PiBmYWJzKG91dGVyQ29ybmVyLnkoKSAtIGlubmVyQ29ybmVyLnkoKSkpCi0gICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb24ob3V0ZXJDb3JuZXIsIGlubmVyQ29ybmVyLCBGbG9hdFBvaW50KGNlbnRlclBv
aW50LngoKSwgMCksIEZsb2F0UG9pbnQoY2VudGVyUG9pbnQueCgpLCAxMDApLCByZXN1bHQpOwor
ICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyQ29ybmVyLCBpbm5lckNvcm5lciwgR3JhcGhp
Y3NQb2ludChjZW50ZXJQb2ludC54KCksIDApLCBHcmFwaGljc1BvaW50KGNlbnRlclBvaW50Lngo
KSwgMTAwKSwgcmVzdWx0KTsKICAgICBlbHNlCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJDb3JuZXIsIGlubmVyQ29ybmVyLCBGbG9hdFBvaW50KDAsIGNlbnRlclBvaW50LnkoKSksIEZs
b2F0UG9pbnQoMTAwLCBjZW50ZXJQb2ludC55KCkpLCByZXN1bHQpOworICAgICAgICBmaW5kSW50
ZXJzZWN0aW9uKG91dGVyQ29ybmVyLCBpbm5lckNvcm5lciwgR3JhcGhpY3NQb2ludCgwLCBjZW50
ZXJQb2ludC55KCkpLCBHcmFwaGljc1BvaW50KDEwMCwgY2VudGVyUG9pbnQueSgpKSwgcmVzdWx0
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29u
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBSb3VuZGVkUmVjdCYgb3V0
ZXJCb3JkZXIsIGNvbnN0IFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3hTaWRlIHNpZGUsIGJvb2wgZmly
c3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRFZGdlTWF0Y2hlcykKIHsKLSAgICBGbG9hdFBvaW50
IHF1YWRbNF07CisgICAgR3JhcGhpY3NQb2ludCBxdWFkWzRdOwogCiAgICAgY29uc3QgSW50UmVj
dCYgb3V0ZXJSZWN0ID0gb3V0ZXJCb3JkZXIucmVjdCgpOwogICAgIGNvbnN0IEludFJlY3QmIGlu
bmVyUmVjdCA9IGlubmVyQm9yZGVyLnJlY3QoKTsKIAotICAgIEZsb2F0UG9pbnQgY2VudGVyUG9p
bnQoaW5uZXJSZWN0LmxvY2F0aW9uKCkueCgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlubmVyUmVj
dC53aWR0aCgpKSAvIDIsIGlubmVyUmVjdC5sb2NhdGlvbigpLnkoKSArIHN0YXRpY19jYXN0PGZs
b2F0Pihpbm5lclJlY3QuaGVpZ2h0KCkpIC8gMik7CisgICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQ
b2ludChpbm5lclJlY3QubG9jYXRpb24oKS54KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJS
ZWN0LndpZHRoKCkpIC8gMiwgaW5uZXJSZWN0LmxvY2F0aW9uKCkueSgpICsgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGlubmVyUmVjdC5oZWlnaHQoKSkgLyAyKTsKIAogICAgIC8vIEZvciBlYWNoIHNpZGUs
IGNyZWF0ZSBhIHF1YWQgdGhhdCBlbmNvbXBhc3NlcyBhbGwgcGFydHMgb2YgdGhhdCBzaWRlIHRo
YXQgbWF5IGRyYXcsCiAgICAgLy8gaW5jbHVkaW5nIGFyZWFzIGluc2lkZSB0aGUgaW5uZXJCb3Jk
ZXIuCkBAIC0yMDMzLDE4ICsyMDMzLDE4IEBACiAgICAgfQogCiAgICAgLy8gU3F1YXJlIG9mZiB0
aGUgZW5kIHdoaWNoIHNob3VsZG4ndCBiZSBhZmZlY3RlZCBieSBhbnRpYWxpYXNpbmcsIGFuZCBj
bGlwLgotICAgIEZsb2F0UG9pbnQgZmlyc3RRdWFkWzRdOworICAgIEdyYXBoaWNzUG9pbnQgZmly
c3RRdWFkWzRdOwogICAgIGZpcnN0UXVhZFswXSA9IHF1YWRbMF07CiAgICAgZmlyc3RRdWFkWzFd
ID0gcXVhZFsxXTsKLSAgICBmaXJzdFF1YWRbMl0gPSBzaWRlID09IEJTVG9wIHx8IHNpZGUgPT0g
QlNCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFkWzJdLnkoKSkKLSAgICAgICAg
OiBGbG9hdFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSk7CisgICAgZmlyc3RRdWFkWzJd
ID0gc2lkZSA9PSBCU1RvcCB8fCBzaWRlID09IEJTQm90dG9tID8gR3JhcGhpY3NQb2ludChxdWFk
WzNdLngoKSwgcXVhZFsyXS55KCkpCisgICAgICAgIDogR3JhcGhpY3NQb2ludChxdWFkWzJdLngo
KSwgcXVhZFszXS55KCkpOwogICAgIGZpcnN0UXVhZFszXSA9IHF1YWRbM107CiAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5jbGlwQ29udmV4UG9seWdvbig0LCBmaXJzdFF1YWQsICFmaXJzdEVkZ2VNYXRj
aGVzKTsKIAotICAgIEZsb2F0UG9pbnQgc2Vjb25kUXVhZFs0XTsKKyAgICBHcmFwaGljc1BvaW50
IHNlY29uZFF1YWRbNF07CiAgICAgc2Vjb25kUXVhZFswXSA9IHF1YWRbMF07Ci0gICAgc2Vjb25k
UXVhZFsxXSA9IHNpZGUgPT0gQlNUb3AgfHwgc2lkZSA9PSBCU0JvdHRvbSA/IEZsb2F0UG9pbnQo
cXVhZFswXS54KCksIHF1YWRbMV0ueSgpKQotICAgICAgICA6IEZsb2F0UG9pbnQocXVhZFsxXS54
KCksIHF1YWRbMF0ueSgpKTsKKyAgICBzZWNvbmRRdWFkWzFdID0gc2lkZSA9PSBCU1RvcCB8fCBz
aWRlID09IEJTQm90dG9tID8gR3JhcGhpY3NQb2ludChxdWFkWzBdLngoKSwgcXVhZFsxXS55KCkp
CisgICAgICAgIDogR3JhcGhpY3NQb2ludChxdWFkWzFdLngoKSwgcXVhZFswXS55KCkpOwogICAg
IHNlY29uZFF1YWRbMl0gPSBxdWFkWzJdOwogICAgIHNlY29uZFF1YWRbM10gPSBxdWFkWzNdOwog
ICAgIC8vIEFudGlhbGlhc2luZyBhZmZlY3RzIHRoZSBzZWNvbmQgc2lkZS4KQEAgLTIwODEsNyAr
MjA4MSw3IEBACiAgICAgICAgICFob3Jpem9udGFsIHx8IGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2Up
OwogfQogCi1ib29sIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0JhY2tncm91
bmRFZGdlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAorYm9vbCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShjb25zdCBHcmFwaGlj
c1NpemUmIGNvbnRleHRTY2FsZSkgY29uc3QKIHsKICAgICBCb3JkZXJFZGdlIGVkZ2VzWzRdOwog
ICAgIGdldEJvcmRlckVkZ2VJbmZvKGVkZ2VzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw4IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKQEAgLTE2Miw5ICsxNjIsOSBAQAogICAgIAogICAgIElu
dFNpemUgY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CiAgICAgLy8gUmVz
dWx0IGlzIHRyYW5zZm9ybSBvcmlnaW4gaW4gcGl4ZWxzLgotICAgIEZsb2F0UG9pbnQzRCBjb21w
dXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CisgICAg
R3JhcGhpY3NQb2ludDNEIGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgSW50UmVjdCYgYm9y
ZGVyQm94KSBjb25zdDsKICAgICAvLyBSZXN1bHQgaXMgcGVyc3BlY3RpdmUgb3JpZ2luIGluIHBp
eGVscy4KLSAgICBGbG9hdFBvaW50IGNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRS
ZWN0JiBib3JkZXJCb3gpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgY29tcHV0ZVBlcnNwZWN0
aXZlT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CiAKICAgICB2b2lkIHVw
ZGF0ZUxheWVyT3BhY2l0eShjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgdXBkYXRlTGF5
ZXJUcmFuc2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsy
NCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAKICNpbmNsdWRlICJDaHJvbWUuaCIK
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiSW5saW5lVGV4dEJveC5oIgpAQCAtNDcxLDcgKzQ3MSw3IEBACiAgICAgICAgIGN1bGxl
ZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRl
ZE9mZnNldCkpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVC
b3goKSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkp
Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9hdFJlY3Qo
YWNjdW11bGF0ZWRPZmZzZXQgKyBjdXJyLT50b3BMZWZ0KCksIGN1cnItPnNpemUoKSkpKTsKKyAg
ICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBoaWNzUmVjdChh
Y2N1bXVsYXRlZE9mZnNldCArIGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSkpOwogICAg
IH0gZWxzZQogICAgICAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNl
dCwgTGF5b3V0U2l6ZSgpKSk7CiAKQEAgLTQ5OSwxMSArNDk5LDExIEBACiAgICAgICAgICAgICAg
ICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+
cm9vdCgpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNh
bFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5l
U3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHls
ZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0
eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhl
aWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAg
ICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkg
KyBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQo
KSwgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJC
b3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRo
KCkgKyBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxl
ZnQoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1
cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWln
aHQpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
RmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgbG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgpICsg
Y3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwg
bG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSAr
IGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
R3JhcGhpY3NSZWN0KG9mZnNldC53aWR0aCgpICsgbG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgp
ICsgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3Ao
KSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3Ao
KSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICByZWN0cy5hcHBl
bmQoZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7CkBAIC01MTYsMTQgKzUxNiwxNCBAQAog
ICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5y
b290KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9n
aWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RM
aW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFp
bmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZs
b2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJn
aW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhp
Y3NSZWN0KG9mZnNldC53aWR0aCgpICsgY2hpbGRMaW5lLT54KCkgLSBjaGlsZExpbmUtPm1hcmdp
bkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LmhlaWdo
dCgpICsgbG9naWNhbFRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUt
PmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRM
aW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgbG9naWNhbFRvcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lk
dGgoKSArIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Lmhl
aWdodCgpICsgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5t
YXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7CkBA
IC01MzYsMzcgKzUzNiwzNyBAQAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RC
b3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAt
IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0
ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCku
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0
OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAg
aWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0
KG9mZnNldC53aWR0aCgpICsgY2hpbGRUZXh0LT54KCksIG9mZnNldC5oZWlnaHQoKSArIGxvZ2lj
YWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRoKCkgKyBjaGls
ZFRleHQtPngoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dp
Y2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2Fs
VG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hp
bGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdy
YXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsIG9mZnNldC5oZWlnaHQoKSAr
IGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgp
KTsKICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChyZXN1bHQp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbmxp
bmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJJ
bmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewogICAg
IGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIGN1bGxlZElubGluZUFic29s
dXRlUXVhZHModGhpcywgcXVhZHMpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIg
PSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRMaW5lQm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgp
LCBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnItPndpZHRo
KCksIGN1cnItPmhlaWdodCgpKTsKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJz
b2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHF1
YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgpKSk7CisgICAgICAgIHF1
YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgpKSk7CiAKICAgICBp
ZiAoY29udGludWF0aW9uKCkpCiAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVF1YWRz
KHF1YWRzKTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUXVh
ZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFk
cykKK3ZvaWQgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJl
bmRlcklubGluZSogY29udGFpbmVyLCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAg
ICAgaWYgKCFjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSkgewotICAgICAgICBxdWFkcy5hcHBl
bmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoKSkpOworICAgICAgICBxdWFkcy5hcHBl
bmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01ODMsMTEgKzU4MywxMSBAQAogICAgICAgICAgICAgICAgIFJvb3RJbmxp
bmVCb3gqIHJvb3RCb3ggPSBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKICAg
ICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChy
b290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5m
b250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+
aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94
LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAg
ICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBoaWNz
UmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIo
KS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0
aCgpICsgY3VyckJveC0+bWFyZ2luTGVmdCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9n
aWNhbEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChj
dXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwg
bG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1
cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGxvZ2ljYWxUb3AsIGN1
cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCksIGxv
Z2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkgKyBj
dXJyQm94LT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdy
YXBoaWNzUmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAt
IGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSAr
IGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFyZ2luQm90dG9tKCkpOwogICAgICAg
ICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHJlc3VsdCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsK
QEAgLTYwMCwxNCArNjAwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IHJvb3RCb3ggPSBjaGlsZExpbmUtPnJvb3QoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+
c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSkt
PmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgcmVz
dWx0OwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5l
LT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
R3JhcGhpY3NSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+
bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChs
b2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0
KGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkg
LSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9naWNhbEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExp
bmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hp
bGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7CkBAIC02MjAsMTEgKzYyMCwxMSBAQAogICAg
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsK
ICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSAr
IChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJv
eC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwog
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
LSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBo
aWNzUmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2Fs
VG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2Fs
VG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dp
Y2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2Fs
V2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChsb2dp
Y2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2Fs
V2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQocmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc2OCwxNSArNzY4LDE1
IEBACiAgICAgICAgIGZsb2F0IHkgPSBpc0hvcml6b250YWwgPyBmaXJzdExpbmVCb3goKS0+eSgp
IDogbG9naWNhbExlZnRTaWRlOwogICAgICAgICBmbG9hdCB3aWR0aCA9IGlzSG9yaXpvbnRhbCA/
IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGUgOiBsYXN0TGluZUJveCgpLT5sb2dp
Y2FsQm90dG9tKCkgLSB4OwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBpc0hvcml6b250YWwgPyBs
YXN0TGluZUJveCgpLT5sb2dpY2FsQm90dG9tKCkgLSB5IDogbG9naWNhbFJpZ2h0U2lkZSAtIGxv
Z2ljYWxMZWZ0U2lkZTsKLSAgICAgICAgcmVzdWx0ID0gZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9h
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdM
YXlvdXRSZWN0KEdyYXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5s
aW5lQm91bmRpbmdCb3goY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0CitHcmFw
aGljc1JlY3QgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5k
ZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OworICAg
IEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0g
Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQpAQCAtNzkxLDkgKzc5MSw5IEBA
CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkg
KyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsK
ICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9v
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVy
KCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgY3VyckJveC0+d2lk
dGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxv
Z2ljYWxIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJv
KEdyYXBoaWNzUmVjdChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gt
Pm1hcmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1h
cmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpKTsKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9u
WmVybyhGbG9hdFJlY3QobG9naWNhbFRvcCwgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55
KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0
KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhHcmFwaGljc1JlY3QobG9n
aWNhbFRvcCwgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJn
aW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJn
aW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8g
SWYgdGhlIGNoaWxkIGRvZXNuJ3QgbmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4g
cmVjdXIuCkBAIC04MDYsMTIgKzgwNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgbG9n
aWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJ
Zk5vblplcm8oRmxvYXRSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dp
Y2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJv
KEdyYXBoaWNzUmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExl
ZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUt
Pm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25a
ZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVm
dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkp
KTsKQEAgLTgyNSw5ICs4MjUsOSBAQAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0g
cm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RC
b3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0g
Y29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQg
PSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwp
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY2hp
bGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2lj
YWxIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdy
YXBoaWNzUmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2Fs
V2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLCBj
aGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0
KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxv
Z2ljYWxXaWR0aCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzQw
LDEyICsxMzQwLDEyIEBACiAgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywg
cmVjdHMsIHRvTGF5b3V0U2l6ZShhZGRpdGlvbmFsT2Zmc2V0KSk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdMYXlvdXRSZWN0KEZsb2F0UmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwg
YWRkaXRpb25hbE9mZnNldC55KCkgKyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhl
aWdodCgpKSkpOworICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3Qo
R3JhcGhpY3NSZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgY3Vyci0+eCgpLCBhZGRpdGlvbmFs
T2Zmc2V0LnkoKSArIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7
CiAgICAgfQogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY3Vyci0+aXNU
ZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50
IHBvcyhhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zKGFk
ZGl0aW9uYWxPZmZzZXQpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3Jr
IGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCiAgICAgICAgICAgICBpZiAoY3Vyci0+aGFzTGF5
ZXIoKSkgCiAgICAgICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CkBA
IC0xNTM2LDcgKzE1MzYsNyBAQAogICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7
CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gY29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRYKGFic1Bvcy54
KCkgKyByZWdpb24uYm91bmRzLngoKSk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQ
b3MueSgpICsgcmVnaW9uLmJvdW5kcy55KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1F1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKQEAgLTQ2MSw5ICs0NjEsOSBAQAogICAgIHJlY3RzLmFwcGVuZChMYXlv
dXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJCb3g6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewotICAgIHF1YWRz
LmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWln
aHQoKSkpKTsKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1Jl
Y3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRh
dGVMYXllclRyYW5zZm9ybSgpCkBAIC00NzYsMTUgKzQ3NiwxNSBAQAogSW50UmVjdCBSZW5kZXJC
b3g6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CiB7CiAgICAgSW50UmVjdCByZWN0ID0gY29u
dGVudEJveFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCkpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRl
KEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkp
OwogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFF1YWQgUmVuZGVyQm94OjphYnNvbHV0ZUNv
bnRlbnRRdWFkKCkgY29uc3QKK0dyYXBoaWNzUXVhZCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVu
dFF1YWQoKSBjb25zdAogewogICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0g
ICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlY3QpKTsKKyAgICByZXR1
cm4gbG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QocmVjdCkpOwogfQogCiBJbnRSZWN0
IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KiBjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWlu
ZXIpIGNvbnN0CkBAIC00OTIsNyArNDkyLDcgQEAKICAgICBJbnRSZWN0IGJveCA9IGJvcmRlckJv
dW5kaW5nQm94KCk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKIAot
ICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBGbG9hdFJlY3QoYm94KTsKKyAg
ICBHcmFwaGljc1F1YWQgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gR3JhcGhpY3NSZWN0KGJveCk7
CiAgICAgaWYgKGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikKICAgICAgICAgY29udGFp
bmVyUmVsYXRpdmVRdWFkLm1vdmUoY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyLT54KCks
IGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lci0+eSgpKTsKICAgICBlbHNlCkBAIC04MTcs
NyArODE3LDcgQEAKICAgICAgICAgcmV0dXJuIEJhY2tncm91bmRCbGVlZE5vbmU7CiAKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gY3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgRmxvYXRTaXplIGNv
bnRleHRTY2FsaW5nKHN0YXRpY19jYXN0PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oY3RtLnlTY2FsZSgpKSk7CisgICAgR3JhcGhpY3NTaXplIGNvbnRleHRTY2FsaW5n
KHN0YXRpY19jYXN0PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3Rt
LnlTY2FsZSgpKSk7CiAgICAgaWYgKGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29udGV4
dFNjYWxpbmcpKQogICAgICAgICByZXR1cm4gQmFja2dyb3VuZEJsZWVkU2hyaW5rQmFja2dyb3Vu
ZDsKICAgICAKQEAgLTEwODUsMTEgKzEwODUsMTEgQEAKICAgICBJbmxpbmVCb3gqIGJveFdyYXAg
PSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBi
b3hXcmFwLT5yb290KCkgOiAwOwogICAgIGlmIChyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByb290
UmVjdChwYWludE9mZnNldC54KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVj
dGlvblRvcCgpLCByLT5sb2dpY2FsV2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwotICAg
ICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3Qu
eSgpLCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBy
b290UmVjdChwYWludE9mZnNldC54KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNl
bGVjdGlvblRvcCgpLCByLT5sb2dpY2FsV2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9v
dFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFn
ZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgRmxvYXRSZWN0IGltYWdlUmVjdChwYWludE9mZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0
LnkoKSArIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgaW1h
Z2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcGFpbnRPZmZzZXQueSgpICsgeSgpLCB3aWR0
aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRD
dXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIGltYWdlUmVjdCwgYmVoaW5k
VGV4dCwgZmFsc2UpOwogICAgIH0KIH0KQEAgLTEzNTUsNyArMTM1NSw3IEBACiAgICAgICAgIGJv
eC0+cmVtb3ZlKCk7CiAgICAgICAgIGJveC0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICB9
IGVsc2UgaWYgKGlzUmVwbGFjZWQoKSkgewotICAgICAgICBzZXRMb2NhdGlvbihyb3VuZGVkSW50
UG9pbnQoRmxvYXRQb2ludChib3gtPngoKSwgYm94LT55KCkpKSk7CisgICAgICAgIHNldExvY2F0
aW9uKHJvdW5kZWRJbnRQb2ludChHcmFwaGljc1BvaW50KGJveC0+eCgpLCBib3gtPnkoKSkpKTsK
ICAgICAgICAgbV9pbmxpbmVCb3hXcmFwcGVyID0gYm94OwogICAgIH0KIH0KQEAgLTM0NDAsMTQg
KzM0NDAsMTQgQEAKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEludFNp
emUob2Zmc2V0LndpZHRoKCksIGhlaWdodCgpIC0gb2Zmc2V0LmhlaWdodCgpKSA6IEludFNpemUo
d2lkdGgoKSAtIG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwogfQogCi1GbG9hdFBv
aW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uKSBjb25zdAorR3JhcGhpY3NQb2ludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShj
b25zdCBHcmFwaGljc1BvaW50JiBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCkt
PmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
LSAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEZsb2F0UG9pbnQocG9zaXRp
b24ueCgpLCBoZWlnaHQoKSAtIHBvc2l0aW9uLnkoKSkgOiBGbG9hdFBvaW50KHdpZHRoKCkgLSBw
b3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBHcmFwaGljc1BvaW50KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlv
bi55KCkpIDogR3JhcGhpY3NQb2ludCh3aWR0aCgpIC0gcG9zaXRpb24ueCgpLCBwb3NpdGlvbi55
KCkpOwogfQogCi12b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKK3ZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NS
ZWN0JiByZWN0KSBjb25zdAogewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAK
ICNpbmNsdWRlICJDb2x1bW5JbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NR
dWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMjc0Nyw3ICsyNzQ3LDcgQEAKICAgICAgICAgcmV0
dXJuIEdhcFJlY3RzKCk7CiAKICAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0cmFu
c2Zvcm1zCi0gICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6
OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBGbG9hdFBvaW50KCkpOworICAgIFRyYW5zZm9ybVN0
YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlv
biwgR3JhcGhpY3NQb2ludCgpKTsKICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250
YWluZXIsIGZhbHNlLCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUpOwogICAgIEludFBvaW50IG9mZnNl
dEZyb21SZXBhaW50Q29udGFpbmVyID0gcm91bmRlZEludFBvaW50KHRyYW5zZm9ybVN0YXRlLm1h
cHBlZFBvaW50KCkpOwogCkBAIC0yNzc2LDcgKzI3NzYsNyBAQAogICAgICAgICAgICAgICAgIGlm
ICghaGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQm91
bmRzKGdhcFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdN
b2RlKGxvY2FsQm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBs
b2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCBsYXllci0+cmVuZGVy
ZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgZ2FwUmVj
dHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChHcmFwaGljc1JlY3QobG9jYWxCb3VuZHMp
LCBsYXllci0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAgICAgICAg
ICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZShsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsYXllci0+YWRkQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKQEAgLTU3MzMsNyArNTczMyw3IEBA
CiAgICAgICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBzaXpl
KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlckJsb2NrOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFw
aGljc1F1YWQ+JiBxdWFkcykKIHsKICAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3
ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRv
IHRoZQogICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGlu
ZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCkBAIC01NzQxLDEy
ICs1NzQxLDEyIEBACiAgICAgaWYgKGlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSkgewog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxvd3MgdGhhdCBhcmUg
aG9yaXpvbnRhbC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ2NzgxCi0gICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxhcHNlZE1h
cmdpbkJlZm9yZSgpLAorICAgICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBz
ZWRNYXJnaW5CZWZvcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBo
ZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpICsgY29sbGFwc2VkTWFyZ2luQWZ0ZXIo
KSk7CiAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkp
OwogICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAgICAgfSBl
bHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpOworICAgICAgICBxdWFkcy5hcHBl
bmQoUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgwLCAwLCB3aWR0
aCgpLCBoZWlnaHQoKSkpKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCbG9jazo6cmVjdFdpdGhPdXRs
aW5lRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgaW50
IG91dGxpbmVXaWR0aCkKQEAgLTU4NzQsMTAgKzU4NzQsMTAgQEAKIAogICAgICAgICAgICAgaW50
IG15UmlnaHQgPSB4ICsgY2FyZXRXaWR0aDsKICAgICAgICAgICAgIC8vIEZJWE1FOiB3aHkgY2Fs
bCBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KCkgdHdpY2UgaGVyZSwgdG9vPwotICAgICAgICAg
ICAgRmxvYXRQb2ludCBhYnNSaWdodFBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
bXlSaWdodCwgMCkpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBhYnNSaWdodFBvaW50ID0g
bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQobXlSaWdodCwgMCkpOwogCiAgICAgICAgICAg
ICBpbnQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eCgpICsgY29udGFpbmlu
Z0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBh
YnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KGNvbnRhaW5lclJp
Z2h0LCAwKSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGFic0NvbnRhaW5lclBvaW50ID0g
bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoY29udGFpbmVyUmlnaHQsIDApKTsKIAogICAg
ICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGFic0NvbnRhaW5lclBvaW50LngoKSAt
IGFic1JpZ2h0UG9pbnQueCgpOwogICAgICAgICB9CkBAIC01OTIwLDEyICs1OTIwLDEyIEBACiAg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQo
KSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkgJiYgY3Vyci0+aXNCb3goKSkgewogICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY3Vycik7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBwb3M7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwb3M7CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRo
IHRyYW5zZm9ybXMuCiAgICAgICAgICAgICAgICAgaWYgKGJveC0+bGF5ZXIoKSkgCiAgICAgICAg
ICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gRmxvYXRQb2ludChhZGRpdGlvbmFs
T2Zmc2V0LngoKSArIGJveC0+eCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC0+eSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcG9zID0gR3JhcGhpY3NQb2ludChhZGRpdGlvbmFsT2Zmc2V0
LngoKSArIGJveC0+eCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJveC0+eSgpKTsKICAgICAg
ICAgICAgICAgICBib3gtPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQo
cG9zKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODYsNyArMzg2LDcgQEAKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcg
bGF5ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5ZXIgaXRzZWxmLgogICAgICAgICBJbnRSZWN0IHBh
cmVudENsaXBSZWN0ID0gbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNl
c3RvciwgdHJ1ZSk7CiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludEluZm86
OmluZmluaXRlUmVjdCgpKTsKLSAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhp
Y3NMYXllclBhcmVudExvY2F0aW9uKSk7CisgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVy
LT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAocGFyZW50Q2xpcFJlY3QubG9jYXRpb24o
KSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwogICAgICAgICBtX2FuY2VzdG9yQ2xp
cHBpbmdMYXllci0+c2V0U2l6ZShwYXJlbnRDbGlwUmVjdC5zaXplKCkpOwogCiAgICAgICAgIC8v
IGJhY2tncm91bmRSZWN0IGlzIHJlbGF0aXZlIHRvIGNvbXBBbmNlc3Rvciwgc28gc3VidHJhY3Qg
ZGVsdGFYL2RlbHRhWSB0byBnZXQgYmFjayB0byBsb2NhbCBjb29yZHMuCkBAIC0zOTYsNyArMzk2
LDcgQEAKICAgICAgICAgZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uID0gcGFyZW50Q2xpcFJl
Y3QubG9jYXRpb24oKTsKICAgICB9CiAKLSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQoKSArIChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkgLSBn
cmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFBv
c2l0aW9uKEdyYXBoaWNzUG9pbnQoKSArIChyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmxvY2F0
aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24pKTsKICAgICAKICAgICBJbnRTaXpl
IG9sZE9mZnNldEZyb21SZW5kZXJlciA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRl
cmVyKCk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIobG9jYWxD
b21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpIC0gSW50UG9pbnQoKSk7CkBAIC00MDUsOCArNDA1
LDggQEAKICAgICBpZiAob2xkT2Zmc2V0RnJvbVJlbmRlcmVyICE9IG1fZ3JhcGhpY3NMYXllci0+
b2Zmc2V0RnJvbVJlbmRlcmVyKCkpCiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgCi0gICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX2dyYXBoaWNzTGF5ZXIt
PnNpemUoKTsKLSAgICBGbG9hdFNpemUgbmV3U2l6ZSA9IHJlbGF0aXZlQ29tcG9zaXRpbmdCb3Vu
ZHMuc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBvbGRTaXplID0gbV9ncmFwaGljc0xheWVyLT5z
aXplKCk7CisgICAgR3JhcGhpY3NTaXplIG5ld1NpemUgPSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91
bmRzLnNpemUoKTsKICAgICBpZiAob2xkU2l6ZSAhPSBuZXdTaXplKSB7CiAgICAgICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKICAgICAgICAgLy8gQSBib3VuZHMgY2hhbmdl
IHdpbGwgYWxtb3N0IGFsd2F5cyByZXF1aXJlIHJlZGlzcGxheS4gVXN1YWxseSB0aGF0IHJlZGlz
cGxheQpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgSW50UmVjdCBjbGlwcGluZ0JveDsKICAgICBp
ZiAobV9jbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIGNsaXBwaW5nQm94ID0gY2xpcEJveCh0b1Jl
bmRlckJveChyZW5kZXJlcigpKSk7Ci0gICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludCgpICsgKGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBvc2l0
aW5nQm91bmRzLmxvY2F0aW9uKCkpKTsKKyAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRQb3Np
dGlvbihHcmFwaGljc1BvaW50KCkgKyAoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29t
cG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNl
dFNpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRP
ZmZzZXRGcm9tUmVuZGVyZXIoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIEludFBvaW50KCkpOwog
ICAgIH0KQEAgLTQyOSw3ICs0MjksNyBAQAogICAgICAgICAgICAgbV9tYXNrTGF5ZXItPnNldFNp
emUobV9ncmFwaGljc0xheWVyLT5zaXplKCkpOwogICAgICAgICAgICAgbV9tYXNrTGF5ZXItPnNl
dE5lZWRzRGlzcGxheSgpOwogICAgICAgICB9Ci0gICAgICAgIG1fbWFza0xheWVyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KCkpOworICAgICAgICBtX21hc2tMYXllci0+c2V0UG9zaXRpb24oR3Jh
cGhpY3NQb2ludCgpKTsKICAgICAgICAgbV9tYXNrTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJl
cihtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKTsKICAgICB9CiAgICAgCkBA
IC00NDAsOSArNDQwLDkgQEAKICAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3Qo
ZGVsdGEsIGJvcmRlckJveC5zaXplKCkpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVz
IHRoYXQgZGVwZW5kIG9uIGxheWVyIGRpbWVuc2lvbnMKLSAgICAgICAgRmxvYXRQb2ludDNEIHRy
YW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKKyAgICAg
ICAgR3JhcGhpY3NQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1Pcmln
aW4oYm9yZGVyQm94KTsKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgYW5jaG9yIHBvaW50LCB3aGlj
aCBpcyBpbiB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXJlciBib3ggdW5sZXNzIHRyYW5zZm9ybS1v
cmlnaW4gaXMgc2V0LgotICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yKHJlbGF0aXZlQ29tcG9z
aXRpbmdCb3VuZHMud2lkdGgoKSAgIT0gMC4wZiA/ICgobGF5ZXJCb3VuZHMueCgpIC0gcmVsYXRp
dmVDb21wb3NpdGluZ0JvdW5kcy54KCkpICsgdHJhbnNmb3JtT3JpZ2luLngoKSkgLyByZWxhdGl2
ZUNvbXBvc2l0aW5nQm91bmRzLndpZHRoKCkgIDogMC41ZiwKKyAgICAgICAgR3JhcGhpY3NQb2lu
dDNEIGFuY2hvcihyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLndpZHRoKCkgICE9IDAuMGYgPyAo
KGxheWVyQm91bmRzLngoKSAtIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMueCgpKSArIHRyYW5z
Zm9ybU9yaWdpbi54KCkpIC8gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy53aWR0aCgpICA6IDAu
NWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5k
cy5oZWlnaHQoKSAhPSAwLjBmID8gKChsYXllckJvdW5kcy55KCkgLSByZWxhdGl2ZUNvbXBvc2l0
aW5nQm91bmRzLnkoKSkgKyB0cmFuc2Zvcm1PcmlnaW4ueSgpKSAvIHJlbGF0aXZlQ29tcG9zaXRp
bmdCb3VuZHMuaGVpZ2h0KCkgOiAwLjVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
YW5zZm9ybU9yaWdpbi56KCkpOwogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFuY2hvclBv
aW50KGFuY2hvcik7CkBAIC00NjQsMTcgKzQ2NCwxNyBAQAogICAgICAgICAgICAgICAgIG1fZ3Jh
cGhpY3NMYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLjVmLCAwLjVmLCAwKSk7CisgICAgICAgIG1fZ3JhcGhp
Y3NMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKDAuNWYsIDAuNWYsIDApKTsK
ICAgICB9CiAKICAgICBpZiAobV9mb3JlZ3JvdW5kTGF5ZXIpIHsKLSAgICAgICAgRmxvYXRQb2lu
dCBmb3JlZ3JvdW5kUG9zaXRpb247Ci0gICAgICAgIEZsb2F0U2l6ZSBmb3JlZ3JvdW5kU2l6ZSA9
IG5ld1NpemU7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgZm9yZWdyb3VuZFBvc2l0aW9uOworICAg
ICAgICBHcmFwaGljc1NpemUgZm9yZWdyb3VuZFNpemUgPSBuZXdTaXplOwogICAgICAgICBJbnRT
aXplIGZvcmVncm91bmRPZmZzZXQgPSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJl
cigpOwogICAgICAgICBpZiAobV9jbGlwcGluZ0xheWVyKSB7CiAgICAgICAgICAgICAvLyBJZiB3
ZSBoYXZlIGEgY2xpcHBpbmcgbGF5ZXIgKHdoaWNoIGNsaXBzIGRlc2NlbmRhbnRzKSwgdGhlbiB0
aGUgZm9yZWdyb3VuZCBsYXllciBpcyBhIGNoaWxkIG9mIGl0LAogICAgICAgICAgICAgLy8gc28g
dGhhdCBpdCBnZXRzIGNvcnJlY3RseSBzb3J0ZWQgd2l0aCBjaGlsZHJlbi4gSW4gdGhhdCBjYXNl
LCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY2xpcHBpbmcgbGF5ZXIuCi0gICAgICAgICAgICBm
b3JlZ3JvdW5kU2l6ZSA9IEZsb2F0U2l6ZShjbGlwcGluZ0JveC5zaXplKCkpOworICAgICAgICAg
ICAgZm9yZWdyb3VuZFNpemUgPSBHcmFwaGljc1NpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKICAg
ICAgICAgICAgIGZvcmVncm91bmRPZmZzZXQgPSBjbGlwcGluZ0JveC5sb2NhdGlvbigpIC0gSW50
UG9pbnQoKTsKICAgICAgICAgfQogCkBAIC00ODksOSArNDg5LDkgQEAKICAgICAgICAgCiAgICAg
ICAgIC8vIFRoZSByZWZsZWN0aW9uIGxheWVyIGhhcyB0aGUgYm91bmRzIG9mIG1fb3duaW5nTGF5
ZXItPnJlZmxlY3Rpb25MYXllcigpLAogICAgICAgICAvLyBidXQgdGhlIHJlZmxlY3RlZCBsYXll
ciBpcyB0aGUgYm91bmRzIG9mIHRoaXMgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQg
YXBwcm9wcmlhdGVseS4KLSAgICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gY29tcG9zaXRl
ZEJvdW5kcygpOwotICAgICAgICBGbG9hdFJlY3QgcmVmbGVjdGlvbkxheWVyQm91bmRzID0gcmVm
bGVjdGlvbkJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKTsKLSAgICAgICAgcmVmbGVjdGlvbkJh
Y2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZExheWVyUG9zaXRpb24oRmxvYXRQ
b2ludCgpICsgKGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZWZsZWN0aW9uTGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSkpOworICAgICAgICBHcmFwaGljc1JlY3QgbGF5ZXJCb3VuZHMgPSBjb21wb3Np
dGVkQm91bmRzKCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByZWZsZWN0aW9uTGF5ZXJCb3VuZHMg
PSByZWZsZWN0aW9uQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOworICAgICAgICByZWZsZWN0
aW9uQmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5zZXRSZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbihH
cmFwaGljc1BvaW50KCkgKyAobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlZmxlY3Rpb25MYXll
ckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgfQogCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRD
b250ZW50c1JlY3QoY29udGVudHNCb3goKSk7CkBAIC05OTMsMTEgKzk5MywxMSBAQAogICAgIGlt
YWdlLT5zdGFydEFuaW1hdGlvbigpOwogfQogCi1GbG9hdFBvaW50M0QgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29u
c3QKK0dyYXBoaWNzUG9pbnQzRCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVUcmFuc2Zvcm1P
cmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdAogewogICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7CiAKLSAgICBGbG9hdFBvaW50M0Qgb3JpZ2lu
OworICAgIEdyYXBoaWNzUG9pbnQzRCBvcmlnaW47CiAgICAgb3JpZ2luLnNldFgoc3R5bGUtPnRy
YW5zZm9ybU9yaWdpblgoKS5jYWxjRmxvYXRWYWx1ZShib3JkZXJCb3gud2lkdGgoKSkpOwogICAg
IG9yaWdpbi5zZXRZKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUoYm9y
ZGVyQm94LmhlaWdodCgpKSk7CiAgICAgb3JpZ2luLnNldFooc3R5bGUtPnRyYW5zZm9ybU9yaWdp
blooKSk7CkBAIC0xMDA1LDE0ICsxMDA1LDE0IEBACiAgICAgcmV0dXJuIG9yaWdpbjsKIH0KIAot
RmxvYXRQb2ludCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihj
b25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CitHcmFwaGljc1BvaW50IFJlbmRlckxheWVy
QmFja2luZzo6Y29tcHV0ZVBlcnNwZWN0aXZlT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJv
eCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgp
OwogCiAgICAgZmxvYXQgYm94V2lkdGggPSBib3JkZXJCb3gud2lkdGgoKTsKICAgICBmbG9hdCBi
b3hIZWlnaHQgPSBib3JkZXJCb3guaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFBvaW50IG9yaWdpbjsK
KyAgICBHcmFwaGljc1BvaW50IG9yaWdpbjsKICAgICBvcmlnaW4uc2V0WChzdHlsZS0+cGVyc3Bl
Y3RpdmVPcmlnaW5YKCkuY2FsY0Zsb2F0VmFsdWUoYm94V2lkdGgpKTsKICAgICBvcmlnaW4uc2V0
WShzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUoYm94SGVpZ2h0KSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVk
T2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDkg
QEAKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0OworICAgIEdyYXBoaWNzUmVjdCBjb250
ZW50UmVjdDsKICAgICBQYXRoIHBhdGg7Ci0gICAgRmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJl
Y3Q7CisgICAgR3JhcGhpY3NSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CiAgICAgRm9udCBmb250
OwogICAgIFRleHRSdW4gcnVuKCIiKTsKICAgICBmbG9hdCB0ZXh0V2lkdGg7CkBAIC0xNzcsMTAg
KzE3NywxMCBAQAogICAgIGZsb2F0IGxhYmVsWSA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0
LmxvY2F0aW9uKCkueSgpICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC0g
Zm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMiArIGZvbnRNZXRyaWNzLmFzY2VudCgpKTsKICAgICBj
b250ZXh0LT5zZXRBbHBoYShtX21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBs
YWNlbWVudFRleHRQcmVzc2VkVGV4dE9wYWNpdHkgOiByZXBsYWNlbWVudFRleHRUZXh0T3BhY2l0
eSk7CiAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgc3R5bGUoKS0+Y29s
b3JTcGFjZSgpKTsKLSAgICBjb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBGbG9hdFBv
aW50KGxhYmVsWCwgbGFiZWxZKSk7CisgICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1
biwgR3JhcGhpY3NQb2ludChsYWJlbFgsIGxhYmVsWSkpOwogfQogCi1ib29sIFJlbmRlckVtYmVk
ZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgmIHBhdGgsIEZs
b2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBm
bG9hdCYgdGV4dFdpZHRoKQorYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1l
bnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBHcmFw
aGljc1JlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiBwYXRoLCBHcmFwaGljc1JlY3QmIHJlcGxhY2Vt
ZW50VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkK
IHsKICAgICBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29udGVudFJlY3Qu
bW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKQEAgLTIwMCwxMiArMjAwLDEyIEBACiAgICAgcnVu
ID0gVGV4dFJ1bihtX3JlcGxhY2VtZW50VGV4dCk7CiAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0
aChydW4pOwogICAgIAotICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0U2l6ZShGbG9hdFNpemUo
dGV4dFdpZHRoICsgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2lu
ICogMiwgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RIZWlnaHQpKTsKKyAgICByZXBsYWNlbWVu
dFRleHRSZWN0LnNldFNpemUoR3JhcGhpY3NTaXplKHRleHRXaWR0aCArIHJlcGxhY2VtZW50VGV4
dFJvdW5kZWRSZWN0TGVmdFJpZ2h0VGV4dE1hcmdpbiAqIDIsIHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0SGVpZ2h0KSk7CiAgICAgZmxvYXQgeCA9IChjb250ZW50UmVjdC5zaXplKCkud2lkdGgo
KSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS53aWR0aCgpIC8gMikgKyBjb250ZW50
UmVjdC5sb2NhdGlvbigpLngoKTsKICAgICBmbG9hdCB5ID0gKGNvbnRlbnRSZWN0LnNpemUoKS5o
ZWlnaHQoKSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIpICsg
Y29udGVudFJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgcmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRM
b2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldExv
Y2F0aW9uKEdyYXBoaWNzUG9pbnQoeCwgeSkpOwogICAgIAotICAgIHBhdGguYWRkUm91bmRlZFJl
Y3QocmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRS
ZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOworICAgIHBhdGgu
YWRkUm91bmRlZFJlY3QocmVwbGFjZW1lbnRUZXh0UmVjdCwgR3JhcGhpY3NTaXplKHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1
cykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yNTEsOSArMjUxLDkgQEAKICAKIGJvb2wg
UmVuZGVyRW1iZWRkZWRPYmplY3Q6OmlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZl
bnQqIGV2ZW50KQogewotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdDsKKyAgICBHcmFwaGljc1Jl
Y3QgY29udGVudFJlY3Q7CiAgICAgUGF0aCBwYXRoOwotICAgIEZsb2F0UmVjdCByZXBsYWNlbWVu
dFRleHRSZWN0OworICAgIEdyYXBoaWNzUmVjdCByZXBsYWNlbWVudFRleHRSZWN0OwogICAgIEZv
bnQgZm9udDsKICAgICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgJKHJldmlzaW9uIDkw
OTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNkZWZpbmUgVHJhbnNmb3JtU3RhdGVfaAogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDQsNyAr
NDQsNyBAQAogICAgIGVudW0gVHJhbnNmb3JtQWNjdW11bGF0aW9uIHsgRmxhdHRlblRyYW5zZm9y
bSwgQWNjdW11bGF0ZVRyYW5zZm9ybSB9OwogCiAgICAgLy8gSWYgcXVhZCBpcyBub24tbnVsbCwg
aXQgd2lsbCBiZSBtYXBwZWQKLSAgICBUcmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1EaXJlY3Rpb24g
bWFwcGluZ0RpcmVjdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRRdWFkKiBx
dWFkID0gMCkKKyAgICBUcmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1EaXJlY3Rpb24gbWFwcGluZ0Rp
cmVjdGlvbiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NRdWFkKiBxdWFk
ID0gMCkKICAgICAgICAgOiBtX2xhc3RQbGFuYXJQb2ludChwKQogICAgICAgICAsIG1fYWNjdW11
bGF0aW5nVHJhbnNmb3JtKGZhbHNlKQogICAgICAgICAsIG1fbWFwUXVhZChxdWFkICE9IDApCkBA
IC02NSwxOCArNjUsMTggQEAKICAgICB2b2lkIGZsYXR0ZW4oKTsKIAogICAgIC8vIFJldHVybiB0
aGUgY29vcmRzIG9mIHRoZSBwb2ludCBvciBxdWFkIGluIHRoZSBsYXN0IGZsYXR0ZW5lZCBsYXll
cgotICAgIEZsb2F0UG9pbnQgbGFzdFBsYW5hclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UGxhbmFyUG9pbnQ7IH0KLSAgICBGbG9hdFF1YWQgbGFzdFBsYW5hclF1YWQoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RQbGFuYXJRdWFkOyB9CisgICAgR3JhcGhpY3NQb2ludCBsYXN0UGxhbmFyUG9p
bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJQb2ludDsgfQorICAgIEdyYXBoaWNzUXVh
ZCBsYXN0UGxhbmFyUXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclF1YWQ7IH0KIAog
ICAgIC8vIFJldHVybiB0aGUgcG9pbnQgb3IgcXVhZCBtYXBwZWQgdGhyb3VnaCB0aGUgY3VycmVu
dCB0cmFuc2Zvcm0KLSAgICBGbG9hdFBvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7Ci0gICAgRmxv
YXRRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcHBlZFBvaW50
KCkgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CiAgICAgCi0gICAgRmxvYXRQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKLSAgICBGbG9h
dFF1YWQgbV9sYXN0UGxhbmFyUXVhZDsKKyAgICBHcmFwaGljc1BvaW50IG1fbGFzdFBsYW5hclBv
aW50OworICAgIEdyYXBoaWNzUXVhZCBtX2xhc3RQbGFuYXJRdWFkOwogCiAgICAgLy8gV2Ugb25s
eSBhbGxvY2F0ZSB0aGUgdHJhbnNmb3JtIGlmIHdlIG5lZWQgdG8KICAgICBPd25QdHI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+IG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm07CkBAIC04Nyw3ICs4Nyw3IEBA
CiAKIGNsYXNzIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGlj
c1F1YWQmIHF1YWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZShwLCBxdWFkKSk7CiAgICAgfQpAQCAtMTAxLDE3ICsxMDEsMTcgQEAK
ICAgICB2b2lkIHRyYW5zbGF0ZShpbnQgeCwgaW50IHksIFRyYW5zZm9ybUFjY3VtdWxhdGlvbik7
CiAgICAgdm9pZCBhcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtRnJvbUNvbnRhaW5lciwgVHJhbnNmb3JtQWNjdW11bGF0aW9uKTsKIAotICAgIEZsb2F0
UG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKLSAgICBGbG9hdFF1YWQgbWFwcGVkUXVhZCgpIGNv
bnN0OworICAgIEdyYXBoaWNzUG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKKyAgICBHcmFwaGlj
c1F1YWQgbWFwcGVkUXVhZCgpIGNvbnN0OwogICAgIHZvaWQgZmxhdHRlbigpOwogCi0gICAgRmxv
YXRQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKLSAgICBGbG9hdFF1YWQgbV9sYXN0UGxhbmFyUXVh
ZDsKKyAgICBHcmFwaGljc1BvaW50IG1fbGFzdFBsYW5hclBvaW50OworICAgIEdyYXBoaWNzUXVh
ZCBtX2xhc3RQbGFuYXJRdWFkOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fYWNjdW11bGF0
ZWRUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybTsKIAogcHJpdmF0
ZToKLSAgICBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkKQorICAgIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZShjb25zdCBH
cmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1F1YWQmIHF1YWQpCiAgICAgICAgIDogbV9s
YXN0UGxhbmFyUG9pbnQocCkKICAgICAgICAgLCBtX2xhc3RQbGFuYXJRdWFkKHF1YWQpCiAgICAg
ICAgICwgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0oZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2
LDcgKzE4Niw3IEBACiAgICAgICAgIC8vIHN0eWxlIHBvaW50ZXIpLgogICAgICAgICBpZiAoc3R5
bGUoKSkgewogICAgICAgICAgICAgaWYgKCFuZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
IHNldFdpZGdldEdlb21ldHJ5KEludFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQo
Y29udGVudEJveFJlY3QoKSkpLmJvdW5kaW5nQm94KCkpLCBjb250ZW50Qm94UmVjdCgpLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgc2V0V2lkZ2V0R2VvbWV0cnkoSW50UmVjdChsb2NhbFRvQWJz
b2x1dGVRdWFkKEdyYXBoaWNzUXVhZChjb250ZW50Qm94UmVjdCgpKSkuYm91bmRpbmdCb3goKSks
IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT52aXNp
YmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgICAgICBtX3dpZGdldC0+aGlkZSgpOwog
ICAgICAgICAgICAgZWxzZSB7CkBAIC0zMjcsNyArMzI3LDcgQEAKICAgICAgICAgcmV0dXJuOwog
CiAgICAgSW50UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKLSAgICBJbnRSZWN0
IGFic29sdXRlQ29udGVudEJveCA9IEludFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1
YWQoY29udGVudEJveCkpLmJvdW5kaW5nQm94KCkpOworICAgIEludFJlY3QgYWJzb2x1dGVDb250
ZW50Qm94ID0gSW50UmVjdChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChjb250ZW50
Qm94KSkuYm91bmRpbmdCb3goKSk7CiAgICAgYm9vbCBib3VuZHNDaGFuZ2VkID0gc2V0V2lkZ2V0
R2VvbWV0cnkoYWJzb2x1dGVDb250ZW50Qm94LCBjb250ZW50Qm94LnNpemUoKSk7CiAKICAgICAv
LyBpZiB0aGUgZnJhbWUgYm91bmRzIGdvdCBjaGFuZ2VkLCBvciBpZiB2aWV3IG5lZWRzIGxheW91
dCAocG9zc2libHkgaW5kaWNhdGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB2aXJ0
dWFsIExheW91dFVuaXQgbWFyZ2luRW5kKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNz
UXVhZD4mKTsKIAogICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJl
bmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKQEAgLTk4LDEyICs5OCwx
MiBAQAogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgRmxvYXRSZWN0IGN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJl
bmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgY3VsbGVkSW5s
aW5lQm91bmRpbmdCb3goY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogICAg
IEludFJlY3QgY3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0Owog
ICAgIElubGluZUJveCogY3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAgICAgSW5s
aW5lQm94KiBjdWxsZWRJbmxpbmVMYXN0TGluZUJveCgpIGNvbnN0OwogICAgIHZvaWQgY3VsbGVk
SW5saW5lQWJzb2x1dGVSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9y
PEludFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgY3VsbGVkSW5saW5lQWJzb2x1
dGVRdWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVhZD4m
KTsKKyAgICB2b2lkIGN1bGxlZElubGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5l
KiBjb250YWluZXIsIFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICB2b2lkIGFkZENoaWxk
VG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNp
b24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBIaWdobGlnaHQgYWN0cyBhcyBhIHNlbGVjdGlvbiBpbmZsYXRpb24uCi0gICAgRmxvYXRS
ZWN0IHJvb3RSZWN0KDAsIHNlbGVjdGlvblRvcCgpLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9u
SGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCByb290UmVjdCgwLCBzZWxlY3Rpb25Ub3AoKSwg
bG9naWNhbFdpZHRoKCksIHNlbGVjdGlvbkhlaWdodCgpKTsKICAgICBJbnRSZWN0IGluZmxhdGVk
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21I
aWdobGlnaHRSZWN0KHJlbmRlcmVyKCktPm5vZGUoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGln
aGxpZ2h0KCksIHJvb3RSZWN0KSk7CiAgICAgc2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJlY3RzKGlu
ZmxhdGVkUmVjdCwgaW5mbGF0ZWRSZWN0LCBsaW5lVG9wKCksIGxpbmVCb3R0b20oKSk7CiB9CkBA
IC0xNzAsOCArMTcwLDggQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBpbmZs
YXRlZCByZWN0IHNvIHRoYXQgd2UgY2FuIHByb3Blcmx5IGhpdCB0ZXN0LgotICAgIEZsb2F0UmVj
dCByb290UmVjdChwYWludE9mZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVj
dGlvblRvcCgpLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0
UmVjdCBpbmZsYXRlZFJlY3QgPSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hs
aWdodFJlY3QocmVuZGVyZXIoKS0+bm9kZSgpLCBoaWdobGlnaHRUeXBlLCByb290UmVjdCk7Cisg
ICAgR3JhcGhpY3NSZWN0IHJvb3RSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcGFpbnRPZmZz
ZXQueSgpICsgc2VsZWN0aW9uVG9wKCksIGxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQo
KSk7CisgICAgR3JhcGhpY3NSZWN0IGluZmxhdGVkUmVjdCA9IHBhZ2UtPmNocm9tZSgpLT5jbGll
bnQoKS0+Y3VzdG9tSGlnaGxpZ2h0UmVjdChyZW5kZXJlcigpLT5ub2RlKCksIGhpZ2hsaWdodFR5
cGUsIHJvb3RSZWN0KTsKICAgICBpZiAoaW5mbGF0ZWRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZv
LnJlY3QpKQogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGln
aGxpZ2h0KHJlbmRlcmVyKCktPm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RS
ZWN0LCBmYWxzZSwgdHJ1ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNjMyLDcgKzYzMiw3IEBACiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywg
TGF5b3V0VW5pdCBwb3NpdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYp
OworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7
CiAKICAgICBMYXlvdXRVbml0IGRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGRlc2lyZWRDb2x1bW5Db3VudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
OSw3ICsyOTksNyBAQAogCiAgICAgLy8gQ29tcHV0ZSB0aGUgdG9wIGxlZnQgdGFraW5nIHRyYW5z
Zm9ybXMgaW50byBhY2NvdW50LCBidXQgdXNlCiAgICAgLy8gdGhlIGFjdHVhbCB3aWR0aCBvZiB0
aGUgZWxlbWVudCB0byBzaXplIHRoZSBwb3B1cC4KLSAgICBGbG9hdFBvaW50IGFic1RvcExlZnQg
PSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgR3JhcGhp
Y3NQb2ludCBhYnNUb3BMZWZ0ID0gbG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSwgZmFs
c2UsIHRydWUpOwogICAgIEludFJlY3QgYWJzQm91bmRzID0gYWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKTsKICAgICBhYnNCb3VuZHMuc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KGFic1RvcExl
ZnQpKTsKICAgICBtX3BvcHVwLT5zaG93KGFic0JvdW5kcywgZG9jdW1lbnQoKS0+dmlldygpLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zMzEsOSArMzMxLDkgQEAKICAgICByZWN0cy5h
cHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgbV9sYXllci0+c2l6ZSgpKSk7CiB9
CiAKLXZvaWQgUmVuZGVyVmlldzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVh
ZHMpCit2b2lkIFJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4m
IHF1YWRzKQogewotICAgIHF1YWRzLmFwcGVuZChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2xh
eWVyLT5zaXplKCkpKTsKKyAgICBxdWFkcy5hcHBlbmQoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9p
bnQoKSwgbV9sYXllci0+c2l6ZSgpKSk7CiB9CiAKIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyQWZ0ZXJQb3NpdGlvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0KQpA
QCAtMzc5LDcgKzM3OSw3IEBACiAgICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3Qo
KSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0
byBwYWdlIGNvb3JkaW5hdGVzLgogICAgICAgICBJbnRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVj
dCgpOwogICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIg
PSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNR
dWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3Vy
clJlY3QpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRh
aW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoY3VyclJlY3QpKTsKICAgICAg
ICAgICAgIGN1cnJSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyAKICAgICAg
ICAgfQogICAgICAgICBzZWxSZWN0LnVuaXRlKGN1cnJSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBACiAgICAgYm9vbCBmaXhlZCA9IHJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSAmJiBy
ZW5kZXJlci0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwogICAgIGlmIChm
aXhlZCkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdp
dGggdHJhbnNmb3Jtcy4KLSAgICAgICAgRmxvYXRQb2ludCBmaXhlZE9mZnNldCA9IHJlbmRlcmVy
LT52aWV3KCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIHRydWUpOworICAgICAgICBH
cmFwaGljc1BvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fic29s
dXRlKEdyYXBoaWNzUG9pbnQoKSwgdHJ1ZSk7CiAgICAgICAgIG1fcGFpbnRPZmZzZXQgPSBMYXlv
dXRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9mZnNldDsKICAgICB9
IGVsc2UKICAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CkBAIC0xMTcsNyArMTE3LDcgQEAKICNlbmRpZgogewogICAgIFJlbmRlck9iamVjdCogY29u
dGFpbmVyID0gcm9vdC0+Y29udGFpbmVyKCk7Ci0gICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9p
bnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVl
KTsKKyAgICBHcmFwaGljc1BvaW50IGFic0NvbnRlbnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxU
b0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAgIG1fcGFpbnRPZmZz
ZXQgPSBMYXlvdXRTaXplKGFic0NvbnRlbnRQb2ludC54KCksIGFic0NvbnRlbnRQb2ludC55KCkp
OwogCiAgICAgaWYgKGNvbnRhaW5lci0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzksNyArNDc5LDcgQEAKICAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gNDsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zv
cm1zLgotICAgIEZsb2F0UG9pbnQgYWJzT2Zmc2V0ID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAg
R3JhcGhpY3NQb2ludCBhYnNPZmZzZXQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKIAogICAgIEludFBv
aW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uID0gZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJl
bnRNb3VzZVBvc2l0aW9uKCk7CiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVu
dCBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMg
b3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CkBAIC01MjEsNyAr
NTIxLDcgQEAKIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3dhcmQoY29uc3QgSW50UG9pbnQm
IGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0
bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29s
dXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAg
ICBpbnQgb2Zmc2V0WCA9IGRlc3RpbmF0aW9uLngoKSAtIGFic1Bvcy54KCk7CiAgICAgaW50IG9m
ZnNldFkgPSBkZXN0aW5hdGlvbi55KCkgLSBhYnNQb3MueSgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAs
NyArMjAsNyBAQAogI2lmbmRlZiBIaXRUZXN0UmVzdWx0X2gKICNkZWZpbmUgSGl0VGVzdFJlc3Vs
dF9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIGl0IGlzIHJlY3QtYmFzZWQgaGl0IHRlc3QgYW5kIG5lZWRzIHRvIGNvbnRpbnVl
IHVudGlsIHRoZSByZWN0IGlzIGZ1bGx5CiAgICAgLy8gZW5jbG9zZWQgYnkgdGhlIGJvdW5kYXJp
ZXMgb2YgYSBub2RlLgogICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2Rl
KiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFJlY3Qm
ID0gSW50UmVjdCgpKTsKLSAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9k
ZSosIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2
b2lkIGFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAKICAgICAvLyBJZiBtX3JlY3RCYXNl
ZFRlc3RSZXN1bHQgaXMgMCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1f
cmVjdEJhc2VkVGVzdFJlc3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTgxLDcgKzE4MSw3IEBACiAKICAgICBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwg
PSAxLjBmKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29u
c3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRS
ZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNv
bnN0OworICAgIEdyYXBoaWNzUmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVy
T2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Owog
ICAgIAogICAgIC8vIEdldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gIFVz
ZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiBwdWJsaWM6CiAgICAgRWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0KiBvYmosIGNv
bnN0IEF0b21pY1N0cmluZyYgZWxsaXBzaXNTdHIsIElubGluZUZsb3dCb3gqIHBhcmVudCwKICAg
ICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB5LCBib29sIGZpcnN0TGlu
ZSwgYm9vbCBpc1ZlcnRpY2FsLCBJbmxpbmVCb3gqIG1hcmt1cEJveCkKLSAgICAgICAgOiBJbmxp
bmVCb3gob2JqLCBGbG9hdFBvaW50KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxz
ZSwgZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBhcmVudCkKKyAgICAgICAgOiBJbmxpbmVCb3go
b2JqLCBHcmFwaGljc1BvaW50KDAsIHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwg
ZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBhcmVudCkKICAgICAgICAgLCBtX2hlaWdodChoZWln
aHQpCiAgICAgICAgICwgbV9zdHIoZWxsaXBzaXNTdHIpCiAgICAgICAgICwgbV9tYXJrdXBCb3go
bWFya3VwQm94KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw3ICs1MDMsNyBAQAogSW50UG9pbnQgUmVuZGVy
VGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1
dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKICAgICBpbnQgeSA9IC1zaXpl
LmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0
cnVlLCB0cnVlKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+
bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgp
LCB5KSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgaWYgKGFic1BvaW50LnkoKSA8IDApCiAgICAgICAgIHkg
PSBtdXRlQnV0dG9uQm94LT5oZWlnaHQoKTsKICAgICByZXR1cm4gSW50UG9pbnQoMCwgeSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTUgKzcxLDE1IEBACiB9CiAK
IC8vIFV0aWxpdHkgdG8gc2NhbGUgd2hlbiB0aGUgVUkgcGFydCBhcmUgbm90IHNjYWxlZCBieSB3
a0RyYXdNZWRpYVVJUGFydAotc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RBbmRBZGp1
c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCitzdGF0aWMgR3JhcGhpY3NSZWN0IGdl
dFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKIHsK
ICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAg
RmxvYXRSZWN0IHVuem9vbWVkUmVjdChvcmlnaW5hbFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCB1
bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsK
ICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9v
bUxldmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVp
Z2h0KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRl
KHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxldmVsLCB6b29tTGV2
ZWwpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0
LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KICAgICByZXR1cm4gdW56b29tZWRSZWN0
OwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBN
ZWRpYVNsaWRlcjogewogICAgICAgICAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRS
ZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0
KG8sIHBhaW50SW5mbywgcik7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVk
UmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5m
bywgcik7CiAgICAgICAgICAgICAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayh0aGVtZVN0eWxl
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVk
aWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1l
ZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRl
cm1pbmVTdGF0ZShvKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4
OSw3ICsxODksNyBAQAogCiAgICAgZmxvYXQgem9vbUxldmVsID0gbXV0ZUJ1dHRvbkJveC0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGludCB5ID0geU9mZnNldCAqIHpvb21MZXZlbCAr
IG11dGVCdXR0b25Cb3gtPm9mZnNldEhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKTsKLSAgICBGbG9h
dFBvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9p
bnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7CisgICAgR3Jh
cGhpY3NQb2ludCBhYnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShHcmFw
aGljc1BvaW50KG11dGVCdXR0b25Cb3gtPm9mZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUpOwog
ICAgIGlmIChhYnNQb2ludC55KCkgPCAwKQogICAgICAgICB5ID0gbXV0ZUJ1dHRvbkJveC0+aGVp
Z2h0KCk7CiAgICAgcmV0dXJuIEludFBvaW50KHhPZmZzZXQgKiB6b29tTGV2ZWwsIHkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHVGV4dFF1ZXJ5X2gK
IAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNo
YXJhY3RlcnMoKSBjb25zdDsKICAgICBmbG9hdCB0ZXh0TGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxv
YXQgc3ViU3RyaW5nTGVuZ3RoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0
aCkgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWdu
ZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rl
cih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvc2l0
aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIEdyYXBoaWNzUG9p
bnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CiAgICAg
ZmxvYXQgcm90YXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAg
ICBpbnQgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgR3JhcGhpY3NSZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBj
b25zdDsKKyAgICBpbnQgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1Bv
aW50JikgY29uc3Q7CiAKICAgICAvLyBQdWJsaWMgaGVscGVyIHN0cnVjdC4gUHJpdmF0ZSBjbGFz
c2VzIGluIFNWR1RleHRRdWVyeSBpbmhlcml0IGZyb20gaXQuCiAgICAgc3RydWN0IERhdGE7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFs
R3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQAogICAgIFNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudCogcmFkaWFsR3JhZGllbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsKIAogICAgIC8vIERldGVybWlu
ZSBncmFkaWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKLSAgICBGbG9hdFBvaW50
IGZvY2FsUG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICBHcmFwaGljc1Bv
aW50IGZvY2FsUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQb2ludDsKICAgICBmbG9h
dCByYWRpdXM7CiAgICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVGb2NhbENlbnRl
clBvaW50c0FuZFJhZGl1cyhtX2F0dHJpYnV0ZXMsIGZvY2FsUG9pbnQsIGNlbnRlclBvaW50LCBy
YWRpdXMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQgKzQxLDE0IEBA
CiAgICAgLy8gV2Ugc2VhcmNoIGZvciB0aGUgcm9vdCB0ZXh0IGVsZW1lbnQgYW5kIHRha2UgaXRz
IGJvdW5kaW5nIGJveC4KICAgICAvLyBJdCBpcyBhbHNvIG5lY2Vzc2FyeSB0byB0YWtlIHRoZSBz
dHJva2UgYW5kIHJlcGFpbnQgcmVjdCBvZgogICAgIC8vIHRoaXMgZWxlbWVudCwgc2luY2Ugd2Ug
bmVlZCBpdCBmb3IgZmlsdGVycy4KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGlu
Z0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CiAgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgdmlydHVh
bCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+
Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbmxpbmVGbG93Qm94KiBjcmVhdGVJbmxpbmVG
bG93Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVm
ZmVyVG9vbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQAogICAgIH0KIH0KIAotYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZm
ZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorYm9vbCBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRl
VGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0
LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQogewogICAgIEludFNpemUgaW1hZ2VTaXplKHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKICAgICBJbnRTaXplIHVuY2xhbXBlZEltYWdl
U2l6ZShTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGFic29sdXRl
VGFyZ2V0UmVjdC5zaXplKCkpKTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICBBU1NFUlQoaW1hZ2VD
b250ZXh0KTsKIAogICAgIC8vIENvbXBlbnNhdGUgcm91bmRpbmcgZWZmZWN0cywgYXMgdGhlIGFi
c29sdXRlIHRhcmdldCByZWN0IGlzIHVzaW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIHRo
ZSBpbWFnZSBidWZmZXIgc2l6ZSBpcyBpbnRlZ2VyLgotICAgIGltYWdlQ29udGV4dC0+c2NhbGUo
RmxvYXRTaXplKHVuY2xhbXBlZEltYWdlU2l6ZS53aWR0aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0
LndpZHRoKCksIHVuY2xhbXBlZEltYWdlU2l6ZS5oZWlnaHQoKSAvIGFic29sdXRlVGFyZ2V0UmVj
dC5oZWlnaHQoKSkpOworICAgIGltYWdlQ29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHVuY2xh
bXBlZEltYWdlU2l6ZS53aWR0aCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LndpZHRoKCksIHVuY2xh
bXBlZEltYWdlU2l6ZS5oZWlnaHQoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC5oZWlnaHQoKSkpOwog
CiAgICAgaW1hZ2VCdWZmZXIgPSBpbWFnZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC05MSw3ICs5MSw3IEBACiAgICAgY29udGVudFRyYW5zZm9ybWF0aW9uID0gc2F2ZWRDb250ZW50
VHJhbnNmb3JtYXRpb247CiB9CiAKLXZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRvSW1h
Z2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdl
dFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQordm9pZCBTVkdJbWFnZUJ1
ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVj
dCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VC
dWZmZXIpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVChpbWFnZUJ1ZmZlcik7
CkBAIC0xMDgsMTcgKzEwOCwxNyBAQAogICAgICAgICBpbWFnZUJ1ZmZlci5jbGVhcigpOwogfQog
Ci1JbnRTaXplIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQorSW50U2l6ZSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVk
SW1hZ2VCdWZmZXJTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICByZXR1cm4g
SW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoc2l6ZS53aWR0aCgpKSksIHN0YXRpY19j
YXN0PGludD4obHJvdW5kZihzaXplLmhlaWdodCgpKSkpOwogfQogCi1GbG9hdFJlY3QgU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRS
ZWN0KQorR3JhcGhpY3NSZWN0IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3RGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBH
cmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCkKIHsKICAgICBBU1NFUlQocmVuZGVyZXIp
OwogCiAgICAgY29uc3QgUmVuZGVyU1ZHUm9vdCogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6
OmZpbmRUcmVlUm9vdE9iamVjdChyZW5kZXJlcik7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRhcmdldFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRhcmdldFJlY3Q7CiAgICAgY2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc3ZnUm9vdC0+ZnJhbWVSZWN0KCkpOwogICAg
IHJldHVybiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgcmV0dXJuIGJ1aWxkZXIucmVsZWFz
ZSgpOwogfQogCi1ib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpmaXRzSW5NYXhpbXVtSW1h
Z2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRTaXplJiBzY2FsZSkKK2Jvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmZpdHNJbk1heGltdW1JbWFnZVNpemUoY29uc3QgR3JhcGhp
Y3NTaXplJiBzaXplLCBHcmFwaGljc1NpemUmIHNjYWxlKQogewogICAgIGJvb2wgbWF0Y2hlc0Zp
bHRlclNpemUgPSB0cnVlOwogICAgIGlmIChzaXplLndpZHRoKCkgPiBrTWF4RmlsdGVyU2l6ZSkg
ewpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgfQogCiAgICAgT3duUHRyPEZpbHRlckRhdGE+IGZp
bHRlckRhdGEoYWRvcHRQdHIobmV3IEZpbHRlckRhdGEpKTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0
Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NS
ZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogCiAg
ICAgU1ZHRmlsdGVyRWxlbWVudCogZmlsdGVyRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRl
ckVsZW1lbnQqPihub2RlKCkpOwogICAgIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMgPSBmaWx0ZXJF
bGVtZW50LT5maWx0ZXJCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CkBAIC0xNzQsMTAg
KzE3NCwxMCBAQAogICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0g
QWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0
ZVRyYW5zZm9ybS55U2NhbGUoKSwgYWJzb2x1dGVUcmFuc2Zvcm0uZSgpLCBhYnNvbHV0ZVRyYW5z
Zm9ybS5mKCkpOwogCiAgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5kYXJpZXMgb2YgdGhl
IGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUZp
bHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5t
YXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVn
aW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBhYnNv
bHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOworICAgIEdyYXBoaWNzUmVjdCBk
cmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGRyYXdpbmdS
ZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBh
YnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZURy
YXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KGRyYXdpbmdSZWdpb24pOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0
LgogICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC0+cHJp
bWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1g7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgc2NhbGUg
ZmFjdG9yIGZvciB0aGUgdXNlIG9mIGZpbHRlclJlcy4KICAgICAvLyBBbHNvIHNlZSBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI0ZpbHRlckVmZmVjdHNSZWdpb24KLSAgICBG
bG9hdFNpemUgc2NhbGUoMSwgMSk7CisgICAgR3JhcGhpY3NTaXplIHNjYWxlKDEsIDEpOwogICAg
IGlmIChmaWx0ZXJFbGVtZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZpbHRlclJlc0F0dHIp
KSB7CiAgICAgICAgIHNjYWxlLnNldFdpZHRoKGZpbHRlckVsZW1lbnQtPmZpbHRlclJlc1goKSAv
IGFic29sdXRlRmlsdGVyQm91bmRhcmllcy53aWR0aCgpKTsKICAgICAgICAgc2NhbGUuc2V0SGVp
Z2h0KGZpbHRlckVsZW1lbnQtPmZpbHRlclJlc1koKSAvIGFic29sdXRlRmlsdGVyQm91bmRhcmll
cy5oZWlnaHQoKSk7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBp
bnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4Rmls
dGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdS
ZWdpb247CisgICAgR3JhcGhpY3NSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5n
UmVnaW9uOwogICAgIHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKICAgICBmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHRlbXBTb3VyY2VSZWN0LnNpemUo
KSwgc2NhbGUpOwogCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbihsYXN0RWZmZWN0KTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0g
bGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBzdWJSZWdpb24g
PSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRl
ckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhl
IGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgogICAgIGlmICghZml0c0luTWF4
aW11bUltYWdlU2l6ZShzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKQEAgLTI0Nyw3ICsyNDcs
NyBAQAogICAgICAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+c2NhbGUoc2NhbGUpOwogCiAgICAg
c291cmNlR3JhcGhpY0NvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSk7Ci0gICAgc291cmNlR3JhcGhpY0NvbnRleHQtPmNsZWFyUmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2l6ZSgpKSk7CisgICAg
c291cmNlR3JhcGhpY0NvbnRleHQtPmNsZWFyUmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2lu
dCgpLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2l6ZSgpKSk7CiAgICAgZmlsdGVyRGF0YS0+c291
cmNlR3JhcGhpY0J1ZmZlciA9IHNvdXJjZUdyYXBoaWMucmVsZWFzZSgpOwogICAgIGZpbHRlckRh
dGEtPnNhdmVkQ29udGV4dCA9IGNvbnRleHQ7CiAKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICAg
ICBpZiAocmVzdWx0SW1hZ2UpIHsKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0
ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwogCi0gICAgICAg
ICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEtPmZpbHRlci0+Zmls
dGVyUmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhp
Y3NTaXplKDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
LCAxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAobGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0
LT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkp
OwogICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJS
ZXNvbHV0aW9uKCkpOwpAQCAtMzI3LDEyICszMjcsMTIgQEAKICAgICBmaWx0ZXJEYXRhLT5zb3Vy
Y2VHcmFwaGljQnVmZmVyLmNsZWFyKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBo
aWNzUmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5k
ZXJPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoU1ZHRmlsdGVyRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpKQogICAgICAgICByZXR1cm4g
ZWxlbWVudC0+ZmlsdGVyQm91bmRpbmdCb3gob2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpKTsK
IAotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9
CiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5n
ZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCwxMiArNDQsMTIgQEAKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFp
bnQuCiB9CiAKLXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JikKK3ZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JikKIHsKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9l
cyBub3QgdGFrZSB1cCBzcGFjZSBvciBwYWludAogfQogCi1ib29sIFJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lcjo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyOjpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBIaXRUZXN0QWN0aW9uKQog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4
ICs1MCw4IEBACiAgICAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVs
ZW1lbnQpOwogCiAgICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKLSAg
ICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBlbmRQb2ludDsKKyAgICBH
cmFwaGljc1BvaW50IHN0YXJ0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludDsKICAg
ICBsaW5lYXJHcmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKG1fYXR0cmli
dXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOwogCiAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpZiBFTkFCTEUo
U1ZHKQogI2luY2x1ZGUgIlJlbmRlclNWR1RleHRQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5o
IgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDggKzg1LDggQEAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFu
c2Zvcm07CiAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25U
b091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0odGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUcmFu
c2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJh
bnNmb3JtLm1hcFJlY3QodGV4dFJvb3RCbG9jay0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJv
b3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgYWJzb2x1dGVU
YXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBHcmFwaGljc1JlY3QgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3RGb3JSZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOwog
ICAgIGlmIChjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0xMDksNyArMTA5LDcgQEAKIAogc3RhdGljIGlubGluZSBBZmZpbmVU
cmFuc2Zvcm0gY2xpcFRvVGV4dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVy
PiYgaW1hZ2VCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QmIHRhcmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QmIHRhcmdldFJlY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYm91bmRpbmdC
b3hNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFRyYW5zZm9ybSkKQEAgLTEyMiwxNCArMTIyLDE0
IEBACiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwogICAgIFNWR0ltYWdl
QnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGlu
YXRlU3lzdGVtKHRleHRSb290QmxvY2ssIGFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0
UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdl
dFJlY3QpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRS
b290QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRl
VGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisgICAg
R3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRv
b2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywg
YWJzb2x1dGVUYXJnZXRSZWN0KTsKIAogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0lt
YWdlQnVmZmVyKGNvbnRleHQsIGFic29sdXRlVHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0LCBpbWFnZUJ1ZmZlcik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAg
IGlmIChib3VuZGluZ0JveE1vZGUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0Jv
eCA9IHRleHRSb290QmxvY2stPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgICAgIEdyYXBoaWNz
UmVjdCBtYXNrQm91bmRpbmdCb3ggPSB0ZXh0Um9vdEJsb2NrLT5vYmplY3RCb3VuZGluZ0JveCgp
OwogICAgICAgICBtYXRyaXgudHJhbnNsYXRlKG1hc2tCb3VuZGluZ0JveC54KCksIG1hc2tCb3Vu
ZGluZ0JveC55KCkpOwogICAgICAgICBtYXRyaXguc2NhbGVOb25Vbmlmb3JtKG1hc2tCb3VuZGlu
Z0JveC53aWR0aCgpLCBtYXNrQm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIH0KQEAgLTE2Myw3
ICsxNjMsNyBAQAogCiAgICAgLy8gU3BlYzogV2hlbiB0aGUgZ2VvbWV0cnkgb2YgdGhlIGFwcGxp
Y2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFuZCBvYmplY3RCb3VuZGluZ0Jv
eCBpcyBzcGVjaWZpZWQsCiAgICAgLy8gdGhlbiB0aGUgZ2l2ZW4gZWZmZWN0IChlLmcuIGEgZ3Jh
ZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4KLSAgICBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NS
ZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAg
IGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm07CiAgICAgICAgICAgICBjYWxjdWxhdGVH
cmFkaWVudFRyYW5zZm9ybShncmFkaWVudFRyYW5zZm9ybSk7CiAKLSAgICAgICAgICAgIEZsb2F0
UmVjdCB0YXJnZXRSZWN0OworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3Q7CiAg
ICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIHRhcmdldFJlY3QsIG9i
amVjdCwgYm91bmRpbmdCb3hNb2RlKCksIGdyYWRpZW50VHJhbnNmb3JtKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVudCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUsNyArNTY1
LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgYm9vbCBvayA9IGZh
bHNlOwotICAgICAgICAgICAgRmxvYXRQb2ludCBwb2ludCA9IG1fdGV4dFBhdGgucG9pbnRBdExl
bmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwb2lu
dCA9IG1fdGV4dFBhdGgucG9pbnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOwogICAgICAg
ICAgICAgQVNTRVJUKG9rKTsKIAogICAgICAgICAgICAgeCA9IHBvaW50LngoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsy
MSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCiAKICNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlk
YXRpb24gPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9i
amVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJl
c291cmNlTW9kZSk7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5n
Qm94KFJlbmRlck9iamVjdCopOwogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gQ2xpcHBlclJlc291cmNlVHlwZTsgfQogICAg
IAotICAgIGJvb2wgaGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICBib29sIGhpdFRlc3RDbGlwQ29udGVudChjb25zdCBHcmFwaGljc1Jl
Y3QmLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRU
eXBlIGNsaXBQYXRoVW5pdHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdDbGlwUGF0
aEVsZW1lbnQqPihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCk7IH0KIApAQCAtNjQsMTMgKzY0LDEz
IEBACiBwcml2YXRlOgogICAgIC8vIGNsaXBQYXRoIGNhbiBiZSBjbGlwcGVkIHRvbywgYnV0IGRv
bid0IGhhdmUgYSBib3VuZGluZ0JveCBvciByZXBhaW50UmVjdC4gU28gd2UgY2FuJ3QgY2FsbAog
ICAgIC8vIGFwcGx5UmVzb3VyY2UgZGlyZWN0bHkgYW5kIHVzZSB0aGUgcmVjdHMgZnJvbSB0aGUg
b2JqZWN0LCBzaW5jZSB0aGV5IGFyZSBlbXB0eSBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VzCi0gICAg
Ym9vbCBhcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dCopOwotICAgIGJvb2wgcGF0aE9u
bHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBib29s
IGRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSosIGNvbnN0IEZsb2F0UmVjdCYg
b2JqZWN0Qm91bmRpbmdCb3gpOworICAgIGJvb2wgYXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5k
ZXJPYmplY3QqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBHcmFw
aGljc0NvbnRleHQqKTsKKyAgICBib29sIHBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgYm9vbCBkcmF3Q29udGVudEludG9NYXNrSW1h
Z2UoQ2xpcHBlckRhdGEqLCBjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KTsK
ICAgICB2b2lkIGNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsKIAogICAgIGJvb2wg
bV9pbnZhbGlkYXRpb25CbG9ja2VkOwotICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZGFyaWVzOwor
ICAgIEdyYXBoaWNzUmVjdCBtX2NsaXBCb3VuZGFyaWVzOwogICAgIEhhc2hNYXA8UmVuZGVyT2Jq
ZWN0KiwgQ2xpcHBlckRhdGEqPiBtX2NsaXBwZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJ
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDExICsxMTIsMTEgQEAK
ICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IHRydWU7CiAgICAgfQog
Ci0gICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKKyAgICBHcmFwaGljc1Jl
Y3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OwogCiAgICAgLy8gQ2FjaGUgdmlld3BvcnQgYm91
bmRhcmllcwotICAgIEZsb2F0UG9pbnQgdmlld3BvcnRMb2NhdGlvbihmb3JlaWduLT54KCkudmFs
dWUoZm9yZWlnbiksIGZvcmVpZ24tPnkoKS52YWx1ZShmb3JlaWduKSk7Ci0gICAgbV92aWV3cG9y
dCA9IEZsb2F0UmVjdCh2aWV3cG9ydExvY2F0aW9uLCBGbG9hdFNpemUoZm9yZWlnbi0+d2lkdGgo
KS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+aGVpZ2h0KCkudmFsdWUoZm9yZWlnbikpKTsKKyAg
ICBHcmFwaGljc1BvaW50IHZpZXdwb3J0TG9jYXRpb24oZm9yZWlnbi0+eCgpLnZhbHVlKGZvcmVp
Z24pLCBmb3JlaWduLT55KCkudmFsdWUoZm9yZWlnbikpOworICAgIG1fdmlld3BvcnQgPSBHcmFw
aGljc1JlY3Qodmlld3BvcnRMb2NhdGlvbiwgR3JhcGhpY3NTaXplKGZvcmVpZ24tPndpZHRoKCku
dmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPmhlaWdodCgpLnZhbHVlKGZvcmVpZ24pKSk7CiAgICAg
aWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQogICAgICAgICB1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gb2xkVmlld3BvcnQgIT0gbV92aWV3cG9ydDsKIApAQCAt
MTQyLDkgKzE0Miw5IEBACiAgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogfQog
Ci1ib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBS
ZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKLSAgICBG
bG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2lu
dChwb2ludEluUGFyZW50KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRy
YW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAogICAgIC8vIEVh
cmx5IGV4aXQgaWYgbG9jYWwgcG9pbnQgaXMgbm90IGNvbnRhaW5lZCBpbiBjbGlwcGVkIHZpZXdw
b3J0IGFyZWEKICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlz
KSAmJiAhbV92aWV3cG9ydC5jb250YWlucyhsb2NhbFBvaW50KSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCwxMyArNDQsMTMgQEAKICAgICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBv
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIEdyYXBoaWNzUG9pbnQgb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KICAgICBSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrZXI7IH0KIAogICAgIGZsb2F0IGN1
cnJlbnRBbmdsZSgpIGNvbnN0CiAgICAgewotICAgICAgICBGbG9hdFNpemUgaW5zbG9wZUNoYW5n
ZSA9IG1faW5zbG9wZVBvaW50c1sxXSAtIG1faW5zbG9wZVBvaW50c1swXTsKLSAgICAgICAgRmxv
YXRTaXplIG91dHNsb3BlQ2hhbmdlID0gbV9vdXRzbG9wZVBvaW50c1sxXSAtIG1fb3V0c2xvcGVQ
b2ludHNbMF07CisgICAgICAgIEdyYXBoaWNzU2l6ZSBpbnNsb3BlQ2hhbmdlID0gbV9pbnNsb3Bl
UG9pbnRzWzFdIC0gbV9pbnNsb3BlUG9pbnRzWzBdOworICAgICAgICBHcmFwaGljc1NpemUgb3V0
c2xvcGVDaGFuZ2UgPSBtX291dHNsb3BlUG9pbnRzWzFdIC0gbV9vdXRzbG9wZVBvaW50c1swXTsK
IAogICAgICAgICBkb3VibGUgaW5zbG9wZSA9IHJhZDJkZWcoYXRhbjIoaW5zbG9wZUNoYW5nZS5o
ZWlnaHQoKSwgaW5zbG9wZUNoYW5nZS53aWR0aCgpKSk7CiAgICAgICAgIGRvdWJsZSBvdXRzbG9w
ZSA9IHJhZDJkZWcoYXRhbjIob3V0c2xvcGVDaGFuZ2UuaGVpZ2h0KCksIG91dHNsb3BlQ2hhbmdl
LndpZHRoKCkpKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgbV9tYXJrZXIgPSBtYXJrZXI7
CiAgICAgfQogCi0gICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKKyAgICB2b2lkIHVwZGF0ZU91dHNsb3BlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQog
ICAgIHsKICAgICAgICAgbV9vdXRzbG9wZVBvaW50c1swXSA9IG1fb3JpZ2luOwogICAgICAgICBt
X291dHNsb3BlUG9pbnRzWzFdID0gcG9pbnQ7CkBAIC04OCw3ICs4OCw3IEBACiAKICAgICB2b2lk
IHVwZGF0ZU1hcmtlckRhdGFGb3JQYXRoRWxlbWVudChjb25zdCBQYXRoRWxlbWVudCogZWxlbWVu
dCkKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsK
KyAgICAgICAgR3JhcGhpY3NQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwogCiAgICAg
ICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewogICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRk
UXVhZEN1cnZlVG9Qb2ludDoKQEAgLTEwOSwxMiArMTA5LDEyIEBACiAgICAgICAgIGNhc2UgUGF0
aEVsZW1lbnRDbG9zZVN1YnBhdGg6CiAgICAgICAgICAgICB1cGRhdGVJbnNsb3BlKHBvaW50c1sw
XSk7CiAgICAgICAgICAgICBtX29yaWdpbiA9IG1fc3VicGF0aFN0YXJ0OwotICAgICAgICAgICAg
bV9zdWJwYXRoU3RhcnQgPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICBtX3N1YnBhdGhTdGFy
dCA9IEdyYXBoaWNzUG9pbnQoKTsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2
b2lkIHVwZGF0ZUluc2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgdm9pZCB1cGRh
dGVJbnNsb3BlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogICAgIHsKICAgICAgICAgbV9p
bnNsb3BlUG9pbnRzWzBdID0gbV9vcmlnaW47CiAgICAgICAgIG1faW5zbG9wZVBvaW50c1sxXSA9
IHBvaW50OwpAQCAtMTIyLDEwICsxMjIsMTAgQEAKIAogICAgIFR5cGUgbV90eXBlOwogICAgIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBtX21hcmtlcjsKLSAgICBGbG9hdFBvaW50IG1fb3JpZ2lu
OwotICAgIEZsb2F0UG9pbnQgbV9zdWJwYXRoU3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2luc2xv
cGVQb2ludHNbMl07Ci0gICAgRmxvYXRQb2ludCBtX291dHNsb3BlUG9pbnRzWzJdOworICAgIEdy
YXBoaWNzUG9pbnQgbV9vcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBtX3N1YnBhdGhTdGFydDsK
KyAgICBHcmFwaGljc1BvaW50IG1faW5zbG9wZVBvaW50c1syXTsKKyAgICBHcmFwaGljc1BvaW50
IG1fb3V0c2xvcGVQb2ludHNbMl07CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBA
QAogICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewogICAg
ICAgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVs
ZW1lbnQpOwogCi0gICAgICAgICBGbG9hdFJlY3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0Owot
ICAgICAgICAgbV92aWV3cG9ydCA9IEZsb2F0UmVjdChzdmctPngoKS52YWx1ZShzdmcpCisgICAg
ICAgICBHcmFwaGljc1JlY3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OworICAgICAgICAgbV92
aWV3cG9ydCA9IEdyYXBoaWNzUmVjdChzdmctPngoKS52YWx1ZShzdmcpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgc3ZnLT55KCkudmFsdWUoc3ZnKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHN2Zy0+d2lkdGgoKS52YWx1ZShzdmcpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgc3ZnLT5oZWlnaHQoKS52YWx1ZShzdmcpKTsKQEAgLTc4LDcg
Kzc4LDcgQEAKICAgICAvLyByZXR1cm4gdmlld3BvcnRUcmFuc2xhdGlvbiAqIGxvY2FsVHJhbnNm
b3JtKCkgKiB2aWV3cG9ydFRyYW5zZm9ybSgpCiB9CiAKLWJvb2wgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXI6OnBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnRJblBhcmVudCkKK2Jvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJbnNp
ZGVWaWV3cG9ydENsaXAoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCkKIHsKICAg
ICAvLyBSZXNwZWN0IHRoZSB2aWV3cG9ydCBjbGlwICh3aGljaCBpcyBpbiBwYXJlbnQgY29vcmRz
KQogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRh
aW5lci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcg
QEAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhc2VsZldpbGxQYWludCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSByZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpOworICAgIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdCA9IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWludElu
Zm9JbnRlcnNlY3RzUmVwYWludFJlY3QocmVwYWludFJlY3QsIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSwgcGFpbnRJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNDgsMjcgKzE0OCwyNyBA
QAogCiB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7
Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1fc3Ryb2tlQm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0
UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICBt
X3N0cm9rZUJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CisgICAgbV9yZXBhaW50Qm91bmRp
bmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVD
b250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRpbmdCb3gsIG1fc3Ryb2tl
Qm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKICAgICBTVkdSZW5kZXJTdXBwb3J0
OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRp
bmdCb3gpOwogfQogCi1ib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0RmxvYXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
Citib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAg
ICAgLy8gR2l2ZSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciBhIGNoYW5jZSB0byBhcHBseSBp
dHMgdmlld3BvcnQgY2xpcAogICAgIGlmICghcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChwb2lu
dEluUGFyZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRQb2ludCBsb2Nh
bFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2lu
dEluUGFyZW50KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgaWYg
KCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQocmVx
dWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICBpZiAo
Y2hpbGQtPm5vZGVBdEdyYXBoaWNzUG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBo
aXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2Miwx
MSBAQAogICAgIH0KIH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZl
Y3QpCitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKIHsKLSAg
ICBGbG9hdFJlY3QgdW5pdGVSZWN0OwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0Jv
eCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb24g
PSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgdW5pdGVSZWN0OworICAg
IEdyYXBoaWNzUmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRh
cmllcygpOworICAgIEdyYXBoaWNzUmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0Jv
eDsKICAgICBTVkdGaWx0ZXIqIGZpbHRlciA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlcio+KGVmZmVj
dC0+ZmlsdGVyKCkpOwogICAgIEFTU0VSVChmaWx0ZXIpOwogCkBAIC04NSw3ICs4NSw3IEBACiAg
ICAgaWYgKGZpbHRlci0+ZWZmZWN0Qm91bmRpbmdCb3hNb2RlKCkpIHsKICAgICAgICAgc3VicmVn
aW9uID0gdW5pdGVSZWN0OwogICAgICAgICAvLyBBdm9pZCB0aGUgY2FsbGluZyBvZiBhIHZpcnR1
YWwgbWV0aG9kIHNldmVyYWwgdGltZXMuCi0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGlu
Z0JveCA9IGZpbHRlci0+dGFyZ2V0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLT50YXJnZXRCb3VuZGluZ0JveCgpOwogCiAgICAg
ICAgIGlmIChlZmZlY3QtPmhhc1goKSkKICAgICAgICAgICAgIHN1YnJlZ2lvbi5zZXRYKHRhcmdl
dEJvdW5kaW5nQm94LngoKSArIHN1YnJlZ2lvbkJvdW5kaW5nQm94LngoKSAqIHRhcmdldEJvdW5k
aW5nQm94LndpZHRoKCkpOwpAQCAtMTE0LDggKzExNCw4IEBACiAKICAgICBlZmZlY3QtPnNldEZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwogCi0gICAgRmxvYXRSZWN0IGFic29s
dXRlU3VicmVnaW9uID0gZmlsdGVyLT5tYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChzdWJyZWdp
b24pOwotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlU3VicmVnaW9uID0gZmlsdGVyLT5t
YXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChzdWJyZWdpb24pOworICAgIEdyYXBoaWNzU2l6ZSBm
aWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCk7CiAgICAgYWJzb2x1
dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0
aW9uLmhlaWdodCgpKTsKIAogICAgIC8vIEZFSW1hZ2UgbmVlZHMgdGhlIHVuY2xpcHBlZCBzdWJy
ZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CkBA
IC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgc3RhdGljX2Nhc3Q8RkVJbWFnZSo+KGVmZmVjdCkt
PnNldEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAogICAgIC8vIENsaXAg
ZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAg
IEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVy
UmVnaW9uKCk7CiAgICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVz
b2x1dGlvbi53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKICAgICBhYnNvbHV0
ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQAogCiAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgb2JqZWN0Qm91bmRpbmdCb3ggZm9yIERSVCByZXN1bHRzIGFu
ZCBmaWx0ZXJzIGF0IHRoZSBtb21lbnQuCiAgICAgLy8gVGhpcyBzaG91bGQgYmUgZml4ZWQgdG8g
Z2l2ZSBiYWNrIHRoZSBvYmplY3RCb3VuZGluZ0JveCBvZiB0aGUgdGV4dCByb290LgotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRS
ZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZH
SW5saW5lVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAKICNp
ZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlBhdHRlcm5BdHRyaWJ1dGVz
LmgiCkBAIC01MywxNiArNTMsMTYgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVk
IHNob3J0IHJlc291cmNlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNl
KFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVh
bCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVy
biBHcmFwaGljc1JlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KICAgICBzdGF0
aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOwogCiBwcml2YXRlOgotICAg
IGJvb2wgYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVy
bkF0dHJpYnV0ZXMmLCBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCosIEZsb2F0UmVjdCYgcGF0dGVy
bkJvdW5kYXJpZXMsIEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsK
KyAgICBib29sIGJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
dHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBHcmFwaGljc1JlY3Qm
IHBhdHRlcm5Cb3VuZGFyaWVzLCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkg
Y29uc3Q7CiAKLSAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVCb3VuZGFyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKKyAgICBQYXNzT3duUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJp
YnV0ZXMmLCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGFic29s
dXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNm
b3JtKSBjb25zdDsKIAogICAgIGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0ZXMg
OiAxOwogICAgIFBhdHRlcm5BdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRl
ICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCkBAIC03OCw3
ICs3OCw3IEBACiB7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUp
Citib29sIFJlbmRlclNWR1BhdGg6OmZpbGxDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCwgYm9vbCByZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQogewogICAgIGlmICgh
bV9maWxsQm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC05MCw3ICs5MCw3IEBACiAgICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyhwb2ludCwgZmls
bFJ1bGUpOwogfQogCi1ib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQorYm9vbCBSZW5kZXJTVkdQYXRo
OjpzdHJva2VDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgYm9vbCByZXF1aXJl
c1N0cm9rZSkKIHsKICAgICBpZiAoIW1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3guY29udGFp
bnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDIsNyArMjAyLDcgQEAKICAg
ICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCk7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0lu
dGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJ
bmZvKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDMsMTMgKzI0MywxMyBAQAogICAgICAgICBy
ZWN0cy5hcHBlbmQocmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCitib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewog
ICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhp
dC10ZXN0IHRoZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1f
bG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgIEdy
YXBoaWNzUG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBv
aW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludElu
Q2xpcHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yNzAsMjkgKzI3MCwyOSBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRmxvYXRSZWN0IFJl
bmRlclNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKK0dyYXBoaWNzUmVj
dCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5lZWRlZCgpCiB7CiAgICAg
U1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKCkp
OwogICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1lbnQtPmRvY3VtZW50KCkpOwogICAg
IGlmICghc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBTVkdTdHlsZWRFbGVtZW50
KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KHN2Z0VsZW1l
bnQpOwogICAgIGlmICghc3R5bGVkRWxlbWVudC0+c3VwcG9ydHNNYXJrZXJzKCkpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
ICAgICBBU1NFUlQoc3ZnU3R5bGUtPmhhc01hcmtlcnMoKSk7CiAKICAgICBTVkdSZXNvdXJjZXMq
IHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJP
YmplY3QodGhpcyk7CiAgICAgaWYgKCFyZXNvdXJjZXMpCi0gICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIG1hcmtlclN0YXJ0ID0gcmVzb3VyY2VzLT5tYXJrZXJTdGFydCgpOwogICAg
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJNaWQgPSByZXNvdXJjZXMtPm1hcmtlck1p
ZCgpOwogICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJFbmQgPSByZXNvdXJjZXMt
Pm1hcmtlckVuZCgpOwogICAgIGlmICghbWFya2VyU3RhcnQgJiYgIW1hcmtlck1pZCAmJiAhbWFy
a2VyRW5kKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFw
aGljc1JlY3QoKTsKIAogICAgIHJldHVybiBtX21hcmtlckxheW91dEluZm8uY2FsY3VsYXRlQm91
bmRhcmllcyhtYXJrZXJTdGFydCwgbWFya2VyTWlkLCBtYXJrZXJFbmQsIHN2Z1N0eWxlLT5zdHJv
a2VXaWR0aCgpLnZhbHVlKHN2Z0VsZW1lbnQpLCBtX3BhdGgpOwogfQpAQCAtMzAwLDkgKzMwMCw5
IEBACiB2b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKQogewogICAg
IGlmIChtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gRmxv
YXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICAg
ICAgbV9maWxsQm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICAgICAgbV9zdHJva2VB
bmRNYXJrZXJCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgpOworICAgICAgICBtX3JlcGFpbnRC
b3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zMTksNyArMzE5LDcgQEAKICAgICB9CiAKICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMo
KSkgewotICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91
bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CiAgICAgICAgIGlmICghbWFya2VyQm91bmRzLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUo
bWFya2VyQm91bmRzKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQAogfTsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7Citj
bGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQYXRoOwog
Y2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNp
Z25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291
cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOworICAgIHZpcnR1YWwgR3JhcGhpY3NS
ZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAgdmlydHVh
bCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVl
RWxlbWVudHMuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNyBAQAogI2luY2x1ZGUgIlNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIgogCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Np
emUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgog
I2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKQEAgLTQyLDkgKzQyLDkgQEAKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9
CiAKLUZsb2F0U2l6ZSBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudDo6Y29udGFpbmVyVHJh
bnNsYXRpb24oKSBjb25zdAorR3JhcGhpY3NTaXplIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVt
ZW50Ojpjb250YWluZXJUcmFuc2xhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0U2l6
ZShtX3hPZmZzZXQudmFsdWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CisgICAgcmV0
dXJuIEdyYXBoaWNzU2l6ZShtX3hPZmZzZXQudmFsdWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0
aGlzKSk7CiB9CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVs
ZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDkgKzQ0LDkgQEAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKICAgICAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0
QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludElu
UGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50
U3RvcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBACiAgICAgLy8gUmVuZGVyT2Jq
ZWN0J3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgQVNTRVJUX05PVF9SRUFDSEVEKCkKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDAKICAgICB2aXJ0
dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3Qo
KTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVj
dCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9Cisg
ICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVy
biBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NyBAQAogICAgIHJldHVybiBpdC5ydW5XaWR0aFNvRmFyKCk7CiB9CiAgCi12b2lkIFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAw
OwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKQEAgLTExNCwx
MSArMTE0LDExIEBACiAgICAgZmxvYXQgc2NhbGUgPSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS0+
cGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAg
ICAgQVNTRVJUKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOwogCi0gICAgRmxvYXRQb2ludCBnbHlw
aE9yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IGdseXBoT3JpZ2luOwogICAgIGdseXBoT3JpZ2lu
LnNldFgoc3ZnRm9udERhdGEtPmhvcml6b250YWxPcmlnaW5YKCkgKiBzY2FsZSk7CiAgICAgZ2x5
cGhPcmlnaW4uc2V0WShzdmdGb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblkoKSAqIHNjYWxlKTsK
IAotICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50ID0gcG9pbnQ7CisgICAgR3JhcGhpY3NQb2lu
dCBjdXJyZW50UG9pbnQgPSBwb2ludDsKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3Vy
Y2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBB
cHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7CiAgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhCdWZmZXIu
Z2x5cGhBdChmcm9tICsgaSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNyArOTIsNyBAQAogICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZS0+b3BhY2l0eSgpOwog
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKTsKICAgICBp
ZiAob3BhY2l0eSA8IDEgfHwgc2hhZG93KSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZXBhaW50UmVj
dCA9IG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgR3Jh
cGhpY3NSZWN0IHJlcGFpbnRSZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwogCiAgICAgICAgIGlmIChvcGFjaXR5IDwgMSkgewogICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNsaXAocmVwYWludFJlY3QpOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lk
IFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9h
dFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkK
K3ZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIEdyYXBoaWNzUmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEdyYXBoaWNzUmVjdCYgcmVwYWlu
dEJvdW5kaW5nQm94KQogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29udGFp
bmVyLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKQpAQCAt
MTg1LDcgKzE4NSw3IEBACiAgICAgfQogfQogCi1ib29sIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50
SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVwYWludFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvKQorYm9vbCBTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3Rz
UmVwYWludFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bykKIHsKICAgICBpZiAobG9jYWxUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICByZXR1
cm4gbG9jYWxSZXBhaW50UmVjdC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KTsKQEAgLTI3Miw3
ICsyNzIsNyBAQAogICAgIHJldHVybiBvYmplY3QtPnN0eWxlKCktPm92ZXJmbG93WCgpID09IE9I
SURERU47CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RX
aXRoUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBGbG9hdFJlY3QmIHJlcGFp
bnRSZWN0KQordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhS
ZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNzUmVjdCYgcmVwYWlu
dFJlY3QpCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAKQEAgLTMwNSw3ICszMDUsNyBAQAogICAg
ICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOwogfQogCi1ib29s
IFNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpwb2lu
dEluQ2xpcHBpbmdBcmVhKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICBpZiAobWFya2VyLT50
eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0OworICAgICAgICBHcmFwaGljc1JlY3Qg
bWFya2VyUmVjdDsKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVy
ZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAg
ICAgICAgICAgaWYgKCFib3gtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0
Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50
LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24pKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBmcmFnbWVu
dFJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAg
ICAgICAgICAgICBHcmFwaGljc1JlY3QgZnJhZ21lbnRSZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9u
UmVjdEZvclRleHRGcmFnbWVudChmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFn
bWVudEVuZFBvc2l0aW9uLCBzdHlsZSk7CiAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYnVpbGRG
cmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9ybSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFmcmFnbWVudFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGZy
YWdtZW50UmVjdCA9IGZyYWdtZW50VHJhbnNmb3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCiAjaW5jbHVkZSAiUmVu
ZGVySW1hZ2VSZXNvdXJjZS5oIgpAQCAtOTQsOCArOTQsOCBAQAogewogICAgIFNWR0ltYWdlRWxl
bWVudCogaW1hZ2UgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOwogCi0g
ICAgRmxvYXRSZWN0IG9sZEJvdW5kYXJpZXMgPSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIG1f
b2JqZWN0Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoaW1hZ2UtPngoKS52YWx1ZShpbWFnZSksIGlt
YWdlLT55KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+d2lkdGgoKS52YWx1ZShpbWFnZSksIGltYWdl
LT5oZWlnaHQoKS52YWx1ZShpbWFnZSkpOworICAgIEdyYXBoaWNzUmVjdCBvbGRCb3VuZGFyaWVz
ID0gbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gR3JhcGhp
Y3NSZWN0KGltYWdlLT54KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+eSgpLnZhbHVlKGltYWdlKSwg
aW1hZ2UtPndpZHRoKCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+aGVpZ2h0KCkudmFsdWUoaW1hZ2Up
KTsKICAgICBpZiAobV9vYmplY3RCb3VuZGluZ0JveCAhPSBvbGRCb3VuZGFyaWVzKSB7CiAgICAg
ICAgIG1fdXBkYXRlQ2FjaGVkUmVwYWludFJlY3QgPSB0cnVlOwogICAgICAgICBzZXROZWVkc0xh
eW91dCh0cnVlKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4g
fHwgIW1faW1hZ2VSZXNvdXJjZS0+aGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsK
KyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1Jl
cGFpbnRSZWN0KGJvdW5kaW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTEyMyw4ICsxMjMsOCBAQAogCiAgICAgICAgICAgICBpZiAoU1ZH
UmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBjaGlsZFBhaW50
SW5mbykpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZVJl
c291cmNlLT5pbWFnZSgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IG1f
b2JqZWN0Qm91bmRpbmdCb3g7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMCwg
MCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICAgICAgICAgICAg
ICBHcmFwaGljc1JlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdo
dCgpKTsKIAogICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAoaW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkuYWxpZ24oKSAhPSBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQpAQCAtMTQxLDcg
KzE0MSw3IEBACiAgICAgfQogfQogCi1ib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRGbG9hdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKK2Jvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewog
ICAgIC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhp
dC10ZXN0IHRoZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQp
CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMo
UG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfSU1BR0VfSElUVEVTVElORywgcmVxdWVzdCwgc3R5
bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CiAgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMu
cmVxdWlyZVZpc2libGUpIHsKLSAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxU
b1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgp
LmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKICAgICAgICAgICAgIAogICAgICAg
ICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQ
b2ludCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9u
IDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNTU0Zv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1F1YWQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0xODAsNyArMTgwLDcgQEAK
ICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrKTsKIAogICAgIC8vIE1hcCBsb2NhbCBwb2ludCB0
byBhYnNvbHV0ZSBwb2ludCwgYXMgdGhlIGNoYXJhY3RlciBvcmlnaW5zIHN0b3JlZCBpbiB0aGUg
dGV4dCBmcmFnbWVudHMgdXNlIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UG9pbnQg
YWJzb2x1dGVQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50KHBv
aW50KTsKICAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeShjb250YWluaW5nQmxvY2stPmxvY2F0aW9u
KCkpOwogCiAgICAgZmxvYXQgY2xvc2VzdERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1heCgpOwpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgIHVuc2lnbmVkIHRleHRG
cmFnbWVudHNTaXplID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7Ci0gICAgICAgICAgICBG
bG9hdFJlY3QgZnJhZ21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwg
ZnJhZ21lbnQud2lkdGgsIGZyYWdtZW50LmhlaWdodCk7CisgICAgICAgICAgICBHcmFwaGljc1Jl
Y3QgZnJhZ21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21l
bnQud2lkdGgsIGZyYWdtZW50LmhlaWdodCk7CiAgICAgICAgICAgICBmcmFnbWVudC5idWlsZEZy
YWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAgICAgICAgIGlmICghZnJh
Z21lbnRUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAgICAgIGZyYWdtZW50UmVj
dCA9IGZyYWdtZW50VHJhbnNmb3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4
dC5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRz
SGl0UnVsZXMuaCIKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICBzZXRDaGlsZHJlbklubGlu
ZSh0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gb25seSBs
YXlvdXQgdGhlIGNoaWxkIGJveGVzLCBpZiBuZWVkZWQuCi0gICAgRmxvYXRSZWN0IG9sZEJvdW5k
YXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvbGRCb3VuZGFy
aWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7
CiAgICAgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpOwogCkBAIC0xODIsMTQgKzE4MiwxNCBA
QAogICAgIHJldHVybiBib3g7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0RmxvYXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCitib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewog
ICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVsZXM6
OlNWR19URVhUX0hJVFRFU1RJTkcsIHJlcXVlc3QsIHN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSk7
CiAgICAgYm9vbCBpc1Zpc2libGUgPSAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUp
OwogICAgIGlmIChpc1Zpc2libGUgfHwgIWhpdFJ1bGVzLnJlcXVpcmVWaXNpYmxlKSB7CiAgICAg
ICAgIGlmICgoaGl0UnVsZXMuY2FuSGl0U3Ryb2tlICYmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKSB8fCAhaGl0UnVsZXMucmVxdWlyZVN0cm9rZSkpCiAgICAgICAgICAgICB8fCAo
aGl0UnVsZXMuY2FuSGl0RmlsbCAmJiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpIHx8
ICFoaXRSdWxlcy5yZXF1aXJlRmlsbCkpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2Fs
UG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50
SW5QYXJlbnQpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxU
b1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAog
ICAgICAgICAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRo
aXMsIGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgCkBA
IC0yMjQsNyArMjI0LDcgQEAKICAgICByZXR1cm4gY2xvc2VzdEJveC0+cmVuZGVyZXIoKS0+cG9z
aXRpb25Gb3JQb2ludChMYXlvdXRQb2ludChwb2ludEluQ29udGVudHMueCgpLCBjbG9zZXN0Qm94
LT55KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxG
bG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0
b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSkpOwogfQpAQCAtMjQ1LDkgKzI0NSw5IEBACiAg
ICAgUmVuZGVyQmxvY2s6OnBhaW50KGJsb2NrSW5mbywgSW50UG9pbnQoKSk7CiB9CiAKLUZsb2F0
UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1Jl
Y3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGlj
c1JlY3Qgc3Ryb2tlQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBpZiAo
IXN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKICAgICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kYXJpZXM7
CkBAIC0yNTgsOSArMjU4LDkgQEAKICAgICByZXR1cm4gc3Ryb2tlQm91bmRhcmllczsKIH0KIAot
RmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gc3Ryb2tlQm91
bmRpbmdCb3goKTsKKyAgICBHcmFwaGljc1JlY3QgcmVwYWludFJlY3QgPSBzdHJva2VCb3VuZGlu
Z0JveCgpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJl
c291cmNlcyh0aGlzLCByZXBhaW50UmVjdCk7CiAKICAgICBpZiAoY29uc3QgU2hhZG93RGF0YSog
dGV4dFNoYWRvdyA9IHN0eWxlKCktPnRleHRTaGFkb3coKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBA
CiAKICAgICAvLyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVt
ZW50IGhhcyBubyB3aWR0aCBvciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNp
ZmllZCwKICAgICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBh
IGZpbHRlcikgd2lsbCBiZSBpZ25vcmVkLgotICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0
Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgaWYgKG1fYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gQ29tcHV0ZSBhbGwgbmVjZXNzYXJ5IHRyYW5z
Zm9ybWF0aW9ucyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0ZXJuLgotICAgICAg
ICBGbG9hdFJlY3QgdGlsZUJvdW5kYXJpZXM7CisgICAgICAgIEdyYXBoaWNzUmVjdCB0aWxlQm91
bmRhcmllczsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRpbGVJbWFnZVRyYW5zZm9ybTsKICAg
ICAgICAgaWYgKCFidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShvYmplY3QsIG1fYXR0cmlidXRlcywg
cGF0dGVybkVsZW1lbnQsIHRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFuc2Zvcm0pKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKICAgICAgICAgU1ZHSW1hZ2VCdWZmZXJUb29s
czo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0o
b2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICAgICAgRmxvYXRSZWN0IGFic29sdXRl
VGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVCb3VuZGFyaWVz
KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0
ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVCb3VuZGFyaWVzKTsKIAogICAgICAgICAvLyBCdWlsZCB0
aWxlIGltYWdlLgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNyZWF0
ZVRpbGVJbWFnZShvYmplY3QsIG1fYXR0cmlidXRlcywgdGlsZUJvdW5kYXJpZXMsIGFic29sdXRl
VGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5zZm9ybSk7CkBAIC0xOTYsMTkgKzE5NiwxOSBA
QAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotc3RhdGljIGlubGluZSBGbG9hdFJlY3Qg
Y2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJp
YnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LAorc3RhdGljIGlubGluZSBHcmFw
aGljc1JlY3QgY2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoY29uc3QgUGF0dGVybkF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUGF0
dGVybkVsZW1lbnQqIHBhdHRlcm5FbGVtZW50KQogewogICAgIEFTU0VSVChwYXR0ZXJuRWxlbWVu
dCk7CiAKICAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0
Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkgKyBvYmplY3RCb3VuZGluZ0JveC55KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy53aWR0aCgpLnZhbHVlQXNQZXJjZW50YWdlKCkg
KiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZXMuaGVpZ2h0KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94
LmhlaWdodCgpKTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWUo
cGF0dGVybkVsZW1lbnQpLAorICAgIHJldHVybiBHcmFwaGljc1JlY3QoYXR0cmlidXRlcy54KCku
dmFsdWUocGF0dGVybkVsZW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy55
KCkudmFsdWUocGF0dGVybkVsZW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
cy53aWR0aCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSwKICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZXMuaGVpZ2h0KCkudmFsdWUocGF0dGVybkVsZW1lbnQpKTsKQEAgLTIxNywxMyArMjE3
LDEzIEBACiBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YnVpbGRUaWxlSW1hZ2VUcmFu
c2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0
cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogcGF0dGVybkVsZW1lbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0
JiBwYXR0ZXJuQm91bmRhcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAogewogICAgIEFTU0VSVChyZW5k
ZXJlcik7CiAgICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKIAotICAgIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBo
aWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3VuZGluZ0JveCgp
OwogICAgIHBhdHRlcm5Cb3VuZGFyaWVzID0gY2FsY3VsYXRlUGF0dGVybkJvdW5kYXJpZXMoYXR0
cmlidXRlcywgb2JqZWN0Qm91bmRpbmdCb3gsIHBhdHRlcm5FbGVtZW50KTsgCiAgICAgaWYgKHBh
dHRlcm5Cb3VuZGFyaWVzLndpZHRoKCkgPD0gMCB8fCBwYXR0ZXJuQm91bmRhcmllcy5oZWlnaHQo
KSA8PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDEsMTYgKzI0MSwxNiBAQAogCiBQ
YXNzT3duUHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRp
bGVJbWFnZShSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhdHRlcm5BdHRy
aWJ1dGVzJiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRh
cmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZUJvdW5kYXJpZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3QKIHsKICAgICBBU1NF
UlQob2JqZWN0KTsKIAogICAgIC8vIENsYW1wIHRpbGUgaW1hZ2Ugc2l6ZSBhZ2FpbnN0IFNWRyB2
aWV3cG9ydCBzaXplLCBhcyBsYXN0IHJlc29ydCwgdG8gYXZvaWQgYWxsb2NhdGluZyBodWdlIGlt
YWdlIGJ1ZmZlcnMuCi0gICAgRmxvYXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gU1ZHUmVuZGVyU3Vw
cG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KG9iamVjdCktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAg
R3JhcGhpY3NSZWN0IGNvbnRlbnRCb3hSZWN0ID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVS
b290T2JqZWN0KG9iamVjdCktPmNvbnRlbnRCb3hSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgY2xh
bXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzOworICAg
IEdyYXBoaWNzUmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVGls
ZUJvdW5kYXJpZXM7CiAgICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRo
KCkgPiBjb250ZW50Qm94UmVjdC53aWR0aCgpKQogICAgICAgICBjbGFtcGVkQWJzb2x1dGVUaWxl
Qm91bmRhcmllcy5zZXRXaWR0aChjb250ZW50Qm94UmVjdC53aWR0aCgpKTsKIApAQCAtMjY2LDcg
KzI2Niw3IEBACiAgICAgQVNTRVJUKHRpbGVJbWFnZUNvbnRleHQpOwogCiAgICAgLy8gVGhlIGlt
YWdlIGJ1ZmZlciByZXByZXNlbnRzIHRoZSBmaW5hbCByZW5kZXJlZCBzaXplLCBzbyB0aGUgY29u
dGVudCBoYXMgdG8gYmUgc2NhbGVkICh0byBhdm9pZCBwaXhlbGF0aW9uKS4KLSAgICB0aWxlSW1h
Z2VDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoYWJzb2x1dGVUaWxlQm91bmRhcmllcy53aWR0aCgp
IC8gdGlsZUJvdW5kYXJpZXMud2lkdGgoKSwKKyAgICB0aWxlSW1hZ2VDb250ZXh0LT5zY2FsZShH
cmFwaGljc1NpemUoYWJzb2x1dGVUaWxlQm91bmRhcmllcy53aWR0aCgpIC8gdGlsZUJvdW5kYXJp
ZXMud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1
dGVUaWxlQm91bmRhcmllcy5oZWlnaHQoKSAvIHRpbGVCb3VuZGFyaWVzLmhlaWdodCgpKSk7CiAK
ICAgICAvLyBBcHBseSB0aWxlIGltYWdlIHRyYW5zZm9ybWF0aW9ucy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAKICNp
ZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDUsMTEgKzQ1LDExIEBACiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
IAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV92aWV3cG9ydDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsg
fQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV92aWV3cG9ydDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydDsgfQorICAgIHZpcnR1YWwgR3JhcGhp
Y3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV92
aWV3cG9ydDsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBh
cmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNzUG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZvcmVpZ25P
YmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYWxUcmFuc2Zvcm07IH0KIAogICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7
Ci0gICAgRmxvYXRSZWN0IG1fdmlld3BvcnQ7CisgICAgR3JhcGhpY3NSZWN0IG1fdmlld3BvcnQ7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CiAgICAgbXV0YWJsZSBBZmZp
bmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNv
bGlkQ29sb3IuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzcsNyBA
QAogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kikg
eyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAK
ICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7
IHJldHVybiBzX3Jlc291cmNlVHlwZTsgfQogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5
cGUgc19yZXNvdXJjZVR5cGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSArNDUsOSBAQAogICAgIHZpcnR1YWwgdm9p
ZCBjYWxjVmlld3BvcnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVZpZXdwb3J0Q2xpcChQ
YWludEluZm8mKTsKLSAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChj
b25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJ
c0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50KTsK
IAotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0
OwogICAgIG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsK
IH07CiAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDI4ICs1
MywyOCBAQAogCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlv
dXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94
OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9
CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBi
b29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAg
dmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbik7CiAKICAgICAvLyBBbGxvdyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
IHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWUgaW4gbGF5b3V0KCkKICAgICB2aXJ0dWFsIGJv
b2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8g
QWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQg
dGltZXMgaW4gbGF5b3V0KCksIHBhaW50KCkgYW5kIG5vZGVBdEZsb2F0UG9pbnQoKQorICAgIC8v
IEFsbG93IFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0
IHRpbWVzIGluIGxheW91dCgpLCBwYWludCgpIGFuZCBub2RlQXRHcmFwaGljc1BvaW50KCkKICAg
ICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdwb3J0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5
Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwb2ludElzSW5z
aWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIC8qcG9pbnRJblBhcmVudCovKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAo
Y29uc3QgR3JhcGhpY3NQb2ludCYgLypwb2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIGJvb2wgc2VsZldpbGxQYWludCgpOwogICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRh
cmllcygpOwogCiBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVu
OwotICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0
cm9rZUJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAg
ICBHcmFwaGljc1JlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9z
dHJva2VCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7
CiAgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7CiB9OwogICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiA5
MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jvb3RfaAog
CiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKIAogI2luY2x1ZGUgIlNWR1JlbmRl
clN1cHBvcnQuaCIKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBleHBsaWNpdCBSZW5kZXJTVkdSb290
KFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdSb290KCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24oRmxvYXRTaXpl
JiBpbnRyaW5zaWNSYXRpbywgYm9vbCYgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEdyYXBo
aWNzU2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUp
IGNvbnN0OwogICAgIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hp
bGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogCkBAIC03MSwxMiArNzEsMTIgQEAKIAog
ICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3Q7CiAKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Cisg
ICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIGJv
b2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1
YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJv
a2VCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIApAQCAtOTYs
MTAgKzk2LDEwIEBACiAgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zv
cm0oKSBjb25zdDsKIAogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAg
IEZsb2F0U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGlu
Z0JveDsKLSAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3Qg
bV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NTaXplIG1fdmlld3BvcnRTaXplOwor
ICAgIEdyYXBoaWNzUmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBt
X3N0cm9rZUJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3JlcGFpbnRCb3VuZGluZ0Jv
eDsKICAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07
CiAgICAgYm9vbCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0Jv
dW5kYXJpZXNPclRyYW5zZm9ybVVwZGF0ZSA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkw
OTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIHdyaXRlTmFt
ZVZhbHVlUGFpcih0cywgbmFtZSwgdmFsdWUpOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFJlY3QgJnIpCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc1JlY3QgJnIpCiB7CiAgICAgdHMgPDwg
ImF0ICgiOyAKICAgICBpZiAoaGFzRnJhY3Rpb25zKHIueCgpKSkgCkBAIC01MzQsNyArNTM0LDcg
QEAKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAicHJpbWl0aXZlVW5pdHMiLCBmaWx0
ZXItPnByaW1pdGl2ZVVuaXRzKCkpOwogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBD
cmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxk
ZXIuCi0gICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBk
dW1teVJlY3Q7CiAgICAgICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGR1bW15RmlsdGVyID0gU1ZHRmls
dGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1t
eVJlY3QsIHRydWUpOwogICAgICAgICBpZiAoUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxk
ZXIgPSBmaWx0ZXItPmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0
KCkpCkBAIC01ODAsOCArNTgwLDggQEAKICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5j
b2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgICAgICB3cml0ZUNvbW1v
bkdyYWRpZW50UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmli
dXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsK
IAotICAgICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQ7Ci0gICAgICAgIEZsb2F0UG9pbnQgZW5k
UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludDsKKyAgICAgICAgR3JhcGhp
Y3NQb2ludCBlbmRQb2ludDsKICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jYWxjdWxh
dGVTdGFydEVuZFBvaW50cyhhdHRyaWJ1dGVzLCBzdGFydFBvaW50LCBlbmRQb2ludCk7CiAKICAg
ICAgICAgdHMgPDwgIiBbc3RhcnQ9IiA8PCBzdGFydFBvaW50IDw8ICJdIFtlbmQ9IiA8PCBlbmRQ
b2ludCA8PCAiXVxuIjsKQEAgLTU5Niw4ICs1OTYsOCBAQAogICAgICAgICByYWRpYWxHcmFkaWVu
dEVsZW1lbnQtPmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAg
IHdyaXRlQ29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKHRzLCBhdHRyaWJ1dGVzLnNwcmVhZE1ldGhv
ZCgpLCBhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCksIGF0dHJpYnV0ZXMuYm91bmRpbmdC
b3hNb2RlKCkpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgZm9jYWxQb2ludDsKLSAgICAgICAgRmxv
YXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBmb2NhbFBvaW50Owor
ICAgICAgICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50OwogICAgICAgICBmbG9hdCByYWRpdXM7
CiAgICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2lu
dHNBbmRSYWRpdXMoYXR0cmlidXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7
CiAKQEAgLTY0MCw3ICs2NDAsNyBAQAogICAgIHdyaXRlU3RhbmRhcmRQcmVmaXgodHMsIHRleHQs
IGluZGVudCk7CiAKICAgICAvLyBXaHkgbm90IGp1c3QgbGluZXNCb3VuZGluZ0JveCgpPwotICAg
IHRzIDw8ICIgIiA8PCBGbG9hdFJlY3QodGV4dC5maXJzdFJ1bk9yaWdpbigpLCB0ZXh0LmxpbmVz
Qm91bmRpbmdCb3goKS5zaXplKCkpIDw8ICJcbiI7CisgICAgdHMgPDwgIiAiIDw8IEdyYXBoaWNz
UmVjdCh0ZXh0LmZpcnN0UnVuT3JpZ2luKCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUo
KSkgPDwgIlxuIjsKICAgICB3cml0ZVJlc291cmNlcyh0cywgdGV4dCwgaW5kZW50KTsKICAgICB3
cml0ZVNWR0lubGluZVRleHRCb3hlcyh0cywgdGV4dCwgaW5kZW50KTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsy
NCw4IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCkBAIC02MSw3ICs2MSw3IEBACiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXI6OnJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
KQogewotICAgIG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9t
YXNrQ29udGVudEJvdW5kYXJpZXMgPSBHcmFwaGljc1JlY3QoKTsKICAgICBpZiAoIW1fbWFza2Vy
LmlzRW1wdHkoKSkgewogICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9tYXNrZXIpOwogICAgICAg
ICBtX21hc2tlci5jbGVhcigpOwpAQCAtOTgsOCArOTgsOCBAQAogICAgIEFmZmluZVRyYW5zZm9y
bSBhYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVU
cmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29s
dXRlVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNv
bHV0ZVRyYW5zZm9ybS5tYXBSZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKSk7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0
LCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJl
Y3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSk7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJl
Y3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVu
ZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJlY3QpOwogCiAgICAgaWYgKCFtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UgJiYgIWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIFNWR01hc2tFbGVtZW50KiBtYXNrRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR01hc2tF
bGVtZW50Kj4obm9kZSgpKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIC8vIEV2ZW50dWFsbHkg
YWRqdXN0IHRoZSBtYXNrIGltYWdlIGNvbnRleHQgYWNjb3JkaW5nIHRvIHRoZSB0YXJnZXQgb2Jq
ZWN0Qm91bmRpbmdCb3guCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hc2tDb250ZW50VHJhbnNmb3Jt
YXRpb247CiAgICAgaWYgKG1hc2tFbGVtZW50LT5tYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAg
ICAgICAgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3Vu
ZGluZ0JveCgpOwogICAgICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZShv
YmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgIG1h
c2tDb250ZW50VHJhbnNmb3JtYXRpb24uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5nQm94
LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAgICAgICAgbWFza0ltYWdl
Q29udGV4dC0+Y29uY2F0Q1RNKG1hc2tDb250ZW50VHJhbnNmb3JtYXRpb24pOwpAQCAtMTc1LDEz
ICsxNzUsMTMgQEAKICAgICB9CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
cjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVj
dCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBTVkdNYXNrRWxlbWVudCogbWFza0VsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgQVNTRVJUKG1hc2tFbGVtZW50KTsK
IAotICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRp
bmdCb3goKTsKLSAgICBGbG9hdFJlY3QgbWFza0JvdW5kYXJpZXMgPSBtYXNrRWxlbWVudC0+bWFz
a0JvdW5kaW5nQm94KG9iamVjdEJvdW5kaW5nQm94KTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0
Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NS
ZWN0IG1hc2tCb3VuZGFyaWVzID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RC
b3VuZGluZ0JveCk7CiAKICAgICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2
ZSBiYWNrIGNsaXBwaW5nIHJlY3Qgb2YgdGhlIG1hc2suCiAgICAgaWYgKHNlbGZOZWVkc0xheW91
dCgpKQpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgaWYgKG1fbWFza0NvbnRlbnRCb3VuZGFyaWVz
LmlzRW1wdHkoKSkKICAgICAgICAgY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpOwog
Ci0gICAgRmxvYXRSZWN0IG1hc2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAg
R3JhcGhpY3NSZWN0IG1hc2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CiAgICAgaWYg
KG1hc2tFbGVtZW50LT5tYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgp
LCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRp
dmUuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcg
KzQ5LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIFRoZXkgZGVwZW5kIG9uIHRoZSBSZW5k
ZXJPYmplY3QgYXJndW1lbnQgb2YgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3Vy
Y2UuCi0gICAgc3RhdGljIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oRmlsdGVyRWZmZWN0Kik7CisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBkZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0Kik7CiAKICAgICBpbmxpbmUgdm9pZCBw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkK
ICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgs
NyBAQAogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50
LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUp
CitHcmFwaGljc1JlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFn
bWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwg
aW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHN0YXJ0
UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAgLTEwMywxMyAr
MTAzLDEzIEBACiAKICAgICBjb25zdCBGb250JiBzY2FsZWRGb250ID0gdGV4dFJlbmRlcmVyLT5z
Y2FsZWRGb250KCk7CiAgICAgY29uc3QgRm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0g
c2NhbGVkRm9udC5mb250TWV0cmljcygpOwotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmcmFn
bWVudC54LCBmcmFnbWVudC55KTsKKyAgICBHcmFwaGljc1BvaW50IHRleHRPcmlnaW4oZnJhZ21l
bnQueCwgZnJhZ21lbnQueSk7CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkKICAgICAgICAg
dGV4dE9yaWdpbi5zY2FsZShzY2FsaW5nRmFjdG9yLCBzY2FsaW5nRmFjdG9yKTsKIAogICAgIHRl
eHRPcmlnaW4ubW92ZSgwLCAtc2NhbGVkRm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiAKLSAg
ICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHNjYWxlZEZvbnQuc2VsZWN0aW9uUmVjdEZvclRl
eHQoY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZnJhZ21lbnQpLCB0ZXh0T3JpZ2luLCBmcmFnbWVu
dC5oZWlnaHQgKiBzY2FsaW5nRmFjdG9yLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Cisg
ICAgR3JhcGhpY3NSZWN0IHNlbGVjdGlvblJlY3QgPSBzY2FsZWRGb250LnNlbGVjdGlvblJlY3RG
b3JUZXh0KGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50KSwgdGV4dE9yaWdpbiwgZnJh
Z21lbnQuaGVpZ2h0ICogc2NhbGluZ0ZhY3Rvciwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24p
OwogICAgIGlmIChzY2FsaW5nRmFjdG9yID09IDEpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25S
ZWN0OwogCkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICBBU1NFUlQoc3R5bGUpOwogCiAgICAgQWZm
aW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25S
ZWN0OworICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0OwogICAgIGludCBmcmFnbWVudFN0
YXJ0UG9zaXRpb24gPSAwOwogICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKIApAQCAt
MTQ1LDcgKzE0NSw3IEBACiAgICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVu
dEVuZFBvc2l0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0UmVj
dCBmcmFnbWVudFJlY3QgPSBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAg
ICAgR3JhcGhpY3NSZWN0IGZyYWdtZW50UmVjdCA9IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21l
bnQoZnJhZ21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwg
c3R5bGUpOwogICAgICAgICBmcmFnbWVudC5idWlsZEZyYWdtZW50VHJhbnNmb3JtKGZyYWdtZW50
VHJhbnNmb3JtKTsKICAgICAgICAgaWYgKCFmcmFnbWVudFRyYW5zZm9ybS5pc0lkZW50aXR5KCkp
CiAgICAgICAgICAgICBmcmFnbWVudFJlY3QgPSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZy
YWdtZW50UmVjdCk7CkBAIC01NzksNyArNTc5LDcgQEAKICAgICBpZiAoZnJhZ21lbnQud2lkdGgg
PD0gMCAmJiB0aGlja25lc3MgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2lu
dCBkZWNvcmF0aW9uT3JpZ2luKGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworICAgIEdyYXBoaWNz
UG9pbnQgZGVjb3JhdGlvbk9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKICAgICBmbG9h
dCB3aWR0aCA9IGZyYWdtZW50LndpZHRoOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBzY2FsZWRG
b250TWV0cmljcyA9IHNjYWxlZEZvbnQuZm9udE1ldHJpY3MoKTsKIApAQCAtNTk4LDcgKzU5OCw3
IEBACiAgICAgZGVjb3JhdGlvbk9yaWdpbi5tb3ZlKDAsIC1zY2FsZWRGb250TWV0cmljcy5mbG9h
dEFzY2VudCgpICsgcG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIHNjYWxl
ZEZvbnRNZXRyaWNzLCB0aGlja25lc3MpKTsKIAogICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFk
ZFJlY3QoRmxvYXRSZWN0KGRlY29yYXRpb25PcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgdGhpY2tu
ZXNzKSkpOworICAgIHBhdGguYWRkUmVjdChHcmFwaGljc1JlY3QoZGVjb3JhdGlvbk9yaWdpbiwg
R3JhcGhpY3NTaXplKHdpZHRoLCB0aGlja25lc3MpKSk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50
aW5nUmVzb3VyY2UoY29udGV4dCwgc2NhbGluZ0ZhY3RvciwgZGVjb3JhdGlvblJlbmRlcmVyLCBk
ZWNvcmF0aW9uU3R5bGUpKQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0
LCAmcGF0aCk7CkBAIC02MTUsMjEgKzYxNSwyMSBAQAogICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZv
bnQgPSB0ZXh0UmVuZGVyZXItPnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3cgPSBzdHlsZS0+dGV4dFNoYWRvdygpOwogCi0gICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2lu
KGZyYWdtZW50LngsIGZyYWdtZW50LnkpOwotICAgIEZsb2F0U2l6ZSB0ZXh0U2l6ZShmcmFnbWVu
dC53aWR0aCwgZnJhZ21lbnQuaGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IHRleHRPcmlnaW4o
ZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CisgICAgR3JhcGhpY3NTaXplIHRleHRTaXplKGZyYWdt
ZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOwogCiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0g
MSkgewogICAgICAgICB0ZXh0T3JpZ2luLnNjYWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0
b3IpOwogICAgICAgICB0ZXh0U2l6ZS5zY2FsZShzY2FsaW5nRmFjdG9yKTsKICAgICB9CiAKLSAg
ICBGbG9hdFJlY3Qgc2hhZG93UmVjdChGbG9hdFBvaW50KHRleHRPcmlnaW4ueCgpLCB0ZXh0T3Jp
Z2luLnkoKSAtIHNjYWxlZEZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKSwgdGV4dFNp
emUpOworICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0KEdyYXBoaWNzUG9pbnQodGV4dE9yaWdp
bi54KCksIHRleHRPcmlnaW4ueSgpIC0gc2NhbGVkRm9udC5mb250TWV0cmljcygpLmZsb2F0QXNj
ZW50KCkpLCB0ZXh0U2l6ZSk7CiAKICAgICBkbyB7CiAgICAgICAgIGlmICghcHJlcGFyZUdyYXBo
aWNzQ29udGV4dEZvclRleHRQYWludGluZyhjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCB0ZXh0UnVu
LCBzdHlsZSkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBGbG9hdFNpemUgZXh0cmFP
ZmZzZXQ7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBleHRyYU9mZnNldDsKICAgICAgICAgaWYgKHNo
YWRvdykKICAgICAgICAgICAgIGV4dHJhT2Zmc2V0ID0gYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29u
dGV4dChjb250ZXh0LCBzaGFkb3csIHNoYWRvd1JlY3QsIGZhbHNlIC8qIHN0cm9rZWQgKi8sIHRy
dWUgLyogb3BhcXVlICovLCB0cnVlIC8qIGhvcml6b250YWwgKi8pOwogCkBAIC03MDMsNyArNzAz
LDcgQEAKIAogSW50UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZGFyaWVzKCkg
Y29uc3QKIHsKLSAgICBGbG9hdFJlY3QgdGV4dFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHRleHRS
ZWN0OwogCiAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJT
VkdJbmxpbmVUZXh0KHRoaXMtPnRleHRSZW5kZXJlcigpKTsKICAgICBBU1NFUlQodGV4dFJlbmRl
cmVyKTsKQEAgLTcxNyw3ICs3MTcsNyBAQAogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXpl
ID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGV4dEZyYWdtZW50c1NpemU7ICsraSkgewogICAgICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50ID0gbV90ZXh0RnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBGbG9hdFJlY3QgZnJh
Z21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21lbnQud2lk
dGgsIGZyYWdtZW50LmhlaWdodCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBmcmFnbWVudFJlY3Qo
ZnJhZ21lbnQueCwgZnJhZ21lbnQueSAtIGJhc2VsaW5lLCBmcmFnbWVudC53aWR0aCwgZnJhZ21l
bnQuaGVpZ2h0KTsKICAgICAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFn
bWVudFRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghZnJhZ21lbnRUcmFuc2Zvcm0uaXNJZGVudGl0
eSgpKQogICAgICAgICAgICAgZnJhZ21lbnRSZWN0ID0gZnJhZ21lbnRUcmFuc2Zvcm0ubWFwUmVj
dChmcmFnbWVudFJlY3QpOwpAQCAtNzM4LDkgKzczOCw5IEBACiAgICAgaWYgKGlzVmlzaWJsZSB8
fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKICAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5I
aXRTdHJva2UgJiYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgp
IHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5j
YW5IaXRGaWxsICYmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkg
fHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYm94
T3JpZ2luKHgoKSwgeSgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luKHgo
KSwgeSgpKTsKICAgICAgICAgICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQp
OwotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOworICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgICAgICAgICAg
aWYgKHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIp
KSkgewogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3Vs
dChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3Qu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB2
aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3Rv
cjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdy
YXBoaWNzUXVhZD4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMs
IGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlci5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcl9oCiAKICNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHTWFya2VyRWxlbWVudC5oIgpAQCAtNDYs
MTkgKzQ2LDE5IEBACiAgICAgdm9pZCBkcmF3KFBhaW50SW5mbyYsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOwogCiAgICAgLy8gQ2FsY3VsYXRlcyBtYXJrZXIgYm91bmRhcmllcywgbWFwcGVkIHRv
IHRoZSB0YXJnZXQgZWxlbWVudCdzIGNvb3JkaW5hdGUgc3BhY2UKLSAgICBGbG9hdFJlY3QgbWFy
a2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hcmtlclRyYW5zZm9ybWF0aW9u
KSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgbWFya2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG1hcmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpOwogCiAgICAgdmlydHVhbCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3Jp
Z2luLCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OworICAgIEFmZmluZVRy
YW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4s
IGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0
UmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQogCi0gICAgRmxvYXRQb2lu
dCByZWZlcmVuY2VQb2ludCgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcmVmZXJlbmNlUG9p
bnQoKSBjb25zdDsKICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0OwogICAgIFNWR01hcmtlclVuaXRz
VHlwZSBtYXJrZXJVbml0cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR01hcmtlckVs
ZW1lbnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpOyB9CiAKQEAgLTY4LDEyICs2OCwxMiBAQAog
cHJpdmF0ZToKICAgICAvLyBHZW5lcmF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNhYmxl
IHRvIHJlbmRlciBtYXJrZXIgY29udGVudC4gSGFuZGxlcyBzY2FsaW5nIHRoZSBtYXJrZXIgY29u
dGVudAogICAgIC8vIGFjb3JkaW5nIHRvIFNWR3MgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBj
b25jZXB0LCB3aGVuIGEgc3Ryb2tlV2lkdGggdmFsdWUgIT0gLTEgaXMgcGFzc2VkIGluLgotICAg
IEFmZmluZVRyYW5zZm9ybSBtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBjb250ZW50VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdp
biwgZmxvYXQgc3Ryb2tlV2lkdGggPSAtMSkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1h
cmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRU
cmFuc2Zvcm1hdGlvbiwgY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VX
aWR0aCA9IC0xKSBjb25zdDsKIAogICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9y
bSgpIGNvbnN0OwogCiAgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50
VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBt
X3ZpZXdwb3J0OwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdNYXJrZXJMYXlvdXRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDE0ICs0OSwxNCBAQAogICAgIFNWR01hcmtlckxheW91dEluZm8oKTsKICAgICB+
U1ZHTWFya2VyTGF5b3V0SW5mbygpOwogCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJp
ZXMoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBm
bG9hdCBzdHJva2VXaWR0aCwgY29uc3QgUGF0aCYpOworICAgIEdyYXBoaWNzUmVjdCBjYWxjdWxh
dGVCb3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVu
ZE1hcmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIGRyYXdN
YXJrZXJzKFBhaW50SW5mbyYpOwogCiAgICAgLy8gVXNlZCBieSBzdGF0aWMgaW5saW5lIGhlbHBl
ciBmdW5jdGlvbnMgaW4gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKICAgICBTVkdNYXJrZXJEYXRh
JiBtYXJrZXJEYXRhKCkgeyByZXR1cm4gbV9tYXJrZXJEYXRhOyB9CiAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIG1pZE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWlkTWFya2VyOyB9CiAg
ICAgaW50JiBlbGVtZW50SW5kZXgoKSB7IHJldHVybiBtX2VsZW1lbnRJbmRleDsgfQotICAgIHZv
aWQgYWRkTGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqLCBjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFkZExheW91dGVkTWFya2Vy
KFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBm
bG9hdCBhbmdsZSk7CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEzICsyNiwxMyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1
ZGUgIlNWR01hcmtlckxheW91dEluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNsYXNzIFJlbmRlclNWR0NvbnRh
aW5lcjsKIGNsYXNzIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OwogCkBAIC00OCwxMiAr
NDgsMTIgQEAKIAogcHJpdmF0ZToKICAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3Ig
dGhlIGZpbGwgYW5kIHRoZSBzdHJva2UKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJV
TEVfTk9OWkVSTyk7Ci0gICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50Jiwg
Ym9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOworICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBib29sIHJlcXVpcmVzRmlsbCA9IHRydWUsIFdpbmRSdWxlIGZpbGxS
dWxlID0gUlVMRV9OT05aRVJPKTsKKyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEdyYXBo
aWNzUG9pbnQmLCBib29sIHJlcXVpcmVzU3Ryb2tlID0gdHJ1ZSk7CiAKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5n
Qm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFs
IEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5n
Qm94OyB9CiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjMsOSArNjMs
OSBAQAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVj
dD4mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKLSAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICBHcmFwaGlj
c1JlY3QgY2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZUNh
Y2hlZEJvdW5kYXJpZXMoKTsKIAogcHJpdmF0ZToKQEAgLTc3LDkgKzc3LDkgQEAKICAgICBib29s
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwogCiAgICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsK
LSAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tl
QW5kTWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94
OworICAgIEdyYXBoaWNzUmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3Qg
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50
Qm91bmRpbmdCb3g7CiAgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OmdUYWcpIHx8ICFzdGF0aWNfY2FzdDxTVkdHRWxlbWVudCo+KGVsZW1lbnQp
LT5pc1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBuZWVkc1Vw
ZGF0ZTsKIAotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbiA9IHN0YXRpY19jYXN0PFNWR1NoYWRv
d1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCktPmNvbnRhaW5lclRyYW5zbGF0aW9uKCk7
CisgICAgR3JhcGhpY3NTaXplIHRyYW5zbGF0aW9uID0gc3RhdGljX2Nhc3Q8U1ZHU2hhZG93VHJl
ZUNvbnRhaW5lckVsZW1lbnQqPihlbGVtZW50KS0+Y29udGFpbmVyVHJhbnNsYXRpb24oKTsKICAg
ICBpZiAoIXRyYW5zbGF0aW9uLndpZHRoKCkgJiYgIXRyYW5zbGF0aW9uLmhlaWdodCgpKQogICAg
ICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBTVkdVc2VF
bGVtZW50OwogCiBjbGFzcyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBT
VkdHRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHU2hhZG93VHJl
ZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOwogCi0gICAgRmxvYXRTaXplIGNv
bnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7CisgICAgR3JhcGhpY3NTaXplIGNvbnRhaW5lclRy
YW5zbGF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZH
TGVuZ3RoJiB4LCBjb25zdCBTVkdMZW5ndGgmIHkpCiAgICAgewogICAgICAgICBtX3hPZmZzZXQg
PSB4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw3ICszMjMsNyBAQAogICAgIH0K
IAogICAgIHVuc2lnbmVkIHBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb3NpdGlvbjsK
KyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9zaXRpb247CiB9OwogCiBib29sIFNWR1RleHRRdWVy
eTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25z
dCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdApAQCAtMzM1LDcgKzMzNSw3IEBACiAg
ICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5
RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgZGF0YS0+c3RhcnRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21l
bnQueCwgZnJhZ21lbnQueSk7CisgICAgZGF0YS0+c3RhcnRQb3NpdGlvbiA9IEdyYXBoaWNzUG9p
bnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewog
ICAgICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVD
aGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVy
T2Zmc2V0LCBzdGFydFBvc2l0aW9uKTsKQEAgLTM1NCwxMCArMzU0LDEwIEBACiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFy
YWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CitHcmFwaGljc1BvaW50IFNWR1RleHRRdWVy
eTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewog
ICAgIGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50
KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiAKICAgICBTdGFydFBvc2l0aW9u
T2ZDaGFyYWN0ZXJEYXRhIGRhdGEocG9zaXRpb24pOwogICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwg
JlNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOwpAQCAtMzcy
LDcgKzM3Miw3IEBACiAgICAgfQogCiAgICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAgRmxvYXRQ
b2ludCBlbmRQb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvc2l0aW9uOwogfTsKIAog
Ym9vbCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBx
dWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CkBAIC0zODQs
NyArMzg0LDcgQEAKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29v
cmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24p
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0
UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CisgICAgZGF0YS0+ZW5kUG9zaXRpb24gPSBH
cmFwaGljc1BvaW50KGZyYWdtZW50LngsIGZyYWdtZW50LnkpOwogCiAgICAgU1ZHVGV4dE1ldHJp
Y3MgbWV0cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlE
YXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCwgc3RhcnRQb3NpdGlv
biArIDEpOwogICAgIGlmIChxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQpAQCAtNDAxLDEwICs0
MDEsMTAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0UXVlcnk6
OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CitHcmFwaGlj
c1BvaW50IFNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QKIHsKICAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2ludCgpOwogCiAg
ICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEgZGF0YShwb3NpdGlvbik7CiAgICAgZXhlY3V0
ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJh
Y2spOwpAQCAtNDYyLDE1ICs0NjIsMTUgQEAKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3NpdGlv
bjsKLSAgICBGbG9hdFJlY3QgZXh0ZW50OworICAgIEdyYXBoaWNzUmVjdCBleHRlbnQ7CiB9Owog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVy
eTo6RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQg
c3RhcnRQb3NpdGlvbiwgRmxvYXRSZWN0JiBleHRlbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2Fs
Y3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBjb25z
dCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgR3JhcGhpY3NS
ZWN0JiBleHRlbnQpCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHF1ZXJ5RGF0YS0+dGV4
dFJlbmRlcmVyLT5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwog
Ci0gICAgZXh0ZW50LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQu
eSAtIHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5zY2FsZWRGb250KCkuZm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudCgpIC8gc2NhbGluZ0ZhY3RvcikpOworICAgIGV4dGVudC5zZXRMb2NhdGlvbihH
cmFwaGljc1BvaW50KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBxdWVyeURhdGEtPnRleHRSZW5k
ZXJlci0+c2NhbGVkRm9udCgpLmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSAvIHNjYWxpbmdG
YWN0b3IpKTsKIAogICAgIGlmIChzdGFydFBvc2l0aW9uKSB7CiAgICAgICAgIFNWR1RleHRNZXRy
aWNzIG1ldHJpY3MgPSBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHF1ZXJ5
RGF0YS0+dGV4dFJlbmRlcmVyLCBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQsIHN0YXJ0UG9zaXRp
b24pOwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAgICAgfQogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0
cmljcyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50
ZXh0UmVuZGVyZXIsIGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEp
OwotICAgIGV4dGVudC5zZXRTaXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3Mu
aGVpZ2h0KCkpKTsKKyAgICBleHRlbnQuc2V0U2l6ZShHcmFwaGljc1NpemUobWV0cmljcy53aWR0
aCgpLCBtZXRyaWNzLmhlaWdodCgpKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRU
cmFuc2Zvcm07CiAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRy
YW5zZm9ybSwgU1ZHVGV4dEZyYWdtZW50OjpUcmFuc2Zvcm1JZ25vcmluZ1RleHRMZW5ndGgpOwpA
QCAtNTA0LDEwICs1MDQsMTAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IFNW
R1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CitH
cmFwaGljc1JlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QKIHsKICAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAg
IEV4dGVudE9mQ2hhcmFjdGVyRGF0YSBkYXRhKHBvc2l0aW9uKTsKICAgICBleGVjdXRlUXVlcnko
JmRhdGEsICZTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2spOwpAQCAtNTE2
LDE5ICs1MTYsMTkgQEAKIAogLy8gY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbigpIGltcGxlbWVu
dGF0aW9uCiBzdHJ1Y3QgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEgOiBTVkdUZXh0UXVl
cnk6OkRhdGEgewotICAgIENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKGNvbnN0IEZsb2F0
UG9pbnQmIHF1ZXJ5UG9zaXRpb24pCisgICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEo
Y29uc3QgR3JhcGhpY3NQb2ludCYgcXVlcnlQb3NpdGlvbikKICAgICAgICAgOiBwb3NpdGlvbihx
dWVyeVBvc2l0aW9uKQogICAgIHsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uOwor
ICAgIEdyYXBoaWNzUG9pbnQgcG9zaXRpb247CiB9OwogCiBib29sIFNWR1RleHRRdWVyeTo6Y2hh
cmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBDaGFyYWN0ZXJOdW1iZXJBdFBv
c2l0aW9uRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25E
YXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIEZsb2F0UmVjdCBleHRlbnQ7CisgICAgR3JhcGhpY3NS
ZWN0IGV4dGVudDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFy
YWN0ZXJzICsgaTsKICAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7
CkBAIC01NDUsNyArNTQ1LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBTVkdUZXh0
UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pIGNvbnN0CitpbnQgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hl
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywyOCArNDMsMjggQEAKICAgICByZXR1cm4gYm94OwogfQogCi1GbG9h
dFJlY3QgUmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGlj
c1JlY3QgUmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAg
aWYgKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVu
ZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMpKQogICAgICAgICByZXR1cm4gb2JqZWN0LT5vYmplY3RC
b3VuZGluZ0JveCgpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFw
aGljc1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclNWR0lubGluZTo6c3Ryb2tlQm91bmRp
bmdCb3goKSBjb25zdAogewogICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9IFJl
bmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcih0aGlzKSkKICAgICAgICAg
cmV0dXJuIG9iamVjdC0+c3Ryb2tlQm91bmRpbmdCb3goKTsKIAotICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJT
VkdJbmxpbmU6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKK0dyYXBoaWNz
UmVjdCBSZW5kZXJTVkdJbmxpbmU6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29u
c3QKIHsKICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0
Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhpcykpCiAgICAgICAgIHJldHVybiBvYmpl
Y3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAKLSAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBJbnRSZWN0IFJlbmRlclNW
R0lubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIpCkBAIC04MiwxNSArODIsMTUgQEAKICAgICBTVkdSZW5kZXJT
dXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHVzZVRy
YW5zZm9ybXMsIGZpeGVkLCB0cmFuc2Zvcm1TdGF0ZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW5s
aW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVy
U1ZHSW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsK
ICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNW
R1RleHRBbmNlc3Rvcih0aGlzKTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRmxvYXRSZWN0IHRleHRCb3VuZGluZ0JveCA9IG9iamVjdC0+c3Ryb2tlQm91bmRpbmdC
b3goKTsKKyAgICBHcmFwaGljc1JlY3QgdGV4dEJvdW5kaW5nQm94ID0gb2JqZWN0LT5zdHJva2VC
b3VuZGluZ0JveCgpOwogICAgIGZvciAoSW5saW5lRmxvd0JveCogYm94ID0gZmlyc3RMaW5lQm94
KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGluZUJveCgpKQotICAgICAgICBxdWFkcy5hcHBlbmQo
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QodGV4dEJvdW5kaW5nQm94LngoKSArIGJveC0+
eCgpLCB0ZXh0Qm91bmRpbmdCb3gueSgpICsgYm94LT55KCksIGJveC0+bG9naWNhbFdpZHRoKCks
IGJveC0+bG9naWNhbEhlaWdodCgpKSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChHcmFwaGljc1JlY3QodGV4dEJvdW5kaW5nQm94LngoKSArIGJveC0+eCgpLCB0
ZXh0Qm91bmRpbmdCb3gueSgpICsgYm94LT55KCksIGJveC0+bG9naWNhbFdpZHRoKCksIGJveC0+
bG9naWNhbEhlaWdodCgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNWR0lubGluZTo6d2lsbEJlRGVz
dHJveWVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0
UmVjdDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKIGNsYXNzIFJlbmRlckJveE1vZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OwpAQCAtNTIsMTMgKzUyLDEzIEBACiAgICAgc3RhdGljIGJvb2wgaXNPdmVyZmxvd0hpZGRl
bihjb25zdCBSZW5kZXJPYmplY3QqKTsKIAogICAgIC8vIENhbGN1bGF0ZXMgdGhlIHJlcGFpbnRS
ZWN0IGluIGNvbWJpbmF0aW9uIHdpdGggZmlsdGVyLCBjbGlwcGVyIGFuZCBtYXNrZXIgaW4gbG9j
YWwgY29vcmRpbmF0ZXMuCi0gICAgc3RhdGljIHZvaWQgaW50ZXJzZWN0UmVwYWludFJlY3RXaXRo
UmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVjdCosIEZsb2F0UmVjdCYpOworICAgIHN0YXRpYyB2
b2lkIGludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3Qq
LCBHcmFwaGljc1JlY3QmKTsKIAogICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2Vk
IHBvaW50IGxpZXMgaW4gYSBjbGlwcGluZyBhcmVhCi0gICAgc3RhdGljIGJvb2wgcG9pbnRJbkNs
aXBwaW5nQXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgc3RhdGlj
IGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBHcmFwaGljc1Bv
aW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhj
b25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0Jv
eCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRp
bmdCb3gpOwotICAgIHN0YXRpYyBib29sIHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChj
b25zdCBGbG9hdFJlY3QmIGxvY2FsUmVwYWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1
dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBH
cmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBHcmFwaGljc1JlY3QmIHN0cm9rZUJvdW5k
aW5nQm94LCBHcmFwaGljc1JlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIGJv
b2wgcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgbG9j
YWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRyYW5zZm9ybSwgY29u
c3QgUGFpbnRJbmZvJik7CiAKICAgICAvLyBJbXBvcnRhbnQgZnVuY3Rpb25zIHVzZWQgYnkgbmVh
cmx5IGFsbCBTVkcgcmVuZGVyZXJzIGNlbnRyYWxpemluZyBjb29yZGluYXRlIHRyYW5zZm9ybWF0
aW9ucyAvIHJlcGFpbnQgcmVjdCBjYWxjdWxhdGlvbnMKICAgICBzdGF0aWMgSW50UmVjdCBjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJPYmplY3QqLCBSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lv
biA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHZvaWQg
c2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZSogb2JqZWN0KSB7IG1f
YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IG9iamVjdDsgfQogCiAgICAgdmlydHVhbCBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgV2lk
dGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRD
aGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25z
dDsKICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYs
IGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBj
b25zdDsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIs
NyBAQAogewogfQogCi12b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0lu
Zm9ybWF0aW9uKEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUlu
dHJpbnNpY1NpemUpIGNvbnN0Cit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNS
YXRpb0luZm9ybWF0aW9uKEdyYXBoaWNzU2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVy
Y2VudGFnZUludHJpbnNpY1NpemUpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogaHR0cDovL2Rldi53
My5vcmcvU1ZHL3Byb2ZpbGVzLzEuMUYyL3B1Ymxpc2gvY29vcmRzLmh0bWwjSW50cmluc2ljU2l6
aW5nCiAgICAgLy8gVGhlIGludHJpbnNpYyBhc3BlY3QgcmF0aW8gb2YgdGhlIHZpZXdwb3J0IG9m
IFNWRyBjb250ZW50IGlzIG5lY2Vzc2FyeSBmb3IgZXhhbXBsZSwgd2hlbiBpbmNsdWRpbmcKQEAg
LTc2LDcgKzc2LDcgQEAKICAgICAvLyDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIGF0dHJp
YnV0ZXMgYWZ0ZXIgcmVzb2x2aW5nIGJvdGggdmFsdWVzIHRvIHVzZXIgdW5pdHMuCiAgICAgaXNQ
ZXJjZW50YWdlSW50cmluc2ljU2l6ZSA9IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT53aWR0aCgp
LmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc0ZpeGVkKCkpIHsKLSAgICAgICAgaW50
cmluc2ljUmF0aW8gPSBGbG9hdFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBpbnRy
aW5zaWNSYXRpbyA9IEdyYXBoaWNzU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAvLyBhY2NvdW50IGZvciBjZXJ0
YWluIGNhc2VzIG9mIHRoZSBpbnRyaW5zaWMgd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9uIGluIFJl
bmRlclBhcnQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aC9IZWlnaHQuCiAgICAgaWYgKGlu
dHJpbnNpY1JhdGlvLmlzRW1wdHkoKSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpICYm
IHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSB7CiAgICAgICAgIGlzUGVyY2VudGFnZUlu
dHJpbnNpY1NpemUgPSB0cnVlOwotICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEZsb2F0U2l6ZShz
dHlsZSgpLT53aWR0aCgpLnBlcmNlbnQoKSwgc3R5bGUoKS0+aGVpZ2h0KCkucGVyY2VudCgpKTsK
KyAgICAgICAgaW50cmluc2ljUmF0aW8gPSBHcmFwaGljc1NpemUoc3R5bGUoKS0+d2lkdGgoKS5w
ZXJjZW50KCksIHN0eWxlKCktPmhlaWdodCgpLnBlcmNlbnQoKSk7CiAgICAgfQogfQogCkBAIC0z
NDUsNyArMzQ1LDcgQEAKICAgICBpZiAoIXN2Zy0+aGFzU2V0Q29udGFpbmVyU2l6ZSgpKSB7CiAg
ICAgICAgIC8vIEluIHRoZSBub3JtYWwgY2FzZSBvZiA8c3ZnPiBiZWluZyBzdGFuZC1hbG9uZSBv
ciBpbiBhIENTU0JveE1vZGVsIG9iamVjdCB3ZSB1c2UKICAgICAgICAgLy8gUmVuZGVyQm94Ojp3
aWR0aCgpL2hlaWdodCgpICh3aGljaCBwdWxscyBkYXRhIGZyb20gUmVuZGVyU3R5bGUpCi0gICAg
ICAgIG1fdmlld3BvcnRTaXplID0gRmxvYXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAg
ICAgbV92aWV3cG9ydFNpemUgPSBHcmFwaGljc1NpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTQsNyArMzU0LDcgQEAKICAgICAvLyBGSVhNRTog
Q2hlY2sgaG93IFNWR0ltYWdlICsgem9vbWluZyBpcyBzdXBwb3NlZCB0byBiZSBoYW5kbGVkPwog
ICAgIFNWR0xlbmd0aCB3aWR0aCA9IHN2Zy0+d2lkdGgoKTsKICAgICBTVkdMZW5ndGggaGVpZ2h0
ID0gc3ZnLT5oZWlnaHQoKTsKLSAgICBtX3ZpZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aC51
bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZVdpZHRoVmFs
dWUoKSA6IHdpZHRoLnZhbHVlKHN2ZyksCisgICAgbV92aWV3cG9ydFNpemUgPSBHcmFwaGljc1Np
emUod2lkdGgudW5pdFR5cGUoKSA9PSBMZW5ndGhUeXBlUGVyY2VudGFnZSA/IHN2Zy0+cmVsYXRp
dmVXaWR0aFZhbHVlKCkgOiB3aWR0aC52YWx1ZShzdmcpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3Zn
LT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBoZWlnaHQudmFsdWUoc3ZnKSk7CiB9CiAKQEAgLTM2
NSw3ICszNjUsNyBAQAogICAgIEludFNpemUgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlck9yaWdp
blRvQ29udGVudEJveCgpOwogICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNW
R1NWR0VsZW1lbnQqPihub2RlKCkpOwogICAgIGZsb2F0IHNjYWxlID0gc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpOwotICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRlID0gc3ZnLT5jdXJyZW50VHJhbnNs
YXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCB0cmFuc2xhdGUgPSBzdmctPmN1cnJlbnRUcmFuc2xh
dGUoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtKHNjYWxlLCAwLCAwLCBzY2FsZSwgYm9yZGVy
QW5kUGFkZGluZy53aWR0aCgpICsgdHJhbnNsYXRlLngoKSwgYm9yZGVyQW5kUGFkZGluZy5oZWln
aHQoKSArIHRyYW5zbGF0ZS55KCkpOwogICAgIHJldHVybiBjdG0gKiBzdmctPnZpZXdCb3hUb1Zp
ZXdUcmFuc2Zvcm0od2lkdGgoKSAvIHNjYWxlLCBoZWlnaHQoKSAvIHNjYWxlKTsKIH0KQEAgLTQw
Niw3ICs0MDYsNyBAQAogICAgIHJlcGFpbnRSZWN0ID0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9y
bSgpLm1hcFJlY3QocmVwYWludFJlY3QpOwogCiAgICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9y
dCBjbGlwIC0gbm90IGFmZmVjdGVkIGJ5IG92ZXJmbG93IHNldHRpbmdzICAgIAotICAgIHJlcGFp
bnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IG1fdmlld3BvcnRTaXplKSkpOworICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJ
bnRSZWN0KEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1fdmlld3BvcnRTaXplKSkpOwog
CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUo
KTsKICAgICBpZiAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygp
KQpAQCAtNDI3LDkgKzQyNyw5IEBACiAKIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVk
Qm91bmRhcmllcygpCiB7Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwot
ICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3Vu
ZGluZ0JveCA9IEZsb2F0UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGlj
c1JlY3QoKTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CisgICAg
bV9yZXBhaW50Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1JlbmRlclN1
cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRp
bmdCb3gsIG1fc3Ryb2tlQm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKICAgICBT
VkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywg
bV9yZXBhaW50Qm91bmRpbmdCb3gpOwpAQCAtNDQ5LDEwICs0NDksMTAgQEAKICAgICBMYXlvdXRQ
b2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQ
b2ludChwb2ludEluUGFyZW50KTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGNoaWxkLT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQ
b2ludCwgaGl0VGVzdEFjdGlvbikpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRHcmFwaGlj
c1BvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDU1MvSFRNTCBhc3N1bWVzIHRoZSBsb2NhbCBwb2ludCBpcyBy
ZWxhdGl2ZSB0byB0aGUgYm9yZGVyIGJveCwgcmlnaHQ/CiAgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnRJbkJvcmRlckJveCk7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogbm9kZUF0RmxvYXRQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgaGl0IHRlc3Rz
IHlldC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBub2RlQXRHcmFwaGljc1BvaW50KCkgZG9lc24n
dCBoYW5kbGUgcmVjdC1iYXNlZCBoaXQgdGVzdHMgeWV0LgogICAgICAgICAgICAgcmVzdWx0LmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoY2hpbGQtPm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5l
cik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRl
ICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5o
IgpAQCAtNTMsOSArNTMsOSBAQAogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3Jt
OyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJv
a2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94
OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qg
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRC
b3VuZGluZ0JveDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKQEAgLTY0LDE1ICs2NCwxNSBA
QAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRG
bG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwog
CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICBib29sIG1fdXBkYXRlQ2FjaGVkUmVwYWlu
dFJlY3QgOiAxOwogICAgIGJvb2wgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA6IDE7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07Ci0gICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91
bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIEdyYXBo
aWNzUmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3JlcGFpbnRC
b3VuZGluZ0JveDsKICAgICBPd25QdHI8UmVuZGVySW1hZ2VSZXNvdXJjZT4gbV9pbWFnZVJlc291
cmNlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdN
b2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBJbnRSZWN0IGJveCA9IGVuY2xvc2luZ0ludFJlY3Qo
cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxp
bmVBbmRTaGFkb3coYm94KTsKIAotICAgIEZsb2F0UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQg
PSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QoYm94KSwgcmVwYWludENvbnRhaW5lcik7
CisgICAgR3JhcGhpY3NRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWlu
ZXJRdWFkKEdyYXBoaWNzUmVjdChib3gpLCByZXBhaW50Q29udGFpbmVyKTsKICAgICByZXR1cm4g
Y29udGFpbmVyUmVsYXRpdmVRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKQEAgLTc2
LDcgKzc2LDcgQEAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW5kZXJT
VkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1
YWQ+JiBxdWFkcykKIHsKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChzdHJv
a2VCb3VuZGluZ0JveCgpKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiAgICAgdm9pZCBzZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCkgeyBtX25l
ZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSBjb25zdDsKIAogICAgIHN0YXRpYyBSZW5kZXJTVkdUZXh0KiBsb2NhdGVSZW5kZXJT
VkdUZXh0QW5jZXN0b3IoUmVuZGVyT2JqZWN0Kik7CiAgICAgc3RhdGljIGNvbnN0IFJlbmRlclNW
R1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcihjb25zdCBSZW5kZXJPYmplY3QqKTsK
QEAgLTU0LDIxICs1NCwyMSBAQAogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24pOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJl
bnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRHcmFwaGljc1BvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxH
cmFwaGljc1F1YWQ+Jik7CiAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpOwogCiAgICAg
dmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3Jt
U3RhdGUmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gZnJhbWVSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gZnJhbWVSZWN0KCk7IH0KKyAgICB2aXJ0dWFs
IEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFya2VyLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQs
OSArNzQsOSBAQAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChtX3ZpZXdwb3J0KTsK
IH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJCb3VuZGFyaWVz
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNmb3JtYXRpb24pIGNvbnN0CitHcmFw
aGljc1JlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlckJvdW5kYXJpZXMoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3QKIHsKLSAgICBGbG9h
dFJlY3QgY29vcmRpbmF0ZXMgPSBSZW5kZXJTVkdDb250YWluZXI6OnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCk7CisgICAgR3JhcGhpY3NSZWN0IGNvb3JkaW5hdGVzID0gUmVuZGVyU1ZH
Q29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogCiAgICAgLy8gTWFw
IHJlcGFpbnQgcmVjdCBpbnRvIHBhcmVudCBjb29yZGluYXRlIHNwYWNlLCBpbiB3aGljaCB0aGUg
bWFya2VyIGJvdW5kYXJpZXMgaGF2ZSB0byBiZSBldmFsdWF0ZWQKICAgICBjb29yZGluYXRlcyA9
IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGNvb3JkaW5hdGVzKTsKQEAgLTkyLDEy
ICs5MiwxMiBAQAogICAgIC8vIHJldHVybiB2aWV3cG9ydFRyYW5zbGF0aW9uICogbG9jYWxUcmFu
c2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNmb3JtKCk7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKIHsKICAgICBTVkdN
YXJrZXJFbGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9k
ZSgpKTsKICAgICBBU1NFUlQobWFya2VyKTsKIAotICAgIHJldHVybiBGbG9hdFBvaW50KG1hcmtl
ci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOwor
ICAgIHJldHVybiBHcmFwaGljc1BvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1h
cmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOwogfQogCiBmbG9hdCBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlcjo6YW5nbGUoKSBjb25zdApAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgcmV0dXJuIGFu
Z2xlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtl
clRyYW5zZm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYXV0b0FuZ2xl
LCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlcjo6bWFya2VyVHJhbnNmb3JtYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgb3Jp
Z2luLCBmbG9hdCBhdXRvQW5nbGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIFNW
R01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihu
b2RlKCkpOwogICAgIEFTU0VSVChtYXJrZXIpOwpAQCAtMTM1LDEwICsxMzUsMTAgQEAKICAgICBS
ZW5kZXJTVkdDb250YWluZXI6OnBhaW50KGluZm8sIEludFBvaW50KCkpOwogfQogCi1BZmZpbmVU
cmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1h
dGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKK0FmZmluZVRyYW5z
Zm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9u
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBHcmFw
aGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIC8vIFRo
ZSAnb3JpZ2luJyBjb29yZGluYXRlIG1hcHMgdG8gU1ZHcyByZWZYL3JlZlksIGdpdmVuIGluIGNv
b3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUgbWFy
a2VyCi0gICAgRmxvYXRQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1h
cFBvaW50KG9yaWdpbik7CisgICAgR3JhcGhpY3NQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9y
dFRyYW5zZm9ybSgpLm1hcFBvaW50KG9yaWdpbik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtYXRpb24gPSBjb250ZW50VHJhbnNmb3JtYXRpb247CiAgICAgaWYgKHN0cm9rZVdpZHRo
ICE9IC0xKQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKICAgICBmbG9hdCB3ID0gbWFya2VyLT5tYXJr
ZXJXaWR0aCgpLnZhbHVlKG1hcmtlcik7CiAgICAgZmxvYXQgaCA9IG1hcmtlci0+bWFya2VySGVp
Z2h0KCkudmFsdWUobWFya2VyKTsKLSAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KDAsIDAsIHcs
IGgpOworICAgIG1fdmlld3BvcnQgPSBHcmFwaGljc1JlY3QoMCwgMCwgdywgaCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJM
YXlvdXRJbmZvLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBACiAgICAgKytlbGVtZW50SW5kZXg7CiB9CiAKLUZsb2F0UmVjdCBTVkdNYXJrZXJMYXlv
dXRJbmZvOjpjYWxjdWxhdGVCb3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFy
dE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIGVuZE1hcmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmIHBh
dGgpCitHcmFwaGljc1JlY3QgU1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2FsY3VsYXRlQm91bmRhcmll
cyhSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyKiBtaWRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBlbmRNYXJrZXIsIGZs
b2F0IHN0cm9rZVdpZHRoLCBjb25zdCBQYXRoJiBwYXRoKQogewogICAgIG1fbGF5b3V0LmNsZWFy
KCk7CiAgICAgbV9taWRNYXJrZXIgPSBtaWRNYXJrZXI7CkBAIC04MCwxMiArODAsMTIgQEAKICAg
ICB9CiAKICAgICBpZiAobV9sYXlvdXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIFZlY3RvcjxNYXJr
ZXJMYXlvdXQ+OjppdGVyYXRvciBpdCA9IG1fbGF5b3V0LmJlZ2luKCk7CiAgICAgVmVjdG9yPE1h
cmtlckxheW91dD46Oml0ZXJhdG9yIGVuZCA9IG1fbGF5b3V0LmVuZCgpOwogCi0gICAgRmxvYXRS
ZWN0IGJvdW5kczsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRzOwogICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgTWFya2VyTGF5b3V0JiBsYXlvdXQgPSAqaXQ7CiAKQEAgLTEy
MSw3ICsxMjEsNyBAQAogICAgIH0KIH0KIAotdm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjphZGRM
YXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyLCBjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKQordm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjph
ZGRMYXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyLCBjb25zdCBH
cmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKQogewogICAgIEFTU0VSVChtYXJrZXIp
OwogICAgIG1fbGF5b3V0LmFwcGVuZChNYXJrZXJMYXlvdXQobWFya2VyLCBtYXJrZXItPm1hcmtl
clRyYW5zZm9ybWF0aW9uKG9yaWdpbiwgYW5nbGUsIG1fc3Ryb2tlV2lkdGgpKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
aAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBoaWNzU2l6ZTsKIGNsYXNz
IE5vZGU7CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlckltYWdlOwpAQCAtNjEsNyAr
NjEsNyBAQAogLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFz
c2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiwgY29uc3QgRmxvYXRSZWN0Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogLy8gaGVscGVyIG9wZXJhdG9ycyBzcGVj
aWZpYyB0byBkdW1waW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQgaW4gdmFyaW91
cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlCiAvLyB0aGVzZSBjb3VsZCBiZSBkZWZp
bmVkIGluIHNlcGFyYXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVzZSBnZW5lcmlj
IHNpZ25hdHVyZXMgdW5pbnRlbnRpb25hbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAg
LTQ4LDcgKzQ4LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNo
ZShib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFsaWRhdGlv
biA9IHRydWUpOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJP
YmplY3QqKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJl
bmRlck9iamVjdCopOwogCiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrVW5pdHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSktPm1h
c2tVbml0cygpOyB9CiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtYXNrQ29udGVudFVu
aXRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkp
LT5tYXNrQ29udGVudFVuaXRzKCk7IH0KQEAgLTYwLDcgKzYwLDcgQEAKICAgICB2b2lkIGRyYXdD
b250ZW50SW50b01hc2tJbWFnZShNYXNrZXJEYXRhKiwgY29uc3QgU1ZHTWFza0VsZW1lbnQqLCBS
ZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIGNhbGN1bGF0ZU1hc2tDb250ZW50UmVwYWludFJlY3Qo
KTsKIAotICAgIEZsb2F0UmVjdCBtX21hc2tDb250ZW50Qm91bmRhcmllczsKKyAgICBHcmFwaGlj
c1JlY3QgbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CiAgICAgSGFzaE1hcDxSZW5kZXJPYmplY3Qq
LCBNYXNrZXJEYXRhKj4gbV9tYXNrZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNDksOCArNDksOCBAQAogCiAgICAgdm9pZCBjb21wdXRlUGVyQ2hhcmFjdGVyTGF5
b3V0SW5mb3JtYXRpb24oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVj
dCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7IH0KIAogICAgIElubGluZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2
MSw3IEBACiAgICAgdm9pZCBzZXRTdGFydHNOZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmsp
IHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdUZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZz
ZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9z
aXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBz
ZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBSZW5kZXJTdHls
ZSopOworICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0
IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVu
dEVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopOwogCiBwcml2YXRlOgogICAgIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1
ZmZlclRvb2xzLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywy
MSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFz
cyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1JlY3Q7CitjbGFz
cyBHcmFwaGljc1NpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBSZW5kZXJPYmpl
Y3Q7CiAKIGNsYXNzIFNWR0ltYWdlQnVmZmVyVG9vbHMgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFNWR0ltYWdlQnVmZmVyVG9vbHMpOwogcHVibGljOgotICAgIHN0YXRpYyBib29sIGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4m
LCBDb2xvclNwYWNlKTsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBH
cmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFjZSk7
CiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
LCBSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBzdGF0aWMgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29s
dXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJl
Y3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVRy
YW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRlck9i
amVjdCosIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRpYyBG
bG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRl
ck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBzdGF0
aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAg
IHN0YXRpYyBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1dGVUYXJnZXRS
ZWN0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEdy
YXBoaWNzU2l6ZSYpOwogCiBwcml2YXRlOgogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHMoKSB7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw3ICsyNSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyX2gKIAogI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIK
QEAgLTUyLDggKzUyLDggQEAKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNC
dWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENvbnRleHQ7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIHNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBib3VuZGFy
aWVzOwotICAgIEZsb2F0U2l6ZSBzY2FsZTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRhcmllczsK
KyAgICBHcmFwaGljc1NpemUgc2NhbGU7CiAgICAgYm9vbCBidWlsZGVkIDogMTsKICAgICBib29s
IG1hcmtlZEZvclJlbW92YWwgOiAxOwogfTsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKICAgICBQ
YXNzUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkUHJpbWl0aXZlcyhGaWx0ZXIqKTsKIApA
QCAtODcsNyArODcsNyBAQAogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgc19yZXNv
dXJjZVR5cGU7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKGNv
bnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYpOworICAgIGJvb2wgZml0c0luTWF4aW11bUltYWdl
U2l6ZShjb25zdCBHcmFwaGljc1NpemUmLCBHcmFwaGljc1NpemUmKTsKIAogICAgIEhhc2hNYXA8
UmVuZGVyT2JqZWN0KiwgRmlsdGVyRGF0YSo+IG1fZmlsdGVyOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTcwLDcgKzcw
LDcgQEAKICAgICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2NsaXBCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9jbGlwQm91bmRhcmll
cyA9IEdyYXBoaWNzUmVjdCgpOwogICAgIGlmICghbV9jbGlwcGVyLmlzRW1wdHkoKSkgewogICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKICAgICAgICAgbV9jbGlwcGVyLmNsZWFy
KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICByZXR1cm4gYXBwbHlDbGlwcGluZ1RvQ29udGV4
dChvYmplY3QsIG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKSwgb2JqZWN0LT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpLCBjb250ZXh0KTsKIH0KIAotYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KQorYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXI6OnBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KQogewogICAgIC8vIElmIHRoZSBjdXJy
ZW50IGNsaXAtcGF0aCBnZXRzIGNsaXBwZWQgaXRzZWxmLCB3ZSBoYXZlIHRvIGZhbGxiYWNrIHRv
IG1hc2tpbmcuCiAgICAgaWYgKCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5jbGlwcGVyUmVzb3VyY2Uo
KS5pc0VtcHR5KCkpCkBAIC0xNTAsMTMgKzE1MCwxMyBAQAogICAgIH0KICAgICAvLyBUaGUgU1ZH
IHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8gY2xpcCBldmVyeXRoaW5nLCBpZiBjbGlwLXBhdGgg
ZG9lc24ndCBoYXZlIGEgY2hpbGQuCiAgICAgaWYgKGNsaXBQYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgY2xpcFBhdGguYWRkUmVjdChGbG9hdFJlY3QoKSk7CisgICAgICAgIGNsaXBQYXRoLmFkZFJl
Y3QoR3JhcGhpY3NSZWN0KCkpOwogICAgIGNvbnRleHQtPmNsaXBQYXRoKGNsaXBQYXRoLCBjbGlw
UnVsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBG
bG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCwg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHJlcGFpbnRSZWN0
LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2NsaXBwZXIuY29udGFp
bnMob2JqZWN0KSkKICAgICAgICAgbV9jbGlwcGVyLnNldChvYmplY3QsIG5ldyBDbGlwcGVyRGF0
YSk7CkBAIC0xNzIsOCArMTcyLDggQEAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFu
c2Zvcm07CiAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25U
b091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7
CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0u
bWFwUmVjdChyZXBhaW50UmVjdCk7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdl
dFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9y
UmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBh
YnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJlcGFpbnRSZWN0
KTsKKyAgICBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdl
QnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3Qs
IGFic29sdXRlVGFyZ2V0UmVjdCk7CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcERhdGEgJiYg
IWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghU1ZH
SW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJnZXRSZWN0LCBj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSwgQ29s
b3JTcGFjZURldmljZVJHQikpCkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJ
bWFnZShDbGlwcGVyRGF0YSogY2xpcHBlckRhdGEsIGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91
bmRpbmdCb3gpCitib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRv
TWFza0ltYWdlKENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YSwgY29uc3QgR3JhcGhpY3NSZWN0JiBv
YmplY3RCb3VuZGluZ0JveCkKIHsKICAgICBBU1NFUlQoY2xpcHBlckRhdGEpOwogICAgIEFTU0VS
VChjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJbWFnZSk7CkBAIC0yOTMsOSArMjkzLDkgQEAKICAgICB9
CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQo
Y29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9k
ZUF0UG9pbnQpCitib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250
ZW50KGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIG5vZGVBdFBvaW50KQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBub2RlQXRQb2lu
dDsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50ID0gbm9kZUF0UG9pbnQ7CiAgICAgaWYgKCFTVkdS
ZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIHBvaW50KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0zMTQsMTQgKzMxNCwxNCBAQAogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEludFBvaW50IGhpdFBvaW50OwogICAgICAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdChoaXRQb2ludCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+bm9kZUF0RmxvYXRQb2ludChI
aXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZHQ2xpcENvbnRlbnQpLCByZXN1bHQsIHBv
aW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCisgICAgICAgIGlmIChyZW5kZXJlci0+bm9kZUF0R3Jh
cGhpY3NQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZHQ2xpcENvbnRlbnQp
LCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIC8vIFJlc291cmNlIHdhcyBub3Qg
bGF5b3V0ZWQgeWV0LiBHaXZlIGJhY2sgdGhlIGJvdW5kaW5nQm94IG9mIHRoZSBvYmplY3QuCiAg
ICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQpAQCAtMzMxLDcgKzMzMSw3IEBACiAgICAgICAgIGNh
bGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsKIAogICAgIGlmIChzdGF0aWNfY2FzdDxT
VkdDbGlwUGF0aEVsZW1lbnQqPihub2RlKCkpLT5jbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAg
ICAgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGlu
Z0JveCgpOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwogICAgICAgICB0cmFu
c2Zvcm0udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRpbmdCb3gu
eSgpKTsKICAgICAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShvYmplY3RCb3VuZGluZ0Jv
eC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJH
cmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VDb250YWluZXIuaCIKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIHZpcnR1YWwgYm9v
bCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250
ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIHBv
c3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25l
ZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgp
OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJP
YmplY3QqKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBhZGRTdG9wcyhHcmFkaWVudERhdGEqLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3Rv
cD4mKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAKIAogICAg
IC8vIDEwLjMuMiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1lbnRzOiBodHRwOi8vd3d3LnczLm9yZy9U
Ui9DU1MyMS92aXN1ZGV0Lmh0bWwjaW5saW5lLXJlcGxhY2VkLXdpZHRoCiAgICAgYm9vbCBpc1Bl
cmNlbnRhZ2VJbnRyaW5zaWNTaXplID0gZmFsc2U7Ci0gICAgRmxvYXRTaXplIGludHJpbnNpY1Jh
dGlvOworICAgIEdyYXBoaWNzU2l6ZSBpbnRyaW5zaWNSYXRpbzsKICAgICBpZiAoY29udGVudFJl
bmRlcmVyKSB7CiAgICAgICAgIGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZUludHJpbnNpY1JhdGlv
SW5mb3JtYXRpb24oaW50cmluc2ljUmF0aW8sIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpOwog
ICAgICAgICBjb250ZW50UmVuZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXItPnN0eWxlKCk7CkBA
IC0zMjYsNyArMzI2LDcgQEAKIAogICAgIC8vIDEwLjYuMiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1l
bnRzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92aXN1ZGV0Lmh0bWwjaW5saW5lLXJlcGxh
Y2VkLWhlaWdodAogICAgIGJvb2wgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSA9IGZhbHNlOwot
ICAgIEZsb2F0U2l6ZSBpbnRyaW5zaWNSYXRpbzsKKyAgICBHcmFwaGljc1NpemUgaW50cmluc2lj
UmF0aW87CiAgICAgaWYgKGNvbnRlbnRSZW5kZXJlcikgewogICAgICAgICBjb250ZW50UmVuZGVy
ZXItPmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKGludHJpbnNpY1JhdGlvLCBpc1Bl
cmNlbnRhZ2VJbnRyaW5zaWNTaXplKTsKICAgICAgICAgY29udGVudFJlbmRlclN0eWxlID0gY29u
dGVudFJlbmRlcmVyLT5zdHlsZSgpOwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAgICAgaWYgKGNsaXBU
b1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENv
bnRhaW5lciwgcmVjdCk7CiAgICAgZWxzZQotICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5l
clF1YWQoRmxvYXRSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOworICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoR3JhcGhpY3NSZWN0
KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIAog
ICAgIHJldHVybiByZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAKICAgICBib29sIHByaW50aW5n
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0
UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHNldE1heGltYWxPdXRsaW5lU2l6ZShpbnQg
byk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI1LDcgKzQyNSw3IEBACiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBs
YXllciBoYXMgYSAtd2Via2l0LXBlcnNwZWN0aXZlLgogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRy
YW5zZm9ybSBoYXMgdGhlIHBlcnNwZWN0aXZlLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIGNvbnN0OwotICAgIEZsb2F0UG9p
bnQgcGVyc3BlY3RpdmVPcmlnaW4oKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IHBlcnNwZWN0
aXZlT3JpZ2luKCkgY29uc3Q7CiAgICAgYm9vbCBwcmVzZXJ2ZXMzRCgpIGNvbnN0IHsgcmV0dXJu
IHJlbmRlcmVyKCktPnN0eWxlKCktPnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHls
ZTNEUHJlc2VydmUzRDsgfQogICAgIGJvb2wgaGFzM0RUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zZm9ybSAmJiAhbV90cmFuc2Zvcm0tPmlzQWZmaW5lKCk7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzOSw3ICs1MzksNyBAQAogICAgIHJldHVybiAhcmVjdC5jb250YWlucyhyZWN0
Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpOwogfQogCi1ib29sIEhpdFRlc3RSZXN1bHQ6OmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSogbm9kZSwgY29uc3QgTGF5b3V0UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgSGl0VGVzdFJl
c3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIC8vIElmIGl0IGlzIG5vdCBhIHJlY3QtYmFzZWQgaGl0IHRlc3QsIHRoaXMgbWV0aG9kIGhh
cyB0byBiZSBuby1vcC4KICAgICAvLyBSZXR1cm4gZmFsc2UsIHNvIHRoZSBoaXQgdGVzdCBzdG9w
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgZmxhdHRlbldpdGhU
cmFuc2Zvcm0oKm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pOwogfQogCi1GbG9hdFBvaW50IFRyYW5z
Zm9ybVN0YXRlOjptYXBwZWRQb2ludCgpIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybVN0
YXRlOjptYXBwZWRQb2ludCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJhbnNm
b3JtKQogICAgICAgICByZXR1cm4gbV9sYXN0UGxhbmFyUG9pbnQ7CkBAIC05OCw3ICs5OCw3IEBA
CiAgICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0tPmludmVyc2UoKS5wcm9qZWN0UG9p
bnQobV9sYXN0UGxhbmFyUG9pbnQpOwogfQogCi1GbG9hdFF1YWQgVHJhbnNmb3JtU3RhdGU6Om1h
cHBlZFF1YWQoKSBjb25zdAorR3JhcGhpY3NRdWFkIFRyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFk
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pCiAgICAgICAgIHJl
dHVybiBtX2xhc3RQbGFuYXJRdWFkOwpAQCAtMTY0LDEyICsxNjQsMTIgQEAKICAgICBtX2FjY3Vt
dWxhdGluZ1RyYW5zZm9ybSA9IGZhbHNlOwogfQogCi1GbG9hdFBvaW50IEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZTo6bWFwcGVkUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY2N1
bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBvaW50
KTsKIH0KIAotRmxvYXRRdWFkIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUXVhZCgp
IGNvbnN0CitHcmFwaGljc1F1YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCku
cHJvamVjdFF1YWQobV9sYXN0UGxhbmFyUXVhZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNyArODAsNyBAQAogICAgIHZvaWQgc2V0TmV4dChQYXNzT3duUHRyPFNoYWRvd0RhdGE+IHNo
YWRvdykgeyBtX25leHQgPSBzaGFkb3c7IH0KIAogICAgIHZvaWQgYWRqdXN0UmVjdEZvclNoYWRv
dyhJbnRSZWN0JiwgaW50IGFkZGl0aW9uYWxPdXRsaW5lU2l6ZSA9IDApIGNvbnN0OwotICAgIHZv
aWQgYWRqdXN0UmVjdEZvclNoYWRvdyhGbG9hdFJlY3QmLCBpbnQgYWRkaXRpb25hbE91dGxpbmVT
aXplID0gMCkgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RSZWN0Rm9yU2hhZG93KEdyYXBoaWNzUmVj
dCYsIGludCBhZGRpdGlvbmFsT3V0bGluZVNpemUgPSAwKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBMYXlvdXRVbml0IG1feDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
VkdSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TVkdSZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAKICAgICByZWN0LnNldEhl
aWdodChyZWN0LmhlaWdodCgpIC0gc2hhZG93VG9wICsgc2hhZG93Qm90dG9tKTsKIH0KIAotdm9p
ZCBTaGFkb3dEYXRhOjphZGp1c3RSZWN0Rm9yU2hhZG93KEZsb2F0UmVjdCYgcmVjdCwgaW50IGFk
ZGl0aW9uYWxPdXRsaW5lU2l6ZSkgY29uc3QKK3ZvaWQgU2hhZG93RGF0YTo6YWRqdXN0UmVjdEZv
clNoYWRvdyhHcmFwaGljc1JlY3QmIHJlY3QsIGludCBhZGRpdGlvbmFsT3V0bGluZVNpemUpIGNv
bnN0CiB7CiAgICAgTGF5b3V0VW5pdCBzaGFkb3dMZWZ0ID0gMDsKICAgICBMYXlvdXRVbml0IHNo
YWRvd1JpZ2h0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3
IEBACiAgICAgcmV0dXJuIFJlbmRlclRleHQ6OndpZHRoKGZyb20sIGxlbmd0aCwgZm9udCwgeFBv
c2l0aW9uLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotdm9pZCBSZW5kZXJD
b21iaW5lVGV4dDo6YWRqdXN0VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25z
dCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0Cit2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjphZGp1
c3RUZXh0T3JpZ2luKEdyYXBoaWNzUG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEdyYXBoaWNzUmVj
dCYgYm94UmVjdCkgY29uc3QKIHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICB0ZXh0
T3JpZ2luLm1vdmUoYm94UmVjdC5oZWlnaHQoKSAvIDIgLSBjZWlsZihtX2NvbWJpbmVkVGV4dFdp
ZHRoKSAvIDIsIHN0eWxlKCktPmZvbnQoKS5waXhlbFNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDEx
IEBACiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKICAgICB2b2lkIGFic29sdXRl
UmVjdHNGb3JSYW5nZShWZWN0b3I8SW50UmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAs
IHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9
IGZhbHNlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+Jik7Ci0gICAgdm9pZCBhYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UXVhZD4m
LCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFY
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpOworICAgIHZvaWQgYWJzb2x1dGVRdWFk
c0ZvclJhbmdlKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAw
LCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQg
PSBmYWxzZSk7CiAKICAgICBlbnVtIENsaXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywgQ2xpcFRv
RWxsaXBzaXMgfTsKLSAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBD
bGlwcGluZ09wdGlvbiBvcHRpb24gPSBOb0NsaXBwaW5nKTsKKyAgICB2b2lkIGFic29sdXRlUXVh
ZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mLCBDbGlwcGluZ09wdGlvbiBvcHRpb24gPSBOb0NsaXBw
aW5nKTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmKTsKIApAQCAtODUsNyArODUsNyBAQAogICAgIHZpcnR1YWwgSW50UmVj
dCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBsaW5lc1Zpc3VhbE92ZXJm
bG93Qm91bmRpbmdCb3goKSBjb25zdDsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RSdW5PcmlnaW4o
KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGZpcnN0UnVuT3JpZ2luKCkgY29uc3Q7CiAgICAg
ZmxvYXQgZmlyc3RSdW5YKCkgY29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5ZKCkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksNyArNTU5LDcg
QEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFib3VuZHNDb21wdXRlZCkgewotICAgICAg
ICBsYXllckJvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKKyAgICAgICAgbGF5ZXJCb3VuZHMgPSBsYXllci0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29s
dXRlUXVhZChHcmFwaGljc1JlY3QobGF5ZXItPmxvY2FsQm91bmRpbmdCb3goKSkpLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7CiAgICAgICAgIC8vIEVtcHR5IHJlY3RzIG5ldmVyIGludGVyc2VjdCwg
YnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBvc2VzIG9mIG92ZXJsYXAgdGVzdGluZy4K
ICAgICAgICAgaWYgKGxheWVyQm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxheWVyQm91
bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CkBAIC02NDQsNyArNjQ0LDcgQEAKICAgICBJbnRS
ZWN0IGFic0JvdW5kczsKICAgICBpZiAob3ZlcmxhcE1hcCAmJiAhb3ZlcmxhcE1hcC0+aXNFbXB0
eSgpKSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIHRlc3RpbmcgZm9yIG92ZXJsYXAsIHdlIG9ubHkg
bmVlZCB0byBjb21wb3NpdGUgaWYgd2Ugb3ZlcmxhcCBzb21ldGhpbmcgdGhhdCBpcyBhbHJlYWR5
IGNvbXBvc2l0ZWQuCi0gICAgICAgIGFic0JvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgpKSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgYWJzQm91bmRzID0gbGF5ZXItPnJlbmRlcmVy
KCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5n
Qm94KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgICAgICAvLyBFbXB0eSByZWN0cyBu
ZXZlciBpbnRlcnNlY3QsIGJ1dCB3ZSBuZWVkIHRoZW0gdG8gZm9yIHRoZSBwdXJwb3NlcyBvZiBv
dmVybGFwIHRlc3RpbmcuCiAgICAgICAgIGlmIChhYnNCb3VuZHMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgYWJzQm91bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CkBAIC05NDUsNyArOTQ1LDcg
QEAKICAgICAgICAgbV9jbGlwTGF5ZXItPnNldFNpemUoZnJhbWVWaWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoZmFsc2UgLyogZXhjbHVkZSBzY3JvbGxiYXJzICovKS5zaXplKCkpOwogCiAgICAgICAg
IEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpOwot
ICAgICAgICBtX3Njcm9sbExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3Np
dGlvbi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkpKTsKKyAgICAgICAgbV9zY3JvbGxMYXllci0+
c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9z
aXRpb24ueSgpKSk7CiAgICAgICAgIHVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoKTsKICAg
ICB9CiB9CkBAIC05NTMsNyArOTUzLDcgQEAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpm
cmFtZVZpZXdEaWRTY3JvbGwoY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAg
IGlmIChtX3Njcm9sbExheWVyKQotICAgICAgICBtX3Njcm9sbExheWVyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkpKTsKKyAg
ICAgICAgbV9zY3JvbGxMYXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgtc2Nyb2xsUG9z
aXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7CiB9CiAKIFN0cmluZyBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmxheWVyVHJlZUFzVGV4dChib29sIHNob3dEZWJ1Z0luZm8pCkBAIC0xNjE3
LDggKzE2MTcsOCBAQAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgbV9yb290Q29udGVudExheWVy
LT5zZXROYW1lKCJSb290IHBsYXRmb3JtIik7CiAjZW5kaWYKLSAgICAgICAgbV9yb290Q29udGVu
dExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZShtX3JlbmRlclZpZXctPm1heFhMYXlvdXRPdmVyZmxv
dygpLCBtX3JlbmRlclZpZXctPm1heFlMYXlvdXRPdmVyZmxvdygpKSk7Ci0gICAgICAgIG1fcm9v
dENvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgbV9yb290
Q29udGVudExheWVyLT5zZXRTaXplKEdyYXBoaWNzU2l6ZShtX3JlbmRlclZpZXctPm1heFhMYXlv
dXRPdmVyZmxvdygpLCBtX3JlbmRlclZpZXctPm1heFlMYXlvdXRPdmVyZmxvdygpKSk7CisgICAg
ICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgpKTsKIAog
ICAgICAgICAvLyBOZWVkIHRvIGNsaXAgdG8gcHJldmVudCB0cmFuc2Zvcm1lZCBjb250ZW50IHNo
b3dpbmcgb3V0c2lkZSB0aGlzIGZyYW1lCiAgICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+c2V0
TWFza3NUb0JvdW5kcyh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBACiAgICAgewogICAgIH0KIAotICAg
IElubGluZUJveChSZW5kZXJPYmplY3QqIG9iaiwgRmxvYXRQb2ludCB0b3BMZWZ0LCBmbG9hdCBs
b2dpY2FsV2lkdGgsIGJvb2wgZmlyc3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAorICAgIElubGlu
ZUJveChSZW5kZXJPYmplY3QqIG9iaiwgR3JhcGhpY3NQb2ludCB0b3BMZWZ0LCBmbG9hdCBsb2dp
Y2FsV2lkdGgsIGJvb2wgZmlyc3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAogICAgICAgICAgICAg
ICBib29sIGRpcnR5LCBib29sIGV4dHJhY3RlZCwgYm9vbCBpc0hvcml6b250YWwsIElubGluZUJv
eCogbmV4dCwgSW5saW5lQm94KiBwcmV2LCBJbmxpbmVGbG93Qm94KiBwYXJlbnQpCiAgICAgICAg
IDogbV9uZXh0KG5leHQpCiAgICAgICAgICwgbV9wcmV2KHByZXYpCkBAIC0yMzIsMTEgKzIzMiwx
MSBAQAogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgpOyB9CiAgICAg
ZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQogCi0gICAgY29uc3Qg
RmxvYXRQb2ludCYgdG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQorICAgIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQ7IH0K
IAogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBsb2dp
Y2FsV2lkdGgoKSA6IGxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbEhlaWdodCgpIDogbG9naWNhbFdpZHRo
KCk7IH0KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUod2lkdGgo
KSwgaGVpZ2h0KCkpOyB9CisgICAgR3JhcGhpY3NTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJ
bnRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsgfQogICAgIGZsb2F0IHJpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQogICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KIApAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgLy8gVGhl
IGxvZ2ljYWwgaGVpZ2h0IGlzIG91ciBleHRlbnQgaW4gdGhlIGJsb2NrIGZsb3cgZGlyZWN0aW9u
LCBpLmUuLCBoZWlnaHQgZm9yIGhvcml6b250YWwgdGV4dCBhbmQgd2lkdGggZm9yIHZlcnRpY2Fs
IHRleHQuCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBGbG9h
dFJlY3QgbG9naWNhbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8g
SW50UmVjdChtX3RvcExlZnQueCgpLCBtX3RvcExlZnQueSgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9n
aWNhbEhlaWdodCgpKSA6IEludFJlY3QobV90b3BMZWZ0LnkoKSwgbV90b3BMZWZ0LngoKSwgbV9s
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7IH0KKyAgICBHcmFwaGljc1JlY3QgbG9naWNh
bEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gSW50UmVjdChtX3Rv
cExlZnQueCgpLCBtX3RvcExlZnQueSgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgp
KSA6IEludFJlY3QobV90b3BMZWZ0LnkoKSwgbV90b3BMZWZ0LngoKSwgbV9sb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQoKSk7IH0KIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3Qo
KS0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIG1fZmlyc3RMaW5lLCBpc0hvcml6b250
YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmlu
Z0xpbmUpOyB9CiAgICAgdmlydHVhbCBpbnQgbGluZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGJv
eE1vZGVsT2JqZWN0KCktPmxpbmVIZWlnaHQobV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8g
SG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7
IH0KQEAgLTMxNiw5ICszMTYsOSBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBG
bG9hdFBvaW50IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKLSAgICB2b2lkIGZsaXBGb3JX
cml0aW5nTW9kZShGbG9hdFJlY3QmKTsKLSAgICBGbG9hdFBvaW50IGZsaXBGb3JXcml0aW5nTW9k
ZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgR3JhcGhpY3NQb2ludCBsb2NhdGlvbkluY2x1ZGlu
Z0ZsaXBwaW5nKCk7CisgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0Jik7
CisgICAgR3JhcGhpY3NQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgR3JhcGhpY3NQb2lu
dCYpOwogICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKEludFJlY3QmKTsKICAgICBJbnRQb2lu
dCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgSW50UG9pbnQmKTsKIApAQCAtMzM0LDcgKzMzNCw3
IEBACiBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVyOwogCi0gICAgRmxvYXRQ
b2ludCBtX3RvcExlZnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX3RvcExlZnQ7CiAgICAgZmxvYXQg
bV9sb2dpY2FsV2lkdGg7CiAgICAgCiAgICAgLy8gU29tZSBvZiB0aGVzZSBiaXRzIGFyZSBhY3R1
YWxseSBmb3Igc3ViY2xhc3NlcyBhbmQgbW92ZWQgaGVyZSB0byBjb21wYWN0IHRoZSBzdHJ1Y3R1
cmVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5o
CShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFNp
emU7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3MgR3JhcGhpY3NTaXplOwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7CkBAIC03MCw4ICs3MCw4IEBACiAK
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFBvaW50Jik7CiBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRSZWN0Jik7Ci1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7Ci1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVtPgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgVmVjdG9yPEl0ZW0+JiB2ZWN0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5MDky
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjIwLDggKzIyMCw4IEBACiAJCTBGRDMwODBGMTE3Q0Y3RTcwMEE3
OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDMwODBEMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJh
c2UuaCAqLzsgfTsKIAkJMEZEMzA4RDUxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDhE
MzExN0QxNjg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCAqLzsgfTsKIAkJMEZEMzA4RDYx
MTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMzA4RDQxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRl
cklGcmFtZS5oICovOyB9OwotCQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ3MjM4
MDBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZENzIzODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZs
b2F0UXVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ3MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLzsgfTsKKwkJMEZE
NzIzODIwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8q
IEdyYXBoaWNzUXVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODEwRUM4
QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgKi87IH07CiAJCTBGRjUwMjVCMTAyQkE5
MDEwMDY2RjM5QSAvKiBET01TdHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1MDI1OTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVN
ZWRpYS5oICovOyB9OwogCQkwRkY1MDI1QzEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRp
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjUw
MjVBMTAyQkE5MDEwMDY2RjM5QSAvKiBET01TdHlsZU1lZGlhLm1tICovOyB9OwogCQkwRkY1MDI2
MzEwMkJBOTJDMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1MDI2MjEwMkJBOTJCMDA2NkYz
OUEgLyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggKi87IH07CkBAIC00MzI4LDkgKzQzMjgsOSBA
QAogCQlCMjY2Q0Q0RDBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEIwQzNBRUM2
NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJQjI2NkNENEUwQzNBRUM2
NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY2Q0Q0QzBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNl
cHRpb24uaCAqLzsgfTsKIAkJQjI3NTM1NTgwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0
aW9uTWF0cml4Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cu
Y3BwICovOyB9OwotCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJC
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovOyB9OwotCQlCMjc1MzU1QTBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UmVjdENHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6
ZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi87IH07CisJCUIyNzUz
NTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzUG9pbnRDRy5jcHAgKi87IH07CisJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1JlY3RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0Q0cu
Y3BwICovOyB9OworCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1
MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1
NUUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdl
Q0cuY3BwICovOyB9OwogCQlCMjc1MzU1RjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VD
Ry5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi87IH07CiAJCUIyNzUz
NTYwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRQb2ludENHLmNwcCAqLzsgfTsKQEAgLTQzNDEsMTIgKzQzNDEsMTIgQEAKIAkJQjI3NTM1NjUw
QjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQ
REZEb2N1bWVudEltYWdlLmggKi87IH07CiAJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBD
b2xvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovOyB9OwogCQlCMjc1MzU2NzBC
MDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNzUzNTY4MEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmNwcCAqLzsgfTsKLQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNC
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjI3NTM1NkEwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmNwcCAqLzsgfTsKLQkJQjI3
NTM1NkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUIyNzUzNTZDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0UwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0U2l6ZS5jcHAgKi87IH07Ci0JCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMjc1MzU2ODBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NQb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2lu
dC5jcHAgKi87IH07CisJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUz
QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyNzUzNTZBMEIwNTM4MTQwMDJDRTY0RiAv
KiBHcmFwaGljc1JlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1M0MwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdC5jcHAgKi87
IH07CisJCUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNEMEIwNTM4MTQw
MDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NT
aXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTNFMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemUuY3BwICovOyB9OworCQlCMjc1
MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQjI3NTM1NkUwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJY29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjI3NTM1NkYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZS5jcHAgKi87IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1
NDIwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQzNTcsOSArNDM1Nyw5IEBACiAJCUIyNzUzNTc1MEIw
NTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc2
MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNp
emVIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQjI3NTM1NzcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEEwQjA1MzgxNDAwMkNFNjRG
IC8qIENvbG9yTWFjLm1tICovOyB9OwotCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tICovOyB9Owot
CQlCMjc1MzU3OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEMwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UmVjdE1hYy5tbSAqLzsgfTsKLQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0U2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi87
IH07CisJCUIyNzUzNTc4MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEIwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRNYWMubW0gKi87IH07CisJCUIyNzUzNTc5MEIw
NTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogR3Jh
cGhpY3NSZWN0TWFjLm1tICovOyB9OworCQlCMjc1MzU3QTBCMDUzODE0MDAyQ0U2NEYgLyogR3Jh
cGhpY3NTaXplTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSAqLzsg
fTsKIAkJQjI3NTM1N0IwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEUwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlTWFjLm1tICovOyB9OwogCQlCMjc1MzU3QzBCMDUzODE0MDAyQ0U2NEYgLyog
SW50UG9pbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi87IH07CiAJ
CUIyNzUzNTdEMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRG
IC8qIEludFJlY3RNYWMubW0gKi87IH07CkBAIC00NDgwLDggKzQ0ODAsOCBAQAogCQlCMkNCOTI2
MjBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNUUwQjVCREEwMjAwOUJB
QTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSAqLzsgfTsKIAkJQjJDQjkyNjMwQjVCREEw
MjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3OCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi87IH07CiAJCUIyQ0I5MjY0MEI1QkRBMDIw
MDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8q
IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW0gKi87IH07Ci0JCUIyRTI3QzlGMEIwRjJCMDkw
MEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJFMjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQz
RC5jcHAgKi87IH07Ci0JCUIyRTI3Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlF
MEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyog
R3JhcGhpY3NQb2ludDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBHcmFwaGljc1BvaW50M0QuY3Bw
ICovOyB9OworCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RTBC
MEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJFNEVDOTcwRDAwQzIyQjAwNDMyNjQzIC8q
IFNWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkU0RUM5NDBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCAqLzsg
fTsKIAkJQjJFNEVDOTgwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFNEVDOTUwRDAwQzIyQjAw
NDMyNjQzIC8qIFNWR1pvb21FdmVudC5oICovOyB9OwogCQlCMkVEOTc3MTBCMUY1NUNFMDAyNTdE
MEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29u
dGV4dENHLmNwcCAqLzsgfTsKQEAgLTY1OTUsOCArNjU5NSw4IEBACiAJCTBGRDMwODBEMTE3Q0Y3
RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyRnJhbWVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRDMwOEQzMTE3RDE2ODQwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVySUZyYW1lLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMzA4RDQxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJJRnJhbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZs
b2F0UXVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFF1YWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8q
IEZsb2F0UXVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9h
dFF1YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MDBFQzhCRDkz
MDBDQTVERDcgLyogR3JhcGhpY3NRdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzUXVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4
MTBFQzhCRDkzMDBDQTVERDcgLyogR3JhcGhpY3NRdWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzUXVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRjUwMjU5MTAyQkE5MDEwMDY2RjM5QSAvKiBET01TdHlsZU1lZGlhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0eWxlTWVkaWEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNTAyNUExMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxl
TWVkaWEubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TdHls
ZU1lZGlhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY1MDI2MjEwMkJBOTJC
MDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTA5MTQsOSArMTA5MTQsOSBAQAogCQlCMjY2Q0Q0QjBDM0FFQzY1MDBFQjA4
RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTU1ZHRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25N
YXRyaXhDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNm
b3JtYXRpb25NYXRyaXhDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUz
NTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0Q0cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRTaXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZs
b2F0U2l6ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1MkIwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NQb2ludENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdENHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1JlY3RDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1NpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Mjc1MzUzMDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFBv
aW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5MjcsMTIgKzEwOTI3
LDEyIEBACiAJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQREZEb2N1bWVudEltYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBD
b2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9h
dFBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0IwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZsb2F0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0Mw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyNzUzNTNFMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0U2l6ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhp
Y3NQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTNCMEIwNTM4
MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHcmFwaGljc1BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
NzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzUmVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3Jh
cGhpY3NTaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc1NpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzRjBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHcmFwaGljc1NpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3
NTM1NDAwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEljb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDEw
QjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUz
NTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTQzLDkg
KzEwOTQzLDkgQEAKIAkJQjI3NTM1NDcwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFNpemUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRTaXplSGFzaC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0QTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFBvaW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEZsb2F0UG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIy
NzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmxvYXRSZWN0TWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0U2l6ZU1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1NEIwQjA1MzgxNDAwMkNF
NjRGIC8qIEdyYXBoaWNzUG9pbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gR3JhcGhpY3NQb2ludE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdE1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc1JlY3RNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAv
KiBHcmFwaGljc1NpemVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gR3JhcGhpY3NTaXplTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Mjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyNzUzNTRGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbnRQb2ludE1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFJlY3RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW50
UmVjdE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMDcwLDggKzExMDcw
LDggQEAKIAkJQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5j
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVt
ZW50SW5zdGFuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjVGMEI1
QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01T
VkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAv
KiBGbG9hdFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0
UG9pbnQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkUyN0M5RDBCMEYyQjA5
MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmFwaGljc1BvaW50M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1BvaW50M0QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pv
b21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHWm9v
bUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTUwRDAwQzIy
QjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRF
Qzk2MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBTVkdab29tRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc4NzksMTQgKzE3ODc5LDE0IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKLQkJCQlC
Mjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKLQkJCQlCMjc1
MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLAotCQkJCUIyNzUzNTJE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1
NkNGMTAwMjFFQjVEIC8qIEdyYWRpZW50Q0cuY3BwICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkw
MEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCAqLywKIAkJCQlCMkVEOTc3MDBCMUY1
NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCTkzNDkwN0UzMTI1
QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCUE4MEQ2NzA3MEU5
RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAor
CQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovLAor
CQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RDRy5jcHAgKi8sCisJ
CQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCAqLywKIAkJ
CQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCiAJCQkJ
MjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKIAkJ
CQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKQEAg
LTE3OTE1LDkgKzE3OTE1LDYgQEAKIAkJCQkzN0MyMzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29t
cGxleFRleHRDb250cm9sbGVyLmggKi8sCiAJCQkJMzdDMjM4MUYxMDk4Qzg0MjAwRUY5RjcyIC8q
IENvbXBsZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcCAqLywKIAkJCQkzN0MyMzgyMDEwOThDODQy
MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQuY3BwICovLAotCQkJCUIy
NzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tICovLAotCQkJCUIyNzUz
NTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8sCi0JCQkJQjI3NTM1NEQw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZU1hYy5tbSAqLywKIAkJCQlCMkFGRkM3NDBEMDBB
NUMxMDAzMDA3NEQgLyogRm9udENhY2hlTWFjLm1tICovLAogCQkJCTM3QzIzNjBBMTA5N0VERUQw
MEVGOUY3MiAvKiBGb250Q29tcGxleFRleHRNYWMuY3BwICovLAogCQkJCUIyQUZGQzc1MEQwMEE1
QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLywKQEAgLTE3OTI2LDYg
KzE3OTIzLDkgQEAKIAkJCQlCMkFGRkM3QjBEMDBBNUMxMDAzMDA3NEQgLyogR2x5cGhQYWdlVHJl
ZU5vZGVNYWMuY3BwICovLAogCQkJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGlj
c0NvbnRleHQzRE1hYy5tbSAqLywKIAkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3Jh
cGhpY3NDb250ZXh0TWFjLm1tICovLAorCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1BvaW50TWFjLm1tICovLAorCQkJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1JlY3RNYWMubW0gKi8sCisJCQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzU2l6ZU1hYy5tbSAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNv
bk1hYy5tbSAqLywKIAkJCQlCMjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMubW0g
Ki8sCiAJCQkJQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tICovLApA
QCAtMTc5NzAsMTYgKzE3OTcwLDYgQEAKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyog
Q29sb3JTcGFjZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJy
YXkuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmgg
Ki8sCi0JCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLAot
CQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCi0JCQkJQjJF
MjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgKi8sCi0JCQkJQjJFMjdD
OUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovLAotCQkJCTBGRDcyMzgxMEVD
OEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuY3BwICovLAotCQkJCTBGRDcyMzgwMEVDOEJEOTMw
MENBNURENyAvKiBGbG9hdFF1YWQuaCAqLywKLQkJCQlCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYg
LyogRmxvYXRSZWN0LmNwcCAqLywKLQkJCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0LmggKi8sCi0JCQkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5j
cHAgKi8sCi0JCQkJQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oICovLAog
CQkJCUIyQzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCAqLywKIAkJCQlCMkMzREE1
MDBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAogCQkJCUJDQjkyRDRFMTI5MzU1MEIwMEM4
Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLywKQEAgLTE4MDIxLDYgKzE4MDExLDE2IEBACiAJCQkJ
MEY1ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBG
NTgwQjBBMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBC
MEIwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKKwkJCQlCMjc1
MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5jcHAgKi8sCisJCQkJQjI3NTM1
M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuaCAqLywKKwkJCQlCMkUyN0M5RDBC
MEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmNwcCAqLywKKwkJCQlCMkUyN0M5RTBC
MEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi8sCisJCQkJMEZENzIzODEwRUM4
QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgKi8sCisJCQkJMEZENzIzODAwRUM4QkQ5
MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oICovLAorCQkJCUIyNzUzNTNDMEIwNTM4MTQwMDJD
RTY0RiAvKiBHcmFwaGljc1JlY3QuY3BwICovLAorCQkJCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1JlY3QuaCAqLywKKwkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NTaXplLmNwcCAqLywKKwkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogR3Jh
cGhpY3NTaXplLmggKi8sCiAJCQkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNz
VHlwZXMuY3BwICovLAogCQkJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggKi8sCiAJCQkJNzdBMTdBN0ExMkYyODkwQjAwNEUwMkY2IC8qIEdyYXBoaWNzVHlwZXMz
RC5oICovLApAQCAtMjExODAsMTEgKzIxMTgwLDExIEBACiAJCQkJNDlFRUNERTYxMDUwM0MyNDAw
MDk5RkFCIC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCQzVEODIxMzhC
NEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNC
QUEwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICov
LAotCQkJCUIyRTI3Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGRDcyMzgyMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCBp
biBIZWFkZXJzICovLAotCQkJCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGlj
c1BvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyog
R3JhcGhpY3NQb2ludDNELmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ3MjM4MjBFQzhCRDkzMDBD
QTVERDcgLyogR3JhcGhpY3NRdWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2QjBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2
RDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNjIyODc4NDBCNERCMzIyMDAwQzM0REYgLyogRm9jdXNEaXJlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVh
ZGVycyAqLywKQEAgLTI0MDg4LDE3ICsyNDA4OCwxNyBAQAogCQkJCUE4Q0ZGMDREMEExNTRGMDkw
MDBBNDIzNCAvKiBGaXhlZFRhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVD
REU1MTA1MDNDMjQwMDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNkVCQzVEODExMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNE
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnRNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkwRkQ3MjM4MzBFQzhCRDkz
MDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTZBMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1
NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUIyNzUzNTc5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gaW4gU291cmNlcyAq
LywKLQkJCQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU3QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXpl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzUG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3
QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1OTBC
MDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUIyNzUzNTc4MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZENzIzODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU2QTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NS
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1JlY3RDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU3OTBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NkMw
QjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
Mjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRy
b2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDYW52YXNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBACiAgICAgewogICAgIH0K
IAotICAgIHZpcnR1YWwgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29u
c3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGNhbnZhc0NoYW5n
ZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGNoYW5nZWRSZWN0KTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopOwogICAg
IHZpcnR1YWwgdm9pZCBjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50
OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNsYXNzIEdyYWRpZW50OwogCiBlbnVtIENTU0dyYWRp
ZW50VHlwZSB7IENTU0xpbmVhckdyYWRpZW50LCBDU1NSYWRpYWxHcmFkaWVudCB9OwpAQCAtODAs
NyArODAsNyBAQAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGll
bnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpID0gMDsKIAogICAgIC8vIFJlc29sdmUg
cG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRl
RW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0
eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgSW50U2l6ZSYpOworICAgIEdyYXBo
aWNzUG9pbnQgY29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZl
VmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNp
emUmKTsKICAgICAKICAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsMTIgKzE0MiwxMiBAQAogICAgIGZsb2F0IGdyYWRpZW50TGVuZ3RoID0gMDsKICAgICBib29s
IGNvbXB1dGVkR3JhZGllbnRMZW5ndGggPSBmYWxzZTsKICAgICAKLSAgICBGbG9hdFBvaW50IGdy
YWRpZW50U3RhcnQgPSBncmFkaWVudC0+cDAoKTsKLSAgICBGbG9hdFBvaW50IGdyYWRpZW50RW5k
OworICAgIEdyYXBoaWNzUG9pbnQgZ3JhZGllbnRTdGFydCA9IGdyYWRpZW50LT5wMCgpOworICAg
IEdyYXBoaWNzUG9pbnQgZ3JhZGllbnRFbmQ7CiAgICAgaWYgKGlzTGluZWFyR3JhZGllbnQoKSkK
ICAgICAgICAgZ3JhZGllbnRFbmQgPSBncmFkaWVudC0+cDEoKTsKICAgICBlbHNlIGlmIChpc1Jh
ZGlhbEdyYWRpZW50KCkpCi0gICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEZs
b2F0U2l6ZShncmFkaWVudC0+ZW5kUmFkaXVzKCksIDApOworICAgICAgICBncmFkaWVudEVuZCA9
IGdyYWRpZW50U3RhcnQgKyBHcmFwaGljc1NpemUoZ3JhZGllbnQtPmVuZFJhZGl1cygpLCAwKTsK
ICAgICAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7CiAg
ICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKQEAg
LTE2MSw3ICsxNjEsNyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoQ1NTUHJpbWl0aXZlVmFsdWU6
OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpIHsKICAgICAgICAgICAgICAgICBmbG9hdCBsZW5ndGgg
PSBzdG9wLm1fcG9zaXRpb24tPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlLCByb290U3R5bGUs
IHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICAgICAgICAgIGlmICghY29tcHV0ZWRH
cmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRT
aXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7CisgICAgICAgICAgICAgICAgICAgIEdy
YXBoaWNzU2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50RW5kKTsKICAg
ICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlhZ29uYWxM
ZW5ndGgoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zm
c2V0ID0gKGdyYWRpZW50TGVuZ3RoID4gMCkgPyBsZW5ndGggLyBncmFkaWVudExlbmd0aCA6IDA7
CkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgIC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhl
IGNvcm5lcnMgb2YgdGhlIGJveC4KICAgICAgICAgICAgIGlmIChpc1JhZGlhbEdyYWRpZW50KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3Jh
ZGllbnRFbmQpOworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUgZ3JhZGllbnRTaXpl
KGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7CiAgICAgICAgICAgICAgICAgICAgIGdyYWRp
ZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzEwLDEwICszMTAsMTAgQEAKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKICAgICAgICAgICAgICAgICBz
dG9wc1tpXS5vZmZzZXQgPSAoc3RvcHNbaV0ub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2NhbGU7
CiAKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcDAgPSBncmFkaWVudC0+cDAoKTsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgcDEgPSBncmFkaWVudC0+cDEoKTsKLSAgICAgICAgICAgIGdyYWRpZW50
LT5zZXRQMChGbG9hdFBvaW50KHAwLngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngoKSAtIHAwLngo
KSksIHAwLnkoKSArIGZpcnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAwLnkoKSkpKTsKLSAgICAgICAg
ICAgIGdyYWRpZW50LT5zZXRQMShGbG9hdFBvaW50KHAxLngoKSArIChsYXN0T2Zmc2V0IC0gMSkg
KiAocDEueCgpIC0gcDAueCgpKSwgcDEueSgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS55KCkg
LSBwMC55KCkpKSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHAwID0gZ3JhZGllbnQtPnAw
KCk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHAxID0gZ3JhZGllbnQtPnAxKCk7CisgICAg
ICAgICAgICBncmFkaWVudC0+c2V0UDAoR3JhcGhpY3NQb2ludChwMC54KCkgKyBmaXJzdE9mZnNl
dCAqIChwMS54KCkgLSBwMC54KCkpLCBwMC55KCkgKyBmaXJzdE9mZnNldCAqIChwMS55KCkgLSBw
MC55KCkpKSk7CisgICAgICAgICAgICBncmFkaWVudC0+c2V0UDEoR3JhcGhpY3NQb2ludChwMS54
KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLngoKSAtIHAwLngoKSksIHAxLnkoKSArIChsYXN0
T2Zmc2V0IC0gMSkgKiAocDEueSgpIC0gcDAueSgpKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlz
UmFkaWFsR3JhZGllbnQoKSkgewogICAgICAgICAgICAgLy8gUmF0aGVyIHRoYW4gc2NhbGluZyB0
aGUgcG9pbnRzIDwgMCwgd2UgdHJ1bmNhdGUgdGhlbSwgc28gb25seSBzY2FsZSBhY2NvcmRpbmcg
dG8gdGhlIGxhcmdlc3QgcG9pbnQuCiAgICAgICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IDA7
CkBAIC0zOTUsOSArMzk1LDkgQEAKICAgICB9CiB9CiAKLUZsb2F0UG9pbnQgQ1NTR3JhZGllbnRW
YWx1ZTo6Y29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCwgQ1NTUHJpbWl0
aXZlVmFsdWUqIHNlY29uZCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQorR3JhcGhpY3NQb2ludCBDU1NHcmFkaWVudFZhbHVl
Ojpjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0LCBDU1NQcmltaXRpdmVW
YWx1ZSogc2Vjb25kLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUs
IGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgRmxvYXRQb2ludCByZXN1bHQ7CisgICAgR3Jh
cGhpY3NQb2ludCByZXN1bHQ7CiAKICAgICBpZiAoZmlyc3QpCiAgICAgICAgIHJlc3VsdC5zZXRY
KHBvc2l0aW9uRnJvbVZhbHVlKGZpcnN0LCBzdHlsZSwgcm9vdFN0eWxlLCBzaXplLCB0cnVlKSk7
CkBAIC00NzMsNyArNDczLDcgQEAKIH0KIAogLy8gQ29tcHV0ZSB0aGUgZW5kcG9pbnRzIHNvIHRo
YXQgYSBncmFkaWVudCBvZiB0aGUgZ2l2ZW4gYW5nbGUgY292ZXJzIGEgYm94IG9mIHRoZSBnaXZl
biBzaXplLgotc3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBj
b25zdCBJbnRTaXplJiBzaXplLCBGbG9hdFBvaW50JiBmaXJzdFBvaW50LCBGbG9hdFBvaW50JiBz
ZWNvbmRQb2ludCkKK3N0YXRpYyB2b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9hdCBhbmdsZURl
ZywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NQb2ludCYgZmlyc3RQb2ludCwgR3JhcGhp
Y3NQb2ludCYgc2Vjb25kUG9pbnQpCiB7CiAgICAgYW5nbGVEZWcgPSBmbW9kZihhbmdsZURlZywg
MzYwKTsKICAgICBpZiAoYW5nbGVEZWcgPCAwKQpAQCAtNTEyLDcgKzUxMiw3IEBACiAgICAgLy8g
Q29tcHV0ZSBzdGFydCBjb3JuZXIgcmVsYXRpdmUgdG8gY2VudGVyLgogICAgIGZsb2F0IGhhbGZI
ZWlnaHQgPSBzaXplLmhlaWdodCgpIC8gMjsKICAgICBmbG9hdCBoYWxmV2lkdGggPSBzaXplLndp
ZHRoKCkgLyAyOwotICAgIEZsb2F0UG9pbnQgZW5kQ29ybmVyOworICAgIEdyYXBoaWNzUG9pbnQg
ZW5kQ29ybmVyOwogICAgIGlmIChhbmdsZURlZyA8IDkwKQogICAgICAgICBlbmRDb3JuZXIuc2V0
KGhhbGZXaWR0aCwgaGFsZkhlaWdodCk7CiAgICAgZWxzZSBpZiAoYW5nbGVEZWcgPCAxODApCkBA
IC01MzksOCArNTM5LDggQEAKICAgICAKICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gcmVu
ZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogCi0g
ICAgRmxvYXRQb2ludCBmaXJzdFBvaW50OwotICAgIEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBmaXJzdFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgc2Vjb25kUG9p
bnQ7CiAgICAgaWYgKG1fYW5nbGUpIHsKICAgICAgICAgZmxvYXQgYW5nbGUgPSBtX2FuZ2xlLT5n
ZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKICAgICAgICAgZW5kUG9p
bnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CkBAIC02
NDksMTkgKzY0OSwxOSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBmbG9hdCBk
aXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFNp
emUmIHNpemUsIEZsb2F0UG9pbnQmIGNvcm5lcikKK3N0YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xv
c2VzdENvcm5lcihjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1NpemUmIHNp
emUsIEdyYXBoaWNzUG9pbnQmIGNvcm5lcikKIHsKLSAgICBGbG9hdFBvaW50IHRvcExlZnQ7Ci0g
ICAgZmxvYXQgdG9wTGVmdERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSB0b3BMZWZ0KS5kaWFnb25h
bExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdDsKKyAgICBmbG9hdCB0b3BMZWZ0
RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcExlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAK
LSAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHNpemUud2lkdGgoKSwgMCk7Ci0gICAgZmxvYXQgdG9w
UmlnaHREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gdG9wUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7
CisgICAgR3JhcGhpY3NQb2ludCB0b3BSaWdodChzaXplLndpZHRoKCksIDApOworICAgIGZsb2F0
IHRvcFJpZ2h0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcFJpZ2h0KS5kaWFnb25hbExl
bmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KDAsIHNpemUuaGVpZ2h0KCkpOwot
ICAgIGZsb2F0IGJvdHRvbUxlZnREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gYm90dG9tTGVmdCku
ZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1BvaW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5o
ZWlnaHQoKSk7CisgICAgZmxvYXQgYm90dG9tTGVmdERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAg
LSBib3R0b21MZWZ0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21S
aWdodChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbVJpZ2h0
RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbVJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOwor
ICAgIEdyYXBoaWNzUG9pbnQgYm90dG9tUmlnaHQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0
b21SaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAgIGNvcm5lciA9IHRvcExlZnQ7CiAgICAg
ZmxvYXQgbWluRGlzdGFuY2UgPSB0b3BMZWZ0RGlzdGFuY2U7CkBAIC02ODIsMTkgKzY4MiwxOSBA
QAogICAgIHJldHVybiBtaW5EaXN0YW5jZTsKIH0KIAotc3RhdGljIGZsb2F0IGRpc3RhbmNlVG9G
YXJ0aGVzdENvcm5lcihjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFNpemUmIHNpemUs
IEZsb2F0UG9pbnQmIGNvcm5lcikKK3N0YXRpYyBmbG9hdCBkaXN0YW5jZVRvRmFydGhlc3RDb3Ju
ZXIoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NTaXplJiBzaXplLCBHcmFw
aGljc1BvaW50JiBjb3JuZXIpCiB7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0OwotICAgIGZsb2F0
IHRvcExlZnREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gdG9wTGVmdCkuZGlhZ29uYWxMZW5ndGgo
KTsKKyAgICBHcmFwaGljc1BvaW50IHRvcExlZnQ7CisgICAgZmxvYXQgdG9wTGVmdERpc3RhbmNl
ID0gR3JhcGhpY3NTaXplKHAgLSB0b3BMZWZ0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxv
YXRQb2ludCB0b3BSaWdodChzaXplLndpZHRoKCksIDApOwotICAgIGZsb2F0IHRvcFJpZ2h0RGlz
dGFuY2UgPSBGbG9hdFNpemUocCAtIHRvcFJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdy
YXBoaWNzUG9pbnQgdG9wUmlnaHQoc2l6ZS53aWR0aCgpLCAwKTsKKyAgICBmbG9hdCB0b3BSaWdo
dERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSB0b3BSaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsK
IAotICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdCgwLCBzaXplLmhlaWdodCgpKTsKLSAgICBmbG9h
dCBib3R0b21MZWZ0RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbUxlZnQpLmRpYWdvbmFs
TGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQb2ludCBib3R0b21MZWZ0KDAsIHNpemUuaGVpZ2h0KCkp
OworICAgIGZsb2F0IGJvdHRvbUxlZnREaXN0YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gYm90dG9t
TGVmdCkuZGlhZ29uYWxMZW5ndGgoKTsKIAotICAgIEZsb2F0UG9pbnQgYm90dG9tUmlnaHQoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNl
ID0gRmxvYXRTaXplKHAgLSBib3R0b21SaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFw
aGljc1BvaW50IGJvdHRvbVJpZ2h0KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAg
ZmxvYXQgYm90dG9tUmlnaHREaXN0YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gYm90dG9tUmlnaHQp
LmRpYWdvbmFsTGVuZ3RoKCk7CiAKICAgICBjb3JuZXIgPSB0b3BMZWZ0OwogICAgIGZsb2F0IG1h
eERpc3RhbmNlID0gdG9wTGVmdERpc3RhbmNlOwpAQCAtNzE3LDcgKzcxNyw3IEBACiAKIC8vIENv
bXB1dGUgaG9yaXpvbnRhbCByYWRpdXMgb2YgZWxsaXBzZSB3aXRoIGNlbnRlciBhdCAwLDAgd2hp
Y2ggcGFzc2VzIHRocm91Z2ggcCwgYW5kIGhhcwogLy8gd2lkdGgvaGVpZ2h0IGdpdmVuIGJ5IGFz
cGVjdFJhdGlvLgotc3RhdGljIGlubGluZSBmbG9hdCBob3Jpem9udGFsRWxsaXBzZVJhZGl1cyhj
b25zdCBGbG9hdFNpemUmIHAsIGZsb2F0IGFzcGVjdFJhdGlvKQorc3RhdGljIGlubGluZSBmbG9h
dCBob3Jpem9udGFsRWxsaXBzZVJhZGl1cyhjb25zdCBHcmFwaGljc1NpemUmIHAsIGZsb2F0IGFz
cGVjdFJhdGlvKQogewogICAgIC8vIHheMi9hXjIgKyB5XjIvYl4yID0gMQogICAgIC8vIGEvYiA9
IGFzcGVjdFJhdGlvLCBiID0gYS9hc3BlY3RSYXRpbwpAQCAtNzMyLDEzICs3MzIsMTMgQEAKICAg
ICAKICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFBv
aW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVu
ZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwgc2l6ZSk7CisgICAgR3JhcGhpY3NQb2ludCBmaXJz
dFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwg
cmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwgc2l6ZSk7CiAgICAgaWYgKCFtX2ZpcnN0WCkK
ICAgICAgICAgZmlyc3RQb2ludC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwogICAgIGlmICghbV9m
aXJzdFkpCiAgICAgICAgIGZpcnN0UG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7CiAKLSAg
ICBGbG9hdFBvaW50IHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQo
KSwgbV9zZWNvbmRZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsK
KyAgICBHcmFwaGljc1BvaW50IHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25k
WC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBz
aXplKTsKICAgICBpZiAoIW1fc2Vjb25kWCkKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXpl
LndpZHRoKCkgLyAyKTsKICAgICBpZiAoIW1fc2Vjb25kWSkKQEAgLTgxNCw3ICs4MTQsNyBAQAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zZXN0Q29ybmVy
OiB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKKyAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgY29ybmVyOwogICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBkaXN0YW5jZVRvQ2xv
c2VzdENvcm5lcihzZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICAgICAgICAgIGlmIChz
aGFwZSA9PSBDaXJjbGUpCiAgICAgICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gZGlzdGFuY2U7
CkBAIC04MzEsNyArODMxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRmFydGhlc3RD
b3JuZXI6IHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY29ybmVyOworICAgICAgICAgICAgR3Jh
cGhpY3NQb2ludCBjb3JuZXI7CiAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNl
VG9GYXJ0aGVzdENvcm5lcihzZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICAgICAgICAg
IGlmIChzaGFwZSA9PSBDaXJjbGUpCiAgICAgICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gZGlz
dGFuY2U7CkBAIC04NTQsNyArODU0LDcgQEAKICAgICAvLyBhZGRTdG9wcygpIG9ubHkgdXNlcyBt
YXhFeHRlbnQgZm9yIHJlcGVhdGluZyBncmFkaWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0g
MDsKICAgICBpZiAobV9yZXBlYXRpbmcpIHsKLSAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7Cisg
ICAgICAgIEdyYXBoaWNzUG9pbnQgY29ybmVyOwogICAgICAgICBtYXhFeHRlbnQgPSBkaXN0YW5j
ZVRvRmFydGhlc3RDb3JuZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTQ2FudmFz
VmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3Qm
IGNoYW5nZWRSZWN0KQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2Fu
dmFzRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpCiB7CiAgICAgSW50
UmVjdCBpbWFnZUNoYW5nZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAg
ICBSZW5kZXJPYmplY3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50
cy5lbmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFs
dWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NT
UHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC0yNzUsNyArMjc1LDcgQEAKIHN0YXRpYyBib29sIGRl
dmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVy
U3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNnID0gc2NyZWVu
UmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgaW50IGgg
PSAwOwogICAgICAgICBpbnQgdiA9IDA7CiAgICAgICAgIGlmIChwYXJzZUFzcGVjdFJhdGlvKHZh
bHVlLCBoLCB2KSkKQEAgLTMwOSw3ICszMDksNyBAQAogc3RhdGljIGJvb2wgZGV2aWNlX2hlaWdo
dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCkpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHls
ZSgpOwogICAgICAgICByZXR1cm4gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBjb21wYXJl
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy5oZWlnaHQoKSksIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSks
IG9wKTsKICAgICB9CkBAIC0zMjEsNyArMzIxLDcgQEAKIHN0YXRpYyBib29sIGRldmljZV93aWR0
aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCkpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHls
ZSgpOwogICAgICAgICByZXR1cm4gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBjb21wYXJl
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlKSwg
b3ApOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9k
ZS5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFu
bmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQXVk
aW9Ob2RlLmgiCiAjaW5jbHVkZSAiQ29uZS5oIgogI2luY2x1ZGUgIkRpc3RhbmNlLmgiCi0jaW5j
bHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5j
bHVkZSAiUGFubmVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC03NSwxNiArNzUs
MTYgQEAKICAgICB2b2lkIHNldFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCk7CiAKICAgICAv
LyBQb3NpdGlvbgotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHopIHsgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQorICAgIEdyYXBoaWNz
UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lk
IHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9wb3NpdGlvbiA9IEdy
YXBoaWNzUG9pbnQzRCh4LCB5LCB6KTsgfQogCiAgICAgLy8gT3JpZW50YXRpb24KLSAgICBGbG9h
dFBvaW50M0Qgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAg
dm9pZCBzZXRPcmllbnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50
YXRpb24gPSBGbG9hdFBvaW50M0QoeCwgeSwgeik7IH0KKyAgICBHcmFwaGljc1BvaW50M0Qgb3Jp
ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRPcmll
bnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50YXRpb24gPSBHcmFw
aGljc1BvaW50M0QoeCwgeSwgeik7IH0KIAogICAgIC8vIFZlbG9jaXR5Ci0gICAgRmxvYXRQb2lu
dDNEIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQotICAgIHZvaWQgc2V0
VmVsb2NpdHkoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0gRmxvYXRQ
b2ludDNEKHgsIHksIHopOyB9CisgICAgR3JhcGhpY3NQb2ludDNEIHZlbG9jaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV92ZWxvY2l0eTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHkoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0gR3JhcGhpY3NQb2ludDNEKHgsIHksIHopOyB9
CiAKICAgICAvLyBEaXN0YW5jZSBwYXJhbWV0ZXJzCiAgICAgdW5zaWduZWQgc2hvcnQgZGlzdGFu
Y2VNb2RlbCgpIHsgcmV0dXJuIG1fZGlzdGFuY2VFZmZlY3QubW9kZWwoKTsgfQpAQCAtMTI5LDkg
KzEyOSw5IEBACiAgICAgT3duUHRyPFBhbm5lcj4gbV9wYW5uZXI7CiAgICAgdW5zaWduZWQgbV9w
YW5uaW5nTW9kZWw7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBv
aW50M0QgbV9vcmllbnRhdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0eTsKKyAgICBH
cmFwaGljc1BvaW50M0QgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9vcmllbnRh
dGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV92ZWxvY2l0eTsKIAogICAgIC8vIEdhaW4KICAg
ICBSZWZQdHI8QXVkaW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw5ICs1OCw5IEBACiAgICAgbV9kaXN0YW5jZUdhaW4gPSBBdWRpb0dhaW46OmNyZWF0ZSgi
ZGlzdGFuY2VHYWluIiwgMS4wLCAwLjAsIDEuMCk7CiAgICAgbV9jb25lR2FpbiA9IEF1ZGlvR2Fp
bjo6Y3JlYXRlKCJjb25lR2FpbiIsIDEuMCwgMC4wLCAxLjApOwogCi0gICAgbV9wb3NpdGlvbiA9
IEZsb2F0UG9pbnQzRCgwLCAwLCAwKTsKLSAgICBtX29yaWVudGF0aW9uID0gRmxvYXRQb2ludDNE
KDEsIDAsIDApOwotICAgIG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7CisgICAg
bV9wb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQzRCgwLCAwLCAwKTsKKyAgICBtX29yaWVudGF0aW9u
ID0gR3JhcGhpY3NQb2ludDNEKDEsIDAsIDApOworICAgIG1fdmVsb2NpdHkgPSBHcmFwaGljc1Bv
aW50M0QoMCwgMCwgMCk7CiAgICAgCiAgICAgc2V0VHlwZShOb2RlVHlwZVBhbm5lcik7CiAKQEAg
LTE2NSw4ICsxNjUsOCBAQAogICAgIGRvdWJsZSBhemltdXRoID0gMC4wOwogCiAgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBzb3VyY2UtbGlzdGVuZXIgdmVjdG9yCi0gICAgRmxvYXRQb2ludDNEIGxpc3Rl
bmVyUG9zaXRpb24gPSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBz
b3VyY2VMaXN0ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOworICAgIEdyYXBo
aWNzUG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAg
ICBHcmFwaGljc1BvaW50M0Qgc291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVuZXJQ
b3NpdGlvbjsKIAogICAgIGlmIChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgewogICAgICAgICAv
LyBkZWdlbmVyYXRlIGNhc2UgaWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhlIHNhbWUg
cG9pbnQKQEAgLTE3OCwxOSArMTc4LDE5IEBACiAgICAgc291cmNlTGlzdGVuZXIubm9ybWFsaXpl
KCk7CiAKICAgICAvLyBBbGlnbiBheGVzCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnQg
PSBsaXN0ZW5lcigpLT5vcmllbnRhdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclVw
ID0gbGlzdGVuZXIoKS0+dXBWZWN0b3IoKTsKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJSaWdo
dCA9IGxpc3RlbmVyRnJvbnQuY3Jvc3MobGlzdGVuZXJVcCk7CisgICAgR3JhcGhpY3NQb2ludDNE
IGxpc3RlbmVyRnJvbnQgPSBsaXN0ZW5lcigpLT5vcmllbnRhdGlvbigpOworICAgIEdyYXBoaWNz
UG9pbnQzRCBsaXN0ZW5lclVwID0gbGlzdGVuZXIoKS0+dXBWZWN0b3IoKTsKKyAgICBHcmFwaGlj
c1BvaW50M0QgbGlzdGVuZXJSaWdodCA9IGxpc3RlbmVyRnJvbnQuY3Jvc3MobGlzdGVuZXJVcCk7
CiAgICAgbGlzdGVuZXJSaWdodC5ub3JtYWxpemUoKTsKIAotICAgIEZsb2F0UG9pbnQzRCBsaXN0
ZW5lckZyb250Tm9ybSA9IGxpc3RlbmVyRnJvbnQ7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3Rl
bmVyRnJvbnROb3JtID0gbGlzdGVuZXJGcm9udDsKICAgICBsaXN0ZW5lckZyb250Tm9ybS5ub3Jt
YWxpemUoKTsKIAotICAgIEZsb2F0UG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQuY3Jvc3MobGlz
dGVuZXJGcm9udE5vcm0pOworICAgIEdyYXBoaWNzUG9pbnQzRCB1cCA9IGxpc3RlbmVyUmlnaHQu
Y3Jvc3MobGlzdGVuZXJGcm9udE5vcm0pOwogCiAgICAgZG91YmxlIHVwUHJvamVjdGlvbiA9IHNv
dXJjZUxpc3RlbmVyLmRvdCh1cCk7CiAKLSAgICBGbG9hdFBvaW50M0QgcHJvamVjdGVkU291cmNl
ID0gc291cmNlTGlzdGVuZXIgLSB1cFByb2plY3Rpb24gKiB1cDsKKyAgICBHcmFwaGljc1BvaW50
M0QgcHJvamVjdGVkU291cmNlID0gc291cmNlTGlzdGVuZXIgLSB1cFByb2plY3Rpb24gKiB1cDsK
ICAgICBwcm9qZWN0ZWRTb3VyY2Uubm9ybWFsaXplKCk7CiAKICAgICBhemltdXRoID0gMTgwLjAg
KiBhY29zKHByb2plY3RlZFNvdXJjZS5kb3QobGlzdGVuZXJSaWdodCkpIC8gcGlEb3VibGU7CkBA
IC0yMzIsOCArMjMyLDggQEAKICAgICBpZiAoZG9wcGxlckZhY3RvciA+IDAuMCkgewogICAgICAg
ICBkb3VibGUgc3BlZWRPZlNvdW5kID0gbGlzdGVuZXIoKS0+c3BlZWRPZlNvdW5kKCk7CiAKLSAg
ICAgICAgY29uc3QgRmxvYXRQb2ludDNEICZzb3VyY2VWZWxvY2l0eSA9IG1fdmVsb2NpdHk7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmbGlzdGVuZXJWZWxvY2l0eSA9IGxpc3RlbmVyKCkt
PnZlbG9jaXR5KCk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmc291cmNlVmVsb2Np
dHkgPSBtX3ZlbG9jaXR5OworICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50M0QgJmxpc3RlbmVy
VmVsb2NpdHkgPSBsaXN0ZW5lcigpLT52ZWxvY2l0eSgpOwogCiAgICAgICAgIC8vIERvbid0IGJv
dGhlciBpZiBib3RoIHNvdXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0eQogICAgICAg
ICBib29sIHNvdXJjZUhhc1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVybygpOwpAQCAt
MjQxLDggKzI0MSw4IEBACiAKICAgICAgICAgaWYgKHNvdXJjZUhhc1ZlbG9jaXR5IHx8IGxpc3Rl
bmVySGFzVmVsb2NpdHkpIHsKICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlIHRv
IGxpc3RlbmVyIHZlY3RvcgotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRp
b24gPSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOwotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHNv
dXJjZVRvTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKKyAgICAgICAg
ICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRp
b24oKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbV9w
b3NpdGlvbiAtIGxpc3RlbmVyUG9zaXRpb247CiAKICAgICAgICAgICAgIGRvdWJsZSBzb3VyY2VM
aXN0ZW5lck1hZ25pdHVkZSA9IHNvdXJjZVRvTGlzdGVuZXIubGVuZ3RoKCk7CiAKQEAgLTI3Miw3
ICsyNzIsNyBAQAogCiBmbG9hdCBBdWRpb1Bhbm5lck5vZGU6OmRpc3RhbmNlQ29uZUdhaW4oKQog
ewotICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRp
b24oKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCkt
PnBvc2l0aW9uKCk7CiAKICAgICBkb3VibGUgbGlzdGVuZXJEaXN0YW5jZSA9IG1fcG9zaXRpb24u
ZGlzdGFuY2VUbyhsaXN0ZW5lclBvc2l0aW9uKTsKICAgICBkb3VibGUgZGlzdGFuY2VHYWluID0g
bV9kaXN0YW5jZUVmZmVjdC5nYWluKGxpc3RlbmVyRGlzdGFuY2UpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKICNpZm5kZWYgQXVkaW9MaXN0ZW5lcl9oCiAjZGVmaW5lIEF1ZGlvTGlzdGVuZXJf
aAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNE
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCkBAIC00NSwyNyArNDUsMjcgQEAKICAgICB9CiAKICAgICAvLyBQb3NpdGlvbgotICAg
IHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgeyBzZXRQb3Np
dGlvbihGbG9hdFBvaW50M0QoeCwgeSwgeikpOyB9Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50M0QgJnBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQotICAg
IGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
OyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSB7
IHNldFBvc2l0aW9uKEdyYXBoaWNzUG9pbnQzRCh4LCB5LCB6KSk7IH0KKyAgICB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBv
c2l0aW9uOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIC8vIE9yaWVudGF0aW9uCiAgICAgdm9pZCBzZXRP
cmllbnRhdGlvbihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdXBYLCBkb3Vi
bGUgdXBZLCBkb3VibGUgdXBaKQogICAgIHsKLSAgICAgICAgc2V0T3JpZW50YXRpb24oRmxvYXRQ
b2ludDNEKHgsIHksIHopKTsKLSAgICAgICAgc2V0VXBWZWN0b3IoRmxvYXRQb2ludDNEKHVwWCwg
dXBZLCB1cFopKTsKKyAgICAgICAgc2V0T3JpZW50YXRpb24oR3JhcGhpY3NQb2ludDNEKHgsIHks
IHopKTsKKyAgICAgICAgc2V0VXBWZWN0b3IoR3JhcGhpY3NQb2ludDNEKHVwWCwgdXBZLCB1cFop
KTsKICAgICB9Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50M0QgJm9y
aWVudGF0aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQotICAgIGNvbnN0IEZs
b2F0UG9pbnQzRCYgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9
CisgICAgdm9pZCBzZXRPcmllbnRhdGlvbihjb25zdCBHcmFwaGljc1BvaW50M0QgJm9yaWVudGF0
aW9uKSB7IG1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsgfQorICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CiAK
ICAgICAvLyBVcC12ZWN0b3IKLSAgICB2b2lkIHNldFVwVmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQz
RCAmdXBWZWN0b3IpIHsgbV91cFZlY3RvciA9IHVwVmVjdG9yOyB9Ci0gICAgY29uc3QgRmxvYXRQ
b2ludDNEJiB1cFZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXBWZWN0b3I7IH0KKyAgICB2b2lk
IHNldFVwVmVjdG9yKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmdXBWZWN0b3IpIHsgbV91cFZlY3Rv
ciA9IHVwVmVjdG9yOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiB1cFZlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fdXBWZWN0b3I7IH0KIAogICAgIC8vIFZlbG9jaXR5Ci0gICAgdm9pZCBz
ZXRWZWxvY2l0eShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSB7IHNldFZlbG9jaXR5KEZs
b2F0UG9pbnQzRCh4LCB5LCB6KSk7IH0KLSAgICB2b2lkIHNldFZlbG9jaXR5KGNvbnN0IEZsb2F0
UG9pbnQzRCAmdmVsb2NpdHkpIHsgbV92ZWxvY2l0eSA9IHZlbG9jaXR5OyB9Ci0gICAgY29uc3Qg
RmxvYXRQb2ludDNEJiB2ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0KKyAg
ICB2b2lkIHNldFZlbG9jaXR5KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgc2V0VmVs
b2NpdHkoR3JhcGhpY3NQb2ludDNEKHgsIHksIHopKTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHko
Y29uc3QgR3JhcGhpY3NQb2ludDNEICZ2ZWxvY2l0eSkgeyBtX3ZlbG9jaXR5ID0gdmVsb2NpdHk7
IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1cm4g
bV92ZWxvY2l0eTsgfQogCiAgICAgLy8gRG9wcGxlciBmYWN0b3IKICAgICB2b2lkIHNldERvcHBs
ZXJGYWN0b3IoZG91YmxlIGRvcHBsZXJGYWN0b3IpIHsgbV9kb3BwbGVyRmFjdG9yID0gZG9wcGxl
ckZhY3RvcjsgfQpAQCAtNzksMTEgKzc5LDExIEBACiAgICAgQXVkaW9MaXN0ZW5lcigpOwogCiAg
ICAgLy8gUG9zaXRpb24gLyBPcmllbnRhdGlvbgotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9u
OwotICAgIEZsb2F0UG9pbnQzRCBtX29yaWVudGF0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX3Vw
VmVjdG9yOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9p
bnQzRCBtX29yaWVudGF0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3VwVmVjdG9yOwogCi0g
ICAgRmxvYXRQb2ludDNEIG1fdmVsb2NpdHk7CisgICAgR3JhcGhpY3NQb2ludDNEIG1fdmVsb2Np
dHk7CiAKICAgICBkb3VibGUgbV9kb3BwbGVyRmFjdG9yOwogICAgIGRvdWJsZSBtX3NwZWVkT2ZT
b3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2lu
Y2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTMyNjIsOCAr
MzI2Miw4IEBACiAgICAgLy8gc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgcGFnZS4gV2UgY2FuIG9u
bHkgcmVzaXplIHRoZSB3aW5kb3csIHNvCiAgICAgLy8gYWRqdXN0IGZvciB0aGUgZGlmZmVyZW5j
ZSBiZXR3ZWVuIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlIHBhZ2Ugc2l6ZS4KIAotICAgIEZsb2F0
UmVjdCB3aW5kb3dSZWN0ID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKLSAgICBGbG9h
dFNpemUgcGFnZVNpemUgPSBwYWdlLT5jaHJvbWUoKS0+cGFnZVJlY3QoKS5zaXplKCk7CisgICAg
R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwor
ICAgIEdyYXBoaWNzU2l6ZSBwYWdlU2l6ZSA9IHBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgpLnNp
emUoKTsKICAgICBpZiAoZmVhdHVyZXMueFNldCkKICAgICAgICAgd2luZG93UmVjdC5zZXRYKGZl
YXR1cmVzLngpOwogICAgIGlmIChmZWF0dXJlcy55U2V0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNs
dWRlICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIK
QEAgLTg5LDEwICs4OSwxMCBAQAogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKSB7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLSAgICB2
aXJ0dWFsIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCkgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKSB7IH0KKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCkgeyByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7IH0KIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgeyByZXR1cm4gRmxvYXRS
ZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpIHsgcmV0dXJuIEdy
YXBoaWNzUmVjdCgpOyB9CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCkgeyByZXR1
cm4gMS5mOyB9CiAKQEAgLTUxNyw3ICs1MTcsNyBAQAogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0
ZXh0Q2hlY2tlcigpIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICNpZiBVU0Uo
QVVUT0NPUlJFQ1RJT05fUEFORUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFu
ZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IH0KICAg
ICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNt
aXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VU
eXBlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJX
ZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzRGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9N
SU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5o
PgpAQCAtMjEwMiwxMiArMjEwMiwxMiBAQAogICAgIGlzUmVzaXphYmxlID0gbV91aUNsaWVudC5p
c1Jlc2l6YWJsZSh0aGlzKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1l
KGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
V2luZG93RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBt
X3VpQ2xpZW50LnNldFdpbmRvd0ZyYW1lKHRoaXMsIG1fcGFnZUNsaWVudC0+Y29udmVydFRvRGV2
aWNlU3BhY2UobmV3V2luZG93RnJhbWUpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lKEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0V2luZG93RnJhbWUoR3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBuZXdX
aW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC0+Y29udmVydFRvVXNlclNwYWNlKG1fdWlDbGllbnQu
d2luZG93RnJhbWUodGhpcykpOwogfQpAQCAtMjMyNyw3ICsyMzI3LDcgQEAKICAgICBtX2ZpbmRD
bGllbnQuZGlkQ291bnRTdHJpbmdNYXRjaGVzKHRoaXMsIHN0cmluZywgbWF0Y2hDb3VudCk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRGaW5kSW5kaWNhdG9yKGNvbnN0IEZsb2F0UmVjdCYg
c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KQordm9pZCBXZWJQ
YWdlUHJveHk6OnNldEZpbmRJbmRpY2F0b3IoY29uc3QgR3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEdyYXBoaWNzUmVjdD4mIHRleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpCiB7CiAgICAgUmVmUHRyPEZp
bmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0b3IgPSBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3Jk
aW5hdGVzLCBjb250ZW50SW1hZ2VIYW5kbGUpOwogICAgIG1fcGFnZUNsaWVudC0+c2V0RmluZElu
ZGljYXRvcihmaW5kSW5kaWNhdG9yLnJlbGVhc2UoKSwgZmFkZU91dCk7CkBAIC0yNjgyLDggKzI2
ODIsOCBAQAogewogICAgIEFTU0VSVChjYW5Db2FsZXNjZShhLCBiKSk7CiAKLSAgICBGbG9hdFNp
emUgbWVyZ2VkRGVsdGEgPSBhLmRlbHRhKCkgKyBiLmRlbHRhKCk7Ci0gICAgRmxvYXRTaXplIG1l
cmdlZFdoZWVsVGlja3MgPSBhLndoZWVsVGlja3MoKSArIGIud2hlZWxUaWNrcygpOworICAgIEdy
YXBoaWNzU2l6ZSBtZXJnZWREZWx0YSA9IGEuZGVsdGEoKSArIGIuZGVsdGEoKTsKKyAgICBHcmFw
aGljc1NpemUgbWVyZ2VkV2hlZWxUaWNrcyA9IGEud2hlZWxUaWNrcygpICsgYi53aGVlbFRpY2tz
KCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZl
bnQ6OldoZWVsLCBiLnBvc2l0aW9uKCksIGIuZ2xvYmFsUG9zaXRpb24oKSwgbWVyZ2VkRGVsdGEs
IG1lcmdlZFdoZWVsVGlja3MsIGIuZ3JhbnVsYXJpdHkoKSwgYi5waGFzZSgpLCBiLm1vbWVudHVt
UGhhc2UoKSwgYi5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCksIGIubW9kaWZpZXJzKCksIGIu
dGltZXN0YW1wKCkpOwpAQCAtMzE0NCwxMiArMzE0NCwxMiBAQAogICAgIHJldHVybiBtX3VpQ2xp
ZW50LmZvb3RlckhlaWdodCh0aGlzLCBmcmFtZSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpk
cmF3SGVhZGVyKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fdWlDbGllbnQuZHJhd0hlYWRlcih0aGlzLCBm
cmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZHJhd0Zvb3RlcihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIG1fdWlDbGllbnQuZHJhd0Zvb3Rlcih0aGlzLCBmcmFtZSwgcmVjdCk7CiB9CkBA
IC0zMzI4LDcgKzMzMjgsNyBAQAogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKQotdm9pZCBXZWJQYWdlUHJveHk6OnNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBw
YW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlw
ZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsK
ICAgICBtX3BhZ2VDbGllbnQtPnNob3dDb3JyZWN0aW9uUGFuZWwoKENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSlwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgcmVw
bGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3Ry
aW5ncyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3Iu
Y3BwCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5k
aWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBGaW5kSW5kaWNhdG9yOjpjcmVh
dGUoY29uc3QgRmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVz
LCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKQorUGFz
c1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgR3JhcGhp
Y3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEdy
YXBoaWNzUmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKQogewogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
KGNvbnRlbnRJbWFnZUhhbmRsZSk7CiAgICAgaWYgKCFjb250ZW50SW1hZ2UpCkBAIC04Nyw3ICs4
Nyw3IEBACiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaW5kSW5kaWNhdG9yKHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzLCB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRl
cywgY29udGVudEltYWdlLnJlbGVhc2UoKSkpOwogfQogCi1GaW5kSW5kaWNhdG9yOjpGaW5kSW5k
aWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNl
bGVjdGlvblJlY3RDb29yZGluYXRlcywgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRl
bnRJbWFnZSkKK0ZpbmRJbmRpY2F0b3I6OkZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5h
dGVzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKQogICAgIDogbV9z
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyhzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29y
ZGluYXRlcykKICAgICAsIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXModGV4
dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpCiAgICAgLCBtX2NvbnRlbnRJbWFnZShj
b250ZW50SW1hZ2UpCkBAIC05OCwxOCArOTgsMTggQEAKIHsKIH0KIAotc3RhdGljIEZsb2F0UmVj
dCBpbmZsYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVYLCBmbG9h
dCBpbmZsYXRlWSkKK3N0YXRpYyBHcmFwaGljc1JlY3QgaW5mbGF0ZVJlY3QoY29uc3QgR3JhcGhp
Y3NSZWN0JiByZWN0LCBmbG9hdCBpbmZsYXRlWCwgZmxvYXQgaW5mbGF0ZVkpCiB7Ci0gICAgRmxv
YXRSZWN0IGluZmxhdGVkUmVjdCA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGluZmxhdGVkUmVj
dCA9IHJlY3Q7CiAgICAgaW5mbGF0ZWRSZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKICAgICBpbmZs
YXRlZFJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwogICAgIAogICAgIHJldHVybiBpbmZsYXRlZFJl
Y3Q7CiB9CiAKLUZsb2F0UmVjdCBGaW5kSW5kaWNhdG9yOjpmcmFtZVJlY3QoKSBjb25zdAorR3Jh
cGhpY3NSZWN0IEZpbmRJbmRpY2F0b3I6OmZyYW1lUmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IEZsb2F0UmVjdChtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLngoKSAtIGxlZnRC
b3JkZXJUaGlja25lc3MsIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueSgpIC0g
dG9wQm9yZGVyVGhpY2tuZXNzLAorICAgIHJldHVybiBHcmFwaGljc1JlY3QobV9zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcy54KCkgLSBsZWZ0Qm9yZGVyVGhpY2tuZXNzLCBtX3NlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLnkoKSAtIHRvcEJvcmRlclRoaWNrbmVzcywKICAg
ICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMud2lk
dGgoKSArIHJpZ2h0Qm9yZGVyVGhpY2tuZXNzICsgbGVmdEJvcmRlclRoaWNrbmVzcywKICAgICAg
ICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMuaGVpZ2h0
KCkgKyB0b3BCb3JkZXJUaGlja25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25lc3MpOwogfQpAQCAt
MTM0LDEwICsxMzQsMTAgQEAKICAgICByZXR1cm4gQ29sb3IoZ3JhZGllbnREYXJrUmVkLCBncmFk
aWVudERhcmtHcmVlbiwgZ3JhZGllbnREYXJrQmx1ZSwgZ3JhZGllbnREYXJrQWxwaGEpOwogfQog
Ci1zdGF0aWMgUGF0aCBwYXRoV2l0aFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcGF0aFJl
Y3QsIGZsb2F0IHJhZGl1cykKK3N0YXRpYyBQYXRoIHBhdGhXaXRoUm91bmRlZFJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiBwYXRoUmVjdCwgZmxvYXQgcmFkaXVzKQogewogICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHBhdGhSZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRp
dXMpKTsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHBhdGhSZWN0LCBHcmFwaGljc1NpemUocmFk
aXVzLCByYWRpdXMpKTsKIAogICAgIHJldHVybiBwYXRoOwogfQpAQCAtMTQ1LDE1ICsxNDUsMTUg
QEAKIHZvaWQgRmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVj
dENvb3JkaW5hdGVzW2ldOworICAgICAgICBHcmFwaGljc1JlY3QgdGV4dFJlY3QgPSBtX3RleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzW2ldOwogICAgICAgICB0ZXh0UmVjdC5tb3Zl
KGxlZnRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyk7CiAKLSAgICAgICAgRmxv
YXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbE91
dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciwgdmVydGljYWxPdXRzZXRUb0NlbnRlck9mTGlnaHRC
b3JkZXIpOwotICAgICAgICBGbG9hdFJlY3QgaW5uZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRl
eHRSZWN0LCBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbFBhZGRp
bmdJbnNpZGVMaWdodEJvcmRlcik7CisgICAgICAgIEdyYXBoaWNzUmVjdCBvdXRlclBhdGhSZWN0
ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRC
b3JkZXIsIHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKKyAgICAgICAgR3Jh
cGhpY3NSZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRh
bFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3Jk
ZXIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRv
d0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKKyAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd09mZnNldFgsIHNo
YWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNl
U1JHQik7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGxpZ2h0Qm9y
ZGVyQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZmlsbFBhdGgocGF0aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhSZWN0LCBjb3JuZXJS
YWRpdXMpKTsKICAgICAgICAgfQpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgIHsKICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhSb3VuZGVkUmVj
dChpbm5lclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKLSAgICAgICAgICAgIFJlZlB0cjxHcmFk
aWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVj
dC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwg
aW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQoaW5uZXJQYXRoUmVjdC54KCks
IGlubmVyUGF0aFJlY3QueSgpKSwgR3JhcGhpY3NQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5u
ZXJQYXRoUmVjdC5tYXhZKCkpKTsKICAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MCwgZ3JhZGllbnRMaWdodENvbG9yKCkpOwogICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9y
U3RvcCgxLCBncmFkaWVudERhcmtDb2xvcigpKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAKICAgICAg
ICAgewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdy
YXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKEZs
b2F0U2l6ZShyb3VuZGYobGVmdEJvcmRlclRoaWNrbmVzcyksIHJvdW5kZih0b3BCb3JkZXJUaGlj
a25lc3MpKSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKEdyYXBoaWNz
U2l6ZShyb3VuZGYobGVmdEJvcmRlclRoaWNrbmVzcyksIHJvdW5kZih0b3BCb3JkZXJUaGlja25l
c3MpKSk7CiAgICAgICAgICAgICBtX2NvbnRlbnRJbWFnZS0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0
LCBJbnRQb2ludCgwLCAwKSwgbV9jb250ZW50SW1hZ2UtPmJvdW5kcygpKTsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVs
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlv
blBhbmVsLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvQ29ycmVjdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBACiAg
ICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25v
cmVkLCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmll
dywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hv
dyhXS1ZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25z
dCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIGRp
c21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwg
ZmFsc2UpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsy
NjgsNyBAQAogICAgIG1fcGFnZUNsaWVudC0+c2V0RHJhZ0ltYWdlKGNsaWVudFBvc2l0aW9uLCBk
cmFnSW1hZ2UucmVsZWFzZSgpLCBpc0xpbmtEcmFnKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwb2ludCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYg
KCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIu
bW0JKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBACiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+IC8vIEZvciBTZXRTeXN0ZW1VSU1vZGUoKQog
I2ltcG9ydCA8SU9LaXQvcHdyX21ndC9JT1BNTGliLmg+IC8vIEZvciBJT1BNQXNzZXJ0aW9uQ3Jl
YXRlKCkKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJOU1dpbmRvd0V4dHJhcy5o
PgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHJldmlzaW9uIDkwOTI5KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgp
OwogICAgIH5Db3JyZWN0aW9uUGFuZWwoKTsKLSAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29y
ZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIHNob3coV0tWaWV3
KiwgV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICBTdHJp
bmcgZGlzbWlzcyhXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsK
ICAgICBzdGF0aWMgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdLVmlldyosIE5T
Q29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDggKzc3LDggQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dElu
cHV0U3RhdGUoYm9vbCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVzZXRUZXh0SW5wdXRTdGF0ZSgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qg
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRU
b0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2lu
ZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICAKQEAgLTEx
NCw3ICsxMTQsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1
cChjb25zdCBTdHJpbmcmLCBkb3VibGUgc2NhbGVGYWN0b3IsIGNvbnN0IERpY3Rpb25hcnlQb3B1
cEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgp
OwogCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5k
aW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVy
bmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAg
IHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRp
c21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYkNv
cmU6OkVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24g
OTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0
Zm9ybU1vdXNlRXZlbnQuaD4KQEAgLTI0OTAsNyArMjQ5MCw3IEBACiAgICAgdGhlUG9pbnQgPSBb
W3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnRoZVBvaW50XTsKICAgICB0aGVQb2lu
dCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2ludCBmcm9tVmlldzpuaWxdOwogCi0gICAgX2Rh
dGEtPl9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oRmxvYXRQb2ludCh0
aGVQb2ludC54LCB0aGVQb2ludC55KSk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEF0TG9jYXRpb24oR3JhcGhpY3NQb2ludCh0aGVQb2ludC54LCB0aGVQb2ludC55
KSk7CiB9CiAKIC0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJEb2N1bWVudFRhZwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0J
KHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFn
ZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQg
IldlYkVkaXRDb21tYW5kUHJveHkuaCIKICNpbXBvcnQgIldlYlBvcHVwTWVudVByb3h5TWFjLmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zv
dW5kYXRpb25FeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KQEAgLTI2OSwxMiArMjY5LDEyIEBACiAg
ICAgW21fd2tWaWV3IF9yZXNldFRleHRJbnB1dFN0YXRlXTsKIH0KIAotRmxvYXRSZWN0IFBhZ2VD
bGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitH
cmFwaGljc1JlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9EZXZp
Y2VTcGFjZTpyZWN0XTsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9V
c2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VDbGllbnRJ
bXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IHJldHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKIH0KQEAgLTQyNCw3
ICs0MjQsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0
aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFBhZ2VDbGllbnRJbXBs
OjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
LCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewog
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBpZiAoIWlzVmlld1Zp
c2libGUoKSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBACiAg
ICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3Vyc29yOwogICAg
IGNsYXNzIERyYWdEYXRhOwotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGlj
c1JlY3Q7CiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiAg
ICAgc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgIHZv
aWQgaGlkZUZpbmRVSSgpOwogICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmlu
ZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGRpZENv
dW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKLSAg
ICB2b2lkIHNldEZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVj
dD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpOworICAgIHZv
aWQgc2V0RmluZEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHNlbGVjdGlv
blJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NS
ZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnN0IFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCk7CiAgICAg
dm9pZCBkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwog
ICAgIHZvaWQgZGlkRmFpbFRvRmluZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICNpZiBQTEFURk9S
TShXSU4pCkBAIC00MzQsMTIgKzQzNCwxMiBAQAogCiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0KFdl
YkZyYW1lUHJveHkqKTsKICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSopOwot
ICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdIZWFkZXIoV2ViRnJhbWVQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJGcmFtZVBy
b3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgLy8gRGljdGlvbmFyeS4KLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYpOwog
I2VuZGlmCiAKICAgICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29yZTo6UG9saWN5
QWN0aW9uLCBXZWJGcmFtZVByb3h5KiwgdWludDY0X3QgbGlzdGVuZXJJRCk7CkBAIC02MzIsOCAr
NjMyLDggQEAKICAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJsZShib29sJiBzdGF0dXNCYXJJ
c1Zpc2libGUpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jlc2l6YWJsZSk7CiAg
ICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0gICAgdm9pZCBzZXRX
aW5kb3dGcmFtZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGdldFdpbmRv
d0ZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgc2V0V2luZG93RnJhbWUoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdm9pZCBnZXRXaW5kb3dGcmFtZShXZWJD
b3JlOjpHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50
KTsKICAgICB2b2lkIHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdS
ZWN0LCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHQpOwogICAgIHZvaWQgcnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3QgZnJhbWVJRCwgYm9v
bCYgc2hvdWxkQ2xvc2UpOwpAQCAtNzY5LDcgKzc2OSw3IEBACiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIHZvaWQgc3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKGJvb2wmKTsKICNpZiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJf
dCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBs
YWNlbWVudFN0cmluZ3MpOwogICAgIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90
IHJlYXNvbik7CiAgICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJl
YXNvbiwgU3RyaW5nJiByZXN1bHQpOwogICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNw
b25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQAogICAgIEdldFN0YXR1c0JhcklzVmlzaWJs
ZSgpIC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJsZSkKICAgICBTZXRJc1Jlc2l6YWJsZShib29s
IGlzUmVzaXphYmxlKQogICAgIEdldElzUmVzaXphYmxlKCkgLT4gKGJvb2wgaXNSZXNpemFibGUp
Ci0gICAgU2V0V2luZG93RnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAg
IEdldFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKKyAg
ICBTZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93RnJhbWUpCisgICAg
R2V0V2luZG93RnJhbWUoKSAtPiAoV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd0ZyYW1lKQog
ICAgIFNjcmVlblRvV2luZG93KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2Vi
Q29yZTo6SW50UG9pbnQgd2luZG93UG9pbnQpCiAgICAgV2luZG93VG9TY3JlZW4oV2ViQ29yZTo6
SW50UmVjdCByZWN0KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkKICAgICBSdW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV1RGOjpTdHJpbmcgbWVzc2FnZSwgdWludDY0X3QgZnJh
bWVJRCkgLT4gKGJvb2wgc2hvdWxkQ2xvc2UpCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgICMg
RmluZCBtZXNzYWdlcwogICAgIERpZENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJp
bmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCi0gICAgU2V0RmluZEluZGljYXRvcihXZWJDb3JlOjpG
bG9hdFJlY3Qgc2VsZWN0aW9uUmVjdCwgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJl
Y3RzLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFnZUhhbmRsZSwg
Ym9vbCBmYWRlT3V0KQorICAgIFNldEZpbmRJbmRpY2F0b3IoV2ViQ29yZTo6R3JhcGhpY3NSZWN0
IHNlbGVjdGlvblJlY3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+IHRleHRSZWN0cywg
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wg
ZmFkZU91dCkKICAgICBEaWRGaW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZywgdWludDMyX3Qg
bWF0Y2hDb3VudCkKICAgICBEaWRGYWlsVG9GaW5kU3RyaW5nKFdURjo6U3RyaW5nIHN0cmluZykK
ICNpZiBQTEFURk9STShXSU4pCkBAIC0yNDYsNyArMjQ2LDcgQEAKICNlbmRpZgogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgICMgQXV0
b2NvcnJlY3Rpb24gbWVzc2FnZXMKLSAgICBTaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFu
ZWxUeXBlLCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBT
dHJpbmcgcmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0
cmluZz4gYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCisgICAgU2hvd0NvcnJlY3Rpb25Q
YW5lbChpbnQzMl90IHBhbmVsVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZW1l
bnRTdHJpbmcsIFZlY3RvcjxTdHJpbmc+IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQog
ICAgIERpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24pCiAgICAgRGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbFNvb24oaW50MzJfdCByZWFzb24pIC0+IChTdHJpbmcgcmVzdWx0KQogICAg
IFJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIFN0cmlu
ZyByZXBsYWNlZFN0cmluZywgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViTnVtYmVyLmgiCiAjaW5jbHVkZSAiV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1dpbmRvd0ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0yNDQsNyArMjQ0LDcg
QEAKICAgICBtX2NsaWVudC5zZXRJc1Jlc2l6YWJsZSh0b0FQSShwYWdlKSwgcmVzaXphYmxlLCBt
X2NsaWVudC5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBXZWJVSUNsaWVudDo6c2V0V2luZG93RnJh
bWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lKQordm9pZCBXZWJV
SUNsaWVudDo6c2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGZyYW1lKQogewogICAgIGlmICghbV9jbGllbnQuc2V0V2luZG93RnJhbWUpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI1MiwxMiArMjUyLDEyIEBACiAgICAgbV9jbGllbnQuc2V0V2luZG93
RnJhbWUodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9
CiAKLUZsb2F0UmVjdCBXZWJVSUNsaWVudDo6d2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiBwYWdl
KQorR3JhcGhpY3NSZWN0IFdlYlVJQ2xpZW50Ojp3aW5kb3dGcmFtZShXZWJQYWdlUHJveHkqIHBh
Z2UpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5nZXRXaW5kb3dGcmFtZSkKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKLSAgICByZXR1
cm4gdG9GbG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xp
ZW50LmNsaWVudEluZm8pKTsKKyAgICByZXR1cm4gdG9HcmFwaGljc1JlY3QobV9jbGllbnQuZ2V0
V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pKTsKIH0KIAogYm9v
bCBXZWJVSUNsaWVudDo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QKQEAg
LTMzMiw3ICszMzIsNyBAQAogICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEko
cGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2Vi
VUlDbGllbnQ6OmRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBm
cmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJVSUNsaWVudDo6
ZHJhd0hlYWRlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25z
dCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5kcmF3
SGVhZGVyKQogICAgICAgICByZXR1cm47CkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICBtX2NsaWVu
dC5kcmF3SGVhZGVyKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIHRvQVBJKHJlY3QpLCBtX2Ns
aWVudC5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBXZWJVSUNsaWVudDo6ZHJhd0Zvb3RlcihXZWJQ
YWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIFdlYlVJQ2xpZW50OjpkcmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSog
cGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICBpZiAoIW1fY2xpZW50LmRyYXdGb290ZXIpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsOCArMTMxLDggQEAKICNpZiBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCB2b2lk
IGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKSA9IDA7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNw
YWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkdyYXBoaWNzUmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QmKSA9IDA7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRv
VXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpID0gMDsKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgPSAwOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogICAgIApAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAg
dmlydHVhbCBDR0NvbnRleHRSZWYgY29udGFpbmluZ1dpbmRvd0dyYXBoaWNzQ29udGV4dCgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3Ry
aW5nJiwgZG91YmxlIHNjYWxlRmFjdG9yLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0Jv
eE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2
ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlv
blBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZv
ckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNt
aXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVj
dGlvblBhbmVsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoV2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZykgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJl
dmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNs
YXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBJbnRTaXplOwogICAgIHN0cnVjdCBXaW5kb3dG
ZWF0dXJlczsKIH0KQEAgLTg0LDggKzg0LDggQEAKICAgICBib29sIGlzUmVzaXphYmxlKFdlYlBh
Z2VQcm94eSopOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoV2ViUGFnZVByb3h5KiwgYm9vbCk7
CiAKLSAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZShXZWJQYWdl
UHJveHkqKTsKKyAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dG
cmFtZShXZWJQYWdlUHJveHkqKTsKIAogICAgIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmly
bVBhbmVsKCkgY29uc3Q7CiAgICAgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2Vi
UGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgV2ViRnJhbWVQcm94eSopOwpAQCAtMTAxLDggKzEw
MSw4IEBACiAgICAgLy8gUHJpbnRpbmcuCiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0KFdlYlBhZ2VQ
cm94eSosIFdlYkZyYW1lUHJveHkqKTsKICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVBy
b3h5KiwgV2ViRnJhbWVQcm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJQYWdlUHJveHkq
LCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBk
cmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQ
cm94eSosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3Rl
cihXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0Jik7CiAgICAgdm9pZCBwcmludEZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkq
KTsKIAogICAgIGJvb2wgY2FuUnVuTW9kYWwoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjZGVmaW5lIEZpbmRJbmRpY2F0b3JfaAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0
bWFwLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzUmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00MCwyMyArNDAs
MjMgQEAKIAogY2xhc3MgRmluZEluZGljYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbmRJbmRp
Y2F0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBj
cmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29y
ZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29u
dGVudEltYWdlSGFuZGxlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBj
cmVhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dD
b29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4mIHRleHRSZWN0
c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYgY29udGVudEltYWdlSGFuZGxlKTsKICAgICB+RmluZEluZGljYXRvcigpOwogCi0gICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQotICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBmcmFtZVJlY3QoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1Jl
Y3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOyB9CisgICAgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0IGZyYW1lUmVjdCgpIGNvbnN0OwogCi0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mIHRleHRSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25S
ZWN0Q29vcmRpbmF0ZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0
PiYgdGV4dFJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RD
b29yZGluYXRlczsgfQogCiAgICAgU2hhcmVhYmxlQml0bWFwKiBjb250ZW50SW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRJbWFnZS5nZXQoKTsgfQogCiAgICAgdm9pZCBkcmF3KFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7
CiAKIHByaXZhdGU6Ci0gICAgRmluZEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVj
dHMsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UpOworICAgIEZpbmRJ
bmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBt
X3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwotICAgIFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJl
Y3RDb29yZGluYXRlczsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2NvbnRlbnRJbWFn
ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiA5MDkyOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICBpZiAoIXBhZ2VIZWln
aHRJblBpeGVscykKICAgICAgICAgcGFnZUhlaWdodEluUGl4ZWxzID0gY29yZUZyYW1lLT52aWV3
KCktPmhlaWdodCgpOwogCi0gICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhj
b3JlRnJhbWUsIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxz
KSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEdy
YXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAK
IGludCBJbmplY3RlZEJ1bmRsZTo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBpZCwgZG91YmxlIHBhZ2VXaWR0aEluUGl4ZWxzLCBkb3VibGUg
cGFnZUhlaWdodEluUGl4ZWxzKQpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgaWYgKCFwYWdlSGVp
Z2h0SW5QaXhlbHMpCiAgICAgICAgIHBhZ2VIZWlnaHRJblBpeGVscyA9IGNvcmVGcmFtZS0+dmll
dygpLT5oZWlnaHQoKTsKIAotICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JF
bGVtZW50KGVsZW1lbnQsIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodElu
UGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQo
ZWxlbWVudCwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhl
bHMpKTsKIH0KIAogU3RyaW5nIEluamVjdGVkQnVuZGxlOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBp
eGVscyhXZWJGcmFtZSogZnJhbWUsIGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQg
bWFyZ2luTGVmdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5
LmNwcAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUsNyArMTM1LDcgQEAKIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0TmVlZHNEaXNw
bGF5KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYsIFdLUmVjdCBy
ZWN0KQogewotICAgIHRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPnNldE5lZWRzRGlzcGxh
eShlbmNsb3NpbmdJbnRSZWN0KHRvRmxvYXRSZWN0KHJlY3QpKSk7CisgICAgdG9JbXBsKGJ1bmRs
ZVBhZ2VPdmVybGF5UmVmKS0+c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2luZ0ludFJlY3QodG9HcmFw
aGljc1JlY3QocmVjdCkpKTsKIH0KIAogZmxvYXQgV0tCdW5kbGVQYWdlT3ZlcmxheUZyYWN0aW9u
RmFkZWRJbihXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VPdmVybGF5UmVmKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2Fw
ZVBsdWdpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tCShyZXZpc2lvbiA5MDkyOSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2Nh
cGVQbHVnaW5NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIGRv
dWJsZSBzb3VyY2VYSW5TY3JlZW5TcGFjZTsKICAgICBkb3VibGUgc291cmNlWUluU2NyZWVuU3Bh
Y2U7CiAKLSAgICBGbG9hdFBvaW50IHNvdXJjZUluU2NyZWVuU3BhY2U7CisgICAgR3JhcGhpY3NQ
b2ludCBzb3VyY2VJblNjcmVlblNwYWNlOwogICAgIHN3aXRjaCAoc291cmNlU3BhY2UpIHsKICAg
ICBjYXNlIE5QQ29vcmRpbmF0ZVNwYWNlUGx1Z2luOgogICAgICAgICBzb3VyY2VYSW5TY3JlZW5T
cGFjZSA9IHNvdXJjZVggKyBtX3dpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcy54KCkgKyBt
X3ZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMueCgpICsgbV9ucFdpbmRvdy54OwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDEwICs1MiwxMCBAQAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVz
dHJveWVkKCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93
UmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd1Jl
Y3QoKTsKICAgICAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBwYWdlUmVjdCgpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAgICAgCiAgICAg
dmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogICAgIApAQCAtMTQ5LDE3ICsxNDksMTcgQEAK
IAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogICAgIAotICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9k
ZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGxpbmVSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2Vi
Q29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGluZVJlY3Qs
CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChX
ZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEN1c3Rv
bUhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUs
IGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NSZWN0JiBsaW5lUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGlyZUxpbmUpOwogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxvYWQoY29uc3QgU3RyaW5n
JiBwYXRoLCBTdHJpbmcmIGdlbmVyYXRlZEZpbGVuYW1lKTsKICAgICB2aXJ0dWFsIFN0cmluZyBn
ZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIAotICAgIHZp
cnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbGJhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6
ZSwgCisgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYsIFdlYkNvcmU6OlNjcm9s
bGJhckNvbnRyb2xTaXplLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFN0YXRlLCBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IHBy
ZXNzZWRQYXJ0LCBib29sIHZlcnRpY2FsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB2YWx1ZSwgZmxvYXQgcHJvcG9ydGlvbiwgV2ViQ29yZTo6U2Nyb2xsYmFy
Q29udHJvbFBhcnRNYXNrKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxDb3Ju
ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogCiAgICAgdmlydHVh
bCBib29sIHBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50
TWFjLm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjM4LDcgKzIzOCw3IEBACiB9CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVs
VHlwZSB0eXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKQogewogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTaG93Q29ycmVjdGlvblBhbmVsKHR5cGUsIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gOTA5
MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDI0ICs5NSwyNCBAQAogICAgIGRlbGV0
ZSB0aGlzOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBG
bG9hdFJlY3QmIHdpbmRvd0ZyYW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1Jl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiB3aW5kb3dGcmFtZSkKIHsKICAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0V2luZG93RnJhbWUod2luZG93RnJhbWUpKTsKIH0K
IAotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3Qg
V2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgbmV3V2luZG93
RnJhbWU7CisgICAgR3JhcGhpY3NSZWN0IG5ld1dpbmRvd0ZyYW1lOwogCiAgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkdldFdpbmRvd0ZyYW1lKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRv
d0ZyYW1lOjpSZXBseShuZXdXaW5kb3dGcmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAog
ICAgIHJldHVybiBuZXdXaW5kb3dGcmFtZTsKIH0KIAotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVu
dDo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQog
ewotICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3BhZ2UtPnNpemUoKSk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1fcGFnZS0+c2l6ZSgpKTsK
IH0KIAogZmxvYXQgV2ViQ2hyb21lQ2xpZW50OjpzY2FsZUZhY3RvcigpCkBAIC01NTksMTMgKzU1
OSwxMyBAQAogewogfQogCi1GbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGln
aHRSZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
bGluZVJlY3QpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRS
ZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
bGluZVJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVu
dDo6cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAordm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBsaW5lUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGJlaGluZFRleHQsIGJvb2wgZW50aXJlTGluZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpA
QCAtNTgyLDcgKzU4Miw3IEBACiAgICAgcmV0dXJuIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVVSUNs
aWVudCgpLmdlbmVyYXRlRmlsZUZvclVwbG9hZChtX3BhZ2UsIHBhdGgpOwogfQogCi1ib29sIFdl
YkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIAorYm9vbCBXZWJDaHJvbWVDbGll
bnQ6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNz
UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBhcnQgcHJl
c3NlZFBhcnQsIGJvb2wgdmVydGljYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZsb2F0IHByb3BvcnRpb24sIFNjcm9sbGJhckNvbnRy
b2xQYXJ0TWFzaykKIHsKQEAgLTU5MCw3ICs1OTAsNyBAQAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCitib29sIFdlYkNocm9tZUNsaWVudDo6cGFpbnRD
dXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDQsNyArMTQ0LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29s
IGVuYWJsZWQpOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJD
b3JlOjpTcGVsbENoZWNrZXIqLCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrLCBj
b25zdCBXVEY6OlN0cmluZyYpOwogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1l
bnRTdHJpbmdzKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIFN0
cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQAog
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICMgRGljdGlvbmFyeSBzdXBwb3J0LgotICAgIFBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50KQor
ICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpHcmFwaGljc1Bv
aW50IHBvaW50KQogI2VuZGlmCiAKICAgICBQcmVmZXJlbmNlc0RpZENoYW5nZShXZWJLaXQ6Oldl
YlByZWZlcmVuY2VzU3RvcmUgc3RvcmUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDcgKzY0NCw3IEBACiAgICAgbV9zY3JvbGxPZmZzZXQg
PSBJbnRTaXplKCk7CiAKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRl
eHQgPSBjcmVhdGVHcmFwaGljc0NvbnRleHQoYml0bWFwLmdldCgpKTsKLSAgICBncmFwaGljc0Nv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCks
IG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKSkpOworICAgIGdyYXBoaWNzQ29udGV4
dC0+c2NhbGUoR3JhcGhpY3NTaXplKG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKSwg
bV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpKSk7CiAKICAgICB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDkwOTI5KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MTQsNyArOTE0LDcgQEAKICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKICAgICAKICAgICBp
ZiAoc2NhbGUpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxl
RmFjdG9yLCBzY2FsZUZhY3RvcikpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEdy
YXBoaWNzU2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICAKICAgICBncmFwaGlj
c0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgZnJhbWVWaWV3
LT5wYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgcmVjdCk7CkBAIC0yMjgyLDcg
KzIyODIsNyBAQAogICAgIG1fcHJpbnRDb250ZXh0LT5iZWdpbihwcmludEluZm8uYXZhaWxhYmxl
UGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KTsKIAogICAgIGZsb2F0
IGZ1bGxQYWdlSGVpZ2h0OwotICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKEZs
b2F0UmVjdCgwLCAwLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2
YWlsYWJsZVBhcGVySGVpZ2h0KSwgMCwgMCwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9y
LCBmdWxsUGFnZUhlaWdodCwgdHJ1ZSk7CisgICAgbV9wcmludENvbnRleHQtPmNvbXB1dGVQYWdl
UmVjdHMoR3JhcGhpY3NSZWN0KDAsIDAsIHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBw
cmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpLCAwLCAwLCBwcmludEluZm8ucGFnZVNldHVw
U2NhbGVGYWN0b3IsIGZ1bGxQYWdlSGVpZ2h0LCB0cnVlKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpl
bmRQcmludGluZygpCkBAIC0yMjk5LDcgKzIyOTksNyBAQAogCiAgICAgaWYgKG1fcHJpbnRDb250
ZXh0KSB7CiAgICAgICAgIHJlc3VsdFBhZ2VSZWN0cyA9IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVj
dHMoKTsKLSAgICAgICAgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0gbV9wcmlu
dENvbnRleHQtPmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3RvcihGbG9hdFNpemUocHJpbnRJbmZv
LmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpICog
cHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yOworICAgICAgICByZXN1bHRUb3RhbFNjYWxl
RmFjdG9yRm9yUHJpbnRpbmcgPSBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZUF1dG9tYXRpY1NjYWxl
RmFjdG9yKEdyYXBoaWNzU2l6ZShwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJ
bmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSkgKiBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0
b3I7CiAgICAgfQogCiAgICAgLy8gSWYgd2UncmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBh
Y3R1YWxseSBwcmludCBhdCBsZWFzdCBhIGJsYW5rIHBhZ2UuCkBAIC0yMzMwLDcgKzIzMzAsNyBA
QAogICAgICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8u
Z2V0KCkpOwogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjdHgoY29udGV4dC5nZXQoKSk7Ci0g
ICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAgICAgY3R4LnNjYWxlKEdy
YXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1yZWN0LmhlaWdo
dCgpKTsKICAgICAgICAgbV9wcmludENvbnRleHQtPnNwb29sUmVjdChjdHgsIHJlY3QpOwogCkBA
IC0yMzY2LDcgKzIzNjYsNyBAQAogICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNv
bnRleHQuZ2V0KCksIHBhZ2VJbmZvLmdldCgpKTsKIAogICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGN0eChjb250ZXh0LmdldCgpKTsKLSAgICAgICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICAgICAgICAgIGN0eC5zY2FsZShHcmFwaGljc1NpemUoMSwgLTEpKTsKICAg
ICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLW1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdl
KS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwg
cGFnZSwgbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkpOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCShyZXZpc2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw3IEBACiAg
ICAgcmV0dXJuIGlzUG9zaXRpb25JblJhbmdlKHBvc2l0aW9uLCBzZWxlY3RlZFJhbmdlLmdldCgp
KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZsb2F0UG9pbnQpCiB7
CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1l
KQpAQCAtNTI5LDcgKzUyOSw3IEBACiAgICAgaWYgKCFmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZl
Y3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgIHJhbmdlLT50ZXh0UXVhZHMocXVhZHMpOwog
ICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzOCw3ICs1Mzgs
NyBAQAogICAgIAogICAgIERpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbzsK
ICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnR5cGUgPSB0eXBlOwotICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8ub3JpZ2luID0gRmxvYXRQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpKTsK
KyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEdyYXBoaWNzUG9pbnQocmFuZ2VSZWN0
LngoKSwgcmFuZ2VSZWN0LnkoKSk7CiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5mb250SW5mby5m
b250QXR0cmlidXRlRGljdGlvbmFyeSA9IGZvbnREZXNjcmlwdG9yQXR0cmlidXRlczsKICNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgZGljdGlvbmFyeVBvcHVwSW5m
by5vcHRpb25zID0gKENGRGljdGlvbmFyeVJlZilvcHRpb25zOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA5MDkyOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIC8vIFdl
IHdhbnQgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcy4KICAgICBJbnRS
ZWN0IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gc2VsZWN0ZWRGcmFtZS0+dmll
dygpLT5jb250ZW50c1RvV2luZG93KHNlbGVjdGlvblJlY3QpOwogICAgIAotICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IHRleHRSZWN0czsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0ZXh0UmVjdHM7
CiAgICAgc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCktPmdldENsaXBwZWRWaXNpYmxlVGV4dFJl
Y3RhbmdsZXModGV4dFJlY3RzKTsKIAogICAgIC8vIENyZWF0ZSBhIGJhY2tpbmcgc3RvcmUgYW5k
IHBhaW50IHRoZSBmaW5kIGluZGljYXRvciB0ZXh0IGludG8gaXQuCkBAIC0xOTgsNyArMTk4LDcg
QEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgdGV4dCByZWN0
cyBpbiBzZWxlY3Rpb24gcmVjdCBjb29yZGluYXRlcy4KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKKyAgICBWZWN0b3I8R3JhcGhpY3NS
ZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKICAgICAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHRleHRSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBJbnRS
ZWN0IHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMgPSBzZWxlY3RlZEZyYW1lLT52
aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdHNbaV0pKTsK
QEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNldEZpbmRJbmRpY2F0b3IoRmxvYXRSZWN0KCksIFZlY3RvcjxGbG9hdFJlY3Q+KCks
IGhhbmRsZSwgZmFsc2UpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2V0RmluZEluZGljYXRvcihHcmFwaGljc1JlY3QoKSwgVmVjdG9yPEdyYXBoaWNzUmVj
dD4oKSwgaGFuZGxlLCBmYWxzZSkpOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZh
bHNlOwogfQogCkBAIC0zMDIsNyArMzAyLDcgQEAKICAgICB7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09m
ZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBob2xlU2hhZG93Q29sb3IoZnJhY3Rpb25GYWRlZElu
KSwgQ29sb3JTcGFjZVNSR0IpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEdy
YXBoaWNzU2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1
cywgaG9sZVNoYWRvd0NvbG9yKGZyYWN0aW9uRmFkZWRJbiksIENvbG9yU3BhY2VTUkdCKTsKICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihob2xlRmlsbENvbG9yKGZyYWN0aW9u
RmFkZWRJbiksIENvbG9yU3BhY2VTUkdCKTsKIAogICAgICAgICAvLyBEcmF3IHdoaXRlIGZyYW1l
cyBhcm91bmQgdGhlIGhvbGVzLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RD
QS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxNiArMTMzLDE2IEBACiAKICAgICAvLyBJZiB0
aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVu
dCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKICAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhw
b3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zaXplKCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXRTaXplKG5ld1NpemUpOwogCiAgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUu
d2lkdGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxm
bG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qo
b2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhl
aWdodCkpOworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxHcmFw
aGljc1VuaXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoR3JhcGhp
Y3NSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0
aCgpLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndp
ZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisgICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEdyYXBoaWNz
UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0
KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CiAKICAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQog
ICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDkwOTI5
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIwLDcgKzUyMCw3IEBACiAgICAgdm9pZCBzZXRDdXN0b21UZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJD
b3JlOjpHcmFwaGljc1BvaW50Jik7CiAgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clJhbmdlKERpY3Rpb25hcnlQb3B1cEluZm86OlR5cGUsIFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29y
ZTo6UmFuZ2UqLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMpOwogCiAgICAgdm9pZCBzZXRXaW5kb3dJ
c1Zpc2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2Ny
aXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3
ICsyNTUsNyBAQAogICAgICAgICAnV2ViQ29yZTo6QW5pbWF0aW9uJywKICAgICAgICAgJ1dlYkNv
cmU6OkVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQnLAogICAgICAgICAnV2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmUnLAotICAgICAgICAnV2ViQ29yZTo6RmxvYXRQb2ludDNEJywKKyAgICAg
ICAgJ1dlYkNvcmU6OkdyYXBoaWNzUG9pbnQzRCcsCiAgICAgICAgICdXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsJywKICAgICAgICAgJ1dlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uJywK
ICAgICAgICAgJ1dlYkNvcmU6OktleXByZXNzQ29tbWFuZCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQkocmV2aXNpb24gOTA5MjkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKICAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVy
cyAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CiAgICAgZG91YmxlIHRpbWVz
dGFtcCAgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IHRpbWVzdGFtcF07CiAgICAgCi0g
ICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBJbnRQb2ludChwb3NpdGlv
biksIEludFBvaW50KGdsb2JhbFBvc2l0aW9uKSwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwg
RmxvYXRTaXplKHdoZWVsVGlja3NYLCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBwaGFzZSwg
bW9tZW50dW1QaGFzZSwgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgbW9kaWZpZXJzLCB0aW1l
c3RhbXApOworICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgSW50UG9p
bnQocG9zaXRpb24pLCBJbnRQb2ludChnbG9iYWxQb3NpdGlvbiksIEdyYXBoaWNzU2l6ZShkZWx0
YVgsIGRlbHRhWSksIEdyYXBoaWNzU2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFu
dWxhcml0eSwgcGhhc2UsIG1vbWVudHVtUGhhc2UsIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMs
IG1vZGlmaWVycywgdGltZXN0YW1wKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqKQpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAko
cmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRB
UElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWJV
UkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0NvbnRleHRNZW51SXRlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
TG9hZGVyVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3
dGYvVHlwZVRyYWl0cy5oPgpAQCAtMTg4LDkgKzE4OCw5IEBACiAKIC8qIEdlb21ldHJ5IGNvbnZl
cnNpb25zICovCiAKLWlubGluZSBXZWJDb3JlOjpGbG9hdFJlY3QgdG9GbG9hdFJlY3QoY29uc3Qg
V0tSZWN0JiB3a1JlY3QpCitpbmxpbmUgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHRvR3JhcGhpY3NS
ZWN0KGNvbnN0IFdLUmVjdCYgd2tSZWN0KQogewotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJl
Y3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGZsb2F0
Pih3a1JlY3Qub3JpZ2luLnkpLAorICAgIHJldHVybiBXZWJDb3JlOjpHcmFwaGljc1JlY3Qoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGZsb2F0Pih3a1Jl
Y3Qub3JpZ2luLnkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHdrUmVjdC5zaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5zaXpl
LmhlaWdodCkpOwogfQogCkBAIC0yMTAsNyArMjEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHdrUmVjdC5zaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8
aW50Pih3a1JlY3Quc2l6ZS5oZWlnaHQpKTsKIH0KIAotaW5saW5lIFdLUmVjdCB0b0FQSShjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCitpbmxpbmUgV0tSZWN0IHRvQVBJKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBXS1JlY3Qgd2tSZWN0OwogICAgIHdr
UmVjdC5vcmlnaW4ueCA9IHJlY3QueCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDkgKzM0LDkgQEAKICAgICBjbGFzcyBDcmVkZW50aWFsOwogICAgIGNsYXNzIEN1cnNvcjsKICAg
ICBjbGFzcyBEYXRhYmFzZURldGFpbHM7Ci0gICAgY2xhc3MgRmxvYXRQb2ludDsKLSAgICBjbGFz
cyBGbG9hdFJlY3Q7Ci0gICAgY2xhc3MgRmxvYXRTaXplOworICAgIGNsYXNzIEdyYXBoaWNzUG9p
bnQ7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzU2l6ZTsKICAg
ICBjbGFzcyBIVFRQSGVhZGVyTWFwOwogICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIElu
dFJlY3Q7CkBAIC02Myw3ICs2Myw3IEBACiAjaWYgUExBVEZPUk0oUVQpCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgQW5pbWF0aW9uOwotICAgIGNsYXNzIEZsb2F0UG9pbnQzRDsKKyAg
ICBjbGFzcyBHcmFwaGljc1BvaW50M0Q7CiAgICAgY2xhc3MgTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb247CiAgICAgY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOwogICAgIGNsYXNzIFBl
cnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOwpAQCAtODEsMTkgKzgxLDE5IEBACiAKIG5hbWVz
cGFjZSBDb3JlSVBDIHsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpGbG9hdFBvaW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlcios
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1BvaW50PiB7CisgICAgc3RhdGljIHZvaWQg
ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NQb2ludCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UmVjdCYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9h
dFNpemU+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciosIFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpHcmFwaGljc1NpemU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJik7CisgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYpOwog
fTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJbnRQb2ludD4g
ewpAQCAtMjAzLDkgKzIwMyw5IEBACiB9OwogCiAjaWYgUExBVEZPUk0oUVQpCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
M0QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6
RmxvYXRQb2ludDNEJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkdyYXBoaWNzUG9pbnQzRD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1BvaW50M0QmKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NQb2ludDNEJik7CiB9Owog
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okxlbmd0aD4gewpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7ICAgIAogCi1XZWJXaGVl
bEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
LCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEs
IGNvbnN0IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1v
ZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCitXZWJXaGVlbEV2ZW50OjpXZWJX
aGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEsIGNvbnN0IEdy
YXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVy
cyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2Rp
ZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgLCBtX2ds
b2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQpAQCAtNDksNyArNDksNyBAQAogfQogCiAjaWYg
UExBVEZPUk0oTUFDKQotV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwgYm9v
bCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3VibGUg
dGltZXN0YW1wKQorV2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudChUeXBlIHR5cGUsIGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25z
dCBHcmFwaGljc1NpemUmIGRlbHRhLCBjb25zdCBHcmFwaGljc1NpemUmIHdoZWVsVGlja3MsIEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSwg
Ym9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCBNb2RpZmllcnMgbW9kaWZpZXJzLCBkb3Vi
bGUgdGltZXN0YW1wKQogICAgIDogV2ViRXZlbnQodHlwZSwgbW9kaWZpZXJzLCB0aW1lc3RhbXAp
CiAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9i
YWxQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25hcnlQb3B1
cEluZm8uaAkocmV2aXNpb24gOTA5MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlv
bmFyeVBvcHVwSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5l
IERpY3Rpb25hcnlQb3B1cEluZm9faAogCiAjaW5jbHVkZSAiRm9udEluZm8uaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUG9pbnQu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00
OSw3ICs0OSw3IEBACiAgICAgICAgIEhvdEtleQogICAgIH07CiAKLSAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IG9yaWdpbjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1BvaW50IG9yaWdpbjsKICAgICBG
b250SW5mbyBmb250SW5mbzsKICAgICBUeXBlIHR5cGU7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gOTA5MjkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSA8
V2ViQ29yZS9BbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NQb2ludDNELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
ZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWF0cml4M0RU
cmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL01hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5oPgpAQCAtNjIsMzYgKzYyLDM2IEBACiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAot
dm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyLCBjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQordm9pZCBBcmd1bWVudENvZGVy
PEdyYXBoaWNzUG9pbnQ+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBH
cmFwaGljc1BvaW50JiBmbG9hdFBvaW50KQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Rmxv
YXRQb2ludD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50KTsKKyAgICBTaW1wbGVBcmd1bWVu
dENvZGVyPEdyYXBoaWNzUG9pbnQ+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludCk7CiB9CiAK
LWJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFw
aGljc1BvaW50Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgR3JhcGhpY3NQb2lu
dCYgZmxvYXRQb2ludCkKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBv
aW50Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQpOworICAgIHJldHVybiBTaW1wbGVBcmd1
bWVudENvZGVyPEdyYXBoaWNzUG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludCk7CiB9
CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmVuY29kZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIsIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0KQordm9pZCBBcmd1bWVudENv
ZGVyPEdyYXBoaWNzUmVjdD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZmxvYXRSZWN0KQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Rmxv
YXRSZWN0Pjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UmVjdCk7CisgICAgU2ltcGxlQXJndW1lbnRD
b2RlcjxHcmFwaGljc1JlY3Q+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRSZWN0KTsKIH0KIAotYm9v
bCBBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIEZsb2F0UmVjdCYgZmxvYXRSZWN0KQorYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzUmVj
dD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdyYXBoaWNzUmVjdCYgZmxvYXRS
ZWN0KQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmRlY29k
ZShkZWNvZGVyLCBmbG9hdFJlY3QpOworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEdy
YXBoaWNzUmVjdD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFJlY3QpOwogfQogCiAKLXZvaWQgQXJn
dW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBj
b25zdCBGbG9hdFNpemUmIGZsb2F0U2l6ZSkKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc1Np
emU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc1NpemUm
IGZsb2F0U2l6ZSkKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmVuY29k
ZShlbmNvZGVyLCBmbG9hdFNpemUpOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NT
aXplPjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0U2l6ZSk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2Rl
cjxGbG9hdFNpemU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBGbG9hdFNpemUm
IGZsb2F0U2l6ZSkKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+OjpkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc1NpemUmIGZsb2F0U2l6ZSkKIHsKLSAgICBy
ZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjpkZWNvZGUoZGVjb2RlciwgZmxv
YXRTaXplKTsKKyAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+Ojpk
ZWNvZGUoZGVjb2RlciwgZmxvYXRTaXplKTsKIH0KIAogCkBAIC01NTIsMTQgKzU1MiwxNCBAQAog
CiAjaWYgUExBVEZPUk0oUVQpCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50M0QmIGZsb2F0
UG9pbnQzRCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50M0Q+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc1BvaW50M0QmIGZsb2F0UG9pbnQz
RCkKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNv
ZGVyLCBmbG9hdFBvaW50M0QpOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2lu
dDNEPjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQzRCk7CiB9CiAKLWJvb2wgQXJndW1lbnRD
b2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBGbG9h
dFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50
M0Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc1BvaW50M0QmIGZs
b2F0UG9pbnQzRCkKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludDNEKTsKKyAgICByZXR1cm4gU2ltcGxlQXJn
dW1lbnRDb2RlcjxHcmFwaGljc1BvaW50M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludDNE
KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkocmV2aXNpb24gOTA5Mjkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBtb3ZlIHRvIG1ha2Vp
bmcgdGhlIFdlYkNvcmUvUGxhdGZvcm1Gb29FdmVudHMgdHJpdmlhbCBjbGFzc2VzIHNvIHRoYXQK
IC8vIHdlIGNhbiB1c2UgdGhlbSBhcyB0aGUgZXZlbnQgdHlwZS4KIAotI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1NpemUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTE3NywxNSArMTc3LDE1IEBACiAKICAgICBXZWJXaGVlbEV2ZW50KCkgeyB9CiAKLSAg
ICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdy
YW51bGFyaXR5LCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOworICAgIFdlYldoZWVsRXZl
bnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYg
ZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJp
dHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3Jh
bnVsYXJpdHksIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLGJvb2wgaGFzUHJlY2lz
ZVNjcm9sbGluZ0RlbHRhcywgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyAgICBXZWJX
aGVlbEV2ZW50KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1NpemUmIGRlbHRhLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIHdoZWVsVGlja3MsIEdy
YW51bGFyaXR5LCBQaGFzZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSxib29sIGhhc1ByZWNp
c2VTY3JvbGxpbmdEZWx0YXMsIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CiAjZW5kaWYK
IAogICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbjsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxQb3NpdGlvbjsgfQotICAgIGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSBkZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsdGE7IH0KLSAgICBjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUgd2hlZWxUaWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxUaWNr
czsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSBkZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVsdGE7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUgd2hlZWxUaWNr
cygpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxUaWNrczsgfQogICAgIEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R3JhbnVsYXJpdHk+KG1fZ3JhbnVs
YXJpdHkpOyB9CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFBoYXNlIHBoYXNlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UGhhc2U+KG1fcGhhc2UpOyB9CkBAIC0yMDEsOCArMjAxLDggQEAK
IAogICAgIFdlYkNvcmU6OkludFBvaW50IG1fcG9zaXRpb247CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgbV9nbG9iYWxQb3NpdGlvbjsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9kZWx0YTsKLSAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgbV93aGVlbFRpY2tzOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
U2l6ZSBtX2RlbHRhOworICAgIFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSBtX3doZWVsVGlja3M7CiAg
ICAgdWludDMyX3QgbV9ncmFudWxhcml0eTsgLy8gR3JhbnVsYXJpdHkKICNpZiBQTEFURk9STShN
QUMpCiAgICAgdWludDMyX3QgbV9waGFzZTsgLy8gUGhhc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100862</attachid>
            <date>2011-07-14 14:21:14 -0700</date>
            <delta_ts>2011-07-14 14:42:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64413-20110714142113.patch</filename>
            <type>text/plain</type>
            <size>1891021</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3Qv
UG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3Jh
cGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3Vy
cmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dG
bG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxv
YXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1
bmN0aW9uYWxpdHkuCisKIDIwMTEtMDctMTQgIEplZmZyZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNv
bT4KIAogICAgICAgICBDaGFyYWN0ZXIgcmVmZXJlbmNlIHBhcnNlciBmb3IgbmV3IFhNTCBwYXJz
ZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU2LDExICsxMDU2LDYg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbnRleHRTaGFkb3cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwCkBAIC0xMDczLDYgKzEwNjgsMTEgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9p
bnQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1JlY3QuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjQ3NSwx
NiArMjQ3NSw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9OLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvYXJtL0ZFTGlnaHRpbmdORU9OLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGlu
Z05FT04uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNE
LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmggXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAgXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFJlY3QuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRCYXNlbGluZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBcCkBAIC0yNTIxLDYgKzI1
MTEsMTYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NQb2ludDNELmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NQb2ludDNELmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzUG9pbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1BvaW50LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
UXVhZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVh
ZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMzRC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgX19aTjNXVEY2U3RyaW5nQzFFUDhO
U1N0cmluZwogX19aTjNXVEY2U3RyaW5nQzFFUEsxMF9fQ0ZTdHJpbmcKIF9fWk43V2ViQ29yZTEw
Q3JlZGVudGlhbEMxRVJLTjNXVEY2U3RyaW5nRVM0X05TXzIxQ3JlZGVudGlhbFBlcnNpc3RlbmNl
RQogX19aTjdXZWJDb3JlMTBDcmVkZW50aWFsQzFFdgotX19aTjdXZWJDb3JlMTBGbG9hdFBvaW50
QzFFUktOU184SW50UG9pbnRFCitfX1pON1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRDMUVSS05TXzhJ
bnRQb2ludEUKIF9fWk43V2ViQ29yZTEwSlNEb2N1bWVudDNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVS
S05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCiBf
X1pON1dlYkNvcmUxMEpTRG9jdW1lbnQ2c19pbmZvRQogX19aTjdXZWJDb3JlMTBNb3VzZUV2ZW50
NmNyZWF0ZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFTlMxXzEwUGFzc1JlZlB0cklOU185RE9NV2lu
ZG93RUVFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEVpTlM1X0lOU180Tm9kZUVFRQpAQCAtMjIw
LDkgKzIyMCw5IEBAIF9fWk43V2ViQ29yZTExbWVtb3J5Q2FjaGVFdgogX19aTjdXZWJDb3JlMTFz
dGFydE9mV29yZEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzlFV29yZFNpZGVFCiBfX1pON1dl
YkNvcmUxMXRvVXNlclNwYWNlRVJLN19OU1JlY3RQOE5TV2luZG93CiBfX1pON1dlYkNvcmUxMXdy
aXRlVG9GaWxlRWlQS2NpCi1fX1pON1dlYkNvcmUxMkNocm9tZUNsaWVudDIwcGFpbnRDdXN0b21T
Y3JvbGxiYXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVOU18yMFNjcm9s
bGJhckNvbnRyb2xTaXplRWpOU18xM1Njcm9sbGJhclBhcnRFYmZmagorX19aTjdXZWJDb3JlMTJD
aHJvbWVDbGllbnQyMHBhaW50Q3VzdG9tU2Nyb2xsYmFyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzEyR3JhcGhpY3NSZWN0RU5TXzIwU2Nyb2xsYmFyQ29udHJvbFNpemVFak5TXzEzU2Nyb2xs
YmFyUGFydEViZmZqCiBfX1pON1dlYkNvcmUxMkNocm9tZUNsaWVudDIzcGFpbnRDdXN0b21PdmVy
aGFuZ0FyZWFFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0ludFJlY3RFUzVfUzVfCi1fX1pO
N1dlYkNvcmUxMkNocm9tZUNsaWVudDIzcGFpbnRDdXN0b21TY3JvbGxDb3JuZXJFUE5TXzE1R3Jh
cGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50
MjNwYWludEN1c3RvbVNjcm9sbENvcm5lckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdy
YXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTEyRWRpdGluZ1N0eWxlRDFFdgogX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIxMG1vdXNlTW92ZWRFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjEwbW91c2VNb3ZlZEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQpAQCAtMjY1LDE0
ICsyNjUsMTQgQEAgX19aTjdXZWJDb3JlMTJJY29uRGF0YWJhc2VDMUV2CiBfX1pON1dlYkNvcmUx
MkpTRE9NV3JhcHBlcjM0dmlydHVhbEZ1bmN0aW9uVG9QcmV2ZW50V2Vha1Z0YWJsZUV2CiBfX1pO
N1dlYkNvcmUxMlBvcHVwTWVudU1hY0MxRVBOU18xNVBvcHVwTWVudUNsaWVudEUKIF9fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0MTJwYWdlUHJvcGVydHlFUE5TXzVGcmFtZUVQS2NpCi1fX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDEzbnVtYmVyT2ZQYWdlc0VQTlNfNUZyYW1lRVJLTlNfOUZsb2F0
U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTZjb21wdXRlUGFnZVJlY3RzRVJLTlNf
OUZsb2F0UmVjdEVmZmZSZmIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTNudW1iZXJPZlBh
Z2VzRVBOU181RnJhbWVFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43V2ViQ29yZTEyUHJpbnRD
b250ZXh0MTZjb21wdXRlUGFnZVJlY3RzRVJLTlNfMTJHcmFwaGljc1JlY3RFZmZmUmZiCiBfX1pO
N1dlYkNvcmUxMlByaW50Q29udGV4dDE2aXNQYWdlQm94VmlzaWJsZUVQTlNfNUZyYW1lRWkKLV9f
Wk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjBwYWdlTnVtYmVyRm9yRWxlbWVudEVQTlNfN0VsZW1l
bnRFUktOU185RmxvYXRTaXplRQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1i
ZXJGb3JFbGVtZW50RVBOU183RWxlbWVudEVSS05TXzEyR3JhcGhpY3NTaXplRQogX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHQyNnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzRVBOU181RnJhbWVF
aWlpaWlpaQotX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyN2NvbXB1dGVBdXRvbWF0aWNTY2Fs
ZUZhY3RvckVSS05TXzlGbG9hdFNpemVFCi1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3c3Bv
b2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzRVBOU181RnJhbWVFUk5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFn
ZVJlY3RzV2l0aFBhZ2VTaXplRVJLTlNfOUZsb2F0U2l6ZUViCitfX1pON1dlYkNvcmUxMlByaW50
Q29udGV4dDI3Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yRVJLTlNfMTJHcmFwaGljc1NpemVF
CitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVz
RVBOU181RnJhbWVFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1NpemVFCitf
X1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI4Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUVS
S05TXzEyR3JhcGhpY3NTaXplRWIKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0M2VuZEV2CiBf
X1pON1dlYkNvcmUxMlByaW50Q29udGV4dDViZWdpbkVmZgogX19aTjdXZWJDb3JlMTJQcmludENv
bnRleHQ5c3Bvb2xQYWdlRVJOU18xNUdyYXBoaWNzQ29udGV4dEVpZgpAQCAtMzI1LDcgKzMyNSw3
IEBAIF9fWk43V2ViQ29yZTEzUmVzb3VyY2VFcnJvckMxRVA5X19DRkVycm8KIF9fWk43V2ViQ29y
ZTEzVHlwaW5nQ29tbWFuZDM5aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
RVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxM2Rp
cmVjdG9yeU5hbWVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VF
UktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKK19fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVS
S05TXzEyR3JhcGhpY3NSZWN0RVA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTEzdG9IVE1MRWxlbWVu
dEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNET01XaW5k
b3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJlbW92ZUNs
aWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKQEAgLTQwOSwxNiArNDA5LDE2IEBAIF9f
Wk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjFzZXRDb21wb3MKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0MjJiZWdpblRyYW5zcGFyZW5jeUxheWVyRWYKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0NGNsaXBFUktOU180UGF0aEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0NGNsaXBFUktOU183SW50UmVjdEUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NGNs
aXBFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVS
S05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0c2F2ZUV2
Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzlGbG9hdFNpemVFCitf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzEyR3JhcGhpY3NTaXplRQog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ3cmVzdG9yZUV2CiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDhmaWxsUGF0aEVSS05TXzRQYXRoRQotX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JT
cGFjZUUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWNsZWFyUmVjdEVSS05TXzlGbG9h
dFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzEyR3Jh
cGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU18x
MkdyYXBoaWNzUmVjdEVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCitfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDljbGVhclJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0OWRyYXdJbWFnZUVQTlNfNUltYWdlRU5TXzEwQ29sb3JTcGFj
ZUVSS05TXzhJbnRQb2ludEVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQotX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ5c2V0U2hhZG93RVJLTlNfOUZsb2F0U2l6ZUVmUktOU181Q29sb3JFTlNf
MTBDb2xvclNwYWNlRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5c2V0U2hhZG93RVJL
TlNfMTJHcmFwaGljc1NpemVFZlJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKIF9fWk43V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0OXRyYW5zbGF0ZUVmZgogX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHRDMUVQOUNHQ29udGV4dAogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHREMUV2
CkBAIC00ODksNyArNDg5LDcgQEAgX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNf
NE5vZAogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQogX19aTjdX
ZWJDb3JlMTZkZWxldGVBbGxDb29raWVzRXYKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVj
dEVSSzdfTlNSZWN0Ci1fX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185RmxvYXRS
ZWN0RQorX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RF
CiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVO
U18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE2c3RhcnRPZlBh
cmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlRQogX19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTI0Z2V0RnJvbVBlcnNpc3Rl
bnRTdG9yYWdlRVJLTlNfMTVQcm90ZWN0aW9uU3BhY2VFCkBAIC03MTYsNyArNzE2LDcgQEAgX19a
TjdXZWJDb3JlNFBhZ2U5Z29Gb3J3YXJkRXYKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2
CiBfX1pON1dlYkNvcmU0UGFnZUMxRVJOUzBfMTFQYWdlQ2xpZW50c0UKIF9fWk43V2ViQ29yZTRQ
YWdlRDFFdgotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfOUZsb2F0UmVj
dEVSS05TXzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmU0UGF0aDE0YWRkUm91bmRlZFJlY3RFUktO
U18xMkdyYXBoaWNzUmVjdEVSS05TXzEyR3JhcGhpY3NTaXplRQogX19aTjdXZWJDb3JlNFBhdGhD
MUV2CiBfX1pON1dlYkNvcmU0UGF0aEQxRXYKIF9fWk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJv
dGVjdGlvblNwYWNlCkBAIC03MzQsNyArNzM0LDcgQEAgX19aTjdXZWJDb3JlNUZyYW1lMTdzZXRU
ZXh0Wm9vbUZhY3RvckVmCiBfX1pON1dlYkNvcmU1RnJhbWUyM3Zpc2libGVQb3NpdGlvbkZvclBv
aW50RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVtYXRjaExhYmVsc0FnYWlu
c3RFbGVtZW50RVA3TlNBcnJheVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZTVGcmFtZTI1c2V0
UGFnZUFuZFRleHRab29tRmFjdG9yc0VmZgotX19aTjdXZWJDb3JlNUZyYW1lMjdyZXNpemVQYWdl
UmVjdHNLZWVwaW5nUmF0aW9FUktOU185RmxvYXRTaXplRVMzXworX19aTjdXZWJDb3JlNUZyYW1l
MjdyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW9FUktOU18xMkdyYXBoaWNzU2l6ZUVTM18KIF9f
Wk43V2ViQ29yZTVGcmFtZTI4c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudEVQN05TQXJyYXlQ
TlNfN0VsZW1lbnRFUG1QYgogX19aTjdXZWJDb3JlNUZyYW1lNmNyZWF0ZUVQTlNfNFBhZ2VFUE5T
XzIxSFRNTEZyYW1lT3duZXJFbGVtZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdX
ZWJDb3JlNUZyYW1lN3NldFZpZXdFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOUZyYW1lVmlld0VFRQpA
QCAtODI0LDcgKzgyNCw3IEBAIF9fWk43V2ViQ29yZTdFbGVtZW50MTZyZW1vdmVTaGFkb3dSb290
RXYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXNjYWxlRWYKIF9fWk43V2ViQ29yZTdJbnRSZWN0NXVu
aXRlRVJLUzBfCiBfX1pON1dlYkNvcmU3SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk43V2Vi
Q29yZTdJbnRSZWN0QzFFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlN0ludFJlY3RDMUVS
S05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlN0ludFNpemVDMUVSSzdfTlNTaXplCiBf
X1pON1dlYkNvcmU3VGV4dFJ1bjE5YWxsb3dzUm91bmRpbmdIYWNrc0V2CiBfX1pON1dlYkNvcmU3
VGV4dFJ1bjIxc19hbGxvd3NSb3VuZGluZ0hhY2tzRQpAQCAtODUwLDcgKzg1MCw3IEBAIF9fWk43
V2ViQ29yZThEb2N1bWVudDRoZWFkRXYKIF9fWk43V2ViQ29yZThGb3JtRGF0YTZjcmVhdGVFUEt2
bQogX19aTjdXZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50MTJhZGRD
b2xvclN0b3BFZlJLTlNfNUNvbG9yRQotX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18xMEZs
b2F0UG9pbnRFUzNfCitfX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEzR3JhcGhpY3NQb2lu
dEVTM18KIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50CiBfX1pON1dlYkNvcmU4
UG9zaXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlOUzBfMTBBbmNob3JUeXBl
RQogX19aTjdXZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViCkBAIC05MjksOSArOTI5
LDkgQEAgX19aTjdXZWJDb3JlOG9wZW5GaWxlRVJLTjNXVEY2U3RyaW5nRU5TXwogX19aTjdXZWJD
b3JlOHRvU3RyaW5nRVJLTjNXVEY2VmVjdG9ySU5TXzExUHJveHlTZXJ2ZXJFTG0wRUVFCiBfX1pO
N1dlYkNvcmU5RE9NV2luZG93MzBkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHNFdgogX19a
TjdXZWJDb3JlOURPTVdpbmRvdzM2ZGlzcGF0Y2hBbGxQZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRz
RXYKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzdfTlNSZWN0Ci1fX1pON1dlYkNvcmU5Rmxv
YXRSZWN0QzFFUktOU183SW50UmVjdEUKLV9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJ
bnRTaXplRQorX19aTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RDMUVSSzdfTlNSZWN0CitfX1pON1dl
YkNvcmUxMkdyYXBoaWNzUmVjdEMxRVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMkdyYXBo
aWNzU2l6ZUMxRVJLTlNfN0ludFNpemVFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTNmb250RGF0
YUNvdW50RXYKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUyMWluYWN0aXZlRm9udERhdGFDb3VudEV2
CiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMjFwdXJnZUluYWN0aXZlRm9udERhdGFFaQpAQCAtOTUz
LDcgKzk1Myw3IEBAIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMGVudGVyQ29tcG9zaXRpbmcKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyMWZsdXNoRGVmZXJyZWRSZXBhaW50c0V2CiBfX1pON1dlYkNv
cmU5RnJhbWVWaWV3MjJzZXRCYXNlQmFja2dyb3VuZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdX
ZWJDb3JlOUZyYW1lVmlldzIzdXBkYXRlQ2FuSGF2ZVNjcm9sbGJhcnNFdgotX19aTjdXZWJDb3Jl
OUZyYW1lVmlldzI0Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uRVJLTlNfOUZsb2F0U2l6ZUVmTlNf
MTlBZGp1c3RWaWV3U2l6ZU9yTm90RQorX19aTjdXZWJDb3JlOUZyYW1lVmlldzI0Zm9yY2VMYXlv
dXRGb3JQYWdpbmF0aW9uRVJLTlNfMTJHcmFwaGljc1NpemVFZk5TXzE5QWRqdXN0Vmlld1NpemVP
ck5vdEUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyNmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVk
RVBmZmZmCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjlzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNj
cmVlbkViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3Mzd1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVl
ZGVkUmVjdXJzaXZlRXYKQEAgLTEwMzcsNyArMTAzNyw3IEBAIF9fWk5LN1dlYkNvcmUxMENyZWRl
bnRpYWwxMXBlcnNpc3RlbmNlRXYKIF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWw0dXNlckV2CiBf
X1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTEwQ3JlZGVu
dGlhbDhwYXNzd29yZEV2Ci1fX1pOSzdXZWJDb3JlMTBGbG9hdFBvaW50Y3Y4X05TUG9pbnRFdgor
X19aTks3V2ViQ29yZTEzR3JhcGhpY3NQb2ludGN2OF9OU1BvaW50RXYKIF9fWk5LN1dlYkNvcmUx
MFBsdWdpbkRhdGExNnN1cHBvcnRzTWltZVR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pOSzdXZWJD
b3JlMTBSZW5kZXJUZXh0MTZsaW5lc0JvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMFJlbmRl
clRleHQ5Zmlyc3RSdW5YRXYKQEAgLTEwODgsNyArMTA4OCw3IEBAIF9fWk5LN1dlYkNvcmUxMklj
b25EYXRhYmFzZTEyZGF0YWJhc2VQYXQKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTI0c2hv
dWxkU3RvcFRocmVhZEFjdGl2aXR5RXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTlpc0Vu
YWJsZWRFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNsb3NpbmdMYXllckV2Ci1f
X1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEwRmxvYXRQ
b2ludEViYgorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktO
U18xM0dyYXBoaWNzUG9pbnRFYmIKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDR2aWV3RXYK
IF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDdjaGlsZEF0RWoKIF9fWk5LN1dlYkNvcmUxMlJl
bmRlcldpZGdldDE0d2luZG93Q2xpcFJlY3RFdgpAQCAtMTEzOCw3ICsxMTM4LDcgQEAgX19aTks3
V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xMWN1cnJlbnRGbwogX19aTks3V2ViQ29yZTE0RnJhbWVT
ZWxlY3Rpb24xNWNvcHlUeXBpbmdTdHlsZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlv
bjE3aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlz
Rm9jdXNlZEFuZEFjdGl2ZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xp
cHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0w
RUVFCitfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZpc2libGVUZXh0
UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NSZWN0RUxtMEVFRQogX19aTks3
V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb242Ym91bmRzRWIKIF9fWk5LN1dlYkNvcmUxNFJlbmRlckxp
c3RJdGVtMTBtYXJrZXJUZXh0RXYKIF9fWk5LN1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMTBjb25u
ZWN0aW9uRXYKQEAgLTEyMDksNyArMTIwOSw3IEBAIF9fWk5LN1dlYkNvcmUyN0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQmEKIF9fWk5LN1dlYkNvcmUyN0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFz
ZTVlcnJvckV2CiBfX1pOSzdXZWJDb3JlMjdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2U2aXNO
dWxsRXYKIF9fWk5LN1dlYkNvcmU0Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdIYXNo
U2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNoVHJh
aXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdU
ZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50
RWlpCitfX1pOSzdXZWJDb3JlNEZvbnQ4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWkKIF9fWk5LN1dlYkNvcmU0S1VSTDEw
cHJvdG9jb2xJc0VQS2MKIF9fWk5LN1dlYkNvcmU0S1VSTDExY3JlYXRlQ0ZVUkxFdgogX19aTks3
V2ViQ29yZTRLVVJMMTFpc0xvY2FsRmlsZUV2CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQCBfX1pOSzdX
ZWJDb3JlNVJhbmdlMjFjb21wYXJlQm91bmRhcnlQb2luCiBfX1pOSzdXZWJDb3JlNVJhbmdlNHRl
eHRFdgogX19aTks3V2ViQ29yZTVSYW5nZTllbmRPZmZzZXRFUmkKIF9fWk5LN1dlYkNvcmU1UmFu
Z2U5Zmlyc3ROb2RlRXYKLV9fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZWZWN0
b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUViCitfX1pOSzdXZWJDb3JlNVJhbmdlOXRleHRRdWFkc0VS
TjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRWIKIF9fWk5LN1dlYkNvcmU2Q2hy
b21lMTJjcmVhdGVXaW5kb3dFUE5TXzVGcmFtZUVSS05TXzE2RnJhbWVMb2FkUmVxdWVzdEVSS05T
XzE0V2luZG93RmVhdHVyZXNFUktOU18xNk5hdmlnYXRpb25BY3Rpb25FCiBfX1pOSzdXZWJDb3Jl
NkN1cnNvcjE0cGxhdGZvcm1DdXJzb3JFdgogX19aTks3V2ViQ29yZTZFZGl0b3IxMnNlbGVjdGVk
VGV4dEV2CkBAIC0xMzExLDggKzEzMTEsOCBAQCBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjVsZWFk
aW5nV2hpdGVzcGFjCiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjZ0cmFpbGluZ1doaXRlc3BhY2VQ
b3NpdGlvbkVOU185RUFmZmluaXR5RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb244dXBzdHJlYW1F
TlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOURPTVdpbmRv
dzI3cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzRXYKLV9fWk5LN1dlYkNvcmU5RmxvYXRRdWFk
MTFib3VuZGluZ0JveEV2Ci1fX1pOSzdXZWJDb3JlOUZsb2F0UmVjdGN2N19OU1JlY3RFdgorX19a
Tks3V2ViQ29yZTEyR3JhcGhpY3NRdWFkMTFib3VuZGluZ0JveEV2CitfX1pOSzdXZWJDb3JlMTJH
cmFwaGljc1JlY3RjdjdfTlNSZWN0RXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMTJ0cmF2ZXJz
ZU5leHRFUEtOU181RnJhbWVFCiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTE0aXNEZXNjZW5kYW50
T2ZFUEtOU181RnJhbWVFCiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTIwdHJhdmVyc2VOZXh0V2l0
aFdyYXBFYgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTgxMCwxMSArODEwLDYgQEAK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL0Rhc2hBcnJheS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5o
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRCYXNlbGluZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCcsCkBAIC04Mzgs
NiArODMzLDExIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmgnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1JlY3QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NTaXplLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVu
dC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgnLApA
QCAtMzk0NSwxMSArMzk0NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ29u
dGV4dFNoYWRvdy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRT
aGFkb3cuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwJywKLSAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwJywKQEAgLTM5NjUsNiArMzk2
MCwxMSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmNwcCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NTaXplLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzVHlwZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAn
LApAQCAtNDAzMiw3ICs0MDMyLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9EcmF3RXJyb3JVbmRlcmxpbmUuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc1JlY3RDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAnLApAQCAtNDA0OSwx
NCArNDA0OSwxNCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0
ckNhaXJvLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9y
bWF0aW9uTWF0cml4Q2Fpcm8uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQ
b2ludENHLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0
Q0cuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDRy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc1BvaW50Q0cuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc1JlY3RDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzU2l6ZUNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VDRy5jcHAnLApAQCAtNDI5Niw4ICs0Mjk2LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSW50UG9pbnRHdGsuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSW50UmVjdEd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0NvbG9ySGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0ZvbnRDYWNoZUhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCcsCkBAIC00MzA2
LDYgKzQzMDQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dseXBo
UGFnZVRyZWVOb2RlSGFpa3UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HcmFkaWVudEhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFwaGljc1BvaW50SGFpa3UuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc1JlY3RIYWlrdS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ljb25IYWlrdS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVyRGF0YUhhaWt1LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwJywKQEAgLTQz
MjIsOSArNDMyMiw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyQVRTVUkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQuY3BwJywKLSAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbScsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbScsCi0gICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbScsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCkBAIC00MzMz
LDYgKzQzMzAsOSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBh
Z2VUcmVlTm9kZU1hYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHQzRE1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzUG9pbnRNYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc1JlY3RNYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc1NpemVNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW1hZ2VNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2lu
dE1hYy5tbScsCkBAIC00Mzg1LDggKzQzODUsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0V4dGVuc2lvbnMzRFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRXh0ZW5zaW9uczNEUXQuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRmxvYXRQb2ludFF0LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRmxvYXRSZWN0UXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250Q2FjaGVRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0LmNwcCcsCkBAIC00Mzk5LDYgKzQzOTcsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJEYXRhUXQuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAnLApAQCAtNDQyMSw4ICs0NDIx
LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1h
dHJpeFF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNwYXJl
bmN5TGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0Zsb2F0UG9pbnRTa2lhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9GbG9hdFJlY3RTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwJywKQEAgLTQ0MzEsNiArNDQyOSw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzUG9pbnRTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9HcmFwaGljc1JlY3RTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW50UG9pbnRTa2lhLmNwcCcsCkBAIC00NTYxLDcgKzQ1NjEsNiBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0Uu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9XaW5DRUdyYXBoaWNz
RXh0cmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0NvbG9yV3guY3Bw
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9GbG9hdFJlY3RXeC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDYWNoZVd4LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuaCcsCkBAIC00NTcyLDYgKzQ1NzEsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0dseXBoTWFwV3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFkaWVudFd4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3Jh
cGhpY3NDb250ZXh0V3guY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc1JlY3RXeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0lj
b25XeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVy
RGF0YVd4LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVy
V3guY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTAgKzE4Nywx
MCBAQCBfX1pOSzdXZWJDb3JlMTRTaW1wbGVGb250RGF0YTExaXNTZWdtZW50CiBfX1pON1dlYkNv
cmU5R2x5cGhQYWdlNGZpbGxFampQdGpQS05TXzE0U2ltcGxlRm9udERhdGFFCiBfX1pOSzdXZWJD
b3JlMTRTaW1wbGVGb250RGF0YTIycGxhdGZvcm1Cb3VuZHNGb3JHbHlwaEV0CiBfX1pOSzdXZWJD
b3JlMTZGb250UGxhdGZvcm1EYXRhNmN0Rm9udEV2Ci1fX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFF
Uks2Q0dSZWN0Ci1fX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSSzdDR1BvaW50Ci1fX1pON1dl
YkNvcmU5RmxvYXRTaXplQzFFUks2Q0dTaXplCi1fX1pOSzdXZWJDb3JlOUZsb2F0UmVjdGN2NkNH
UmVjdEV2CitfX1pON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEMxRVJLNkNHUmVjdAorX19aTjdXZWJD
b3JlMTNHcmFwaGljc1BvaW50QzFFUks3Q0dQb2ludAorX19aTjdXZWJDb3JlMTJHcmFwaGljc1Np
emVDMUVSSzZDR1NpemUKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNzUmVjdGN2NkNHUmVjdEV2CiBf
X1pON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhMTdwbGF0Zm9ybUdseXBoSW5pdEV2CiBfX1pON1dl
YkNvcmUxNUdseXBoTWV0cmljc01hcElmRTE4bG9jYXRlUGFnZVNsb3dDYXNlRWoKIF9fWk5LN1dl
YkNvcmUxNFNpbXBsZUZvbnREYXRhMjFwbGF0Zm9ybVdpZHRoRm9yR2x5cGhFdApAQCAtMzIwLDE2
ICszMjAsMTYgQEAgX19aTjdXZWJDb3JlMTVTdHJpbmdUcnVuY2F0b3IxM3JpZ2h0VHJ1bgogX19a
TjdXZWJDb3JlOG1ha2VSR0JBRWlpaWkKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTJz
ZXRGaWxsQ29sb3JFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQyMHNldFBsYXRmb3JtRmlsbENvbG9yRVJLTlNfNUNvbG9yRU5TXzEwQ29s
b3JTcGFjZUUKLV9fWk5LN1dlYkNvcmU0Rm9udDhkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaQotX19aTks3V2ViQ29yZTRGb250
MTRkcmF3U2ltcGxlVGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05T
XzEwRmxvYXRQb2ludEVpaQorX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBo
aWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCitfX1pOSzdX
ZWJDb3JlNEZvbnQxNGRyYXdTaW1wbGVUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdU
ZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pOSzdXZWJDb3JlNEZvbnQzM2dldEds
eXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dEVSS05TXzdUZXh0UnVuRWlpUk5TXzExR2x5cGhC
dWZmZXJFTlMwXzIwRm9yVGV4dEVtcGhhc2lzT3JOb3RFCi1fX1pON1dlYkNvcmUxMUdseXBoQnVm
ZmVyM2FkZEV0UEtOU18xNFNpbXBsZUZvbnREYXRhRWZQS05TXzlGbG9hdFNpemVFCi1fX1pOSzdX
ZWJDb3JlNEZvbnQxNWRyYXdHbHlwaEJ1ZmZlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18x
MUdseXBoQnVmZmVyRVJLTlNfMTBGbG9hdFBvaW50RQotX19aTks3V2ViQ29yZTRGb250MTBkcmF3
R2x5cGhzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVQS05TXzE0U2ltcGxlRm9udERhdGFFUktOU18x
MUdseXBoQnVmZmVyRWlpUktOU18xMEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUxMUdseXBoQnVm
ZmVyM2FkZEV0UEtOU18xNFNpbXBsZUZvbnREYXRhRWZQS05TXzEyR3JhcGhpY3NTaXplRQorX19a
Tks3V2ViQ29yZTRGb250MTVkcmF3R2x5cGhCdWZmZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfMTFHbHlwaEJ1ZmZlckVSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk5LN1dlYkNvcmU0Rm9u
dDEwZHJhd0dseXBoc0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUEtOU18xNFNpbXBsZUZvbnREYXRh
RVJLTlNfMTFHbHlwaEJ1ZmZlckVpaVJLTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJDb3Jl
NEZvbnQxOHNob3VsZFVzZVNtb290aGluZ0V2Ci1fX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQ5Z2V0U2hhZG93RVJOU185RmxvYXRTaXplRVJmUk5TXzVDb2xvckVSTlNfMTBDb2xvclNwYWNl
RQorX19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWdldFNoYWRvd0VSTlNfMTJHcmFwaGlj
c1NpemVFUmZSTlNfNUNvbG9yRVJOU18xMENvbG9yU3BhY2VFCiBfX1pOSzdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxNXRleHREcmF3aW5nTW9kZUV2Ci1fX1pON1dlYkNvcmVMMjJzaG93R2x5cGhz
V2l0aEFkdmFuY2VzRVJLTlNfMTBGbG9hdFBvaW50RVBLTlNfMTRTaW1wbGVGb250RGF0YUVQOUNH
Q29udGV4dFBLdFBLNkNHU2l6ZW0KK19fWk43V2ViQ29yZUwyMnNob3dHbHlwaHNXaXRoQWR2YW5j
ZXNFUktOU18xM0dyYXBoaWNzUG9pbnRFUEtOU18xNFNpbXBsZUZvbnREYXRhRVA5Q0dDb250ZXh0
UEt0UEs2Q0dTaXplbQogX19aTjNXVEY2VmVjdG9ySVBjTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0K
IF9fWk5LN1dlYkNvcmUxMUltYWdlU291cmNlMTZmcmFtZVNpemVBdEluZGV4RW0KIF9fWk43V2Vi
Q29yZTE1UmVzb3VyY2VSZXF1ZXN0MjNkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdEV2CkBAIC0xNTY0
LDEwICsxNTY0LDEwIEBAIF9fWk43V2ViQ29yZTI2QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUK
IF9fWk5LN1dlYkNvcmUxMFNjcm9sbFZpZXcxOHZpc2libGVDb250ZW50UmVjdEViCiBfX1pOSzdX
ZWJDb3JlMTBTY3JvbGxWaWV3MjZwbGF0Zm9ybVZpc2libGVDb250ZW50UmVjdEViCiBfX1pON1dl
YkNvcmU3SW50UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVS
S05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTBGbG9hdFBvaW50QzFFUktOU184SW50UG9pbnRF
Ci1fX1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU183SW50U2l6ZUUKLV9fWk43V2ViQ29yZTE2
ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxMkdyYXBoaWNz
UmVjdEMxRVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRDMUVSS05T
XzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NTaXplQzFFUktOU183SW50U2l6ZUUK
K19fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19a
TjdXZWJDb3JlMTBSZW5kZXJWaWV3NDFyZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRl
ZExheWVyc0VSS05TXzdJbnRSZWN0RWIKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjdjYXBz
TG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWRFdgogX19aTks3V2ViQ29yZThEb2N1bWVudDMydXNlU2Vj
dXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmVFdgpAQCAtMTg2Niw3ICsxODY2LDcgQEAgX19aTks3
V2ViQ29yZTlSZW5kZXJCb3gyM291dGxpbmVCb3VuZHNGbwogX19aTks3V2ViQ29yZTlSZW5kZXJC
b3gxN2JvcmRlckJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDI5YWRq
dXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3dFUk5TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTEx
UmVuZGVyQmxvY2syMm91dGxpbmVTdHlsZUZvclJlcGFpbnRFdgotX19aTks3V2ViQ29yZTlGbG9h
dFF1YWQxMWJvdW5kaW5nQm94RXYKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNzUXVhZDExYm91bmRp
bmdCb3hFdgogX19aTjdXZWJDb3JlOVJlbmRlckJveDIxY29tcHV0ZVJlY3RGb3JSZXBhaW50RVBO
U18yMFJlbmRlckJveE1vZGVsT2JqZWN0RVJOU183SW50UmVjdEViCiBfX1pOSzdXZWJDb3JlMTFS
ZW5kZXJCbG9jazExaXNCbG9ja0Zsb3dFdgogX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3MjNyZXBh
aW50Q29udGVudFJlY3RhbmdsZUVSS05TXzdJbnRSZWN0RWIKQEAgLTE5NTAsNyArMTk1MCw3IEBA
IF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MTliYXNlQmFja2dyb3VuZEMKIF9fWk5LN1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDE4Y29tcG9zaXRlT3BlcmF0aW9uRXYKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0MjFzZXRDb21wb3NpdGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRv
ckUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjlzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9w
ZXJhdGlvbkVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFj
ZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTks3V2ViQ29yZTEyUmVuZGVy
T2JqZWN0MThtYXhpbWFsT3V0bGluZVNpemVFTlNfMTBQYWludFBoYXNlRQogX19aTks3V2ViQ29y
ZTdJbnRSZWN0MTBpbnRlcnNlY3RzRVJLUzBfCiBfX1pOSzdXZWJDb3JlMTdSZW5kZXJMaW5lQm94
TGlzdDVwYWludEVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEVSTlNfOVBhaW50SW5mb0VpaQpA
QCAtMTk3MCwxMyArMTk3MCwxMyBAQCBfX1pOSzdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTlsb2dp
Y2FsT3ZlCiBfX1pOSzdXZWJDb3JlOUlubGluZUJveDE2bG9naWNhbEZyYW1lUmVjdEV2CiBfX1pO
N1dlYkNvcmUxM0lubGluZVRleHRCb3gxNHNlbGVjdGlvblN0YXRlRXYKIF9fWk43V2ViQ29yZTlJ
bmxpbmVCb3gyNWxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmdFdgotX19aTjdXZWJDb3JlMTNJbmxp
bmVUZXh0Qm94MjBwYWludERvY3VtZW50TWFya2Vyc0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U18xMEZsb2F0UG9pbnRFUE5TXzExUmVuZGVyU3R5bGVFUktOU180Rm9udEViCitfX1pON1dlYkNv
cmUxM0lubGluZVRleHRCb3gyMHBhaW50RG9jdW1lbnRNYXJrZXJzRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzEzR3JhcGhpY3NQb2ludEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RWIK
IF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTRtYXJrZXJzRm9yTm9kZUVQ
TlNfNE5vZGVFCiBfX1pOSzNXVEY3SGFzaE1hcElOU182UmVmUHRySU43V2ViQ29yZTROb2RlRUVF
UE5TXzZWZWN0b3JJTlMyXzIyUmVuZGVyZWREb2N1bWVudE1hcmtlckVMbTBFRUVOU183UHRySGFz
aElTNF9FRU5TXzEwSGFzaFRyYWl0c0lTNF9FRU5TQl9JUzhfRUVFM2dldEVQUzNfCiBfX1pOSzdX
ZWJDb3JlMTNJbmxpbmVUZXh0Qm94MjNnZXRFbXBoYXNpc01hcmtQb3NpdGlvbkVQTlNfMTFSZW5k
ZXJTdHlsZUVSTlNfMjBUZXh0RW1waGFzaXNQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTIxdXBkYXRl
R3JhcGhpY3NDb250ZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzVDb2xvckVTNF9mTlNf
MTBDb2xvclNwYWNlRQotX19aTjdXZWJDb3JlTDIwcGFpbnRUZXh0V2l0aFNoYWRvd3NFUE5TXzE1
R3JhcGhpY3NDb250ZXh0RVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS04zV1RGMTJBdG9taWNT
dHJpbmdFaWlpaVJLTlNfMTBGbG9hdFBvaW50RVJLTlNfOUZsb2F0UmVjdEVQS05TXzEwU2hhZG93
RGF0YUViYgotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZHJhd1RleHRFUktOU180Rm9u
dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpCitfX1pON1dlYkNvcmVMMjBwYWlu
dFRleHRXaXRoU2hhZG93c0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU180Rm9udEVSS05TXzdU
ZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VpaWlpUktOU18xM0dyYXBoaWNzUG9pbnRFUktO
U18xMkdyYXBoaWNzUmVjdEVQS05TXzEwU2hhZG93RGF0YUViYgorX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQ4ZHJhd1RleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFw
aGljc1BvaW50RWlpCiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzEzcGFpbnRCZWhhdmlvckV2CiBf
X1pON1dlYkNvcmU5RnJhbWVWaWV3MTZzZXRQYWludEJlaGF2aW9yRWoKIF9fWk43V2ViQ29yZTEw
UmVuZGVyVmlldzEzbm90aWZ5V2lkZ2V0c0VOU18xOFdpZGdldE5vdGlmaWNhdGlvbkUKQEAgLTM2
MTEsOCArMzYxMSw4IEBAIF9fWk43V2ViQ29yZThEb2N1bWVudDI3Y2FuY2VsRm9jdXNBcHBlYXIK
IF9fWk43V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDIxdXBkYXRlRm9jdXNBcHBlYXJhbmNlRWIK
IF9fWk43V2ViQ29yZTdFbGVtZW50MjF1cGRhdGVGb2N1c0FwcGVhcmFuY2VFYgogX19aTks3V2Vi
Q29yZTEzQ29udGFpbmVyTm9kZTdnZXRSZWN0RXYKLV9fWk5LN1dlYkNvcmUxM0NvbnRhaW5lck5v
ZGUxOGdldFVwcGVyTGVmdENvcm5lckVSTlNfMTBGbG9hdFBvaW50RQotX19aTks3V2ViQ29yZTEy
UmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktOU18xMEZsb2F0UG9pbnRFYmIKK19fWk5L
N1dlYkNvcmUxM0NvbnRhaW5lck5vZGUxOGdldFVwcGVyTGVmdENvcm5lckVSTlNfMTNHcmFwaGlj
c1BvaW50RQorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTVsb2NhbFRvQWJzb2x1dGVFUktO
U18xM0dyYXBoaWNzUG9pbnRFYmIKIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94MTltYXBMb2NhbFRv
Q29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJiUk5TXzE0VHJhbnNmb3JtU3Rh
dGVFCiBfX1pOSzdXZWJDb3JlMTRUcmFuc2Zvcm1TdGF0ZTExbWFwcGVkUG9pbnRFdgogX19aTks3
V2ViQ29yZTlSZW5kZXJCb3gxOW9mZnNldEZyb21Db250YWluZXJFUE5TXzEyUmVuZGVyT2JqZWN0
RVJLTlNfOEludFBvaW50RQpAQCAtMzYyMCw3ICszNjIwLDcgQEAgX19aTks3V2ViQ29yZTEyUmVu
ZGVyT2JqZWN0MzFzaG91bGRVc2VUcgogX19aTjdXZWJDb3JlMTRUcmFuc2Zvcm1TdGF0ZTRtb3Zl
RWlpTlMwXzIxVHJhbnNmb3JtQWNjdW11bGF0aW9uRQogX19aTks3V2ViQ29yZTEwUmVuZGVyVmll
dzE5bWFwTG9jYWxUb0NvbnRhaW5lckVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEViYlJOU18x
NFRyYW5zZm9ybVN0YXRlRQogX19aTjdXZWJDb3JlMTRUcmFuc2Zvcm1TdGF0ZTdmbGF0dGVuRXYK
LV9fWk5LN1dlYkNvcmUxM0NvbnRhaW5lck5vZGUxOWdldExvd2VyUmlnaHRDb3JuZXJFUk5TXzEw
RmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmUxM0NvbnRhaW5lck5vZGUxOWdldExvd2VyUmlnaHRD
b3JuZXJFUk5TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxOXNj
cm9sbFJlY3RUb1Zpc2libGVFUktOU183SW50UmVjdEViUktOU18xNVNjcm9sbEFsaWdubWVudEVT
Nl8KIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94MjhjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVk
RWIKIF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxNWdldFJlY3RUb0V4cG9zZUVSS05TXzdJbnRS
ZWN0RVMzX1JLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCkBAIC0zNzc2LDcgKzM3NzYsNyBAQCBf
X1pON1dlYkNvcmUyMEdyYXBoaWNzQ29udGV4dFN0YXRlYVNFUktTCiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDIwcmVzdG9yZVBsYXRmb3JtU3RhdGVFdgogX19aTks3V2ViQ29yZTEyUmVu
ZGVyQnV0dG9uMTVjb250cm9sQ2xpcFJlY3RFaWkKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0NGNsaXBFUktOU183SW50UmVjdEUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NGNs
aXBFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVS
S05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlOVJlbmRlckJveDE1cG9wQ29udGVudHND
bGlwRVJOU185UGFpbnRJbmZvRU5TXzEwUGFpbnRQaGFzZUVpaQogX19aTks3V2ViQ29yZTlJbmxp
bmVCb3g0cm9vdEV2CiBfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDEycGFpbnRPdXRsaW5lRVBO
U18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQpAQCAtNDIxOSw3ICs0MjE5LDcgQEAg
X19aTjdXZWJDb3JlMTZKU0hUTUxEaXZFbGVtZW50MThnZXRPd25QcgogX19aTjdXZWJDb3JlMTFM
YXlvdXRTdGF0ZW53RW1QTlNfMTFSZW5kZXJBcmVuYUUKIF9fWk43V2ViQ29yZTExTGF5b3V0U3Rh
dGVDMUVQUzBfUE5TXzlSZW5kZXJCb3hFUktOU183SW50U2l6ZUVpYlBOU18xMENvbHVtbkluZm9F
CiBfX1pON1dlYkNvcmUxMUxheW91dFN0YXRlQzJFUFMwX1BOU185UmVuZGVyQm94RVJLTlNfN0lu
dFNpemVFaWJQTlNfMTBDb2x1bW5JbmZvRQotX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjBs
b2NhbFRvQ29udGFpbmVyUXVhZEVSS05TXzlGbG9hdFF1YWRFUE5TXzIwUmVuZGVyQm94TW9kZWxP
YmplY3RFYgorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjBsb2NhbFRvQ29udGFpbmVyUXVh
ZEVSS05TXzEyR3JhcGhpY3NRdWFkRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWIKIF9fWk43
V2ViQ29yZUwyNGZvbnREYXRhRm9yR2VuZXJpY0ZhbWlseUVQTlNfOERvY3VtZW50RVJLTlNfMTVG
b250RGVzY3JpcHRpb25FUktOM1dURjEyQXRvbWljU3RyaW5nRQogX19aTjdXZWJDb3JlOUZvbnRD
YWNoZTE3Z2V0Q2FjaGVkRm9udERhdGFFUktOU18xNUZvbnREZXNjcmlwdGlvbkVSS04zV1RGMTJB
dG9taWNTdHJpbmdFYk5TMF8xMlNob3VsZFJldGFpbkUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlcklu
bGluZTE2YmFzZWxpbmVQb3NpdGlvbkVOU18xMkZvbnRCYXNlbGluZUViTlNfMTdMaW5lRGlyZWN0
aW9uTW9kZUVOU18xNkxpbmVQb3NpdGlvbk1vZGVFCkBAIC00NDg3LDcgKzQ0ODcsNyBAQCBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE4c2V0U3Ryb2tlCiBfX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDI2c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3NFZgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQxMWRyYXdFbGxpcHNlRVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmU0
UGF0aEMxRXYKLV9fWk43V2ViQ29yZTRQYXRoMTBhZGRFbGxpcHNlRVJLTlNfOUZsb2F0UmVjdEUK
K19fWk43V2ViQ29yZTRQYXRoMTBhZGRFbGxpcHNlRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhkcmF3UGF0aEVSS05TXzRQYXRoRQogX19aTjdXZWJD
b3JlNFBhdGhEMUV2CiBfX1pON1dlYkNvcmUyMEpTSFRNTEhlYWRpbmdFbGVtZW50RDFFdgpAQCAt
NDU3MCw5ICs0NTcwLDkgQEAgX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9jazIyc2V0TWFyZ2luU3Rh
cgogX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9jazIwc2V0TWFyZ2luRW5kRm9yQ2hpbGRFUE5TXzlS
ZW5kZXJCb3hFaQogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjI3dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0RXYKIF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIyM2NvbXB1dGVTY3JvbGxEaW1l
bnNpb25zRVBiUzFfCi1fX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMzBzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb25FUktOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUxN1Njcm9s
bEFuaW1hdG9yTWFjMzBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb25FUktOU18xMEZsb2F0
UG9pbnRFCi1fX1pOSzdXZWJDb3JlMTdTY3JvbGxBbmltYXRvck1hYzMxYWRqdXN0U2Nyb2xsUG9z
aXRpb25JZk5lY2Vzc2FyeUVSS05TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTE0U2Nyb2xs
YWJsZUFyZWEzMHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbkVSS05TXzEzR3JhcGhpY3NQ
b2ludEUKK19fWk43V2ViQ29yZTE3U2Nyb2xsQW5pbWF0b3JNYWMzMHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbkVSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk5LN1dlYkNvcmUxN1Njcm9s
bEFuaW1hdG9yTWFjMzFhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5RVJLTlNfMTNHcmFw
aGljc1BvaW50RQogX19aTks3V2ViQ29yZTlSZW5kZXJCb3gyNmxvZ2ljYWxSaWdodExheW91dE92
ZXJmbG93RXYKIF9fWk43V2ViQ29yZTE3UmVuZGVyVGV4dENvbnRyb2wyN3VwZGF0ZVBsYWNlaG9s
ZGVyVmlzaWJpbGl0eUViYgogX19aTks3V2ViQ29yZTE4VGV4dEZpZWxkSW5wdXRUeXBlMTFpc1Rl
eHRGaWVsZEV2CkBAIC00NjgzLDggKzQ2ODMsOCBAQCBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXll
cjExbmV4dFNpYmxpbmdFCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MThjYW5CZVNlbGVjdGlv
bkxlYWZFdgogX19aTjdXZWJDb3JlMTBSZW5kZXJUZXh0MjNzZWxlY3Rpb25SZWN0Rm9yUmVwYWlu
dEVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEViCiBfX1pON1dlYkNvcmUxM0lubGluZVRleHRC
b3gxM3NlbGVjdGlvblJlY3RFaWlpaQotX19aTks3V2ViQ29yZTRGb250MjBzZWxlY3Rpb25SZWN0
Rm9yVGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpaQotX19aTks3V2ViQ29y
ZTRGb250MjZzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBG
bG9hdFBvaW50RWlpaQorX19aTks3V2ViQ29yZTRGb250MjBzZWxlY3Rpb25SZWN0Rm9yVGV4dEVS
S05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpaQorX19aTks3V2ViQ29yZTRGb250
MjZzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGlj
c1BvaW50RWlpaQogX19aTjdXZWJDb3JlTDE4ZWxsaXBzaXNSZWN0Rm9yQm94RVBOU18xM0lubGlu
ZVRleHRCb3hFamoKIF9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjFjb21wdXRlUmVjdEZvclJl
cGFpbnRFUE5TXzIwUmVuZGVyQm94TW9kZWxPYmplY3RFUk5TXzdJbnRSZWN0RWIKIF9fWk43V2Vi
Q29yZTExUmVuZGVyQmxvY2syN3NlbGVjdGlvbkdhcFJlY3RzRm9yUmVwYWludEVQTlNfMjBSZW5k
ZXJCb3hNb2RlbE9iamVjdEUKQEAgLTQ3ODcsMTMgKzQ3ODcsMTMgQEAgX19aTks3V2ViQ29yZTEx
UmVuZGVyTGF5ZXIyMGxheWVyRm9yU2NybwogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE3cGFp
bnRTY3JvbGxDb3JuZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RWlpUktOU183SW50UmVjdEUKIF9f
Wk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTZzY3JvbGxDb3JuZXJSZWN0RXYKIF9fWk43V2ViQ29y
ZTExUmVuZGVyTGF5ZXIxMnBhaW50UmVzaXplckVQTlNfMTVHcmFwaGljc0NvbnRleHRFaWlSS05T
XzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTRwYWludFNlbGVjdGlvbkVQ
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMEZsb2F0UG9pbnRFUE5TXzExUmVuZGVyU3R5bGVF
UktOU180Rm9udEUKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDE0cGFpbnRTZWxlY3Rpb25F
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTNHcmFwaGljc1BvaW50RVBOU18xMVJlbmRlclN0
eWxlRVJLTlNfNEZvbnRFCiBfX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gxN3NlbGVjdGlvblN0
YXJ0RW5kRVJpUzFfCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyNHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvckV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJUaGVtZTMwYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yRXYKIF9fWk5LN1dlYkNvcmUxNFJlbmRlclRoZW1lTWFjMzhwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvckV2CiBfX1pOSzdXZWJDb3JlNUNvbG9yMTRi
bGVuZFdpdGhXaGl0ZUV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIwZHJhd0hpZ2hs
aWdodEZvclRleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFaWkKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MjBkcmF3SGlnaGxpZ2h0Rm9yVGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5FUktOU18x
M0dyYXBoaWNzUG9pbnRFaVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUVpaQogX19aTks3V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0MjRzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JFdgogX19aTks3V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0MTRzZWxlY3Rpb25Db2xvckVpCiBfX1pOSzdXZWJDb3JlMTFSZW5k
ZXJUaGVtZTMwYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yRXYKQEAgLTQ4NTksOCArNDg1
OSw4IEBAIF9fWk43V2ViQ29yZTEyUmVuZGVySW5saW5lMjljbGlwcGVkT3ZlcmYKIF9fWk5LN1dl
YkNvcmUxMlJlbmRlcklubGluZTMwbGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94RXYKIF9f
Wk5LN1dlYkNvcmUxMlJlbmRlcklubGluZTM3Y3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3Vu
ZGluZ0JveEV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJJbmxpbmUyM2N1bGxlZElubGluZUJvdW5k
aW5nQm94RVBLUzBfCi1fX1pON1dlYkNvcmU5RmxvYXRSZWN0MTR1bml0ZUlmTm9uWmVyb0VSS1Mw
XwotX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUx
MkdyYXBoaWNzUmVjdDE0dW5pdGVJZk5vblplcm9FUktTMF8KK19fWk43V2ViQ29yZTdJbnRSZWN0
QzFFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQzMGxpbmVz
VmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveEV2CiBfX1pON1dlYkNvcmU3SW50UmVjdDE0dW5pdGVJ
Zk5vblplcm9FUktTMF8KIF9fWk43V2ViQ29yZTE3UmVuZGVyTGluZUJveExpc3QxNGRpcnR5TGlu
ZUJveGVzRXYKQEAgLTUyMjYsOSArNTIyNiw5IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MjZzZXRQbGF0Zm8KIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGRyYXdSZWN0RVJL
TlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMXN0cm9rZVN0eWxl
RXYKIF9fWk5LN1dlYkNvcmU1Q29sb3I0ZGFya0V2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE3ZHJhd0NvbnZleFBvbHlnb25FbVBLTlNfMTBGbG9hdFBvaW50RWIKLV9fWk43V2ViQ29y
ZTRQYXRoNm1vdmVUb0VSS05TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTRQYXRoOWFkZExp
bmVUb0VSS05TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdk
cmF3Q29udmV4UG9seWdvbkVtUEtOU18xM0dyYXBoaWNzUG9pbnRFYgorX19aTjdXZWJDb3JlNFBh
dGg2bW92ZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlNFBhdGg5YWRkTGlu
ZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJDb3JlNFBhdGgxMmNsb3NlU3VicGF0
aEV2CiBfX1pON1dlYkNvcmUxOFJlbmRlclRhYmxlU2VjdGlvbjVwYWludEVSTlNfOVBhaW50SW5m
b0VpaQogX19aTjdXZWJDb3JlMThSZW5kZXJUYWJsZVNlY3Rpb24xMXBhaW50T2JqZWN0RVJOU185
UGFpbnRJbmZvRWlpCkBAIC01MjU0LDcgKzUyNTQsNyBAQCBfX1pOSzdXZWJDb3JlOVJlbmRlckJv
eDE0Y29udGVudEJveFJlY3RFCiBfX1pON1dlYkNvcmUxM1JlbmRlckxpc3RCb3gxOXBhaW50SXRl
bUJhY2tncm91bmRFUk5TXzlQYWludEluZm9FaWlpCiBfX1pON1dlYkNvcmUxM1JlbmRlckxpc3RC
b3gxOWl0ZW1Cb3VuZGluZ0JveFJlY3RFaWlpCiBfX1pON1dlYkNvcmUxM1JlbmRlckxpc3RCb3gx
OXBhaW50SXRlbUZvcmVncm91bmRFUk5TXzlQYWludEluZm9FaWlpCi1fX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDEyZHJhd0JpZGlUZXh0RVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS05T
XzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTJkcmF3QmlkaVRl
eHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjNX
VEYxMFJlZkNvdW50ZWRJTjdXZWJDb3JlMTFCaWRpQ29udGV4dEVFNWRlcmVmRXYKIF9fWk43V2Vi
Q29yZTEyQmlkaVJlc29sdmVySU5TXzE1VGV4dFJ1bkl0ZXJhdG9yRU5TXzE2QmlkaUNoYXJhY3Rl
clJ1bkVFMjFjcmVhdGVCaWRpUnVuc0ZvckxpbmVFUktTMV9OU18yM1Zpc3VhbERpcmVjdGlvbk92
ZXJyaWRlRWIKIF9fWk43V2ViQ29yZTEyQmlkaVJlc29sdmVySU5TXzE1VGV4dFJ1bkl0ZXJhdG9y
RU5TXzE2QmlkaUNoYXJhY3RlclJ1bkVFOWFwcGVuZFJ1bkV2CkBAIC01MzM5LDggKzUzMzksOCBA
QCBfX1pOSzdXZWJDb3JlMjVBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0CiBfX1pOSzdXZWJDb3Jl
MjVBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0MTFlbGVtZW50UmVjdEV2CiBfX1pOSzdXZWJDb3Jl
MTlBY2Nlc3NpYmlsaXR5T2JqZWN0MTNpc1JhZGlvQnV0dG9uRXYKIF9fWk5LN1dlYkNvcmUyNUFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QxNWJvdW5kaW5nQm94UmVjdEV2Ci1fX1pON1dlYkNvcmUx
MlJlbmRlck9iamVjdDIyYWJzb2x1dGVGb2N1c1JpbmdRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlG
bG9hdFF1YWRFTG0wRUVFCi1fX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlOUZsb2F0UXVhZEVMbTBF
RTE1cmVzZXJ2ZUNhcGFjaXR5RW0KK19fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjJhYnNvbHV0
ZUZvY3VzUmluZ1F1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCitf
X1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1F1YWRFTG0wRUUxNXJlc2VydmVDYXBh
Y2l0eUVtCiBfX1pOSzdXZWJDb3JlMjVBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OWlzRm9jdXNl
ZEV2CiBfX1pOSzdXZWJDb3JlN0VsZW1lbnQyMGlzRW5hYmxlZEZvcm1Db250cm9sRXYKIC1bQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0K
QEAgLTUzOTEsMTIgKzUzOTEsMTIgQEAgX19aTjNXVEY5SGFzaFRhYmxlSXl5TlNfMTdJZGVudGl0
eUV4dHJhYwogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDEzaXNMaW5rVmlzaXRlZEV5CiBfX1pON1dl
YkNvcmUxMVJlbmRlclN0eWxlMTdzZXRUZXh0RGVjb3JhdGlvbkVpCiBfX1pON1dlYkNvcmUxNVN0
eWxlVmlzdWFsRGF0YUMxRVJLUzBfCi1fX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gxNXBhaW50
RGVjb3JhdGlvbkVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMEZsb2F0UG9pbnRFaVBLTlNf
MTBTaGFkb3dEYXRhRQorX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTVwYWludERlY29yYXRp
b25FUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTNHcmFwaGljc1BvaW50RWlQS05TXzEwU2hh
ZG93RGF0YUUKIF9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjNnZXRUZXh0RGVjb3JhdGlvbkNv
bG9yc0VpUk5TXzVDb2xvckVTMl9TMl9iCiBfX1pON1dlYkNvcmVMMTVkZWNvcmF0aW9uQ29sb3JF
UE5TXzEyUmVuZGVyT2JqZWN0RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNWRyYXdM
aW5lRm9yVGV4dEVSS05TXzEwRmxvYXRQb2ludEVmYgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQxNWRyYXdMaW5lRm9yVGV4dEVSS05TXzEzR3JhcGhpY3NQb2ludEVmYgogX19aTks3V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0MTVzdHJva2VUaGlja25lc3NFdgotX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQxOXJvdW5kVG9EZXZpY2VQaXhlbHNFUktOU185RmxvYXRSZWN0RU5TMF8x
MlJvdW5kaW5nTW9kZUUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTlyb3VuZFRvRGV2
aWNlUGl4ZWxzRVJLTlNfMTJHcmFwaGljc1JlY3RFTlMwXzEyUm91bmRpbmdNb2RlRQogX19aTjdX
ZWJDb3JlMTdIVE1MU2NyaXB0RWxlbWVudDE5cmVtb3ZlZEZyb21Eb2N1bWVudEV2CiBfX1pON1dl
YkNvcmUxM1NjcmlwdEVsZW1lbnQxOXJlbW92ZWRGcm9tRG9jdW1lbnRFdgogX19aTjdXZWJDb3Jl
MTdKU0hUTUxCb2R5RWxlbWVudEQxRXYKQEAgLTU1NTUsOCArNTU1NSw4IEBAIF9fWk5LN1dlYkNv
cmUxNFJlbmRlclJlcGxhY2VkMTBpc1NlbGVjdGUKIF9fWk43V2ViQ29yZTExUmVuZGVySW1hZ2Ux
M3BhaW50UmVwbGFjZWRFUk5TXzlQYWludEluZm9FaWkKIF9fWk5LN1dlYkNvcmUxOVJlbmRlcklt
YWdlUmVzb3VyY2U1aW1hZ2VFaWkKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OWRyYXdJ
bWFnZUVQTlNfNUltYWdlRU5TXzEwQ29sb3JTcGFjZUVSS05TXzhJbnRQb2ludEVOU18xN0NvbXBv
c2l0ZU9wZXJhdG9yRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBO
U181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOUZsb2F0UmVjdEVTNl9OU18xN0NvbXBvc2l0
ZU9wZXJhdG9yRWIKLV9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGlj
c0NvbnRleHRFUktOU185RmxvYXRSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0
ZU9wZXJhdG9yRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBOU181
SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfMTJHcmFwaGljc1JlY3RFUzZfTlNfMTdDb21wb3Np
dGVPcGVyYXRvckViCitfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlNGRyYXdFUE5TXzE1R3JhcGhp
Y3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29t
cG9zaXRlT3BlcmF0b3JFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlMTRzdGFydEFuaW1hdGlv
bkViCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlMjFtYXlGaWxsV2l0aFNvbGlkQ29sb3JFdgog
X19aTks3V2ViQ29yZTExQml0bWFwSW1hZ2UxNmN1cnJlbnRGcmFtZVNpemVFdgpAQCAtNTg5OCw3
ICs1ODk4LDcgQEAgX19aTks3V2ViQ29yZTRQYWdlMzRpbkxvd1F1YWxpdHlJbWFnZUludAogX19a
TjdXZWJDb3JlMjJJbWFnZVF1YWxpdHlDb250cm9sbGVyM3NldEVQTlNfMjBSZW5kZXJCb3hNb2Rl
bE9iamVjdEVQTjNXVEY3SGFzaE1hcElQS3ZOU183SW50U2l6ZUVOUzNfN1B0ckhhc2hJUzZfRUVO
UzNfMTBIYXNoVHJhaXRzSVM2X0VFTlNBX0lTN19FRUVFUzZfUktTN18KIF9fWk43V2ViQ29yZTEx
SW1hZ2VTb3VyY2UyMGZyYW1lRHVyYXRpb25BdEluZGV4RW0KIF9fWk5LN1dlYkNvcmUxMUJpdG1h
cEltYWdlMTBzb2xpZENvbG9yRXYKLV9fWk43V2ViQ29yZTVJbWFnZTE4ZmlsbFdpdGhTb2xpZENv
bG9yRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNf
MTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCitfX1pON1dlYkNvcmU1SW1hZ2Ux
OGZpbGxXaXRoU29saWRDb2xvckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNz
UmVjdEVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUK
IF9fWk43V2ViQ29yZTVUaW1lcklOU18yMkltYWdlUXVhbGl0eUNvbnRyb2xsZXJFRTVmaXJlZEV2
CiBfX1pON1dlYkNvcmUyMkltYWdlUXVhbGl0eUNvbnRyb2xsZXIyOGhpZ2hRdWFsaXR5UmVwYWlu
dFRpbWVyRmlyZWRFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMjVBY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rRDBFdgpAQCAtNTk0MSw3ICs1OTQxLDcgQEAgX19aTks3V2ViQ29yZTE3SFRN
TENhbnZhc0VsZW1lbnQxN2NyZWF0ZQogX19aTjdXZWJDb3JlMTFJbWFnZUJ1ZmZlckMxRVJLTlNf
N0ludFNpemVFTlNfMTBDb2xvclNwYWNlRU5TXzEzUmVuZGVyaW5nTW9kZUVSYgogX19aTjdXZWJD
b3JlMTFJbWFnZUJ1ZmZlckMyRVJLTlNfN0ludFNpemVFTlNfMTBDb2xvclNwYWNlRU5TXzEzUmVu
ZGVyaW5nTW9kZUVSYgogX19aTjdXZWJDb3JlMTVJbWFnZUJ1ZmZlckRhdGFDMUVSS05TXzdJbnRT
aXplRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ1c2NhbGVFUktOU185RmxvYXRTaXpl
RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ1c2NhbGVFUktOU18xMkdyYXBoaWNzU2l6
ZUUKIF9fWk5LN1dlYkNvcmUxMUltYWdlQnVmZmVyN2NvbnRleHRFdgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQyNnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zRWIKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MjhzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5RU5TXzIwSW50
ZXJwb2xhdGlvblF1YWxpdHlFCkBAIC01OTc2LDE0ICs1OTc2LDE0IEBAIF9fWk43V2ViQ29yZTUz
anNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQKIF9fWk43V2ViQ29yZTI2SlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQxMHN0cm9rZVJlY3RFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTI0
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMTBzdHJva2VSZWN0RWZmZmYKIF9fWk43V2ViQ29yZTI0
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMTBzdHJva2VSZWN0RWZmZmZmCi1fX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDEwc3Ryb2tlUmVjdEVSS05TXzlGbG9hdFJlY3RFZgotX19aTjdXZWJD
b3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ3ZGlkRHJhd0VSS05TXzlGbG9hdFJlY3RFagot
X19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtN21hcFJlY3RFUktOU185RmxvYXRSZWN0RQot
X19aTjdXZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDdkaWREcmF3RVJLTlNfOUZsb2F0UmVjdEUK
LV9fWk43V2ViQ29yZTdtYXBSZWN0RVJLTlNfOUZsb2F0UmVjdEVTMl9TMl8KLV9fWk43V2ViQ29y
ZTlGbG9hdFJlY3Q5aW50ZXJzZWN0RVJLUzBfCi1fX1pOSzdXZWJDb3JlOUZsb2F0UmVjdDhjb250
YWluc0VSS1MwXwotX19aTjdXZWJDb3JlOUZsb2F0UmVjdDV1bml0ZUVSS1MwXworX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQxMHN0cm9rZVJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEVmCitf
X1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDdkaWREcmF3RVJLTlNfMTJHcmFw
aGljc1JlY3RFagorX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtN21hcFJlY3RFUktOU18x
MkdyYXBoaWNzUmVjdEUKK19fWk43V2ViQ29yZTE3SFRNTENhbnZhc0VsZW1lbnQ3ZGlkRHJhd0VS
S05TXzEyR3JhcGhpY3NSZWN0RQorX19aTjdXZWJDb3JlN21hcFJlY3RFUktOU18xMkdyYXBoaWNz
UmVjdEVTMl9TMl8KK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0OWludGVyc2VjdEVSS1MwXwor
X19aTks3V2ViQ29yZTEyR3JhcGhpY3NSZWN0OGNvbnRhaW5zRVJLUzBfCitfX1pON1dlYkNvcmUx
MkdyYXBoaWNzUmVjdDV1bml0ZUVSS1MwXwogX19aTjdXZWJDb3JlNDBzZXRKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRFN0cm9rZVN0eWxlRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RF
TlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMjZKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDE0
c2V0U3Ryb2tlU3R5bGVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzFfN0pTVmFsdWVFCiBfX1pON1dlYkNv
cmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDE0c2V0U3Ryb2tlQ29sb3JFUktOM1dURjZTdHJp
bmdFCkBAIC02MDIyLDggKzYwMjIsOCBAQCBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjZj
cmVhdGVFTlMwCiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllckMyRU5TMF85TGF5ZXJUeXBl
RVA3Q0FMYXllclBOU18yMVBsYXRmb3JtQ0FMYXllckNsaWVudEUKIC1bV2ViTGF5ZXIgYWN0aW9u
Rm9yS2V5Ol0KIF9fWk43V2ViQ29yZTEzR3JhcGhpY3NMYXllcjIxdXBkYXRlRGVidWdJbmRpY2F0
b3JzRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBN3NldFNpemVFUktOU185RmxvYXRT
aXplRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExMXNldFBvc2l0aW9uRVJLTlNfMTBG
bG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0E3c2V0U2l6ZUVSS05TXzEy
R3JhcGhpY3NTaXplRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExMXNldFBvc2l0aW9u
RVJLTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNnNl
dE1hc2tzVG9Cb3VuZHNFYgogX19aTjdXZWJDb3JlMjFSZW5kZXJMYXllckNvbXBvc2l0b3IyM2F0
dGFjaFJvb3RQbGF0Zm9ybUxheWVyRU5TMF8xOVJvb3RMYXllckF0dGFjaG1lbnRFCiBfX1pOSzdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExM3BsYXRmb3JtTGF5ZXJFdgpAQCAtNjA4MSw4ICs2MDgx
LDggQEAgX19aTks3V2ViQ29yZTI2QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdAogX19aTjdXZWJD
b3JlMTVHcmFwaGljc0xheWVyQ0ExNHNldFByZXNlcnZlczNERWIKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMjFzZXRCYWNrZmFjZVZpc2liaWxpdHlFYgogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0xheWVyQ0ExNXNldE5lZWRzRGlzcGxheUV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5
ZXJDQTIxc2V0TmVlZHNEaXNwbGF5SW5SZWN0RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NMYXllckNBMTRzZXRBbmNob3JQb2ludEVSS05TXzEyRmxvYXRQb2ludDNERQor
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyMXNldE5lZWRzRGlzcGxheUluUmVjdEVSS05T
XzEyR3JhcGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNHNldEFuY2hv
clBvaW50RVJLTlNfMTVHcmFwaGljc1BvaW50M0RFCiBfX1pOSzdXZWJDb3JlMThSZW5kZXJMYXll
ckJhY2tpbmcxMWNvbnRlbnRzQm94RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTVz
ZXRDb250ZW50c1JlY3RFUktOU183SW50UmVjdEUKIF9fWk5LN1dlYkNvcmUxOFJlbmRlckxheWVy
QmFja2luZzIyY29udGFpbnNQYWludGVkQ29udGVudEV2CkBAIC02MTA2LDE1ICs2MTA2LDE1IEBA
IF9fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU43V2ViQ29yZTE1UGwKIF9fWk43V2ViQ29yZTE1
UGxhdGZvcm1DQUxheWVyMjByZW1vdmVGcm9tU3VwZXJsYXllckV2CiBfX1pON1dlYkNvcmUxNVBs
YXRmb3JtQ0FMYXllcjEyc2V0U3VibGF5ZXJzRVJLTjNXVEY2VmVjdG9ySU5TMV82UmVmUHRySVMw
X0VFTG0wRUVFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE1dXBkYXRlTGF5ZXJTaXpl
RXYKLV9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyOXNldEJvdW5kc0VSS05TXzlGbG9hdFJl
Y3RFCitfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjlzZXRCb3VuZHNFUktOU18xMkdyYXBo
aWNzUmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTl1cGRhdGVMYXllclBvc2l0
aW9uRXYKLV9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMTFzZXRQb3NpdGlvbkVSS05TXzEy
RmxvYXRQb2ludDNERQorX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxMXNldFBvc2l0aW9u
RVJLTlNfMTVHcmFwaGljc1BvaW50M0RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE5
dXBkYXRlTWFza3NUb0JvdW5kc0V2CiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE2c2V0
TWFza3NUb0JvdW5kc0ViCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE4dXBkYXRlQ29u
dGVudHNSZWN0RXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMThyZW1vdmVBbGxTdWJs
YXllcnNFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyM3VwZGF0ZUxheWVyRHJhd3ND
b250ZW50RXYKLV9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMTVzZXROZWVkc0Rpc3BsYXlF
UEtOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxNXNldE5lZWRz
RGlzcGxheUVQS05TXzEyR3JhcGhpY3NSZWN0RQogLVtXZWJMYXllciBzZXROZWVkc0Rpc3BsYXld
CiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE1cGxhdGZvcm1DQUxheWVyRVB2CiBfX1pU
aG40NDBfTks3V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjdwbGF0Zm9ybUNBTGF5ZXJEcmF3c0Nv
bnRlbnRFdgpAQCAtNjE0NCw4ICs2MTQ0LDggQEAgX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEMgogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQyOXBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzRXYKIF9fWk5LN1dlYkNvcmUxMUltYWdlQnVmZmVy
MTRkcmF3c1VzaW5nQ29weUV2CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd0lt
YWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRU5TXzEwQ29sb3JTcGFjZUVSS05TXzdJbnRSZWN0
RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFYgotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQx
NWRyYXdJbWFnZUJ1ZmZlckVQTlNfMTFJbWFnZUJ1ZmZlckVOU18xMENvbG9yU3BhY2VFUktOU185
RmxvYXRSZWN0RVM2X05TXzE3Q29tcG9zaXRlT3BlcmF0b3JFYgotX19aTjdXZWJDb3JlMTFJbWFn
ZUJ1ZmZlcjRkcmF3RVBOU18xNUdyYXBoaWNzQ29udGV4dEVOU18xMENvbG9yU3BhY2VFUktOU185
RmxvYXRSZWN0RVM2X05TXzE3Q29tcG9zaXRlT3BlcmF0b3JFYgorX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxNWRyYXdJbWFnZUJ1ZmZlckVQTlNfMTFJbWFnZUJ1ZmZlckVOU18xMENvbG9y
U3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIKK19f
Wk43V2ViQ29yZTExSW1hZ2VCdWZmZXI0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFTlNfMTBD
b2xvclNwYWNlRVJLTlNfMTJHcmFwaGljc1JlY3RFUzZfTlNfMTdDb21wb3NpdGVPcGVyYXRvckVi
CiBfX1pOSzdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjljb3B5SW1hZ2VFdgogX19aTjdXZWJDb3JlMTFC
aXRtYXBJbWFnZUMxRVA3Q0dJbWFnZVBOU18xM0ltYWdlT2JzZXJ2ZXJFCiBfX1pON1dlYkNvcmUx
MUJpdG1hcEltYWdlQzJFUDdDR0ltYWdlUE5TXzEzSW1hZ2VPYnNlcnZlckUKQEAgLTYyODAsOSAr
NjI4MCw5IEBAIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDI4YWRkTm9kZVRvUmUKIF9fWk43
V2ViQ29yZTE0SFRNTE1hcEVsZW1lbnQxM21hcE1vdXNlRXZlbnRFaWlSS05TXzdJbnRTaXplRVJO
U18xM0hpdFRlc3RSZXN1bHRFCiBfX1pON1dlYkNvcmUxNUhUTUxBcmVhRWxlbWVudDEzbWFwTW91
c2VFdmVudEVpaVJLTlNfN0ludFNpemVFUk5TXzEzSGl0VGVzdFJlc3VsdEUKIF9fWk5LN1dlYkNv
cmUxNUhUTUxBcmVhRWxlbWVudDlnZXRSZWdpb25FUktOU183SW50U2l6ZUUKLV9fWk43V2ViQ29y
ZTRQYXRoN2FkZFJlY3RFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlNFBhdGg3YWRkUmVj
dEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlNFBhdGhDMUVSS1MwXwotX19aTks3
V2ViQ29yZTRQYXRoOGNvbnRhaW5zRVJLTlNfMTBGbG9hdFBvaW50RU5TXzhXaW5kUnVsZUUKK19f
Wk5LN1dlYkNvcmU0UGF0aDhjb250YWluc0VSS05TXzEzR3JhcGhpY3NQb2ludEVOU184V2luZFJ1
bGVFCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQxM3NldFVSTEVsZW1lbnRFUE5TXzdFbGVt
ZW50RQogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0YVNFUktTMF8KIF9fWk43V2ViQ29yZTEx
UmVuZGVyQmxvY2sxOXVwZGF0ZUhpdFRlc3RSZXN1bHRFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05T
XzhJbnRQb2ludEUKQEAgLTYzMDAsNyArNjMwMCw3IEBAIF9fWk43V2ViQ29yZTE0SFRNTENvbGxl
Y3Rpb25EMEV2CiBfX1pOSzdXZWJDb3JlMjVBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rMTFlbGVt
ZW50UmVjdEV2CiBfX1pOSzdXZWJDb3JlMTVIVE1MQXJlYUVsZW1lbnQxMWNvbXB1dGVSZWN0RVBO
U18xMlJlbmRlck9iamVjdEUKIF9fWk5LN1dlYkNvcmUxNUhUTUxBcmVhRWxlbWVudDExY29tcHV0
ZVBhdGhFUE5TXzEyUmVuZGVyT2JqZWN0RQotX19aTjdXZWJDb3JlNFBhdGg5dHJhbnNsYXRlRVJL
TlNfOUZsb2F0U2l6ZUUKK19fWk43V2ViQ29yZTRQYXRoOXRyYW5zbGF0ZUVSS05TXzEyR3JhcGhp
Y3NTaXplRQogX19aTks3V2ViQ29yZTRQYXRoMTJib3VuZGluZ1JlY3RFdgogX19aTjdXZWJDb3Jl
MjhKU0hUTUxTZWxlY3RFbGVtZW50UHJvdG90eXBlRDFFdgogX19aTjdXZWJDb3JlMTFSZW5kZXJC
bG9jazEzRmxvYXRXaXRoUmVjdEMyRVBOU185UmVuZGVyQm94RQpAQCAtNjM5NCw5ICs2Mzk0LDkg
QEAgX19aTks3V2ViQ29yZTZXaWRnZXQyN2NvbnZlcnRGcm9tQ29udGFpbgogX19aTjdXZWJDb3Jl
NldpZGdldDMzY29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290RVBLUzBfUktOU184SW50
UG9pbnRFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQxN3ByZXBhcmVNb3VzZUV2ZW50RVJLTlNfMTRI
aXRUZXN0UmVxdWVzdEVSS05TXzhJbnRQb2ludEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQog
X19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTFub2RlQXRQb2ludEVSS05TXzE0SGl0VGVzdFJl
cXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzhJbnRQb2ludEVpaWlpCi1fX1pOSzdXZWJD
b3JlOUZsb2F0UmVjdDEwaW50ZXJzZWN0c0VSS1MwXworX19aTks3V2ViQ29yZTEyR3JhcGhpY3NS
ZWN0MTBpbnRlcnNlY3RzRVJLUzBfCiBfX1pON1dlYkNvcmU5SW5saW5lQm94MThmbGlwRm9yV3Jp
dGluZ01vZGVFUktOU184SW50UG9pbnRFCi1fX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQyOGFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHRFUE5TXzROb2RlRWlpUktOU185RmxvYXRSZWN0RQor
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MjhhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0
RVBOU180Tm9kZUVpaVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU0Tm9kZTMwZW5j
bG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmRXYKIF9fWk43V2ViQ29yZThEb2N1bWVudDEyc2V0
SG92ZXJOb2RlRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFCiBfX1pOSzdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QxM2hvdmVyQW5jZXN0b3JFdgpAQCAtNjUyNyw3ICs2NTI3LDcgQEAgX19aTjdX
ZWJDb3JlMTNSb290SW5saW5lQm94MTVjbGVhclRydW5jYQogX19aTjdXZWJDb3JlMTFFbGxpcHNp
c0JveEQwRXYKIF9fWk43V2ViQ29yZTEzSW5saW5lRmxvd0JveDE1Y2xlYXJUcnVuY2F0aW9uRXYK
IF9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDE1Y2xlYXJUcnVuY2F0aW9uRXYKLV9fWk43V2Vi
Q29yZTEwUmVuZGVyVGV4dDEzYWJzb2x1dGVRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1
YWRFTG0wRUVFTlMwXzE0Q2xpcHBpbmdPcHRpb25FCitfX1pON1dlYkNvcmUxMFJlbmRlclRleHQx
M2Fic29sdXRlUXVhZHNFUk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUVOUzBf
MTRDbGlwcGluZ09wdGlvbkUKIF9fWk5LN1dlYkNvcmUxM0lubGluZVRleHRCb3gxOWNhbGN1bGF0
ZUJvdW5kYXJpZXNFdgogX19aTks3V2ViQ29yZTEzUm9vdElubGluZUJveDExZWxsaXBzaXNCb3hF
dgogX19aTjdXZWJDb3JlMTFFbGxpcHNpc0JveDEzc2VsZWN0aW9uUmVjdEVpaQpAQCAtNjY5Nyw3
ICs2Njk3LDcgQEAgX19aTjdXZWJDb3JlMTJSZW5kZXJXaWRnZXQ1cGFpbnRFUk5TXzlQYQogX19a
Tks3V2ViQ29yZTlSZW5kZXJCb3gxNWJvcmRlckZpdEFkanVzdEVSTlNfN0ludFJlY3RFCiBfX1pO
N1dlYkNvcmUxMFNjcm9sbFZpZXc1cGFpbnRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0lu
dFJlY3RFCiBfX1pON1dlYkNvcmU2V2lkZ2V0NXBhaW50RVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTltYWtlTWFwQmV0d2VlblJlY3RzRVJLTlNfOUZs
b2F0UmVjdEVTMl8KK19fWk43V2ViQ29yZTE5bWFrZU1hcEJldHdlZW5SZWN0c0VSS05TXzEyR3Jh
cGhpY3NSZWN0RVMyXwogX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtNnlTY2FsZUV2CiBf
X1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eFNjYWxlRXYKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckxheWVyMjByZXF1aXJlc1Nsb3dSZXBhaW50c0V2CkBAIC02NzM1LDcgKzY3MzUsNyBAQCBf
X1pON1dlYkNvcmUxNkpTSFRNTFByZUVsZW1lbnRDMUVQTjNKU0M5CiBfX1pON1dlYkNvcmUxMmNh
Y2hlV3JhcHBlcklOU18xNEhUTUxQcmVFbGVtZW50RUVFdlBOU18xNURPTVdyYXBwZXJXb3JsZEVQ
VF9QTlNfMTJKU0RPTVdyYXBwZXJFCiBfX1pON1dlYkNvcmUxM0FYV2ViQXJlYVRleHRFdgogX19a
TjdXZWJDb3JlMjdEZWZhdWx0TG9jYWxpemF0aW9uU3RyYXRlZ3kxM0FYV2ViQXJlYVRleHRFdgot
X19aTjdXZWJDb3JlMTBSZW5kZXJWaWV3MTNhYnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNf
OUZsb2F0UXVhZEVMbTBFRUUKK19fWk43V2ViQ29yZTEwUmVuZGVyVmlldzEzYWJzb2x1dGVRdWFk
c0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRQogX19aTjdXZWJDb3JlMjVB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0MTZnZXREb2N1bWVudExpbmtzRVJOM1dURjZWZWN0b3JJ
TlMxXzZSZWZQdHJJTlNfMTlBY2Nlc3NpYmlsaXR5T2JqZWN0RUVFTG0wRUVFCiBfX1pON1dlYkNv
cmU4RG9jdW1lbnQ1bGlua3NFdgogX19aTks3V2ViQ29yZTE0SFRNTENvbGxlY3Rpb244bmV4dEl0
ZW1FdgpAQCAtNzIzNywxMCArNzIzNywxMCBAQCBfX1pON1dlYkNvcmUyMVJlbmRlckxheWVyQ29t
cG9zaXRvcjM1dXBkCiBfX1pON1dlYkNvcmUxNFJlbmRlclRoZW1lTWFjMjhwYWludE1lZGlhQ29u
dHJvbHNCYWNrZ3JvdW5kRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzlQYWludEluZm9FUktOU183
SW50UmVjdEUKIF9fWk43V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyMnBhaW50TWVkaWFSZXdpbmRC
dXR0b25FUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfOVBhaW50SW5mb0VSS05TXzdJbnRSZWN0RQog
X19aTjdXZWJDb3JlMTRSZW5kZXJUaGVtZU1hYzIwcGFpbnRNZWRpYVBsYXlCdXR0b25FUE5TXzEy
UmVuZGVyT2JqZWN0RVJLTlNfOVBhaW50SW5mb0VSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3Jl
MTNJbmxpbmVUZXh0Qm94MjhhcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0RVBOU18xNUdyYXBo
aWNzQ29udGV4dEVQS05TXzEwU2hhZG93RGF0YUVSS05TXzlGbG9hdFJlY3RFYmJiCi1fX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVD
b2xvckVOU18xMENvbG9yU3BhY2VFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE3c2V0
UGxhdGZvcm1TaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9yU3Bh
Y2VFCi1fX1pOSzdXZWJDb3JlOUZsb2F0U2l6ZWN2NkNHU2l6ZUV2CitfX1pON1dlYkNvcmUxM0lu
bGluZVRleHRCb3gyOGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHRFUE5TXzE1R3JhcGhpY3ND
b250ZXh0RVBLTlNfMTBTaGFkb3dEYXRhRVJLTlNfMTJHcmFwaGljc1JlY3RFYmJiCitfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU18xMkdyYXBoaWNzU2l6ZUVmUktO
U181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQx
N3NldFBsYXRmb3JtU2hhZG93RVJLTlNfMTJHcmFwaGljc1NpemVFZlJLTlNfNUNvbG9yRU5TXzEw
Q29sb3JTcGFjZUUKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNzU2l6ZWN2NkNHU2l6ZUV2CiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExY2xlYXJTaGFkb3dFdgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQxOWNsZWFyUGxhdGZvcm1TaGFkb3dFdgogX19aTjdXZWJDb3JlMTZIVE1M
TWVkaWFFbGVtZW50MjBhc3luY0V2ZW50VGltZXJGaXJlZEVQTlNfNVRpbWVySVMwX0VFCkBAIC03
MzIyLDcgKzczMjIsNyBAQCBfX1pOSzdXZWJDb3JlMTFNZWRpYVBsYXllcjZwYXVzZWRFdgogX19a
Tks3V2ViQ29yZTMwTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uNnBhdXNlZEV2CiBfX1pO
SzdXZWJDb3JlMzRNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDNHJhdGVFdgogX19a
TjdXZWJDb3JlMjNNZWRpYUNvbnRyb2xSb290RWxlbWVudDE1cGxheWJhY2tTdG9wcGVkRXYKLV9f
Wk4zV1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlF
bQorX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUxtMEVFMTVyZXNlcnZl
Q2FwYWNpdHlFbQogX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2sxOXZpcnR1YWxDb250aW51YXRp
b25FdgogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjExcmVtb3ZlQ2hpbGRFUFMwXwogX19aTjdX
ZWJDb3JlMjFSZW5kZXJMYXllckNvbXBvc2l0b3IxOGxheWVyV2lsbEJlUmVtb3ZlZEVQTlNfMTFS
ZW5kZXJMYXllckVTMl8KQEAgLTczNDYsOCArNzM0Niw4IEBAIF9fWk43V2ViQ29yZTE3UmVuZGVy
U2xpZGVyVGh1bWI2bGF5b3V0RXYKIF9fWk43V2ViQ29yZTEyUmVuZGVyU2xpZGVyOXRodW1iUmVj
dEV2CiBfX1pON1dlYkNvcmU5U3RlcFJhbmdlMTZ2YWx1ZUZyb21FbGVtZW50RVBOU18xNkhUTUxJ
bnB1dEVsZW1lbnRFUGIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMThzZXR1cENvbnRl
bnRzTGF5ZXJFUE5TXzE1UGxhdGZvcm1DQUxheWVyRQotX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNB
TGF5ZXIxNHNldEFuY2hvclBvaW50RVJLTlNfMTJGbG9hdFBvaW50M0RFCi1fX1pOM1dURjZWZWN0
b3JJTjdXZWJDb3JlOUZsb2F0UmVjdEVMbTBFRTE0c2hyaW5rQ2FwYWNpdHlFbQorX19aTjdXZWJD
b3JlMTVQbGF0Zm9ybUNBTGF5ZXIxNHNldEFuY2hvclBvaW50RVJLTlNfMTVHcmFwaGljc1BvaW50
M0RFCitfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNHNocmlu
a0NhcGFjaXR5RW0KIF9fWk43V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyMXBhaW50TWVkaWFTbGlk
ZXJUcmFja0VQTlNfMTJSZW5kZXJPYmplY3RFUktOU185UGFpbnRJbmZvRVJLTlNfN0ludFJlY3RF
CiBfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50OGJ1ZmZlcmVkRXYKIF9fWk43V2ViQ29y
ZTExTWVkaWFQbGF5ZXI4YnVmZmVyZWRFdgpAQCAtNzQ4Nyw4ICs3NDg3LDggQEAgX19aTjdXZWJD
b3JlMTRTY3JvbGxBbmltYXRvcjIxbm90aXR5UG9zaQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxl
QXJlYTI4c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbkVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTExUmVuZGVyTGF5ZXIxNXNldFNjcm9sbE9mZnNldEVSS05TXzhJbnRQb2ludEUKIF9f
Wk43V2ViQ29yZTExUmVuZGVyTGF5ZXI4c2Nyb2xsVG9FaWkKLV9fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMzZkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWRFUktOU185RmxvYXRR
dWFkRQotX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxM2NvbnRhaW5zUG9pbnRFUktOU18xMEZsb2F0
UG9pbnRFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjM2ZGlzcGF0Y2hGYWtlTW91c2VNb3Zl
RXZlbnRTb29uSW5RdWFkRVJLTlNfMTJHcmFwaGljc1F1YWRFCitfX1pOSzdXZWJDb3JlMTJHcmFw
aGljc1F1YWQxM2NvbnRhaW5zUG9pbnRFUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNv
cmU5U2Nyb2xsYmFyMTVvZmZzZXREaWRDaGFuZ2VFdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5
ZXIxNHNjcm9sbFBvc2l0aW9uRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlOVNjcm9sbGJh
cjE5dXBkYXRlVGh1bWJQb3NpdGlvbkV2CkBAIC04MDkxLDkgKzgwOTEsOSBAQCBfX1pON1dlYkNv
cmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OG11bHRpCiBfX1pOSzdXZWJDb3JlMjFSZW5kZXJMYXll
ckNvbXBvc2l0b3IyMWNhblJlbmRlcjNEVHJhbnNmb3Jtc0V2CiBfX1pOSzdXZWJDb3JlMTFSZW5k
ZXJMYXllcjE2Y3VycmVudFRyYW5zZm9ybUV2CiBfX1pOSzdXZWJDb3JlMjBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDdtYXBSZWN0RVJLTlNfN0ludFJlY3RFCi1fX1pOSzdXZWJDb3JlMjBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDdtYXBSZWN0RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk5LN1dlYkNvcmUyMFRyYW5z
Zm9ybWF0aW9uTWF0cml4N21hcFF1YWRFUktOU185RmxvYXRRdWFkRQotX19aTks3V2ViQ29yZTIw
VHJhbnNmb3JtYXRpb25NYXRyaXg4bWFwUG9pbnRFUktOU18xMEZsb2F0UG9pbnRFCitfX1pOSzdX
ZWJDb3JlMjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDdtYXBSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RF
CitfX1pOSzdXZWJDb3JlMjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDdtYXBRdWFkRVJLTlNfMTJHcmFw
aGljc1F1YWRFCitfX1pOSzdXZWJDb3JlMjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDhtYXBQb2ludEVS
S05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDI1Z2V0VHJh
bnNmb3JtRnJvbUNvbnRhaW5lckVQS1MwX1JLTlNfN0ludFNpemVFUk5TXzIwVHJhbnNmb3JtYXRp
b25NYXRyaXhFCiBfX1pON1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OXRyYW5zbGF0ZUVk
ZAogX19aTjdXZWJDb3JlMTRUcmFuc2Zvcm1TdGF0ZTE0YXBwbHlUcmFuc2Zvcm1FUktOU18yMFRy
YW5zZm9ybWF0aW9uTWF0cml4RU5TMF8yMVRyYW5zZm9ybUFjY3VtdWxhdGlvbkUKQEAgLTg0ODMs
OSArODQ4Myw5IEBAIF9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjIyc2V0UmUKIF9f
Wk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjExc2V0QWRkaXRpdmVFYgogX19aTjdXZWJD
b3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTFzZXRGaWxsTW9kZUVOUzBfMTJGaWxsTW9kZVR5cGVF
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMwc2V0VHJhbnNmb3JtQW5pbWF0aW9uRW5k
cG9pbnRzRVJLTlNfMTdLZXlmcmFtZVZhbHVlTGlzdEVQS05TXzlBbmltYXRpb25FUE5TXzE5UGxh
dGZvcm1DQUFuaW1hdGlvbkVpTlNfMThUcmFuc2Zvcm1PcGVyYXRpb24xM09wZXJhdGlvblR5cGVF
YlJLTlNfN0ludFNpemVFCi1fX1pON1dlYkNvcmVMMjVnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVl
RVBLTlNfMThUcmFuc2Zvcm1PcGVyYXRpb25FTlMwXzEzT3BlcmF0aW9uVHlwZUVSS05TXzdJbnRT
aXplRVJOU18xMkZsb2F0UG9pbnQzREUKLV9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlv
bjEyc2V0RnJvbVZhbHVlRVJLTlNfMTJGbG9hdFBvaW50M0RFCi1fX1pON1dlYkNvcmUxOVBsYXRm
b3JtQ0FBbmltYXRpb24xMHNldFRvVmFsdWVFUktOU18xMkZsb2F0UG9pbnQzREUKK19fWk43V2Vi
Q29yZUwyNWdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWVFUEtOU18xOFRyYW5zZm9ybU9wZXJhdGlv
bkVOUzBfMTNPcGVyYXRpb25UeXBlRVJLTlNfN0ludFNpemVFUk5TXzE1R3JhcGhpY3NQb2ludDNE
RQorX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTJzZXRGcm9tVmFsdWVFUktOU18x
NUdyYXBoaWNzUG9pbnQzREUKK19fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjEwc2V0
VG9WYWx1ZUVSS05TXzE1R3JhcGhpY3NQb2ludDNERQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xh
eWVyQ0EzMXRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWVFUEtOU18xNEFuaW1hdGlvblZh
bHVlRVBLTlNfOUFuaW1hdGlvbkUKIF9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjE3
c2V0VGltaW5nRnVuY3Rpb25FUEtOU18xNFRpbWluZ0Z1bmN0aW9uRQogX19aTjdXZWJDb3JlMTlQ
bGF0Zm9ybUNBQW5pbWF0aW9uMTZzZXRWYWx1ZUZ1bmN0aW9uRU5TMF8xN1ZhbHVlRnVuY3Rpb25U
eXBlRQpAQCAtODU1OSw5ICs4NTU5LDkgQEAgX19aTks3V2ViQ29yZTE4Q29tcG9zaXRlQW5pbWF0
aW9uMTZnZXRBbgogX19aTjdXZWJDb3JlMTdLZXlmcmFtZUFuaW1hdGlvbjE2Z2V0QW5pbWF0ZWRT
dHlsZUVSTjNXVEY2UmVmUHRySU5TXzExUmVuZGVyU3R5bGVFRUUKIF9fWk43V2ViQ29yZTI0SGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlMTRhcHBseVRyYW5zZm9ybUVSS05TXzIwVHJhbnNmb3JtYXRp
b25NYXRyaXhFTlMwXzIxVHJhbnNmb3JtQWNjdW11bGF0aW9uRQogX19aTks3V2ViQ29yZTI0SGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlMTFtYXBwZWRQb2ludEV2Ci1fX1pOSzdXZWJDb3JlMjBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDEycHJvamVjdFBvaW50RVJLTlNfMTBGbG9hdFBvaW50RQorX19aTks3
V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXgxMnByb2plY3RQb2ludEVSS05TXzEzR3JhcGhp
Y3NQb2ludEUKIF9fWk43V2ViQ29yZTI0SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlN2ZsYXR0ZW5F
dgotX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXgxMXByb2plY3RRdWFkRVJLTlNf
OUZsb2F0UXVhZEUKK19fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4MTFwcm9qZWN0
UXVhZEVSS05TXzEyR3JhcGhpY3NRdWFkRQogX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9jazEzaGl0
VGVzdEZsb2F0c0VSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVpaWlp
CiBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMjRpc1BvaW50SW5PdmVyZmxvd0NvbnRyb2xFUk5T
XzEzSGl0VGVzdFJlc3VsdEVpaWlpCiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDE4ZmxpcEZvcldy
aXRpbmdNb2RlRVJLTlNfOEludFBvaW50RQpAQCAtODc3OSwxMCArODc3OSwxMCBAQCBfX1pOM1dU
RjZWZWN0b3JJUE43V2ViQ29yZTlSZW5kZXJCb3hFTG0wCiBfX1pUaG44X043V2ViQ29yZTIwSFRN
TFBhcmFncmFwaEVsZW1lbnREMEV2CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIzY3Jl
YXRlS2V5ZnJhbWVBbmltYXRpb25FUEtOU185QW5pbWF0aW9uRU5TXzE4QW5pbWF0ZWRQcm9wZXJ0
eUlERWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMzBzZXRUcmFuc2Zvcm1BbmltYXRp
b25LZXlmcmFtZXNFUktOU18xN0tleWZyYW1lVmFsdWVMaXN0RVBLTlNfOUFuaW1hdGlvbkVQTlNf
MTlQbGF0Zm9ybUNBQW5pbWF0aW9uRWlOU18xOFRyYW5zZm9ybU9wZXJhdGlvbjEzT3BlcmF0aW9u
VHlwZUViUktOU183SW50U2l6ZUUKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMkZsb2F0UG9p
bnQzREVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KK19fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUx
NUdyYXBoaWNzUG9pbnQzREVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk4zV1RGNlZlY3Rv
cklQS043V2ViQ29yZTE0VGltaW5nRnVuY3Rpb25FTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9f
Wk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjExc2V0S2V5VGltZXNFUktOM1dURjZWZWN0
b3JJZkxtMEVFRQotX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uOXNldFZhbHVlc0VS
S04zV1RGNlZlY3RvcklOU18xMkZsb2F0UG9pbnQzREVMbTBFRUUKK19fWk43V2ViQ29yZTE5UGxh
dGZvcm1DQUFuaW1hdGlvbjlzZXRWYWx1ZXNFUktOM1dURjZWZWN0b3JJTlNfMTVHcmFwaGljc1Bv
aW50M0RFTG0wRUVFCiBfX1pON1dlYkNvcmUxOVBsYXRmb3JtQ0FBbmltYXRpb24xOHNldFRpbWlu
Z0Z1bmN0aW9uc0VSS04zV1RGNlZlY3RvcklQS05TXzE0VGltaW5nRnVuY3Rpb25FTG0wRUVFCiBf
X1pON1dlYkNvcmVMMjhjcmVhdGVIVE1MTGlua0VsZW1lbnRXcmFwcGVyRVBOM0pTQzlFeGVjU3Rh
dGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFIVE1MRWxl
bWVudEVFRQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzE3SlNIVE1MTGlua0VsZW1l
bnRFTlNfMTVIVE1MTGlua0VsZW1lbnRFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCkBAIC04ODc2LDcgKzg4NzYsNyBAQCBf
X1pON1dlYkNvcmUxOVBsYXRmb3JtQ0FBbmltYXRpb24xMnNldEZyCiBfX1pON1dlYkNvcmUxOVBs
YXRmb3JtQ0FBbmltYXRpb24xMHNldFRvVmFsdWVFUktOU18yMFRyYW5zZm9ybWF0aW9uTWF0cml4
RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyOGNyZWF0ZUFuaW1hdGlvbkZyb21LZXlm
cmFtZXNFUktOU18xN0tleWZyYW1lVmFsdWVMaXN0RVBLTlNfOUFuaW1hdGlvbkVSS04zV1RGNlN0
cmluZ0VkCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIxc2V0QW5pbWF0aW9uS2V5ZnJh
bWVzRVJLTlNfMTdLZXlmcmFtZVZhbHVlTGlzdEVQS05TXzlBbmltYXRpb25FUE5TXzE5UGxhdGZv
cm1DQUFuaW1hdGlvbkUKLV9fWk43V2ViQ29yZTE5RmxvYXRBbmltYXRpb25WYWx1ZUQwRXYKK19f
Wk43V2ViQ29yZTExMkdyYXBoaWNzQW5pbWF0aW9uVmFsdWVEMEV2CiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzTGF5ZXJDQTIwdXBkYXRlT3BhY2l0eU9uTGF5ZXJFdgogX19aTjdXZWJDb3JlMTVQbGF0
Zm9ybUNBTGF5ZXIxMHNldE9wYWNpdHlFZgogX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uRVBOU181RnJhbWVFagpAQCAtOTA0Niw5ICs5MDQ2LDkgQEAgX19aTks3V2ViQ29yZTEw
U3R5bGVJbWFnZTE0aXNQZW5kaW5nSW1hZwogX19aTks3V2ViQ29yZTE0UmVuZGVyTGlzdEl0ZW0z
NnJlcXVpcmVzRm9yY2VkU3R5bGVSZWNhbGNQcm9wYWdhdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTZT
dHlsZUNhY2hlZEltYWdlNWltYWdlRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzdJbnRTaXplRQog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNGRyYXdUaWxlZEltYWdlRVBOU181SW1hZ2VF
TlNfMTBDb2xvclNwYWNlRVJLTlNfN0ludFJlY3RFUktOU184SW50UG9pbnRFUktOU183SW50U2l6
ZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIKLV9fWk43V2ViQ29yZTVJbWFnZTlkcmF3VGlsZWRF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzEwRmxvYXRQb2ludEVS
S05TXzlGbG9hdFNpemVFTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCitf
X1pON1dlYkNvcmU1SW1hZ2U5ZHJhd1RpbGVkRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEy
R3JhcGhpY3NSZWN0RVJLTlNfMTNHcmFwaGljc1BvaW50RVJLTlNfMTJHcmFwaGljc1NpemVFTlNf
MTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCiBfX1pON1dlYkNvcmUxNUFmZmlu
ZVRyYW5zZm9ybTE1c2NhbGVOb25Vbmlmb3JtRWRkCi1fX1pON1dlYkNvcmU1SW1hZ2UxMWRyYXdQ
YXR0ZXJuRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUktOU18xNUFmZmlu
ZVRyYW5zZm9ybUVSS05TXzEwRmxvYXRQb2ludEVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3Np
dGVPcGVyYXRvckVTNV8KK19fWk43V2ViQ29yZTVJbWFnZTExZHJhd1BhdHRlcm5FUE5TXzE1R3Jh
cGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xNUFmZmluZVRyYW5zZm9ybUVS
S05TXzEzR3JhcGhpY3NQb2ludEVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRv
ckVTNV8KIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2UyNm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lRXYKIF9fWk5LN1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTEyaXNJbnZlcnRpYmxlRXYKIF9f
Wk43V2ViQ29yZTI0SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MTN2aXNpdENoaWxkcmVuRVJOM0pT
QzlNYXJrU3RhY2tFCkBAIC05MDY1LDcgKzkwNjUsNyBAQCBfX1pON1dlYkNvcmUxMUNhbnZhc1N0
eWxlMTRhcHBseUZpbGxDb2xvCiBfX1pON1dlYkNvcmU1MWpzQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEUHJvdG90eXBlRnVuY3Rpb25GaWxsUmVjdEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJD
b3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ4ZmlsbFJlY3RFZmZmZgogX19aTks3V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MTJmaWxsR3JhZGllbnRFdgotX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQ4ZmlsbFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTQwc2V0
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRHbG9iYWxBbHBoYUVQTjNKU0M5RXhlY1N0YXRlRVBO
UzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEMTRzZXRHbG9iYWxBbHBoYUVmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhzZXRBbHBoYUVmCkBAIC05MDc1LDggKzkwNzUsOCBAQCBfX1pON1dlYkNvcmUyNENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDRzCiBfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMjRDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ1U3RhdGVFTG0xRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pON1dlYkNv
cmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDVTdGF0ZUMyRVJLUzFfCiBfX1pON1dlYkNvcmUy
NENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDI1c2V0QWxsQXR0cmlidXRlc1RvRGVmYXVsdEV2Ci1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0TGVnYWN5U2hhZG93RVJLTlNfOUZsb2F0
U2l6ZUVmUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQotX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MTVzZXRMZWdhY3lTaGFkb3dFUktOU18xMkdyYXBoaWNzU2l6ZUVmUktOU181Q29s
b3JFTlNfMTBDb2xvclNwYWNlRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Y2xlYXJS
ZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDdyZXN0b3JlRXYKIF9fWk43V2ViQ29yZTRQYXRoOXRyYW5zZm9ybUVSS05TXzE1QWZm
aW5lVHJhbnNmb3JtRQogX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtMTBpc0lkZW50aXR5
RXYKQEAgLTkwODQsNyArOTA4NCw3IEBAIF9fWk5LN1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTdp
bnZlcnNlRXYKIF9fWk5LN1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDRpczJkRXYK
IF9fWk43V2ViQ29yZTU1anNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90b3R5cGVGdW5jdGlv
bkdldEltYWdlRGF0YUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3V2ViQ29yZTI0Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEMTJnZXRJbWFnZURhdGFFZmZmZlJpCi1fX1pOSzdXZWJDb3JlMTdIVE1M
Q2FudmFzRWxlbWVudDIyY29udmVydExvZ2ljYWxUb0RldmljZUVSS05TXzlGbG9hdFJlY3RFCitf
X1pOSzdXZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDIyY29udmVydExvZ2ljYWxUb0RldmljZUVS
S05TXzEyR3JhcGhpY3NSZWN0RQogX19aTks3V2ViQ29yZTExSW1hZ2VCdWZmZXIyNGdldFVubXVs
dGlwbGllZEltYWdlRGF0YUVSS05TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTE1SW1hZ2VCdWZm
ZXJEYXRhN2dldERhdGFFUktOU183SW50UmVjdEVSS05TXzdJbnRTaXplRWJiCiBfX1pON1dlYkNv
cmVMMjJ1bnByZW11bHRpdHBseVNjYW5saW5lRVB2bQpAQCAtOTE0MSw3ICs5MTQxLDcgQEAgX19a
TjdXZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDlzZXRIZWlnaAogX19aTjdXZWJDb3JlNTJqc0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uRHJhd0ltYWdlRVBOM0pTQzlF
eGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJ
bWFnZUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxJbWFnZUVsZW1lbnRFZmZSaQotX19aTjdXZWJDb3Jl
MjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxJbWFnZUVsZW1l
bnRFUktOU185RmxvYXRSZWN0RVM1X1JLTlNfMTdDb21wb3NpdGVPcGVyYXRvckVSaQorX19aTjdX
ZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxJbWFn
ZUVsZW1lbnRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9SS05TXzE3Q29tcG9zaXRlT3BlcmF0b3JF
UmkKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbWFnZUVsZW1lbnQ4Y29tcGxldGVFdgogX19aTjdXZWJD
b3JlMjJDYW52YXNSZW5kZXJpbmdDb250ZXh0MTFjaGVja09yaWdpbkVQS05TXzE2SFRNTEltYWdl
RWxlbWVudEUKIF9fWk43V2ViQ29yZTIyQ2FudmFzUmVuZGVyaW5nQ29udGV4dDExY2hlY2tPcmln
aW5FUktOU180S1VSTEUKQEAgLTkxNTAsNyArOTE1MCw3IEBAIF9fWk5LN1dlYkNvcmUxNFNlY3Vy
aXR5T3JpZ2luMTJ0YWludHNDYW4KIF9fWk5LN1dlYkNvcmUxMUJpdG1hcEltYWdlMjNoYXNTaW5n
bGVTZWN1cml0eU9yaWdpbkV2CiBfX1pON1dlYkNvcmVMMjVwYXJzZUNvbG9ySW50T3JQZXJjZW50
YWdlRVJQS3RTMV9jUk5TXzE3Q1NTUHJpbWl0aXZlVmFsdWU5VW5pdFR5cGVzRVJpCiBfX1pON1dl
YkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE3SFRNTENhbnZh
c0VsZW1lbnRFZmZSaQotX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJh
d0ltYWdlRVBOU18xN0hUTUxDYW52YXNFbGVtZW50RVJLTlNfOUZsb2F0UmVjdEVTNV9SaQorX19a
TjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xN0hUTUxD
YW52YXNFbGVtZW50RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfUmkKIF9fWk43V2ViQ29yZTIyQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDExY2hlY2tPcmlnaW5FUEtOU18xN0hUTUxDYW52YXNFbGVtZW50
RQogX19aTjdXZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDI5bWFrZVJlbmRlcmluZ1Jlc3VsdHNB
dmFpbGFibGVFdgogX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZTE1Z2V0Q0dJbWFnZUFycmF5RXYK
QEAgLTkxODksNyArOTE4OSw3IEBAIF9fWk5LN1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDIKIF9fWk43V2ViQ29yZTIxY29tcG9zaXRlT3BlcmF0b3JOYW1lRU5TXzE3Q29tcG9zaXRl
T3BlcmF0b3JFCiBfX1pON1dlYkNvcmVMMTFwYXJzZURvdWJsZUVQS3RTMV9jUmQKIF9fWk43V2Vi
Q29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJbWFnZUVQTlNfMTZIVE1MSW1hZ2VF
bGVtZW50RWZmZmZSaQotX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJh
d0ltYWdlRVBOU18xNkhUTUxJbWFnZUVsZW1lbnRFUktOU185RmxvYXRSZWN0RVM1X1JpCitfX1pO
N1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE2SFRNTElt
YWdlRWxlbWVudEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X1JpCiBfX1pON1dlYkNvcmU5UmVuZGVy
Qm94MzNtYXJrRm9yUGFnaW5hdGlvblJlbGF5b3V0SWZOZWVkZWRFdgogX19aTks3V2ViQ29yZTE2
U3R5bGVDYWNoZWRJbWFnZTIydXNlc0ltYWdlQ29udGFpbmVyU2l6ZUV2CiBfX1pON1dlYkNvcmUx
MUJpdG1hcEltYWdlMjBmcmFtZUR1cmF0aW9uQXRJbmRleEVtCkBAIC05Mjc0LDggKzkyNzQsOCBA
QCBfX1pON1dlYkNvcmUxNUhUTUxMaW5rRWxlbWVudDE5cmVtb3ZlZEZyCiBfX1pUaG44X043V2Vi
Q29yZTE1SFRNTEh0bWxFbGVtZW50RDBFdgogX19aTjdXZWJDb3JlNjNqc0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRlTGluZWFyR3JhZGllbnRFUE4zSlNDOUV4
ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMjBjcmVhdGVM
aW5lYXJHcmFkaWVudEVmZmZmUmkKLV9fWk43V2ViQ29yZTE0Q2FudmFzR3JhZGllbnRDMUVSS05T
XzEwRmxvYXRQb2ludEVTM18KLV9fWk43V2ViQ29yZThHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBv
aW50RVMzXworX19aTjdXZWJDb3JlMTRDYW52YXNHcmFkaWVudEMxRVJLTlNfMTNHcmFwaGljc1Bv
aW50RVMzXworX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNf
CiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2Jq
ZWN0RVBOU18xNENhbnZhc0dyYWRpZW50RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5T
XzE2SlNDYW52YXNHcmFkaWVudEVOU18xNENhbnZhc0dyYWRpZW50RUVFUE5TXzEySlNET01XcmFw
cGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwogX19aTjdX
ZWJDb3JlMTVnZXRET01TdHJ1Y3R1cmVJTlNfMTZKU0NhbnZhc0dyYWRpZW50RUVFUE4zSlNDOVN0
cnVjdHVyZUVQTlMyXzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFCkBAIC05Mjg1
LDcgKzkyODUsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0RmlsbEdyCiBf
X1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5aGFzU2hhZG93RXYKIF9fWk43V2ViQ29yZThH
cmFkaWVudDVwYWludEVQTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pON1dlYkNvcmU4R3JhZGll
bnQ1cGFpbnRFUDlDR0NvbnRleHQKLV9fWk5LN1dlYkNvcmUxMEZsb2F0UG9pbnRjdjdDR1BvaW50
RXYKK19fWk5LN1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRjdjdDR1BvaW50RXYKIF9fWk43V2ViQ29y
ZThHcmFkaWVudDE2cGxhdGZvcm1HcmFkaWVudEV2CiBfX1pON1dlYkNvcmU4R3JhZGllbnQyMHNv
cnRTdG9wc0lmTmVjZXNzYXJ5RXYKIF9fWk43V2ViQ29yZTE2SlNDYW52YXNHcmFkaWVudEQxRXYK
QEAgLTkzMjEsMTMgKzkzMjEsMTMgQEAgX19aTjdXZWJDb3JlMjdKU0NhbnZhc0dyYWRpZW50Q29u
c3RydWN0bwogX19aTjNKU0MxOGdldFN0YXRpY1ZhbHVlU2xvdElON1dlYkNvcmUyN0pTQ2FudmFz
R3JhZGllbnRDb25zdHJ1Y3RvckVOUzFfMTJKU0RPTVdyYXBwZXJFRUViUE5TXzlFeGVjU3RhdGVF
UEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
IF9fWk43V2ViQ29yZTYzanNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90b3R5cGVGdW5jdGlv
bkNyZWF0ZVJhZGlhbEdyYWRpZW50RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDIwY3JlYXRlUmFkaWFsR3JhZGllbnRFZmZmZmZmUmkKLV9f
Wk43V2ViQ29yZTE0Q2FudmFzR3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2ludEVmUzNfZgotX19a
TjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18xMEZsb2F0UG9pbnRFZlMzX2ZmCitfX1pON1dlYkNv
cmUxNENhbnZhc0dyYWRpZW50QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFZlMzX2YKK19fWk43V2Vi
Q29yZThHcmFkaWVudEMxRVJLTlNfMTNHcmFwaGljc1BvaW50RWZTM19mZgogX19aTjdXZWJDb3Jl
MjdKU0NhbnZhc0dyYWRpZW50Q29uc3RydWN0b3JEMUV2CiBfX1pON1dlYkNvcmU1OGpzQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25DcmVhdGVJbWFnZURhdGFFUE4zSlND
OUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTI2SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQxNWNy
ZWF0ZUltYWdlRGF0YUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3V2ViQ29yZTI0Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEMTVjcmVhdGVJbWFnZURhdGFFZmZSaQotX19aTks3V2ViQ29yZTE3SFRN
TENhbnZhc0VsZW1lbnQyMmNvbnZlcnRMb2dpY2FsVG9EZXZpY2VFUktOU185RmxvYXRTaXplRQor
X19aTks3V2ViQ29yZTE3SFRNTENhbnZhc0VsZW1lbnQyMmNvbnZlcnRMb2dpY2FsVG9EZXZpY2VF
UktOU18xMkdyYXBoaWNzU2l6ZUUKIF9fWk43V2ViQ29yZTlJbWFnZURhdGE2Y3JlYXRlRVJLTlNf
N0ludFNpemVFCiBfX1pON1dlYkNvcmUxNkNhbnZhc1BpeGVsQXJyYXk2Y3JlYXRlRWoKIF9fWk43
V2ViQ29yZTExdG9JbWFnZURhdGFFTjNKU0M3SlNWYWx1ZUUKQEAgLTkzNjMsNyArOTM2Myw3IEBA
IF9fWk5LN1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDcKIF9fWk43V2ViQ29yZTEx
bGluZUNhcE5hbWVFTlNfN0xpbmVDYXBFCiBfX1pON1dlYkNvcmU0NmpzQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25BcmNFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2Vi
Q29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEM2FyY0VmZmZmZmJSaQotX19aTjdXZWJDb3Jl
NFBhdGg2YWRkQXJjRVJLTlNfMTBGbG9hdFBvaW50RWZmZmIKK19fWk43V2ViQ29yZTRQYXRoNmFk
ZEFyY0VSS05TXzEzR3JhcGhpY3NQb2ludEVmZmZiCiBfX1pON1dlYkNvcmUzNWpzQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJETGluZVdpZHRoRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJL
TlMwXzEwSWRlbnRpZmllckUKIF9fWk5LN1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDlsaW5lV2lkdGhFdgogX19aTjdXZWJDb3JlMzRqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRExp
bmVKb2luRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUK
QEAgLTkzODcsNyArOTM4Nyw3IEBAIF9fWk43V2ViQ29yZTQ4anNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJENWFyY1RvRWZmZmZm
UmkKIF9fWk43V2ViQ29yZTU2anNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90b3R5cGVGdW5j
dGlvbklzUG9pbnRJblBhdGhFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTI0Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEMTNpc1BvaW50SW5QYXRoRWZmCi1fX1pOSzdXZWJDb3JlMTVBZmZp
bmVUcmFuc2Zvcm04bWFwUG9pbnRFUktOU18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3JlMTVB
ZmZpbmVUcmFuc2Zvcm04bWFwUG9pbnRFUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNv
cmU1MWpzQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25GaWxsVGV4dEVQ
TjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjZKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDhmaWxsVGV4dEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlNTNqc0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uU3Ryb2tlVGV4dEVQTjNKU0M5RXhlY1N0YXRl
RQpAQCAtOTQwOSwxMCArOTQwOSwxMCBAQCBfX1pON1dlYkNvcmUyMkpTVGV4dE1ldHJpY3NQcm90
b3R5cGVEMUV2CiBfX1pON1dlYkNvcmUxNUNTU0ZvbnRTZWxlY3RvcjM0dW5yZWdpc3RlckZvcklu
dmFsaWRhdGlvbkNhbGxiYWNrc0VQTlNfMThGb250U2VsZWN0b3JDbGllbnRFCiBfX1pOSzNXVEY5
SGFzaFRhYmxlSVBON1dlYkNvcmUxOEZvbnRTZWxlY3RvckNsaWVudEVTM19OU18xN0lkZW50aXR5
RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFpdHNJUzNfRUVTOV9F
NGZpbmRJUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1MzX1M3X0VFRUVOU18yMkhh
c2hUYWJsZUNvbnN0SXRlcmF0b3JJUzNfUzNfUzVfUzdfUzlfUzlfRUVSS1RfCiBfX1pOM1dURjlI
YXNoVGFibGVJUE43V2ViQ29yZTE4Rm9udFNlbGVjdG9yQ2xpZW50RVMzX05TXzE3SWRlbnRpdHlF
eHRyYWN0b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U2
cmVtb3ZlRVBTM18KLV9fWk43V2ViQ29yZTRQYXRoOGFkZEFyY1RvRVJLTlNfMTBGbG9hdFBvaW50
RVMzX2YKLV9fWk43V2ViQ29yZTRQYXRoMTZhZGRCZXppZXJDdXJ2ZVRvRVJLTlNfMTBGbG9hdFBv
aW50RVMzX1MzXworX19aTjdXZWJDb3JlNFBhdGg4YWRkQXJjVG9FUktOU18xM0dyYXBoaWNzUG9p
bnRFUzNfZgorX19aTjdXZWJDb3JlNFBhdGgxNmFkZEJlemllckN1cnZlVG9FUktOU18xM0dyYXBo
aWNzUG9pbnRFUzNfUzNfCiBfX1pON1dlYkNvcmVMMzRjb3B5Q2xvc2luZ1N1YnBhdGhzQXBwbGll
ckZ1bmN0aW9uRVB2UEsxM0NHUGF0aEVsZW1lbnQKLV9fWk43V2ViQ29yZTRQYXRoMTRhZGRRdWFk
Q3VydmVUb0VSS05TXzEwRmxvYXRQb2ludEVTM18KK19fWk43V2ViQ29yZTRQYXRoMTRhZGRRdWFk
Q3VydmVUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM18KIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJh
bnNmb3JtNnJvdGF0ZUVkCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDZyb3RhdGVFZgog
X19aTjdXZWJDb3JlMzVqc0RPTVdpbmRvd0NhbnZhc1BhdHRlcm5Db25zdHJ1Y3RvckVQTjNKU0M5
RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCkBAIC05NzEyLDcgKzk3
MTIsNyBAQCBfX1pON1dlYkNvcmUxNlBERkRvY3VtZW50SW1hZ2UxMWRhdGFDaGFuCiBfX1pON1dl
YkNvcmUxNlBERkRvY3VtZW50SW1hZ2UxNHNldEN1cnJlbnRQYWdlRWkKIF9fWk5LN1dlYkNvcmUx
NlBERkRvY3VtZW50SW1hZ2U0c2l6ZUV2CiBfX1pOSzdXZWJDb3JlNUltYWdlMTNpc0JpdG1hcElt
YWdlRXYKLV9fWk43V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTRkcmF3RVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzlGbG9hdFJlY3RFUzVfTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRl
T3BlcmF0b3JFCitfX1pON1dlYkNvcmUxNlBERkRvY3VtZW50SW1hZ2U0ZHJhd0VQTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdD
b21wb3NpdGVPcGVyYXRvckUKIF9fWk5LN1dlYkNvcmUxNlBERkRvY3VtZW50SW1hZ2U5YWRqdXN0
Q1RNRVBOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk43V2ViQ29yZUwxOWZyYW1lc2V0Q29uc3Ry
dWN0b3JFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEVQTlNfMTVIVE1MRm9ybUVs
ZW1lbnRFYgogX19aTjdXZWJDb3JlMTlIVE1MRnJhbWVTZXRFbGVtZW50NmNyZWF0ZUVSS05TXzEz
UXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RQpAQCAtOTc5MSwxNyArOTc5MSwxNyBAQCBfX1pO
N1dlYkNvcmUxMUxheW91dFN0YXRlQzFFUE5TXzEyUmVuZGVyCiBfX1pON1dlYkNvcmUxMUxheW91
dFN0YXRlQzJFUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMTFSZW5kZXJTdHlsZThz
ZXRSaWdodEVOU182TGVuZ3RoRQogX19aTks3V2ViQ29yZTEwU2hhZG93RGF0YTE5YWRqdXN0UmVj
dEZvclNoYWRvd0VSTlNfN0ludFJlY3RFaQotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyQzFFUktO
U185RmxvYXRTaXplRVMzX1JLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKLV9fWk43V2ViQ29y
ZTEwU2hhZG93Qmx1cjE0ZHJhd1JlY3RTaGFkb3dFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNf
OUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCitfX1pON1dlYkNvcmUxMFNoYWRv
d0JsdXJDMUVSS05TXzEyR3JhcGhpY3NTaXplRVMzX1JLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFj
ZUUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjE0ZHJhd1JlY3RTaGFkb3dFUE5TXzE1R3JhcGhp
Y3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRQog
X19aTks3V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTBjbGlwQm91bmRzRXYKLV9fWk43V2ViQ29y
ZTEwU2hhZG93Qmx1cjI2Y2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3RFUE5TXzE1R3JhcGhpY3ND
b250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzdJbnRSZWN0RQorX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMjZjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdEVQTlNfMTVHcmFwaGljc0NvbnRleHRF
UktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTBTaGFkb3dC
bHVyMTZhZGp1c3RCbHVyUmFkaXVzRVBOU18xNUdyYXBoaWNzQ29udGV4dEUKLV9fWk43V2ViQ29y
ZTEwU2hhZG93Qmx1cjI0ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzlGbG9hdFJlY3RFUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFNp
emVFU0NfCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIyNGRyYXdSZWN0U2hhZG93V2l0aFRpbGlu
Z0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE0Um91bmRl
ZFJlY3Q1UmFkaWlFUktOU183SW50U2l6ZUVTQ18KIF9fWk43V2ViQ29yZTEzU2NyYXRjaEJ1ZmZl
cjE2Z2V0U2NyYXRjaEJ1ZmZlckVSS05TXzdJbnRTaXplRQotX19aTks3V2ViQ29yZTEzU2NyYXRj
aEJ1ZmZlcjE3bWF0Y2hlc0xhc3RTaGFkb3dFUktOU185RmxvYXRTaXplRVJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUVSS05TXzlGbG9hdFJlY3RFUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRQor
X19aTks3V2ViQ29yZTEzU2NyYXRjaEJ1ZmZlcjE3bWF0Y2hlc0xhc3RTaGFkb3dFUktOU18xMkdy
YXBoaWNzU2l6ZUVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFUktOU18xMkdyYXBoaWNzUmVj
dEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCiBfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNmJs
dXJTaGFkb3dCdWZmZXJFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjE0
Ymx1ckxheWVySW1hZ2VFUGhSS05TXzdJbnRTaXplRWkKLV9fWk43V2ViQ29yZTEwU2hhZG93Qmx1
cjE1ZHJhd0xheWVyUGllY2VzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RF
UktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFNpemVFU0NfTlMwXzE1U2hhZG93RGly
ZWN0aW9uRQorX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMTVkcmF3TGF5ZXJQaWVjZXNFUE5TXzE1
R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xNFJvdW5kZWRSZWN0NVJh
ZGlpRVJLTlNfN0ludFNpemVFU0NfTlMwXzE1U2hhZG93RGlyZWN0aW9uRQogX19aTjdXZWJDb3Jl
NVRpbWVySU5TXzEzU2NyYXRjaEJ1ZmZlckVFNWZpcmVkRXYKIF9fWk43V2ViQ29yZTEzU2NyYXRj
aEJ1ZmZlcjEwdGltZXJGaXJlZEVQTlNfNVRpbWVySVMwX0VFCiBfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QyN29mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lckVQUzBfCkBAIC05OTc0LDcgKzk5
NzQsNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjI4cGFzc01vdXNlTW92CiBfX1pON1dl
YkNvcmUxMkV2ZW50SGFuZGxlcjI3cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lRVJOU18yOE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHNFUE5TXzVGcmFtZUVQTlNfMTNIaXRUZXN0UmVzdWx0
RQogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyNWNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdFUktO
U184SW50UG9pbnRFCiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzE3Y29udmVydFRvUmVuZGVyZXJF
UEtOU18xMlJlbmRlck9iamVjdEVSS05TXzhJbnRQb2ludEUKLV9fWk5LN1dlYkNvcmUxMlJlbmRl
ck9iamVjdDE1YWJzb2x1dGVUb0xvY2FsRVJLTlNfMTBGbG9hdFBvaW50RWJiCitfX1pOSzdXZWJD
b3JlMTJSZW5kZXJPYmplY3QxNWFic29sdXRlVG9Mb2NhbEVSS05TXzEzR3JhcGhpY3NQb2ludEVi
YgogX19aTks3V2ViQ29yZTlSZW5kZXJCb3gyM21hcEFic29sdXRlVG9Mb2NhbFBvaW50RWJiUk5T
XzE0VHJhbnNmb3JtU3RhdGVFCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJWaWV3MjNtYXBBYnNvbHV0
ZVRvTG9jYWxQb2ludEViYlJOU18xNFRyYW5zZm9ybVN0YXRlRQogX19aTjdXZWJDb3JlMTJFdmVu
dEhhbmRsZXIyOXBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lRVJOU18yOE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHNFUE5TXzVGcmFtZUUKQEAgLTEwMjY2LDkgKzEwMjY2LDkgQEAgX19a
Tks3V2ViQ29yZTI5U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZQogX19aTks3V2ViQ29yZTE2U1ZH
VHJhbnNmb3JtTGlzdDExY29uY2F0ZW5hdGVFUk5TXzE1QWZmaW5lVHJhbnNmb3JtRQogX19aTjdX
ZWJDb3JlMTNSZW5kZXJTVkdQYXRoMjJ1cGRhdGVDYWNoZWRCb3VuZGFyaWVzRXYKIF9fWk5LN1dl
YkNvcmUxNFNWR1JlbmRlclN0eWxlMTBoYXNNYXJrZXJzRXYKLV9fWk43V2ViQ29yZTE2U1ZHUmVu
ZGVyU3VwcG9ydDMzaW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzRVBLTlNfMTJSZW5k
ZXJPYmplY3RFUk5TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNlNWR1JlbmRlclN1cHBvcnQz
M2ludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlc0VQS05TXzEyUmVuZGVyT2JqZWN0RVJO
U18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTEzUmVuZGVyU1ZHUm9vdDIydXBkYXRlQ2Fj
aGVkQm91bmRhcmllc0V2Ci1fX1pON1dlYkNvcmUxNlNWR1JlbmRlclN1cHBvcnQyOWNvbXB1dGVD
b250YWluZXJCb3VuZGluZ0JveGVzRVBLTlNfMTJSZW5kZXJPYmplY3RFUk5TXzlGbG9hdFJlY3RF
UzVfUzVfCitfX1pON1dlYkNvcmUxNlNWR1JlbmRlclN1cHBvcnQyOWNvbXB1dGVDb250YWluZXJC
b3VuZGluZ0JveGVzRVBLTlNfMTJSZW5kZXJPYmplY3RFUk5TXzEyR3JhcGhpY3NSZWN0RVM1X1M1
XwogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjBpc1NWR0hpZGRlbkNvbnRhaW5lckV2CiBf
X1pOSzdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMjJsb2NhbFRvUGFyZW50VHJhbnNmb3JtRXYKIF9f
Wk5LN1dlYkNvcmUxM1JlbmRlclNWR1BhdGgxN29iamVjdEJvdW5kaW5nQm94RXYKQEAgLTEwMjgz
LDcgKzEwMjgzLDcgQEAgX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdSb290MjFjb21wdXRlUmVjdAog
X19aTks3V2ViQ29yZTEzUmVuZGVyU1ZHUm9vdDI1bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybUV2
CiBfX1pOSzdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MTJjdXJyZW50U2NhbGVFdgogX19aTks3V2Vi
Q29yZTEzU1ZHU1ZHRWxlbWVudDIydmlld0JveFRvVmlld1RyYW5zZm9ybUVmZgotX19aTjdXZWJD
b3JlMTVTVkdGaXRUb1ZpZXdCb3gyMnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm1FUktOU185RmxvYXRS
ZWN0RVJLTlNfMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvRWZmCitfX1pON1dlYkNvcmUxNVNWR0Zp
dFRvVmlld0JveDIydmlld0JveFRvVmlld1RyYW5zZm9ybUVSS05TXzEyR3JhcGhpY3NSZWN0RVJL
TlNfMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvRWZmCiBfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFu
c2Zvcm03bWFwUmVjdEVSS05TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTEzUmVuZGVyU1ZHUm9v
dDE5bWFwTG9jYWxUb0NvbnRhaW5lckVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEViYlJOU18x
NFRyYW5zZm9ybVN0YXRlRQogX19aTjdXZWJDb3JlMTRUcmFuc2Zvcm1TdGF0ZTE0YXBwbHlUcmFu
c2Zvcm1FUktOU18xNUFmZmluZVRyYW5zZm9ybUVOUzBfMjFUcmFuc2Zvcm1BY2N1bXVsYXRpb25F
CkBAIC0xMDI5Nyw3ICsxMDI5Nyw3IEBAIF9fWk43V2ViQ29yZTE3U01JTFRpbWVDb250YWluZXI1
YmVnaW5FdgogX19aTjdXZWJDb3JlMTdTTUlMVGltZUNvbnRhaW5lcjE2dXBkYXRlQW5pbWF0aW9u
c0VOU184U01JTFRpbWVFCiBfX1pON1dlYkNvcmUxN1NNSUxUaW1lQ29udGFpbmVyMTRzb3J0QnlQ
cmlvcml0eUVSTjNXVEY2VmVjdG9ySVBOU18xNFNWR1NNSUxFbGVtZW50RUxtMEVFRU5TXzhTTUlM
VGltZUUKIF9fWk43V2ViQ29yZTE3U01JTFRpbWVDb250YWluZXIxMHN0YXJ0VGltZXJFTlNfOFNN
SUxUaW1lRVMxXwotX19aTjdXZWJDb3JlOFNWR0ltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVJLTlNfOUZsb2F0UmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVy
YXRvckUKK19fWk43V2ViQ29yZThTVkdJbWFnZTRkcmF3RVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzEyR3JhcGhpY3NSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJh
dG9yRQogX19aVGhuNjRfTjdXZWJDb3JlOUZyYW1lVmlldzI5d2lsbFJlbW92ZUhvcml6b250YWxT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzM0bm90aWZ5
UGFnZVRoYXRDb250ZW50QXJlYVdpbGxQYWludEV2CiBfX1pOSzdXZWJDb3JlMTdTY3JvbGxBbmlt
YXRvck1hYzIwY29udGVudEFyZWFXaWxsUGFpbnRFdgpAQCAtMTAzMDYsNyArMTAzMDYsNyBAQCBf
X1pOSzdXZWJDb3JlMTNSZW5kZXJTVkdSb290MjJsb2NhbFRvUGFyCiBfX1pON1dlYkNvcmU5UGFp
bnRJbmZvMTRhcHBseVRyYW5zZm9ybUVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRQogX19aTjdXZWJD
b3JlOVJlbmRlckJveDVwYWludEVSTlNfOVBhaW50SW5mb0VpaQogX19aTjdXZWJDb3JlMTNSZW5k
ZXJTVkdQYXRoNXBhaW50RVJOU185UGFpbnRJbmZvRWlpCi1fX1pON1dlYkNvcmUxNlNWR1JlbmRl
clN1cHBvcnQzMHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdEVSS05TXzlGbG9hdFJlY3RF
UktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzlQYWludEluZm9FCitfX1pON1dlYkNvcmUxNlNW
R1JlbmRlclN1cHBvcnQzMHBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdEVSS05TXzEyR3Jh
cGhpY3NSZWN0RVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU185UGFpbnRJbmZvRQogX19aTjdX
ZWJDb3JlMTZTVkdSZW5kZXJTdXBwb3J0MjVwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50RVBOU18x
MlJlbmRlck9iamVjdEVSTlNfOVBhaW50SW5mb0UKIF9fWk43V2ViQ29yZTEzUmVuZGVyU1ZHUGF0
aDE3ZmlsbEFuZFN0cm9rZVBhdGhFUE5TXzE1R3JhcGhpY3NDb250ZXh0RQogX19aTjdXZWJDb3Jl
TDIzcmVxdWVzdFBhaW50aW5nUmVzb3VyY2VFTlNfMjFSZW5kZXJTVkdSZXNvdXJjZU1vZGVFUE5T
XzEyUmVuZGVyT2JqZWN0RVBLTlNfMTFSZW5kZXJTdHlsZUVSTlNfNUNvbG9yRQpAQCAtMTA0ODIs
OSArMTA0ODIsOSBAQCBfX1pON1dlYkNvcmVMMTJjb21wYXJlU3RvcHNFUktOU18yMENTU0dyCiBf
X1pOU3QxN19UZW1wb3JhcnlfYnVmZmVySVBON1dlYkNvcmUyMENTU0dyYWRpZW50Q29sb3JTdG9w
RVMxX0VEMUV2CiBfX1pON1dlYkNvcmUyMkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU4cHV0SW1hZ2VF
UktOU183SW50U2l6ZUVOM1dURjEwUGFzc1JlZlB0cklOU181SW1hZ2VFRUUKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MTRkcmF3VGlsZWRJbWFnZUVQTlNfNUltYWdlRU5TXzEwQ29sb3JT
cGFjZUVSS05TXzdJbnRSZWN0RVM2X05TMV84VGlsZVJ1bGVFUzdfTlNfMTdDb21wb3NpdGVPcGVy
YXRvckViCi1fX1pON1dlYkNvcmUxNEdlbmVyYXRlZEltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3ND
b250ZXh0RVJLTlNfOUZsb2F0UmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVP
cGVyYXRvckUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfOUZs
b2F0UmVjdEVSTlNfOUdlbmVyYXRvckUKLV9fWk43V2ViQ29yZThHcmFkaWVudDRmaWxsRVBOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNEdlbmVyYXRl
ZEltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVf
TlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVJOU185R2VuZXJhdG9y
RQorX19aTjdXZWJDb3JlOEdyYWRpZW50NGZpbGxFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNf
MTJHcmFwaGljc1JlY3RFCiBfX1pOSzNXVEY5SGFzaFRhYmxlSU43V2ViQ29yZTdJbnRTaXplRVN0
NHBhaXJJUzJfakVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNF9FRU5TXzdJbnRIYXNoSVMyX0VF
TlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0FfSWpFRUVFU0JfRThj
b250YWluc0lTMl9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzJfUzRfUzhfRUVFRWJSS1Rf
CiBfX1pON1dlYkNvcmUxNEdlbmVyYXRlZEltYWdlRDBFdgogX19aTjdXZWJDb3JlMTlDU1NCb3Jk
ZXJJbWFnZVZhbHVlRDBFdgpAQCAtMTExODgsOCArMTExODgsOCBAQCBfX1pOSzdXZWJDb3JlMTVG
b250RGVzY3JpcHRpb24xM2xpZ2h0ZXJXCiBfX1pOSzdXZWJDb3JlMTNIVE1MSFJFbGVtZW50MTBt
YXBUb0VudHJ5RVJLTlNfMTNRdWFsaWZpZWROYW1lRVJOU18yME1hcHBlZEF0dHJpYnV0ZUVudHJ5
RQogX19aTjdXZWJDb3JlMTNIVE1MSFJFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJpYnV0ZUVQTlNf
OUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTExdG9Vc2VyU3BhY2VFUks2Q0dSZWN0UDhOU1dpbmRv
dwotX19aTjdXZWJDb3JlOUZsb2F0UmVjdDVzY2FsZUVmZgotX19aTjdXZWJDb3JlMTN0b0Rldmlj
ZVNwYWNlRVJLTlNfOUZsb2F0UmVjdEVQOE5TV2luZG93CitfX1pON1dlYkNvcmUxMkdyYXBoaWNz
UmVjdDVzY2FsZUVmZgorX19aTjdXZWJDb3JlMTN0b0RldmljZVNwYWNlRVJLTlNfMTJHcmFwaGlj
c1JlY3RFUDhOU1dpbmRvdwogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjJmaXJzdExpbmVT
dHlsZVNsb3dDYXNlRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckJsb2NrMTRmaXJzdExpbmVCbG9j
a0V2CiBfX1pON1dlYkNvcmUxM1dpZHRoSXRlcmF0b3IyMW5vcm1hbGl6ZVZvaWNpbmdNYXJrc0Vp
CkBAIC0xMTIwNiw4ICsxMTIwNiw4IEBAIF9fWk4zV1RGNlZlY3RvcklOU185UmV0YWluUHRySVBL
OF9fQ1RMaW4KIF9fWk43V2ViQ29yZTIxQ29tcGxleFRleHRDb250cm9sbGVyMTRDb21wbGV4VGV4
dFJ1bkMyRVBLN19fQ1RSdW5QS05TXzE0U2ltcGxlRm9udERhdGFFUEt0am03Q0ZSYW5nZQogX19a
TjdXZWJDb3JlMjFDb21wbGV4VGV4dENvbnRyb2xsZXIyM2FkanVzdEdseXBoc0FuZEFkdmFuY2Vz
RXYKIF9fWk5LN1dlYkNvcmUxNkZvbnRQbGF0Zm9ybURhdGExOXJvdW5kc0dseXBoQWR2YW5jZXNF
dgotX19aTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlNfOUZsb2F0UmVjdEVFMThsb2NhdGVQ
YWdlU2xvd0Nhc2VFagotX19aTkszV1RGN0hhc2hNYXBJaVBON1dlYkNvcmUxNUdseXBoTWV0cmlj
c01hcElOUzFfOUZsb2F0UmVjdEVFMTZHbHlwaE1ldHJpY3NQYWdlRU5TXzdJbnRIYXNoSWpFRU5T
XzEwSGFzaFRyYWl0c0lpRUVOUzlfSVM2X0VFRTNnZXRFUktpCitfX1pON1dlYkNvcmUxNUdseXBo
TWV0cmljc01hcElOU18xMkdyYXBoaWNzUmVjdEVFMThsb2NhdGVQYWdlU2xvd0Nhc2VFagorX19a
TkszV1RGN0hhc2hNYXBJaVBON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzFfMTJHcmFwaGlj
c1JlY3RFRTE2R2x5cGhNZXRyaWNzUGFnZUVOU183SW50SGFzaElqRUVOU18xMEhhc2hUcmFpdHNJ
aUVFTlM5X0lTNl9FRUUzZ2V0RVJLaQogX19aTjdXZWJDb3JlMjFDb21wbGV4VGV4dENvbnRyb2xs
ZXIxNENvbXBsZXhUZXh0UnVuMTdzZXRJc05vbk1vbm90b25pY0V2CiBfX1pON1dlYkNvcmUyMUNv
bXBsZXhUZXh0Q29udHJvbGxlckQxRXYKIF9fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU43V2Vi
Q29yZTIxQ29tcGxleFRleHRDb250cm9sbGVyMTRDb21wbGV4VGV4dFJ1bkVFRUxtMTZFRUQxRXYK
QEAgLTExMjM4LDcgKzExMjM4LDcgQEAgX19aTjdXZWJDb3JlMTdIVE1MUGx1Z0luRWxlbWVudDE5
ZGVmYXVsdAogX19aTks3V2ViQ29yZTE2SFRNTEVsZW1lbnRTdGFjazEzaW5CdXR0b25TY29wZUVS
S05TXzEzUXVhbGlmaWVkTmFtZUUKIF9fWk43V2ViQ29yZUwyMmRlY29kZU5vbkFTQ0lJU2VxdWVu
Y2VFUEtoagogX19aTjdXZWJDb3JlMjBSZW5kZXJCb3hNb2RlbE9iamVjdDIxY2xpcEJvcmRlclNp
ZGVQb2x5Z29uRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzE0Um91bmRlZFJlY3RFUzVfTlNf
N0JveFNpZGVFYmIKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdjbGlwQ29udmV4UG9s
eWdvbkVtUEtOU18xMEZsb2F0UG9pbnRFYgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQx
N2NsaXBDb252ZXhQb2x5Z29uRW1QS05TXzEzR3JhcGhpY3NQb2ludEViCiBfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDhjbGlwUGF0aEVSS05TXzRQYXRoRU5TXzhXaW5kUnVsZUUKIF9fWk4z
V1RGOUhhc2hUYWJsZUlQS043V2ViQ29yZTE0U2ltcGxlRm9udERhdGFFUzRfTlNfMTdJZGVudGl0
eUV4dHJhY3RvcklTNF9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTBIYXNoVHJhaXRzSVM0X0VFU0Ff
RTNhZGRJUzRfUzRfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVM0X1M0X1M4X0VFRUVTdDRw
YWlySU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzRfUzRfUzZfUzhfU0FfU0FfRUViRVJLVF9SS1Qw
XwogX19aTjNXVEY5SGFzaFRhYmxlSVBLTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUVTNF9OU18x
N0lkZW50aXR5RXh0cmFjdG9ySVM0X0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xMEhhc2hUcmFpdHNJ
UzRfRUVTQV9FNmV4cGFuZEV2CkBAIC0xMTMxOCw4ICsxMTMxOCw4IEBAIF9fWk5LM1dURjEyU3Ry
aW5nQXBwZW5kSVBLY05TXzZTdHJpbmdFRWMKIF9fWk43V2ViQ29yZTI0U2NyaXB0YWJsZURvY3Vt
ZW50UGFyc2VyMzVleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0c0V2CiBfX1pOSzdX
ZWJDb3JlMTdYTUxEb2N1bWVudFBhcnNlcjEwbGluZU51bWJlckV2CiBfX1pON1dlYkNvcmUyMVNW
R0RvY3VtZW50RXh0ZW5zaW9uczM2cmVtb3ZlQWxsQW5pbWF0aW9uRWxlbWVudHNGcm9tVGFyZ2V0
RVBOU18xMFNWR0VsZW1lbnRFCi1fX1pON1dlYkNvcmUxNVNWR0ZpdFRvVmlld0JveDEycGFyc2VW
aWV3Qm94RVBOU184RG9jdW1lbnRFUlBLdFM0X1JOU185RmxvYXRSZWN0RWIKLV9fWlRobjMxMl9O
N1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU185RmxvYXRS
ZWN0RQorX19aTjdXZWJDb3JlMTVTVkdGaXRUb1ZpZXdCb3gxMnBhcnNlVmlld0JveEVQTlNfOERv
Y3VtZW50RVJQS3RTNF9STlNfMTJHcmFwaGljc1JlY3RFYgorX19aVGhuMzEyX043V2ViQ29yZTEz
U1ZHU1ZHRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzEyR3JhcGhpY3NSZWN0RQog
X19aTjdXZWJDb3JlMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvMjRwYXJzZVByZXNlcnZlQXNwZWN0
UmF0aW9FUlBLdFMyX2JSYgogX19aVGhuMzEyX043V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDMxc2V0
UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZUVSS05TXzIyU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b0UKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTZTVkdTdHlsZWRFbGVtZW50RVMzX05T
XzE3SWRlbnRpdHlFeHRyYWN0b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0
c0lTM19FRVM5X0UzYWRkSVMzX1MzX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TM19T
N19FRUVFU3Q0cGFpcklOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1MzX1M1X1M3X1M5X1M5X0VF
YkVSS1RfUktUMF8KQEAgLTExNDg0LDggKzExNDg0LDggQEAgX19aTks3V2ViQ29yZTE0UmVuZGVy
U1ZHSW1hZ2UxN3N0cm9rZUJvdQogX19aTks3V2ViQ29yZTE0UmVuZGVyU1ZHSW1hZ2UyOXJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzRXYKIF9fWk5LN1dlYkNvcmUxM1JlbmRlclNWR1RleHQx
N3N0cm9rZUJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmUxM1JlbmRlclNWR1RleHQyOXJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzRXYKLV9fWk43V2ViQ29yZTExUmVuZGVyQmxvY2sxM2Fi
c29sdXRlUXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRQotX19aTjdXZWJD
b3JlMTBDbGllbnRSZWN0QzFFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTFSZW5kZXJC
bG9jazEzYWJzb2x1dGVRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVF
RQorX19aTjdXZWJDb3JlMTBDbGllbnRSZWN0QzFFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43
V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5T
XzEwQ2xpZW50UmVjdEUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xMkpTQ2xpZW50
UmVjdEVOU18xMENsaWVudFJlY3RFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0
ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dlYkNvcmUxNWdldERPTVN0cnVj
dHVyZUlOU18xMkpTQ2xpZW50UmVjdEVFRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TMl85RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RQpAQCAtMTE1MjQsNyArMTE1MjQsNyBAQCBfX1pON1dl
YkNvcmUxMkpTU1ZHRWxlbWVudDE4Z2V0T3duUHJvcGVyCiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFs
dWVTbG90SU43V2ViQ29yZTEySlNTVkdFbGVtZW50RU5TMV85SlNFbGVtZW50RUVFYlBOU185RXhl
Y1N0YXRlRVBLTlNfOUhhc2hUYWJsZUVQVF9SS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0
eVNsb3RFCiBfX1pON1dlYkNvcmUyNEpTU1ZHU1ZHRWxlbWVudFByb3RvdHlwZTE4Z2V0T3duUHJv
cGVydHlTbG90RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRVJOUzFfMTJQcm9w
ZXJ0eVNsb3RFCiBfX1pOM0pTQzIxZ2V0U3RhdGljUHJvcGVydHlTbG90SU43V2ViQ29yZTI0SlNT
VkdTVkdFbGVtZW50UHJvdG90eXBlRU5TXzhKU09iamVjdEVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05T
XzlIYXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQotX19a
Tks3V2ViQ29yZTEwU1ZHRWxlbWVudDExYm91bmRpbmdCb3hFUk5TXzlGbG9hdFJlY3RFTlNfMTJT
VkdMb2NhdGFibGUxOVN0eWxlVXBkYXRlU3RyYXRlZ3lFCitfX1pOSzdXZWJDb3JlMTBTVkdFbGVt
ZW50MTFib3VuZGluZ0JveEVSTlNfMTJHcmFwaGljc1JlY3RFTlNfMTJTVkdMb2NhdGFibGUxOVN0
eWxlVXBkYXRlU3RyYXRlZ3lFCiBfX1pOSzdXZWJDb3JlMjVTVkdTdHlsZWRMb2NhdGFibGVFbGVt
ZW50MTdpc1N0eWxlZExvY2F0YWJsZUV2CiBfX1pOSzdXZWJDb3JlMjVTVkdTdHlsZWRMb2NhdGFi
bGVFbGVtZW50N2dldEJCb3hFTlNfMTJTVkdMb2NhdGFibGUxOVN0eWxlVXBkYXRlU3RyYXRlZ3lF
CiBfX1pON1dlYkNvcmUxMlNWR0xvY2F0YWJsZTdnZXRCQm94RVBLTlNfMTBTVkdFbGVtZW50RU5T
MF8xOVN0eWxlVXBkYXRlU3RyYXRlZ3lFCkBAIC0xMTU4NSw3ICsxMTU4NSw3IEBAIF9fWk43V2Vi
Q29yZTE2U1ZHUm9vdElubGluZUJveEQwRXYKIF9fWk43V2ViQ29yZTE2U1ZHSW5saW5lVGV4dEJv
eEQwRXYKIF9fWk43V2ViQ29yZTE0UmVuZGVyU1ZHSW1hZ2U1cGFpbnRFUk5TXzlQYWludEluZm9F
aWkKIF9fWk43V2ViQ29yZTEzUmVuZGVyU1ZHVGV4dDVwYWludEVSTlNfOVBhaW50SW5mb0VpaQot
X19aTjdXZWJDb3JlMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvMTN0cmFuc2Zvcm1SZWN0RVJOU185
RmxvYXRSZWN0RVMyXworX19aTjdXZWJDb3JlMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvMTN0cmFu
c2Zvcm1SZWN0RVJOU18xMkdyYXBoaWNzUmVjdEVTMl8KIF9fWk43V2ViQ29yZTE2U1ZHUm9vdElu
bGluZUJveDVwYWludEVSTlNfOVBhaW50SW5mb0VpaWlpCiBfX1pON1dlYkNvcmUxNlNWR0lubGlu
ZUZsb3dCb3gzN2NvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXJFUE5TXzE5UmVu
ZGVyU1ZHSW5saW5lVGV4dEUKIF9fWk43V2ViQ29yZTE2U1ZHSW5saW5lVGV4dEJveDVwYWludEVS
TlNfOVBhaW50SW5mb0VpaWlpCkBAIC0xMTk2Myw4ICsxMTk2Myw4IEBAIF9fWk43V2ViQ29yZTIw
UmVuZGVyRW1iZWRkZWRPYmplY3QzMHNldFMKIF9fWk43V2ViQ29yZTE3bWlzc2luZ1BsdWdpblRl
eHRFdgogX19aTjdXZWJDb3JlMjdEZWZhdWx0TG9jYWxpemF0aW9uU3RyYXRlZ3kxN21pc3NpbmdQ
bHVnaW5UZXh0RXYKIF9fWk43V2ViQ29yZTIwUmVuZGVyRW1iZWRkZWRPYmplY3QxM3BhaW50UmVw
bGFjZWRFUk5TXzlQYWludEluZm9FaWkKLV9fWk43V2ViQ29yZTIwUmVuZGVyRW1iZWRkZWRPYmpl
Y3QyNmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5RWlpUk5TXzlGbG9hdFJlY3RFUk5TXzRQYXRo
RVMyX1JOU180Rm9udEVSTlNfN1RleHRSdW5FUmYKLV9fWk43V2ViQ29yZTRQYXRoMTRhZGRSb3Vu
ZGVkUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU185RmxvYXRTaXplRQorX19aTjdXZWJDb3JlMjBS
ZW5kZXJFbWJlZGRlZE9iamVjdDI2Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnlFaWlSTlNfMTJH
cmFwaGljc1JlY3RFUk5TXzRQYXRoRVMyX1JOU180Rm9udEVSTlNfN1RleHRSdW5FUmYKK19fWk43
V2ViQ29yZTRQYXRoMTRhZGRSb3VuZGVkUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfMTJH
cmFwaGljc1NpemVFCiBfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlOUhUTUxUb2tlbjlBdHRyaWJ1
dGVFTG0xMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjNXVEYxMVZlY3Rvck1vdmVySUxiMEVO
N1dlYkNvcmU5SFRNTFRva2VuOUF0dHJpYnV0ZUVFNG1vdmVFUEtTM19TNl9QUzNfCiBfX1pON1dl
YkNvcmU5SFRNTFRva2VuOUF0dHJpYnV0ZUMxRVJLUzFfCkBAIC0xNDEzMiw4ICsxNDEzMiw4IEBA
IF9fWk43V2ViQ29yZTI4U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGwKIF9fWk5LN1dlYkNvcmUx
MUVkaXRDb21tYW5kMTlpc0NyZWF0ZUxpbmtDb21tYW5kRXYKIF9fWk4zV1RGNlZlY3RvcklON1dl
YkNvcmUxNERvY3VtZW50TWFya2VyRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjNXVEYx
MVZlY3Rvck1vdmVySUxiMEVON1dlYkNvcmUxNERvY3VtZW50TWFya2VyRUU0bW92ZUVQS1MyX1M1
X1BTMl8KLV9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI4cGFpbnRTcGVsbGluZ09yR3JhbW1h
ck1hcmtlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMEZsb2F0UG9pbnRFUktOU18xNERv
Y3VtZW50TWFya2VyRVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFYgotX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQyM2RyYXdMaW5lRm9yVGV4dENoZWNraW5nRVJLTlNfMTBGbG9hdFBv
aW50RWZOUzBfMjFUZXh0Q2hlY2tpbmdMaW5lU3R5bGVFCitfX1pON1dlYkNvcmUxM0lubGluZVRl
eHRCb3gyOHBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfMTNHcmFwaGljc1BvaW50RVJLTlNfMTREb2N1bWVudE1hcmtlckVQTlNfMTFSZW5kZXJT
dHlsZUVSS05TXzRGb250RWIKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjNkcmF3TGlu
ZUZvclRleHRDaGVja2luZ0VSS05TXzEzR3JhcGhpY3NQb2ludEVmTlMwXzIxVGV4dENoZWNraW5n
TGluZVN0eWxlRQogX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTIyUmVuZGVyZWREb2N1bWVudE1h
cmtlckVMbTBFRTZpbnNlcnRJUzJfRUV2bVJLVF8KIF9fWk43V2ViQ29yZTIwQ29tcG9zaXRlRWRp
dENvbW1hbmQyN2FkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZEVQTlNfN0VsZW1lbnRFCiBfX1pO
N1dlYkNvcmVMMjBleGVjdXRlRm9yd2FyZERlbGV0ZUVQTlNfNUZyYW1lRVBOU181RXZlbnRFTlNf
MTlFZGl0b3JDb21tYW5kU291cmNlRVJLTjNXVEY2U3RyaW5nRQpAQCAtMTQyMjQsNyArMTQyMjQs
NyBAQCBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24zMHJpZ2h0VmlzCiBfX1pOSzdXZWJD
b3JlOFBvc2l0aW9uMTZwcmltYXJ5RGlyZWN0aW9uRXYKIF9fWk5LN1dlYkNvcmUxOUhUTUxUZXh0
QXJlYUVsZW1lbnQyOWhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50RVBOU18yM0JlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50RQogX19aTks3V2ViQ29yZTE5SFRNTFRleHRBcmVhRWxlbWVudDltYXhM
ZW5ndGhFdgotX19aTks3V2ViQ29yZTRGb250MjdzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHRF
UktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaWkKK19fWk5LN1dlYkNvcmU0Rm9udDI3
c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNz
UG9pbnRFaWlpCiBfX1pON1dlYkNvcmUyMUNvbXBsZXhUZXh0Q29udHJvbGxlcjdhZHZhbmNlRWpQ
TlNfMTFHbHlwaEJ1ZmZlckUKIF9fWk43V2ViQ29yZTI2UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUxN3N1YnRyZWVIYXNDaGFuZ2VkRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyM3RleHREaWRDaGFu
Z2VJblRleHRBcmVhRVBOU183RWxlbWVudEUKQEAgLTE0MjMyLDcgKzE0MjMyLDcgQEAgX19aM2tp
dFBON1dlYkNvcmUxOUhUTUxUZXh0QXJlYUVsZW1lbnRFCiBfX1pON1dlYkNvcmU1UmFuZ2UxMXNl
dEVuZEFmdGVyRVBOU180Tm9kZUVSaQogX19aTks3V2ViQ29yZTVSYW5nZTExY2hlY2tOb2RlQkFF
UE5TXzROb2RlRVJpCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJUZXh0MzNwcmV2aW91c09mZnNldEZv
ckJhY2t3YXJkRGVsZXRpb25FaQotX19aTks3V2ViQ29yZTRGb250MTVkcmF3Q29tcGxleFRleHRF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWkK
K19fWk5LN1dlYkNvcmU0Rm9udDE1ZHJhd0NvbXBsZXhUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pOSzdXZWJDb3JlNEZv
bnQzNGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHRFUktOU183VGV4dFJ1bkVpaVJO
U18xMUdseXBoQnVmZmVyRU5TMF8yMEZvclRleHRFbXBoYXNpc09yTm90RQogX19aTjdXZWJDb3Jl
MTFHbHlwaEJ1ZmZlcjNhZGRFdFBLTlNfMTRTaW1wbGVGb250RGF0YUU2Q0dTaXplCiBfX1pOSzdX
ZWJDb3JlMTZSZW5kZXJMaXN0TWFya2VyMThjYW5CZVNlbGVjdGlvbkxlYWZFdgpAQCAtMTQyNjcs
NyArMTQyNjcsNyBAQCBfX1pON1dlYkNvcmUxNFJvdW5kZWRSZWN0NVJhZGlpNXNjYWxlRWYKIF9f
Wk43V2ViQ29yZTE0Um91bmRlZFJlY3QxOWluY2x1ZGVMb2dpY2FsRWRnZXNFUktOUzBfNVJhZGlp
RWJiYgogX19aTjdXZWJDb3JlMTRSb3VuZGVkUmVjdDVSYWRpaTZleHBhbmRFaWlpaQogX19aTjdX
ZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfMTRSb3VuZGVkUmVjdEUKLV9fWk43V2Vi
Q29yZTRQYXRoMTRhZGRSb3VuZGVkUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU185RmxvYXRTaXpl
RVM2X1M2X1M2XworX19aTjdXZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfMTJHcmFw
aGljc1JlY3RFUktOU18xMkdyYXBoaWNzU2l6ZUVTNl9TNl9TNl8KIF9fWk43V2ViQ29yZTIxY3Jl
YXRlTGlzdEl0ZW1FbGVtZW50RVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUxM0hUTUxMSUVs
ZW1lbnQ2Y3JlYXRlRVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUzOWpzRG9jdW1lbnRQcm90
b3R5cGVGdW5jdGlvbkdldFNlbGVjdGlvbkVQTjNKU0M5RXhlY1N0YXRlRQpAQCAtMTQzODEsMTIg
KzE0MzgxLDEyIEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlON1dlYkNvcmU3SW50U2l6ZUVTdDQKIF9f
Wk4zV1RGOUhhc2hUYWJsZUlON1dlYkNvcmU3SW50U2l6ZUVTdDRwYWlySVMyX05TXzZSZWZQdHJJ
TlMxXzVJbWFnZUVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdJbnRIYXNoSVMy
X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0RfSVM2X0VFRUVT
RV9FNnJlbW92ZUVQUzdfCiBfX1pOM1dURjlIYXNoVGFibGVJTjdXZWJDb3JlN0ludFNpemVFU3Q0
cGFpcklTMl9OU182UmVmUHRySU5TMV81SW1hZ2VFRUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJ
UzdfRUVOU183SW50SGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRz
SVMyX0VFTlNEX0lTNl9FRUVFU0VfRUQxRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0
MjNmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZUVSS05TXzdJbnRSZWN0RVJLTlNfMTRSb3VuZGVkUmVj
dEVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCi1fX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIx
NWRyYXdJbnNldFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RVM1
X1JLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUUKLV9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI1ZHJh
d0luc2V0U2hhZG93V2l0aFRpbGluZ0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRS
ZWN0RVM1X1JLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUVSS05TXzdJbnRTaXplRVNDXwotX19aTks3
V2ViQ29yZTEzU2NyYXRjaEJ1ZmZlcjIybWF0Y2hlc0xhc3RJbnNldFNoYWRvd0VSS05TXzlGbG9h
dFNpemVFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRVJLTlNfOUZsb2F0UmVjdEVTQV9SS05T
XzE0Um91bmRlZFJlY3Q1UmFkaWlFCi1fX1pON1dlYkNvcmUxNEdlbmVyYXRlZEltYWdlMTFkcmF3
UGF0dGVybkVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RVJLTlNfMTVBZmZp
bmVUcmFuc2Zvcm1FUktOU18xMEZsb2F0UG9pbnRFTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9z
aXRlT3BlcmF0b3JFUzVfCi1fX1pON1dlYkNvcmU4R3JhZGllbnQzMWFkanVzdFBhcmFtZXRlcnNG
b3JUaWxlZERyYXdpbmdFUk5TXzdJbnRTaXplRVJOU185RmxvYXRSZWN0RQotX19aTjdXZWJDb3Jl
MTFJbWFnZUJ1ZmZlcjExZHJhd1BhdHRlcm5FUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZs
b2F0UmVjdEVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfMTBGbG9hdFBvaW50RU5TXzEwQ29s
b3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRVM1XworX19aTjdXZWJDb3JlMTBTaGFkb3dC
bHVyMTVkcmF3SW5zZXRTaGFkb3dFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFUzVfUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRQorX19aTjdXZWJDb3JlMTBTaGFkb3dC
bHVyMjVkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05T
XzEyR3JhcGhpY3NSZWN0RVM1X1JLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUVSS05TXzdJbnRTaXpl
RVNDXworX19aTks3V2ViQ29yZTEzU2NyYXRjaEJ1ZmZlcjIybWF0Y2hlc0xhc3RJbnNldFNoYWRv
d0VSS05TXzEyR3JhcGhpY3NTaXplRVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUVSS05TXzEy
R3JhcGhpY3NSZWN0RVNBX1JLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUUKK19fWk43V2ViQ29yZTE0
R2VuZXJhdGVkSW1hZ2UxMWRyYXdQYXR0ZXJuRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEy
R3JhcGhpY3NSZWN0RVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU18xM0dyYXBoaWNzUG9pbnRF
TlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFUzVfCitfX1pON1dlYkNvcmU4
R3JhZGllbnQzMWFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmdFUk5TXzdJbnRTaXplRVJO
U18xMkdyYXBoaWNzUmVjdEUKK19fWk43V2ViQ29yZTExSW1hZ2VCdWZmZXIxMWRyYXdQYXR0ZXJu
RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfMTVBZmZpbmVU
cmFuc2Zvcm1FUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9z
aXRlT3BlcmF0b3JFUzVfCiBfX1pON1dlYkNvcmU1SW1hZ2UxNHN0YXJ0QW5pbWF0aW9uRWIKIF9f
Wk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMjBSZW5kZXJCb3hNb2RlbE9iamVjdEVTdDRwYWly
SVMzX05TXzdIYXNoTWFwSVBLdk5TMV83SW50U2l6ZUVOU183UHRySGFzaElTN19FRU5TXzEwSGFz
aFRyYWl0c0lTN19FRU5TQl9JUzhfRUVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTRl9FRU5T
OV9JUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TQl9JUzNfRUVOU0JfSVNFX0VFRUVTS19FMTZs
b29rdXBGb3JXcml0aW5nRVJLUzNfCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTIwUmVu
ZGVyQm94TW9kZWxPYmplY3RFU3Q0cGFpcklTM19OU183SGFzaE1hcElQS3ZOUzFfN0ludFNpemVF
TlNfN1B0ckhhc2hJUzdfRUVOU18xMEhhc2hUcmFpdHNJUzdfRUVOU0JfSVM4X0VFRUVFTlNfMThQ
YWlyRmlyc3RFeHRyYWN0b3JJU0ZfRUVOUzlfSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU0Jf
SVMzX0VFTlNCX0lTRV9FRUVFU0tfRTNhZGRJUzNfU0VfTlNfMTdIYXNoTWFwVHJhbnNsYXRvcklT
Rl9TTV9TSV9FRUVFUzRfSU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfU0ZfU0hfU0lfU01fU0tf
RUViRVJLVF9SS1QwXwpAQCAtMTQzOTQsNyArMTQzOTQsNyBAQCBfX1pOM1dURjlIYXNoVGFibGVJ
UE43V2ViQ29yZTIwUmVuZGVyQm94CiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTIwUmVu
ZGVyQm94TW9kZWxPYmplY3RFU3Q0cGFpcklTM19OU183SGFzaE1hcElQS3ZOUzFfN0ludFNpemVF
TlNfN1B0ckhhc2hJUzdfRUVOU18xMEhhc2hUcmFpdHNJUzdfRUVOU0JfSVM4X0VFRUVFTlNfMThQ
YWlyRmlyc3RFeHRyYWN0b3JJU0ZfRUVOUzlfSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU0Jf
SVMzX0VFTlNCX0lTRV9FRUVFU0tfRTZyZWhhc2hFaQogX19aU3QxNl9fbWVyZ2VfYmFja3dhcmRJ
UE43V2ViQ29yZTIwQ1NTR3JhZGllbnRDb2xvclN0b3BFUzJfUzJfUEZiUktTMV9TNF9FRVQxX1Rf
UzhfVDBfUzlfUzdfVDJfCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QzNWJvcmRlckltYWdl
SXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVkRXYKLV9fWk5LN1dlYkNvcmUyMFJlbmRlckJveE1vZGVs
T2JqZWN0Mjhib3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlRVJLTlNfOUZsb2F0U2l6ZUUKK19f
Wk5LN1dlYkNvcmUyMFJlbmRlckJveE1vZGVsT2JqZWN0Mjhib3JkZXJPYnNjdXJlc0JhY2tncm91
bmRFZGdlRVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pOM1dURjlIYXNoVGFibGVJUEt2U3Q0cGFp
cklTMl9ON1dlYkNvcmU3SW50U2l6ZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVOU183
UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlND
X0lTNV9FRUVFU0RfRTE2bG9va3VwRm9yV3JpdGluZ0VSS1MyXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBLdlN0NHBhaXJJUzJfTjdXZWJDb3JlN0ludFNpemVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9y
SVM2X0VFTlNfN1B0ckhhc2hJUzJfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0
c0lTMl9FRU5TQ19JUzVfRUVFRVNEX0UzYWRkSVMyX1M1X05TXzE3SGFzaE1hcFRyYW5zbGF0b3JJ
UzZfU0ZfU0FfRUVFRVMzX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1M2X1M4X1NBX1NGX1NE
X0VFYkVSS1RfUktUMF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ29y
ZTdJbnRTaXplRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNoSVMyX0VF
TlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VFRUVTRF9F
M2FkZElTMl9TNl9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzJfUzZfU0FfRUVFRVMzX0lO
U18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1M2X1M4X1NBX1NGX1NEX0VFYkVSS1RfUktUMF8KQEAg
LTE0NDc3LDEyICsxNDQ3NywxMiBAQCBfX1pON1dlYkNvcmU0MWpzRE9NU2VsZWN0aW9uUHJvdG90
eXBlRnVuCiBfX1pON1dlYkNvcmUxMkRPTVNlbGVjdGlvbjEwZ2V0UmFuZ2VBdEVpUmkKIF9fWk43
V2ViQ29yZTM4anNSYW5nZVByb3RvdHlwZUZ1bmN0aW9uR2V0Q2xpZW50UmVjdHNFUE4zSlNDOUV4
ZWNTdGF0ZUUKIF9fWk5LN1dlYkNvcmU1UmFuZ2UxNGdldENsaWVudFJlY3RzRXYKLV9fWk5LN1dl
YkNvcmU1UmFuZ2UyMWdldEJvcmRlckFuZFRleHRRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9h
dFF1YWRFTG0wRUVFCi1fX1pON1dlYkNvcmUxMFJlbmRlclRleHQyMWFic29sdXRlUXVhZHNGb3JS
YW5nZUVSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFampiCi1fX1pON1dlYkNvcmVM
NTJhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlRVJO
M1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUVQTlNfOERvY3VtZW50RVBOU18xMlJlbmRl
ck9iamVjdEUKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRRdWFkRUxtMEVFNmFwcGVu
ZElTMl9FRXZQS1RfbQotX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMxRVJLTjNXVEY2VmVj
dG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFCi1fX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzJF
UktOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUUKK19fWk5LN1dlYkNvcmU1UmFuZ2Uy
MWdldEJvcmRlckFuZFRleHRRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxt
MEVFRQorX19aTjdXZWJDb3JlMTBSZW5kZXJUZXh0MjFhYnNvbHV0ZVF1YWRzRm9yUmFuZ2VFUk4z
V1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUVqamIKK19fWk43V2ViQ29yZUw1MmFk
anVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGVFUk4zV1RG
NlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUVQTlNfOERvY3VtZW50RVBOU18xMlJlbmRl
ck9iamVjdEUKK19fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUXVhZEVMbTBFRTZh
cHBlbmRJUzJfRUV2UEtUX20KK19fWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUVSS04zV1RG
NlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKK19fWk43V2ViQ29yZTE0Q2xpZW50UmVj
dExpc3RDMkVSS04zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKIF9fWk43V2Vi
Q29yZTEwQ2xpZW50UmVjdEMxRVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNK
U0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xNENsaWVudFJlY3RMaXN0
RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzE2SlNDbGllbnRSZWN0TGlzdEVOU18x
NENsaWVudFJlY3RMaXN0RUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwpAQCAtMTU3MzksMTAgKzE1NzM5LDEwIEBAIF9fWk43
V2ViQ29yZTIyUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDIxY28KIF9fWk5LN1dlYkNvcmUyMlJlbmRl
clNWR0ZvcmVpZ25PYmplY3QxOW1hcExvY2FsVG9Db250YWluZXJFUE5TXzIwUmVuZGVyQm94TW9k
ZWxPYmplY3RFYmJSTlNfMTRUcmFuc2Zvcm1TdGF0ZUUKIF9fWk43V2ViQ29yZTEzUmVuZGVyU1ZH
Um9vdDExbm9kZUF0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1
bHRFUktOU184SW50UG9pbnRFaWlOU18xM0hpdFRlc3RBY3Rpb25FCiBfX1pOSzdXZWJDb3JlMTVB
ZmZpbmVUcmFuc2Zvcm04bWFwUG9pbnRFUktOU184SW50UG9pbnRFCi1fX1pON1dlYkNvcmUxM1Jl
bmRlclNWR1RleHQxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18x
M0hpdFRlc3RSZXN1bHRFUktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19a
TjdXZWJDb3JlMTNSZW5kZXJTVkdUZXh0MTZub2RlQXRGbG9hdFBvaW50RVJLTlNfMTRIaXRUZXN0
UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzEzSGl0
VGVzdEFjdGlvbkUKIF9fWk43V2ViQ29yZTIxUG9pbnRlckV2ZW50c0hpdFJ1bGVzQzFFTlMwXzEx
RUhpdFRlc3RpbmdFUktOU18xNEhpdFRlc3RSZXF1ZXN0RU5TXzE0RVBvaW50ZXJFdmVudHNFCi1f
X1pON1dlYkNvcmUxNlNWR1JlbmRlclN1cHBvcnQxOXBvaW50SW5DbGlwcGluZ0FyZWFFUE5TXzEy
UmVuZGVyT2JqZWN0RVJLTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMjJSZW5kZXJTVkdG
b3JlaWduT2JqZWN0MTZub2RlQXRGbG9hdFBvaW50RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNf
MTNIaXRUZXN0UmVzdWx0RVJLTlNfMTBGbG9hdFBvaW50RU5TXzEzSGl0VGVzdEFjdGlvbkUKK19f
Wk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDE5cG9pbnRJbkNsaXBwaW5nQXJlYUVQTlNfMTJS
ZW5kZXJPYmplY3RFUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUyMlJlbmRlclNW
R0ZvcmVpZ25PYmplY3QxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJO
U18xM0hpdFRlc3RSZXN1bHRFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9u
RQogX19aTjdXZWJDb3JlMjdSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUxMW5vZGVBdFBvaW50
RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfOEludFBvaW50
RWlpTlNfMTNIaXRUZXN0QWN0aW9uRQogX19aTjdXZWJDb3JlMTdSZW5kZXJUZXh0Q29udHJvbDE5
aGl0SW5uZXJUZXh0RWxlbWVudEVSTlNfMTNIaXRUZXN0UmVzdWx0RWlpaWkKIF9fWk5LN1dlYkNv
cmUxNlNWR1N0eWxlZEVsZW1lbnQ1dGl0bGVFdgpAQCAtMTU3NjgsNyArMTU3NjgsNyBAQCBfX1pO
SzdXZWJDb3JlOERyYWdEYXRhMTFjb250YWluc1VSTEVQTlNfCiBfX1pOSzdXZWJDb3JlOERyYWdE
YXRhNWFzVVJMRVBOU181RnJhbWVFTlMwXzI0RmlsZW5hbWVDb252ZXJzaW9uUG9saWN5RVBOM1dU
RjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMFBhc3RlYm9hcmQ1YXNVUkxFUE5TXzVGcmFtZUUKIF9f
Wk43V2ViQ29yZTEwUGFzdGVib2FyZDEwZ2V0QmVzdFVSTEVQTlNfNUZyYW1lRQotX19aTjdXZWJD
b3JlMTNSZW5kZXJTVkdQYXRoMTZub2RlQXRGbG9hdFBvaW50RVJLTlNfMTRIaXRUZXN0UmVxdWVz
dEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfMTBGbG9hdFBvaW50RU5TXzEzSGl0VGVzdEFjdGlv
bkUKK19fWk43V2ViQ29yZTEzUmVuZGVyU1ZHUGF0aDE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0
SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEzR3JhcGhpY3NQb2ludEVO
U18xM0hpdFRlc3RBY3Rpb25FCiBfX1pOSzdXZWJDb3JlOERvY3VtZW50MTRoYXNTVkdSb290Tm9k
ZUV2CiBfX1pON1dlYkNvcmU0UGFnZTIyYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZEVQTlNfOVBhZ2VH
cm91cEUKIF9fWk43V2ViQ29yZTE2Q1NTU3R5bGVTZWxlY3RvcjE1U2VsZWN0b3JDaGVja2VyMjJh
bGxWaXNpdGVkU3RhdGVDaGFuZ2VkRXYKQEAgLTE2MjExLDcgKzE2MjExLDcgQEAgX19aTjNXVEY2
VmVjdG9ySU43V2ViQ29yZTE0RG9jdW1lbnRNYXJrZQogX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0
Qm94MzFjb21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyRVJLTlNfMTREb2N1bWVudE1hcmtl
ckVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RQogX19aTjdXZWJDb3JlMjREb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIyMXJlbW92ZU1hcmtlcnNGcm9tTGlzdEVQTlNfNE5vZGVFUE4zV1RGNlZl
Y3RvcklOU18yMlJlbmRlcmVkRG9jdW1lbnRNYXJrZXJFTG0wRUVFTlNfMTREb2N1bWVudE1hcmtl
cjExTWFya2VyVHlwZXNFCiBfX1pOSzdXZWJDb3JlMjhTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyMTh3aW5kb3dSZWN0Rm9yUmFuZ2VFUEtOU181UmFuZ2VFCi1fX1pOSzdXZWJDb3JlNVJhbmdl
OXRleHRRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFYgorX19aTks3V2Vi
Q29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBF
RUViCiBfX1pON1dlYkNvcmU2RWRpdG9yMjdoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHRFUktO
M1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjM3c2VsZWN0Q2xvc2VzdFdv
cmRPckxpbmtGcm9tTW91c2VFdmVudEVSS05TXzI4TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
c0UKIF9fWk5LN1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQxMGlzTGl2ZUxpbmtFdgpAQCAtMTYzMzIs
OCArMTYzMzIsOCBAQCBfX1pON1dlYkNvcmUxN3NldEpTRE9NV2luZG93VG9wRVBOM0pTQzlFCiBf
X1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDIxY3JlYXRlVmlzaWJsZVBvc2l0aW9uRVJLTlNfOFBv
c2l0aW9uRQogX19aTjdXZWJDb3JlMjRzZXRKU0hUTUxFbGVtZW50VGFiSW5kZXhFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUhUTUxF
bGVtZW50MTFzZXRUYWJJbmRleEVpCi1fX1pON1dlYkNvcmUxMlJlbmRlcklubGluZTEzYWJzb2x1
dGVRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFCi1fX1pON1dlYkNvcmUx
MlJlbmRlcklubGluZTI1Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkc0VQS1MwX1JOM1dURjZWZWN0
b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUUKK19fWk43V2ViQ29yZTEyUmVuZGVySW5saW5lMTNhYnNv
bHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCitfX1pON1dl
YkNvcmUxMlJlbmRlcklubGluZTI1Y3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkc0VQS1MwX1JOM1dU
RjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCiBfX1pON1dlYkNvcmUyMnNldEpTRWxl
bWVudFNjcm9sbExlZnRFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFs
dWVFCiBfX1pON1dlYkNvcmU3RWxlbWVudDEzc2V0U2Nyb2xsTGVmdEVpCiBfX1pON1dlYkNvcmU5
UmVuZGVyQm94MTNzZXRTY3JvbGxMZWZ0RWkKQEAgLTE2MzkwLDcgKzE2MzkwLDcgQEAgX19aTjdX
ZWJDb3JlNVJhbmdlMTNzZXRTdGFydEFmdGVyRVBOU180TgogX19aTjdXZWJDb3JlMzJqc0hUTUxJ
bnB1dEVsZW1lbnRTZWxlY3Rpb25TdGFydEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVS
S05TMF8xMElkZW50aWZpZXJFCiBfX1pOSzdXZWJDb3JlMThKU0hUTUxJbnB1dEVsZW1lbnQxNHNl
bGVjdGlvblN0YXJ0RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxNFJlbmRlclRoZW1l
TWFjMjhwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRVBOU18xMlJlbmRlck9iamVjdEVSS05T
XzlQYWludEluZm9FUktOU183SW50UmVjdEUKLV9fWk5LN1dlYkNvcmUxNFJlbmRlclRoZW1lTWFj
MjFjb252ZXJ0VG9QYWludGluZ1JlY3RFUEtOU18xMlJlbmRlck9iamVjdEVTM19SS05TXzlGbG9h
dFJlY3RFUktOU183SW50UmVjdEUKK19fWk5LN1dlYkNvcmUxNFJlbmRlclRoZW1lTWFjMjFjb252
ZXJ0VG9QYWludGluZ1JlY3RFUEtOU18xMlJlbmRlck9iamVjdEVTM19SS05TXzEyR3JhcGhpY3NS
ZWN0RVJLTlNfN0ludFJlY3RFCiBfX1pUaG44X043V2ViQ29yZTMwU2VhcmNoRmllbGRDYW5jZWxC
dXR0b25FbGVtZW50RDBFdgogX19aVGhuOF9ON1dlYkNvcmUzMVNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbkVsZW1lbnREMEV2CiBfX1pON1dlYkNvcmUyMEpTSFRNTEhlYWRpbmdFbGVtZW50M3B1dEVQ
TjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1
dFByb3BlcnR5U2xvdEUKQEAgLTE2NTAxLDcgKzE2NTAxLDcgQEAgX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmU0Tm9kZUVTdDRwYQogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmU0Tm9k
ZUVTdDRwYWlySVMzX2ZFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzVfRUVOU183UHRySGFzaElT
M19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNCX0lmRUVFRVND
X0U2bG9va3VwRVJLUzNfCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTROb2RlRVN0NHBh
aXJJUzNfZkVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNf
MTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWZFRUVFU0NfRTZyZWhh
c2hFaQogX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMTFIVE1MRWxlbWVudEVF
RUxtMEVFMTRleHBhbmRDYXBhY2l0eUVtCi1fX1pON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElO
U185RmxvYXRSZWN0RUVEMUV2CitfX1pON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOU18xMkdy
YXBoaWNzUmVjdEVFRDFFdgogX19aTks3V2ViQ29yZTlGcmFtZVRyZWUyNHRyYXZlcnNlUHJldmlv
dXNXaXRoV3JhcEViCiBfX1pOM1dURjZWZWN0b3JJdExtMEVFNmluc2VydEl0RUV2bVBLVF9tCiBf
X1pOSzdXZWJDb3JlMTJTZWFyY2hCdWZmZXIxNmlzV29yZFN0YXJ0TWF0Y2hFbW0KQEAgLTE2NTc4
LDcgKzE2NTc4LDcgQEAgX19aTjdXZWJDb3JlTDEzcGFyc2VLZXlUaW1lc0VSS04zV1RGNlN0cgog
X19aTjdXZWJDb3JlMTRTVkdTTUlMRWxlbWVudDE1cGFyc2VCZWdpbk9yRW5kRVJLTjNXVEY2U3Ry
aW5nRU5TMF8xMEJlZ2luT3JFbmRFCiBfX1pON1dlYkNvcmUxNFNWR1NNSUxFbGVtZW50MTVwYXJz
ZUNsb2NrVmFsdWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFNWR1NNSUxFbGVtZW50
MTZwYXJzZU9mZnNldFZhbHVlRVJLTjNXVEY2U3RyaW5nRQotX19aTkszV1RGOUhhc2hUYWJsZUlk
ZE5TXzE3SWRlbnRpdHlFeHRyYWN0b3JJZEVFTlNfOUZsb2F0SGFzaElkRUVOU18xMEhhc2hUcmFp
dHNJZEVFUzZfRThjb250YWluc0lkTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVF
RWJSS1RfCitfX1pOSzNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3RvcklkRUVO
U18xMkdyYXBoaWNzSGFzaElkRUVOU18xMEhhc2hUcmFpdHNJZEVFUzZfRThjb250YWluc0lkTlNf
MjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVFRWJSS1RfCiBfX1pOM1dURjZWZWN0b3JJ
TjdXZWJDb3JlOFNNSUxUaW1lRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aU3QxNl9faW50
cm9zb3J0X2xvb3BJUE43V2ViQ29yZThTTUlMVGltZUVsRXZUX1MzX1QwXwogX19aU3QyMl9fZmlu
YWxfaW5zZXJ0aW9uX3NvcnRJUE43V2ViQ29yZThTTUlMVGltZUVFdlRfUzNfCkBAIC0xNjY4Mywx
NCArMTY2ODMsMTQgQEAgX19aTjdXZWJDb3JlMTdTTUlMVGltZUNvbnRhaW5lcjEwdGltZXJGaQog
X19aTjdXZWJDb3JlMTlTVkdBbmltYXRpb25FbGVtZW50MTllbmRlZEFjdGl2ZUludGVydmFsRXYK
IF9fWk5LN1dlYkNvcmUyMkFwcGx5UHJvcGVydHlGaWxsTGF5ZXJJTlNfOEVGaWxsQm94RUUxMGFw
cGx5VmFsdWVFUE5TXzE2Q1NTU3R5bGVTZWxlY3RvckVQTlNfOENTU1ZhbHVlRQogX19aTjdXZWJD
b3JlMTZDU1NTdHlsZVNlbGVjdG9yMTFtYXBGaWxsQ2xpcEVOU18xM0NTU1Byb3BlcnR5SURFUE5T
XzlGaWxsTGF5ZXJFUE5TXzhDU1NWYWx1ZUUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0
MTdjbGlwVG9JbWFnZUJ1ZmZlckVQTlNfMTFJbWFnZUJ1ZmZlckVSS05TXzlGbG9hdFJlY3RFCi1f
X1pOSzdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjRjbGlwRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05T
XzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE3Y2xpcFRvSW1hZ2VC
dWZmZXJFUE5TXzExSW1hZ2VCdWZmZXJFUktOU18xMkdyYXBoaWNzUmVjdEUKK19fWk5LN1dlYkNv
cmUxMUltYWdlQnVmZmVyNGNsaXBFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFCiBfX1pON1dlYkNvcmUxMVJlbmRlclN0eWxlMjNpbmhlcml0QmFja2dyb3VuZExheWVy
c0VSS05TXzlGaWxsTGF5ZXJFCiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDQxcGVycGVuZGljdWxh
ckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRFdgogX19aTks3V2ViQ29yZTE0U2ltcGxlRm9u
dERhdGEzMnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnREYXRhRXYKIF9fWk5LM1dURjlIYXNo
VGFibGVJUEtON1dlYkNvcmUxM0lubGluZVRleHRCb3hFU3Q0cGFpcklTNF9TNV9JTlNfNlZlY3Rv
cklQS05TMV8xNFNpbXBsZUZvbnREYXRhRUxtMEVFRU5TMV8xM0dseXBoT3ZlcmZsb3dFRUVOU18x
OFBhaXJGaXJzdEV4dHJhY3RvcklTRF9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTRQYWlySGFzaFRy
YWl0c0lOU18xMEhhc2hUcmFpdHNJUzRfRUVOU0pfSVNDX0VFRUVTS19FNGZpbmRJUzRfTlNfMjJJ
ZGVudGl0eUhhc2hUcmFuc2xhdG9ySVM0X1NEX1NIX0VFRUVOU18yMkhhc2hUYWJsZUNvbnN0SXRl
cmF0b3JJUzRfU0RfU0ZfU0hfU01fU0tfRUVSS1RfCiBfX1pON1dlYkNvcmUxM0lubGluZUZsb3dC
b3gyNWZsaXBMaW5lc0luQmxvY2tEaXJlY3Rpb25FaWkKLV9fWk43V2ViQ29yZTE2ZmluZEludGVy
c2VjdGlvbkVSS05TXzEwRmxvYXRQb2ludEVTMl9TMl9TMl9SUzBfCitfX1pON1dlYkNvcmUxNmZp
bmRJbnRlcnNlY3Rpb25FUktOU18xM0dyYXBoaWNzUG9pbnRFUzJfUzJfUzJfUlMwXwogX19aTjdX
ZWJDb3JlMjBSZW5kZXJCb3hNb2RlbE9iamVjdDE5ZHJhd0JveFNpZGVGcm9tUGF0aEVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEVSS05TXzRQYXRoRVBLTlNfMTBCb3JkZXJFZGdl
RWZmTlNfN0JveFNpZGVFUEtOU18xMVJlbmRlclN0eWxlRU5TXzVDb2xvckVOU18xMkVCb3JkZXJT
dHlsZUVOU18yNEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZUViYgogX19aTjdXZWJDb3JlMjBSZW5k
ZXJCb3hNb2RlbE9iamVjdDI3cGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzRVBOU18xNUdyYXBo
aWNzQ29udGV4dEVQS05TXzExUmVuZGVyU3R5bGVFUktOU18xNFJvdW5kZWRSZWN0RVM4X1BLTlNf
MTBCb3JkZXJFZGdlRU5TXzI0QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlRWJiYgogX19aTjNXVEY5
SGFzaFRhYmxlSVBOU18xNUxpc3RIYXNoU2V0Tm9kZUlQTjdXZWJDb3JlMTFSZW5kZXJCbG9jazE0
RmxvYXRpbmdPYmplY3RFTG00RUVFUzdfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTN19FRU5TXzI4
TGlzdEhhc2hTZXROb2RlSGFzaEZ1bmN0aW9uc0lTNV9MbTRFTlMzXzI3RmxvYXRpbmdPYmplY3RI
YXNoRnVuY3Rpb25zRUVFTlNfMTBIYXNoVHJhaXRzSVM3X0VFU0VfRTE2bG9va3VwRm9yV3JpdGlu
Z0VSS1M3XwpAQCAtMTY4MDIsMTYgKzE2ODAyLDE2IEBAIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBh
cnNlcjIzcGFyc2VQYXRoRGEKIF9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTE1bW92
ZVRvTmV4dFRva2VuRXYKIF9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTE5cGFyc2VT
VkdTZWdtZW50VHlwZUVSTlNfMTRTVkdQYXRoU2VnVHlwZUUKIF9fWk43V2ViQ29yZTEzU1ZHUGF0
aFBhcnNlcjE4cGFyc2VNb3ZlVG9TZWdtZW50RXYKLV9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmlu
Z1NvdXJjZTE4cGFyc2VNb3ZlVG9TZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNv
cmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjZtb3ZlVG9FUktOU18xMEZsb2F0UG9pbnRFYk5T
XzE4UGF0aENvb3JkaW5hdGVNb2RlRQotX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIxNXdyaXRlRmxvYXRQb2ludEVSS05TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTE5
U1ZHUGF0aFN0cmluZ1NvdXJjZTE4cGFyc2VNb3ZlVG9TZWdtZW50RVJOU18xM0dyYXBoaWNzUG9p
bnRFCitfX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjZtb3ZlVG9FUktOU18x
M0dyYXBoaWNzUG9pbnRFYk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjRT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxNXdyaXRlRmxvYXRQb2ludEVSS05TXzEzR3JhcGhpY3NQ
b2ludEUKIF9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMTdjb250aW51ZUNv
bnN1bWluZ0V2CiBfX1pOSzdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMTFoYXNNb3JlRGF0
YUV2CiBfX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UxMW5leHRDb21tYW5kRU5TXzE0
U1ZHUGF0aFNlZ1R5cGVFCiBfX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjI1
aW5jcmVtZW50UGF0aFNlZ21lbnRDb3VudEV2CiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIx
OHBhcnNlTGluZVRvU2VnbWVudEV2Ci1fX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2Ux
OHBhcnNlTGluZVRvU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMjRTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXI2bGluZVRvRVJLTlNfMTBGbG9hdFBvaW50RU5TXzE4UGF0aENv
b3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMThwYXJzZUxp
bmVUb1NlZ21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5
dGVTdHJlYW1CdWlsZGVyNmxpbmVUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29y
ZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOWNsb3Nl
UGF0aEV2CiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXI3Y2xlYW51cEV2CiBfX1pON1dlYkNv
cmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjdjbGVhbnVwRXYKQEAgLTE2ODM0LDE0ICsxNjgz
NCwxNCBAQCBfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyQzFFdgogX19aTjdXZWJDb3JlMjNT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZUMxRVBOU18xN1NWR1BhdGhCeXRlU3RyZWFtRQogX19aTjdX
ZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE1bW92ZVRvTmV4dFRva2VuRXYKIF9fWk43
V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOXBhcnNlU1ZHU2VnbWVudFR5cGVFUk5T
XzE0U1ZHUGF0aFNlZ1R5cGVFCi1fX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNl
MThwYXJzZU1vdmVUb1NlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTE0U1ZH
UGF0aEJ1aWxkZXI2bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RWJOU18xOFBhdGhDb29yZGluYXRl
TW9kZUUKK19fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOHBhcnNlTW92ZVRv
U2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRl
cjZtb3ZlVG9FUktOU18xM0dyYXBoaWNzUG9pbnRFYk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQog
X19aTjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRlcjE3Y29udGludWVDb25zdW1pbmdFdgogX19aTks3
V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxMWhhc01vcmVEYXRhRXYKIF9fWk43V2Vi
Q29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxMW5leHRDb21tYW5kRU5TXzE0U1ZHUGF0aFNl
Z1R5cGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyMjVpbmNyZW1lbnRQYXRoU2VnbWVu
dENvdW50RXYKLV9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOHBhcnNlTGlu
ZVRvU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRl
cjZsaW5lVG9FUktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pO
N1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMThwYXJzZUxpbmVUb1NlZ21lbnRFUk5T
XzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTE0U1ZHUGF0aEJ1aWxkZXI2bGluZVRvRVJL
TlNfMTNHcmFwaGljc1BvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3Jl
MTRTVkdQYXRoQnVpbGRlcjljbG9zZVBhdGhFdgogX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRl
cjdjbGVhbnVwRXYKIF9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2VEMEV2CkBA
IC0xNjg2OCw3ICsxNjg2OCw3IEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMThTVkdH
cmFkaWUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMThTVkdHcmFkaWVudEVsZW1lbnRF
UzNfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNo
VHJhaXRzSVMzX0VFUzlfRTZleHBhbmRFdgogX19aTks3V2ViQ29yZTMxUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudDE1Ym91bmRpbmdCb3hNb2RlRXYKIF9fWk5LN1dlYkNvcmUzMVJlbmRl
clNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQxM2J1aWxkR3JhZGllbnRFUE5TXzEyR3JhZGllbnRE
YXRhRVBOU18xOFNWR0dyYWRpZW50RWxlbWVudEUKLV9fWk43V2ViQ29yZTI0U1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50MjNjYWxjdWxhdGVTdGFydEVuZFBvaW50c0VSS05TXzI0TGluZWFyR3JhZGll
bnRBdHRyaWJ1dGVzRVJOU18xMEZsb2F0UG9pbnRFUzVfCitfX1pON1dlYkNvcmUyNFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDIzY2FsY3VsYXRlU3RhcnRFbmRQb2ludHNFUktOU18yNExpbmVhckdy
YWRpZW50QXR0cmlidXRlc0VSTlNfMTNHcmFwaGljc1BvaW50RVM1XwogX19aTjdXZWJDb3JlOEdy
YWRpZW50MTVzZXRTcHJlYWRNZXRob2RFTlNfMjBHcmFkaWVudFNwcmVhZE1ldGhvZEUKIF9fWk43
V2ViQ29yZThHcmFkaWVudDEyYWRkQ29sb3JTdG9wRVJLTlMwXzlDb2xvclN0b3BFCiBfX1pON1dl
YkNvcmUzMVJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQyNmNhbGN1bGF0ZUdyYWRpZW50
VHJhbnNmb3JtRVJOU18xNUFmZmluZVRyYW5zZm9ybUUKQEAgLTE2ODc5LDE4ICsxNjg3OSwxOCBA
QCBfX1pON1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhCiBfX1pON1dlYkNvcmUy
NFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDI1Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlc0VSTlNf
MjRSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXNFCiBfX1pOSzdXZWJDb3JlMzFSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50MTVib3VuZGluZ0JveE1vZGVFdgogX19aTks3V2ViQ29yZTMxUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudDEzYnVpbGRHcmFkaWVudEVQTlNfMTJHcmFkaWVu
dERhdGFFUE5TXzE4U1ZHR3JhZGllbnRFbGVtZW50RQotX19aTjdXZWJDb3JlMjRTVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQzNWNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5kUmFkaXVzRVJLTlNf
MjRSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXNFUk5TXzEwRmxvYXRQb2ludEVTNV9SZgorX19aTjdX
ZWJDb3JlMjRTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQzNWNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9p
bnRzQW5kUmFkaXVzRVJLTlNfMjRSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXNFUk5TXzEzR3JhcGhp
Y3NQb2ludEVTNV9SZgogX19aTjdXZWJDb3JlMzFSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRp
ZW50MjZjYWxjdWxhdGVHcmFkaWVudFRyYW5zZm9ybUVSTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBf
X1pON1dlYkNvcmUxMlNWR1RyYW5zZm9ybThzZXRTY2FsZUVmZgogX19aTjdXZWJDb3JlMTJTVkdU
cmFuc2Zvcm05c2V0Um90YXRlRWZmZgogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMTdwYXJz
ZUFyY1RvU2VnbWVudEV2Ci1fX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UxN3BhcnNl
QXJjVG9TZWdtZW50RVJmUzFfUzFfUmJTMl9STlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3Jl
MTlTVkdQYXRoU3RyaW5nU291cmNlMTdwYXJzZUFyY1RvU2VnbWVudEVSZlMxX1MxX1JiUzJfUk5T
XzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTEycGFyc2VBcmNGbGFnRVJQS3RTMV9SYgot
X19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI1YXJjVG9FZmZmYmJSS05TXzEw
RmxvYXRQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKLV9fWk43V2ViQ29yZTIzU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2UxN3BhcnNlQXJjVG9TZWdtZW50RVJmUzFfUzFfUmJTMl9STlNfMTBG
bG9hdFBvaW50RQotX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMTlkZWNvbXBvc2VBcmNUb0N1
YmljRWZmZlJOU18xMEZsb2F0UG9pbnRFUzJfYmIKK19fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyNWFyY1RvRWZmZmJiUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRoQ29v
cmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMTdwYXJz
ZUFyY1RvU2VnbWVudEVSZlMxX1MxX1JiUzJfUk5TXzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2Vi
Q29yZTEzU1ZHUGF0aFBhcnNlcjE5ZGVjb21wb3NlQXJjVG9DdWJpY0VmZmZSTlNfMTNHcmFwaGlj
c1BvaW50RVMyX2JiCiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTVzY2FsZUVkZAotX19a
TjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRlcjEyY3VydmVUb0N1YmljRVJLTlNfMTBGbG9hdFBvaW50
RVMzX1MzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVp
bGRlcjEyY3VydmVUb0N1YmljRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4UGF0aENv
b3JkaW5hdGVNb2RlRQogX19aVGhuMTIwX043V2ViQ29yZTE2U1ZHU2NyaXB0RWxlbWVudDE2c2V0
SHJlZkJhc2VWYWx1ZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNl
cjI4cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudEV2CiBfX1pON1dlYkNvcmUxOVNWR1BhdGhT
dHJpbmdTb3VyY2UyOHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnRFUmYKQEAgLTE2ODk5LDEx
ICsxNjg5OSwxMSBAQCBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIyNnBhcnNlTGluZVRvCiBf
X1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UyNnBhcnNlTGluZVRvVmVydGljYWxTZWdt
ZW50RVJmCiBfX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjE0bGluZVRvVmVy
dGljYWxFZk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFy
c2VyMjRwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnRFdgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3Ry
aW5nU291cmNlMjRwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEVTMl9T
Ml8KLV9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMTJjdXJ2ZVRvQ3ViaWNF
UktOU18xMEZsb2F0UG9pbnRFUzNfUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dl
YkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UyNHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudEVSTlNf
MTNHcmFwaGljc1BvaW50RVMyX1MyXworX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19TM19OU18xOFBhdGhD
b29yZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjMwcGFyc2VDdXJ2ZVRv
Q3ViaWNTbW9vdGhTZWdtZW50RXYKLV9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTMw
cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfCi1fX1pO
N1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjE4Y3VydmVUb0N1YmljU21vb3RoRVJL
TlNfMTBGbG9hdFBvaW50RVMzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3Jl
MTlTVkdQYXRoU3RyaW5nU291cmNlMzBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5T
XzEzR3JhcGhpY3NQb2ludEVTMl8KK19fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxMlNWR1RyYW5zZm9ybTlzZXRNYXRyaXhFUktO
U18xNUFmZmluZVRyYW5zZm9ybUUKIF9fWk43V2ViQ29yZUwxNnRzcGFuQ29uc3RydWN0b3JFUktO
U18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEViCiBfX1pON1dlYkNvcmUxNVNWR1RTcGFu
RWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEUKQEAgLTE2
OTE3LDggKzE2OTE3LDggQEAgX19aTjdXZWJDb3JlMTVSZW5kZXJTVkdJbmxpbmUxN3VwZGF0ZUZy
bwogX19aTks3V2ViQ29yZTE1U1ZHVFNwYW5FbGVtZW50MjVjaGlsZFNob3VsZENyZWF0ZVJlbmRl
cmVyRVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UyOHBh
cnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnRFUmYKIF9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2UyNnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50RVJmCi1fX1pON1dlYkNvcmUy
M1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMjRwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnRFUk5TXzEw
RmxvYXRQb2ludEVTMl9TMl8KLV9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2Uz
MHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RVMyXworX19a
TjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTI0cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdt
ZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFUzJfUzJfCitfX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRl
U3RyZWFtU291cmNlMzBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5TXzEzR3JhcGhp
Y3NQb2ludEVTMl8KIF9fWk43V2ViQ29yZUwyNXJlY3Vyc2l2ZVVwZGF0ZVNjYWxlZEZvbnRFUE5T
XzEyUmVuZGVyT2JqZWN0RQogX19aTks3V2ViQ29yZTE1UmVuZGVyU1ZHSW5saW5lMTFpc1NWR0lu
bGluZUV2CiBfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMzBTVkdUZXh0TGF5b3V0QXR0cmlidXRl
c0J1aWxkZXIxMlRleHRQb3NpdGlvbkVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KQEAgLTE2OTI4
LDExICsxNjkyOCwxMSBAQCBfX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRU43V2ViQ29yZTIzU1ZH
CiBfX1pOSzdXZWJDb3JlMTZTVkdJbmxpbmVGbG93Qm94MTljYWxjdWxhdGVCb3VuZGFyaWVzRXYK
IF9fWk43V2ViQ29yZTE2U1ZHSW5saW5lRmxvd0JveDVwYWludEVSTlNfOVBhaW50SW5mb0VpaWlp
CiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIyOHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnRFdgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMjhwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfCi1fX1pON1dlYkNvcmUyNFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjE2Y3VydmVUb1F1YWRyYXRpY0VSS05TXzEwRmxvYXRQb2ludEVTM19O
U18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJj
ZTI4cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50RVMyXwor
X19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxNmN1cnZlVG9RdWFkcmF0aWNF
UktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dl
YkNvcmUxM1NWR1BhdGhQYXJzZXIzNHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnRF
dgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMzRwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUyNFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjIyY3VydmVUb1F1YWRyYXRpY1Ntb290aEVSS05TXzEwRmxvYXRQb2lu
dEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1Nv
dXJjZTM0cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFwaGljc1Bv
aW50RQorX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIyMmN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVF
CiBfX1pON1dlYkNvcmU4U1ZHQ29sb3IyM2NvbG9yRnJvbVJHQkNvbG9yU3RyaW5nRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlTDE1bWFza0NvbnN0cnVjdG9yRVJLTlNfMTNRdWFsaWZpZWRO
YW1lRVBOU184RG9jdW1lbnRFYgogX19aTjdXZWJDb3JlMTRTVkdNYXNrRWxlbWVudDZjcmVhdGVF
UktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEUKQEAgLTE2OTUyLDIwICsxNjk1Miwy
MCBAQCBfX1pUaG4xMjhfTks3V2ViQ29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNCiBfX1pOSzdXZWJD
b3JlMTdTdHlsZVJlc291cmNlRGF0YWVxRVJLUzBfCiBfX1pUaG4xMjhfTjdXZWJDb3JlMjNSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjI1cmVtb3ZlQWxsQ2xpZW50c0Zyb21DYWNoZUViCiBfX1pON1dl
YkNvcmUxN1N0eWxlUmVzb3VyY2VEYXRhRDFFdgotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTI4cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50
RVMyXwotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTM0cGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMjNT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTI4cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudEVSTlNf
MTNHcmFwaGljc1BvaW50RVMyXworX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTM0cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50
RQogX19aTjdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjE5cmVzb3VyY2VCb3VuZGlu
Z0JveEVQTlNfMTJSZW5kZXJPYmplY3RFCi1fX1pOSzdXZWJDb3JlMTRTVkdNYXNrRWxlbWVudDE1
bWFza0JvdW5kaW5nQm94RVJLTlNfOUZsb2F0UmVjdEUKK19fWk5LN1dlYkNvcmUxNFNWR01hc2tF
bGVtZW50MTVtYXNrQm91bmRpbmdCb3hFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29y
ZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIzMWNhbGN1bGF0ZU1hc2tDb250ZW50UmVwYWludFJl
Y3RFdgogX19aTjdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjIxcmVtb3ZlQ2xpZW50
RnJvbUNhY2hlRVBOU18xMlJlbmRlck9iamVjdEViCiBfX1pOSzNXVEY5SGFzaFRhYmxlSVBON1dl
YkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTBNYXNrZXJEYXRhRUVOU18xOFBh
aXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0
c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FOGNvbnRhaW5zSVMzX05TXzIy
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TN19TQl9FRUVFYlJLVF8KIF9fWk43V2ViQ29yZTIz
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIxM2FwcGx5UmVzb3VyY2VFUE5TXzEyUmVuZGVyT2JqZWN0
RVBOU18xMVJlbmRlclN0eWxlRVJQTlNfMTVHcmFwaGljc0NvbnRleHRFdAotX19aTjdXZWJDb3Jl
MTlTVkdJbWFnZUJ1ZmZlclRvb2xzMzZjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVy
ZXJFUEtOU18xMlJlbmRlck9iamVjdEVSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxOVNW
R0ltYWdlQnVmZmVyVG9vbHMxN2NyZWF0ZUltYWdlQnVmZmVyRVJLTlNfOUZsb2F0UmVjdEVTM19S
TjNXVEY2T3duUHRySU5TXzExSW1hZ2VCdWZmZXJFRUVOU18xMENvbG9yU3BhY2VFCitfX1pON1dl
YkNvcmUxOVNWR0ltYWdlQnVmZmVyVG9vbHMzNmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JS
ZW5kZXJlckVQS05TXzEyUmVuZGVyT2JqZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCitfX1pON1dl
YkNvcmUxOVNWR0ltYWdlQnVmZmVyVG9vbHMxN2NyZWF0ZUltYWdlQnVmZmVyRVJLTlNfMTJHcmFw
aGljc1JlY3RFUzNfUk4zV1RGNk93blB0cklOU18xMUltYWdlQnVmZmVyRUVFTlNfMTBDb2xvclNw
YWNlRQogX19aTjdXZWJDb3JlMjJsaW5lYXJSR0JDb2xvclNwYWNlUmVmRXYKIF9fWk43V2ViQ29y
ZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIyNGRyYXdDb250ZW50SW50b01hc2tJbWFnZUVQTlNf
MTBNYXNrZXJEYXRhRVBLTlNfMTRTVkdNYXNrRWxlbWVudEVQTlNfMTJSZW5kZXJPYmplY3RFCiBf
X1pON1dlYkNvcmUxOVNWR0ltYWdlQnVmZmVyVG9vbHMyNnJlbmRlclN1YnRyZWVUb0ltYWdlQnVm
ZmVyRVBOU18xMUltYWdlQnVmZmVyRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzE1QWZmaW5lVHJh
bnNmb3JtRQotX19aTjdXZWJDb3JlMTlTVkdJbWFnZUJ1ZmZlclRvb2xzMTdjbGlwVG9JbWFnZUJ1
ZmZlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzlG
bG9hdFJlY3RFUk4zV1RGNk93blB0cklOU18xMUltYWdlQnVmZmVyRUVFCitfX1pON1dlYkNvcmUx
OVNWR0ltYWdlQnVmZmVyVG9vbHMxN2NsaXBUb0ltYWdlQnVmZmVyRVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfMTJHcmFwaGljc1JlY3RFUk4zV1RGNk93
blB0cklOU18xMUltYWdlQnVmZmVyRUVFCiBfX1pON1dlYkNvcmU0NmpzRE9NV2luZG93UHJvdG90
eXBlRnVuY3Rpb25HZXRNYXRjaGVkQ1NTUnVsZXNFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk5LN1dl
YkNvcmU5RE9NV2luZG93MThnZXRNYXRjaGVkQ1NTUnVsZXNFUE5TXzdFbGVtZW50RVJLTjNXVEY2
U3RyaW5nRWIKIF9fWk5LN1dlYkNvcmUyNkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uMjRnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWVFUEtpbQpAQCAtMTcxMDAsNyArMTcxMDAsNyBAQCBfX1pOSzdX
ZWJDb3JlMTRSZW5kZXJSdWJ5QmFzZTEwcmVuZGVyTmFtCiBfX1pON1dlYkNvcmUxNFJlbmRlclJ1
YnlUZXh0RDBFdgogX19aTks3V2ViQ29yZThTVkdJbWFnZTE3dXNlc0NvbnRhaW5lclNpemVFdgog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBOU181SW1hZ2VFTlNfMTBD
b2xvclNwYWNlRVJLTlNfN0ludFJlY3RFUzZfTlNfMTdDb21wb3NpdGVPcGVyYXRvckViCi1fX1pO
N1dlYkNvcmU1SW1hZ2U5ZHJhd1RpbGVkRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9h
dFJlY3RFUzVfTlMwXzhUaWxlUnVsZUVTNl9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVP
cGVyYXRvckUKK19fWk43V2ViQ29yZTVJbWFnZTlkcmF3VGlsZWRFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfTlMwXzhUaWxlUnVsZUVTNl9OU18xMENvbG9yU3Bh
Y2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKIF9fWk5LN1dlYkNvcmUxNFNpbXBsZUZvbnREYXRh
MjNicm9rZW5JZGVvZ3JhcGhGb250RGF0YUV2CiBfX1pON1dlYkNvcmUxOHZlcnRpY2FsVGV4dEN1
cnNvckV2CiBfX1pOSzdXZWJDb3JlMTRTaW1wbGVGb250RGF0YTI2dXByaWdodE9yaWVudGF0aW9u
Rm9udERhdGFFdgpAQCAtMTcxMTUsMjkgKzE3MTE1LDI5IEBAIF9fWk5LN1dlYkNvcmUxMVJlbmRl
clN0eWxlMTVib3JkZXJMZWZ0V2kKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlMTdib3JkZXJC
b3R0b21XaWR0aEV2CiBfX1pON1dlYkNvcmUxMVJlbmRlclN0eWxlMTJzZXRCb3JkZXJGaXRFTlNf
MTBFQm9yZGVyRml0RQogX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2sxOGFkanVzdEZvckJvcmRl
ckZpdEVpUmlTMV8KLV9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI3ZHJhd1JlY3RTaGFkb3dXaXRo
b3V0VGlsaW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUktOU18xNFJv
dW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIy
N2RyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZ0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18x
MkdyYXBoaWNzUmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50UmVjdEUKIF9f
Wk43V2ViQ29yZTEwU2hhZG93Qmx1cjE2ZHJhd1NoYWRvd0J1ZmZlckVQTlNfMTVHcmFwaGljc0Nv
bnRleHRFCiBfX1pOSzdXZWJDb3JlNFBhdGg2bGVuZ3RoRXYKIF9fWk43V2ViQ29yZTE4UGF0aFRy
YXZlcnNhbFN0YXRlQzFFTlMwXzE5UGF0aFRyYXZlcnNhbEFjdGlvbkUKIF9fWk5LN1dlYkNvcmU0
UGF0aDVhcHBseUVQdlBGdlMxX1BLTlNfMTFQYXRoRWxlbWVudEVFCiBfX1pON1dlYkNvcmVMMjZD
R1BhdGhBcHBsaWVyVG9QYXRoQXBwbGllckVQdlBLMTNDR1BhdGhFbGVtZW50CiBfX1pON1dlYkNv
cmVMMjVwYXRoTGVuZ3RoQXBwbGllckZ1bmN0aW9uRVB2UEtOU18xMVBhdGhFbGVtZW50RQotX19a
TjdXZWJDb3JlMThQYXRoVHJhdmVyc2FsU3RhdGU2bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RQot
X19aTjdXZWJDb3JlMThQYXRoVHJhdmVyc2FsU3RhdGU2bGluZVRvRVJLTlNfMTBGbG9hdFBvaW50
RQotX19aTjdXZWJDb3JlMThQYXRoVHJhdmVyc2FsU3RhdGUxM2N1YmljQmV6aWVyVG9FUktOU18x
MEZsb2F0UG9pbnRFUzNfUzNfCitfX1pON1dlYkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTZtb3Zl
VG9FUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0
ZTZsaW5lVG9FUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUxOFBhdGhUcmF2ZXJz
YWxTdGF0ZTEzY3ViaWNCZXppZXJUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19TM18KIF9fWk4z
V1RGNlZlY3RvcklON1dlYkNvcmUxMUN1YmljQmV6aWVyRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlF
bQogX19aTjdXZWJDb3JlMThQYXRoVHJhdmVyc2FsU3RhdGUxMmNsb3NlU3VicGF0aEV2CiBfX1pO
M1dURjZWZWN0b3JJZExtMEVFMTRleHBhbmRDYXBhY2l0eUVtCiBfX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDExc2V0TGluZURhc2hFUktOM1dURjZWZWN0b3JJZExtMEVFRWYKIF9fWk43V2Vi
Q29yZTEzSW5saW5lRmxvd0JveDlwYWludE1hc2tFUk5TXzlQYWludEluZm9FaWkKIF9fWk43V2Vi
Q29yZThTVkdJbWFnZTI2bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVFdgotX19aTjdXZWJDb3Jl
MTBTaGFkb3dCbHVyMjhkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzlGbG9hdFJlY3RFUzVfUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNf
N0ludFJlY3RFCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIyOGRyYXdJbnNldFNoYWRvd1dpdGhv
dXRUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfUktO
U18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVJlbmRl
clN0eWxlMTJzZXRNYXhIZWlnaHRFTlNfNkxlbmd0aEUKIF9fWk43V2ViQ29yZTEzQ1NTU3R5bGVT
aGVldDE4ZGV0ZXJtaW5lTmFtZXNwYWNlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0UKIF9fWk5LN1dl
YkNvcmUxMFN0eWxlSW1hZ2UxM2Vycm9yT2NjdXJyZWRFdgogX19aTks3V2ViQ29yZTE5U3R5bGVH
ZW5lcmF0ZWRJbWFnZTIxaW1hZ2VIYXNSZWxhdGl2ZVdpZHRoRXYKLV9fWlRobjEwNF9ON1dlYkNv
cmUxNENTU0NhbnZhc1ZhbHVlMTNjYW52YXNDaGFuZ2VkRVBOU18xN0hUTUxDYW52YXNFbGVtZW50
RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTE0Q1NTQ2FudmFzVmFsdWUxM2NhbnZhc0No
YW5nZWRFUE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFUktOU185RmxvYXRSZWN0RQorX19aVGhuMTA0
X043V2ViQ29yZTE0Q1NTQ2FudmFzVmFsdWUxM2NhbnZhc0NoYW5nZWRFUE5TXzE3SFRNTENhbnZh
c0VsZW1lbnRFUktOU18xMkdyYXBoaWNzUmVjdEUKK19fWk43V2ViQ29yZTE0Q1NTQ2FudmFzVmFs
dWUxM2NhbnZhc0NoYW5nZWRFUE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFUktOU18xMkdyYXBoaWNz
UmVjdEUKIF9fWk43V2ViQ29yZTE0anNMb2NhdGlvbkhhc2hFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBf
N0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTks3V2ViQ29yZThMb2NhdGlvbjRoYXNo
RXYKIF9fWk43V2ViQ29yZTEwSlNMb2NhdGlvbjNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8x
MElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCkBAIC0xNzE5
OSw3ICsxNzE5OSw3IEBAIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMTEK
IF9fWk43V2ViQ29yZTIySlNIVE1MVGFibGVDZWxsRWxlbWVudDNwdXRFUE4zSlNDOUV4ZWNTdGF0
ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RF
CiBfX1pOM0pTQzlsb29rdXBQdXRJTjdXZWJDb3JlMjJKU0hUTUxUYWJsZUNlbGxFbGVtZW50RUVF
YlBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVBLTlNfOUhhc2hU
YWJsZUVQVF8KIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJbWFn
ZUVQTlNfMTZIVE1MVmlkZW9FbGVtZW50RWZmUmkKLV9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOWRyYXdJbWFnZUVQTlNfMTZIVE1MVmlkZW9FbGVtZW50RVJLTlNfOUZsb2F0
UmVjdEVTNV9SaQorX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0lt
YWdlRVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9SaQogX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN3NldFN0cm9rZUdyYWRpZW50RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzhHcmFkaWVudEVFRQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xN0hUTUxDYW52YXNFbGVtZW50RWZmZmZSaQogX19aTjdXZWJD
b3JlNjBqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uRHJhd0ltYWdl
RnJvbVJlY3RFUE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTIyNzM4LDggKzIyNzM4LDggQEAgX19aTjdX
ZWJDb3JlMjFzZXRKU0RvY3VtZW50T25zY3JvbGxFUE4zSgogX19aTjdXZWJDb3JlMzZqc0RPTVdp
bmRvd1Byb3RvdHlwZUZ1bmN0aW9uUmVzaXplVG9FUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk5LN1dl
YkNvcmU5RE9NV2luZG93OHJlc2l6ZVRvRWZmCiBfX1pON1dlYkNvcmUxOXNjcmVlbkF2YWlsYWJs
ZVJlY3RFUE5TXzZXaWRnZXRFCi1fX1pON1dlYkNvcmU5RE9NV2luZG93MTZhZGp1c3RXaW5kb3dS
ZWN0RVJLTlNfOUZsb2F0UmVjdEVSUzFfUzNfCi1fX1pOSzdXZWJDb3JlNkNocm9tZTEzc2V0V2lu
ZG93UmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmU5RE9NV2luZG93MTZhZGp1c3RX
aW5kb3dSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUlMxX1MzXworX19aTks3V2ViQ29yZTZDaHJv
bWUxM3NldFdpbmRvd1JlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZUwzNGV4
ZWN1dGVTY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnRFUE5TXzVGcmFtZUVQTlNfNUV2ZW50RU5T
XzE5RWRpdG9yQ29tbWFuZFNvdXJjZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyRXZl
bnRIYW5kbGVyMjRsb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHlFTlNfMjJTY3JvbGxMb2dpY2FsRGly
ZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnVsYXJpdHlFUE5TXzROb2RlRQogX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIyMWxvZ2ljYWxTY3JvbGxPdmVyZmxvd0VOU18yMlNjcm9sbExvZ2ljYWxEaXJl
Y3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCkBAIC0yMjkxOSw3ICsyMjkx
OSw3IEBAIF9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDZhcHBlbmRFUktTMF8KIF9fWk43V2Vi
Q29yZTEzSGl0VGVzdFJlc3VsdDI2bXV0YWJsZVJlY3RCYXNlZFRlc3RSZXN1bHRFdgogX19aTks3
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDE5cmVjdEJhc2VkVGVzdFJlc3VsdEV2CiBfX1pON1dlYkNv
cmUyMVN0YXRpY0hhc2hTZXROb2RlTGlzdEQwRXYKLV9fWk43V2ViQ29yZTlSZW5kZXJCb3gxM2Fi
c29sdXRlUXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRQorX19aTjdXZWJD
b3JlOVJlbmRlckJveDEzYWJzb2x1dGVRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NR
dWFkRUxtMEVFRQogX19aTjdXZWJDb3JlMzlqc0VsZW1lbnRQcm90b3R5cGVGdW5jdGlvblNjcm9s
bEJ5TGluZXNFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTdFbGVtZW50MTNzY3JvbGxC
eUxpbmVzRWkKIF9fWk43V2ViQ29yZTM5anNFbGVtZW50UHJvdG90eXBlRnVuY3Rpb25TY3JvbGxC
eVBhZ2VzRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0yNDI5MCwxMiArMjQyOTAsMTIgQEAgX19aTjdX
ZWJDb3JlOERvY3VtZW50MjNkb2N1bWVudERpZEJlY29tZQogX19aTjdXZWJDb3JlNjBqc0RPTVdp
bmRvd1Byb3RvdHlwZUZ1bmN0aW9uV2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2VFUE4z
SlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTEzdG9XZWJLaXRQb2ludEVOM0pTQzdKU1ZhbHVl
RQogX19aTks3V2ViQ29yZTlET01XaW5kb3czMndlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9Q
YWdlRVBOU180Tm9kZUVQS05TXzExV2ViS2l0UG9pbnRFCi1fX1pOSzdXZWJDb3JlNE5vZGUxM2Nv
bnZlcnRUb1BhZ2VFUktOU18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3JlNE5vZGUxM2NvbnZl
cnRUb1BhZ2VFUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmUxNGpzV2ViS2l0UG9p
bnRYRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9f
Wk43V2ViQ29yZTE0anNXZWJLaXRQb2ludFlFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVF
UktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlNjBqc0RPTVdpbmRvd1Byb3RvdHlwZUZ1
bmN0aW9uV2Via2l0Q29udmVydFBvaW50RnJvbVBhZ2VUb05vZGVFUE4zSlNDOUV4ZWNTdGF0ZUUK
IF9fWk5LN1dlYkNvcmU5RE9NV2luZG93MzJ3ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9k
ZUVQTlNfNE5vZGVFUEtOU18xMVdlYktpdFBvaW50RQotX19aTks3V2ViQ29yZTROb2RlMTVjb252
ZXJ0RnJvbVBhZ2VFUktOU18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3JlNE5vZGUxNWNvbnZl
cnRGcm9tUGFnZUVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182
U3RyaW5nRVN0NHBhaXJJUzFfUzFfRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVMzX0VFTlNfMTBT
dHJpbmdIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFUzlfRUVT
OV9FMTZsb29rdXBGb3JXcml0aW5nSVMxX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMV9T
M19TNl9FRUVFUzJfSVBTM19iRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlOU182U3RyaW5nRVN0
NHBhaXJJUzFfUzFfRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVMzX0VFTlNfMTBTdHJpbmdIYXNo
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFUzlfRUVTOV9FM2FkZElT
MV9TMV9OU18xN0hhc2hNYXBUcmFuc2xhdG9ySVMzX1NBX1M2X0VFRUVTMl9JTlNfMTdIYXNoVGFi
bGVJdGVyYXRvcklTMV9TM19TNV9TNl9TQV9TOV9FRWJFUktUX1JLVDBfCiBfX1pOM1dURjlIYXNo
VGFibGVJTlNfNlN0cmluZ0VTdDRwYWlySVMxX1MxX0VOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklT
M19FRU5TXzEwU3RyaW5nSGFzaEVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lT
MV9FRVM5X0VFUzlfRTNhZGRJUzFfUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMxX1Mz
X1M2X0VFRUVTMl9JTlNfMTdIYXNoVGFibGVJdGVyYXRvcklTMV9TM19TNV9TNl9TQV9TOV9FRWJF
UktUX1JLVDBfCkBAIC0yNTEwOSw4ICsyNTEwOSw4IEBAIF9fWk43V2ViQ29yZTIwc2V0SlNFbGVt
ZW50T25zY3JvbGxFUE4zSlMKIF9fWk5LN1dlYkNvcmU2Q2hyb21lMjJ3aWxsUnVuTW9kYWxIVE1M
RGlhbG9nRVBLTlNfNUZyYW1lRQogX19aTks3V2ViQ29yZTZDaHJvbWUxNGNhblJ1bk1vZGFsTm93
RXYKIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMmxvYWRzQmxvY2tlZEV2Ci1fX1pON1dl
YkNvcmUxNFdpbmRvd0ZlYXR1cmVzQzFFUktOM1dURjZTdHJpbmdFUktOU185RmxvYXRSZWN0RQot
X19aTjdXZWJDb3JlMTRXaW5kb3dGZWF0dXJlc0MyRVJLTjNXVEY2U3RyaW5nRVJLTlNfOUZsb2F0
UmVjdEUKK19fWk43V2ViQ29yZTE0V2luZG93RmVhdHVyZXNDMUVSS04zV1RGNlN0cmluZ0VSS05T
XzEyR3JhcGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTRXaW5kb3dGZWF0dXJlc0MyRVJLTjNXVEY2
U3RyaW5nRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxNFdpbmRvd0ZlYXR1cmVz
MTlwYXJzZURpYWxvZ0ZlYXR1cmVzRVJLTjNXVEY2U3RyaW5nRVJOUzFfN0hhc2hNYXBJUzJfUzJf
TlMxXzEwU3RyaW5nSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVMyX0VFUzhfRUUKIF9fWk43V2ViQ29y
ZTE0V2luZG93RmVhdHVyZXMxMmZsb2F0RmVhdHVyZUVSS04zV1RGN0hhc2hNYXBJTlMxXzZTdHJp
bmdFUzNfTlMxXzEwU3RyaW5nSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVMzX0VFUzZfRUVQS2NmZmYK
IF9fWk43V2ViQ29yZTE0V2luZG93RmVhdHVyZXMxMWJvb2xGZWF0dXJlRVJLTjNXVEY3SGFzaE1h
cElOUzFfNlN0cmluZ0VTM19OUzFfMTBTdHJpbmdIYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzNfRUVT
Nl9FRVBLY2IKQEAgLTI1NDczLDcgKzI1NDczLDcgQEAgX19aTjdXZWJDb3JlMTdQYXNzd29yZElu
cHV0VHlwZTI2c2hvdWxkUgogX19aTjdXZWJDb3JlMTVOdW1iZXJJbnB1dFR5cGUyMGhhc1VuYWNj
ZXB0YWJsZVZhbHVlRXYKIF9fWk43V2ViQ29yZTE1TnVtYmVySW5wdXRUeXBlMTdpc0FjY2VwdGFi
bGVWYWx1ZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIwcGFyc2VMb2NhbGl6ZWROdW1i
ZXJFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gyNnBhaW50Q29t
cG9zaXRpb25CYWNrZ3JvdW5kRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2lu
dEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RWlpCitfX1pON1dlYkNvcmUxM0lubGluZVRl
eHRCb3gyNnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kRVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzEzR3JhcGhpY3NQb2ludEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RWlpCiBfX1pO
SzdXZWJDb3JlMTVOdW1iZXJJbnB1dFR5cGUyM2NvbnZlcnRGcm9tVmlzaWJsZVZhbHVlRVJLTjNX
VEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTVOdW1iZXJJbnB1dFR5cGUxNWhhbmRsZUJsdXJFdmVu
dEV2CiBfX1pON1dlYkNvcmUxNU51bWJlcklucHV0VHlwZTE4aGFuZGxlS2V5ZG93bkV2ZW50RVBO
U18xM0tleWJvYXJkRXZlbnRFCkBAIC0yNTkxMSw4ICsyNTkxMSw4IEBAIF9fWk43V2ViQ29yZTEw
UmVuZGVyVmlldzI5Y29tcHV0ZVByZWZlcnIKIF9fWk43V2ViQ29yZTIyQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZTE0Y3JlYXRlR3JhZGllbnRFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfN0ludFNpemVF
CiBfX1pON1dlYkNvcmUyMkNTU1JhZGlhbEdyYWRpZW50VmFsdWVEMEV2CiBfX1pON1dlYkNvcmU5
Q1NTUGFyc2VyMTlwYXJzZVJhZGlhbEdyYWRpZW50RVJOM1dURjZSZWZQdHJJTlNfOENTU1ZhbHVl
RUVFTlNfMTdDU1NHcmFkaWVudFJlcGVhdEUKLV9fWk43V2ViQ29yZUwyNGRpc3RhbmNlVG9GYXJ0
aGVzdENvcm5lckVSS05TXzEwRmxvYXRQb2ludEVSS05TXzlGbG9hdFNpemVFUlMwXwotX19aTks3
V2ViQ29yZTlGbG9hdFNpemUxNGRpYWdvbmFsTGVuZ3RoRXYKK19fWk43V2ViQ29yZUwyNGRpc3Rh
bmNlVG9GYXJ0aGVzdENvcm5lckVSS05TXzEzR3JhcGhpY3NQb2ludEVSS05TXzEyR3JhcGhpY3NT
aXplRVJTMF8KK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNzU2l6ZTE0ZGlhZ29uYWxMZW5ndGhFdgog
X19aTks3V2ViQ29yZTE2Q1NTR3JhZGllbnRWYWx1ZTE2aXNMaW5lYXJHcmFkaWVudEV2CiBfX1pO
SzdXZWJDb3JlMjJDU1NSYWRpYWxHcmFkaWVudFZhbHVlMTZpc1JhZGlhbEdyYWRpZW50RXYKIF9f
Wk5LN1dlYkNvcmUyMkNTU1JhZGlhbEdyYWRpZW50VmFsdWU3Y3NzVGV4dEV2CkBAIC0yNTkyOCw5
ICsyNTkyOCw5IEBAIF9fWk43V2ViQ29yZTE3U1ZHUG9seWdvbkVsZW1lbnQ2Y3JlYXRlRVIKIF9f
Wk43V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnRDMkVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERv
Y3VtZW50RQogX19aTjdXZWJDb3JlMTRTVkdQb2x5RWxlbWVudDIwcGFyc2VNYXBwZWRBdHRyaWJ1
dGVFUE5TXzlBdHRyaWJ1dGVFCiBfX1pON1dlYkNvcmUyMXBvaW50c0xpc3RGcm9tU1ZHRGF0YUVS
TlNfMTJTVkdQb2ludExpc3RFUktOM1dURjZTdHJpbmdFCi1fX1pOM1dURjZWZWN0b3JJTjdXZWJD
b3JlMTBGbG9hdFBvaW50RUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQotX19aTjNXVEY2VmVjdG9y
SU43V2ViQ29yZTEwRmxvYXRQb2ludEVMbTBFRWFTRVJLUzNfCi1fX1pOM1dURjZWZWN0b3JJTjdX
ZWJDb3JlMTBGbG9hdFBvaW50RUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCitfX1pOM1dURjZWZWN0
b3JJTjdXZWJDb3JlMTNHcmFwaGljc1BvaW50RUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQorX19a
TjNXVEY2VmVjdG9ySU43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEVMbTBFRWFTRVJLUzNfCitfX1pO
M1dURjZWZWN0b3JJTjdXZWJDb3JlMTNHcmFwaGljc1BvaW50RUxtMEVFMTRzaHJpbmtDYXBhY2l0
eUVtCiBfX1pON1dlYkNvcmUxNFNWR1BvbHlFbGVtZW50MTlzdmdBdHRyaWJ1dGVDaGFuZ2VkRVJL
TlNfMTNRdWFsaWZpZWROYW1lRQogX19aTks3V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQ3aXNWYWxp
ZEV2CiBfX1pON1dlYkNvcmUzM2pzU3RvcmFnZVByb3RvdHlwZUZ1bmN0aW9uR2V0SXRlbUVQTjNK
U0M5RXhlY1N0YXRlRQpAQCAtMjYwMzIsMTEgKzI2MDMyLDExIEBAIF9fWk5LN1dlYkNvcmU0Rm9u
dDE4ZW1waGFzaXNNYXJrSGVpZ2h0RVIKIF9fWk5LN1dlYkNvcmU0Rm9udDI0Z2V0RW1waGFzaXNN
YXJrR2x5cGhEYXRhRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSTlNfOUdseXBoRGF0YUUKIF9fWk5L
N1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhMjBlbXBoYXNpc01hcmtGb250RGF0YUVSS05TXzE1Rm9u
dERlc2NyaXB0aW9uRQogX19aTks3V2ViQ29yZTRGb250MTllbXBoYXNpc01hcmtEZXNjZW50RVJL
TjNXVEYxMkF0b21pY1N0cmluZ0UKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdkcmF3
RW1waGFzaXNNYXJrc0VSS05TXzRGb250RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRvbWljU3Ry
aW5nRVJLTlNfMTBGbG9hdFBvaW50RWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQxN2RyYXdFbXBoYXNp
c01hcmtzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTjNXVEYxMkF0b21p
Y1N0cmluZ0VSS05TXzEwRmxvYXRQb2ludEVpaQotX19aTks3V2ViQ29yZTRGb250MzBkcmF3RW1w
aGFzaXNNYXJrc0ZvclNpbXBsZVRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRS
dW5FUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTBGbG9hdFBvaW50RWlpCitfX1pON1dlYkNv
cmUxNUdyYXBoaWNzQ29udGV4dDE3ZHJhd0VtcGhhc2lzTWFya3NFUktOU180Rm9udEVSS05TXzdU
ZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSS05TXzEzR3JhcGhpY3NQb2ludEVpaQorX19a
Tks3V2ViQ29yZTRGb250MTdkcmF3RW1waGFzaXNNYXJrc0VQTlNfMTVHcmFwaGljc0NvbnRleHRF
UktOU183VGV4dFJ1bkVSS04zV1RGMTJBdG9taWNTdHJpbmdFUktOU18xM0dyYXBoaWNzUG9pbnRF
aWkKK19fWk5LN1dlYkNvcmU0Rm9udDMwZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0RVBO
U18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VS
S05TXzEzR3JhcGhpY3NQb2ludEVpaQogX19aTjdXZWJDb3JlNEZvbnQyMmNhblJlY2VpdmVUZXh0
RW1waGFzaXNFaQotX19aTks3V2ViQ29yZTRGb250MTdkcmF3RW1waGFzaXNNYXJrc0VQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU18xMUdseXBoQnVmZmVyRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VS
S05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmU0Rm9udDE3ZHJhd0VtcGhhc2lzTWFya3NF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTFHbHlwaEJ1ZmZlckVSS04zV1RGMTJBdG9taWNT
dHJpbmdFUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmVMMjFvZmZzZXRUb01pZGRs
ZU9mR2x5cGhFUEtOU18xNFNpbXBsZUZvbnREYXRhRXQKIF9fWk43V2ViQ29yZTU2anNDU1NTdHls
ZURlY2xhcmF0aW9uUHJvdG90eXBlRnVuY3Rpb25Jc1Byb3BlcnR5SW1wbGljaXRFUE4zSlNDOUV4
ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE5Q1NTU3R5bGVEZWNsYXJhdGlvbjE4aXNQcm9wZXJ0eUlt
cGxpY2l0RVJLTjNXVEY2U3RyaW5nRQpAQCAtMjYzODAsNyArMjYzODAsNyBAQCBfX1pON1dlYkNv
cmU3RGF0YVJlZklOU18xOFN0eWxlU2hhZG93U1ZHCiBfX1pON1dlYkNvcmUxOFN0eWxlU2hhZG93
U1ZHRGF0YUMxRVJLUzBfCiBfX1pOSzdXZWJDb3JlMThTdHlsZVNoYWRvd1NWR0RhdGFlcUVSS1Mw
XwogX19aTjdXZWJDb3JlMTRTVkdSZW5kZXJTdHlsZTE4c2V0U3Ryb2tlRGFzaEFycmF5RVJLTjNX
VEY2VmVjdG9ySU5TXzlTVkdMZW5ndGhFTG0wRUVFCi1fX1pOSzdXZWJDb3JlMTBTaGFkb3dEYXRh
MTlhZGp1c3RSZWN0Rm9yU2hhZG93RVJOU185RmxvYXRSZWN0RWkKK19fWk5LN1dlYkNvcmUxMFNo
YWRvd0RhdGExOWFkanVzdFJlY3RGb3JTaGFkb3dFUk5TXzEyR3JhcGhpY3NSZWN0RWkKIF9fWk43
V2ViQ29yZTEzUmVuZGVyU1ZHUGF0aDIzc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGVFdgogX19aTjdX
ZWJDb3JlMTJTVkdMYW5nU3BhY2UxNmlzS25vd25BdHRyaWJ1dGVFUktOU18xM1F1YWxpZmllZE5h
bWVFCiBfX1pON1dlYkNvcmU1d3JpdGVFUk5TXzEwVGV4dFN0cmVhbUVSS05TXzEzUmVuZGVyU1ZH
Um9vdEVpCkBAIC0yNjM5NywxMCArMjYzOTcsMTAgQEAgX19aTks3V2ViQ29yZTEzUmVuZGVyU1ZH
UGF0aDE0bG9jYWxUcmFucwogX19aTjdXZWJDb3JlTDI0d3JpdGVTVkdQYWludGluZ1Jlc291cmNl
RVJOU18xMFRleHRTdHJlYW1FUE5TXzE3UmVuZGVyU1ZHUmVzb3VyY2VFCiBfX1pOSzdXZWJDb3Jl
MjdSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IxMnJlc291cmNlVHlwZUV2CiBfX1pON1dlYkNv
cmUyMFNWR1BhdGhQYXJzZXJGYWN0b3J5MjVidWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtRVBOU18x
N1NWR1BhdGhCeXRlU3RyZWFtRVJOM1dURjZTdHJpbmdFTlNfMTVQYXRoUGFyc2luZ01vZGVFCi1f
X1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyNm1vdmVUb0VSS05TXzEwRmxvYXRQb2lu
dEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdC
dWlsZGVyNm1vdmVUb0VSS05TXzEzR3JhcGhpY3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1v
ZGVFCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMTdjb250aW51ZUNvbnN1bWlu
Z0V2CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMjVpbmNyZW1lbnRQYXRoU2Vn
bWVudENvdW50RXYKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2bGluZVRvRVJL
TlNfMTBGbG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjBT
VkdQYXRoU3RyaW5nQnVpbGRlcjZsaW5lVG9FUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyOWNsb3Nl
UGF0aEV2CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyNnJlc3VsdEV2CiBfX1pO
N1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyN2NsZWFudXBFdgpAQCAtMjY0NzMsOSArMjY0
NzMsOSBAQCBfX1pON1dlYkNvcmVMMzRhZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoCiBfX1pOM1dU
RjZWZWN0b3JJdExtMjU2RUU2YXBwZW5kSXRFRXZQS1RfbQogX19aTjNXVEY2VmVjdG9ySVN0NHBh
aXJJUEtON1dlYkNvcmU4Rm9udERhdGFFYkVMbTFFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk43
V2ViQ29yZTEyQmlkaVJlc29sdmVySU5TXzE1VGV4dFJ1bkl0ZXJhdG9yRU5TXzE2QmlkaUNoYXJh
Y3RlclJ1bkVFMjdsb3dlckV4cGxpY2l0RW1iZWRkaW5nTGV2ZWxFTjNXVEY3VW5pY29kZTlEaXJl
Y3Rpb25FCi1fX1pOSzdXZWJDb3JlMTdSZW5kZXJDb21iaW5lVGV4dDE2YWRqdXN0VGV4dE9yaWdp
bkVSTlNfMTBGbG9hdFBvaW50RVJLTlNfOUZsb2F0UmVjdEUKK19fWk5LN1dlYkNvcmUxN1JlbmRl
ckNvbWJpbmVUZXh0MTZhZGp1c3RUZXh0T3JpZ2luRVJOU18xM0dyYXBoaWNzUG9pbnRFUktOU18x
MkdyYXBoaWNzUmVjdEUKIF9fWk5LN1dlYkNvcmUxN1JlbmRlckNvbWJpbmVUZXh0MThjaGFyYWN0
ZXJzVG9SZW5kZXJFaVJQS3RSaQotX19aTks3V2ViQ29yZTRGb250MzFkcmF3RW1waGFzaXNNYXJr
c0ZvckNvbXBsZXhUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTjNX
VEYxMkF0b21pY1N0cmluZ0VSS05TXzEwRmxvYXRQb2ludEVpaQorX19aTks3V2ViQ29yZTRGb250
MzFkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzdUZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSS05TXzEzR3JhcGhpY3NQb2ludEVp
aQogX19aTjdXZWJDb3JlTDE5bm9ybWFsaXplQ2hhcmFjdGVyc0VQS3RqUk4zV1RGNlZlY3Rvckl0
TG0wRUVFCiBfX1pON1dlYkNvcmUxMVJlbmRlclN0eWxlOXNldExvY2FsZUVSS04zV1RGMTJBdG9t
aWNTdHJpbmdFCiBfX1pON1dlYkNvcmUxMVJlbmRlclN0eWxlMTBzZXRIeXBoZW5zRU5TXzdIeXBo
ZW5zRQpAQCAtMjY0OTAsMTAgKzI2NDkwLDEwIEBAIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUy
NHNldEh5cGhlbmF0aW8KIF9fWk4zV1RGMTFWZWN0b3JNb3ZlcklMYjBFU3Q0cGFpcklOU18xMkF0
b21pY1N0cmluZ0VOU185UmV0YWluUHRySVBLMTBfX0NGTG9jYWxlRUVFRTE1bW92ZU92ZXJsYXBw
aW5nRVBLUzhfU0JfUFM4XwogX19aTjNXVEYxMVZlY3Rvck1vdmVySUxiMEVTdDRwYWlySU5TXzEy
QXRvbWljU3RyaW5nRU5TXzlSZXRhaW5QdHJJUEsxMF9fQ0ZMb2NhbGVFRUVFNG1vdmVFUEtTOF9T
Ql9QUzhfCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxM2lzQ29tYmluZVRleHRFdgotX19a
TjNXVEY5SGFzaFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMy
XzlGbG9hdFJlY3RFRTE2R2x5cGhNZXRyaWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJ
UzhfRUVOU183SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lp
RUVOU0VfSVM3X0VFRUVTRl9FMTZsb29rdXBGb3JXcml0aW5nRVJLaQotX19aTjNXVEY5SGFzaFRh
YmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzlGbG9hdFJlY3RF
RTE2R2x5cGhNZXRyaWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183SW50
SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3X0VF
RUVTRl9FM2FkZElpUzdfTlNfMTdIYXNoTWFwVHJhbnNsYXRvcklTOF9TSF9TQ19FRUVFUzFfSU5T
XzE3SGFzaFRhYmxlSXRlcmF0b3JJaVM4X1NBX1NDX1NIX1NGX0VFYkVSS1RfUktUMF8KLV9fWk4z
V1RGOUhhc2hUYWJsZUlpU3Q0cGFpcklpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TMl85
RmxvYXRSZWN0RUUxNkdseXBoTWV0cmljc1BhZ2VFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM4
X0VFTlNfN0ludEhhc2hJakVFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJaUVF
TlNFX0lTN19FRUVFU0ZfRTRmaW5kSWlOU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJaVM4X1ND
X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySWlTOF9TQV9TQ19TSF9TRl9FRVJLVF8KLV9fWk4z
V1RGOUhhc2hUYWJsZUlpU3Q0cGFpcklpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TMl85
RmxvYXRSZWN0RUUxNkdseXBoTWV0cmljc1BhZ2VFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM4
X0VFTlNfN0ludEhhc2hJakVFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJaUVF
TlNFX0lTN19FRUVFU0ZfRTZyZWhhc2hFaQorX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRwYWlySWlQ
TjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzEyR3JhcGhpY3NSZWN0RUUxNkdseXBoTWV0
cmljc1BhZ2VFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM4X0VFTlNfN0ludEhhc2hJakVFTlNf
MTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJaUVFTlNFX0lTN19FRUVFU0ZfRTE2bG9v
a3VwRm9yV3JpdGluZ0VSS2kKK19fWk4zV1RGOUhhc2hUYWJsZUlpU3Q0cGFpcklpUE43V2ViQ29y
ZTE1R2x5cGhNZXRyaWNzTWFwSU5TMl8xMkdyYXBoaWNzUmVjdEVFMTZHbHlwaE1ldHJpY3NQYWdl
RUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOF9FRU5TXzdJbnRIYXNoSWpFRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TRV9JUzdfRUVFRVNGX0UzYWRkSWlTN19OU18x
N0hhc2hNYXBUcmFuc2xhdG9ySVM4X1NIX1NDX0VFRUVTMV9JTlNfMTdIYXNoVGFibGVJdGVyYXRv
cklpUzhfU0FfU0NfU0hfU0ZfRUViRVJLVF9SS1QwXworX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRw
YWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzEyR3JhcGhpY3NSZWN0RUUxNkds
eXBoTWV0cmljc1BhZ2VFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM4X0VFTlNfN0ludEhhc2hJ
akVFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJaUVFTlNFX0lTN19FRUVFU0Zf
RTRmaW5kSWlOU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJaVM4X1NDX0VFRUVOU18xN0hhc2hU
YWJsZUl0ZXJhdG9ySWlTOF9TQV9TQ19TSF9TRl9FRVJLVF8KK19fWk4zV1RGOUhhc2hUYWJsZUlp
U3Q0cGFpcklpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TMl8xMkdyYXBoaWNzUmVjdEVF
MTZHbHlwaE1ldHJpY3NQYWdlRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOF9FRU5TXzdJbnRI
YXNoSWpFRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TRV9JUzdfRUVF
RVNGX0U2cmVoYXNoRWkKIF9fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU43V2ViQ29yZTIxQ29t
cGxleFRleHRDb250cm9sbGVyMTRDb21wbGV4VGV4dFJ1bkVFRUxtMTZFRTE1cmVzZXJ2ZUNhcGFj
aXR5RW0KIF9fWk43V2ViQ29yZTE4UmVuZGVyTGF5ZXJCYWNraW5nMTl1cGRhdGVDb250ZW50c1Nj
YWxlRWYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTl1cGRhdGVDb250ZW50c1NjYWxl
RXYKQEAgLTI3NzMyLDggKzI3NzMyLDggQEAgX19aTjdXZWJDb3JlMTdJbnNwZWN0b3JET01BZ2Vu
dDloaWdobGlnaAogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE3ZHJhd05vZGVI
aWdobGlnaHRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RQogX19aTks3V2ViQ29yZTE3SW5zcGVjdG9y
RE9NQWdlbnQxN2RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk43
V2ViQ29yZTE4RE9NTm9kZUhpZ2hsaWdodGVyMTdEcmF3Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFw
aGljc0NvbnRleHRFUE5TXzROb2RlRU5TMF8xM0hpZ2hsaWdodE1vZGVFCi1fX1pON1dlYkNvcmUx
Ml9HTE9CQUxfX05fMTI0ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzlGbG9hdFF1YWRFUzVfUktOU181Q29sb3JFCi1fX1pON1dlYkNvcmUxMl9HTE9C
QUxfX05fMTE2ZHJhd091dGxpbmVkUXVhZEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185Rmxv
YXRRdWFkRVJLTlNfNUNvbG9yRQorX19aTjdXZWJDb3JlMTJfR0xPQkFMX19OXzEyNGRyYXdPdXRs
aW5lZFF1YWRXaXRoQ2xpcEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUXVh
ZEVTNV9SS05TXzVDb2xvckUKK19fWk43V2ViQ29yZTEyX0dMT0JBTF9fTl8xMTZkcmF3T3V0bGlu
ZWRRdWFkRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NRdWFkRVJLTlNfNUNv
bG9yRQogX19aTjdXZWJDb3JlTDE4Z2V0SlNEYXRhYmFzZVRhYmxlRVBOM0pTQzlFeGVjU3RhdGVF
CiBfX1pON1dlYkNvcmU0N2pzSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlRnVuY3Rpb25EYXRh
YmFzZUlkRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyMEpTSW5qZWN0ZWRTY3JpcHRI
b3N0MTBkYXRhYmFzZUlkRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0yODY3MSwxMyArMjg2NzEsMTMg
QEAgX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxNmdldENvbgogX19aTjNKU0M4Qmlu
ZGluZ3NMMjJjYWxsUnVudGltZUNvbnN0cnVjdG9yRVBOU185RXhlY1N0YXRlRQogX19aTjdXZWJD
b3JlMTNJZGVudGlmaWVyUmVwM2dldEVpCiBfX1pON1dlYkNvcmVMMTBjYWxsUGx1Z2luRVBOM0pT
QzlFeGVjU3RhdGVFCi1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDIwcGFnZU51bWJlckZvckVs
ZW1lbnRFUE5TXzdFbGVtZW50RVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTVGcmFtZTEx
c2V0UHJpbnRpbmdFYlJLTlNfOUZsb2F0U2l6ZUVmTlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQor
X19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1iZXJGb3JFbGVtZW50RVBOU183RWxl
bWVudEVSS05TXzEyR3JhcGhpY3NTaXplRQorX19aTjdXZWJDb3JlNUZyYW1lMTFzZXRQcmludGlu
Z0ViUktOU18xMkdyYXBoaWNzU2l6ZUVmTlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQogX19aTjdX
ZWJDb3JlOUZyYW1lVmlldzI2YWRqdXN0TWVkaWFUeXBlRm9yUHJpbnRpbmdFYgotX19aTjdXZWJD
b3JlOUZyYW1lVmlldzI0Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uRVJLTlNfOUZsb2F0U2l6ZUVm
TlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQotX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQzNmNv
bXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbEVSS05TXzlGbG9hdFNpemVFYgorX19a
TjdXZWJDb3JlOUZyYW1lVmlldzI0Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uRVJLTlNfMTJHcmFw
aGljc1NpemVFZk5TXzE5QWRqdXN0Vmlld1NpemVPck5vdEUKK19fWk43V2ViQ29yZTEyUHJpbnRD
b250ZXh0MzZjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWxFUktOU18xMkdyYXBo
aWNzU2l6ZUViCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDViZWdpbkVmZgotX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHQxM251bWJlck9mUGFnZXNFUE5TXzVGcmFtZUVSS05TXzlGbG9hdFNp
emVFCitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDEzbnVtYmVyT2ZQYWdlc0VQTlNfNUZyYW1l
RVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI2cGFnZVNp
emVBbmRNYXJnaW5zSW5QaXhlbHNFUE5TXzVGcmFtZUVpaWlpaWlpCiBfX1pON1dlYkNvcmU4RG9j
dW1lbnQyNnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzRWlSTlNfN0ludFNpemVFUmlTM19TM19T
M18KIF9fWk43V2ViQ29yZTE2Q1NTU3R5bGVTZWxlY3RvcjEyc3R5bGVGb3JQYWdlRWkKQEAgLTI4
ODE2LDcgKzI4ODE2LDcgQEAgX19aTjdXZWJDb3JlMTh3cml0ZVNWR0lubGluZVRleHRFUk5TXzEw
VAogX19aTks3V2ViQ29yZTE5UmVuZGVyU1ZHSW5saW5lVGV4dDEwcmVuZGVyTmFtZUV2CiBfX1pO
SzdXZWJDb3JlMTlSZW5kZXJTVkdJbmxpbmVUZXh0MTZsaW5lc0JvdW5kaW5nQm94RXYKIF9fWk5L
N1dlYkNvcmUxMFJlbmRlclRleHQxNGZpcnN0UnVuT3JpZ2luRXYKLV9fWk43V2ViQ29yZWxzRVJO
U18xMFRleHRTdHJlYW1FUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlbHNFUk5TXzEwVGV4
dFN0cmVhbUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTJoYXNGcmFjdGlvbnNF
ZAogX19aTjdXZWJDb3JlMTBUZXh0U3RyZWFtbHNFagogX19aTjdXZWJDb3JlMTN3cml0ZVNWR0lt
YWdlRVJOU18xMFRleHRTdHJlYW1FUktOU18xNFJlbmRlclNWR0ltYWdlRWkKQEAgLTI4OTU3LDcg
KzI4OTU3LDcgQEAgX19aTks3V2ViQ29yZTRGb250MjJmbG9hdFdpZHRoVXNpbmdTVkdGbwogX19a
Tks3V2ViQ29yZTRGb250N3N2Z0ZvbnRFdgogX19aTks3V2ViQ29yZTE0U1ZHRm9udEVsZW1lbnQ0
Mmhvcml6b250YWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBoc0VSS04zV1RGNlN0cmlu
Z0VTNF9TNF9TNF8KIF9fWk43V2ViQ29yZUwzMmtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5
cGhzRVJOM1dURjZWZWN0b3JJTlNfMTRTVkdLZXJuaW5nUGFpckVMbTBFRUVSS05TMF82U3RyaW5n
RVM3X1M3X1M3XwotX19aTks3V2ViQ29yZTRGb250MjBkcmF3VGV4dFVzaW5nU1ZHRm9udEVQTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaQorX19a
Tks3V2ViQ29yZTRGb250MjBkcmF3VGV4dFVzaW5nU1ZHRm9udEVQTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU183VGV4dFJ1bkVSS05TXzEzR3JhcGhpY3NQb2ludEVpaQogX19aTjdXZWJDb3JlMTZT
VkdUZXh0UnVuV2Fsa2VySU5TXzI4U1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YUVFNHdhbGtF
UktOU183VGV4dFJ1bkViUktOM1dURjZTdHJpbmdFaWkKIF9fWk43V2ViQ29yZUwyOGRyYXdUZXh0
VXNpbmdTVkdGb250Q2FsbGJhY2tFUktOU184U1ZHR2x5cGhFUk5TXzI4U1ZHVGV4dFJ1bldhbGtl
ckRyYXdUZXh0RGF0YUUKIF9fWk43V2ViQ29yZTI4U1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0
YUQxRXYKQEAgLTI5MDQyLDEwICsyOTA0MiwxMCBAQCBfX1pOSzdXZWJDb3JlMTRTVkdQYXRoRWxl
bWVudDE1c3VwcG9ydHNNCiBfX1pON1dlYkNvcmUxOVNWR01hcmtlckxheW91dEluZm8xOWNhbGN1
bGF0ZUJvdW5kYXJpZXNFUE5TXzIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXJFUzJfUzJfZlJLTlNf
NFBhdGhFCiBfX1pON1dlYkNvcmVMMjVwcm9jZXNzU3RhcnRBbmRNaWRNYXJrZXJzRVB2UEtOU18x
MVBhdGhFbGVtZW50RQogX19aTjdXZWJDb3JlMTNTVkdNYXJrZXJEYXRhMzB1cGRhdGVNYXJrZXJE
YXRhRm9yUGF0aEVsZW1lbnRFUEtOU18xMVBhdGhFbGVtZW50RQotX19aTjdXZWJDb3JlMTlTVkdN
YXJrZXJMYXlvdXRJbmZvMTdhZGRMYXlvdXRlZE1hcmtlckVQTlNfMjNSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlckVSS05TXzEwRmxvYXRQb2ludEVmCi1fX1pOSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlcjIwbWFya2VyVHJhbnNmb3JtYXRpb25FUktOU18xMEZsb2F0UG9pbnRFZmYKK19f
Wk43V2ViQ29yZTE5U1ZHTWFya2VyTGF5b3V0SW5mbzE3YWRkTGF5b3V0ZWRNYXJrZXJFUE5TXzIz
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXJFUktOU18xM0dyYXBoaWNzUG9pbnRFZgorX19aTks3V2Vi
Q29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIyMG1hcmtlclRyYW5zZm9ybWF0aW9uRVJLTlNf
MTNHcmFwaGljc1BvaW50RWZmCiBfX1pOSzdXZWJDb3JlOFNWR0FuZ2xlNXZhbHVlRXYKLV9fWk5L
N1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFya2VyMjdtYXJrZXJDb250ZW50VHJhbnNmb3Jt
YXRpb25FUktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzEwRmxvYXRQb2ludEVmCitfX1pOSzdX
ZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjI3bWFya2VyQ29udGVudFRyYW5zZm9ybWF0
aW9uRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU18xM0dyYXBoaWNzUG9pbnRFZgogX19aTks3
V2ViQ29yZTE2U1ZHTWFya2VyRWxlbWVudDIydmlld0JveFRvVmlld1RyYW5zZm9ybUVmZgogX19a
TjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyTWFya2VyTGF5b3V0RUxtMEVFMTVyZXNlcnZlQ2FwYWNp
dHlFbQogX19aTks3V2ViQ29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIyMmxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm1FdgpAQCAtMjkwNTMsNyArMjkwNTMsNyBAQCBfX1pON1dlYkNvcmUyM1JlbmRl
clNWR1Jlc291cmNlTWFya2VyMjFyCiBfX1pON1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFy
a2VyMTdhcHBseVZpZXdwb3J0Q2xpcEVSTlNfOVBhaW50SW5mb0UKIF9fWk43V2ViQ29yZTI1d3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lckVSTlNfMTBUZXh0U3RyZWFtRVJLTlNfMTJSZW5kZXJPYmpl
Y3RFaQogX19aTks3V2ViQ29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIxMHJlbmRlck5hbWVF
dgotX19aTjdXZWJDb3JlbHNFUk5TXzEwVGV4dFN0cmVhbUVSS05TXzEwRmxvYXRQb2ludEUKK19f
Wk43V2ViQ29yZWxzRVJOU18xMFRleHRTdHJlYW1FUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pO
N1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFya2VyMjVyZW1vdmVBbGxDbGllbnRzRnJvbUNh
Y2hlRWIKIF9fWk43V2ViQ29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXJEMEV2CiBfX1pON1dl
YkNvcmUyN2pzU1ZHUGF0aEVsZW1lbnRQYXRoU2VnTGlzdEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83
SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCkBAIC0yOTA4NSw3ICsyOTA4NSw3IEBAIF9fWk43
V2ViQ29yZTIwU1ZHUGF0aFBhcnNlckZhY3Rvcnk0MGJ1aWwKIF9fWk43V2ViQ29yZTIwU1ZHUGF0
aFNlZ0xpc3RTb3VyY2VDMUVSS05TXzE0U1ZHUGF0aFNlZ0xpc3RFCiBfX1pON1dlYkNvcmUyMFNW
R1BhdGhTZWdMaXN0U291cmNlMTVtb3ZlVG9OZXh0VG9rZW5FdgogX19aTjdXZWJDb3JlMjBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTE5cGFyc2VTVkdTZWdtZW50VHlwZUVSTlNfMTRTVkdQYXRoU2VnVHlw
ZUUKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFNlZ0xpc3RTb3VyY2UxOHBhcnNlTW92ZVRvU2VnbWVu
dEVSTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJjZTE4
cGFyc2VNb3ZlVG9TZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pOSzdXZWJDb3JlMjBT
VkdQYXRoU2VnTGlzdFNvdXJjZTExaGFzTW9yZURhdGFFdgogX19aTjdXZWJDb3JlMjBTVkdQYXRo
U2VnTGlzdFNvdXJjZUQwRXYKIF9fWk43V2ViQ29yZTY0anNTVkdQYXRoRWxlbWVudFByb3RvdHlw
ZUZ1bmN0aW9uQ3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fic0VQTjNKU0M5RXhlY1N0YXRl
RQpAQCAtMjkwOTQsNyArMjkwOTQsNyBAQCBfX1pOSzdXZWJDb3JlMjVTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzCiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMjdKU1NWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNBYnNFTlNfMjVTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzRUVFUE5TXzEySlNE
T01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwog
X19aTjdXZWJDb3JlMjdKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnNDMUVQTjNKU0M5U3RydWN0
dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzI1U1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0Fic0VFRQogX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTExbmV4dENvbW1hbmRFTlNfMTRTVkdQYXRoU2VnVHlwZUUKLV9fWk43V2ViQ29yZTIwU1ZHUGF0
aFNlZ0xpc3RTb3VyY2UyNHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50
RVMyX1MyXworX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJjZTI0cGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFUzJfUzJfCiBfX1pON1dlYkNvcmU1OGpz
U1ZHUGF0aEVsZW1lbnRQcm90b3R5cGVGdW5jdGlvbkNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGhF
UE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE0U1ZHUGF0aEVsZW1lbnQyNWNyZWF0ZVNW
R1BhdGhTZWdDbG9zZVBhdGhFTlNfMTRTVkdQYXRoU2VnUm9sZUUKIF9fWk5LN1dlYkNvcmUxOVNW
R1BhdGhTZWdDbG9zZVBhdGgxMXBhdGhTZWdUeXBlRXYKQEAgLTI5MTMzLDcgKzI5MTMzLDcgQEAg
X19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTRTVkdQYQogX19aTjdXZWJDb3JlNDNq
c1NWR1BhdGhTZWdMaXN0UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVJdGVtRVBOM0pTQzlFeGVjU3Rh
dGVFCiBfX1pON1dlYkNvcmUyOVNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmMTByZW1vdmVJ
dGVtRWpSaQogX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTRTVkdQYXRoU2VnTGlz
dEVFMTZyZW1vdmVJdGVtVmFsdWVzRVJTMV9qUmkKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmlu
Z0J1aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEwRmxvYXRQb2ludEVTM19TM19OU18xOFBhdGhD
b29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIxMmN1cnZl
VG9DdWJpY0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19TM19OU18xOFBhdGhDb29yZGluYXRlTW9k
ZUUKIF9fWk43V2ViQ29yZThTVkdQYWludDE3Y3JlYXRlVVJJQW5kQ29sb3JFUktOM1dURjZTdHJp
bmdFUktOU181Q29sb3JFCiBfX1pOSzdXZWJDb3JlMzFSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdy
YWRpZW50MTByZW5kZXJOYW1lRXYKIF9fWk43V2ViQ29yZUwyOXdyaXRlQ29tbW9uR3JhZGllbnRQ
cm9wZXJ0aWVzRVJOU18xMFRleHRTdHJlYW1FTlNfMjBHcmFkaWVudFNwcmVhZE1ldGhvZEVSS05T
XzE1QWZmaW5lVHJhbnNmb3JtRWIKQEAgLTI5MTY4LDEzICsyOTE2OCwxMyBAQCBfX1pOM1dURjlI
YXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2JqCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8xMVBhdHRlcm5EYXRhRUVOU18xOFBh
aXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0
c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FNGZpbmRJUzNfTlNfMjJJZGVu
dGl0eUhhc2hUcmFuc2xhdG9ySVMzX1M3X1NCX0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMz
X1M3X1M5X1NCX1NHX1NFX0VFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxMlJl
bmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFQYXR0ZXJuRGF0YUVFTlNfMThQYWlyRmlyc3RF
eHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBI
YXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTZsb29rdXBFUktTM18KIF9fWk4zV1RGOUhh
c2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExUGF0dGVy
bkRhdGFFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U2cmVo
YXNoRWkKLV9fWk5LN1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjIzYnVpbGRUaWxl
SW1hZ2VUcmFuc2Zvcm1FUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfMTdQYXR0ZXJuQXR0cmlidXRl
c0VQS05TXzE3U1ZHUGF0dGVybkVsZW1lbnRFUk5TXzlGbG9hdFJlY3RFUk5TXzE1QWZmaW5lVHJh
bnNmb3JtRQorX19aTks3V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMjNidWlsZFRp
bGVJbWFnZVRyYW5zZm9ybUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU18xN1BhdHRlcm5BdHRyaWJ1
dGVzRVBLTlNfMTdTVkdQYXR0ZXJuRWxlbWVudEVSTlNfMTJHcmFwaGljc1JlY3RFUk5TXzE1QWZm
aW5lVHJhbnNmb3JtRQogX19aTks3V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMTBy
ZW5kZXJOYW1lRXYKIF9fWk4zV1RGMjBkZWxldGVBbGxQYWlyU2Vjb25kc0lQTjdXZWJDb3JlMTFQ
YXR0ZXJuRGF0YUVLTlNfN0hhc2hNYXBJUE5TMV8xMlJlbmRlck9iamVjdEVTM19OU183UHRySGFz
aElTNl9FRU5TXzEwSGFzaFRyYWl0c0lTNl9FRU5TOV9JUzNfRUVFRUVFdlJUMF8KIF9fWk43V2Vi
Q29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuRDBFdgotX19aVGhuMzIwX043V2ViQ29yZTE3
U1ZHUGF0dGVybkVsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU185RmxvYXRSZWN0RQor
X19aVGhuMzIwX043V2ViQ29yZTE3U1ZHUGF0dGVybkVsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFs
dWVFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWlRobjE2OF9ON1dlYkNvcmUxN1NWR1BhdHRlcm5F
bGVtZW50MTZzZXRIcmVmQmFzZVZhbHVlRVJLTjNXVEY2U3RyaW5nRQotX19aTks3V2ViQ29yZTI0
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMTVjcmVhdGVUaWxlSW1hZ2VFUE5TXzEyUmVuZGVyT2Jq
ZWN0RVJLTlNfMTdQYXR0ZXJuQXR0cmlidXRlc0VSS05TXzlGbG9hdFJlY3RFUzhfUktOU18xNUFm
ZmluZVRyYW5zZm9ybUUKK19fWk5LN1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjE1
Y3JlYXRlVGlsZUltYWdlRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzE3UGF0dGVybkF0dHJpYnV0
ZXNFUktOU18xMkdyYXBoaWNzUmVjdEVTOF9SS05TXzE1QWZmaW5lVHJhbnNmb3JtRQogX19aTjdX
ZWJDb3JlN1BhdHRlcm4yNHNldFBhdHRlcm5TcGFjZVRyYW5zZm9ybUVSS05TXzE1QWZmaW5lVHJh
bnNmb3JtRQogX19aVGhuMTI4X043V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMTdw
b3N0QXBwbHlSZXNvdXJjZUVQTlNfMTJSZW5kZXJPYmplY3RFUlBOU18xNUdyYXBoaWNzQ29udGV4
dEV0UEtOU180UGF0aEUKIF9fWk5LM1dURjlIYXNoVGFibGVJUEtON1dlYkNvcmUxN1NWR1BhdHRl
cm5FbGVtZW50RVM0X05TXzE3SWRlbnRpdHlFeHRyYWN0b3JJUzRfRUVOU183UHRySGFzaElTNF9F
RU5TXzEwSGFzaFRyYWl0c0lTNF9FRVNBX0U4Y29udGFpbnNJUzRfTlNfMjJJZGVudGl0eUhhc2hU
cmFuc2xhdG9ySVM0X1M0X1M4X0VFRUViUktUXwpAQCAtMjkzMTQsMTUgKzI5MzE0LDE1IEBAIF9f
Wk43V2ViQ29yZTE1anNTVkdBbmdsZVZhbHVlRVBOM0pTQzlFeGUKIF9fWk43V2ViQ29yZTE4anNT
VkdBbmdsZVVuaXRUeXBlRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRl
bnRpZmllckUKIF9fWk43V2ViQ29yZTIyanNTVkdTVkdFbGVtZW50Vmlld0JveEVQTjNKU0M5RXhl
Y1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUxM1NW
R1NWR0VsZW1lbnQxNXZpZXdCb3hBbmltYXRlZEV2Ci1fX1pON1dlYkNvcmUxOVNWR0FuaW1hdGVk
UHJvcGVydHkyMWxvb2t1cE9yQ3JlYXRlV3JhcHBlcklOU18yNlNWR0FuaW1hdGVkUHJvcGVydHlU
ZWFyT2ZmSU5TXzlGbG9hdFJlY3RFRUVTM19FRU4zV1RGMTBQYXNzUmVmUHRySVRfRUVQTlNfMTBT
VkdFbGVtZW50RVJLTlNfMTNRdWFsaWZpZWROYW1lRVJLTlM1XzEyQXRvbWljU3RyaW5nRVJUMF8K
LV9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmpl
Y3RFUE5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVFRQotX19a
TjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzE3SlNTVkdBbmltYXRlZFJlY3RFTlNfMjZTVkdB
bmltYXRlZFByb3BlcnR5VGVhck9mZklOU185RmxvYXRSZWN0RUVFRUVQTlNfMTJKU0RPTVdyYXBw
ZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCitfX1pON1dl
YkNvcmUxOVNWR0FuaW1hdGVkUHJvcGVydHkyMWxvb2t1cE9yQ3JlYXRlV3JhcHBlcklOU18yNlNW
R0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhpY3NSZWN0RUVFUzNfRUVOM1dURjEw
UGFzc1JlZlB0cklUX0VFUE5TXzEwU1ZHRWxlbWVudEVSS05TXzEzUXVhbGlmaWVkTmFtZUVSS05T
NV8xMkF0b21pY1N0cmluZ0VSVDBfCitfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18yNlNWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2Zm
SU5TXzEyR3JhcGhpY3NSZWN0RUVFCitfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTdK
U1NWR0FuaW1hdGVkUmVjdEVOU18yNlNWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3Jh
cGhpY3NSZWN0RUVFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdK
U0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dlYkNvcmUxN0pTU1ZHQW5pbWF0ZWRSZWN0MThn
ZXRPd25Qcm9wZXJ0eVNsb3RFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFUk5T
MV8xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMThnZXRTdGF0aWNWYWx1ZVNsb3RJTjdXZWJDb3Jl
MTdKU1NWR0FuaW1hdGVkUmVjdEVOUzFfMTJKU0RPTVdyYXBwZXJFRUViUE5TXzlFeGVjU3RhdGVF
UEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
IF9fWk43V2ViQ29yZTI0anNTVkdBbmltYXRlZFJlY3RCYXNlVmFsRVBOM0pTQzlFeGVjU3RhdGVF
TlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKLV9fWk43V2ViQ29yZTI2U1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVFN2Jhc2VWYWxFdgotX19aTjdXZWJDb3Jl
NHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMThTVkdQ
cm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVFRQotX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFw
cGVySU5TXzlKU1NWR1JlY3RFTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVF
RUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxP
YmplY3RFUFQwXworX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZklOU18x
MkdyYXBoaWNzUmVjdEVFN2Jhc2VWYWxFdgorX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNf
MTJHcmFwaGljc1JlY3RFRUUKK19fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU185SlNTVkdS
ZWN0RU5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhpY3NSZWN0RUVFRUVQTlNfMTJK
U0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBf
CiBfX1pON1dlYkNvcmU5SlNTVkdSZWN0MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE4zSlNDOUV4ZWNT
dGF0ZUVSS05TMV8xMElkZW50aWZpZXJFUk5TMV8xMlByb3BlcnR5U2xvdEUKIF9fWk4zSlNDMThn
ZXRTdGF0aWNWYWx1ZVNsb3RJTjdXZWJDb3JlOUpTU1ZHUmVjdEVOUzFfMTJKU0RPTVdyYXBwZXJF
RUViUE5TXzlFeGVjU3RhdGVFUEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJO
U18xMlByb3BlcnR5U2xvdEUKIF9fWk43V2ViQ29yZTEwanNTVkdSZWN0WEVQTjNKU0M5RXhlY1N0
YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCkBAIC0yOTM5Nyw3ICsyOTM5Nyw3
IEBAIF9fWk43V2ViQ29yZTEyU1ZHTG9jYXRhYmxlMjNmYXJ0aGVzdFZpZXcKIF9fWk43V2ViQ29y
ZTQwanNTVkdDaXJjbGVFbGVtZW50TmVhcmVzdFZpZXdwb3J0RWxlbWVudEVQTjNKU0M5RXhlY1N0
YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pOSzdXZWJDb3JlMjlTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDIybmVhcmVzdFZpZXdwb3J0RWxlbWVudEV2CiBfX1pO
N1dlYkNvcmUyNlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyMTdhcHBseVZpZXdwb3J0Q2xpcEVS
TlNfOVBhaW50SW5mb0UKLV9fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9h
dFJlY3RFRUQwRXYKK19fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhp
Y3NSZWN0RUVEMEV2CiBfX1pON1dlYkNvcmU4U1ZHQW5nbGUxNnNldFZhbHVlQXNTdHJpbmdFUktO
M1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTMzanNTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
Um90YXRlRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUK
IF9fWk43V2ViQ29yZTI1U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDE0cm90YXRlQW5pbWF0ZWRF
dgpAQCAtMjk0MjEsNyArMjk0MjEsNyBAQCBfX1pON1dlYkNvcmUzMGpzU1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0QW5pCiBfX1pON1dlYkNvcmUyNWpzU1ZHQW5pbWF0ZWRBbmdsZUFuaW1WYWxFUE4zSlND
OUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3Jl
MjZTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZklOU184U1ZHQW5nbGVFRTdhbmltVmFsRXYKIF9f
Wk43V2ViQ29yZTI0anNTVkdBbmltYXRlZFJlY3RBbmltVmFsRVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKLV9fWk43V2ViQ29yZTI2U1ZHQW5pbWF0ZWRQ
cm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVFN2FuaW1WYWxFdgorX19aTjdXZWJDb3JlMjZT
VkdBbmltYXRlZFByb3BlcnR5VGVhck9mZklOU18xMkdyYXBoaWNzUmVjdEVFN2FuaW1WYWxFdgog
X19aTjdXZWJDb3JlMjdqc1NWR0NpcmNsZUVsZW1lbnRUcmFuc2Zvcm1FUE4zSlNDOUV4ZWNTdGF0
ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMzNqc1NWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdEFuaW1WYWxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVF
UktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMzlqc1NWR0FuaW1hdGVkUHJlc2VydmVB
c3BlY3RSYXRpb0FuaW1WYWxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJ
ZGVudGlmaWVyRQpAQCAtMjk0OTUsNyArMjk0OTUsNyBAQCBfX1pON1dlYkNvcmUxOHNldEpTU1ZH
QW5nbGVWYWx1ZUVQTjNKU0M5CiBfX1pON1dlYkNvcmU5SlNTVkdSZWN0M3B1dEVQTjNKU0M5RXhl
Y1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5
U2xvdEUKIF9fWk4zSlNDOWxvb2t1cFB1dElON1dlYkNvcmU5SlNTVkdSZWN0RUVFYlBOU185RXhl
Y1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVBLTlNfOUhhc2hUYWJsZUVQVF8K
IF9fWk43V2ViQ29yZTEzc2V0SlNTVkdSZWN0WEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2Jq
ZWN0RU5TMF83SlNWYWx1ZUUKLV9fWk5LN1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU185
RmxvYXRSZWN0RUU0cm9sZUV2CitfX1pOSzdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNf
MTJHcmFwaGljc1JlY3RFRTRyb2xlRXYKIF9fWk43V2ViQ29yZTQwanNTVkdUcmFuc2Zvcm1MaXN0
UHJvdG90eXBlRnVuY3Rpb25DbGVhckVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRK
U1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8zcHV0RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVu
dGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M5bG9v
a3VwUHV0SU43V2ViQ29yZTI0SlNTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvRUVFYlBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVBLTlNfOUhhc2hUYWJsZUVQVF8KQEAg
LTI5NTE4LDcgKzI5NTE4LDcgQEAgX19aTjdXZWJDb3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDE2cgogX19aTjdXZWJDb3JlMjlTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDIxc3VwcGxl
bWVudGFsVHJhbnNmb3JtRXYKIF9fWk5LN1dlYkNvcmUyM1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
MTNhbmltYXRpb25QYXRoRXYKIF9fWk43V2ViQ29yZTIzU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQy
NGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlc0VSS04zV1RGNlN0cmluZ0VTNF8KLV9fWk43V2ViQ29y
ZUwxMHBhcnNlUG9pbnRFUktOM1dURjZTdHJpbmdFUk5TXzEwRmxvYXRQb2ludEUKK19fWk43V2Vi
Q29yZUwxMHBhcnNlUG9pbnRFUktOM1dURjZTdHJpbmdFUk5TXzEzR3JhcGhpY3NQb2ludEUKIF9f
Wk43V2ViQ29yZTIzU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQyMmNhbGN1bGF0ZUFuaW1hdGVkVmFs
dWVFZmpQTlNfMTRTVkdTTUlMRWxlbWVudEUKIF9fWk43V2ViQ29yZTIzU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQyMGFwcGx5UmVzdWx0c1RvVGFyZ2V0RXYKIF9fWk43V2ViQ29yZTE1U1ZHR2x5cGhF
bGVtZW50MTlyZW1vdmVkRnJvbURvY3VtZW50RXYKQEAgLTI5NTk5LDcgKzI5NTk5LDcgQEAgX19a
TjdXZWJDb3JlMjZTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudAogX19aTjdXZWJDb3JlMjBTVkdU
cmFuc2Zvcm1EaXN0YW5jZUMxRVJLTlNfMTJTVkdUcmFuc2Zvcm1FUzNfCiBfX1pON1dlYkNvcmUy
MFNWR1RyYW5zZm9ybURpc3RhbmNlQzJFUktOU18xMlNWR1RyYW5zZm9ybUVTM18KIF9fWk5LN1dl
YkNvcmUxMlNWR1RyYW5zZm9ybTVzY2FsZUV2Ci1fX1pON1dlYkNvcmU5RmxvYXRTaXplMTVuYXJy
b3dQcmVjaXNpb25FZGQKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NTaXplMTVuYXJyb3dQcmVjaXNp
b25FZGQKIF9fWk5LN1dlYkNvcmUyMFNWR1RyYW5zZm9ybURpc3RhbmNlMTRzY2FsZWREaXN0YW5j
ZUVmCiBfX1pOSzdXZWJDb3JlMjBTVkdUcmFuc2Zvcm1EaXN0YW5jZTE3YWRkVG9TVkdUcmFuc2Zv
cm1FUktOU18xMlNWR1RyYW5zZm9ybUUKIF9fWk43V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQyNmF0
dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwRXYKQEAgLTI5NjA5LDcgKzI5NjA5LDcgQEAgX19aTjdX
ZWJDb3JlMTVTVkdJbWFnZUVsZW1lbnQzMGZpbGxBdHRyaQogX19aTjdXZWJDb3JlMTNTVkdVc2VF
bGVtZW50MjZhdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcEV2CiBfX1pON1dlYkNvcmUxM1NWR1Vz
ZUVsZW1lbnQzMGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcEV2CiBfX1pOSzdXZWJDb3Jl
MTJTVkdUcmFuc2Zvcm05dHJhbnNsYXRlRXYKLV9fWk43V2ViQ29yZTEwRmxvYXRQb2ludDE1bmFy
cm93UHJlY2lzaW9uRWRkCitfX1pON1dlYkNvcmUxM0dyYXBoaWNzUG9pbnQxNW5hcnJvd1ByZWNp
c2lvbkVkZAogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm05c2V0TWF0cml4RWRkZGRkZAog
X19aTjdXZWJDb3JlMTBUcmVlU2hhcmVkSU5TXzE4U1ZHRWxlbWVudEluc3RhbmNlRUUxNHJlbW92
ZWRMYXN0UmVmRXYKIF9fWk43V2ViQ29yZTE4U1ZHRWxlbWVudEluc3RhbmNlRDBFdgpAQCAtMjk2
NjcsMTEgKzI5NjY3LDExIEBAIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtNXNrZXdYRWQK
IF9fWk43V2ViQ29yZTEyU1ZHVHJhbnNmb3JtOHNldFNrZXdZRWYKIF9fWk43V2ViQ29yZTE1QWZm
aW5lVHJhbnNmb3JtNXNrZXdZRWQKIF9fWk43V2ViQ29yZTI2U1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQxN2NhbGN1bGF0ZURpc3RhbmNlRVJLTjNXVEY2U3RyaW5nRVM0XwotX19aTjdXZWJDb3Jl
MjBTVkdQYXRoU3RyaW5nQnVpbGRlcjE4Y3VydmVUb0N1YmljU21vb3RoRVJLTlNfMTBGbG9hdFBv
aW50RVMzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjBTVkdQYXRoU3Ry
aW5nQnVpbGRlcjE4Y3VydmVUb0N1YmljU21vb3RoRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX05T
XzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRl
cjE0bGluZVRvVmVydGljYWxFZk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3Jl
MjBTVkdQYXRoU3RyaW5nQnVpbGRlcjE2bGluZVRvSG9yaXpvbnRhbEVmTlNfMThQYXRoQ29vcmRp
bmF0ZU1vZGVFCi1fX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMTZjdXJ2ZVRvUXVh
ZHJhdGljRVJLTlNfMTBGbG9hdFBvaW50RVMzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQotX19a
TjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRlcjIyY3VydmVUb1F1YWRyYXRpY1Ntb290aEVS
S05TXzEwRmxvYXRQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIw
U1ZHUGF0aFN0cmluZ0J1aWxkZXIxNmN1cnZlVG9RdWFkcmF0aWNFUktOU18xM0dyYXBoaWNzUG9p
bnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJp
bmdCdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTNHcmFwaGljc1BvaW50RU5T
XzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTBTVkdFbGVtZW50MjZhdHRyaWJ1
dGVUb1Byb3BlcnR5VHlwZU1hcEV2CiBfX1pON1dlYkNvcmUxMFNWR0VsZW1lbnQzMGZpbGxBdHRy
aWJ1dGVUb1Byb3BlcnR5VHlwZU1hcEV2CiBfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlOFNWR0ds
eXBoMTBBcmFiaWNGb3JtRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQpAQCAtMjk3MTMsNyArMjk3
MTMsNyBAQCBfX1pON1dlYkNvcmVMMTV2aWV3Q29uc3RydWN0b3JFUktOU18xM1F1CiBfX1pON1dl
YkNvcmUxNFNWR1ZpZXdFbGVtZW50NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERv
Y3VtZW50RQogX19aTjdXZWJDb3JlMTRTVkdWaWV3RWxlbWVudDIwcGFyc2VNYXBwZWRBdHRyaWJ1
dGVFUE5TXzlBdHRyaWJ1dGVFCiBfX1pON1dlYkNvcmUxNFNWR1ZpZXdFbGVtZW50MTZyZW5kZXJl
cklzTmVlZGVkRVBOU18xMVJlbmRlclN0eWxlRQotX19aVGhuMTc2X043V2ViQ29yZTE0U1ZHVmll
d0VsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU185RmxvYXRSZWN0RQorX19aVGhuMTc2
X043V2ViQ29yZTE0U1ZHVmlld0VsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU18xMkdy
YXBoaWNzUmVjdEUKIF9fWlRobjE3Nl9ON1dlYkNvcmUxNFNWR1ZpZXdFbGVtZW50MzFzZXRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlRVJLTlNfMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvRQog
X19aTjdXZWJDb3JlMTRTVkdWaWV3RWxlbWVudEQwRXYKIF9fWk43V2ViQ29yZTE4U1ZHQ2xpcFBh
dGhFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJpYnV0ZUVQTlNfOUF0dHJpYnV0ZUUKQEAgLTI5NzI3
LDE1ICsyOTcyNywxNSBAQCBfX1pON1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjMx
CiBfX1pON1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjIxcmVtb3ZlQ2xpZW50RnJv
bUNhY2hlRVBOU18xMlJlbmRlck9iamVjdEViCiBfX1pOSzNXVEY5SGFzaFRhYmxlSVBON1dlYkNv
cmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVFTlNfMThQYWly
Rmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJ
TlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRThjb250YWluc0lTM19OU18yMklk
ZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNfUzdfU0JfRUVFRWJSS1RfCiBfX1pON1dlYkNvcmUyNFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjEzYXBwbHlSZXNvdXJjZUVQTlNfMTJSZW5kZXJPYmplY3RF
UE5TXzExUmVuZGVyU3R5bGVFUlBOU18xNUdyYXBoaWNzQ29udGV4dEV0Ci1fX1pON1dlYkNvcmUy
NFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjIyYXBwbHlDbGlwcGluZ1RvQ29udGV4dEVQTlNfMTJS
ZW5kZXJPYmplY3RFUktOU185RmxvYXRSZWN0RVM1X1BOU18xNUdyYXBoaWNzQ29udGV4dEUKK19f
Wk43V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMjJhcHBseUNsaXBwaW5nVG9Db250
ZXh0RVBOU18xMlJlbmRlck9iamVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X1BOU18xNUdyYXBo
aWNzQ29udGV4dEUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RF
U3Q0cGFpcklTM19QTlMxXzExQ2xpcHBlckRhdGFFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3
X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lT
M19FRU5TRF9JUzZfRUVFRVNFX0UxNmxvb2t1cEZvcldyaXRpbmdFUktTM18KIF9fWk4zV1RGOUhh
c2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExQ2xpcHBl
ckRhdGFFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0UzYWRk
SVMzX1M2X05TXzE3SGFzaE1hcFRyYW5zbGF0b3JJUzdfU0dfU0JfRUVFRVM0X0lOU18xN0hhc2hU
YWJsZUl0ZXJhdG9ySVMzX1M3X1M5X1NCX1NHX1NFX0VFYkVSS1RfUktUMF8KIF9fWk4zV1RGOUhh
c2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExQ2xpcHBl
ckRhdGFFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U0Zmlu
ZElTM19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNfUzdfU0JfRUVFRU5TXzE3SGFzaFRh
YmxlSXRlcmF0b3JJUzNfUzdfUzlfU0JfU0dfU0VfRUVSS1RfCiBfX1pOM1dURjlIYXNoVGFibGVJ
UE43V2ViQ29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8xMUNsaXBwZXJEYXRhRUVO
U18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFz
aFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FNmxvb2t1cEVSS1Mz
XwogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMz
X1BOUzFfMTFDbGlwcGVyRGF0YUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRy
SGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lT
Nl9FRUVFU0VfRTZyZWhhc2hFaQotX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIxNnBhdGhPbmx5Q2xpcHBpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVj
dEUKK19fWk43V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMTZwYXRoT25seUNsaXBw
aW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTks3V2Vi
Q29yZTI5U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQxMHRvQ2xpcFBhdGhFUk5TXzRQYXRo
RQotX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIyNGRyYXdDb250ZW50SW50
b01hc2tJbWFnZUVQTlNfMTFDbGlwcGVyRGF0YUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNv
cmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjI0ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlRVBO
U18xMUNsaXBwZXJEYXRhRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pOSzdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QyOGlzU1ZHU2hhZG93VHJlZVJvb3RDb250YWluZXJFdgogX19aTks3V2ViQ29yZTI0
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMTByZW5kZXJOYW1lRXYKIF9fWk43V2ViQ29yZUwxOHdy
aXRlTmFtZVZhbHVlUGFpcklOU18xMlNWR1VuaXRUeXBlczExU1ZHVW5pdFR5cGVFRUV2Uk5TXzEw
VGV4dFN0cmVhbUVQS2NUXwpAQCAtMjk3NDYsNyArMjk3NDYsNyBAQCBfX1pOSzdXZWJDb3JlMTlS
ZW5kZXJTVkdJbmxpbmVUZXh0MTdvYmplCiBfX1pON1dlYkNvcmVMMTltZXRhZGF0YUNvbnN0cnVj
dG9yRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1lbnRFYgogX19aTjdXZWJDb3JlMThT
VkdNZXRhZGF0YUVsZW1lbnQ2Y3JlYXRlRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1l
bnRFCiBfX1pON1dlYkNvcmUxOFNWR01ldGFkYXRhRWxlbWVudEQwRXYKLV9fWlRobjE5Ml9ON1dl
YkNvcmUxNlNWR01hcmtlckVsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU185RmxvYXRS
ZWN0RQorX19aVGhuMTkyX043V2ViQ29yZTE2U1ZHTWFya2VyRWxlbWVudDE5c2V0Vmlld0JveEJh
c2VWYWx1ZUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTRTVkdSZW5kZXJTdHls
ZTIyc2V0TWFya2VyU3RhcnRSZXNvdXJjZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0
U1ZHUmVuZGVyU3R5bGUyMHNldE1hcmtlck1pZFJlc291cmNlRVJLTjNXVEY2U3RyaW5nRQogX19a
Tks3V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQxNXN1cHBvcnRzTWFya2Vyc0V2CkBAIC0yOTc3MCw3
ICsyOTc3MCw3IEBAIF9fWk43V2ViQ29yZUwxN3N5bWJvbENvbnN0cnVjdG9yRVJLTlNfMTMKIF9f
Wk43V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVF
UE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDIwcGFyc2VNYXBw
ZWRBdHRyaWJ1dGVFUE5TXzlBdHRyaWJ1dGVFCiBfX1pON1dlYkNvcmUxNlNWR1N5bWJvbEVsZW1l
bnQxOXN2Z0F0dHJpYnV0ZUNoYW5nZWRFUktOU18xM1F1YWxpZmllZE5hbWVFCi1fX1pUaG4xOTJf
TjdXZWJDb3JlMTZTVkdTeW1ib2xFbGVtZW50MTlzZXRWaWV3Qm94QmFzZVZhbHVlRVJLTlNfOUZs
b2F0UmVjdEUKK19fWlRobjE5Ml9ON1dlYkNvcmUxNlNWR1N5bWJvbEVsZW1lbnQxOXNldFZpZXdC
b3hCYXNlVmFsdWVFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk5LN1dlYkNvcmUxNlNWR1N5bWJv
bEVsZW1lbnQyMnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHNFdgogX19aVGhuMTkyX043V2ViQ29yZTE2
U1ZHU3ltYm9sRWxlbWVudDMxc2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZUVSS05TXzIy
U1ZHUHJlc2VydmVBc3BlY3RSYXRpb0UKIF9fWk43V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDE2
cmVuZGVyZXJJc05lZWRlZEVQTlNfMTFSZW5kZXJTdHlsZUUKQEAgLTI5ODUwLDggKzI5ODUwLDgg
QEAgX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyM3NldE5lZWRzVHJhbgogX19aTks3V2ViQ29y
ZTEwU1ZHRWxlbWVudDE0aXNHcmFkaWVudFN0b3BFdgogX19aTjdXZWJDb3JlMzdqc1NWR0dyYWRp
ZW50RWxlbWVudEdyYWRpZW50VHJhbnNmb3JtRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVl
RVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk43V2ViQ29yZTE4U1ZHR3JhZGllbnRFbGVtZW50MjVn
cmFkaWVudFRyYW5zZm9ybUFuaW1hdGVkRXYKLV9fWk43V2ViQ29yZTE4UmVuZGVyU1ZHQ29udGFp
bmVyMTZub2RlQXRGbG9hdFBvaW50RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0
UmVzdWx0RVJLTlNfMTBGbG9hdFBvaW50RU5TXzEzSGl0VGVzdEFjdGlvbkUKLV9fWk43V2ViQ29y
ZTE4UmVuZGVyU1ZHQ29udGFpbmVyMjVwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwRVJLTlNfMTBG
bG9hdFBvaW50RQorX19aTjdXZWJDb3JlMThSZW5kZXJTVkdDb250YWluZXIxNm5vZGVBdEZsb2F0
UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU18xM0dy
YXBoaWNzUG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19aTjdXZWJDb3JlMThSZW5kZXJTVkdD
b250YWluZXIyNXBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXBFUktOU18xM0dyYXBoaWNzUG9pbnRF
CiBfX1pON1dlYkNvcmVMMjdjcmVhdGVTVkdEZWZzRWxlbWVudFdyYXBwZXJFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xMFNWR0Vs
ZW1lbnRFRUUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xNkpTU1ZHRGVmc0VsZW1l
bnRFTlNfMTRTVkdEZWZzRWxlbWVudEVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0
YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTE2SlNTVkdEZWZz
RWxlbWVudEMxRVBOM0pTQzlTdHJ1Y3R1cmVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfMTRTVkdEZWZzRWxlbWVudEVFRQpAQCAtMjk4NjIsMTEgKzI5ODYyLDEx
IEBAIF9fWk43V2ViQ29yZTE2SlNTVkdEZWZzRWxlbWVudEQxRXYKIF9fWlRobjhfTjdXZWJDb3Jl
MTRTVkdEZWZzRWxlbWVudEQwRXYKIF9fWlRobjhfTjdXZWJDb3JlMTVTVkdNUGF0aEVsZW1lbnRE
MEV2CiBfX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlckMxRXYKLV9fWk43V2ViQ29y
ZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyNm1vdmVUb0VSS05TXzEwRmxvYXRQb2ludEViTlNfMThQ
YXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjZt
b3ZlVG9FUktOU18xM0dyYXBoaWNzUG9pbnRFYk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19a
TjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIxN2NvbnRpbnVlQ29uc3VtaW5nRXYKIF9f
Wk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMjVpbmNyZW1lbnRQYXRoU2VnbWVudENv
dW50RXYKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMTJjdXJ2ZVRvQ3ViaWNF
UktOU18xMEZsb2F0UG9pbnRFUzNfUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCi1fX1pON1dl
YkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjE4Y3VydmVUb0N1YmljU21vb3RoRVJLTlNfMTBG
bG9hdFBvaW50RVMzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQ
YXRoU2VnTGlzdEJ1aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19T
M19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQ
YXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MzdjcmVhdGVT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzRWZmZmZOU18xNFNWR1BhdGhTZWdSb2xlRQog
X19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXI5Y2xvc2VQYXRoRXYKIF9fWk43V2Vi
Q29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyN2NsZWFudXBFdgpAQCAtMjk5MDAsNyArMjk5MDAs
NyBAQCBfX1pON1dlYkNvcmUyMFNWR1BhdGhQYXJzZXJGYWN0b3J5MzBidWlsCiBfX1pON1dlYkNv
cmUxNFNWR1BhdGhCbGVuZGVyQzFFdgogX19aTjdXZWJDb3JlMTRTVkdQYXRoQmxlbmRlcjE3Ymxl
bmRBbmltYXRlZFBhdGhFZlBOU18xM1NWR1BhdGhTb3VyY2VFUzJfUE5TXzE1U1ZHUGF0aENvbnN1
bWVyRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoQmxlbmRlcjE4YmxlbmRNb3ZlVG9TZWdtZW50RXYK
LV9fWk43V2ViQ29yZTE0U1ZHUGF0aEJsZW5kZXIyM2JsZW5kQW5pbWF0ZWRGbG9hdFBvaW50RVJL
TlNfMTBGbG9hdFBvaW50RVMzXworX19aTjdXZWJDb3JlMTRTVkdQYXRoQmxlbmRlcjIzYmxlbmRB
bmltYXRlZEZsb2F0UG9pbnRFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfCiBfX1pON1dlYkNvcmUx
NFNWR1BhdGhCbGVuZGVyMjRibGVuZEN1cnZlVG9DdWJpY1NlZ21lbnRFdgogX19aTjdXZWJDb3Jl
MTRTVkdQYXRoQmxlbmRlcjMwYmxlbmRDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50RXYKIF9fWk43
V2ViQ29yZTE0U1ZHUGF0aEJsZW5kZXI3Y2xlYW51cEV2CkBAIC0yOTkzNSw3ICsyOTkzNSw3IEBA
IF9fWk43V2ViQ29yZTI3SlNTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmUKIF9fWk43V2ViQ29yZTI1
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbEQwRXYKIF9fWk43V2ViQ29yZTMzSlNTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoUmVsRDFFdgogX19aTjdXZWJDb3JlMzFTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoUmVsRDBFdgotX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXI2
bGluZVRvRVJLTlNfMTBGbG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdX
ZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXI2bGluZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50
RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDI1
Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0Fic0VmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCiBfX1pON1dl
YkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjE0bGluZVRvVmVydGljYWxFZk5TXzE4UGF0aENv
b3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDMzY3JlYXRlU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzRWZOU18xNFNWR1BhdGhTZWdSb2xlRQpAQCAtMjk5OTcsOSAr
Mjk5OTcsOSBAQCBfX1pON1dlYkNvcmUyOUpTU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsCiBfX1pO
N1dlYkNvcmUyN1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbEQwRXYKIF9fWk43V2ViQ29yZTMx
SlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbEQxRXYKIF9fWk43V2ViQ29yZTI5U1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWxSZWxEMEV2Ci1fX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0
QnVpbGRlcjE2Y3VydmVUb1F1YWRyYXRpY0VSS05TXzEwRmxvYXRQb2ludEVTM19OU18xOFBhdGhD
b29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMTZjdXJ2
ZVRvUXVhZHJhdGljRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX05TXzE4UGF0aENvb3JkaW5hdGVN
b2RlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDM1Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNBYnNFZmZmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCi1fX1pON1dlYkNvcmUyMVNW
R1BhdGhTZWdMaXN0QnVpbGRlcjIyY3VydmVUb1F1YWRyYXRpY1Ntb290aEVSS05TXzEwRmxvYXRQ
b2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xp
c3RCdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTNHcmFwaGljc1BvaW50RU5T
XzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDQxY3Jl
YXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnNFZmZOU18xNFNWR1BhdGhTZWdS
b2xlRQogX19aTks3V2ViQ29yZTI5U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMxMXBhdGhT
ZWdUeXBlRXYKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18zMUpTU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNBYnNFTlNfMjlTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fic0VFRVBO
U18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0
RVBUMF8KQEAgLTMwMDQ1LDEyICszMDA0NSwxMiBAQCBfX1pON1dlYkNvcmUzMUpTU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0CiBfX1pON1dlYkNvcmUyOVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
UmVsRDBFdgogX19aTjdXZWJDb3JlMzdKU1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
UmVsRDFFdgogX19aTjdXZWJDb3JlMzVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJl
bEQwRXYKLV9fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU43V2ViQ29yZTE4U1ZHUHJvcGVydHlU
ZWFyT2ZmSU5TMl8xMEZsb2F0UG9pbnRFRUVFRUxtMEVFNGZpbGxFUktTNl9tCi1fX1pOM1dURjZW
ZWN0b3JJTlNfNlJlZlB0cklON1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOUzJfMTBGbG9h
dFBvaW50RUVFRUVMbTBFRTE0c2hyaW5rQ2FwYWNpdHlFbQorX19aTjNXVEY2VmVjdG9ySU5TXzZS
ZWZQdHJJTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlMyXzEzR3JhcGhpY3NQb2ludEVF
RUVFTG0wRUU0ZmlsbEVSS1M2X20KK19fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU43V2ViQ29y
ZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TMl8xM0dyYXBoaWNzUG9pbnRFRUVFRUxtMEVFMTRzaHJp
bmtDYXBhY2l0eUVtCiBfX1pON1dlYkNvcmUzOGpzU1ZHUG9pbnRMaXN0UHJvdG90eXBlRnVuY3Rp
b25HZXRJdGVtRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0
eUlOU18xMlNWR1BvaW50TGlzdEVFMjRnZXRJdGVtVmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZH
QW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFalJpCi1fX1pON1dlYkNvcmU0dG9KU0VQ
TjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xOFNWR1Byb3BlcnR5
VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUUKLV9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklO
U18xMEpTU1ZHUG9pbnRFTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUVF
RUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9i
amVjdEVQVDBfCitfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9N
R2xvYmFsT2JqZWN0RVBOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRF
RUUKK19fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xMEpTU1ZHUG9pbnRFTlNfMThTVkdQ
cm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUVFRUVQTlNfMTJKU0RPTVdyYXBwZXJF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dlYkNv
cmUxMEpTU1ZHUG9pbnQxOGdldE93blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMx
XzEwSWRlbnRpZmllckVSTlMxXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MxOGdldFN0YXRpY1Zh
bHVlU2xvdElON1dlYkNvcmUxMEpTU1ZHUG9pbnRFTlMxXzEySlNET01XcmFwcGVyRUVFYlBOU185
RXhlY1N0YXRlRVBLTlNfOUhhc2hUYWJsZUVQVF9SS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9w
ZXJ0eVNsb3RFCiBfX1pON1dlYkNvcmUxMWpzU1ZHUG9pbnRYRVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTMwMDU4LDcgKzMwMDU4LDcgQEAgX19a
TjdXZWJDb3JlMTFqc1NWR1BvaW50WUVQTjNKU0M5RXhlY1N0YQogX19aTjdXZWJDb3JlMTJTVkdQ
b2ludExpc3QxNGNyZWF0ZUFuaW1hdGVkRVJLUzBfUzJfUlMwX2YKIF9fWk43V2ViQ29yZTMwU1ZH
QW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSU5TXzEyU1ZHUG9pbnRMaXN0RUUxOGRldGFjaExp
c3RXcmFwcGVyc0VqCiBfX1pON1dlYkNvcmUxMEpTU1ZHUG9pbnREMUV2Ci1fX1pON1dlYkNvcmUx
OFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUQwRXYKK19fWk43V2ViQ29yZTE4
U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEzR3JhcGhpY3NQb2ludEVFRDBFdgogX19aTjdXZWJDb3Jl
MTlSZW5kZXJTVkdJbmxpbmVUZXh0MTZwb3NpdGlvbkZvclBvaW50RVJLTlNfOEludFBvaW50RQog
X19aTks3V2ViQ29yZTE2U1ZHSW5saW5lVGV4dEJveDI3b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdt
ZW50RVJLTlNfMTVTVkdUZXh0RnJhZ21lbnRFZmIKIF9fWk43V2ViQ29yZTE5UmVuZGVyU1ZHSW5s
aW5lVGV4dDE0bG9jYWxDYXJldFJlY3RFUE5TXzlJbmxpbmVCb3hFaVBpCkBAIC0zMDEyMCwxMSAr
MzAxMjAsMTEgQEAgX19aTjdXZWJDb3JlMzFqc1NWR1NWR0VsZW1lbnRDdXJyZW50VHJhbgogX19a
TjdXZWJDb3JlMTBKU1NWR1BvaW50M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRp
ZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDOWxvb2t1
cFB1dElON1dlYkNvcmUxMEpTU1ZHUG9pbnRFRUViUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwogX19aTjdXZWJDb3JlMTRzZXRK
U1NWR1BvaW50WEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUK
LV9fWk5LN1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRTRyb2xl
RXYKLV9fWk43V2ViQ29yZTI0U1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmSU5TXzEzU1ZHU1ZHRWxl
bWVudEVOU18xMEZsb2F0UG9pbnRFRTEyY29tbWl0Q2hhbmdlRXYKK19fWk5LN1dlYkNvcmUxOFNW
R1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRTRyb2xlRXYKK19fWk43V2ViQ29y
ZTI0U1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmSU5TXzEzU1ZHU1ZHRWxlbWVudEVOU18xM0dyYXBo
aWNzUG9pbnRFRTEyY29tbWl0Q2hhbmdlRXYKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDIy
dXBkYXRlQ3VycmVudFRyYW5zbGF0ZUV2Ci1fX1pON1dlYkNvcmUyNFNWR1N0YXRpY1Byb3BlcnR5
VGVhck9mZklOU18xM1NWR1NWR0VsZW1lbnRFTlNfMTBGbG9hdFBvaW50RUVEMEV2Ci1fX1pON1dl
YkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUQyRXYKK19fWk43V2Vi
Q29yZTI0U1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmSU5TXzEzU1ZHU1ZHRWxlbWVudEVOU18xM0dy
YXBoaWNzUG9pbnRFRUQwRXYKK19fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEz
R3JhcGhpY3NQb2ludEVFRDJFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTFpc1NWR0lu
bGluZUV2CiBfX1pON1dlYkNvcmUxMFNWR0VsZW1lbnQyM2N1cnNvckltYWdlVmFsdWVSZW1vdmVk
RXYKIF9fWk43V2ViQ29yZTE4anNTVkdHRWxlbWVudFN0eWxlRVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTMwMTQ1LDggKzMwMTQ1LDggQEAgX19a
TjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MThzeW5jaHJvbml6ZQogX19aTjdXZWJDb3JlMTNTVkdT
VkdFbGVtZW50MzBzeW5jaHJvbml6ZVByZXNlcnZlQXNwZWN0UmF0aW9FdgogX19aTjdXZWJDb3Jl
MjFqc1NWR1NWR0VsZW1lbnRIZWlnaHRFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktO
UzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MTRoZWlnaHRBbmlt
YXRlZEV2Ci1fX1pON1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU185RmxvYXRSZWN0RUUx
MmNvbW1pdENoYW5nZUV2Ci1fX1pON1dlYkNvcmUxN1NWR1Byb3BlcnR5VHJhaXRzSU5TXzlGbG9h
dFJlY3RFRTh0b1N0cmluZ0VSS1MxXworX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJ
TlNfMTJHcmFwaGljc1JlY3RFRTEyY29tbWl0Q2hhbmdlRXYKK19fWk43V2ViQ29yZTE3U1ZHUHJv
cGVydHlUcmFpdHNJTlNfMTJHcmFwaGljc1JlY3RFRTh0b1N0cmluZ0VSS1MxXwogX19aTjdXZWJD
b3JlMTNzZXRKU1NWR1JlY3RZRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdK
U1ZhbHVlRQogX19aTjdXZWJDb3JlMTdzZXRKU1NWR1JlY3RXaWR0aEVQTjNKU0M5RXhlY1N0YXRl
RVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE4c2V0SlNTVkdSZWN0
SGVpZ2h0RVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQpAQCAt
MzAxOTIsMTMgKzMwMTkyLDEzIEBAIF9fWk43V2ViQ29yZTE2U1ZHU3R5bGVkRWxlbWVudDI0Z2V0
UHJlc2UKIF9fWk43V2ViQ29yZTEzU3R5bGVkRWxlbWVudDIyZ2V0TWFwcGVkQXR0cmlidXRlRGVj
bEVOU18yME1hcHBlZEF0dHJpYnV0ZUVudHJ5RVBOU185QXR0cmlidXRlRQogX19aTjdXZWJDb3Jl
NDZqc1NWR1NWR0VsZW1lbnRQcm90b3R5cGVGdW5jdGlvbkNyZWF0ZVNWR1BvaW50RVBOM0pTQzlF
eGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxNGNyZWF0ZVNWR1BvaW50RXYK
LV9fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFMTJjb21t
aXRDaGFuZ2VFdgorX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUUxMmNvbW1pdENoYW5nZUV2CiBfX1pON1dlYkNvcmUxNHNldEpTU1ZHUG9pbnRZRVBO
M0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3Jl
MTFKU1NWR051bWJlckQxRXYKIF9fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSWZFRDBF
dgogX19aTjdXZWJDb3JlMzVqc1NWR01hdHJpeFByb3RvdHlwZUZ1bmN0aW9uSW52ZXJzZUVQTjNK
U0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlNDJqc1NWR1BvaW50UHJvdG90eXBlRnVuY3Rpb25N
YXRyaXhUcmFuc2Zvcm1FUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk5LN1dlYkNvcmUxMEZsb2F0UG9p
bnQxNW1hdHJpeFRyYW5zZm9ybUVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRQorX19aTks3V2ViQ29y
ZTEzR3JhcGhpY3NQb2ludDE1bWF0cml4VHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
CiBfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm0zbWFwRWRkUmRTMV8KIF9fWk43V2ViQ29y
ZTQ1anNTVkdTVkdFbGVtZW50UHJvdG90eXBlRnVuY3Rpb25DcmVhdGVTVkdSZWN0RVBOM0pTQzlF
eGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxM2NyZWF0ZVNWR1JlY3RFdgpA
QCAtMzAyMjUsOCArMzAyMjUsOCBAQCBfX1pON1dlYkNvcmUxNmpzU1ZHU1ZHRWxlbWVudFhFUE4z
SlNDOUV4CiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQ5eEFuaW1hdGVkRXYKIF9fWk5LN1dl
YkNvcmUyMlJlbmRlclNWR0ZvcmVpZ25PYmplY3QxMHJlbmRlck5hbWVFdgogX19aTjdXZWJDb3Jl
MjVqc1NWR1JlY3RFbGVtZW50Q2xhc3NOYW1lRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVl
RVJLTlMwXzEwSWRlbnRpZmllckUKLV9fWk43V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyMThoaXRUZXN0Q2xpcENvbnRlbnRFUktOU185RmxvYXRSZWN0RVJLTlNfMTBGbG9hdFBvaW50
RQotX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdIaWRkZW5Db250YWluZXIxNm5vZGVBdEZsb2F0UG9p
bnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU18xMEZsb2F0
UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIxOGhpdFRlc3RDbGlwQ29udGVudEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfMTNH
cmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdIaWRkZW5Db250YWluZXIxNm5v
ZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRF
UktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQogX19aTjdXZWJDb3JlMjZS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lcjlpZENoYW5nZWRFdgogX19aTjdXZWJDb3JlMjlTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDE2aXNLbm93bkF0dHJpYnV0ZUVSS05TXzEzUXVhbGlm
aWVkTmFtZUUKIF9fWk43V2ViQ29yZTMzanNTVkdDbGlwUGF0aEVsZW1lbnRDbGlwUGF0aFVuaXRz
RVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTMw
MjQ0LDkgKzMwMjQ0LDkgQEAgX19aTjdXZWJDb3JlMjBKU1NWR01ldGFkYXRhRWxlbWVudEQxRXYK
IF9fWlRobjhfTjdXZWJDb3JlMThTVkdNZXRhZGF0YUVsZW1lbnREMEV2CiBfX1pON1dlYkNvcmUx
NVNWR0ltYWdlRWxlbWVudDE5c3luY2hyb25pemVQcm9wZXJ0eUVSS05TXzEzUXVhbGlmaWVkTmFt
ZUUKIF9fWk43V2ViQ29yZTE1U1ZHSW1hZ2VFbGVtZW50MTVzeW5jaHJvbml6ZUhyZWZFdgotX19a
TjdXZWJDb3JlMjZSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjI1cG9pbnRJc0luc2lkZVZpZXdw
b3J0Q2xpcEVSS05TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTEzUmVuZGVyU1ZHUGF0aDE0
c3Ryb2tlQ29udGFpbnNFUktOU18xMEZsb2F0UG9pbnRFYgotX19aTks3V2ViQ29yZTRQYXRoMTRz
dHJva2VDb250YWluc0VQTlNfMThTdHJva2VTdHlsZUFwcGxpZXJFUktOU18xMEZsb2F0UG9pbnRF
CitfX1pON1dlYkNvcmUyNlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyMjVwb2ludElzSW5zaWRl
Vmlld3BvcnRDbGlwRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMTNSZW5kZXJT
VkdQYXRoMTRzdHJva2VDb250YWluc0VSS05TXzEzR3JhcGhpY3NQb2ludEViCitfX1pOSzdXZWJD
b3JlNFBhdGgxNHN0cm9rZUNvbnRhaW5zRVBOU18xOFN0cm9rZVN0eWxlQXBwbGllckVSS05TXzEz
R3JhcGhpY3NQb2ludEUKIF9fWk5LN1dlYkNvcmUxM1NWR1VzZUVsZW1lbnQyOGluc3RhbmNlRm9y
U2hhZG93VHJlZUVsZW1lbnRFUE5TXzROb2RlRQogX19aTks3V2ViQ29yZTEzU1ZHVXNlRWxlbWVu
dDI4aW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudEVQTlNfNE5vZGVFUE5TXzE4U1ZHRWxlbWVu
dEluc3RhbmNlRQogX19aTks3V2ViQ29yZTE4U1ZHRWxlbWVudEluc3RhbmNlMTdzaGFkb3dUcmVl
RWxlbWVudEV2CkBAIC0zMDMzMiw3ICszMDMzMiw3IEBAIF9fWk43V2ViQ29yZTI0aXNNaWRkbGVN
b3VzZUJ1dHRvbkV2ZW50RVAKIF9fWk5LN1dlYkNvcmUxMVNWR0FFbGVtZW50NnRhcmdldEV2CiBf
X1pON1dlYkNvcmUxN0pTU1ZHSW1hZ2VFbGVtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMx
XzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4z
SlNDOWxvb2t1cFB1dElON1dlYkNvcmUxN0pTU1ZHSW1hZ2VFbGVtZW50RUVFYlBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVBLTlNfOUhhc2hUYWJsZUVQVF8KLV9f
Wk43V2ViQ29yZTE0UmVuZGVyU1ZHSW1hZ2UxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRl
c3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRU
ZXN0QWN0aW9uRQorX19aTjdXZWJDb3JlMTRSZW5kZXJTVkdJbWFnZTE2bm9kZUF0RmxvYXRQb2lu
dEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEzR3JhcGhp
Y3NQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCiBfX1pOSzdXZWJDb3JlMTZTVkdTY3JpcHRFbGVt
ZW50MjdhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHNFUk4zV1RGMTFMaXN0SGFzaFNldElOU180
S1VSTEVMbTI1NkVOU184S1VSTEhhc2hFRUUKIF9fWk5LN1dlYkNvcmUxNVNWR0ltYWdlRWxlbWVu
dDI3YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzRVJOM1dURjExTGlzdEhhc2hTZXRJTlNfNEtV
UkxFTG0yNTZFTlNfOEtVUkxIYXNoRUVFCiBfX1pON1dlYkNvcmU0MWpzU1ZHRG9jdW1lbnRQcm90
b3R5cGVGdW5jdGlvbkNyZWF0ZUV2ZW50RVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0zMDM5MiwxMyAr
MzAzOTIsMTMgQEAgX19aTjdXZWJDb3JlMTVTVkdJbWFnZUVsZW1lbnQxN3N5bmNocm9uaQogX19a
TjdXZWJDb3JlMTVTVkdJbWFnZUVsZW1lbnQzMHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRp
b0V2CiBfX1pON1dlYkNvcmUxNVNWR0ltYWdlRWxlbWVudDM2c3luY2hyb25pemVFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkRXYKIF9fWk43V2ViQ29yZTE0U1ZHUGF0aEVsZW1lbnQyNWNyZWF0ZVNW
R1BhdGhTZWdNb3ZldG9SZWxFZmZOU18xNFNWR1BhdGhTZWdSb2xlRQotX19aTjdXZWJDb3JlMjBT
VkdQYXRoU2VnTGlzdFNvdXJjZTMwcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50RVJOU18x
MEZsb2F0UG9pbnRFUzJfCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMzBwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEVTMl8KIF9fWk5L
N1dlYkNvcmUxOVNWR1BhdGhTZWdNb3ZldG9SZWwxMXBhdGhTZWdUeXBlRXYKIF9fWk43V2ViQ29y
ZTI0anNTVkdQYXR0ZXJuRWxlbWVudFdpZHRoRVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVl
RVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk43V2ViQ29yZTE3U1ZHUGF0dGVybkVsZW1lbnQxM3dp
ZHRoQW5pbWF0ZWRFdgogX19aTjdXZWJDb3JlNDFqc1NWR1BvaW50TGlzdFByb3RvdHlwZUZ1bmN0
aW9uUmVtb3ZlSXRlbUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJv
cGVydHlJTlNfMTJTVkdQb2ludExpc3RFRTI3cmVtb3ZlSXRlbVZhbHVlc0FuZFdyYXBwZXJzRVBO
U18zMFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZklTMV9FRWpSaQotX19aTjdXZWJDb3Jl
MThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUUxM2RldGFjaFdyYXBwZXJFdgor
X19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUUxM2Rl
dGFjaFdyYXBwZXJFdgogX19aTjdXZWJDb3JlMjJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmSU5TXzEy
U1ZHUG9pbnRMaXN0RUUxMmNvbW1pdENoYW5nZUV2CiBfX1pON1dlYkNvcmUyOGpzU1ZHUG9seWdv
bkVsZW1lbnRUcmFuc2Zvcm1FUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJ
ZGVudGlmaWVyRQogX19aTjdXZWJDb3JlNTBqc1NWR1NWR0VsZW1lbnRQcm90b3R5cGVGdW5jdGlv
bkNyZWF0ZVNWR1RyYW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRQpAQCAtMzA0MDcsNyArMzA0MDcs
NyBAQCBfX1pON1dlYkNvcmUxMlNWR1RyYW5zZm9ybUMxRU5TMF8xNlNWR1RyCiBfX1pOSzdXZWJD
b3JlMTNTVkdTVkdFbGVtZW50MTFjdXJyZW50Vmlld0V2CiBfX1pON1dlYkNvcmUxMVNWR1ZpZXdT
cGVjQzFFUE5TXzEwU1ZHRWxlbWVudEUKIF9fWk43V2ViQ29yZTExU1ZHVmlld1NwZWMxM3BhcnNl
Vmlld1NwZWNFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMVNWR1ZpZXdTcGVjMTlzZXRW
aWV3Qm94QmFzZVZhbHVlRVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTExU1ZHVmlld1Nw
ZWMxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29y
ZTExU1ZHVmlld1NwZWMzMXNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWVFUktOU18yMlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9FCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxN3NldFVz
ZUN1cnJlbnRWaWV3RWIKIF9fWk43V2ViQ29yZTExU1ZHVmlld1NwZWNEMEV2CkBAIC0zMDQyNyw5
ICszMDQyNyw5IEBAIF9fWk43V2ViQ29yZTE0U1ZHUGF0aEVsZW1lbnQxNGdldFRvdGFsTGUKIF9f
Wk43V2ViQ29yZTI2anNTVkdQb2x5bGluZUVsZW1lbnRQb2ludHNFUE4zSlNDOUV4ZWNTdGF0ZUVO
UzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlNDFqc1NWR1BvaW50
TGlzdFByb3RvdHlwZUZ1bmN0aW9uQXBwZW5kSXRlbUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdX
ZWJDb3JlMTB0b1NWR1BvaW50RU4zSlNDN0pTVmFsdWVFCi1fX1pON1dlYkNvcmUxNVNWR0xpc3RQ
cm9wZXJ0eUlOU18xMlNWR1BvaW50TGlzdEVFMjdhcHBlbmRJdGVtVmFsdWVzQW5kV3JhcHBlcnNF
UE5TXzMwU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFTjNXVEYxMFBhc3NSZWZQ
dHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUVFRUVSaQotX19aTjdX
ZWJDb3JlMjJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmSU5TXzEyU1ZHUG9pbnRMaXN0RUUzMHByb2Nl
c3NJbmNvbWluZ0xpc3RJdGVtV3JhcHBlckVSTjNXVEY2UmVmUHRySU5TXzE4U1ZHUHJvcGVydHlU
ZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRUVFUGoKLV9fWk4zV1RGNlZlY3RvcklOU182UmVmUHRy
SU43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TMl8xMEZsb2F0UG9pbnRFRUVFRUxtMEVF
MTRleHBhbmRDYXBhY2l0eUVtCitfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xMlNW
R1BvaW50TGlzdEVFMjdhcHBlbmRJdGVtVmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZHQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMThTVkdQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUVFRUVSaQorX19aTjdXZWJDb3JlMjJTVkdM
aXN0UHJvcGVydHlUZWFyT2ZmSU5TXzEyU1ZHUG9pbnRMaXN0RUUzMHByb2Nlc3NJbmNvbWluZ0xp
c3RJdGVtV3JhcHBlckVSTjNXVEY2UmVmUHRySU5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEz
R3JhcGhpY3NQb2ludEVFRUVFUGoKK19fWk4zV1RGNlZlY3RvcklOU182UmVmUHRySU43V2ViQ29y
ZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TMl8xM0dyYXBoaWNzUG9pbnRFRUVFRUxtMEVFMTRleHBh
bmRDYXBhY2l0eUVtCiBfX1pON1dlYkNvcmUxNFNWR1BvbHlFbGVtZW50MTlzeW5jaHJvbml6ZVBy
b3BlcnR5RVJLTlNfMTNRdWFsaWZpZWROYW1lRQogX19aTjdXZWJDb3JlMTRTVkdQb2x5RWxlbWVu
dDE3c3luY2hyb25pemVQb2ludHNFdgogX19aTjdXZWJDb3JlMTZKU1NWR1JlY3RFbGVtZW50M3B1
dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8x
NVB1dFByb3BlcnR5U2xvdEUKQEAgLTMwNDUwLDEwICszMDQ1MCwxMCBAQCBfX1pOSzdXZWJDb3Jl
MjVTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50CiBfX1pON1dlYkNvcmUzNmpzU1ZHR0VsZW1lbnRQ
cm90b3R5cGVGdW5jdGlvbkdldENUTUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlNDJq
c1NWR0dFbGVtZW50UHJvdG90eXBlRnVuY3Rpb25HZXRTY3JlZW5DVE1FUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTYwanNTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90b3R5cGVGdW5jdGlv
bkdldENoYXJOdW1BdFBvc2l0aW9uRVBOM0pTQzlFeGVjU3RhdGVFCi1fX1pOSzdXZWJDb3JlMjFT
VkdUZXh0Q29udGVudEVsZW1lbnQyMGdldENoYXJOdW1BdFBvc2l0aW9uRVJLTlNfMTBGbG9hdFBv
aW50RQotX19aTks3V2ViQ29yZTEyU1ZHVGV4dFF1ZXJ5MjVjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0
aW9uRVJLTlNfMTBGbG9hdFBvaW50RQorX19aTks3V2ViQ29yZTIxU1ZHVGV4dENvbnRlbnRFbGVt
ZW50MjBnZXRDaGFyTnVtQXRQb3NpdGlvbkVSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk5LN1dl
YkNvcmUxMlNWR1RleHRRdWVyeTI1Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkVSS05TXzEzR3Jh
cGhpY3NQb2ludEUKIF9fWk5LN1dlYkNvcmUxMlNWR1RleHRRdWVyeTMzY2hhcmFjdGVyTnVtYmVy
QXRQb3NpdGlvbkNhbGxiYWNrRVBOUzBfNERhdGFFUktOU18xNVNWR1RleHRGcmFnbWVudEUKLV9f
Wk43V2ViQ29yZUwyNGNhbGN1bGF0ZUdseXBoQm91bmRhcmllc0VQTlNfMTJTVkdUZXh0UXVlcnk0
RGF0YUVSS05TXzE1U1ZHVGV4dEZyYWdtZW50RWlSTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29y
ZUwyNGNhbGN1bGF0ZUdseXBoQm91bmRhcmllc0VQTlNfMTJTVkdUZXh0UXVlcnk0RGF0YUVSS05T
XzE1U1ZHVGV4dEZyYWdtZW50RWlSTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU1NWpz
U1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG90eXBlRnVuY3Rpb25HZXRFeHRlbnRPZkNoYXJFUE4z
SlNDOUV4ZWNTdGF0ZUUKIF9fWk5LN1dlYkNvcmUyMVNWR1RleHRDb250ZW50RWxlbWVudDE1Z2V0
RXh0ZW50T2ZDaGFyRWpSaQogX19aTks3V2ViQ29yZTEyU1ZHVGV4dFF1ZXJ5MTdleHRlbnRPZkNo
YXJhY3RlckVqCkBAIC0zMDY2MSw3ICszMDY2MSw3IEBAIF9fWk43V2ViQ29yZThTVkdQYWludDZz
ZXRVcmlFUktOM1dURjZTdHIKIF9fWk43V2ViQ29yZTMxSlNTVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbFJlbDNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFTlMxXzdKU1Zh
bHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzlsb29rdXBQdXRJTjdXZWJDb3Jl
MzFKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsRUVFYlBOU185RXhlY1N0YXRlRVJLTlNf
MTBJZGVudGlmaWVyRU5TXzdKU1ZhbHVlRVBLTlNfOUhhc2hUYWJsZUVQVF8KIF9fWk43V2ViQ29y
ZTM1c2V0SlNTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbFhFUE4zSlNDOUV4ZWNTdGF0ZUVQ
TlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCi1fX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0
U291cmNlMThwYXJzZUxpbmVUb1NlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29y
ZTIwU1ZHUGF0aFNlZ0xpc3RTb3VyY2UxOHBhcnNlTGluZVRvU2VnbWVudEVSTlNfMTNHcmFwaGlj
c1BvaW50RQogX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJjZTI4cGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudEVSZgogX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJjZTI2
cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnRFUmYKIF9fWk5LN1dlYkNvcmUzMFNWR0FuaW1hdGVk
TGlzdFByb3BlcnR5VGVhck9mZklOU18xNFNWR1BhdGhTZWdMaXN0RUUyMWlzQW5pbWF0ZWRMaXN0
VGVhck9mZkV2CkBAIC0zMDY4OCwxNSArMzA2ODgsMTUgQEAgX19aTjdXZWJDb3JlMjlTVkdQYXRo
U2VnTGlzdFByb3BlcnR5VGVhcgogX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTRT
VkdQYXRoU2VnTGlzdEVFMTdyZXBsYWNlSXRlbVZhbHVlc0VSUzFfUktOM1dURjZSZWZQdHJJTlNf
MTBTVkdQYXRoU2VnRUVFalJpCiBfX1pON1dlYkNvcmU1OGpzU1ZHUGF0aEVsZW1lbnRQcm90b3R5
cGVGdW5jdGlvbkNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9SZWxFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9f
Wk43V2ViQ29yZTQxanNTVkdQb2ludExpc3RQcm90b3R5cGVGdW5jdGlvbkluaXRpYWxpemVFUE4z
SlNDOUV4ZWNTdGF0ZUUKLV9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEyU1ZHUG9p
bnRMaXN0RUUyN2luaXRpYWxpemVWYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExp
c3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5
VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUVFRVJpCitfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9w
ZXJ0eUlOU18xMlNWR1BvaW50TGlzdEVFMjdpbml0aWFsaXplVmFsdWVzQW5kV3JhcHBlcnNFUE5T
XzMwU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFTjNXVEYxMFBhc3NSZWZQdHJJ
TlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUVFRUVSaQogX19aTjdX
ZWJDb3JlMTRTVkdQb2x5RWxlbWVudDM2c3luY2hyb25pemVFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkRXYKIF9fWk43V2ViQ29yZTQ3anNTVkdQb2ludExpc3RQcm90b3R5cGVGdW5jdGlvbkluc2Vy
dEl0ZW1CZWZvcmVFUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3Bl
cnR5SU5TXzEyU1ZHUG9pbnRMaXN0RUUzM2luc2VydEl0ZW1CZWZvcmVWYWx1ZXNBbmRXcmFwcGVy
c0VQTlNfMzBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUVFRWpSaQorX19a
TjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExpc3RFRTMzaW5zZXJ0SXRl
bUJlZm9yZVZhbHVlc0FuZFdyYXBwZXJzRVBOU18zMFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVh
ck9mZklTMV9FRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEz
R3JhcGhpY3NQb2ludEVFRUVFalJpCiBfX1pOSzdXZWJDb3JlMzBTVkdBbmltYXRlZExpc3RQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTIxaXNBbmltYXRlZExpc3RUZWFyT2ZmRXYK
LV9fWk43V2ViQ29yZTIyU1ZHTGlzdFByb3BlcnR5VGVhck9mZklOU18xMlNWR1BvaW50TGlzdEVF
MThyZW1vdmVJdGVtRnJvbUxpc3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQ
b2ludEVFRWIKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMEZsb2F0UG9pbnRFTG0wRUU2aW5z
ZXJ0SVMyX0VFdm1SS1RfCitfX1pON1dlYkNvcmUyMlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmZJTlNf
MTJTVkdQb2ludExpc3RFRTE4cmVtb3ZlSXRlbUZyb21MaXN0RVBOU18xOFNWR1Byb3BlcnR5VGVh
ck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUViCitfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTNH
cmFwaGljc1BvaW50RUxtMEVFNmluc2VydElTMl9FRXZtUktUXwogX19aTjdXZWJDb3JlNDJqc1NW
R1BvaW50TGlzdFByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZUl0ZW1FUE4zSlNDOUV4ZWNTdGF0ZUUK
LV9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEyU1ZHUG9pbnRMaXN0RUUyOHJlcGxh
Y2VJdGVtVmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFy
T2ZmSVMxX0VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBG
bG9hdFBvaW50RUVFRUVqUmkKK19fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEyU1ZH
UG9pbnRMaXN0RUUyOHJlcGxhY2VJdGVtVmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZHQW5pbWF0
ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMThTVkdQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUVFRUVqUmkKIF9fWk43V2ViQ29yZTQ5anNT
VkdQYXRoRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uR2V0UG9pbnRBdExlbmd0aEVQTjNKU0M5RXhl
Y1N0YXRlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDE2Z2V0UG9pbnRBdExlbmd0aEVm
CiBfX1pON1dlYkNvcmUzOWpzU1ZHVGV4dENvbnRlbnRFbGVtZW50UmVxdWlyZWRGZWF0dXJlc0VQ
TjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCkBAIC0zMDc4
NSw3ICszMDc4NSw3IEBAIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDExZGVzZWxlY3RBbGwK
IF9fWk43V2ViQ29yZTMwc2V0SlNTVkdTVkdFbGVtZW50Q3VycmVudFNjYWxlRVBOM0pTQzlFeGVj
U3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTNTVkdTVkdF
bGVtZW50MTVzZXRDdXJyZW50U2NhbGVFZgogX19aTks3V2ViQ29yZTE5U1ZHUGF0aFNlZ0Nsb3Nl
UGF0aDE5cGF0aFNlZ1R5cGVBc0xldHRlckV2Ci1fX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0
QnVpbGRlcjVhcmNUb0VmZmZiYlJLTlNfMTBGbG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVN
b2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXI1YXJjVG9FZmZmYmJSS05T
XzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTE0
U1ZHUGF0aEVsZW1lbnQyMmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWxFZmZmZmZiYk5TXzE0U1ZHUGF0
aFNlZ1JvbGVFCiBfX1pOSzdXZWJDb3JlMTZTVkdQYXRoU2VnQXJjUmVsMTFwYXRoU2VnVHlwZUV2
CiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMThKU1NWR1BhdGhTZWdBcmNSZWxFTlNf
MTZTVkdQYXRoU2VnQXJjUmVsRUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVF
UE5TXzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwpAQCAtMzA4NTIsMTEgKzMwODUyLDExIEBAIF9f
Wk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xNUpTU1ZHU2UKIF9fWk43V2ViQ29yZTE1SlNT
VkdTZXRFbGVtZW50QzFFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVO
M1dURjEwUGFzc1JlZlB0cklOU18xM1NWR1NldEVsZW1lbnRFRUUKIF9fWk43V2ViQ29yZTEyY2Fj
aGVXcmFwcGVySU5TXzEzU1ZHU2V0RWxlbWVudEVFRXZQTlNfMTVET01XcmFwcGVyV29ybGRFUFRf
UE5TXzEySlNET01XcmFwcGVyRQogX19aTjdXZWJDb3JlMTVKU1NWR1NldEVsZW1lbnQxOGdldE93
blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVSTlMxXzEy
UHJvcGVydHlTbG90RQotX19aTjNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3Rv
cklkRUVOU185RmxvYXRIYXNoSWRFRU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FM2FkZElkZE5TXzIy
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcklkZFM0X0VFRUVTdDRwYWlySU5TXzE3SGFzaFRhYmxlSXRl
cmF0b3JJZGRTMl9TNF9TNl9TNl9FRWJFUktUX1JLVDBfCi1fX1pOM1dURjlIYXNoVGFibGVJZGRO
U18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzlGbG9hdEhhc2hJZEVFTlNfMTBIYXNoVHJhaXRz
SWRFRVM2X0U2cmVoYXNoRWkKK19fWk4zV1RGOUhhc2hUYWJsZUlkZE5TXzE3SWRlbnRpdHlFeHRy
YWN0b3JJZEVFTlNfMTJHcmFwaGljc0hhc2hJZEVFTlNfMTBIYXNoVHJhaXRzSWRFRVM2X0UzYWRk
SWRkTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVFRVN0NHBhaXJJTlNfMTdIYXNo
VGFibGVJdGVyYXRvcklkZFMyX1M0X1M2X1M2X0VFYkVSS1RfUktUMF8KK19fWk4zV1RGOUhhc2hU
YWJsZUlkZE5TXzE3SWRlbnRpdHlFeHRyYWN0b3JJZEVFTlNfMTJHcmFwaGljc0hhc2hJZEVFTlNf
MTBIYXNoVHJhaXRzSWRFRVM2X0U2cmVoYXNoRWkKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUx
NFNWR1NNSUxFbGVtZW50OUNvbmRpdGlvbkVMbTBFRTE0c2hyaW5rQ2FwYWNpdHlFbQotX19aTjNX
VEY5SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3RvcklkRUVOU185RmxvYXRIYXNoSWRF
RU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FMTZsb29rdXBGb3JXcml0aW5nRVJLZAotX19aTjNXVEY5
SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3RvcklkRUVOU185RmxvYXRIYXNoSWRFRU5T
XzEwSGFzaFRyYWl0c0lkRUVTNl9FNGZpbmRJZE5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklk
ZFM0X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySWRkUzJfUzRfUzZfUzZfRUVSS1RfCitfX1pO
M1dURjlIYXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzEyR3JhcGhpY3NI
YXNoSWRFRU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FMTZsb29rdXBGb3JXcml0aW5nRVJLZAorX19a
TjNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3RvcklkRUVOU18xMkdyYXBoaWNz
SGFzaElkRUVOU18xMEhhc2hUcmFpdHNJZEVFUzZfRTRmaW5kSWROU18yMklkZW50aXR5SGFzaFRy
YW5zbGF0b3JJZGRTNF9FRUVFTlNfMTdIYXNoVGFibGVJdGVyYXRvcklkZFMyX1M0X1M2X1M2X0VF
UktUXwogX19aU3QxM19faGVhcF9zZWxlY3RJUE43V2ViQ29yZThTTUlMVGltZUVFdlRfUzNfUzNf
CiBfX1pTdDltYWtlX2hlYXBJUE43V2ViQ29yZThTTUlMVGltZUVFdlRfUzNfCiBfX1pTdDlzb3J0
X2hlYXBJUE43V2ViQ29yZThTTUlMVGltZUVFdlRfUzNfCkBAIC0zMDg4NywxMiArMzA4ODcsMTIg
QEAgX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDE4Z2V0UGF0aFNlZwogX19aTjdXZWJDb3Jl
MjBTVkdQYXRoUGFyc2VyRmFjdG9yeTQyZ2V0U1ZHUGF0aFNlZ0F0TGVuZ3RoRnJvbVNWR1BhdGhC
eXRlU3RyZWFtRVBOU18xN1NWR1BhdGhCeXRlU3RyZWFtRWZSbQogX19aTjdXZWJDb3JlMjhTVkdQ
YXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyQzFFdgogX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyMTZzZXREZXNpcmVkTGVuZ3RoRWYKLV9fWk43V2ViQ29yZTI4U1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjZtb3ZlVG9FUktOU18xMEZsb2F0UG9pbnRFYk5TXzE4UGF0
aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWls
ZGVyNm1vdmVUb0VSS05TXzEzR3JhcGhpY3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVF
CiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIxN2NvbnRpbnVlQ29u
c3VtaW5nRXYKIF9fWk43V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjE2cGF0
aFNlZ21lbnRJbmRleEV2CiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI3Y2xlYW51cEV2CiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXIy
NWluY3JlbWVudFBhdGhTZWdtZW50Q291bnRFdgotX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyNmxpbmVUb0VSS05TXzEwRmxvYXRQb2ludEVOU18xOFBhdGhDb29yZGlu
YXRlTW9kZUUKK19fWk43V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjZsaW5l
VG9FUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dl
YkNvcmVMMTZ2a2VybkNvbnN0cnVjdG9yRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1l
bnRFYgogX19aTjdXZWJDb3JlMTVTVkdWS2VybkVsZW1lbnQ2Y3JlYXRlRVJLTlNfMTNRdWFsaWZp
ZWROYW1lRVBOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmVMMjhjcmVhdGVTVkdWS2VybkVsZW1l
bnRXcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfMTBTVkdFbGVtZW50RUVFCkBAIC0zMTAxMyw3ICszMTAxMyw3IEBAIF9f
Wk43V2ViQ29yZTMxanNTVkdVc2VFbGVtZW50UmVxdWlyZWRGZWEKIF9fWk5LN1dlYkNvcmUxNVJl
bmRlclNWR0lubGluZTE5bWFwTG9jYWxUb0NvbnRhaW5lckVQTlNfMjBSZW5kZXJCb3hNb2RlbE9i
amVjdEViYlJOU18xNFRyYW5zZm9ybVN0YXRlRQogX19aTjdXZWJDb3JlNTNqc1NWR1NWR0VsZW1l
bnRQcm90b3R5cGVGdW5jdGlvbkdldFRyYW5zZm9ybVRvRWxlbWVudEVQTjNKU0M5RXhlY1N0YXRl
RQogX19aVHYwX241Nl9OSzdXZWJDb3JlMjVTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50NmdldENU
TUVOU18xMlNWR0xvY2F0YWJsZTE5U3R5bGVVcGRhdGVTdHJhdGVneUUKLV9fWk5LN1dlYkNvcmU0
Rm9udDMyc2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnRFUktOU183VGV4dFJ1bkVSS05T
XzEwRmxvYXRQb2ludEVpaWkKK19fWk5LN1dlYkNvcmU0Rm9udDMyc2VsZWN0aW9uUmVjdEZvclRl
eHRVc2luZ1NWR0ZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEzR3JhcGhpY3NQb2ludEVpaWkKIF9f
Wk5LN1dlYkNvcmUxM1JlbmRlclNWR1RleHQxNGZpcnN0TGluZUJsb2NrRXYKIF9fWk43V2ViQ29y
ZTE1U1ZHVktlcm5FbGVtZW50MjRidWlsZFZlcnRpY2FsS2VybmluZ1BhaXJFUk4zV1RGNlZlY3Rv
cklOU18xNFNWR0tlcm5pbmdQYWlyRUxtMEVFRQogX19aTks3V2ViQ29yZTE2U1ZHQ3Vyc29yRWxl
bWVudDI3YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzRVJOM1dURjExTGlzdEhhc2hTZXRJTlNf
NEtVUkxFTG0yNTZFTlNfOEtVUkxIYXNoRUVFCkBAIC0zMTA3Myw3ICszMTA3Myw3IEBAIF9fWk4z
V1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmoKIF9fWk4zV1RGOUhhc2hUYWJsZUlQ
TjdXZWJDb3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19pRU5TXzE4UGFpckZpcnN0RXh0cmFj
dG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRy
YWl0c0lTM19FRU5TQl9JaUVFRUVTQ19FNGZpbmRJUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xh
dG9ySVMzX1M1X1M5X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMzX1M1X1M3X1M5X1NFX1ND
X0VFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRw
YWlySVMzX2lFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzVfRUVOU183UHRySGFzaElTM19FRU5T
XzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNCX0lpRUVFRVNDX0U2ZXhw
YW5kRXYKIF9fWk5LN1dlYkNvcmUyNk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uMTZnZXRPcGVy
YXRpb25UeXBlRXYKLV9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OG1hcFBvaW50
RVJLTlNfMTJGbG9hdFBvaW50M0RFCitfX1pOSzdXZWJDb3JlMjBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDhtYXBQb2ludEVSS05TXzE1R3JhcGhpY3NQb2ludDNERQogX19aTks3V2ViQ29yZTI0U2hvcnRo
YW5kUHJvcGVydHlXcmFwcGVyNmVxdWFsc0VQS05TXzExUmVuZGVyU3R5bGVFUzNfCiBfX1pOSzdX
ZWJDb3JlMjRTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXI1YmxlbmRFUEtOU18xM0FuaW1hdGlvbkJh
c2VFUE5TXzExUmVuZGVyU3R5bGVFUEtTNF9TN19kCiBfX1pOSzdXZWJDb3JlMjVGaWxsTGF5ZXJz
UHJvcGVydHlXcmFwcGVyNWJsZW5kRVBLTlNfMTNBbmltYXRpb25CYXNlRVBOU18xMVJlbmRlclN0
eWxlRVBLUzRfUzdfZApAQCAtMzE5MzMsMTQgKzMxOTMzLDE0IEBAIF9fWk5LN1dlYkNvcmUxOUNh
Y2hlZENTU1N0eWxlU2hlZXQ4ZW5jb2QKIF9fWk43V2ViQ29yZTZFZGl0b3IzNHNldE1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5Y291bnRNYXRj
aGVzRm9yVGV4dEVSS04zV1RGNlN0cmluZ0VQTlNfNVJhbmdlRWpqYgogX19aTks3V2ViQ29yZTVS
YW5nZTE4c2hhZG93VHJlZVJvb3ROb2RlRXYKLV9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDIw
cGFpbnRUZXh0TWF0Y2hNYXJrZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTBGbG9hdFBv
aW50RVJLTlNfMTREb2N1bWVudE1hcmtlckVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RQor
X19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MjBwYWludFRleHRNYXRjaE1hcmtlckVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU18xM0dyYXBoaWNzUG9pbnRFUktOU18xNERvY3VtZW50TWFya2Vy
RVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjIzcmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNFTlNfMTREb2N1bWVudE1hcmtl
cjEwTWFya2VyVHlwZUUKLV9fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMzFnZXRDbGlwcGVk
VmlzaWJsZVRleHRSZWN0YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUUK
K19fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMzFnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0
YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1JlY3RFTG0wRUVFCiBfX1pOSzdXZWJD
b3JlNUZyYW1lMTRzZWxlY3Rpb25JbWFnZUViCiBfX1pON1dlYkNvcmUxNUNvbnRleHRNZW51SXRl
bUMxRVAxME5TTWVudUl0ZW0KIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTdlbmFibGVk
RXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcxMnNldE1lZGlhVHlwZUVSS04zV1RGNlN0cmluZ0UK
LV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXpl
RVJLTlNfOUZsb2F0U2l6ZUViCitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI4Y29tcHV0ZVBh
Z2VSZWN0c1dpdGhQYWdlU2l6ZUVSS05TXzEyR3JhcGhpY3NTaXplRWIKIF9fWk43V2ViQ29yZTE4
Y29ycmVjdGVkVGV4dENvbG9yRU5TXzVDb2xvckVTMF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0NXNj
YWxlRWYKIF9fWk43V2ViQ29yZTIzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDMUVSS05TXzE1UHJv
dGVjdGlvblNwYWNlRVJLTlNfMTBDcmVkZW50aWFsRWpSS05TXzE2UmVzb3VyY2VSZXNwb25zZUVS
S05TXzEzUmVzb3VyY2VFcnJvckUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC05ODAsMTEg
Kzk4MCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHku
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dDNELmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXApAQCAtOTky
LDYgKzk4NywxMSBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1BvaW50M0QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1BvaW50LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0LmNwcCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NU
eXBlcy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIFwKQEAgLTE5NjYsMTEgKzE5NjYsNiBAQCBIRUFE
RVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVHYXVzc2lhbkJsdXJORU9OLmggXAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIFwKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmggXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREYXRhLmggXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFtaWx5LmggXApAQCAtMTk4Miw2ICsxOTc3LDExIEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmgg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuaCBcCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NRdWFkLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
UmVjdC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuaCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzM0QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBcCkBAIC0y
NTI5LDEwICsyNTI5LDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0NvbG9yUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwIFwKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9GbG9hdFJlY3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAgXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSWNvblF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZm
ZXJRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcCBc
CkBAIC0zMDE3LDcgKzMwMTcsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkg
ewogCiAgICAgICAgIFNPVVJDRVMgKz0gXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW50UmVjdENHLmNwcCBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9h
dFNpemVDRy5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NT
aXplQ0cuY3BwIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcCBc
CiAgICAgICAgICAgICBwbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwCiAKQEAgLTMwMjksNyArMzAy
OSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAgICAgICAgICBw
bGF0Zm9ybS9tYWMvU2hhcmVkQnVmZmVyTWFjLm1tIFwKICAgICAgICAgICAgIHBsYXRmb3JtL21h
Yy9LVVJMTWFjLm1tIFwKICAgICAgICAgICAgIHBsYXRmb3JtL3RleHQvbWFjL1N0cmluZ01hYy5t
bSBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tIFwK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1NpemVNYWMubW0gXAog
ICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWMubW0gXAogICAgICAg
ICAgICAgcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXIubW0gXAogICAg
ICAgICAgICAgcGxhdGZvcm0vbWFjL1dlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xs
ZXIubW0gXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MjMsOSArMTQyMyw5IEBACiAgICAgICAgICAgICAjIHRoZSBzcGVj
aWZpYyBleGNsdXNpb25zIGluIHRoZSAic291cmNlcyEiIGxpc3QgYmVsb3cuCiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjXFwubW0kJ10sCiAgICAgICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjXFwubW0kJ10s
Ci0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9p
bnRNYWNcXC5tbSQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRmxvYXRSZWN0TWFjXFwubW0kJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hY1xcLm1tJCddLAorICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1BvaW50TWFjXFwubW0kJ10s
CisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
UmVjdE1hY1xcLm1tJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc1NpemVNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWNcXC5jcHAkJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFj
XFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ludFJlY3RNYWNcXC5tbSQnXSwKQEAgLTE0OTIsOSArMTQ5Miw5IEBACiAgICAgICAgIH1dLAog
ICAgICAgICBbJ09TPT0ibWFjIiBhbmQgdXNlX3NraWE9PTEnLCB7CiAgICAgICAgICAgJ3NvdXJj
ZXMvJzogWwotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zs
b2F0UG9pbnRDR1xcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFJlY3RDR1xcLmNwcCQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDR1xcLmNwcCQnXSwKKyAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1BvaW50Q0dcXC5jcHAk
J10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NSZWN0Q0dcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NTaXplQ0dcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDR1xcLmNwcCQnXSwKICAgICAgICAgICAg
IFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0dcXC5jcHAkJ10sCiAg
ICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHXFwu
Y3BwJCddLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3MzQxLDQ2ICsyNzM0MSw2IEBACiAJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRQb2ludC5jcHAiCi0JCQkJCT4K
LQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGbG9hdFBvaW50LmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50M0QuY3BwIgot
CQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcRmxvYXRQb2ludDNELmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJ
PEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFF1YWQu
Y3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRRdWFkLmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0J
CQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFJl
Y3QuY3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRSZWN0LmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+
Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9h
dFNpemUuY3BwIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRTaXplLmgiCi0JCQkJCT4KLQkJCQk8L0Zp
bGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xG
b250LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI3NTI5LDYgKzI3NDg5LDQ2IEBACiAJ
CQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xHcmFwaGljc1BvaW50LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNz
UG9pbnQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzUG9pbnQzRC5jcHAiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xHcmFwaGljc1BvaW50M0QuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzUXVhZC5jcHAi
CisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xHcmFwaGljc1F1YWQuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNz
UmVjdC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHcmFwaGljc1JlY3QuaCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEdyYXBoaWNzU2l6ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xHcmFwaGljc1NpemUuaCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEdyYXBoaWNzVHlwZXMuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtMjgz
NTYsMTQgKzI4MzU2LDE0IEBACiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0Zp
bGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XGNnXEZsb2F0UG9pbnRDRy5jcHAiCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXGNnXEZvbnRQbGF0Zm9ybURhdGEuaCIKIAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgogCQkJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKIAkJCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKIAkJCQkJCQk+CiAJCQkJCQkJPFRvb2wKLQkJCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wi
CiAJCQkJCQkJLz4KIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24KQEAgLTI4MzcxLDEyICsyODM3MSwxMiBAQAogCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgogCQkJCQkJCT4KIAkJCQkJCQk8VG9vbAotCQkJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKIAkJCQkJCQkvPgog
CQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGbG9hdFJlY3RDRy5jcHAi
CisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYWRpZW50Q0cu
Y3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgpAQCAtMjgzOTYsNyArMjgzOTYsNyBAQAogCQkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGbG9hdFNpemVDRy5jcHAiCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYXBoaWNzQ29udGV4dENHLmNw
cCIKIAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQkJCU5hbWU9IkRlYnVn
X0NhaXJvX0NGTGl0ZXxXaW4zMiIKQEAgLTI4NDE2LDcgKzI4NDE2LDcgQEAKIAkJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKLQkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcRm9udFBsYXRmb3JtRGF0YS5oIgorCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDRy5oIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJ
CQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgpAQCAtMjg0MzYsNyArMjg0MzYsNyBA
QAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQot
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFkaWVudENHLmNw
cCIKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhcGhpY3NQ
b2ludENHLmNwcCIKIAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQkJCU5h
bWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKQEAgLTI4NDU2LDcgKzI4NDU2LDcgQEAKIAkJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKLQkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwIgorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGlj
c1JlY3RDRy5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJCQlO
YW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCkBAIC0yODQ3NiwxNCArMjg0NzYsMTQgQEAK
IAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKLQkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCIKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcY2dcR3JhcGhpY3NTaXplQ0cuY3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uCiAJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgogCQkJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgogCQkJCQkJCT4KIAkJCQkJCQk8VG9vbAotCQkJCQkJCQlO
YW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
IAkJCQkJCQkvPgogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgpAQCAtMjg0OTEsNyArMjg0OTEsNyBAQAogCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgogCQkJCQkJCT4KIAkJCQkJCQk8VG9vbAotCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1
aWxkVG9vbCIKKwkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQkJCQkvPgogCQkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMCw4ICsyMjAsOCBAQAogCQkwRkQzMDgwRjExN0NGN0U3MDBB
NzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDgwRDExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVC
YXNlLmggKi87IH07CiAJCTBGRDMwOEQ1MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMzA4
RDMxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5jcHAgKi87IH07CiAJCTBGRDMwOEQ2
MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDMwOEQ0MTE3RDE2ODQwMEE3OTFGNyAvKiBSZW5k
ZXJJRnJhbWUuaCAqLzsgfTsKLQkJMEZENzIzODIwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVh
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIz
ODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAvKiBG
bG9hdFF1YWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgKi87IH07CisJCTBG
RDcyMzgyMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgwMEVDOEJEOTMwMENBNURENyAv
KiBHcmFwaGljc1F1YWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRkQ3MjM4MzBFQzhCRDkzMDBDQTVERDcgLyogR3JhcGhpY3NRdWFkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgxMEVD
OEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwICovOyB9OwogCQkwRkY1MDI1QjEwMkJB
OTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAyNTkxMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxl
TWVkaWEuaCAqLzsgfTsKIAkJMEZGNTAyNUMxMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxlTWVk
aWEubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1
MDI1QTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5tbSAqLzsgfTsKIAkJMEZGNTAy
NjMxMDJCQTkyQzAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAyNjIxMDJCQTkyQjAwNjZG
MzlBIC8qIERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oICovOyB9OwpAQCAtNDMzMCw5ICs0MzMwLDkg
QEAKIAkJQjI2NkNENEQwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjZDRDRCMEMzQUVD
NjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUIyNjZDRDRFMEMzQUVD
NjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhj
ZXB0aW9uLmggKi87IH07CiAJCUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENH
LmNwcCAqLzsgfTsKLQkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUy
QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NUEw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFJlY3RDRy5jcHAgKi87IH07Ci0JCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNp
emVDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9OworCQlCMjc1
MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludENHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovOyB9OworCQlCMjc1MzU1QTBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdENH
LmNwcCAqLzsgfTsKKwkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNH
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUz
NTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVDRy5jcHAgKi87IH07CiAJCUIyNzUz
NTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNl
Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3
NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovOyB9OwogCQlCMjc1
MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBCMDUzODE0MDAyQ0U2NEYgLyog
SW50UG9pbnRDRy5jcHAgKi87IH07CkBAIC00MzQzLDEyICs0MzQzLDEyIEBACiAJCUIyNzUzNTY1
MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyog
UERGRG9jdW1lbnRJbWFnZS5oICovOyB9OwogCQlCMjc1MzU2NjBCMDUzODE0MDAyQ0U2NEYgLyog
Q29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLzsgfTsKIAkJQjI3NTM1Njcw
QjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMjc1MzU2ODBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQ
b2ludC5jcHAgKi87IH07Ci0JCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUz
QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNzUzNTZBMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI3NTM1M0MwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgKi87IH07Ci0JCUIy
NzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNFMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFNpemUuY3BwICovOyB9OwotCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYg
LyogRmxvYXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjI3NTM1NjgwQjA1MzgxNDAw
MkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9p
bnQuY3BwICovOyB9OworCQlCMjc1MzU2OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2lu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1
M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMjc1MzU2QTBCMDUzODE0MDAyQ0U2NEYg
LyogR3JhcGhpY3NSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuY3BwICov
OyB9OworCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzRDBCMDUzODE0
MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjI3NTM1NkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNz
U2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmNwcCAqLzsgfTsKKwkJQjI3
NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUIyNzUzNTZFMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MDBCMDUzODE0MDAyQ0U2
NEYgLyogSWNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUIyNzUzNTZGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MTBCMDUzODE0MDAyQ0U2
NEYgLyogSW1hZ2UuY3BwICovOyB9OwogCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUz
NTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MzU5LDkgKzQzNTksOSBAQAogCQlCMjc1MzU3NTBC
MDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDcwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3
NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRT
aXplSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyNzUzNTc3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRBMEIwNTM4MTQwMDJDRTY0
RiAvKiBDb2xvck1hYy5tbSAqLzsgfTsKLQkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMjc1MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLzsgfTsK
LQkJQjI3NTM1NzkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdE1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRDMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi87IH07Ci0JCUIyNzUzNTdBMEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFNpemVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tICov
OyB9OworCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludE1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRCMEIw
NTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tICovOyB9OworCQlCMjc1MzU3OTBC
MDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzUmVjdE1hYy5tbSAqLzsgfTsKKwkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzU2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVNYWMubW0gKi87
IH07CiAJCUIyNzUzNTdCMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRFMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbWFnZU1hYy5tbSAqLzsgfTsKIAkJQjI3NTM1N0MwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tICovOyB9Owog
CQlCMjc1MzU3RDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdE1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTUwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRSZWN0TWFjLm1tICovOyB9OwpAQCAtNDQ4Miw4ICs0NDgyLDggQEAKIAkJQjJDQjky
NjIwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVFMEI1QkRBMDIwMDlC
QUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2UubW0gKi87IH07CiAJCUIyQ0I5MjYzMEI1QkRB
MDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNCOTI1RjBCNUJEQTAyMDA5QkFBNzgg
LyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovOyB9OwogCQlCMkNCOTI2NDBCNUJEQTAy
MDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAv
KiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovOyB9OwotCQlCMkUyN0M5RjBCMEYyQjA5
MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50
M0QuY3BwICovOyB9OwotCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNE
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5
RTBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8q
IEdyYXBoaWNzUG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmNw
cCAqLzsgfTsKKwkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFMjdDOUUw
QjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0MyAv
KiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5jcHAgKi87
IH07CiAJCUIyRTRFQzk4MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTRFQzk1MEQwMEMyMkIw
MDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLzsgfTsKIAkJQjJFRDk3NzEwQjFGNTVDRTAwMjU3
RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGljc0Nv
bnRleHRDRy5jcHAgKi87IH07CkBAIC02NTk3LDggKzY1OTcsOCBAQAogCQkwRkQzMDgwRDExN0NG
N0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlckZyYW1lQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkQzMDhEMzExN0QxNjg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcklGcmFtZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDMwOEQ0MTE3RDE2ODQwMEE3OTFGNyAvKiBSZW5kZXJJRnJh
bWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVySUZyYW1lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDcyMzgwMEVDOEJEOTMwMENBNURENyAvKiBG
bG9hdFF1YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRRdWFkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDcyMzgxMEVDOEJEOTMwMENBNURENyAv
KiBGbG9hdFF1YWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxv
YXRRdWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZENzIzODAwRUM4QkQ5
MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc1F1YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZENzIz
ODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1F1YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY1MDI1OTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHlsZU1lZGlhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjUwMjVBMTAyQkE5MDEwMDY2RjM5QSAvKiBET01TdHls
ZU1lZGlhLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NU3R5
bGVNZWRpYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNTAyNjIxMDJCQTky
QjAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01TdHlsZU1lZGlhSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEwOTE4LDkgKzEwOTE4LDkgQEAKIAkJQjI2NkNENEIwQzNBRUM2NTAwRUIw
OEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNjZDRDRDMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9u
TWF0cml4Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1
MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdENHLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
bG9hdFNpemVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTJCMEIw
NTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzUG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NSZWN0Q0cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdyYXBoaWNzU2l6ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VTb3VyY2VDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRQ
b2ludENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTMxLDEyICsxMDkz
MSwxMiBAQAogCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUERGRG9jdW1lbnRJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyog
Q29sb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MzkwQjA1MzgxNDAwMkNFNjRG
IC8qIENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxv
YXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTNCMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGbG9hdFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTND
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFNpemUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBo
aWNzUG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzUG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzQjBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JhcGhpY3NQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Mjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1JlY3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1JlY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3Jh
cGhpY3NTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1M0YwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JhcGhpY3NTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJY29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQx
MEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1
MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDk0Nyw5
ICsxMDk0Nyw5IEBACiAJCUIyNzUzNTQ3MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRTaXplLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50U2l6ZUhhc2guaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NEEwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9y
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbG9yTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzU0QjBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBGbG9hdFBvaW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
Mjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0UmVjdE1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGbG9hdFNpemVN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTRCMEIwNTM4MTQwMDJD
RTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEdyYXBoaWNzUG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhpY3NSZWN0TWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYg
LyogR3JhcGhpY3NTaXplTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEdyYXBoaWNzU2l6ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEltYWdlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW50UG9pbnRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTUwMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRSZWN0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElu
dFJlY3RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTA3NCw4ICsxMTA3
NCw4IEBACiAJCUIyQ0I5MjVFMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFu
Y2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NU1ZHRWxl
bWVudEluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTI1RjBC
NUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTI2MDBCNUJEQTAyMDA5QkFBNzggLyogRE9N
U1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50M0QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0Ig
LyogRmxvYXRQb2ludDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9h
dFBvaW50M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJFMjdDOUQwQjBGMkIw
OTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR3JhcGhpY3NQb2ludDNELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NQb2ludDNELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk0MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkda
b29tRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1pv
b21FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk1MEQwMEMy
MkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR1pvb21FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkU0
RUM5NjBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gU1ZHWm9vbUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE3ODgzLDE0ICsxNzg4MywxNCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCi0JCQkJ
QjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8sCi0JCQkJQjI3
NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKLQkJCQlCMjc1MzUy
RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAogCQkJCUJDNTNDNjBBMERB
NTZDRjEwMDIxRUI1RCAvKiBHcmFkaWVudENHLmNwcCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5
MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgKi8sCiAJCQkJQjJFRDk3NzAwQjFG
NTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLywKIAkJCQk5MzQ5MDdFMzEy
NUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQlBODBENjcwNzBF
OUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywK
KwkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludENHLmNwcCAqLywK
KwkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3BwICovLAor
CQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVDRy5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAogCQkJ
CTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCiAJ
CQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCkBA
IC0xNzkxOSw5ICsxNzkxOSw2IEBACiAJCQkJMzdDMjM2MEYxMDk3RUU3NzAwRUY5RjcyIC8qIENv
bXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTM3QzIzODFGMTA5OEM4NDIwMEVGOUY3MiAv
KiBDb21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAgKi8sCiAJCQkJMzdDMjM4MjAxMDk4Qzg0
MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0LmNwcCAqLywKLQkJCQlC
Mjc1MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLywKLQkJCQlCMjc1
MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovLAotCQkJCUIyNzUzNTRE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi8sCiAJCQkJQjJBRkZDNzQwRDAw
QTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLywKIAkJCQkzN0MyMzYwQTEwOTdFREVE
MDBFRjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCAqLywKIAkJCQlCMkFGRkM3NTBEMDBB
NUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8sCkBAIC0xNzkzMCw2
ICsxNzkyNyw5IEBACiAJCQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZVRy
ZWVOb2RlTWFjLmNwcCAqLywKIAkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0gKi8sCiAJCQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2IC8qIEdy
YXBoaWNzQ29udGV4dE1hYy5tbSAqLywKKwkJCQlCMjc1MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NQb2ludE1hYy5tbSAqLywKKwkJCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NSZWN0TWFjLm1tICovLAorCQkJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1NpemVNYWMubW0gKi8sCiAJCQkJQjI3NTM1OEQwQjA1M0E2NjAwMkNFNjRGIC8qIElj
b25NYWMubW0gKi8sCiAJCQkJQjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1t
ICovLAogCQkJCUIyNzUzNTRGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1hYy5tbSAqLywK
QEAgLTE3OTc0LDE2ICsxNzk3NCw2IEBACiAJCQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1NjUyIC8q
IENvbG9yU3BhY2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFy
cmF5LmggKi8sCiAJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5o
ICovLAotCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCAqLywK
LQkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovLAotCQkJCUIy
RTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLAotCQkJCUIyRTI3
QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLywKLQkJCQkwRkQ3MjM4MTBF
QzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLywKLQkJCQkwRkQ3MjM4MDBFQzhCRDkz
MDBDQTVERDcgLyogRmxvYXRRdWFkLmggKi8sCi0JCQkJQjI3NTM1M0MwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdC5jcHAgKi8sCi0JCQkJQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdC5oICovLAotCQkJCUIyNzUzNTNFMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUu
Y3BwICovLAotCQkJCUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLywK
IAkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCiAJCQkJQjJDM0RB
NTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1NTBCMDBD
ODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCkBAIC0xODAyNSw2ICsxODAxNSwxNiBAQAogCQkJ
CTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkw
RjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgw
QjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCisJCQkJQjI3
NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuY3BwICovLAorCQkJCUIyNzUz
NTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50LmggKi8sCisJCQkJQjJFMjdDOUQw
QjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5jcHAgKi8sCisJCQkJQjJFMjdDOUUw
QjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5oICovLAorCQkJCTBGRDcyMzgxMEVD
OEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwICovLAorCQkJCTBGRDcyMzgwMEVDOEJE
OTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuaCAqLywKKwkJCQlCMjc1MzUzQzBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NSZWN0LmNwcCAqLywKKwkJCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NSZWN0LmggKi8sCisJCQkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzU2l6ZS5jcHAgKi8sCisJCQkJQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzU2l6ZS5oICovLAogCQkJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGlj
c1R5cGVzLmNwcCAqLywKIAkJCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NU
eXBlcy5oICovLAogCQkJCTc3QTE3QTdBMTJGMjg5MEIwMDRFMDJGNiAvKiBHcmFwaGljc1R5cGVz
M0QuaCAqLywKQEAgLTIxMTg2LDExICsyMTE4NiwxMSBAQAogCQkJCTQ5RUVDREU2MTA1MDNDMjQw
MDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQkM1RDgyMTM4
QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDcz
QkFBMEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAot
CQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggaW4gSGVhZGVycyAq
LywKLQkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXpl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhp
Y3NQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8q
IEdyYXBoaWNzUG9pbnQzRC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZENzIzODIwRUM4QkQ5MzAw
Q0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjI3NTM1NkIwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjI3NTM1
NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNDA5NSwxNyArMjQwOTUsMTcgQEAKIAkJCQlBOENGRjA0RDBBMTU0RjA5
MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUVF
Q0RFNTEwNTAzQzI0MDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTZFQkM1RDgxMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQz
RC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTc4MEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZENzIzODMwRUM4QkQ5
MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU2QTBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUz
NTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCMjc1MzU3OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQjI3NTM1NkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUzNTY4MEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1BvaW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRTI3QzlGMEIwRjJCMDkwMEYx
N0M3QiAvKiBHcmFwaGljc1BvaW50M0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NTkw
QjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludE1hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NkEwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNz
UmVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1QTBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NzkwQjA1MzgxNDAw
MkNFNjRGIC8qIEdyYXBoaWNzUmVjdE1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUzNTZD
MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUIyNzUzNTdBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTYwMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTYyMEQwMDZDRDYwMEVGNkYyNiAv
KiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmpl
Y3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlJ
bWFnZU1hcExpbmsuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTY4Niw3ICs2ODYsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyCiAgICAgQVNTRVJUKG1fcmVuZGVyZXIp
OwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBtX3JlbmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3JlbmRlcmVyLT5mcmFtZSgp
LT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRS
ZWN0KCk7CiAgICAgdmlld1JlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKICAgICByZXR1cm4g
dmlld1JlY3QuaXNFbXB0eSgpOwogfQpAQCAtMTQyNiw3ICsxNDI2LDcgQEAgSW50UmVjdCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZAogICAgIAogICAgIC8vIGFic29sdXRlRm9jdXNS
aW5nUXVhZHMgd2lsbCBxdWVyeSB0aGUgaGllcmFyY2h5IGJlbG93IHRoaXMgZWxlbWVudCwgd2hp
Y2ggZm9yIGxhcmdlIHdlYnBhZ2VzIGNhbiBiZSB2ZXJ5IHNsb3cuCiAgICAgLy8gRm9yIGEgd2Vi
IGFyZWEsIHdoaWNoIHdpbGwgaGF2ZSB0aGUgbW9zdCBlbGVtZW50cyBvZiBhbnkgZWxlbWVudCwg
YWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNlZC4KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKKyAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBxdWFkczsKICAgICBpZiAob2JqLT5pc1RleHQo
KSkKICAgICAgICAgdG9SZW5kZXJUZXh0KG9iaiktPmFic29sdXRlUXVhZHMocXVhZHMsIFJlbmRl
clRleHQ6OkNsaXBUb0VsbGlwc2lzKTsKICAgICBlbHNlIGlmIChpc1dlYkFyZWEoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0J
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCArNzYsMTAgQEAgbXkgJXN2Z1R5
cGVOZWVkaW5nVGVhck9mZiA9ICgKICAgICAiU1ZHTnVtYmVyIiA9PiAiU1ZHUHJvcGVydHlUZWFy
T2ZmPGZsb2F0PiIsCiAgICAgIlNWR051bWJlckxpc3QiID0+ICJTVkdMaXN0UHJvcGVydHlUZWFy
T2ZmPFNWR051bWJlckxpc3Q+IiwKICAgICAiU1ZHUGF0aFNlZ0xpc3QiID0+ICJTVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZiIsCi0gICAgIlNWR1BvaW50IiA9PiAiU1ZHUHJvcGVydHlUZWFy
T2ZmPEZsb2F0UG9pbnQ+IiwKKyAgICAiU1ZHUG9pbnQiID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8
R3JhcGhpY3NQb2ludD4iLAogICAgICJTVkdQb2ludExpc3QiID0+ICJTVkdMaXN0UHJvcGVydHlU
ZWFyT2ZmPFNWR1BvaW50TGlzdD4iLAogICAgICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIiA9PiAi
U1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+IiwKLSAgICAiU1ZHUmVj
dCIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+IiwKKyAgICAiU1ZHUmVjdCIgPT4g
IlNWR1Byb3BlcnR5VGVhck9mZjxHcmFwaGljc1JlY3Q+IiwKICAgICAiU1ZHU3RyaW5nTGlzdCIg
PT4gIlNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHU3RyaW5nTGlzdD4iLAogICAgICJT
VkdUcmFuc2Zvcm0iID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPiIsCiAgICAg
IlNWR1RyYW5zZm9ybUxpc3QiID0+ICJTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsyODYsNyBA
QCBzdWIgQWRkSW5jbHVkZXNGb3JTVkdBbmltYXRlZFR5cGUKICAgICAkdHlwZSA9fiBzL1NWR0Fu
aW1hdGVkLy87CiAKICAgICBpZiAoJHR5cGUgZXEgIlBvaW50IiBvciAkdHlwZSBlcSAiUmVjdCIp
IHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siRmxvYXQkdHlwZS5oIn0gPSAxOworICAgICAgICAk
aW1wbEluY2x1ZGVzeyJHcmFwaGljcyR0eXBlLmgifSA9IDE7CiAgICAgfSBlbHNpZiAoJHR5cGUg
ZXEgIlN0cmluZyIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJpbmcuaCJ9
ID0gMTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAt
MjEzLDcgKzIxMyw3IEBAIHN1YiBHZXRTVkdQcm9wZXJ0eVR5cGVzCiAgICAgfQogCiAgICAgaWYg
KCRzdmdQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgJHN2Z1Byb3BlcnR5VHlwZSA9ICJTVkdQb2lu
dCIgaWYgJHN2Z1Byb3BlcnR5VHlwZSBlcSAiRmxvYXRQb2ludCI7CisgICAgICAgICRzdmdQcm9w
ZXJ0eVR5cGUgPSAiU1ZHUG9pbnQiIGlmICRzdmdQcm9wZXJ0eVR5cGUgZXEgIkdyYXBoaWNzUG9p
bnQiOwogICAgIH0KIAogICAgIHJldHVybiAoJHN2Z1Byb3BlcnR5VHlwZSwgJHN2Z0xpc3RQcm9w
ZXJ0eVR5cGUsICRzdmdOYXRpdmVUeXBlKTsKQEAgLTI3NSw3ICsyNzUsNyBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnRlbXBsYXRlPHR5
cGVuYW1lIFByb3BlcnR5VHlwZT4gY2xhc3MgU1ZHTGlzdFByb3BlcnR5VGVhck9mZjtcbiIpOwog
ICAgICAgICB9CiAgICAgfQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNzIEZsb2F0
UmVjdDtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGUgJiYgJHN2Z1Byb3BlcnR5VHlwZSBlcSAiRmxv
YXRSZWN0IjsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyBHcmFwaGljc1JlY3Q7
XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQcm9wZXJ0eVR5cGUgZXEgIkdyYXBoaWNz
UmVjdCI7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNsYXNzTmFtZSB7XG4i
KTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVk
ZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDYW52YXNH
cmFkaWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpjc3NU
ZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVl
OjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFu
Z2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0Vs
ZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGNoYW5nZWRSZWN0KQogewogICAgIEludFJlY3Qg
aW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAgICAgUmVu
ZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5k
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgY2hh
bmdlZFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVt
ZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBjaGFuZ2VkUmVjdCk7CiAgICAgdmlydHVhbCB2b2lk
IGNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgY2Fu
dmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTIgKzE0
MiwxMiBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50CiAgICAgZmxv
YXQgZ3JhZGllbnRMZW5ndGggPSAwOwogICAgIGJvb2wgY29tcHV0ZWRHcmFkaWVudExlbmd0aCA9
IGZhbHNlOwogICAgIAotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRTdGFydCA9IGdyYWRpZW50LT5w
MCgpOwotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7CisgICAgR3JhcGhpY3NQb2ludCBncmFk
aWVudFN0YXJ0ID0gZ3JhZGllbnQtPnAwKCk7CisgICAgR3JhcGhpY3NQb2ludCBncmFkaWVudEVu
ZDsKICAgICBpZiAoaXNMaW5lYXJHcmFkaWVudCgpKQogICAgICAgICBncmFkaWVudEVuZCA9IGdy
YWRpZW50LT5wMSgpOwogICAgIGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnQoKSkKLSAgICAgICAg
Z3JhZGllbnRFbmQgPSBncmFkaWVudFN0YXJ0ICsgRmxvYXRTaXplKGdyYWRpZW50LT5lbmRSYWRp
dXMoKSwgMCk7CisgICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEdyYXBoaWNz
U2l6ZShncmFkaWVudC0+ZW5kUmFkaXVzKCksIDApOwogICAgICAgICAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRD
b2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQ1NT
R3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAgICAgICAgICAgIGVsc2UgaWYgKENT
U1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7CiAgICAgICAgICAgICAg
ICAgZmxvYXQgbGVuZ3RoID0gc3RvcC5tX3Bvc2l0aW9uLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dHlsZSwgcm9vdFN0eWxlLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgRmxv
YXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQpOworICAgICAg
ICAgICAgICAgICAgICBHcmFwaGljc1NpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBn
cmFkaWVudEVuZCk7CiAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50TGVuZ3RoID0gZ3JhZGll
bnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHN0b3BzW2ldLm9mZnNldCA9IChncmFkaWVudExlbmd0aCA+IDApID8gbGVuZ3RoIC8gZ3Jh
ZGllbnRMZW5ndGggOiAwOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1
ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAgICAgICAgICAgIC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhl
IGNvcm5lcnMgb2YgdGhlIGJveC4KICAgICAgICAgICAgIGlmIChpc1JhZGlhbEdyYWRpZW50KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3Jh
ZGllbnRFbmQpOworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUgZ3JhZGllbnRTaXpl
KGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7CiAgICAgICAgICAgICAgICAgICAgIGdyYWRp
ZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzEwLDEwICszMTAsMTAgQEAgdm9pZCBDU1NHcmFk
aWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1TdG9wczsgKytpKQogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9
IChzdG9wc1tpXS5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKIAotICAgICAgICAgICAg
RmxvYXRQb2ludCBwMCA9IGdyYWRpZW50LT5wMCgpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBw
MSA9IGdyYWRpZW50LT5wMSgpOwotICAgICAgICAgICAgZ3JhZGllbnQtPnNldFAwKEZsb2F0UG9p
bnQocDAueCgpICsgZmlyc3RPZmZzZXQgKiAocDEueCgpIC0gcDAueCgpKSwgcDAueSgpICsgZmly
c3RPZmZzZXQgKiAocDEueSgpIC0gcDAueSgpKSkpOwotICAgICAgICAgICAgZ3JhZGllbnQtPnNl
dFAxKEZsb2F0UG9pbnQocDEueCgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS54KCkgLSBwMC54
KCkpLCBwMS55KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLnkoKSAtIHAwLnkoKSkpKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcDAgPSBncmFkaWVudC0+cDAoKTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQgcDEgPSBncmFkaWVudC0+cDEoKTsKKyAgICAgICAgICAgIGdyYWRpZW50
LT5zZXRQMChHcmFwaGljc1BvaW50KHAwLngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngoKSAtIHAw
LngoKSksIHAwLnkoKSArIGZpcnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAwLnkoKSkpKTsKKyAgICAg
ICAgICAgIGdyYWRpZW50LT5zZXRQMShHcmFwaGljc1BvaW50KHAxLngoKSArIChsYXN0T2Zmc2V0
IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEueSgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChw
MS55KCkgLSBwMC55KCkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudCgp
KSB7CiAgICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRoZSBwb2ludHMgPCAwLCB3
ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0byB0aGUgbGFyZ2VzdCBw
b2ludC4KICAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsKQEAgLTM5NSw5ICszOTUs
OSBAQCBzdGF0aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoQ1NTUHJpbWl0CiAgICAgfQogfQog
Ci1GbG9hdFBvaW50IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3QsIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQsIFJlbmRlclN0eWxlKiBz
dHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK0dyYXBo
aWNzUG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZh
bHVlKiBmaXJzdCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIEZs
b2F0UG9pbnQgcmVzdWx0OworICAgIEdyYXBoaWNzUG9pbnQgcmVzdWx0OwogCiAgICAgaWYgKGZp
cnN0KQogICAgICAgICByZXN1bHQuc2V0WChwb3NpdGlvbkZyb21WYWx1ZShmaXJzdCwgc3R5bGUs
IHJvb3RTdHlsZSwgc2l6ZSwgdHJ1ZSkpOwpAQCAtNDczLDcgKzQ3Myw3IEBAIFN0cmluZyBDU1NM
aW5lYXJHcmFkaWVudFZhbHVlOjpjc3NUZXh0KCkKIH0KIAogLy8gQ29tcHV0ZSB0aGUgZW5kcG9p
bnRzIHNvIHRoYXQgYSBncmFkaWVudCBvZiB0aGUgZ2l2ZW4gYW5nbGUgY292ZXJzIGEgYm94IG9m
IHRoZSBnaXZlbiBzaXplLgotc3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFu
Z2xlRGVnLCBjb25zdCBJbnRTaXplJiBzaXplLCBGbG9hdFBvaW50JiBmaXJzdFBvaW50LCBGbG9h
dFBvaW50JiBzZWNvbmRQb2ludCkKK3N0YXRpYyB2b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9h
dCBhbmdsZURlZywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NQb2ludCYgZmlyc3RQb2lu
dCwgR3JhcGhpY3NQb2ludCYgc2Vjb25kUG9pbnQpCiB7CiAgICAgYW5nbGVEZWcgPSBmbW9kZihh
bmdsZURlZywgMzYwKTsKICAgICBpZiAoYW5nbGVEZWcgPCAwKQpAQCAtNTEyLDcgKzUxMiw3IEBA
IHN0YXRpYyB2b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9hdCBhbmcKICAgICAvLyBDb21wdXRl
IHN0YXJ0IGNvcm5lciByZWxhdGl2ZSB0byBjZW50ZXIuCiAgICAgZmxvYXQgaGFsZkhlaWdodCA9
IHNpemUuaGVpZ2h0KCkgLyAyOwogICAgIGZsb2F0IGhhbGZXaWR0aCA9IHNpemUud2lkdGgoKSAv
IDI7Ci0gICAgRmxvYXRQb2ludCBlbmRDb3JuZXI7CisgICAgR3JhcGhpY3NQb2ludCBlbmRDb3Ju
ZXI7CiAgICAgaWYgKGFuZ2xlRGVnIDwgOTApCiAgICAgICAgIGVuZENvcm5lci5zZXQoaGFsZldp
ZHRoLCBoYWxmSGVpZ2h0KTsKICAgICBlbHNlIGlmIChhbmdsZURlZyA8IDE4MCkKQEAgLTUzOSw4
ICs1MzksOCBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFkaWVudFZhCiAgICAg
CiAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RQb2lu
dDsKLSAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZmlyc3RQ
b2ludDsKKyAgICBHcmFwaGljc1BvaW50IHNlY29uZFBvaW50OwogICAgIGlmIChtX2FuZ2xlKSB7
CiAgICAgICAgIGZsb2F0IGFuZ2xlID0gbV9hbmdsZS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRyk7CiAgICAgICAgIGVuZFBvaW50c0Zyb21BbmdsZShhbmdsZSwgc2l6
ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQpOwpAQCAtNjQ5LDE5ICs2NDksMTkgQEAgZmxvYXQg
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6cmVzb2x2ZVJhZAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXN0YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb25zdCBGbG9hdFBvaW50
JiBwLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0UG9pbnQmIGNvcm5lcikKK3N0YXRpYyBm
bG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25z
dCBHcmFwaGljc1NpemUmIHNpemUsIEdyYXBoaWNzUG9pbnQmIGNvcm5lcikKIHsKLSAgICBGbG9h
dFBvaW50IHRvcExlZnQ7Ci0gICAgZmxvYXQgdG9wTGVmdERpc3RhbmNlID0gRmxvYXRTaXplKHAg
LSB0b3BMZWZ0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdDsK
KyAgICBmbG9hdCB0b3BMZWZ0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcExlZnQpLmRp
YWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHNpemUud2lkdGgoKSwg
MCk7Ci0gICAgZmxvYXQgdG9wUmlnaHREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gdG9wUmlnaHQp
LmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BSaWdodChzaXplLndpZHRo
KCksIDApOworICAgIGZsb2F0IHRvcFJpZ2h0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRv
cFJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KDAs
IHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbUxlZnREaXN0YW5jZSA9IEZsb2F0U2l6
ZShwIC0gYm90dG9tTGVmdCkuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1BvaW50IGJv
dHRvbUxlZnQoMCwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZmxvYXQgYm90dG9tTGVmdERpc3RhbmNl
ID0gR3JhcGhpY3NTaXplKHAgLSBib3R0b21MZWZ0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAg
RmxvYXRQb2ludCBib3R0b21SaWdodChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAg
IGZsb2F0IGJvdHRvbVJpZ2h0RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbVJpZ2h0KS5k
aWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgYm90dG9tUmlnaHQoc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNlID0gR3Jh
cGhpY3NTaXplKHAgLSBib3R0b21SaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAgIGNvcm5l
ciA9IHRvcExlZnQ7CiAgICAgZmxvYXQgbWluRGlzdGFuY2UgPSB0b3BMZWZ0RGlzdGFuY2U7CkBA
IC02ODIsMTkgKzY4MiwxOSBAQCBzdGF0aWMgZmxvYXQgZGlzdGFuY2VUb0Nsb3Nlc3RDb3JuZXIo
Y29uCiAgICAgcmV0dXJuIG1pbkRpc3RhbmNlOwogfQogCi1zdGF0aWMgZmxvYXQgZGlzdGFuY2VU
b0ZhcnRoZXN0Q29ybmVyKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgRmxvYXRQb2ludCYgY29ybmVyKQorc3RhdGljIGZsb2F0IGRpc3RhbmNlVG9GYXJ0aGVzdENv
cm5lcihjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1NpemUmIHNpemUsIEdy
YXBoaWNzUG9pbnQmIGNvcm5lcikKIHsKLSAgICBGbG9hdFBvaW50IHRvcExlZnQ7Ci0gICAgZmxv
YXQgdG9wTGVmdERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSB0b3BMZWZ0KS5kaWFnb25hbExlbmd0
aCgpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdDsKKyAgICBmbG9hdCB0b3BMZWZ0RGlzdGFu
Y2UgPSBHcmFwaGljc1NpemUocCAtIHRvcExlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBG
bG9hdFBvaW50IHRvcFJpZ2h0KHNpemUud2lkdGgoKSwgMCk7Ci0gICAgZmxvYXQgdG9wUmlnaHRE
aXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gdG9wUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAg
R3JhcGhpY3NQb2ludCB0b3BSaWdodChzaXplLndpZHRoKCksIDApOworICAgIGZsb2F0IHRvcFJp
Z2h0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcFJpZ2h0KS5kaWFnb25hbExlbmd0aCgp
OwogCi0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KDAsIHNpemUuaGVpZ2h0KCkpOwotICAgIGZs
b2F0IGJvdHRvbUxlZnREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gYm90dG9tTGVmdCkuZGlhZ29u
YWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1BvaW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5oZWlnaHQo
KSk7CisgICAgZmxvYXQgYm90dG9tTGVmdERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0
b21MZWZ0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21SaWdodChz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbVJpZ2h0RGlzdGFu
Y2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbVJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdy
YXBoaWNzUG9pbnQgYm90dG9tUmlnaHQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAg
ICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0b21SaWdo
dCkuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAgIGNvcm5lciA9IHRvcExlZnQ7CiAgICAgZmxvYXQg
bWF4RGlzdGFuY2UgPSB0b3BMZWZ0RGlzdGFuY2U7CkBAIC03MTcsNyArNzE3LDcgQEAgc3RhdGlj
IGZsb2F0IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihjbwogCiAvLyBDb21wdXRlIGhvcml6b250
YWwgcmFkaXVzIG9mIGVsbGlwc2Ugd2l0aCBjZW50ZXIgYXQgMCwwIHdoaWNoIHBhc3NlcyB0aHJv
dWdoIHAsIGFuZCBoYXMKIC8vIHdpZHRoL2hlaWdodCBnaXZlbiBieSBhc3BlY3RSYXRpby4KLXN0
YXRpYyBpbmxpbmUgZmxvYXQgaG9yaXpvbnRhbEVsbGlwc2VSYWRpdXMoY29uc3QgRmxvYXRTaXpl
JiBwLCBmbG9hdCBhc3BlY3RSYXRpbykKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaG9yaXpvbnRhbEVs
bGlwc2VSYWRpdXMoY29uc3QgR3JhcGhpY3NTaXplJiBwLCBmbG9hdCBhc3BlY3RSYXRpbykKIHsK
ICAgICAvLyB4XjIvYV4yICsgeV4yL2JeMiA9IDEKICAgICAvLyBhL2IgPSBhc3BlY3RSYXRpbywg
YiA9IGEvYXNwZWN0UmF0aW8KQEAgLTczMiwxMyArNzMyLDEzIEBAIFBhc3NSZWZQdHI8R3JhZGll
bnQ+IENTU1JhZGlhbEdyYWRpZW50VmEKICAgICAKICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
ID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgp
OwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RY
LmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwgc2l6
ZSk7CisgICAgR3JhcGhpY3NQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmly
c3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwg
c2l6ZSk7CiAgICAgaWYgKCFtX2ZpcnN0WCkKICAgICAgICAgZmlyc3RQb2ludC5zZXRYKHNpemUu
d2lkdGgoKSAvIDIpOwogICAgIGlmICghbV9maXJzdFkpCiAgICAgICAgIGZpcnN0UG9pbnQuc2V0
WShzaXplLmhlaWdodCgpIC8gMik7CiAKLSAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50ID0gY29t
cHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCByZW5kZXJlci0+
c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKKyAgICBHcmFwaGljc1BvaW50IHNlY29uZFBvaW50
ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCByZW5k
ZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKICAgICBpZiAoIW1fc2Vjb25kWCkKICAg
ICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAyKTsKICAgICBpZiAoIW1fc2Vj
b25kWSkKQEAgLTgxNCw3ICs4MTQsNyBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NSYWRpYWxH
cmFkaWVudFZhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENs
b3Nlc3RDb3JuZXI6IHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY29ybmVyOworICAgICAgICAg
ICAgR3JhcGhpY3NQb2ludCBjb3JuZXI7CiAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IGRp
c3RhbmNlVG9DbG9zZXN0Q29ybmVyKHNlY29uZFBvaW50LCBzaXplLCBjb3JuZXIpOwogICAgICAg
ICAgICAgaWYgKHNoYXBlID09IENpcmNsZSkKICAgICAgICAgICAgICAgICBzZWNvbmRSYWRpdXMg
PSBkaXN0YW5jZTsKQEAgLTgzMSw3ICs4MzEsNyBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NS
YWRpYWxHcmFkaWVudFZhCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEZhcnRoZXN0Q29ybmVy
OiB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKKyAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgY29ybmVyOwogICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBkaXN0YW5jZVRvRmFy
dGhlc3RDb3JuZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgICAgICAgICBpZiAo
c2hhcGUgPT0gQ2lyY2xlKQogICAgICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGRpc3RhbmNl
OwpAQCAtODU0LDcgKzg1NCw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRp
ZW50VmEKICAgICAvLyBhZGRTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVhdGlu
ZyBncmFkaWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKICAgICBpZiAobV9yZXBlYXRp
bmcpIHsKLSAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7CisgICAgICAgIEdyYXBoaWNzUG9pbnQg
Y29ybmVyOwogICAgICAgICBtYXhFeHRlbnQgPSBkaXN0YW5jZVRvRmFydGhlc3RDb3JuZXIoc2Vj
b25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc1Bv
aW50OwogY2xhc3MgR3JhZGllbnQ7CiAKIGVudW0gQ1NTR3JhZGllbnRUeXBlIHsgQ1NTTGluZWFy
R3JhZGllbnQsIENTU1JhZGlhbEdyYWRpZW50IH07CkBAIC04MCw3ICs4MCw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhZGllbnQ+IGNyZWF0ZUdyYWRpZW50KFJlbmRl
ck9iamVjdCosIGNvbnN0IEludFNpemUmKSA9IDA7CiAKICAgICAvLyBSZXNvbHZlIHBvaW50cy9y
YWRpaSB0byBmcm9udCBlbmQgdmFsdWVzLgotICAgIEZsb2F0UG9pbnQgY29tcHV0ZUVuZFBvaW50
KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJl
bmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmKTsKKyAgICBHcmFwaGljc1BvaW50
IGNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBJbnRTaXplJik7CiAg
ICAgCiAgICAgYm9vbCBpc0NhY2hlYWJsZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMjc1
LDcgKzI3NSw3IEBAIHN0YXRpYyBib29sIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwKIHN0
YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
IHsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChm
cmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKICAg
ICAgICAgaW50IGggPSAwOwogICAgICAgICBpbnQgdiA9IDA7CiAgICAgICAgIGlmIChwYXJzZUFz
cGVjdFJhdGlvKHZhbHVlLCBoLCB2KSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgYm9vbCBn
cmlkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1CiBzdGF0aWMgYm9vbCBkZXZpY2VfaGVpZ2h0TWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYgKHZhbHVlKSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnZpZXcoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgICAgIFJlbmRlclN0eWxlKiByb290U3R5
bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCk7
CiAgICAgICAgIHJldHVybiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGNvbXBhcmVWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlKSwgb3Ap
OwogICAgIH0KQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgYm9vbCBkZXZpY2VfaGVpZ2h0TWVk
aWFGZWF0dXJlRXZhCiBzdGF0aWMgYm9vbCBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVh
dHVyZVByZWZpeCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNn
ID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICAg
ICAgR3JhcGhpY3NSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpKTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgcmV0dXJu
IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oc2cud2lkdGgoKSksIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpLT5j
b21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSksIG9wKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0NsaWVudFJlY3QuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9DbGllbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBD
bGllbnRSZWN0OjpDbGllbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlCiB7CiB9CiAKLUNsaWVudFJl
Y3Q6OkNsaWVudFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorQ2xpZW50UmVjdDo6Q2xpZW50
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiAgICAgOiBtX3JlY3QocmVjdCkKIHsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaWZuZGVmIENsaWVudFJlY3RfaAogI2RlZmluZSBDbGllbnRSZWN0X2gKIAotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzksNyArMzks
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDbGllbnRSZWN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2xpZW50
UmVjdCk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0KHJlY3Qp
KTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2xpZW50UmVjdChyZWN0KSk7
IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkp
OyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQog
ICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KQEAg
LTUxLDkgKzUxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAg
IENsaWVudFJlY3QoKTsKICAgICAgICAgQ2xpZW50UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAg
ICAgIENsaWVudFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIENsaWVudFJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0Jik7CiAKLSAgICAgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICAgICAg
R3JhcGhpY3NSZWN0IG1fcmVjdDsKICAgICB9OyAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuY3BwCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KCkKIHsKIH0K
IAotQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+
JiBxdWFkcykKK0NsaWVudFJlY3RMaXN0OjpDbGllbnRSZWN0TGlzdChjb25zdCBWZWN0b3I8R3Jh
cGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgbV9saXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
cXVhZHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsg
KytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgQ2xpZW50UmVjdExpc3RfaAogI2RlZmluZSBDbGll
bnRSZWN0TGlzdF9oCiAKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzksNyArMzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2xpZW50UmVjdExpc3QgOiBwdWJsaWMgUmVmQ291
bnRlZDxDbGllbnRSZWN0TGlzdD4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2xpZW50UmVjdExpc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGll
bnRSZWN0TGlzdCk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+
IGNyZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbGllbnRSZWN0TGlzdChxdWFkcykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaWVudFJlY3RMaXN0PiBjcmVhdGUoY29uc3QgVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRz
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2xpZW50UmVjdExpc3QocXVhZHMpKTsgfQogICAgICAg
ICB+Q2xpZW50UmVjdExpc3QoKTsKIAogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsK
QEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgQ2xpZW50UmVjdExpc3QoKTsKLSAgICAgICAgQ2xpZW50UmVjdExpc3QoY29uc3QgVmVj
dG9yPEZsb2F0UXVhZD4mKTsKKyAgICAgICAgQ2xpZW50UmVjdExpc3QoY29uc3QgVmVjdG9yPEdy
YXBoaWNzUXVhZD4mKTsKIAogICAgICAgICBWZWN0b3I8UmVmUHRyPENsaWVudFJlY3Q+ID4gbV9s
aXN0OwogICAgIH07IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJEZWxldGVCdXR0b25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIENvbnRhaW5lck5vZGU6OmNs
b25lQ2hpbGROb2RlcyhDb250CiAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigp
LT5kZWxldGVCdXR0b25Db250cm9sbGVyKCktPmVuYWJsZSgpOwogfQogCi1ib29sIENvbnRhaW5l
ck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wg
Q29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKEdyYXBoaWNzUG9pbnQmIHBvaW50KSBj
b25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
ODU4LDcgKzg1OCw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKEYK
ICAgICBSZW5kZXJPYmplY3QgKnAgPSBvOwogCiAgICAgaWYgKCFvLT5pc0lubGluZSgpIHx8IG8t
PmlzUmVwbGFjZWQoKSkgewotICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShGbG9h
dFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1
dGUoR3JhcGhpY3NQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtODgzLDE0ICs4ODMsMTQgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBl
ckxlZnRDb3JuZXIoRgogICAgICAgICBBU1NFUlQobyk7CiAKICAgICAgICAgaWYgKCFvLT5pc0lu
bGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgcG9pbnQgPSBvLT5sb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBwb2lu
dCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHAtPm5vZGUo
KSAmJiBwLT5ub2RlKCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNCUigpICYmICF0
b1JlbmRlclRleHQobyktPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gZG8g
bm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIHRoYXQgaXMgYSBjaGlsZCBvciBu
ZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcgogICAgICAgICB9IGVsc2UgaWYgKChvLT5pc1RleHQo
KSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAgIHBvaW50
ID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgcG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CiAg
ICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG8pLT5maXJzdFRleHRC
b3goKSkgewogICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUodG9SZW5kZXJUZXh0KG8pLT5saW5l
c0JvdW5kaW5nQm94KCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJU
ZXh0KG8pLT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5lVG9wKCkpOwpAQCAtOTA2LDE0ICs5
MDYsMTQgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoRgogICAgIC8v
IElmIHRoZSB0YXJnZXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiBvciBzaWJsaW5ncyB0aGF0
IGNvdWxkIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdlIG11c3Qg
YmUKICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIFNjcm9sbCB0byB0aGUgYm90
dG9tLiBGSVhNRTogd2hvIHNhaWQgYW55dGhpbmcgYWJvdXQgc2Nyb2xsaW5nPwogICAgIGlmICgh
byAmJiBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgcG9pbnQgPSBGbG9hdFBvaW50KDAs
IGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKSk7CisgICAgICAgIHBvaW50ID0g
R3JhcGhpY3NQb2ludCgwLCBkb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzSGVpZ2h0KCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLWJvb2wg
Q29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcihGbG9hdFBvaW50JiBwb2ludCkgY29u
c3QKK2Jvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcihHcmFwaGljc1BvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTkyMSw3ICs5MjEsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmln
aHRDb3JuZXIoCiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcmVuZGVyZXIoKTsKICAgICBpZiAoIW8t
PmlzSW5saW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7CiAgICAgICAgIFJlbmRlckJveCogYm94
ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEZs
b2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOworICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNv
bHV0ZShHcmFwaGljc1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAgcG9pbnQubW92ZShi
b3gtPnNpemUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTk0NCw3ICs5NDQs
NyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIoCiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKG8pOwogICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgICAgICBwb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICAgICAgICAg
IHBvaW50ID0gR3JhcGhpY3NQb2ludCgpOwogICAgICAgICAgICAgaWYgKG8tPmlzVGV4dCgpKSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChvKTsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IGxpbmVzQm94ID0gdGV4dC0+bGluZXNCb3VuZGluZ0JveCgp
OwpAQCAtOTY0LDcgKzk2NCw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENv
cm5lcigKIAogSW50UmVjdCBDb250YWluZXJOb2RlOjpnZXRSZWN0KCkgY29uc3QKIHsKLSAgICBG
bG9hdFBvaW50ICB1cHBlckxlZnQsIGxvd2VyUmlnaHQ7CisgICAgR3JhcGhpY3NQb2ludCB1cHBl
ckxlZnQsIGxvd2VyUmlnaHQ7CiAgICAgYm9vbCBmb3VuZFVwcGVyTGVmdCA9IGdldFVwcGVyTGVm
dENvcm5lcih1cHBlckxlZnQpOwogICAgIGJvb2wgZm91bmRMb3dlclJpZ2h0ID0gZ2V0TG93ZXJS
aWdodENvcm5lcihsb3dlclJpZ2h0KTsKICAgICAKQEAgLTk3Nyw3ICs5NzcsNyBAQCBJbnRSZWN0
IENvbnRhaW5lck5vZGU6OmdldFJlY3QoKSBjb25zdAogICAgICAgICAgICAgdXBwZXJMZWZ0ID0g
bG93ZXJSaWdodDsKICAgICB9IAogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRS
ZWN0KHVwcGVyTGVmdCwgbG93ZXJSaWdodC5leHBhbmRlZFRvKHVwcGVyTGVmdCkgLSB1cHBlckxl
ZnQpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChHcmFwaGljc1JlY3QodXBwZXJMZWZ0
LCBsb3dlclJpZ2h0LmV4cGFuZGVkVG8odXBwZXJMZWZ0KSAtIHVwcGVyTGVmdCkpOwogfQogCiB2
b2lkIENvbnRhaW5lck5vZGU6OnNldEZvY3VzKGJvb2wgcmVjZWl2ZWQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc1Bv
aW50OwogICAgIAogdHlwZWRlZiB2b2lkICgqTm9kZUNhbGxiYWNrKShOb2RlKiwgdW5zaWduZWQp
OwogCkBAIC0xMDksOCArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIGRpc3Bh
dGNoUG9zdEF0dGFjaENhbGxiYWNrcygpOwogCi0gICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIo
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihGbG9hdFBv
aW50JikgY29uc3Q7CisgICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoR3JhcGhpY3NQb2ludCYp
IGNvbnN0OworICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihHcmFwaGljc1BvaW50JikgY29u
c3Q7CiAKICAgICBOb2RlKiBtX2ZpcnN0Q2hpbGQ7CiAgICAgTm9kZSogbV9sYXN0Q2hpbGQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyMyw3ICsxMTIzLDcg
QEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gRG9jdW1lbnQ6Om5vZGVzRnJvbQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsK
LSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KGNlbnRlclgg
KiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxYKCksIGNlbnRlclkgKiB6b29tRmFjdG9yICsg
dmlldygpLT5zY3JvbGxZKCkpKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChHcmFwaGljc1BvaW50KGNlbnRlclggKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxYKCks
IGNlbnRlclkgKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxZKCkpKTsKIAogICAgIGludCB0
eXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsK
IApAQCAtMTE3MSw3ICsxMTcxLDcgQEAgc3RhdGljIE5vZGUqIG5vZGVGcm9tUG9pbnQoRnJhbWUq
IGZyYW1lLAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFt
ZS0+cGFnZVpvb21GYWN0b3IoKTsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChGbG9hdFBvaW50KHggKiB6b29tRmFjdG9yICArIGZyYW1lVmlldy0+c2Nyb2xsWCgpLCB5ICog
em9vbUZhY3RvciArIGZyYW1lVmlldy0+c2Nyb2xsWSgpKSk7CisgICAgSW50UG9pbnQgcG9pbnQg
PSByb3VuZGVkSW50UG9pbnQoR3JhcGhpY3NQb2ludCh4ICogem9vbUZhY3RvciAgKyBmcmFtZVZp
ZXctPnNjcm9sbFgoKSwgeSAqIHpvb21GYWN0b3IgKyBmcmFtZVZpZXctPnNjcm9sbFkoKSkpOwog
CiAgICAgaWYgKCFmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50
KSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTE5LDEyICs1MTksMTIgQEAgSW50UmVjdCBFbGVtZW50Ojpib3VuZHNJbldpbmRvd1Nw
YWNlKCkgYwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAg
IFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRz
OwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRlcmVyKCkp
IHsKICAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUgU1ZHIG1v
ZGVsLgogICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgU1ZHRWxlbWVudCo+KHRoaXMpOwotICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0Owor
ICAgICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0OwogICAgICAgICBpZiAoc3ZnRWxlbWVudC0+
Ym91bmRpbmdCb3gobG9jYWxSZWN0KSkKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJl
cigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgIH0gZWxzZQpAQCAtNTU3
LDcgKzU1Nyw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEVsZW1lbnQ6OmdldEMKICAg
ICAvLyBGSVhNRTogSGFuZGxlIFNWRyBlbGVtZW50cy4KICAgICAvLyBGSVhNRTogSGFuZGxlIHRh
YmxlL2lubGluZS10YWJsZSB3aXRoIGEgY2FwdGlvbi4KIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+
IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgIHJlbmRlckJveE1v
ZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZSA9
IDE7CkBAIC01NzAsOSArNTcwLDkgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVu
dDo6Z2V0QwogICAgICAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXctPnZpc2li
bGVDb250ZW50UmVjdCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJl
Y3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBhZGp1c3RGbG9h
dFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKKyAg
ICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tpXSwgcmVu
ZGVyQm94TW9kZWxPYmplY3QpOwogICAgICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQotICAg
ICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwgcGFnZVNj
YWxlKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JQYWdlU2NhbGUocXVh
ZHNbaV0sIHBhZ2VTY2FsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU4MywxMiArNTgzLDEy
IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQKIHsKICAgICBkb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwog
I2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRlcmVyKCkpIHsK
ICAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUgU1ZHIG1vZGVs
LgogICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU1ZHRWxlbWVudCo+KHRoaXMpOwotICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0OworICAg
ICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0OwogICAgICAgICBpZiAoc3ZnRWxlbWVudC0+Ym91
bmRpbmdCb3gobG9jYWxSZWN0KSkKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlcigp
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgIH0gZWxzZQpAQCAtNjAyLDcg
KzYwMiw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQKICAgICBp
ZiAocXVhZHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRlKCk7
CiAKLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uYm91bmRpbmdCb3goKTsKKyAgICBH
cmFwaGljc1JlY3QgcmVzdWx0ID0gcXVhZHNbMF0uYm91bmRpbmdCb3goKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQudW5pdGUo
cXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKQEAgLTYxMSwxMCArNjExLDEwIEBAIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQKICAgICAgICAgcmVzdWx0Lm1vdmUoLXZp
c2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKICAgICB9CiAK
LSAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigpKTsK
KyAgICBhZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJlcigp
KTsKICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewogICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBhZGp1c3RG
bG9hdFJlY3RGb3JQYWdlU2NhbGUocmVzdWx0LCBmcmFtZS0+cGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgZnJhbWUt
PnBhZ2VTY2FsZUZhY3RvcigpKTsKICAgICB9CiAKICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3Jl
YXRlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5j
cHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBmbG9hdCBw
YWdlWm9vbUZhY3Rvcihjb25zdCBVSUV2ZW4KIHZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OmNvbXB1
dGVQYWdlTG9jYXRpb24oKQogewogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBwYWdlWm9vbUZhY3Rv
cih0aGlzKTsKLSAgICBzZXRBYnNvbHV0ZUxvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChGbG9hdFBv
aW50KHBhZ2VYKCkgKiB6b29tRmFjdG9yLCBwYWdlWSgpICogem9vbUZhY3RvcikpKTsKKyAgICBz
ZXRBYnNvbHV0ZUxvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChHcmFwaGljc1BvaW50KHBhZ2VYKCkg
KiB6b29tRmFjdG9yLCBwYWdlWSgpICogem9vbUZhY3RvcikpKTsKIH0KIAogdm9pZCBNb3VzZVJl
bGF0ZWRFdmVudDo6cmVjZWl2ZWRUYXJnZXQoKQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgTW91
c2VSZWxhdGVkRXZlbnQ6OmNvbXB1dGVSZWxhdGl2ZVAKICAgICAvLyBBZGp1c3Qgb2Zmc2V0TG9j
YXRpb24gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCdzIHBvc2l0aW9uLgogICAgIGlmICgh
aXNTaW11bGF0ZWQoKSkgewogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByID0gdGFyZ2V0Tm9k
ZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvcyA9IHItPmFi
c29sdXRlVG9Mb2NhbChhYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAg
ICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxQb3MgPSByLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVM
b2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBtX29mZnNldExvY2F0aW9uID0g
cm91bmRlZEludFBvaW50KGxvY2FsUG9zKTsKICAgICAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gMSAvIHBhZ2Vab29tRmFjdG9yKHRoaXMpOwogICAgICAgICAgICAgaWYgKHNjYWxlRmFjdG9y
ICE9IDEuMGYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDcgKzg0Myw3IEBA
IGJvb2wgTm9kZTo6aGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpIGNvbnMKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgRmxvYXRQb2ludCBhYnNQ
b3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBHcmFwaGljc1BvaW50IGFi
c1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIHJlbmRlcmVyKCktPmFi
c29sdXRlUmVjdHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChhYnNQb3MpKTsKICAgICBzaXplX3Qg
biA9IHJlY3RzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKQEAg
LTIyNjIsNyArMjI2Miw3IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1bWVudFBv
c2kKICAgICAgICAgICAgICAgIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyB8IERPQ1VNRU5U
X1BPU0lUSU9OX0NPTlRBSU5TOwogfQogCi1GbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRUb1BhZ2Uo
Y29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgTm9kZTo6Y29udmVydFRv
UGFnZShjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIC8vIElmIHRoZXJlIGlz
IGEgcmVuZGVyZXIsIGp1c3QgYXNrIGl0IHRvIGRvIHRoZSBjb252ZXJzaW9uCiAgICAgaWYgKHJl
bmRlcmVyKCkpCkBAIC0yMjc3LDcgKzIyNzcsNyBAQCBGbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRU
b1BhZ2UoY29uc3QgRmxvCiAgICAgcmV0dXJuIHA7CiB9CiAKLUZsb2F0UG9pbnQgTm9kZTo6Y29u
dmVydEZyb21QYWdlKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IE5v
ZGU6OmNvbnZlcnRGcm9tUGFnZShjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAg
IC8vIElmIHRoZXJlIGlzIGEgcmVuZGVyZXIsIGp1c3QgYXNrIGl0IHRvIGRvIHRoZSBjb252ZXJz
aW9uCiAgICAgaWYgKHJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudENvbnRleHQ7
CiBjbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNz
UG9pbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnRS
ZWN0OwpAQCAtNDI4LDggKzQyOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3Rh
cnRTZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIEdldHRpbmcgcG9pbnRzIGludG8gYW5kIG91
dCBvZiBzY3JlZW4gc3BhY2UKLSAgICBGbG9hdFBvaW50IGNvbnZlcnRUb1BhZ2UoY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgY29udmVydEZyb21QYWdlKGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGNvbnZlcnRUb1BhZ2UoY29uc3Qg
R3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgY29udmVydEZyb21QYWdl
KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAgICAgLy8gSW50ZWdyYXRpb24gd2l0aCByZW5kZXJpbmcgdHJlZQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDbGllbnRSZWN0
TGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFk
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgpAQCAtMTY1Myw3ICsxNjUzLDcgQEAgdm9pZCBSYW5nZTo6dGV4dFJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcgogICAgIH0KIH0KIAotdm9pZCBSYW5nZTo6dGV4dFF1YWRz
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpIGNvbnN0
Cit2b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzLCBib29s
IHVzZVNlbGVjdGlvbkhlaWdodCkgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9
IG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gbV9lbmQuY29u
dGFpbmVyKCk7CkBAIC0xOTE0LDcgKzE5MTQsNyBAQCBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0
PiBSYW5nZTo6Z2V0Q2xpCiAKICAgICBtX293bmVyRG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Cisg
ICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRz
KHF1YWRzKTsKIAogICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKHF1YWRzKTsKQEAg
LTE5MjIsMTEgKzE5MjIsMTEgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gUmFuZ2U6Omdl
dENsaQogCiBQYXNzUmVmUHRyPENsaWVudFJlY3Q+IFJhbmdlOjpnZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZWN0ID0gYm91bmRpbmdSZWN0KCk7CisgICAg
R3JhcGhpY3NSZWN0IHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKICAgICByZXR1cm4gcmVjdC5pc0Vt
cHR5KCkgPyAwIDogQ2xpZW50UmVjdDo6Y3JlYXRlKHJlY3QpOwogfQogCi1zdGF0aWMgdm9pZCBh
ZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKFZlY3Rv
cjxGbG9hdFF1YWQ+JiBxdWFkcywgRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQorc3RhdGljIHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFuZEFic29s
dXRlWm9vbUFuZFBhZ2VTY2FsZShWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMsIERvY3VtZW50
KiBkb2N1bWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBkb2N1bWVudC0+dmlldygpOwogICAgIGlmICghdmlldykKQEAgLTE5NDEsMTMgKzE5NDEs
MTMgQEAgc3RhdGljIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZAogICAgIEludFJl
Y3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgewogICAgICAgICBxdWFk
c1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0Lnko
KSk7Ci0gICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tpXSwgcmVu
ZGVyZXIpOworICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNb
aV0sIHJlbmRlcmVyKTsKICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQotICAgICAgICAgICAg
YWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUpOworICAgICAg
ICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUp
OwogICAgIH0KIH0KIAotdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxG
bG9hdFF1YWQ+JiBxdWFkcykgY29uc3QKK3ZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFk
cyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpIGNvbnN0CiB7CiAgICAgTm9kZSogc3RhcnRD
b250YWluZXIgPSBtX3N0YXJ0LmNvbnRhaW5lcigpOwogICAgIE5vZGUqIGVuZENvbnRhaW5lciA9
IG1fZW5kLmNvbnRhaW5lcigpOwpAQCAtMTk2Myw5ICsxOTYzLDkgQEAgdm9pZCBSYW5nZTo6Z2V0
Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGVTZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9k
ZSgpKSkgewogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVy
Qm94TW9kZWxPYmplY3QgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPnJlbmRlckJveE1v
ZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxl
bWVudFF1YWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBlbGVt
ZW50UXVhZHM7CiAgICAgICAgICAgICAgICAgICAgIHJlbmRlckJveE1vZGVsT2JqZWN0LT5hYnNv
bHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0
UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoZWxlbWVudFF1YWRzLCBt
X293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBh
Z2VTY2FsZShlbGVtZW50UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyQm94TW9k
ZWxPYmplY3QpOwogCiAgICAgICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChlbGVtZW50UXVh
ZHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5NzYsOSArMTk3Niw5IEBAIHZvaWQgUmFuZ2U6
OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3IKICAgICAgICAgICAgICAgICBpbnQgc3RhcnRP
ZmZzZXQgPSAobm9kZSA9PSBzdGFydENvbnRhaW5lcikgPyBtX3N0YXJ0Lm9mZnNldCgpIDogMDsK
ICAgICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gKG5vZGUgPT0gZW5kQ29udGFpbmVyKSA/
IG1fZW5kLm9mZnNldCgpIDogSU5UX01BWDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CisgICAgICAgICAgICAgICAgVmVjdG9y
PEdyYXBoaWNzUXVhZD4gdGV4dFF1YWRzOwogICAgICAgICAgICAgICAgIHJlbmRlclRleHQtPmFi
c29sdXRlUXVhZHNGb3JSYW5nZSh0ZXh0UXVhZHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwot
ICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21B
bmRQYWdlU2NhbGUodGV4dFF1YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRlclRleHQp
OworICAgICAgICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0
ZVpvb21BbmRQYWdlU2NhbGUodGV4dFF1YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRl
clRleHQpOwogCiAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKHRleHRRdWFkcyk7CiAgICAg
ICAgICAgICB9CkBAIC0xOTg3LDE5ICsxOTg3LDE5IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFu
ZFRleHRRdWFkcyhWZWN0b3IKIH0KIAogICAgIAotRmxvYXRSZWN0IFJhbmdlOjpib3VuZGluZ1Jl
Y3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJhbmdlOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewog
ICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBtX293bmVyRG9jdW1lbnQt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgZ2V0
Qm9yZGVyQW5kVGV4dFF1YWRzKHF1YWRzKTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsK
IAotICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQu
dW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIFJhbmdlX2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAiUmFuZ2VCb3VuZGFyeVBvaW50LmgiCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIENs
aWVudFJlY3RMaXN0OwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERvY3VtZW50OwogY2xh
c3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEdyYXBoaWNzUXVh
ZDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7CiBjbGFzcyBUZXh0OwogCkBAIC0xMTUsOSArMTE1LDkg
QEAgcHVibGljOgogICAgIC8vIE5vdCB0cmFuc2Zvcm0tZnJpZW5kbHkKICAgICB2b2lkIHRleHRS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsK
ICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKLSAgICB2b2lkIHRleHRRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpIGNvbnN0OwotICAgIHZv
aWQgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JikgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgIHZvaWQgdGV4dFF1YWRzKFZlY3Rv
cjxHcmFwaGljc1F1YWQ+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSkgY29uc3Q7
CisgICAgdm9pZCBnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKSBj
b25zdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAKICAgICB2b2lk
IG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSopOwogICAgIHZvaWQgbm9kZUNoaWxk
cmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vV2hlZWxFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1doZWVs
RXZlbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBXaGVlbEV2ZW50OjpXaGVl
bEV2ZW50KCkKIHsKIH0KIAotV2hlZWxFdmVudDo6V2hlZWxFdmVudChjb25zdCBGbG9hdFBvaW50
JiB3aGVlbFRpY2tzLCBjb25zdCBGbG9hdFBvaW50JiByYXdEZWx0YSwKK1doZWVsRXZlbnQ6Oldo
ZWVsRXZlbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgd2hlZWxUaWNrcywgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcmF3RGVsdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBjb25zdCBJbnRQb2ludCYgcGFn
ZUxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0
S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXkpCkBAIC05Niw3ICs5Niw3IEBAIFdoZWVs
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpXaGVlbEV2ZW50RGkKICAgICBpZiAoIShldmVudC5kZWx0
YVgoKSB8fCBldmVudC5kZWx0YVkoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEV2ZW50
KFdoZWVsRXZlbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGV2ZW50LndoZWVsVGlja3NYKCksIGV2ZW50
LndoZWVsVGlja3NZKCkpLCBGbG9hdFBvaW50KGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVko
KSksIGdyYW51bGFyaXR5KGV2ZW50KSwKKyAgICBzZXRFdmVudChXaGVlbEV2ZW50OjpjcmVhdGUo
R3JhcGhpY3NQb2ludChldmVudC53aGVlbFRpY2tzWCgpLCBldmVudC53aGVlbFRpY2tzWSgpKSwg
R3JhcGhpY3NQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCkpLCBncmFudWxhcml0
eShldmVudCksCiAgICAgICAgIHZpZXcsIEludFBvaW50KGV2ZW50Lmdsb2JhbFgoKSwgZXZlbnQu
Z2xvYmFsWSgpKSwgSW50UG9pbnQoZXZlbnQueCgpLCBldmVudC55KCkpLCBldmVudC5jdHJsS2V5
KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5KCkpKTsK
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0
LDcgQEAKICNpZm5kZWYgV2hlZWxFdmVudF9oCiAjZGVmaW5lIFdoZWVsRXZlbnRfaAogCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRl
ICJNb3VzZVJlbGF0ZWRFdmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw4ICsz
OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXaGVlbEV2ZW50KTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXaGVlbEV2ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgd2hlZWxUaWNrcywK
LSAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHJhd0RlbHRhLCBHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdoZWVsRXZlbnQ+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiB3aGVlbFRp
Y2tzLAorICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcmF3RGVsdGEsIEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAg
ICAgIGNvbnN0IEludFBvaW50JiBzY3JlZW5Mb2NhdGlvbiwgY29uc3QgSW50UG9pbnQmIHBhZ2VM
b2NhdGlvbiwKICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hp
ZnRLZXksIGJvb2wgbWV0YUtleSkKICAgICAgICAgewpAQCAtNjcsNyArNjcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBXaGVlbEV2ZW50KCk7Ci0gICAg
ICAgIFdoZWVsRXZlbnQoY29uc3QgRmxvYXRQb2ludCYgd2hlZWxUaWNrcywgY29uc3QgRmxvYXRQ
b2ludCYgcmF3RGVsdGEsCisgICAgICAgIFdoZWVsRXZlbnQoY29uc3QgR3JhcGhpY3NQb2ludCYg
d2hlZWxUaWNrcywgY29uc3QgR3JhcGhpY3NQb2ludCYgcmF3RGVsdGEsCiAgICAgICAgICAgICAg
ICAgICAgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgc2NyZWVuTG9jYXRpb24sIGNvbnN0
IEludFBvaW50JiBwYWdlTG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5
LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQ0LDcgKzI3NDQsNyBAQCBJ
bnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgQVNTRVJUKHN0YXJ0
UmVuZGVyZXIpOwogICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5s
b2NhbENhcmV0UmVjdChzdGFydElubGluZUJveCwgc3RhcnRDYXJldE9mZnNldCwgJmV4dHJhV2lk
dGhUb0VuZE9mTGluZSk7CiAgICAgaWYgKHN0YXJ0Q2FyZXRSZWN0ICE9IEludFJlY3QoKSkKLSAg
ICAgICAgc3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChzdGFydENhcmV0UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAg
ICAgIHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChH
cmFwaGljc1JlY3Qoc3RhcnRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogCiAg
ICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7CiAgICAgaW50IGVuZENhcmV0T2Zmc2V0OwpAQCAt
Mjc1Nyw3ICsyNzU3LDcgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdl
KgogICAgIEFTU0VSVChlbmRSZW5kZXJlcik7CiAgICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBl
bmRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7
CiAgICAgaWYgKGVuZENhcmV0UmVjdCAhPSBJbnRSZWN0KCkpCi0gICAgICAgIGVuZENhcmV0UmVj
dCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJl
Y3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBlbmRDYXJldFJlY3QgPSBlbmRS
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoZW5kQ2FyZXRSZWN0KSku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIAogICAgIGlmIChzdGFydENhcmV0UmVjdC55KCkgPT0g
ZW5kQ2FyZXRSZWN0LnkoKSkgewogICAgICAgICAvLyBzdGFydCBhbmQgZW5kIGFyZSBvbiB0aGUg
c2FtZSBsaW5lCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZVRyZWUuaCIKQEAgLTExMzQsNyArMTEzNCw3IEBAIExheW91dFJlY3QgQ2FyZXRCYXNl
OjphYnNvbHV0ZUJvdW5kc0ZvckwKICAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChyZWN0KTsKICAg
ICBpZiAoY2FyZXRQYWludGVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChjYXJldFBh
aW50ZXIpLT5mbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsKLSAgICByZXR1cm4gY2FyZXRQ
YWludGVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBjYXJldFBhaW50ZXItPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoR3JhcGhpY3NSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9
CiAKIExheW91dFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoKQpAQCAt
MTczMiw3ICsxNzMyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0
aQogICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPnNob3VsZERlbGV0ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAotRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpib3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QK
K0dyYXBoaWNzUmVjdCBGcmFtZVNlbGVjdGlvbjo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNv
bnRlbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKQEAgLTE3
NDMsMjAgKzE3NDMsMjAgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpib3VuZHMoYm9vbCBj
bAogICAgIHJldHVybiBjbGlwVG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlvbihzZWxlY3Rp
b25SZWN0LCB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0OwogfQog
Ci12b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzKSBjb25zdAordm9pZCBGcmFtZVNlbGVjdGlvbjo6
Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8R3JhcGhpY3NSZWN0PiYgcmVj
dGFuZ2xlcykgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+
dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgIHRvTm9ybWFsaXplZFJh
bmdlKCktPnRleHRRdWFkcyhxdWFkcywgdHJ1ZSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHF1YWRz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICBGbG9hdFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihxdWFkc1tpXS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpLCB2aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBHcmFwaGlj
c1JlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihxdWFkc1tpXS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpLCB2aXNpYmxlQ29udGVudFJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2Vj
dGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50ZXJz
ZWN0aW9uUmVjdCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw5ICsyMzMsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4pOwogICAgIHZv
aWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyhib29sIGNsaXBU
b1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kcyhi
b29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICB2b2lkIGdldENs
aXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mKSBjb25zdDsKKyAg
ICB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEdyYXBoaWNzUmVj
dD4mKSBjb25zdDsKIAogICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25zdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAt
MTU1LDcgKzE1NSw3IEBAIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNTcGUK
IAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQdHI8UmFu
Z2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewotICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFjZS5n
ZXQoKSk7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdl
KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5n
ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2
b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICAg
ICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0KG1fY29y
cmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbElu
Zm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRp
bmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9C
ZVJlcGxhY2VkLmdldCgpKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5l
bEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxh
Y2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcsIFZlY3Rv
cjxTdHJpbmc+KCkpOwogICAgIH0KQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlCiAgICAgICAgIFN0cmluZyB0b3BTdWdnZXN0aW9uID0g
c3VnZ2VzdGlvbnMuZmlyc3QoKTsKICAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDApOwogICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJ
bmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGJvdW5k
aW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRv
QmVSZXBsYWNlZC5nZXQoKSk7CiAgICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKQog
ICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0aW9uUGFu
ZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBs
YWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwogICAgIH0KQEAgLTM2Miwx
NCArMzYyLDE0IEBAIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNBdXQKICAg
ICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpOwogfQogCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
cjo6d2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKK0dyYXBoaWNz
UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFuZ2UoY29u
c3QgUmFuZ2UqIHJhbmdlKSBjb25zdAogewogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUt
PnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLSAg
ICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CisgICAgICAgIHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiB0ZXh0UXVhZHM7CiAgICAgcmFuZ2UtPnRl
eHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7CisgICAgR3Jh
cGhpY3NSZWN0IGJvdW5kaW5nUmVjdDsKICAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFkcy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIGJvdW5k
aW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIu
aAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIHBy
aXZhdGU6CiAKICAgICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOwogICAgIFRleHRDaGVja2VyQ2xp
ZW50KiB0ZXh0Q2hlY2tlcigpOwotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0Rm9yUmFuZ2UoY29u
c3QgUmFuZ2UqKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgd2luZG93UmVjdEZvclJhbmdlKGNv
bnN0IFJhbmdlKikgY29uc3Q7CiAgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRl
bGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwogCiAgICAgRWRp
dG9yQ2xpZW50KiBtX2NsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgpAQCAtNTkzLDcgKzU5Myw3IEBAIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjph
YnNvbHV0ZUNhcmV0Qm8KICAgICBpZiAobG9jYWxSZWN0LmlzRW1wdHkoKSB8fCAhcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICByZXR1cm4gcmVuZGVyZXItPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVj
dChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCiBpbnQgVmlzaWJsZVBv
c2l0aW9uOjpsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oKSBj
b25zdApAQCAtNjA2LDcgKzYwNiw3IEBAIGludCBWaXNpYmxlUG9zaXRpb246OmxpbmVEaXJlY3Rp
b25Qb2ludEYKICAgICAvLyBUaGlzIGlnbm9yZXMgdHJhbnNmb3JtcyBvbiBwdXJwb3NlLCBmb3Ig
bm93LiBWZXJ0aWNhbCBuYXZpZ2F0aW9uIGlzIGRvbmUKICAgICAvLyB3aXRob3V0IGNvbnN1bHRp
bmcgdHJhbnNmb3Jtcywgc28gdGhhdCAndXAnIGluIHRyYW5zZm9ybWVkIHRleHQgaXMgJ3VwJwog
ICAgIC8vIHJlbGF0aXZlIHRvIHRoZSB0ZXh0LCBub3QgYWJzb2x1dGUgJ3VwJy4KLSAgICBGbG9h
dFBvaW50IGNhcmV0UG9pbnQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKGxvY2FsUmVjdC5s
b2NhdGlvbigpKTsKKyAgICBHcmFwaGljc1BvaW50IGNhcmV0UG9pbnQgPSByZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlKGxvY2FsUmVjdC5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gcmVuZGVyZXIt
PmNvbnRhaW5pbmdCbG9jaygpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2FyZXRQb2lu
dC54KCkgOiBjYXJldFBvaW50LnkoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw3ICs1MDksNyBA
QCBzdGF0aWMgaW5saW5lIEludFBvaW50IGFic29sdXRlTGluZURpcmVjCiB7CiAgICAgQVNTRVJU
KHJvb3QpOwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSByb290LT5ibG9jaygp
OwotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVCbG9ja1BvaW50ID0gY29udGFpbmluZ0Jsb2NrLT5s
b2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGFic29sdXRl
QmxvY2tQb2ludCA9IGNvbnRhaW5pbmdCbG9jay0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9p
bnQoKSk7CiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAg
ICAgIGFic29sdXRlQmxvY2tQb2ludCAtPSBjb250YWluaW5nQmxvY2stPmxheWVyKCktPnNjcm9s
bGVkQ29udGVudE9mZnNldCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRpb24KICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3MgdHJ1ZSBmb3IgdXNlVHJh
bnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24gPSByZW5kZXJlci0+YWJz
b2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+
cGFnZVgoKSwgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVkoKSkpOworICAg
IEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRvTG9j
YWwoR3JhcGhpY3NQb2ludChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWCgp
LCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgpKSk7CiAgICAgaW50IHgg
PSBhYnNvbHV0ZVBvc2l0aW9uLngoKTsKICAgICBpbnQgeSA9IGFic29sdXRlUG9zaXRpb24ueSgp
OwogICAgIHVybCArPSAiPyI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBQYXRoIEhUTUxBcmVh
RWxlbWVudDo6Y29tcHV0ZVBhdGgoUmVuZGVyCiAgICAgICAgIHJldHVybiBQYXRoKCk7CiAgICAg
CiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9y
bXMuCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgpOworICAg
IEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gb2JqLT5sb2NhbFRvQWJzb2x1dGUoKTsKIAogICAgIC8v
IERlZmF1bHQgc2hvdWxkIGRlZmF1bHQgdG8gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5pbmcgb2Jq
ZWN0LgogICAgIEludFNpemUgc2l6ZSA9IG1fbGFzdFNpemU7CkBAIC0xMTQsNyArMTE0LDcgQEAg
UGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmNvbXB1dGVQYXRoKFJlbmRlcgogICAgICAgICBwLnRyYW5z
Zm9ybSh6b29tVHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBwLnRyYW5zbGF0ZShhYnNQb3MgLSBG
bG9hdFBvaW50KCkpOworICAgIHAudHJhbnNsYXRlKGFic1BvcyAtIEdyYXBoaWNzUG9pbnQoKSk7
CiAgICAgcmV0dXJuIHA7CiB9CiAgICAgCkBAIC0xNDcsOSArMTQ3LDkgQEAgUGF0aCBIVE1MQXJl
YUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBJbgogICAgICAgICBjYXNlIFBvbHk6CiAgICAgICAg
ICAgICBpZiAobV9jb29yZHNMZW4gPj0gNikgewogICAgICAgICAgICAgICAgIGludCBudW1Qb2lu
dHMgPSBtX2Nvb3Jkc0xlbiAvIDI7Ci0gICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQ
b2ludChtX2Nvb3Jkc1swXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1sxXS5jYWxjTWlu
VmFsdWUoaGVpZ2h0KSkpOworICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKEdyYXBoaWNzUG9p
bnQobV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbMV0uY2FsY01pblZh
bHVlKGhlaWdodCkpKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bVBv
aW50czsgKytpKQotICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50
KG1fY29vcmRzW2kgKiAyXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1tpICogMiArIDFd
LmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhdGguYWRkTGlu
ZVRvKEdyYXBoaWNzUG9pbnQobV9jb29yZHNbaSAqIDJdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1f
Y29vcmRzW2kgKiAyICsgMV0uY2FsY01pblZhbHVlKGhlaWdodCkpKTsKICAgICAgICAgICAgICAg
ICBwYXRoLmNsb3NlU3VicGF0aCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNTcsNyArMTU3LDcgQEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25z
dCBJbgogICAgICAgICAgICAgaWYgKG1fY29vcmRzTGVuID49IDMpIHsKICAgICAgICAgICAgICAg
ICBMZW5ndGggcmFkaXVzID0gbV9jb29yZHNbMl07CiAgICAgICAgICAgICAgICAgaW50IHIgPSBt
aW4ocmFkaXVzLmNhbGNNaW5WYWx1ZSh3aWR0aCksIHJhZGl1cy5jYWxjTWluVmFsdWUoaGVpZ2h0
KSk7Ci0gICAgICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChtX2Nvb3Jkc1sw
XS5jYWxjTWluVmFsdWUod2lkdGgpIC0gciwgbV9jb29yZHNbMV0uY2FsY01pblZhbHVlKGhlaWdo
dCkgLSByLCAyICogciwgMiAqIHIpKTsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2Uo
R3JhcGhpY3NSZWN0KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jk
c1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSAtIHIsIDIgKiByLCAyICogcikpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVjdDoKQEAgLTE2NiwxMSAr
MTY2LDExIEBAIFBhdGggSFRNTEFyZWFFbGVtZW50OjpnZXRSZWdpb24oY29uc3QgSW4KICAgICAg
ICAgICAgICAgICBpbnQgeTAgPSBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KTsKICAg
ICAgICAgICAgICAgICBpbnQgeDEgPSBtX2Nvb3Jkc1syXS5jYWxjTWluVmFsdWUod2lkdGgpOwog
ICAgICAgICAgICAgICAgIGludCB5MSA9IG1fY29vcmRzWzNdLmNhbGNNaW5WYWx1ZShoZWlnaHQp
OwotICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgw
LCB5MSAtIHkwKSk7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KEdyYXBoaWNzUmVjdCh4
MCwgeTAsIHgxIC0geDAsIHkxIC0geTApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIERlZmF1bHQ6Ci0gICAgICAgICAgICBwYXRoLmFkZFJlY3QoRmxv
YXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgIHBhdGguYWRkUmVjdChH
cmFwaGljc1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVW5rbm93bjoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMywxMyArMjAzLDEzIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVt
ZW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGlkRHJhdyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBtX2NvcGllZEltYWdlLmNsZWFyKCk7IC8v
IENsZWFyIG91ciBpbWFnZSBzbmFwc2hvdCBpZiB3ZSBoYXZlIG9uZS4KIAogICAgIGlmIChSZW5k
ZXJCb3gqIHJvID0gcmVuZGVyQm94KCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
cm8tPmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVjdChyZWN0
LCBGbG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGRlc3RS
ZWN0KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRCb3hSZWN0
KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByID0gbWFwUmVjdChyZWN0LCBHcmFwaGljc1JlY3Qo
MCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGRlc3RSZWN0KTsKICAgICAg
ICAgci5pbnRlcnNlY3QoZGVzdFJlY3QpOwogICAgICAgICBpZiAoci5pc0VtcHR5KCkgfHwgbV9k
aXJ0eVJlY3QuY29udGFpbnMocikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNjUsNyArMjY1
LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByLCBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICAvLyBDbGVhciB0aGUgZGlydHkgcmVjdAot
ICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9kaXJ0eVJlY3QgPSBHcmFwaGlj
c1JlY3QoKTsKIAogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTM3MSw3ICszNzEsNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6CiAjZW5kaWYKIH0KIAotSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6Y29u
dmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxSZWN0KSBjb25zdAor
SW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBH
cmFwaGljc1JlY3QmIGxvZ2ljYWxSZWN0KSBjb25zdAogewogICAgIC8vIFByZXZlbnQgdW5kZXIv
b3ZlcmZsb3cgYnkgZW5zdXJpbmcgdGhlIHJlY3QncyBib3VuZHMgc3RheSB3aXRoaW4gaW50ZWdl
ci1leHByZXNzaWJsZSByYW5nZQogICAgIGludCBsZWZ0ID0gY2xhbXBUb0ludGVnZXIoZmxvb3Jm
KGxvZ2ljYWxSZWN0LngoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKSk7CkBAIC0zODIsNyArMzgyLDcg
QEAgSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYQogICAgIHJldHVybiBJ
bnRSZWN0KEludFBvaW50KGxlZnQsIHRvcCksIGNvbnZlcnRUb1ZhbGlkRGV2aWNlU2l6ZShyaWdo
dCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogfQogCi1JbnRTaXplIEhUTUxDYW52YXNFbGVtZW50
Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpIGNv
bnN0CitJbnRTaXplIEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgbG9naWNhbFNpemUpIGNvbnN0CiB7CiAgICAgLy8gUHJldmVudCBv
dmVyZmxvdyBieSBlbnN1cmluZyB0aGUgcmVjdCdzIGJvdW5kcyBzdGF5IHdpdGhpbiBpbnRlZ2Vy
LWV4cHJlc3NpYmxlIHJhbmdlCiAgICAgZmxvYXQgd2lkdGggPSBjbGFtcFRvSW50ZWdlcihjZWls
Zihsb2dpY2FsU2l6ZS53aWR0aCgpICogbV9wYWdlU2NhbGVGYWN0b3IpKTsKQEAgLTQyMiw3ICs0
MjIsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAKICAgICBt
X2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IHRydWU7CiAKLSAgICBGbG9hdFNpemUgdW5zY2FsZWRT
aXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBHcmFwaGljc1NpemUgdW5zY2FsZWRTaXplKHdp
ZHRoKCksIGhlaWdodCgpKTsKICAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNhbFRvRGV2
aWNlKHVuc2NhbGVkU2l6ZSk7CiAgICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUuaGVpZ2h0
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0
ZSgpIHJldHVybnMgMCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5Lgog
ICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1faW1hZ2VCdWZm
ZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSAvIHVuc2NhbGVkU2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKSk7CisgICAg
bV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zY2FsZShHcmFwaGljc1NpemUoc2l6ZS53aWR0aCgp
IC8gdW5zY2FsZWRTaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgLyB1bnNjYWxlZFNpemUuaGVp
Z2h0KCkpKTsKICAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKHRydWUpOwogICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShEZWZhdWx0SW50ZXJwb2xhdGlvblF1YWxpdHkpOwogCkBAIC00
ODcsNyArNDg3LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZQog
QWZmaW5lVHJhbnNmb3JtIEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3JtKCkgY29uc3QK
IHsKICAgICBBU1NFUlQobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpOwotICAgIEZsb2F0U2l6ZSB1
bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzU2l6ZSB1bnNjYWxl
ZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIEludFNpemUgc2l6ZSA9IGNvbnZlcnRMb2dp
Y2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
OwogICAgIGlmIChzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50X2gKICNkZWZpbmUgSFRNTENhbnZh
c0VsZW1lbnRfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAK
QEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgQ2FudmFzT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHZp
cnR1YWwgfkNhbnZhc09ic2VydmVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hh
bmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgY2hhbmdlZFJlY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNv
bnN0IEdyYXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2Fu
dmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2Fu
dmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50KikgPSAwOwogfTsKQEAgLTk1LDcgKzk1LDcg
QEAgcHVibGljOgogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRvRGF0YVVSTChtaW1lVHlwZSwgMCwgZWMpOyB9
CiAKICAgICAvLyBVc2VkIGZvciByZW5kZXJpbmcKLSAgICB2b2lkIGRpZERyYXcoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBkaWREcmF3KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCiAgICAg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAKQEAgLTExMSw4ICsxMTEsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBtYWtlUHJlc2VudGF0aW9uQ29weSgpOwogICAgIHZvaWQgY2xlYXJQcmVzZW50YXRpb25D
b3B5KCk7CiAKLSAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7Ci0gICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZs
b2F0U2l6ZSYpIGNvbnN0OworICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25z
dCBHcmFwaGljc1JlY3QmKSBjb25zdDsKKyAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZp
Y2UoY29uc3QgR3JhcGhpY3NTaXplJikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0VG9WYWxp
ZERldmljZVNpemUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3Q7CiAKICAgICBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKQEAgLTE1MSw3ICsxNTEsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9yZW5kZXJlcklzQ2FudmFzOwogCiAgICAgYm9vbCBtX2lnbm9y
ZVJlc2V0OwotICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9k
aXJ0eVJlY3Q7CiAKICAgICBmbG9hdCBtX3BhZ2VTY2FsZUZhY3RvcjsKICAgICBib29sIG1fb3Jp
Z2luQ2xlYW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDcgKzM2NSw3IEBAIGludCBIVE1MSW1hZ2VFbGVt
ZW50Ojp4KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0g
ci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgcmV0dXJuIGFic1Bvcy54KCk7CiB9CiAKQEAgLTM3
Niw3ICszNzYsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6eSgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRo
IHRyYW5zZm9ybXMuCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSByLT5sb2NhbFRvQWJzb2x1dGUo
KTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAg
IHJldHVybiBhYnNQb3MueSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTMgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FudmFzR3JhZGllbnQ6OkNh
bnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkK
K0NhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcDEpCiAgICAgOiBtX2dyYWRpZW50KEdyYWRpZW50OjpjcmVh
dGUocDAsIHAxKSkKICAgICAsIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5TW9kZShmYWxzZSkKIHsK
IH0KIAotQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAw
LCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorQ2FudmFzR3JhZGll
bnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxKQogICAgIDogbV9ncmFkaWVudChHcmFkaWVu
dDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKICAgICAsIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5
TW9kZShmYWxzZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dy
YWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FudmFzR3JhZGllbnQgOiBwdWJsaWMgUmVm
Q291bnRlZDxDYW52YXNHcmFkaWVudD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgY29u
c3QgRmxvYXRQb2ludCYgcDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dyYWRp
ZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAxKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0dy
YWRpZW50KHAwLCBwMSkpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENh
bnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25z
dCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENh
bnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAg
ICAgICAgfQpAQCAtNTgsOCArNTgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAw
LCBjb25zdCBGbG9hdFBvaW50JiBwMSk7Ci0gICAgICAgIENhbnZhc0dyYWRpZW50KGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKTsK
KyAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHAxKTsKKyAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEpOwog
ICAgICAgICAKICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgICAgICBi
b29sIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5TW9kZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc3RvcmUoKQogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEFsbEF0dHJpYnV0ZXNUb0RlZmF1bHQoKQogewogICAgIHN0YXRlKCkubV9n
bG9iYWxBbHBoYSA9IDE7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgp
OworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUoKTsKICAgICBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciA9IDA7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gQ29sb3I6
OnRyYW5zcGFyZW50OwogICAgIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUgPSBDb21wb3NpdGVT
b3VyY2VPdmVyOwpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRBbGxBdHQKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGNvbnRleHQtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFy
ZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5zZXRMZWdhY3lTaGFkb3co
R3JhcGhpY3NTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJH
Qik7CiAgICAgY29udGV4dC0+c2V0QWxwaGEoMSk7CiAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogfQpAQCAtNTkxLDcgKzU5MSw3IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZShmbG8KICAgICB9CiAKICAgICBzdGF0
ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwotICAgIGMtPnNjYWxlKEZsb2F0U2l6ZShz
eCwgc3kpKTsKKyAgICBjLT5zY2FsZShHcmFwaGljc1NpemUoc3gsIHN5KSk7CiAgICAgbV9wYXRo
LnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oMS4wIC8gc3gsIDEu
MCAvIHN5KSk7CiB9CiAKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Y2xvc2VQYXRoCiAgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZsb2F0UmVjdCBib3VuZFJlY3QgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7
CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kUmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKICAg
ICBpZiAoYm91bmRSZWN0LndpZHRoKCkgfHwgYm91bmRSZWN0LmhlaWdodCgpKQogICAgICAgICBt
X3BhdGguY2xvc2VTdWJwYXRoKCk7CiB9CkBAIC03ODgsNyArNzg4LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyhmbAogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGF0aC5tb3Zl
VG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KHgs
IHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyhmbG9hdCB4
LCBmbG9hdCB5KQpAQCAtNzk4LDExICs3OTgsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmxpbmVUbyhmbAogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgcDEgPSBGbG9hdFBvaW50KHgsIHkpOworICAg
IEdyYXBoaWNzUG9pbnQgcDEgPSBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIGlmICghbV9wYXRo
Lmhhc0N1cnJlbnRQb2ludCgpKQogICAgICAgICBtX3BhdGgubW92ZVRvKHAxKTsKICAgICBlbHNl
IGlmIChwMSAhPSBtX3BhdGguY3VycmVudFBvaW50KCkpCi0gICAgICAgIG1fcGF0aC5hZGRMaW5l
VG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgICAgIG1fcGF0aC5hZGRMaW5lVG8oR3JhcGhpY3NQ
b2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpxdWFkcmF0
aWNDdXJ2ZVRvKGZsb2F0IGNweCwgZmxvYXQgY3B5LCBmbG9hdCB4LCBmbG9hdCB5KQpAQCAtODEy
LDExICs4MTIsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnF1YWRyYXRpYwog
ICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLm1vdmVUbyhGbG9h
dFBvaW50KGNweCwgY3B5KSk7CisgICAgICAgIG1fcGF0aC5tb3ZlVG8oR3JhcGhpY3NQb2ludChj
cHgsIGNweSkpOwogCi0gICAgRmxvYXRQb2ludCBwMSA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAg
R3JhcGhpY3NQb2ludCBwMSA9IEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgaWYgKHAxICE9IG1f
cGF0aC5jdXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRvKEZsb2F0
UG9pbnQoY3B4LCBjcHkpLCBwMSk7CisgICAgICAgIG1fcGF0aC5hZGRRdWFkQ3VydmVUbyhHcmFw
aGljc1BvaW50KGNweCwgY3B5KSwgcDEpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6YmV6aWVyQ3VydmVUbyhmbG9hdCBjcDF4LCBmbG9hdCBjcDF5LCBmbG9hdCBjcDJ4LCBm
bG9hdCBjcDJ5LCBmbG9hdCB4LCBmbG9hdCB5KQpAQCAtODI2LDExICs4MjYsMTEgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlemllckN1cgogICAgIGlmICghc3RhdGUoKS5tX2lu
dmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50
UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KGNwMXgsIGNwMXkpKTsK
KyAgICAgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KGNwMXgsIGNwMXkpKTsKIAotICAg
IEZsb2F0UG9pbnQgcDEgPSBGbG9hdFBvaW50KHgsIHkpOworICAgIEdyYXBoaWNzUG9pbnQgcDEg
PSBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIGlmIChwMSAhPSBtX3BhdGguY3VycmVudFBvaW50
KCkpCi0gICAgICAgIG1fcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3AxeCwgY3Ax
eSksIEZsb2F0UG9pbnQoY3AyeCwgY3AyeSksIHAxKTsKKyAgICAgICAgbV9wYXRoLmFkZEJlemll
ckN1cnZlVG8oR3JhcGhpY3NQb2ludChjcDF4LCBjcDF5KSwgR3JhcGhpY3NQb2ludChjcDJ4LCBj
cDJ5KSwgcDEpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8oZmxv
YXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtODQ3LDggKzg0Nyw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjphcmNUbyhmbG8KICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHAxID0gRmxvYXRQb2ludCh4MSwgeTEpOwotICAgIEZs
b2F0UG9pbnQgcDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7CisgICAgR3JhcGhpY3NQb2ludCBwMSA9
IEdyYXBoaWNzUG9pbnQoeDEsIHkxKTsKKyAgICBHcmFwaGljc1BvaW50IHAyID0gR3JhcGhpY3NQ
b2ludCh4MiwgeTIpOwogCiAgICAgaWYgKCFtX3BhdGguaGFzQ3VycmVudFBvaW50KCkpCiAgICAg
ICAgIG1fcGF0aC5tb3ZlVG8ocDEpOwpAQCAtODc3LDE1ICs4NzcsMTUgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdAogCiAgICAgLy8gSWYgJ3NhJyBhbmQgJ2VhJyBk
aWZmZXIgYnkgbW9yZSB0aGFuIDJQaSwganVzdCBhZGQgYSBjaXJjbGUgc3RhcnRpbmcvZW5kaW5n
IGF0ICdzYScKICAgICBpZiAoYW50aWNsb2Nrd2lzZSAmJiBzYSAtIGVhID49IDIgKiBwaUZsb2F0
KSB7Ci0gICAgICAgIG1fcGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2EsIHNhIC0g
MiAqIHBpRmxvYXQsIGFudGljbG9ja3dpc2UpOworICAgICAgICBtX3BhdGguYWRkQXJjKEdyYXBo
aWNzUG9pbnQoeCwgeSksIHIsIHNhLCBzYSAtIDIgKiBwaUZsb2F0LCBhbnRpY2xvY2t3aXNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWFudGljbG9ja3dpc2UgJiYgZWEgLSBz
YSA+PSAyICogcGlGbG9hdCkgewotICAgICAgICBtX3BhdGguYWRkQXJjKEZsb2F0UG9pbnQoeCwg
eSksIHIsIHNhLCBzYSArIDIgKiBwaUZsb2F0LCBhbnRpY2xvY2t3aXNlKTsKKyAgICAgICAgbV9w
YXRoLmFkZEFyYyhHcmFwaGljc1BvaW50KHgsIHkpLCByLCBzYSwgc2EgKyAyICogcGlGbG9hdCwg
YW50aWNsb2Nrd2lzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3BhdGguYWRk
QXJjKEZsb2F0UG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7CisgICAgbV9w
YXRoLmFkZEFyYyhHcmFwaGljc1BvaW50KHgsIHkpLCByLCBzYSwgZWEsIGFudGljbG9ja3dpc2Up
OwogfQogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZVJlY3RGb3JDYW52YXMoZmxvYXQmIHgsIGZsb2F0
JiB5LCBmbG9hdCYgd2lkdGgsIGZsb2F0JiBoZWlnaHQpCkBAIC05MTgsMTEgKzkxOCwxMSBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVjdChmbG9hCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkgewotICAgICAgICBtX3BhdGgubW92ZVRvKEZs
b2F0UG9pbnQoeCwgeSkpOworICAgICAgICBtX3BhdGgubW92ZVRvKEdyYXBoaWNzUG9pbnQoeCwg
eSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wYXRoLmFkZFJlY3QoRmxvYXRS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICBtX3BhdGguYWRkUmVjdChHcmFwaGljc1Jl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogfQogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQ
T1JUKQpAQCAtOTY0LDkgKzk2NCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2UoKQogCiAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAjaWYgUExBVEZPUk0oUVQp
Ci0gICAgICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGgucGxhdGZvcm1QYXRoKCkuY29u
dHJvbFBvaW50UmVjdCgpOworICAgICAgICBHcmFwaGljc1JlY3QgZGlydHlSZWN0ID0gbV9wYXRo
LnBsYXRmb3JtUGF0aCgpLmNvbnRyb2xQb2ludFJlY3QoKTsKICNlbHNlCi0gICAgICAgIEZsb2F0
UmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7CisgICAgICAgIEdyYXBoaWNz
UmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7CiAjZW5kaWYKICAgICAgICAg
Ly8gRmFzdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzdHJva2UncyBib3VuZGluZyByZWN0LgogICAg
ICAgICAvLyBUaGlzIHlpZWxkcyBhIHNsaWdodGx5IG92ZXJzaXplZCByZWN0IGJ1dCBpcyB2ZXJ5
IGZhc3QKQEAgLTEwMDMsOSArMTAwMyw5IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojppc1BvaW50SW4KICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHBvaW50KHgsIHkpOworICAgIEdyYXBoaWNz
UG9pbnQgcG9pbnQoeCwgeSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90
cmFuc2Zvcm07Ci0gICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmludmVyc2Uo
KS5tYXBQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0g
Y3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CiAgICAgaWYgKCFpc2Zpbml0ZSh0cmFuc2Zv
cm1lZFBvaW50LngoKSkgfHwgIWlzZmluaXRlKHRyYW5zZm9ybWVkUG9pbnQueSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3BhdGguY29udGFpbnModHJhbnNmb3JtZWRQ
b2ludCk7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y2xlYXJSZWN0CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRp
YmxlQ1RNKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAK
ICAgICBzYXZlKCk7CiAgICAgc2V0QWxsQXR0cmlidXRlc1RvRGVmYXVsdCgpOwpAQCAtMTA0Nyw3
ICsxMDQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxSZWN0KAogICAg
IGlmIChncmFkaWVudCAmJiBncmFkaWVudC0+aXNaZXJvU2l6ZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBHcmFwaGlj
c1JlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGlmIChzaG91bGREaXNwbGF5
VHJhbnNwYXJlbmN5RWxzZXdoZXJlKCkpCiAgICAgICAgIGRpc3BsYXlUcmFuc3BhcmVuY3lFbHNl
d2hlcmU8SW50UmVjdD4oZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CkBAIC0xMDc3LDkgKzEwNzcs
OSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjCiAgICAgaWYgKCFz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0
IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKKyAg
ICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3VuZGluZ1JlY3QuaW5m
bGF0ZShsaW5lV2lkdGggLyAyKTsKIAogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRo
KTsKQEAgLTExMDgsNyArMTEwOCw3IEBAIHN0YXRpYyBpbmxpbmUgQ0dTaXplIGFkanVzdGVkU2hh
ZG93U2l6ZSgKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyKQogewotICAgIHN0YXRlKCkubV9zaGFk
b3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRv
d09mZnNldCA9IEdyYXBoaWNzU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGF0ZSgpLm1fc2hh
ZG93Qmx1ciA9IGJsdXI7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gQ29sb3I6OnRyYW5z
cGFyZW50OwogICAgIGFwcGx5U2hhZG93KCk7CkBAIC0xMTE5LDE0ICsxMTE5LDE0IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3cKICAgICBpZiAoIXBhcnNlQ29sb3JP
ckN1cnJlbnRDb2xvcihzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIGNvbG9yLCBjYW52YXMoKSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAg
YXBwbHlTaGFkb3coKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNo
YWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2
ZWwpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBo
ZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBzdGF0ZSgpLm1f
c2hhZG93Q29sb3IgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlMZXZlbCwg
Z3JheUxldmVsLCAxLjBmKTsKIApAQCAtMTEzNCw3ICsxMTM0LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRl
KCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworICAgIGMtPnNldExlZ2FjeVNoYWRvdyhHcmFwaGljc1NpemUod2lkdGgsIC1oZWlnaHQp
LCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRv
dyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNv
bG9yLCBmbG9hdCBhbHBoYSkKQEAgLTExNDUsMTkgKzExNDUsMTkgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwogICAgICAgICByZXR1cm47CiAKICAgICBzdGF0ZSgp
Lm1fc2hhZG93Q29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIGFscGhhKTsKLSAg
ICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAg
ICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1f
c2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
KyAgICBjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3Rh
dGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9h
dCBhbHBoYSkKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lk
dGgsIGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRl
KCkubV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGFscGhhKTsKIApAQCAtMTE2NSwxMiArMTE2NSwxMiBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0
KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwg
LWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIs
IGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVy
ID0gYmx1cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQTMyRnJvbUZsb2F0
cyhyLCBnLCBiLCBhKTsKIApAQCAtMTE3OCwxMiArMTE3OCwxMiBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U2hhZG93CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAK
LSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUo
KS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJH
Qik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdodCks
IHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93
KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZsb2F0IG0s
IGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVy
ID0gYmx1cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQUZyb21DTVlLQShj
LCBtLCB5LCBrLCBhKTsKIApAQCAtMTE5OCwxMyArMTE5OCwxMyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U2hhZG93CiAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KGRjLT5wbGF0Zm9ybUNvbnRleHQoKSwgYWRqdXN0ZWRTaGFkb3dTaXplKHdpZHRoLCAtaGVpZ2h0
KSwgYmx1ciwgc2hhZG93Q29sb3IpOwogICAgIENHQ29sb3JSZWxlYXNlKHNoYWRvd0NvbG9yKTsK
ICNlbHNlCi0gICAgZGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQp
LCBibHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
IGRjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwgYmx1ciwg
c3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICNlbmRpZgogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJTaGFkb3coKQogewotICAgIHN0
YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93
T2Zmc2V0ID0gR3JhcGhpY3NTaXplKCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSAwOwog
ICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICBhcHBs
eVNoYWRvdygpOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmFwcGx5U2hhZAogCiAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLm1fc2hhZG93T2Zm
c2V0LndpZHRoKCk7CiAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5tX3NoYWRvd09mZnNldC5o
ZWlnaHQoKTsKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0
KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwg
LWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzaXplKEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlKQpAQCAtMTIzNyw5ICsxMjM3LDkgQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0
IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorc3RhdGljIGlubGluZSBHcmFw
aGljc1JlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7Ci0gICAg
cmV0dXJuIEZsb2F0UmVjdChtaW4ocmVjdC54KCksIHJlY3QubWF4WCgpKSwKKyAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAogICAgICAgICBtaW4ocmVj
dC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lk
dGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5oZWlnaHQoKSkpOwpAQCAt
MTI2Myw3ICsxMjYzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEludFNpemUgcyA9IHNpemUoaW1hZ2UpOwot
ICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KDAsIDAsIHMud2lkdGgoKSwgcy5oZWlnaHQo
KSksIEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOworICAgIGRyYXdJbWFnZShp
bWFnZSwgR3JhcGhpY3NSZWN0KDAsIDAsIHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEdyYXBoaWNz
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLApAQCAtMTI3NCwx
NSArMTI3NCwxNSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAg
ICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBGbG9hdFJlY3Qo
ZHgsIGR5LCBkdywgZGgpLCBlYyk7CisgICAgZHJhd0ltYWdlKGltYWdlLCBHcmFwaGljc1JlY3Qo
c3gsIHN5LCBzdywgc2gpLCBHcmFwaGljc1JlY3QoZHgsIGR5LCBkdywgZGgpLCBlYyk7CiB9CiAK
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBkcmF3SW1hZ2UoaW1hZ2UsIHNyY1JlY3QsIGRzdFJlY3QsIHN0YXRlKCkubV9nbG9iYWxD
b21wb3NpdGUsIGVjKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJ
bWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9yJiBvcCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgQ29tcG9zaXRlT3BlcmF0b3ImIG9wLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWltYWdlKSB7CiAgICAgICAgIGVjID0gVFlQ
RV9NSVNNQVRDSF9FUlI7CkBAIC0xMzAxLDEwICsxMzAxLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFNyY1JlY3QgPSBub3JtYWxp
emVSZWN0KHNyY1JlY3QpOwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkRHN0UmVjdCA9IG5vcm1h
bGl6ZVJlY3QoZHN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWRTcmNSZWN0ID0g
bm9ybWFsaXplUmVjdChzcmNSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybWFsaXplZERzdFJl
Y3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoaW1hZ2UpKTsKKyAgICBHcmFwaGljc1JlY3Qg
aW1hZ2VSZWN0ID0gR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgc2l6ZShpbWFnZSkpOwog
ICAgIGlmICghaW1hZ2VSZWN0LmNvbnRhaW5zKG5vcm1hbGl6ZWRTcmNSZWN0KSB8fCAhc3JjUmVj
dC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0la
RV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTEzNDIsMjUgKzEzNDIsMjUgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgICAgICBlYyA9IFRZUEVfTUlTTUFU
Q0hfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRyYXdJbWFnZShjYW52YXMsIEZs
b2F0UmVjdCgwLCAwLCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpLCBGbG9hdFJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoY2FudmFzLCBHcmFw
aGljc1JlY3QoMCwgMCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSwgR3JhcGhp
Y3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywKICAgICBm
bG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwKICAgICBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgZHJh
d0ltYWdlKGNhbnZhcywgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgRmxvYXRSZWN0KGR4LCBk
eSwgZHcsIGRoKSwgZWMpOworICAgIGRyYXdJbWFnZShjYW52YXMsIEdyYXBoaWNzUmVjdChzeCwg
c3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKIH0KIAotdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCog
c291cmNlQ2FudmFzLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCi0gICAgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqIHNvdXJjZUNhbnZhcywgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LAorICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFzb3VyY2VDYW52YXMpIHsKICAgICAgICAg
ZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZs
b2F0UmVjdCBzcmNDYW52YXNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc291cmNlQ2Fu
dmFzLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBzcmNDYW52YXNSZWN0ID0gR3JhcGhpY3NS
ZWN0KEdyYXBoaWNzUG9pbnQoKSwgc291cmNlQ2FudmFzLT5zaXplKCkpOwogCiAgICAgaWYgKCFz
cmNDYW52YXNSZWN0LndpZHRoKCkgfHwgIXNyY0NhbnZhc1JlY3QuaGVpZ2h0KCkpIHsKICAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MjQsMTcgKzE0MjQsMTcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIEludFNpemUgcyA9IHNpemUodmlkZW8pOwotICAgIGRyYXdJbWFnZSh2aWRlbywgRmxv
YXRSZWN0KDAsIDAsIHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEZsb2F0UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSwgZWMpOworICAgIGRyYXdJbWFnZSh2aWRlbywgR3JhcGhpY3NSZWN0KDAsIDAs
IHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEdyYXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KSwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLAogICAgIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3cs
IGZsb2F0IHNoLAogICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0IGRoLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBkcmF3SW1hZ2UodmlkZW8sIEZsb2F0UmVjdChzeCwg
c3ksIHN3LCBzaCksIEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKKyAgICBkcmF3SW1h
Z2UodmlkZW8sIEdyYXBoaWNzUmVjdChzeCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwg
ZHksIGR3LCBkaCksIGVjKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRy
YXdJbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBHcmFwaGljc1JlY3Qm
IHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCF2
aWRlbykgewpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdJbWFnZQogICAgIGlmICh2aWRlby0+cmVhZHlTdGF0ZSgpID09IEhUTUxNZWRpYUVs
ZW1lbnQ6OkhBVkVfTk9USElORyB8fCB2aWRlby0+cmVhZHlTdGF0ZSgpID09IEhUTUxNZWRpYUVs
ZW1lbnQ6OkhBVkVfTUVUQURBVEEpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCB2
aWRlb1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKHZpZGVvKSk7CisgICAgR3Jh
cGhpY3NSZWN0IHZpZGVvUmVjdCA9IEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIHNpemUo
dmlkZW8pKTsKICAgICBpZiAoIXZpZGVvUmVjdC5jb250YWlucyhub3JtYWxpemVSZWN0KHNyY1Jl
Y3QpKSB8fCAhc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKSB7CiAgICAgICAg
IGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjcsNyArMTQ2Nyw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwogICAgIGMtPmNsaXAoZHN0UmVjdCk7
CiAgICAgYy0+dHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgYy0+c2Nh
bGUoRmxvYXRTaXplKGRzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5o
ZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKKyAgICBjLT5zY2FsZShHcmFwaGljc1NpemUo
ZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpIC8gc3Jj
UmVjdC5oZWlnaHQoKSkpOwogICAgIGMtPnRyYW5zbGF0ZSgtc3JjUmVjdC54KCksIC1zcmNSZWN0
LnkoKSk7CiAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGMsIEludFJlY3Qo
SW50UG9pbnQoKSwgc2l6ZSh2aWRlbykpKTsKICAgICBzdGF0ZVNhdmVyLnJlc3RvcmUoKTsKQEAg
LTE0ODUsNyArMTQ4NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UKICAgICAgICAgb3AgPSBDb21wb3NpdGVTb3VyY2VPdmVyOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIEZs
b2F0UmVjdChkeCwgZHksIGR3LCBkaCksIG9wLCBlYyk7CisgICAgZHJhd0ltYWdlKGltYWdlLCBH
cmFwaGljc1JlY3Qoc3gsIHN5LCBzdywgc2gpLCBHcmFwaGljc1JlY3QoZHgsIGR5LCBkdywgZGgp
LCBvcCwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0QWxwaGEo
ZmxvYXQgYWxwaGEpCkBAIC0xNTExLDcgKzE1MTEsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvCiB7CiAgICAgQVNTRVJUKHNob3VsZERpc3BsYXlUcmFuc3BhcmVu
Y3lFbHNld2hlcmUoKSk7CiAKLSAgICBGbG9hdFJlY3QgY2FudmFzUmVjdCgwLCAwLCBjYW52YXMo
KS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3QgY2FudmFz
UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKICAgICBj
YW52YXNSZWN0ID0gc3RhdGUoKS5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChjYW52YXNS
ZWN0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CkBAIC0x
NTM5LDcgKzE1MzksNyBAQCBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBDYW52YXNSZW5kZXJp
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4g
Z3JhZGllbnQgPSBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAsIHkwKSwgRmxv
YXRQb2ludCh4MSwgeTEpKTsKKyAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50ID0g
Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZShHcmFwaGljc1BvaW50KHgwLCB5MCksIEdyYXBoaWNzUG9p
bnQoeDEsIHkxKSk7CiAgICAgcHJlcGFyZUdyYWRpZW50Rm9yRGFzaGJvYXJkKGdyYWRpZW50Lmdl
dCgpKTsKICAgICByZXR1cm4gZ3JhZGllbnQucmVsZWFzZSgpOwogfQpAQCAtMTU1Niw3ICsxNTU2
LDcgQEAgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gQ2FudmFzUmVuZGVyaQogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50ID0g
Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHgwLCB5MCksIHIwLCBGbG9hdFBvaW50
KHgxLCB5MSksIHIxKTsKKyAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50ID0gQ2Fu
dmFzR3JhZGllbnQ6OmNyZWF0ZShHcmFwaGljc1BvaW50KHgwLCB5MCksIHIwLCBHcmFwaGljc1Bv
aW50KHgxLCB5MSksIHIxKTsKICAgICBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9hcmQoZ3JhZGll
bnQuZ2V0KCkpOwogICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CiB9CkBAIC0xNjA1LDcg
KzE2MDUsNyBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluCiAgICAg
cmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmNvcGllZEltYWdlKCksIHJlcGVh
dFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0
aW9ucykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEdyYXBo
aWNzUmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKQEAgLTE2MTMsNyArMTYxMyw3IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGMKICAgICBpZiAoIXN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgZGlydHlS
ZWN0ID0gcjsKKyAgICBHcmFwaGljc1JlY3QgZGlydHlSZWN0ID0gcjsKICAgICBpZiAob3B0aW9u
cyAmIENhbnZhc0RpZERyYXdBcHBseVRyYW5zZm9ybSkgewogICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICAgICAgZGlydHlSZWN0ID0gY3RtLm1h
cFJlY3Qocik7CkBAIC0xNjIxLDcgKzE2MjEsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZGlkRHJhdyhjCiAKICAgICBpZiAob3B0aW9ucyAmIENhbnZhc0RpZERyYXdBcHBseVNo
YWRvdyAmJiBhbHBoYUNoYW5uZWwoc3RhdGUoKS5tX3NoYWRvd0NvbG9yKSkgewogICAgICAgICAv
LyBUaGUgc2hhZG93IGdldHMgYXBwbGllZCBhZnRlciB0cmFuc2Zvcm1hdGlvbgotICAgICAgICBG
bG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2hh
ZG93UmVjdChkaXJ0eVJlY3QpOwogICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc3RhdGUoKS5tX3No
YWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzdGF0ZSgpLm1fc2hhZG93
Qmx1cik7CiAgICAgICAgIGRpcnR5UmVjdC51bml0ZShzaGFkb3dSZWN0KTsKQEAgLTE2NzcsNyAr
MTY3Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNSZW5kZXJpbmdDb24KICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZShmYWJzKHN3
KSwgZmFicyhzaCkpOworICAgIEdyYXBoaWNzU2l6ZSB1bnNjYWxlZFNpemUoZmFicyhzdyksIGZh
YnMoc2gpKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYW52YXMoKS0+Y29udmVydExvZ2lj
YWxUb0RldmljZSh1bnNjYWxlZFNpemUpOwogICAgIGlmIChzY2FsZWRTaXplLndpZHRoKCkgPCAx
KQogICAgICAgICBzY2FsZWRTaXplLnNldFdpZHRoKDEpOwpAQCAtMTcxNSw3ICsxNzE1LDcgQEAg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IENhbnZhc1JlbmRlcmluZ0NvbgogICAgICAgICBzaCA9IC1z
aDsKICAgICB9CiAgICAgCi0gICAgRmxvYXRSZWN0IHVuc2NhbGVkUmVjdChzeCwgc3ksIHN3LCBz
aCk7CisgICAgR3JhcGhpY3NSZWN0IHVuc2NhbGVkUmVjdChzeCwgc3ksIHN3LCBzaCk7CiAgICAg
SW50UmVjdCBzY2FsZWRSZWN0ID0gY2FudmFzKCktPmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5z
Y2FsZWRSZWN0KTsKICAgICBpZiAoc2NhbGVkUmVjdC53aWR0aCgpIDwgMSkKICAgICAgICAgc2Nh
bGVkUmVjdC5zZXRXaWR0aCgxKTsKQEAgLTE3NjcsNyArMTc2Nyw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZUQKICAgICAgICAgZGlydHlIZWlnaHQgPSAtZGlydHlI
ZWlnaHQ7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGNsaXBSZWN0KGRpcnR5WCwgZGlydHlZLCBk
aXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IGNsaXBSZWN0KGRpcnR5
WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiAgICAgY2xpcFJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoMCwgMCwgZGF0YS0+d2lkdGgoKSwgZGF0YS0+aGVpZ2h0KCkpKTsKICAgICBJ
bnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0PGludD4o
ZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7
CkBAIC0xOTEzLDcgKzE5MTMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d1RleHRJCiAgICAgVGV4dFJ1biB0ZXh0UnVuKHN0cmluZywgbGVuZ3RoLCBmYWxzZSwgMCwgMCwg
VGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgZGlyZWN0aW9uLCBvdmVycmlkZSwgVGV4
dFJ1bjo6Tm9Sb3VuZGluZyk7CiAKICAgICAvLyBEcmF3IHRoZSBpdGVtIHRleHQgYXQgdGhlIGNv
cnJlY3QgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBsb2NhdGlvbih4LCB5KTsKKyAgICBHcmFwaGlj
c1BvaW50IGxvY2F0aW9uKHgsIHkpOwogICAgIHN3aXRjaCAoc3RhdGUoKS5tX3RleHRCYXNlbGlu
ZSkgewogICAgIGNhc2UgVG9wVGV4dEJhc2VsaW5lOgogICAgIGNhc2UgSGFuZ2luZ1RleHRCYXNl
bGluZToKQEAgLTE5NTIsNyArMTk1Miw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEkKICAgICB9CiAKICAgICAvLyBUaGUgc2xvcCBidWlsdCBpbiB0byB0aGlzIG1h
c2sgcmVjdCBtYXRjaGVzIHRoZSBoZXVyaXN0aWMgdXNlZCBpbiBGb250Q0dXaW4uY3BwIGZvciBH
REkgdGV4dC4KLSAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBGbG9hdFJlY3QobG9jYXRpb24ueCgp
IC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkgLyAyLCBsb2NhdGlvbi55KCkgLSBmb250TWV0cmljcy5h
c2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxpbmVHYXAoKSwKKyAgICBHcmFwaGljc1JlY3QgdGV4dFJl
Y3QgPSBHcmFwaGljc1JlY3QobG9jYXRpb24ueCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkgLyAy
LCBsb2NhdGlvbi55KCkgLSBmb250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxpbmVH
YXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKyBmb250TWV0
cmljcy5oZWlnaHQoKSwgZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSk7CiAgICAgaWYgKCFmaWxs
KQogICAgICAgICB0ZXh0UmVjdC5pbmZsYXRlKGMtPnN0cm9rZVRoaWNrbmVzcygpIC8gMik7CkBA
IC0yMDA2LDcgKzIwMDYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJCiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdoZW4gc3Ryb2tpbmcgdGV4dCwgcG9pbnR5IG1p
dGVycyBjYW4gZXh0ZW5kIG91dHNpZGUgb2YgdGV4dFJlY3QsIHNvIHdlCiAgICAgICAgIC8vIHB1
bnQgYW5kIGRpcnR5IHRoZSB3aG9sZSBjYW52YXMuCi0gICAgICAgIGRpZERyYXcoRmxvYXRSZWN0
KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAgICAg
ZGlkRHJhdyhHcmFwaGljc1JlY3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ2FudmFzR3JhZGllbnQ7CiBjbGFzcyBDYW52YXNQYXR0ZXJuOwogY2xhc3Mg
Q2FudmFzU3R5bGU7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKIGNsYXNzIEhUTUxJ
bWFnZUVsZW1lbnQ7CkBAIC0xNjgsMTcgKzE2OCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3
SW1hZ2UoSFRNTEltYWdlRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQg
ZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3
LCBmbG9hdCBzaCwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHgsIGZs
b2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxl
bWVudCosIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0
IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZs
b2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhU
TUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1h
Z2VFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9yJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNS
ZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9y
JiwgRXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGRyYXdJbWFn
ZShIVE1MVmlkZW9FbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkcmF3
SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZs
b2F0IHNoLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYp
OwogI2VuZGlmCiAKICAgICB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhUTUxJbWFnZUVsZW1lbnQq
LCBmbG9hdCBzeCA9IDAsIGZsb2F0IHN5ID0gMCwgZmxvYXQgc3cgPSAwLCBmbG9hdCBzaCA9IDAs
CkBAIC0yNDEsNyArMjQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTGluZUNhcCBtX2xpbmVDYXA7
CiAgICAgICAgIExpbmVKb2luIG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1p
dDsKLSAgICAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OworICAgICAgICBHcmFwaGljc1Np
emUgbV9zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGZsb2F0IG1fc2hhZG93Qmx1cjsKICAgICAgICAg
UkdCQTMyIG1fc2hhZG93Q29sb3I7CiAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CkBAIC0y
NzUsNyArMjc1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYXBwbHlTaGFkb3coKTsKIAotICAg
IHZvaWQgZGlkRHJhdyhjb25zdCBGbG9hdFJlY3QmLCB1bnNpZ25lZCBvcHRpb25zID0gQ2FudmFz
RGlkRHJhd0FwcGx5QWxsKTsKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgR3JhcGhpY3NSZWN0Jiwg
dW5zaWduZWQgb3B0aW9ucyA9IENhbnZhc0RpZERyYXdBcHBseUFsbCk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogICAgIGVsc2UgewogI2VuZGlmCiAgICAgICAg
IGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkKLSAgICAgICAgICAgIGNhbnZhcygpLT5kaWREcmF3
KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
CisgICAgICAgICAgICBjYW52YXMoKS0+ZGlkRHJhdyhHcmFwaGljc1JlY3QoMCwgMCwgY2FudmFz
KCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAjaWZuZGVmIFNsaWRlclRodW1iRWxlbWVudF9oCiAjZGVmaW5l
IFNsaWRlclRodW1iRWxlbWVudF9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKQEAgLTQz
LDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFz
cyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGbG9hdFBvaW50OworY2xh
c3MgR3JhcGhpY3NQb2ludDsKIAogY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50IDogcHVibGljIEhU
TUxEaXZFbGVtZW50IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9E
T01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotUGF0
aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK1BhdGggcXVhZFRvUGF0aChjb25z
dCBHcmFwaGljc1F1YWQmIHF1YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsKICAgICBxdWFkUGF0
aC5tb3ZlVG8ocXVhZC5wMSgpKTsKQEAgLTU4LDcgKzU4LDcgQEAgUGF0aCBxdWFkVG9QYXRoKGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gcXVhZFBhdGg7CiB9CiAKLXZvaWQgZHJh
d091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3ZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCwgY29uc3QgQ29s
b3ImIGZpbGxDb2xvcikKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IG91dGxpbmVUaGlja25lc3Mg
PSAyOwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBvdXRsaW5lQ29sb3IoNjIsIDg2LCAxODAsIDIy
OCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRl
eHQmIGMKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsKIH0KIAotdm9pZCBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1
YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29s
b3IpCit2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBjbGlwUXVh
ZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKIHsKICAgICBjb250ZXh0LnNhdmUoKTsKICAgICBQ
YXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwpAQCAtOTIsMTQgKzkyLDE0
IEBAIHZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ28KICAgICBjb250ZXh0
LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFk
JiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1
YWQmIG1hcmdpblF1YWQsIERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0TW9kZSBtb2RlKQor
dm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
R3JhcGhpY3NRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBwYWRkaW5nUXVh
ZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBHcmFwaGljc1F1YWQmIG1h
cmdpblF1YWQsIERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0TW9kZSBtb2RlKQogewogICAg
IHN0YXRpYyBjb25zdCBDb2xvciBjb250ZW50Qm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsK
ICAgICBzdGF0aWMgY29uc3QgQ29sb3IgcGFkZGluZ0JveENvbG9yKDEyNSwgMTczLCAyMTcsIDE2
MCk7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIGJvcmRlckJveENvbG9yKDEyNSwgMTczLCAyMTcs
IDE5Mik7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIG1hcmdpbkJveENvbG9yKDEyNSwgMTczLCAy
MTcsIDIyOCk7CiAKLSAgICBGbG9hdFF1YWQgY2xpcFF1YWQ7CisgICAgR3JhcGhpY3NRdWFkIGNs
aXBRdWFkOwogICAgIGlmIChtb2RlID09IERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0TWFy
Z2luIHx8IChtb2RlID09IERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0QWxsICYmIG1hcmdp
blF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKICAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlw
KGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdpbkJveENvbG9yKTsKICAgICAg
ICAgY2xpcFF1YWQgPSBib3JkZXJRdWFkOwpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgZHJhd0hp
Z2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQKICAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKGNvbnRleHQsIGNsaXBRdWFkLCBjbGlwUXVhZCwgY29udGVudEJveENvbG9yKTsKIH0K
IAotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBsaW5lQm94UXVhZHMpCit2
b2lkIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEdyYXBoaWNzUXVhZD4mIGxpbmVCb3hRdWFkcykKIHsK
ICAgICBzdGF0aWMgY29uc3QgQ29sb3IgbGluZUJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7
CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFpbkZyYW1lT2Zm
c2V0KEZyCiAgICAgcmV0dXJuIG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKIH0KIAotdm9p
ZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9kZSwg
Y29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwgY29u
c3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKQor
dm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSogbm9k
ZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJveCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRp
bmdzKQogewogICAgIHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7CiAgICAgc3Rh
dGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lk
IGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgSW50UmVjdCB0aXRsZUFu
Y2hvckJveCA9IGJvdW5kaW5nQm94OwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gY29udGFpbmlu
Z0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IG92ZXJs
YXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IG92
ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgaWYgKCFvdmVybGF5
UmVjdC5jb250YWlucyhib3VuZGluZ0JveCkgJiYgIWJvdW5kaW5nQm94LmNvbnRhaW5zKGVuY2xv
c2luZ0ludFJlY3Qob3ZlcmxheVJlY3QpKSkKICAgICAgICAgb3ZlcmxheVJlY3QgPSB2aWV3LT52
aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb3ZlcmxheVJlY3Qu
eCgpLCAtb3ZlcmxheVJlY3QueSgpKTsKQEAgLTI2NywxMCArMjY3LDEwIEBAIHZvaWQgZHJhd05v
ZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSArIHJlbmRlckJveC0+
bWFyZ2luUmlnaHQoKSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5Ub3Ao
KSArIHJlbmRlckJveC0+bWFyZ2luQm90dG9tKCkpOwogCiAKLSAgICAgICAgRmxvYXRRdWFkIGFi
c0NvbnRlbnRRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChj
b250ZW50Qm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlckJv
eC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOwotICAgICAgICBG
bG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFJlY3QoYm9yZGVyQm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5RdWFkID0g
cmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gpKTsKKyAg
ICAgICAgR3JhcGhpY3NRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEdyYXBoaWNzUmVjdChjb250ZW50Qm94KSk7CisgICAgICAgIEdyYXBoaWNzUXVh
ZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGlj
c1JlY3QocGFkZGluZ0JveCkpOworICAgICAgICBHcmFwaGljc1F1YWQgYWJzQm9yZGVyUXVhZCA9
IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoYm9yZGVyQm94KSk7
CisgICAgICAgIEdyYXBoaWNzUXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyQm94LT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChtYXJnaW5Cb3gpKTsKIAogICAgICAgICBhYnNDb250
ZW50UXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CiAgICAgICAgIGFic1BhZGRpbmdRdWFkLm1v
dmUobWFpbkZyYW1lT2Zmc2V0KTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIGRyYXdOb2RlSGln
aGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JCb3goY29u
dGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNN
YXJnaW5RdWFkLCBtb2RlKTsKICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlcklubGlu
ZSgpIHx8IGlzU1ZHUmVuZGVyZXIpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzaG93
IG1hcmdpbnMvcGFkZGluZy9ib3JkZXIgZm9yIGlubGluZXMuCi0gICAgICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGxpbmVCb3hRdWFkczsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gbGluZUJv
eFF1YWRzOwogICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhsaW5lQm94UXVhZHMpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytp
KQogICAgICAgICAgICAgbGluZUJveFF1YWRzW2ldICs9IG1haW5GcmFtZU9mZnNldDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNocm9t
ZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgRmxvYXRS
ZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwor
ICAgIEdyYXBoaWNzUmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCktPndp
bmRvd1JlY3QoKTsKICAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKICAgICBtX2Zyb250ZW5kUGFn
ZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAg
QEAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgog
I2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5I
YWx0ZXJDbGllbnQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKQEAgLTg5LDEwICs4OSwxMCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpIHsgfQogCiAgICAg
dmlydHVhbCB2b2lkKiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHdpbmRvd1JlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIHsgfQorICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQogCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgcGFnZVJlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCkgeyByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7IH0KIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKSB7IHJldHVybiAxLmY7IH0K
IApAQCAtNTE3LDcgKzUxNyw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4
dENoZWNrZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsgfQogCiAjaWYgVVNFKEFV
VE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3Jy
ZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyB9CiAgICAg
dmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlw
ZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQAog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGb3JtU3VibWlzc2lvbi5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zMjY1LDggKzMyNjUsOCBAQCBGcmFtZSogY3JlYXRlV2lu
ZG93KEZyYW1lKiBvcGVuZXJGcmFtZSwgCiAgICAgLy8gc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUg
cGFnZS4gV2UgY2FuIG9ubHkgcmVzaXplIHRoZSB3aW5kb3csIHNvCiAgICAgLy8gYWRqdXN0IGZv
ciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlIHBhZ2Ugc2l6
ZS4KIAotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0ID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jl
Y3QoKTsKLSAgICBGbG9hdFNpemUgcGFnZVNpemUgPSBwYWdlLT5jaHJvbWUoKS0+cGFnZVJlY3Qo
KS5zaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QgPSBwYWdlLT5jaHJvbWUoKS0+
d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzU2l6ZSBwYWdlU2l6ZSA9IHBhZ2UtPmNocm9tZSgp
LT5wYWdlUmVjdCgpLnNpemUoKTsKICAgICBpZiAoZmVhdHVyZXMueFNldCkKICAgICAgICAgd2lu
ZG93UmVjdC5zZXRYKGZlYXR1cmVzLngpOwogICAgIGlmIChmZWF0dXJlcy55U2V0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJGaWxlSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAi
RmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1
ZGUgIkdlb2xvY2F0aW9uLmgiCkBAIC0xMzIsMTcgKzEzMiwxNyBAQCB2b2lkIENocm9tZTo6c2Ny
b2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjCiAgICAgbV9jbGllbnQtPnNjcm9sbGJhcnNNb2RlRGlk
Q2hhbmdlKCk7CiB9CiAKLXZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgY29uc3QKK3ZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBtX2NsaWVudC0+c2V0V2luZG93UmVjdChyZWN0KTsK
IH0KIAotRmxvYXRSZWN0IENocm9tZTo6d2luZG93UmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3Qg
Q2hyb21lOjp3aW5kb3dSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jbGllbnQtPndpbmRv
d1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IENocm9tZTo6cGFnZVJlY3QoKSBjb25zdAorR3JhcGhp
Y3NSZWN0IENocm9tZTo6cGFnZVJlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudC0+
cGFnZVJlY3QoKTsKIH0KQEAgLTUxMywxMiArNTEzLDEyIEBAIHZvaWQgQ2hyb21lQ2xpZW50Ojpw
b3B1bGF0ZVZpc2l0ZWRMaW5rcygKIHsKIH0KIAotRmxvYXRSZWN0IENocm9tZUNsaWVudDo6Y3Vz
dG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRS
ZWN0JikKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QoTm9k
ZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7Ci0gICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAotdm9pZCBD
aHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJp
bmcmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sLCBib29sKQordm9p
ZCBDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNT
dHJpbmcmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBib29sLCBi
b29sKQogewogfQogCkBAIC01MzMsMTQgKzUzMywxNCBAQCBTdHJpbmcgQ2hyb21lQ2xpZW50Ojpn
ZW5lcmF0ZVJlcGxhY2VtZW50CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29sIENocm9t
ZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsCitib29sIENocm9tZUNsaWVudDo6cGFpbnRD
dXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2Nyb2xsYmFyQ29udHJvbFN0YXRlLCBTY3JvbGxiYXJQYXJ0LCBib29sLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgU2Nyb2xsYmFyQ29u
dHJvbFBhcnRNYXNrKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBDaHJvbWVDbGll
bnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYpCitib29sIENocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50OwogICAgIGNsYXNzIEZpbGVDaG9v
c2VyOwogICAgIGNsYXNzIEZpbGVJY29uTG9hZGVyOwotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAg
ICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgR2VvbG9j
YXRpb247CiAgICAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTg3LDEwICs4NywxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSos
IGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICAgICAgdm9pZCBsYXlvdXRVcGRhdGVkKEZyYW1l
KikgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OwotICAgICAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCgpIGNvbnN0OworICAgICAgICB2
b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CisgICAgICAgIEdy
YXBoaWNzUmVjdCB3aW5kb3dSZWN0KCkgY29uc3Q7CiAKLSAgICAgICAgRmxvYXRSZWN0IHBhZ2VS
ZWN0KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpIGNvbnN0OwogICAg
ICAgICAKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRmlsZUNob29zZXI7CiAg
ICAgY2xhc3MgRmlsZUljb25Mb2FkZXI7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNz
IEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBHZW9sb2NhdGlvbjsK
ICAgICBjbGFzcyBHcmFwaGljc0xheWVyOwpAQCAtNzksMTAgKzc5LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95
ZWQoKSA9IDA7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3QoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYpID0gMDsKKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgp
ID0gMDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCkgPSAw
OworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpID0gMDsKICAgICAgICAg
CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKSA9IDA7CiAgICAgCkBAIC0yMDks
MTcgKzIwOSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgY3Vz
dG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBG
bG9hdFJlY3QmIGxpbmVSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGln
aGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICAgICAgdmlydHVhbCBHcmFw
aGljc1JlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0KTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwK
ICAgICAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsKICAgICAgICAg
ICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxl
Rm9yVXBsb2FkKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RyaW5nJiBnZW5lcmF0ZWRGaWxlbmFtZSk7
CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXpl
LCAKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTdGF0
ZSwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBmbG9hdCBwcm9wb3J0
aW9uLCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2spOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7
CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbENvcm5lcihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIERPTVdpbmRvdzo6
ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkCiAvLyAgICBzY3JlZW4gcmVjdC4KIC8vIDUpIFRyYW5z
bGF0ZSB0aGUgd2luZG93IHJlY3QgY29vcmRpbmF0ZXMgdG8gYmUgd2l0aGluIHRoZSBjb29yZGlu
YXRlIHNwYWNlIG9mCiAvLyAgICB0aGUgc2NyZWVuIHJlY3QuCi12b2lkIERPTVdpbmRvdzo6YWRq
dXN0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlbiwgRmxvYXRSZWN0JiB3aW5kb3cs
IGNvbnN0IEZsb2F0UmVjdCYgcGVuZGluZ0NoYW5nZXMpCit2b2lkIERPTVdpbmRvdzo6YWRqdXN0
V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHNjcmVlbiwgR3JhcGhpY3NSZWN0JiB3aW5k
b3csIGNvbnN0IEdyYXBoaWNzUmVjdCYgcGVuZGluZ0NoYW5nZXMpCiB7CiAgICAgLy8gTWFrZSBz
dXJlIHdlJ3JlIGluIGEgdmFsaWQgc3RhdGUgYmVmb3JlIGFkanVzdGluZyBkaW1lbnNpb25zLgog
ICAgIEFTU0VSVChpc2Zpbml0ZShzY3JlZW4ueCgpKSk7CkBAIC0zNDMsOCArMzQzLDggQEAgdm9p
ZCBET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3QoY29uc3QgRgogICAgICAgICB3aW5kb3cuc2V0
SGVpZ2h0KHBlbmRpbmdDaGFuZ2VzLmhlaWdodCgpKTsKICAgICAKICAgICAvLyBSZXNpemUgdGhl
IHdpbmRvdyB0byBiZXR3ZWVuIDEwMCBhbmQgdGhlIHNjcmVlbiB3aWR0aCBhbmQgaGVpZ2h0Lgot
ICAgIHdpbmRvdy5zZXRXaWR0aChtaW4obWF4KDEwMC4wZiwgd2luZG93LndpZHRoKCkpLCBzY3Jl
ZW4ud2lkdGgoKSkpOwotICAgIHdpbmRvdy5zZXRIZWlnaHQobWluKG1heCgxMDAuMGYsIHdpbmRv
dy5oZWlnaHQoKSksIHNjcmVlbi5oZWlnaHQoKSkpOworICAgIHdpbmRvdy5zZXRXaWR0aChtaW4o
bWF4PEdyYXBoaWNzVW5pdD4oMTAwLjBmLCB3aW5kb3cud2lkdGgoKSksIHNjcmVlbi53aWR0aCgp
KSk7CisgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4PEdyYXBoaWNzVW5pdD4oMTAwLjBmLCB3
aW5kb3cuaGVpZ2h0KCkpLCBzY3JlZW4uaGVpZ2h0KCkpKTsKICAgICAKICAgICAvLyBDb25zdHJh
aW4gdGhlIHdpbmRvdyBwb3NpdGlvbiB0byB0aGUgc2NyZWVuLgogICAgIHdpbmRvdy5zZXRYKG1h
eChzY3JlZW4ueCgpLCBtaW4od2luZG93LngoKSwgc2NyZWVuLm1heFgoKSAtIHdpbmRvdy53aWR0
aCgpKSkpOwpAQCAtMTMxNSw3ICsxMzE1LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gRE9N
V2luZG93Ojp3ZWJraQogCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBGbG9hdFBvaW50IHBhZ2VQb2ludChwLT54
KCksIHAtPnkoKSk7CisgICAgR3JhcGhpY3NQb2ludCBwYWdlUG9pbnQocC0+eCgpLCBwLT55KCkp
OwogICAgIHBhZ2VQb2ludCA9IG5vZGUtPmNvbnZlcnRUb1BhZ2UocGFnZVBvaW50KTsKICAgICBy
ZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShwYWdlUG9pbnQueCgpLCBwYWdlUG9pbnQueSgpKTsK
IH0KQEAgLTEzMjcsNyArMTMyNyw3IEBAIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IERPTVdpbmRv
dzo6d2Via2kKIAogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgRmxvYXRQb2ludCBub2RlUG9pbnQocC0+eCgpLCBw
LT55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgbm9kZVBvaW50KHAtPngoKSwgcC0+eSgpKTsKICAg
ICBub2RlUG9pbnQgPSBub2RlLT5jb252ZXJ0RnJvbVBhZ2Uobm9kZVBvaW50KTsKICAgICByZXR1
cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShub2RlUG9pbnQueCgpLCBub2RlUG9pbnQueSgpKTsKIH0K
QEAgLTE0MDAsOCArMTQwMCw4IEBAIHZvaWQgRE9NV2luZG93Ojptb3ZlQnkoZmxvYXQgeCwgZmxv
YXQgeSkKICAgICBpZiAobV9mcmFtZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRmxvYXRSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsK
LSAgICBGbG9hdFJlY3QgdXBkYXRlID0gZnI7CisgICAgR3JhcGhpY3NSZWN0IGZyID0gcGFnZS0+
Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgdXBkYXRlID0gZnI7CiAg
ICAgdXBkYXRlLm1vdmUoeCwgeSk7CiAgICAgLy8gU2VjdXJpdHkgY2hlY2sgKHRoZSBzcGVjIHRh
bGtzIGFib3V0IFVuaXZlcnNhbEJyb3dzZXJXcml0ZSB0byBkaXNhYmxlIHRoaXMgY2hlY2suLi4p
CiAgICAgYWRqdXN0V2luZG93UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCkpLCBmciwgdXBkYXRlKTsKQEAgLTE0MjAsMTAgKzE0MjAsMTAgQEAgdm9pZCBE
T01XaW5kb3c6Om1vdmVUbyhmbG9hdCB4LCBmbG9hdCB5KQogICAgIGlmIChtX2ZyYW1lICE9IHBh
Z2UtPm1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgZnIgPSBw
YWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwotICAgIEZsb2F0UmVjdCBzciA9IHNjcmVlbkF2
YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CisgICAgR3JhcGhpY3NSZWN0
IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFwaGljc1JlY3Qgc3Ig
PSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgIGZy
LnNldExvY2F0aW9uKHNyLmxvY2F0aW9uKCkpOwotICAgIEZsb2F0UmVjdCB1cGRhdGUgPSBmcjsK
KyAgICBHcmFwaGljc1JlY3QgdXBkYXRlID0gZnI7CiAgICAgdXBkYXRlLm1vdmUoeCwgeSk7ICAg
ICAKICAgICAvLyBTZWN1cml0eSBjaGVjayAodGhlIHNwZWMgdGFsa3MgYWJvdXQgVW5pdmVyc2Fs
QnJvd3NlcldyaXRlIHRvIGRpc2FibGUgdGhpcyBjaGVjay4uLikKICAgICBhZGp1c3RXaW5kb3dS
ZWN0KHNyLCBmciwgdXBkYXRlKTsKQEAgLTE0NDIsOSArMTQ0Miw5IEBAIHZvaWQgRE9NV2luZG93
OjpyZXNpemVCeShmbG9hdCB4LCBmbG9hdCAKICAgICBpZiAobV9mcmFtZSAhPSBwYWdlLT5tYWlu
RnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGZyID0gcGFnZS0+Y2hy
b21lKCktPndpbmRvd1JlY3QoKTsKLSAgICBGbG9hdFNpemUgZGVzdCA9IGZyLnNpemUoKSArIEZs
b2F0U2l6ZSh4LCB5KTsKLSAgICBGbG9hdFJlY3QgdXBkYXRlKGZyLmxvY2F0aW9uKCksIGRlc3Qp
OworICAgIEdyYXBoaWNzUmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Cisg
ICAgR3JhcGhpY3NTaXplIGRlc3QgPSBmci5zaXplKCkgKyBHcmFwaGljc1NpemUoeCwgeSk7Cisg
ICAgR3JhcGhpY3NSZWN0IHVwZGF0ZShmci5sb2NhdGlvbigpLCBkZXN0KTsKICAgICBhZGp1c3RX
aW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSks
IGZyLCB1cGRhdGUpOwogICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyKTsKIH0K
QEAgLTE0NjEsOSArMTQ2MSw5IEBAIHZvaWQgRE9NV2luZG93OjpyZXNpemVUbyhmbG9hdCB3aWR0
aCwgZmwKICAgICBpZiAobV9mcmFtZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRmxvYXRSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsK
LSAgICBGbG9hdFNpemUgZGVzdCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBGbG9h
dFJlY3QgdXBkYXRlKGZyLmxvY2F0aW9uKCksIGRlc3QpOworICAgIEdyYXBoaWNzUmVjdCBmciA9
IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7CisgICAgR3JhcGhpY3NTaXplIGRlc3QgPSBH
cmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZShmci5s
b2NhdGlvbigpLCBkZXN0KTsKICAgICBhZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJl
Y3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSksIGZyLCB1cGRhdGUpOwogICAgIHBhZ2UtPmNo
cm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyKTsKIH0KQEAgLTE4MjYsNyArMTgyNiw3IEBAIFBhc3NS
ZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4oY28KICAgICB9CiAKICAgICBXaW5kb3dG
ZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJlc1N0cmluZyk7Ci0gICAgRmxvYXRS
ZWN0IHdpbmRvd1JlY3Qod2luZG93RmVhdHVyZXMueFNldCA/IHdpbmRvd0ZlYXR1cmVzLnggOiAw
LCB3aW5kb3dGZWF0dXJlcy55U2V0ID8gd2luZG93RmVhdHVyZXMueSA6IDAsCisgICAgR3JhcGhp
Y3NSZWN0IHdpbmRvd1JlY3Qod2luZG93RmVhdHVyZXMueFNldCA/IHdpbmRvd0ZlYXR1cmVzLngg
OiAwLCB3aW5kb3dGZWF0dXJlcy55U2V0ID8gd2luZG93RmVhdHVyZXMueSA6IDAsCiAgICAgICAg
IHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0ID8gd2luZG93RmVhdHVyZXMud2lkdGggOiAwLCB3aW5k
b3dGZWF0dXJlcy5oZWlnaHRTZXQgPyB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgOiAwKTsKICAgICBQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIERPTVdpbmRvdzo6YWRqdXN0V2luZG93
UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UgPyBwYWdlLT5tYWluRnJhbWUoKS0+dmlldygp
IDogMCksIHdpbmRvd1JlY3QsIHdpbmRvd1JlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFz
cyBGaWxlU3lzdGVtQ2FsbGJhY2s7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdy
YXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIaXN0b3J5OwogICAgIGNs
YXNzIElEQkZhY3Rvcnk7CkBAIC0xMDYsNyArMTA2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMo
KTsKICAgICAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzKCk7
CiAKLSAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHNjcmVlbiwgRmxvYXRSZWN0JiB3aW5kb3csIGNvbnN0IEZsb2F0UmVjdCYgcGVuZGluZ0NoYW5n
ZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBhZGp1c3RXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgc2NyZWVuLCBHcmFwaGljc1JlY3QmIHdpbmRvdywgY29uc3QgR3JhcGhpY3NSZWN0JiBw
ZW5kaW5nQ2hhbmdlcyk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiByZW1vdmUgdGhpcyBm
dW5jdGlvbiBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBjaGFuZ2VkIHRvIHVzZSBET01XaW5k
b3cuCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhjb25zdCBT
dHJpbmcmLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAK
ICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBAIC0yNjcsNyArMjY3LDcgQEAgc3RhdGlj
IEVsZW1lbnQqIGVsZW1lbnRVbmRlck1vdXNlKERvY3VtZQogewogICAgIEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50VW5kZXJNb3VzZS0+ZnJhbWUoKTsKICAgICBmbG9hdCB6b29tRmFjdG9yID0gZnJh
bWUgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDE7Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBy
b3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChwLngoKSAqIHpvb21GYWN0b3IsIHAueSgpICogem9v
bUZhY3RvcikpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEdyYXBoaWNz
UG9pbnQocC54KCkgKiB6b29tRmFjdG9yLCBwLnkoKSAqIHpvb21GYWN0b3IpKTsKIAogICAgIEhp
dFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJl
cXVlc3Q6OkFjdGl2ZSk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTE1Niw3ICsxNTYsNyBA
QCBwdWJsaWM6CiAgICAgfTsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKLSAgICB2
aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
bWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRT
dHJpbmdzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoUmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5n
IGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9u
UGFuZWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25z
ZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gc2VsZWN0aW9uRXh0ZW50UmUKICAgICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQt
PnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAg
ICAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+
bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoc2VsZWN0aW9uRW5kUG9pbnQpKTsKKyAgICAgICAg
R3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+bG9j
YWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoc2VsZWN0aW9uRW5kUG9pbnQpKTsKICAgICAgICAg
c2VsZWN0aW9uRW5kUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoZWRpdGFibGVFbGVtZW50LT5yZW5k
ZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2ludCkpOwogICAgICAgICB0YXJnZXRO
b2RlID0gZWRpdGFibGVFbGVtZW50OwogICAgIH0KQEAgLTIzNTIsNyArMjM1Miw3IEBAIHZvaWQg
RXZlbnRIYW5kbGVyOjpkaXNwYXRjaEZha2VNb3VzZU1vdmUKICAgICAgICAgbV9mYWtlTW91c2VN
b3ZlRXZlbnRUaW1lci5zdGFydE9uZVNob3QoZmFrZU1vdXNlTW92ZUludGVydmFsKTsKIH0KIAot
dm9pZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChj
b25zdCBGbG9hdFF1YWQmIHF1YWQpCit2b2lkIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hGYWtlTW91
c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCkKIHsKICAgICBG
cmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpAQCAtMjY4
Miw3ICsyNjgyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SAog
fQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKLWJvb2wgRXZlbnRIYW5kbGVyOjpkcmFnSHlz
dGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0RHJhZ1ZpZXdwb3J0TG9jYXRp
b24pIGNvbnN0Citib29sIEV2ZW50SGFuZGxlcjo6ZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25z
dCBHcmFwaGljc1BvaW50JiBmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uKSBjb25zdAogewogICAg
IEludFBvaW50IGRyYWdWaWV3cG9ydExvY2F0aW9uKChpbnQpZmxvYXREcmFnVmlld3BvcnRMb2Nh
dGlvbi54KCksIChpbnQpZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbi55KCkpOwogICAgIHJldHVy
biBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGRyYWdWaWV3cG9ydExvY2F0aW9uKTsKQEAgLTI4NDUs
NyArMjg0NSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnKGNvbnN0IE1vdXMKICAg
ICAgICAgaWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1R5cGUgPT0gRHJhZ1NvdXJjZUFjdGlvbkRIVE1M
KSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRyYWdTdGF0ZSgp
Lm1fZHJhZ1NyYy0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0
ZSgpOwogICAgICAgICAgICAgICAgIEludFNpemUgZGVsdGEgPSBtX21vdXNlRG93blBvcyAtIHJv
dW5kZWRJbnRQb2ludChhYnNQb3MpOwogICAgICAgICAgICAgICAgIGRyYWdTdGF0ZSgpLm1fZHJh
Z0NsaXBib2FyZC0+c2V0RHJhZ0ltYWdlRWxlbWVudChkcmFnU3RhdGUoKS5tX2RyYWdTcmMuZ2V0
KCksIHRvUG9pbnQoZGVsdGEpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBjbGFz
cyBDbGlwYm9hcmQ7CiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50VGFy
Z2V0OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEdyYXBoaWNz
UG9pbnQ7CitjbGFzcyBHcmFwaGljc1F1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxGcmFt
ZVNldEVsZW1lbnQ7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKQEAgLTExNiw3ICsxMTYsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKIAogICAgIHZvaWQg
ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgdm9pZCBkaXNwYXRjaEZha2VN
b3VzZU1vdmVFdmVudFNvb25JblF1YWQoY29uc3QgRmxvYXRRdWFkJik7CisgICAgdm9pZCBkaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJik7CiAK
ICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBvaW50Jiwg
Ym9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcgPSBmYWxzZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RTY3JvbGxiYXJzIHNj
cm9sbGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMsCkBAIC0yOTEsNyArMjkxLDcgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCi0gICAgYm9vbCBkcmFn
SHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29sIGRy
YWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAgIGJv
b2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogI2VuZGlm
IC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRmxv
YXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgpAQCAtNTQ4LDcgKzU0OCw3IEBAIENvbG9yIEZyYW1lOjpnZXREb2N1bWVudEJh
Y2tncm91bmRDb2xvcigKICAgICByZXR1cm4gdmlldygpLT5iYXNlQmFja2dyb3VuZENvbG9yKCku
YmxlbmQoaHRtbEJhY2tncm91bmRDb2xvcikuYmxlbmQoYm9keUJhY2tncm91bmRDb2xvcik7CiB9
CiAKLXZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNvbnN0IEZsb2F0U2l6
ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5v
dCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKK3ZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJp
bnRpbmcsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtS
YXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKIHsKICAgICAv
LyBJbiBzZXR0aW5nIHByaW50aW5nLCB3ZSBzaG91bGQgbm90IHZhbGlkYXRlIHJlc291cmNlcyBh
bHJlYWR5IGNhY2hlZCBmb3IgdGhlIGRvY3VtZW50LgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3MDQKQEAgLTU3MSwxMSArNTcxLDExIEBAIHZv
aWQgRnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGMKICAgICAgICAgY2hpbGQtPnNl
dFByaW50aW5nKHByaW50aW5nLCBJbnRTaXplKCksIDAsIHNob3VsZEFkanVzdFZpZXdTaXplKTsK
IH0KIAotRmxvYXRTaXplIEZyYW1lOjpyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oY29uc3Qg
RmxvYXRTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgZXhwZWN0ZWRTaXplKQor
R3JhcGhpY3NTaXplIEZyYW1lOjpyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oY29uc3QgR3Jh
cGhpY3NTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZXhwZWN0ZWRTaXpl
KQogewotICAgIEZsb2F0U2l6ZSByZXN1bHRTaXplOworICAgIEdyYXBoaWNzU2l6ZSByZXN1bHRT
aXplOwogICAgIGlmICghY29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFNp
emUoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogCiAgICAgaWYgKGNvbnRlbnRS
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IGZsb2F0IHJhdGlvID0gb3JpZ2luYWxTaXplLmhlaWdodCgpIC8gb3JpZ2luYWxTaXplLndpZHRo
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDggKzE0Nyw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdDsgLy8g
Y2FuIGJlIE5VTEwKIAotICAgICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNv
bnN0IEZsb2F0U2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0
Vmlld1NpemVPck5vdCk7Ci0gICAgICAgIEZsb2F0U2l6ZSByZXNpemVQYWdlUmVjdHNLZWVwaW5n
UmF0aW8oY29uc3QgRmxvYXRTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgZXhw
ZWN0ZWRTaXplKTsKKyAgICAgICAgdm9pZCBzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjb25z
dCBHcmFwaGljc1NpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8sIEFkanVz
dFZpZXdTaXplT3JOb3QpOworICAgICAgICBHcmFwaGljc1NpemUgcmVzaXplUGFnZVJlY3RzS2Vl
cGluZ1JhdGlvKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb3JpZ2luYWxTaXplLCBjb25zdCBHcmFwaGlj
c1NpemUmIGV4cGVjdGVkU2l6ZSk7CiAKICAgICAgICAgYm9vbCBpblZpZXdTb3VyY2VNb2RlKCkg
Y29uc3Q7CiAgICAgICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sID0gdHJ1ZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
NyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0y
NjEwLDcgKzI2MTAsNyBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXQoYm9vbCBhbGxvd1N1
CiAgICAgbGF5b3V0KGFsbG93U3VidHJlZSk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxh
eW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11
bVNocmlua0ZhY3RvciwgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkK
K3ZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24oY29uc3QgR3JhcGhpY3NT
aXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua0ZhY3RvciwgQWRqdXN0Vmlld1NpemVP
ck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKIHsKICAgICAvLyBEdW1waW5nIGV4dGVybmFsUmVw
cmVzZW50YXRpb24obV9mcmFtZS0+cmVuZGVyZXIoKSkuYXNjaWkoKSBpcyBhIGdvb2QgdHJpY2sg
dG8gc2VlCiAgICAgLy8gdGhlIHN0YXRlIG9mIHRoaW5ncyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBs
YXlvdXQKQEAgLTI2NzcsNyArMjY3Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0RGVwcmVjYXQKIAogSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgcmVuZGVyZXJSZWN0KSBj
b25zdAogewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChyZW5kZXJlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIElu
dFJlY3QgcmVjdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChy
ZW5kZXJlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogCiAgICAgLy8gQ29udmVydCBm
cm9tIHBhZ2UgKCJhYnNvbHV0ZSIpIHRvIEZyYW1lVmlldyBjb29yZGluYXRlcy4KICAgICByZWN0
Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IENvbG9yOwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1Np
emU7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lQWN0aW9uU2NoZWR1bGVyOwogY2xhc3MgSW50
UmVjdDsKQEAgLTIzMiw3ICsyMzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Zpc3VhbGx5
Tm9uRW1wdHkoKSB7IG1faXNWaXN1YWxseU5vbkVtcHR5ID0gdHJ1ZTsgfQogCiAgICAgdm9pZCBm
b3JjZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKLSAgICB2b2lkIGZvcmNlTGF5
b3V0Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVt
U2hyaW5rRmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90KTsKKyAgICB2b2lkIGZvcmNlTGF5b3V0
Rm9yUGFnaW5hdGlvbihjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVt
U2hyaW5rRmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90KTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGluIEFwcEtp
dC4gIFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQogICAgIC8vIHNvbWUgZW5jbG9z
aW5nIHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byByZXNpemUg
dGhlIHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIFByaW50
Q29udGV4dDo6flByaW50Q29udGV4dCgpCiAgICAgICAgIGVuZCgpOwogfQogCi12b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50UmVjdCwgZmxv
YXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3Rv
ciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKQordm9p
ZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0JiBwcmlu
dFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2Vy
U2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRp
bGluZykKIHsKICAgICBtX3BhZ2VSZWN0cy5jbGVhcigpOwogICAgIG91dFBhZ2VIZWlnaHQgPSAw
OwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyhj
b25zCiAKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnJlbmRlcmVyKCkpOwogICAgIGNvbnN0IEludFJlY3QmIGRvY3VtZW50UmVjdCA9IHZp
ZXctPmRvY3VtZW50UmVjdCgpOwotICAgIEZsb2F0U2l6ZSBwYWdlU2l6ZSA9IG1fZnJhbWUtPnJl
c2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9hdFNpemUocHJpbnRSZWN0LndpZHRoKCksIHBy
aW50UmVjdC5oZWlnaHQoKSksIEZsb2F0U2l6ZShkb2N1bWVudFJlY3Qud2lkdGgoKSwgZG9jdW1l
bnRSZWN0LmhlaWdodCgpKSk7CisgICAgR3JhcGhpY3NTaXplIHBhZ2VTaXplID0gbV9mcmFtZS0+
cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6ZShwcmludFJlY3Qud2lkdGgo
KSwgcHJpbnRSZWN0LmhlaWdodCgpKSwgR3JhcGhpY3NTaXplKGRvY3VtZW50UmVjdC53aWR0aCgp
LCBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpKTsKICAgICBmbG9hdCBwYWdlV2lkdGggPSBwYWdlU2l6
ZS53aWR0aCgpOwogICAgIGZsb2F0IHBhZ2VIZWlnaHQgPSBwYWdlU2l6ZS5oZWlnaHQoKTsKIApA
QCAtODIsMTYgKzgyLDE2IEBAIHZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKGNv
bnMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFn
ZVNpemVJbnRlcm5hbChGbG9hdFNpemUocGFnZVdpZHRoIC8gdXNlclNjYWxlRmFjdG9yLCBwYWdl
SGVpZ2h0IC8gdXNlclNjYWxlRmFjdG9yKSwgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICBj
b21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWwoR3JhcGhpY3NTaXplKHBhZ2VXaWR0
aCAvIHVzZXJTY2FsZUZhY3RvciwgcGFnZUhlaWdodCAvIHVzZXJTY2FsZUZhY3RvciksIGFsbG93
SG9yaXpvbnRhbFRpbGluZyk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJl
Y3RzV2l0aFBhZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBh
bGxvd0hvcml6b250YWxUaWxpbmcpCit2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0
c1dpdGhQYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wg
YWxsb3dIb3Jpem9udGFsVGlsaW5nKQogewogICAgIG1fcGFnZVJlY3RzLmNsZWFyKCk7CiAgICAg
Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKHBhZ2VTaXplSW5QaXhlbHMsIGFs
bG93SG9yaXpvbnRhbFRpbGluZyk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFn
ZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWwoY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4
ZWxzLCBib29sIGFsbG93SW5saW5lRGlyZWN0aW9uVGlsaW5nKQordm9pZCBQcmludENvbnRleHQ6
OmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGljc1NpemUm
IHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dJbmxpbmVEaXJlY3Rpb25UaWxpbmcpCiB7CiAg
ICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwgIW1fZnJh
bWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NSwxMyAr
MTY1LDEzIEBAIHZvaWQgUHJpbnRDb250ZXh0OjpiZWdpbihmbG9hdCB3aWR0aCwgZmwKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gYWRqdXN0IHBy
aW50aW5nIHBhcmFtZXRlcnMgd2l0aG91dCBnb2luZyBiYWNrIHRvIHNjcmVlbiBtb2RlLgogICAg
IG1faXNQcmludGluZyA9IHRydWU7CiAKLSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZSA9IG1f
ZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9hdFNpemUod2lkdGgsIGhlaWdo
dCksIEZsb2F0U2l6ZSh3aWR0aCAqIHByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgaGVpZ2h0
ICogcHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CisgICAgR3JhcGhpY3NTaXplIG1pbkxh
eW91dFNpemUgPSBtX2ZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oR3JhcGhpY3NT
aXplKHdpZHRoLCBoZWlnaHQpLCBHcmFwaGljc1NpemUod2lkdGggKiBwcmludGluZ01pbmltdW1T
aHJpbmtGYWN0b3IsIGhlaWdodCAqIHByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOwogCiAg
ICAgLy8gVGhpcyBjaGFuZ2VzIGxheW91dCwgc28gY2FsbGVycyBuZWVkIHRvIG1ha2Ugc3VyZSB0
aGF0IHRoZXkgZG9uJ3QgcGFpbnQgdG8gc2NyZWVuIHdoaWxlIGluIHByaW50aW5nIG1vZGUuCiAg
ICAgbV9mcmFtZS0+c2V0UHJpbnRpbmcodHJ1ZSwgbWluTGF5b3V0U2l6ZSwgcHJpbnRpbmdNYXhp
bXVtU2hyaW5rRmFjdG9yIC8gcHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBBZGp1c3RWaWV3
U2l6ZSk7CiB9CiAKLWZsb2F0IFByaW50Q29udGV4dDo6Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFj
dG9yKGNvbnN0IEZsb2F0U2l6ZSYgYXZhaWxhYmxlUGFwZXJTaXplKQorZmxvYXQgUHJpbnRDb250
ZXh0Ojpjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgR3JhcGhpY3NTaXplJiBhdmFp
bGFibGVQYXBlclNpemUpCiB7CiAgICAgaWYgKCFtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJl
dHVybiAxOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbFBhZ2Uo
R3JhcGhpY3NDb24KICAgICBmbG9hdCBzY2FsZSA9IHdpZHRoIC8gcGFnZVJlY3Qud2lkdGgoKTsK
IAogICAgIGN0eC5zYXZlKCk7Ci0gICAgY3R4LnNjYWxlKEZsb2F0U2l6ZShzY2FsZSwgc2NhbGUp
KTsKKyAgICBjdHguc2NhbGUoR3JhcGhpY3NTaXplKHNjYWxlLCBzY2FsZSkpOwogICAgIGN0eC50
cmFuc2xhdGUoLXBhZ2VSZWN0LngoKSwgLXBhZ2VSZWN0LnkoKSk7CiAgICAgY3R4LmNsaXAocGFn
ZVJlY3QpOwogICAgIG1fZnJhbWUtPnZpZXcoKS0+cGFpbnRDb250ZW50cygmY3R4LCBwYWdlUmVj
dCk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBQcmludENvbnRleHQ6OmVuZCgpCiB7CiAgICAg
QVNTRVJUKG1faXNQcmludGluZyk7CiAgICAgbV9pc1ByaW50aW5nID0gZmFsc2U7Ci0gICAgbV9m
cmFtZS0+c2V0UHJpbnRpbmcoZmFsc2UsIEZsb2F0U2l6ZSgpLCAwLCBBZGp1c3RWaWV3U2l6ZSk7
CisgICAgbV9mcmFtZS0+c2V0UHJpbnRpbmcoZmFsc2UsIEdyYXBoaWNzU2l6ZSgpLCAwLCBBZGp1
c3RWaWV3U2l6ZSk7CiB9CiAKIHN0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogZW5jbG9zaW5n
Qm94TW9kZWxPYmplY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkBAIC0yMzAsNyArMjMwLDcgQEAg
c3RhdGljIFJlbmRlckJveE1vZGVsT2JqZWN0KiBlbmNsb3NpbmdCbwogICAgIHJldHVybiB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CiB9CiAKLWludCBQcmludENvbnRleHQ6OnBhZ2VO
dW1iZXJGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNp
emVJblBpeGVscykKK2ludCBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemVJblBpeGVscykKIHsKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgbm90IGZyZWVkIGR1cmluZyB0aGUgbGF5b3V0
LgogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50UmVmKGVsZW1lbnQpOwpAQCAtMjQxLDEwICsy
NDEsMTAgQEAgaW50IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoRQogICAgICAg
ICByZXR1cm4gLTE7CiAKICAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5m
cmFtZSgpOwotICAgIEZsb2F0UmVjdCBwYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCBwYWdlU2l6
ZUluUGl4ZWxzKTsKKyAgICBHcmFwaGljc1JlY3QgcGFnZVJlY3QoR3JhcGhpY3NQb2ludCgwLCAw
KSwgcGFnZVNpemVJblBpeGVscyk7CiAgICAgUHJpbnRDb250ZXh0IHByaW50Q29udGV4dChmcmFt
ZSk7CiAgICAgcHJpbnRDb250ZXh0LmJlZ2luKHBhZ2VSZWN0LndpZHRoKCksIHBhZ2VSZWN0Lmhl
aWdodCgpKTsKLSAgICBGbG9hdFNpemUgc2NhbGVkUGFnZVNpemUgPSBwYWdlU2l6ZUluUGl4ZWxz
OworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZWRQYWdlU2l6ZSA9IHBhZ2VTaXplSW5QaXhlbHM7CiAg
ICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXplKCkud2lk
dGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAgIHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJl
Y3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXplLCBmYWxzZSk7CiAKQEAgLTI5OSwyMSArMjk5
LDIxIEBAIFN0cmluZyBQcmludENvbnRleHQ6OnBhZ2VTaXplQW5kTWFyZ2luc0kKICAgICAgICAg
ICAgU3RyaW5nOjpudW1iZXIobWFyZ2luVG9wKSArICcgJyArIFN0cmluZzo6bnVtYmVyKG1hcmdp
blJpZ2h0KSArICcgJyArIFN0cmluZzo6bnVtYmVyKG1hcmdpbkJvdHRvbSkgKyAnICcgKyBTdHJp
bmc6Om51bWJlcihtYXJnaW5MZWZ0KTsKIH0KIAotaW50IFByaW50Q29udGV4dDo6bnVtYmVyT2ZQ
YWdlcyhGcmFtZSogZnJhbWUsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscykKK2lu
dCBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoRnJhbWUqIGZyYW1lLCBjb25zdCBHcmFwaGlj
c1NpemUmIHBhZ2VTaXplSW5QaXhlbHMpCiB7CiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0
ZUxheW91dCgpOwogCi0gICAgRmxvYXRSZWN0IHBhZ2VSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHBh
Z2VTaXplSW5QaXhlbHMpOworICAgIEdyYXBoaWNzUmVjdCBwYWdlUmVjdChHcmFwaGljc1BvaW50
KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKTsKICAgICBQcmludENvbnRleHQgcHJpbnRDb250ZXh0
KGZyYW1lKTsKICAgICBwcmludENvbnRleHQuYmVnaW4ocGFnZVJlY3Qud2lkdGgoKSwgcGFnZVJl
Y3QuaGVpZ2h0KCkpOwogICAgIC8vIEFjY291bnQgZm9yIHNocmluay10by1maXQuCi0gICAgRmxv
YXRTaXplIHNjYWxlZFBhZ2VTaXplID0gcGFnZVNpemVJblBpeGVsczsKKyAgICBHcmFwaGljc1Np
emUgc2NhbGVkUGFnZVNpemUgPSBwYWdlU2l6ZUluUGl4ZWxzOwogICAgIHNjYWxlZFBhZ2VTaXpl
LnNjYWxlKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLyBwYWdlUmVjdC53
aWR0aCgpKTsKICAgICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShz
Y2FsZWRQYWdlU2l6ZSwgZmFsc2UpOwogICAgIHJldHVybiBwcmludENvbnRleHQucGFnZUNvdW50
KCk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMo
RnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxv
YXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQordm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFn
ZXNXaXRoQm91bmRhcmllcyhGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMpCiB7CiAgICAgaWYg
KCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPnZpZXcoKSB8fCAhZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lk
IFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuCiAgICAgcHJpbnRDb250ZXh0LmJl
Z2luKHBhZ2VTaXplSW5QaXhlbHMud2lkdGgoKSwgcGFnZVNpemVJblBpeGVscy5oZWlnaHQoKSk7
CiAKICAgICBmbG9hdCBwYWdlSGVpZ2h0OwotICAgIHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJl
Y3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKSwgMCwgMCwg
MSwgcGFnZUhlaWdodCk7CisgICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMoR3JhcGhp
Y3NSZWN0KEdyYXBoaWNzUG9pbnQoMCwgMCksIHBhZ2VTaXplSW5QaXhlbHMpLCAwLCAwLCAxLCBw
YWdlSGVpZ2h0KTsKIAogICAgIGNvbnN0IGZsb2F0IHBhZ2VXaWR0aCA9IHBhZ2VTaXplSW5QaXhl
bHMud2lkdGgoKTsKICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhZ2VSZWN0cyA9IHByaW50
Q29udGV4dC5wYWdlUmVjdHMoKTsKQEAgLTMzMiwxMSArMzMyLDExIEBAIHZvaWQgUHJpbnRDb250
ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KIAogICAgIC8vIEZpbGwgdGhlIHdob2xlIGJhY2tn
cm91bmQgYnkgd2hpdGUuCiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigy
NTUsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ3JhcGhpY3NDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBwYWdlV2lkdGgsIHRvdGFsSGVpZ2h0KSk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBwYWdlV2lkdGgsIHRv
dGFsSGVpZ2h0KSk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwogICAgIGdyYXBoaWNz
Q29udGV4dC50cmFuc2xhdGUoMCwgdG90YWxIZWlnaHQpOwotICAgIGdyYXBoaWNzQ29udGV4dC5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2NhbGUoR3JhcGhp
Y3NTaXplKDEsIC0xKSk7CiAKICAgICBpbnQgY3VycmVudEhlaWdodCA9IDA7CiAgICAgZm9yIChz
aXplX3QgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgcGFnZVJlY3RzLnNpemUoKTsgcGFnZUlu
ZGV4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsK
IGNsYXNzIEZyYW1lOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRTaXplOworY2xhc3Mg
R3JhcGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NTaXplOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgSW50UmVjdDsKIApAQCAtNDMsMTggKzQzLDE4IEBAIHB1YmxpYzoKICAgICAvLyBC
cmVhayB1cCBhIHBhZ2UgaW50byByZWN0cyB3aXRob3V0IHJlbGF5b3V0LgogICAgIC8vIEZJWE1F
OiBUaGlzIG1lYW5zIHRoYXQgQ1NTIHBhZ2UgYnJlYWtzIHdvbid0IGJlIG9uIHBhZ2UgYm91bmRh
cnkgaWYgdGhlIHNpemUgaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB3YXMgcGFzc2VkIHRvIGJlZ2lu
KCkuIFRoYXQncyBwcm9iYWJseSBub3QgYWx3YXlzIGRlc2lyYWJsZS4KICAgICAvLyBGSVhNRTog
SGVhZGVyIGFuZCBmb290ZXIgaGVpZ2h0IHNob3VsZCBiZSBhcHBsaWVkIGJlZm9yZSBsYXlvdXQs
IG5vdCBhZnRlci4KLSAgICAvLyBGSVhNRTogVGhlIHByaW50UmVjdCBhcmd1bWVudCBpcyBvbmx5
IHVzZWQgdG8gZGV0ZXJtaW5lIHBhZ2UgYXNwZWN0IHJhdGlvLCBpdCB3b3VsZCBiZSBiZXR0ZXIg
dG8gcGFzcyBhIEZsb2F0U2l6ZSB3aXRoIHBhZ2UgZGltZW5zaW9ucyBpbnN0ZWFkLgotICAgIHZv
aWQgY29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVh
ZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3RvciwgZmxv
YXQmIG91dFBhZ2VIZWlnaHQsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nID0gZmFsc2UpOwor
ICAgIC8vIEZJWE1FOiBUaGUgcHJpbnRSZWN0IGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB0byBkZXRl
cm1pbmUgcGFnZSBhc3BlY3QgcmF0aW8sIGl0IHdvdWxkIGJlIGJldHRlciB0byBwYXNzIGEgR3Jh
cGhpY3NTaXplIHdpdGggcGFnZSBkaW1lbnNpb25zIGluc3RlYWQuCisgICAgdm9pZCBjb21wdXRl
UGFnZVJlY3RzKGNvbnN0IEdyYXBoaWNzUmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWln
aHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0
UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcgPSBmYWxzZSk7CiAKICAgICAv
LyBEZXByZWNhdGVkLiBQYWdlIHNpemUgY29tcHV0YXRpb24gaXMgYWxyZWFkeSBpbiB0aGlzIGNs
YXNzLCBjbGllbnRzIHNob3VsZG4ndCBiZSBjb3B5aW5nIGl0LgotICAgIHZvaWQgY29tcHV0ZVBh
Z2VSZWN0c1dpdGhQYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJv
b2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICB2b2lkIGNvbXB1dGVQYWdlUmVjdHNXaXRo
UGFnZVNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzLCBib29sIGFsbG93
SG9yaXpvbnRhbFRpbGluZyk7CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB2YWxpZCBhZnRlciBw
YWdlIHJlY3RzIGFyZSBjb21wdXRlZC4KICAgICBzaXplX3QgcGFnZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWdlUmVjdHMuc2l6ZSgpOyB9CiAgICAgY29uc3QgSW50UmVjdCYgcGFnZVJlY3Qo
c2l6ZV90IHBhZ2VOdW1iZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJlY3RzW3BhZ2VOdW1iZXJd
OyB9CiAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWdlUmVjdHMoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2VSZWN0czsgfQogCi0gICAgZmxvYXQgY29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9y
KGNvbnN0IEZsb2F0U2l6ZSYgYXZhaWxhYmxlUGFwZXJTaXplKTsKKyAgICBmbG9hdCBjb21wdXRl
QXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgR3JhcGhpY3NTaXplJiBhdmFpbGFibGVQYXBlclNp
emUpOwogCiAgICAgLy8gRW50ZXIgcHJpbnQgbW9kZSwgdXBkYXRpbmcgbGF5b3V0IGZvciBuZXcg
cGFnZSBzaXplLgogICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcyB0byBhcHBseSBuZXcgcHJpbnQgb3B0aW9ucyB3aXRob3V0IGdvaW5nIGJhY2sgdG8gc2Ny
ZWVuIG1vZGUuCkBAIC02OSwyMiArNjksMjIgQEAgcHVibGljOgogICAgIHZvaWQgZW5kKCk7CiAK
ICAgICAvLyBVc2VkIGJ5IGxheW91dCB0ZXN0cy4KLSAgICBzdGF0aWMgaW50IHBhZ2VOdW1iZXJG
b3JFbGVtZW50KEVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMpOyAv
LyBSZXR1cm5zIC0xIGlmIHBhZ2UgaXNuJ3QgZm91bmQuCisgICAgc3RhdGljIGludCBwYWdlTnVt
YmVyRm9yRWxlbWVudChFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4
ZWxzKTsgLy8gUmV0dXJucyAtMSBpZiBwYWdlIGlzbid0IGZvdW5kLgogICAgIHN0YXRpYyBTdHJp
bmcgcGFnZVByb3BlcnR5KEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBp
bnQgcGFnZU51bWJlcik7CiAgICAgc3RhdGljIGJvb2wgaXNQYWdlQm94VmlzaWJsZShGcmFtZSog
ZnJhbWUsIGludCBwYWdlTnVtYmVyKTsKICAgICBzdGF0aWMgU3RyaW5nIHBhZ2VTaXplQW5kTWFy
Z2luc0luUGl4ZWxzKEZyYW1lKiBmcmFtZSwgaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9t
LCBpbnQgbWFyZ2luTGVmdCk7Ci0gICAgc3RhdGljIGludCBudW1iZXJPZlBhZ2VzKEZyYW1lKiwg
Y29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBzdGF0aWMgaW50IG51bWJl
ck9mUGFnZXMoRnJhbWUqLCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMpOwog
ICAgIC8vIERyYXcgYWxsIHBhZ2VzIGludG8gYSBncmFwaGljcyBjb250ZXh0IHdpdGggbGluZXMg
d2hpY2ggbWVhbiBwYWdlIGJvdW5kYXJpZXMuCiAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgZ3Jh
cGhpY3MgY29udGV4dCBzaG91bGQgYmUKICAgICAvLyAocGFnZVNpemVJblBpeGVscy5oZWlnaHQo
KSArIDEpICogbnVtYmVyLW9mLXBhZ2VzIC0gMQotICAgIHN0YXRpYyB2b2lkIHNwb29sQWxsUGFn
ZXNXaXRoQm91bmRhcmllcyhGcmFtZSosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0U2l6
ZSYgcGFnZVNpemVJblBpeGVscyk7CisgICAgc3RhdGljIHZvaWQgc3Bvb2xBbGxQYWdlc1dpdGhC
b3VuZGFyaWVzKEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NTaXplJiBw
YWdlU2l6ZUluUGl4ZWxzKTsKIAogcHJvdGVjdGVkOgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAg
IFZlY3RvcjxJbnRSZWN0PiBtX3BhZ2VSZWN0czsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbXB1
dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXpl
SW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICB2b2lkIGNvbXB1dGVQ
YWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXpl
SW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAogICAgIC8vIFVzZWQgdG8g
cHJldmVudCBtaXN1c2VzIG9mIGJlZ2luKCkgYW5kIGVuZCgpIChlLmcuLCBjYWxsIGVuZCB3aXRo
b3V0IGJlZ2luKS4KICAgICBib29sIG1faXNQcmludGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVl
bi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1dpbmRvd0ZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dp
bmRvd0ZlYXR1cmVzLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1dpbmRvd0ZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFdpbmRvd0ZlYXR1cmVzOjpz
ZXRXaW5kb3dGZWF0dXJlKGNvCiAgICAgICAgIGFkZGl0aW9uYWxGZWF0dXJlcy5hcHBlbmQoa2V5
U3RyaW5nKTsKIH0KIAotV2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmlu
ZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuQXZhaWxhYmxl
UmVjdCkKK1dpbmRvd0ZlYXR1cmVzOjpXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIGRpYWxv
Z0ZlYXR1cmVzU3RyaW5nLCBjb25zdCBHcmFwaGljc1JlY3QmIHNjcmVlbkF2YWlsYWJsZVJlY3Qp
CiAgICAgOiB3aWR0aFNldCh0cnVlKQogICAgICwgaGVpZ2h0U2V0KHRydWUpCiAgICAgLCBtZW51
QmFyVmlzaWJsZShmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVy
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmgJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAKICAgICBz
dHJ1Y3QgV2luZG93RmVhdHVyZXMgewogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRlbGV0ZSB0
aGlzIGNvbnN0cnVjdG9yIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlzIGNoYW5nZWQgdG8gdXNl
IERPTVdpbmRvdy4KQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB9CiAKICAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiB3aW5kb3dGZWF0dXJl
c1N0cmluZyk7Ci0gICAgICAgIFdpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlhbG9nRmVh
dHVyZXNTdHJpbmcsIGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCk7CisgICAg
ICAgIFdpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCk7CiAKICAgICAgICAgZmxvYXQg
eDsKICAgICAgICAgYm9vbCB4U2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1
bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDaHJvbWl1bURhdGFP
YmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkN1cnNv
ci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0ZyYW1lQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFtZUNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtODYsNyAr
ODYsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShOb2RlKiBub2RlCiAgICAgaWYg
KCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLT50cmFu
c2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3QueSgpKTsKLSAgICBidWZmZXIt
PmNvbnRleHQoKS0+Y2xpcChGbG9hdFJlY3QoMCwgMCwgcGFpbnRpbmdSZWN0Lm1heFgoKSwgcGFp
bnRpbmdSZWN0Lm1heFkoKSkpOworICAgIGJ1ZmZlci0+Y29udGV4dCgpLT5jbGlwKEdyYXBoaWNz
UmVjdCgwLCAwLCBwYWludGluZ1JlY3QubWF4WCgpLCBwYWludGluZ1JlY3QubWF4WSgpKSk7CiAK
ICAgICBtX3ZpZXctPnBhaW50Q29udGVudHMoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5nUmVj
dCk7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZv
clNlbGVjdGlvCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1ZmZl
ci0+Y29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3Qu
eSgpKTsKLSAgICBidWZmZXItPmNvbnRleHQoKS0+Y2xpcChGbG9hdFJlY3QoMCwgMCwgcGFpbnRp
bmdSZWN0Lm1heFgoKSwgcGFpbnRpbmdSZWN0Lm1heFkoKSkpOworICAgIGJ1ZmZlci0+Y29udGV4
dCgpLT5jbGlwKEdyYXBoaWNzUmVjdCgwLCAwLCBwYWludGluZ1JlY3QubWF4WCgpLCBwYWludGlu
Z1JlY3QubWF4WSgpKSk7CiAKICAgICBtX3ZpZXctPnBhaW50Q29udGVudHMoYnVmZmVyLT5jb250
ZXh0KCksIHBhaW50aW5nUmVjdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0V2
ZW50SGFuZGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9lZmwv
RXZlbnRIYW5kbGVyRWZsLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRFZmwuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRs
ZXJHdGsuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2
ZW50SGFuZGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKIAogI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiQ3Vyc29yLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNyArNTMsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlv
CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBidWZmZXItPmNvbnRleHQoKTsKICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3QueSgp
KTsKLSAgICBjb250ZXh0LT5jbGlwKEZsb2F0UmVjdCgwLCAwLCBwYWludGluZ1JlY3QubWF4WCgp
LCBwYWludGluZ1JlY3QubWF4WSgpKSk7CisgICAgY29udGV4dC0+Y2xpcChHcmFwaGljc1JlY3Qo
MCwgMCwgcGFpbnRpbmdSZWN0Lm1heFgoKSwgcGFpbnRpbmdSZWN0Lm1heFkoKSkpOwogCiAgICAg
UGFpbnRCZWhhdmlvciBwcmV2aW91c1BhaW50QmVoYXZpb3IgPSBtX3ZpZXctPnBhaW50QmVoYXZp
b3IoKTsKICAgICBtX3ZpZXctPnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvclNlbGVjdGlv
bk9ubHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4u
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFu
ZGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJF
dmVudEhhbmRsZXIuaCIKIAogI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Myw3ICs4Myw3IEBAIEhCSVRNQVAgaW1hZ2VGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwK
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBmcmFtZS0+dmll
dygpLT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5IHwgKGZvcmNl
QmxhY2tUZXh0ID8gUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogMCkpOwotICAgIEZsb2F0
UmVjdCBmciA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+Ym91bmRzKCk7CisgICAgR3JhcGhpY3NSZWN0
IGZyID0gZnJhbWUtPnNlbGVjdGlvbigpLT5ib3VuZHMoKTsKICAgICBJbnRSZWN0IGlyKHN0YXRp
Y19jYXN0PGludD4oZnIueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihmci55KCkpLAogICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50Pihmci53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihmci5o
ZWlnaHQoKSkpOwogICAgIEhCSVRNQVAgaW1hZ2UgPSBpbWFnZUZyb21SZWN0KGZyYW1lLCBpcik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luY2UvRnJhbWVX
aW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW5jZS9GcmFtZVdp
bkNFLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbmNlL0Zy
YW1lV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIK
QEAgLTEwOSw3ICsxMDksNyBAQCBIQklUTUFQIGltYWdlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJh
bWUsCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRCZWhh
dmlvcihQYWludEJlaGF2aW9yU2VsZWN0aW9uT25seSB8IChmb3JjZUJsYWNrVGV4dCA/IFBhaW50
QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IDApKTsKLSAgICBGbG9hdFJlY3QgZnIgPSBmcmFtZS0+
c2VsZWN0aW9uKCktPmJvdW5kcygpOworICAgIEdyYXBoaWNzUmVjdCBmciA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+Ym91bmRzKCk7CiAgICAgSW50UmVjdCBpcigoaW50KWZyLngoKSwgKGludClmci55
KCksIChpbnQpZnIud2lkdGgoKSwgKGludClmci5oZWlnaHQoKSk7CiAgICAgaWYgKGlyLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJ
bWFnZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBEcmFnSW1hZ2VSZWYg
Zml0RHJhZ0ltYWdlVG9NYXhTaXplKERyYWdJCiAgICAgfQogICAgIAogICAgIGlmIChzcmNTaXpl
ID09IG9yaWdpbmFsU2l6ZSkKLSAgICAgICAgcmV0dXJuIHJlc2l6ZVJhdGlvID4gMC4wZiA/IHNj
YWxlRHJhZ0ltYWdlKGltYWdlLCBGbG9hdFNpemUocmVzaXplUmF0aW8sIHJlc2l6ZVJhdGlvKSkg
OiBpbWFnZTsKKyAgICAgICAgcmV0dXJuIHJlc2l6ZVJhdGlvID4gMC4wZiA/IHNjYWxlRHJhZ0lt
YWdlKGltYWdlLCBHcmFwaGljc1NpemUocmVzaXplUmF0aW8sIHJlc2l6ZVJhdGlvKSkgOiBpbWFn
ZTsKICAgICAKICAgICAvLyBUaGUgaW1hZ2Ugd2FzIHNjYWxlZCBpbiB0aGUgd2VicGFnZSBzbyBh
dCBtaW5pbXVtIHdlIG11c3QgYWNjb3VudCBmb3IgdGhhdCBzY2FsaW5nCiAgICAgZmxvYXQgc2Nh
bGV4ID0gc3JjU2l6ZS53aWR0aCgpIC8gKGZsb2F0KW9yaWdpbmFsU2l6ZS53aWR0aCgpOwpAQCAt
NjIsNyArNjIsNyBAQCBEcmFnSW1hZ2VSZWYgZml0RHJhZ0ltYWdlVG9NYXhTaXplKERyYWdJCiAg
ICAgICAgIHNjYWxleSAqPSByZXNpemVSYXRpbzsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHNj
YWxlRHJhZ0ltYWdlKGltYWdlLCBGbG9hdFNpemUoc2NhbGV4LCBzY2FsZXkpKTsKKyAgICByZXR1
cm4gc2NhbGVEcmFnSW1hZ2UoaW1hZ2UsIEdyYXBoaWNzU2l6ZShzY2FsZXgsIHNjYWxleSkpOwog
fQogICAgIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSog
ZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBEcmFnSW1hZ2VfaAogCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC05MCw3
ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvL3RoZXkgc2hvdWxkIHJlbGVhc2Ug
dGhlIGlucHV0IGltYWdlLiAgQXMgYSBjb3JvbGxhcnkgdGhlc2UgbWV0aG9kcyBkb24ndCBndWFy
YW50ZWUKICAgICAvL3RoZSBpbnB1dCBpbWFnZSByZWYgd2lsbCBzdGlsbCBiZSB2YWxpZCBhZnRl
ciB0aGV5IGhhdmUgYmVlbiBjYWxsZWQKICAgICBEcmFnSW1hZ2VSZWYgZml0RHJhZ0ltYWdlVG9N
YXhTaXplKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSk7Ci0gICAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZiwgRmxvYXRTaXplIHNjYWxlKTsKKyAgICBEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2Uo
RHJhZ0ltYWdlUmVmLCBHcmFwaGljc1NpemUgc2NhbGUpOwogICAgIERyYWdJbWFnZVJlZiBkaXNz
b2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCBkZWx0YSk7
CiAgICAgCiAgICAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSop
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGxhdGZvcm1TY3JlZW5faAog
I2RlZmluZSBQbGF0Zm9ybVNjcmVlbl9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMjEgKzQyLDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAg
Y2xhc3MgV2lkZ2V0OwogCiAgICAgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwogICAgIGludCBz
Y3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKTsKICAgICBib29sIHNjcmVlbklzTW9ub2No
cm9tZShXaWRnZXQqKTsKIAotICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOwotICAg
IEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopOworICAgIEdyYXBoaWNzUmVj
dCBzY3JlZW5SZWN0KFdpZGdldCopOworICAgIEdyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVS
ZWN0KFdpZGdldCopOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TU2NyZWVuICpzY3JlZW5G
b3JXaW5kb3coTlNXaW5kb3cgKik7CiAKLSAgICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3Qg
TlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKLSAgICBOU1JlY3QgdG9EZXZpY2VTcGFj
ZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKKyAgICBHcmFwaGljc1JlY3Qg
dG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKKyAgICBO
U1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3QmLCBOU1dpbmRvdyAqc291cmNl
KTsKIAogICAgIE5TUG9pbnQgZmxpcFNjcmVlblBvaW50KGNvbnN0IE5TUG9pbnQmLCBOU1NjcmVl
biAqKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1X
aGVlbEV2ZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgY2xh
c3MgQk1lc3NhZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZsb2F0UG9p
bnQ7Ci0gICAgY2xhc3MgRmxvYXRTaXplOworICAgIGNsYXNzIEdyYXBoaWNzUG9pbnQ7CisgICAg
Y2xhc3MgR3JhcGhpY3NTaXplOwogCiAgICAgLy8gV2hlZWwgZXZlbnRzIGNvbWUgaW4gdHdvIGZs
YXZvcnM6CiAgICAgLy8gVGhlIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50IGlzIGEgZmluZS1ncmFp
bmVkIGV2ZW50IHRoYXQgc3BlY2lmaWVzIHRoZSBwcmVjaXNlIG51bWJlciBvZiBwaXhlbHMgdG8g
c2Nyb2xsLiAgSXQgaXMgc2VudCBkaXJlY3RseSBieSBNYWNCb29rIHRvdWNocGFkcyBvbiBPUyBY
LApAQCAtMTg5LDcgKzE4OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JN
KFdJTikKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBBUkFNLCBi
b29sIGlzTW91c2VIV2hlZWwpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgY29u
c3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24pOworICAgICAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0YSwgY29u
c3QgR3JhcGhpY3NQb2ludCYgbG9jYXRpb24pOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC03
Miw3ICs3Miw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50
JiBvZmZzZXQpCiB7CiAgICAgaWYgKG1fY3VycmVudFBvc1ggIT0gb2Zmc2V0LngoKSB8fCBtX2N1
cnJlbnRQb3NZICE9IG9mZnNldC55KCkpIHsKICAgICAgICAgbV9jdXJyZW50UG9zWCA9IG9mZnNl
dC54KCk7CkBAIC0xMTksOSArMTE5LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlR2Vz
dHVyZUV2ZW50KAogfQogI2VuZGlmCiAKLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGlvbigpIGNvbnN0CitHcmFwaGljc1BvaW50IFNjcm9sbEFuaW1hdG9yOjpjdXJyZW50
UG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBvc1gs
IG1fY3VycmVudFBvc1kpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG1fY3VycmVudFBvc1gs
IG1fY3VycmVudFBvc1kpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQb3NpdGlv
bkNoYW5nZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNsYXNzIFBs
YXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFy
OwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVt
ZW50YXRpb24gYWx3YXlzIHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgogICAg
IHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKIAotICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQ
b2ludCYpOwogCiAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50Jik7CiAjZW5kaWYKIAotICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uKCkgY29uc3Q7
CisgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgeyB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKIAogICAgIFNj
cm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOwotICAgIGZsb2F0IG1fY3VycmVudFBvc1g7
IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKKyAgICBm
bG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEdyYXBoaWNzUG9pbnQgaW4g
b3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3ViY2xhc3MgY29k
ZSBjb21wbGV4aXR5LgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTm9uZS5oIgogCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
YWJsZUFyZWEuaCIKQEAgLTMxOSw3ICszMTksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6
c2Nyb2xsKFNjcm9sbGJhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTY3JvbGxBbmlt
YXRvck5vbmU6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50
JiBvZmZzZXQpCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAgICBzdG9wQW5pbWF0
aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CiAgICAgc3RvcEFuaW1hdGlvblRp
bWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUoKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBo
aWNzUG9pbnQmKTsKIAogICAgIGVudW0gQ3VydmUgewogICAgICAgICBMaW5lYXIsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3JXaW4uaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxi
YXJUaGVtZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTE3OCw3ICsxNzgsNyBAQCBib29s
IFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xsYmFyCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgb2Zmc2V0KQog
ewogICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsKICAg
ICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCShyZXZpc2lvbiA5MTAx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFu
aW1hdG9yV2luKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFBlckF4aXNE
YXRhIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbChTY3JvbGxEaXJlY3QKICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+c2Nyb2xsKG9y
aWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CiAKLXZvaWQgU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBv
aW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgb2Zmc2V0KQogewogICAgIHNjcm9sbEFuaW1h
dG9yKCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOwogfQpAQCAtMTE0
LDEyICsxMTQsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRobwog
CiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZs
b2F0IHgpCiB7Ci0gICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQo
eCwgc2Nyb2xsQW5pbWF0b3IoKS0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7CisgICAgc2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEdyYXBoaWNzUG9pbnQoeCwgc2Nyb2xsQW5pbWF0b3Io
KS0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeSkKIHsKLSAgICBzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50
UG9zaXRpb24oKS54KCksIHkpKTsKKyAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
R3JhcGhpY3NQb2ludChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS54KCksIHkp
KTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc1BvaW50
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7CiBj
bGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5TY3JvbGxhYmxlQXJlYSgpOwogCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwotICAgIHZvaWQg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7
CiAgICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50
YXRpb24sIGZsb2F0IG9mZnNldCk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGZsb2F0IHgpOwogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihmbG9hdCB4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBTY3JvbGxiYXI6Om1vdmVUaHVt
YihpbnQgcG9zLCBib29sIAogICAgICAgICBpZiAobV9kcmFnZ2luZ0RvY3VtZW50KQogICAgICAg
ICAgICAgZGVsdGEgPSBwb3MgLSBtX2RvY3VtZW50RHJhZ1BvczsKICAgICAgICAgbV9kcmFnZ2lu
Z0RvY3VtZW50ID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBt
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGRlc3RpbmF0
aW9uUG9zaXRpb24gPSAobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gY3Vy
cmVudFBvc2l0aW9uLngoKSA6IGN1cnJlbnRQb3NpdGlvbi55KCkpICsgZGVsdGE7CiAgICAgICAg
IGlmIChkZWx0YSA+IDApCiAgICAgICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gbWluKGRl
c3RpbmF0aW9uUG9zaXRpb24gKyBkZWx0YSwgbWF4aW11bSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NjcmVlbkFuZHJvaWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTIgQEAKIAogLy8gVGhpcyBpbmNsdWRl
IG11c3QgY29tZSBmaXJzdC4KICN1bmRlZiBMT0cgLy8gRklYTUU6IFN0aWxsIGhhdmUgdG8gZG8g
dGhpcyB0byBnZXQgdGhlIGxvZyB0byBzaG93IHVwCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAidXRpbHMvTG9nLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJ1aS9EaXNwbGF5SW5mby5oIgogI2luY2x1ZGUgInVp
L1BpeGVsRm9ybWF0LmgiCiAjaW5jbHVkZSAidWkvU3VyZmFjZUNvbXBvc2VyQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTAsMjAgKzg5
LDIwIEBAIGludCBTY3JlZW46Om9yaWVudGF0aW9uKCkgY29uc3QKIC8vIHBvc2l0aW9uaW5nIHBv
cHVwIHdpbmRvd3MuIElmIHdlIHN1cHBvcnQgbXVsdGlwbGUgd2luZG93cwogLy8gdGhleSB3aWxs
IGJlIG1vc3QgbGlrZWx5IGZ1bGwgc2NyZWVuLiBUaGVyZWZvcmUsCiAvLyB0aGUgYWNjdXJhY3kg
b2YgdGhlc2UgbnVtYmVyIGFyZSBub3QgdG9vIGltcG9ydGFudC4KLUZsb2F0UmVjdCBzY3JlZW5S
ZWN0KFdpZGdldCogcGFnZSkKK0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCogcGFnZSkK
IHsKICAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOwogICAgIGFuZHJvaWQ6OlN1cmZhY2VD
b21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5m
byk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLjAsIDAuMCwgaW5mby53LCBpbmZvLmgpOworICAg
IHJldHVybiBHcmFwaGljc1JlY3QoMC4wLCAwLjAsIGluZm8udywgaW5mby5oKTsKIH0KIAogLy8g
U2ltaWxhciBzY3JlZW5SZWN0LCB0aGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IHVzZWQgYnkgamF2
YXNjcmlwdHMKIC8vIHRvIHBvc2l0aW9uIGFuZCByZXNpemUgd2luZG93cyAodXN1YWxseSB0byBm
dWxsIHNjcmVlbikuIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KikKK0dy
YXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopCiB7CiAgICAgYW5kcm9pZDo6
RGlzcGxheUluZm8gaW5mbzsKICAgICBhbmRyb2lkOjpTdXJmYWNlQ29tcG9zZXJDbGllbnQ6Omdl
dERpc3BsYXlJbmZvKGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOwotICAgIHJldHVybiBG
bG9hdFJlY3QoMC4wLCAwLjAsIGluZm8udywgaW5mby5oKTsKKyAgICByZXR1cm4gR3JhcGhpY3NS
ZWN0KDAuMCwgMC4wLCBpbmZvLncsIGluZm8uaCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Ny
b2xsVmlld0FuZHJvaWQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5o
IgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlNr
UmVnaW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIGNvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1cnNvcigp
CiAgICAgcmV0dXJuIGR1bW15Q3Vyc29yOwogfQogCi12b2lkKiBzY2FsZURyYWdJbWFnZSh2b2lk
KiwgRmxvYXRTaXplKQordm9pZCogc2NhbGVEcmFnSW1hZ2Uodm9pZCosIEdyYXBoaWNzU2l6ZSkK
IHsKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0NvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Nv
bmUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0NvbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIsMTYgQEAgQ29uZUVmZmVjdDo6
Q29uZUVmZmVjdCgpCiB7CiB9CiAKLWRvdWJsZSBDb25lRWZmZWN0OjpnYWluKEZsb2F0UG9pbnQz
RCBzb3VyY2VQb3NpdGlvbiwgRmxvYXRQb2ludDNEIHNvdXJjZU9yaWVudGF0aW9uLCBGbG9hdFBv
aW50M0QgbGlzdGVuZXJQb3NpdGlvbikKK2RvdWJsZSBDb25lRWZmZWN0OjpnYWluKEdyYXBoaWNz
UG9pbnQzRCBzb3VyY2VQb3NpdGlvbiwgR3JhcGhpY3NQb2ludDNEIHNvdXJjZU9yaWVudGF0aW9u
LCBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJQb3NpdGlvbikKIHsKICAgICBpZiAoc291cmNlT3Jp
ZW50YXRpb24uaXNaZXJvKCkgfHwgKChtX2lubmVyQW5nbGUgPT0gMzYwLjApICYmIChtX291dGVy
QW5nbGUgPT0gMzYwLjApKSkKICAgICAgICAgcmV0dXJuIDEuMDsgLy8gbm8gY29uZSBzcGVjaWZp
ZWQgLSB1bml0eSBnYWluCiAKICAgICAvLyBOb3JtYWxpemVkIHNvdXJjZS1saXN0ZW5lciB2ZWN0
b3IKLSAgICBGbG9hdFBvaW50M0Qgc291cmNlVG9MaXN0ZW5lciA9IGxpc3RlbmVyUG9zaXRpb24g
LSBzb3VyY2VQb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0Qgc291cmNlVG9MaXN0ZW5lciA9
IGxpc3RlbmVyUG9zaXRpb24gLSBzb3VyY2VQb3NpdGlvbjsKICAgICBzb3VyY2VUb0xpc3RlbmVy
Lm5vcm1hbGl6ZSgpOwogCi0gICAgRmxvYXRQb2ludDNEIG5vcm1hbGl6ZWRTb3VyY2VPcmllbnRh
dGlvbiA9IHNvdXJjZU9yaWVudGF0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBub3JtYWxpemVk
U291cmNlT3JpZW50YXRpb24gPSBzb3VyY2VPcmllbnRhdGlvbjsKICAgICBub3JtYWxpemVkU291
cmNlT3JpZW50YXRpb24ubm9ybWFsaXplKCk7CiAKICAgICAvLyBBbmdsZSBiZXR3ZWVuIHRoZSBz
b3VyY2Ugb3JpZW50YXRpb24gdmVjdG9yIGFuZCB0aGUgc291cmNlLWxpc3RlbmVyIHZlY3RvcgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9Db25lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgQ29uZV9oCiAjZGVmaW5lIENvbmVfaAogCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgQ29uZUVmZmVj
dCgpOwogCiAgICAgLy8gUmV0dXJucyBzY2FsYXIgZ2FpbiBmb3IgdGhlIGdpdmVuIHNvdXJjZS9s
aXN0ZW5lciBwb3NpdGlvbnMvb3JpZW50YXRpb25zCi0gICAgZG91YmxlIGdhaW4oRmxvYXRQb2lu
dDNEIHNvdXJjZVBvc2l0aW9uLCBGbG9hdFBvaW50M0Qgc291cmNlT3JpZW50YXRpb24sIEZsb2F0
UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKTsKKyAgICBkb3VibGUgZ2FpbihHcmFwaGljc1BvaW50
M0Qgc291cmNlUG9zaXRpb24sIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VPcmllbnRhdGlvbiwgR3Jh
cGhpY3NQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24pOwogCiAgICAgLy8gQW5nbGVzIGluIGRlZ3Jl
ZXMKICAgICB2b2lkIHNldElubmVyQW5nbGUoZG91YmxlIGlubmVyQW5nbGUpIHsgbV9pbm5lckFu
Z2xlID0gaW5uZXJBbmdsZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJldy9T
Y3JlZW5CcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3
L1NjcmVlbkJyZXcuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2JyZXcvU2NyZWVuQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JlZW4uaCIKIAotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTksMTUg
KzU5LDE1IEBAIHN0YXRpYyB2b2lkIGdldERpc3BsYXlJbmZvKERpc3BsYXlJbmZvJiAKICAgICBp
bmZvLmRlcHRoICA9IGJpdG1hcEluZm8ubkRlcHRoOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuUmVj
dChXaWRnZXQqKQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KikKIHsKICAgICBEaXNw
bGF5SW5mbyBpbmZvOwogICAgIGdldERpc3BsYXlJbmZvKGluZm8pOwogCi0gICAgcmV0dXJuIEZs
b2F0UmVjdCgwLCAwLCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCk7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgwLCAwLCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCk7CiB9CiAKLUZsb2F0UmVjdCBz
Y3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlbkF2
YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lk
Z2V0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFn
ZUNocm9taXVtTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1NYWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJ
bWFnZVJlZiBpbWFnZSkKICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CiB9CiAKLURyYWdJbWFn
ZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkK
K0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNz
U2l6ZSBzY2FsZSkKIHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0lt
YWdlQ2hyb21pdW1Ta2lhLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFn
ZSkKICAgICBkZWxldGUgaW1hZ2U7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShE
cmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURy
YWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSBzY2FsZSkKIHsKICAgICBp
ZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bs
YXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTIg
QEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAgICAgcmV0dXJuIFBs
YXRmb3JtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUod2lkZ2V0KTsKIH0KIAotRmxvYXRSZWN0
IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVjdChXaWRn
ZXQqIHdpZGdldCkKIHsKICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlblJlY3Qod2lk
Z2V0KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQp
CitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3Qod2lkZ2V0KTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjMsNyArMzYzLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgIGlmIChjaHJvbWVDbGllbnQpIHsKICAgICAgICAgLy8gSWYgdGhlIHBvcHVwIHdvdWxkIGV4
dGVuZCBwYXN0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiwgb3BlbiB1cHdhcmRzCiAgICAgICAg
IC8vIGluc3RlYWQuCi0gICAgICAgIEZsb2F0UmVjdCBzY3JlZW4gPSBzY3JlZW5BdmFpbGFibGVS
ZWN0KG1fZnJhbWVWaWV3LmdldCgpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNjcmVlbiA9IHNj
cmVlbkF2YWlsYWJsZVJlY3QobV9mcmFtZVZpZXcuZ2V0KCkpOwogICAgICAgICAvLyBVc2UgcG9w
dXBJbml0aWFsQ29vcmRpbmF0ZS54KCkgKyByaWdodE9mZnNldCBiZWNhdXNlIFJUTCBwb3NpdGlv
bgogICAgICAgICAvLyBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgogICAgICAgICB3aWRnZXRSZWN0
ID0gY2hyb21lQ2xpZW50LT53aW5kb3dUb1NjcmVlbihJbnRSZWN0KHBvcHVwSW5pdGlhbENvb3Jk
aW5hdGUueCgpICsgcmlnaHRPZmZzZXQsIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueSgpLCB0YXJn
ZXRTaXplLndpZHRoKCksIHRhcmdldFNpemUuaGVpZ2h0KCkpKTsKQEAgLTM3MSw3ICszNzEsNyBA
QCBJbnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgbXVsdGlwbGUgc2NyZWVucyBhbmQgdGhlIGJyb3dzZXIgcmVjdCBpcyBpbiBvbmUg
c2NyZWVuLCB3ZSBoYXZlCiAgICAgICAgIC8vIHRvIGNsaXAgdGhlIHdpbmRvdyB3aWR0aCB0byB0
aGUgc2NyZWVuIHdpZHRoLgogICAgICAgICAvLyBXaGVuIGNsaXBwaW5nLCB3ZSBhbHNvIG5lZWQg
dG8gc2V0IGEgbWF4aW11bSB3aWR0aCBmb3IgdGhlIGxpc3QgYm94LgotICAgICAgICBGbG9hdFJl
Y3Qgd2luZG93UmVjdCA9IGNocm9tZUNsaWVudC0+d2luZG93UmVjdCgpOworICAgICAgICBHcmFw
aGljc1JlY3Qgd2luZG93UmVjdCA9IGNocm9tZUNsaWVudC0+d2luZG93UmVjdCgpOwogICAgICAg
ICBpZiAod2luZG93UmVjdC54KCkgPj0gc2NyZWVuLngoKSAmJiB3aW5kb3dSZWN0Lm1heFgoKSA8
PSBzY3JlZW4ubWF4WCgpICYmICh3aWRnZXRSZWN0LngoKSA8IHNjcmVlbi54KCkgfHwgd2lkZ2V0
UmVjdC5tYXhYKCkgPiBzY3JlZW4ubWF4WCgpKSkgewogICAgICAgICAgICAgLy8gRmlyc3QsIGlu
dmVyc2UgdGhlIHBvcHVwIGFsaWdubWVudCBpZiBpdCBkb2VzIG5vdCBmaXQgdGhlIHNjcmVlbiAt
IHRoaXMgbWlnaHQgZml4IHRoaW5ncyAob3IgbWFrZSB0aGVtIGJldHRlcikuCiAgICAgICAgICAg
ICBJbnRSZWN0IGludmVyc2VXaWRnZXRSZWN0ID0gY2hyb21lQ2xpZW50LT53aW5kb3dUb1NjcmVl
bihJbnRSZWN0KHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueCgpICsgKGlzUlRMID8gMCA6IHJ0bE9m
ZnNldCksIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueSgpLCB0YXJnZXRTaXplLndpZHRoKCksIHRh
cmdldFNpemUuaGVpZ2h0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZu
ZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAogI2RlZmluZSBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNp
emUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXpl
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAj
aW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgiCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNocm9taXVtTWFj
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVh
bCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBH
cmFwaGljc1BvaW50Jik7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkBAIC02NywxMSAr
NjcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsK
IAotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQ
b3NpdGlvbik7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNz
UG9pbnQmIG5ld1Bvc2l0aW9uKTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGZs
b2F0IGRlbHRhWCk7CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0
YVkpOwogCi0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9s
bFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRp
b24pOwogCiAgICAgdm9pZCBzZXRJc0RyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKSB7IG1fZHJhd2lu
Z0ludG9MYXllciA9IGI7IH0KICAgICBib29sIGlzRHJhd2luZ0ludG9MYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd2luZ0ludG9MYXllcjsgfQpAQCAtMTI2LDcgKzEyNiw3IEBAIHByaXZhdGU6
CiAKICAgICBmbG9hdCBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29u
c3Q7CiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNv
bnN0OwotICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RTY3JvbGxQb3Np
dGlvbklmTmVjZXNzYXJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKICAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNv
bnN0OwpAQCAtMTQ4LDE1ICsxNDgsMTUgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkQ3VtdWxh
dGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluOwog
CiAgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAg
RmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAgICBGbG9hdFNpemUgbV9zdHJldGNo
U2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKyAgICBHcmFw
aGljc1NpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAgIEdyYXBoaWNzU2l6ZSBtX3N0cmV0
Y2hTY3JvbGxGb3JjZTsKKyAgICBHcmFwaGljc1NpemUgbV9tb21lbnR1bVZlbG9jaXR5OwogCiAg
ICAgLy8gUnViYmVyIGJhbmQgc3RhdGUuCiAgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7
Ci0gICAgRmxvYXRTaXplIG1fc3RhcnRTdHJldGNoOwotICAgIEZsb2F0UG9pbnQgbV9vcmlnT3Jp
Z2luOwotICAgIEZsb2F0U2l6ZSBtX29yaWdWZWxvY2l0eTsKKyAgICBHcmFwaGljc1NpemUgbV9z
dGFydFN0cmV0Y2g7CisgICAgR3JhcGhpY3NQb2ludCBtX29yaWdPcmlnaW47CisgICAgR3JhcGhp
Y3NTaXplIG1fb3JpZ1ZlbG9jaXR5OwogICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM+IG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKICNlbmRpZgogICAgIGJvb2wgbV9kcmF3aW5nSW50
b0xheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3
LmgiCkBAIC05OCw3ICs5OCw3IEBAIC0gKE5TUmVjdClib3VuZHMKICAgICBpZiAoIV9hbmltYXRv
cikKICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24gPSBfYW5pbWF0b3ItPmN1cnJlbnRQ
b3NpdGlvbigpOwogICAgIHJldHVybiBOU01ha2VSZWN0KGN1cnJlbnRQb3NpdGlvbi54KCksIGN1
cnJlbnRQb3NpdGlvbi55KCksIDAsIDApOwogfQogCkBAIC01MjcsNyArNTI3LDcgQEAgYm9vbCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGwoUwogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1Bv
aW50JiBvZmZzZXQpCiB7CiAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9zdG9w
UnVuXTsKICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7CkBAIC01NDksNyArNTQ5
LDcgQEAgZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0UwogICAgIHJldHVy
biBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwg
MCk7CiB9CiAKLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Ny
b2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgY29uc3QK
K0dyYXBoaWNzUG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsUG9z
aXRpb25JZk5lY2Vzc2FyeShjb25zdCBHcmFwaGljc1BvaW50JiBwb3NpdGlvbikgY29uc3QKIHsK
ICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKQEAgLTU1NywxMiArNTU3LDEyIEBAIEZs
b2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWQKICAgICBmbG9hdCBuZXdYID0g
bWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29u
dGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwg
MCk7CiAgICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi55KCks
IG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxl
QXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKLSAgICByZXR1cm4gRmxvYXRQb2ludChuZXdY
LCBuZXdZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChuZXdYLCBuZXdZKTsKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9u
KQogewotICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0
aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOworICAgIEdyYXBoaWNzUG9pbnQgYWRqdXN0ZWRQ
b3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOwog
IAogICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQb3NYICYmIGFkanVz
dGVkUG9zaXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCiAgICAgICAgIHJldHVybjsKQEAgLTU5
NCw3ICs1OTQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0CiAg
ICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiBuZXdQb3NpdGlvbikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1Bv
aW50JiBuZXdQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9zY3JvbGxBbmltYXRpb25IZWxwZXIp
OwogICAgIENHRmxvYXQgcHJvZ3Jlc3MgPSBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkg
X3Byb2dyZXNzXTsKQEAgLTg1Niw3ICs4NTYsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmhhbmRsZUdlCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlubmVk
SW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCiB7Ci0gICAgRmxvYXRTaXpl
IGxpbWl0RGVsdGE7CisgICAgR3JhcGhpY3NTaXplIGxpbWl0RGVsdGE7CiAgICAgaWYgKGZhYnNm
KGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewogICAgICAgICBpZiAoZGVsdGFZIDwgMCkgewog
ICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2Ug
YXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcApAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2MKICAgICBmbG9hdCBkZWx0YVkgPSBtX292ZXJm
bG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CiAKICAgICAvLyBSZXNldCBvdmVyZmxvdyB2YWx1ZXMg
YmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBhdCB2YXJpb3VzIHBvaW50cyBh
bmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxv
YXRTaXplKCk7CisgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gR3JhcGhpY3NTaXplKCk7CiAK
ICAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwog
ICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7CkBA
IC05NjEsNyArOTYxLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbW9vdGhT
YwogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50
LnRpbWVzdGFtcCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAg
bV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX21vbWVudHVt
VmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1Zl
cnRpY2FsbHlTdHJldGNoZWQpIHsKQEAgLTEwNTEsOSArMTA1MSw5IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2MKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlLnNldFdpZHRoKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkgKyBkZWx0YVgpOwogICAg
ICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KG1fc3RyZXRjaFNjcm9sbEZv
cmNlLmhlaWdodCgpICsgZGVsdGFZKTsKIAotICAgICAgICAgICAgRmxvYXRTaXplIGRhbXBlZERl
bHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgb3JpZ09yaWdp
biA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsg
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2luID0gb3JpZ09yaWdpbiArIGRhbXBlZERlbHRhOwor
ICAgICAgICAgICAgR3JhcGhpY3NTaXplIGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZv
clJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0
aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsK
KyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVh
LT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQg
bmV3T3JpZ2luID0gb3JpZ09yaWdpbiArIGRhbXBlZERlbHRhOwogCiAgICAgICAgICAgICBpZiAo
b3JpZ09yaWdpbiAhPSBuZXdPcmlnaW4pIHsKICAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CkBAIC0xMDc5
LDcgKzEwNzksNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2luU2NyCiAg
ICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyA9IGZhbHNlOwogICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0g
MDsKLSAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICBtX21vbWVudHVt
VmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKICAgICBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVk
T25MZWZ0ID0gbV9zY3JvbGxhYmxlQXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01p
bmltdW1Qb3NpdGlvbigpOwogICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0ID0g
bV9zY3JvbGxhYmxlQXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3Np
dGlvbigpOwogICAgIG1fY3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGwgPSAwOwpAQCAtMTA4OSw3
ICsxMDg5LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpiZWdpblNjcgogICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0
YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRI
ZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkp
KTsKIAotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIAogICAgIGlmIChtX3NuYXBS
dWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVy
LnN0b3AoKTsKQEAgLTExMDYsNyArMTEwNiw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c25hcFJ1YmIKIHsKICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbW05TUHJv
Y2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbnR1bVNjcm9s
bFRpbWVzdGFtcDsKICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGlt
ZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCi0gICAgICAgIG1fbW9tZW50
dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBH
cmFwaGljc1NpemUoKTsKIAogICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CiAKQEAgLTEx
MTQsOSArMTExNCw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmIK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsK
LSAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9vcmlnVmVsb2NpdHkgPSBG
bG9hdFNpemUoKTsKKyAgICBtX3N0YXJ0U3RyZXRjaCA9IEdyYXBoaWNzU2l6ZSgpOworICAgIG1f
b3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICBtX29yaWdWZWxvY2l0eSA9IEdyYXBo
aWNzU2l6ZSgpOwogCiAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEu
MC82MC4wKTsKIH0KQEAgLTExNDAsMTUgKzExNDAsMTUgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpzbmFwUnViYgogICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mg
fHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpIHsKICAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGlt
ZURlbHRhID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFy
dFRpbWU7CiAKLSAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7Cisg
ICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBHcmFwaGljc1NpemUoKSkgewogICAgICAgICAg
ICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwot
ICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7ICAgIAorICAg
ICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEdyYXBoaWNzU2l6ZSgpKSB7ICAgIAogICAg
ICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICBt
X3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6
ZSgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAg
ICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAg
IG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmln
T3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CkBAIC0xMTczLDE3ICsxMTczLDE3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6c25hcFJ1YmIKICAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7
CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhl
bFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRo
KCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisgICAgICAg
IEdyYXBoaWNzUG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGlj
RGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5
LndpZHRoKCksIChmbG9hdCl0aW1lRGVsdGEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBy
b3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0
YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGlt
ZURlbHRhKSkpOwogCiAgICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRl
bHRhLnkoKSkgPj0gMSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29y
aWdPcmlnaW4gKyBkZWx0YTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbmV3T3JpZ2luID0g
bV9vcmlnT3JpZ2luICsgZGVsdGE7CiAKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKICAgICAgICAgICAgIGlt
bWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKICAgICAgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwogCi0gICAg
ICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5n
QW1vdW50KCk7CisgICAgICAgICAgICBHcmFwaGljc1NpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xs
YWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1f
c3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShu
ZXdTdHJldGNoLndpZHRoKCkpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkp
OwpAQCAtMTE5MywxNiArMTE5MywxNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OnNuYXBSdWJiCiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZVJ1YmJl
ckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKIAogICAgICAgICAgICAgbV9z
bmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdy
YXBoaWNzU2l6ZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7
Ci0gICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAg
bV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkg
PSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXpl
KCk7CisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBHcmFwaGljc1BvaW50KCk7CisgICAgICAg
ICAgICBtX29yaWdWZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV07Ci0gICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAg
ICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CiAgICAgfQogfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnRUaWMKICAgICAgICAgY29uc3QgaW50IHlQb3MgPSByZWN0LnkoKSArIChy
ZWN0LmhlaWdodCgpICogcGVyY2VudCk7CiAKICAgICAgICAgLy8gUGFpbnQuCi0gICAgICAgIEZs
b2F0UmVjdCB0aWNrUmVjdChyZWN0LngoKSwgeVBvcywgcmVjdC53aWR0aCgpLCAyKTsKKyAgICAg
ICAgR3JhcGhpY3NSZWN0IHRpY2tSZWN0KHJlY3QueCgpLCB5UG9zLCByZWN0LndpZHRoKCksIDIp
OwogICAgICAgICBjb250ZXh0LT5maWxsUmVjdCh0aWNrUmVjdCk7CiAgICAgICAgIGNvbnRleHQt
PnN0cm9rZVJlY3QodGlja1JlY3QsIDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVt
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgcGFp
bnRDaGVja2JveChDb250cm9sU3RhdGVzIAogICAgICAgICBpbmZsYXRlZFJlY3Quc2V0V2lkdGgo
aW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKICAgICAgICAgaW5mbGF0ZWRSZWN0
LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKICAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkpOwot
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZhY3Rvcikp
OworICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUZhY3Rvciwgem9vbUZh
Y3RvcikpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1p
bmZsYXRlZFJlY3QueSgpKTsKICAgICB9CiAKQEAgLTQ3Niw3ICs0NzYsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMgc3RhCiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRX
aWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBpbmZsYXRl
ZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0Lnko
KSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFj
dG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6
b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0Lngo
KSwgLWluZmxhdGVkUmVjdC55KCkpOwogICAgIH0KIApAQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRp
YyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQKICAgICAgICAgICAgIGluZmxhdGVk
UmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAg
ICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6b29t
RmFjdG9yKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgp
LCBpbmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShH
cmFwaGljc1NpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOwogICAgICAgICAgICAgY29udGV4
dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC02NDYsNyArNjQ2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTdGVwcGVy
KENvbnRyb2xTdGF0ZXMgcwogICAgICAgICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSAvIHpv
b21GYWN0b3IpOwogICAgICAgICByZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gem9vbUZh
Y3Rvcik7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwot
ICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZhY3Rvcikp
OworICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUZhY3Rvciwgem9vbUZh
Y3RvcikpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXJlY3QueCgpLCAtcmVjdC55KCkp
OwogICAgIH0KICAgICBDR1JlY3QgYm91bmRzKHJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFn
SW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShE
cmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBpbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9Q
bGF0Zm9ybVNjcmVlbkVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL1BsYXRmb3JtU2NyZWVuRWZsLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSwxNyArNjEsMTcgQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0
KQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgaW50IHgs
IHksIHcsIGg7CiAgICAgRXZhcyogZSA9IHdpZGdldC0+ZXZhcygpOwogCiAgICAgZWNvcmVfZXZh
c19zY3JlZW5fZ2VvbWV0cnlfZ2V0KGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZSksICZ4LCAm
eSwgJncsICZoKTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoeCwgeSwgdywgaCk7CisgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdCh4LCB5LCB3LCBoKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWls
YWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVj
dChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBz
Y3JlZW5SZWN0KHdpZGdldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVu
ZGVyVGhlbWVFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9SZW5kZXJUaGVtZUVmbC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCw4
ICsxMjE0LDggQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZWRpYVNsaWRlclRyYQogewog
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGluZm8uY29udGV4dDsKIAotICAgIGNvbnRl
eHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9tZWRpYVBhbmVsQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChJbnRSZWN0KHJl
Y3QueCgpLCByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbWVkaWFTbGlkZXJIZWlnaHQpIC8g
MiwKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QocmVjdCksIG1fbWVkaWFQYW5l
bENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFw
aGljc1JlY3QoSW50UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIG1l
ZGlhU2xpZGVySGVpZ2h0KSAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC53aWR0aCgpLCBtZWRpYVNsaWRlckhlaWdodCkpLCBtX21lZGlhU2xpZGVyQ29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2Jq
ZWN0LT5zdHlsZSgpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRNZWRpYVNsaWRlclRyYQogICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BSaWdodCA9IHNs
aWRlclRvcExlZnQ7CiAgICAgICAgIHNsaWRlclRvcFJpZ2h0Lm1vdmUoMCwgcmFuZ2VSZWN0Lmhl
aWdodCgpKTsKIAotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIG1f
bWVkaWFQYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29udGV4dC0+
ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpLCBtX21lZGlhUGFuZWxDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiAgICAgfQogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTEyOTAsNyArMTI5MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50TWVk
aWFWb2x1bWVTbGkKIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1l
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaW5mby5jb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCks
IG1fbWVkaWFQYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBpbmZvLmNvbnRl
eHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChyZWN0KSwgbV9tZWRpYVBhbmVsQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsVmlld0VmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbFZpZXdFZmwuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxWaWV3RWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhvc3RX
aW5kb3cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsMTMgKzE3OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgQml0bWFwSW1hZ2Uo
SW1hZ2VPYnNlcnZlciogPSAwKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVj
dCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBo
aWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAjaWYgKE9TKFdJTkNFKSAm
JiAhUExBVEZPUk0oUVQpKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0
KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSEFJS1UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBDb250ZXh0U2hhZG93OjpDb250ZXh0
U2hhZG93KCkKIHsKIH0KIAotQ29udGV4dFNoYWRvdzo6Q29udGV4dFNoYWRvdyhjb25zdCBDb2xv
ciYgY29sb3IsIGZsb2F0IHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCitDb250ZXh0
U2hhZG93OjpDb250ZXh0U2hhZG93KGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgcmFkaXVzLCBj
b25zdCBHcmFwaGljc1NpemUmIG9mZnNldCkKICAgICA6IG1fY29sb3IoY29sb3IpCiAgICAgLCBt
X2JsdXJEaXN0YW5jZShyb3VuZChyYWRpdXMpKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQpAQCAt
ODAsNyArODAsNyBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmNsZWFyKCkKICAgICBtX3R5cGUgPSBO
b1NoYWRvdzsKICAgICBtX2NvbG9yID0gQ29sb3IoKTsKICAgICBtX2JsdXJEaXN0YW5jZSA9IDA7
Ci0gICAgbV9vZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICBtX29mZnNldCA9IEdyYXBoaWNzU2l6
ZSgpOwogfQogCiBib29sIENvbnRleHRTaGFkb3c6Om11c3RVc2VDb250ZXh0U2hhZG93KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKQEAgLTE4NywxNyArMTg3LDE3IEBAIHZvaWQgQ29udGV4dFNo
YWRvdzo6YWRqdXN0Qmx1ckRpc3RhbmNlKEcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2Fs
Y3VsYXRlIHRyYW5zZm9ybWVkIHVuaXQgdmVjdG9ycy4KLSAgICBjb25zdCBGbG9hdFF1YWQgdW5p
dFF1YWQoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxLCAwKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmxvYXRQb2ludCgwLCAxKSwgRmxvYXRQb2ludCgxLCAxKSk7CisgICAg
Y29uc3QgRmxvYXRRdWFkIHVuaXRRdWFkKEdyYXBoaWNzUG9pbnQoMCwgMCksIEdyYXBoaWNzUG9p
bnQoMSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQoMCwg
MSksIEdyYXBoaWNzUG9pbnQoMSwgMSkpOwogICAgIGNvbnN0IEZsb2F0UXVhZCB0cmFuc2Zvcm1l
ZFVuaXRRdWFkID0gdHJhbnNmb3JtLm1hcFF1YWQodW5pdFF1YWQpOwogCiAgICAgLy8gQ2FsY3Vs
YXRlIFggYXhpcyBzY2FsZSBmYWN0b3IuCi0gICAgY29uc3QgRmxvYXRTaXplIHhVbml0Q2hhbmdl
ID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMigpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOwor
ICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSB4VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5pdFF1YWQu
cDIoKSAtIHRyYW5zZm9ybWVkVW5pdFF1YWQucDEoKTsKICAgICBjb25zdCBmbG9hdCB4QXhpc1Nj
YWxlID0gc3FydGYoeFVuaXRDaGFuZ2Uud2lkdGgoKSAqIHhVbml0Q2hhbmdlLndpZHRoKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB4VW5pdENoYW5nZS5oZWlnaHQoKSAq
IHhVbml0Q2hhbmdlLmhlaWdodCgpKTsKIAogICAgIC8vIENhbGN1bGF0ZSBZIGF4aXMgc2NhbGUg
ZmFjdG9yLgotICAgIGNvbnN0IEZsb2F0U2l6ZSB5VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5p
dFF1YWQucDMoKSAtIHRyYW5zZm9ybWVkVW5pdFF1YWQucDEoKTsKKyAgICBjb25zdCBHcmFwaGlj
c1NpemUgeVVuaXRDaGFuZ2UgPSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAzKCkgLSB0cmFuc2Zvcm1l
ZFVuaXRRdWFkLnAxKCk7CiAgICAgY29uc3QgZmxvYXQgeUF4aXNTY2FsZSA9IHNxcnRmKHlVbml0
Q2hhbmdlLndpZHRoKCkgKiB5VW5pdENoYW5nZS53aWR0aCgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgeVVuaXRDaGFuZ2UuaGVpZ2h0KCkgKiB5VW5pdENoYW5nZS5oZWln
aHQoKSk7CiAKQEAgLTIwNiw0MiArMjA2LDQyIEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6YWRqdXN0
Qmx1ckRpc3RhbmNlKEcKICAgICBtX2JsdXJEaXN0YW5jZSA9IHJvdW5kZihzdGF0aWNfY2FzdDxm
bG9hdD4obV9ibHVyRGlzdGFuY2UpIC8gc2NhbGUpOwogfQogCi1JbnRSZWN0IENvbnRleHRTaGFk
b3c6OmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQorSW50
UmVjdCBDb250ZXh0U2hhZG93OjpjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGF5ZXJBcmVhLCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkKIHsKICAgICAvLyBDYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIHRo
ZSBibHVycmVkIGFuZC9vciB0cmFuc2Zvcm1lZCBsYXllci4KLSAgICBGbG9hdFJlY3QgbGF5ZXJG
bG9hdFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyR3JhcGhpY3NSZWN0OwogICAgIGZsb2F0
IGluZmxhdGlvbiA9IDA7CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
Y29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgaWYgKG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgJiYg
IXRyYW5zZm9ybS5pc0lkZW50aXR5KCkpIHsKICAgICAgICAgRmxvYXRRdWFkIHRyYW5zZm9ybWVk
UG9seWdvbiA9IHRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChsYXllckFyZWEpKTsKICAgICAg
ICAgdHJhbnNmb3JtZWRQb2x5Z29uLm1vdmUobV9vZmZzZXQpOwotICAgICAgICBsYXllckZsb2F0
UmVjdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUXVhZCh0cmFuc2Zvcm1lZFBvbHlnb24pLmJv
dW5kaW5nQm94KCk7CisgICAgICAgIGxheWVyR3JhcGhpY3NSZWN0ID0gdHJhbnNmb3JtLmludmVy
c2UoKS5tYXBRdWFkKHRyYW5zZm9ybWVkUG9seWdvbikuYm91bmRpbmdCb3goKTsKICAgICB9IGVs
c2UgewotICAgICAgICBsYXllckZsb2F0UmVjdCA9IGxheWVyQXJlYTsKLSAgICAgICAgbGF5ZXJG
bG9hdFJlY3QubW92ZShtX29mZnNldCk7CisgICAgICAgIGxheWVyR3JhcGhpY3NSZWN0ID0gbGF5
ZXJBcmVhOworICAgICAgICBsYXllckdyYXBoaWNzUmVjdC5tb3ZlKG1fb2Zmc2V0KTsKICAgICB9
CiAKICAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhlIGJsdXIgcmFkaXVzIHRvIGdpdmUg
ZXh0cmEgc3BhY2UgZm9yIHRoZSBibHVyIHRyYW5zaXRpb24uCiAgICAgaWYgKG1fdHlwZSA9PSBC
bHVyU2hhZG93KSB7Ci0gICAgICAgIGxheWVyRmxvYXRSZWN0LmluZmxhdGUobV9ibHVyRGlzdGFu
Y2UpOworICAgICAgICBsYXllckdyYXBoaWNzUmVjdC5pbmZsYXRlKG1fYmx1ckRpc3RhbmNlKTsK
ICAgICAgICAgaW5mbGF0aW9uICs9IG1fYmx1ckRpc3RhbmNlOwogICAgIH0KIAotICAgIEZsb2F0
UmVjdCB1bmNsaXBwZWRMYXllclJlY3QgPSBsYXllckZsb2F0UmVjdDsKKyAgICBHcmFwaGljc1Jl
Y3QgdW5jbGlwcGVkTGF5ZXJSZWN0ID0gbGF5ZXJHcmFwaGljc1JlY3Q7CiAKLSAgICBpZiAoIWNs
aXBSZWN0LmNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3QobGF5ZXJGbG9hdFJlY3QpKSkgeworICAg
IGlmICghY2xpcFJlY3QuY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChsYXllckdyYXBoaWNzUmVj
dCkpKSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gaGF2ZSB0aGUgYnVmZmVyIGxhcmdlciB0aGFu
IHRoZSBjbGlwLgotICAgICAgICBsYXllckZsb2F0UmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwor
ICAgICAgICBsYXllckdyYXBoaWNzUmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogCiAgICAgICAg
IC8vIElmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLCB3ZSBhcmVuJ3Qg
cGFpbnRpbmcgYXQgYWxsLgotICAgICAgICBpZiAobGF5ZXJGbG9hdFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICBpZiAobGF5ZXJHcmFwaGljc1JlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIEludFJlY3QoMCwgMCwgMCwgMCk7CiAKICAgICAgICAgLy8gV2UgYWRqdXN0IGFnYWluIGJl
Y2F1c2UgdGhlIHBpeGVscyBhdCB0aGUgYm9yZGVycyBhcmUgc3RpbGwKICAgICAgICAgLy8gcG90
ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHBpeGVscyBvdXRzaWRlIHRoZSBidWZmZXIuCiAgICAg
ICAgIGlmIChtX3R5cGUgPT0gQmx1clNoYWRvdykgewotICAgICAgICAgICAgbGF5ZXJGbG9hdFJl
Y3QuaW5mbGF0ZShtX2JsdXJEaXN0YW5jZSk7CisgICAgICAgICAgICBsYXllckdyYXBoaWNzUmVj
dC5pbmZsYXRlKG1fYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAgIHVuY2xpcHBlZExheWVyUmVj
dC5pbmZsYXRlKG1fYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAgIGluZmxhdGlvbiArPSBtX2Js
dXJEaXN0YW5jZTsKICAgICAgICAgfQpAQCAtMjQ5LDE4ICsyNDksMTggQEAgSW50UmVjdCBDb250
ZXh0U2hhZG93OjpjYWxjdWxhdGVMYXllckJvdQogCiAgICAgY29uc3QgaW50IGZyYW1lU2l6ZSA9
IGluZmxhdGlvbiAqIDI7CiAgICAgbV9zb3VyY2VSZWN0ID0gSW50UmVjdCgwLCAwLCBsYXllckFy
ZWEud2lkdGgoKSArIGZyYW1lU2l6ZSwgbGF5ZXJBcmVhLmhlaWdodCgpICsgZnJhbWVTaXplKTsK
LSAgICBtX2xheWVyT3JpZ2luID0gRmxvYXRQb2ludChsYXllckZsb2F0UmVjdC54KCksIGxheWVy
RmxvYXRSZWN0LnkoKSk7CisgICAgbV9sYXllck9yaWdpbiA9IEdyYXBoaWNzUG9pbnQobGF5ZXJH
cmFwaGljc1JlY3QueCgpLCBsYXllckdyYXBoaWNzUmVjdC55KCkpOwogCi0gICAgY29uc3QgRmxv
YXRQb2ludCBtX3VuY2xpcHBlZExheWVyT3JpZ2luID0gRmxvYXRQb2ludCh1bmNsaXBwZWRMYXll
clJlY3QueCgpLCB1bmNsaXBwZWRMYXllclJlY3QueSgpKTsKLSAgICBjb25zdCBGbG9hdFNpemUg
Y2xpcHBlZE91dCA9IG1fdW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3JpZ2luOworICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQgbV91bmNsaXBwZWRMYXllck9yaWdpbiA9IEdyYXBoaWNzUG9p
bnQodW5jbGlwcGVkTGF5ZXJSZWN0LngoKSwgdW5jbGlwcGVkTGF5ZXJSZWN0LnkoKSk7CisgICAg
Y29uc3QgR3JhcGhpY3NTaXplIGNsaXBwZWRPdXQgPSBtX3VuY2xpcHBlZExheWVyT3JpZ2luIC0g
bV9sYXllck9yaWdpbjsKIAogICAgIC8vIFNldCB0aGUgb3JpZ2luIGFzIHRoZSB0b3AgbGVmdCBj
b3JuZXIgb2YgdGhlIHNjcmF0Y2ggaW1hZ2UsIG9yLCBpbiBjYXNlIHRoZXJlJ3MgYSBjbGlwcGVk
CiAgICAgLy8gb3V0IHJlZ2lvbiwgc2V0IHRoZSBvcmlnaW4gYWNjb3JkaW5nbHkgdG8gdGhlIGZ1
bGwgYm91bmRpbmcgcmVjdCdzIHRvcC1sZWZ0IGNvcm5lci4KICAgICBjb25zdCBmbG9hdCB0cmFu
c2xhdGlvblggPSAtbGF5ZXJBcmVhLngoKSArIGluZmxhdGlvbiAtIGZhYnNmKGNsaXBwZWRPdXQu
d2lkdGgoKSk7CiAgICAgY29uc3QgZmxvYXQgdHJhbnNsYXRpb25ZID0gLWxheWVyQXJlYS55KCkg
KyBpbmZsYXRpb24gLSBmYWJzZihjbGlwcGVkT3V0LmhlaWdodCgpKTsKLSAgICBtX2xheWVyQ29u
dGV4dFRyYW5zbGF0aW9uID0gRmxvYXRQb2ludCh0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7
CisgICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEdyYXBoaWNzUG9pbnQodHJhbnNsYXRp
b25YLCB0cmFuc2xhdGlvblkpOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobGF5ZXJG
bG9hdFJlY3QpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGxheWVyR3JhcGhpY3NSZWN0
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQ29udGV4dFNoYWRvd19oCiAKICNp
bmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogCiAgICAgQ29sb3IgbV9jb2xvcjsK
ICAgICBpbnQgbV9ibHVyRGlzdGFuY2U7Ci0gICAgRmxvYXRTaXplIG1fb2Zmc2V0OworICAgIEdy
YXBoaWNzU2l6ZSBtX29mZnNldDsKIAogICAgIENvbnRleHRTaGFkb3coKTsKLSAgICBDb250ZXh0
U2hhZG93KGNvbnN0IENvbG9yJiwgZmxvYXQgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCk7CisgICAgQ29udGV4dFNoYWRvdyhjb25zdCBDb2xvciYsIGZsb2F0IHJhZGl1cywgY29uc3Qg
R3JhcGhpY3NTaXplJiBvZmZzZXQpOwogCiAgICAgYm9vbCBtdXN0VXNlQ29udGV4dFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqKTsKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMTAsNyArMTEwLDcgQEAg
cHVibGljOgogICAgIC8vIG9yaWdpbmFsIGNvbnRleHQuIElmIGJsdXIgcmFkaXVzIGlzIHNwZWNp
ZmllZCwgdGhlIHNoYWRvdyB3aWxsIGJlCiAgICAgLy8gZmlsdGVyZWQgZmlyc3QuCiAKLSAgICBQ
bGF0Zm9ybUNvbnRleHQgYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIGxheWVyQXJlYSk7CisgICAgUGxhdGZvcm1Db250ZXh0IGJlZ2luU2hhZG93TGF5
ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBsYXllckFyZWEpOwogICAg
IHZvaWQgZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgc3RhdGljIHZvaWQg
cHVyZ2VTY3JhdGNoQnVmZmVyKCk7CiAKQEAgLTEyNiwxNCArMTI2LDE0IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgUGxhdGZvcm1JbWFnZSBtX2xheWVySW1hZ2U7IC8vIEJ1ZmZlciB0byB3aGVy
ZSB0aGUgdGVtcG9yYXJ5IHNoYWRvdyB3aWxsIGJlIGRyYXduIHRvLgogICAgIFBsYXRmb3JtQ29u
dGV4dCBtX2xheWVyQ29udGV4dDsgLy8gQ29udGV4dCB1c2VkIHRvIHBhaW50IHRoZSBzaGFkb3cg
dG8gdGhlIGxheWVyIGltYWdlLgotICAgIEZsb2F0UmVjdCBtX3NvdXJjZVJlY3Q7IC8vIFN1Yi1y
ZWN0IG9mIG1fbGF5ZXJJbWFnZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFkb3cgcGl4ZWxzLgotICAg
IEZsb2F0UG9pbnQgbV9sYXllck9yaWdpbjsgLy8gVG9wLWxlZnQgY29ybmVyIG9mIHRoZSAocG9z
c2libHkgY2xpcHBlZCkgYm91bmRpbmcgcmVjdCB0byBkcmF3IHRoZSBzaGFkb3cgdG8uCi0gICAg
RmxvYXRQb2ludCBtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uOyAvLyBUcmFuc2xhdGlvbiB0byBh
cHBseSB0byBtX2xheWVyQ29udGV4dCBmb3IgdGhlIHNoYWRvdyB0byBiZSBjb3JyZWN0bHkgY2xp
cHBlZC4KKyAgICBHcmFwaGljc1JlY3QgbV9zb3VyY2VSZWN0OyAvLyBTdWItcmVjdCBvZiBtX2xh
eWVySW1hZ2UgdGhhdCBjb250YWlucyB0aGUgc2hhZG93IHBpeGVscy4KKyAgICBHcmFwaGljc1Bv
aW50IG1fbGF5ZXJPcmlnaW47IC8vIFRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgKHBvc3NpYmx5IGNs
aXBwZWQpIGJvdW5kaW5nIHJlY3QgdG8gZHJhdyB0aGUgc2hhZG93IHRvLgorICAgIEdyYXBoaWNz
UG9pbnQgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbjsgLy8gVHJhbnNsYXRpb24gdG8gYXBwbHkg
dG8gbV9sYXllckNvbnRleHQgZm9yIHRoZSBzaGFkb3cgdG8gYmUgY29ycmVjdGx5IGNsaXBwZWQu
CiAgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogCiAgICAgdm9pZCBhZGp1c3RC
bHVyRGlzdGFuY2UoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSh1
bnNpZ25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBpbnQgc3RyaWRlKTsKLSAg
ICBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAg
SW50UmVjdCBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogCiAj
aWYgVVNFKENBSVJPKQogICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IEludFNpemUmIHRv
cExlZnRSYWRpdXMsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBJbnRTaXpl
JiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodFJhZGl1cywgZmxv
YXQgYWxwaGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDIg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJGbG9hdFBvaW50M0QuaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi12b2lkIEZsb2F0UG9pbnQzRDo6bm9ybWFsaXplKCkKLXsKLSAgICBmbG9hdCB0ZW1w
TGVuZ3RoID0gbGVuZ3RoKCk7Ci0KLSAgICBpZiAodGVtcExlbmd0aCkgewotICAgICAgICBtX3gg
Lz0gdGVtcExlbmd0aDsKLSAgICAgICAgbV95IC89IHRlbXBMZW5ndGg7Ci0gICAgICAgIG1feiAv
PSB0ZW1wTGVuZ3RoOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2lmbmRlZiBGbG9hdFBvaW50M0RfaAotI2RlZmluZSBGbG9hdFBvaW50M0RfaAot
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZsb2F0UG9pbnQzRCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRQb2ludDNEKCkKLSAgICAgICAgOiBt
X3goMCkKLSAgICAgICAgLCBtX3koMCkKLSAgICAgICAgLCBtX3ooMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgRmxvYXRQb2ludDNEKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCi0gICAgICAgIDog
bV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgICAgICwgbV96KHopCi0gICAgewotICAgIH0K
LQotICAgIEZsb2F0UG9pbnQzRChjb25zdCBGbG9hdFBvaW50JiBwKQotICAgICAgICA6IG1feChw
LngoKSkKLSAgICAgICAgLCBtX3kocC55KCkpCi0gICAgICAgICwgbV96KDApCi0gICAgewotICAg
IH0KLQotICAgIEZsb2F0UG9pbnQzRChjb25zdCBGbG9hdFBvaW50M0QmIHApCi0gICAgICAgIDog
bV94KHAueCgpKQotICAgICAgICAsIG1feShwLnkoKSkKLSAgICAgICAgLCBtX3oocC56KCkpCi0g
ICAgewotICAgIH0KLQotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICB2
b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9Ci0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9Ci0gICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQotCi0gICAg
ZmxvYXQgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQotICAgIHZvaWQgc2V0WihmbG9hdCB6KSB7
IG1feiA9IHo7IH0KLSAgICB2b2lkIHNldChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQotICAg
IHsKLSAgICAgICAgbV94ID0geDsKLSAgICAgICAgbV95ID0geTsKLSAgICAgICAgbV96ID0gejsK
LSAgICB9Ci0gICAgdm9pZCBtb3ZlKGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHopCi0gICAg
ewotICAgICAgICBtX3ggKz0gZHg7Ci0gICAgICAgIG1feSArPSBkeTsKLSAgICAgICAgbV96ICs9
IGR6OwotICAgIH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3op
Ci0gICAgewotICAgICAgICBtX3ggKj0gc3g7Ci0gICAgICAgIG1feSAqPSBzeTsKLSAgICAgICAg
bV96ICo9IHN6OwotICAgIH0KLQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhbV94ICYmICFtX3kgJiYgIW1fejsKLSAgICB9Ci0KLSAgICB2b2lkIG5vcm1h
bGl6ZSgpOwotCi0gICAgZmxvYXQgZG90KGNvbnN0IEZsb2F0UG9pbnQzRCYgYSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3ggKiBhLngoKSArIG1feSAqIGEueSgpICsgbV96ICogYS56
KCk7Ci0gICAgfQotCi0gICAgLy8gU2V0cyB0aGlzIEZsb2F0UG9pbnQzRCB0byB0aGUgY3Jvc3Mg
cHJvZHVjdCBvZiB0aGUgcGFzc2VkIHR3by4KLSAgICAvLyBJdCBpcyBzYWZlIGZvciAidGhpcyIg
dG8gYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9yIGJvdGggb2YgdGhlCi0gICAgLy8gYXJndW1lbnRz
LgotICAgIHZvaWQgY3Jvc3MoY29uc3QgRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50
M0QmIGIpCi0gICAgewotICAgICAgICBmbG9hdCB4ID0gYS55KCkgKiBiLnooKSAtIGEueigpICog
Yi55KCk7Ci0gICAgICAgIGZsb2F0IHkgPSBhLnooKSAqIGIueCgpIC0gYS54KCkgKiBiLnooKTsK
LSAgICAgICAgZmxvYXQgeiA9IGEueCgpICogYi55KCkgLSBhLnkoKSAqIGIueCgpOwotICAgICAg
ICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5OwotICAgICAgICBtX3ogPSB6OwotICAgIH0KLQot
ICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHJldHVybmluZyAidGhpcyBjcm9zcyBwb2ludCIg
YXMgYQotICAgIC8vIHN0YWNrLWFsbG9jYXRlZCByZXN1bHQuCi0gICAgRmxvYXRQb2ludDNEIGNy
b3NzKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBGbG9h
dFBvaW50M0QgcmVzdWx0OwotICAgICAgICByZXN1bHQuY3Jvc3MoKnRoaXMsIHBvaW50KTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZW5ndGhTcXVhcmVkKCkg
Y29uc3QgeyByZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQotICAgIGZsb2F0IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7IH0KLSAgICAKLSAgICBmbG9hdCBk
aXN0YW5jZVRvKGNvbnN0IEZsb2F0UG9pbnQzRCYgYSkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
ZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBtX3o7Ci19OwotCi1pbmxpbmUg
RmxvYXRQb2ludDNEJiBvcGVyYXRvciArPShGbG9hdFBvaW50M0QmIGEsIGNvbnN0IEZsb2F0UG9p
bnQzRCYgYikKLXsKLSAgICBhLm1vdmUoYi54KCksIGIueSgpLCBiLnooKSk7Ci0gICAgcmV0dXJu
IGE7Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50M0QmIG9wZXJhdG9yIC09KEZsb2F0UG9pbnQzRCYg
YSwgY29uc3QgRmxvYXRQb2ludDNEJiBiKQotewotICAgIGEubW92ZSgtYi54KCksIC1iLnkoKSwg
LWIueigpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0UG9pbnQzRCBvcGVyYXRv
cisoY29uc3QgRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIpCi17Ci0gICAg
cmV0dXJuIEZsb2F0UG9pbnQzRChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpLCBhLnooKSAr
IGIueigpKTsKLX0KLQotaW5saW5lIEZsb2F0UG9pbnQzRCBvcGVyYXRvci0oY29uc3QgRmxvYXRQ
b2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9p
bnQzRChhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpLCBhLnooKSAtIGIueigpKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFBvaW50M0QmIGEsIGNvbnN0IEZsb2F0
UG9pbnQzRCYgYikKLXsKLSAgICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkgPT0gYi55
KCkgJiYgYS56KCkgPT0gYi56KCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
RmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIpCi17Ci0gICAgcmV0dXJuIGEu
eCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgpIHx8IGEueigpICE9IGIueigpOwotfQotCi1p
bmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQzRCYgYSwgY29uc3QgRmxvYXRQ
b2ludDNEJiBiKQotewotICAgIC8vIGRvdCBwcm9kdWN0Ci0gICAgcmV0dXJuIGEuZG90KGIpOwot
fQotCi1pbmxpbmUgRmxvYXRQb2ludDNEIG9wZXJhdG9yKihmbG9hdCBrLCBjb25zdCBGbG9hdFBv
aW50M0QmIHYpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChrICogdi54KCksIGsgKiB2Lnko
KSwgayAqIHYueigpKTsKLX0KLQotaW5saW5lIEZsb2F0UG9pbnQzRCBvcGVyYXRvciooY29uc3Qg
RmxvYXRQb2ludDNEJiB2LCBmbG9hdCBrKQotewotICAgIHJldHVybiBGbG9hdFBvaW50M0QoayAq
IHYueCgpLCBrICogdi55KCksIGsgKiB2LnooKSk7Ci19Ci0KLWlubGluZSBmbG9hdCBGbG9hdFBv
aW50M0Q6OmRpc3RhbmNlVG8oY29uc3QgRmxvYXRQb2ludDNEJiBhKSBjb25zdAotewotICAgIHJl
dHVybiAoKnRoaXMgLSBhKS5sZW5ndGgoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRmxvYXRQb2ludDNEX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
Tm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2ludDo6RmxvYXRQ
b2ludChjb25zdCBJbnRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCi17Ci19Ci0K
LXZvaWQgRmxvYXRQb2ludDo6bm9ybWFsaXplKCkKLXsKLSAgICBmbG9hdCB0ZW1wTGVuZ3RoID0g
bGVuZ3RoKCk7Ci0KLSAgICBpZiAodGVtcExlbmd0aCkgewotICAgICAgICBtX3ggLz0gdGVtcExl
bmd0aDsKLSAgICAgICAgbV95IC89IHRlbXBMZW5ndGg7Ci0gICAgfQotfQotCi1mbG9hdCBGbG9h
dFBvaW50OjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVk
KCkpOwotfQotCi1GbG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBkb3VibGUgbmV3WCwgbmV3
WTsKLSAgICB0cmFuc2Zvcm0ubWFwKHN0YXRpY19jYXN0PGRvdWJsZT4obV94KSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX3kpLCBuZXdYLCBuZXdZKTsKLSAgICByZXR1cm4gbmFycm93UHJlY2lzaW9u
KG5ld1gsIG5ld1kpOwotfQotCi1GbG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSBjb25zdAotewotICAgIGRv
dWJsZSBuZXdYLCBuZXdZOwotICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91YmxlPiht
X3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOwotICAgIHJldHVybiBu
YXJyb3dQcmVjaXNpb24obmV3WCwgbmV3WSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmxvYXRQb2ludDo6
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLSAgICByZXR1cm4gRmxvYXRQ
b2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHkp
KTsKLX0KLQotZmxvYXQgZmluZFNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQmIGMpCi17Ci0gICAgaWYgKHAyLngoKSA9PSBwMS54KCkpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKLQotICAg
IC8vIHkgPSBteCArIGMKLSAgICBmbG9hdCBzbG9wZSA9IChwMi55KCkgLSBwMS55KCkpIC8gKHAy
LngoKSAtIHAxLngoKSk7Ci0gICAgYyA9IHAxLnkoKSAtIHNsb3BlICogcDEueCgpOwotICAgIHJl
dHVybiBzbG9wZTsKLX0KLQotYm9vbCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgZDEsIGNvbnN0IEZs
b2F0UG9pbnQmIGQyLCBGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pIAotewotICAgIGZsb2F0IHBP
ZmZzZXQgPSAwOwotICAgIGZsb2F0IHBTbG9wZSA9IGZpbmRTbG9wZShwMSwgcDIsIHBPZmZzZXQp
OwotCi0gICAgZmxvYXQgZE9mZnNldCA9IDA7Ci0gICAgZmxvYXQgZFNsb3BlID0gZmluZFNsb3Bl
KGQxLCBkMiwgZE9mZnNldCk7Ci0KLSAgICBpZiAoZFNsb3BlID09IHBTbG9wZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChwU2xvcGUgPT0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmluZmluaXR5KCkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uLnNldFgocDEueCgp
KTsKLSAgICAgICAgaW50ZXJzZWN0aW9uLnNldFkoZFNsb3BlICogaW50ZXJzZWN0aW9uLngoKSAr
IGRPZmZzZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGRTbG9wZSA9
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgewotICAgICAgICBpbnRl
cnNlY3Rpb24uc2V0WChkMS54KCkpOwotICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WShwU2xvcGUg
KiBpbnRlcnNlY3Rpb24ueCgpICsgcE9mZnNldCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICAKLSAgICAvLyBGaW5kIHggYXQgaW50ZXJzZWN0aW9uLCB3aGVyZSB5cyBvdmVybGFw
OyB4ID0gKGMnIC0gYykgLyAobSAtIG0nKQotICAgIGludGVyc2VjdGlvbi5zZXRYKChkT2Zmc2V0
IC0gcE9mZnNldCkgLyAocFNsb3BlIC0gZFNsb3BlKSk7Ci0gICAgaW50ZXJzZWN0aW9uLnNldFko
cFNsb3BlICogaW50ZXJzZWN0aW9uLngoKSArIHBPZmZzZXQpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEZsb2F0UG9pbnRfaAotI2RlZmluZSBGbG9hdFBvaW50X2gKLQot
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9N
SVVNKQotdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSNpZmRlZiBO
U0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwotdHlwZWRlZiBzdHJ1Y3Qg
Q0dQb2ludCBOU1BvaW50OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7
Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAicWdsb2JhbC5o
IgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUG9pbnRGOwotUVRfRU5EX05BTUVTUEFDRQot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJQb2ludDsKLSNlbmRpZgotCi0j
aWYgVVNFKFNLSUEpCi1zdHJ1Y3QgU2tQb2ludDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBGbG9hdFBvaW50IHsK
LXB1YmxpYzoKLSAgICBGbG9hdFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KLSAgICBGbG9h
dFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9Ci0gICAgRmxvYXRQ
b2ludChjb25zdCBJbnRQb2ludCYpOwotCi0KLSAgICBzdGF0aWMgRmxvYXRQb2ludCB6ZXJvKCkg
eyByZXR1cm4gRmxvYXRQb2ludCgpOyB9Ci0KLSAgICBzdGF0aWMgRmxvYXRQb2ludCBuYXJyb3dQ
cmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5KTsKLQotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJl
dHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICB2
b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsg
bV95ID0geTsgfQotICAgIHZvaWQgc2V0KGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgewotICAgICAg
ICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5OwotICAgIH0KLSAgICB2b2lkIG1vdmUoZmxvYXQg
ZHgsIGZsb2F0IGR5KQotICAgIHsKLSAgICAgICAgbV94ICs9IGR4OwotICAgICAgICBtX3kgKz0g
ZHk7Ci0gICAgfQotICAgIHZvaWQgbW92ZShjb25zdCBJbnRTaXplJiBhKQotICAgIHsKLSAgICAg
ICAgbV94ICs9IGEud2lkdGgoKTsKLSAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7Ci0gICAgfQot
ICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIGEpCi0gICAgewotICAgICAgICBtX3ggKz0g
YS53aWR0aCgpOwotICAgICAgICBtX3kgKz0gYS5oZWlnaHQoKTsKLSAgICB9Ci0gICAgdm9pZCBt
b3ZlQnkoY29uc3QgSW50UG9pbnQmIGEpCi0gICAgewotICAgICAgICBtX3ggKz0gYS54KCk7Ci0g
ICAgICAgIG1feSArPSBhLnkoKTsKLSAgICB9Ci0gICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxvYXRQ
b2ludCYgYSkKLSAgICB7Ci0gICAgICAgIG1feCArPSBhLngoKTsKLSAgICAgICAgbV95ICs9IGEu
eSgpOwotICAgIH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKLSAgICB7Ci0g
ICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5OwotICAgIH0KLQotICAgIHZvaWQg
bm9ybWFsaXplKCk7Ci0KLSAgICBmbG9hdCBkb3QoY29uc3QgRmxvYXRQb2ludCYgYSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ggKiBhLngoKSArIG1feSAqIGEueSgpOwotICAgIH0K
LQotICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0OwotICAgIGZsb2F0IGxlbmd0aFNxdWFyZWQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsKLSAgICB9
Ci0KLSAgICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3RoZXIpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gsIG90aGVy
Lm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2lu
dCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9p
bnQobV95LCBtX3gpOwotICAgIH0KLQotI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NI
Uk9NSVVNKQotICAgIEZsb2F0UG9pbnQoY29uc3QgQ0dQb2ludCYpOwotICAgIG9wZXJhdG9yIENH
UG9pbnQoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
TlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCi0gICAgICAgIHx8
IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSAgICBGbG9hdFBvaW50KGNvbnN0
IE5TUG9pbnQmKTsKLSAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKFFUKQotICAgIEZsb2F0UG9pbnQoY29uc3QgUVBvaW50RiYpOwotICAgIG9wZXJh
dG9yIFFQb2ludEYoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSEFJS1UpCi0gICAg
RmxvYXRQb2ludChjb25zdCBCUG9pbnQmKTsKLSAgICBvcGVyYXRvciBCUG9pbnQoKSBjb25zdDsK
LSNlbmRpZgotCi0jaWYgVVNFKFNLSUEpCi0gICAgb3BlcmF0b3IgU2tQb2ludCgpIGNvbnN0Owot
ICAgIEZsb2F0UG9pbnQoY29uc3QgU2tQb2ludCYpOwotI2VuZGlmCi0KLSAgICBGbG9hdFBvaW50
IG1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwotICAg
IEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCwgbV95OwotfTsKLQotCi1pbmxpbmUgRmxvYXRQ
b2ludCYgb3BlcmF0b3IrPShGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0g
ICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlu
bGluZSBGbG9hdFBvaW50JiBvcGVyYXRvcis9KEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9p
bnQmIGIpCi17Ci0gICAgYS5tb3ZlKGIueCgpLCBiLnkoKSk7Ci0gICAgcmV0dXJuIGE7Ci19Ci0K
LWlubGluZSBGbG9hdFBvaW50JiBvcGVyYXRvci09KEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0
U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIuaGVpZ2h0KCkpOwotICAgIHJl
dHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvcisoY29uc3QgRmxvYXRQb2lu
dCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBGbG9hdFBvaW50KGEueCgp
ICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRmxvYXRQb2lu
dCBvcGVyYXRvcisoY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikKLXsK
LSAgICByZXR1cm4gRmxvYXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKLX0K
LQotaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvci0oY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3Qg
RmxvYXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKGEueCgpIC0gYi54KCksIGEu
eSgpIC0gYi55KCkpOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvci0oY29uc3QgRmxv
YXRQb2ludCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBGbG9hdFBvaW50
KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQmIGIpCi17
Ci0gICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIueSgpOwotfQotCi1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQm
IGIpCi17Ci0gICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgpOwotfQot
Ci1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0
UG9pbnQmIGIpCi17Ci0gICAgLy8gZG90IHByb2R1Y3QKLSAgICByZXR1cm4gYS5kb3QoYik7Ci19
Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkK
LXsKLSAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC54KCkpKSwg
c3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55KCkpKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCBm
bG9vcmVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gSW50UG9p
bnQoc3RhdGljX2Nhc3Q8aW50PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkpKTsKLX0K
LQotaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsK
LSAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8
aW50PihwLnkoKSkpOwotfQotCi1mbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCYgYyk7Ci0KLS8vIEZpbmQgcG9pbnQgd2hlcmUg
bGluZXMgdGhyb3VnaCB0aGUgdHdvIHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3QuIFJldHVybnMg
ZmFsc2UgaWYgdGhlIGxpbmVzIGRvbid0IGludGVyc2VjdC4KLWJvb2wgZmluZEludGVyc2VjdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGNvbnN0IEZsb2F0
UG9pbnQmIGQxLCBjb25zdCBGbG9hdFBvaW50JiBkMiwgRmxvYXRQb2ludCYgaW50ZXJzZWN0aW9u
KTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UXVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRRdWFkLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3RkOjptaW47
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBmbG9hdCBtaW40KGZsb2F0
IGEsIGZsb2F0IGIsIGZsb2F0IGMsIGZsb2F0IGQpCi17Ci0gICAgcmV0dXJuIG1pbihtaW4oYSwg
YiksIG1pbihjLCBkKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgbWF4NChmbG9hdCBhLCBm
bG9hdCBiLCBmbG9hdCBjLCBmbG9hdCBkKQotewotICAgIHJldHVybiBtYXgobWF4KGEsIGIpLCBt
YXgoYywgZCkpOwotfQotCi1pbmxpbmUgZmxvYXQgZG90KGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29u
c3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgKiBiLndpZHRoKCkgKyBh
LmhlaWdodCgpICogYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIGJvb2wgaXNQb2ludEluVHJpYW5n
bGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYgdDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHQyLCBjb25zdCBGbG9hdFBvaW50JiB0MykKLXsKLSAgICAvLyBDb21wdXRlIHZlY3Rv
cnMgICAgICAgIAotICAgIEZsb2F0U2l6ZSB2MCA9IHQzIC0gdDE7Ci0gICAgRmxvYXRTaXplIHYx
ID0gdDIgLSB0MTsKLSAgICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7Ci0gICAgCi0gICAgLy8gQ29t
cHV0ZSBkb3QgcHJvZHVjdHMKLSAgICBmbG9hdCBkb3QwMCA9IGRvdCh2MCwgdjApOwotICAgIGZs
b2F0IGRvdDAxID0gZG90KHYwLCB2MSk7Ci0gICAgZmxvYXQgZG90MDIgPSBkb3QodjAsIHYyKTsK
LSAgICBmbG9hdCBkb3QxMSA9IGRvdCh2MSwgdjEpOwotICAgIGZsb2F0IGRvdDEyID0gZG90KHYx
LCB2Mik7Ci0KLSAgICAvLyBDb21wdXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzCi0gICAgZmxv
YXQgaW52RGVub20gPSAxLjBmIC8gKGRvdDAwICogZG90MTEgLSBkb3QwMSAqIGRvdDAxKTsKLSAg
ICBmbG9hdCB1ID0gKGRvdDExICogZG90MDIgLSBkb3QwMSAqIGRvdDEyKSAqIGludkRlbm9tOwot
ICAgIGZsb2F0IHYgPSAoZG90MDAgKiBkb3QxMiAtIGRvdDAxICogZG90MDIpICogaW52RGVub207
Ci0KLSAgICAvLyBDaGVjayBpZiBwb2ludCBpcyBpbiB0cmlhbmdsZQotICAgIHJldHVybiAodSA+
PSAwKSAmJiAodiA+PSAwKSAmJiAodSArIHYgPD0gMSk7Ci19Ci0KLUZsb2F0UmVjdCBGbG9hdFF1
YWQ6OmJvdW5kaW5nQm94KCkgY29uc3QKLXsKLSAgICBmbG9hdCBsZWZ0ICAgPSBtaW40KG1fcDEu
eCgpLCBtX3AyLngoKSwgbV9wMy54KCksIG1fcDQueCgpKTsKLSAgICBmbG9hdCB0b3AgICAgPSBt
aW40KG1fcDEueSgpLCBtX3AyLnkoKSwgbV9wMy55KCksIG1fcDQueSgpKTsKLQotICAgIGZsb2F0
IHJpZ2h0ICA9IG1heDQobV9wMS54KCksIG1fcDIueCgpLCBtX3AzLngoKSwgbV9wNC54KCkpOwot
ICAgIGZsb2F0IGJvdHRvbSA9IG1heDQobV9wMS55KCksIG1fcDIueSgpLCBtX3AzLnkoKSwgbV9w
NC55KCkpOwotICAgIAotICAgIHJldHVybiBGbG9hdFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxl
ZnQsIGJvdHRvbSAtIHRvcCk7Ci19Ci0KLWJvb2wgRmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKG1fcDEueCgpID09IG1fcDIueCgpICYmIG1fcDIueSgpID09
IG1fcDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYmIG1fcDQueSgpID09IG1fcDEueSgp
KQotICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkgJiYgbV9wMi54KCkgPT0gbV9wMy54
KCkgJiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54KCkgPT0gbV9wMS54KCkpOwotfQot
Ci1ib29sIEZsb2F0UXVhZDo6Y29udGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25z
dAotewotICAgIHJldHVybiBpc1BvaW50SW5UcmlhbmdsZShwLCBtX3AxLCBtX3AyLCBtX3AzKSB8
fCBpc1BvaW50SW5UcmlhbmdsZShwLCBtX3AxLCBtX3AzLCBtX3A0KTsKLX0gCi0KLS8vIE5vdGUg
dGhhdCB3ZSBvbmx5IGhhbmRsZSBjb252ZXggcXVhZHMgaGVyZS4KLWJvb2wgRmxvYXRRdWFkOjpj
b250YWluc1F1YWQoY29uc3QgRmxvYXRRdWFkJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29udGFpbnNQb2ludChvdGhlci5wMSgpKSAmJiBjb250YWluc1BvaW50KG90aGVyLnAyKCkpICYm
IGNvbnRhaW5zUG9pbnQob3RoZXIucDMoKSkgJiYgY29udGFpbnNQb2ludChvdGhlci5wNCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRmxvYXRRdWFkX2gKLSNkZWZpbmUgRmxvYXRRdWFkX2gK
LQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBGbG9hdFF1YWQg
aXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBvZnRlbiByZXByZXNlbnRpbmcgdGhlIHJlc3Vs
dCBvZgotLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0aHJvdWdoIHRyYW5zZm9ybXMuIFdoZW4gaW5p
dGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQotLy8gcG9pbnRzIGFyZSBpbiBjbG9ja3dpc2Ugb3Jk
ZXIgZnJvbSB0b3AgbGVmdC4KLWNsYXNzIEZsb2F0UXVhZCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRR
dWFkKCkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRRdWFkKGNvbnN0IEZsb2F0UG9pbnQmIHAx
LCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMsIGNvbnN0IEZsb2F0
UG9pbnQmIHA0KQotICAgICAgICA6IG1fcDEocDEpCi0gICAgICAgICwgbV9wMihwMikKLSAgICAg
ICAgLCBtX3AzKHAzKQotICAgICAgICAsIG1fcDQocDQpCi0gICAgewotICAgIH0KLQotICAgIEZs
b2F0UXVhZChjb25zdCBGbG9hdFJlY3QmIGluUmVjdCkKLSAgICAgICAgOiBtX3AxKGluUmVjdC5s
b2NhdGlvbigpKQotICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0LnkoKSkKLSAg
ICAgICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCi0gICAgICAgICwgbV9w
NChpblJlY3QueCgpLCBpblJlY3QubWF4WSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFBv
aW50IHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsgfQotICAgIEZsb2F0UG9pbnQgcDIoKSBjb25z
dCB7IHJldHVybiBtX3AyOyB9Ci0gICAgRmxvYXRQb2ludCBwMygpIGNvbnN0IHsgcmV0dXJuIG1f
cDM7IH0KLSAgICBGbG9hdFBvaW50IHA0KCkgY29uc3QgeyByZXR1cm4gbV9wNDsgfQotCi0gICAg
dm9pZCBzZXRQMShjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDEgPSBwOyB9Ci0gICAgdm9pZCBz
ZXRQMihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDIgPSBwOyB9Ci0gICAgdm9pZCBzZXRQMyhj
b25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDMgPSBwOyB9Ci0gICAgdm9pZCBzZXRQNChjb25zdCBG
bG9hdFBvaW50JiBwKSB7IG1fcDQgPSBwOyB9Ci0KLSAgICAvLyBpc0VtcHR5IHRlc3RzIHRoYXQg
dGhlIGJvdW5kaW5nIGJveCBpcyBlbXB0eS4gVGhpcyB3aWxsIG5vdCBpZGVudGlmeQotICAgIC8v
ICJzbGFudGVkIiBlbXB0eSBxdWFkcy4KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBib3VuZGluZ0JveCgpLmlzRW1wdHkoKTsgfQotCi0gICAgLy8gVGVzdHMgd2hldGhlciB0aGlz
IHF1YWQgY2FuIGJlIGxvc3NsZXNzbHkgcmVwcmVzZW50ZWQgYnkgYSBGbG9hdFJlY3QsCi0gICAg
Ly8gdGhhdCBpcywgaWYgdHdvIGVkZ2VzIGFyZSBwYXJhbGxlbCB0byB0aGUgeC1heGlzIGFuZCB0
aGUgb3RoZXIgdHdvCi0gICAgLy8gYXJlIHBhcmFsbGVsIHRvIHRoZSB5LWF4aXMuIElmIHRoaXMg
bWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlCi0gICAgLy8gY29ycmVzcG9uZGluZyBGbG9hdFJlY3Qg
Y2FuIGJlIHJldHJpZXZlZCB3aXRoIGJvdW5kaW5nQm94KCkuCi0gICAgYm9vbCBpc1JlY3RpbGlu
ZWFyKCkgY29uc3Q7Ci0KLSAgICAvLyBUZXN0cyB3aGV0aGVyIHRoZSBnaXZlbiBwb2ludCBpcyBp
bnNpZGUsIG9yIG9uIGFuIGVkZ2Ugb3IgY29ybmVyIG9mIHRoaXMgcXVhZC4KLSAgICBib29sIGNv
bnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotCi0gICAgLy8gVGVzdHMgd2hl
dGhlciB0aGUgZm91ciBjb3JuZXJzIG9mIG90aGVyIGFyZSBpbnNpZGUsIG9yIGNvaW5jaWRlbnQg
d2l0aCB0aGUgc2lkZXMgb2YgdGhpcyBxdWFkLgotICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9ubHkg
d29ya3MgZm9yIGNvbnZleCBxdWFkcywgYnV0IHRoYXQgaW5jbHVkZXMgYWxsIHF1YWRzIHRoYXQg
b3JpZ2luYXRlCi0gICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KLSAgICBib29sIGNvbnRh
aW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKLQotICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCgpIGNvbnN0OwotICAgIEludFJlY3QgZW5jbG9zaW5nQm91bmRpbmdCb3goKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3goKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotICAgIHsKLSAg
ICAgICAgbV9wMSArPSBvZmZzZXQ7Ci0gICAgICAgIG1fcDIgKz0gb2Zmc2V0OwotICAgICAgICBt
X3AzICs9IG9mZnNldDsKLSAgICAgICAgbV9wNCArPSBvZmZzZXQ7Ci0gICAgfQotCi0gICAgdm9p
ZCBtb3ZlKGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICB7Ci0gICAgICAgIG1fcDEubW92ZShkeCwg
ZHkpOwotICAgICAgICBtX3AyLm1vdmUoZHgsIGR5KTsKLSAgICAgICAgbV9wMy5tb3ZlKGR4LCBk
eSk7Ci0gICAgICAgIG1fcDQubW92ZShkeCwgZHkpOwotICAgIH0KLQotICAgIHZvaWQgc2NhbGUo
ZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIHsKLSAgICAgICAgbV9wMS5zY2FsZShkeCwgZHkpOwot
ICAgICAgICBtX3AyLnNjYWxlKGR4LCBkeSk7Ci0gICAgICAgIG1fcDMuc2NhbGUoZHgsIGR5KTsK
LSAgICAgICAgbV9wNC5zY2FsZShkeCwgZHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBGbG9h
dFBvaW50IG1fcDE7Ci0gICAgRmxvYXRQb2ludCBtX3AyOwotICAgIEZsb2F0UG9pbnQgbV9wMzsK
LSAgICBGbG9hdFBvaW50IG1fcDQ7Ci19OwotCi1pbmxpbmUgRmxvYXRRdWFkJiBvcGVyYXRvcis9
KEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIGEubW92ZShiKTsKLSAg
ICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0UXVhZCYgb3BlcmF0b3ItPShGbG9hdFF1YWQm
IGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIuaGVp
Z2h0KCkpOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQotewotICAgIHJldHVybiBhLnAxKCkg
PT0gYi5wMSgpICYmCi0gICAgICAgICAgIGEucDIoKSA9PSBiLnAyKCkgJiYgCi0gICAgICAgICAg
IGEucDMoKSA9PSBiLnAzKCkgJiYKLSAgICAgICAgICAgYS5wNCgpID09IGIucDQoKTsKLX0KLQot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVh
ZCYgYikKLXsKLSAgICByZXR1cm4gYS5wMSgpICE9IGIucDEoKSB8fAotICAgICAgICAgICBhLnAy
KCkgIT0gYi5wMigpIHx8IAotICAgICAgICAgICBhLnAzKCkgIT0gYi5wMygpIHx8Ci0gICAgICAg
ICAgIGEucDQoKSAhPSBiLnA0KCk7Ci19Ci0KLX0gICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0K
LSNlbmRpZiAvLyBGbG9hdFF1YWRfaAotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lh
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1hdGguaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0
ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNv
bnN0IEludFJlY3QmIHIpIDogbV9sb2NhdGlvbihyLmxvY2F0aW9uKCkpLCBtX3NpemUoci5zaXpl
KCkpCi17Ci19Ci0KLUZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5hcnJvd1ByZWNpc2lvbihkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKLXsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeCksIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoeSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGhlaWdodCkpOwotfQotCi1ib29sIEZsb2F0UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBGbG9h
dFJlY3QmIG90aGVyKSBjb25zdAotewotICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVz
IG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCi0gICAgcmV0dXJuICFpc0VtcHR5KCkg
JiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3Ro
ZXIueCgpIDwgbWF4WCgpCi0gICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55
KCkgPCBtYXhZKCk7Ci19Ci0KLWJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFJl
Y3QmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgo
KSA+PSBvdGhlci5tYXhYKCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkg
Pj0gb3RoZXIubWF4WSgpOwotfQotCi12b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZs
b2F0UmVjdCYgb3RoZXIpCi17Ci0gICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVyLngoKSk7Ci0g
ICAgZmxvYXQgdCA9IG1heCh5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9IG1pbihtYXhY
KCksIG90aGVyLm1heFgoKSk7Ci0gICAgZmxvYXQgYiA9IG1pbihtYXhZKCksIG90aGVyLm1heFko
KSk7Ci0KLSAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRl
cnNlY3RpbmcgY2FzZXMuCi0gICAgaWYgKGwgPj0gciB8fCB0ID49IGIpIHsKLSAgICAgICAgbCA9
IDA7Ci0gICAgICAgIHQgPSAwOwotICAgICAgICByID0gMDsKLSAgICAgICAgYiA9IDA7Ci0gICAg
fQotCi0gICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGwsIHQsIHIsIGIpOwotfQotCi12
b2lkIEZsb2F0UmVjdDo6dW5pdGUoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKLXsKLSAgICAvLyBI
YW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBpZiAob3RoZXIuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAqdGhpcyA9
IG90aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQgbCA9IG1pbih4KCks
IG90aGVyLngoKSk7Ci0gICAgZmxvYXQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxv
YXQgciA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7Ci0gICAgZmxvYXQgYiA9IG1heChtYXhZ
KCksIG90aGVyLm1heFkoKSk7Ci0KLSAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobCwg
dCwgciwgYik7Ci19Ci0KLXZvaWQgRmxvYXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25zdCBGbG9h
dFJlY3QmIG90aGVyKQotewotICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0
LgotICAgIGlmICghb3RoZXIud2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXdpZHRoKCkgJiYgIWhlaWdodCgpKSB7Ci0gICAgICAgICp0aGlzID0g
b3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZWZ0ID0gbWluKHgo
KSwgb3RoZXIueCgpKTsKLSAgICBmbG9hdCB0b3AgPSBtaW4oeSgpLCBvdGhlci55KCkpOwotICAg
IGZsb2F0IHJpZ2h0ID0gbWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKLSAgICBmbG9hdCBib3R0
b20gPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOwotCi0gICAgc2V0TG9jYXRpb25BbmRTaXpl
RnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci19Ci0KLXZvaWQgRmxvYXRSZWN0
OjpzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCi17Ci0gICAgbV9sb2NhdGlvbi5zZXRYKHgoKSAq
IHN4KTsKLSAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogc3kpOwotICAgIG1fc2l6ZS5zZXRXaWR0
aCh3aWR0aCgpICogc3gpOwotICAgIG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KCkgKiBzeSk7Ci19
Ci0KLXZvaWQgRmxvYXRSZWN0OjpmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29u
c3QgRmxvYXRQb2ludCYgcDEpCi17Ci0gICAgZmxvYXQgbGVmdCA9IG1pbihwMC54KCksIHAxLngo
KSk7Ci0gICAgZmxvYXQgdG9wID0gbWluKHAwLnkoKSwgcDEueSgpKTsKLSAgICBmbG9hdCByaWdo
dCA9IG1heChwMC54KCksIHAxLngoKSk7Ci0gICAgZmxvYXQgYm90dG9tID0gbWF4KHAwLnkoKSwg
cDEueSgpKTsKLQotICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOwotfQotCi1uYW1lc3BhY2UgewotLy8gSGVscGVycyBmb3IgMy0gYW5kIDQt
d2F5IG1heCBhbmQgbWluLgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQgbWluMyhjb25zdCBU
JiB2MSwgY29uc3QgVCYgdjIsIGNvbnN0IFQmIHYzKQotewotICAgIHJldHVybiBtaW4obWluKHYx
LCB2MiksIHYzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UIG1heDMoY29uc3QgVCYg
djEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MykKLXsKLSAgICByZXR1cm4gbWF4KG1heCh2MSwg
djIpLCB2Myk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCBtaW40KGNvbnN0IFQmIHYx
LCBjb25zdCBUJiB2MiwgY29uc3QgVCYgdjMsIGNvbnN0IFQmIHY0KQotewotICAgIHJldHVybiBt
aW4obWluKHYxLCB2MiksIG1pbih2MywgdjQpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1UIG1heDQoY29uc3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MywgY29uc3QgVCYg
djQpCi17Ci0gICAgcmV0dXJuIG1heChtYXgodjEsIHYyKSwgbWF4KHYzLCB2NCkpOwotfQotCi19
IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBGbG9hdFJlY3Q6OmZpdFRvUG9pbnRzKGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2lu
dCYgcDIpCi17Ci0gICAgZmxvYXQgbGVmdCA9IG1pbjMocDAueCgpLCBwMS54KCksIHAyLngoKSk7
Ci0gICAgZmxvYXQgdG9wID0gbWluMyhwMC55KCksIHAxLnkoKSwgcDIueSgpKTsKLSAgICBmbG9h
dCByaWdodCA9IG1heDMocDAueCgpLCBwMS54KCksIHAyLngoKSk7Ci0gICAgZmxvYXQgYm90dG9t
ID0gbWF4MyhwMC55KCksIHAxLnkoKSwgcDIueSgpKTsKLQotICAgIHNldExvY2F0aW9uQW5kU2l6
ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotfQotCi12b2lkIEZsb2F0UmVj
dDo6Zml0VG9Qb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAx
LCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMpCi17Ci0gICAgZmxv
YXQgbGVmdCA9IG1pbjQocDAueCgpLCBwMS54KCksIHAyLngoKSwgcDMueCgpKTsKLSAgICBmbG9h
dCB0b3AgPSBtaW40KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7Ci0gICAgZmxvYXQg
cmlnaHQgPSBtYXg0KHAwLngoKSwgcDEueCgpLCBwMi54KCksIHAzLngoKSk7Ci0gICAgZmxvYXQg
Ym90dG9tID0gbWF4NChwMC55KCksIHAxLnkoKSwgcDIueSgpLCBwMy55KCkpOwotCi0gICAgc2V0
TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci19Ci0K
LUludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihyZWN0LngoKSk7Ci0gICAgZmxvYXQgdG9wID0gZmxvb3JmKHJl
Y3QueSgpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4WCgpKSAtIGxlZnQ7Ci0g
ICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkpIC0gdG9wOwotICAgIAotICAgIHJl
dHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKGxlZnQpLCBjbGFtcFRvSW50ZWdlcih0b3ApLCAK
LSAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9JbnRlZ2Vy
KGhlaWdodCkpOwotfQotCi1GbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAg
ICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAwKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBmbG9hdCB3aWR0aFNjYWxlID0gZGVzdFJl
Y3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKLSAgICBmbG9hdCBoZWlnaHRTY2FsZSA9IGRl
c3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0
KGRlc3RSZWN0LngoKSArIChyLngoKSAtIHNyY1JlY3QueCgpKSAqIHdpZHRoU2NhbGUsCi0gICAg
ICAgICAgICAgICAgICAgICBkZXN0UmVjdC55KCkgKyAoci55KCkgLSBzcmNSZWN0LnkoKSkgKiBo
ZWlnaHRTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSAqIHdpZHRoU2NhbGUs
IHIuaGVpZ2h0KCkgKiBoZWlnaHRTY2FsZSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUg
Tm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRmxvYXRSZWN0X2gK
LSNkZWZpbmUgRmxvYXRSZWN0X2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2lmIFVT
RShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQotdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0
IENHUmVjdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01J
VU0pICYmIE9TKERBUldJTikpCi0jaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKLXR5cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7Ci0jZWxzZQotdHlwZWRl
ZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0o
UVQpCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFSZWN0RjsKLVFUX0VORF9OQU1FU1BBQ0UK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQotY2xhc3Mgd3hSZWN0MkRE
b3VibGU7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEhBSUtVKQotY2xhc3MgQlJlY3Q7Ci0jZW5k
aWYKLQotI2lmIFVTRShTS0lBKQotc3RydWN0IFNrUmVjdDsKLSNlbmRpZgotCi0jaWYgVVNFKENB
SVJPKQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZWN0YW5nbGVfdDsK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShPUEVOVkcpCi1j
bGFzcyBWR1JlY3Q7Ci0jZW5kaWYKLQotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFBvaW50Owot
Ci1jbGFzcyBGbG9hdFJlY3QgewotcHVibGljOgotICAgIEZsb2F0UmVjdCgpIHsgfQotICAgIEZs
b2F0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBzaXpl
KQotICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9Ci0gICAg
RmxvYXRSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi0g
ICAgICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKSwgbV9zaXplKEZsb2F0U2l6ZSh3
aWR0aCwgaGVpZ2h0KSkgeyB9Ci0gICAgRmxvYXRSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAg
IHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91
YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgRmxvYXRTaXplIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLQotICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Ci0KLSAgICBmbG9hdCB4
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KLSAgICBmbG9hdCB5KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KLSAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1
cm4geCgpICsgd2lkdGgoKTsgfQotICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkg
KyBoZWlnaHQoKTsgfQotICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndp
ZHRoKCk7IH0KLSAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0
KCk7IH0KLQotICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQot
ICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAgIHZvaWQg
c2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQotICAgIHZv
aWQgc2V0SGVpZ2h0KGZsb2F0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0K
LQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0K
LQotICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2ludCh4KCkg
KyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQotCi0gICAgdm9pZCBtb3ZlKGNv
bnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0YTsgfSAKLSAgICB2b2lk
IG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBkZWx0YSkgeyBtX2xvY2F0aW9uLm1vdmUoZGVsdGEu
eCgpLCBkZWx0YS55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKGZsb2F0IGR4LCBmbG9hdCBkeSkgeyBt
X2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfQotCi0gICAgdm9pZCBleHBhbmQoY29uc3QgRmxvYXRT
aXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9Ci0gICAgdm9pZCBleHBhbmQoZmxvYXQgZHcs
IGZsb2F0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29udHJhY3Qo
Y29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Ci0gICAgdm9pZCBjb250
cmFjdChmbG9hdCBkdywgZmxvYXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KLQot
ICAgIHZvaWQgc2hpZnRYRWRnZVRvKGZsb2F0IGVkZ2UpCi0gICAgewotICAgICAgICBmbG9hdCBk
ZWx0YSA9IGVkZ2UgLSB4KCk7Ci0gICAgICAgIHNldFgoZWRnZSk7Ci0gICAgICAgIHNldFdpZHRo
KHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lkIHNoaWZ0
TWF4WEVkZ2VUbyhmbG9hdCBlZGdlKQotICAgIHsKLSAgICAgICAgZmxvYXQgZGVsdGEgPSBlZGdl
IC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLjBmLCB3aWR0aCgpICsgZGVs
dGEpKTsKLSAgICB9Ci0gICAgdm9pZCBzaGlmdFlFZGdlVG8oZmxvYXQgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIGZsb2F0IGRlbHRhID0gZWRnZSAtIHkoKTsKLSAgICAgICAgc2V0WShlZGdlKTsKLSAg
ICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4KDAuMGYsIGhlaWdodCgpIC0gZGVsdGEpKTsKLSAgICB9
Ci0gICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oZmxvYXQgZWRnZSkKLSAgICB7Ci0gICAgICAgIGZs
b2F0IGRlbHRhID0gZWRnZSAtIG1heFkoKTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4KDAu
MGYsIGhlaWdodCgpICsgZGVsdGEpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IG1pblhNaW5Z
Q29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVm
dAotICAgIEZsb2F0UG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAv
LyB0eXBpY2FsbHkgdG9wUmlnaHQKLSAgICBGbG9hdFBvaW50IG1pblhNYXhZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gRmxvYXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBt
X3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0Ci0gICAgRmxvYXRQb2lu
dCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV9sb2NhdGlvbi54
KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9
IC8vIHR5cGljYWxseSBib3R0b21SaWdodAotCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZs
b2F0UmVjdCYpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0JikgY29u
c3Q7Ci0KLSAgICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHVu
aXRlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29uc3QgRmxv
YXRSZWN0Jik7Ci0KLSAgICAvLyBOb3RlLCB0aGlzIGRvZXNuJ3QgbWF0Y2ggd2hhdCBJbnRSZWN0
Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQgdmVyc2lvbgotICAgIC8vIGlzIHJl
YWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgxIHJlY3QsIGJ1dCB0aGF0IGRvZXNu
J3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KLSAgICBib29sIGNvbnRhaW5zKGZsb2F0IHB4LCBm
bG9hdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9IG1heFgo
KSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBw
b2ludC55KCkpOyB9Ci0KLSAgICB2b2lkIGluZmxhdGVYKGZsb2F0IGR4KSB7Ci0gICAgICAgIG1f
bG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKLSAgICAgICAgbV9zaXplLnNldFdp
ZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7Ci0gICAgfQotICAgIHZvaWQgaW5mbGF0ZVko
ZmxvYXQgZHkpIHsKLSAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgpIC0gZHkp
OwotICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsgZHkpOwot
ICAgIH0KLSAgICB2b2lkIGluZmxhdGUoZmxvYXQgZCkgeyBpbmZsYXRlWChkKTsgaW5mbGF0ZVko
ZCk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KLSAgICB2b2lk
IHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSk7Ci0KLSAgICBGbG9hdFJlY3QgdHJhbnNwb3NlZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQo
KSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9Ci0KLSAgICAvLyBSZS1pbml0aWFsaXplcyB0
aGlzIHJlY3RhbmdsZSB0byBmaXQgdGhlIHNldHMgb2YgcGFzc2VkIHBvaW50cy4KLSAgICB2b2lk
IGZpdFRvUG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7
Ci0gICAgdm9pZCBmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQ
b2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKTsKLSAgICB2b2lkIGZpdFRvUG9pbnRzKGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2lu
dCYgcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAzKTsKLQotI2lmIFVTRShDRykgfHwgVVNFKFNLSUFf
T05fTUFDX0NIUk9NSVVNKQotICAgIEZsb2F0UmVjdChjb25zdCBDR1JlY3QmKTsKLSAgICBvcGVy
YXRvciBDR1JlY3QoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCi0gICAg
ICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSAgICBGbG9hdFJlY3Qo
Y29uc3QgTlNSZWN0Jik7Ci0gICAgb3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFFUKQotICAgIEZsb2F0UmVjdChjb25zdCBRUmVjdEYmKTsKLSAgICBvcGVy
YXRvciBRUmVjdEYoKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZCgpIGNvbnN0Owot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShXWCkgJiYgVVNFKFdYR0MpCi0gICAgRmxvYXRSZWN0KGNv
bnN0IHd4UmVjdDJERG91YmxlJik7Ci0gICAgb3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25z
dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSEFJS1UpCi0gICAgRmxvYXRSZWN0KGNvbnN0IEJS
ZWN0Jik7Ci0gICAgb3BlcmF0b3IgQlJlY3QoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKFNL
SUEpCi0gICAgRmxvYXRSZWN0KGNvbnN0IFNrUmVjdCYpOwotICAgIG9wZXJhdG9yIFNrUmVjdCgp
IGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShPUEVOVkcpCi0gICAgb3BlcmF0b3IgVkdS
ZWN0KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBGbG9hdFJlY3QoY29u
c3QgY2Fpcm9fcmVjdGFuZ2xlX3QmKTsKLSAgICBvcGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgp
IGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRmxvYXRQb2ludCBtX2xvY2F0aW9uOwot
ICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci0KLSAgICB2b2lkIHNldExvY2F0aW9uQW5kU2l6ZUZyb21F
ZGdlcyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20pCi0g
ICAgewotICAgICAgICBtX2xvY2F0aW9uLnNldChsZWZ0LCB0b3ApOwotICAgICAgICBtX3NpemUu
c2V0V2lkdGgocmlnaHQgLSBsZWZ0KTsKLSAgICAgICAgbV9zaXplLnNldEhlaWdodChib3R0b20g
LSB0b3ApOwotICAgIH0KLX07Ci0KLWlubGluZSBGbG9hdFJlY3QgaW50ZXJzZWN0aW9uKGNvbnN0
IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRSZWN0JiBiKQotewotICAgIEZsb2F0UmVjdCBjID0g
YTsKLSAgICBjLmludGVyc2VjdChiKTsKLSAgICByZXR1cm4gYzsKLX0KLQotaW5saW5lIEZsb2F0
UmVjdCB1bmlvblJlY3QoY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCi17
Ci0gICAgRmxvYXRSZWN0IGMgPSBhOwotICAgIGMudW5pdGUoYik7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWlubGluZSBGbG9hdFJlY3QmIG9wZXJhdG9yKz0oRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9h
dFJlY3QmIGIpCi17Ci0gICAgYS5tb3ZlKGIueCgpLCBiLnkoKSk7Ci0gICAgYS5zZXRXaWR0aChh
LndpZHRoKCkgKyBiLndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhl
aWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0UmVjdCBvcGVyYXRvciso
Y29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCi17Ci0gICAgRmxvYXRSZWN0
IGMgPSBhOwotICAgIGMgKz0gYjsKLSAgICByZXR1cm4gYzsKLX0KLQotaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGbG9hdFJlY3QmIGEsIGNvbnN0IEZsb2F0UmVjdCYgYikKLXsKLSAgICBy
ZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBiLnNpemUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFJlY3QmIGEsIGNvbnN0
IEZsb2F0UmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhdGlvbigpICE9IGIubG9jYXRpb24o
KSB8fCBhLnNpemUoKSAhPSBiLnNpemUoKTsKLX0KLQotSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0vLyBNYXAgcmVjdCByIGZyb20gc3JjUmVjdCB0byBhbiBl
cXVpdmFsZW50IHJlY3QgaW4gZGVzdFJlY3QuCi1GbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCk7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lh
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgotCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1fd2lkdGgo
c2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKLXsKLX0KLQotZmxvYXQgRmxv
YXRTaXplOjpkaWFnb25hbExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNxcnRmKGRpYWdv
bmFsTGVuZ3RoU3F1YXJlZCgpKTsKLX0KLQotRmxvYXRTaXplIEZsb2F0U2l6ZTo6bmFycm93UHJl
Y2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKLXsKLSAgICByZXR1cm4gRmxvYXRT
aXplKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGhlaWdodCkpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZsb2F0U2l6ZV9oCi0jZGVmaW5lIEZsb2F0U2l6
ZV9oCi0KLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLSNpZiBVU0UoQ0cpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKFNL
SUFfT05fTUFDX0NIUk9NSVVNKQotdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIENHU2l6ZTsKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJ
TikpIHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKLSNpZmRlZiBOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwotdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIE5TU2l6
ZTsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKLSNlbmRpZgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLQotY2xhc3MgRmxvYXRT
aXplIHsKLXB1YmxpYzoKLSAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVpZ2h0KDAp
IHsgfQotICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1fd2lkdGgo
d2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQotICAgIEZsb2F0U2l6ZShjb25zdCBJbnRTaXpl
Jik7Ci0KLSAgICBzdGF0aWMgRmxvYXRTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lkdGgs
IGRvdWJsZSBoZWlnaHQpOwotCi0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9Ci0gICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KLQot
ICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Ci0gICAg
dm9pZCBzZXRIZWlnaHQoZmxvYXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9Ci0KLSAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQg
PD0gMDsgfQotCi0gICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX3dpZHRo
IC8gbV9oZWlnaHQ7IH0KLQotICAgIHZvaWQgZXhwYW5kKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCi0gICAgewotICAgICAgICBtX3dpZHRoICs9IHdpZHRoOwotICAgICAgICBtX2hlaWdodCAr
PSBoZWlnaHQ7Ci0gICAgfQotCi0gICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMp
OyB9Ci0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKQotICAgIHsK
LSAgICAgICAgbV93aWR0aCAqPSBzY2FsZVg7Ci0gICAgICAgIG1faGVpZ2h0ICo9IHNjYWxlWTsK
LSAgICB9Ci0KLSAgICBGbG9hdFNpemUgZXhwYW5kZWRUbyhjb25zdCBGbG9hdFNpemUmIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShtX3dpZHRoID4gb3RoZXIu
bV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAotICAgICAgICAgICAgbV9oZWlnaHQg
PiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwotICAgIH0KLQot
ICAgIEZsb2F0U2l6ZSBzaHJ1bmtUbyhjb25zdCBGbG9hdFNpemUmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICByZXR1cm4gRmxvYXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93
aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9oZWln
aHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBmbG9hdCBkaWFn
b25hbExlbmd0aCgpIGNvbnN0OwotICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1fd2lkdGggKyBtX2hlaWdodCAq
IG1faGVpZ2h0OwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKLSAg
ICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNF
KFNLSUFfT05fTUFDX0NIUk9NSVVNKQotICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBDR1Np
emUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKLSAgICBv
cGVyYXRvciBDR1NpemUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCi0g
ICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JN
KFFUKSAmJiBVU0UoUVRLSVQpKQotICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1NpemUg
Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5Ci0gICAgb3Bl
cmF0b3IgTlNTaXplKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX3dp
ZHRoLCBtX2hlaWdodDsKLX07Ci0KLWlubGluZSBGbG9hdFNpemUmIG9wZXJhdG9yKz0oRmxvYXRT
aXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgYS5zZXRXaWR0aChhLndpZHRoKCkg
KyBiLndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsK
LSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0U2l6ZSYgb3BlcmF0b3ItPShGbG9hdFNp
emUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAt
IGIud2lkdGgoKSk7Ci0gICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwot
ICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yKyhjb25zdCBGbG9h
dFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKGEu
d2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxp
bmUgRmxvYXRTaXplIG9wZXJhdG9yLShjb25zdCBGbG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6
ZSYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgoKSwgYS5o
ZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yLShj
b25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSgtc2l6ZS53aWR0
aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIGEud2lkdGgo
KSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQot
ewotICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5o
ZWlnaHQoKTsKLX0KLQotaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgRmxvYXRT
aXplJiBwKQotewotICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAu
d2lkdGgoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLmhlaWdodCgpKSkpOwotfQotCi1p
bmxpbmUgSW50U2l6ZSBleHBhbmRlZEludFNpemUoY29uc3QgRmxvYXRTaXplJiBwKQotewotICAg
IHJldHVybiBJbnRTaXplKGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHAud2lkdGgoKSkpLCBjbGFtcFRv
SW50ZWdlcihjZWlsZihwLmhlaWdodCgpKSkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgZmxvb3Jl
ZEludFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgcCkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoc3Rh
dGljX2Nhc3Q8aW50PihwLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAuaGVpZ2h0KCkpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRmxvYXRTaXplX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIu
aCIKICNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9OVCkKQEAgLTEzOCw3ICsxMzgsNyBA
QCB2b2lkIEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3RvCiAgICAgbV9mb250TGlz
dC0+aW52YWxpZGF0ZShmb250U2VsZWN0b3IpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd1RleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8vIERvbid0
IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBp
biB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLgogICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9udHMoKSkK
QEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29uCiAgICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50LCBmcm9t
LCB0byk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZv
bnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmIChsb2FkaW5nQ3VzdG9t
Rm9udHMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyLDcgKzIwMiw3IEBAIGZsb2F0IEZvbnQ6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KHJ1bik7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQg
aCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5s
ZW5ndGgoKSA6IHRvKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3Jh
cGhpY3NQb2ludDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEZvbnREYXRhOwogY2xhc3Mg
Rm9udE1ldHJpY3M7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwpAQCAtOTMsMTQgKzkzLDE0IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9yPikgY29u
c3Q7CiAKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7Ci0g
ICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20g
PSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9tID0gMCwg
aW50IHRvID0gLTEpIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
R3JhcGhpY3NQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwogCiAgICAg
ZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgZmxv
YXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlw
aE5hbWUpIGNvbnN0OwogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4m
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGgsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIEdy
YXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYsIGludCBoLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAog
ICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5z
bWFsbENhcHMoKTsgfQogCkBAIC0xNjEsMTQgKzE2MSwxNCBAQCBwcml2YXRlOgogCiAgICAgLy8g
UmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KICAgICBmbG9hdCBnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQg
dG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFz
aXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
LSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBp
bnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3
R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVy
JiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZv
aWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdF
bXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50
IHRvLCBjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3Mo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29u
c3QgQXRvbWljU3RyaW5nJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAgIGZsb2F0
IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBHbHlwaEJ1ZmZlciosIEhh
c2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3Zl
cmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdDsKKyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7CiAKICAgICBib29sIGdldEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBBdG9taWNT
dHJpbmcmLCBHbHlwaERhdGEmKSBjb25zdDsKIApAQCAtMTc5LDExICsxNzksMTEgQEAgcHJpdmF0
ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCiAgICAg
ZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
aW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5v
dEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQg
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBH
cmFwaGljc1BvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250
cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgaCwg
aW50IGZyb20sIGludCB0bykgY29uc3Q7CiAKICAgICBmcmllbmQgc3RydWN0IFdpZHRoSXRlcmF0
b3I7CiAgICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNs
dWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKQEAgLTM1
MSw3ICszNTEsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsCiAg
ICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi12b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd1Np
bXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAg
IC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBkYXRh
IGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMzYxLDEx
ICszNjEsMTEgQEAgdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleAogICAg
IGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CisgICAgR3JhcGhpY3NQb2ludCBz
dGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4
dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZm
ZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNp
bXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CkBA
IC0zNzMsMTUgKzM3MywxNSBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxl
VGV4CiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxv
YXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CisgICAgZHJh
d0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgR3JhcGhpY3NQ
b2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAKLXZvaWQg
Rm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7ICAgCiAgICAgLy8g
RHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVzZSB0aGUgc2FtZSBmb250
IGRhdGEuCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhCdWZmZXIu
Zm9udERhdGFBdCgwKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0
QXQoMCk7Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50KTsKKyAgICBHcmFwaGljc1Np
emUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQoMCk7CisgICAgR3JhcGhpY3NQb2ludCBz
dGFydFBvaW50KHBvaW50KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpOwogICAg
IGludCBsYXN0RnJvbSA9IDA7CiAgICAgaW50IG5leHRHbHlwaCA9IDA7CkBAIC0zOTAsNyArMzkw
LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZQogI2VuZGlmCiAg
ICAgd2hpbGUgKG5leHRHbHlwaCA8IGdseXBoQnVmZmVyLnNpemUoKSkgewogICAgICAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChu
ZXh0R2x5cGgpOwotICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9m
ZnNldEF0KG5leHRHbHlwaCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBuZXh0T2Zmc2V0ID0gZ2x5
cGhCdWZmZXIub2Zmc2V0QXQobmV4dEdseXBoKTsKIAogICAgICAgICBpZiAobmV4dEZvbnREYXRh
ICE9IGZvbnREYXRhIHx8IG5leHRPZmZzZXQgIT0gb2Zmc2V0KSB7CiAjaWYgRU5BQkxFKFNWR19G
T05UUykKQEAgLTQyMCw3ICs0MjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFw
aGljc0NvbnRlCiBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIEdseXBoIGdseXBoKQogewogICAgIGlmIChmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCBib3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKICAgICAgICAgcmV0dXJuIGJvdW5kcy54KCkgKyBib3VuZHMud2lkdGgoKSAvIDI7CiAg
ICAgfQogICAgIC8vIEZJWE1FOiBVc2UgZ2x5cGggYm91bmRzIG9uY2UgdGhleSBtYWtlIHNlbnNl
IGZvciB2ZXJ0aWNhbCBmb250cy4KQEAgLTQzMiw3ICs0MzIsNyBAQCBpbmxpbmUgc3RhdGljIGZs
b2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAgICAgcmV0dXJuIG9mZnNldFRvTWlkZGxlT2ZHbHlw
aChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpKTsKIH0K
IAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9p
ZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAg
IEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJrR2x5cGhE
YXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb24KICAgICBHbHlwaCBzcGFjZUdseXBoID0gbWFy
a0ZvbnREYXRhLT5zcGFjZUdseXBoKCk7CiAKICAgICBmbG9hdCBtaWRkbGVPZkxhc3RHbHlwaCA9
IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIDApOwotICAgIEZsb2F0
UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRv
TWlkZGxlT2ZHbHlwaChtYXJrRm9udERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CisgICAg
R3JhcGhpY3NQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0g
b2Zmc2V0VG9NaWRkbGVPZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgp
KTsKIAogICAgIEdseXBoQnVmZmVyIG1hcmtCdWZmZXI7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
KyAxIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpIHsKQEAgLTQ3Niw3ICs0NzYsNyBAQCBmbG9h
dCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAgICAgcmV0dXJuIGl0Lm1fcnVu
V2lkdGhTb0ZhcjsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JTaW1wbGVU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIFdpZHRoSXRlcmF0b3Ig
aXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZhbmNlKGZyb20pOwpAQCAtNDg4LDEwICs0ODgsMTAg
QEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZQogICAgIGlmIChydW4u
cnRsKCkpIHsKICAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwogICAgICAgICBmbG9h
dCB0b3RhbFdpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50Lnko
KSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYo
cG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgp
LCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgp
IC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgp
LCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyBhZnRlcldpZHRoKSAtIGZsb29yZihwb2lu
dC54KCkgKyBiZWZvcmVXaWR0aCksIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoZmxvb3Jm
KHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsg
YWZ0ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsKIH0KIAog
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdlbmVyYXRlZEltYWdlLmgiCiAKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCkBAIC0zNCwyNCArMzQsMjQg
QEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdl
bmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNv
bnRleHQpOwogICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcCk7
CiAgICAgY29udGV4dC0+Y2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LT50cmFuc2xhdGUoZHN0
UmVjdC54KCksIGRzdFJlY3QueSgpKTsKICAgICBpZiAoZHN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCi0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0LndpZHRo
KCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgp
KSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShkc3RSZWN0LndpZHRoKCkg
LyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKSk7
CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgpKTsKLSAg
ICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3NpemUpLCAqbV9n
ZW5lcmF0b3IuZ2V0KCkpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFw
aGljc1BvaW50KCksIG1fc2l6ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CiB9CiAKLXZvaWQgR2Vu
ZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHZW5lcmF0ZWRJbWFnZTo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3As
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQWxsb3cgdGhlIGdlbmVy
YXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5nIHBhcmFtZXRlcnMgZm9y
IGJldHRlciBwZXJmb3JtYW5jZS4KICAgICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG1fc2l6ZTsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBHcmFwaGljc1Jl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKICAgICBtX2dlbmVyYXRvci0+YWRqdXN0UGFy
YW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVkU3JjUmVjdCk7CiAK
ICAgICAvLyBDcmVhdGUgYSBCaXRtYXBJbWFnZSBhbmQgY2FsbCBkcmF3UGF0dGVybiBvbiBpdC4K
QEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
YwogCiAgICAgLy8gRmlsbCB3aXRoIHRoZSBncmFkaWVudC4KICAgICBHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgZ3JhcGhpY3ND
b250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhZGp1c3RlZFNpemUpLCAq
bV9nZW5lcmF0b3IuZ2V0KCkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoR3JhcGhp
Y3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgYWRqdXN0ZWRTaXplKSwgKm1fZ2VuZXJhdG9yLmdldCgp
KTsKIAogICAgIC8vIFRpbGUgdGhlIGltYWdlIGJ1ZmZlciBpbnRvIHRoZSBjb250ZXh0LgogICAg
IGltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBkZXN0UmVj
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRlZEltYWdlLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSArNTcsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3Qm
IGRlc3RSZWN0KTsKICAgICAKICAgICBHZW5lcmF0ZWRJbWFnZShQYXNzUmVmUHRyPEdlbmVyYXRv
cj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICA6IG1fZ2VuZXJhdG9y
KGdlbmVyYXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dl
bmVyYXRvci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNSArMzAsMTUgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1Jl
Y3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdlbmVyYXRvciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEdlbmVyYXRvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkdlbmVyYXRvcigp
IHt9OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRp
bGVkRHJhd2luZyhJbnRTaXplJiAvKiBzaXplICovLCBGbG9hdFJlY3QmIC8qIHNyY1JlY3QgKi8p
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBo
aWNzUmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVk
RHJhd2luZyhJbnRTaXplJiAvKiBzaXplICovLCBHcmFwaGljc1JlY3QmIC8qIHNyY1JlY3QgKi8p
IHsgfQogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAKICNpZm5kZWYgR2x5cGhCdWZmZXJfaAogI2RlZmluZSBHbHlwaEJ1ZmZl
cl9oCiAKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIK
ICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTYwLDcgKzYwLDcgQEAgdHlwZWRlZiB3Y2hhcl90IEdseXBo
QnVmZmVyR2x5cGg7CiB0eXBlZGVmIEdseXBoIEdseXBoQnVmZmVyR2x5cGg7CiAjZW5kaWYKIAot
Ly8gQ0cgdXNlcyBDR1NpemUgaW5zdGVhZCBvZiBGbG9hdFNpemUgc28gdGhhdCB0aGUgcmVzdWx0
IG9mIGFkdmFuY2VzKCkKKy8vIENHIHVzZXMgQ0dTaXplIGluc3RlYWQgb2YgR3JhcGhpY3NTaXpl
IHNvIHRoYXQgdGhlIHJlc3VsdCBvZiBhZHZhbmNlcygpCiAvLyBjYW4gYmUgcGFzc2VkIGRpcmVj
dGx5IHRvIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMgaW4gRm9udE1hYy5tbQogI2lm
IFVTRShDRykgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9PTl9N
QUNfQ0hST01JVU0pCiB0eXBlZGVmIENHU2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CkBAIC02OSw3
ICs2OSw3IEBAIHR5cGVkZWYgQ0dTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsKIC8vIHNvIHdlIGNh
biBzYXZlIG1lbW9yeSBzcGFjZSBvbiBlbWJlZGRlZCBkZXZpY2VzIGJ5IHN0b3Jpbmcgb25seSB0
aGUgd2lkdGgKIHR5cGVkZWYgZmxvYXQgR2x5cGhCdWZmZXJBZHZhbmNlOwogI2Vsc2UKLXR5cGVk
ZWYgRmxvYXRTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsKK3R5cGVkZWYgR3JhcGhpY3NTaXplIEds
eXBoQnVmZmVyQWR2YW5jZTsKICNlbmRpZgogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CkBAIC0xMDks
NyArMTA5LDcgQEAgcHVibGljOgogICAgICAgICBtX2FkdmFuY2VzW2luZGV4Ml0gPSBzOwogCiAj
aWYgUExBVEZPUk0oV0lOKQotICAgICAgICBGbG9hdFNpemUgb2Zmc2V0ID0gbV9vZmZzZXRzW2lu
ZGV4MV07CisgICAgICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXQgPSBtX29mZnNldHNbaW5kZXgxXTsK
ICAgICAgICAgbV9vZmZzZXRzW2luZGV4MV0gPSBtX29mZnNldHNbaW5kZXgyXTsKICAgICAgICAg
bV9vZmZzZXRzW2luZGV4Ml0gPSBvZmZzZXQ7CiAjZW5kaWYKQEAgLTEzNSwxNyArMTM1LDE3IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBvZmZzZXRBdChpbnQgaW5k
ZXgpIGNvbnN0CisgICAgR3JhcGhpY3NTaXplIG9mZnNldEF0KGludCBpbmRleCkgY29uc3QKICAg
ICB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsK
ICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgICAgIHJldHVybiBGbG9h
dFNpemUoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogI2VuZGlmCiAgICAgfQog
Ci0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBm
bG9hdCB3aWR0aCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZvaWQgYWRkKEds
eXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgZmxvYXQgd2lkdGgsIGNvbnN0
IEdyYXBoaWNzU2l6ZSogb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIG1fZm9udERhdGEuYXBw
ZW5kKGZvbnQpOwogCkBAIC0xNjMsMTQgKzE2MywxNCBAQCBwdWJsaWM6CiAjZWxpZiBPUyhXSU5D
RSkKICAgICAgICAgbV9hZHZhbmNlcy5hcHBlbmQod2lkdGgpOwogI2Vsc2UKLSAgICAgICAgbV9h
ZHZhbmNlcy5hcHBlbmQoRmxvYXRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgIG1fYWR2YW5jZXMu
YXBwZW5kKEdyYXBoaWNzU2l6ZSh3aWR0aCwgMCkpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShX
SU4pCiAgICAgICAgIGlmIChvZmZzZXQpCiAgICAgICAgICAgICBtX29mZnNldHMuYXBwZW5kKCpv
ZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX29mZnNldHMuYXBwZW5kKEZsb2F0
U2l6ZSgpKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0cy5hcHBlbmQoR3JhcGhpY3NTaXplKCkpOwog
I2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAjZW5kaWYKQEAgLTIwMSw3ICsy
MDEsNyBAQCBwdWJsaWM6CiAjZWxpZiBPUyhXSU5DRSkKICAgICAgICAgbGFzdEFkdmFuY2UgKz0g
d2lkdGg7CiAjZWxzZQotICAgICAgICBsYXN0QWR2YW5jZSArPSBGbG9hdFNpemUod2lkdGgsIDAp
OworICAgICAgICBsYXN0QWR2YW5jZSArPSBHcmFwaGljc1NpemUod2lkdGgsIDApOwogI2VuZGlm
CiAgICAgfQogCkBAIC0yMTAsNyArMjEwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8R2x5cGhC
dWZmZXJHbHlwaCwgMjA0OD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5j
ZSwgMjA0OD4gbV9hZHZhbmNlczsKICNpZiBQTEFURk9STShXSU4pCi0gICAgVmVjdG9yPEZsb2F0
U2l6ZSwgMjA0OD4gbV9vZmZzZXRzOworICAgIFZlY3RvcjxHcmFwaGljc1NpemUsIDIwNDg+IG1f
b2Zmc2V0czsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDkgKzk2LDkgQEAgdGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgR2x5cGhNZXRy
aWNzTWFwPAogICAgIHJldHVybiBjR2x5cGhTaXplVW5rbm93bjsKIH0KIAotdGVtcGxhdGU8PiBp
bmxpbmUgRmxvYXRSZWN0IEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+Ojp1bmtub3duTWV0cmlj
cygpCit0ZW1wbGF0ZTw+IGlubGluZSBHcmFwaGljc1JlY3QgR2x5cGhNZXRyaWNzTWFwPEdyYXBo
aWNzUmVjdD46OnVua25vd25NZXRyaWNzKCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAs
IGNHbHlwaFNpemVVbmtub3duLCBjR2x5cGhTaXplVW5rbm93bik7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgwLCAwLCBjR2x5cGhTaXplVW5rbm93biwgY0dseXBoU2l6ZVVua25vd24pOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBUPiB0eXBlbmFtZSBHbHlwaE1ldHJpY3NNYXA8VD46OkdseXBoTWV0
cmljc1BhZ2UqIEdseXBoTWV0cmljc01hcDxUPjo6bG9jYXRlUGFnZVNsb3dDYXNlKHVuc2lnbmVk
IHBhZ2VOdW1iZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4LDEyIEBA
CiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Vu
dXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGllbnQ6OkdyYWRpZW50
KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK0dyYWRpZW50OjpH
cmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEp
CiAgICAgOiBtX3JhZGlhbChmYWxzZSkKICAgICAsIG1fcDAocDApCiAgICAgLCBtX3AxKHAxKQpA
QCAtNDcsNyArNDcsNyBAQCBHcmFkaWVudDo6R3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAs
CiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CiAKLUdyYWRpZW50OjpHcmFkaWVudChjb25zdCBGbG9h
dFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgZmxv
YXQgYXNwZWN0UmF0aW8pCitHcmFkaWVudDo6R3JhZGllbnQoY29uc3QgR3JhcGhpY3NQb2ludCYg
cDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFz
cGVjdFJhdGlvKQogICAgIDogbV9yYWRpYWwodHJ1ZSkKICAgICAsIG1fcDAocDApCiAgICAgLCBt
X3AxKHAxKQpAQCAtNjYsNyArNjYsNyBAQCBHcmFkaWVudDo6fkdyYWRpZW50KCkKICAgICBwbGF0
Zm9ybURlc3Ryb3koKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6YWRqdXN0UGFyYW1ldGVyc0ZvclRp
bGVkRHJhd2luZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QpCit2b2lkIEdyYWRp
ZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEludFNpemUmIHNpemUsIEdyYXBo
aWNzUmVjdCYgc3JjUmVjdCkKIHsKICAgICBpZiAobV9yYWRpYWwpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIEdyYWRpZW50X2gK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC03
NCwxMSArNzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgR3JhZGllbnQg
OiBwdWJsaWMgR2VuZXJhdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsKICAgICAg
ICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBm
bG9hdCBhc3BlY3RSYXRpbyA9IDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYWRpZW50
PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvID0gMSkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcjAsIHAxLCByMSwg
YXNwZWN0UmF0aW8pKTsKICAgICAgICAgfQpAQCAtOTQsMTEgKzk0LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1JhZGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaWFs
OyB9CiAgICAgICAgIGJvb2wgaXNaZXJvU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcDAueCgpID09
IG1fcDEueCgpICYmIG1fcDAueSgpID09IG1fcDEueSgpICYmICghbV9yYWRpYWwgfHwgbV9yMCA9
PSBtX3IxKTsgfQogCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAwKCkgY29uc3QgeyByZXR1
cm4gbV9wMDsgfQotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSgpIGNvbnN0IHsgcmV0dXJu
IG1fcDE7IH0KKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcDAoKSBjb25zdCB7IHJldHVy
biBtX3AwOyB9CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxKCkgY29uc3QgeyByZXR1
cm4gbV9wMTsgfQogCi0gICAgICAgIHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYgcCkgeyBt
X3AwID0gcDsgfQotICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9w
MSA9IHA7IH0KKyAgICAgICAgdm9pZCBzZXRQMChjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1f
cDAgPSBwOyB9CisgICAgICAgIHZvaWQgc2V0UDEoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBt
X3AxID0gcDsgfQogCiAgICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzKCkgY29uc3QgeyByZXR1cm4g
bV9yMDsgfQogICAgICAgICBmbG9hdCBlbmRSYWRpdXMoKSBjb25zdCB7IHJldHVybiBtX3IxOyB9
CkBAIC0xMzMsOCArMTMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBRdCBh
bmQgQ0cgdHJhbnNmb3JtIHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX2dyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1Jl
Y3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBH
cmFwaGljc1JlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JU
aWxlZERyYXdpbmcoSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsKIAogICAg
ICAgICB2b2lkIHNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAKQEAgLTE0NCw4ICsxNDQs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7Ci0g
ICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxv
YXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyk7CisgICAgICAgIEdyYWRp
ZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSk7Cisg
ICAgICAgIEdyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyk7CiAKICAgICAg
ICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3JhZGllbnQgPSAwOyB9CiAgICAgICAgIHZvaWQg
cGxhdGZvcm1EZXN0cm95KCk7CkBAIC0xNTQsOCArMTU0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CiAKICAgICAgICAgYm9vbCBt
X3JhZGlhbDsKLSAgICAgICAgRmxvYXRQb2ludCBtX3AwOwotICAgICAgICBGbG9hdFBvaW50IG1f
cDE7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgbV9wMDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBt
X3AxOwogICAgICAgICBmbG9hdCBtX3IwOwogICAgICAgICBmbG9hdCBtX3IxOwogICAgICAgICBm
bG9hdCBtX2FzcGVjdFJhdGlvOyAvLyBGb3IgZWxsaXB0aWNhbCBncmFkaWVudCwgd2lkdGggLyBo
ZWlnaHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM0LDcgKzEzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb24K
ICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxv
YXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsK
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSBibHVyOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
aGFkb3coY29uc3QgRmwKICAgICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9y
LCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExlZ2FjeVNoYWRv
dyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5
U2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBtX3N0YXRlLnNoYWRvd09m
ZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwpAQCAtMTU3LDcg
KzE1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMZWdhY3lTaGFkb3coY28KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZSgpOworICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NT
aXplKCk7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gQ29sb3IoKTsKICAgICBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UgPSBDb2xvclNwYWNl
RGV2aWNlUkdCOwpAQCAtMTcwLDcgKzE3MCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpoYXNT
aGFkb3coKSBjb25zdAogICAgICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlJiBjb2xvclNwYWNlKSBjb25z
dAorYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhHcmFwaGljc1NpemUmIG9mZnNldCwg
ZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgY29uc3QK
IHsKICAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKICAgICBibHVyID0gbV9zdGF0
ZS5zaGFkb3dCbHVyOwpAQCAtMzY4LDExICszNjgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZSogaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKElt
YWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRl
c3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVz
ZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFj
ZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAg
ICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgR3JhcGhpY3NSZWN0KGRlc3QpLCBz
cmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KIAogI2lmICFPUyhXSU5DRSkgfHwg
KFBMQVRGT1JNKFFUKSAmJiAhSEFWRShRUkFXRk9OVCkpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9uCiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg5
LDcgKzM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcygKICAg
ICBmb250LmRyYXdFbXBoYXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRv
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0CiAgICAgaWYgKCFiaWRpUnVucy5ydW5D
b3VudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IGN1cnJQb2ludCA9IHBv
aW50OworICAgIEdyYXBoaWNzUG9pbnQgY3VyclBvaW50ID0gcG9pbnQ7CiAgICAgQmlkaUNoYXJh
Y3RlclJ1biogYmlkaVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7CiAgICAgd2hpbGUgKGJpZGlS
dW4pIHsKICAgICAgICAgVGV4dFJ1biBzdWJydW4gPSBydW47CkBAIC00MjUsNyArNDI1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdAogICAgIGJpZGlSdW5zLmRl
bGV0ZVJ1bnMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JU
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGludCBmcm9tLCBpbnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgaW50IGZyb20sIGludCB0bykKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MzMsNyArNDMzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZQogICAgIGZpbGxSZWN0
KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pLCBiYWNr
Z3JvdW5kQ29sb3IsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBkZXN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC00NTcsMTAgKzQ1NywxMCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpCiAgICAgICAgIEludGVycG9sYXRp
b25RdWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgSW50ZXJwb2xhdGlvbkxv
dwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Ob25l
KTsKLSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwg
RmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0
c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodGhp
cywgR3JhcGhpY3NSZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0aCkpLCBH
cmFwaGljc1JlY3Qoc3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkpLCBzdHls
ZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShw
cmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2Ut
PmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkp
LCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNv
bG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgR3JhcGhpY3NSZWN0KGRl
c3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0aCkpLCBHcmFwaGljc1JlY3Qoc3JjLmxv
Y2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBpbWFnZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKQEAgLTUxNCwxMCArNTE0LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAg
ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0KSwg
c3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKGlt
YWdlLCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTU0MSwx
NiArNTQxLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW0KICAg
ICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBi
ZSBJbnRlcnBvbGF0aW9uTG93CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
SW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9y
U3BhY2UsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxv
YXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1
YWxpdHlTY2FsZSk7CisgICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwg
R3JhcGhpY3NSZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0aCkpLCBHcmFw
aGljc1JlY3Qoc3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkpLCBvcCwgdXNl
TG93UXVhbGl0eVNjYWxlKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShw
cmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2Ut
PmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBG
bG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRz
dywgdHNoKSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICBpbWFnZS0+ZHJhdyh0
aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0LmxvY2F0aW9uKCksIEdyYXBo
aWNzU2l6ZSh0dywgdGgpKSwgR3JhcGhpY3NSZWN0KHNyYy5sb2NhdGlvbigpLCBHcmFwaGljc1Np
emUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKICNpZiAhUExBVEZP
Uk0oUVQpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQog
ewotICAgIGNsaXAoRmxvYXRSZWN0KHJlY3QpKTsKKyAgICBjbGlwKEdyYXBoaWNzUmVjdChyZWN0
KSk7CiB9CiAjZW5kaWYKIApAQCAtNTc0LDcgKzU3NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiBidWZmZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MDIsMTQgKzYwMiwx
NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlCiAgICAgc2V0UGxh
dGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdlbmVyYXRvciYgZ2VuZXJhdG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGdlbmVyYXRvci5maWxsKHRoaXMsIHJlY3QpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3Jh
cGhpY3NDb250ZXh0CiAjZW5kaWYKIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGlu
ZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQg
c3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhHcmFwaGljc1BvaW50JiBwMSwgR3JhcGhpY3NQ
b2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKICAg
ICAvLyBGb3Igb2RkIHdpZHRocywgd2UgYWRkIGluIDAuNSB0byB0aGUgYXBwcm9wcmlhdGUgeC95
IHNvIHRoYXQgdGhlIGZsb2F0IGFyaXRobWV0aWMKICAgICAvLyB3b3JrcyBvdXQuICBGb3IgZXhh
bXBsZSwgd2l0aCBhIGJvcmRlciB3aWR0aCBvZiAzLCBXZWJLaXQgd2lsbCBwYXNzIHVzICh5MSt5
MikvMiwgZS5nLiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRGFzaEFy
cmF5LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBh
dGguaCIKQEAgLTE4NCw3ICsxODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJl
ZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwogICAgICAgICBSZWZQdHI8UGF0dGVybj4gZmls
bFBhdHRlcm47CiAKLSAgICAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICAgICAgR3Jh
cGhpY3NTaXplIHNoYWRvd09mZnNldDsKIAogICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7
CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXI7CkBAIC0yODUsNyArMjg1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAg
ICAgdm9pZCBkcmF3TGluZShjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAg
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2b2lkIGRyYXdD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIHNo
b3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiwgYm9vbCBzaG91bGRBbnRpYWxp
YXMgPSBmYWxzZSk7CiAKICAgICAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7CiAgICAg
ICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CkBAIC0yOTMsMjMgKzI5MywyMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRl
ci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQuCiAg
ICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50
IGFuZ2xlU3Bhbik7CiAKLSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENv
bG9yU3BhY2UpOwotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdlbmVy
YXRvciYpOwotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgR2VuZXJhdG9yJik7CisgICAgICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvcik7CiAgICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29u
c3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0
IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKIAotICAgICAgICB2
b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKLSAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOwogCiAgICAgICAgIHZvaWQgZHJhd0lt
YWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50Jiwg
Q29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICAgICAgdm9pZCBk
cmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVj
dCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
cik7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0
eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9pZCBk
cmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0ID0gR3JhcGhpY3NS
ZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxz
ZSk7CiAgICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50JiBzcmNQ
b2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIENv
bXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGUgPSBmYWxzZSk7CkBAIC0zMjEsNDUgKzMyMSw0NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBv
c2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogICAgICAg
ICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAgICB2b2lk
IGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCisgICAgICAg
IHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
c3JjUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCAtMSwgLTEpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogCiAgICAgICAgIHZvaWQgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiAgICAgICAgIEludGVycG9s
YXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdDsKIAogICAgICAg
ICB2b2lkIGNsaXAoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgICAgIHZvaWQgY2xpcChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICAg
ICAgdm9pZCBhZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgUm91bmRlZFJlY3QmKTsKICAgICAgICAg
dm9pZCBhZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiwgaW50IHRoaWNrbmVz
cyk7CiAgICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQg
Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CiAgICAgICAgIHZvaWQgY2xp
cFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKLSAgICAgICAgdm9pZCBjbGlwQ29udmV4UG9s
eWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRpYWxpYXMg
PSB0cnVlKTsKLSAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNv
bnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqLCBib29sIGFudGlhbGlhcyA9IHRydWUpOwor
ICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgR3JhcGhp
Y3NSZWN0Jik7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsK
IAogICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdDsK
ICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwog
Ci0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Ci0gICAgICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mICwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSk7Ci0gICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGRyYXdIaWdobGlnaHRGb3JU
ZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBo
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlLCBpbnQgZnJvbSA9IDAs
IGludCB0byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0x
KTsKKyAgICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250JiwgY29uc3QgVGV4
dFJ1biYgLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBp
bnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAg
IHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBHcmFwaGljc1BvaW50JiwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Is
IENvbG9yU3BhY2UsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogCiAgICAgICAgIGVudW0g
Um91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxsU2lkZXMsCiAgICAgICAgICAgICBS
b3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKICAgICAgICAgfTsKLSAgICAgICAgRmxvYXRSZWN0IHJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRB
bGxTaWRlcyk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEdyYXBoaWNzUmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpOwogCi0gICAgICAg
IHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9v
bCBwcmludGluZyk7CisgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZyk7CiAgICAgICAgIGVudW0gVGV4dENo
ZWNraW5nTGluZVN0eWxlIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1NwZWxsaW5nTGluZVN0
eWxlLAogICAgICAgICAgICAgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZSwKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlCiAgICAgICAgIH07Ci0gICAgICAg
IHZvaWQgZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdp
ZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpOworICAgICAgICB2b2lkIGRyYXdMaW5lRm9yVGV4
dENoZWNraW5nKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5n
TGluZVN0eWxlKTsKIAogICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdDsKICAg
ICAgICAgdm9pZCBzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wpOwpAQCAtMzcxLDEyICszNzEsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiAKICAgICAgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBDb2xvclNw
YWNlKTsKKyAgICAgICAgdm9pZCBzZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAgLy8gTGVnYWN5IHNoYWRv
dyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cu
CiAgICAgICAgIC8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4Lgot
ICAgICAgICB2b2lkIHNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgICAgICB2b2lkIHNldExlZ2FjeVNoYWRv
dyhjb25zdCBHcmFwaGljc1NpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3Bh
Y2UpOwogCi0gICAgICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3Im
LCBDb2xvclNwYWNlJikgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0U2hhZG93KEdyYXBoaWNzU2l6
ZSYsIGZsb2F0JiwgQ29sb3ImLCBDb2xvclNwYWNlJikgY29uc3Q7CiAgICAgICAgIHZvaWQgY2xl
YXJTaGFkb3coKTsKIAogICAgICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPElu
dFJlY3Q+JiwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwpAQCAtNDAwLDkg
KzQwMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmKTsKICAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAotICAgICAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIHNjYWxlKGNvbnN0
IEdyYXBoaWNzU2l6ZSYpOwogICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cyk7Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFu
c2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgICAgICB2b2lkIHRyYW5z
bGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7IH0KICAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSk7CiAKICAgICAgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBJbnRS
ZWN0Jik7CkBAIC00MTYsMTMgKzQxNiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCkgY29uc3Q7CiAgICAgICAg
IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAgICAgICAgIHZvaWQgcmVzZXRB
ZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOworICAgICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEdyYWRpZW50Kik7CisgICAgICAg
IHZvaWQgZHJhd1RleHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludCk7CiAgICAgICAgIHZvaWQgZHJhd0ZyYW1lQ29udHJvbChjb25zdCBJ
bnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAgIHZv
aWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKICAgICAgICAgdm9pZCBwYWlu
dFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAgICAg
IHZvaWQgZHJhd0JpdG1hcChTaGFyZWRCaXRtYXAqLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApOwotICAgICAgICB2b2lkIGRyYXdCaXRtYXBQYXR0ZXJu
KFNoYXJlZEJpdG1hcCosIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7CisgICAgICAg
IHZvaWQgZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVkQml0bWFwKiwgY29uc3QgR3JhcGhpY3NSZWN0
JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IElu
dFNpemUmIG9yaWdTb3VyY2VTaXplKTsKICAgICAgICAgdm9pZCBkcmF3SWNvbihISUNPTiBpY29u
LCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBVSU5UIGZsYWdzKTsKICAgICAgICAgYm9vbCBpblRy
YW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgSERDIGdl
dFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kID0g
ZmFsc2UsIGJvb2wgbWF5Q3JlYXRlQml0bWFwID0gdHJ1ZSk7IC8vIFRoZSBwYXNzZWQgaW4gcmVj
dCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5z
cGFyZW5jeSBsYXllcnMuCkBAIC00NzksNyArNDc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2lmIFBMQVRGT1JNKFdYKQogICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9mIGEg
YnVnIHdoZXJlYnkgZ2V0dGluZyBhbiBIREMgZnJvbSBhIEdESSsgY29udGV4dAogICAgICAgICAv
LyBsb3NlcyB0aGUgc2NhbGUgb3BlcmF0aW9ucyBhcHBsaWVkIHRvIHRoZSBjb250ZXh0LgotICAg
ICAgICBGbG9hdFNpemUgY3VycmVudFNjYWxlKCk7IAorICAgICAgICBHcmFwaGljc1NpemUgY3Vy
cmVudFNjYWxlKCk7IAogICAgICAgICBib29sIGluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKQEAgLTUxMyw3ICs1MTMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAKLSAgICAgICAgc3Rh
dGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEdyYXBoaWNzUG9pbnQmIHAxLCBH
cmFwaGljc1BvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0Kik7CkBAIC01MzgsNyArNTM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wpOwogICAgICAgICB2b2lkIHNldFBs
YXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7CiAKLSAgICAgICAgdm9pZCBzZXRQbGF0Zm9y
bVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9y
U3BhY2UpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6
ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAgICAgIHZvaWQg
Y2xlYXJQbGF0Zm9ybVNoYWRvdygpOwogCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1Db21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCiAjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4
dFN0cmVhbS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQzMCwxNyArNDMw
LDE3IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcExheWVyKFRleHRTdHJlYW0KIAogdm9pZCBH
cmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwg
TGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcG9z
aXRpb24gIT0gRmxvYXRQb2ludCgpKSB7CisgICAgaWYgKG1fcG9zaXRpb24gIT0gR3JhcGhpY3NQ
b2ludCgpKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICAgICAg
dHMgPDwgIihwb3NpdGlvbiAiIDw8IG1fcG9zaXRpb24ueCgpIDw8ICIgIiA8PCBtX3Bvc2l0aW9u
LnkoKSA8PCAiKVxuIjsKICAgICB9CiAKLSAgICBpZiAobV9ib3VuZHNPcmlnaW4gIT0gRmxvYXRQ
b2ludCgpKSB7CisgICAgaWYgKG1fYm91bmRzT3JpZ2luICE9IEdyYXBoaWNzUG9pbnQoKSkgewog
ICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAgICAgICAgIHRzIDw8ICIoYm91
bmRzIG9yaWdpbiAiIDw8IG1fYm91bmRzT3JpZ2luLngoKSA8PCAiICIgPDwgbV9ib3VuZHNPcmln
aW4ueSgpIDw8ICIpXG4iOwogICAgIH0KIAotICAgIGlmIChtX2FuY2hvclBvaW50ICE9IEZsb2F0
UG9pbnQzRCgwLjVmLCAwLjVmLCAwKSkgeworICAgIGlmIChtX2FuY2hvclBvaW50ICE9IEdyYXBo
aWNzUG9pbnQzRCgwLjVmLCAwLjVmLCAwKSkgewogICAgICAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50ICsgMSk7CiAgICAgICAgIHRzIDw8ICIoYW5jaG9yICIgPDwgbV9hbmNob3JQb2ludC54KCkg
PDwgIiAiIDw8IG1fYW5jaG9yUG9pbnQueSgpIDw8ICIpXG4iOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNp
bmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAt
ODAsNyArODAsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIExheWVyVHJlZUFzVGV4dEJlaGF2aW9yCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDNEOworY2xhc3MgR3JhcGhp
Y3NQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBU
ZXh0U3RyZWFtOwpAQCAtMjI1LDI5ICsyMjUsMjkgQEAgcHVibGljOgogICAgIC8vIFRoZSBsYXll
ciB0aGF0IHJlcGxpY2F0ZXMgdGhpcyBsYXllciAoaWYgYW55KS4KICAgICBHcmFwaGljc0xheWVy
KiByZXBsaWNhTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllcjsgfQogCi0gICAg
Y29uc3QgRmxvYXRQb2ludCYgcmVwbGljYXRlZExheWVyUG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXBsaWNhdGVkTGF5
ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcmVwbGljYXRlZExheWVyUG9zaXRp
b24gPSBwOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcmVwbGljYXRlZExheWVyUG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uOyB9CisgICAgdm9p
ZCBzZXRSZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1f
cmVwbGljYXRlZExheWVyUG9zaXRpb24gPSBwOyB9CiAKICAgICAvLyBPZmZzZXQgaXMgb3JpZ2lu
IG9mIHRoZSByZW5kZXJlciBtaW51cyBvcmlnaW4gb2YgdGhlIGdyYXBoaWNzIGxheWVyIChzbyBl
aXRoZXIgemVybyBvciBuZWdhdGl2ZSkuCiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21SZW5kZXJlcjsgfQogICAgIHZvaWQgc2V0T2Zm
c2V0RnJvbVJlbmRlcmVyKGNvbnN0IEludFNpemUmIG9mZnNldCkgeyBtX29mZnNldEZyb21SZW5k
ZXJlciA9IG9mZnNldDsgfQogCiAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllciAodGhl
IGxvY2F0aW9uIG9mIGl0cyB0b3AtbGVmdCBjb3JuZXIgaW4gaXRzIHBhcmVudCkKLSAgICBjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkgeyBtX3Bvc2l0
aW9uID0gcDsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBH
cmFwaGljc1BvaW50JiBwKSB7IG1fcG9zaXRpb24gPSBwOyB9CiAgICAgCiAgICAgLy8gQW5jaG9y
IHBvaW50OiAoMCwgMCkgaXMgdG9wIGxlZnQsICgxLCAxKSBpcyBib3R0b20gcmlnaHQuIFRoZSBh
bmNob3IgcG9pbnQKICAgICAvLyBhZmZlY3RzIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybXMu
Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5jaG9yUG9pbnQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxv
YXRQb2ludDNEJiBwKSB7IG1fYW5jaG9yUG9pbnQgPSBwOyB9CisgICAgY29uc3QgR3JhcGhpY3NQ
b2ludDNEJiBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnQ7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKSB7
IG1fYW5jaG9yUG9pbnQgPSBwOyB9CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgbGF5ZXIuCi0g
ICAgY29uc3QgRmxvYXRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNp
emU7IH0KKyAgICBjb25zdCBHcmFwaGljc1NpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUp
IHsgbV9zaXplID0gc2l6ZTsgfQogCiAgICAgLy8gVGhlIGJvdW5kT3JpZ2luIGFmZmVjdHMgdGhl
IG9mZnNldCBhdCB3aGljaCBjb250ZW50IGlzIHJlbmRlcmVkLCBhbmQgc3VibGF5ZXJzIGFyZSBw
b3NpdGlvbmVkLgotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJvdW5kc09yaWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRzT3JpZ2luOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEJvdW5kc09yaWdp
bihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4pIHsgbV9ib3VuZHNPcmlnaW4gPSBvcmlnaW47IH0K
KyAgICBjb25zdCBHcmFwaGljc1BvaW50JiBib3VuZHNPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X2JvdW5kc09yaWdpbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4oY29uc3Qg
R3JhcGhpY3NQb2ludCYgb3JpZ2luKSB7IG1fYm91bmRzT3JpZ2luID0gb3JpZ2luOyB9CiAKICAg
ICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0KSB7IG1fdHJhbnNmb3JtID0gdDsgfQpAQCAtMjg5LDcgKzI4OSw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSA9IDA7CiAg
ICAgLy8gbWFyayB0aGUgZ2l2ZW4gcmVjdCAoaW4gbGF5ZXIgY29vcmRzKSBhcyBuZWVkaW5nIGRp
c3BheS4gTmV2ZXIgZ29lcyBkZWVwLgotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgPSAwOwogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIHsgfTsKIApAQCAtMzk4LDEwICszOTgsMTAg
QEAgcHJvdGVjdGVkOgogICAgIEludFNpemUgbV9vZmZzZXRGcm9tUmVuZGVyZXI7CiAgICAgCiAg
ICAgLy8gUG9zaXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBHcmFwaGljc0xheWVyCi0g
ICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2FuY2hvclBvaW50
OwotICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci0gICAgRmxvYXRQb2ludCBtX2JvdW5kc09yaWdpbjsK
KyAgICBHcmFwaGljc1BvaW50IG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1fYW5j
aG9yUG9pbnQ7CisgICAgR3JhcGhpY3NTaXplIG1fc2l6ZTsKKyAgICBHcmFwaGljc1BvaW50IG1f
Ym91bmRzT3JpZ2luOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jaGlsZHJlblRyYW5zZm9ybTsKQEAgLTQzMCw3ICs0
MzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllciogbV9yZXBsaWNhTGF5ZXI7IC8v
IEEgbGF5ZXIgdGhhdCByZXBsaWNhdGVzIHRoaXMgbGF5ZXIuIFdlIG9ubHkgYWxsb3cgb25lLCBm
b3Igbm93LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVwbGlj
YSBpcyBub3QgcGFyZW50ZWQ7IHRoaXMgaXMgdGhlIHByaW1hcnkgcmVmZXJlbmNlIHRvIGl0Lgog
ICAgIEdyYXBoaWNzTGF5ZXIqIG1fcmVwbGljYXRlZExheWVyOyAvLyBGb3IgYSByZXBsaWNhIGxh
eWVyLCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgbGF5ZXIuCi0gICAgRmxvYXRQb2ludCBt
X3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uOyAvLyBGb3IgYSByZXBsaWNhIGxheWVyLCB0aGUgcG9z
aXRpb24gb2YgdGhlIHJlcGxpY2EuCisgICAgR3JhcGhpY3NQb2ludCBtX3JlcGxpY2F0ZWRMYXll
clBvc2l0aW9uOyAvLyBGb3IgYSByZXBsaWNhIGxheWVyLCB0aGUgcG9zaXRpb24gb2YgdGhlIHJl
cGxpY2EuCiAKICAgICBJbnRSZWN0IG1fY29udGVudHNSZWN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgSW50UG9pbnQ7
CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7
CiAKIGVudW0gR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgewogICAgIEdyYXBoaWNzTGF5ZXJQ
YWludEJhY2tncm91bmQgPSAoMSA8PCAwKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQzRC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAg
ICAgICAgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCisKKyNpbmNsdWRlIDxtYXRo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGljc1BvaW50M0Q6Om5vcm1h
bGl6ZSgpCit7CisgICAgZmxvYXQgdGVtcExlbmd0aCA9IGxlbmd0aCgpOworCisgICAgaWYgKHRl
bXBMZW5ndGgpIHsKKyAgICAgICAgbV94IC89IHRlbXBMZW5ndGg7CisgICAgICAgIG1feSAvPSB0
ZW1wTGVuZ3RoOworICAgICAgICBtX3ogLz0gdGVtcExlbmd0aDsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NQb2ludDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxODcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNSBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAxMCBab2x0
YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgR3JhcGhpY3NQb2lu
dDNEX2gKKyNkZWZpbmUgR3JhcGhpY3NQb2ludDNEX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc1BvaW50M0Qgewor
cHVibGljOgorICAgIEdyYXBoaWNzUG9pbnQzRCgpCisgICAgICAgIDogbV94KDApCisgICAgICAg
ICwgbV95KDApCisgICAgICAgICwgbV96KDApCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNz
UG9pbnQzRChHcmFwaGljc1VuaXQgeCwgR3JhcGhpY3NVbml0IHksIEdyYXBoaWNzVW5pdCB6KQor
ICAgICAgICA6IG1feCh4KQorICAgICAgICAsIG1feSh5KQorICAgICAgICAsIG1feih6KQorICAg
IHsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50M0QoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkK
KyAgICAgICAgOiBtX3gocC54KCkpCisgICAgICAgICwgbV95KHAueSgpKQorICAgICAgICAsIG1f
eigwKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50M0QoY29uc3QgR3JhcGhpY3NQ
b2ludDNEJiBwKQorICAgICAgICA6IG1feChwLngoKSkKKyAgICAgICAgLCBtX3kocC55KCkpCisg
ICAgICAgICwgbV96KHAueigpKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1VuaXQgeCgp
IGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIHZvaWQgc2V0WChHcmFwaGljc1VuaXQgeCkgeyBt
X3ggPSB4OyB9CisKKyAgICBHcmFwaGljc1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQor
ICAgIHZvaWQgc2V0WShHcmFwaGljc1VuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICBHcmFwaGlj
c1VuaXQgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQorICAgIHZvaWQgc2V0WihHcmFwaGljc1Vu
aXQgeikgeyBtX3ogPSB6OyB9CisgICAgdm9pZCBzZXQoR3JhcGhpY3NVbml0IHgsIEdyYXBoaWNz
VW5pdCB5LCBHcmFwaGljc1VuaXQgeikKKyAgICB7CisgICAgICAgIG1feCA9IHg7CisgICAgICAg
IG1feSA9IHk7CisgICAgICAgIG1feiA9IHo7CisgICAgfQorICAgIHZvaWQgbW92ZShHcmFwaGlj
c1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSwgR3JhcGhpY3NVbml0IGR6KQorICAgIHsKKyAgICAg
ICAgbV94ICs9IGR4OworICAgICAgICBtX3kgKz0gZHk7CisgICAgICAgIG1feiArPSBkejsKKyAg
ICB9CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSwgR3Jh
cGhpY3NVbml0IHN6KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBtX3kgKj0g
c3k7CisgICAgICAgIG1feiAqPSBzejsKKyAgICB9CisKKyAgICBib29sIGlzWmVybygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gIW1feCAmJiAhbV95ICYmICFtX3o7CisgICAgfQorCisg
ICAgdm9pZCBub3JtYWxpemUoKTsKKworICAgIEdyYXBoaWNzVW5pdCBkb3QoY29uc3QgR3JhcGhp
Y3NQb2ludDNEJiBhKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIGEueCgpICsg
bV95ICogYS55KCkgKyBtX3ogKiBhLnooKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRoaXMgR3Jh
cGhpY3NQb2ludDNEIHRvIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoZSBwYXNzZWQgdHdvLgorICAg
IC8vIEl0IGlzIHNhZmUgZm9yICJ0aGlzIiB0byBiZSB0aGUgc2FtZSBhcyBlaXRoZXIgb3IgYm90
aCBvZiB0aGUKKyAgICAvLyBhcmd1bWVudHMuCisgICAgdm9pZCBjcm9zcyhjb25zdCBHcmFwaGlj
c1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikKKyAgICB7CisgICAgICAgIEdy
YXBoaWNzVW5pdCB4ID0gYS55KCkgKiBiLnooKSAtIGEueigpICogYi55KCk7CisgICAgICAgIEdy
YXBoaWNzVW5pdCB5ID0gYS56KCkgKiBiLngoKSAtIGEueCgpICogYi56KCk7CisgICAgICAgIEdy
YXBoaWNzVW5pdCB6ID0gYS54KCkgKiBiLnkoKSAtIGEueSgpICogYi54KCk7CisgICAgICAgIG1f
eCA9IHg7CisgICAgICAgIG1feSA9IHk7CisgICAgICAgIG1feiA9IHo7CisgICAgfQorCisgICAg
Ly8gQ29udmVuaWVuY2UgZnVuY3Rpb24gcmV0dXJuaW5nICJ0aGlzIGNyb3NzIHBvaW50IiBhcyBh
CisgICAgLy8gc3RhY2stYWxsb2NhdGVkIHJlc3VsdC4KKyAgICBHcmFwaGljc1BvaW50M0QgY3Jv
c3MoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQzRCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5jcm9zcygqdGhpcywgcG9pbnQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEdyYXBoaWNzVW5pdCBsZW5n
dGhTcXVhcmVkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQorICAgIEdyYXBo
aWNzVW5pdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOyB9
CisgICAgCisgICAgR3JhcGhpY3NVbml0IGRpc3RhbmNlVG8oY29uc3QgR3JhcGhpY3NQb2ludDNE
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NVbml0IG1feDsKKyAgICBHcmFwaGlj
c1VuaXQgbV95OworICAgIEdyYXBoaWNzVW5pdCBtX3o7Cit9OworCitpbmxpbmUgR3JhcGhpY3NQ
b2ludDNEJiBvcGVyYXRvciArPShHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgYikKK3sKKyAgICBhLm1vdmUoYi54KCksIGIueSgpLCBiLnooKSk7CisgICAgcmV0dXJu
IGE7Cit9CisKK2lubGluZSBHcmFwaGljc1BvaW50M0QmIG9wZXJhdG9yIC09KEdyYXBoaWNzUG9p
bnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQoreworICAgIGEubW92ZSgtYi54KCks
IC1iLnkoKSwgLWIueigpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9p
bnQzRCBvcGVyYXRvcisoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBhLCBjb25zdCBHcmFwaGljc1Bv
aW50M0QmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChhLngoKSArIGIueCgpLCBh
LnkoKSArIGIueSgpLCBhLnooKSArIGIueigpKTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQz
RCBvcGVyYXRvci0oY29uc3QgR3JhcGhpY3NQb2ludDNEJiBhLCBjb25zdCBHcmFwaGljc1BvaW50
M0QmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChhLngoKSAtIGIueCgpLCBhLnko
KSAtIGIueSgpLCBhLnooKSAtIGIueigpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikKK3sKKyAg
ICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkgPT0gYi55KCkgJiYgYS56KCkgPT0gYi56
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NQb2ludDNEJiBh
LCBjb25zdCBHcmFwaGljc1BvaW50M0QmIGIpCit7CisgICAgcmV0dXJuIGEueCgpICE9IGIueCgp
IHx8IGEueSgpICE9IGIueSgpIHx8IGEueigpICE9IGIueigpOworfQorCitpbmxpbmUgR3JhcGhp
Y3NVbml0IG9wZXJhdG9yKihjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgYikKK3sKKyAgICAvLyBkb3QgcHJvZHVjdAorICAgIHJldHVybiBhLmRvdChiKTsK
K30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQzRCBvcGVyYXRvciooR3JhcGhpY3NVbml0IGssIGNv
bnN0IEdyYXBoaWNzUG9pbnQzRCYgdikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDNEKGsg
KiB2LngoKSwgayAqIHYueSgpLCBrICogdi56KCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2lu
dDNEIG9wZXJhdG9yKihjb25zdCBHcmFwaGljc1BvaW50M0QmIHYsIEdyYXBoaWNzVW5pdCBrKQor
eworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QoayAqIHYueCgpLCBrICogdi55KCksIGsgKiB2
LnooKSk7Cit9CisKK2lubGluZSBHcmFwaGljc1VuaXQgR3JhcGhpY3NQb2ludDNEOjpkaXN0YW5j
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYSkgY29uc3QKK3sKKyAgICByZXR1cm4gKCp0aGlz
IC0gYSkubGVuZ3RoKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEdyYXBoaWNzUG9pbnQzRF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1BvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lh
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVk
ZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzUG9pbnQ6OkdyYXBo
aWNzUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIDogbV94KHAueCgpKSwgbV95KHAueSgpKQorewor
fQorCit2b2lkIEdyYXBoaWNzUG9pbnQ6Om5vcm1hbGl6ZSgpCit7CisgICAgR3JhcGhpY3NVbml0
IHRlbXBMZW5ndGggPSBsZW5ndGgoKTsKKworICAgIGlmICh0ZW1wTGVuZ3RoKSB7CisgICAgICAg
IG1feCAvPSB0ZW1wTGVuZ3RoOworICAgICAgICBtX3kgLz0gdGVtcExlbmd0aDsKKyAgICB9Cit9
CisKK0dyYXBoaWNzVW5pdCBHcmFwaGljc1BvaW50OjpsZW5ndGgoKSBjb25zdAoreworICAgIHJl
dHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOworfQorCitHcmFwaGljc1BvaW50IEdyYXBoaWNz
UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkg
Y29uc3QKK3sKKyAgICBkb3VibGUgbmV3WCwgbmV3WTsKKyAgICB0cmFuc2Zvcm0ubWFwKHN0YXRp
Y19jYXN0PGRvdWJsZT4obV94KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3kpLCBuZXdYLCBuZXdZ
KTsKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uKG5ld1gsIG5ld1kpOworfQorCitHcmFwaGlj
c1BvaW50IEdyYXBoaWNzUG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKSBjb25zdAoreworICAgIGRvdWJsZSBuZXdYLCBuZXdZOworICAg
IHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3gpLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1feSksIG5ld1gsIG5ld1kpOworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb24obmV3WCwg
bmV3WSk7Cit9CisKK0dyYXBoaWNzUG9pbnQgR3JhcGhpY3NQb2ludDo6bmFycm93UHJlY2lzaW9u
KGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChuYXJyb3dQ
cmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh4KSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQo
eSkpOworfQorCitHcmFwaGljc1VuaXQgZmluZFNsb3BlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAx
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgR3JhcGhpY3NVbml0JiBjKQoreworICAgIGlmIChw
Mi54KCkgPT0gcDEueCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHcmFw
aGljc1VuaXQ+OjppbmZpbml0eSgpOworCisgICAgLy8geSA9IG14ICsgYworICAgIEdyYXBoaWNz
VW5pdCBzbG9wZSA9IChwMi55KCkgLSBwMS55KCkpIC8gKHAyLngoKSAtIHAxLngoKSk7CisgICAg
YyA9IHAxLnkoKSAtIHNsb3BlICogcDEueCgpOworICAgIHJldHVybiBzbG9wZTsKK30KKworYm9v
bCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGQyLCBHcmFwaGljc1BvaW50JiBpbnRlcnNlY3Rpb24pIAoreworICAgIEdyYXBoaWNzVW5pdCBw
T2Zmc2V0ID0gMDsKKyAgICBHcmFwaGljc1VuaXQgcFNsb3BlID0gZmluZFNsb3BlKHAxLCBwMiwg
cE9mZnNldCk7CisKKyAgICBHcmFwaGljc1VuaXQgZE9mZnNldCA9IDA7CisgICAgR3JhcGhpY3NV
bml0IGRTbG9wZSA9IGZpbmRTbG9wZShkMSwgZDIsIGRPZmZzZXQpOworCisgICAgaWYgKGRTbG9w
ZSA9PSBwU2xvcGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocFNsb3Bl
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8R3JhcGhpY3NVbml0Pjo6aW5maW5pdHkoKSkgeworICAg
ICAgICBpbnRlcnNlY3Rpb24uc2V0WChwMS54KCkpOworICAgICAgICBpbnRlcnNlY3Rpb24uc2V0
WShkU2xvcGUgKiBpbnRlcnNlY3Rpb24ueCgpICsgZE9mZnNldCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBpZiAoZFNsb3BlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8R3JhcGhp
Y3NVbml0Pjo6aW5maW5pdHkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WChkMS54KCkp
OworICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WShwU2xvcGUgKiBpbnRlcnNlY3Rpb24ueCgpICsg
cE9mZnNldCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBGaW5k
IHggYXQgaW50ZXJzZWN0aW9uLCB3aGVyZSB5cyBvdmVybGFwOyB4ID0gKGMnIC0gYykgLyAobSAt
IG0nKQorICAgIGludGVyc2VjdGlvbi5zZXRYKChkT2Zmc2V0IC0gcE9mZnNldCkgLyAocFNsb3Bl
IC0gZFNsb3BlKSk7CisgICAgaW50ZXJzZWN0aW9uLnNldFkocFNsb3BlICogaW50ZXJzZWN0aW9u
LngoKSArIHBPZmZzZXQpOworICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEdyYXBoaWNzUG9pbnRfaAorI2RlZmluZSBHcmFwaGljc1BvaW50X2gKKworI2luY2x1ZGUgIkdy
YXBoaWNzU2l6ZS5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlw
ZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMp
IHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyNpZmRlZiBOU0dFT01FVFJZ
X1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBO
U1BvaW50OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7CisjZW5kaWYK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAicWdsb2JhbC5oIgorUVRfQkVH
SU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnRGOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisK
KyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJQb2ludDsKKyNlbmRpZgorCisjaWYgVVNFKFNL
SUEpCitzdHJ1Y3QgU2tQb2ludDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3Mg
SW50UG9pbnQ7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBHcmFwaGljc1BvaW50IHsKK3B1Ymxp
YzoKKyAgICBHcmFwaGljc1BvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBHcmFwaGlj
c1BvaW50KEdyYXBoaWNzVW5pdCB4LCBHcmFwaGljc1VuaXQgeSkgOiBtX3goeCksIG1feSh5KSB7
IH0KKyAgICBHcmFwaGljc1BvaW50KGNvbnN0IEludFBvaW50Jik7CisKKworICAgIHN0YXRpYyBH
cmFwaGljc1BvaW50IHplcm8oKSB7IHJldHVybiBHcmFwaGljc1BvaW50KCk7IH0KKworICAgIHN0
YXRpYyBHcmFwaGljc1BvaW50IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91YmxlIHkpOwor
CisgICAgR3JhcGhpY3NVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBHcmFwaGlj
c1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorCisgICAgdm9pZCBzZXRYKEdyYXBoaWNz
VW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lkIHNldFkoR3JhcGhpY3NVbml0IHkpIHsgbV95
ID0geTsgfQorICAgIHZvaWQgc2V0KEdyYXBoaWNzVW5pdCB4LCBHcmFwaGljc1VuaXQgeSkKKyAg
ICB7CisgICAgICAgIG1feCA9IHg7CisgICAgICAgIG1feSA9IHk7CisgICAgfQorICAgIHZvaWQg
bW92ZShHcmFwaGljc1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1f
eCArPSBkeDsKKyAgICAgICAgbV95ICs9IGR5OworICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3Qg
SW50U2l6ZSYgYSkKKyAgICB7CisgICAgICAgIG1feCArPSBhLndpZHRoKCk7CisgICAgICAgIG1f
eSArPSBhLmhlaWdodCgpOworICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgR3JhcGhpY3NTaXpl
JiBhKQorICAgIHsKKyAgICAgICAgbV94ICs9IGEud2lkdGgoKTsKKyAgICAgICAgbV95ICs9IGEu
aGVpZ2h0KCk7CisgICAgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEludFBvaW50JiBhKQorICAg
IHsKKyAgICAgICAgbV94ICs9IGEueCgpOworICAgICAgICBtX3kgKz0gYS55KCk7CisgICAgfQor
ICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEpCisgICAgeworICAgICAgICBt
X3ggKz0gYS54KCk7CisgICAgICAgIG1feSArPSBhLnkoKTsKKyAgICB9CisgICAgdm9pZCBzY2Fs
ZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSkKKyAgICB7CisgICAgICAgIG1feCAq
PSBzeDsKKyAgICAgICAgbV95ICo9IHN5OworICAgIH0KKworICAgIHZvaWQgbm9ybWFsaXplKCk7
CisKKyAgICBHcmFwaGljc1VuaXQgZG90KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV94ICogYS54KCkgKyBtX3kgKiBhLnkoKTsKKyAgICB9CisK
KyAgICBHcmFwaGljc1VuaXQgbGVuZ3RoKCkgY29uc3Q7CisgICAgR3JhcGhpY3NVbml0IGxlbmd0
aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAq
IG1feTsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50IGV4cGFuZGVkVG8oY29uc3QgR3JhcGhp
Y3NQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7Cisg
ICAgfQorCisgICAgR3JhcGhpY3NQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV95LCBtX3gpOworICAgIH0KKworI2lmIFVT
RShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQorICAgIEdyYXBoaWNzUG9pbnQoY29u
c3QgQ0dQb2ludCYpOworICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisj
aWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NH
R0VPTUVUUllfVFlQRVMpKSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1Mo
REFSV0lOKSkKKyAgICBHcmFwaGljc1BvaW50KGNvbnN0IE5TUG9pbnQmKTsKKyAgICBvcGVyYXRv
ciBOU1BvaW50KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIEdyYXBo
aWNzUG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgR3JhcGhpY3NQb2ludChjb25zdCBC
UG9pbnQmKTsKKyAgICBvcGVyYXRvciBCUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgVVNF
KFNLSUEpCisgICAgb3BlcmF0b3IgU2tQb2ludCgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQo
Y29uc3QgU2tQb2ludCYpOworI2VuZGlmCisKKyAgICBHcmFwaGljc1BvaW50IG1hdHJpeFRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9p
bnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCitwcml2
YXRlOgorICAgIEdyYXBoaWNzVW5pdCBtX3gsIG1feTsKK307CisKKworaW5saW5lIEdyYXBoaWNz
UG9pbnQmIG9wZXJhdG9yKz0oR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBi
KQoreworICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOwor
fQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCYgb3BlcmF0b3IrPShHcmFwaGljc1BvaW50JiBhLCBj
b25zdCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIGEubW92ZShiLngoKSwgYi55KCkpOworICAg
IHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCYgb3BlcmF0b3ItPShHcmFwaGlj
c1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1NpemUmIGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRo
KCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9p
bnQgb3BlcmF0b3IrKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
YikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChhLngoKSArIGIud2lkdGgoKSwgYS55KCkg
KyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0b3IrKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIpCit7CisgICAgcmV0dXJu
IEdyYXBoaWNzUG9pbnQoYS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7Cit9CisKK2lubGlu
ZSBHcmFwaGljc1NpemUgb3BlcmF0b3ItKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShhLngoKSAtIGIueCgp
LCBhLnkoKSAtIGIueSgpKTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0b3ItKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1
cm4gR3JhcGhpY3NQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdodCgpKTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHcmFwaGljc1BvaW50JiBhLCBjb25z
dCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnko
KSA9PSBiLnkoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHcmFwaGljc1Bv
aW50JiBhLCBjb25zdCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSAhPSBi
LngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKK30KKworaW5saW5lIEdyYXBoaWNzVW5pdCBvcGVyYXRv
ciooY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYikKK3sKKyAg
ICAvLyBkb3QgcHJvZHVjdAorICAgIHJldHVybiBhLmRvdChiKTsKK30KKworaW5saW5lIEludFBv
aW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAgIHJldHVy
biBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngoKSkpLCBzdGF0aWNfY2FzdDxp
bnQ+KHJvdW5kZihwLnkoKSkpKTsKK30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2lu
dChjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNf
Y2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOworfQorCitpbmxpbmUg
SW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAgIHJl
dHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAu
eSgpKSk7Cit9CisKK0dyYXBoaWNzVW5pdCBmaW5kU2xvcGUoY29uc3QgR3JhcGhpY3NQb2ludCYg
cDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBHcmFwaGljc1VuaXQmKTsKKworLy8gRmluZCBw
b2ludCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2Vj
dC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgorYm9vbCBmaW5k
SW50ZXJzZWN0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGQyLCBH
cmFwaGljc1BvaW50JiBpbnRlcnNlY3Rpb24pOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFk
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKwor
dXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaW5saW5lIEdyYXBoaWNzVW5pdCBtaW40KEdyYXBoaWNzVW5pdCBhLCBHcmFwaGlj
c1VuaXQgYiwgR3JhcGhpY3NVbml0IGMsIEdyYXBoaWNzVW5pdCBkKQoreworICAgIHJldHVybiBt
aW4obWluKGEsIGIpLCBtaW4oYywgZCkpOworfQorCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzVW5p
dCBtYXg0KEdyYXBoaWNzVW5pdCBhLCBHcmFwaGljc1VuaXQgYiwgR3JhcGhpY3NVbml0IGMsIEdy
YXBoaWNzVW5pdCBkKQoreworICAgIHJldHVybiBtYXgobWF4KGEsIGIpLCBtYXgoYywgZCkpOwor
fQorCitpbmxpbmUgR3JhcGhpY3NVbml0IGRvdChjb25zdCBHcmFwaGljc1NpemUmIGEsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi53aWR0aCgpICsg
YS5oZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29sIGlzUG9pbnRJblRyaWFu
Z2xlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHQxLCBjb25z
dCBHcmFwaGljc1BvaW50JiB0MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdDMpCit7CisgICAgLy8g
Q29tcHV0ZSB2ZWN0b3JzICAgICAgICAKKyAgICBHcmFwaGljc1NpemUgdjAgPSB0MyAtIHQxOwor
ICAgIEdyYXBoaWNzU2l6ZSB2MSA9IHQyIC0gdDE7CisgICAgR3JhcGhpY3NTaXplIHYyID0gcCAt
IHQxOworICAgIAorICAgIC8vIENvbXB1dGUgZG90IHByb2R1Y3RzCisgICAgR3JhcGhpY3NVbml0
IGRvdDAwID0gZG90KHYwLCB2MCk7CisgICAgR3JhcGhpY3NVbml0IGRvdDAxID0gZG90KHYwLCB2
MSk7CisgICAgR3JhcGhpY3NVbml0IGRvdDAyID0gZG90KHYwLCB2Mik7CisgICAgR3JhcGhpY3NV
bml0IGRvdDExID0gZG90KHYxLCB2MSk7CisgICAgR3JhcGhpY3NVbml0IGRvdDEyID0gZG90KHYx
LCB2Mik7CisKKyAgICAvLyBDb21wdXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzCisgICAgR3Jh
cGhpY3NVbml0IGludkRlbm9tID0gMS4wZiAvIChkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3Qw
MSk7CisgICAgR3JhcGhpY3NVbml0IHUgPSAoZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIp
ICogaW52RGVub207CisgICAgR3JhcGhpY3NVbml0IHYgPSAoZG90MDAgKiBkb3QxMiAtIGRvdDAx
ICogZG90MDIpICogaW52RGVub207CisKKyAgICAvLyBDaGVjayBpZiBwb2ludCBpcyBpbiB0cmlh
bmdsZQorICAgIHJldHVybiAodSA+PSAwKSAmJiAodiA+PSAwKSAmJiAodSArIHYgPD0gMSk7Cit9
CisKK0dyYXBoaWNzUmVjdCBHcmFwaGljc1F1YWQ6OmJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAg
ICBHcmFwaGljc1VuaXQgbGVmdCAgID0gbWluNChtX3AxLngoKSwgbV9wMi54KCksIG1fcDMueCgp
LCBtX3A0LngoKSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCAgICA9IG1pbjQobV9wMS55KCksIG1f
cDIueSgpLCBtX3AzLnkoKSwgbV9wNC55KCkpOworCisgICAgR3JhcGhpY3NVbml0IHJpZ2h0ICA9
IG1heDQobV9wMS54KCksIG1fcDIueCgpLCBtX3AzLngoKSwgbV9wNC54KCkpOworICAgIEdyYXBo
aWNzVW5pdCBib3R0b20gPSBtYXg0KG1fcDEueSgpLCBtX3AyLnkoKSwgbV9wMy55KCksIG1fcDQu
eSgpKTsKKyAgICAKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBs
ZWZ0LCBib3R0b20gLSB0b3ApOworfQorCitib29sIEdyYXBoaWNzUXVhZDo6aXNSZWN0aWxpbmVh
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3AxLngoKSA9PSBtX3AyLngoKSAmJiBtX3AyLnko
KSA9PSBtX3AzLnkoKSAmJiBtX3AzLngoKSA9PSBtX3A0LngoKSAmJiBtX3A0LnkoKSA9PSBtX3Ax
LnkoKSkKKyAgICAgICAgfHwgKG1fcDEueSgpID09IG1fcDIueSgpICYmIG1fcDIueCgpID09IG1f
cDMueCgpICYmIG1fcDMueSgpID09IG1fcDQueSgpICYmIG1fcDQueCgpID09IG1fcDEueCgpKTsK
K30KKworYm9vbCBHcmFwaGljc1F1YWQ6OmNvbnRhaW5zUG9pbnQoY29uc3QgR3JhcGhpY3NQb2lu
dCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQb2ludEluVHJpYW5nbGUocCwgbV9wMSwgbV9w
MiwgbV9wMykgfHwgaXNQb2ludEluVHJpYW5nbGUocCwgbV9wMSwgbV9wMywgbV9wNCk7Cit9IAor
CisvLyBOb3RlIHRoYXQgd2Ugb25seSBoYW5kbGUgY29udmV4IHF1YWRzIGhlcmUuCitib29sIEdy
YXBoaWNzUXVhZDo6Y29udGFpbnNRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQob3RoZXIucDEoKSkgJiYgY29udGFpbnNQb2lu
dChvdGhlci5wMigpKSAmJiBjb250YWluc1BvaW50KG90aGVyLnAzKCkpICYmIGNvbnRhaW5zUG9p
bnQob3RoZXIucDQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNzUXVhZF9o
CisjZGVmaW5lIEdyYXBoaWNzUXVhZF9oCisKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEEgR3JhcGhpY3NRdWFkIGlzIGEgY29sbGVjdGlvbiBvZiA0IHBv
aW50cywgb2Z0ZW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YKKy8vIG1hcHBpbmcgYSByZWN0
YW5nbGUgdGhyb3VnaCB0cmFuc2Zvcm1zLiBXaGVuIGluaXRpYWxpemVkIGZyb20gYSByZWN0LCB0
aGUKKy8vIHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVyIGZyb20gdG9wIGxlZnQuCitjbGFz
cyBHcmFwaGljc1F1YWQgeworcHVibGljOgorICAgIEdyYXBoaWNzUXVhZCgpCisgICAgeworICAg
IH0KKworICAgIEdyYXBoaWNzUXVhZChjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwNCkKKyAgICAgICAgOiBtX3AxKHAxKQorICAgICAgICAsIG1fcDIocDIpCisgICAgICAg
ICwgbV9wMyhwMykKKyAgICAgICAgLCBtX3A0KHA0KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFw
aGljc1F1YWQoY29uc3QgR3JhcGhpY3NSZWN0JiBpblJlY3QpCisgICAgICAgIDogbV9wMShpblJl
Y3QubG9jYXRpb24oKSkKKyAgICAgICAgLCBtX3AyKGluUmVjdC5tYXhYKCksIGluUmVjdC55KCkp
CisgICAgICAgICwgbV9wMyhpblJlY3QubWF4WCgpLCBpblJlY3QubWF4WSgpKQorICAgICAgICAs
IG1fcDQoaW5SZWN0LngoKSwgaW5SZWN0Lm1heFkoKSkKKyAgICB7CisgICAgfQorCisgICAgR3Jh
cGhpY3NQb2ludCBwMSgpIGNvbnN0IHsgcmV0dXJuIG1fcDE7IH0KKyAgICBHcmFwaGljc1BvaW50
IHAyKCkgY29uc3QgeyByZXR1cm4gbV9wMjsgfQorICAgIEdyYXBoaWNzUG9pbnQgcDMoKSBjb25z
dCB7IHJldHVybiBtX3AzOyB9CisgICAgR3JhcGhpY3NQb2ludCBwNCgpIGNvbnN0IHsgcmV0dXJu
IG1fcDQ7IH0KKworICAgIHZvaWQgc2V0UDEoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3Ax
ID0gcDsgfQorICAgIHZvaWQgc2V0UDIoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3AyID0g
cDsgfQorICAgIHZvaWQgc2V0UDMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3AzID0gcDsg
fQorICAgIHZvaWQgc2V0UDQoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3A0ID0gcDsgfQor
CisgICAgLy8gaXNFbXB0eSB0ZXN0cyB0aGF0IHRoZSBib3VuZGluZyBib3ggaXMgZW1wdHkuIFRo
aXMgd2lsbCBub3QgaWRlbnRpZnkKKyAgICAvLyAic2xhbnRlZCIgZW1wdHkgcXVhZHMuCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gYm91bmRpbmdCb3goKS5pc0VtcHR5KCk7IH0K
KworICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhpcyBxdWFkIGNhbiBiZSBsb3NzbGVzc2x5IHJlcHJl
c2VudGVkIGJ5IGEgR3JhcGhpY3NSZWN0LAorICAgIC8vIHRoYXQgaXMsIGlmIHR3byBlZGdlcyBh
cmUgcGFyYWxsZWwgdG8gdGhlIHgtYXhpcyBhbmQgdGhlIG90aGVyIHR3bworICAgIC8vIGFyZSBw
YXJhbGxlbCB0byB0aGUgeS1heGlzLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUsIHRoZQor
ICAgIC8vIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NSZWN0IGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBi
b3VuZGluZ0JveCgpLgorICAgIGJvb2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0OworCisgICAgLy8g
VGVzdHMgd2hldGhlciB0aGUgZ2l2ZW4gcG9pbnQgaXMgaW5zaWRlLCBvciBvbiBhbiBlZGdlIG9y
IGNvcm5lciBvZiB0aGlzIHF1YWQuCisgICAgYm9vbCBjb250YWluc1BvaW50KGNvbnN0IEdyYXBo
aWNzUG9pbnQmKSBjb25zdDsKKworICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhlIGZvdXIgY29ybmVy
cyBvZiBvdGhlciBhcmUgaW5zaWRlLCBvciBjb2luY2lkZW50IHdpdGggdGhlIHNpZGVzIG9mIHRo
aXMgcXVhZC4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIGZvciBjb252ZXggcXVh
ZHMsIGJ1dCB0aGF0IGluY2x1ZGVzIGFsbCBxdWFkcyB0aGF0IG9yaWdpbmF0ZQorICAgIC8vIGZy
b20gdHJhbnNmb3JtZWQgcmVjdHMuCisgICAgYm9vbCBjb250YWluc1F1YWQoY29uc3QgR3JhcGhp
Y3NRdWFkJikgY29uc3Q7CisKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3goKSBjb25zdDsK
KyAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHZv
aWQgbW92ZShjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fcDEg
Kz0gb2Zmc2V0OworICAgICAgICBtX3AyICs9IG9mZnNldDsKKyAgICAgICAgbV9wMyArPSBvZmZz
ZXQ7CisgICAgICAgIG1fcDQgKz0gb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQgbW92ZShHcmFw
aGljc1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fcDEubW92ZShk
eCwgZHkpOworICAgICAgICBtX3AyLm1vdmUoZHgsIGR5KTsKKyAgICAgICAgbV9wMy5tb3ZlKGR4
LCBkeSk7CisgICAgICAgIG1fcDQubW92ZShkeCwgZHkpOworICAgIH0KKworICAgIHZvaWQgc2Nh
bGUoR3JhcGhpY3NVbml0IGR4LCBHcmFwaGljc1VuaXQgZHkpCisgICAgeworICAgICAgICBtX3Ax
LnNjYWxlKGR4LCBkeSk7CisgICAgICAgIG1fcDIuc2NhbGUoZHgsIGR5KTsKKyAgICAgICAgbV9w
My5zY2FsZShkeCwgZHkpOworICAgICAgICBtX3A0LnNjYWxlKGR4LCBkeSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEdyYXBoaWNzUG9pbnQgbV9wMTsKKyAgICBHcmFwaGljc1BvaW50IG1fcDI7
CisgICAgR3JhcGhpY3NQb2ludCBtX3AzOworICAgIEdyYXBoaWNzUG9pbnQgbV9wNDsKK307CisK
K2lubGluZSBHcmFwaGljc1F1YWQmIG9wZXJhdG9yKz0oR3JhcGhpY3NRdWFkJiBhLCBjb25zdCBH
cmFwaGljc1NpemUmIGIpCit7CisgICAgYS5tb3ZlKGIpOworICAgIHJldHVybiBhOworfQorCitp
bmxpbmUgR3JhcGhpY3NRdWFkJiBvcGVyYXRvci09KEdyYXBoaWNzUXVhZCYgYSwgY29uc3QgR3Jh
cGhpY3NTaXplJiBiKQoreworICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR3JhcGhpY3NR
dWFkJiBhLCBjb25zdCBHcmFwaGljc1F1YWQmIGIpCit7CisgICAgcmV0dXJuIGEucDEoKSA9PSBi
LnAxKCkgJiYKKyAgICAgICAgICAgYS5wMigpID09IGIucDIoKSAmJiAKKyAgICAgICAgICAgYS5w
MygpID09IGIucDMoKSAmJgorICAgICAgICAgICBhLnA0KCkgPT0gYi5wNCgpOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyYXBoaWNzUXVhZCYgYSwgY29uc3QgR3JhcGhpY3NR
dWFkJiBiKQoreworICAgIHJldHVybiBhLnAxKCkgIT0gYi5wMSgpIHx8CisgICAgICAgICAgIGEu
cDIoKSAhPSBiLnAyKCkgfHwgCisgICAgICAgICAgIGEucDMoKSAhPSBiLnAzKCkgfHwKKyAgICAg
ICAgICAgYS5wNCgpICE9IGIucDQoKTsKK30KKworfSAgIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KworI2VuZGlmIC8vIEdyYXBoaWNzUXVhZF9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NSZWN0OjpHcmFwaGljc1Jl
Y3QoY29uc3QgSW50UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1fc2l6ZShy
LnNpemUoKSkKK3sKK30KKworR3JhcGhpY3NSZWN0IEdyYXBoaWNzUmVjdDo6bmFycm93UHJlY2lz
aW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQorewor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoeCks
IG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHkpLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBo
aWNzVW5pdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KGhlaWdodCkpOwor
fQorCitib29sIEdyYXBoaWNzUmVjdDo6aW50ZXJzZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIG90
aGVyKSBjb25zdAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZl
IHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVy
LmlzRW1wdHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwg
bWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZ
KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NSZWN0Ojpjb250YWlucyhjb25zdCBHcmFwaGljc1JlY3Qm
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+
PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0g
b3RoZXIubWF4WSgpOworfQorCit2b2lkIEdyYXBoaWNzUmVjdDo6aW50ZXJzZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgb3RoZXIpCit7CisgICAgR3JhcGhpY3NVbml0IGwgPSBtYXgoeCgpLCBvdGhl
ci54KCkpOworICAgIEdyYXBoaWNzVW5pdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKKyAgICBH
cmFwaGljc1VuaXQgciA9IG1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgR3JhcGhpY3NV
bml0IGIgPSBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgLy8gUmV0dXJuIGEgY2xl
YW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJzZWN0aW5nIGNhc2VzLgorICAgIGlmIChs
ID49IHIgfHwgdCA+PSBiKSB7CisgICAgICAgIGwgPSAwOworICAgICAgICB0ID0gMDsKKyAgICAg
ICAgciA9IDA7CisgICAgICAgIGIgPSAwOworICAgIH0KKworICAgIHNldExvY2F0aW9uQW5kU2l6
ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnVuaXRlKGNv
bnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwg
Y2FzZXMgZmlyc3QuCisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEdyYXBoaWNzVW5pdCBsID0gbWluKHgoKSwgb3RoZXIueCgpKTsK
KyAgICBHcmFwaGljc1VuaXQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7CisgICAgR3JhcGhpY3NV
bml0IHIgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEdyYXBoaWNzVW5pdCBiID0g
bWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21F
ZGdlcyhsLCB0LCByLCBiKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnVuaXRlSWZOb25aZXJv
KGNvbnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNp
YWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKKyAg
ICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdyYXBo
aWNzVW5pdCBsZWZ0ID0gbWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBHcmFwaGljc1VuaXQgdG9w
ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBHcmFwaGljc1VuaXQgcmlnaHQgPSBtYXgobWF4
WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEdyYXBoaWNzVW5pdCBib3R0b20gPSBtYXgobWF4WSgp
LCBvdGhlci5tYXhZKCkpOworCisgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NSZWN0OjpzY2FsZShHcmFw
aGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSkKK3sKKyAgICBtX2xvY2F0aW9uLnNldFgoeCgp
ICogc3gpOworICAgIG1fbG9jYXRpb24uc2V0WSh5KCkgKiBzeSk7CisgICAgbV9zaXplLnNldFdp
ZHRoKHdpZHRoKCkgKiBzeCk7CisgICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAqIHN5KTsK
K30KKwordm9pZCBHcmFwaGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSkKK3sKKyAgICBHcmFwaGljc1VuaXQgbGVmdCA9
IG1pbihwMC54KCksIHAxLngoKSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCA9IG1pbihwMC55KCks
IHAxLnkoKSk7CisgICAgR3JhcGhpY3NVbml0IHJpZ2h0ID0gbWF4KHAwLngoKSwgcDEueCgpKTsK
KyAgICBHcmFwaGljc1VuaXQgYm90dG9tID0gbWF4KHAwLnkoKSwgcDEueSgpKTsKKworICAgIHNl
dExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQor
CituYW1lc3BhY2UgeworLy8gSGVscGVycyBmb3IgMy0gYW5kIDQtd2F5IG1heCBhbmQgbWluLgor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1QgbWluMyhjb25zdCBUJiB2MSwgY29uc3QgVCYgdjIs
IGNvbnN0IFQmIHYzKQoreworICAgIHJldHVybiBtaW4obWluKHYxLCB2MiksIHYzKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUIG1heDMoY29uc3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBj
b25zdCBUJiB2MykKK3sKKyAgICByZXR1cm4gbWF4KG1heCh2MSwgdjIpLCB2Myk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorVCBtaW40KGNvbnN0IFQmIHYxLCBjb25zdCBUJiB2MiwgY29u
c3QgVCYgdjMsIGNvbnN0IFQmIHY0KQoreworICAgIHJldHVybiBtaW4obWluKHYxLCB2MiksIG1p
bih2MywgdjQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUIG1heDQoY29uc3QgVCYg
djEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MywgY29uc3QgVCYgdjQpCit7CisgICAgcmV0dXJu
IG1heChtYXgodjEsIHYyKSwgbWF4KHYzLCB2NCkpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKwordm9pZCBHcmFwaGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIp
Cit7CisgICAgR3JhcGhpY3NVbml0IGxlZnQgPSBtaW4zKHAwLngoKSwgcDEueCgpLCBwMi54KCkp
OworICAgIEdyYXBoaWNzVW5pdCB0b3AgPSBtaW4zKHAwLnkoKSwgcDEueSgpLCBwMi55KCkpOwor
ICAgIEdyYXBoaWNzVW5pdCByaWdodCA9IG1heDMocDAueCgpLCBwMS54KCksIHAyLngoKSk7Cisg
ICAgR3JhcGhpY3NVbml0IGJvdHRvbSA9IG1heDMocDAueSgpLCBwMS55KCksIHAyLnkoKSk7CisK
KyAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzKQoreworICAgIEdyYXBoaWNzVW5pdCBsZWZ0ID0gbWlu
NChwMC54KCksIHAxLngoKSwgcDIueCgpLCBwMy54KCkpOworICAgIEdyYXBoaWNzVW5pdCB0b3Ag
PSBtaW40KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7CisgICAgR3JhcGhpY3NVbml0
IHJpZ2h0ID0gbWF4NChwMC54KCksIHAxLngoKSwgcDIueCgpLCBwMy54KCkpOworICAgIEdyYXBo
aWNzVW5pdCBib3R0b20gPSBtYXg0KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7CisK
KyAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9t
KTsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKK3sKKyAgICBHcmFwaGljc1VuaXQgbGVmdCA9IGZsb29yKHJlY3QueCgpKTsKKyAgICBHcmFw
aGljc1VuaXQgdG9wID0gZmxvb3IocmVjdC55KCkpOworICAgIEdyYXBoaWNzVW5pdCB3aWR0aCA9
IGNlaWwocmVjdC5tYXhYKCkpIC0gbGVmdDsKKyAgICBHcmFwaGljc1VuaXQgaGVpZ2h0ID0gY2Vp
bChyZWN0Lm1heFkoKSkgLSB0b3A7CisgICAgCisgICAgcmV0dXJuIEludFJlY3QoY2xhbXBUb0lu
dGVnZXIobGVmdCksIGNsYW1wVG9JbnRlZ2VyKHRvcCksIAorICAgICAgICAgICAgICAgICAgIGNs
YW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisKK0dyYXBo
aWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQoreworICAgIGlmIChzcmNS
ZWN0LndpZHRoKCkgPT0gMCB8fCBzcmNSZWN0LmhlaWdodCgpID09IDApCisgICAgICAgIHJldHVy
biBHcmFwaGljc1JlY3QoKTsKKworICAgIEdyYXBoaWNzVW5pdCB3aWR0aFNjYWxlID0gZGVzdFJl
Y3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAgICBHcmFwaGljc1VuaXQgaGVpZ2h0U2Nh
bGUgPSBkZXN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdChkZXN0UmVjdC54KCkgKyAoci54KCkgLSBzcmNSZWN0LngoKSkgKiB3aWR0aFNj
YWxlLAorICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QueSgpICsgKHIueSgpIC0gc3JjUmVj
dC55KCkpICogaGVpZ2h0U2NhbGUsCisgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCkgKiB3
aWR0aFNjYWxlLCByLmhlaWdodCgpICogaGVpZ2h0U2NhbGUpOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEdyYXBoaWNzUmVjdF9oCisjZGVmaW5lIEdyYXBoaWNzUmVjdF9oCisKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkK
K3R5cGVkZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQorI2lmZGVmIE5TR0VPTUVU
UllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1JlY3Qg
TlNSZWN0OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OworI2VuZGlmCisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUmVj
dEY7CitRVF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdYKSAmJiBVU0Uo
V1hHQykKK2NsYXNzIHd4UmVjdDJERG91YmxlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShIQUlL
VSkKK2NsYXNzIEJSZWN0OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkKK3N0cnVjdCBTa1JlY3Q7
CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19yZWN0YW5n
bGUgY2Fpcm9fcmVjdGFuZ2xlX3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWYgUExBVEZPUk0oT1BFTlZHKQorY2xhc3MgVkdSZWN0OworI2VuZGlmCisKK2NsYXNzIEludFJl
Y3Q7CitjbGFzcyBJbnRQb2ludDsKKworY2xhc3MgR3JhcGhpY3NSZWN0IHsKK3B1YmxpYzoKKyAg
ICBHcmFwaGljc1JlY3QoKSB7IH0KKyAgICBHcmFwaGljc1JlY3QoY29uc3QgR3JhcGhpY3NQb2lu
dCYgbG9jYXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2xvY2F0
aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEdyYXBoaWNzUmVjdChHcmFwaGlj
c1VuaXQgeCwgR3JhcGhpY3NVbml0IHksIEdyYXBoaWNzVW5pdCB3aWR0aCwgR3JhcGhpY3NVbml0
IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9uKEdyYXBoaWNzUG9pbnQoeCwgeSkpLCBtX3Np
emUoR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBHcmFwaGljc1JlY3QoY29u
c3QgSW50UmVjdCYpOworCisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBuYXJyb3dQcmVjaXNpb24o
ZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOworCisgICAg
R3JhcGhpY3NQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KKyAg
ICBHcmFwaGljc1NpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdm9p
ZCBzZXRMb2NhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBsb2NhdGlvbikgeyBtX2xvY2F0aW9u
ID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXpl
KSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEdyYXBoaWNzVW5pdCB4KCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBHcmFwaGljc1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb24ueSgpOyB9CisgICAgR3JhcGhpY3NVbml0IG1heFgoKSBjb25zdCB7IHJldHVy
biB4KCkgKyB3aWR0aCgpOyB9CisgICAgR3JhcGhpY3NVbml0IG1heFkoKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEdyYXBoaWNzVW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZS53aWR0aCgpOyB9CisgICAgR3JhcGhpY3NVbml0IGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKEdyYXBoaWNzVW5pdCB4
KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShHcmFwaGljc1VuaXQgeSkg
eyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFdpZHRoKEdyYXBoaWNzVW5pdCB3
aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRIZWlnaHQoR3Jh
cGhpY3NVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKworICAgIEdy
YXBoaWNzUG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NQb2ludCh4KCkgKyB3
aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3ZlKGNvbnN0
IEdyYXBoaWNzU2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0YTsgfSAKKyAgICB2b2lk
IG1vdmVCeShjb25zdCBHcmFwaGljc1BvaW50JiBkZWx0YSkgeyBtX2xvY2F0aW9uLm1vdmUoZGVs
dGEueCgpLCBkZWx0YS55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEdyYXBoaWNzVW5pdCBkeCwgR3Jh
cGhpY3NVbml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9CisKKyAgICB2b2lkIGV4
cGFuZChjb25zdCBHcmFwaGljc1NpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0KKyAgICB2
b2lkIGV4cGFuZChHcmFwaGljc1VuaXQgZHcsIEdyYXBoaWNzVW5pdCBkaCkgeyBtX3NpemUuZXhw
YW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6
ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoR3JhcGhpY3NVbml0IGR3
LCBHcmFwaGljc1VuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKworICAgIHZv
aWQgc2hpZnRYRWRnZVRvKEdyYXBoaWNzVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAgR3JhcGhp
Y3NVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAgICAgICAg
c2V0V2lkdGgoc3RkOjptYXg8R3JhcGhpY3NVbml0PigwLjBmLCB3aWR0aCgpIC0gZGVsdGEpKTsK
KyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oR3JhcGhpY3NVbml0IGVkZ2UpCisgICAg
eworICAgICAgICBHcmFwaGljc1VuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAgICAgICBz
ZXRXaWR0aChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIHdpZHRoKCkgKyBkZWx0YSkpOwor
ICAgIH0KKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhHcmFwaGljc1VuaXQgZWRnZSkKKyAgICB7Cisg
ICAgICAgIEdyYXBoaWNzVW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNldFkoZWRn
ZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIGhlaWdo
dCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oR3JhcGhpY3NV
bml0IGVkZ2UpCisgICAgeworICAgICAgICBHcmFwaGljc1VuaXQgZGVsdGEgPSBlZGdlIC0gbWF4
WSgpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8R3JhcGhpY3NVbml0PigwLjBmLCBoZWln
aHQoKSArIGRlbHRhKSk7CisgICAgfQorCisgICAgR3JhcGhpY3NQb2ludCBtaW5YTWluWUNvcm5l
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQKKyAg
ICBHcmFwaGljc1BvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NQ
b2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0g
Ly8gdHlwaWNhbGx5IHRvcFJpZ2h0CisgICAgR3JhcGhpY3NQb2ludCBtaW5YTWF4WUNvcm5lcigp
IGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24u
eSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEdy
YXBoaWNzUG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1BvaW50
KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXpl
LmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKKworICAgIGJvb2wgaW50ZXJz
ZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0
IEdyYXBoaWNzUmVjdCYpIGNvbnN0OworCisgICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgR3JhcGhp
Y3NSZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lk
IHVuaXRlSWZOb25aZXJvKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworCisgICAgLy8gTm90ZSwgdGhp
cyBkb2Vzbid0IG1hdGNoIHdoYXQgSW50UmVjdDo6Y29udGFpbnMoSW50UG9pbnQmKSBkb2VzOyB0
aGUgaW50IHZlcnNpb24KKyAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50
IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCisg
ICAgYm9vbCBjb250YWlucyhHcmFwaGljc1VuaXQgcHgsIEdyYXBoaWNzVW5pdCBweSkgY29uc3QK
KyAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9IG1heFgoKSAmJiBweSA+PSB5KCkg
JiYgcHkgPD0gbWF4WSgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55KCkpOyB9
CisKKyAgICB2b2lkIGluZmxhdGVYKEdyYXBoaWNzVW5pdCBkeCkKKyAgICB7CisgICAgICAgIG1f
bG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKKyAgICAgICAgbV9zaXplLnNldFdp
ZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZVko
R3JhcGhpY3NVbml0IGR5KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRp
b24ueSgpIC0gZHkpOworICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSAr
IGR5ICsgZHkpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGUoR3JhcGhpY3NVbml0IGQpIHsgaW5m
bGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQgcykg
eyBzY2FsZShzLCBzKTsgfQorICAgIHZvaWQgc2NhbGUoR3JhcGhpY3NVbml0IHN4LCBHcmFwaGlj
c1VuaXQgc3kpOworCisgICAgR3JhcGhpY3NSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gR3JhcGhpY3NSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1fc2l6ZS50
cmFuc3Bvc2VkU2l6ZSgpKTsgfQorCisgICAgLy8gUmUtaW5pdGlhbGl6ZXMgdGhpcyByZWN0YW5n
bGUgdG8gZml0IHRoZSBzZXRzIG9mIHBhc3NlZCBwb2ludHMuCisgICAgdm9pZCBmaXRUb1BvaW50
cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEpOworICAg
IHZvaWQgZml0VG9Qb2ludHMoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMik7CisgICAgdm9pZCBmaXRUb1BvaW50
cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAyLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMyk7CisKKyNpZiBVU0Uo
Q0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKyAgICBHcmFwaGljc1JlY3QoY29uc3Qg
Q0dSZWN0Jik7CisgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIChQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKSkgXAorICAgICAgICB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJ
TikpCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IE5TUmVjdCYpOworICAgIG9wZXJhdG9yIE5TUmVj
dCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICBHcmFwaGljc1JlY3Qo
Y29uc3QgUVJlY3RGJik7CisgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IG5vcm1hbGl6ZWQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV1gpICYm
IFVTRShXWEdDKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCB3eFJlY3QyRERvdWJsZSYpOworICAg
IG9wZXJhdG9yIHd4UmVjdDJERG91YmxlKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KEhBSUtVKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBCUmVjdCYpOworICAgIG9wZXJhdG9yIEJS
ZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShTS0lBKQorICAgIEdyYXBoaWNzUmVjdChj
b25zdCBTa1JlY3QmKTsKKyAgICBvcGVyYXRvciBTa1JlY3QoKSBjb25zdDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oT1BFTlZHKQorICAgIG9wZXJhdG9yIFZHUmVjdCgpIGNvbnN0OworI2VuZGlm
CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IGNhaXJvX3JlY3Rhbmds
ZV90Jik7CisgICAgb3BlcmF0b3IgY2Fpcm9fcmVjdGFuZ2xlX3QoKSBjb25zdDsKKyNlbmRpZgor
Citwcml2YXRlOgorICAgIEdyYXBoaWNzUG9pbnQgbV9sb2NhdGlvbjsKKyAgICBHcmFwaGljc1Np
emUgbV9zaXplOworCisgICAgdm9pZCBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMoR3JhcGhp
Y3NVbml0IGxlZnQsIEdyYXBoaWNzVW5pdCB0b3AsIEdyYXBoaWNzVW5pdCByaWdodCwgR3JhcGhp
Y3NVbml0IGJvdHRvbSkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0KGxlZnQsIHRvcCk7
CisgICAgICAgIG1fc2l6ZS5zZXRXaWR0aChyaWdodCAtIGxlZnQpOworICAgICAgICBtX3NpemUu
c2V0SGVpZ2h0KGJvdHRvbSAtIHRvcCk7CisgICAgfQorfTsKKworaW5saW5lIEdyYXBoaWNzUmVj
dCBpbnRlcnNlY3Rpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBhLCBjb25zdCBHcmFwaGljc1JlY3Qm
IGIpCit7CisgICAgR3JhcGhpY3NSZWN0IGMgPSBhOworICAgIGMuaW50ZXJzZWN0KGIpOworICAg
IHJldHVybiBjOworfQorCitpbmxpbmUgR3JhcGhpY3NSZWN0IHVuaW9uUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYikKK3sKKyAgICBHcmFwaGljc1JlY3Qg
YyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5saW5lIEdyYXBo
aWNzUmVjdCYgb3BlcmF0b3IrPShHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
YikKK3sKKyAgICBhLm1vdmUoYi54KCksIGIueSgpKTsKKyAgICBhLnNldFdpZHRoKGEud2lkdGgo
KSArIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkp
OworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NSZWN0IG9wZXJhdG9yKyhjb25z
dCBHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYikKK3sKKyAgICBHcmFwaGlj
c1JlY3QgYyA9IGE7CisgICAgYyArPSBiOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEdyYXBoaWNzUmVjdCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBi
KQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigpICYmIGEuc2l6ZSgp
ID09IGIuc2l6ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyYXBoaWNz
UmVjdCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9u
KCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitJbnRSZWN0
IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisKKy8vIE1hcCByZWN0IHIg
ZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBkZXN0UmVjdC4KK0dyYXBoaWNz
UmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhpY3NSZWN0JiBz
cmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKKworfQorCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXpl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzU2l6ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgi
CisKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzU2l6ZTo6
R3JhcGhpY3NTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndpZHRoKCkp
LCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCitHcmFwaGljc1VuaXQgR3JhcGhpY3NT
aXplOjpkaWFnb25hbExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNxcnRmKGRpYWdvbmFs
TGVuZ3RoU3F1YXJlZCgpKTsKK30KKworR3JhcGhpY3NTaXplIEdyYXBoaWNzU2l6ZTo6bmFycm93
UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKK3sKKyAgICByZXR1cm4gR3Jh
cGhpY3NTaXplKG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHdpZHRoKSwgbmFycm93UHJl
Y2lzaW9uVG9HcmFwaGljc1VuaXQoaGVpZ2h0KSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAg
MjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR3JhcGhp
Y3NTaXplX2gKKyNkZWZpbmUgR3JhcGhpY3NTaXplX2gKKworI2luY2x1ZGUgIkludFBvaW50Lmgi
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShDRykgfHwgKFBMQVRGT1JN
KFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCit0eXBlZGVm
IHN0cnVjdCBDR1NpemUgQ0dTaXplOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpIHx8IChQ
TEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0Uo
UVRLSVQpKQorI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
Cit0eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9O
U1NpemUgTlNTaXplOworI2VuZGlmCisjZW5kaWYKKworCisjaWYgVVNFKENHKQordHlwZWRlZiBD
R0Zsb2F0IEdyYXBoaWNzVW5pdDsKKyNlbHNlCit0eXBlZGVmIGZsb2F0IEdyYXBoaWNzVW5pdDsK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7CisKK2NsYXNz
IEdyYXBoaWNzU2l6ZSB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NTaXplKCkgOiBtX3dpZHRoKDAp
LCBtX2hlaWdodCgwKSB7IH0KKyAgICBHcmFwaGljc1NpemUoR3JhcGhpY3NVbml0IHdpZHRoLCBH
cmFwaGljc1VuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsg
fQorICAgIEdyYXBoaWNzU2l6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICBzdGF0aWMgR3JhcGhp
Y3NTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOworCisg
ICAgR3JhcGhpY3NVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIEdy
YXBoaWNzVW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorCisgICAgdm9p
ZCBzZXRXaWR0aChHcmFwaGljc1VuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CisgICAg
dm9pZCBzZXRIZWlnaHQoR3JhcGhpY3NVbml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsg
fQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAwIHx8IG1f
aGVpZ2h0IDw9IDA7IH0KKworICAgIEdyYXBoaWNzVW5pdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGggLyBtX2hlaWdodDsgfQorCisgICAgdm9pZCBleHBhbmQoR3JhcGhpY3NV
bml0IHdpZHRoLCBHcmFwaGljc1VuaXQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV93aWR0aCAr
PSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OworICAgIH0KKworICAgIHZvaWQg
c2NhbGUoR3JhcGhpY3NVbml0IHMpIHsgc2NhbGUocywgcyk7IH0KKworICAgIHZvaWQgc2NhbGUo
R3JhcGhpY3NVbml0IHNjYWxlWCwgR3JhcGhpY3NVbml0IHNjYWxlWSkKKyAgICB7CisgICAgICAg
IG1fd2lkdGggKj0gc2NhbGVYOworICAgICAgICBtX2hlaWdodCAqPSBzY2FsZVk7CisgICAgfQor
CisgICAgR3JhcGhpY3NTaXplIGV4cGFuZGVkVG8oY29uc3QgR3JhcGhpY3NTaXplJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc1NpemUobV93aWR0aCA+IG90aGVy
Lm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgIG1faGVpZ2h0
ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisK
KyAgICBHcmFwaGljc1NpemUgc2hydW5rVG8oY29uc3QgR3JhcGhpY3NTaXplJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShtX3dpZHRoIDwgb3RoZXIubV93
aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICBtX2hlaWdodCA8IG90
aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCisgICAg
R3JhcGhpY3NVbml0IGRpYWdvbmFsTGVuZ3RoKCkgY29uc3Q7CisgICAgR3JhcGhpY3NVbml0IGRp
YWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93aWR0
aCAqIG1fd2lkdGggKyBtX2hlaWdodCAqIG1faGVpZ2h0OworICAgIH0KKworICAgIEdyYXBoaWNz
U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8IChQTEFU
Rk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQorICAg
IGV4cGxpY2l0IEdyYXBoaWNzU2l6ZShjb25zdCBDR1NpemUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBp
bXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJP
TUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorICAg
IGV4cGxpY2l0IEdyYXBoaWNzU2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMg
aW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc1VuaXQgbV93aWR0aCwgbV9oZWlnaHQ7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR3JhcGhpY3NVbml0IG5hcnJvd1ByZWNpc2lv
blRvR3JhcGhpY3NVbml0KFQpOworICAgIAordGVtcGxhdGU8PgoraW5saW5lIEdyYXBoaWNzVW5p
dCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChkb3VibGUgbnVtYmVyKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG51bWJlcik7Cit9CisKK2lubGluZSBHcmFw
aGljc1NpemUmIG9wZXJhdG9yKz0oR3JhcGhpY3NTaXplJiBhLCBjb25zdCBHcmFwaGljc1NpemUm
IGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOworICAgIGEuc2V0
SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5s
aW5lIEdyYXBoaWNzU2l6ZSYgb3BlcmF0b3ItPShHcmFwaGljc1NpemUmIGEsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgoKSk7Cisg
ICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOwor
fQorCitpbmxpbmUgR3JhcGhpY3NTaXplIG9wZXJhdG9yKyhjb25zdCBHcmFwaGljc1NpemUmIGEs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXplKGEud2lk
dGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUg
R3JhcGhpY3NTaXplIG9wZXJhdG9yLShjb25zdCBHcmFwaGljc1NpemUmIGEsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXplKGEud2lkdGgoKSAtIGIud2lk
dGgoKSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NTaXpl
IG9wZXJhdG9yLShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEdyYXBo
aWNzU2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgR3JhcGhpY3NTaXplJiBhLCBjb25zdCBHcmFwaGljc1NpemUmIGIp
Cit7CisgICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBi
LmhlaWdodCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyYXBoaWNzU2l6
ZSYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgIT0g
Yi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5lIEludFNp
emUgcm91bmRlZEludFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBwKQoreworICAgIHJldHVybiBJ
bnRTaXplKHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAud2lkdGgoKSkpLCBzdGF0aWNfY2FzdDxp
bnQ+KHJvdW5kZihwLmhlaWdodCgpKSkpOworfQorCitpbmxpbmUgSW50U2l6ZSBleHBhbmRlZElu
dFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBwKQoreworICAgIHJldHVybiBJbnRTaXplKGNsYW1w
VG9JbnRlZ2VyKGNlaWxmKHAud2lkdGgoKSkpLCBjbGFtcFRvSW50ZWdlcihjZWlsZihwLmhlaWdo
dCgpKSkpOworfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0IEdyYXBo
aWNzU2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihwLndp
ZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAuaGVpZ2h0KCkpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3JhcGhpY3NTaXplX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIGJvb2wgSW1hZ2U6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWYK
ICAgICByZXR1cm4gZGF0YUNoYW5nZWQoYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotdm9pZCBJbWFn
ZTo6ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmZpbGxXaXRoU29saWRDb2xv
cihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCiB7CiAgICAgaWYgKGNvbG9yLmFscGhhKCkgPD0gMCkKICAgICAgICAgcmV0dXJu
OwpAQCAtODcsNyArODcsNyBAQCB2b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhp
Y3NDCiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwog
fQogCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBjYWxjdWxhdGVQYXR0ZXJuU2NhbGUoY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIEltYWdlOjpUaWxl
UnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlKQorc3RhdGljIGlubGluZSBHcmFwaGlj
c1NpemUgY2FsY3VsYXRlUGF0dGVyblNjYWxlKGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSkKIHsKICAgICBmbG9hdCBzY2FsZVggPSAxLjBmLCBzY2FsZVkgPSAx
LjBmOwogICAgIApAQCAtMTAxLDExICsxMDEsMTEgQEAgc3RhdGljIGlubGluZSBGbG9hdFNpemUg
Y2FsY3VsYXRlUGF0dGVybgogICAgIGlmICh2UnVsZSA9PSBJbWFnZTo6UmVwZWF0VGlsZSkKICAg
ICAgICAgc2NhbGVZID0gc2NhbGVYOwogICAgIAotICAgIHJldHVybiBGbG9hdFNpemUoc2NhbGVY
LCBzY2FsZVkpOworICAgIHJldHVybiBHcmFwaGljc1NpemUoc2NhbGVYLCBzY2FsZVkpOwogfQog
CiAKLXZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBGbG9h
dFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1BvaW50JiBz
cmNQb2ludCwgY29uc3QgR3JhcGhpY3NTaXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5
RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQs
IGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwpAQCAtMTE3LDIz
ICsxMTcsMjMgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogYwogICAg
IEFTU0VSVCghaXNCaXRtYXBJbWFnZSgpIHx8IHN0YXRpY19jYXN0PEJpdG1hcEltYWdlKj4odGhp
cyktPm5vdFNvbGlkQ29sb3IoKSk7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSBpbnRyaW5zaWNU
aWxlU2l6ZSA9IHNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgaW50cmluc2ljVGlsZVNpemUgPSBz
aXplKCk7CiAgICAgaWYgKGhhc1JlbGF0aXZlV2lkdGgoKSkKICAgICAgICAgaW50cmluc2ljVGls
ZVNpemUuc2V0V2lkdGgoc2NhbGVkVGlsZVNpemUud2lkdGgoKSk7CiAgICAgaWYgKGhhc1JlbGF0
aXZlSGVpZ2h0KCkpCiAgICAgICAgIGludHJpbnNpY1RpbGVTaXplLnNldEhlaWdodChzY2FsZWRU
aWxlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGUoc2NhbGVkVGlsZVNpemUu
d2lkdGgoKSAvIGludHJpbnNpY1RpbGVTaXplLndpZHRoKCksCisgICAgR3JhcGhpY3NTaXplIHNj
YWxlKHNjYWxlZFRpbGVTaXplLndpZHRoKCkgLyBpbnRyaW5zaWNUaWxlU2l6ZS53aWR0aCgpLAog
ICAgICAgICAgICAgICAgICAgICBzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSAvIGludHJpbnNpY1Rp
bGVTaXplLmhlaWdodCgpKTsKIAotICAgIEZsb2F0UmVjdCBvbmVUaWxlUmVjdDsKKyAgICBHcmFw
aGljc1JlY3Qgb25lVGlsZVJlY3Q7CiAgICAgb25lVGlsZVJlY3Quc2V0WChkZXN0UmVjdC54KCkg
KyBmbW9kZihmbW9kZigtc3JjUG9pbnQueCgpLCBzY2FsZWRUaWxlU2l6ZS53aWR0aCgpKSAtIHNj
YWxlZFRpbGVTaXplLndpZHRoKCksIHNjYWxlZFRpbGVTaXplLndpZHRoKCkpKTsKICAgICBvbmVU
aWxlUmVjdC5zZXRZKGRlc3RSZWN0LnkoKSArIGZtb2RmKGZtb2RmKC1zcmNQb2ludC55KCksIHNj
YWxlZFRpbGVTaXplLmhlaWdodCgpKSAtIHNjYWxlZFRpbGVTaXplLmhlaWdodCgpLCBzY2FsZWRU
aWxlU2l6ZS5oZWlnaHQoKSkpOwogICAgIG9uZVRpbGVSZWN0LnNldFNpemUoc2NhbGVkVGlsZVNp
emUpOwogICAgIAogICAgIC8vIENoZWNrIGFuZCBzZWUgaWYgYSBzaW5nbGUgZHJhdyBvZiB0aGUg
aW1hZ2UgY2FuIGNvdmVyIHRoZSBlbnRpcmUgYXJlYSB3ZSBhcmUgc3VwcG9zZWQgdG8gdGlsZS4g
ICAgCiAgICAgaWYgKG9uZVRpbGVSZWN0LmNvbnRhaW5zKGRlc3RSZWN0KSkgewotICAgICAgICBG
bG9hdFJlY3QgdmlzaWJsZVNyY1JlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCB2aXNpYmxlU3Jj
UmVjdDsKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WCgoZGVzdFJlY3QueCgpIC0gb25lVGls
ZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCkpOwogICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRZ
KChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkpOwogICAg
ICAgICB2aXNpYmxlU3JjUmVjdC5zZXRXaWR0aChkZXN0UmVjdC53aWR0aCgpIC8gc2NhbGUud2lk
dGgoKSk7CkBAIC0xNDMsMTQgKzE0MywxNCBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhp
Y3NDb250ZXh0KiBjCiAgICAgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2Nh
bGUuaGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCB0aWxlUmVjdChGbG9hdFBvaW50KCksIGludHJp
bnNpY1RpbGVTaXplKTsgICAgCisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0KEdyYXBoaWNzUG9p
bnQoKSwgaW50cmluc2ljVGlsZVNpemUpOyAgICAKICAgICBkcmF3UGF0dGVybihjdHh0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRpb24oKSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiB9CiAK
IC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhlciBkcmF3VGlsZWQgZXZlbnR1YWxseSwgc2lu
Y2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJvdGggZm9yIHNvbWUgdGhpbmdzLgotdm9pZCBJ
bWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVs
ZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
KQordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIFRpbGVSdWxl
IGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkp
IHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJlY3QsIHNvbGlkQ29sb3Io
KSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBJbWFnZTo6
ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogYwogICAgIGlmICh2UnVsZSA9PSBSb3VuZFRpbGUp
CiAgICAgICAgIHZSdWxlID0gUmVwZWF0VGlsZTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGNh
bGN1bGF0ZVBhdHRlcm5TY2FsZShkc3RSZWN0LCBzcmNSZWN0LCBoUnVsZSwgdlJ1bGUpOworICAg
IEdyYXBoaWNzU2l6ZSBzY2FsZSA9IGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShkc3RSZWN0LCBzcmNS
ZWN0LCBoUnVsZSwgdlJ1bGUpOwogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3Jt
ID0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCksIHNjYWxl
LmhlaWdodCgpKTsKIAogICAgIC8vIFdlIHdhbnQgdG8gY29uc3RydWN0IHRoZSBwaGFzZSBzdWNo
IHRoYXQgdGhlIHBhdHRlcm4gaXMgY2VudGVyZWQgKHdoZW4gc3RyZXRjaCBpcyBub3QKQEAgLTE3
NCw3ICsxNzQsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAg
ICAgICAgIGhQaGFzZSAtPSBmbW9kZihkc3RSZWN0LndpZHRoKCksIHNjYWxlLndpZHRoKCkgKiBz
cmNSZWN0LndpZHRoKCkpIC8gMi4wZjsKICAgICBpZiAodlJ1bGUgPT0gSW1hZ2U6OlJlcGVhdFRp
bGUpCiAgICAgICAgIHZQaGFzZSAtPSBmbW9kZihkc3RSZWN0LmhlaWdodCgpLCBzY2FsZS5oZWln
aHQoKSAqIHNyY1JlY3QuaGVpZ2h0KCkpIC8gMi4wZjsKLSAgICBGbG9hdFBvaW50IHBhdHRlcm5Q
aGFzZShkc3RSZWN0LngoKSAtIGhQaGFzZSwgZHN0UmVjdC55KCkgLSB2UGhhc2UpOworICAgIEdy
YXBoaWNzUG9pbnQgcGF0dGVyblBoYXNlKGRzdFJlY3QueCgpIC0gaFBoYXNlLCBkc3RSZWN0Lnko
KSAtIHZQaGFzZSk7CiAgICAgCiAgICAgZHJhd1BhdHRlcm4oY3R4dCwgc3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkc3RSZWN0KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1BpeGJ1ZiBH
ZGtQaXhidWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNs
YXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7Citj
bGFzcyBHcmFwaGljc1JlY3Q7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC0x
NTMsMjEgKzE1MywyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxv
YWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSk7CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKIAogcHJvdGVjdGVk
OgogICAgIEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxs
V2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvcik7CisgICAgc3RhdGljIHZvaWQgZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgLy8gVGhlIENvbG9y
U3BhY2UgcGFyYW1ldGVyIHdpbGwgb25seSBiZSB1c2VkIGZvciB1bnRhZ2dlZCBpbWFnZXMuCiAj
aWYgUExBVEZPUk0oV0lOKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJj
ZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJ
bnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpIHsgfQogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwotICAgIHZvaWQg
ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdm9pZCBkcmF3
VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yKSA9IDA7CisgICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1BvaW50JiBzcmNQ
b2ludCwgY29uc3QgR3JhcGhpY3NTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
c3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgLy8gU3VwcG9ydGluZyB0aWxl
ZCBkcmF3aW5nCiAgICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpIHsgcmV0
dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJEYXRhLmgiCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgY2xpcChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGlwKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiAgICAgICAgIC8vIFRo
ZSBkcmF3IG1ldGhvZCBkcmF3cyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB3aXRob3V0IGNv
cHlpbmcgaXQuCi0gICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCisgICAgICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0ID0gR3JhcGhp
Y3NSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCk7CiAgICAgICAgIAogICAgICAg
ICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogdXNpbmcgc3RkOjptYXg7CkBA
IC0zNCw3ICszNCw3IEBAIHVzaW5nIHN0ZDo6bWluOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUludFJlY3Q6OkludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorSW50UmVjdDo6SW50UmVjdChj
b25zdCBHcmFwaGljc1JlY3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHN0YXRpY19j
YXN0PGludD4oci54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHIueSgpKSkpCiAgICAgLCBtX3NpemUo
SW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHIud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oci5o
ZWlnaHQoKSkpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50
UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RydWN0IFNr
SVJlY3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3Mg
R3JhcGhpY3NSZWN0OwogCiBjbGFzcyBJbnRSZWN0IHsKIHB1YmxpYzoKQEAgLTgyLDcgKzgyLDcg
QEAgcHVibGljOgogICAgIEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kK
KyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCk7IC8vIGRvbid0
IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAgIEludFBv
aW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKLSNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlBhdGhUcmF2
ZXJzYWxTdGF0ZS5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgpAQCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGllckZ1bmN0
aW9uKHZvCiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlJiB0cmF2ZXJzYWxTdGF0ZSA9ICpzdGF0aWNf
Y2FzdDxQYXRoVHJhdmVyc2FsU3RhdGUqPihpbmZvKTsKICAgICBpZiAodHJhdmVyc2FsU3RhdGUu
bV9zdWNjZXNzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRQb2ludCogcG9pbnRzID0gZWxl
bWVudC0+cG9pbnRzOworICAgIEdyYXBoaWNzUG9pbnQqIHBvaW50cyA9IGVsZW1lbnQtPnBvaW50
czsKICAgICBmbG9hdCBzZWdtZW50TGVuZ3RoID0gMDsKICAgICBzd2l0Y2ggKGVsZW1lbnQtPnR5
cGUpIHsKICAgICAgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgpAQCAtNzMsNyArNzMs
NyBAQCBmbG9hdCBQYXRoOjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiB0cmF2ZXJzYWxTdGF0
ZS5tX3RvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5ndGgoZmxv
YXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK0dyYXBoaWNzUG9pbnQgUGF0aDo6cG9pbnRBdExl
bmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAogewogICAgIFBhdGhUcmF2ZXJzYWxT
dGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBvaW50QXRM
ZW5ndGgpOwogICAgIHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0aDsKQEAg
LTk3LDEzICs5NywxMyBAQCB2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRS
CiAgICAgYWRkUm91bmRlZFJlY3Qoci5yZWN0KCksIHIucmFkaWkoKS50b3BMZWZ0KCksIHIucmFk
aWkoKS50b3BSaWdodCgpLCByLnJhZGlpKCkuYm90dG9tTGVmdCgpLCByLnJhZGlpKCkuYm90dG9t
UmlnaHQoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2b2lkIFBhdGg6OmFkZFJv
dW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NTaXplJiBy
b3VuZGluZ1JhZGlpKQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgRmxvYXRTaXplIHJhZGl1cyhyb3VuZGluZ1JhZGlpKTsKLSAgICBGbG9hdFNpemUg
aGFsZlNpemUocmVjdC53aWR0aCgpIC8gMiwgcmVjdC5oZWlnaHQoKSAvIDIpOworICAgIEdyYXBo
aWNzU2l6ZSByYWRpdXMocm91bmRpbmdSYWRpaSk7CisgICAgR3JhcGhpY3NTaXplIGhhbGZTaXpl
KHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAogICAgIC8vIElmIHJ4IGlz
IGdyZWF0ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCiAgICAgLy8g
dGhlbiBzZXQgcnggdG8gaGFsZiBvZiB0aGUgd2lkdGggKHJlcXVpcmVkIGluIFNWRyBzcGVjKQpA
QCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
ZWMKICAgICBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QocmVjdCwgcmFkaXVzLCByYWRpdXMsIHJh
ZGl1cywgcmFkaXVzKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQordm9pZCBQYXRoOjphZGRSb3VuZGVk
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgR3JhcGhp
Y3NTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbVJpZ2h0
UmFkaXVzKQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTM5LDI2ICsxMzksMjYgQEAgdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJl
YwogLy8gVGhpcyBpcyAxLWthcHBhLCB3aGVyZSBrYXBwYSA9IDQgKiAoc3FydCgyKSAtIDEpIC8g
Mwogc3RhdGljIGNvbnN0IGZsb2F0IGdDaXJjbGVDb250cm9sUG9pbnQgPSAwLjQ0NzcxNWY7CiAK
LXZvaWQgUGF0aDo6YWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJp
Z2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCit2b2lkIFBhdGg6OmFkZEJlemllcnNGb3JSb3VuZGVk
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wTGVm
dFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgR3JhcGhp
Y3NTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbVJpZ2h0
UmFkaXVzKQogewotICAgIG1vdmVUbyhGbG9hdFBvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1
cy53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIG1vdmVUbyhHcmFwaGljc1BvaW50KHJlY3QueCgp
ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOwogCi0gICAgYWRkTGluZVRvKEZs
b2F0UG9pbnQocmVjdC5tYXhYKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkp
OwotICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludChyZWN0Lm1heFgoKSAtIHRvcFJpZ2h0
UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCi0gICAgICAg
ICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRvcFJpZ2h0
UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCi0gICAgICAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRvcFJpZ2h0UmFkaXVzLmhl
aWdodCgpKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4
WSgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRCZXppZXJDdXJ2ZVRv
KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIC0gYm90dG9tUmlnaHRSYWRpdXMu
aGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQocmVjdC5tYXhYKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICogZ0NpcmNs
ZUNvbnRyb2xQb2ludCwgcmVjdC5tYXhZKCkpLAotICAgICAgICAgICAgICAgICAgICAgRmxvYXRQ
b2ludChyZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJlY3QubWF4WSgp
KSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCksIHJlY3QubWF4WSgpKSk7Ci0gICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50
KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2lu
dCwgcmVjdC5tYXhZKCkpLAotICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChyZWN0Lngo
KSwgcmVjdC5tYXhZKCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRy
b2xQb2ludCksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0
Lm1heFkoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRMaW5lVG8oRmxv
YXRQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKSk7Ci0g
ICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExl
ZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKiBnQ2ly
Y2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBv
aW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIGFk
ZExpbmVUbyhHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpIC0gdG9wUmlnaHRSYWRpdXMud2lkdGgo
KSwgcmVjdC55KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQocmVjdC5t
YXhYKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVj
dC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwg
cmVjdC55KCkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQp
LAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55
KCkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZExpbmVUbyhHcmFwaGljc1Bv
aW50KHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgp
KSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0
Lm1heFkoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2lu
dCksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpIC0gYm90
dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QubWF4WSgp
KSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCkgLSBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpLCByZWN0Lm1heFkoKSkpOworICAgIGFkZExpbmVUbyhHcmFw
aGljc1BvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0Lm1heFko
KSkpOworICAgIGFkZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2ludChyZWN0LngoKSArIGJvdHRv
bUxlZnRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QubWF4WSgpKSwK
KyAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgp
IC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLAorICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSBi
b3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQo
cmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZEJl
emllckN1cnZlVG8oR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BMZWZ0UmFk
aXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc1BvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICogZ0NpcmNs
ZUNvbnRyb2xQb2ludCwgcmVjdC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQ
b2ludChyZWN0LngoKSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmVjdC55KCkpKTsKIAogICAg
IGNsb3NlU3VicGF0aCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAgdHlwZWRlZiBQbGF0
Zm9ybVBhdGgqIFBsYXRmb3JtUGF0aFB0cjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIEFmZmluZVRyYW5zZm9ybTsKLSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNzIEZs
b2F0UmVjdDsKLSAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2ludDsK
KyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwogICAgIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXI7CiAKQEAg
LTkyLDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IFBhdGhFbGVt
ZW50IHsKICAgICAgICAgUGF0aEVsZW1lbnRUeXBlIHR5cGU7Ci0gICAgICAgIEZsb2F0UG9pbnQq
IHBvaW50czsKKyAgICAgICAgR3JhcGhpY3NQb2ludCogcG9pbnRzOwogICAgIH07CiAKICAgICB0
eXBlZGVmIHZvaWQgKCpQYXRoQXBwbGllckZ1bmN0aW9uKSh2b2lkKiBpbmZvLCBjb25zdCBQYXRo
RWxlbWVudCopOwpAQCAtMTA2LDEzICsxMDYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAgICAgUGF0aCYgb3BlcmF0b3I9KGNvbnN0IFBh
dGgmKTsKIAotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBXaW5kUnVs
ZSBydWxlID0gUlVMRV9OT05aRVJPKSBjb25zdDsKLSAgICAgICAgYm9vbCBzdHJva2VDb250YWlu
cyhTdHJva2VTdHlsZUFwcGxpZXIqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKLSAgICAgICAgRmxvYXRSZWN0IHN0cm9r
ZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqID0gMCkgY29uc3Q7CisgICAgICAgIGJv
b2wgY29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYsIFdpbmRSdWxlIHJ1bGUgPSBSVUxFX05P
TlpFUk8pIGNvbnN0OworICAgICAgICBib29sIHN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBw
bGllciosIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgICAgICBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKICAgICAgICAgCiAgICAgICAg
IGZsb2F0IGxlbmd0aCgpIGNvbnN0OwotICAgICAgICBGbG9hdFBvaW50IHBvaW50QXRMZW5ndGgo
ZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9p
bnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKICAgICAgICAgZmxvYXQg
bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKIAogICAg
ICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMjAsMjMgKzEyMCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIEdldHMgdGhlIGN1cnJlbnQgcG9pbnQgb2YgdGhlIGN1cnJlbnQgcGF0
aCwgd2hpY2ggaXMgY29uY2VwdHVhbGx5IHRoZSBmaW5hbCBwb2ludCByZWFjaGVkIGJ5IHRoZSBw
YXRoIHNvIGZhci4KICAgICAgICAgLy8gTm90ZSB0aGUgUGF0aCBjYW4gYmUgZW1wdHkgKGlzRW1w
dHkoKSA9PSB0cnVlKSBhbmQgc3RpbGwgaGF2ZSBhIGN1cnJlbnQgcG9pbnQuCiAgICAgICAgIGJv
b2wgaGFzQ3VycmVudFBvaW50KCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBv
aW50KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50KCkgY29uc3Q7
CiAKLSAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lk
IGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkUXVhZEN1cnZl
VG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQ
b2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBj
b250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9h
dFBvaW50JiBlbmRQb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMpOworICAgICAgICB2b2lkIG1vdmVU
byhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEdy
YXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGVuZFBvaW50KTsKKyAg
ICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQ
b2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGVuZFBvaW50KTsKKyAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHJhZGl1cyk7CiAgICAgICAgIHZvaWQg
Y2xvc2VTdWJwYXRoKCk7CiAKLSAgICAgICAgdm9pZCBhZGRBcmMoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50
aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2b2lkIGFk
ZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdS
YWRpaSk7Ci0gICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJpZ2h0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYg
Ym90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBHcmFwaGljc1Bv
aW50JiwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9v
bCBhbnRpY2xvY2t3aXNlKTsKKyAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpOworICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAg
ICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhp
Y3NTaXplJiByb3VuZGluZ1JhZGlpKTsKKyAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1NpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9t
TGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21SaWdodFJhZGl1cyk7CiAgICAg
ICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmKTsKIAotICAgICAgICB2
b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICAgICAgdm9pZCB0cmFuc2xhdGUo
Y29uc3QgR3JhcGhpY3NTaXplJik7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3Jt
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCkBAIC0xNDQsNyArMTQ0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyc0ZvclJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21M
ZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICAgICAg
dm9pZCBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3Qg
R3JhcGhpY3NTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIHRvcFJpZ2h0
UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogCiAgICAgICAgIFBsYXRmb3JtUGF0aFB0ciBt
X3BhdGg7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGhUcmF2ZXJzYWxTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxOSArMjcsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgY29uc3QgZmxvYXQga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlID0gMC4wMDAwMWY7
CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBtaWRQb2ludChjb25zdCBGbG9hdFBvaW50JiBm
aXJzdCwgY29uc3QgRmxvYXRQb2ludCYgc2Vjb25kKQorc3RhdGljIGlubGluZSBHcmFwaGljc1Bv
aW50IG1pZFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZpcnN0LCBjb25zdCBHcmFwaGljc1Bv
aW50JiBzZWNvbmQpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoKGZpcnN0LngoKSArIHNlY29u
ZC54KCkpIC8gMi4wZiwgKGZpcnN0LnkoKSArIHNlY29uZC55KCkpIC8gMi4wZik7CisgICAgcmV0
dXJuIEdyYXBoaWNzUG9pbnQoKGZpcnN0LngoKSArIHNlY29uZC54KCkpIC8gMi4wZiwgKGZpcnN0
LnkoKSArIHNlY29uZC55KCkpIC8gMi4wZik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgZGlz
dGFuY2VMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQp
CitzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBHcmFwaGljc1BvaW50JiBz
dGFydCwgY29uc3QgR3JhcGhpY3NQb2ludCYgZW5kKQogewogICAgIHJldHVybiBzcXJ0ZigoZW5k
LngoKSAtIHN0YXJ0LngoKSkgKiAoZW5kLngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnkoKSAtIHN0
YXJ0LnkoKSkgKiAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkpOwogfQogCiBzdHJ1Y3QgUXVhZHJhdGlj
QmV6aWVyIHsKICAgICBRdWFkcmF0aWNCZXppZXIoKSB7IH0KLSAgICBRdWFkcmF0aWNCZXppZXIo
Y29uc3QgRmxvYXRQb2ludCYgcywgY29uc3QgRmxvYXRQb2ludCYgYywgY29uc3QgRmxvYXRQb2lu
dCYgZSkKKyAgICBRdWFkcmF0aWNCZXppZXIoY29uc3QgR3JhcGhpY3NQb2ludCYgcywgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYywgY29uc3QgR3JhcGhpY3NQb2ludCYgZSkKICAgICAgICAgOiBzdGFy
dChzKQogICAgICAgICAsIGNvbnRyb2woYykKICAgICAgICAgLCBlbmQoZSkKQEAgLTU2LDcgKzU2
LDcgQEAgc3RydWN0IFF1YWRyYXRpY0JlemllciB7CiAgICAgICAgIGxlZnQuY29udHJvbCA9IG1p
ZFBvaW50KHN0YXJ0LCBjb250cm9sKTsKICAgICAgICAgcmlnaHQuY29udHJvbCA9IG1pZFBvaW50
KGNvbnRyb2wsIGVuZCk7CiAgICAgICAgIAotICAgICAgICBGbG9hdFBvaW50IGxlZnRDb250cm9s
VG9SaWdodENvbnRyb2wgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wsIHJpZ2h0LmNvbnRyb2wpOwor
ICAgICAgICBHcmFwaGljc1BvaW50IGxlZnRDb250cm9sVG9SaWdodENvbnRyb2wgPSBtaWRQb2lu
dChsZWZ0LmNvbnRyb2wsIHJpZ2h0LmNvbnRyb2wpOwogICAgICAgICBsZWZ0LmVuZCA9IGxlZnRD
b250cm9sVG9SaWdodENvbnRyb2w7CiAgICAgICAgIHJpZ2h0LnN0YXJ0ID0gbGVmdENvbnRyb2xU
b1JpZ2h0Q29udHJvbDsKIApAQCAtNjQsMTQgKzY0LDE0IEBAIHN0cnVjdCBRdWFkcmF0aWNCZXpp
ZXIgewogICAgICAgICByaWdodC5lbmQgPSBlbmQ7CiAgICAgfQogICAgIAotICAgIEZsb2F0UG9p
bnQgc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBjb250cm9sOwotICAgIEZsb2F0UG9pbnQgZW5kOwor
ICAgIEdyYXBoaWNzUG9pbnQgc3RhcnQ7CisgICAgR3JhcGhpY3NQb2ludCBjb250cm9sOworICAg
IEdyYXBoaWNzUG9pbnQgZW5kOwogfTsKIAogc3RydWN0IEN1YmljQmV6aWVyIHsKICAgICBDdWJp
Y0JlemllcigpIHsgfQotICAgIEN1YmljQmV6aWVyKGNvbnN0IEZsb2F0UG9pbnQmIHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGMxLCBjb25zdCBGbG9hdFBvaW50JiBjMiwgY29uc3QgRmxvYXRQb2ludCYg
ZSkKKyAgICBDdWJpY0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBjMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGUpCiAgICAgICAgIDogc3RhcnQocykKICAgICAgICAgLCBjb250cm9sMShjMSkKICAgICAgICAg
LCBjb250cm9sMihjMikKQEAgLTg2LDcgKzg2LDcgQEAgc3RydWN0IEN1YmljQmV6aWVyIHsKICAg
ICAgICAgCiAgICAgdm9pZCBzcGxpdChDdWJpY0JlemllciYgbGVmdCwgQ3ViaWNCZXppZXImIHJp
Z2h0KSBjb25zdAogICAgIHsgICAgCi0gICAgICAgIEZsb2F0UG9pbnQgc3RhcnRUb0NvbnRyb2wx
ID0gbWlkUG9pbnQoY29udHJvbDEsIGNvbnRyb2wyKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBz
dGFydFRvQ29udHJvbDEgPSBtaWRQb2ludChjb250cm9sMSwgY29udHJvbDIpOwogICAgICAgICAK
ICAgICAgICAgbGVmdC5zdGFydCA9IHN0YXJ0OwogICAgICAgICBsZWZ0LmNvbnRyb2wxID0gbWlk
UG9pbnQoc3RhcnQsIGNvbnRyb2wxKTsKQEAgLTk2LDE1ICs5NiwxNSBAQCBzdHJ1Y3QgQ3ViaWNC
ZXppZXIgewogICAgICAgICByaWdodC5jb250cm9sMSA9IG1pZFBvaW50KHJpZ2h0LmNvbnRyb2wy
LCBzdGFydFRvQ29udHJvbDEpOwogICAgICAgICByaWdodC5lbmQgPSBlbmQ7CiAgICAgICAgIAot
ICAgICAgICBGbG9hdFBvaW50IGxlZnRDb250cm9sMlRvUmlnaHRDb250cm9sMSA9IG1pZFBvaW50
KGxlZnQuY29udHJvbDIsIHJpZ2h0LmNvbnRyb2wxKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBs
ZWZ0Q29udHJvbDJUb1JpZ2h0Q29udHJvbDEgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wyLCByaWdo
dC5jb250cm9sMSk7CiAgICAgICAgIGxlZnQuZW5kID0gbGVmdENvbnRyb2wyVG9SaWdodENvbnRy
b2wxOwogICAgICAgICByaWdodC5zdGFydCA9IGxlZnRDb250cm9sMlRvUmlnaHRDb250cm9sMTsK
ICAgICB9CiAgICAgCi0gICAgRmxvYXRQb2ludCBzdGFydDsKLSAgICBGbG9hdFBvaW50IGNvbnRy
b2wxOwotICAgIEZsb2F0UG9pbnQgY29udHJvbDI7Ci0gICAgRmxvYXRQb2ludCBlbmQ7CisgICAg
R3JhcGhpY3NQb2ludCBzdGFydDsKKyAgICBHcmFwaGljc1BvaW50IGNvbnRyb2wxOworICAgIEdy
YXBoaWNzUG9pbnQgY29udHJvbDI7CisgICAgR3JhcGhpY3NQb2ludCBlbmQ7CiB9OwogCiAvLyBG
SVhNRTogVGhpcyBmdW5jdGlvbiBpcyBwb3NzaWJseSB2ZXJ5IHNsb3cgZHVlIHRvIHRoZSBpZnMg
cmVxdWlyZWQgZm9yIHByb3BlciBwYXRoIG1lYXN1cmluZwpAQCAtMTY0LDIwICsxNjQsMjAgQEAg
ZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQogICAgIHJldHVybiBkaXN0
YW5jZTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCitmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludCkKIHsKICAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gbV9jb250cm9s
MSA9IG1fY29udHJvbDIgPSBwb2ludDsKICAgICByZXR1cm4gMDsKIH0KIAotZmxvYXQgUGF0aFRy
YXZlcnNhbFN0YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCitmbG9hdCBQYXRo
VHJhdmVyc2FsU3RhdGU6OmxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAg
ICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIHBvaW50KTsKICAgICBt
X2N1cnJlbnQgPSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IHBvaW50OwogICAgIHJldHVybiBk
aXN0YW5jZTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNCZXppZXJU
byhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQp
CitmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCkKIHsKICAg
ICBmbG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oKnRoaXMsIFF1
YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkpOwogCkBAIC0xOTAs
NyArMTkwLDcgQEAgZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNCZXppZQogICAg
IHJldHVybiBkaXN0YW5jZTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjdWJpY0Jl
emllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBu
ZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2ludCYgbmV3RW5kKQorZmxvYXQgUGF0aFRyYXZlcnNh
bFN0YXRlOjpjdWJpY0JlemllclRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRyb2wxLCBj
b25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9sMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3
RW5kKQogewogICAgIGZsb2F0IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8Q3ViaWNCZXppZXI+KCp0
aGlzLCBDdWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdDb250cm9sMiwgbmV3
RW5kKSk7CiAKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJv
Y2Vzc1NlZ21lbnQoCiAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIAogICAgIGlm
ICgobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8fCBtX2FjdGlvbiA9PSBUcmF2
ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVuZ3RoID49IG1fZGVzaXJlZExl
bmd0aCkgewotICAgICAgICBGbG9hdFNpemUgY2hhbmdlID0gbV9jdXJyZW50IC0gbV9wcmV2aW91
czsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNoYW5nZSA9IG1fY3VycmVudCAtIG1fcHJldmlvdXM7
CiAgICAgICAgIGZsb2F0IHNsb3BlID0gYXRhbjJmKGNoYW5nZS5oZWlnaHQoKSwgY2hhbmdlLndp
ZHRoKCkpOwogICAgICAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCkg
ewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90b3RhbExl
bmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJz
YWxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFBhdGhUcmF2ZXJzYWxTdGF0ZV9oCiAjZGVmaW5lIFBh
dGhUcmF2ZXJzYWxTdGF0ZV9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDEwICs0Miwx
MCBAQCBwdWJsaWM6CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxBY3Rpb24p
OwogCiAgICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgIGZs
b2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0
IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBGbG9h
dFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIsIGNvbnN0
IEZsb2F0UG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmKTsKKyAgICBmbG9hdCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgIGZsb2F0
IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25zdCBH
cmFwaGljc1BvaW50JiBuZXdDb250cm9sMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3Q29udHJv
bDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CiAgICAgCiAgICAgdm9pZCBwcm9jZXNz
U2VnbWVudCgpOwogCkBAIC01MywxNyArNTMsMTcgQEAgcHVibGljOgogICAgIFBhdGhUcmF2ZXJz
YWxBY3Rpb24gbV9hY3Rpb247CiAgICAgYm9vbCBtX3N1Y2Nlc3M7CiAKLSAgICBGbG9hdFBvaW50
IG1fY3VycmVudDsKLSAgICBGbG9hdFBvaW50IG1fc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2Nv
bnRyb2wxOwotICAgIEZsb2F0UG9pbnQgbV9jb250cm9sMjsKKyAgICBHcmFwaGljc1BvaW50IG1f
Y3VycmVudDsKKyAgICBHcmFwaGljc1BvaW50IG1fc3RhcnQ7CisgICAgR3JhcGhpY3NQb2ludCBt
X2NvbnRyb2wxOworICAgIEdyYXBoaWNzUG9pbnQgbV9jb250cm9sMjsKIAogICAgIGZsb2F0IG1f
dG90YWxMZW5ndGg7CiAgICAgdW5zaWduZWQgbV9zZWdtZW50SW5kZXg7CiAgICAgZmxvYXQgbV9k
ZXNpcmVkTGVuZ3RoOwogCiAgICAgLy8gRm9yIG5vcm1hbCBjYWxjdWxhdGlvbnMKLSAgICBGbG9h
dFBvaW50IG1fcHJldmlvdXM7CisgICAgR3JhcGhpY3NQb2ludCBtX3ByZXZpb3VzOwogICAgIGZs
b2F0IG1fbm9ybWFsQW5nbGU7IC8vIGRlZ3JlZXMKIH07ICAgIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
CiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC04Myw3ICs4
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAg
fQogCi0gICAgdm9pZCBzZXRMYXN0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVz
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRS
ZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQorICAgIHZv
aWQgc2V0TGFzdFNoYWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
c2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKICAgICB7CiAgICAg
ICAgIG1fbGFzdFdhc0luc2V0ID0gZmFsc2U7CiAgICAgICAgIG1fbGFzdFJhZGl1cyA9IHJhZGl1
czsKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgICAgICBtX2xhc3RSYWRpaSA9IHJhZGlp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0TGFzdEluc2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0
U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVjdCwgY29u
c3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKKyAgICB2b2lkIHNldExhc3RJbnNldFNoYWRv
d1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRzLCBjb25zdCBH
cmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkp
CiAgICAgewogICAgICAgICBtX2xhc3RXYXNJbnNldCA9IHRydWU7CiAgICAgICAgIG1fbGFzdElu
c2V0Qm91bmRzID0gYm91bmRzOwpAQCAtMTA0LDE0ICsxMDQsMTQgQEAgcHVibGljOgogICAgICAg
ICBtX2xhc3RSYWRpaSA9IHJhZGlpOwogICAgIH0KICAgICAKLSAgICBib29sIG1hdGNoZXNMYXN0
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3Vu
ZGVkUmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAorICAgIGJvb2wgbWF0Y2hlc0xhc3RTaGFkb3co
Y29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5k
ZWRSZWN0OjpSYWRpaSYgcmFkaWkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9sYXN0V2Fz
SW5zZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBtX2xhc3RS
YWRpdXMgPT0gcmFkaXVzICYmIG1fbGFzdENvbG9yID09IGNvbG9yICYmIG1fbGFzdENvbG9yU3Bh
Y2UgPT0gY29sb3JTcGFjZSAmJiBzaGFkb3dSZWN0ID09IG1fbGFzdFNoYWRvd1JlY3QgJiYgcmFk
aWkgPT0gbV9sYXN0UmFkaWk7CiAgICAgfQogCi0gICAgYm9vbCBtYXRjaGVzTGFzdEluc2V0U2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0UmVjdCYg
c2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkgY29uc3QKKyAgICBi
b29sIG1hdGNoZXNMYXN0SW5zZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGJvdW5kcywgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3VuZGVk
UmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2xhc3RXYXNJ
bnNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MSwxOCArMTQxLDE4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjbGVhclNjcmF0Y2hCdWZmZXIoKQogICAgIHsKICAgICAgICAgbV9p
bWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIG1fbGFzdFJhZGl1cyA9IEZsb2F0U2l6ZSgp
OworICAgICAgICBtX2xhc3RSYWRpdXMgPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiAKICAgICBP
d25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CiAgICAgVGltZXI8U2NyYXRjaEJ1ZmZl
cj4gbV9wdXJnZVRpbWVyOwogICAgIAotICAgIEZsb2F0UmVjdCBtX2xhc3RJbnNldEJvdW5kczsK
LSAgICBGbG9hdFJlY3QgbV9sYXN0U2hhZG93UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9sYXN0
SW5zZXRCb3VuZHM7CisgICAgR3JhcGhpY3NSZWN0IG1fbGFzdFNoYWRvd1JlY3Q7CiAgICAgUm91
bmRlZFJlY3Q6OlJhZGlpIG1fbGFzdFJhZGlpOwogICAgIENvbG9yIG1fbGFzdENvbG9yOwogICAg
IENvbG9yU3BhY2UgbV9sYXN0Q29sb3JTcGFjZTsKLSAgICBGbG9hdFNpemUgbV9sYXN0UmFkaXVz
OworICAgIEdyYXBoaWNzU2l6ZSBtX2xhc3RSYWRpdXM7CiAgICAgYm9vbCBtX2xhc3RXYXNJbnNl
dDsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNjgsNyArMTY4LDcgQEAgU2NyYXRj
aEJ1ZmZlciYgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkKIAogc3RhdGljIGNvbnN0IGludCB0ZW1w
bGF0ZVNpZGVMZW5ndGggPSAxOwogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEZsb2F0
U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdy
YXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgOiBtX2NvbG9yKGNvbG9yKQog
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCiAgICAgLCBtX2JsdXJSYWRpdXMocmFkaXVz
KQpAQCAtMTg2LDcgKzE4Niw3IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoKQogewogfQogCi12
b2lkIFNoYWRvd0JsdXI6OnNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmIHJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBib29sIGlnbm9yZVRyYW5zZm9ybXMpCit2b2lkIFNoYWRvd0JsdXI6OnNldFNo
YWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXpl
JiBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBib29s
IGlnbm9yZVRyYW5zZm9ybXMpCiB7CiAgICAgbV9ibHVyUmFkaXVzID0gcmFkaXVzOwogICAgIG1f
b2Zmc2V0ID0gb2Zmc2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6c2V0
U2hhZG93VmFsdWVzKGNvbnN0IEYKIHZvaWQgU2hhZG93Qmx1cjo6dXBkYXRlU2hhZG93Qmx1clZh
bHVlcygpCiB7CiAgICAgLy8gTGltaXQgYmx1ciByYWRpdXMgdG8gMTI4IHRvIGF2b2lkIGxvdHMg
b2YgdmVyeSBleHBlbnNpdmUgYmx1cnJpbmcuCi0gICAgbV9ibHVyUmFkaXVzID0gbV9ibHVyUmFk
aXVzLnNocnVua1RvKEZsb2F0U2l6ZSgxMjgsIDEyOCkpOworICAgIG1fYmx1clJhZGl1cyA9IG1f
Ymx1clJhZGl1cy5zaHJ1bmtUbyhHcmFwaGljc1NpemUoMTI4LCAxMjgpKTsKIAogICAgIC8vIFRo
ZSB0eXBlIG9mIHNoYWRvdyBpcyBkZWNpZGVkIGJ5IHRoZSBibHVyIHJhZGl1cywgc2hhZG93IG9m
ZnNldCwgYW5kIHNoYWRvdyBjb2xvci4KICAgICBpZiAoIW1fY29sb3IuaXNWYWxpZCgpIHx8ICFt
X2NvbG9yLmFscGhhKCkpIHsKQEAgLTI2NCw4ICsyNjQsOCBAQCB2b2lkIFNoYWRvd0JsdXI6OmNs
ZWFyKCkKIHsKICAgICBtX3R5cGUgPSBOb1NoYWRvdzsKICAgICBtX2NvbG9yID0gQ29sb3IoKTsK
LSAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUoKTsKLSAgICBtX29mZnNldCA9IEZsb2F0U2l6
ZSgpOworICAgIG1fYmx1clJhZGl1cyA9IEdyYXBoaWNzU2l6ZSgpOworICAgIG1fb2Zmc2V0ID0g
R3JhcGhpY3NTaXplKCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckxheWVySW1hZ2UodW5z
aWduZWQgY2hhciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgcm93U3RyaWRl
KQpAQCAtMzYzLDE3ICszNjMsMTcgQEAgdm9pZCBTaGFkb3dCbHVyOjphZGp1c3RCbHVyUmFkaXVz
KEdyYXBoaQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDYWxjdWxhdGUgdHJhbnNmb3JtZWQg
dW5pdCB2ZWN0b3JzLgotICAgIGNvbnN0IEZsb2F0UXVhZCB1bml0UXVhZChGbG9hdFBvaW50KDAs
IDApLCBGbG9hdFBvaW50KDEsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h
dFBvaW50KDAsIDEpLCBGbG9hdFBvaW50KDEsIDEpKTsKLSAgICBjb25zdCBGbG9hdFF1YWQgdHJh
bnNmb3JtZWRVbml0UXVhZCA9IHRyYW5zZm9ybS5tYXBRdWFkKHVuaXRRdWFkKTsKKyAgICBjb25z
dCBHcmFwaGljc1F1YWQgdW5pdFF1YWQoR3JhcGhpY3NQb2ludCgwLCAwKSwgR3JhcGhpY3NQb2lu
dCgxLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCgwLCAx
KSwgR3JhcGhpY3NQb2ludCgxLCAxKSk7CisgICAgY29uc3QgR3JhcGhpY3NRdWFkIHRyYW5zZm9y
bWVkVW5pdFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZCh1bml0UXVhZCk7CiAKICAgICAvLyBDYWxj
dWxhdGUgWCBheGlzIHNjYWxlIGZhY3Rvci4KLSAgICBjb25zdCBGbG9hdFNpemUgeFVuaXRDaGFu
Z2UgPSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAyKCkgLSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAxKCk7
CisgICAgY29uc3QgR3JhcGhpY3NTaXplIHhVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVh
ZC5wMigpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOwogICAgIGNvbnN0IGZsb2F0IHhBeGlz
U2NhbGUgPSBzcXJ0Zih4VW5pdENoYW5nZS53aWR0aCgpICogeFVuaXRDaGFuZ2Uud2lkdGgoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHhVbml0Q2hhbmdlLmhlaWdodCgp
ICogeFVuaXRDaGFuZ2UuaGVpZ2h0KCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIFkgYXhpcyBzY2Fs
ZSBmYWN0b3IuCi0gICAgY29uc3QgRmxvYXRTaXplIHlVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRV
bml0UXVhZC5wMygpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOworICAgIGNvbnN0IEdyYXBo
aWNzU2l6ZSB5VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5pdFF1YWQucDMoKSAtIHRyYW5zZm9y
bWVkVW5pdFF1YWQucDEoKTsKICAgICBjb25zdCBmbG9hdCB5QXhpc1NjYWxlID0gc3FydGYoeVVu
aXRDaGFuZ2Uud2lkdGgoKSAqIHlVbml0Q2hhbmdlLndpZHRoKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKyB5VW5pdENoYW5nZS5oZWlnaHQoKSAqIHlVbml0Q2hhbmdlLmhl
aWdodCgpKTsKIApAQCAtMzk1LDE3ICszOTUsMTcgQEAgSW50U2l6ZSBTaGFkb3dCbHVyOjpibHVy
cmVkRWRnZVNpemUoKSBjbwogICAgIHJldHVybiBlZGdlU2l6ZTsKIH0KIAotSW50UmVjdCBTaGFk
b3dCbHVyOjpjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKK0ludFJlY3QgU2hhZG93Qmx1cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd2VkUmVjdCwgY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgSW50U2l6ZSBlZGdlU2l6ZSA9IGJsdXJyZWRF
ZGdlU2l6ZSgpOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmx1
cnJlZCBhbmQvb3IgdHJhbnNmb3JtZWQgbGF5ZXIuCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdDsK
KyAgICBHcmFwaGljc1JlY3QgbGF5ZXJSZWN0OwogICAgIEludFNpemUgaW5mbGF0aW9uOwogCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGNvbnRleHQtPmdldENUTSgpOwog
ICAgIGlmIChtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zICYmICF0cmFuc2Zvcm0uaXNJZGVudGl0
eSgpKSB7Ci0gICAgICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFBvbHlnb24gPSB0cmFuc2Zvcm0u
bWFwUXVhZChGbG9hdFF1YWQoc2hhZG93ZWRSZWN0KSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCB0
cmFuc2Zvcm1lZFBvbHlnb24gPSB0cmFuc2Zvcm0ubWFwUXVhZChHcmFwaGljc1F1YWQoc2hhZG93
ZWRSZWN0KSk7CiAgICAgICAgIHRyYW5zZm9ybWVkUG9seWdvbi5tb3ZlKG1fb2Zmc2V0KTsKICAg
ICAgICAgbGF5ZXJSZWN0ID0gdHJhbnNmb3JtLmludmVyc2UoKS5tYXBRdWFkKHRyYW5zZm9ybWVk
UG9seWdvbikuYm91bmRpbmdCb3goKTsKICAgICB9IGVsc2UgewpAQCAtNDIwLDcgKzQyMCw3IEBA
IEludFJlY3QgU2hhZG93Qmx1cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZGkKICAgICAgICAgaW5mbGF0
aW9uID0gZWRnZVNpemU7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHVuY2xpcHBlZExheWVyUmVj
dCA9IGxheWVyUmVjdDsKKyAgICBHcmFwaGljc1JlY3QgdW5jbGlwcGVkTGF5ZXJSZWN0ID0gbGF5
ZXJSZWN0OwogCiAgICAgaWYgKCFjbGlwUmVjdC5jb250YWlucyhlbmNsb3NpbmdJbnRSZWN0KGxh
eWVyUmVjdCkpKSB7CiAgICAgICAgIC8vIElmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNs
aXAgcmVnaW9uLCB3ZSBhcmVuJ3QgcGFpbnRpbmcgYXQgYWxsLgpAQCAtNDQwLDE4ICs0NDAsMTgg
QEAgSW50UmVjdCBTaGFkb3dCbHVyOjpjYWxjdWxhdGVMYXllckJvdW5kaQogCiAgICAgSW50U2l6
ZSBmcmFtZVNpemUgPSBpbmZsYXRpb247CiAgICAgZnJhbWVTaXplLnNjYWxlKDIpOwotICAgIG1f
c291cmNlUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCBzaGFkb3dlZFJlY3Qud2lkdGgoKSArIGZyYW1l
U2l6ZS53aWR0aCgpLCBzaGFkb3dlZFJlY3QuaGVpZ2h0KCkgKyBmcmFtZVNpemUuaGVpZ2h0KCkp
OwotICAgIG1fbGF5ZXJPcmlnaW4gPSBGbG9hdFBvaW50KGxheWVyUmVjdC54KCksIGxheWVyUmVj
dC55KCkpOworICAgIG1fc291cmNlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCBzaGFkb3dlZFJl
Y3Qud2lkdGgoKSArIGZyYW1lU2l6ZS53aWR0aCgpLCBzaGFkb3dlZFJlY3QuaGVpZ2h0KCkgKyBm
cmFtZVNpemUuaGVpZ2h0KCkpOworICAgIG1fbGF5ZXJPcmlnaW4gPSBHcmFwaGljc1BvaW50KGxh
eWVyUmVjdC54KCksIGxheWVyUmVjdC55KCkpOwogICAgIG1fbGF5ZXJTaXplID0gbGF5ZXJSZWN0
LnNpemUoKTsKIAotICAgIGNvbnN0IEZsb2F0UG9pbnQgdW5jbGlwcGVkTGF5ZXJPcmlnaW4gPSBG
bG9hdFBvaW50KHVuY2xpcHBlZExheWVyUmVjdC54KCksIHVuY2xpcHBlZExheWVyUmVjdC55KCkp
OwotICAgIGNvbnN0IEZsb2F0U2l6ZSBjbGlwcGVkT3V0ID0gdW5jbGlwcGVkTGF5ZXJPcmlnaW4g
LSBtX2xheWVyT3JpZ2luOworICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQgdW5jbGlwcGVkTGF5ZXJP
cmlnaW4gPSBHcmFwaGljc1BvaW50KHVuY2xpcHBlZExheWVyUmVjdC54KCksIHVuY2xpcHBlZExh
eWVyUmVjdC55KCkpOworICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSBjbGlwcGVkT3V0ID0gdW5jbGlw
cGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3JpZ2luOwogCiAgICAgLy8gU2V0IHRoZSBvcmlnaW4g
YXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyYXRjaCBpbWFnZSwgb3IsIGluIGNhc2Ug
dGhlcmUncyBhIGNsaXBwZWQKICAgICAvLyBvdXQgcmVnaW9uLCBzZXQgdGhlIG9yaWdpbiBhY2Nv
cmRpbmdseSB0byB0aGUgZnVsbCBib3VuZGluZyByZWN0J3MgdG9wLWxlZnQgY29ybmVyLgogICAg
IGZsb2F0IHRyYW5zbGF0aW9uWCA9IC1zaGFkb3dlZFJlY3QueCgpICsgaW5mbGF0aW9uLndpZHRo
KCkgLSBmYWJzZihjbGlwcGVkT3V0LndpZHRoKCkpOwogICAgIGZsb2F0IHRyYW5zbGF0aW9uWSA9
IC1zaGFkb3dlZFJlY3QueSgpICsgaW5mbGF0aW9uLmhlaWdodCgpIC0gZmFic2YoY2xpcHBlZE91
dC5oZWlnaHQoKSk7Ci0gICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEZsb2F0U2l6ZSh0
cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7CisgICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlv
biA9IEdyYXBoaWNzU2l6ZSh0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7CiAKICAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChsYXllclJlY3QpOwogfQpAQCAtNDY3LDEzICs0NjcsMTMgQEAg
dm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaQogICAgIGlmIChidWZmZXJT
aXplICE9IG1fbGF5ZXJTaXplKSB7CiAgICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBjbGlw
VG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlciwK
ICAgICAgICAgLy8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0
byB0aGUgZmlsbGVkIHBhcnQgZmlyc3QuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChG
bG9hdFJlY3QobV9sYXllck9yaWdpbiwgbV9sYXllclNpemUpKTsKKyAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5jbGlwKEdyYXBoaWNzUmVjdChtX2xheWVyT3JpZ2luLCBtX2xheWVyU2l6ZSkpOwog
ICAgIH0KLSAgICBncmFwaGljc0NvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFn
ZSwgRmxvYXRSZWN0KG1fbGF5ZXJPcmlnaW4sIGJ1ZmZlclNpemUpKTsKKyAgICBncmFwaGljc0Nv
bnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgR3JhcGhpY3NSZWN0KG1fbGF5
ZXJPcmlnaW4sIGJ1ZmZlclNpemUpKTsKICAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xv
cihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGVhclNo
YWRvdygpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KG1fbGF5ZXJP
cmlnaW4sIG1fc291cmNlUmVjdC5zaXplKCkpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPmZpbGxS
ZWN0KEdyYXBoaWNzUmVjdChtX2xheWVyT3JpZ2luLCBtX3NvdXJjZVJlY3Quc2l6ZSgpKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVTbGljZVNpemVzRnJvbVJhZGlpKGNvbnN0IEludFNpemUm
IHR3aWNlUmFkaXVzLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBpbnQmIGxlZnRT
bGljZSwgaW50JiByaWdodFNsaWNlLCBpbnQmIHRvcFNsaWNlLCBpbnQmIGJvdHRvbVNsaWNlKQpA
QCAtNTAzLDcgKzUwMyw3IEBAIEludFNpemUgU2hhZG93Qmx1cjo6dGVtcGxhdGVTaXplKGNvbnN0
IEkKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNpZGVMZW5ndGggKyB0b3BTbGljZSArIGJv
dHRvbVNsaWNlKTsKIH0KIAotdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvdyhHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dlZFJlY3Qs
IGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkpCit2b2lkIFNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKIHsK
ICAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGdyYXBo
aWNzQ29udGV4dCwgc2hhZG93ZWRSZWN0LCBncmFwaGljc0NvbnRleHQtPmNsaXBCb3VuZHMoKSk7
CiAgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCkBAIC01MzAsNyArNTMwLDcgQEAgdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvdyhHcmFwaGljcwogICAgIGRyYXdSZWN0U2hhZG93V2l0
aFRpbGluZyhncmFwaGljc0NvbnRleHQsIHNoYWRvd2VkUmVjdCwgcmFkaWksIHRlbXBsYXRlU2l6
ZSwgZWRnZVNpemUpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRp
aSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKQogewogICAg
IEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoZ3JhcGhpY3ND
b250ZXh0LCByZWN0LCBncmFwaGljc0NvbnRleHQtPmNsaXBCb3VuZHMoKSk7CiAgICAgaWYgKGxh
eWVyUmVjdC5pc0VtcHR5KCkpCkBAIC01NTcsMjAgKzU1NywyMCBAQCB2b2lkIFNoYWRvd0JsdXI6
OmRyYXdJbnNldFNoYWRvdyhHcmFwaGljCiAgICAgZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhn
cmFwaGljc0NvbnRleHQsIHJlY3QsIGhvbGVSZWN0LCBob2xlUmFkaWksIHRlbXBsYXRlU2l6ZSwg
ZWRnZVNpemUpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRp
bGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBz
aGFkb3dlZFJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFJl
Y3QmIGxheWVyUmVjdCkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGls
aW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3Qm
IHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNo
YXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CiAgICAgaWYgKCFtX2xh
eWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBidWZmZXJSZWxhdGl2
ZVNoYWRvd2VkUmVjdCA9IHNoYWRvd2VkUmVjdDsKKyAgICBHcmFwaGljc1JlY3QgYnVmZmVyUmVs
YXRpdmVTaGFkb3dlZFJlY3QgPSBzaGFkb3dlZFJlY3Q7CiAgICAgYnVmZmVyUmVsYXRpdmVTaGFk
b3dlZFJlY3QubW92ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKICAgICBpZiAoIVNjcmF0
Y2hCdWZmZXI6OnNoYXJlZCgpLm1hdGNoZXNMYXN0U2hhZG93KG1fYmx1clJhZGl1cywgQ29sb3I6
OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2ZVNoYWRvd2VkUmVjdCwg
cmFkaWkpKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5
ZXJJbWFnZS0+Y29udGV4dCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogCiAgICAgICAgIC8vIEFkZCBhIHBpeGVsIHRvIGF2
b2lkIGxhdGVyIGVkZ2UgYWxpYXNpbmcgd2hlbiByb3RhdGVkLgotICAgICAgICBzaGFkb3dDb250
ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgKyAxLCBt
X2xheWVyU2l6ZS5oZWlnaHQoKSArIDEpKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJS
ZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXllclNp
emUuaGVpZ2h0KCkgKyAxKSk7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xh
eWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+c2V0RmlsbENv
bG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIGlmIChyYWRp
aS5pc1plcm8oKSkKQEAgLTU5MSwxNiArNTkxLDE2IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1Jl
Y3RTaGFkb3dXaXRob3V0VGkKICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNj
cmF0Y2hCdWZmZXJQdXJnZSgpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJl
Y3Q6OlJhZGlpJiBob2xlUmFkaWksIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKK3ZvaWQgU2hh
ZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRpaSwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6
OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CiAgICAgaWYgKCFt
X2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBidWZmZXJSZWxh
dGl2ZVJlY3QgPSByZWN0OworICAgIEdyYXBoaWNzUmVjdCBidWZmZXJSZWxhdGl2ZVJlY3QgPSBy
ZWN0OwogICAgIGJ1ZmZlclJlbGF0aXZlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRp
b24pOwogCi0gICAgRmxvYXRSZWN0IGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QgPSBob2xlUmVjdDsK
KyAgICBHcmFwaGljc1JlY3QgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCA9IGhvbGVSZWN0OwogICAg
IGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QubW92ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsK
IAogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkubWF0Y2hlc0xhc3RJbnNldFNoYWRv
dyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVy
UmVsYXRpdmVSZWN0LCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0LCBob2xlUmFkaWkpKSB7CkBAIC02
MDgsNyArNjA4LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VAog
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNoYWRvd0NvbnRl
eHQpOwogCiAgICAgICAgIC8vIEFkZCBhIHBpeGVsIHRvIGF2b2lkIGxhdGVyIGVkZ2UgYWxpYXNp
bmcgd2hlbiByb3RhdGVkLgotICAgICAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3QoRmxvYXRS
ZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgKyAxLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSAr
IDEpKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEdyYXBoaWNzUmVjdCgwLCAw
LCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXllclNpemUuaGVpZ2h0KCkgKyAxKSk7CiAg
ICAgICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9u
KTsKIAogICAgICAgICBQYXRoIHBhdGg7CkBAIC02NjQsNyArNjY0LDcgQEAgdm9pZCBTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VAogICAgICB0aGUgc2hhZG93LgogICovCiAKLXZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXpl
JiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VTaXplKQordm9pZCBTaGFkb3dCbHVy
OjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJl
Y3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogICAgIGdyYXBoaWNzQ29u
dGV4dC0+Y2xlYXJTaGFkb3coKTsKQEAgLTY3NCw4ICs2NzQsOCBAQCB2b2lkIFNoYWRvd0JsdXI6
OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERyYXcg
dGhlIHJlY3RhbmdsZSB3aXRoIGhvbGUuCi0gICAgRmxvYXRSZWN0IHRlbXBsYXRlQm91bmRzKDAs
IDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpOwotICAgIEZs
b2F0UmVjdCB0ZW1wbGF0ZUhvbGUgPSBGbG9hdFJlY3QoZWRnZVNpemUud2lkdGgoKSwgZWRnZVNp
emUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gMiAqIGVkZ2VTaXplLndpZHRoKCks
IHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIgKiBlZGdlU2l6ZS5oZWlnaHQoKSk7CisgICAgR3Jh
cGhpY3NSZWN0IHRlbXBsYXRlQm91bmRzKDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1w
bGF0ZVNpemUuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCB0ZW1wbGF0ZUhvbGUgPSBHcmFw
aGljc1JlY3QoZWRnZVNpemUud2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6
ZS53aWR0aCgpIC0gMiAqIGVkZ2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAt
IDIgKiBlZGdlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAoIVNjcmF0Y2hCdWZmZXI6OnNoYXJl
ZCgpLm1hdGNoZXNMYXN0SW5zZXRTaGFkb3cobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9y
U3BhY2UsIHRlbXBsYXRlQm91bmRzLCB0ZW1wbGF0ZUhvbGUsIHJhZGlpKSkgewogICAgICAgICAv
LyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgpAQCAtNjk5LDEyICs2OTksMTIg
QEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaQogICAgICAgICBTY3Jh
dGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRMYXN0SW5zZXRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVz
LCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlQm91bmRzLCB0ZW1wbGF0ZUhvbGUsIHJh
ZGlpKTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3VuZGluZ1JlY3QubW92ZSht
X29mZnNldCk7CiAKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVSZWN0ID0gaG9sZVJlY3Q7CisgICAg
R3JhcGhpY3NSZWN0IGRlc3RIb2xlUmVjdCA9IGhvbGVSZWN0OwogICAgIGRlc3RIb2xlUmVjdC5t
b3ZlKG1fb2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVCb3VuZHMgPSBkZXN0SG9sZVJl
Y3Q7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlQm91bmRzID0gZGVzdEhvbGVSZWN0OwogICAg
IGRlc3RIb2xlQm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkpOwogICAgIGRlc3RIb2xl
Qm91bmRzLmluZmxhdGVZKGVkZ2VTaXplLmhlaWdodCgpKTsKIApAQCAtNzI2LDcgKzcyNiw3IEBA
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGkKICAgICBTY3JhdGNoQnVm
ZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwogfQogCi12b2lkIFNo
YWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IFJvdW5kZWRS
ZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgY29uc3QgSW50
U2l6ZSYgZWRnZVNpemUpCit2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGlu
ZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBz
aGFkb3dlZFJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNp
emUmIHRlbXBsYXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogICAgIGdy
YXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKQEAgLTczNSwxNCArNzM1LDE0IEBAIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW4KICAgICBpZiAoIW1fbGF5ZXJJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHRlbXBsYXRlU2hhZG93ID0gRmxv
YXRSZWN0KGVkZ2VTaXplLndpZHRoKCksIGVkZ2VTaXplLmhlaWdodCgpLCB0ZW1wbGF0ZVNpemUu
d2lkdGgoKSAtIDIgKiBlZGdlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSAy
ICogZWRnZVNpemUuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCB0ZW1wbGF0ZVNoYWRvdyA9
IEdyYXBoaWNzUmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwgdGVtcGxh
dGVTaXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdo
dCgpIC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKIAogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6
c2hhcmVkKCkubWF0Y2hlc0xhc3RTaGFkb3cobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9y
U3BhY2UsIHRlbXBsYXRlU2hhZG93LCByYWRpaSkpIHsKICAgICAgICAgLy8gRHJhdyBzaGFkb3cg
aW50byB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29u
dGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHNoYWRvd1N0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogCi0gICAgICAgIHNo
YWRvd0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRo
KCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBzaGFkb3dDb250ZXh0LT5jbGVh
clJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNp
emUuaGVpZ2h0KCkpKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIAogICAgICAgICBpZiAocmFk
aWkuaXNaZXJvKCkpCkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVj
dFNoYWRvd1dpdGhUaWxpbgogICAgICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRMYXN0
U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0ZW1wbGF0
ZVNoYWRvdywgcmFkaWkpOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBzaGFkb3dCb3VuZHMgPSBz
aGFkb3dlZFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHNoYWRvd0JvdW5kcyA9IHNoYWRvd2VkUmVj
dDsKICAgICBzaGFkb3dCb3VuZHMubW92ZShtX29mZnNldC53aWR0aCgpLCBtX29mZnNldC5oZWln
aHQoKSk7CiAgICAgc2hhZG93Qm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkpOwogICAg
IHNoYWRvd0JvdW5kcy5pbmZsYXRlWShlZGdlU2l6ZS5oZWlnaHQoKSk7CkBAIC03NjksNyArNzY5
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbgogICAgIFNjcmF0
Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKLXZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd0JvdW5kcywgY29uc3QgUm91bmRlZFJlY3Q6
OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgYnVmZmVyUGFkZGluZywgY29uc3QgSW50U2l6
ZSYgdGVtcGxhdGVTaXplLCBTaGFkb3dEaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZCBTaGFkb3dC
bHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93Qm91bmRzLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkm
IHJhZGlpLCBjb25zdCBJbnRTaXplJiBidWZmZXJQYWRkaW5nLCBjb25zdCBJbnRTaXplJiB0ZW1w
bGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgY29uc3QgSW50U2l6
ZSB0d2ljZVJhZGl1cyA9IEludFNpemUoYnVmZmVyUGFkZGluZy53aWR0aCgpICogMiwgYnVmZmVy
UGFkZGluZy5oZWlnaHQoKSAqIDIpOwogCkBAIC03ODMsNyArNzgzLDcgQEAgdm9pZCBTaGFkb3dC
bHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpYwogICAgIGludCBjZW50ZXJIZWlnaHQgPSBzaGFk
b3dCb3VuZHMuaGVpZ2h0KCkgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlOwogCiAgICAgaWYgKGRp
cmVjdGlvbiA9PSBPdXRlclNoYWRvdykgewotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93SW50ZXJp
b3Ioc2hhZG93Qm91bmRzLngoKSArIGxlZnRTbGljZSwgc2hhZG93Qm91bmRzLnkoKSArIHRvcFNs
aWNlLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNo
YWRvd0ludGVyaW9yKHNoYWRvd0JvdW5kcy54KCkgKyBsZWZ0U2xpY2UsIHNoYWRvd0JvdW5kcy55
KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCk7CiAgICAgICAgIGlmICgh
c2hhZG93SW50ZXJpb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CiAgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwpAQCAtNzkz
LDEyICs3OTMsMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpYwog
CiAgICAgLy8gTm90ZSB0aGF0IGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIGlzIGZhc3RlciB0aGFu
IGNyZWF0aW5nIGEgSW1hZ2UgYW5kIGRyYXdpbmcgdGhhdCwKICAgICAvLyBiZWNhdXNlIEltYWdl
QnVmZmVyOjpkcmF3KCkga25vd3MgdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gY29weSB0aGUgaW1h
Z2UgYml0cy4KLSAgICBGbG9hdFJlY3QgY2VudGVyUmVjdChzaGFkb3dCb3VuZHMueCgpICsgbGVm
dFNsaWNlLCBzaGFkb3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBjZW50ZXJI
ZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCBjZW50ZXJSZWN0KHNoYWRvd0JvdW5kcy54KCkgKyBs
ZWZ0U2xpY2UsIHNoYWRvd0JvdW5kcy55KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgsIGNlbnRl
ckhlaWdodCk7CiAgICAgY2VudGVyUmVjdCA9IGdyYXBoaWNzQ29udGV4dC0+cm91bmRUb0Rldmlj
ZVBpeGVscyhjZW50ZXJSZWN0KTsKICAgICAKICAgICAvLyBUb3Agc2lkZS4KLSAgICBGbG9hdFJl
Y3QgdGlsZVJlY3QgPSBGbG9hdFJlY3QobGVmdFNsaWNlLCAwLCB0ZW1wbGF0ZVNpZGVMZW5ndGgs
IHRvcFNsaWNlKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVj
dC54KCksIGNlbnRlclJlY3QueSgpIC0gdG9wU2xpY2UsIGNlbnRlclJlY3Qud2lkdGgoKSwgdG9w
U2xpY2UpOworICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdChsZWZ0U2xp
Y2UsIDAsIHRlbXBsYXRlU2lkZUxlbmd0aCwgdG9wU2xpY2UpOworICAgIEdyYXBoaWNzUmVjdCBk
ZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0LngoKSwgY2VudGVyUmVjdC55KCkgLSB0
b3BTbGljZSwgY2VudGVyUmVjdC53aWR0aCgpLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250
ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
ZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCkBAIC04
MDksOCArODA5LDggQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpYwog
ICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIExlZnQgc2lkZS4K
LSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCB0ZW1wbGF0
ZVNpZGVMZW5ndGgpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3QueCgpIC0g
bGVmdFNsaWNlLCBjZW50ZXJSZWN0LnkoKSwgbGVmdFNsaWNlLCBjZW50ZXJSZWN0LmhlaWdodCgp
KTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCB0
ZW1wbGF0ZVNpZGVMZW5ndGgpOworICAgIGRlc3RSZWN0ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJl
Y3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0LnkoKSwgbGVmdFNsaWNlLCBjZW50ZXJSZWN0
LmhlaWdodCgpKTsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVy
SW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAKICAgICAv
LyBSaWdodCBzaWRlLgpAQCAtODIxLDIzICs4MjEsMjMgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
TGF5ZXJQaWVjZXMoR3JhcGhpYwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsK
IAogICAgIC8vIFRvcCBsZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0UmVjdChjZW50ZXJS
ZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgbGVmdFNsaWNl
LCB0b3BTbGljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgbGVmdFNsaWNl
LCB0b3BTbGljZSk7CisgICAgZGVzdFJlY3QgPSBHcmFwaGljc1JlY3QoY2VudGVyUmVjdC54KCkg
LSBsZWZ0U2xpY2UsIGNlbnRlclJlY3QueSgpIC0gdG9wU2xpY2UsIGxlZnRTbGljZSwgdG9wU2xp
Y2UpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIFRvcCBy
aWdodCBjb3JuZXIuCi0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QodGVtcGxhdGVTaXplLndpZHRo
KCkgLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSk7Ci0gICAgZGVzdFJlY3Qg
PSBGbG9hdFJlY3QoY2VudGVyUmVjdC5tYXhYKCksIGNlbnRlclJlY3QueSgpIC0gdG9wU2xpY2Us
IHJpZ2h0U2xpY2UsIHRvcFNsaWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCh0ZW1w
bGF0ZVNpemUud2lkdGgoKSAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKTsK
KyAgICBkZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0Lm1heFgoKSwgY2VudGVyUmVj
dC55KCkgLSB0b3BTbGljZSwgcmlnaHRTbGljZSwgdG9wU2xpY2UpOwogICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
ZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIEJvdHRvbSByaWdodCBjb3JuZXIuCi0gICAg
dGlsZVJlY3QgPSBGbG9hdFJlY3QodGVtcGxhdGVTaXplLndpZHRoKCkgLSByaWdodFNsaWNlLCB0
ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xp
Y2UpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3QubWF4WCgpLCBjZW50ZXJS
ZWN0Lm1heFkoKSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpOworICAgIHRpbGVSZWN0ID0gR3Jh
cGhpY3NSZWN0KHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmlnaHRTbGljZSwgdGVtcGxhdGVTaXpl
LmhlaWdodCgpIC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKTsKKyAgICBk
ZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0Lm1heFgoKSwgY2VudGVyUmVjdC5tYXhZ
KCksIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKTsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0
aWxlUmVjdCk7CiAKICAgICAvLyBCb3R0b20gbGVmdCBjb3JuZXIuCi0gICAgdGlsZVJlY3QgPSBG
bG9hdFJlY3QoMCwgdGVtcGxhdGVTaXplLmhlaWdodCgpIC0gYm90dG9tU2xpY2UsIGxlZnRTbGlj
ZSwgYm90dG9tU2xpY2UpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3QueCgp
IC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0Lm1heFkoKSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSk7
CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgdGVtcGxhdGVTaXplLmhlaWdodCgpIC0g
Ym90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpOworICAgIGRlc3RSZWN0ID0gR3Jh
cGhpY3NSZWN0KGNlbnRlclJlY3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0Lm1heFkoKSwg
bGVmdFNsaWNlLCBib3R0b21TbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJl
Y3QpOwogfQogCkBAIC04NjIsMTAgKzg2MiwxMCBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRD
b2xvclNoYWRvd0J1ZmZlCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpzaGFkb3dDb250ZXh0KTsKICAgICBzaGFkb3dDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlU291cmNlSW4pOwogICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvciht
X2NvbG9yLCBtX2NvbG9yU3BhY2UpOwotICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0
UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7
CisgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHRlbXBsYXRl
U2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpKTsKIH0KIAotR3JhcGhpY3NDb250
ZXh0KiBTaGFkb3dCbHVyOjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCAqY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCitHcmFwaGljc0NvbnRleHQqIFNoYWRvd0Js
dXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBHcmFw
aGljc1JlY3QmIGxheWVyQXJlYSkKIHsKICAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRleHQpOwog
CkBAIC04NzgsNyArODc4LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBTaGFkb3dCbHVyOjpiZWdpblNo
YWRvdwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdl
LT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+c2F2ZSgpOwotICAgIHNoYWRvd0NvbnRl
eHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXll
clNpemUuaGVpZ2h0KCkpKTsKKyAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3QoR3JhcGhpY3NS
ZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSk7CiAK
ICAgICBzaGFkb3dDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7
CiAgICAgcmV0dXJuIHNoYWRvd0NvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApA
QCAtNTAsMTkgKzUwLDE5IEBAIHB1YmxpYzoKICAgICAgICAgQmx1clNoYWRvdwogICAgIH07CiAK
LSAgICBTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKKyAgICBTaGFkb3dCbHVyKGNvbnN0
IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKICAgICBTaGFkb3dCbHVyKCk7CiAKLSAgICB2b2lkIHNldFNo
YWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29s
b3ImLCBDb2xvclNwYWNlLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CisgICAgdm9p
ZCBzZXRTaGFkb3dWYWx1ZXMoY29uc3QgR3JhcGhpY3NTaXplJiwgY29uc3QgR3JhcGhpY3NTaXpl
JiAsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zID0gZmFs
c2UpOwogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIGlnbm9yZVRy
YW5zZm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5zZm9ybXM7
IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpblNo
YWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKTsK
KyAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBsYXllckFyZWEpOwogICAgIHZvaWQgZW5kU2hhZG93TGF5ZXIo
R3JhcGhpY3NDb250ZXh0Kik7CiAKLSAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYpOwotICAg
IHZvaWQgZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9s
ZVJhZGlpKTsKKyAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYpOworICAgIHZvaWQgZHJh
d0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJh
ZGlpKTsKIAogICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciosIGNvbnN0IElu
dFNpemUmLCBpbnQgc3RyaWRlKTsKIApAQCAtODEsMTYgKzgxLDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgIElubmVyU2hhZG93CiAgICAgfTsKICAgICAKLSAgICBJbnRSZWN0IGNhbGN1bGF0ZUxheWVy
Qm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVh
LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgSW50UmVjdCBjYWxjdWxhdGVMYXllckJv
dW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGxheWVyQXJl
YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogICAgIEludFNpemUgdGVtcGxhdGVTaXplKGNv
bnN0IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJikg
Y29uc3Q7CiAKLSAgICB2b2lkIGRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QpOwotICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5n
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpS
YWRpaSYsIGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYg
Ymx1cnJlZEVkZ2VTaXplKTsKKyAgICB2b2lkIGRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBSb3VuZGVkUmVjdDo6
UmFkaWkmLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOworICAgIHZvaWQgZHJhd1JlY3RTaGFk
b3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0
IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgYmx1cnJlZEVkZ2VTaXplKTsKIAotICAgIHZvaWQgZHJhd0luc2V0U2hh
ZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QpOwotICAgIHZvaWQgZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmIGhvbGVS
ZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiBzaGFkb3dUZW1w
bGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSk7CisgICAgdm9pZCBkcmF3
SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNz
UmVjdCYsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpS
YWRpaSYsIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7CisgICAgdm9pZCBkcmF3SW5zZXRTaGFk
b3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0
IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmx1cnJlZEVkZ2VT
aXplKTsKICAgICAKLSAgICB2b2lkIGRyYXdMYXllclBpZWNlcyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIHNoYWRvd0JvdW5kcywgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwg
Y29uc3QgSW50U2l6ZSYgcm91bmRlZFJhZGl1cywgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXpl
LCBTaGFkb3dEaXJlY3Rpb24pOworICAgIHZvaWQgZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93Qm91bmRzLCBjb25zdCBSb3VuZGVkUmVj
dDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiByb3VuZGVkUmFkaXVzLCBjb25zdCBJbnRTaXplJiB0
ZW1wbGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlvbik7CiAgICAgCiAgICAgdm9pZCBibHVyU2hhZG93
QnVmZmVyKGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSk7CiAgICAgdm9pZCBibHVyQW5kQ29s
b3JTaGFkb3dCdWZmZXIoY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKTsKQEAgLTEwMiwxNSAr
MTAyLDE1IEBAIHByaXZhdGU6CiAKICAgICBDb2xvciBtX2NvbG9yOwogICAgIENvbG9yU3BhY2Ug
bV9jb2xvclNwYWNlOwotICAgIEZsb2F0U2l6ZSBtX2JsdXJSYWRpdXM7Ci0gICAgRmxvYXRTaXpl
IG1fb2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSBtX2JsdXJSYWRpdXM7CisgICAgR3JhcGhpY3NT
aXplIG1fb2Zmc2V0OwogCiAgICAgSW1hZ2VCdWZmZXIqIG1fbGF5ZXJJbWFnZTsgLy8gQnVmZmVy
IHRvIHdoZXJlIHRoZSB0ZW1wb3Jhcnkgc2hhZG93IHdpbGwgYmUgZHJhd24gdG8uCiAKLSAgICBG
bG9hdFJlY3QgbV9zb3VyY2VSZWN0OyAvLyBTdWItcmVjdCBvZiBtX2xheWVySW1hZ2UgdGhhdCBj
b250YWlucyB0aGUgc2hhZG93IHBpeGVscy4KLSAgICBGbG9hdFBvaW50IG1fbGF5ZXJPcmlnaW47
IC8vIFRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgKHBvc3NpYmx5IGNsaXBwZWQpIGJvdW5kaW5nIHJl
Y3QgdG8gZHJhdyB0aGUgc2hhZG93IHRvLgotICAgIEZsb2F0U2l6ZSBtX2xheWVyU2l6ZTsgLy8g
U2l6ZSBvZiBtX2xheWVySW1hZ2UgcGl4ZWxzIHRoYXQgbmVlZCBibHVycmluZy4KLSAgICBGbG9h
dFNpemUgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbjsgLy8gVHJhbnNsYXRpb24gdG8gYXBwbHkg
dG8gbV9sYXllckNvbnRleHQgZm9yIHRoZSBzaGFkb3cgdG8gYmUgY29ycmVjdGx5IGNsaXBwZWQu
CisgICAgR3JhcGhpY3NSZWN0IG1fc291cmNlUmVjdDsgLy8gU3ViLXJlY3Qgb2YgbV9sYXllcklt
YWdlIHRoYXQgY29udGFpbnMgdGhlIHNoYWRvdyBwaXhlbHMuCisgICAgR3JhcGhpY3NQb2ludCBt
X2xheWVyT3JpZ2luOyAvLyBUb3AtbGVmdCBjb3JuZXIgb2YgdGhlIChwb3NzaWJseSBjbGlwcGVk
KSBib3VuZGluZyByZWN0IHRvIGRyYXcgdGhlIHNoYWRvdyB0by4KKyAgICBHcmFwaGljc1NpemUg
bV9sYXllclNpemU7IC8vIFNpemUgb2YgbV9sYXllckltYWdlIHBpeGVscyB0aGF0IG5lZWQgYmx1
cnJpbmcuCisgICAgR3JhcGhpY3NTaXplIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247IC8vIFRy
YW5zbGF0aW9uIHRvIGFwcGx5IHRvIG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93IHRvIGJl
IGNvcnJlY3RseSBjbGlwcGVkLgogCiAgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRlICJGb250TWV0cmljcy5oIgogI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIKICNpbmNs
dWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVhdHVyZXMu
aCIKQEAgLTEyOCw5ICsxMjgsOSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgYXZnQ2hhcldpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9hdmdDaGFyV2lkdGg7IH0KICAgICB2b2lkIHNldEF2Z0NoYXJXaWR0
aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGggPSBhdmdDaGFyV2lkdGg7IH0K
IAotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aEZvckds
eXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHBsYXRmb3JtQm91bmRzRm9yR2x5
cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCkg
Y29uc3Q7CiAKICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZVdp
ZHRoOyB9CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICB8fCAoT1MoV0lORE9XUykg
JiYgUExBVEZPUk0oV1gpKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lkIHBsYXRm
b3JtQ29tbW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlwaChHbHlw
aCBnbHlwaCkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBo
IGdseXBoKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBoIGdseXBoKSBj
b25zdDsKICNlbmRpZgogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBGb250UGxh
dGZvcm1EYXRhIG1fcGxhdGZvcm1EYXRhOwogICAgIE93blB0cjxBZGRpdGlvbmFsRm9udERhdGE+
IG1fZm9udERhdGE7CiAKLSAgICBtdXRhYmxlIE93blB0cjxHbHlwaE1ldHJpY3NNYXA8RmxvYXRS
ZWN0PiA+IG1fZ2x5cGhUb0JvdW5kc01hcDsKKyAgICBtdXRhYmxlIE93blB0cjxHbHlwaE1ldHJp
Y3NNYXA8R3JhcGhpY3NSZWN0PiA+IG1fZ2x5cGhUb0JvdW5kc01hcDsKICAgICBtdXRhYmxlIEds
eXBoTWV0cmljc01hcDxmbG9hdD4gbV9nbHlwaFRvV2lkdGhNYXA7CiAKICAgICBib29sIG1fdHJl
YXRBc0ZpeGVkUGl0Y2g7CkBAIC0yOTksMTIgKzI5OSwxMiBAQCBwcml2YXRlOgogfTsKIAogI2lm
ICEoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkKLUFMV0FZU19JTkxJTkUgRmxvYXRS
ZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0FM
V0FZU19JTkxJTkUgR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBo
KSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NS
ZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIEdyYXBoaWNzUmVjdCBib3VuZHM7
CiAgICAgaWYgKG1fZ2x5cGhUb0JvdW5kc01hcCkgewogICAgICAgICBib3VuZHMgPSBtX2dseXBo
VG9Cb3VuZHNNYXAtPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgIGlmIChib3VuZHMu
d2lkdGgoKSAhPSBjR2x5cGhTaXplVW5rbm93bikKQEAgLTMxMyw3ICszMTMsNyBAQCBBTFdBWVNf
SU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6CiAKICAgICBib3VuZHMgPSBwbGF0Zm9y
bUJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01hcCkKLSAg
ICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gYWRvcHRQdHIobmV3IEdseXBoTWV0cmljc01hcDxG
bG9hdFJlY3Q+KTsKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gYWRvcHRQdHIobmV3IEds
eXBoTWV0cmljc01hcDxHcmFwaGljc1JlY3Q+KTsKICAgICBtX2dseXBoVG9Cb3VuZHNNYXAtPnNl
dE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKICAgICByZXR1cm4gYm91bmRzOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NQb2lu
dDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEZvbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBXaWR0aEl0ZXJhdG9yJiwg
VUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5z
aWduZWQmIGFkdmFuY2VMZW5ndGgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBv
aW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBj
b25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChj
b25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBn
bHlwaE5hbWUpIGNvbnN0ID0gMDsKICNlbmRpZgogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGlsZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQogICAgIGNvbnN0IEludFJlY3QmIHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBwYWludENoZWNr
ZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHN0YXRp
YyB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhp
Y3NSZWN0Jik7CiAKIHByaXZhdGU6CiAgICAgVGlsZShUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0
IENvb3JkaW5hdGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldFRp
bGVDcmVhdGlvbkQKICAgICBtX3RpbGVDcmVhdGlvbkRlbGF5ID0gZGVsYXk7CiB9CiAKLXZvaWQg
VGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBG
bG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGll
cikKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVy
cyhjb25zdCBHcmFwaGljc1NpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBHcmFwaGljc1NpemUm
IGNvdmVyTXVsdGlwbGllcikKIHsKICAgICBtX2tlZXBBcmVhTXVsdGlwbGllciA9IGtlZXBNdWx0
aXBsaWVyOwogICAgIG1fY292ZXJBcmVhTXVsdGlwbGllciA9IGNvdmVyTXVsdGlwbGllcjsKQEAg
LTEzNSw3ICsxMzUsNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpwYWludChHcmFwaGljc0Nv
CiAgICAgCiAgICAgLy8gQXNzdW1lcyB0aGUgYmFja2luZyBzdG9yZSBpcyBwYWludGVkIHdpdGgg
dGhlIHNjYWxlIHRyYW5zZm9ybSBhcHBsaWVkLgogICAgIC8vIFNpbmNlIHRpbGUgY29udGVudCBp
cyBhbHJlYWR5IHNjYWxlZCwgZmlyc3QgcmV2ZXJ0IHRoZSBzY2FsaW5nIGZyb20gdGhlIHBhaW50
ZXIuCi0gICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEuZiAvIG1fY29udGVudHNTY2FsZSwg
MS5mIC8gbV9jb250ZW50c1NjYWxlKSk7CisgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXpl
KDEuZiAvIG1fY29udGVudHNTY2FsZSwgMS5mIC8gbV9jb250ZW50c1NjYWxlKSk7CiAgICAgCiAg
ICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tQ29udGVudHMocmVjdCk7CiAgICAgCkBAIC0x
NTMsNyArMTUzLDcgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6cGFpbnQoR3JhcGhpY3NDbwog
ICAgICAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0ID0gaW50ZXJzZWN0aW9uKHRpbGVSZWN0LCBk
aXJ0eVJlY3QpOwogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBUaWxlOjpwYWludENoZWNr
ZXJQYXR0ZXJuKGNvbnRleHQsIEZsb2F0UmVjdCh0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBU
aWxlOjpwYWludENoZWNrZXJQYXR0ZXJuKGNvbnRleHQsIEdyYXBoaWNzUmVjdCh0YXJnZXQpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI5MywxMyArMjkzLDEzIEBAIHZv
aWQgVGlsZWRCYWNraW5nU3RvcmU6OmRyb3BPdmVyaGFuZ2luZ1QKIAogdm9pZCBUaWxlZEJhY2tp
bmdTdG9yZTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiB7
Ci0gICAgRmxvYXRSZWN0IGtlZXBSZWN0RiA9IGtlZXBSZWN0OworICAgIEdyYXBoaWNzUmVjdCBr
ZWVwUmVjdEYgPSBrZWVwUmVjdDsKIAogICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRlPiB0b1Jl
bW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZv
ciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5j
b29yZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJl
Y3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgp
OwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKICAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsKICAgICB9CkBAIC0zMjUsNyArMzI1LDcg
QEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlVGlsZShjb25zdAogCiBJbnRSZWN0IFRp
bGVkQmFja2luZ1N0b3JlOjptYXBUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpIC8gbV9j
b250ZW50c1NjYWxlLAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdChy
ZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgcmVjdC55KCkgLyBtX2NvbnRlbnRz
U2NhbGUsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAvIG1fY29udGVudHNTY2FsZSwKICAgICAgICAg
cmVjdC5oZWlnaHQoKSAvIG1fY29udGVudHNTY2FsZSkpOwpAQCAtMzMzLDcgKzMzMyw3IEBAIElu
dFJlY3QgVGlsZWRCYWNraW5nU3RvcmU6Om1hcFRvQ29udGVudHMKIAogSW50UmVjdCBUaWxlZEJh
Y2tpbmdTdG9yZTo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpICogbV9jb250
ZW50c1NjYWxlLAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdChyZWN0
LngoKSAqIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgcmVjdC55KCkgKiBtX2NvbnRlbnRzU2Nh
bGUsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAqIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgcmVj
dC5oZWlnaHQoKSAqIG1fY29udGVudHNTY2FsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0
b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQogCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiVGlsZS5oIgpAQCAtNjAsMTIgKzYwLDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFRpbGVDcmVhdGlvbkRlbGF5KGRvdWJsZSBkZWxheSk7CiAgICAgCiAgICAgLy8gVGlsZWQg
YXJlIGRyb3BwZWQgb3V0c2lkZSB0aGUga2VlcCBhcmVhLCBhbmQgY3JlYXRlZCBmb3IgY292ZXIg
YXJlYS4gVGhlIHZhbHVlcyBhIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBzaXplLgotICAgIHZv
aWQgZ2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKEZsb2F0U2l6ZSYga2VlcE11bHRpcGxp
ZXIsIEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQorICAgIHZvaWQgZ2V0S2VlcEFuZENvdmVy
QXJlYU11bHRpcGxpZXJzKEdyYXBoaWNzU2l6ZSYga2VlcE11bHRpcGxpZXIsIEdyYXBoaWNzU2l6
ZSYgY292ZXJNdWx0aXBsaWVyKQogICAgIHsKICAgICAgICAga2VlcE11bHRpcGxpZXIgPSBtX2tl
ZXBBcmVhTXVsdGlwbGllcjsKICAgICAgICAgY292ZXJNdWx0aXBsaWVyID0gbV9jb3ZlckFyZWFN
dWx0aXBsaWVyOwogICAgIH0KLSAgICB2b2lkIHNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVy
cyhjb25zdCBGbG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVy
TXVsdGlwbGllcik7ICAgIAorICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJz
KGNvbnN0IEdyYXBoaWNzU2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
Y292ZXJNdWx0aXBsaWVyKTsgICAgCiAKIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFRpbGVCdWZm
ZXJVcGRhdGVUaW1lcigpOwpAQCAtMTEwLDggKzExMCw4IEBAIHByaXZhdGU6CiAKICAgICBJbnRT
aXplIG1fdGlsZVNpemU7CiAgICAgZG91YmxlIG1fdGlsZUNyZWF0aW9uRGVsYXk7Ci0gICAgRmxv
YXRTaXplIG1fa2VlcEFyZWFNdWx0aXBsaWVyOwotICAgIEZsb2F0U2l6ZSBtX2NvdmVyQXJlYU11
bHRpcGxpZXI7CisgICAgR3JhcGhpY3NTaXplIG1fa2VlcEFyZWFNdWx0aXBsaWVyOworICAgIEdy
YXBoaWNzU2l6ZSBtX2NvdmVyQXJlYU11bHRpcGxpZXI7CiAgICAgCiAgICAgSW50UmVjdCBtX3By
ZXZpb3VzVmlzaWJsZVJlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdW5zaWduZWQg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2ZmcwogICAgIHdpZHRoU2luY2VMYXN0Um91bmRp
bmcgLT0gbV9ydW5XaWR0aFNvRmFyOwogCiAgICAgZmxvYXQgbGFzdFJvdW5kaW5nV2lkdGggPSBt
X2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIEdyYXBoaWNz
UmVjdCBib3VuZHM7CiAKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcHJpbWFyeUZvbnQgPSBt
X2ZvbnQtPnByaW1hcnlGb250KCk7CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGxhc3RGb250
RGF0YSA9IHByaW1hcnlGb250OwpAQCAtMjM4LDkgKzIzOCw5IEBAIHVuc2lnbmVkIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2UoaW50IG9mZnMKICAgICAgICAgbGFzdFJvdW5kaW5nV2lkdGggPSB3aWR0
aCAtIG9sZFdpZHRoOwogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5kcykgewot
ICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91bmRp
bmdCb3hZLCBib3VuZHMubWF4WSgpKTsKLSAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0Jv
eFkgPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLnkoKSk7Ci0gICAgICAgICAg
ICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZsb2F0PigwLCBib3VuZHMubWF4WCgpIC0gd2lk
dGgpOworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBo
Qm91bmRpbmdCb3hZLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLm1heFkoKSkpOworICAgICAg
ICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZ
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLnkoKSkpOworICAgICAgICAgICAgbV9sYXN0R2x5
cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5kcy5tYXhY
KCkpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiA5MTAx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCi0jaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CkBAIC0yNTEsNyArMjUxLDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2Fz
c2V0VVJMOwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9hZDsKLSAgICBGbG9hdFNp
emUgbV9zY2FsZUZhY3RvcjsKKyAgICBHcmFwaGljc1NpemUgbV9zY2FsZUZhY3RvcjsKIAogICAg
IEludFNpemUgbV9jYWNoZWROYXR1cmFsU2l6ZTsKICAgICBtdXRhYmxlIGZsb2F0IG1fY2FjaGVk
TWF4VGltZUxvYWRlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNyArNjA3LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmIChpbWFn
ZSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRl
eHQpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4w
ZikpOworICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsK
ICAgICAgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0
aW9uTG93KTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNp
emUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBwYWludFJl
Y3Qud2lkdGgoKSwgcGFpbnRSZWN0LmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCkBAIC03OSw3
ICs3OSw3IEBAIHN0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZVRyYW5zZm9ybWF0aW8KICAgICB9
CiB9CiAKLXN0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRChUcmFuc2Zvcm1P
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKK3N0YXRpYyBib29sIGlzVHJh
bnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQzRChUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHJhbnNmb3JtVHlwZSkKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsKICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6CkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBi
b29sIGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCgKIAogc3RhdGljIGJvb2wgaXNUcmFuc2Zv
cm1UeXBlTnVtYmVyKFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1U
eXBlKQogewotICAgIHJldHVybiAhaXNUcmFuc2Zvcm1UeXBlVHJhbnNmb3JtYXRpb25NYXRyaXgo
dHJhbnNmb3JtVHlwZSkgJiYgIWlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCh0cmFuc2Zvcm1U
eXBlKTsKKyAgICByZXR1cm4gIWlzVHJhbnNmb3JtVHlwZVRyYW5zZm9ybWF0aW9uTWF0cml4KHRy
YW5zZm9ybVR5cGUpICYmICFpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0QodHJhbnNmb3Jt
VHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHRyYW5zZm9ybVR5cGUsIGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0JiB2YWx1
ZSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZh
bHVlKGNvCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVl
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBGbG9h
dFBvaW50M0QmIHZhbHVlKQorc3RhdGljIHZvaWQgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZShj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wLCBUcmFuc2Zvcm1PcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhp
Y3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsKICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnNldFJlcGxpY2F0ZWRCeUxheQogICAgIG5vdGVMYXllclByb3BlcnR5
Q2hhbmdlZChSZXBsaWNhdGVkTGF5ZXJDaGFuZ2VkKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlm
IChwb2ludCA9PSBtX3Bvc2l0aW9uKQogICAgICAgICByZXR1cm47CkBAIC0zODQsNyArMzg0LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IAogICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmIHBvaW50
KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAgICByZXR1cm47CkBA
IC0zOTMsNyArMzkzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldEFuY2hvclBvaW50KGNv
bgogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAg
ICAgaWYgKHNpemUgPT0gbV9zaXplKQogICAgICAgICByZXR1cm47CkBAIC00MDIsNyArNDAyLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFNpemUoY29uc3QgRmxvYQogICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6c2V0Qm91bmRzT3JpZ2luKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbikKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2lu
KQogewogICAgIGlmIChvcmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCiAgICAgICAgIHJldHVybjsK
QEAgLTU2MSwxOSArNTYxLDE5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFjaXR5KGZs
b2F0IG8KIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAg
RmxvYXRSZWN0IGh1Z2VSZWN0KC1udW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8gMiwgLW51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkgLyAyLAorICAgIEdyYXBoaWNzUmVjdCBodWdlUmVj
dCgtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsIC1udW1lcmljX2xpbWl0czxmbG9h
dD46Om1heCgpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjptYXgoKSwgbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7CiAKICAgICBzZXROZWVk
c0Rpc3BsYXlJblJlY3QoaHVnZVJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgR3JhcGhpY3NMYXll
ckNBOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAg
IGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBy
ZWN0KHIpOwotICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7
CisgICAgR3JhcGhpY3NSZWN0IHJlY3Qocik7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyQm91bmRz
KEdyYXBoaWNzUG9pbnQoKSwgbV9zaXplKTsKICAgICByZWN0LmludGVyc2VjdChsYXllckJvdW5k
cyk7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC05NzYsMTgg
Kzk3NiwxOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoKQogICAgIGlm
IChuZWVkVGlsZWRMYXllciAhPSBtX3VzaW5nVGlsZWRMYXllcikKICAgICAgICAgc3dhcEZyb21P
clRvVGlsZWRMYXllcihuZWVkVGlsZWRMYXllcik7CiAKLSAgICBGbG9hdFNpemUgdXNlZFNpemUg
PSBtX3VzaW5nVGlsZWRMYXllciA/IGNvbnN0cmFpbmVkU2l6ZSgpIDogbV9zaXplOwotICAgIEZs
b2F0UmVjdCBib3VuZHNSZWN0KG1fYm91bmRzT3JpZ2luLCB1c2VkU2l6ZSk7CisgICAgR3JhcGhp
Y3NTaXplIHVzZWRTaXplID0gbV91c2luZ1RpbGVkTGF5ZXIgPyBjb25zdHJhaW5lZFNpemUoKSA6
IG1fc2l6ZTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRzUmVjdChtX2JvdW5kc09yaWdpbiwgdXNl
ZFNpemUpOwogCiAgICAgLy8gVXBkYXRlIHBvc2l0aW9uLgogICAgIC8vIFBvc2l0aW9uIGlzIG9m
ZnNldCBvbiB0aGUgbGF5ZXIgYnkgdGhlIGxheWVyIGFuY2hvciBwb2ludC4KLSAgICBGbG9hdFBv
aW50IHBvc1BvaW50KG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiB1c2VkU2l6
ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogdXNlZFNpemUu
aGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9pbnQgcG9zUG9pbnQobV9wb3NpdGlvbi54KCkgKyBt
X2FuY2hvclBvaW50LngoKSAqIHVzZWRTaXplLndpZHRoKCksIG1fcG9zaXRpb24ueSgpICsgbV9h
bmNob3JQb2ludC55KCkgKiB1c2VkU2l6ZS5oZWlnaHQoKSk7CiAgICAgcHJpbWFyeUxheWVyKCkt
PnNldFBvc2l0aW9uKHBvc1BvaW50KTsKIAogICAgIGlmIChMYXllck1hcCogbGF5ZXJDbG9uZU1h
cCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXllck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQb3NpdGlvbiA9IHBvc1BvaW50Owor
ICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjbG9uZVBvc2l0aW9uID0gcG9zUG9pbnQ7CiAgICAg
ICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25lKGl0LT5m
aXJzdCkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1jYXNlIHBv
c2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAgICAgICAg
Ly8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KQEAgLTExODEsOCAr
MTE4MSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGEKICAgICB1
cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICAKICAgICAvLyBTZXQgcHJvcGVydGllcyBv
ZiBtX2xheWVyIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBzaW5jZSB0aGVzZSBhcmUgZXhwcmVz
c2VkIG9uIG9uIHRoZSBzdHJ1Y3R1cmFsIGxheWVyLgotICAgIEZsb2F0UG9pbnQgcG9pbnQobV9z
aXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKTsKLSAgICBGbG9hdFBv
aW50M0QgYW5jaG9yUG9pbnQoMC41ZiwgMC41ZiwgMCk7CisgICAgR3JhcGhpY3NQb2ludCBwb2lu
dChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpOworICAgIEdy
YXBoaWNzUG9pbnQzRCBhbmNob3JQb2ludCgwLjVmLCAwLjVmLCAwKTsKICAgICBtX2xheWVyLT5z
ZXRQb3NpdGlvbihwb2ludCk7CiAgICAgbV9sYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9p
bnQpOwogICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsK
QEAgLTEzMTEsOCArMTMxMSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50
c1JlY3QKICAgICBpZiAoIW1fY29udGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RmxvYXRQb2ludCBwb2ludChtX2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0LnkoKSk7
Ci0gICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgbV9jb250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250
ZW50c1JlY3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQobV9jb250ZW50c1Jl
Y3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KDAsIDAs
IG1fY29udGVudHNSZWN0LndpZHRoKCksIG1fY29udGVudHNSZWN0LmhlaWdodCgpKTsKIAogICAg
IG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24ocG9pbnQpOwogICAgIG1fY29udGVudHNMYXll
ci0+c2V0Qm91bmRzKHJlY3QpOwpAQCAtMTM4Nyw3ICsxMzg3LDcgQEAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZQogICAgIEdyYXBoaWNzTGF5ZXJDQSogcmVwbGljYXRl
ZExheWVyID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9yZXBsaWNhdGVkTGF5ZXIp
OwogICAgIAogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lZExheWVyUm9vdCA9IHJl
cGxpY2F0ZWRMYXllci0+ZmV0Y2hDbG9uZUxheWVycyh0aGlzLCByZXBsaWNhU3RhdGUsIFJvb3RD
bG9uZUxldmVsKTsKLSAgICBGbG9hdFBvaW50IGNsb25lUm9vdFBvc2l0aW9uID0gcmVwbGljYXRl
ZExheWVyLT5wb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CisgICAgR3JhcGhpY3NQb2ludCBj
bG9uZVJvb3RQb3NpdGlvbiA9IHJlcGxpY2F0ZWRMYXllci0+cG9zaXRpb25Gb3JDbG9uZVJvb3RM
YXllcigpOwogCiAgICAgLy8gUmVwbGljYSByb290IGhhcyBubyBvZmZzZXQgb3IgdHJhbnNmb3Jt
CiAgICAgY2xvbmVkTGF5ZXJSb290LT5zZXRQb3NpdGlvbihjbG9uZVJvb3RQb3NpdGlvbik7CkBA
IC0xNzg5LDEyICsxNzg5LDEyIEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFuc2Zvcm1B
bmltYXQKICAgICAgICAgICAgIGZsb2F0IHRvVmFsdWU7CiAgICAgICAgICAgICBnZXRUcmFuc2Zv
cm1GdW5jdGlvblZhbHVlKGVuZFZhbHVlLT52YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4KSwgdHJh
bnNmb3JtT3BUeXBlLCBib3hTaXplLCB0b1ZhbHVlKTsKICAgICAgICAgICAgIGJhc2ljQW5pbS0+
c2V0VG9WYWx1ZSh0b1ZhbHVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVG
bG9hdFBvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludDNE
IGZyb21WYWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1Bv
aW50M0QodHJhbnNmb3JtT3BUeXBlKSkgeworICAgICAgICAgICAgR3JhcGhpY3NQb2ludDNEIGZy
b21WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoc3RhcnRWYWx1
ZS0+dmFsdWUoKS0+YXQoZnVuY3Rpb25JbmRleCksIHRyYW5zZm9ybU9wVHlwZSwgYm94U2l6ZSwg
ZnJvbVZhbHVlKTsKICAgICAgICAgICAgIGJhc2ljQW5pbS0+c2V0RnJvbVZhbHVlKGZyb21WYWx1
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCB0b1ZhbHVlOworICAg
ICAgICAgICAgR3JhcGhpY3NQb2ludDNEIHRvVmFsdWU7CiAgICAgICAgICAgICBnZXRUcmFuc2Zv
cm1GdW5jdGlvblZhbHVlKGVuZFZhbHVlLT52YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4KSwgdHJh
bnNmb3JtT3BUeXBlLCBib3hTaXplLCB0b1ZhbHVlKTsKICAgICAgICAgICAgIGJhc2ljQW5pbS0+
c2V0VG9WYWx1ZSh0b1ZhbHVlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE4MjYsNyArMTgyNiw3
IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFuc2Zvcm1BbmltYXQKIHsKICAgICBWZWN0
b3I8ZmxvYXQ+IGtleVRpbWVzOwogICAgIFZlY3RvcjxmbG9hdD4gZmxvYXRWYWx1ZXM7Ci0gICAg
VmVjdG9yPEZsb2F0UG9pbnQzRD4gZmxvYXRQb2ludDNEVmFsdWVzOworICAgIFZlY3RvcjxHcmFw
aGljc1BvaW50M0Q+IGZsb2F0UG9pbnQzRFZhbHVlczsKICAgICBWZWN0b3I8VHJhbnNmb3JtYXRp
b25NYXRyaXg+IHRyYW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzOwogICAgIFZlY3Rvcjxjb25zdCBU
aW1pbmdGdW5jdGlvbio+IHRpbWluZ0Z1bmN0aW9uczsKIApAQCAtMTg0OSw4ICsxODQ5LDggQEAg
Ym9vbCBHcmFwaGljc0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdAogICAgICAgICAgICAgICAg
IGZsb2F0IHZhbHVlOwogICAgICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUo
dHJhbnNmb3JtT3AsIHRyYW5zZm9ybU9wVHlwZSwgYm94U2l6ZSwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgIGZsb2F0VmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCh0cmFuc2Zvcm1PcFR5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRQb2ludDNEIHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1Ry
YW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgeworICAgICAgICAg
ICAgICAgIEdyYXBoaWNzUG9pbnQzRCB2YWx1ZTsKICAgICAgICAgICAgICAgICBnZXRUcmFuc2Zv
cm1GdW5jdGlvblZhbHVlKHRyYW5zZm9ybU9wLCB0cmFuc2Zvcm1PcFR5cGUsIGJveFNpemUsIHZh
bHVlKTsKICAgICAgICAgICAgICAgICBmbG9hdFBvaW50M0RWYWx1ZXMuYXBwZW5kKHZhbHVlKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xODcxLDcgKzE4NzEsNyBAQCBib29sIEdyYXBoaWNz
TGF5ZXJDQTo6c2V0VHJhbnNmb3JtQW5pbWF0CiAgICAgCiAgICAgaWYgKGlzVHJhbnNmb3JtVHlw
ZU51bWJlcih0cmFuc2Zvcm1PcFR5cGUpKQogICAgICAgICBrZXlmcmFtZUFuaW0tPnNldFZhbHVl
cyhmbG9hdFZhbHVlcyk7Ci0gICAgZWxzZSBpZiAoaXNUcmFuc2Zvcm1UeXBlRmxvYXRQb2ludDNE
KHRyYW5zZm9ybU9wVHlwZSkpCisgICAgZWxzZSBpZiAoaXNUcmFuc2Zvcm1UeXBlR3JhcGhpY3NQ
b2ludDNEKHRyYW5zZm9ybU9wVHlwZSkpCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVz
KGZsb2F0UG9pbnQzRFZhbHVlcyk7CiAgICAgZWxzZQogICAgICAgICBrZXlmcmFtZUFuaW0tPnNl
dFZhbHVlcyh0cmFuc2Zvcm1hdGlvbk1hdHJpeFZhbHVlcyk7CkBAIC0xOTk0LDkgKzE5OTQsOSBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0RGVidWdCb3JkZXIoY29uCiAgICAgfQogfQogCi1G
bG9hdFNpemUgR3JhcGhpY3NMYXllckNBOjpjb25zdHJhaW5lZFNpemUoKSBjb25zdAorR3JhcGhp
Y3NTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRTaXplKCkgY29uc3QKIHsKLSAgICBG
bG9hdFNpemUgY29uc3RyYWluZWRTaXplID0gbV9zaXplOworICAgIEdyYXBoaWNzU2l6ZSBjb25z
dHJhaW5lZFNpemUgPSBtX3NpemU7CiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSB8
fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBmbG9hdCB0aWxlQ29sdW1u
cyA9IGNlaWxmKG1fc2l6ZS53aWR0aCgpIC8ga1RpbGVkTGF5ZXJUaWxlU2l6ZSk7CiAgICAgZmxv
YXQgdGlsZVJvd3MgPSBjZWlsZihtX3NpemUuaGVpZ2h0KCkgLyBrVGlsZWRMYXllclRpbGVTaXpl
KTsKQEAgLTIwMTgsNyArMjAxOCw3IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0xheWVyQ0E6OmNvbnN0
cmFpbmVkU2kKICAgICByZXR1cm4gY29uc3RyYWluZWRTaXplOwogfQogCi1ib29sIEdyYXBoaWNz
TGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QK
K2Jvb2wgR3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgR3JhcGhpY3NT
aXplJiBzaXplKSBjb25zdAogewogICAgIGlmICghbV9kcmF3c0NvbnRlbnQgfHwgIW1fYWxsb3dU
aWxlZExheWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTE5LDkgKzIxMTksOSBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyCiAgICAgICAgICAgICAwLjBm
LCAwLjBmLCAxLjBmLCAwLjBmLAogICAgICAgICAgICAgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZik7
CiAgICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldFRyYW5zZm9ybShmbGlwcGVyKTsKLSAgICAgICAg
Y29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDEsIDApKTsKKyAg
ICAgICAgY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKDAsIDEs
IDApKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDNEKCkpOworICAgICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChH
cmFwaGljc1BvaW50M0QoKSk7CiAKICAgICBpZiAoc2hvd0RlYnVnQm9yZGVycygpKSB7CiAgICAg
ICAgIGNvbnRlbnRzTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yKDAsIDAsIDEyOCwgMTgwKSk7
CkBAIC0yMTgwLDE0ICsyMTgwLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZW1vdmVDbG9u
ZUxheWVycygKICAgICBtX2NvbnRlbnRzTGF5ZXJDbG9uZXMgPSBudWxscHRyOwogfQogCi1GbG9h
dFBvaW50IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNvbnN0
CitHcmFwaGljc1BvaW50IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXll
cigpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBjYW4gZ2V0IGNhbGxlZCBkdXJpbmcgYSBzeW5jIHdo
ZW4gd2UndmUganVzdCByZW1vdmVkIHRoZSBtX3JlcGxpY2FMYXllci4KICAgICBpZiAoIW1fcmVw
bGljYUxheWVyKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1cm4g
R3JhcGhpY3NQb2ludCgpOwogCi0gICAgRmxvYXRQb2ludCByZXBsaWNhUG9zaXRpb24gPSBtX3Jl
cGxpY2FMYXllci0+cmVwbGljYXRlZExheWVyUG9zaXRpb24oKTsKLSAgICByZXR1cm4gRmxvYXRQ
b2ludChyZXBsaWNhUG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lk
dGgoKSwKKyAgICBHcmFwaGljc1BvaW50IHJlcGxpY2FQb3NpdGlvbiA9IG1fcmVwbGljYUxheWVy
LT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHJl
cGxpY2FQb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAog
ICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FQb3NpdGlvbi55KCkgKyBtX2FuY2hvclBvaW50
LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCArNzEsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciopOwogCi0gICAgdmlydHVhbCB2b2lk
IHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5j
aG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemUo
Y29uc3QgRmxvYXRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJvdW5kc09yaWdpbihjb25z
dCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBo
aWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhp
Y3NQb2ludDNEJik7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXpl
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kc09yaWdpbihjb25zdCBHcmFwaGljc1BvaW50
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAg
CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CkBAIC0x
ODQsOSArMTg0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbW1pdExheWVyQ2hhbmdlc0JlZm9y
ZVN1YmxheWVycygpOwogICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMo
KTsKIAotICAgIEZsb2F0U2l6ZSBjb25zdHJhaW5lZFNpemUoKSBjb25zdDsKKyAgICBHcmFwaGlj
c1NpemUgY29uc3RyYWluZWRTaXplKCkgY29uc3Q7CiAKLSAgICBib29sIHJlcXVpcmVzVGlsZWRM
YXllcihjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVzVGlsZWRMYXll
cihjb25zdCBHcmFwaGljc1NpemUmKSBjb25zdDsKICAgICB2b2lkIHN3YXBGcm9tT3JUb1RpbGVk
TGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKTsKIAogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNP
cmllbnRhdGlvbiBkZWZhdWx0Q29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0OwpAQCAtMjU3LDcg
KzI1Nyw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0Nsb25lTGF5ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllckNsb25lczsgfQogICAgIHZvaWQgcmVtb3ZlQ2xvbmVMYXllcnMoKTsKLSAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKSBjb25zdDsKKyAgICBHcmFw
aGljc1BvaW50IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKSBjb25zdDsKICAgICAKICAgICB2
b2lkIHByb3BhZ2F0ZUxheWVyQ2hhbmdlVG9SZXBsaWNhcygpOwogICAgIApAQCAtMzk1LDcgKzM5
NSw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPExheWVy
UHJvcGVydHlBbmltYXRpb24+ID4gQW5pbWF0aW9uc01hcDsKICAgICBBbmltYXRpb25zTWFwIG1f
cnVubmluZ0FuaW1hdGlvbnM7CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX2RpcnR5UmVjdHM7
CisgICAgVmVjdG9yPEdyYXBoaWNzUmVjdD4gbV9kaXJ0eVJlY3RzOwogICAgIAogICAgIExheWVy
Q2hhbmdlRmxhZ3MgbV91bmNvbW1pdHRlZENoYW5nZXM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDksNyArNDksNyBAQCB0eXBl
ZGVmIENBQ0ZBbmltYXRpb25SZWYgUGxhdGZvcm1BbmltYXRpCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgUGxhdGZv
cm1DQUFuaW1hdGlvbjsKIGNsYXNzIFRpbWluZ0Z1bmN0aW9uOwogCkBAIC0xMTEsMjAgKzExMSwy
MCBAQCBwdWJsaWM6CiAgICAgLy8gQmFzaWMtYW5pbWF0aW9uIHByb3BlcnRpZXMuCiAgICAgdm9p
ZCBzZXRGcm9tVmFsdWUoZmxvYXQpOwogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3Qg
RmxvYXRQb2ludDNEJik7CisgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgR3JhcGhpY3NQb2lu
dDNEJik7CiAgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAg
ICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKIAog
ICAgIHZvaWQgc2V0VG9WYWx1ZShmbG9hdCk7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0
IEZsb2F0UG9pbnQzRCYpOworICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBHcmFwaGljc1BvaW50
M0QmKTsKICAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2
b2lkIGNvcHlUb1ZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAKICAgICAv
LyBLZXlmcmFtZS1hbmltYXRpb24gcHJvcGVydGllcy4KICAgICB2b2lkIHNldFZhbHVlcyhjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CiAgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiYpOwotICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxGbG9hdFBvaW50M0Q+Jik7CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEdy
YXBoaWNzUG9pbnQzRD4mKTsKICAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29sb3I+Jik7CiAgICAgdm9pZCBjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5p
bWF0aW9uKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1Bs
YXRmb3JtQ0FMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0KCk7
CiAKIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0
ID0gMCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgR3JhcGhpY3NSZWN0KiBkaXJ0
eVJlY3QgPSAwKTsKICAgICAKICAgICAvLyBUaGlzIHRlbGxzIHRoZSBsYXllciB0cmVlIHRvIGNv
bW1pdCBjaGFuZ2VzIGFuZCBwZXJmb3JtIGEgcmVuZGVyLCB3aXRob3V0IGRvIGEgc2V0TmVlZHNE
aXNwbGF5IG9uIGFueSBsYXllci4KICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CkBAIC0xMTcs
MTUgKzExNywxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0T3BhcXVlKGJvb2wpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0OwotICAg
IHZvaWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBib3Vu
ZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBHcmFwaGljc1JlY3QmKTsKIAot
ICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3MpIHsgc2V0UG9zaXRpb24oRmxvYXRQb2ludDNEKHBvcy54KCksIHBvcy55KCksIDAp
KTsgfQorICAgIEdyYXBoaWNzUG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0
UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludDNEJik7CisgICAgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBHcmFwaGljc1BvaW50JiBwb3MpIHsgc2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludDNEKHBv
cy54KCksIHBvcy55KCksIDApKTsgfQogCi0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50KCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAg
ICBHcmFwaGljc1BvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25zdDsKKyAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKQEAgLTE1NCw4ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgQ0ZUeXBl
UmVmIGNvbnRlbnRzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVSZWYpOwog
Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBjb250ZW50c1JlY3Qo
KSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsK
IAogICAgIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpOwogICAgIHZvaWQg
c2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKTsKQEAgLTE3NSw4ICsxNzUsOCBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJik7CiAKLSAgICBGbG9hdFJlY3QgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldEZy
YW1lKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBmcmFtZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAgICBmbG9hdCBzcGVl
ZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3BlZWQoZmxvYXQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FBbmltYXRpb25NYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNl
dEZyb21WYWx1ZShjCiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6
dmFsdWVdXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUoY29u
c3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJv
bVZhbHVlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlv
blR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQyMCw3IEBAIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb24KICAgICBbc3RhdGljX2Nhc3Q8
Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOltOU1ZhbHVl
IHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkK
IHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAgICByZXR1cm47CkBA
IC00ODIsNyArNDgyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMoY29u
cwogICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0
KCkpIHNldFZhbHVlczphcnJheV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxHcmFwaGljc1BvaW50M0Q+JiB2YWx1
ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZv
cm1DQUxheWVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgUGxhdGZvcm1DQUxh
eWVyOjphbmltYXRpb25TdGFydGVkKEMKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVy
QW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqIGRpcnR5UmVjdCkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAoZGlydHlSZWN0KQpA
QCAtNDA0LDI1ICs0MDQsMjUgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1ZShib29s
IHZhbAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotRmxvYXRSZWN0IFBsYXRm
b3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5ZXI6
OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIGJvdW5kc107CiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiB2YWx1
ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3VuZHMoY29uc3QgR3JhcGhpY3NSZWN0JiB2
YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5n
ZXQoKSBzZXRCb3VuZHM6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0K
IAotRmxvYXRQb2ludDNEIFBsYXRmb3JtQ0FMYXllcjo6cG9zaXRpb24oKSBjb25zdAorR3JhcGhp
Y3NQb2ludDNEIFBsYXRmb3JtQ0FMYXllcjo6cG9zaXRpb24oKSBjb25zdAogewogICAgIENHUG9p
bnQgcG9pbnQgPSBbbV9sYXllci5nZXQoKSBwb3NpdGlvbl07Ci0gICAgcmV0dXJuIEZsb2F0UG9p
bnQzRChwb2ludC54LCBwb2ludC55LCBbbV9sYXllci5nZXQoKSB6UG9zaXRpb25dKTsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NQb2ludDNEKHBvaW50LngsIHBvaW50LnksIFttX2xheWVyLmdldCgpIHpQ
b3NpdGlvbl0pOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbihj
b25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKHZhbHVl
LngoKSwgdmFsdWUueSgpKV07CkBAIC00MzAsMTcgKzQzMCwxNyBAQCB2b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0UG9zaXRpb24oY29uc3QgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwog
fQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0CitH
cmFwaGljc1BvaW50M0QgUGxhdGZvcm1DQUxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0CiB7CiAg
ICAgQ0dQb2ludCBwb2ludCA9IFttX2xheWVyLmdldCgpIGFuY2hvclBvaW50XTsKICAgICBmbG9h
dCB6ID0gMDsKICNpZiBIQVZFX01PREVSTl9RVUFSVFpDT1JFCiAgICAgeiA9IFttX2xheWVyLmdl
dCgpIGFuY2hvclBvaW50Wl07CiAjZW5kaWYKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50
LngsIHBvaW50LnksIHopOworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QocG9pbnQueCwgcG9p
bnQueSwgeik7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFuY2hvclBv
aW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludE1h
a2UodmFsdWUueCgpLCB2YWx1ZS55KCkpXTsKQEAgLTU4OCwxMiArNTg4LDEyIEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXRDb250ZW50cyhDRlR5cGUKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzUmVjdCgpIGNv
bnN0CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50c1JlY3QoKSBjb25zdAog
ewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBjb250ZW50c1JlY3RdOwogfQogCi12b2lkIFBs
YXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYg
dmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Q29udGVudHNSZWN0OnZhbHVlXTsKQEAgLTY5NCwxMiArNjk0LDEyIEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXROYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmZyYW1lKCkgY29uc3QK
K0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gW21fbGF5ZXIuZ2V0KCkgZnJhbWVdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
RnJhbWUoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRG
cmFtZShjb25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldEZyYW1lOnZhbHVlXTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6aW5pdGlh
bGl6ZSgpCiAgICAgLy8gU2Nyb2xsaW5nIHdpbGwgYWZmZWN0IG9ubHkgdGhlIHBvc2l0aW9uIG9m
IHRoZSBzY3JvbGwgbGF5ZXIgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGJvdW5kcy4KIAogICAgIG1f
cm9vdExheWVyLT5zZXROYW1lKCJDQUNGTGF5ZXJUcmVlSG9zdCByb290TGF5ZXIiKTsKLSAgICBt
X3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKyAgICBt
X3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKDAsIDAsIDApKTsKICAg
ICBtX3Jvb3RMYXllci0+c2V0R2VvbWV0cnlGbGlwcGVkKHRydWUpOwogCiAjaWZuZGVmIE5ERUJV
RwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1ZShjCiAgICAgQ0FDRkFuaW1hdGlvblNl
dEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2
b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1ZShjb25zdCBHcmFwaGljc1BvaW50
M0QmIHZhbHVlKQogewogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAg
IHJldHVybjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNl
dFRvVmFsdWUoY29uCiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRpb24uZ2V0
KCksIHYuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRvVmFsdWUo
Y29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0
VG9WYWx1ZShjb25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0OSw3ICs0NDksNyBAQCB2
b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zCiAgICAgQ0FDRkFuaW1hdGlv
blNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwogfQogCi12b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYg
dmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8
R3JhcGhpY3NQb2ludDNEPiYgdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBL
ZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5j
cHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsx
OTIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZW5zdXJlQW5pbWF0aW9uc1N1CiAgICAgICAg
IGNoaWxkcmVuW2ldLT5lbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCk7CiB9CiAKLXZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3Qp
Cit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEdyYXBoaWNzUmVj
dCogZGlydHlSZWN0KQogewogICAgIGludGVybih0aGlzKS0+c2V0TmVlZHNEaXNwbGF5KGRpcnR5
UmVjdCk7CiB9CkBAIC0zNTMsMzggKzM1MywzOCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0
T3BhcXVlKGJvb2wgdmFsCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotRmxvYXRSZWN0IFBs
YXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5
ZXI6OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldEJvdW5kcyhtX2xh
eWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhjb25zdCBG
bG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhjb25zdCBH
cmFwaGljc1JlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0Qm91bmRzKHZhbHVl
KTsKICAgICBzZXROZWVkc0xheW91dCgpOwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxh
eWVyOjpwb3NpdGlvbigpIGNvbnN0CitHcmFwaGljc1BvaW50M0QgUGxhdGZvcm1DQUxheWVyOjpw
b3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENBQ0ZMYXllckdldFBvc2l0
aW9uKG1fbGF5ZXIuZ2V0KCkpOwotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9p
bnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpKTsKKyAgICByZXR1cm4g
R3JhcGhpY3NQb2ludDNEKHBvaW50LngsIHBvaW50LnksIENBQ0ZMYXllckdldFpQb3NpdGlvbiht
X2xheWVyLmdldCgpKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0
aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0UG9z
aXRpb24obV9sYXllci5nZXQoKSwgQ0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpKTsK
ICAgICBDQUNGTGF5ZXJTZXRaUG9zaXRpb24obV9sYXllci5nZXQoKSwgdmFsdWUueigpKTsKICAg
ICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjph
bmNob3JQb2ludCgpIGNvbnN0CitHcmFwaGljc1BvaW50M0QgUGxhdGZvcm1DQUxheWVyOjphbmNo
b3JQb2ludCgpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENBQ0ZMYXllckdldEFuY2hv
clBvaW50KG1fbGF5ZXIuZ2V0KCkpOwogICAgIGZsb2F0IHogPSBDQUNGTGF5ZXJHZXRBbmNob3JQ
b2ludFoobV9sYXllci5nZXQoKSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwb2ludC54LCBw
b2ludC55LCB6KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDNEKHBvaW50LngsIHBvaW50Lnks
IHopOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxv
YXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludChj
b25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEFuY2hvclBv
aW50KG1fbGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgpKSk7CiAg
ICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnRaKG1fbGF5ZXIuZ2V0KCksIHZhbHVlLnooKSk7CkBA
IC00ODgsMTIgKzQ4OCwxMiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHMoQ0ZU
eXBlCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXll
cjo6Y29udGVudHNSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmNv
bnRlbnRzUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldENvbnRlbnRzUmVj
dChtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENvbnRlbnRz
UmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENv
bnRlbnRzUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNl
dENvbnRlbnRzUmVjdChtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHNDb21taXQo
KTsKQEAgLTU3OCwxMiArNTc4LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROYW1lKGNv
bnN0IFN0cmkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1GbG9hdFJlY3QgUGxhdGZvcm1D
QUxheWVyOjpmcmFtZSgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFt
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldEZyYW1lKG1fbGF5ZXIuZ2V0KCkp
OwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiB2
YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRGcmFtZShjb25zdCBHcmFwaGljc1JlY3Qm
IHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0RnJhbWUodmFsdWUpOwogICAgIHNldE5l
ZWRzTGF5b3V0KCk7CkBAIC02MzgsOSArNjM4LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRUcmFuc2Zv
cm0oY29uc3QgQ0FUcmFucwogCiBzdGF0aWMgdm9pZCBwcmludExheWVyKGNvbnN0IFBsYXRmb3Jt
Q0FMYXllciogbGF5ZXIsIGludCBpbmRlbnQpCiB7Ci0gICAgRmxvYXRQb2ludDNEIGxheWVyUG9z
aXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKLSAgICBGbG9hdFBvaW50M0QgbGF5ZXJBbmNob3JQ
b2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9
IGxheWVyLT5ib3VuZHMoKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGF5ZXJQb3NpdGlvbiA9IGxh
eWVyLT5wb3NpdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsYXllckFuY2hvclBvaW50ID0g
bGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyQm91bmRzID0gbGF5
ZXItPmJvdW5kcygpOwogICAgIHByaW50SW5kZW50KGluZGVudCk7CiAKICAgICBjaGFyKiBsYXll
clR5cGVOYW1lID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlz
cGxheQogICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxh
eShjYUxheWVyKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6aW50ZXJu
YWxTZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3QpCit2b2lkIFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheShjb25zdCBHcmFw
aGljc1JlY3QqIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoZGlydHlSZWN0KSB7CiAgICAgICAgIENH
UmVjdCByZWN0ID0gKmRpcnR5UmVjdDsKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjppbnRlcm5hCiAgICAgICAgIENBQ0ZMYXllclNldE5lZWRzRGlz
cGxheShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIDApOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJl
Y3QpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3BsYXkoY29u
c3QgR3JhcGhpY3NSZWN0KiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYgKG93bmVyKCktPmxheWVyVHlw
ZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2ViVGlsZWRMYXllcikgewogICAgICAg
ICAvLyBGSVhNRTogT25seSBzZXROZWVkc0Rpc3BsYXkgZm9yIHRpbGVzIHRoYXQgYXJlIGN1cnJl
bnRseSB2aXNpYmxlCkBAIC0xNzAsOCArMTcwLDggQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6c2V0TmVlZAogICAgIH0gZWxzZSBpZiAob3duZXIoKS0+bGF5ZXJUeXBlKCkgPT0g
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcikgewogICAgICAgICBpZiAob3duZXIo
KSAmJiBvd25lcigpLT5vd25lcigpKSB7CiAgICAgICAgICAgICBpZiAob3duZXIoKS0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKLSAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QgcmVwYWludENvdW50ZXJSZWN0ID0gbGF5ZXJCb3VuZHM7CisgICAgICAg
ICAgICAgICAgR3JhcGhpY3NSZWN0IGxheWVyQm91bmRzID0gb3duZXIoKS0+Ym91bmRzKCk7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxheWVyQm91
bmRzOwogCiAgICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11bSBvZiA0IGRpZ2l0
cyBhbmQgYSBmb250IHNpemUgb2YgMTguCiAgICAgICAgICAgICAgICAgcmVwYWludENvdW50ZXJS
ZWN0LnNldFdpZHRoKDgwKTsKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpzZXROZWVkCiAgICAgICAgICAgICAgICAgaW50ZXJuYWxTZXROZWVkc0Rp
c3BsYXkoJnJlcGFpbnRDb3VudGVyUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoZGlydHlSZWN0ICYmIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRz
T3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzVG9wRG93bikgewotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBmbGlwcGVkRGlydHlS
ZWN0ID0gKmRpcnR5UmVjdDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgZmxpcHBlZERp
cnR5UmVjdCA9ICpkaXJ0eVJlY3Q7CiAgICAgICAgICAgICAgICAgZmxpcHBlZERpcnR5UmVjdC5z
ZXRZKG93bmVyKCktPmJvdW5kcygpLmhlaWdodCgpIC0gKGZsaXBwZWREaXJ0eVJlY3QueSgpICsg
ZmxpcHBlZERpcnR5UmVjdC5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIGludGVybmFsU2V0
TmVlZHNEaXNwbGF5KCZmbGlwcGVkRGlydHlSZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0zMTQsNyArMzE0LDcgQEAgUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcgogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihzdGF0aWNf
Y2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoc3VibGF5ZXJzLCBpbmRleCkpKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsOjpzZXRCb3VuZHMoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChyZWN0LCBvd25lcigpLT5ib3VuZHMoKSkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsOjpzZXRCb3VuCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVy
bmFsOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpzZXRGcmFtZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAg
Q0dSZWN0IG9sZEZyYW1lID0gb3duZXIoKS0+ZnJhbWUoKTsKICAgICBpZiAoQ0dSZWN0RXF1YWxU
b1JlY3QocmVjdCwgb2xkRnJhbWUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0ICpDR0NvbnRleHRS
ZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3Jh
cGhpY3NSZWN0OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiA+IFBsYXRmb3JtQ0FMYXllckxpc3Q7CkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB+UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKTsKIAogICAgIHZv
aWQgZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLSAgICB2b2lk
IHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqKTsKKyAgICB2b2lkIHNldE5lZWRzRGlz
cGxheShjb25zdCBHcmFwaGljc1JlY3QqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogCiAgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3Qg
UGxhdGZvcm1DQUxheWVyTGlzdCYpOwpAQCAtNTgsMTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICBz
aXplX3Qgc3VibGF5ZXJDb3VudCgpIGNvbnN0OwogICAgIGludCBpbmRleE9mU3VibGF5ZXIoY29u
c3QgUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UpOwogCi0gICAgdm9pZCBzZXRCb3VuZHMoY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2b2lkIHNldEJvdW5kcyhjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lkIHNldEZyYW1l
KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgaW50ZXJuYWxTZXRO
ZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0Kik7CisgICAgdm9pZCBpbnRlcm5hbFNldE5lZWRz
RGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHN1Ymxh
eWVyQXRJbmRleChpbnQpIGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgdGlsZURpc3BsYXlDYWxs
YmFjayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJPd25QdHJDYWlyby5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTEx
OCw4ICsxMTgsOCBAQCBjYWlyb19vcGVyYXRvcl90IHRvQ2Fpcm9PcGVyYXRvcihDb21wb3NpCiAg
ICAgfQogfQogCi12b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNh
aXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjYWlyb19vcGVyYXRvcl90IG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBk
cmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19zdXJmYWNlX3QqIGlt
YWdlLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgY2Fpcm9fb3Bl
cmF0b3JfdCBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICAvLyBBdm9p
ZCBOYU4KICAgICBpZiAoIWlzZmluaXRlKHBoYXNlLngoKSkgfHwgIWlzZmluaXRlKHBoYXNlLnko
KSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0
aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOCArMzIsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFBvaW50
OworY2xhc3MgR3JhcGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNsYXNzIEludFNp
emU7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgUGF0aDsKQEAgLTQ0LDggKzQ0LDggQEAgdm9pZCBh
cHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdAogdm9pZCBzZXRQYXRoT25DYWlyb0Nv
bnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZyb20pOwogdm9pZCBhcHBlbmRXZWJDb3JlUGF0
aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpOwogY2Fp
cm9fb3BlcmF0b3JfdCB0b0NhaXJvT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApOwotdm9p
ZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19zdXJmYWNlX3Qq
IGltYWdlLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY2Fpcm9fb3BlcmF0
b3JfdCBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Cit2b2lkIGRyYXdQYXR0ZXJuVG9D
YWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IElu
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBjYWlyb19vcGVyYXRvcl90IG9wLCBj
b25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90Kik7CiB2b2lkIGNvcHlSZWN0
RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoY2Fpcm9fc3VyZmFjZV90KiBmcm9tLCBjYWlyb19zdXJm
YWNlX3QqIHRvLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBnZXRTY3JhdGNo
QnVmZmVyCiAgICAgcmV0dXJuIGdTY3JhdGNoQnVmZmVyLmdldCgpOwogfQogCi1QbGF0Zm9ybUNv
bnRleHQgQ29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQorUGxhdGZvcm1Db250ZXh0IENvbnRl
eHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSkKIHsKICAgICBhZGp1c3RCbHVyRGlzdGFuY2UoY29u
dGV4dCk7CiAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0
U2hhZG93V2l0aG91CiAgICAgZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZSkKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NQb2ludCBnZXRQaGFzZShjb25z
dCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZSkKIHsKLSAgICBG
bG9hdFBvaW50IHBoYXNlID0gZGVzdC5sb2NhdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQgcGhh
c2UgPSBkZXN0LmxvY2F0aW9uKCk7CiAgICAgcGhhc2UubW92ZSgtdGlsZS54KCksIC10aWxlLnko
KSk7CiAKICAgICByZXR1cm4gcGhhc2U7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBDb250ZXh0
U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIEludFNpemUgc2hhZG93QnVmZmVyU2l6
ZSA9IEludFNpemUocmVjdC53aWR0aCgpICsgcmFkaXVzVHdpY2UsIHJlY3QuaGVpZ2h0KCkgKyBy
YWRpdXNUd2ljZSk7CiAKICAgICAvLyBEZXRlcm1pbmUgZGltZW5zaW9ucyBvZiBzaGFkb3cgcmVj
dC4KLSAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdCA9IEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCks
IHNoYWRvd0J1ZmZlclNpemUpOworICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0ID0gR3JhcGhp
Y3NSZWN0KHJlY3QubG9jYXRpb24oKSwgc2hhZG93QnVmZmVyU2l6ZSk7CiAgICAgc2hhZG93UmVj
dC5tb3ZlKC0gbV9ibHVyRGlzdGFuY2UsIC0gbV9ibHVyRGlzdGFuY2UpOwogCiAgICAgLy8gU2l6
ZSBvZiB0aGUgdGlsaW5nIHNpZGUuCkBAIC0yODIsMTcgKzI4MiwxNyBAQCB2b2lkIENvbnRleHRT
aGFkb3c6OmRyYXdSZWN0U2hhZG93KEdyYXBoCiAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHJhZGl1
c1R3aWNlKTsKIAogICAgIC8vIERyYXcgdG9wIHNpZGUuCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0
ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCBzaWRl
VGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gdGlsZVJl
Y3Q7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KHJhZGl1c1R3aWNl
ICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7
CisgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CiAgICAgZGVzdFJlY3QubW92
ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOwogICAgIGRlc3RSZWN0LnNldFdpZHRo
KHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRSYWRpdXMud2lkdGgoKSAtIHRvcFJpZ2h0UmFk
aXVzLndpZHRoKCkgLSBtX2JsdXJEaXN0YW5jZSAqIDQpOwotICAgIEZsb2F0UG9pbnQgcGhhc2Ug
PSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIEdyYXBoaWNzUG9pbnQgcGhhc2Ug
PSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOwogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0
ZXJuVHJhbnNmb3JtOwogICAgIHBhdHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7CiAgICAg
ZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjciwgbV9sYXllckltYWdlLCBzaGFkb3dUZW1wbGF0
ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BFUkFUT1Jf
T1ZFUiwgZGVzdFJlY3QpOwogCiAgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCi0gICAgdGls
ZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCks
IHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRo
LCByYWRpdXNUd2ljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QocmFkaXVzVHdpY2Ug
KyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAt
IHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CiAgICAgZGVzdFJlY3Qg
PSB0aWxlUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0
LnkoKSArIHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RlbXBsYXRlU2l6ZS5o
ZWlnaHQoKSk7CiAgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgpIC0gYm90
dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAtIG1fYmx1
ckRpc3RhbmNlICogNCk7CkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBDb250ZXh0U2hhZG93Ojpk
cmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY3IsIG1f
bGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsKIAogICAgIC8vIERyYXcg
dGhlIHJpZ2h0IHNpZGUuCi0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc2hhZG93VGVtcGxhdGVT
aXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy5o
ZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHNpZGVUaWxlV2lkdGgpOworICAgIHRpbGVSZWN0ID0gR3Jh
cGhpY3NSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UsIHJhZGl1
c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdp
ZHRoKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93
UmVjdC54KCkgKyByYWRpdXNUd2ljZSArIHJlY3Qud2lkdGgoKSAtIHNoYWRvd1RlbXBsYXRlU2l6
ZS53aWR0aCgpLCBzaGFkb3dSZWN0LnkoKSk7CiAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRv
d1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAtIGJvdHRvbVJpZ2h0UmFk
aXVzLmhlaWdodCgpIC0gbV9ibHVyRGlzdGFuY2UgKiA0KTsKQEAgLTMwOCwyMiArMzA4LDIyIEBA
IHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGgKICAgICBkcmF3UGF0dGVy
blRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0
UmVjdCk7CiAKICAgICAvLyBEcmF3IHRoZSBsZWZ0IHNpZGUuCi0gICAgdGlsZVJlY3QgPSBGbG9h
dFJlY3QoMCwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2lj
ZSwgc2lkZVRpbGVXaWR0aCk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgcmFkaXVz
VHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgc2lkZVRpbGVXaWR0
aCk7CiAgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1Jl
Y3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CiAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNoYWRvd1Jl
Y3QuaGVpZ2h0KCkgLSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJhZGl1cy5o
ZWlnaHQoKSAtIG1fYmx1ckRpc3RhbmNlICogNCk7Ci0gICAgcGhhc2UgPSBGbG9hdFBvaW50KGRl
c3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJlY3QueSgpIC0gdGlsZVJlY3QueSgpKTsK
KyAgICBwaGFzZSA9IEdyYXBoaWNzUG9pbnQoZGVzdFJlY3QueCgpIC0gdGlsZVJlY3QueCgpLCBk
ZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOwogICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRl
eHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsKIAogICAg
IC8vIERyYXcgdGhlIHRvcCBsZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgw
LCAwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyB0
b3BMZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAw
LCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyB0b3BM
ZWZ0UmFkaXVzLmhlaWdodCgpKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RS
ZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKICAgICBwaGFzZSA9IGdl
dFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4
dChjciwgbV9sYXllckltYWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJlY3QpOwogCiAgICAg
Ly8gRHJhdyB0aGUgdG9wIHJpZ2h0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChz
aGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRSYWRpdXMu
d2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpLAorICAgIHRp
bGVSZWN0ID0gR3JhcGhpY3NSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVz
VHdpY2UgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCAwLCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0
UmFkaXVzLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzVHdpY2UgKyB0
b3BSaWdodFJhZGl1cy5oZWlnaHQoKSk7CiAgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKICAgICBk
ZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gc2hhZG93VGVtcGxh
dGVTaXplLndpZHRoKCkgKyByYWRpdXNUd2ljZSwgc2hhZG93UmVjdC55KCkpOwpAQCAtMzMxLDcg
KzMzMSw3IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGgKICAgICBk
cmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRl
U2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9P
VkVSLCBkZXN0UmVjdCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gcmlnaHQgY29ybmVyLgot
ICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFk
aXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLAorICAgIHRpbGVSZWN0ID0gR3Jh
cGhpY3NSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Rl
bXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVp
Z2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzVHdpY2UgKyBib3R0b21SaWdo
dFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgp
KTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgQ29u
dGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGgKICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9D
b250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVjdCk7CiAK
ICAgICAvLyBEcmF3IHRoZSBib3R0b20gbGVmdCBjb3JuZXIuCi0gICAgdGlsZVJlY3QgPSBGbG9h
dFJlY3QoMCwgc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0
b21MZWZ0UmFkaXVzLmhlaWdodCgpLAorICAgIHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIHNo
YWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tTGVmdFJhZGl1
cy5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNUd2ljZSArIGJvdHRv
bUxlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLmhlaWdo
dCgpKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93
UmVjdC54KCksIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RlbXBsYXRl
U2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
RmxvYXRSZWN0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IGNhaXJvX3JlY3Rh
bmdsZV90JiByKQotICAgIDogbV9sb2NhdGlvbihyLngsIHIueSkKLSAgICAsIG1fc2l6ZShyLndp
ZHRoLCByLmhlaWdodCkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBjYWlyb19yZWN0YW5n
bGVfdCgpIGNvbnN0Ci17Ci0gICAgY2Fpcm9fcmVjdGFuZ2xlX3QgciA9IHsgeCgpLCB5KCksIHdp
ZHRoKCksIGhlaWdodCgpIH07Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udENhaXJvLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw3ICs3NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCoKICAg
ICAgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0LCAmb3JpZ2luYWxUcmFuc2Zvcm0pOwogfQog
Ci1zdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51bUdseXBocykKK3N0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQogewogICAgIENvbnRleHRTaGFkb3cq
IHNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC0+Y29udGV4dFNoYWRvdygpOwogICAgIEFTU0VSVChz
aGFkb3cpOwpAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdy
YXBoaWNzQ29uCiAKICAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwogICAgIGNhaXJv
X3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoZm9udC0+cGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9u
dCgpLCBnbHlwaHMsIG51bUdseXBocywgJmV4dGVudHMpOwotICAgIEZsb2F0UmVjdCBmb250RXh0
ZW50c1JlY3QocG9pbnQueCgpLCBwb2ludC55KCkgLSBleHRlbnRzLmhlaWdodCwgZXh0ZW50cy53
aWR0aCwgZXh0ZW50cy5oZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCBmb250RXh0ZW50c1JlY3Qo
cG9pbnQueCgpLCBwb2ludC55KCkgLSBleHRlbnRzLmhlaWdodCwgZXh0ZW50cy53aWR0aCwgZXh0
ZW50cy5oZWlnaHQpOwogICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250RXh0ZW50c1JlY3QpOwogICAgIGlmIChz
aGFkb3dDb250ZXh0KSB7CiAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93Q29udGV4
dCwgZm9udCwgZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyB2
b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb24KIH0KIAogdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cisg
ICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGlmICghZm9udC0+cGxhdGZvcm1EYXRhKCku
c2l6ZSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEdyYWRpZW50
OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUCiAgICAgfQogfQogCi12b2lkIEdyYWRpZW50Ojpm
aWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2lu
Y2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIk93blB0ckNhaXJvLmgi
CkBAIC03MSw3ICs3MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIC8vIEEgaGVscGVyIHdoaWNoIHF1aWNrbHkgZmlsbHMgYSByZWN0YW5nbGUgd2l0aCBh
IHNpbXBsZSBjb2xvciBmaWxsLgotc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0V2l0aENvbG9y
KGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjYWlyb190KiBjciwgY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKCFjb2xv
ci5hbHBoYSgpKQogICAgICAgICByZXR1cm47CkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjYWkKICAgICBjYWlyb19maWxsKGNyKTsKIH0KIAot
c3RhdGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBz
aXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCitzdGF0aWMgdm9pZCBh
ZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIHNpemVfdCBudW1Qb2lu
dHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cykKIHsKICAgICBjYWlyb19tb3ZlX3RvKGNv
bnRleHQsIHBvaW50c1swXS54KCksIHBvaW50c1swXS55KCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgbnVtUG9pbnRzOyBpKyspCkBAIC0xMDYsMTggKzEwNiwxOCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpCiAgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgT3duUHRyPGNhaXJvX3Bh
dGhfdD4gcGF0aCA9IGFkb3B0UHRyKGNhaXJvX2NvcHlfcGF0aChjYWlyb0NvbnRleHQpKTsKIAot
ICAgIEZsb2F0UmVjdCBzb2xpZEZpZ3VyZUV4dGVudHM7CisgICAgR3JhcGhpY3NSZWN0IHNvbGlk
RmlndXJlRXh0ZW50czsKICAgICBkb3VibGUgeDAgPSAwOwogICAgIGRvdWJsZSB4MSA9IDA7CiAg
ICAgZG91YmxlIHkwID0gMDsKICAgICBkb3VibGUgeTEgPSAwOwogICAgIGlmIChkcmF3aW5nU3R5
bGUgJiBTdHJva2UpIHsKICAgICAgICAgY2Fpcm9fc3Ryb2tlX2V4dGVudHMoY2Fpcm9Db250ZXh0
LCAmeDAsICZ5MCwgJngxLCAmeTEpOwotICAgICAgICBzb2xpZEZpZ3VyZUV4dGVudHMgPSBGbG9h
dFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKKyAgICAgICAgc29saWRGaWd1cmVFeHRl
bnRzID0gR3JhcGhpY3NSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CiAgICAgfQogICAg
IGlmIChkcmF3aW5nU3R5bGUgJiBGaWxsKSB7CiAgICAgICAgIGNhaXJvX2ZpbGxfZXh0ZW50cyhj
YWlyb0NvbnRleHQsICZ4MCwgJnkwLCAmeDEsICZ5MSk7Ci0gICAgICAgIEZsb2F0UmVjdCBmaWxs
RXh0ZW50cyh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOworICAgICAgICBHcmFwaGljc1JlY3Qg
ZmlsbEV4dGVudHMoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKICAgICAgICAgc29saWRGaWd1
cmVFeHRlbnRzLnVuaXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKQEAgLTIzMyw3ICsyMzMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50CiAKICAgICBpZiAoc3Ry
b2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9y
KGNyLCBzdHJva2VDb2xvcigpKTsKLSAgICAgICAgRmxvYXRSZWN0IHIocmVjdCk7CisgICAgICAg
IEdyYXBoaWNzUmVjdCByKHJlY3QpOwogICAgICAgICByLmluZmxhdGUoLS41Zik7CiAgICAgICAg
IGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwogICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgMS4wKTsKQEAgLTI3MCw3ICsyNzAs
NyBAQCBzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZVN0cm9rZVBhdHRlcm5PZmZzCiAgICAgcmV0dXJu
IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdMaW5lT25DYWlyb0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorc3RhdGljIHZvaWQgZHJhd0xpbmVP
bkNhaXJvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY2Fpcm9fdCog
Y29udGV4dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludDIpCiB7CiAgICAgU3Ryb2tlU3R5bGUgc3R5bGUgPSBncmFwaGljc0NvbnRleHQtPnN0
cm9rZVN0eWxlKCk7CiAgICAgaWYgKHN0eWxlID09IE5vU3Ryb2tlKQpAQCAtMjg4LDE2ICsyODgs
MTYgQEAgc3RhdGljIHZvaWQgZHJhd0xpbmVPbkNhaXJvQ29udGV4dChHcmFwaAogICAgICAgICBw
YXR0ZXJuV2lkdGggPSAzICogc3Ryb2tlVGhpY2tuZXNzOwogCiAgICAgYm9vbCBpc1ZlcnRpY2Fs
TGluZSA9IHBvaW50MS54KCkgPT0gcG9pbnQyLngoKTsKLSAgICBGbG9hdFBvaW50IHBvaW50MU9u
UGl4ZWxCb3VuZGFyaWVzID0gcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyT25QaXhlbEJv
dW5kYXJpZXMgPSBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDFPblBpeGVsQm91bmRh
cmllcyA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50Mk9uUGl4ZWxCb3VuZGFyaWVz
ID0gcG9pbnQyOwogICAgIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFy
aWVzKHBvaW50MU9uUGl4ZWxCb3VuZGFyaWVzLCBwb2ludDJPblBpeGVsQm91bmRhcmllcywgc3Ry
b2tlVGhpY2tuZXNzLCBzdHlsZSk7CiAKICAgICBjYWlyb19zZXRfYW50aWFsaWFzKGNvbnRleHQs
IENBSVJPX0FOVElBTElBU19OT05FKTsKICAgICBpZiAocGF0dGVybldpZHRoKSB7CiAgICAgICAg
IC8vIERvIGEgcmVjdCBmaWxsIG9mIG91ciBlbmRwb2ludHMuICBUaGlzIGVuc3VyZXMgd2UgYWx3
YXlzIGhhdmUgdGhlCiAgICAgICAgIC8vIGFwcGVhcmFuY2Ugb2YgYmVpbmcgYSBib3JkZXIuICBX
ZSB0aGVuIGRyYXcgdGhlIGFjdHVhbCBkb3R0ZWQvZGFzaGVkIGxpbmUuCi0gICAgICAgIEZsb2F0
UmVjdCBmaXJzdFJlY3QocG9pbnQxT25QaXhlbEJvdW5kYXJpZXMsIEZsb2F0U2l6ZShzdHJva2VU
aGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcykpOwotICAgICAgICBGbG9hdFJlY3Qgc2Vjb25kUmVj
dChwb2ludDJPblBpeGVsQm91bmRhcmllcywgRmxvYXRTaXplKHN0cm9rZVRoaWNrbmVzcywgc3Ry
b2tlVGhpY2tuZXNzKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBmaXJzdFJlY3QocG9pbnQxT25Q
aXhlbEJvdW5kYXJpZXMsIEdyYXBoaWNzU2l6ZShzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNr
bmVzcykpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2Vjb25kUmVjdChwb2ludDJPblBpeGVsQm91
bmRhcmllcywgR3JhcGhpY3NTaXplKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKSk7
CiAgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewogICAgICAgICAgICAgZmlyc3RSZWN0Lm1v
dmUoLXN0cm9rZVRoaWNrbmVzcyAvIDIsIC1zdHJva2VUaGlja25lc3MpOwogICAgICAgICAgICAg
c2Vjb25kUmVjdC5tb3ZlKC1zdHJva2VUaGlja25lc3MgLyAyLCAwKTsKQEAgLTQxOCw3ICs0MTgs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAgICAgY2Fpcm9f
cmVzdG9yZShjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdv
bihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFu
dGlhbGlhcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3Qg
bnBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlh
cykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00
NDgsNyArNDQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAog
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENv
bnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBi
b29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29u
KHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBhbnRp
YWxpYXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29u
c3QgUAogICAgIHNoYWRvd0FuZFN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUwMSw3ICs1
MDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgc2hh
ZG93QW5kRmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC01MTIsNyArNTEyLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIGZpbGxSZWN0V2l0
aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MTksNyArNjE5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkgewogICAgICAgICBpZiAoaSA+IDApCiAgICAgICAg
ICAgICBwYXRoLmNsZWFyKCk7Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdHNbaV0s
IEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOworICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
KHJlY3RzW2ldLCBHcmFwaGljc1NpemUocmFkaXVzLCByYWRpdXMpKTsKICAgICAgICAgYXBwZW5k
V2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgfQogI2VuZGlmCkBAIC02
NDMsNyArNjQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwog
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJp
bnRpbmcpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjUyLDggKzY1Miw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICBjYWlyb19zYXZl
KGNhaXJvQ29udGV4dCk7CiAKICAgICAvLyBUaGlzIGJ1bXBpbmcgb2YgPDEgc3Ryb2tlIHRoaWNr
bmVzc2VzIG1hdGNoZXMgdGhlIG9uZSBpbiBkcmF3TGluZU9uQ2Fpcm9Db250ZXh0LgotICAgIEZs
b2F0UG9pbnQgZW5kUG9pbnQob3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCkpOwotICAgIEZsb2F0
UmVjdCBsaW5lRXh0ZW50cyhvcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgc3Ryb2tlVGhpY2tuZXNz
KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvaW50KG9yaWdpbiArIEludFNpemUod2lkdGgs
IDApKTsKKyAgICBHcmFwaGljc1JlY3QgbGluZUV4dGVudHMob3JpZ2luLCBHcmFwaGljc1NpemUo
d2lkdGgsIHN0cm9rZVRoaWNrbmVzcygpKSk7CiAKICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cg
PSBjb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7CkBAIC02NzEsNyArNjcxLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogI2luY2x1ZGUgIkRy
YXdFcnJvclVuZGVybGluZS5oIgogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRo
LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCB3
aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcwMSw5ICs3MDEsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9
CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQorR3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmIGZyZWN0LCBSb3Vu
ZGluZ01vZGUpCiB7Ci0gICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBHcmFwaGljc1JlY3QgcmVz
dWx0OwogICAgIGRvdWJsZSB4ID0gZnJlY3QueCgpOwogICAgIGRvdWJsZSB5ID0gZnJlY3QueSgp
OwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CkBAIC04MjksNyAr
ODI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIGNs
aXAocmVjdCk7CiAKICAgICBQYXRoIHA7Ci0gICAgRmxvYXRSZWN0IHIocmVjdCk7CisgICAgR3Jh
cGhpY3NSZWN0IHIocmVjdCk7CiAgICAgLy8gQWRkIG91dGVyIGVsbGlwc2UKICAgICBwLmFkZEVs
bGlwc2Uocik7CiAgICAgLy8gQWRkIGlubmVyIGVsbGlwc2UKQEAgLTg0MywxNiArODQzLDE2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBjYWlyb19zZXRf
ZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KEZsb2F0U2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQgYmx1ciwgQ29s
b3IgY29uc3QmIGNvbG9yLCBDb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hhZG93KEdyYXBoaWNzU2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQgYmx1ciwgQ29sb3Ig
Y29uc3QmIGNvbG9yLCBDb2xvclNwYWNlKQogewogICAgIC8vIENhaXJvIGRvZXNuJ3Qgc3VwcG9y
dCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyog
ZnVuY3Rpb25zCiAgICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhl
aWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3Is
IGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CisgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3Is
IGJsdXIsIEdyYXBoaWNzU2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1
ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBtX2Rh
dGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEdyYXBoaWNzU2l6ZShzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKIAogICAgIG1fZGF0YS0+c2hhZG93LnNldFNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwogfQpA
QCAtODkxLDcgKzg5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lM
YXkKICAgICBtX2RhdGEtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTA1LDcgKzkwNSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICBjYWlyb19yZXN0
b3JlKGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYQogICAgIG1fZGF0YS0+cm90
YXRlKHJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdyYXBoaWNz
U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMDU1LDkgKzEwNTUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBJbnRSCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2ZWRGaWxsUnVsZSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShjb25zdCBGbG9hdFJlY3QmIGRl
c3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZSkKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NQb2ludCBn
ZXRQaGFzZShjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGls
ZSkKIHsKLSAgICBGbG9hdFBvaW50IHBoYXNlID0gZGVzdC5sb2NhdGlvbigpOworICAgIEdyYXBo
aWNzUG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CiAgICAgcGhhc2UubW92ZSgtdGlsZS54
KCksIC10aWxlLnkoKSk7CiAKICAgICByZXR1cm4gcGhhc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVD
YWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSArNzEsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzYXZlKCk7CiAgICAgdm9pZCByZXN0b3JlKCk7CiAgICAgdm9p
ZCBmbHVzaCgpOwotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNs
aXAoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKLSAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2NhbGUoY29uc3QgR3Jh
cGhpY3NTaXplJik7CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpOwogICAgIHZvaWQgdHJhbnNsYXRl
KGZsb2F0LCBmbG9hdCk7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CkBAIC04Niw5ICs4Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmUoKSB7fQogICAgIHZv
aWQgcmVzdG9yZSgpIHt9CiAgICAgdm9pZCBmbHVzaCgpIHt9Ci0gICAgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpIHt9CisgICAgdm9pZCBjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYpIHt9CiAg
ICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKSB7fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikge30KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIHt9CiAgICAgdm9p
ZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQog
ICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc1JlY3RDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NSZWN0Q2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwOjkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NSZWN0Q2Fpcm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IGNhaXJvX3JlY3RhbmdsZV90JiByKQorICAgIDog
bV9sb2NhdGlvbihyLngsIHIueSkKKyAgICAsIG1fc2l6ZShyLndpZHRoLCByLmhlaWdodCkKK3sK
K30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNvbnN0Cit7Cisg
ICAgY2Fpcm9fcmVjdGFuZ2xlX3QgciA9IHsgeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpIH07
CisgICAgcmV0dXJuIHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzUmVjdENhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc1JlY3RDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NSZWN0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxOSArMjQsMTkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAKICNpbmNsdWRlIDxj
YWlyby5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNv
bnN0IGNhaXJvX3JlY3RhbmdsZV90JiByKQorR3JhcGhpY3NSZWN0OjpHcmFwaGljc1JlY3QoY29u
c3QgY2Fpcm9fcmVjdGFuZ2xlX3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKHIueCwgci55KQogICAg
ICwgbV9zaXplKHIud2lkdGgsIHIuaGVpZ2h0KQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9y
IGNhaXJvX3JlY3RhbmdsZV90KCkgY29uc3QKK0dyYXBoaWNzUmVjdDo6b3BlcmF0b3IgY2Fpcm9f
cmVjdGFuZ2xlX3QoKSBjb25zdAogewogICAgIGNhaXJvX3JlY3RhbmdsZV90IHIgPSB7IHgoKSwg
eSgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9OwogICAgIHJldHVybiByOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDEyICs5NywxMiBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlCiAg
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0
YS5tX3N1cmZhY2UpLmxlYWtSZWYoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0KSBjb25zdAor
dm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgbWFza1JlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnB1c2hJbWFnZU1hc2sobV9kYXRhLm1fc3VyZmFjZSwgbWFza1JlY3QpOwogfQogCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewog
ICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24g
ZGVzdHJ1Y3Rpb24KQEAgLTExMCw4ICsxMTAsOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogCiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBzdHls
ZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBkZXN0UmVjdCkKIHsKICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBh
c3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9kYXRhLm1fc3Vy
ZmFjZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKQEAgLTkzLDEwICs5MywxMCBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoY2Fp
cm9fc3VyZmFjZV90CiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9CiAKLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBz
cmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsK
LSAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwotICAgIEZsb2F0UmVjdCBkc3RSZWN0KGRzdCk7
CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3Qoc3JjKTsKKyAgICBHcmFwaGljc1JlY3QgZHN0UmVj
dChkc3QpOwogCiAgICAgaWYgKGRzdFJlY3Qud2lkdGgoKSA9PSAwLjBmIHx8IGRzdFJlY3QuaGVp
Z2h0KCkgPT0gMC4wZiB8fAogICAgICAgICBzcmNSZWN0LndpZHRoKCkgPT0gMC4wZiB8fCBzcmNS
ZWN0LmhlaWdodCgpID09IDAuMGYpCkBAIC0xMjgsOCArMTI4LDggQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERy
YXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAg
IGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwog
ICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1h
Z2UgeWV0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
aENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJPd25QdHJDYWlyby5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCkBAIC04NSwzNCArODUsMzQgQEAgYm9v
bCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0eSgpOwog
fQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhpY3NQb2lu
dCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICAvLyBGSVhNRTogSXMgdGhpcyB0
aGUgY29ycmVjdCB3YXk/CiAgICAgZG91YmxlIHg7CiAgICAgZG91YmxlIHk7CiAgICAgY2Fpcm9f
Z2V0X2N1cnJlbnRfcG9pbnQocGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSwgJngsICZ5KTsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludCh4LCB5
KTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBwKQordm9pZCBQ
YXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBwKQogewogICAgIGNhaXJvX3QqIGNy
ID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBjYWlyb190cmFuc2xhdGUoY3IsIC1w
LndpZHRoKCksIC1wLmhlaWdodCgpKTsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7
CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwogICAgIGNhaXJv
X21vdmVfdG8oY3IsIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiBwKQogewogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsK
ICAgICBjYWlyb19saW5lX3RvKGNyLCBwLngoKSwgcC55KCkpOwogfQogCi12b2lkIFBhdGg6OmFk
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBQYXRo
OjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogLyoKICAqIGluc3BpcmVkIGJ5IGxpYnN2
Zy1jYWlybwogICovCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6OmFkZFF1
YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQpCiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29u
dGV4dCgpOwogICAgIGRvdWJsZSB4LCB5OwpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUGF0aDo6
YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2kKICAgICAgICAgICAgICAgICAgICB4MiwgeTIp
OwogfQogCi12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29u
dHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQ
b2ludCYgY29udHJvbFBvaW50MykKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBH
cmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9s
UG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQzKQogewogICAgIGNhaXJv
X3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBjYWlyb19jdXJ2ZV90byhj
ciwgY29udHJvbFBvaW50MS54KCksIGNvbnRyb2xQb2ludDEueSgpLApAQCAtMTQ0LDcgKzE0NCw3
IEBAIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFAKICAgICAgICAgICAg
ICAgICAgICBjb250cm9sUG9pbnQzLngoKSwgY29udHJvbFBvaW50My55KCkpOwogfQogCi12b2lk
IFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzdGFydEFu
Z2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQordm9pZCBQYXRoOjphZGRB
cmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc3RhcnRBbmdsZSwgZmxv
YXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICAvLyBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0OQogICAgIC8vIGNhaXJvX2FyYygpIGZ1bmN0
aW9ucyBoYW5nIG9yIGNyYXNoIHdoZW4gcGFzc2VkIGluZiBhcyByYWRpdXMgb3Igc3RhcnQvZW5k
IGFuZ2xlCkBAIC0xNzAsMTIgKzE3MCwxMiBAQCB2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9h
dFBvaW50JiBwLCBmCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGFyZWFPZlRyaWFu
Z2xlRm9ybWVkQnlQb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMykKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXJlYU9mVHJp
YW5nbGVGb3JtZWRCeVBvaW50cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzKQogewogICAgIHJldHVybiBwMS54
KCkgKiAocDIueSgpIC0gcDMueSgpKSArIHAyLngoKSAqIChwMy55KCkgLSBwMS55KCkpICsgcDMu
eCgpICogKHAxLnkoKSAtIHAyLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3Qg
RmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit2b2lk
IFBhdGg6OmFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwMiwgZmxvYXQgcmFkaXVzKQogewogICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0
UG9pbnQmIHAxCiAKICAgICBkb3VibGUgeDAsIHkwOwogICAgIGNhaXJvX2dldF9jdXJyZW50X3Bv
aW50KGNyLCAmeDAsICZ5MCk7Ci0gICAgRmxvYXRQb2ludCBwMCh4MCwgeTApOworICAgIEdyYXBo
aWNzUG9pbnQgcDAoeDAsIHkwKTsKIAogICAgIC8vIERyYXcgb25seSBhIHN0cmFpZ2h0IGxpbmUg
dG8gcDEgaWYgYW55IG9mIHRoZSBwb2ludHMgYXJlIGVxdWFsIG9yIHRoZSByYWRpdXMgaXMgemVy
bwogICAgIC8vIG9yIHRoZSBwb2ludHMgYXJlIGNvbGxpbmVhciAodHJpYW5nbGUgdGhhdCB0aGUg
cG9pbnRzIGZvcm0gaGFzIGFyZWEgb2YgemVybyB2YWx1ZSkuCkBAIC0xOTQsOCArMTk0LDggQEAg
dm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBwMXAwKChwMC54KCkgLSBwMS54KCkpLChwMC55KCkg
LSBwMS55KCkpKTsKLSAgICBGbG9hdFBvaW50IHAxcDIoKHAyLngoKSAtIHAxLngoKSksKHAyLnko
KSAtIHAxLnkoKSkpOworICAgIEdyYXBoaWNzUG9pbnQgcDFwMCgocDAueCgpIC0gcDEueCgpKSwo
cDAueSgpIC0gcDEueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwMXAyKChwMi54KCkgLSBwMS54
KCkpLChwMi55KCkgLSBwMS55KCkpKTsKICAgICBmbG9hdCBwMXAwX2xlbmd0aCA9IHNxcnRmKHAx
cDAueCgpICogcDFwMC54KCkgKyBwMXAwLnkoKSAqIHAxcDAueSgpKTsKICAgICBmbG9hdCBwMXAy
X2xlbmd0aCA9IHNxcnRmKHAxcDIueCgpICogcDFwMi54KCkgKyBwMXAyLnkoKSAqIHAxcDIueSgp
KTsKIApAQCAtMjA5LDI4ICsyMDksMjggQEAgdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9h
dFBvaW50JiBwMQogICAgICAgICAvLyBhZGQgaW5maW5pdGUgZmFyIGF3YXkgcG9pbnQKICAgICAg
ICAgdW5zaWduZWQgaW50IG1heF9sZW5ndGggPSA2NTUzNTsKICAgICAgICAgZG91YmxlIGZhY3Rv
cl9tYXggPSBtYXhfbGVuZ3RoIC8gcDFwMF9sZW5ndGg7Ci0gICAgICAgIEZsb2F0UG9pbnQgZXAo
KHAwLngoKSArIGZhY3Rvcl9tYXggKiBwMXAwLngoKSksIChwMC55KCkgKyBmYWN0b3JfbWF4ICog
cDFwMC55KCkpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBlcCgocDAueCgpICsgZmFjdG9yX21h
eCAqIHAxcDAueCgpKSwgKHAwLnkoKSArIGZhY3Rvcl9tYXggKiBwMXAwLnkoKSkpOwogICAgICAg
ICBjYWlyb19saW5lX3RvKGNyLCBlcC54KCksIGVwLnkoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBmbG9hdCB0YW5nZW50ID0gcmFkaXVzIC8gdGFuKGFjb3MoY29zX3BoaSkgLyAy
KTsKICAgICBmbG9hdCBmYWN0b3JfcDFwMCA9IHRhbmdlbnQgLyBwMXAwX2xlbmd0aDsKLSAgICBG
bG9hdFBvaW50IHRfcDFwMCgocDEueCgpICsgZmFjdG9yX3AxcDAgKiBwMXAwLngoKSksIChwMS55
KCkgKyBmYWN0b3JfcDFwMCAqIHAxcDAueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCB0X3AxcDAo
KHAxLngoKSArIGZhY3Rvcl9wMXAwICogcDFwMC54KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDAg
KiBwMXAwLnkoKSkpOwogCi0gICAgRmxvYXRQb2ludCBvcnRoX3AxcDAocDFwMC55KCksIC1wMXAw
LngoKSk7CisgICAgR3JhcGhpY3NQb2ludCBvcnRoX3AxcDAocDFwMC55KCksIC1wMXAwLngoKSk7
CiAgICAgZmxvYXQgb3J0aF9wMXAwX2xlbmd0aCA9IHNxcnQob3J0aF9wMXAwLngoKSAqIG9ydGhf
cDFwMC54KCkgKyBvcnRoX3AxcDAueSgpICogb3J0aF9wMXAwLnkoKSk7CiAgICAgZmxvYXQgZmFj
dG9yX3JhID0gcmFkaXVzIC8gb3J0aF9wMXAwX2xlbmd0aDsKIAogICAgIC8vIGFuZ2xlIGJldHdl
ZW4gb3J0aF9wMXAwIGFuZCBwMXAyIHRvIGdldCB0aGUgcmlnaHQgdmVjdG9yIG9ydGhvZ3JhcGhp
YyB0byBwMXAwCiAgICAgZG91YmxlIGNvc19hbHBoYSA9IChvcnRoX3AxcDAueCgpICogcDFwMi54
KCkgKyBvcnRoX3AxcDAueSgpICogcDFwMi55KCkpIC8gKG9ydGhfcDFwMF9sZW5ndGggKiBwMXAy
X2xlbmd0aCk7CiAgICAgaWYgKGNvc19hbHBoYSA8IDAuZikKLSAgICAgICAgb3J0aF9wMXAwID0g
RmxvYXRQb2ludCgtb3J0aF9wMXAwLngoKSwgLW9ydGhfcDFwMC55KCkpOworICAgICAgICBvcnRo
X3AxcDAgPSBHcmFwaGljc1BvaW50KC1vcnRoX3AxcDAueCgpLCAtb3J0aF9wMXAwLnkoKSk7CiAK
LSAgICBGbG9hdFBvaW50IHAoKHRfcDFwMC54KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueCgp
KSwgKHRfcDFwMC55KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueSgpKSk7CisgICAgR3JhcGhp
Y3NQb2ludCBwKCh0X3AxcDAueCgpICsgZmFjdG9yX3JhICogb3J0aF9wMXAwLngoKSksICh0X3Ax
cDAueSgpICsgZmFjdG9yX3JhICogb3J0aF9wMXAwLnkoKSkpOwogCiAgICAgLy8gY2FsY3VsYXRl
IGFuZ2xlcyBmb3IgYWRkQXJjCi0gICAgb3J0aF9wMXAwID0gRmxvYXRQb2ludCgtb3J0aF9wMXAw
LngoKSwgLW9ydGhfcDFwMC55KCkpOworICAgIG9ydGhfcDFwMCA9IEdyYXBoaWNzUG9pbnQoLW9y
dGhfcDFwMC54KCksIC1vcnRoX3AxcDAueSgpKTsKICAgICBmbG9hdCBzYSA9IGFjb3Mob3J0aF9w
MXAwLngoKSAvIG9ydGhfcDFwMF9sZW5ndGgpOwogICAgIGlmIChvcnRoX3AxcDAueSgpIDwgMC5m
KQogICAgICAgICBzYSA9IDIgKiBwaURvdWJsZSAtIHNhOwpAQCAtMjM5LDggKzIzOSw4IEBAIHZv
aWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEKICAgICBib29sIGFudGljbG9j
a3dpc2UgPSBmYWxzZTsKIAogICAgIGZsb2F0IGZhY3Rvcl9wMXAyID0gdGFuZ2VudCAvIHAxcDJf
bGVuZ3RoOwotICAgIEZsb2F0UG9pbnQgdF9wMXAyKChwMS54KCkgKyBmYWN0b3JfcDFwMiAqIHAx
cDIueCgpKSwgKHAxLnkoKSArIGZhY3Rvcl9wMXAyICogcDFwMi55KCkpKTsKLSAgICBGbG9hdFBv
aW50IG9ydGhfcDFwMigodF9wMXAyLngoKSAtIHAueCgpKSwodF9wMXAyLnkoKSAtIHAueSgpKSk7
CisgICAgR3JhcGhpY3NQb2ludCB0X3AxcDIoKHAxLngoKSArIGZhY3Rvcl9wMXAyICogcDFwMi54
KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDIgKiBwMXAyLnkoKSkpOworICAgIEdyYXBoaWNzUG9p
bnQgb3J0aF9wMXAyKCh0X3AxcDIueCgpIC0gcC54KCkpLCh0X3AxcDIueSgpIC0gcC55KCkpKTsK
ICAgICBmbG9hdCBvcnRoX3AxcDJfbGVuZ3RoID0gc3FydGYob3J0aF9wMXAyLngoKSAqIG9ydGhf
cDFwMi54KCkgKyBvcnRoX3AxcDIueSgpICogb3J0aF9wMXAyLnkoKSk7CiAgICAgZmxvYXQgZWEg
PSBhY29zKG9ydGhfcDFwMi54KCkgLyBvcnRoX3AxcDJfbGVuZ3RoKTsKICAgICBpZiAob3J0aF9w
MXAyLnkoKSA8IDApCkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBQYXRoOjphZGRBcmNUbyhjb25z
dCBGbG9hdFBvaW50JiBwMQogICAgIGFkZEFyYyhwLCByYWRpdXMsIHNhLCBlYSwgYW50aWNsb2Nr
d2lzZSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBjYWlyb19zYXZl
KGNyKTsKQEAgLTI3MywxNSArMjczLDE1IEBAIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKICAg
ICBjYWlyb19jbG9zZV9wYXRoKGNyKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVj
dCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIHsKICAg
ICBjYWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCk7CiAgICAgZG91YmxlIHgw
LCB4MSwgeTAsIHkxOwogICAgIGNhaXJvX3BhdGhfZXh0ZW50cyhjciwgJngwLCAmeTAsICZ4MSwg
JnkxKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwogfQogCi1G
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBw
bGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tl
U3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZv
cm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBpZiAoYXBwbGllcikgewpAQCAtMjkxLDEwICsyOTEs
MTAgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJvawogCiAgICAgZG91
YmxlIHgwLCB4MSwgeTAsIHkxOwogICAgIGNhaXJvX3N0cm9rZV9leHRlbnRzKGNyLCAmeDAsICZ5
MCwgJngxLCAmeTEpOwotICAgIHJldHVybiBGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAt
IHkwKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7
CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRS
dWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIGlmICghaXNmaW5pdGUocG9pbnQu
eCgpKSB8fCAhaXNmaW5pdGUocG9pbnQueSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzA2LDcgKzMwNiw3IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG8K
ICAgICByZXR1cm4gY29udGFpbnM7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ry
b2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
K2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQoYXBwbGllcik7
CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwpAQCAtMzIyLDcg
KzMyMiw3IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICBP
d25QdHI8Y2Fpcm9fcGF0aF90PiBwYXRoQ29weSA9IGFkb3B0UHRyKGNhaXJvX2NvcHlfcGF0aChj
cikpOwogICAgIGNhaXJvX3BhdGhfZGF0YV90KiBkYXRhOwogICAgIFBhdGhFbGVtZW50IHBlbGVt
ZW50OwotICAgIEZsb2F0UG9pbnQgcG9pbnRzWzNdOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnRz
WzNdOwogICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsKIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcGF0aENvcHktPm51bV9kYXRhOyBpICs9IHBhdGhDb3B5LT5kYXRhW2ldLmhlYWRlci5s
ZW5ndGgpIHsKQEAgLTMzMCwxOSArMzMwLDE5IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5m
bywgUGF0aEFwcGxpZXIKICAgICAgICAgc3dpdGNoIChkYXRhLT5oZWFkZXIudHlwZSkgewogICAg
ICAgICBjYXNlIENBSVJPX1BBVEhfTU9WRV9UTzoKICAgICAgICAgICAgIHBlbGVtZW50LnR5cGUg
PSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OwotICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBd
ID0gRmxvYXRQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsKKyAgICAgICAg
ICAgIHBlbGVtZW50LnBvaW50c1swXSA9IEdyYXBoaWNzUG9pbnQoZGF0YVsxXS5wb2ludC54LGRh
dGFbMV0ucG9pbnQueSk7CiAgICAgICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9MSU5FX1RPOgogICAg
ICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7Ci0gICAg
ICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9pbnQueCxk
YXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBdID0gR3JhcGhp
Y3NQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsKICAgICAgICAgICAgIGZ1
bmN0aW9uKGluZm8sICZwZWxlbWVudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDQUlST19QQVRIX0NVUlZFX1RPOgogICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhF
bGVtZW50QWRkQ3VydmVUb1BvaW50OwotICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBdID0g
RmxvYXRQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsKLSAgICAgICAgICAg
IHBlbGVtZW50LnBvaW50c1sxXSA9IEZsb2F0UG9pbnQoZGF0YVsyXS5wb2ludC54LGRhdGFbMl0u
cG9pbnQueSk7Ci0gICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMl0gPSBGbG9hdFBvaW50KGRh
dGFbM10ucG9pbnQueCxkYXRhWzNdLnBvaW50LnkpOworICAgICAgICAgICAgcGVsZW1lbnQucG9p
bnRzWzBdID0gR3JhcGhpY3NQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsK
KyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1sxXSA9IEdyYXBoaWNzUG9pbnQoZGF0YVsyXS5w
b2ludC54LGRhdGFbMl0ucG9pbnQueSk7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMl0g
PSBHcmFwaGljc1BvaW50KGRhdGFbM10ucG9pbnQueCxkYXRhWzNdLnBvaW50LnkpOwogICAgICAg
ICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENBSVJPX1BBVEhfQ0xPU0VfUEFUSDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRl
eHRDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGRldGFpbHMgYXMgcGFydCBv
ZiB0aGUgY29udGV4dCBzdGF0ZSBhbmQgYXBwbHkgdGhlbSBkdXJpbmcgcGxhdGZvcm0gcmVzdG9y
ZS4KIGNsYXNzIEltYWdlTWFza0luZm9ybWF0aW9uIHsKIHB1YmxpYzoKLSAgICB2b2lkIHVwZGF0
ZShjYWlyb19zdXJmYWNlX3QqIG1hc2tTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0
KQorICAgIHZvaWQgdXBkYXRlKGNhaXJvX3N1cmZhY2VfdCogbWFza1N1cmZhY2UsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgbWFza1JlY3QpCiAgICAgewogICAgICAgICBtX21hc2tTdXJmYWNlID0gbWFz
a1N1cmZhY2U7CiAgICAgICAgIG1fbWFza1JlY3QgPSBtYXNrUmVjdDsKQEAgLTQ4LDExICs0OCwx
MSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX21hc2tT
dXJmYWNlOyB9CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBtYXNrU3VyZmFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFza1N1cmZhY2UuZ2V0KCk7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrUmVjdDsgfQorICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYg
bWFza1JlY3QoKSBjb25zdCB7IHJldHVybiBtX21hc2tSZWN0OyB9CiAKIHByaXZhdGU6CiAgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9tYXNrU3VyZmFjZTsKLSAgICBGbG9hdFJlY3QgbV9t
YXNrUmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9tYXNrUmVjdDsKIH07CiAKIApAQCAtODgsNyAr
ODgsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKIHsKICAgICBjb25z
dCBJbWFnZU1hc2tJbmZvcm1hdGlvbiYgbWFza0luZm9ybWF0aW9uID0gbV9zdGF0ZS0+bV9pbWFn
ZU1hc2tJbmZvcm1hdGlvbjsKICAgICBpZiAobWFza0luZm9ybWF0aW9uLmlzVmFsaWQoKSkgewot
ICAgICAgICBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0ID0gbWFza0luZm9ybWF0aW9uLm1hc2tS
ZWN0KCk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgbWFza1JlY3QgPSBtYXNrSW5mb3Jt
YXRpb24ubWFza1JlY3QoKTsKICAgICAgICAgY2Fpcm9fcG9wX2dyb3VwX3RvX3NvdXJjZShtX2Ny
LmdldCgpKTsKICAgICAgICAgY2Fpcm9fbWFza19zdXJmYWNlKG1fY3IuZ2V0KCksIG1hc2tJbmZv
cm1hdGlvbi5tYXNrU3VyZmFjZSgpLCBtYXNrUmVjdC54KCksIG1hc2tSZWN0LnkoKSk7CiAgICAg
fQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fpcm86OnNhdmUoKQog
ICAgIGNhaXJvX3NhdmUobV9jci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fp
cm86OnB1c2hJbWFnZU1hc2soY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpwdXNoSW1hZ2VNYXNrKGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIC8v
IFdlIG11c3QgY2FsbCBzYXZlUGxhdGZvcm1TdGF0ZSBhdCBsZWFzdCBvbmNlIGJlZm9yZSB3ZSBj
YW4gdXNlIGltYWdlIG1hc2tpbmcsCiAgICAgLy8gc2luY2Ugd2UgYWN0dWFsbHkgYXBwbHkgdGhl
IG1hc2sgaW4gcmVzdG9yZVBsYXRmb3JtU3RhdGUuCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBQ
bGF0Zm9ybUNvbnRleHRDYWlybzo6cHVzaEltYWdlTWFzawogICAgIGNhaXJvX2ZpbGwobV9jci5n
ZXQoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9f
dCogY3IsIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgZmxvYXQgYWxwaGEpCitzdGF0aWMgdm9pZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNh
aXJvX3QqIGNyLCBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4sIGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZGVzdFJlY3QsIGZsb2F0IGFscGhhKQogewogICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgZGVzdFJl
Y3QueCgpLCBkZXN0UmVjdC55KCkpOwogICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBhdHRlcm4p
OwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRl
eHQoY2EKICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBhbHBoYSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1Db250ZXh0Q2Fpcm86OmRyYXdTdXJmYWNlVG9Db250ZXh0KGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFBsYXRmb3JtQ29udGV4dENh
aXJvOjpkcmF3U3VyZmFjZVRvQ29udGV4dChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgYSBzdWIg
cG9ydGlvbiBvZiB0aGUgaW1hZ2Ugb3Igc2NhbGluZyB0aGVuIGNyZWF0ZQogICAgIC8vIGEgcGF0
dGVybiB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgaW1hZ2UgYW5kIGRyYXcgdGhlIHRyYW5zZm9ybWVk
IHBhdHRlcm4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRHbG9iYWxBbHBoYShmbG9hdCk7CiAgICAgZmxvYXQgZ2xvYmFsQWxwaGEoKSBjb25z
dDsKIAotICAgIHZvaWQgcHVzaEltYWdlTWFzayhjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBGbG9h
dFJlY3QmKTsKLSAgICB2b2lkIGRyYXdTdXJmYWNlVG9Db250ZXh0KGNhaXJvX3N1cmZhY2VfdCos
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgR3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwdXNoSW1hZ2VNYXNrKGNhaXJvX3N1cmZhY2VfdCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd1N1cmZhY2VUb0NvbnRleHQoY2Fp
cm9fc3VyZmFjZV90KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0LCBHcmFwaGljc0NvbnRleHQqKTsKIAogICAgIHZvaWQgc2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IH0KICAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJp
eENhaXJvLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKICNpbmNsdWRl
IDxjYWlyby5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9G
bG9hdFBvaW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2lmIFVTRShDRykgfHwgVVNFKFNLSUFf
T05fTUFDX0NIUk9NSVVNKQotCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2ludDo6Rmxv
YXRQb2ludChjb25zdCBDR1BvaW50JiBwKSA6IG1feChwLngpLCBtX3kocC55KQotewotfQotCi1G
bG9hdFBvaW50OjpvcGVyYXRvciBDR1BvaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ0dQb2lu
dE1ha2UobV94LCBtX3kpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UmVjdENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKLQotI2luY2x1ZGUg
PEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IENHUmVjdCYgcikgOiBtX2xv
Y2F0aW9uKHIub3JpZ2luKSwgbV9zaXplKHIuc2l6ZSkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVy
YXRvciBDR1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBDR1JlY3RNYWtlKHgoKSwgeSgpLCB3
aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5j
cHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRTaXplQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgotCi0jaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pIHx8IChQTEFU
Rk9STShRVCkgJiYgVVNFKFFUS0lUKSkKLQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0U2l6
ZTo6RmxvYXRTaXplKGNvbnN0IENHU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBtX2hlaWdo
dChzLmhlaWdodCkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRvciBDR1NpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBDR1NpemVNYWtlKG1fd2lkdGgsIG1faGVpZ2h0KTsKLX0KLQotfQotCi0j
ZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw3ICsxMDMsNyBAQCBDR0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRp
ZW50CiB9CiAjZW5kaWYKIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgY29u
dGV4dC0+Y2xpcChyZWN0KTsKICAgICBwYWludChjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTAgKzE3
MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50CiAgICAgICAg
IGlmIChvbGRGaWxsQ29sb3IgIT0gc3Ryb2tlQ29sb3IoKSkKICAgICAgICAgICAgIHNldENHRmls
bENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9rZUNvbG9yU3BhY2UoKSk7CiAgICAg
ICAgIENHUmVjdCByZWN0c1s0XSA9IHsKLSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCi0gICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54
KCksIHJlY3QubWF4WSgpIC0gMSwgcmVjdC53aWR0aCgpLCAxKSwKLSAgICAgICAgICAgIEZsb2F0
UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdodCgpIC0gMiksCi0gICAg
ICAgICAgICBGbG9hdFJlY3QocmVjdC5tYXhYKCkgLSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3Qu
aGVpZ2h0KCkgLSAyKQorICAgICAgICAgICAgR3JhcGhpY3NSZWN0KHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCAxKSwKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdChyZWN0LngoKSwg
cmVjdC5tYXhZKCkgLSAxLCByZWN0LndpZHRoKCksIDEpLAorICAgICAgICAgICAgR3JhcGhpY3NS
ZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKSwKKyAgICAg
ICAgICAgIEdyYXBoaWNzUmVjdChyZWN0Lm1heFgoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVj
dC5oZWlnaHQoKSAtIDIpCiAgICAgICAgIH07CiAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0cyhj
b250ZXh0LCByZWN0cywgNCk7CiAgICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gc3Ryb2tlQ29s
b3IoKSkKQEAgLTE5Miw4ICsxOTIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUo
Y29uc3QgSW50CiAKICAgICBmbG9hdCB3aWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwogCi0gICAg
RmxvYXRQb2ludCBwMSA9IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOworICAg
IEdyYXBoaWNzUG9pbnQgcDEgPSBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBwMiA9IHBvaW50
MjsKICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngoKSA9PSBwMi54KCkpOwogICAgIAog
ICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3ByaWF0ZSB4
L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYwpAQCAtMjQ3LDExICsyNDcsMTEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAgICAgICAvLyBhcHBlYXJh
bmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rh
c2hlZCBsaW5lLgogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigp
LCBzdHJva2VDb2xvclNwYWNlKCkpOyAgLy8gVGhlIHNhdmUvcmVzdG9yZSBtYWtlIGl0IHNhZmUg
dG8gbXV0YXRlIHRoZSBmaWxsIGNvbG9yIGhlcmUgd2l0aG91dCBzZXR0aW5nIGl0IGJhY2sgdG8g
dGhlIG9sZCBjb2xvci4KICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGggLyAy
LCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdp
ZHRoLCB3aWR0aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3Jh
cGhpY3NSZWN0KHAxLngoKSAtIHdpZHRoIC8gMiwgcDEueSgpIC0gd2lkdGgsIHdpZHRoLCB3aWR0
aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3JhcGhpY3NSZWN0
KHAyLngoKSAtIHdpZHRoIC8gMiwgcDIueSgpLCB3aWR0aCwgd2lkdGgpKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChw
MS54KCkgLSB3aWR0aCwgcDEueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpKTsKLSAgICAg
ICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChwMi54KCksIHAyLnko
KSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxs
UmVjdChjb250ZXh0LCBHcmFwaGljc1JlY3QocDEueCgpIC0gd2lkdGgsIHAxLnkoKSAtIHdpZHRo
IC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250
ZXh0LCBHcmFwaGljc1JlY3QocDIueCgpLCBwMi55KCkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0
aCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdpdGggYSB3
aWR0aCBvZiAzMCBwaXhlbHMuCkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUFyYyhjb25zdCBJbgogICAgIGZsb2F0IHJldmVyc2VTY2FsZUZhY3RvciA9IHcg
LyBoOwogCiAgICAgaWYgKHcgIT0gaCkKLSAgICAgICAgc2NhbGUoRmxvYXRTaXplKDEsIHNjYWxl
RmFjdG9yKSk7CisgICAgICAgIHNjYWxlKEdyYXBoaWNzU2l6ZSgxLCBzY2FsZUZhY3RvcikpOwog
CiAgICAgZmxvYXQgaFJhZGl1cyA9IHcgLyAyOwogICAgIGZsb2F0IHZSYWRpdXMgPSBoIC8gMjsK
QEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0
IEluCiAgICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRleHQsIHggKyBoUmFkaXVzLCAoeSArIHZSYWRp
dXMpICogcmV2ZXJzZVNjYWxlRmFjdG9yLCBoUmFkaXVzLCBzdGFydCwgZW5kLCB0cnVlKTsKIAog
ICAgIGlmICh3ICE9IGgpCi0gICAgICAgIHNjYWxlKEZsb2F0U2l6ZSgxLCByZXZlcnNlU2NhbGVG
YWN0b3IpKTsKKyAgICAgICAgc2NhbGUoR3JhcGhpY3NTaXplKDEsIHJldmVyc2VTY2FsZUZhY3Rv
cikpOwogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKICAgICBpbnQgcGF0
V2lkdGggPSAwOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VBcmMoY29uc3QgSW4KICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQog
Ci1zdGF0aWMgdm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBu
dW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIHZvaWQgYWRk
Q29udmV4UG9seWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNv
bnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cykKIHsKICAgICBBU1NFUlQobnVtYmVyT2ZQb2ludHMg
PiAwKTsKIApAQCAtNDA5LDcgKzQwOSw3IEBAIHN0YXRpYyB2b2lkIGFkZENvbnZleFBvbHlnb25U
b1BhdGgoUGF0aCYKICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBG
bG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBHcmFwaGlj
c1BvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxk
QW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlhbGlhcygpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3Qg
RmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEdyYXBoaWNz
UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBy
ZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZWN0
ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIENHTGF5ZXJSZWYgbGF5ZXIgPSBD
R0xheWVyQ3JlYXRlV2l0aENvbnRleHQoY29udGV4dCwgQ0dTaXplTWFrZShyZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpLCAwKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRl
eHQgPSBDR0xheWVyR2V0Q29udGV4dChsYXllcik7CiAKQEAgLTYwOSw3ICs2MDksNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAKICAgICBpZiAobV9zdGF0ZS5z
dHJva2VHcmFkaWVudCkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAg
IEZsb2F0UmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgICAgIEdyYXBo
aWNzUmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IGxp
bmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgICAgICAgICAgZmxvYXQgZG91YmxlTGlu
ZVdpZHRoID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGxheWVyV2lkdGggPSBj
ZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtNjYyLDcgKzY2Miw3IEBA
IHN0YXRpYyBib29sIGhhc0JsdXJyZWRTaGFkb3coY29uc3QgR3JhcGgKICAgICByZXR1cm4gc3Rh
dGUuc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmIHN0YXRlLnNoYWRvd0NvbG9yLmFscGhhKCkgJiYg
c3RhdGUuc2hhZG93Qmx1cjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzAyLDcgKzcwMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
ICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBD
R1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coRmxv
YXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKKyAgICAgICAgU2hh
ZG93Qmx1ciBjb250ZXh0U2hhZG93KEdyYXBoaWNzU2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVy
KSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hh
ZG93Q29sb3JTcGFjZSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3codGhp
cywgcmVjdCwgUm91bmRlZFJlY3Q6OlJhZGlpKCkpOwogICAgIH0KIApAQCAtNzEyLDcgKzcxMiw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgQ0dD
b250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC03MzEsNyArNzMxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
bwogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRl
eHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDAp
OwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1
ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9y
LCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRT
aGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRv
d09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsK
ICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdyh0aGlzLCByZWN0LCBSb3VuZGVk
UmVjdDo6UmFkaWkoKSk7CiAgICAgfQogCkBAIC03NjQsNyArNzY0LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1D
b250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93
T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOwor
ICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd0JsdXIs
IHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwg
bV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVj
dFNoYWRvdyh0aGlzLCByZWN0LCBSb3VuZGVkUmVjdDo6UmFkaWkodG9wTGVmdCwgdG9wUmlnaHQs
IGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiAgICAgfQogCkBAIC04MTcsNyArODE3LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZQogICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1f
c3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0Nv
bG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coR3JhcGhpY3NTaXpl
KHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5z
aGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKICAgICAgICAgY29udGV4dFNo
YWRvdy5kcmF3SW5zZXRTaGFkb3codGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LnJlY3QoKSwg
cm91bmRlZEhvbGVSZWN0LnJhZGlpKCkpOwogICAgIH0KIApAQCAtODMwLDcgKzgzMCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGUKICAgICBzZXRGaWxsQ29sb3Io
b2xkRmlsbENvbG9yLCBvbGRGaWxsQ29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtOTkwLDE0ICs5OTAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0
IGFscAogICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29udGV4dCgpLCBhbHBoYSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIENHQ29u
dGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgUGF0aAogICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQo
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXpl
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEx
NzUsNyArMTE3NSw3IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgK
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKHQuYSwgdC5iLCB0LmMsIHQuZCwgdC50eCwgdC50
eSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorR3JhcGhp
Y3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAjaWYgUExBVEZPUk0o
Q0hST01JVU0pCiAgICAgcmV0dXJuIHJlY3Q7CkBAIC0xMjE3LDEzICsxMjE3LDEzIEBAIEZsb2F0
UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2UKICAgICBpZiAoZGV2aWNlT3JpZ2lu
LnggPT0gZGV2aWNlTG93ZXJSaWdodC54ICYmIHJlY3Qud2lkdGgoKSkKICAgICAgICAgZGV2aWNl
TG93ZXJSaWdodC54ICs9IDE7CiAKLSAgICBGbG9hdFBvaW50IHJvdW5kZWRPcmlnaW4gPSBGbG9h
dFBvaW50KGRldmljZU9yaWdpbi54IC8gZGV2aWNlU2NhbGVYLCBkZXZpY2VPcmlnaW4ueSAvIGRl
dmljZVNjYWxlWSk7Ci0gICAgRmxvYXRQb2ludCByb3VuZGVkTG93ZXJSaWdodCA9IEZsb2F0UG9p
bnQoZGV2aWNlTG93ZXJSaWdodC54IC8gZGV2aWNlU2NhbGVYLCBkZXZpY2VMb3dlclJpZ2h0Lnkg
LyBkZXZpY2VTY2FsZVkpOwotICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91
bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKKyAgICBHcmFwaGljc1BvaW50IHJvdW5k
ZWRPcmlnaW4gPSBHcmFwaGljc1BvaW50KGRldmljZU9yaWdpbi54IC8gZGV2aWNlU2NhbGVYLCBk
ZXZpY2VPcmlnaW4ueSAvIGRldmljZVNjYWxlWSk7CisgICAgR3JhcGhpY3NQb2ludCByb3VuZGVk
TG93ZXJSaWdodCA9IEdyYXBoaWNzUG9pbnQoZGV2aWNlTG93ZXJSaWdodC54IC8gZGV2aWNlU2Nh
bGVYLCBkZXZpY2VMb3dlclJpZ2h0LnkgLyBkZXZpY2VTY2FsZVkpOworICAgIHJldHVybiBHcmFw
aGljc1JlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2lu
KTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNDksNyArMTI0OSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICAgICAgLy8gV2UgdHJ5IHRvIHJvdW5k
IGFsbCBwYXJhbWV0ZXJzIHRvIGludGVnZXIgYm91bmRhcmllcyBpbiBkZXZpY2Ugc3BhY2UuIElm
IHJvdW5kaW5nIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UKICAgICAgICAgLy8gbWFrZXMgb3VyIHRo
aWNrbmVzcyBtb3JlIHRoYW4gZG91YmxlLCB0aGVuIHRoZXJlIG11c3QgYmUgYSBzaHJpbmtpbmct
c2NhbGUgZmFjdG9yIGFuZCByb3VuZGluZyB0byBwaXhlbHMKICAgICAgICAgLy8gaW4gZGV2aWNl
IHNwYWNlIHdpbGwgbWFrZSB0aGUgdW5kZXJsaW5lcyB0b28gdGhpY2suCi0gICAgICAgIENHUmVj
dCBsaW5lUmVjdCA9IHJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KHgsIHksIGxpbmVMZW5n
dGgsIGFkanVzdGVkVGhpY2tuZXNzKSwgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zKTsKKyAgICAg
ICAgQ0dSZWN0IGxpbmVSZWN0ID0gcm91bmRUb0RldmljZVBpeGVscyhHcmFwaGljc1JlY3QoeCwg
eSwgbGluZUxlbmd0aCwgYWRqdXN0ZWRUaGlja25lc3MpLCBSb3VuZE9yaWdpbkFuZERpbWVuc2lv
bnMpOwogICAgICAgICBpZiAobGluZVJlY3Quc2l6ZS5oZWlnaHQgPCB0aGlja25lc3MgKiAyLjAp
IHsKICAgICAgICAgICAgIHggPSBsaW5lUmVjdC5vcmlnaW4ueDsKICAgICAgICAgICAgIHkgPSBs
aW5lUmVjdC5vcmlnaW4ueTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlQ0cuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NCw5ICs2NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmUoKSB7fQogICAgIHZv
aWQgcmVzdG9yZSgpIHt9CiAgICAgdm9pZCBmbHVzaCgpIHt9Ci0gICAgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpIHt9CisgICAgdm9pZCBjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYpIHt9CiAg
ICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKSB7fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikge30KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIHt9CiAgICAgdm9p
ZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSB7fQog
ICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CkBAIC03OCw5ICs3
OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKICAg
ICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2xpcChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYp
OwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBzY2FsZShjb25z
dCBHcmFwaGljc1NpemUmKTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCk7CiAgICAgdm9pZCB0cmFu
c2xhdGUoZmxvYXQsIGZsb2F0KTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzUG9pbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NQb2ludENHLmNwcAkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHA6OTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1BvaW50Q0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaWYgVVNFKENH
KSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
bG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IENHUG9pbnQmIHApIDogbV94KHAueCksIG1feShw
LnkpCit7Cit9CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIENHUG9pbnQoKSBjb25zdAoreworICAg
IHJldHVybiBDR1BvaW50TWFrZShtX3gsIG1feSk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShD
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUG9p
bnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NQb2ludENHLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1BvaW50Q0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKICNpZiBVU0UoQ0cp
IHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKIApAQCAtMzMsMTEgKzMzLDExIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBDR1BvaW50
JiBwKSA6IG1feChwLngpLCBtX3kocC55KQorR3JhcGhpY3NQb2ludDo6R3JhcGhpY3NQb2ludChj
b25zdCBDR1BvaW50JiBwKSA6IG1feChwLngpLCBtX3kocC55KQogewogfQogCi1GbG9hdFBvaW50
OjpvcGVyYXRvciBDR1BvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQ6Om9wZXJhdG9yIENHUG9p
bnQoKSBjb25zdAogewogICAgIHJldHVybiBDR1BvaW50TWFrZShtX3gsIG1feSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NSZWN0Q0cuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NSZWN0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
Tm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFD
X0NIUk9NSVVNKQorCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9hdFJlY3Qo
Y29uc3QgQ0dSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQor
eworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIENHUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENHUmVjdE1ha2UoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfQorCisjZW5k
aWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NSZWN0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzUmVjdENHLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAKICNpZiBV
U0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKIApAQCAtMzMsMTEgKzMzLDExIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQ0dS
ZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQorR3JhcGhpY3NS
ZWN0OjpHcmFwaGljc1JlY3QoY29uc3QgQ0dSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4p
LCBtX3NpemUoci5zaXplKQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIENHUmVjdCgpIGNv
bnN0CitHcmFwaGljc1JlY3Q6Om9wZXJhdG9yIENHUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IENHUmVjdE1ha2UoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzU2l6ZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVD
Ry5jcHAJKHJldmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9GbG9hdFNpemVDRy5jcHA6OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJP
TUlVTSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorCisjaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgQ0dTaXplJiBzKSA6IG1fd2lkdGgocy53
aWR0aCksIG1faGVpZ2h0KHMuaGVpZ2h0KQoreworfQorCitGbG9hdFNpemU6Om9wZXJhdG9yIENH
U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENHU2l6ZU1ha2UobV93aWR0aCwgbV9oZWlnaHQp
OworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NTaXplQ0cuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
U2l6ZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAgCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NTaXplLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkgfHwg
KFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQogCkBAIC0zMywxMSArMzMsMTEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBDR1NpemUmIHMp
IDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCitHcmFwaGljc1NpemU6Okdy
YXBoaWNzU2l6ZShjb25zdCBDR1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQo
cy5oZWlnaHQpCiB7CiB9CiAKLUZsb2F0U2l6ZTo6b3BlcmF0b3IgQ0dTaXplKCkgY29uc3QKK0dy
YXBoaWNzU2l6ZTo6b3BlcmF0b3IgQ0dTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0dTaXpl
TWFrZShtX3dpZHRoLCBtX2hlaWdodCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIEltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jb250ZXh0
PSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dC5nZXQoKSkpOwotICAgIG1f
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9jb250ZXh0LT5zY2FsZShH
cmFwaGljc1NpemUoMSwgLTEpKTsKICAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc2l6ZS5o
ZWlnaHQoKSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CiB9CkBAIC0yMDEsNyArMjAxLDcgQEAgc3Rh
dGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25zdCBJbnRTaXplJgogICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEubV9jb2xvclNwYWNlLCBkYXRhLm1fYml0bWFwSW5mbywgZGF0YS5tX2RhdGFQ
cm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiB9CiAK
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKQogewogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKSB7CkBAIC0yMjAsOCArMjIw
LDggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIH0KIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFw
aGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKSB7
CiAgICAgICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKQEAgLTIzOCw3ICsyMzgs
NyBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvCiAgICAgfQogfQog
Ci12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dFRvQ2xpcCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHRUb0NsaXAsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29u
c3QKIHsKICAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0VG9DbGlwID0gY29udGV4dFRv
Q2xpcC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250
ZXh0KiAKICNlbmRpZgogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHRU
b0NsaXAsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4
dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgMSwgLTEpOwotICAgIENHQ29udGV4dENs
aXBUb01hc2socGxhdGZvcm1Db250ZXh0VG9DbGlwLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBy
ZWN0LnNpemUoKSksIGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHRDbGlwVG9NYXNrKHBsYXRm
b3JtQ29udGV4dFRvQ2xpcCwgR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgcmVjdC5zaXpl
KCkpLCBpbWFnZS5nZXQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0
VG9DbGlwLCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4
dFRvQ2xpcCwgLXJlY3QueCgpLCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQ
REZEb2N1bWVudEltYWdlLmgiCkBAIC0xODIsNyArMTgyLDcgQEAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IEJpdG1hcEltYWdlOjpnZXRDRwogICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4o
QWRvcHRDRiwgYXJyYXkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIApAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgp
KTsKKyAgICBHcmFwaGljc1VuaXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Uu
Z2V0KCkpOwogICAgIGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTIwNiw4ICsyMDYsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogCiAKICAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBzdWJwb3J0aW9uIG9m
IHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3RpbmF0aW9uIHJlY3Qg
dGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQogICAgIC8vIGFuZCB0aGVuIHNldCBhIGNs
aXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCi0gICAgRmxvYXRSZWN0
IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKLSAgICBGbG9hdFNpemUgc2VsZlNpemUgPSBj
dXJyZW50RnJhbWVTaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBk
ZXN0UmVjdDsKKyAgICBHcmFwaGljc1NpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7
CiAgICAgaWYgKHNyY1JlY3Quc2l6ZSgpICE9IHNlbGZTaXplKSB7CiAgICAgICAgIENHSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShjb250ZXh0KTsKICAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2Nh
bGVkIHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3Jh
cnkgQ0dJbWFnZQpAQCAtMjE1LDEyICsyMTUsMTIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIAogICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHNtb290aGVzIHNoYXJw
IGVkZ2VzLCBjYXVzaW5nIHBpeGVscyBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSByZWN0IHRvIGJs
ZWVkCiAgICAgICAgIC8vIGludG8gdGhlIGRlc3RpbmF0aW9uIHJlY3QuIFNlZSA8cmRhcjovL3By
b2JsZW0vNjExMjkwOT4uCiAgICAgICAgIHNob3VsZFVzZVN1YmltYWdlID0gKGludGVycG9sYXRp
b25RdWFsaXR5ICE9IGtDR0ludGVycG9sYXRpb25Ob25lKSAmJiAoc3JjUmVjdC5zaXplKCkgIT0g
ZGVzdFJlY3Quc2l6ZSgpIHx8ICFjdHh0LT5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlv
bk9yRmxpcHBlZCgpKTsKLSAgICAgICAgZmxvYXQgeFNjYWxlID0gc3JjUmVjdC53aWR0aCgpIC8g
ZGVzdFJlY3Qud2lkdGgoKTsKLSAgICAgICAgZmxvYXQgeVNjYWxlID0gc3JjUmVjdC5oZWlnaHQo
KSAvIGRlc3RSZWN0LmhlaWdodCgpOworICAgICAgICBHcmFwaGljc1VuaXQgeFNjYWxlID0gc3Jj
UmVjdC53aWR0aCgpIC8gZGVzdFJlY3Qud2lkdGgoKTsKKyAgICAgICAgR3JhcGhpY3NVbml0IHlT
Y2FsZSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKICAgICAgICAgaWYg
KHNob3VsZFVzZVN1YmltYWdlKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VSZWN0
ID0gc3JjUmVjdDsKLSAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkg
LSBmbG9vcmYoc3JjUmVjdC54KCkpOwotICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9IHNy
Y1JlY3QueSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVj
dCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OworICAgICAgICAgICAgR3JhcGhpY3NVbml0IGxlZnRQ
YWRkaW5nID0gc3JjUmVjdC54KCkgLSBmbG9vcihzcmNSZWN0LngoKSk7CisgICAgICAgICAgICBH
cmFwaGljc1VuaXQgdG9wUGFkZGluZyA9IHNyY1JlY3QueSgpIC0gZmxvb3Ioc3JjUmVjdC55KCkp
OwogCiAgICAgICAgICAgICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRpbmcsIC10b3BQYWRk
aW5nKTsKICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVmdFBhZGRpbmcgLyB4
U2NhbGUsIC10b3BQYWRkaW5nIC8geVNjYWxlKTsKQEAgLTIzNyw4ICsyMzcsOCBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgICAgICAgICAgYWRqdXN0
ZWREZXN0UmVjdC5zZXRIZWlnaHQoQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkgLyB5U2Nh
bGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRqdXN0
ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHNyY1JlY3Qu
eCgpIC8geFNjYWxlLCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2FsZSkpOwotICAg
ICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEZsb2F0U2l6ZShzZWxmU2l6ZS53aWR0
aCgpIC8geFNjYWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICAgICAg
YWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KGRlc3RSZWN0LngoKSAt
IHNyY1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2Fs
ZSkpOworICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEdyYXBoaWNzU2l6ZShz
ZWxmU2l6ZS53aWR0aCgpIC8geFNjYWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RS
ZWN0KSkKQEAgLTI3MCwxMSArMjcwLDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiAKIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywg
Q0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IChDR0ltYWdl
UmVmKWluZm87Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7CisgICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRv
RGV2aWNlUGl4ZWxzKEdyYXBoaWNzUmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3Zv
aWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoIW5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5MiwxNSArMjkyLDE1IEBAIHZvaWQgSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250
ZXh0LCAxLCAtMSk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgc2NhbGVkIHRpbGUgc2l6ZS4K
LSAgICBmbG9hdCBzY2FsZWRUaWxlSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKTsKKyAgICBHcmFwaGljc1VuaXQg
c2NhbGVkVGlsZUhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpICogbmFycm93UHJlY2lzaW9uVG9H
cmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5kKCkpOwogICAgIAogICAgIC8vIFdlIGhhdmUg
dG8gYWRqdXN0IHRoZSBwaGFzZSB0byBkZWFsIHdpdGggdGhlIGZhY3Qgd2UncmUgaW4gQ2FydGVz
aWFuIHNwYWNlIG5vdyAod2l0aCB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIGRlc3RSZWN0IGJl
aW5nCiAgICAgLy8gdGhlIG9yaWdpbikuCi0gICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgp
IC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChw
YXR0ZXJuVHJhbnNmb3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNvbnRleHQgc28gdGhh
dCBkZXN0UmVjdC54KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQgb3V0LgotICAgIGZs
b2F0IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0
LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5z
Zm9ybS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7CisgICAgR3JhcGhpY3NVbml0IGFkanVzdGVk
WCA9IHBoYXNlLngoKSAtIGRlc3RSZWN0LngoKSArIHRpbGVSZWN0LngoKSAqIG5hcnJvd1ByZWNp
c2lvblRvR3JhcGhpY3NVbml0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRl
ZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0
cmFjdCBpdCBvdXQuCisgICAgR3JhcGhpY3NVbml0IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdo
dCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1By
ZWNpc2lvblRvR3JhcGhpY3NVbml0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKSArIHNjYWxlZFRpbGVI
ZWlnaHQpOwogCiAgICAgQ0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRpbGVJbWFnZSk7Cisg
ICAgR3JhcGhpY3NVbml0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRpbGVJbWFnZSk7CiAKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2U7CiAgICAgaWYgKHRpbGVSZWN0LnNpemUoKSA9
PSBzaXplKCkpCkBAIC0zMTksMTQgKzMxOSwxNCBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqCiAgICAgLy8gaXRzIGJ1ZmZlciBpcyB0aGUgc2FtZSBzaXplIGFzIHRo
ZSBvdmVyYWxsIGltYWdlLiAgQmVjYXVzZSBhIHBhcnRpYWxseSBkZWNvZGVkIENHSW1hZ2VSZWYg
d2l0aCBhIHNtYWxsZXIgd2lkdGggb3IgaGVpZ2h0IHRoYW4gdGhlCiAgICAgLy8gb3ZlcmFsbCBp
bWFnZSBidWZmZXIgbmVlZHMgdG8gdGlsZSB3aXRoICJnYXBzIiwgd2UgY2FuJ3QgdXNlIHRoZSBv
cHRpbWl6ZWQgdGlsaW5nIGNhbGwgaW4gdGhhdCBjYXNlLgogICAgIC8vIEZJWE1FOiBXZSBjYW5u
b3QgdXNlIENHQ29udGV4dERyYXdUaWxlZEltYWdlIHdpdGggc2NhbGVkIHRpbGVzIG9uIExlb3Bh
cmQsIGJlY2F1c2UgaXQgc3VmZmVycyBmcm9tIHJvdW5kaW5nIGVycm9ycy4gIFNub3cgTGVvcGFy
ZCBpcyBvay4KLSAgICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICog
bmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0gICAgZmxvYXQg
dyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UpOworICAgIEdyYXBoaWNzVW5pdCBzY2FsZWRU
aWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1Vu
aXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOworICAgIEdyYXBoaWNzVW5pdCB3ID0gQ0dJbWFnZUdl
dFdpZHRoKHRpbGVJbWFnZSk7CiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAogICAgIGlmICh3
ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVX
aWR0aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNjYWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3Qu
aGVpZ2h0KCkpCiAjZWxzZQogICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6
ZSgpLmhlaWdodCgpKQogI2VuZGlmCi0gICAgICAgIENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNv
bnRleHQsIEZsb2F0UmVjdChhZGp1c3RlZFgsIGFkanVzdGVkWSwgc2NhbGVkVGlsZVdpZHRoLCBz
Y2FsZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0KCkpOworICAgICAgICBDR0NvbnRleHREcmF3
VGlsZWRJbWFnZShjb250ZXh0LCBHcmFwaGljc1JlY3QoYWRqdXN0ZWRYLCBhZGp1c3RlZFksIHNj
YWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdodCksIHN1YkltYWdlLmdldCgpKTsKICAgICBl
bHNlIHsKIAogICAgIC8vIE9uIExlb3BhcmQgYW5kIG5ld2VyLCB0aGlzIGNvZGUgbm93IG9ubHkg
cnVucyBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzIHdob3NlIGJ1ZmZlcnMgZG8gbm90IHll
dCBtYXRjaCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBpbWFnZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcg
QEAgaW50IFBERkRvY3VtZW50SW1hZ2U6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
ZG9jdW1lbnQgPyBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhtX2RvY3VtZW50KSA6IDA7
CiB9CiAKLXZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgUERGRG9jdW1lbnRJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVj
dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgbV9jdXJyZW50UGFnZSA9PSAtMSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUERGRG9jdW1lbnRJbWFnZV9o
CiAjZGVmaW5lIFBERkRvY3VtZW50SW1hZ2VfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAKQEAgLTYyLDE1ICs2MiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAKICAgICAgICAgUERGRG9j
dW1lbnRJbWFnZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RS
ZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldEN1cnJl
bnRQYWdlKGludCk7CiAgICAgICAgIGludCBwYWdlQ291bnQoKSBjb25zdDsKICAgICAgICAgdm9p
ZCBhZGp1c3RDVE0oR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CiAKICAgICAgICAgQ0dQREZEb2N1
bWVudFJlZiBtX2RvY3VtZW50OwotICAgICAgICBGbG9hdFJlY3QgbV9tZWRpYUJveDsKLSAgICAg
ICAgRmxvYXRSZWN0IG1fY3JvcEJveDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG1fbWVkaWFCb3g7
CisgICAgICAgIEdyYXBoaWNzUmVjdCBtX2Nyb3BCb3g7CiAgICAgICAgIGZsb2F0IG1fcm90YXRp
b247CiAgICAgICAgIGludCBtX2N1cnJlbnRQYWdlOwogICAgIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTIyLDcgKzEyMiw3IEBAIHN0
YXRpYyBDR011dGFibGVQYXRoUmVmIGNvcHlDR1BhdGhDbG9zaW4KICAgICByZXR1cm4gcGF0aDsK
IH0KIAotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50ICZwb2ludCwgV2luZFJ1
bGUgcnVsZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCAm
cG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgaWYgKCFib3VuZGluZ1JlY3QoKS5j
b250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzMyw3ICsxMzMsNyBA
QCBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQgJnBvCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFw
cGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBQYXRoOjpzdHJva2VD
b250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50KSBjb25zdAogewogICAgIEFTU0VSVChhcHBsaWVyKTsKIApAQCAtMTUyLDcgKzE1Miw3
IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAKICAgICByZXR1cm4g
aGl0U3VjY2VzczsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewog
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtl
KDEsIDAsIDAsIDEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dNdXRhYmxl
UGF0aFJlZiBuZXdQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwpAQCAtMTYxLDEyICsxNjEs
MTIgQEAgdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaQogICAgIG1fcGF0
aCA9IG5ld1BhdGg7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAor
R3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENH
UGF0aEdldEJvdW5kaW5nQm94KG1fcGF0aCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VC
b3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAorR3JhcGhpY3NS
ZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIp
IGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBzY3JhdGNoQ29udGV4dCgpOwog
CkBAIC0xODYsMjcgKzE4NiwyNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KFN0cm9rCiAgICAgcmV0dXJuIGJveDsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCkKIHsKICAgICBDR1BhdGhNb3ZlVG9Qb2ludChtX3BhdGgsIDAsIHBvaW50LngoKSwgcG9p
bnQueSgpKTsKIH0KIAotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkK
K3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgQ0dQ
YXRoQWRkTGluZVRvUG9pbnQobV9wYXRoLCAwLCBwLngoKSwgcC55KCkpOwogfQogCi12b2lkIFBh
dGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50
JiBwKQordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcCwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBDR1BhdGhBZGRRdWFkQ3VydmVUb1BvaW50
KG1fcGF0aCwgMCwgY3AueCgpLCBjcC55KCksIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZvaWQgUGF0
aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9p
bnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiBjcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQobV9wYXRo
LCAwLCBjcDEueCgpLCBjcDEueSgpLCBjcDIueCgpLCBjcDIueSgpLCBwLngoKSwgcC55KCkpOwog
fQogCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBHcmFw
aGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKIHsK
ICAgICBDR1BhdGhBZGRBcmNUb1BvaW50KG1fcGF0aCwgMCwgcDEueCgpLCBwMS55KCksIHAyLngo
KSwgcDIueSgpLCByYWRpdXMpOwogfQpAQCAtMjE2LDE5ICsyMTYsMTkgQEAgdm9pZCBQYXRoOjpj
bG9zZVN1YnBhdGgoKQogICAgIENHUGF0aENsb3NlU3VicGF0aChtX3BhdGgpOwogfQogCi12b2lk
IFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYSwgZmxv
YXQgZWEsIGJvb2wgY2xvY2t3aXNlKQordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgR3JhcGhpY3NQ
b2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2EsIGZsb2F0IGVhLCBib29sIGNsb2Nrd2lzZSkKIHsK
ICAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNTE4OTIzMz4gQ0dQYXRoQWRk
QXJjIGhhbmdzIG9yIGNyYXNoZXMgd2hlbiBwYXNzZWQgaW5mIGFzIHN0YXJ0IG9yIGVuZCBhbmds
ZQogICAgIGlmIChpc2Zpbml0ZShzYSkgJiYgaXNmaW5pdGUoZWEpKQogICAgICAgICBDR1BhdGhB
ZGRBcmMobV9wYXRoLCAwLCBwLngoKSwgcC55KCksIHIsIHNhLCBlYSwgY2xvY2t3aXNlKTsKIH0K
IAotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRk
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgQ0dQYXRoQWRkUmVjdChtX3BhdGgs
IDAsIHIpOwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQor
dm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBDR1Bh
dGhBZGRFbGxpcHNlSW5SZWN0KG1fcGF0aCwgMCwgcik7CiB9CkBAIC0yNDksNyArMjQ5LDcgQEAg
Ym9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0eSgp
OwogfQogICAgIAotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKK0dyYXBo
aWNzUG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCiB7CiAgICAgcmV0dXJuIENHUGF0
aEdldEN1cnJlbnRQb2ludChtX3BhdGgpOwogfQpAQCAtMjY1LDcgKzI2NSw3IEBAIHN0cnVjdCBQ
YXRoQXBwbGllckluZm8gewogc3RhdGljIHZvaWQgQ0dQYXRoQXBwbGllclRvUGF0aEFwcGxpZXIo
dm9pZCAqaW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBQYXRoQXBw
bGllckluZm8qIHBpbmZvID0gKFBhdGhBcHBsaWVySW5mbyopaW5mbzsKLSAgICBGbG9hdFBvaW50
IHBvaW50c1szXTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1szXTsKICAgICBQYXRoRWxlbWVu
dCBwZWxlbWVudDsKICAgICBwZWxlbWVudC50eXBlID0gKFBhdGhFbGVtZW50VHlwZSllbGVtZW50
LT50eXBlOwogICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5D
YWxsYmFjayh2b2lkKiBpbmZvLCAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0IHJlY3Qg
PSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAg
RmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdl
dEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgICAgICBHcmFwaGljc1JlY3QoMCwgMCwgQ0dJ
bWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1h
Z2UpKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1h
Z2UpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGlu
dXguY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBs
ZXhUZXh0Q29udHJvbGxlckxpbnV4LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogCkBAIC00NTksNyArNDU5LDcgQEAgaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zm
c2V0Rm9yUG9zaQogICAgIHJldHVybiBiYXNlUG9zaXRpb247CiB9CiAKLUZsb2F0UmVjdCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCitHcmFwaGljc1JlY3QgQ29tcGxleFRleHRD
b250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQg
aGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGludCBmcm9tWCA9IC0xLCB0b1ggPSAt
MTsKICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3Jk
ZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVy
ZXN0LgpAQCAtNDkzLDkgKzQ5Myw5IEBAIEZsb2F0UmVjdCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OnNlbGVjdGkKICAgICBBU1NFUlQoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKTsKIAogICAgIGlm
IChmcm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmcm9t
WCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdChwb2ludC54KCkgKyBmcm9tWCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0
KTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgdG9YLCBwb2ludC55KCksIGZy
b21YIC0gdG9YLCBoZWlnaHQpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsg
dG9YLCBwb2ludC55KCksIGZyb21YIC0gdG9YLCBoZWlnaHQpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4
LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaAkod29ya2luZyBjb3B5KQpAQCAt
MTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBmb250
UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGb250
UGxhdGZvcm1EYXRhKj4obV9pdGVtLmZvbnQtPnVzZXJEYXRhKTsgfQogCiAgICAgaW50IG9mZnNl
dEZvclBvc2l0aW9uKGludCk7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxv
YXRQb2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tICwgaW50IHRvKTsKKyAgICBHcmFwaGljc1Jl
Y3Qgc2VsZWN0aW9uUmVjdChjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGhlaWdodCwgaW50IGZy
b20gLCBpbnQgdG8pOwogCiBwcml2YXRlOgogICAgIC8vIFJldHVybiB0aGUgd2lkdGggKGluIHB4
KSBvZiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENv
bnRlbnRzCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGlsZXItPnByZXBhcmVUb1VwZGF0ZShs
YXllclJlY3QsIHRleHR1cmVVcGRhdGVyKCkpOwotICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0
KCk7CisgICAgbV9kaXJ0eVJlY3QgPSBHcmFwaGljc1JlY3QoKTsKIH0KIAogYm9vbCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9t
aXVtV2luLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw3IEBAIGJvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMoY29uc3QgU2tDYW4KIAog
Y2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7CiBwdWJsaWM6Ci0gICAgVHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBHcmFwaGljc1BvaW50Jik7CiAgICAgflRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIo
KTsKIAogcHJvdGVjdGVkOgpAQCAtNzcsNyArNzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogbV9wbGF0Zm9ybUNvbnRleHQ7CiAKLSAgICBGbG9hdFBvaW50IG1fcG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCBtX3BvaW50OwogCiAgICAgLy8gU2V0IHdoZW4gV2luZG93cyBjYW4gaGFuZGxl
IHRoZSB0eXBlIG9mIGRyYXdpbmcgd2UncmUgZG9pbmcuCiAgICAgYm9vbCBtX3VzZUdESTsKQEAg
LTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIH07CiAKIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50
ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQpCiAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQogICAgICwgbV9wbGF0Zm9ybUNv
bnRleHQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCiAgICAgLCBtX3BvaW50KHBvaW50KQpA
QCAtMTkwLDcgKzE5MCw3IEBAIGNsYXNzIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyIDog
cHUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXIm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50
Jik7CiAgICAgflRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKCk7CiAKICAgICAvLyBEcmF3
cyB0aGUgcGFydGlhbCBzdHJpbmcgb2YgZ2x5cGhzLCBzdGFydGluZyBhdCB8c3RhcnRBZHZhbmNl
fCB0byB0aGUKQEAgLTIxNyw3ICsyMTcsNyBAQCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRl
cjo6VHJhbnNwYXJlCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAot
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50KQogICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihjb250ZXh0LCBwb2ludCkK
ICAgICAsIG1fZm9udChmb250KQogICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKQEAg
LTI3Niw3ICsyNzYsNyBAQCBib29sIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpkcmF3
CiAKICAgICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmls
bCBjb2xvciBhbmQgc2hhZG93IGNvbG9yIAogICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRo
b3V0IHNraWEuIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXpl
IHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0Nv
bG9yOwogICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTMwMiw3ICszMDIsNyBA
QCBjbGFzcyBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0UnVuJiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAgICAgflRyYW5zcGFy
ZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpOwogCiAgICAgLy8gVW5pc2NpYmUgd2lsbCBkcmF3
IGRpcmVjdGx5IGludG8gb3VyIGJ1ZmZlciwgc28gd2UgbmVlZCB0byBleHBvc2Ugb3VyIERDLgpA
QCAtMzIyLDcgKzMyMiw3IEBAIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6VHJh
bnMKICAgICBjb25zdCBGb250KiBmb250LAogICAgIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICBp
bnQgZnJvbSwgaW50IHRvLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cihjb250ZXh0LCBwb2ludCkKICAgICAsIG1fZm9udChmb250KQogICAgICwgbV9ydW4ocnVuKQpA
QCAtMzgwLDcgKzM4MCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNXaW4oR3JhcGhpY3NDb250
ZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpIHsKICAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRl
ciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUds
eXBocywgcG9pbnQpOwogCiAgICAgLy8gV2UgZHJhdyB0aGUgZ2x5cGhzIGluIGNodW5rcyB0byBh
dm9pZCBoYXZpbmcgdG8gZG8gYSBoZWFwIGFsbG9jYXRpb24gZm9yCkBAIC00NDYsNyArNDQ2LDcg
QEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZwogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLAot
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewog
ICAgIFNrQ29sb3IgY29sb3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5l
ZmZlY3RpdmVGaWxsQ29sb3IoKTsKICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gU2tDb2xvckdl
dEEoY29sb3IpOwpAQCAtNDU3LDggKzQ1Nyw4IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQqIGcKICAgICBkcmF3R2x5cGhzV2luKGdyYXBoaWNzQ29udGV4dCwgZm9udCwg
Z2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOwogfQogCi1GbG9hdFJlY3QgRm9u
dDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsCitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHRvKSBjb25zdApAQCAtNDY5LDE2ICs0NjksMTYgQEAgRmxvYXRS
ZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogCiAgICAgLy8gSWYgdGhlIHRleHQg
aXMgUlRMLCBsZWZ0IHdpbGwgYWN0dWFsbHkgYmUgYWZ0ZXIgcmlnaHQuCiAgICAgaWYgKGxlZnQg
PCByaWdodCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChsZWZ0LCBwb2ludC55KCksCisgICAg
ICAgIHJldHVybiBHcmFwaGljc1JlY3QobGVmdCwgcG9pbnQueSgpLAogICAgICAgICAgICAgICAg
ICAgICAgICByaWdodCAtIGxlZnQsIHN0YXRpY19jYXN0PGZsb2F0PihoKSk7CiAKLSAgICByZXR1
cm4gRmxvYXRSZWN0KHJpZ2h0LCBwb2ludC55KCksCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChy
aWdodCwgcG9pbnQueSgpLAogICAgICAgICAgICAgICAgICAgICAgbGVmdCAtIHJpZ2h0LCBzdGF0
aWNfY2FzdDxmbG9hdD4oaCkpOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bykgY29uc3QKIHsKQEAgLTUwNyw3ICs1MDcs
NyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAKICAgICAvLyBJ
ZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xvciBhbmQg
c2hhZG93IGNvbG9yIAogICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNraWEuIAot
ICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNl
dDsKICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIENv
bG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lkIEZvbnQ6
OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgc3RhdGUuZHJhdyhncmFwaGljc0Nv
bnRleHQsIGhkYywgbHJvdW5kZihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAtIGZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNv
bnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBj
b25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAq
LykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29u
c3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2lu
dCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udExpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNs
dWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCkBA
IC03OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdFRleHRSZW5kZXJNb2RlKFNrUGFpbnQK
IAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAotICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdCB7CisgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0IHsKICAgICBTa0FTU0VSVChz
aXplb2YoR2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSk7IC8vIGNvbXBpbGUt
dGltZSBhc3NlcnQKIAogICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgdm9pZCBzZXR1
cEZvclRleHRQYWludGluZyhTa1BhaW50CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKCFydW4ubGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRlCiAgICAgfQogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBU
ZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3Qg
RmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNv
bnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0
b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgR3JhcGhpY3NQb2ludCYgLyogcG9pbnQgKi8s
IGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KQEAgLTI0NSw4ICsyNDUsOCBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4CiB9CiAKIC8vIFJldHVybiB0aGUgcmVjdGFuZ2xlIGZvciBzZWxlY3Rpbmcg
dGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRoZSBUZXh0UnVuLgotRmxvYXRSZWN0
IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgaGVpZ2h0LAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9u
KCksIHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRyYXdp
bmdCdWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0u
aCIKQEAgLTE4MCwxMyArMTgwLDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1v
dmVGcm9tUGEKICAgICBsYXllckZvclBhcmVudCgpLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbihjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihw
b2ludCk7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1Bv
aW50M0QmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAg
ICByZXR1cm47CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldEFuY2hvclBvaQogICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsK
ICAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTMzMiw3ICszMzIs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwCiAgICAgICAgIG1f
bGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgbV9sYXllci0+
c2V0TmVlZHNEaXNwbGF5KHJlY3QpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVDaGlsZEwKIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVMYXllclBvc2l0aW9uKCkKIHsKICAgICAvLyBQb3NpdGlvbiBpcyBvZmZzZXQgb24gdGhl
IGxheWVyIGJ5IHRoZSBsYXllciBhbmNob3IgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBsYXllclBv
c2l0aW9uKG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgo
KSwKKyAgICBHcmFwaGljc1BvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54KCkgKyBtX2Fu
Y2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhlaWdodCgp
KTsKIAogICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9uKTsKQEAg
LTUxNCw3ICs1MTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJT
CiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsKICAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+
c2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgICAgIC8vIFRoZSBhbmNob3Igb2YgdGhlIGNvbnRl
bnRzIGxheWVyIGlzIGFsd2F5cyBhdCAwLjUsIDAuNSwgc28gdGhlIHBvc2l0aW9uIGlzIGNlbnRl
ci1yZWxhdGl2ZS4KLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludChtX3NpemUud2lkdGgo
KSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOworICAgICAgICBHcmFwaGljc1BvaW50IGNlbnRl
clBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMik7CiAgICAgICAg
IG1fbGF5ZXItPnNldFBvc2l0aW9uKGNlbnRlclBvaW50KTsKICAgICB9CiAKQEAgLTUyOSw3ICs1
MjksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJTCiAKIHZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVBbmNob3JQb2ludCgpCiB7Ci0gICAgcHJpbWFy
eUxheWVyKCktPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQb2ludC54KCksIG1f
YW5jaG9yUG9pbnQueSgpKSk7CisgICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50KEdy
YXBoaWNzUG9pbnQobV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7CiAgICAg
cHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50WihtX2FuY2hvclBvaW50LnooKSk7CiAKICAg
ICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CkBAIC01NzQsOSArNTc0LDkgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUAogICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsK
ICAgICAgICAgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKTsKIAotICAgICAgICBtX2xheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdo
dCgpIC8gMi4wZikpOworICAgICAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50
KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdodCgpIC8gMi4wZikpOwogCi0gICAg
ICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOworICAg
ICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50KDAuNWYsIDAuNWYpKTsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1fbGF5ZXIt
PnNldFRyYW5zZm9ybShpZGVudGl0eSk7CiAgICAgICAgIApAQCAtNjQxLDcgKzY0MSw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW4KICAgICBpZiAoIW1fY29udGVu
dHNMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKSk7
CisgICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KG1fY29udGVu
dHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKSk7CiAgICAgbV9jb250ZW50c0xheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2NvbnRlbnRzUmVjdC5o
ZWlnaHQoKSkpOwogfQogCkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldHVwQ29udGVudAogICAgIGlmIChjb250ZW50c0xheWVyKSB7CiAgICAgICAgIG1f
Y29udGVudHNMYXllciA9IGNvbnRlbnRzTGF5ZXI7CiAKLSAgICAgICAgbV9jb250ZW50c0xheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgbV9jb250ZW50c0xh
eWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50KDAsIDApKTsKIAogICAgICAgICAvLyBJ
bnNlcnQgdGhlIGNvbnRlbnQgbGF5ZXIgZmlyc3QuIFZpZGVvIGVsZW1lbnRzIHJlcXVpcmUgdGhp
cywgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAgLy8gc2hhZG93IGNvbnRlbnQgdGhhdCBtdXN0
IGRpc3BsYXkgaW4gZnJvbnQgb2YgdGhlIHZpZGVvLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NM
YXllckNocm9taXVtLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDkgKzU2LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZy
b21QYXJlbnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVh
bCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogCiAgICAgdmlydHVhbCB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCkBAIC04MCw3ICs4
MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDE4ICsxOTAsMTggQEAg
dm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29uc3QgSW50UwogICAgIG1fYm91bmRzID0g
c2l6ZTsKIAogICAgIGlmIChmaXJzdFJlc2l6ZSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KEZs
b2F0UmVjdCgwLCAwLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOworICAg
ICAgICBzZXROZWVkc0Rpc3BsYXkoR3JhcGhpY3NSZWN0KDAsIDAsIGJvdW5kcygpLndpZHRoKCks
IGJvdW5kcygpLmhlaWdodCgpKSk7CiAgICAgZWxzZQogICAgICAgICBzZXROZWVkc0NvbW1pdCgp
OwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIGlmIChyZWN0ID09IG1fZnJhbWUpCiAgICAgICByZXR1cm47CiAKICAgICBtX2Zy
YW1lID0gcmVjdDsKLSAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIGJvdW5kcygp
LndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CisgICAgc2V0TmVlZHNEaXNwbGF5KEdyYXBo
aWNzUmVjdCgwLCAwLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkpOwogfQog
CiBjb25zdCBMYXllckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBjb25zdApA
QCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25zdCBTdHJp
bmcKICAgICBtX25hbWUgPSBuYW1lOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRz
RGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEdyYXBoaWNzUmVjdCYgZGlydHlSZWN0KQogewogICAgIC8v
IFNpbXBseSBtYXJrIHRoZSBjb250ZW50cyBhcyBkaXJ0eS4gRm9yIG5vbi1yb290IGxheWVycywg
dGhlIGNhbGwgdG8KICAgICAvLyBzZXROZWVkc0NvbW1pdCB3aWxsIHNjaGVkdWxlIGEgZnJlc2gg
Y29tcG9zaXRpbmcgcGFzcy4KQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06
OnNldE5lZWRzRGlzcGxheShjb25zCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNw
bGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkpOworICAg
IG1fZGlydHlSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgbV9kaXJ0eVJl
Y3Quc2V0U2l6ZShib3VuZHMoKSk7CiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKICAgICBz
ZXROZWVkc0NvbW1pdCgpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5KCkKIAogdm9pZCBMYXllckNocm9taXVtOjpyZXNldE5lZWRzRGlzcGxh
eSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBtX2RpcnR5UmVjdCA9
IEdyYXBoaWNzUmVjdCgpOwogICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mKTsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQogCi0gICAgdm9pZCBzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5jaG9y
UG9pbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50KCkg
Y29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgR3JhcGhpY3NQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hv
clBvaW50OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgR3JhcGhpY3NQb2ludCBhbmNob3JQb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnQ7IH0KIAogICAgIHZvaWQgc2V0QW5jaG9y
UG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50
Wjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGZsb2F0IGFuY2hvclBvaW50WigpIGNvbnN0IHsg
cmV0dXJuIG1fYW5jaG9yUG9pbnRaOyB9CkBAIC05MSw4ICs5MSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENsZWFyc0NvbnRleHQoYm9vbCBjbGVhcnMpIHsgbV9jbGVhcnNDb250ZXh0ID0gY2xl
YXJzOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBjbGVhcnNDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9jbGVhcnNDb250ZXh0OyB9CiAKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7
IH0KKyAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIEdyYXBoaWNz
UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogICAgIHZvaWQgc2V0SGlk
ZGVuKGJvb2wgaGlkZGVuKSB7IG1faGlkZGVuID0gaGlkZGVuOyBzZXROZWVkc0NvbW1pdCgpOyB9
CiAgICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuOyB9CkBAIC0xMDcs
MTAgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgQ0NMYXllckltcGwqIG1hc2tEcmF3TGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX21hc2tMYXllciA/IG1fbWFza0xheWVyLT5jY0xheWVySW1wbCgpIDog
MDsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a0xheWVyLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJl
Y3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgR3JhcGhpY3NS
ZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KSB7fQotICAg
IGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBk
aXJ0eVJlY3QpIHt9CisgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2RpcnR5UmVjdDsgfQogICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIAog
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rpc3BsYXkp
IHsgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQpAQCAtMTIx
LDggKzEyMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYXF1ZShib29sIG9wYXF1ZSkgeyBt
X29wYXF1ZSA9IG9wYXF1ZTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgb3BhcXVlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIAotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0TmVlZHND
b21taXQoKTsgfQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwb3Np
dGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247ICBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAg
R3JhcGhpY3NQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAog
ICAgIHZvaWQgc2V0WlBvc2l0aW9uKGZsb2F0IHpQb3NpdGlvbikgeyBtX3pQb3NpdGlvbiA9IHpQ
b3NpdGlvbjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGZsb2F0IHpQb3NpdGlvbigpIGNvbnN0
IHsgIHJldHVybiBtX3pQb3NpdGlvbjsgfQpAQCAtMjA1LDcgKzIwNSw3IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gIkxheWVyQ2hyb21pdW0iOyB9CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRp
ZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IG1fZGly
dHlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVu
dHNEaXJ0eTsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX21hc2tMYXllcjsKQEAgLTI1
Miw4ICsyNTIsOCBAQCBwcml2YXRlOgogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50
U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKLSAgICBGbG9h
dFBvaW50IG1fcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OworICAgIEdy
YXBoaWNzUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IG1fYW5jaG9yUG9pbnQ7
CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9kZWJ1Z0JvcmRlckNv
bG9yOwogICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKQEAgLTI3MSw3ICsyNzEsNyBAQCBw
cml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CiAKLSAgICBGbG9hdFJlY3QgbV9m
cmFtZTsKKyAgICBHcmFwaGljc1JlY3QgbV9mcmFtZTsKIAogICAgIC8vIFJlcGxpY2EgbGF5ZXIg
dXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcmVwbGlj
YUxheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MCw3ICszOTAs
NyBAQCBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zCiAgICAgLy8gYXhp
cy1hbGlnbmVkKSwgYnV0IGlzIGEgcmVhc29uYWJsZSBmaWx0ZXIgb24gdGhlIHNwYWNlIHRvIGNv
bnNpZGVyLgogICAgIC8vIE5vbi1pbnZlcnRpYmxlIHRyYW5zZm9ybXMgd2lsbCBjcmVhdGUgYW4g
ZW1wdHkgcmVjdCBoZXJlLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1cmZhY2VU
b0xheWVyID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IHN1
cmZhY2VUb0xheWVyLnByb2plY3RRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobWluaW1hbFN1cmZh
Y2VSZWN0KSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBsYXllclJlY3Qg
PSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChGbG9hdFF1YWQoR3JhcGhpY3NSZWN0KG1pbmlt
YWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIGxheWVyUmVjdC5p
bnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwogICAgIHJldHVybiBsYXllclJlY3Q7CiB9CkBAIC02
NjcsMTIgKzY2NywxMiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2li
CiAgICAgcmVuZGVyTWF0cml4LnNjYWxlM2QobGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVy
LT5ib3VuZHMoKS5oZWlnaHQoKSwgMSk7CiAgICAgcmVuZGVyTWF0cml4ID0gbV9wcm9qZWN0aW9u
TWF0cml4ICogcmVuZGVyTWF0cml4OwogCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41LCAt
MC41LCAxLCAxKTsKLSAgICBGbG9hdFJlY3QgbWFwcGVkUmVjdCA9IHJlbmRlck1hdHJpeC5tYXBS
ZWN0KGxheWVyUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyUmVjdCgtMC41LCAtMC41LCAx
LCAxKTsKKyAgICBHcmFwaGljc1JlY3QgbWFwcGVkUmVjdCA9IHJlbmRlck1hdHJpeC5tYXBSZWN0
KGxheWVyUmVjdCk7CiAKICAgICAvLyBUaGUgbGF5ZXIgaXMgdmlzaWJsZSBpZiBpdCBpbnRlcnNl
Y3RzIGFueSBwYXJ0IG9mIGEgcmVjdGFuZ2xlIHdob3NlIG9yaWdpbgogICAgIC8vIGlzIGF0ICgt
MSwgLTEpIGFuZCBzaXplIGlzIDJ4Mi4KLSAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNlY3Rz
KEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKKyAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNl
Y3RzKEdyYXBoaWNzUmVjdCgtMSwgLTEsIDIsIDIpKTsKIH0KIAogLy8gUmVjdXJzaXZlbHkgd2Fs
a3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVz
IGFsbCB0aGUKQEAgLTY5OCw4ICs2OTgsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUHJvcGVyCiAgICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNvbXB1
dGVkIGFib3ZlCiAgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNj
YWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQogICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJv
dW5kcygpOwotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQo
KTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7CisgICAgR3Jh
cGhpY3NQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOworICAgIEdyYXBo
aWNzUG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKIAogICAgIC8vIE9mZnNldCBi
ZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9h
dCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgo
KTsKQEAgLTcxNiw3ICs3MTYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
UHJvcGVyCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJl
bnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0
aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBsYXllclJlY3QoLTAu
NSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhlaWdo
dCgpLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsK
KyAgICBHcmFwaGljc1JlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lkdGgo
KSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndpZHRo
KCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZExh
eWVyUmVjdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2UgdGhlIHdyb25nIHBsYWNl
IHRvIHNldCB0aGlzCkBAIC04NzYsMTAgKzg3NiwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5
ZXIgIT0gbV9yb290Q0NMYXllckltcGwuZ2V0KCkpIHsKICAgICAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0Q2VudGVyKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgc3VyZmFjZUNlbnRlciA9
IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAKICAgICAgICAgLy8gUmVzdHJp
Y3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4K
LSAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7CisgICAgICAgIEdy
YXBoaWNzU2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOwogCiAgICAgICAgIC8vIERvbid0
IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRu
J3QgYmUKICAgICAgICAgLy8gY2xpcHBlZC4KQEAgLTg4OCw3ICs4ODgsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgICAgICAgICAgICAgSW50UmVjdCBz
dXJmYWNlU2Npc3NvclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlUmVjdChyZW5kZXJTdXJmYWNlLT5t
X3NjaXNzb3JSZWN0LCByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LCByZW5kZXJTdXJmYWNl
LT5tX29yaWdpblRyYW5zZm9ybSk7CiAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9j
b250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJm
YWNlLT5jb250ZW50UmVjdENlbnRlcigpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjbGlw
cGVkU3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAg
ICAgICAgICAgICBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nID0gY2xpcHBlZFN1cmZhY2VDZW50
ZXIgLSBzdXJmYWNlQ2VudGVyOwogICAgICAgICB9CiAKQEAgLTEwNjUsMTMgKzEwNjUsMTMgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNvbWJpbmVkRHJhd01hdHJpeCA9IChsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpLm11bHRp
cGx5KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpIDogbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CiAg
ICAgCiAgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgewotICAgICAgICBGbG9hdFJlY3Qg
bGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsK
KyAgICAgICAgR3JhcGhpY3NSZWN0IGxheWVyUmVjdChHcmFwaGljc1BvaW50KDAsIDApLCBHcmFw
aGljc1NpemUobGF5ZXItPmJvdW5kcygpKSk7CiAgICAgICAgIEZsb2F0UXVhZCBtYXBwZWRMYXll
ciA9IGNvbWJpbmVkRHJhd01hdHJpeC5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKLSAg
ICAgICAgRmxvYXRTaXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVk
TGF5ZXIucDEoKTsKLSAgICAgICAgRmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIu
cDQoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jp
em9udGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOwotICAgICAgICBG
bG9hdFBvaW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0
KCksIDApOwotICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7
CisgICAgICAgIEdyYXBoaWNzU2l6ZSBob3Jpem9udGFsRGlyID0gbWFwcGVkTGF5ZXIucDIoKSAt
IG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSB2ZXJ0aWNhbERpciA9IG1h
cHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgICAgICBHcmFwaGljc1BvaW50
M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAw
KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZl
cnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHpBeGlzID0g
eEF4aXMuY3Jvc3MoeUF4aXMpOwogICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVk
ZWYgRmxvYXRQb2ludDNEIEVkZ2U7Cit0eXBlZGVmIEdyYXBoaWNzUG9pbnQzRCBFZGdlOwogCiBQ
YXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxl
U2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQogewpAQCAtNDI5LDE4ICs0MjksMTggQEAg
dm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udAogCiBzdGF0aWMgYm9vbCBp
c0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgRmxvYXRQb2ludCB2MSA9IEZsb2F0
UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCisgICAgR3JhcGhpY3NQb2ludCB2
MSA9IEdyYXBoaWNzUG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEoKS55KCkpOwot
ICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBxdWFkLnAyKCku
eCgpLAorICAgIEdyYXBoaWNzUG9pbnQgdjIgPSBHcmFwaGljc1BvaW50KHF1YWQucDMoKS54KCkg
LSBxdWFkLnAyKCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWQucDMo
KS55KCkgLSBxdWFkLnAyKCkueSgpKTsKICAgICByZXR1cm4gKHYxLngoKSAqIHYyLnkoKSAtIHYx
LnkoKSAqIHYyLngoKSkgPCAwOwogfQogCi1zdGF0aWMgRWRnZSBjb21wdXRlRWRnZShjb25zdCBG
bG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQorc3RhdGljIEVk
Z2UgY29tcHV0ZUVkZ2UoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcSwgZmxvYXQgc2lnbikKIHsKICAgICBBU1NFUlQocCAhPSBxKTsKIAotICAgIEZsb2F0UG9p
bnQgdGFuZ2VudChwLnkoKSAtIHEueSgpLCBxLngoKSAtIHAueCgpKTsKKyAgICBHcmFwaGljc1Bv
aW50IHRhbmdlbnQocC55KCkgLSBxLnkoKSwgcS54KCkgLSBwLngoKSk7CiAgICAgZmxvYXQgc2Nh
bGUgPSBzaWduIC8gdGFuZ2VudC5sZW5ndGgoKTsKICAgICBmbG9hdCBjcm9zczIgPSBwLngoKSAq
IHEueSgpIC0gcS54KCkgKiBwLnkoKTsKIApAQCAtNDQ5LDkgKzQ0OSw5IEBAIHN0YXRpYyBFZGdl
IGNvbXB1dGVFZGdlKGNvbnN0IEZsb2F0UG9pbnQKICAgICAgICAgICAgICAgICBjcm9zczIgKiBz
Y2FsZSk7CiB9CiAKLXN0YXRpYyBGbG9hdFBvaW50IGludGVyc2VjdChjb25zdCBFZGdlJiBhLCBj
b25zdCBFZGdlJiBiKQorc3RhdGljIEdyYXBoaWNzUG9pbnQgaW50ZXJzZWN0KGNvbnN0IEVkZ2Um
IGEsIGNvbnN0IEVkZ2UmIGIpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoCisgICAgcmV0dXJu
IEdyYXBoaWNzUG9pbnQoCiAgICAgICAgIChhLnkoKSAqIGIueigpIC0gYi55KCkgKiBhLnooKSkg
LyAoYS54KCkgKiBiLnkoKSAtIGIueCgpICogYS55KCkpLAogICAgICAgICAoYS54KCkgKiBiLnoo
KSAtIGIueCgpICogYS56KCkpIC8gKGIueCgpICogYS55KCkgLSBhLngoKSAqIGIueSgpKSk7CiB9
CkBAIC01MTgsOCArNTE4LDggQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXdUaWxlcyhj
b25zdAogICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsaW5nRGF0YS50aWxlQm91
bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgoMCwgaikpOwogICAgICAgICAgICAgdGlsZVJlY3Qu
bW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKIAotICAgICAg
ICAgICAgRmxvYXRQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7Ci0g
ICAgICAgICAgICBGbG9hdFBvaW50IHAyKHRpbGVSZWN0LngoKSwgdGlsZVJlY3QubWF4WSgpKTsK
KyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxlUmVjdC5t
YXhZKCkpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwMih0aWxlUmVjdC54KCksIHRpbGVS
ZWN0Lm1heFkoKSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNl
LgogICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOwpAQCAtNTYyLDggKzU2Miw4
IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3VGlsZXMoY29uc3QKIAogICAgICAgICAg
ICAgRWRnZSBlZGdlWCA9IHJpZ2h0RWRnZTsKICAgICAgICAgICAgIGlmIChpIDwgKG1fdGlsaW5n
RGF0YS5udW1UaWxlc1goKSAtIDEpKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwMSh0
aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7CisgICAgICAgICAgICAgICAg
R3JhcGhpY3NQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7CisgICAgICAg
ICAgICAgICAgR3JhcGhpY3NQb2ludCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFko
KSk7CiAKICAgICAgICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFjZS4KICAg
ICAgICAgICAgICAgICBwMSA9IG1hdHJpeC5tYXBQb2ludChwMSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDExIEBAIExheWVyUmVuZGVyZXJDaHJvbWl1
bSogUmVuZGVyU3VyZmFjZUNocm8KICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bGF5ZXJSZW5k
ZXJlcigpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3YWJsZUNv
bnRlbnRSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRy
YXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBsb2NhbENvbnRlbnRS
ZWN0KC0wLjUgKiBtX2NvbnRlbnRSZWN0LndpZHRoKCksIC0wLjUgKiBtX2NvbnRlbnRSZWN0Lmhl
aWdodCgpLAorICAgIEdyYXBoaWNzUmVjdCBsb2NhbENvbnRlbnRSZWN0KC0wLjUgKiBtX2NvbnRl
bnRSZWN0LndpZHRoKCksIC0wLjUgKiBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVj
dC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBtX2RyYXdU
cmFuc2Zvcm0ubWFwUmVjdChsb2NhbENvbnRlbnRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgZHJh
d2FibGVDb250ZW50UmVjdCA9IG1fZHJhd1RyYW5zZm9ybS5tYXBSZWN0KGxvY2FsQ29udGVudFJl
Y3QpOwogICAgIGlmIChtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKICAgICAgICAgZHJh
d2FibGVDb250ZW50UmVjdC51bml0ZShtX3JlcGxpY2FEcmF3VHJhbnNmb3JtLm1hcFJlY3QobG9j
YWxDb250ZW50UmVjdCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2hhZGVyQ2hyb21p
dW0uaCIKQEAgLTU4LDExICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG5hbWUoKSBjb25z
dDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
IAotICAgIEZsb2F0UG9pbnQgY29udGVudFJlY3RDZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9h
dFJlY3QobV9jb250ZW50UmVjdCkuY2VudGVyKCk7IH0KKyAgICBHcmFwaGljc1BvaW50IGNvbnRl
bnRSZWN0Q2VudGVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KG1fY29udGVudFJlY3Qp
LmNlbnRlcigpOyB9CiAgICAgSW50UmVjdCBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudFJlY3Q7IH0KIAogICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0
aGUgUmVuZGVyU3VyZmFjZSBpbmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCi0gICAgRmxvYXRSZWN0
IGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgZHJhd2FibGVD
b250ZW50UmVjdCgpIGNvbnN0OwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVt
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0
YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBA
IC0xNjksOSArMTY5LDkgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQog
ICAgIFJlbGVhc2VEQygwLCBkYyk7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTaW1wbGVGb250
RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKIHsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBmbG9hdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFM
aW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiVkRNWFBhcnNlci5oIgpAQCAtMjEyLDkgKzIx
Miw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gcGxhdGZvcm1EYXRhKCkuaXNGaXhlZFBpdGNoKCk7CiB9CiAKLUZsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QK
K0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogfQogICAgIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjks
NyArMTI5LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0bwogICAg
IGlmIChmcmFtZS0+c3VyZmFjZVR5cGUoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OlR5cGVUZXh0
dXJlKSB7CiAgICAgICAgIHJlbGVhc2VDdXJyZW50RnJhbWUoKTsKICAgICAgICAgc2F2ZUN1cnJl
bnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxvYXRTaXplKCkp
OworICAgICAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEdyYXBoaWNzU2l6ZSgpKTsKICAgICAgICAg
bV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTEs
NyArMTUxLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0bwogICAg
ICAgICB1cGRhdGVUZXh0dXJlKGNvbnRleHQsIHRleHR1cmUuaWQsIHRleHR1cmUuc2l6ZSwgdGV4
dHVyZUZvcm1hdCwgZnJhbWUtPmRhdGEocGxhbmUpKTsKICAgICB9CiAKLSAgICBtX2RpcnR5UmVj
dC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEdyYXBoaWNz
U2l6ZSgpKTsKICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKIAogICAgIG1fcHJvdmlkZXIt
PnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDcgKzE1MCw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEcK
IAogICAgIGlmIChtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSkgewogICAgICAgICBjdHgtPnNldEZp
bGxDb2xvcihDb2xvcigwLCAwLCAwLCAxOTIpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAg
ICAgY3R4LT5maWxsUmVjdChGbG9hdFJlY3QoMCwgMCwgaHVkU2l6ZS53aWR0aCgpLCBodWRTaXpl
LmhlaWdodCgpKSk7CisgICAgICAgIGN0eC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIGh1
ZFNpemUud2lkdGgoKSwgaHVkU2l6ZS5oZWlnaHQoKSkpOwogICAgIH0KIAogICAgIGludCBmcHND
b3VudGVySGVpZ2h0ID0gbV9tZWRpdW1Gb250LT5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCkg
KyAyOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0ZQU0Nv
dW50ZXIoR3IKIAogICAgIC8vIERyYXcgYmFja2dyb3VuZC4KICAgICBjdHgtPnNldEZpbGxDb2xv
cihDb2xvcigwLCAwLCAwLCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjdHgtPmZp
bGxSZWN0KEZsb2F0UmVjdCgyLCB0b3AsIHRleHRXaWR0aCArIGdyYXBoV2lkdGgsIGhlaWdodCkp
OworICAgIGN0eC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDIsIHRvcCwgdGV4dFdpZHRoICsgZ3Jh
cGhXaWR0aCwgaGVpZ2h0KSk7CiAKICAgICAvLyBEcmF3IEZQUyB0ZXh0LgogICAgIGlmIChtX2Zp
bHRlcmVkRnJhbWVUaW1lKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGNvbnN0
IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkKIHsKICAgICAvLyBGb3JtIHRoZSBt
YXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUgbGF5ZXIn
cwogICAgIC8vIGJvdW5kcyBpbnRvIHRoZSB2aWV3IHNwYWNlLgotICAgIEZsb2F0UmVjdCBsYXll
clJlY3QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWlnaHQoKSwg
Ym91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCBs
YXllclJlY3QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWlnaHQo
KSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpOwogICAgIEludFJlY3QgbWFw
cGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJS
ZWN0KSk7CiAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogI2RlZmluZSBDQ0xheWVySW1wbF9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKQEAgLTgzLDggKzgzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhbnVwUmVz
b3VyY2VzKCk7CiAKLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgfQotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQor
ICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgYW5jaG9yUG9pbnQp
IHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CiAKICAgICB2
b2lkIHNldEFuY2hvclBvaW50WihmbG9hdCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQb2ludFog
PSBhbmNob3JQb2ludFo7IH0KICAgICBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdCB7IHJldHVy
biBtX2FuY2hvclBvaW50WjsgfQpAQCAtOTUsOCArOTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQogICAgIGZs
b2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHZvaWQgc2V0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0
aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBw
b3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIHZvaWQg
c2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkgeyBtX3ByZXNlcnZlczNEID0gcHJlc2Vy
dmVzM0Q7IH0KICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2
ZXMzRDsgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGF5ZXJJZDsK
IAogICAgIC8vIFByb3BlcnRpZXMgc3luY2hyb25pemVkIGZyb20gdGhlIGFzc29jaWF0ZWQgTGF5
ZXJDaHJvbWl1bS4KLSAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBtX2FuY2hvclBvaW50OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwogICAgIEludFNp
emUgbV9ib3VuZHM7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRCb3VuZHM7CkBAIC0xOTYsNyArMTk2
LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGZsb2F0IG1f
b3BhY2l0eTsKLSAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludCBt
X3Bvc2l0aW9uOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJh
bnNmb3JtOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclNvcnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clNvcnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQCBzdGF0aWMgV1RG
TG9nQ2hhbm5lbCBMb2dDQ0xheWVyU29ydGVyID0gCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjKQorc3RhdGljIGJvb2wgcG9pbnRJblRyaWFu
Z2xlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBjKQogewogICAgIC8vIEFsZ29yaXRobSBmcm9tIGh0dHA6Ly93d3cu
YmxhY2twYXduLmNvbS90ZXh0cy9wb2ludGlucG9seS9kZWZhdWx0Lmh0bWwKICAgICBmbG9hdCB4
MCA9IGMueCgpIC0gYS54KCk7CkBAIC03NSwxOCArNzUsMTggQEAgc3RhdGljIGJvb2wgcG9pbnRJ
blRyaWFuZ2xlKGNvbnN0IEZsb2F0UAogICAgIHJldHVybiAodSA+IDAuMGYpICYmICh2ID4gMC4w
ZikgJiYgKHUgKyB2IDwgMS4wZik7CiB9CiAKLWlubGluZSBzdGF0aWMgZmxvYXQgcGVycFByb2R1
Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBjb25zdCBGbG9hdFNpemUmIHYpCitpbmxpbmUgc3RhdGlj
IGZsb2F0IHBlcnBQcm9kdWN0KGNvbnN0IEdyYXBoaWNzU2l6ZSYgdSwgY29uc3QgR3JhcGhpY3NT
aXplJiB2KQogewogICAgIHJldHVybiB1LndpZHRoKCkgKiB2LmhlaWdodCgpIC0gdS5oZWlnaHQo
KSAqIHYud2lkdGgoKTsKIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBpbm5lclByb2R1Y3QoY29u
c3QgRmxvYXRTaXplJiB1LCBjb25zdCBGbG9hdFNpemUmIHYpCitpbmxpbmUgc3RhdGljIGZsb2F0
IGlubmVyUHJvZHVjdChjb25zdCBHcmFwaGljc1NpemUmIHUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
dikKIHsKICAgICByZXR1cm4gdS53aWR0aCgpICogdi53aWR0aCgpICsgdS5oZWlnaHQoKSAqIHYu
aGVpZ2h0KCk7CiB9CiAKIAotaW5saW5lIHN0YXRpYyBib29sIHBvaW50SW5Db2xpbmVhckVkZ2Uo
Y29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2lu
dCYgYikKK2lubGluZSBzdGF0aWMgYm9vbCBwb2ludEluQ29saW5lYXJFZGdlKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGIpCiB7CiAgICAgLy8gaWYgYWIgaXMgbm90IHZlcnRpY2FsLgogICAgIGlmIChhLngoKSAhPSBi
LngoKSkKQEAgLTk3LDExICs5NywxMSBAQCBpbmxpbmUgc3RhdGljIGJvb2wgcG9pbnRJbkNvbGlu
ZWFyRWRnZShjCiAKIC8vIFRlc3RzIGlmIHR3byBlZGdlcyBkZWZpbmVkIGJ5IHRoZWlyIGVuZHBv
aW50cyAoYSxiKSBhbmQgKGMsZCkgaW50ZXJzZWN0LiBSZXR1cm5zIHRydWUgYW5kIHRoZQogLy8g
cG9pbnQgb2YgaW50ZXJzZWN0aW9uIGlmIHRoZXkgZG8gYW5kIGZhbHNlIG90aGVyd2lzZS4KLXN0
YXRpYyBib29sIGVkZ2VFZGdlVGVzdChjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBv
aW50JiBiLCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBGbG9hdFBvaW50JiBkLCBGbG9hdFBv
aW50JiByKQorc3RhdGljIGJvb2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGQsIEdyYXBoaWNzUG9pbnQmIHIpCiB7Ci0gICAgRmxvYXRTaXplIHUgPSBi
IC0gYTsKLSAgICBGbG9hdFNpemUgdiA9IGQgLSBjOwotICAgIEZsb2F0U2l6ZSB3ID0gYSAtIGM7
CisgICAgR3JhcGhpY3NTaXplIHUgPSBiIC0gYTsKKyAgICBHcmFwaGljc1NpemUgdiA9IGQgLSBj
OworICAgIEdyYXBoaWNzU2l6ZSB3ID0gYSAtIGM7CiAKICAgICBmbG9hdCBkZW5vbSA9IHBlcnBQ
cm9kdWN0KHUsIHYpOwogCkBAIC0xNjEsOSArMTYxLDkgQEAgdm9pZCBDQ0xheWVyU29ydGVyOjpM
YXllckludGVyc2VjdG9yOjpnbwogCiAKIC8vIENoZWNrcyBpZiBzZWdtZW50IHBxIGludGVyc2Vj
dHMgYW55IG9mIHRoZSBzaWRlcyBvZiB0cmlhbmdsZSBhYmMuCi1ib29sIENDTGF5ZXJTb3J0ZXI6
OkxheWVySW50ZXJzZWN0b3I6OmVkZ2VUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2ludCYgcCwg
Y29uc3QgRmxvYXRQb2ludCYgcSwgY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2lu
dCYgYiwgY29uc3QgRmxvYXRQb2ludCYgYykKK2Jvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRl
cnNlY3Rvcjo6ZWRnZVRyaWFuZ2xlVGVzdChjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBH
cmFwaGljc1BvaW50JiBxLCBjb25zdCBHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBiLCBjb25zdCBHcmFwaGljc1BvaW50JiBjKQogewotICAgIEZsb2F0UG9pbnQgcjsKKyAg
ICBHcmFwaGljc1BvaW50IHI7CiAgICAgaWYgKChlZGdlRWRnZVRlc3QocCwgcSwgYSwgYiwgcikg
JiYgY2hlY2taRGlmZihyKSkKICAgICAgICAgfHwgKGVkZ2VFZGdlVGVzdChwLCBxLCBhLCBjLCBy
KSAmJiBjaGVja1pEaWZmKHIpKQogICAgICAgICB8fCAoZWRnZUVkZ2VUZXN0KHAsIHEsIGIsIGMs
IHIpICYmIGNoZWNrWkRpZmYocikpKQpAQCAtMTczLDcgKzE3Myw3IEBAIGJvb2wgQ0NMYXllclNv
cnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6ZWQKIH0KIAogLy8gQ2hlY2tzIGlmIHR3byBjby1wbGFu
YXIgdHJpYW5nbGVzIGludGVyc2VjdC4KLWJvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNl
Y3Rvcjo6dHJpYW5nbGVUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2ludCYgYTEsIGNvbnN0IEZs
b2F0UG9pbnQmIGIxLCBjb25zdCBGbG9hdFBvaW50JiBjMSwgY29uc3QgRmxvYXRQb2ludCYgYTIs
IGNvbnN0IEZsb2F0UG9pbnQmIGIyLCBjb25zdCBGbG9hdFBvaW50JiBjMikKK2Jvb2wgQ0NMYXll
clNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6dHJpYW5nbGVUcmlhbmdsZVRlc3QoY29uc3QgR3Jh
cGhpY3NQb2ludCYgYTEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIxLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBjMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYTIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIy
LCBjb25zdCBHcmFwaGljc1BvaW50JiBjMikKIHsKICAgICAvLyBDaGVjayBhbGwgZWRnZXMgb2Yg
Zmlyc3QgdHJpYW5nbGUgd2l0aCBlZGdlcyBvZiB0aGUgc2Vjb25kIG9uZS4KICAgICBpZiAoZWRn
ZVRyaWFuZ2xlVGVzdChhMSwgYjEsIGEyLCBiMiwgYzIpCkBAIC0yMDIsNyArMjAyLDcgQEAgYm9v
bCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjp0cgogLy8gbGF5ZXJzLiBJZiB0aGUg
dmFsdWUgb2YgZGlmZmVyZW5jZSBpcyBoaWdoZXIgdGhhbiBvdXIgZWFybHkgZXhpdCB0aHJlc2hv
bGQgdGhlbgogLy8gaXQgbWVhbnMgdGhhdCB0aGUgeiBkaWZmZXJlbmNlIGlzIGNvbmNsdXNpdmUg
ZW5vdWdoIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjawogLy8gb3RoZXIgaW50ZXJzZWN0aW9u
IHBvaW50cy4KLWJvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6Y2hlY2taRGlm
Zihjb25zdCBGbG9hdFBvaW50JiBwKQorYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2Vj
dG9yOjpjaGVja1pEaWZmKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgZmxvYXQgemEg
PSBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQobm9kZUEsIHApOwogICAgIGZsb2F0IHpiID0gbGF5
ZXJaRnJvbVByb2plY3RlZFBvaW50KG5vZGVCLCBwKTsKQEAgLTIyNSwxMCArMjI1LDEwIEBAIGJv
b2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6Y2gKIC8vIHRvIHBvaW50IHAgd2hp
Y2ggbGllcyBvbiB0aGUgeiA9IDAgcGxhbmUuIEl0IGRvZXMgaXQgYnkgY29tcHV0aW5nIHRoZQog
Ly8gaW50ZXJzZWN0aW9uIG9mIGEgbGluZSBzdGFydGluZyBmcm9tIHAgYWxvbmcgdGhlIFogYXhp
cyBhbmQgdGhlIHBsYW5lCiAvLyBvZiB0aGUgbGF5ZXIuCi1mbG9hdCBDQ0xheWVyU29ydGVyOjpM
YXllckludGVyc2VjdG9yOjpsYXllclpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiBsYXll
ciwgY29uc3QgRmxvYXRQb2ludCYgcCkKK2Zsb2F0IENDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJz
ZWN0b3I6OmxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChHcmFwaE5vZGUqIGxheWVyLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwKQogewotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCB6QXhpcygwLCAwLCAx
KTsKLSAgICBGbG9hdFBvaW50M0QgdyA9IEZsb2F0UG9pbnQzRChwLngoKSwgcC55KCksIDApIC0g
bGF5ZXItPm9yaWdpbjsKKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QgekF4aXMoMCwgMCwgMSk7
CisgICAgR3JhcGhpY3NQb2ludDNEIHcgPSBHcmFwaGljc1BvaW50M0QocC54KCksIHAueSgpLCAw
KSAtIGxheWVyLT5vcmlnaW47CiAKICAgICBmbG9hdCBkID0gbGF5ZXItPm5vcm1hbC5kb3QoekF4
aXMpOwogICAgIGZsb2F0IG4gPSAtbGF5ZXItPm5vcm1hbC5kb3Qodyk7CkBAIC0yOTgsMTUgKzI5
OCwxNSBAQCB2b2lkIENDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoTm9kZXMoTGF5CiAgICAgICAg
ICAgICBsYXllckhlaWdodCA9IDAuNSAqIG5vZGUubGF5ZXItPmJvdW5kcygpLmhlaWdodCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRQb2ludDNEIGMxID0gZHJhd1RyYW5zZm9ybS5tYXBQ
b2ludChGbG9hdFBvaW50M0QoLWxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCBjMiA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxh
eWVyV2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBjMyA9IGRy
YXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxheWVyV2lkdGgsIC1sYXllckhlaWdo
dCwgMCkpOwotICAgICAgICBGbG9hdFBvaW50M0QgYzQgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50
KEZsb2F0UG9pbnQzRCgtbGF5ZXJXaWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQzRCBjMSA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoR3JhcGhpY3NQb2ludDNE
KC1sYXllcldpZHRoLCBsYXllckhlaWdodCwgMCkpOworICAgICAgICBHcmFwaGljc1BvaW50M0Qg
YzIgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEdyYXBoaWNzUG9pbnQzRChsYXllcldpZHRoLCBs
YXllckhlaWdodCwgMCkpOworICAgICAgICBHcmFwaGljc1BvaW50M0QgYzMgPSBkcmF3VHJhbnNm
b3JtLm1hcFBvaW50KEdyYXBoaWNzUG9pbnQzRChsYXllcldpZHRoLCAtbGF5ZXJIZWlnaHQsIDAp
KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGM0ID0gZHJhd1RyYW5zZm9ybS5tYXBQb2ludChH
cmFwaGljc1BvaW50M0QoLWxheWVyV2lkdGgsIC1sYXllckhlaWdodCwgMCkpOwogICAgICAgICBu
b2RlLm5vcm1hbCA9IChjMiAtIGMxKS5jcm9zcyhjMyAtIGMxKTsKLSAgICAgICAgbm9kZS5jMSA9
IEZsb2F0UG9pbnQoYzEueCgpLCBjMS55KCkpOwotICAgICAgICBub2RlLmMyID0gRmxvYXRQb2lu
dChjMi54KCksIGMyLnkoKSk7Ci0gICAgICAgIG5vZGUuYzMgPSBGbG9hdFBvaW50KGMzLngoKSwg
YzMueSgpKTsKLSAgICAgICAgbm9kZS5jNCA9IEZsb2F0UG9pbnQoYzQueCgpLCBjNC55KCkpOwor
ICAgICAgICBub2RlLmMxID0gR3JhcGhpY3NQb2ludChjMS54KCksIGMxLnkoKSk7CisgICAgICAg
IG5vZGUuYzIgPSBHcmFwaGljc1BvaW50KGMyLngoKSwgYzIueSgpKTsKKyAgICAgICAgbm9kZS5j
MyA9IEdyYXBoaWNzUG9pbnQoYzMueCgpLCBjMy55KCkpOworICAgICAgICBub2RlLmM0ID0gR3Jh
cGhpY3NQb2ludChjNC54KCksIGM0LnkoKSk7CiAgICAgICAgIG5vZGUub3JpZ2luID0gYzE7CiAg
ICAgICAgIG5vZGUuYm91bmRpbmdCb3guZml0VG9Qb2ludHMobm9kZS5jMSwgbm9kZS5jMiwgbm9k
ZS5jMywgbm9kZS5jNCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJTb3J0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2lm
bmRlZiBDQ0xheWVyU29ydGVyX2gKICNkZWZpbmUgQ0NMYXllclNvcnRlcl9oCiAKLSNpbmNsdWRl
ICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CkBAIC00OCwxMCArNDgsMTAgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgR3Jh
cGhOb2RlIHsKICAgICAgICAgR3JhcGhOb2RlKENDTGF5ZXJJbXBsKiBjY2xheWVyKSA6IGxheWVy
KGNjbGF5ZXIpIHsgfTsKICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyOwotICAgICAgICBGbG9h
dFBvaW50IGMxLCBjMiwgYzMsIGM0OwotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsOwotICAg
ICAgICBGbG9hdFBvaW50M0Qgb3JpZ2luOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7
CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYzEsIGMyLCBjMywgYzQ7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQzRCBub3JtYWw7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBvcmlnaW47CisgICAgICAg
IEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveDsKICAgICAgICAgVmVjdG9yPEdyYXBoRWRnZSo+IGlu
Y29taW5nOwogICAgICAgICBWZWN0b3I8R3JhcGhFZGdlKj4gb3V0Z29pbmc7CiAgICAgfTsKQEAg
LTY4LDEyICs2OCwxMiBAQCBwcml2YXRlOgogCiAgICAgICAgIHZvaWQgZ28oKTsKIAotICAgICAg
ICBmbG9hdCBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiwgY29uc3QgRmxvYXRQ
b2ludCYpOwotICAgICAgICBib29sIHRyaWFuZ2xlVHJpYW5nbGVUZXN0KGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICBib29s
IGVkZ2VUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsK
LSAgICAgICAgYm9vbCBjaGVja1pEaWZmKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgZmxv
YXQgbGF5ZXJaRnJvbVByb2plY3RlZFBvaW50KEdyYXBoTm9kZSosIGNvbnN0IEdyYXBoaWNzUG9p
bnQmKTsKKyAgICAgICAgYm9vbCB0cmlhbmdsZVRyaWFuZ2xlVGVzdChjb25zdCBHcmFwaGljc1Bv
aW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBH
cmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
KTsKKyAgICAgICAgYm9vbCBlZGdlVHJpYW5nbGVUZXN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBj
b25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIGJvb2wgY2hlY2taRGlmZihj
b25zdCBHcmFwaGljc1BvaW50Jik7CiAKLSAgICAgICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb25Q
b2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBpbnRlcnNlY3Rpb25Qb2ludDsKICAgICAgICAg
R3JhcGhOb2RlKiBub2RlQTsKICAgICAgICAgR3JhcGhOb2RlKiBub2RlQjsKICAgICAgICAgZmxv
YXQgekRpZmY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQ2x1dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNz
TGF5ZXJDbHV0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9Gb250RWZs
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvRm9udEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBj
b25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywg
Y29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8g
Ki8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNv
bnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgR3JhcGhpY3NQb2ludCYgLyogcG9p
bnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KQEAgLTY3LDEwICs2NywxMCBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4CiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQsIGludCwgaW50KSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGlu
dCwgaW50LCBpbnQpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NMYXllckVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzTGF5ZXJFZmwuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0xheWVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJFZmw6OnNldE5lZWRzRGlzcGxheSgpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyRWZsOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NMYXllckVmbDo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0xheWVyRWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzTGF5ZXJFZmwuaAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NMYXllckVmbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HcmFw
aGljc0xheWVyRWZsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJGRUJs
ZW5kLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KCkKICAgICAgICAgcmV0
dXJuOwogICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7CiAKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwg
LTEpOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIC0xLCAt
MSk7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X09WRVI6CiAgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjItPmFzSW1h
Z2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2
ZU1hdHJpeChGaWx0ZXIqIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBm
bG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpCisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCiAgICAgOiBGaWx0
ZXJFZmZlY3QoZmlsdGVyKQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBt
X2Rpdmlzb3IoZGl2aXNvcikKQEAgLTUyLDcgKzUyLDcgQEAgRkVDb252b2x2ZU1hdHJpeDo6RkVD
b252b2x2ZU1hdHJpeChGaWx0ZQogCiBQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29u
dm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVs
U2l6ZSwKICAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFy
Z2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYg
a2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+
JiBrZXJuZWxNYXRyaXgpCisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYga2VybmVsVW5pdExlbmd0
aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGZpbHRlciwga2Vy
bmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5p
dExlbmd0aCwKICAgICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CkBAIC0xMzEs
MTIgKzEzMSwxMiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKEVkZ2VNCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVs
VW5pdExlbmd0aCgpIGNvbnN0CitHcmFwaGljc1BvaW50IEZFQ29udm9sdmVNYXRyaXg6Omtlcm5l
bFVuaXRMZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5ndGg7IAog
fQogCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoY29uc3QgRmxv
YXRQb2ludCYga2VybmVsVW5pdExlbmd0aCkKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2Vy
bmVsVW5pdExlbmd0aChjb25zdCBHcmFwaGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoKQogewog
ICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGggPT0ga2VybmVsVW5pdExlbmd0aCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmIEVOQUJMRShG
SUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1LDcgKzQ1
LDcgQEAgY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNv
bnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyKiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAg
ICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiwKKyAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdl
TW9kZVR5cGUsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLAogICAgICAgICAgICAgYm9vbCwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYpOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7CkBAIC02
Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdDsK
ICAgICBib29sIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBGbG9hdFBvaW50IGtl
cm5lbFVuaXRMZW5ndGgoKSBjb25zdDsKLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5ndGgoY29u
c3QgRmxvYXRQb2ludCYpOworICAgIEdyYXBoaWNzUG9pbnQga2VybmVsVW5pdExlbmd0aCgpIGNv
bnN0OworICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBHcmFwaGljc1BvaW50Jik7
CiAKICAgICBib29sIHByZXNlcnZlQWxwaGEoKSBjb25zdDsKICAgICBib29sIHNldFByZXNlcnZl
QWxwaGEoYm9vbCk7CkBAIC05MCw3ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIEZF
Q29udm9sdmVNYXRyaXgoRmlsdGVyKiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKLSAg
ICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50
JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgICAgICAgICAgY29uc3QgSW50UG9p
bnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+Jik7CiAKICAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+CiAg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
LCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwpA
QCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9iaWFzOwogICAgIEludFBv
aW50IG1fdGFyZ2V0T2Zmc2V0OwogICAgIEVkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOwotICAgIEZs
b2F0UG9pbnQgbV9rZXJuZWxVbml0TGVuZ3RoOworICAgIEdyYXBoaWNzUG9pbnQgbV9rZXJuZWxV
bml0TGVuZ3RoOwogICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOwogICAgIFZlY3RvcjxmbG9hdD4g
bV9rZXJuZWxNYXRyaXg7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgdm9pZCBGRURyb3BTaGFk
b3c6OmRldGVybWluZUFic29sdXRlUGFpbgogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7CiAgICAgQVNTRVJUKGZpbHRlcik7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWlu
dFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpOworICAgIEdyYXBo
aWNzUmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50
UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0
ZVBhaW50UmVjdCk7CiAgICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0ZXItPmFw
cGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5
KSk7CiAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qp
OwogICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwpAQCAt
ODgsMTEgKzg4LDExIEBAIHZvaWQgRkVEcm9wU2hhZG93OjphcHBseSgpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRTaXpl
IGJsdXJSYWRpdXMoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3N0ZFgpLCBmaWx0ZXIt
PmFwcGx5VmVydGljYWxTY2FsZShtX3N0ZFkpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0KGZpbHRl
ci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxl
KG1fZHkpKTsKKyAgICBHcmFwaGljc1NpemUgYmx1clJhZGl1cyhmaWx0ZXItPmFwcGx5SG9yaXpv
bnRhbFNjYWxlKG1fc3RkWCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc3RkWSkpOwor
ICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXQoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX2R4
KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwogCi0gICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1Jl
Z2lvbik7CisgICAgR3JhcGhpY3NSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1JlY3QgZHJh
d2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJhd2luZ1JlZ2lvbldp
dGhPZmZzZXQubW92ZShvZmZzZXQpOwogCiAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0g
aW4tPmFzSW1hZ2VCdWZmZXIoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEZFRHJvcFNoYWRv
dzo6YXBwbHkoKQogICAgIHJlc3VsdEltYWdlLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNy
Y1BpeGVsQXJyYXkuZ2V0KCksIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2lu
dCgpKTsKIAogICAgIHJlc3VsdENvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICByZXN1bHRDb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1Jl
Y3QoR3JhcGhpY3NQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93
Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHJlc3VsdENvbnRleHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkcmF3aW5nUmVnaW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgRkVGbG9vZDo6YXBwbHkoKQogICAg
ICAgICByZXR1cm47CiAKICAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
Zmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCkpLCBjb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiB9
CiAKIHZvaWQgRkVGbG9vZDo6ZHVtcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIHZv
aWQgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUKIAogdm9pZCBGRUdhdXNzaWFu
Qmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAg
IEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0
ZVBhaW50UmVjdCgpOwogICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOwogCiAgICAgdW5zaWduZWQga2VybmVsU2l6ZVggPSAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBA
QCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjppbmxpbmVTZXRQaXhlbChpCiAgICAgICAgIGlmICht
X2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCiAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3IueigpIC8gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludDNEIGhhbGZ3YXlWZWN0b3Ig
PSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CiAgICAgICAgICAgICBoYWxmd2F5VmVjdG9yLnNl
dFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwog
ICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVu
Z3RoKCk7CiAgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCkBAIC0xOTMs
MTYgKzE5MywxNiBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjppbmxpbmVTZXRQaXhlbChpCiAg
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2Yo
aGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBtX3NwZWN1bGFyRXhwb25l
bnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1h
bFZlY3RvcjsKLSAgICAgICAgbm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRpY19jYXN0
PGZsb2F0Pihub3JtYWwyRFZlY3Rvci54KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotICAgICAg
ICBub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbDJE
VmVjdG9yLnkoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQz
RCBub3JtYWxWZWN0b3I7CisgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRYKGZhY3RvclggKiBzdGF0
aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG5vcm1hbDJEVmVjdG9yLngoKSkgKiBkYXRhLnN1cmZhY2VT
Y2FsZSk7CisgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRZKGZhY3RvclkgKiBzdGF0aWNfY2FzdDxH
cmFwaGljc1VuaXQ+KG5vcm1hbDJEVmVjdG9yLnkoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CiAg
ICAgICAgIG5vcm1hbFZlY3Rvci5zZXRaKDEpOwogICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JM
ZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7CiAKICAgICAgICAgaWYgKG1fbGlnaHRpbmdU
eXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKICAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhh
bGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgICAgICBHcmFw
aGljc1BvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvcjsKICAg
ICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVjdG9yLnooKSArIHBhaW50aW5n
RGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9y
TGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKICAgICAgICAgICAgIGlmIChtX3NwZWN1
bGFyRXhwb25lbnQgPT0gMSkKQEAgLTMxMCw3ICszMTAsNyBAQCBib29sIEZFTGlnaHRpbmc6OmRy
YXdMaWdodGluZyhCeXRlQXJyYXkqCiAgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3
aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0g
ICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKG1fbGlnaHRpbmdDb2xv
ci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5ibHVlKCkp
OworICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3RvciA9IEdyYXBoaWNzUG9pbnQzRChtX2xpZ2h0
aW5nQ29sb3IucmVkKCksIG1fbGlnaHRpbmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5nQ29sb3Iu
Ymx1ZSgpKTsKICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0
YSk7CiAKICAgICAvLyBUb3AvTGVmdCBjb3JuZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBmbG9h
dCBGRU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAogCiB2b2lkIEZFTW9ycGhvbG9neTo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBp
bnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgcGFp
bnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmlsdGVy
KiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBwYWludFJlY3QuaW5mbGF0ZVgoZmlsdGVy
LT5hcHBseUhvcml6b250YWxTY2FsZShtX3JhZGl1c1gpKTsKICAgICBwYWludFJlY3QuaW5mbGF0
ZVkoZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9yYWRpdXNZKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB2b2lk
IEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKIAogdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVj
dCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmlsdGVyKiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKICAgICBwYWludFJlY3QubW92ZShmaWx0ZXItPmFwcGx5SG9yaXpv
bnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAgICAg
cGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwpAQCAtODksNyArODksNyBAQCB2
b2lkIEZFT2Zmc2V0OjphcHBseSgpCiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgR3JhcGhpY3NSZWN0IGRy
YXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKICAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAgIGRyYXdp
bmdSZWdpb24ubW92ZShmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXIt
PmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+
ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRyYXdpbmdSZWdpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDkgKzYyLDkgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KCkKIAogICAgIC8vIFNvdXJj
ZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0
ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQogICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJ
bWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXph
dGlvbi4KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpbi0+bWF4RWZmZWN0UmVjdCgpOwotICAg
IEZsb2F0UG9pbnQgaW5NYXhFZmZlY3RMb2NhdGlvbiA9IHRpbGVSZWN0LmxvY2F0aW9uKCk7Ci0g
ICAgRmxvYXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1heEVmZmVjdFJlY3QoKS5sb2NhdGlv
bigpOworICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Cisg
ICAgR3JhcGhpY3NQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24o
KTsKKyAgICBHcmFwaGljc1BvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgp
LmxvY2F0aW9uKCk7CiAgICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0VHlwZVNvdXJjZUlucHV0KSB7CiAgICAgICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7CiAgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKQEAgLTg2
LDcgKzg2LDcgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KCkKICAgICBwYXR0ZXJuLT5zZXRQYXR0ZXJu
U3BhY2VUcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0
LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAg
IGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsy
MjUsNyBAQCBpbmxpbmUgdm9pZCBjaGVja05vaXNlKGludCYgbm9pc2VWYWx1ZSwgCiAgICAgICAg
IG5vaXNlVmFsdWUgLT0gbmV3VmFsdWUgLSAxOwogfQogCi1mbG9hdCBGRVR1cmJ1bGVuY2U6Om5v
aXNlMkQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBGbG9h
dFBvaW50JiBub2lzZVZlY3RvcikKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChpbnQgY2hh
bm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5v
aXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZSB7CiAgICAgICAgIGludCBub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlOwpAQCAtMjc2LDcgKzI3Niw3IEBAIGZsb2F0IEZFVHVyYnVsZW5jZTo6
bm9pc2UyRChpbnQgY2hhbm5lbCwKICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwg
YSwgYik7CiB9CiAKLXVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxl
bmNlVmFsdWVGb3JQb2ludChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgZmxvYXQg
dGlsZVdpZHRoID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUud2lkdGgoKTsKICAgICBBU1NFUlQo
dGlsZVdpZHRoID4gMCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgdW5zaWduZWQgY2hhciBGRVR1cmJ1
bGVuY2U6OmNhbGN1bGF0ZVR1cgogICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSBzX3Blcmxp
bk5vaXNlICsgcGFpbnRpbmdEYXRhLmhlaWdodDsKICAgICB9CiAgICAgZmxvYXQgdHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ID0gMDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50Lngo
KSAqIG1fYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1ZW5jeVkpOworICAg
IEdyYXBoaWNzUG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVlbmN5WCwg
cG9pbnQueSgpICogbV9iYXNlRnJlcXVlbmN5WSk7CiAgICAgZmxvYXQgcmF0aW8gPSAxOwogICAg
IGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsK
ICAgICAgICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDggKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgRkVUdXJidWxlbmNlKEZpbHRlciosIFR1cmJ1
bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwogCiAgICAgaW5saW5l
IHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIGZsb2F0IG5vaXNlMkQoaW50IGNo
YW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB1bnNpZ25lZCBj
aGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWludGlu
Z0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5l
bCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgIHVuc2lnbmVkIGNo
YXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5n
RGF0YSYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAgICBpbmxpbmUgdm9pZCBmaWxsUmVnaW9u
KEJ5dGVBcnJheSosIFBhaW50aW5nRGF0YSYsIGludCwgaW50KTsKIAogICAgIFR1cmJ1bGVuY2VU
eXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4
ICsyMSw4IEBACiAjZGVmaW5lIEZpbHRlcl9oCiAKICNpZiBFTkFCTEUoRklMVEVSUykKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQxLDI0ICs0MSwyNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IHNvdXJjZUlt
YWdlOyB9CiAgICAgICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291
cmNlSW1hZ2UuZ2V0KCk7IH0KIAotICAgICAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgICAgICB2b2lkIHNldEZp
bHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmls
dGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICAgICAgR3JhcGhpY3NTaXpl
IGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0K
KyAgICAgICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEdyYXBoaWNzU2l6ZSYgZmls
dGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9
CiAKICAgICAgICAgdmlydHVhbCBmbG9hdCBhcHBseUhvcml6b250YWxTY2FsZShmbG9hdCB2YWx1
ZSkgY29uc3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24ud2lkdGgoKTsgfQog
ICAgICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5VmVydGljYWxTY2FsZShmbG9hdCB2YWx1ZSkgY29u
c3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24uaGVpZ2h0KCk7IH0KICAgICAg
ICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0g
MDsKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsK
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9M
b2NhbFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KCk7
IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1BvaW50IG1hcEFic29sdXRlUG9pbnRUb0xvY2Fs
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQo
KTsgfQogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBj
b25zdCA9IDA7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1f
c291cmNlSW1hZ2U7Ci0gICAgICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CisgICAg
ICAgIEdyYXBoaWNzU2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgRmlsdGVyRWZmZWN0X2gKIAog
I2lmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9CeXRl
QXJyYXkuaD4KQEAgLTc2LDggKzc2LDggQEAgcHVibGljOgogICAgIEludFJlY3QgYWJzb2x1dGVQ
YWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlUGFpbnRSZWN0OyB9CiAgICAgdm9p
ZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkg
eyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KIAotICAgIEZsb2F0
UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0g
ICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkg
eyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9IAorICAgIEdyYXBoaWNzUmVjdCBt
YXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9CisgICAgdm9p
ZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBt
X21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9IAogCiAgICAgdmlydHVhbCB2b2lkIGFw
cGx5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCkgPSAwOwpAQCAtMTAzLDExICsxMDMs
MTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNI
ZWlnaHQ7IH0KICAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0
ID0gdmFsdWU7IH0KIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uOyB9CisgICAgR3JhcGhpY3NSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgdm9pZCBz
ZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb247IH0KIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29u
c3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RCb3Vu
ZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5k
YXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgR3JhcGhpY3NSZWN0IGVmZmVjdEJvdW5k
YXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICB2b2lkIHNl
dEVmZmVjdEJvdW5kYXJpZXMoY29uc3QgR3JhcGhpY3NSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7
IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KIAogICAgIEZpbHRlciog
ZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KIApAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUu
IEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3Jk
aW5hdGUgc3BhY2UuCiAgICAgLy8gVGhlIGFic29sdXRlIHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVy
IGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVjdC4KLSAgICBGbG9hdFJlY3QgbV9tYXhFZmZl
Y3RSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX21heEVmZmVjdFJlY3Q7CiAgICAgRmlsdGVyKiBt
X2ZpbHRlcjsKIAogcHJpdmF0ZToKQEAgLTE0MSwxMSArMTQxLDExIEBAIHByaXZhdGU6CiAKICAg
ICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhl
IFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KICAgICAvLyBU
aGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b247CisgICAgR3JhcGhpY3NSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwogCiAgICAg
Ly8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1lbnQuIElz
IG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKICAgICAvLyBmaWx0ZXIg
cHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFy
aWVzOworICAgIEdyYXBoaWNzUmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CiAgICAgYm9vbCBtX2hh
c1g7CiAgICAgYm9vbCBtX2hhc1k7CiAgICAgYm9vbCBtX2hhc1dpZHRoOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3Vy
Y2UuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNkZWZpbmUgTGlnaHRTb3VyY2VfaAogCiAjaWYgRU5BQkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAi
RmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00OSwx
MiArNDksMTIgQEAgcHVibGljOgogICAgIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSBmb2xsb3dpbmcg
c3RydWN0dXJlCiAgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CiAgICAgICAgIC8vIFNWR0ZFTGln
aHRpbmcgYWxzbyB1c2UgdGhlbQotICAgICAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0b3I7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCBjb2xvclZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNE
IGxpZ2h0VmVjdG9yOworICAgICAgICBHcmFwaGljc1BvaW50M0QgY29sb3JWZWN0b3I7CiAgICAg
ICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMK
LSAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAgICAgICAgRmxvYXRQb2lu
dDNEIHByaXZhdGVDb2xvclZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGRpcmVjdGlv
blZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHByaXZhdGVDb2xvclZlY3RvcjsKICAg
ICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwogICAgICAgICBmbG9hdCBjb25lRnVsbExpZ2h0
OwogICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIGJvb2wgUG9pbnRMaWdodFNvdXJjZTo6c2V0WihmbG9hdCB6KQogICAgIHJldHVy
biB0cnVlOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmxvYXRQb2ludDNEJiBwKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkKIHsKICAgICB0cyA8PCAi
eD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpIDw8ICIgej0iIDw8IHAueigpOwogICAgIHJl
dHVybiB0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBQb2ludExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3Qg
RmxvYXRQb2ludDNEJiBwb3NpdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludExpZ2h0
U291cmNlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbikKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9pbnRMaWdodFNvdXJjZShwb3NpdGlvbikpOwog
ICAgIH0KIAotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBib29sIHNldFgoZmxvYXQpOwogICAgIGJv
b2wgc2V0WShmbG9hdCk7CiAgICAgYm9vbCBzZXRaKGZsb2F0KTsKQEAgLTQ2LDEzICs0NiwxMyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291cmNlKGNv
bnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCisgICAgUG9pbnRMaWdodFNvdXJjZShjb25zdCBH
cmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKQogICAgICAgICA6IExpZ2h0U291cmNlKExTX1BPSU5U
KQogICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgewogICAgIH0KIAotICAgIEZs
b2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3Bvc2l0aW9uOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY29uc3QgQXRv
bWljU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0Tgogdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0
KCk7CisgICAgR3JhcGhpY3NSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0
KCk7CiAgICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRo
KCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQpAQCAtNjMsNyArNjMs
NyBAQCB2b2lkIFNvdXJjZUFscGhhOjphcHBseSgpCiAKICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1
ZSk7CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBpbWFnZVJlY3QoR3JhcGhpY3NQb2lu
dCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmZpbHRlckNvbnRleHQpOwogICAgIGZpbHRlckNvbnRl
eHQtPmNsaXBUb0ltYWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1hZ2UoKSwgaW1hZ2VSZWN0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWMKIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQogewogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0
IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0
IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgcGFpbnRSZWN0LnNj
YWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBi
b29sIFNwb3RMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdDb25lQW5nCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGbG9hdFBvaW50M0QmIHApCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKQogewogICAgIHRzIDw8ICJ4PSIgPDwg
cC54KCkgPDwgIiB5PSIgPDwgcC55KCkgPDwgIiB6PSIgPDwgcC56KCk7CiAgICAgcmV0dXJuIHRz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGln
aHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDE3ICszMCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3BvdExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludDNE
JiBwb3NpdGlvbiwKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNwb3RMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYg
cG9zaXRpb24sCisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgZGlyZWN0aW9uLCBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BvdExpZ2h0U291cmNlKHBvc2l0aW9uLCBkaXJlY3Rp
b24sIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5nQ29uZUFuZ2xlKSk7CiAgICAgfQogCi0gICAg
Y29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbjsgfQogICAgIGJvb2wgc2V0WChmbG9hdCk7CiAgICAgYm9vbCBzZXRZKGZsb2F0
KTsKICAgICBib29sIHNldFooZmxvYXQpOwotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1Bv
aW50M0QmIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgYm9v
bCBzZXRQb2ludHNBdFgoZmxvYXQpOwogICAgIGJvb2wgc2V0UG9pbnRzQXRZKGZsb2F0KTsKICAg
ICBib29sIHNldFBvaW50c0F0WihmbG9hdCk7CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIFNwb3RMaWdodFNvdXJjZShjb25zdCBGbG9hdFBvaW50
M0QmIHBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwKKyAgICBTcG90TGln
aHRTb3VyY2UoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgR3JhcGhpY3NQ
b2ludDNEJiBkaXJlY3Rpb24sCiAgICAgICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGxpbWl0aW5nQ29uZUFuZ2xlKQogICAgICAgICA6IExpZ2h0U291cmNlKExTX1NQT1QpCiAgICAg
ICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKQEAgLTY2LDggKzY2LDggQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Ci0gICAgRmxvYXRQb2lu
dDNEIG1fZGlyZWN0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEdy
YXBoaWNzUG9pbnQzRCBtX2RpcmVjdGlvbjsKIAogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVu
dDsKICAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2lt
cGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRD
YWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTQ0LDkgKzE0NCw5IEBA
IHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICBtX3RyZWF0QXNGaXhl
ZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7CiB9CiAKLUZsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK0dyYXBo
aWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29u
c3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogfQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlubkNsYXNzaWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xh
c3NpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE5ICszNiwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OmFwcHJveEVxdWFsOwogdXNpbmcg
TG9vcEJsaW5uTWF0aFV0aWxzOjpyb3VuZFRvWmVybzsKIAotTG9vcEJsaW5uQ2xhc3NpZmllcjo6
UmVzdWx0IExvb3BCbGlubkNsYXNzaWZpZXI6OmNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGMzKQorTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0IExvb3BCbGlubkNs
YXNzaWZpZXI6OmNsYXNzaWZ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGMzKQogewogICAgIC8vIENvbnN1bHQgdGhlIGNoYXB0ZXIgZm9yIHRoZSBkZWZpbml0
aW9ucyBvZiB0aGUgZm9sbG93aW5nCiAgICAgLy8gKHRlcnNlKSB2YXJpYWJsZSBuYW1lcy4gTm90
ZSB0aGF0IHRoZSBiMC4uYjMgY29vcmRpbmF0ZXMgYXJlCiAgICAgLy8gaG9tb2dlbmVvdXMsIHNv
IHRoZSAieiIgdmFsdWUgKGFjdHVhbGx5IHRoZSB3IGNvb3JkaW5hdGUpIG11c3QKICAgICAvLyBi
ZSAxLjAuCi0gICAgRmxvYXRQb2ludDNEIGIwKGMwLngoKSwgYzAueSgpLCAxLjBmKTsKLSAgICBG
bG9hdFBvaW50M0QgYjEoYzEueCgpLCBjMS55KCksIDEuMGYpOwotICAgIEZsb2F0UG9pbnQzRCBi
MihjMi54KCksIGMyLnkoKSwgMS4wZik7Ci0gICAgRmxvYXRQb2ludDNEIGIzKGMzLngoKSwgYzMu
eSgpLCAxLjBmKTsKKyAgICBHcmFwaGljc1BvaW50M0QgYjAoYzAueCgpLCBjMC55KCksIDEuMGYp
OworICAgIEdyYXBoaWNzUG9pbnQzRCBiMShjMS54KCksIGMxLnkoKSwgMS4wZik7CisgICAgR3Jh
cGhpY3NQb2ludDNEIGIyKGMyLngoKSwgYzIueSgpLCAxLjBmKTsKKyAgICBHcmFwaGljc1BvaW50
M0QgYjMoYzMueCgpLCBjMy55KCksIDEuMGYpOwogCiAgICAgLy8gQ29tcHV0ZSBhMS4uYTMuCiAg
ICAgZmxvYXQgYTEgPSBiMCAqIGIzLmNyb3NzKGIyKTsKQEAgLTY2LDcgKzY2LDcgQEAgTG9vcEJs
aW5uQ2xhc3NpZmllcjo6UmVzdWx0IExvb3BCbGlubkNsYQogICAgIC8vIHRoZSB2ZWN0b3IgZGVm
aW5lZCBieSAoZDEsIGQyLCBkMyksIHRoaXMgZml4ZXMgdGhlIHByb2JsZW0gb2YgdGhlCiAgICAg
Ly8gdGV4dHVyZSBjb29yZGluYXRlcyBnZXR0aW5nIHRvbyBsYXJnZSB3aXRob3V0IGFmZmVjdGlu
ZyB0aGUKICAgICAvLyBjbGFzc2lmaWNhdGlvbiByZXN1bHRzLgotICAgIEZsb2F0UG9pbnQzRCBu
ZChkMSwgZDIsIGQzKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbmQoZDEsIGQyLCBkMyk7CiAgICAg
bmQubm9ybWFsaXplKCk7CiAgICAgZDEgPSBuZC54KCk7CiAgICAgZDIgPSBuZC55KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5DbGFzc2lmaWVyLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
UG9pbnQ7CitjbGFzcyBHcmFwaGljc1BvaW50OwogCiAvLyBDbGFzc2lmaWVzIGN1YmljIGN1cnZl
cyBpbnRvIHNwZWNpZmljIHR5cGVzLgogY2xhc3MgTG9vcEJsaW5uQ2xhc3NpZmllciB7CkBAIC03
MCwxMCArNzAsMTAgQEAgcHVibGljOgogCiAgICAgLy8gQ2xhc3NpZmllcyB0aGUgZ2l2ZW4gY3Vi
aWMgYmV6aWVyIGN1cnZlIHN0YXJ0aW5nIGF0IGMwLCBlbmRpbmcKICAgICAvLyBhdCBjMywgYW5k
IGFmZmVjdGVkIGJ5IGNvbnRyb2wgcG9pbnRzIGMxIGFuZCBjMi4KLSAgICBzdGF0aWMgUmVzdWx0
IGNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGMzKTsKKyAgICBzdGF0aWMgUmVzdWx0IGNsYXNzaWZ5KGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYg
YzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBjMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMzKTsKIAog
cHJpdmF0ZToKICAgICAvLyBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5zdGFudGlh
dGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlu
bkxvY2FsVHJpYW5ndWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEwICs3MiwxMCBA
QCB2b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpUcmlhbmdsCiAgICAgLy8gYWx3YXlz
IHNwZWNpZmllZCBpbiBjb3VudGVyY2xvY2t3aXNlIG9yZGVyLiBUaGlzIG9yZGVycyB0aGUKICAg
ICAvLyB2ZXJ0aWNlcyBjYW5vbmljYWxseSB3aGVuIHdhbGtpbmcgdGhlIGludGVyaW9yIGVkZ2Vz
IGZyb20gdGhlCiAgICAgLy8gc3RhcnQgdG8gdGhlIGVuZCB2ZXJ0ZXguCi0gICAgRmxvYXRQb2lu
dDNEIHBvaW50MChtX3ZlcnRpY2VzWzBdLT54eUNvb3JkaW5hdGVzKCkpOwotICAgIEZsb2F0UG9p
bnQzRCBwb2ludDEobV92ZXJ0aWNlc1sxXS0+eHlDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFBv
aW50M0QgcG9pbnQyKG1fdmVydGljZXNbMl0tPnh5Q29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRQ
b2ludDNEIGNyb3NzUHJvZHVjdCA9IChwb2ludDEgLSBwb2ludDApLmNyb3NzKHBvaW50MiAtIHBv
aW50MCk7CisgICAgR3JhcGhpY3NQb2ludDNEIHBvaW50MChtX3ZlcnRpY2VzWzBdLT54eUNvb3Jk
aW5hdGVzKCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBwb2ludDEobV92ZXJ0aWNlc1sxXS0+eHlD
b29yZGluYXRlcygpKTsKKyAgICBHcmFwaGljc1BvaW50M0QgcG9pbnQyKG1fdmVydGljZXNbMl0t
Pnh5Q29vcmRpbmF0ZXMoKSk7CisgICAgR3JhcGhpY3NQb2ludDNEIGNyb3NzUHJvZHVjdCA9IChw
b2ludDEgLSBwb2ludDApLmNyb3NzKHBvaW50MiAtIHBvaW50MCk7CiAgICAgaWYgKGNyb3NzUHJv
ZHVjdC56KCkgPCAwKQogICAgICAgICBzdGQ6OnN3YXAobV92ZXJ0aWNlc1sxXSwgbV92ZXJ0aWNl
c1syXSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uTG9jYWxUcmlhbmd1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAog
I2lmbmRlZiBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcl9oCiAjZGVmaW5lIExvb3BCbGlubkxv
Y2FsVHJpYW5ndWxhdG9yX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJG
bG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSAiTG9vcEJsaW5uQ29uc3RhbnRzLmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTUx
LDEyICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXNldEZsYWdzKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB4eUNvb3JkaW5hdGVzKCkgY29uc3QKKyAg
ICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgeHlDb29yZGluYXRlcygpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBtX3h5Q29vcmRpbmF0ZXM7CiAgICAgICAgIH0KIAotICAg
ICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGtsbUNvb3JkaW5hdGVzKCkgY29uc3QKKyAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludDNEJiBrbG1Db29yZGluYXRlcygpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBtX2tsbUNvb3JkaW5hdGVzOwogICAgICAgICB9CkBAIC0xMDks
OSArMTA5LDkgQEAgcHVibGljOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gMkQgY29vcmRp
bmF0ZXMgb2YgdGhlIHZlcnRleCBpbiB0aGUgcGxhbmUuCi0gICAgICAgIEZsb2F0UG9pbnQgbV94
eUNvb3JkaW5hdGVzOworICAgICAgICBHcmFwaGljc1BvaW50IG1feHlDb29yZGluYXRlczsKICAg
ICAgICAgLy8gQ3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgcmVuZGVyaW5nIHRoZSBjdXJ2
ZS4KLSAgICAgICAgRmxvYXRQb2ludDNEIG1fa2xtQ29vcmRpbmF0ZXM7CisgICAgICAgIEdyYXBo
aWNzUG9pbnQzRCBtX2tsbUNvb3JkaW5hdGVzOwogCiAgICAgICAgIC8vIEZsYWdzIGZvciB3YWxr
aW5nIGZyb20gdGhlIHN0YXJ0IHZlcnRleCB0byB0aGUgZW5kIHZlcnRleC4KICAgICAgICAgYm9v
bCBtX2VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5NYXRoVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJMb29wQmxp
bm5NYXRoVXRpbHMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAKQEAgLTM5LDE4ICszOSwxOCBAQCBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxz
IHsKIG5hbWVzcGFjZSB7CiAKIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGxvY2FsIHRvIHRoaXMgZmls
ZS4KLWludCBvcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwMSwKLSAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwMykKK2ludCBvcmllbnRhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwMSwKKyAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwKKyAgICAgICAgICAgICAgICBjb25zdCBH
cmFwaGljc1BvaW50JiBwMykKIHsKICAgICBmbG9hdCBjcm9zc1Byb2R1Y3QgPSAocDIueSgpIC0g
cDEueSgpKSAqIChwMy54KCkgLSBwMi54KCkpIC0gKHAzLnkoKSAtIHAyLnkoKSkgKiAocDIueCgp
IC0gcDEueCgpKTsKICAgICByZXR1cm4gKGNyb3NzUHJvZHVjdCA8IDAuMGYpID8gLTEgOiAoKGNy
b3NzUHJvZHVjdCA+IDAuMGYpID8gMSA6IDApOwogfQogCi1ib29sIGVkZ2VFZGdlVGVzdChjb25z
dCBGbG9hdFNpemUmIHYwRGVsdGEsCi0gICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiB2MCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUwLAotICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdTEpCitib29sIGVkZ2VFZGdlVGVzdChjb25zdCBH
cmFwaGljc1NpemUmIHYwRGVsdGEsCisgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiB2MCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHUwLAorICAg
ICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgdTEpCiB7CiAgICAgLy8gVGhpcyBl
ZGdlIHRvIGVkZ2UgdGVzdCBpcyBiYXNlZCBvbiBGcmFubGluIEFudG9uaW8ncyBnZW06ICJGYXN0
ZXIKICAgICAvLyBMaW5lIFNlZ21lbnQgSW50ZXJzZWN0aW9uIiwgaW4gR3JhcGhpY3MgR2VtcyBJ
SUksIHBwLiAxOTktMjAyLgpAQCAtNzgsMTMgKzc4LDEzIEBAIGJvb2wgZWRnZUVkZ2VUZXN0KGNv
bnN0IEZsb2F0U2l6ZSYgdjBEZWwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZWRnZUFn
YWluc3RUcmlhbmdsZUVkZ2VzKGNvbnN0IEZsb2F0UG9pbnQmIHYwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdjEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB1MCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgdTIpCitib29sIGVkZ2VBZ2FpbnN0VHJpYW5nbGVFZGdlcyhj
b25zdCBHcmFwaGljc1BvaW50JiB2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgdTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiB1MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHUyKQogewotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHYxIC0gdjA7Cisg
ICAgR3JhcGhpY3NTaXplIGRlbHRhID0gdjEgLSB2MDsKICAgICAvLyBUZXN0IGVkZ2UgdTAsIHUx
IGFnYWluc3QgdjAsIHYxLgogICAgIGlmIChlZGdlRWRnZVRlc3QoZGVsdGEsIHYwLCB1MCwgdTEp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOCwxMiArMTE4LDEyIEBAIGZsb2F0IHJvdW5k
VG9aZXJvKGZsb2F0IHZhbCkKICAgICByZXR1cm4gdmFsOwogfQogCi1ib29sIGFwcHJveEVxdWFs
KGNvbnN0IEZsb2F0UG9pbnQmIHYwLCBjb25zdCBGbG9hdFBvaW50JiB2MSkKK2Jvb2wgYXBwcm94
RXF1YWwoY29uc3QgR3JhcGhpY3NQb2ludCYgdjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHYxKQog
ewogICAgIHJldHVybiAodjAgLSB2MSkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgPCBFcHNpbG9u
ICogRXBzaWxvbjsKIH0KIAotYm9vbCBhcHByb3hFcXVhbChjb25zdCBGbG9hdFBvaW50M0QmIHYw
LCBjb25zdCBGbG9hdFBvaW50M0QmIHYxKQorYm9vbCBhcHByb3hFcXVhbChjb25zdCBHcmFwaGlj
c1BvaW50M0QmIHYwLCBjb25zdCBHcmFwaGljc1BvaW50M0QmIHYxKQogewogICAgIHJldHVybiAo
djAgLSB2MSkubGVuZ3RoU3F1YXJlZCgpIDwgRXBzaWxvbiAqIEVwc2lsb247CiB9CkBAIC0xMzMs
MTkgKzEzMywxOSBAQCBib29sIGFwcHJveEVxdWFsKGZsb2F0IGYwLCBmbG9hdCBmMSkKICAgICBy
ZXR1cm4gZmFic2YoZjAgLSBmMSkgPCBFcHNpbG9uOwogfQogCi1ib29sIGxpbmVzSW50ZXJzZWN0
KGNvbnN0IEZsb2F0UG9pbnQmIHAxLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBxMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDIsCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHEyKQorYm9vbCBsaW5lc0ludGVyc2Vj
dChjb25zdCBHcmFwaGljc1BvaW50JiBwMSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcTEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBxMikKIHsKICAg
ICByZXR1cm4gKG9yaWVudGF0aW9uKHAxLCBxMSwgcDIpICE9IG9yaWVudGF0aW9uKHAxLCBxMSwg
cTIpCiAgICAgICAgICAgICAmJiBvcmllbnRhdGlvbihwMiwgcTIsIHAxKSAhPSBvcmllbnRhdGlv
bihwMiwgcTIsIHExKSk7CiB9CiAKLWJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYSwKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIsCi0gICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBjKQorYm9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiBhLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYiwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMpCiB7CiAgICAgLy8gQWxn
b3JpdGhtIGZyb20gaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L2Rl
ZmF1bHQuaHRtbAogICAgIGZsb2F0IHgwID0gYy54KCkgLSBhLngoKTsKQEAgLTE3MiwxMiArMTcy
LDEyIEBAIGJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UG9pbnQmIHAKICAgICByZXR1
cm4gKHUgPiAwLjBmKSAmJiAodiA+IDAuMGYpICYmICh1ICsgdiA8IDEuMGYpOwogfQogCi1ib29s
IHRyaWFuZ2xlc092ZXJsYXAoY29uc3QgRmxvYXRQb2ludCYgYTEsCi0gICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
YTIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjIsCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIpCitib29sIHRyaWFuZ2xlc092ZXJs
YXAoY29uc3QgR3JhcGhpY3NQb2ludCYgYTEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYjEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQ
b2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYTIs
CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYjIsCisgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIpCiB7CiAgICAgLy8gRGVyaXZl
ZCBmcm9tIGNvcGxhbmFyX3RyaV90cmkoKSBhdAogICAgIC8vIGh0dHA6Ly9qZ3QuYWtwZXRlcnMu
Y29tL3BhcGVycy9TaGVuSGVuZ1RhbmcwMy90cmlfdHJpLmh0bWwgLApAQCAtMjQzLDEzICsyNDMs
MTMgQEAgZmxvYXQgZXZhbHVhdGVDdWJpYyhmbG9hdCBjb250cm9sUG9pbnQwLAogfQogCiAvLyBF
dmFsdWF0ZXMgdGhlIHBvaW50IG9uIHRoZSBzb3VyY2UgY3ViaWMgc3BlY2lmaWVkIGJ5IHQsIDAg
PD0gdCA8PSAxLjAuCi1GbG9hdFBvaW50IGV2YWx1YXRlQ3ViaWNBdChjb25zdCBGbG9hdFBvaW50
IGN1YmljWzRdLCBmbG9hdCB0KQorR3JhcGhpY3NQb2ludCBldmFsdWF0ZUN1YmljQXQoY29uc3Qg
R3JhcGhpY3NQb2ludCBjdWJpY1s0XSwgZmxvYXQgdCkKIHsKLSAgICByZXR1cm4gRmxvYXRQb2lu
dChldmFsdWF0ZUN1YmljKGN1YmljWzBdLngoKSwgY3ViaWNbMV0ueCgpLCBjdWJpY1syXS54KCks
IGN1YmljWzNdLngoKSwgdCksCisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoZXZhbHVhdGVDdWJp
YyhjdWJpY1swXS54KCksIGN1YmljWzFdLngoKSwgY3ViaWNbMl0ueCgpLCBjdWJpY1szXS54KCks
IHQpLAogICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQ3ViaWMoY3ViaWNbMF0ueSgpLCBj
dWJpY1sxXS55KCksIGN1YmljWzJdLnkoKSwgY3ViaWNbM10ueSgpLCB0KSk7CiB9CiAKLWJvb2wg
eFJheUNyb3NzZXNNb25vdG9uaWNDdWJpYyhjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBGbG9hdFBv
aW50IGN1YmljWzRdLCBib29sJiBhbWJpZ3VvdXMpCitib29sIHhSYXlDcm9zc2VzTW9ub3Rvbmlj
Q3ViaWMoY29uc3QgWFJheSYgeFJheSwgY29uc3QgR3JhcGhpY3NQb2ludCBjdWJpY1s0XSwgYm9v
bCYgYW1iaWd1b3VzKQogewogICAgIGFtYmlndW91cyA9IGZhbHNlOwogCkBAIC0yOTIsNyArMjky
LDcgQEAgYm9vbCB4UmF5Q3Jvc3Nlc01vbm90b25pY0N1YmljKGNvbnN0IFhSYQogICAgIC8vIHNp
bmNlIHRoZXJlJ3Mgbm8gd2F5IHdlIGFyZSBnb2luZyB0byBnZXQgbW9yZSBwcmVjaXNpb24gYnkK
ICAgICAvLyBpdGVyYXRpbmcgbW9yZSB0aW1lcyB0aGFuIHRoYXQuCiAgICAgY29uc3QgaW50IE1h
eEl0ZXJhdGlvbnMgPSAyMzsKLSAgICBGbG9hdFBvaW50IGV2YWx1YXRlZFBvaW50OworICAgIEdy
YXBoaWNzUG9pbnQgZXZhbHVhdGVkUG9pbnQ7CiAgICAgaW50IGl0ZXIgPSAwOwogICAgIGZsb2F0
IHVwcGVyVDsKICAgICBmbG9hdCBsb3dlclQ7CkBAIC00MTksNyArNDE5LDcgQEAgYm9vbCBpc1Vu
aXRJbnRlcnZhbChmbG9hdCB4KQogfQogI2VuZGlmCiAKLXZvaWQgY2hvcEN1YmljQXRUVmFsdWVz
KGNvbnN0IEZsb2F0UG9pbnQgc3JjWzRdLCBGbG9hdFBvaW50IGRzdFtdLCBjb25zdCBmbG9hdCB0
VmFsdWVzW10sIGludCByb290cykKK3ZvaWQgY2hvcEN1YmljQXRUVmFsdWVzKGNvbnN0IEdyYXBo
aWNzUG9pbnQgc3JjWzRdLCBHcmFwaGljc1BvaW50IGRzdFtdLCBjb25zdCBmbG9hdCB0VmFsdWVz
W10sIGludCByb290cykKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByb290cyAtIDE7ICsraSkgewpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgY2hvcEN1YmljQXRU
VmFsdWVzKGNvbnN0IEZsb2F0UG9pbnQKICAgICB9CiAKICAgICBmbG9hdCB0ID0gdFZhbHVlc1sw
XTsKLSAgICBGbG9hdFBvaW50IHRtcFs0XTsKKyAgICBHcmFwaGljc1BvaW50IHRtcFs0XTsKICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKICAgICAgICAgdG1wW2pdID0gc3JjW2pdOwog
CkBAIC00NjAsMTMgKzQ2MCwxMyBAQCB2b2lkIGNob3BDdWJpY0F0VFZhbHVlcyhjb25zdCBGbG9h
dFBvaW50CiAgICAgfQogfQogCi12b2lkIGZsYXR0ZW5Eb3VibGVDdWJpY1lFeHRyZW1hKEZsb2F0
UG9pbnQgY29vcmRzWzddKQordm9pZCBmbGF0dGVuRG91YmxlQ3ViaWNZRXh0cmVtYShHcmFwaGlj
c1BvaW50IGNvb3Jkc1s3XSkKIHsKICAgICBjb29yZHNbMl0uc2V0WShjb29yZHNbM10ueSgpKTsK
ICAgICBjb29yZHNbNF0uc2V0WShjb29yZHNbM10ueSgpKTsKIH0KIAotaW50IGNob3BDdWJpY0F0
WUV4dHJlbWEoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzEwXSkKK2lu
dCBjaG9wQ3ViaWNBdFlFeHRyZW1hKGNvbnN0IEdyYXBoaWNzUG9pbnQgc3JjWzRdLCBHcmFwaGlj
c1BvaW50IGRzdFsxMF0pCiB7CiAgICAgZmxvYXQgdFZhbHVlc1syXTsKICAgICBpbnQgcm9vdHMg
PSBmaW5kQ3ViaWNFeHRyZW1hKHNyY1swXS55KCksIHNyY1sxXS55KCksIHNyY1syXS55KCksIHNy
Y1szXS55KCksIHRWYWx1ZXMpOwpAQCAtNDg1LDcgKzQ4NSw3IEBAIGludCBjaG9wQ3ViaWNBdFlF
eHRyZW1hKGNvbnN0IEZsb2F0UG9pbnQKIAogLy8gUHVibGljIGN1YmljIG9wZXJhdGlvbnMuCiAK
LXZvaWQgY2hvcEN1YmljQXQoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0
WzddLCBmbG9hdCB0KQordm9pZCBjaG9wQ3ViaWNBdChjb25zdCBHcmFwaGljc1BvaW50IHNyY1s0
XSwgR3JhcGhpY3NQb2ludCBkc3RbN10sIGZsb2F0IHQpCiB7CiAgICAgQVNTRVJUKHQgPj0gMCAm
JiB0IDw9IDEpOwogCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBjaG9wQ3ViaWNBdChjb25zdCBG
bG9hdFBvaW50IHNyY1s0XQogCiAvLyBQdWJsaWMgWFJheSBxdWVyaWVzLgogCi1ib29sIHhSYXlD
cm9zc2VzTGluZShjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBGbG9hdFBvaW50IHB0c1syXSwgYm9v
bCYgYW1iaWd1b3VzKQorYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUoY29uc3QgWFJheSYgeFJheSwgY29u
c3QgR3JhcGhpY3NQb2ludCBwdHNbMl0sIGJvb2wmIGFtYmlndW91cykKIHsKICAgICBhbWJpZ3Vv
dXMgPSBmYWxzZTsKIApAQCAtNTQ1LDEzICs1NDUsMTMgQEAgYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUo
Y29uc3QgWFJheSYgeFJheSwgYwogICAgIHJldHVybiB4UmF5LngoKSA8PSB4OwogfQogCi1pbnQg
bnVtWFJheUNyb3NzaW5nc0ZvckN1YmljKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZsb2F0UG9p
bnQgY3ViaWNbNF0sIGJvb2wmIGFtYmlndW91cykKK2ludCBudW1YUmF5Q3Jvc3NpbmdzRm9yQ3Vi
aWMoY29uc3QgWFJheSYgeFJheSwgY29uc3QgR3JhcGhpY3NQb2ludCBjdWJpY1s0XSwgYm9vbCYg
YW1iaWd1b3VzKQogewogICAgIGludCBudW1Dcm9zc2luZ3MgPSAwOwotICAgIEZsb2F0UG9pbnQg
bW9ub3RvbmljQ3ViaWNzWzEwXTsKKyAgICBHcmFwaGljc1BvaW50IG1vbm90b25pY0N1Ymljc1sx
MF07CiAgICAgaW50IG51bU1vbm90b25pY0N1YmljcyA9IDEgKyBjaG9wQ3ViaWNBdFlFeHRyZW1h
KGN1YmljLCBtb25vdG9uaWNDdWJpY3MpOwogICAgIGFtYmlndW91cyA9IGZhbHNlOwotICAgIEZs
b2F0UG9pbnQqIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgPSAmbW9ub3RvbmljQ3ViaWNzWzBdOwor
ICAgIEdyYXBoaWNzUG9pbnQqIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgPSAmbW9ub3RvbmljQ3Vi
aWNzWzBdOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTW9ub3RvbmljQ3ViaWNzOyArK2kp
IHsKICAgICAgICAgaWYgKHhSYXlDcm9zc2VzTW9ub3RvbmljQ3ViaWMoeFJheSwgbW9ub3Rvbmlj
Q3ViaWNzUG9pbnRlciwgYW1iaWd1b3VzKSkKICAgICAgICAgICAgICsrbnVtQ3Jvc3NpbmdzOwpA
QCAtNTcwLDcgKzU3MCw3IEBAIGludCBudW1YUmF5Q3Jvc3NpbmdzRm9yQ3ViaWMoY29uc3QgWFJh
eSYKICAqIGluICJHcmFwaGljcyBHZW1zIElWIiwgQWNhZGVtaWMgUHJlc3MsIDE5OTQKICAqLwog
Ci1zdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21wYXJlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEp
CitzdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21wYXJlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVs
dGEpCiB7CiAgICAgcmV0dXJuIChkZWx0YS53aWR0aCgpID4gMCkgPyAtMSA6IC8qIHggY29vcmQg
ZGlmZiwgc2Vjb25kIHB0ID4gZmlyc3QgcHQgKi8KICAgICAgICAgICAgKGRlbHRhLndpZHRoKCkg
PCAwKSA/ICAxIDogLyogeCBjb29yZCBkaWZmLCBzZWNvbmQgcHQgPCBmaXJzdCBwdCAqLwpAQCAt
NTc5LDEyICs1NzksMTIgQEAgc3RhdGljIGlubGluZSBpbnQgY29udmV4Q29tcGFyZShjb25zdCBG
bAogICAgICAgICAgICAwOyAvKiBzZWNvbmQgcHQgZXF1YWxzIGZpcnN0IHBvaW50ICovCiB9CiAK
LXN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmV4Q3Jvc3MoY29uc3QgRmxvYXRTaXplJiBwLCBjb25z
dCBGbG9hdFNpemUmIHEpCitzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZleENyb3NzKGNvbnN0IEdy
YXBoaWNzU2l6ZSYgcCwgY29uc3QgR3JhcGhpY3NTaXplJiBxKQogewogICAgIHJldHVybiBwLndp
ZHRoKCkgKiBxLmhlaWdodCgpIC0gcC5oZWlnaHQoKSAqIHEud2lkdGgoKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIGNvbnZleENoZWNrVHJpcGxlKGNvbnN0IEZsb2F0U2l6ZSYgZGN1ciwgY29u
c3QgRmxvYXRTaXplJiBkcHJldiwgaW50KiBjdXJEaXIsIGludCogZGlyQ2hhbmdlcywgaW50KiBh
bmdsZVNpZ24pCitzdGF0aWMgaW5saW5lIGJvb2wgY29udmV4Q2hlY2tUcmlwbGUoY29uc3QgR3Jh
cGhpY3NTaXplJiBkY3VyLCBjb25zdCBHcmFwaGljc1NpemUmIGRwcmV2LCBpbnQqIGN1ckRpciwg
aW50KiBkaXJDaGFuZ2VzLCBpbnQqIGFuZ2xlU2lnbikKIHsKICAgICBpbnQgdGhpc0RpciA9IGNv
bnZleENvbXBhcmUoZGN1cik7CiAgICAgaWYgKHRoaXNEaXIgPT0gLSpjdXJEaXIpCkBAIC02MDMs
MTEgKzYwMywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udmV4Q2hlY2tUcmlwbGUoY29uCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgaXNDb252ZXgoY29uc3QgRmxvYXRQb2ludCogdmVy
dGljZXMsIGludCBuVmVydGljZXMpCitib29sIGlzQ29udmV4KGNvbnN0IEdyYXBoaWNzUG9pbnQq
IHZlcnRpY2VzLCBpbnQgblZlcnRpY2VzKQogewogICAgIGludCBkaXJDaGFuZ2VzID0gMCwgYW5n
bGVTaWduID0gMDsKLSAgICBGbG9hdFBvaW50IHNlY29uZCwgdGhpcmQ7Ci0gICAgRmxvYXRTaXpl
IGRwcmV2LCBkY3VyOworICAgIEdyYXBoaWNzUG9pbnQgc2Vjb25kLCB0aGlyZDsKKyAgICBHcmFw
aGljc1NpemUgZHByZXYsIGRjdXI7CiAKICAgICAvKiBHZXQgZGlmZmVyZW50IHBvaW50LCByZXR1
cm4gaWYgbGVzcyB0aGFuIDMgZGlmZiBwb2ludHMuICovCiAgICAgaWYgKG5WZXJ0aWNlcyA8IDMp
CkBAIC02MjQsNyArNjI0LDcgQEAgYm9vbCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0
aWNlcwogICAgICAgICBpZiAoaSA+PSBuVmVydGljZXMpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIEZsb2F0UG9pbnQgc2F2ZVNlY29uZCA9IHNlY29uZDsKKyAgICBHcmFw
aGljc1BvaW50IHNhdmVTZWNvbmQgPSBzZWNvbmQ7CiAgICAgaW50IGN1ckRpciA9IGNvbnZleENv
bXBhcmUoZHByZXYpOyAgICAgICAgLyogRmluZCBpbml0aWFsIGRpcmVjdGlvbiAqLwogICAgIHdo
aWxlIChpIDwgblZlcnRpY2VzKSB7CiAgICAgICAgIC8qIEdldCBkaWZmZXJlbnQgcG9pbnQsIGJy
ZWFrIGlmIG5vIG1vcmUgcG9pbnRzICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0aFV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5NYXRoVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lmbmRlZiBM
b29wQmxpbm5NYXRoVXRpbHNfaAogI2RlZmluZSBMb29wQmxpbm5NYXRoVXRpbHNfaAogCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRl
IDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDQ0ICszNiw0NCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzIHsKIAogZmxvYXQg
cm91bmRUb1plcm8oZmxvYXQgdmFsKTsKLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxvYXRQb2lu
dCYgdjAsIGNvbnN0IEZsb2F0UG9pbnQmIHYxKTsKLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxv
YXRQb2ludDNEJiB2MCwgY29uc3QgRmxvYXRQb2ludDNEJiB2MSk7Citib29sIGFwcHJveEVxdWFs
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHYwLCBjb25zdCBHcmFwaGljc1BvaW50JiB2MSk7Citib29s
IGFwcHJveEVxdWFsKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdjAsIGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgdjEpOwogYm9vbCBhcHByb3hFcXVhbChmbG9hdCBmMCwgZmxvYXQgZjEpOwogCiAvLyBE
ZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGxpbmUgc2VnbWVudCBiZXR3ZWVuIChwMSwgcTEpIGludGVy
c2VjdHMKIC8vIHRoYXQgYmV0d2VlbiAocDIsIHEyKS4KLWJvb2wgbGluZXNJbnRlcnNlY3QoY29u
c3QgRmxvYXRQb2ludCYgcDEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHExLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTIpOworYm9vbCBsaW5lc0ludGVyc2VjdChj
b25zdCBHcmFwaGljc1BvaW50JiBwMSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcTEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAy
LAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBxMik7CiAKIC8vIERl
dGVybWluZXMgd2hldGhlciAicG9pbnQiIGlzIGluc2lkZSB0aGUgMkQgdHJpYW5nbGUgZGVmaW5l
ZCBieQogLy8gdmVydGljZXMgYSwgYiwgYW5kIGMuIFRoaXMgdGVzdCBkZWZpbmVzIHRoYXQgcG9p
bnRzIGV4YWN0bHkgb24gYW4KIC8vIGVkZ2UgYXJlIG5vdCBjb25zaWRlcmVkIHRvIGJlIGluc2lk
ZSB0aGUgdHJpYW5nbGUuCi1ib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0gICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAotICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgYyk7Citib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGEsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBiLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYyk7CiAKIC8vIERldGVybWluZXMg
d2hldGhlciB0aGUgdHJpYW5nbGVzIGRlZmluZWQgYnkgdGhlIHBvaW50cyAoYTEsIGIxLCBjMSkK
IC8vIGFuZCAoYTIsIGIyLCBjMikgb3ZlcmxhcC4gVGhlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5j
dGlvbiBpcyB0aGF0CiAvLyBpZiB0aGUgdHdvIHRyaWFuZ2xlcyBvbmx5IHNoYXJlIGFuIGFkamFj
ZW50IGVkZ2Ugb3IgdmVydGV4LCB0aGV5CiAvLyBhcmUgbm90IGNvbnNpZGVyZWQgdG8gb3Zlcmxh
cC4KLWJvb2wgdHJpYW5nbGVzT3ZlcmxhcChjb25zdCBGbG9hdFBvaW50JiBhMSwKLSAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMSwKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBjMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBhMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMiwK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMik7Citib29sIHRyaWFu
Z2xlc092ZXJsYXAoY29uc3QgR3JhcGhpY3NQb2ludCYgYTEsCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYjEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQ
b2ludCYgYTIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYjIs
CisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIpOwogCiAvLyBH
aXZlbiBhIHNyYyBjdWJpYyBiZXppZXIsIGNob3BzIGl0IGF0IHRoZSBzcGVjaWZpZWQgdCB2YWx1
ZSwKIC8vIHdoZXJlIDAgPCB0IDwgMSwgYW5kIHJldHVybnMgdGhlIHR3byBuZXcgY3ViaWNzIGlu
IGRzdFswLi4zXQogLy8gYW5kIGRzdFszLi42XS4KLXZvaWQgY2hvcEN1YmljQXQoY29uc3QgRmxv
YXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzddLCBmbG9hdCB0KTsKK3ZvaWQgY2hvcEN1
YmljQXQoY29uc3QgR3JhcGhpY3NQb2ludCBzcmNbNF0sIEdyYXBoaWNzUG9pbnQgZHN0WzddLCBm
bG9hdCB0KTsKIAogLy8gIlgtUmF5IiBxdWVyaWVzLiBBbiBYUmF5IGlzIGEgaGFsZi1saW5lIG9y
aWdpbmF0aW5nIGF0IHRoZSBnaXZlbgogLy8gcG9pbnQgYW5kIGV4dGVuZGluZyB0byB4PStpbmZp
bml0eS4KLXR5cGVkZWYgRmxvYXRQb2ludCBYUmF5OwordHlwZWRlZiBHcmFwaGljc1BvaW50IFhS
YXk7CiAKIC8vIEdpdmVuIGFuIGFyYml0cmFyeSBjdWJpYyBiZXppZXIsIHJldHVybiB0aGUgbnVt
YmVyIG9mIHRpbWVzIGFuIFhSYXkKIC8vIGNyb3NzZXMgdGhlIGN1YmljLiBWYWxpZCByZXR1cm4g
dmFsdWVzIGFyZSBbMC4uM10uCkBAIC04OSw3ICs4OSw3IEBAIHR5cGVkZWYgRmxvYXRQb2ludCBY
UmF5OwogLy8gY29vcmRpbmF0ZXMgb3IgYXQgYSB0YW5nZW50IHBvaW50LCBpbmRpY2F0aW5nIHRo
YXQgYW5vdGhlciBxdWVyeSB5CiAvLyBjb29yZGluYXRlIGlzIHByZWZlcnJlZCBmb3Igcm9idXN0
bmVzcy4KIGludCBudW1YUmF5Q3Jvc3NpbmdzRm9yQ3ViaWMoY29uc3QgWFJheSYgeFJheSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCBjdWJpY1s0XSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCBjdWJpY1s0XSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgYW1iaWd1b3VzKTsKIAogLy8gR2l2
ZW4gYSBsaW5lIHNlZ21lbnQgZnJvbSBsaW5lRW5kcG9pbnRzWzBdIHRvIGxpbmVFbmRwb2ludHNb
MV0sIGFuZCBhbgpAQCAtOTgsMTEgKzk4LDExIEBAIGludCBudW1YUmF5Q3Jvc3NpbmdzRm9yQ3Vi
aWMoY29uc3QgWFJheSYKIC8vIGV4YWN0bHkgYXQgb25lIG9mIHRoZSBlbmRwb2ludHMnIHkgY29v
cmRpbmF0ZXMsIGluZGljYXRpbmcgdGhhdCBhbm90aGVyCiAvLyBxdWVyeSB5IGNvb3JkaW5hdGUg
aXMgcHJlZmVycmVkIGZvciByb2J1c3RuZXNzLgogYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUoY29uc3Qg
WFJheSYgeFJheSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQgbGluZUVu
ZHBvaW50c1syXSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQgbGlu
ZUVuZHBvaW50c1syXSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGFtYmlndW91cyk7CiAK
IAotYm9vbCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0aWNlcywgaW50IG5WZXJ0aWNl
cyk7Citib29sIGlzQ29udmV4KGNvbnN0IEdyYXBoaWNzUG9pbnQqIHZlcnRpY2VzLCBpbnQgblZl
cnRpY2VzKTsKIAogfSAvLyBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoUHJvY2Vzc29y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
TG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJMb29wQmxpbm5QYXRo
UHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkxvb3BCbGlubkNsYXNzaWZpZXIuaCIKICNpbmNsdWRlICJMb29wQmxp
bm5Db25zdGFudHMuaCIKICNpbmNsdWRlICJMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oIgpA
QCAtNjYsMTAgKzY2LDEwIEBAIHVzaW5nIExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRh
dGkKIG5hbWVzcGFjZSB7CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgdmFsdWVUb1N0cmluZyhj
b25zdCBGbG9hdFJlY3QmIGFyZykKK1N0cmluZyB2YWx1ZVRvU3RyaW5nKGNvbnN0IEdyYXBoaWNz
UmVjdCYgYXJnKQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFw
cGVuZCgiW0Zsb2F0UmVjdCB4PSIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJbR3JhcGhpY3NSZWN0
IHg9Iik7CiAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoYXJnLngoKSkpOwogICAg
IGJ1aWxkZXIuYXBwZW5kKCIgeT0iKTsKICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJl
cihhcmcueSgpKSk7CkBAIC0xNTEsMTAgKzE1MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gSW5pdGlh
bGl6ZXIgZm9yIGN1YmljIGN1cnZlIHNlZ21lbnRzLgogICAgIHZvaWQgc2V0dXAoUE9EQXJlbmEq
IGFyZW5hLAogICAgICAgICAgICAgICAgQ29udG91ciogY29udG91ciwKLSAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgY3AwLAotICAgICAgICAgICAgICAgRmxvYXRQb2ludCBjcDEsCi0gICAgICAg
ICAgICAgICBGbG9hdFBvaW50IGNwMiwKLSAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3AzKQor
ICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjcDAsCisgICAgICAgICAgICAgICBHcmFwaGlj
c1BvaW50IGNwMSwKKyAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgY3AyLAorICAgICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBjcDMpCiAgICAgewogICAgICAgICBtX2FyZW5hID0gYXJlbmE7
CiAgICAgICAgIG1fY29udG91ciA9IGNvbnRvdXI7CkBAIC0xNjksOCArMTY5LDggQEAgcHVibGlj
OgogICAgIC8vIEluaXRpYWxpemVyIGZvciBsaW5lIHNlZ21lbnRzLgogICAgIHZvaWQgc2V0dXAo
UE9EQXJlbmEqIGFyZW5hLAogICAgICAgICAgICAgICAgQ29udG91ciogY29udG91ciwKLSAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcDAsCi0gICAgICAgICAgICAgICBGbG9hdFBvaW50IHAxKQor
ICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwMCwKKyAgICAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgcDEpCiAgICAgewogICAgICAgICBtX2FyZW5hID0gYXJlbmE7CiAgICAgICAgIG1fY29u
dG91ciA9IGNvbnRvdXI7CkBAIC0xODMsNyArMTgzLDcgQEAgcHVibGljOgogICAgIEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogCiAgICAgLy8gUmV0dXJucyB0aGUgaSd0aCBj
b250cm9sIHBvaW50LCAwIDw9IGkgPCA0LgotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGdldFBvaW50
KGludCBpKQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGdldFBvaW50KGludCBpKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGkgPj0gMCAmJiBpIDwgNCk7CiAgICAgICAgIHJldHVybiBtX3BvaW50
c1tpXTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgLy8gU2VnbWVudC4KICAgICBT
ZWdtZW50KiBzdWJkaXZpZGUoZmxvYXQgcGFyYW0pCiAgICAgewotICAgICAgICBGbG9hdFBvaW50
IGRzdFs3XTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBkc3RbN107CiAgICAgICAgIGNob3BDdWJp
Y0F0KG1fcG9pbnRzLCBkc3QsIHBhcmFtKTsKICAgICAgICAgU2VnbWVudCogbGVmdCA9IG1fYXJl
bmEtPmFsbG9jYXRlT2JqZWN0PFNlZ21lbnQ+KCk7CiAgICAgICAgIFNlZ21lbnQqIHJpZ2h0ID0g
bV9hcmVuYS0+YWxsb2NhdGVPYmplY3Q8U2VnbWVudD4oKTsKQEAgLTIzNCw3ICsyMzQsNyBAQCBw
dWJsaWM6CiAgICAgLy8gcG9zc2libGUuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsZWZ0bW9z
dCBTZWdtZW50LgogICAgIFNlZ21lbnQqIHN1YmRpdmlkZSgpIHsgcmV0dXJuIHN1YmRpdmlkZSgw
LjVmKTsgfQogCi0gICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRpbmdCb3g7IH0KKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfQogCiAgICAgLy8gQ29tcHV0ZXMgdGhl
IG51bWJlciBvZiB0aW1lcyBhIHF1ZXJ5IGxpbmUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuCiAgICAg
Ly8gcG9pbnQgYW5kIGV4dGVuZGluZyB0byB4PStpbmZpbml0eSBjcm9zc2VzIHRoaXMgc2VnbWVu
dC4gT3V0Z29pbmcKQEAgLTI4OCwxMSArMjg4LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAv
LyBSZXR1cm5zIHRoZSBnaXZlbiBpbnRlcmlvciB2ZXJ0ZXgsIDAgPD0gaW5kZXggPCBudW1iZXJP
ZkludGVyaW9yVmVydGljZXMoKS4KLSAgICBGbG9hdFBvaW50IGdldEludGVyaW9yVmVydGV4KGlu
dCBpbmRleCkgY29uc3QKKyAgICBHcmFwaGljc1BvaW50IGdldEludGVyaW9yVmVydGV4KGludCBp
bmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmRleCA+PSAwICYmIGluZGV4IDwg
bnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCkpOwogICAgICAgICBpZiAobV9raW5kID09IEN1Ymlj
KSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHJlczsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9p
bnQgcmVzOwogICAgICAgICAgICAgaWYgKG1fdHJpYW5ndWxhdG9yKSB7CiAgICAgICAgICAgICAg
ICAgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OlZlcnRleCogdmVydGV4ID0gbV90cmlhbmd1
bGF0b3ItPmdldEludGVyaW9yVmVydGV4KGluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAodmVy
dGV4KQpAQCAtMzQzLDExICszNDMsMTEgQEAgcHVibGljOgogCiAgICAgUE9EQXJlbmEqIG1fYXJl
bmE7CiAgICAgS2luZCBtX2tpbmQ7Ci0gICAgRmxvYXRQb2ludCBtX3BvaW50c1s0XTsKKyAgICBH
cmFwaGljc1BvaW50IG1fcG9pbnRzWzRdOwogICAgIFNlZ21lbnQqIG1fcHJldjsKICAgICBTZWdt
ZW50KiBtX25leHQ7CiAgICAgQ29udG91ciogbV9jb250b3VyOwotICAgIEZsb2F0UmVjdCBtX2Jv
dW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX2JvdW5kaW5nQm94OwogICAgIExvb3BCbGlu
bkxvY2FsVHJpYW5ndWxhdG9yKiBtX3RyaWFuZ3VsYXRvcjsKICAgICBib29sIG1fbWFya2VkRm9y
U3ViZGl2aXNpb247CiB9OwpAQCAtNDMzLDcgKzQzMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGlz
T3JpZW50ZWRDb3VudGVyQ2xvY2t3aXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc09yaWVudGVkQ291
bnRlckNsb2Nrd2lzZTsgfQogICAgIHZvaWQgc2V0SXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2Uo
Ym9vbCBpc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZSkgeyBtX2lzT3JpZW50ZWRDb3VudGVyQ2xv
Y2t3aXNlID0gaXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2U7IH0KIAotICAgIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3goKQorICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3go
KQogICAgIHsKICAgICAgICAgaWYgKG1fYm91bmRpbmdCb3hEaXJ0eSkgewogICAgICAgICAgICAg
Ym9vbCBmaXJzdCA9IHRydWU7CkBAIC00NzMsNyArNDczLDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9pc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZTsKIAotICAgIEZsb2F0UmVjdCBtX2JvdW5k
aW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX2JvdW5kaW5nQm94OwogICAgIGJvb2wgbV9ib3Vu
ZGluZ0JveERpcnR5OwogCiAgICAgLy8gV2hpY2ggc2lkZSBvZiB0aGlzIGNvbnRvdXIgc2hvdWxk
IGJlIGZpbGxlZC4KQEAgLTU5Miw5ICs1OTIsOSBAQCB2b2lkIExvb3BCbGlublBhdGhQcm9jZXNz
b3I6OnByb2Nlc3MoY29uCiAjaWZkZWYgTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVHX0lOVEVS
SU9SX0VER0VTCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93IHRoZSBlbmQgdXNlciB0
aGUgaW50ZXJpb3IgZWRnZXMgYXMgd2VsbAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCBzZWctPm51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcygpOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnQgPSBzZWctPmdldEludGVy
aW9yVmVydGV4KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQg
dmVydCA9IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRHVwbGljYXRlIHByZXZpb3VzIHZlcnRleCB0byBiZSBhYmxlIHRvIGRyYXcgR0xf
TElORVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHByZXYgPSBzZWct
PmdldEludGVyaW9yVmVydGV4KGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
cmFwaGljc1BvaW50IHByZXYgPSBzZWctPmdldEludGVyaW9yVmVydGV4KGkgLSAxKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGRJbnRlcmlvckVkZ2VWZXJ0ZXgocHJldi54
KCksIHByZXYueSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGRJbnRl
cmlvckVkZ2VWZXJ0ZXgodmVydC54KCksIHZlcnQueSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTcxNiw3ICs3MTYsNyBAQCBWZWN0b3I8U2VnbWVudCo+IExvb3BCbGlublBhdGhQ
cm9jZXNzb3I6CiAgICAgZm9yIChWZWN0b3I8Q29udG91cio+OjppdGVyYXRvciBpdGVyID0gbV9j
b250b3Vycy5iZWdpbigpOyBpdGVyICE9IG1fY29udG91cnMuZW5kKCk7ICsraXRlcikgewogICAg
ICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKICAgICAgICAgZm9yIChTZWdtZW50KiBzZWcgPSBj
dXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBzZWctPm5leHQoKSkgewotICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCA9IHNlZy0+Ym91bmRpbmdCb3go
KTsKKyAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3ggPSBzZWctPmJv
dW5kaW5nQm94KCk7CiAgICAgICAgICAgICBpZiAoYm91bmRpbmdCb3gueSgpIDw9IHkgJiYgeSA8
PSBib3VuZGluZ0JveC5tYXhZKCkpCiAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChzZWcpOwog
ICAgICAgICB9CkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29y
OjpkZXRlcm1pbmVTaQogICAgICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKICAgICAgICAgZGV0
ZXJtaW5lT3JpZW50YXRpb24oY3VyKTsKICAgICAgICAgZm9yIChTZWdtZW50KiBzZWcgPSBjdXIt
PmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBzZWctPm5leHQoKSkgewotICAgICAg
ICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCA9IHNlZy0+Ym91bmRpbmdCb3goKTsK
KyAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3ggPSBzZWctPmJvdW5k
aW5nQm94KCk7CiAgICAgICAgICAgICB0cmVlLmFkZCh0cmVlLmNyZWF0ZUludGVydmFsKGJvdW5k
aW5nQm94LnkoKSwgYm91bmRpbmdCb3gubWF4WSgpLCBzZWcpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lkIExvb3BCbGlublBhdGhQcm9jZXNzb3I6OmRldGVybWlu
ZVNpCiAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHNlZ21lbnRzIGNvbWluZyBmcm9tIHRoZSBz
YW1lIGNvbnRvdXIuCiAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U2VnbWVudC0+Y29udG91cigp
ICE9IGN1cikgewogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHBlcmZvcm0gcXVlcmllcyB0
aGF0IGNhbiBhZmZlY3QgdGhlIGNvbXB1dGF0aW9uLgotICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gcXVlcnlTZWdtZW50LT5jb250b3VyKCktPmJvdW5k
aW5nQm94KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRp
bmdCb3ggPSBxdWVyeVNlZ21lbnQtPmNvbnRvdXIoKS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNlZy0+Z2V0UG9pbnQoMCkueCgpID49IGJvdW5kaW5nQm94LngoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VnLT5nZXRQb2ludCgwKS54KCkgPD0gYm91bmRp
bmdCb3gubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1Dcm9zc2luZ3MgKz0g
cXVlcnlTZWdtZW50LT5udW1Dcm9zc2luZ3NGb3JYUmF5KHNlZy0+Z2V0UG9pbnQoMCksCkBAIC04
NDAsOCArODQwLDggQEAgdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpkZXRlcm1pbmVPcgog
ICAgICAgICAgc2VnID0gc2VnLT5uZXh0KCkpIHsKICAgICAgICAgaW50IGxpbWl0ID0gKHNlZy0+
a2luZCgpID09IFNlZ21lbnQ6OkN1YmljKSA/IDQgOiAyOwogICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IGxpbWl0OyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHByZXZQ
b2ludCA9IHNlZy0+Z2V0UG9pbnQoaSAtIDEpOwotICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQgPSBzZWctPmdldFBvaW50KGkpOworICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcHJldlBvaW50ID0gc2VnLT5nZXRQb2ludChpIC0gMSk7CisgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCA9IHNlZy0+Z2V0UG9pbnQoaSk7CiAgICAgICAgICAgICBm
bG9hdCBjdXJBcmVhID0gcHJldlBvaW50LngoKSAqIHBvaW50LnkoKSAtIHByZXZQb2ludC55KCkg
KiBwb2ludC54KCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZUxv
Z2dpbmcpCkBAIC05ODMsNyArOTgzLDcgQEAgdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpz
dWJkaXZpZGVDdQogICAgICAgICAgICAgQVNTRVJUKHNlZy0+a2luZCgpID09IFNlZ21lbnQ6OkN1
YmljKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VnLT5udW1iZXJPZlRyaWFu
Z2xlcygpOyBpKyspIHsKICAgICAgICAgICAgICAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRv
cjo6VHJpYW5nbGUqIHRyaWFuZ2xlID0gc2VnLT5nZXRUcmlhbmdsZShpKTsKLSAgICAgICAgICAg
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0
IGJvdW5kaW5nQm94OwogICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmZpdFRvUG9pbnRzKHRy
aWFuZ2xlLT5nZXRWZXJ0ZXgoMCktPnh5Q29vcmRpbmF0ZXMoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZS0+Z2V0VmVydGV4KDEpLT54eUNvb3JkaW5h
dGVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGUt
PmdldFZlcnRleCgyKS0+eHlDb29yZGluYXRlcygpKTsKQEAgLTExODIsNyArMTE4Miw3IEBAIHZv
aWQgTG9vcEJsaW5uUGF0aFByb2Nlc3Nvcjo6dGVzc2VsbGF0ZUkKICAgICAgICAgZm9yIChTZWdt
ZW50KiBzZWcgPSBjdXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBzZWctPm5l
eHQoKSkgewogICAgICAgICAgICAgaW50IG51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcyA9IHNlZy0+
bnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcyAtIDE7IGkrKykgewotICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgcG9pbnQgPSBzZWctPmdldEludGVyaW9yVmVydGV4KGkpOworICAgICAgICAg
ICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQgPSBzZWctPmdldEludGVyaW9yVmVydGV4KGkpOwog
ICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgewogICAgICAgICAgICAgICAgICAgICBmaXJzdCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGVuZChwb2ludC54KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRl
eHR1cmVDb29yZHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNv
b3Jkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE2ICs1OSwxNiBAQCBMb29wQmxpbm5UZXh0
dXJlQ29vcmRzOjpSZXN1bHQgTG9vcEJsaW5uCiAgICAgICAgIGZsb2F0IG10ID0gbHQ7CiAgICAg
ICAgIGZsb2F0IGx0TWludXNMcyA9IGx0IC0gbHM7CiAgICAgICAgIGZsb2F0IG10TWludXNNcyA9
IG10IC0gbXM7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0UG9pbnQz
RChscyAqIG1zLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBHcmFwaGljc1Bv
aW50M0QobHMgKiBtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxzICogbHMgKiBscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1zICogbXMgKiBtcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCAqICgzLjBmICogbHMgKiBtcyAtIGxzICogbXQg
LSBsdCAqIG1zKSwKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gR3JhcGhpY3NQ
b2ludDNEKE9uZVRoaXJkICogKDMuMGYgKiBscyAqIG1zIC0gbHMgKiBtdCAtIGx0ICogbXMpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAq
IChscyAtIGx0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1zICogbXMgKiAobXMgLSBtdCkpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNb
Ml0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAobHQgKiAobXQgLSAyLjBmICogbXMpICsgbHMg
KiAoMy4wZiAqIG1zIC0gMi4wZiAqIG10KSksCisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1syXSA9IEdyYXBoaWNzUG9pbnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykg
KyBscyAqICgzLjBmICogbXMgLSAyLjBmICogbXQpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGx0TWludXNMcyAqIGx0TWludXNMcyAqIGxzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRNaW51c01zICog
bXRNaW51c01zICogbXMpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9h
dFBvaW50M0QobHRNaW51c0xzICogbXRNaW51c01zLAorICAgICAgICByZXN1bHQua2xtQ29vcmRp
bmF0ZXNbM10gPSBHcmFwaGljc1BvaW50M0QobHRNaW51c0xzICogbXRNaW51c01zLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShsdE1pbnVzTHMgKiBs
dE1pbnVzTHMgKiBsdE1pbnVzTHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLShtdE1pbnVzTXMgKiBtdE1pbnVzTXMgKiBtdE1pbnVzTXMpKTsKICAg
ICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uLmQxIDwgMC4wZikKQEAgLTEwMSwxNiArMTAxLDE2IEBA
IExvb3BCbGlublRleHR1cmVDb29yZHM6OlJlc3VsdCBMb29wQmxpbm4KIAogICAgICAgICBmbG9h
dCBsdE1pbnVzTHMgPSBsdCAtIGxzOwogICAgICAgICBmbG9hdCBtdE1pbnVzTXMgPSBtdCAtIG1z
OwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBGbG9hdFBvaW50M0QobHMgKiBt
cywKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gR3JhcGhpY3NQb2ludDNEKGxz
ICogbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
cyAqIGxzICogbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBscyAqIG1zICogbXMpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBG
bG9hdFBvaW50M0QoT25lVGhpcmQgKiAoLWxzICogbXQgLSBsdCAqIG1zICsgMy4wZiAqIGxzICog
bXMpLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBHcmFwaGljc1BvaW50M0Qo
T25lVGhpcmQgKiAoLWxzICogbXQgLSBsdCAqIG1zICsgMy4wZiAqIGxzICogbXMpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbHMg
KiAobHMgKiAobXQgLSAzLjBmICogbXMpICsgMi4wZiAqIGx0ICogbXMpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbXMgKiAobHMg
KiAoMi4wZiAqIG10IC0gMy4wZiAqIG1zKSArIGx0ICogbXMpKTsKLSAgICAgICAgcmVzdWx0Lmts
bUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkICogKGx0ICogKG10IC0gMi4w
ZiAqIG1zKSArIGxzICogKDMuMGYgKiBtcyAtIDIuMGYgKiBtdCkpLAorICAgICAgICByZXN1bHQu
a2xtQ29vcmRpbmF0ZXNbMl0gPSBHcmFwaGljc1BvaW50M0QoT25lVGhpcmQgKiAobHQgKiAobXQg
LSAyLjBmICogbXMpICsgbHMgKiAoMy4wZiAqIG1zIC0gMi4wZiAqIG10KSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmVUaGlyZCAqIChsdCAtIGxz
KSAqIChscyAqICgyLjBmICogbXQgLSAzLjBmICogbXMpICsgbHQgKiBtcyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmVUaGlyZCAqIChtdCAtIG1z
KSAqIChscyAqIChtdCAtIDMuMGYgKiBtcykgKyAyLjBmICogbHQgKiBtcykpOwotICAgICAgICBy
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QobHRNaW51c0xzICogbXRNaW51
c01zLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBHcmFwaGljc1BvaW50M0Qo
bHRNaW51c0xzICogbXRNaW51c01zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLShsdE1pbnVzTHMgKiBsdE1pbnVzTHMpICogbXRNaW51c01zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWx0TWludXNMcyAq
IG10TWludXNNcyAqIG10TWludXNNcyk7CiAgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9ICgo
Y2xhc3NpZmljYXRpb24uZDEgPiAwLjBmICYmIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXS54KCkg
PCAwLjBmKQpAQCAtMTIyLDI2ICsxMjIsMjYgQEAgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkczo6UmVz
dWx0IExvb3BCbGlubgogICAgICAgICBmbG9hdCBscyA9IGNsYXNzaWZpY2F0aW9uLmQzOwogICAg
ICAgICBmbG9hdCBsdCA9IDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMjsKICAgICAgICAgZmxvYXQg
bHNNaW51c0x0ID0gbHMgLSBsdDsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0g
RmxvYXRQb2ludDNEKGxzLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBHcmFw
aGljc1BvaW50M0QobHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBscyAqIGxzICogbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLjBmKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0g
RmxvYXRQb2ludDNEKGxzIC0gT25lVGhpcmQgKiBsdCwKKyAgICAgICAgcmVzdWx0LmtsbUNvb3Jk
aW5hdGVzWzFdID0gR3JhcGhpY3NQb2ludDNEKGxzIC0gT25lVGhpcmQgKiBsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiBsc01pbnVz
THQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBm
KTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKGxzIC0g
VHdvVGhpcmRzICogbHQsCisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEdyYXBo
aWNzUG9pbnQzRChscyAtIFR3b1RoaXJkcyAqIGx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbHNNaW51c0x0ICogbHNNaW51c0x0ICogbHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmKTsKLSAgICAg
ICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0gRmxvYXRQb2ludDNEKGxzTWludXNMdCwKKyAg
ICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0gR3JhcGhpY3NQb2ludDNEKGxzTWludXNM
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzTWlu
dXNMdCAqIGxzTWludXNMdCAqIGxzTWludXNMdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtRdWFkcmF0aWM6IHsKLSAgICAgICAgcmVzdWx0
LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKDAsIDAsIDApOwotICAgICAgICByZXN1
bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQsIDAsIE9uZVRoaXJk
KTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKFR3b1Ro
aXJkcywgT25lVGhpcmQsIFR3b1RoaXJkcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1szXSA9IEZsb2F0UG9pbnQzRCgxLCAxLCAxKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5h
dGVzWzBdID0gR3JhcGhpY3NQb2ludDNEKDAsIDAsIDApOworICAgICAgICByZXN1bHQua2xtQ29v
cmRpbmF0ZXNbMV0gPSBHcmFwaGljc1BvaW50M0QoT25lVGhpcmQsIDAsIE9uZVRoaXJkKTsKKyAg
ICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gR3JhcGhpY3NQb2ludDNEKFR3b1RoaXJk
cywgT25lVGhpcmQsIFR3b1RoaXJkcyk7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sz
XSA9IEdyYXBoaWNzUG9pbnQzRCgxLCAxLCAxKTsKICAgICAgICAgaWYgKGNsYXNzaWZpY2F0aW9u
LmQzIDwgMCkKICAgICAgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BC
bGlublRleHR1cmVDb29yZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJl
Q29vcmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTG9vcEJs
aW5uVGV4dHVyZUNvb3Jkc19oCiAjZGVmaW5lIExvb3BCbGlublRleHR1cmVDb29yZHNfaAogCi0j
aW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAj
aW5jbHVkZSAiTG9vcEJsaW5uQ2xhc3NpZmllci5oIgogI2luY2x1ZGUgIkxvb3BCbGlubkNvbnN0
YW50cy5oIgogCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUaGUgKGss
IGwsIG0pIHRleHR1cmUgY29vcmRpbmF0ZXMgdGhhdCBhcmUgdG8gYmUgYXNzb2NpYXRlZAogICAg
ICAgICAvLyB3aXRoIHRoZSBmb3VyIGNvbnRyb2wgcG9pbnRzIG9mIHRoZSBjdWJpYyBjdXJ2ZS4K
LSAgICAgICAgRmxvYXRQb2ludDNEIGtsbUNvb3JkaW5hdGVzWzRdOworICAgICAgICBHcmFwaGlj
c1BvaW50M0Qga2xtQ29vcmRpbmF0ZXNbNF07CiAKICAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRo
ZXIgdGhlIGN1cnZlIGlzIGEgbGluZSBvciBhIHBvaW50LCBpbiB3aGljaCBjYXNlCiAgICAgICAg
IC8vIHdlIGRvIG5vdCBuZWVkIHRvIGFkZCBpdHMgdHJpYW5nbGVzIHRvIHRoZSBtZXNoLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRl
ICJUZXh0dXJlLmgiCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIlRpbGlu
Z0RhdGEuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTE0
NCwxMCArMTQ0LDEwIEBAIEludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhPdXRlckIK
ICAgICByZXR1cm4gYm91bmRzOwogfQogCi1GbG9hdFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5k
c05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0CitHcmFwaGljc1JlY3QgVGlsaW5nRGF0YTo6dGls
ZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0CiB7CiAgICAgYXNzZXJ0VGlsZSh0aWxl
KTsKLSAgICBGbG9hdFJlY3QgYm91bmRzKHRpbGVCb3VuZHModGlsZSkpOworICAgIEdyYXBoaWNz
UmVjdCBib3VuZHModGlsZUJvdW5kcyh0aWxlKSk7CiAgICAgYm91bmRzLnNjYWxlKDEuMGYgLyBt
X3RvdGFsU2l6ZVgsIDEuMGYgLyBtX3RvdGFsU2l6ZVkpOwogICAgIHJldHVybiBib3VuZHM7CiB9
CkBAIC0yMTMsMjEgKzIxMywyMSBAQCBJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBwZWRUaWxl
SW5kaWNlCiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgciAtIHgsIGIgLSB5KTsKIH0KIAotSW50
UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0ICZzcmNSZWN0KSBjb25zdAorSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGls
ZUluZGljZXMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0ICZzcmNSZWN0KSBjb25zdAogewog
ICAgIHJldHVybiBvdmVybGFwcGVkVGlsZUluZGljZXMoZW5jbG9zaW5nSW50UmVjdChzcmNSZWN0
KSk7CiB9CiAKLXZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQoY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGludCB0aWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QqIG5ld1NyYywgRmxvYXRSZWN0
KiBuZXdEc3QpIGNvbnN0Cit2b2lkIFRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKGNvbnN0
IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBpbnQg
dGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0KiBu
ZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25zdAogewogICAgIC8vIEludGVyc2VjdCB3
aXRoIHRpbGUKLSAgICBGbG9hdFJlY3QgdGlsZUJvdW5kcyA9IHRoaXMtPnRpbGVCb3VuZHModGls
ZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3RJbnRlcnNlY3RlZCA9IHNyY1JlY3Q7CisgICAgR3Jh
cGhpY3NSZWN0IHRpbGVCb3VuZHMgPSB0aGlzLT50aWxlQm91bmRzKHRpbGUpOworICAgIEdyYXBo
aWNzUmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQgPSBzcmNSZWN0OwogICAgIHNyY1JlY3RJbnRlcnNl
Y3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7CiAKICAgICBpZiAoc3JjUmVjdEludGVyc2VjdGVk
LmlzRW1wdHkoKSkgewotICAgICAgICAqbmV3U3JjID0gKm5ld0RzdCA9IEZsb2F0UmVjdCgwLCAw
LCAwLCAwKTsKKyAgICAgICAgKm5ld1NyYyA9ICpuZXdEc3QgPSBHcmFwaGljc1JlY3QoMCwgMCwg
MCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lk
IFRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKGNvbnN0CiAgICAgICAgIC10aWxlQm91bmRz
LngoKSArIG1fYm9yZGVyVGV4ZWxzLAogICAgICAgICAtdGlsZUJvdW5kcy55KCkgKyBtX2JvcmRl
clRleGVscyk7CiAKLSAgICAqbmV3RHN0ID0gRmxvYXRSZWN0KAorICAgICpuZXdEc3QgPSBHcmFw
aGljc1JlY3QoCiAgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1YICogZHN0UmVjdC53aWR0
aCgpICsgZHN0UmVjdC54KCksCiAgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1ZICogZHN0
UmVjdC5oZWlnaHQoKSArIGRzdFJlY3QueSgpLAogICAgICAgICBzcmNSZWN0SW50ZXJzZWN0ZWRO
b3JtVyAqIGRzdFJlY3Qud2lkdGgoKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFBv
aW50OwogCkBAIC02MiwxNyArNjIsMTcgQEAgcHVibGljOgogICAgIEludFJlY3QgdGlsZUJvdW5k
cyhpbnQgdGlsZSkgY29uc3Q7CiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlcihpbnQg
dGlsZSkgY29uc3Q7CiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aE91dGVyQm9yZGVyKGludCB0
aWxlKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgdGlsZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUp
IGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCB0aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkg
Y29uc3Q7CiAgICAgaW50IHRpbGVQb3NpdGlvblgoaW50IHhJbmRleCkgY29uc3Q7CiAgICAgaW50
IHRpbGVQb3NpdGlvblkoaW50IHlJbmRleCkgY29uc3Q7CiAgICAgaW50IHRpbGVTaXplWChpbnQg
eEluZGV4KSBjb25zdDsKICAgICBpbnQgdGlsZVNpemVZKGludCB5SW5kZXgpIGNvbnN0OwogICAg
IEludFJlY3Qgb3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNv
bnN0OwotICAgIEludFJlY3Qgb3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAogICAgIC8vIEdpdmVuIGEgc2V0IG9mIHNv
dXJjZSBhbmQgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGEgZHJhd2luZyBxdWFkCiAgICAg
Ly8gaW4gdGV4ZWwgdW5pdHMsIHJldHVybnMgYWRqdXN0ZWQgZGF0YSB0byByZW5kZXIganVzdCB0
aGUgb25lIHRpbGUuCi0gICAgdm9pZCBpbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0UmVjdCog
bmV3U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3Q7CisgICAgdm9pZCBpbnRlcnNlY3REcmF3
UXVhZChjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
UmVjdCwgaW50IHRpbGUsIEdyYXBoaWNzUmVjdCogbmV3U3JjLCBHcmFwaGljc1JlY3QqIG5ld0Rz
dCkgY29uc3Q7CiAKICAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gdGlsZUJvdW5kJ3MgYW5kIHRp
bGVCb3VuZFdpdGhCb3JkZXIncyBsb2NhdGlvbigpLgogICAgIEludFBvaW50IHRleHR1cmVPZmZz
ZXQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udEd0ay5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNyAr
MjE4LDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBhbmdvTGF5
b3V0TGluZSogbGF5b3V0TGluZSwgUGFuZ29SZWdpb25UeXBlIHJlbmRlclJlZ2lvbikKK3N0YXRp
YyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBQYW5nb0xheW91dExpbmUqIGxheW91dExpbmUs
IFBhbmdvUmVnaW9uVHlwZSByZW5kZXJSZWdpb24pCiB7CiAgICAgQ29udGV4dFNoYWRvdyogc2hh
ZG93ID0gZ3JhcGhpY3NDb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNoYWRv
dyk7CkBAIC0yMjYsNyArMjI2LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFw
aGljc0NvbgogICAgIGlmICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgJiBU
ZXh0TW9kZUZpbGwpIHx8IHNoYWRvdy0+bV90eXBlID09IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHRvdGFsT2Zmc2V0KHBvaW50ICsg
c2hhZG93LT5tX29mZnNldCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3RhbE9mZnNldChwb2ludCAr
IHNoYWRvdy0+bV9vZmZzZXQpOwogCiAgICAgLy8gT3B0aW1pemUgbm9uLWJsdXJyeSBzaGFkb3dz
LCBieSBqdXN0IGRyYXdpbmcgdGV4dCB3aXRob3V0IHRoZSBDb250ZXh0U2hhZG93LgogICAgIGlm
ICghc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyhncmFwaGljc0NvbnRleHQpKSB7CkBAIC0y
NDMsOCArMjQzLDggQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0Nvbgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGV4dGVudHMoZ2V0UGFuZ29S
ZWdpb25FeHRlbnRzKHJlbmRlclJlZ2lvbikpOwotICAgIGV4dGVudHMuc2V0TG9jYXRpb24oRmxv
YXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSAtIGV4dGVudHMuaGVpZ2h0KCkpKTsKKyAgICBH
cmFwaGljc1JlY3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVudHMocmVuZGVyUmVnaW9uKSk7
CisgICAgZXh0ZW50cy5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KHBvaW50LngoKSwgcG9pbnQu
eSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOwogICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRleHQgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0LCBleHRlbnRzKTsKICAgICBp
ZiAoc2hhZG93Q29udGV4dCkgewogICAgICAgICBjYWlyb190cmFuc2xhdGUoc2hhZG93Q29udGV4
dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyB2b2lk
IGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb24KICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICNpZiBVU0UoRlJFRVRZUEUpCiAgICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0
Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAK
LXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRl
eHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBH
cmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykg
Y29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMzk5LDcgKzM5OSw3IEBAIGlu
dCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXgKICAgICByZXR1cm4gb2Zmc2V0
OwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQg
aCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICNpZiBVU0UoRlJFRVRZUEUpCiAgICAgaWYg
KCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pCkBAIC00MzksNyArNDM5
LDcgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogICAgIGdfZnJl
ZSh1dGY4KTsKICAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwogCi0gICAgcmV0dXJuIEZsb2F0
UmVjdChwb2ludC54KCkgKyBiZWZvcmVXaWR0aCwgcG9pbnQueSgpLCBhZnRlcldpZHRoIC0gYmVm
b3JlV2lkdGgsIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsgYmVmb3Jl
V2lkdGgsIHBvaW50LnkoKSwgYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LQotI2luY2x1ZGUgPFBvaW50Lmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFBv
aW50OjpGbG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCi0gICAgOiBtX3gocG9pbnQueCkK
LSAgICAsIG1feShwb2ludC55KQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBCUG9pbnQo
KSBjb25zdAotewotICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0Zsb2F0UmVjdEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgotICoKLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgotCi0jaW5jbHVkZSA8UmVjdC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQlJlY3QmIHJlY3QpCi0gICAgOiBtX2xv
Y2F0aW9uKHJlY3QuTGVmdFRvcCgpKQotICAgICwgbV9zaXplKHJlY3QuV2lkdGgoKSArIDEsIHJl
Y3QuSGVpZ2h0KCkgKyAxKQotewotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIEJSZWN0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSAt
IDEsIGhlaWdodCgpIC0gMSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhh
aWt1LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBA
IGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ28KIH0KIAogdm9pZCBGb250
OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+Zmls
bENvbG9yKCk7CiAgICAgQlZpZXcqIHZpZXcgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwpAQCAtOTIsMTMgKzkyLDEzIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGcKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAq
LywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBw
b2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRl
eHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBt
YXJrICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8s
IGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTA5
LDEwICsxMDksMTAgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgog
ICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50LCBpbnQsIGludCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJl
dHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAogaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0LCBib29sKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGll
bnRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaQogICAgIHJl
dHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAg
ICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RmlsbFJlY3QocmVjdCwgKnBsYXRmb3JtR3Jh
ZGllbnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90
IHBvaW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlh
bGlhcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgcG9p
bnRzTGVuZ3RoLCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFs
aWFzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE0OSw3ICsxNDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24o
CiAgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VQb2x5Z29uKGJQb2ludHMsIHBvaW50c0xl
bmd0aCwgdHJ1ZSwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2lu
dHMsIGJvb2wgYW50aWFsaWFzZWQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQ29udmV4UG9seWdvbigKICAgICAvLyBGSVhNRTogSU1QTEVNRU5UISEKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29s
b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0
IFBhdAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dENoZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorR3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gcmVjdDsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzMsNyArMjczLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTM0LDcgKzUz
NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG8KICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFk
b3coRmxvYXRTaXplIGNvbnN0JiwgZmxvYXQsIENvbG9yIGNvbnN0JiwgQ29sb3JTcGFjZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhHcmFwaGljc1NpemUgY29uc3Qm
LCBmbG9hdCwgQ29sb3IgY29uc3QmLCBDb2xvclNwYWNlKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc1BvaW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUG9pbnRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFp
a3UuY3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhcGhpY3NQb2ludEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaW5jbHVkZSA8UG9pbnQuaD4KKwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgQlBv
aW50JiBwb2ludCkKKyAgICA6IG1feChwb2ludC54KQorICAgICwgbV95KHBvaW50LnkpCit7Cit9
CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJQ
b2ludChtX3gsIG1feSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NQb2ludEhhaWt1LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc1BvaW50SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUG9pbnRIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDIwICsyNiwyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogCiAjaW5j
bHVkZSA8UG9pbnQuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UG9pbnQ6OkZs
b2F0UG9pbnQoY29uc3QgQlBvaW50JiBwb2ludCkKK0dyYXBoaWNzUG9pbnQ6OkdyYXBoaWNzUG9p
bnQoY29uc3QgQlBvaW50JiBwb2ludCkKICAgICA6IG1feChwb2ludC54KQogICAgICwgbV95KHBv
aW50LnkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0CitHcmFw
aGljc1BvaW50OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAogewogICAgIHJldHVybiBCUG9pbnQo
bV94LCBtX3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR3JhcGhpY3NSZWN0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUmVjdEhhaWt1LmNwcAkocmV2aXNpb24gOTEw
MTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVj
dEhhaWt1LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dyYXBoaWNzUmVjdEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3Rp
cHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFJlY3QuaD4K
KworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IEJS
ZWN0JiByZWN0KQorICAgIDogbV9sb2NhdGlvbihyZWN0LkxlZnRUb3AoKSkKKyAgICAsIG1fc2l6
ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0LkhlaWdodCgpICsgMSkKK3sKK30KKworRmxvYXRSZWN0
OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJSZWN0KEJQb2ludCh4KCks
IHkoKSksIEJTaXplKHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HcmFwaGljc1JlY3RIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NSZWN0SGFpa3UuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNz
UmVjdEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDIwIEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogCiAjaW5jbHVkZSA8UmVjdC5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQlJlY3QmIHJlY3QpCitHcmFwaGljc1Jl
Y3Q6OkdyYXBoaWNzUmVjdChjb25zdCBCUmVjdCYgcmVjdCkKICAgICA6IG1fbG9jYXRpb24ocmVj
dC5MZWZ0VG9wKCkpCiAgICAgLCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5IZWlnaHQo
KSArIDEpCiB7CiB9CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAorR3JhcGhp
Y3NSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEJSZWN0KEJQb2lu
dCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6Omlu
dmFsaWRhdGVQbGF0Zm9ybURhdGEKIH0KIAogLy8gRHJhd2luZyBSb3V0aW5lcwotdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAg
IGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTIxLDcg
KzEyMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAg
ICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3Qp
CiB7CiAgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwog
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5Jc1ZhbGlkKCkpIC8vIElmIHRoZSBpbWFnZSBoYXNu
J3QgZnVsbHkgbG9hZGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvUGF0aEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8UmVnaW9uLmg+CkBAIC02NSw1MSArNjUsNTEgQEAgYm9v
bCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0eSgpOwog
fQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhpY3NQb2lu
dCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IHNhZmUgd2F5IHRvIHJldHVybiBjdXJyZW50IHBvaW50IG9mIHN1YnBhdGguCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICBmbG9hdCBxdWlldE5hTiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChxdWlldE5hTiwgcXVpZXRO
YU4pOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHF1aWV0TmFOLCBxdWlldE5hTik7CiB9CiAK
LWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1
bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGgtPkNvbnRhaW5zKHBv
aW50KTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQor
dm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25z
dAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fcGF0aC0+RnJhbWUoKTsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkK
IHsKICAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBhdGg6
OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3As
IGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGNwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3Zv
aWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcDEsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQm
IHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRoOjphZGRB
cmNUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGZs
b2F0IHJhZGl1cykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTE5LDE3ICsxMTks
MTcgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0
IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhj
b25zdCBHcmFwaGljc1BvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9v
bCBhbnRpY2xvY2t3aXNlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUGF0
aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiByKQogewogICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKIH0KIAotdm9pZCBQ
YXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkRWxsaXBz
ZShjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAg
LTE1NCwxMCArMTU0LDEwIEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5z
Zm8KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91
bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKK0dyYXBoaWNzUmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBH
cmFwaGljc1JlY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2lt
cGxlRm9udERhdGFIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhh
aWt1LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2
Myw4IEBAIE5hdGl2ZUltYWdlUHRyIFN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdlRm8KICAgICByZXR1
cm4gJm1fYml0bWFwOwogfQogCi12b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LAotICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCit2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc291cmNlUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3ApCiB7CiAgICAgaWYgKCFtX2JpdG1hcC5Jc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VI
YWlrdS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1N0aWxsSW1hZ2VIYWlrdS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpOwogCiBwcml2YXRlOgogICAgIFN0aWxsSW1hZ2UoY29uc3QgQkJpdG1hcCYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNs
dWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAgLTQ4OSw3
ICs0ODksNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAg
ICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3lt
Ym9sKGNoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBEaXN0cmlidXRlIHRoZSBydW4ncyB0
b3RhbCBleHBhbnNpb24gZXZlbmx5IG92ZXIgYWxsIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGlu
IHRoZSBydW4uCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4cGFuc2lvbikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24gPSBtX2V4cGFuc2lvbjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzVW5pdCBwcmV2aW91c0V4cGFuc2lvbiA9
IG1fZXhwYW5zaW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmVhdEFzU3BhY2Ug
JiYgIW1fYWZ0ZXJFeHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
YWtlIHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgYmVmb3JlIHRoaXMgaWRlb2dyYXBoLgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bw
b3J0dW5pdHk7CkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmFkanVzdEdseXBocwogICAgICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVuZChhZHZh
bmNlKTsKICAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJv
dW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBnbHlwaEJvdW5k
cyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBnbHlwaEJv
dW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGdseXBoT3JpZ2luLnkpOwogICAgICAgICAgICAgbV9t
aW5HbHlwaEJvdW5kaW5nQm94WCA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJv
dW5kcy54KCkpOwogICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21h
eEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSwxOCArMTg1LDE4IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fY3VycmVudFJ1bjsKICAg
ICB1bnNpZ25lZCBtX2dseXBoSW5DdXJyZW50UnVuOwogICAgIHVuc2lnbmVkIG1fY2hhcmFjdGVy
SW5DdXJyZW50R2x5cGg7Ci0gICAgZmxvYXQgbV9maW5hbFJvdW5kaW5nV2lkdGg7Ci0gICAgZmxv
YXQgbV9leHBhbnNpb247Ci0gICAgZmxvYXQgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAg
ICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247CisgICAgR3JhcGhpY3NVbml0IG1fZmluYWxSb3Vu
ZGluZ1dpZHRoOworICAgIEdyYXBoaWNzVW5pdCBtX2V4cGFuc2lvbjsKKyAgICBHcmFwaGljc1Vu
aXQgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKKyAgICBHcmFwaGljc1VuaXQgbV9sZWFkaW5n
RXhwYW5zaW9uOwogICAgIGJvb2wgbV9hZnRlckV4cGFuc2lvbjsKIAogICAgIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogCi0gICAgZmxvYXQgbV9taW5H
bHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwotICAg
IGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5k
aW5nQm94WTsKKyAgICBHcmFwaGljc1VuaXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKKyAgICBH
cmFwaGljc1VuaXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKKyAgICBHcmFwaGljc1VuaXQgbV9t
aW5HbHlwaEJvdW5kaW5nQm94WTsKKyAgICBHcmFwaGljc1VuaXQgbV9tYXhHbHlwaEJvdW5kaW5n
Qm94WTsKIAogICAgIHVuc2lnbmVkIG1fbGFzdFJvdW5kaW5nR2x5cGg7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRN
YWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNv
bnN0IE5TUG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCi17Ci19Ci0KLUZsb2F0UG9pbnQ6
Om9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdAotewotICAgIHJldHVybiBOU01ha2VQb2ludChtX3gs
IG1feSk7Ci19Ci0KLSNlbmRpZgotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0JKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBF
UwotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihy
Lm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgTlNS
ZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlNNYWtlUmVjdCh4KCksIHkoKSwgd2lkdGgoKSwg
aGVpZ2h0KCkpOwotfQotCi0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCShyZXZpc2lvbiA5MTAx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0g
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwotCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93aWR0
aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCi17Ci19Ci0KLUZsb2F0U2l6ZTo6b3BlcmF0
b3IgTlNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlNNYWtlU2l6ZShtX3dpZHRoLCBtX2hl
aWdodCk7Ci19Ci0KLSNlbmRpZgotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvbXBsZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdCBGb250
OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGgsCitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKHRoaXMsIHJ1bik7CkBAIC01MCwxMCArNTAsMTAgQEAgRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogICAgIC8vIFVzaW5nIHJvdW5kZigpIHJhdGhlciB0
aGFuIGNlaWxmKCkgZm9yIHRoZSByaWdodCBlZGdlIGFzIGEgY29tcHJvbWlzZSB0byBlbnN1cmUg
Y29ycmVjdCBjYXJldCBwb3NpdGlvbmluZwogICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAg
ZmxvYXQgdG90YWxXaWR0aCA9IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOwotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCks
IHBvaW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkg
LSBmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFm
dGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYmVm
b3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwg
aCk7CiAgICAgfSAKIAotICAgIHJldHVybiBGbG9hdFJlY3QoZmxvb3JmKHBvaW50LngoKSArIGJl
Zm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsgYWZ0ZXJXaWR0aCkgLSBm
bG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NS
ZWN0KGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHBv
aW50LngoKSArIGFmdGVyV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwg
aCk7CiB9CiAKIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKQEAgLTgw
LDcgKzgwLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbAogICAg
IHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAg
IC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQg
ZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTky
LDExICs5MiwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhl
IHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0YXJ0
UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludChz
dGFydFgsIHBvaW50LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5
cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAg
ZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTA0LDcg
KzEwNCw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBp
ZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3RW1w
aGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBv
aW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1waGFzaXNN
YXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50KHBvaW50
LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAogZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJm
bG93KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcg
QEAgc3RhdGljIGJvb2wgaGFzQnJva2VuQ1RGb250R2V0VmVydGljYWxUcgogI2VuZGlmCiB9CiAK
LXN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29u
c3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQp
CitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNv
dW50KQogewogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2ludC54KCks
IHBvaW50LnkoKSk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKGNvbnN0CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENHQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRl
eHRNYXRyaXgoY29udGV4dCkpOwogCi0gICAgICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gRmxv
YXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRB
c2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNj
ZW50KCkpOworICAgICAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgKyBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9n
cmFwaGljQmFzZWxpbmUpIC0gZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKTsKICAg
ICAgICAgICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAg
ICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xh
dGlvbnNbaV0sIHRyYW5zbGF0aW9uc1RyYW5zZm9ybSk7CkBAIC0xMzcsNyArMTM3LDcgQEAgc3Rh
dGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdAogI2VuZGlmCiB9CiAKLXZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVt
R2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKQEAgLTIxNSw3
ICsyMTUsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAg
ICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLm1fc2l6ZSk7
CiAKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRv
d09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwog
ICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTIzMiwxNSArMjMyLDE1IEBAIHZv
aWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGMKICAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8g
SWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxp
ZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KICAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkg
KiAoY29udGV4dC0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAg
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoR3JhcGhpY3NQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0Nv
bnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJv
bSksIG51bUdseXBocyk7CiAgICAgICAgIGlmIChmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCkp
Ci0gICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4
dFggKyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwgZm9udCwgY2dD
b250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pLCBudW1HbHlwaHMpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhHcmFw
aGljc1BvaW50KHNoYWRvd1RleHRYICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFk
b3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICAgICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKGZpbGxDb2xvciwgZmlsbENvbG9yU3BhY2UpOwogICAgIH0KIAogICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICBp
ZiAoZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICBzaG93R2x5cGhzV2l0aEFk
dmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgp
LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwg
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoR3JhcGhpY3NQb2ludChwb2ludC54KCkgKyBmb250LT5zeW50aGV0aWNC
b2xkT2Zmc2V0KCksIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKIAogICAg
IGlmIChoYXNTaW1wbGVTaGFkb3cpCiAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyBOU0NvbG9yKiBjcmVhdGVQYXR0ZXJuQ29sb3IoTlNT
dHIKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0YW5kYXJkIHBsYXRmb3JtIGNvbXBvbmVu
dCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGFydHdvcmsgZm9yIHVuZGVy
bGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBz
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NQb2lu
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NQb2ludE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tOjkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUG9pbnRNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBF
UworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmIHApIDogbV94KHAueCks
IG1feShwLnkpCit7Cit9CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdAor
eworICAgIHJldHVybiBOU01ha2VQb2ludChtX3gsIG1feSk7Cit9CisKKyNlbmRpZgorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NQb2ludE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NQb2ludE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NQb2ludE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjUsMTcgKzI1LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9U
WVBFUwogCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmIHApIDogbV94KHAu
eCksIG1feShwLnkpCitHcmFwaGljc1BvaW50OjpHcmFwaGljc1BvaW50KGNvbnN0IE5TUG9pbnQm
IHApIDogbV94KHAueCksIG1feShwLnkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIE5T
UG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIE5TTWFrZVBvaW50KG1feCwgbV95KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1JlY3RNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUmVjdE1hYy5t
bQkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9GbG9hdFJlY3RNYWMubW06OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NSZWN0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE5TR0VPTUVU
UllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0
KGNvbnN0IE5TUmVjdCYgcikgOiBtX2xvY2F0aW9uKHIub3JpZ2luKSwgbV9zaXplKHIuc2l6ZSkK
K3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBOU1JlY3QoKSBjb25zdAoreworICAgIHJldHVy
biBOU01ha2VSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKKyNlbmRpZgor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NS
ZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc1JlY3RNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUmVjdE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjUsMTcgKzI1LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllf
VFlQRVMKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1fbG9jYXRp
b24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQorR3JhcGhpY3NSZWN0OjpHcmFwaGljc1JlY3Qo
Y29uc3QgTlNSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQog
ewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3Q6
Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE5TTWFrZVJlY3QoeCgpLCB5
KCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc1NpemVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbQkocmV2aXNpb24g
OTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNp
emVNYWMubW06OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NTaXplTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19T
QU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKKworRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgTlNT
aXplJiBzKSA6IG1fd2lkdGgocy53aWR0aCksIG1faGVpZ2h0KHMuaGVpZ2h0KQoreworfQorCitG
bG9hdFNpemU6Om9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5TTWFrZVNp
emUobV93aWR0aCwgbV9oZWlnaHQpOworfQorCisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NTaXplTWFj
Lm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc1NpemVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxNyBA
QAogICovCiAgCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmbmRl
ZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCi1GbG9hdFNpemU6
OkZsb2F0U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQo
cy5oZWlnaHQpCitHcmFwaGljc1NpemU6OkdyYXBoaWNzU2l6ZShjb25zdCBOU1NpemUmIHMpIDog
bV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCiB7CiB9CiAKLUZsb2F0U2l6ZTo6
b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKK0dyYXBoaWNzU2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gTlNNYWtlU2l6ZShtX3dpZHRoLCBtX2hlaWdodCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFj
Lm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9JbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgogCi0jaW1wb3J0ICJGbG9hdFJl
Y3QuaCIKKyNpbXBvcnQgIkdyYXBoaWNzUmVjdC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmluZy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRL
aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtMjAwLDcgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAgSW50UmVjdCBtX3JlY3Q7Ci0gICAgRmxvYXRT
aXplIG1fc2NhbGVGYWN0b3I7CisgICAgR3JhcGhpY3NTaXplIG1fc2NhbGVGYWN0b3I7CiAgICAg
dW5zaWduZWQgbV9lbmFibGVkVHJhY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX3RvdGFsVHJhY2tD
b3VudDsKICAgICBmbG9hdCBtX3JlcG9ydGVkRHVyYXRpb247CkBAIC0yMjAsNyArMjIwLDcgQEAg
cHJpdmF0ZToKICAgICBkb3VibGUgbV90aW1lU3RhcnRlZFBsYXlpbmc7CiAgICAgZG91YmxlIG1f
dGltZVN0b3BwZWRQbGF5aW5nOwogI2VuZGlmCi0gICAgbXV0YWJsZSBGbG9hdFNpemUgbV9jYWNo
ZWROYXR1cmFsU2l6ZTsKKyAgICBtdXRhYmxlIEdyYXBoaWNzU2l6ZSBtX2NhY2hlZE5hdHVyYWxT
aXplOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyNiw3ICs4MjYsNyBAQCBJ
bnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpuYXR1cmFsCiAgICAgLy8gICAgZGltZW5z
aW9ucywgYXNwZWN0IHJhdGlvLCBjbGVhbiBhcGVydHVyZSwgcmVzb2x1dGlvbiwgYW5kIHNvIGZv
cnRoLCBhcyBkZWZpbmVkIGZvciB0aGUgCiAgICAgLy8gICAgZm9ybWF0IHVzZWQgYnkgdGhlIHJl
c291cmNlCiAgICAgCi0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKFtbbV9xdE1vdmllLmdldCgp
IGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV0p
OworICAgIEdyYXBoaWNzU2l6ZSBuYXR1cmFsU2l6ZShbW21fcXRNb3ZpZS5nZXQoKSBhdHRyaWJ1
dGVGb3JLZXk6UVRNb3ZpZU5hdHVyYWxTaXplQXR0cmlidXRlXSBzaXplVmFsdWVdKTsKICAgICBp
ZiAobmF0dXJhbFNpemUuaXNFbXB0eSgpICYmIG1faXNTdHJlYW1pbmcpIHsKICAgICAgICAgLy8g
SFRUUCBMaXZlIFN0cmVhbXMgd2lsbCBvY2Nhc2lvbmFsbHkgcmV0dXJuIHswLDB9IG5hdHVyYWwg
c2l6ZXMgd2hpbGUgc2NydWJiaW5nLgogICAgICAgICAvLyBXb3JrIGFyb3VuZCB0aGlzIHByb2Js
ZW0gKDxyZGFyOi8vcHJvYmxlbS85MDc4NTYzPikgYnkgcmV0dXJuaW5nIHRoZSBsYXN0IHZhbGlk
IApAQCAtMTMwNiw3ICsxMzA2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGFp
bnQoR3JhcAogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNrczpZRVNd
OwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBOU0dyYXBoaWNzQ29udGV4
dCogbmV3Q29udGV4dDsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IoMS4wZiwgLTEuMGYpOwor
ICAgIEdyYXBoaWNzU2l6ZSBzY2FsZUZhY3RvcigxLjBmLCAtMS4wZik7CiAgICAgSW50UmVjdCBw
YWludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoci53aWR0aCgpLCByLmhlaWdodCgpKSk7
CiAKICNpZiBQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKQpAQCAtMTM3MSw3ICsxMzcxLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGFpbnQoR3JhcAogICAgICAgICAgICAgU3Ry
aW5nIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJTEuMmYiLCBmcmFtZVJhdGUpOwogICAgICAgICAg
ICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKICAg
ICAgICAgICAgIGNvbnN0IENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsgICAgCisgICAgICAgICAgICBjb250
ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsgICAgCiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvciwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERh
dGFNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29sb3IuaCIK
LSNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NSZWN0LmgiCiAjaW1wb3J0
ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlv
bi5oIgpAQCAtMzg2LDkgKzM4Niw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKICAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1vbm90eXBl
Q29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0dyYXBoaWNzUmVj
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5k
aW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBo
cyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250
YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKICAgICBib3VuZGluZ0JveC5zZXRZKC1ib3Vu
ZGluZ0JveC5tYXhZKCkpOwogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHB1YmxpYzoKICAgICB+Qml0bWFwVGV4dHVyZUdMKCkgeyBk
ZXN0cm95KCk7IH0KICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQogICAgIGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7
IH0KLSAgICBpbmxpbmUgRmxvYXRTaXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVsYXRpdmVTaXplOyB9CisgICAgaW5saW5lIEdyYXBoaWNzU2l6ZSByZWxhdGl2ZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX3JlbGF0aXZlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0K
IAogICAgIHZvaWQgcGFjaygpCkBAIC0yNjAsNyArMjYwLDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBHTHVpbnQgbV9pZDsKICAgICBJbWFnZVVJRCBtX2ltYWdlVUlEOwotICAgIEZsb2F0U2l6
ZSBtX3JlbGF0aXZlU2l6ZTsKKyAgICBHcmFwaGljc1NpemUgbV9yZWxhdGl2ZVNpemU7CiAgICAg
Ym9vbCBtX29wYXF1ZTsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgUmVmUHRyPFJH
QkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBtX2J1ZmZlcjsKQEAgLTQxMiw3ICs0MTIsNyBAQCB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogfQogCiAKLXZvaWQgVGV4dHVyZU1h
cHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2spCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrKQogewogICAgIGlm
ICghdGV4dHVyZS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMCw3ICs0MjAsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgCiAgICAgZHJhd1RleHR1
cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpLCB0ZXh0dXJlR0wucmVsYXRp
dmVTaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZmFsc2UpOwogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9v
bCBvcGFxdWUsIGNvbnN0IEZsb2F0U2l6ZSYgcmVsYXRpdmVTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBib29sIGZs
aXApCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwg
Ym9vbCBvcGFxdWUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmVsYXRpdmVTaXplLCBjb25zdCBHcmFw
aGljc1JlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZp
ZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
LCBib29sIGZsaXApCiB7CiAgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpT
aGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCkBAIC01MTEs
NyArNTExLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNpegogICAg
ICAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fdGV4
dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgMCkpCiAgICAgfQogICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1NpemU7Ci0g
ICAgbV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgpKSAvIG1f
dGV4dHVyZVNpemUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3RleHR1cmVT
aXplLmhlaWdodCgpKTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEdyYXBoaWNzU2l6ZShmbG9hdChu
ZXdTaXplLndpZHRoKCkpIC8gbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBmbG9hdChuZXdTaXplLmhl
aWdodCgpKSAvIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogICAgIG1fb3BhcXVlID0gb3BhcXVl
OwogICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOwogfQpAQCAtNjIwLDcgKzYyMCw3IEBA
IHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKICAgICBtX2ZibyA9IDA7CiAgICAgbV9p
ZCA9IDA7CiAgICAgbV90ZXh0dXJlU2l6ZSA9IEludFNpemUoKTsKLSAgICBtX3JlbGF0aXZlU2l6
ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEdyYXBoaWNzU2l6ZSgx
LCAxKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdApAQCAtNjU0
LDcgKzY1NCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXAKICAg
ICBzdXJmYWNlLT5iaW5kKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBHcmFwaGljc1JlY3Qm
IHRhcmdldFJlY3QpCiB7CiAgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpT
aGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6Okdsb2JhbEdM
RGF0YTo6Q2xpcFByb2dyYW07CiAgICAgY29uc3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFs
R0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkuZ2xvYmFsR0xEYXRhLnBy
b2dyYW1zW3Byb2dyYW1dOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAvLyByZWltcHMgZnJvbSBUZXh0dXJlTWFw
cGVyCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNp
dHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBH
cmFwaGljc1JlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEdyYXBoaWNzU2l6
ZSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCk7
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpOwot
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lk
IGVuZENsaXAoKTsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyAr
MTI2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbgogICAgIG1f
ZGF0YS0+ZHJhd0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIFZHX1NUUk9LRV9QQVRI
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNTIsNyAr
MTUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogICAgIG1f
ZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfU1RST0tFX1BBVEgsIG1fc3RhdGUuZmlsbFJ1bGUpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0x
NjAsNyArMTYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwog
ICAgIG1fZGF0YS0+ZHJhd1JlY3QocmVjdCwgVkdfRklMTF9QQVRIKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjbwogICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsgLy8gRklYTUUKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNSw3ICsyMjUs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAgICAgQ29sb3Ig
b2xkU3Ryb2tlQ29sb3IgPSBtX2RhdGEtPnN0cm9rZUNvbG9yKCk7CiAgICAgbV9kYXRhLT5zZXRT
dHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwogICAgIG1fZGF0YS0+c2V0U3Ryb2tlQ29sb3IoY29s
b3IpOwotICAgIHN0cm9rZVJlY3QoRmxvYXRSZWN0KGZpbmFsRm9jdXNSZWN0KSwgMS5mKTsKKyAg
ICBzdHJva2VSZWN0KEdyYXBoaWNzUmVjdChmaW5hbEZvY3VzUmVjdCksIDEuZik7CiAgICAgbV9k
YXRhLT5zZXRTdHJva2VTdHlsZShvbGRTdHlsZSk7CiAgICAgbV9kYXRhLT5zZXRTdHJva2VDb2xv
cihvbGRTdHJva2VDb2xvcik7CiB9CkBAIC0yNTcsMTUgKzI1NywxNSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAgICAgVU5VU0VEX1BBUkFNKHN0eWxlKTsKIH0K
IAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSkKK0dyYXBoaWNzUmVjdCBHcmFwaGljc0NvbnRl
eHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBSb3VuZGlu
Z01vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKLSAgICByZXR1cm4g
RmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT50cmFuc2Zvcm1hdGlvbigpLm1hcFJl
Y3QocmVjdCkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGVuY2xvc2luZ0ludFJlY3QobV9k
YXRhLT50cmFuc2Zvcm1hdGlvbigpLm1hcFJlY3QocmVjdCkpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiBzaXpl
LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMDIs
NyArMzAyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzEzLDcgKzMxMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICBtX2RhdGEtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihv
cCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDcgKzM5Myw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgKICAgICBtX2RhdGEtPmNs
aXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5maWxsUnVs
ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNj
YWxlRmFjdG9ycykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1Np
emUmIHNjYWxlRmFjdG9ycykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgSW50UgogICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6
U3VidHJhY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTQ0NCw3ICs0NDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVj
CiAKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIHBhdGgu
YWRkRWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCkgKyB0aGlja25lc3MsIHJlY3QueSgpICsgdGhp
Y2tuZXNzLAorICAgIHBhdGguYWRkRWxsaXBzZShHcmFwaGljc1JlY3QocmVjdC54KCkgKyB0aGlj
a25lc3MsIHJlY3QueSgpICsgdGhpY2tuZXNzLAogICAgICAgICByZWN0LndpZHRoKCkgLSAodGhp
Y2tuZXNzICogMiksIHJlY3QuaGVpZ2h0KCkgLSAodGhpY2tuZXNzICogMikpKTsKIAogICAgIG1f
ZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwgbV9zdGF0
ZS5maWxsUnVsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvSW1hZ2VPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCkBAIC0x
MTIsNyArMTEyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3JtRGF0YQog
fQogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLXN0YXRpYyB2b2lk
IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRTaXplJiBvcmlnU2l6ZSwgY29uc3QgSW50U2l6ZSYgc2NhbGVkU2l6ZSkKK3N0YXRpYyB2
b2lkIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoR3JhcGhpY3NSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRTaXplJiBvcmlnU2l6ZSwgY29uc3QgSW50U2l6ZSYgc2NhbGVkU2l6ZSkKIHsK
ICAgICAvLyBXZSBhc3N1bWUgZG93bi1zYW1wbGluZyB6b29tIHJhdGVzIGluIFggZGlyZWN0aW9u
IGFuZCBpbiBZIGRpcmVjdGlvbiBhcmUgc2FtZS4KICAgICBpZiAob3JpZ1NpemUud2lkdGgoKSA9
PSBzY2FsZWRTaXplLndpZHRoKCkpCkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIHZvaWQgYWRq
dXN0U291cmNlUmVjdEZvckRvd25TYW1wbAogfQogI2VuZGlmCiAKLXZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBp
ZiAoZHN0LmlzRW1wdHkoKSB8fCBzcmMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0x
NTMsNyArMTUzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAog
ICAgIGVsc2UKICAgICAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKIAot
ICAgIEZsb2F0UmVjdCBzcmNSZWN0TG9jYWwoc3JjKTsKKyAgICBHcmFwaGljc1JlY3Qgc3JjUmVj
dExvY2FsKHNyYyk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAg
ICBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3RMb2NhbCwgc2l6ZSgpLCBp
bWFnZS0+c2l6ZSgpKTsKICNlbmRpZgpAQCAtMTY1LDEwICsxNjUsMTAgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsCit2b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjLAogICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3QpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3QpCiB7CiAgICAgaWYgKGRzdC5pc0VtcHR5KCkgfHwgc3Jj
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3BlblZHLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcv
UGFpbnRlck9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDkgQEAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkRh
c2hBcnJheS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTA3LDcgKzEwNyw3
IEBAIHN0cnVjdCBQbGF0Zm9ybVBhaW50ZXJTdGF0ZSB7CiAgICAgZmxvYXQgb3BhY2l0eTsKIAog
ICAgIGJvb2wgc2Npc3NvcmluZ0VuYWJsZWQ7Ci0gICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0Owor
ICAgIEdyYXBoaWNzUmVjdCBzY2lzc29yUmVjdDsKICNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEK
ICAgICBib29sIG1hc2tpbmdDaGFuZ2VkQW5kRW5hYmxlZDsKICAgICBWR01hc2tMYXllciBtYXNr
OwpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6c2V0QW50aWFsaWFzaW5n
RW5hYmwKICAgICAgICAgdmdTZXRpKFZHX1JFTkRFUklOR19RVUFMSVRZLCBWR19SRU5ERVJJTkdf
UVVBTElUWV9OT05BTlRJQUxJQVNFRCk7CiB9CiAKLXZvaWQgUGFpbnRlck9wZW5WRzo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcnMpCit2b2lkIFBhaW50ZXJPcGVuVkc6OnNjYWxl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2NhbGVGYWN0b3JzKQogewogICAgIEFTU0VSVChtX3N0YXRl
KTsKICAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7CkBAIC03MzMsNyArNzMzLDcgQEAgdm9p
ZCBQYWludGVyT3BlblZHOjpkcmF3UGF0aChjb25zdCBQYXRoJgogICAgIEFTU0VSVF9WR19OT19F
UlJPUigpOwogfQogCi12b2lkIFBhaW50ZXJPcGVuVkc6OmludGVyc2VjdFNjaXNzb3JSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0U2Npc3Nv
clJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIC8vIFNjaXNzb3IgcmVjdGFu
Z2xlcyBhcmUgZGVmaW5lZCBieSBmbG9hdCB2YWx1ZXMsIGJ1dCBlLmcuIHBhaW50aW5nCiAgICAg
Ly8gc29tZXRoaW5nIHJlZCB0byBhIGZsb2F0LWNsaXBwZWQgcmVjdGFuZ2xlIGFuZCB0aGVuIHBh
aW50aW5nIHNvbWV0aGluZwpAQCAtNzQ0LDE2ICs3NDQsMTYgQEAgdm9pZCBQYWludGVyT3BlblZH
OjppbnRlcnNlY3RTY2lzc29yUmVjdAogICAgIC8vIHZpc3VhbCByZXN1bHQgaXMgYmV0dGVyIGlm
IHdlIGNsaXAgdG8gdGhlIGVuY2xvc2luZyBpbnRlZ2VyIHJlY3RhbmdsZQogICAgIC8vIHJhdGhl
ciB0aGFuIHRoZSBleGFjdCBmbG9hdCByZWN0YW5nbGUgZm9yIHNjaXNzb3JpbmcuCiAgICAgaWYg
KG1fc3RhdGUtPnNjaXNzb3JpbmdFbmFibGVkKQotICAgICAgICBtX3N0YXRlLT5zY2lzc29yUmVj
dC5pbnRlcnNlY3QoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKyAgICAgICAg
bV9zdGF0ZS0+c2Npc3NvclJlY3QuaW50ZXJzZWN0KEdyYXBoaWNzUmVjdChlbmNsb3NpbmdJbnRS
ZWN0KHJlY3QpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3RhdGUtPnNjaXNzb3JpbmdFbmFi
bGVkID0gdHJ1ZTsKLSAgICAgICAgbV9zdGF0ZS0+c2Npc3NvclJlY3QgPSBGbG9hdFJlY3QoZW5j
bG9zaW5nSW50UmVjdChyZWN0KSk7CisgICAgICAgIG1fc3RhdGUtPnNjaXNzb3JSZWN0ID0gR3Jh
cGhpY3NSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwogICAgIH0KIAogICAgIG1fc3RhdGUt
PmFwcGx5U2Npc3NvclJlY3QoKTsKIH0KIAotdm9pZCBQYWludGVyT3BlblZHOjppbnRlcnNlY3RD
bGlwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBhaW50ZXJPcGVuVkc6OmludGVy
c2VjdENsaXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQobV9z
dGF0ZSk7CiAgICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwpAQCAtNzY1LDcgKzc2NSw3IEBA
IHZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0Q2xpcFJlY3QoY28KICAgICB9CiAKICAgICAv
LyBDaGVjayBpZiB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBpcyBzdGlsbCByZWN0
aWxpbmVhciAoY2FuIGJlCi0gICAgLy8gcmVwcmVzZW50ZWQgYXMgRmxvYXRSZWN0KSBzbyB3ZSBj
b3VsZCBhcHBseSBzY2lzc29yaW5nIGluc3RlYWQgb2YKKyAgICAvLyByZXByZXNlbnRlZCBhcyBH
cmFwaGljc1JlY3QpIHNvIHdlIGNvdWxkIGFwcGx5IHNjaXNzb3JpbmcgaW5zdGVhZCBvZgogICAg
IC8vIChwb3RlbnRpYWxseSBtb3JlIGV4cGVuc2l2ZSkgcGF0aCBjbGlwcGluZy4gTm90ZSB0aGF0
IHNjaXNzb3JpbmcgaXMgbm90CiAgICAgLy8gc3ViamVjdCB0byB0cmFuc2Zvcm1hdGlvbnMsIHNv
IHdlIG5lZWQgdG8gZG8gdGhlIHRyYW5zZm9ybWF0aW9uIHRvCiAgICAgLy8gc3VyZmFjZSBjb29y
ZGluYXRlcyBieSBvdXJzZWx2ZXMuCkBAIC03NzQsNyArNzc0LDcgQEAgdm9pZCBQYWludGVyT3Bl
blZHOjppbnRlcnNlY3RDbGlwUmVjdChjbwogICAgIGlmIChlZmZlY3RpdmVTY2lzc29yUXVhZC5p
c1JlY3RpbGluZWFyKCkpCiAgICAgICAgIGludGVyc2VjdFNjaXNzb3JSZWN0KGVmZmVjdGl2ZVNj
aXNzb3JRdWFkLmJvdW5kaW5nQm94KCkpOwogICAgIGVsc2UgewotICAgICAgICAvLyBUaGUgdHJh
bnNmb3JtZWQgc2Npc3NvclJlY3QgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIEZsb2F0UmVjdAor
ICAgICAgICAvLyBUaGUgdHJhbnNmb3JtZWQgc2Npc3NvclJlY3QgY2Fubm90IGJlIHJlcHJlc2Vu
dGVkIGFzIEdyYXBoaWNzUmVjdAogICAgICAgICAvLyBhbnltb3JlLCBzbyB3ZSBuZWVkIHRvIHBl
cmZvcm0gbWFza2luZyBpbnN0ZWFkLgogICAgICAgICBQYXRoIHNjaXNzb3JSZWN0UGF0aDsKICAg
ICAgICAgc2Npc3NvclJlY3RQYXRoLmFkZFJlY3QocmVjdCk7CkBAIC04MTQsNyArODE0LDcgQEAg
dm9pZCBQYWludGVyT3BlblZHOjpjbGlwUGF0aChjb25zdCBQYXRoJgogI2VuZGlmCiB9CiAKLXZv
aWQgUGFpbnRlck9wZW5WRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBWR2JpdGZp
ZWxkIHNwZWNpZmllZFBhaW50TW9kZXMpCit2b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgVkdiaXRmaWVsZCBzcGVjaWZpZWRQYWludE1vZGVzKQog
ewogICAgIEFTU0VSVChtX3N0YXRlKTsKIApAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQgUGFpbnRl
ck9wZW5WRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXQKICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsK
IH0KIAotdm9pZCBQYWludGVyT3BlblZHOjpkcmF3Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwg
Y29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIFZH
Yml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKK3ZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1Jv
dW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNv
bnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBWR2JpdGZpZWxkIHNwZWNpZmllZFBhaW50TW9kZXMp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUpOwogCkBAIC04NzQsMTAgKzg3NCwxMCBAQCB2b2lkIFBh
aW50ZXJPcGVuVkc6OmRyYXdSb3VuZGVkUmVjdChjb25zCiAgICAgQVNTRVJUX1ZHX05PX0VSUk9S
KCk7CiAKICAgICAvLyBjbGFtcCBjb3JuZXIgYXJjIHNpemVzCi0gICAgRmxvYXRTaXplIGNsYW1w
ZWRUb3BMZWZ0ID0gRmxvYXRTaXplKHRvcExlZnQpLnNocnVua1RvKHJlY3Quc2l6ZSgpKS5leHBh
bmRlZFRvKEZsb2F0U2l6ZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFRvcFJpZ2h0ID0gRmxv
YXRTaXplKHRvcFJpZ2h0KS5zaHJ1bmtUbyhyZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhGbG9hdFNp
emUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRCb3R0b21MZWZ0ID0gRmxvYXRTaXplKGJvdHRv
bUxlZnQpLnNocnVua1RvKHJlY3Quc2l6ZSgpKS5leHBhbmRlZFRvKEZsb2F0U2l6ZSgpKTsKLSAg
ICBGbG9hdFNpemUgY2xhbXBlZEJvdHRvbVJpZ2h0ID0gRmxvYXRTaXplKGJvdHRvbVJpZ2h0KS5z
aHJ1bmtUbyhyZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhGbG9hdFNpemUoKSk7CisgICAgR3JhcGhp
Y3NTaXplIGNsYW1wZWRUb3BMZWZ0ID0gR3JhcGhpY3NTaXplKHRvcExlZnQpLnNocnVua1RvKHJl
Y3Quc2l6ZSgpKS5leHBhbmRlZFRvKEdyYXBoaWNzU2l6ZSgpKTsKKyAgICBHcmFwaGljc1NpemUg
Y2xhbXBlZFRvcFJpZ2h0ID0gR3JhcGhpY3NTaXplKHRvcFJpZ2h0KS5zaHJ1bmtUbyhyZWN0LnNp
emUoKSkuZXhwYW5kZWRUbyhHcmFwaGljc1NpemUoKSk7CisgICAgR3JhcGhpY3NTaXplIGNsYW1w
ZWRCb3R0b21MZWZ0ID0gR3JhcGhpY3NTaXplKGJvdHRvbUxlZnQpLnNocnVua1RvKHJlY3Quc2l6
ZSgpKS5leHBhbmRlZFRvKEdyYXBoaWNzU2l6ZSgpKTsKKyAgICBHcmFwaGljc1NpemUgY2xhbXBl
ZEJvdHRvbVJpZ2h0ID0gR3JhcGhpY3NTaXplKGJvdHRvbVJpZ2h0KS5zaHJ1bmtUbyhyZWN0LnNp
emUoKSkuZXhwYW5kZWRUbyhHcmFwaGljc1NpemUoKSk7CiAKICAgICAvLyBBcyBPcGVuVkcncyBj
b29yZGluYXRlIHN5c3RlbSBpcyBmbGlwcGVkIGluIGNvbXBhcmlzb24gdG8gV2ViS2l0J3MsCiAg
ICAgLy8gd2UgaGF2ZSB0byBzcGVjaWZ5IHRoZSBvcHBvc2l0ZSB2YWx1ZSBmb3IgdGhlICJjbG9j
a3dpc2UiIHZhbHVlLgpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgdm9pZCBQYWludGVyT3BlblZHOjpk
cmF3RWxsaXBzZShjb25zdCBJbgogICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwogfQogCi12b2lk
IFBhaW50ZXJPcGVuVkc6OmRyYXdQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0
UG9pbnQqIHBvaW50cywgVkdiaXRmaWVsZCBzcGVjaWZpZWRQYWludE1vZGVzKQordm9pZCBQYWlu
dGVyT3BlblZHOjpkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1Bv
aW50KiBwb2ludHMsIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKIHsKICAgICBBU1NF
UlQobV9zdGF0ZSk7CiAKQEAgLTEwNjEsNyArMTA2MSw3IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6
ZHJhd1BvbHlnb24oc2l6ZV90IG4KICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKIH0KIAotdm9p
ZCBQYWludGVyT3BlblZHOjpkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjKQordm9pZCBQYWludGVy
T3BlblZHOjpkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjKQogewogICAgIEFTU0VSVCht
X3N0YXRlKTsKICAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7CkBAIC0xMDcwLDE0ICsxMDcw
LDE0IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd0ltYWdlKFRpbGVkSW1hZ2UKICAgICAvLyB3
ZSBzcGxpdCB0aGVtIGludG8gdGlsZXMuCiAgICAgSW50UmVjdCBkcmF3blRpbGVzID0gdGlsZWRJ
bWFnZS0+dGlsZXNJblJlY3Qoc3JjKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gc3JjVG9Ec3RUcmFu
c2Zvcm1hdGlvbiA9IG1ha2VNYXBCZXR3ZWVuUmVjdHMoCi0gICAgICAgIEZsb2F0UmVjdChGbG9h
dFBvaW50KDAuMCwgMC4wKSwgc3JjLnNpemUoKSksIGRzdCk7CisgICAgICAgIEdyYXBoaWNzUmVj
dChHcmFwaGljc1BvaW50KDAuMCwgMC4wKSwgc3JjLnNpemUoKSksIGRzdCk7CiAgICAgc3JjVG9E
c3RUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUoLXNyYy54KCksIC1zcmMueSgpKTsKIAogICAgIGZv
ciAoaW50IHlJbmRleCA9IGRyYXduVGlsZXMueSgpOyB5SW5kZXggPCBkcmF3blRpbGVzLmJvdHRv
bSgpOyArK3lJbmRleCkgewogICAgICAgICBmb3IgKGludCB4SW5kZXggPSBkcmF3blRpbGVzLngo
KTsgeEluZGV4IDwgZHJhd25UaWxlcy5yaWdodCgpOyArK3hJbmRleCkgewogICAgICAgICAgICAg
Ly8gVGhlIHNyY1RpbGUgcmVjdGFuZ2xlIGlzIGFuIGFsaWduZWQgdGlsZSBjcm9wcGVkIGJ5IHRo
ZSBzcmMgcmVjdGFuZ2xlLgotICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGUodGlsZWRJbWFnZS0+
dGlsZVJlY3QoeEluZGV4LCB5SW5kZXgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNUaWxl
ID0gaW50ZXJzZWN0aW9uKHNyYywgdGlsZSk7CisgICAgICAgICAgICBHcmFwaGljc1JlY3QgdGls
ZSh0aWxlZEltYWdlLT50aWxlUmVjdCh4SW5kZXgsIHlJbmRleCkpOworICAgICAgICAgICAgR3Jh
cGhpY3NSZWN0IHNyY1RpbGUgPSBpbnRlcnNlY3Rpb24oc3JjLCB0aWxlKTsKIAogICAgICAgICAg
ICAgc2F2ZSgpOwogCkBAIC0xMTA1LDcgKzExMDUsNyBAQCB2b2lkIFBhaW50ZXJPcGVuVkc6OmRy
YXdJbWFnZShUaWxlZEltYWdlCiB9CiAKICNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKLXZvaWQg
UGFpbnRlck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm9udCwgVmVjdG9yPFZHdWludD4mIGNo
YXJhY3RlcnMsIFZHZmxvYXQqIGFkanVzdG1lbnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1RleHQoVkdG
b250IHZnRm9udCwgVmVjdG9yPFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFkanVzdG1l
bnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkK
IHsKICAgICBBU1NFUlQobV9zdGF0ZSk7CiAKQEAgLTExMjAsOCArMTEyMCw4IEBAIHZvaWQgUGFp
bnRlck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm8KIAogICAgIG1fc3VyZmFjZS0+bWFrZUN1
cnJlbnQoKTsKIAotICAgIEZsb2F0UG9pbnQgZWZmZWN0aXZlUG9pbnQgPSBtX3N0YXRlLT5zdXJm
YWNlVHJhbnNmb3JtYXRpb24ubWFwUG9pbnQocG9pbnQpOwotICAgIEZsb2F0UG9pbnQgcCA9IHBv
aW50OworICAgIEdyYXBoaWNzUG9pbnQgZWZmZWN0aXZlUG9pbnQgPSBtX3N0YXRlLT5zdXJmYWNl
VHJhbnNmb3JtYXRpb24ubWFwUG9pbnQocG9pbnQpOworICAgIEdyYXBoaWNzUG9pbnQgcCA9IHBv
aW50OwogICAgIEFmZmluZVRyYW5zZm9ybSogb3JpZ2luYWxUcmFuc2Zvcm1hdGlvbiA9IDA7CiAK
ICAgICAvLyBJbiBjYXNlIHRoZSBmb250IGlzbid0IGRyYXduIGF0IGEgcGl4ZWwtZXhhY3QgYmFz
ZWxpbmUgYW5kIHdlIGNhbiBlYXNpbHkKQEAgLTExMzgsNyArMTEzOCw3IEBAIHZvaWQgUGFpbnRl
ck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm8KICAgICAgICAgICAgIG1fc3RhdGUtPnN1cmZh
Y2VUcmFuc2Zvcm1hdGlvbi5hKCksIDAsCiAgICAgICAgICAgICAwLCBtX3N0YXRlLT5zdXJmYWNl
VHJhbnNmb3JtYXRpb24uZCgpLAogICAgICAgICAgICAgcm91bmRmKGVmZmVjdGl2ZVBvaW50Lngo
KSksIHJvdW5kZihlZmZlY3RpdmVQb2ludC55KCkpKSk7Ci0gICAgICAgIHAgPSBGbG9hdFBvaW50
KCk7CisgICAgICAgIHAgPSBHcmFwaGljc1BvaW50KCk7CiAgICAgfQogCiAgICAgY29uc3QgVkdm
bG9hdCB2Z1BvaW50WzJdID0geyBwLngoKSwgcC55KCkgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3BlblZHLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvUGFpbnRlck9wZW5WRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEZsb2F0UG9p
bnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3MgR3JhcGhp
Y3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBQYXRoOwpAQCAt
OTcsMjQgKzk3LDI0IEBAIHB1YmxpYzoKICAgICBib29sIGFudGlhbGlhc2luZ0VuYWJsZWQoKSBj
b25zdDsKICAgICB2b2lkIHNldEFudGlhbGlhc2luZ0VuYWJsZWQoYm9vbCk7CiAKLSAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IChWR19T
VFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwotICAgIHZvaWQgZHJhd1JvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRv
cFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21S
aWdodCwgVkdiaXRmaWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9Q
QVRIKSk7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBWR2JpdGZpZWxk
IHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKKyAgICB2b2lk
IGRyYXdSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BM
ZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwg
Y29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IChWR19T
VFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50
UG9pbnQmIGZyb20sIGNvbnN0IEludFBvaW50JiB0byk7CiAgICAgdm9pZCBkcmF3QXJjKGNvbnN0
IEludFJlY3QmIGVsbGlwc2VCb3VuZHMsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuLCBW
R2JpdGZpZWxkIHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsK
ICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIGJvdW5kcywgVkdiaXRmaWVsZCBw
YWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSk7Ci0gICAgdm9pZCBk
cmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIFZH
Yml0ZmllbGQgcGFpbnRNb2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwot
ICAgIHZvaWQgZHJhd0ltYWdlKFRpbGVkSW1hZ2VPcGVuVkcqLCBjb25zdCBGbG9hdFJlY3QmIGRz
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMpOworICAgIHZvaWQgZHJhd1BvbHlnb24oc2l6ZV90IG51
bVBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBWR2JpdGZpZWxkIHBhaW50TW9k
ZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKKyAgICB2b2lkIGRyYXdJbWFn
ZShUaWxlZEltYWdlT3BlblZHKiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3QsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgc3JjKTsKICNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKLSAgICB2b2lkIGRyYXdU
ZXh0KFZHRm9udCwgVmVjdG9yPFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFkanVzdG1l
bnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9p
ZCBkcmF3VGV4dChWR0ZvbnQsIFZlY3RvcjxWR3VpbnQ+JiBjaGFyYWN0ZXJzLCBWR2Zsb2F0KiBh
ZGp1c3RtZW50c1gsIFZHZmxvYXQqIGFkanVzdG1lbnRzWSwgY29uc3QgR3JhcGhpY3NQb2ludCYp
OwogI2VuZGlmCiAKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0b3Jz
KTsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2NhbGVGYWN0b3JzKTsKICAg
ICB2b2lkIHJvdGF0ZShmbG9hdCByYWRpYW5zKTsKICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCBk
eCwgZmxvYXQgZHkpOwogCiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJiwgVkdiaXRmaWVs
ZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSwgV2luZFJ1bGUg
ZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwogCi0gICAgdm9pZCBpbnRlcnNlY3RDbGlwUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGludGVyc2VjdENsaXBSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYpOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFBhaW50ZXJPcGVuVkc6
OkNsaXBPcGVyYXRpb24sIFdpbmRSdWxlIGNsaXBSdWxlID0gUlVMRV9OT05aRVJPKTsKIAogICAg
IFRpbGVkSW1hZ2VPcGVuVkcqIGFzTmV3TmF0aXZlSW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjLCBW
R0ltYWdlRm9ybWF0KTsKQEAgLTEyOSw3ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVz
dHJveVBhaW50ZXJTdGF0ZXMoKTsKICAgICB2b2lkIGFwcGx5U3RhdGUoKTsKIAotICAgIHZvaWQg
aW50ZXJzZWN0U2Npc3NvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBpbnRlcnNl
Y3RTY2lzc29yUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogcHJpdmF0ZToKICAgICBWZWN0
b3I8UGxhdGZvcm1QYWludGVyU3RhdGUqPiBtX3N0YXRlU3RhY2s7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGF0aE9wZW5WRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhdGhPcGVuVkcuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9QYXRoT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lu
Y2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFp
bnRlck9wZW5WRy5oIgpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgUGF0aCYgUGF0aDo6b3BlcmF0b3I9
KGNvbnN0IFBhdGgmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotRmxvYXRQb2ludCBQ
YXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKK0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3VycmVudFBv
aW50KCkgY29uc3QgCiB7CiAgICAgLy8gRklYTUU6IGlzIHRoaXMgdGhlIHdheSB0byByZXR1cm4g
dGhlIGN1cnJlbnQgcG9pbnQgb2YgdGhlIHN1YnBhdGg/CiAgICAgcmV0dXJuIG1fY3VycmVudFBv
aW50OwogfQogCiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdCgpLmNvbnRhaW5zKHBvaW50KTsKIH0K
IAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBQYXRoOjpzdHJva2VDb250YWlu
cyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAKQEAgLTE0OCwxNCArMTQ4LDE0IEBA
IGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAKICAgICByZXR1cm4gKGNv
bnN0X2Nhc3Q8UGF0aCo+KHRoaXMpKS0+c3Ryb2tlQm91bmRpbmdSZWN0KCkuY29udGFpbnMocG9p
bnQpOwogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2
b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uOwogICAgIHRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm1h
dGlvbik7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgVkdmbG9hdCBtaW5YOwog
ICAgIFZHZmxvYXQgbWluWTsKQEAgLTE2NiwxMCArMTY2LDEwIEBAIEZsb2F0UmVjdCBQYXRoOjpi
b3VuZGluZ1JlY3QoKSBjb25zdAogICAgIHZnUGF0aEJvdW5kcyhtX3BhdGgtPnZnUGF0aCgpLCAm
bWluWCwgJm1pblksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7
CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQobWluWCwgbWluWSksIEZsb2F0U2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50
KG1pblgsIG1pblkpLCBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCkpOwogfQogCi1GbG9hdFJl
Y3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikg
Y29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVB
cHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAKQEAgLTE3
OCw3ICsxNzgsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiAg
ICAgcmV0dXJuIGJvdW5kaW5nUmVjdCgpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50KQogewogICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBhdGhTZWdtZW50c1tdID0geyBW
R19NT1ZFX1RPX0FCUyB9OwogICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsgcG9pbnQu
eCgpLCBwb2ludC55KCkgfTsKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIFBhdGg6Om1vdmVUbyhj
b25zdCBGbG9hdFBvaW50JiBwb2luCiAgICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9IG1fcGF0
aC0+bV9zdWJwYXRoU3RhcnRQb2ludCA9IHBvaW50OwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVU
byhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBhdGhTZWdt
ZW50c1tdID0geyBWR19MSU5FX1RPX0FCUyB9OwogICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFb
XSA9IHsgcG9pbnQueCgpLCBwb2ludC55KCkgfTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIFBh
dGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwCiAgICAgbV9wYXRoLT5tX2N1cnJlbnRQ
b2ludCA9IHBvaW50OwogfQogCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgZW5kUG9pbnQpCit2b2lkIFBh
dGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludCwgY29u
c3QgR3JhcGhpY3NQb2ludCYgZW5kUG9pbnQpCiB7CiAgICAgc3RhdGljIGNvbnN0IFZHdWJ5dGUg
cGF0aFNlZ21lbnRzW10gPSB7IFZHX1FVQURfVE9fQUJTIH07CiAgICAgY29uc3QgVkdmbG9hdCBw
YXRoRGF0YVtdID0geyBjb250cm9sUG9pbnQueCgpLCBjb250cm9sUG9pbnQueSgpLCBlbmRQb2lu
dC54KCksIGVuZFBvaW50LnkoKSB9OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgUGF0aDo6YWRk
UXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2kKICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0g
ZW5kUG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25z
dCBGbG9hdFBvaW50JiBlbmRQb2ludCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBjb250
cm9sUG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiBlbmRQb2ludCkKIHsKICAgICBzdGF0aWMg
Y29uc3QgVkd1Ynl0ZSBwYXRoU2VnbWVudHNbXSA9IHsgVkdfQ1VCSUNfVE9fQUJTIH07CiAgICAg
Y29uc3QgVkdmbG9hdCBwYXRoRGF0YVtdID0geyBjb250cm9sUG9pbnQxLngoKSwgY29udHJvbFBv
aW50MS55KCksIGNvbnRyb2xQb2ludDIueCgpLCBjb250cm9sUG9pbnQyLnkoKSwgZW5kUG9pbnQu
eCgpLCBlbmRQb2ludC55KCkgfTsKQEAgLTIyNiwxOCArMjI2LDE4IEBAIHZvaWQgUGF0aDo6YWRk
QmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFAKICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0g
ZW5kUG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGZsb2F0IHJhZGl1cykKK3ZvaWQgUGF0aDo6
YWRkQXJjVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludDIsIGZsb2F0IHJhZGl1cykKIHsKICAgICAvLyBTZWUgaHR0cDovL3BoaWxpcC5odG1s
NS5vcmcvdGVzdHMvY2FudmFzL3N1aXRlL3Rlc3RzL3NwZWMuaHRtbCNhcmN0by4KIAotICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MCA9IG1fcGF0aC0+bV9jdXJyZW50UG9pbnQ7CisgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQwID0gbV9wYXRoLT5tX2N1cnJlbnRQb2ludDsKICAgICBp
ZiAoIXJhZGl1cyB8fCBwb2ludDAgPT0gcG9pbnQxIHx8IHBvaW50MSA9PSBwb2ludDIpIHsKICAg
ICAgICAgYWRkTGluZVRvKHBvaW50MSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBG
bG9hdFNpemUgdjAxID0gcG9pbnQwIC0gcG9pbnQxOwotICAgIEZsb2F0U2l6ZSB2MjEgPSBwb2lu
dDIgLSBwb2ludDE7CisgICAgR3JhcGhpY3NTaXplIHYwMSA9IHBvaW50MCAtIHBvaW50MTsKKyAg
ICBHcmFwaGljc1NpemUgdjIxID0gcG9pbnQyIC0gcG9pbnQxOwogCiAgICAgLy8gc2luKEEgLSBC
KSA9IHNpbihBKSAqIGNvcyhCKSAtIHNpbihCKSAqIGNvcyhBKQogICAgIGRvdWJsZSBjcm9zcyA9
IHYwMS53aWR0aCgpICogdjIxLmhlaWdodCgpIC0gdjAxLmhlaWdodCgpICogdjIxLndpZHRoKCk7
CkBAIC0yNTMsMTAgKzI1MywxMCBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9p
bnQmIHBvCiAgICAgZG91YmxlIGFuZ2xlID0gKHBpRG91YmxlIC0gZmFicyhhc2luKGNyb3NzIC8g
KGQwMSAqIGQyMSkpKSkgKiAwLjU7CiAgICAgZG91YmxlIHNwYW4gPSByYWRpdXMgKiB0YW4oYW5n
bGUpOwogICAgIGRvdWJsZSByYXRlID0gc3BhbiAvIGQwMTsKLSAgICBGbG9hdFBvaW50IHN0YXJ0
UG9pbnQgPSBGbG9hdFBvaW50KHBvaW50MS54KCkgKyB2MDEud2lkdGgoKSAqIHJhdGUsCisgICAg
R3JhcGhpY3NQb2ludCBzdGFydFBvaW50ID0gR3JhcGhpY3NQb2ludChwb2ludDEueCgpICsgdjAx
LndpZHRoKCkgKiByYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9pbnQxLnkoKSArIHYwMS5oZWlnaHQoKSAqIHJhdGUpOwogICAgIHJhdGUgPSBzcGFuIC8gZDIx
OwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBGbG9hdFBvaW50KHBvaW50MS54KCkgKyB2MjEu
d2lkdGgoKSAqIHJhdGUsCisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludCA9IEdyYXBoaWNzUG9p
bnQocG9pbnQxLngoKSArIHYyMS53aWR0aCgpICogcmF0ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludDEueSgpICsgdjIxLmhlaWdodCgpICogcmF0ZSk7CiAKICAg
ICAvLyBGYTogbGFyZ2UgYXJjIGZsYWcsIG1ha2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gU0NX
QVJDX1RPIGFuZCBMQ1dBUkNfVE8KQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIFBhdGg6OmNsb3Nl
U3VicGF0aCgpCiAgICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9IG1fcGF0aC0+bV9zdWJwYXRo
U3RhcnRQb2ludDsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgY2Vu
dGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29s
IGFudGljbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiBj
ZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJv
b2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICAvLyBUaGUgT3BlblZHIHNwZWMgc2F5cyBub3RoaW5n
IGFib3V0IGluZiBhcyByYWRpdXMgb3Igc3RhcnQvZW5kIGFuZ2xlLgogICAgIC8vIFdlYktpdCBz
ZWVtcyB0byBwYXNzIHRob3NlIChlLmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQ0OSksCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBQYXRoOjphZGRBcmMoY29u
c3QgRmxvYXRQb2ludCYgY2VudAogICAgIG1fcGF0aC0+bV9jdXJyZW50UG9pbnQuc2V0WShlbmRZ
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
UGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgc3RhdGljIGNv
bnN0IFZHdWJ5dGUgcGF0aFNlZ21lbnRzW10gPSB7CiAgICAgICAgIFZHX01PVkVfVE9fQUJTLApA
QCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QKICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0gbV9wYXRoLT5tX3N1YnBhdGhTdGFydFBv
aW50ID0gcmVjdC5sb2NhdGlvbigpOwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCkKIHsKICAgICBzdGF0aWMgY29uc3QgVkd1Ynl0ZSBwYXRoU2VnbWVudHNbXSA9IHsK
ICAgICAgICAgVkdfTU9WRV9UT19BQlMsCkBAIC00NzIsNyArNDcyLDcgQEAgZmxvYXQgUGF0aDo6
bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi1GbG9hdFBvaW50IFBhdGg6
OnBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK0dyYXBoaWNzUG9p
bnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAogewog
ICAgIFZHZmxvYXQgeCA9IDAsIHkgPSAwOwogICAgIG1fcGF0aC0+bWFrZUNvbXBhdGlibGVDb250
ZXh0Q3VycmVudCgpOwpAQCAtNDgwLDcgKzQ4MCw3IEBAIEZsb2F0UG9pbnQgUGF0aDo6cG9pbnRB
dExlbmd0aChmbG9hdCBsZW4KICAgICB2Z1BvaW50QWxvbmdQYXRoKG1fcGF0aC0+dmdQYXRoKCks
IDAsIHZnR2V0UGFyYW1ldGVyaShtX3BhdGgtPnZnUGF0aCgpLCBWR19QQVRIX05VTV9TRUdNRU5U
UyksCiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsICZ4LCAmeSwgMCwgMCk7CiAgICAgb2sg
PSAodmdHZXRFcnJvcigpID09IFZHX05PX0VSUk9SKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludCh4
LCB5KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludCh4LCB5KTsKIH0KIAogZmxvYXQgUGF0aDo6
bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BsYXRmb3JtUGF0aE9wZW5W
Ry5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52
Zy9QbGF0Zm9ybVBhdGhPcGVuVkcuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGxhdGZvcm1QYXRoT3BlblZHLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgUGxhdGZvcm1QYXRoT3BlblZHX2gKICNk
ZWZpbmUgUGxhdGZvcm1QYXRoT3BlblZHX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiU2hhcmVkUmVzb3VyY2VPcGVuVkcu
aCIKIAogI2luY2x1ZGUgPG9wZW52Zy5oPgpAQCAtMzksOCArMzksOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhcigpOwogCiBwdWJsaWM6Ci0gICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb2ludDsK
LSAgICBGbG9hdFBvaW50IG1fc3VicGF0aFN0YXJ0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBt
X2N1cnJlbnRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fc3VicGF0aFN0YXJ0UG9pbnQ7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVQYXRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5WRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VPcGVu
VkcuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyAr
MjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRpbGVkSW1hZ2VPcGVuVkcu
aCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJWR1V0aWxzLmgiCiAKQEAgLTg4LDcgKzg4
LDcgQEAgdm9pZCBUaWxlZEltYWdlT3BlblZHOjpzZXRUaWxlKGludCB4SW5kZQogICAgIG1fdGls
ZXMuYXQoaSkgPSBpbWFnZTsKIH0KIAotSW50UmVjdCBUaWxlZEltYWdlT3BlblZHOjp0aWxlc0lu
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CitJbnRSZWN0IFRpbGVkSW1hZ2VPcGVu
Vkc6OnRpbGVzSW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBp
bnQgbGVmdEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0LngoKSkgLyBtX21heFRpbGVTaXpl
LndpZHRoKCk7CiAgICAgaW50IHRvcEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0LnkoKSkg
LyBtX21heFRpbGVTaXplLmhlaWdodCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VPcGVuVkcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5WRy5oCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9U
aWxlZEltYWdlT3BlblZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7
CiAKIGNsYXNzIFRpbGVkSW1hZ2VPcGVuVkcgOiBwdWJsaWMgU2hhcmVkUmVzb3VyY2VPcGVuVkcg
ewogcHVibGljOgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNvbHVtbnMo
KSBjb25zdDsKICAgICBpbnQgbnVtUm93cygpIGNvbnN0OwogCi0gICAgSW50UmVjdCB0aWxlc0lu
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVzSW5SZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUaWxlKGludCB4SW5kZXgs
IGludCB5SW5kZXgsIFZHSW1hZ2UpOwogICAgIFZHSW1hZ2UgdGlsZShpbnQgeEluZGV4LCBpbnQg
eUluZGV4KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9WR1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvVkdVdGlscy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiVkdVdGlscy5oIgogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTAyLDcgKzEwMiw3IEBAIFZHUmVjdDo6VkdSZWN0KGNvbnN0IFZHZmxv
YXQgZGF0YVs0XSkKICAgICBtX2RhdGFbM10gPSBkYXRhWzNdOwogfQogCi1WR1JlY3Q6OlZHUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitWR1JlY3Q6OlZHUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QpCiB7CiAgICAgbV9kYXRhWzBdID0gcmVjdC54KCk7CiAgICAgbV9kYXRhWzFdID0g
cmVjdC55KCk7CkBAIC0xMTAsMTIgKzExMCwxMiBAQCBWR1JlY3Q6OlZHUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgbV9kYXRhWzNdID0gcmVjdC5oZWlnaHQoKTsKIH0KIAotVkdSZWN0
OjpvcGVyYXRvciBGbG9hdFJlY3QoKSBjb25zdAorVkdSZWN0OjpvcGVyYXRvciBHcmFwaGljc1Jl
Y3QoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QobV9kYXRhWzBdLCBtX2RhdGFbMV0s
IG1fZGF0YVsyXSwgbV9kYXRhWzNdKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1fZGF0YVsw
XSwgbV9kYXRhWzFdLCBtX2RhdGFbMl0sIG1fZGF0YVszXSk7CiB9CiAKLUZsb2F0UmVjdDo6b3Bl
cmF0b3IgVkdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdDo6b3BlcmF0b3IgVkdSZWN0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gVkdSZWN0KCp0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogdG9WR0Vycm9yQ29uc3QKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgVHJh
bnNmb3JtYXRpb25NYXRyaXg7CiAKIGNsYXNzIFZHTWF0cml4IHsKQEAgLTc4LDkgKzc4LDkgQEAg
cHJpdmF0ZToKIGNsYXNzIFZHUmVjdCB7CiBwdWJsaWM6CiAgICAgVkdSZWN0KGNvbnN0IFZHZmxv
YXQgZGF0YVs0XSk7Ci0gICAgVkdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFZHUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmKTsKICAgICBjb25zdCBWR2Zsb2F0KiB0b1ZHZmxvYXQoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBvcGVyYXRvciBGbG9hdFJlY3QoKSBjb25zdDsKKyAg
ICBvcGVyYXRvciBHcmFwaGljc1JlY3QoKSBjb25zdDsKIHByaXZhdGU6CiAgICAgVkdmbG9hdCBt
X2RhdGFbNF07CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHJldmlzaW9u
IDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxl
Rm9udERhdGFQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5o
IgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpA
QCAtMTQwLDkgKzE0MCw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkK
ICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7
CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNG
b3JHbHlwaChHbHlwaCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgotCi0jaW5jbHVkZSA8UVBvaW50Rj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFBv
aW50OjpGbG9hdFBvaW50KGNvbnN0IFFQb2ludEYmIHApCi0gICAgOiBtX3gocC54KCkpCi0gICAg
LCBtX3kocC55KCkpCi17Ci19Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25z
dAotewotICAgIHJldHVybiBRUG9pbnRGKG1feCwgbV95KTsKLX0KLQotfQotCi0vLyB2aW06IHRz
PTQgc3c9NCBldApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxv
YXRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0Zsb2F0UmVjdFF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNr
QGtkZS5vcmc+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlIDxRUmVjdEY+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgUVJlY3RG
JiByKQotICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKLSAgICAsIG1fc2l6ZShyLndpZHRo
KCkKLSAgICAsIHIuaGVpZ2h0KCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgUVJlY3RG
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gUVJlY3RGKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQo
KSk7Ci19Ci0KLUZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5vcm1hbGl6ZWQoKSBjb25zdAotewotICAg
IEZsb2F0UmVjdCBub3JtYWxpemVkUmVjdCA9ICp0aGlzOwotCi0gICAgaWYgKHdpZHRoKCkgPCAw
KSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFgoeCgpICsgd2lkdGgoKSk7Ci0gICAgICAg
IG5vcm1hbGl6ZWRSZWN0LnNldFdpZHRoKC13aWR0aCgpKTsKLSAgICB9Ci0gICAgaWYgKGhlaWdo
dCgpIDwgMCkgewotICAgICAgICBub3JtYWxpemVkUmVjdC5zZXRZKHkoKSArIGhlaWdodCgpKTsK
LSAgICAgICAgbm9ybWFsaXplZFJlY3Quc2V0SGVpZ2h0KC1oZWlnaHQoKSk7Ci0gICAgfQotICAg
IHJldHVybiBub3JtYWxpemVkUmVjdDsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0aWMgUVBl
biBzdHJva2VQZW5Gb3JDb250ZXh0KEdyYXBoaWNzCiAgICAgcmV0dXJuIFFQZW4oUUNvbG9yKGN0
eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCi1zdGF0aWMg
dm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgY29uc3QgUUZv
bnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4VGV4dCkKK3N0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9u
KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9udCwgYm9vbCBp
c0NvbXBsZXhUZXh0KQogewogICAgIGlmICh0byA8IDApCiAgICAgICAgIHRvID0gcnVuLmxlbmd0
aCgpOwpAQCAtMjYxLDcgKzI2MSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBo
aWNzQ29udGUKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgZHJhd1RleHRDb21tb24o
Y3R4LCBydW4sIHBvaW50LCBmcm9tLCB0bywgZm9udCgpLCAvKiBpc0NvbXBsZXhUZXh0ID0gKi90
cnVlKTsKIH0KQEAgLTI5OCw3ICsyOTgsNyBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4CiAgICAgcmV0dXJuIGxpbmUueFRvQ3Vyc29yKHBvc2l0aW9uKTsKIH0KIAot
RmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwdCwgaW50IGgsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0CiB7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNw
YWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcgc3RyaW5n
ID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CkBAIC0zMTEsNyArMzExLDcgQEAg
RmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogICAgIGlmICh4MiA8IHgx
KQogICAgICAgICBxU3dhcCh4MSwgeDIpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkg
KyB4MSwgcHQueSgpLCB4MiAtIHgxLCBoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHB0Lngo
KSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOwogfQogCiBib29sIEZvbnQ6OmNhblJldHVybkZh
bGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC0zMTksMTMgKzMxOSwxMyBAQCBib29sIEZv
bnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21p
Y1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAv
KiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBU
ZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3Qg
R3JhcGhpY3NQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8p
IGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogI2lmIEhBVkUoUVJBV0ZPTlQp
Ci12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAor
dm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QK
IHsKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC00MTAsNyArNDEwLDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhz
SW5DbwogCiAjZWxzZSAvLyAhSEFWRShRUkFXRk9OVCkKIAotdm9pZCBGb250OjpkcmF3U2ltcGxl
VGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd1Np
bXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgZHJh
d1RleHRDb21tb24oY3R4LCBydW4sIHBvaW50LCBmcm9tLCB0bywgZm9udCgpLCAvKiBpc0NvbXBs
ZXhUZXh0ID0gKi9mYWxzZSk7CiB9CkBAIC00NjAsNyArNDYwLDcgQEAgZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvclNpbXBsZVRleHQoY29ucwogfQogCiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBTdHJp
bmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1
bi5sZW5ndGgoKSk7CiAgICAgUVN0cmluZyB3aG9sZVRleHQgPSBmcm9tUmF3RGF0YVdpdGhvdXRS
ZWYoc2FuaXRpemVkKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0
aW9uUmVjdEZvclNpbXBsZVRlCiAgICAgaW50IHN0YXJ0WCA9IFFGb250TWV0cmljcyhmb250KCkp
LndpZHRoKHdob2xlVGV4dCwgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKICAgICBpbnQg
d2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzZWxlY3RlZFRleHQsIC0xLCBRdDo6
VGV4dEJ5cGFzc1NoYXBpbmcpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkgKyBzdGFy
dFgsIHB0LnkoKSwgd2lkdGgsIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocHQueCgpICsg
c3RhcnRYLCBwdC55KCksIHdpZHRoLCBoKTsKIH0KIAogYm9vbCBGb250OjpjYW5FeHBhbmRBcm91
bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCkBAIC01MDEsNyArNTAxLDcgQEAgaW50IEZvbnQ6
OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taQogICAgIHJldHVybiAwOwogfQogCi12b2lk
IEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIC8q
IGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5n
JiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20g
Ki8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYg
LyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIFFHcmFkaWVudCogR3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQoKQogICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50
OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZmlsbFJl
Y3QocmVjdCwgKnBsYXRmb3JtR3JhZGllbnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3
Niw3IEBAIHB1YmxpYzoKICAgICBRR0xXaWRnZXQqIGdldFZpZXdwb3J0R0xXaWRnZXQoKTsKICAg
ICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRl
eHR1cmUqIG1hc2spIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyKiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykgY29u
c3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqLCBjb25zdCBRU3R5bGVPcHRp
b25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7CkBAIC01NTUsMTEgKzU1NSwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25z
dAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBHcmFwaGljc1JlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIEJp
dG1hcFRleHR1cmUqIG1hc2spIGNvbnN0CiB7CiAgICAgaWYgKHRleHR1cmVNYXBwZXItPmlzT3Bl
bkdMQmFja2VkKCkpIHsKICAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9IHN0YXRp
Y19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwotICAgICAgICB0ZXhtYXBH
TC0+ZHJhd1RleHR1cmUobV90ZXh0dXJlLCAhbV9hdHRycy5hbHBoYSwgRmxvYXRTaXplKDEsIDEp
LCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIHRydWUgLyogZmxpcCAqLyk7Cisg
ICAgICAgIHRleG1hcEdMLT5kcmF3VGV4dHVyZShtX3RleHR1cmUsICFtX2F0dHJzLmFscGhhLCBH
cmFwaGljc1NpemUoMSwgMSksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgdHJ1
ZSAvKiBmbGlwICovKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dFF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSw3ICsz
MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhCiAKICAgICBt
X2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCi0gICAgbV9kYXRhLT5zaGFkb3ctPnNldFNoYWRvd1Zh
bHVlcyhGbG9hdFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0JsdXIpLCBt
X3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dD
b2xvclNwYWNlLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2RhdGEt
PnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEdyYXBoaWNzU2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIs
IG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRv
d0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9r
ZWQgYm9yZGVyLgpAQCAtMzU5LDggKzM1OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZShjb25zdCBJbnQKIAogICAgIGZsb2F0IHdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CiAK
LSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7
CisgICAgR3JhcGhpY3NQb2ludCBwMSA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHAyID0g
cG9pbnQyOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CiAK
ICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwpAQCAtMzg3LDExICszODcsMTEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAgICAgICAvLyBEbyBhIHJl
Y3QgZmlsbCBvZiBvdXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRo
ZQogICAgICAgICAvLyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3
IHRoZSBhY3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgogICAgICAgICBpZiAoaXNWZXJ0aWNhbExp
bmUpIHsKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KEZsb2F0UmVjdChwMS54KCkgLSB3aWR0aCAv
IDIsIHAxLnkoKSAtIHdpZHRoLCB3aWR0aCwgd2lkdGgpLCBRQ29sb3IoY29sb3IpKTsKLSAgICAg
ICAgICAgIHAtPmZpbGxSZWN0KEZsb2F0UmVjdChwMi54KCkgLSB3aWR0aCAvIDIsIHAyLnkoKSwg
d2lkdGgsIHdpZHRoKSwgUUNvbG9yKGNvbG9yKSk7CisgICAgICAgICAgICBwLT5maWxsUmVjdChH
cmFwaGljc1JlY3QocDEueCgpIC0gd2lkdGggLyAyLCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdp
ZHRoKSwgUUNvbG9yKGNvbG9yKSk7CisgICAgICAgICAgICBwLT5maWxsUmVjdChHcmFwaGljc1Jl
Y3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdpZHRoLCB3aWR0aCksIFFDb2xvcihjb2xv
cikpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcC0+ZmlsbFJlY3QoRmxvYXRSZWN0
KHAxLngoKSAtIHdpZHRoLCBwMS55KCkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0aCksIFFDb2xv
cihjb2xvcikpOwotICAgICAgICAgICAgcC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHAyLngoKSwgcDIu
eSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpLCBRQ29sb3IoY29sb3IpKTsKKyAgICAgICAg
ICAgIHAtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChwMS54KCkgLSB3aWR0aCwgcDEueSgpIC0gd2lk
dGggLyAyLCB3aWR0aCwgd2lkdGgpLCBRQ29sb3IoY29sb3IpKTsKKyAgICAgICAgICAgIHAtPmZp
bGxSZWN0KEdyYXBoaWNzUmVjdChwMi54KCksIHAyLnkoKSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdp
ZHRoKSwgUUNvbG9yKGNvbG9yKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBFeGFtcGxlOiA4
MCBwaXhlbHMgd2l0aCBhIHdpZHRoIG9mIDMwIHBpeGVscy4KQEAgLTQ1MCw3ICs0NTAsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgbV9kYXRhLT5wKCkt
PmRyYXdFbGxpcHNlKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZl
eFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBz
aG91bGRBbnRpYWxpYXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24o
c2l6ZV90IG5wb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRB
bnRpYWxpYXMpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDczLDcgKzQ3Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9s
eWdvbigKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIGFudGlB
bGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXpl
X3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU2MSw3ICs1NjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgICAgIFNo
YWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKICAgICAgICAgaWYgKG1fZGF0YS0+bXVz
dFVzZVNoYWRvd0JsdXIoKSB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gfHwgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCkKICAgICAgICAgewotICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVj
dCA9IHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCk7CisgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgYm91bmRpbmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKICAg
ICAgICAgICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBwZW4ud2lk
dGhGKCkpOwogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hh
ZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIGJvdW5kaW5nUmVjdCk7CiAgICAgICAgICAgICBp
ZiAoc2hhZG93Q29udGV4dCkgewpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBh
dGgsIHBlbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVwZWF0UGF0dGVybihRUGFp
bnRlciogcCwgUVBpeG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgYm9v
bCByZXBlYXRYLCBjb25zdCBib29sIHJlcGVhdFkpCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1Jl
cGVhdFBhdHRlcm4oUVBhaW50ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QsIGNvbnN0IGJvb2wgcmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZKQogewogICAg
IC8vIFBhdHRlcm5zIG11c3QgYmUgcGFpbnRlZCBzbyB0aGF0IHRoZSB0b3AgbGVmdCBvZiB0aGUg
Zmlyc3QgaW1hZ2UgaXMgYW5jaG9yZWQgYXQKICAgICAvLyB0aGUgb3JpZ2luIG9mIHRoZSBjb29y
ZGluYXRlIHNwYWNlCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdS
ZXBlYXRQYXR0ZXJuKFFQYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzIyLDcgKzcyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEludFJlY3QKICAgICBtX2RhdGEtPnAoKS0+c2V0Q2xpcFJlY3QocmVjdCwgUXQ6
OkludGVyc2VjdENsaXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtODg2LDEzICs4ODYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcoY29ucwogICAgIGRyYXdGb2N1c1JpbmdGb3JQYXRoKG1fZGF0YS0+cCgpLCBwYXRoLCBj
b2xvciwgbV9kYXRhLT5hbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4s
IGZsb2F0IHdpZHRoLCBib29sKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dChjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29sKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9p
bnQgc3RhcnRQb2ludCA9IG9yaWdpbjsKLSAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gb3JpZ2lu
ICsgRmxvYXRTaXplKHdpZHRoLCAwKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQgPSBv
cmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludCA9IG9yaWdpbiArIEdyYXBoaWNzU2l6
ZSh3aWR0aCwgMCk7CiAKICAgICAvLyBJZiBwYWludGVuZ2luZSB0eXBlIGlzIFgxMSB0byBhdm9p
ZCBhcnRpZmFjdHMKICAgICAvLyBsaWtlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDIyNDgKQEAgLTkxNiw3ICs5MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvCiAgICAgZHJhd0xpbmUoSW50UG9pbnQoc3RhcnRQb2ludC54
KCksIHN0YXJ0UG9pbnQueSgpKSwgSW50UG9pbnQoZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkyNCw3ICs5MjQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
RmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCitHcmFwaGljc1JlY3QgR3JhcGhpY3NDb250ZXh0
Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJlY3QsIFJvdW5kaW5n
TW9kZSkKIHsKICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxz
IGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5l
IHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252
ZXJzaW9uIGlmIHdlIGhhdmUgYQpAQCAtOTQ3LDEyICs5NDcsMTIgQEAgRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZQogICAgIGlmIChkZXZpY2VPcmlnaW4ueCgpID09IGRl
dmljZUxvd2VyUmlnaHQueCgpICYmIGZyZWN0LndpZHRoKCkpCiAgICAgICAgIGRldmljZUxvd2Vy
UmlnaHQuc2V0WChkZXZpY2VMb3dlclJpZ2h0LngoKSArIDEpOwogCi0gICAgRmxvYXRQb2ludCBy
b3VuZGVkT3JpZ2luID0gRmxvYXRQb2ludChkZXZpY2VPcmlnaW4ueCgpIC8gZGV2aWNlU2NhbGVY
LCBkZXZpY2VPcmlnaW4ueSgpIC8gZGV2aWNlU2NhbGVZKTsKLSAgICBGbG9hdFBvaW50IHJvdW5k
ZWRMb3dlclJpZ2h0ID0gRmxvYXRQb2ludChkZXZpY2VMb3dlclJpZ2h0LngoKSAvIGRldmljZVNj
YWxlWCwgZGV2aWNlTG93ZXJSaWdodC55KCkgLyBkZXZpY2VTY2FsZVkpOwotICAgIHJldHVybiBG
bG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2lu
KTsKKyAgICBHcmFwaGljc1BvaW50IHJvdW5kZWRPcmlnaW4gPSBHcmFwaGljc1BvaW50KGRldmlj
ZU9yaWdpbi54KCkgLyBkZXZpY2VTY2FsZVgsIGRldmljZU9yaWdpbi55KCkgLyBkZXZpY2VTY2Fs
ZVkpOworICAgIEdyYXBoaWNzUG9pbnQgcm91bmRlZExvd2VyUmlnaHQgPSBHcmFwaGljc1BvaW50
KGRldmljZUxvd2VyUmlnaHQueCgpIC8gZGV2aWNlU2NhbGVYLCBkZXZpY2VMb3dlclJpZ2h0Lnko
KSAvIGRldmljZVNjYWxlWSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChyb3VuZGVkT3JpZ2lu
LCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBi
bHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmIHNpemUs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQog
ewogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBk
cmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMKQEAgLTk2MCwxMCAr
OTYwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygKICAgICBp
ZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAvLyBNZWFuaW5n
IHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFu
ZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHNpemUud2lkdGgoKSwgLXNp
emUuaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIG1fZGF0YS0+c2hhZG93LT5zZXRTaGFkb3dWYWx1
ZXMoRmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQsIGNvbG9yLCBjb2xvclNwYWNlLCBtX3N0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKTsKKyAgICBtX2RhdGEtPnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEdyYXBo
aWNzU2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBjb2xvciwgY29sb3JTcGFjZSwgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3Jtcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93
KCkKQEAgLTEwMzAsNyArMTAzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXkKICAgICBkZWxldGUgbGF5ZXI7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIHAtPnNldENvbXBvc2l0aW9uTW9k
ZShjdXJyZW50Q29tcG9zaXRpb25Nb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMTg0LDcgKzExODQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZs
b2F0IHJhZGlhCiAgICAgbV9kYXRhLT5wKCktPnJvdGF0ZShyYWQyZGVnKHFyZWFsKHJhZGlhbnMp
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBzKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXll
clF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3
IEBACiAjaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQogCiAjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2lu
Y2x1ZGUgIlJlZkNvdW50ZWQuaCIKQEAgLTI3OCw5ICsyNzgsOSBAQCBwdWJsaWM6CiAKICAgICBz
dHJ1Y3QgU3RhdGUgewogICAgICAgICBHcmFwaGljc0xheWVyKiBtYXNrTGF5ZXI7Ci0gICAgICAg
IEZsb2F0UG9pbnQgcG9zOwotICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBzaXplOworICAgICAgICBHcmFwaGljc1BvaW50IHBvczsKKyAgICAgICAg
R3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50OworICAgICAgICBHcmFwaGljc1NpemUgc2l6ZTsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICAgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yOwpAQCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVk
c0Rpc3BsYXkoKQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCi12b2lkIEdyYXBo
aWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhp
Y3NSZWN0JiByZWN0KQogewogICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1Vw
ZGF0ZSB8PSBRUmVjdEYocmVjdCkudG9BbGlnbmVkUmVjdCgpOwogICAgIG1faW1wbC0+bm90aWZ5
Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkRpc3BsYXlDaGFuZ2UpOwpAQCAtMTA3OCw3ICsx
MDc4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE1hc2tMYXllcihHcmFwaAogCiAvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFsdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0
UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09
IHBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODgsNyArMTA4OCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclF0OjpzZXRQb3NpdGlvbihjb25zdCAKIAogLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCiAqLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0QW5jaG9yUG9p
bnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gYW5j
aG9yUG9pbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyUXQ6OnNldEFuY2hvclBvaW50KGNvbgogCiAvKiBccmVpbXAgKEdyYXBoaWNz
TGF5ZXIuaCkKICovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0U2l6ZShjb25zdCBGbG9hdFNp
emUmIHZhbHVlKQordm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldFNpemUoY29uc3QgR3JhcGhpY3NT
aXplJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gc2l6ZSgpKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0xheWVyUXQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhpY3NMYXllci5oCiAg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBW
ZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CkBAIC01MCw5ICs1MCw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGlj
c0xheWVyKiBuZXdDaGlsZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcCk7CisgICAgdmlydHVhbCB2b2lk
IHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIGIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1BvaW50
UXQuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaW5jbHVkZSA8UVBvaW50Rj4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFFQb2lu
dEYmIHApCisgICAgOiBtX3gocC54KCkpCisgICAgLCBtX3kocC55KCkpCit7Cit9CisKK0Zsb2F0
UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAoreworICAgIHJldHVybiBRUG9pbnRGKG1f
eCwgbV95KTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1BvaW50UXQu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxOSBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogCiAjaW5jbHVkZSA8UVBvaW50Rj4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFFQb2ludEYmIHAp
CitHcmFwaGljc1BvaW50OjpHcmFwaGljc1BvaW50KGNvbnN0IFFQb2ludEYmIHApCiAgICAgOiBt
X3gocC54KCkpCiAgICAgLCBtX3kocC55KCkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9wZXJhdG9y
IFFQb2ludEYoKSBjb25zdAorR3JhcGhpY3NQb2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcAko
cmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0Zsb2F0UmVjdFF0LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFFSZWN0Rj4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBRUmVjdEYmIHIpCisgICAgOiBt
X2xvY2F0aW9uKHIudG9wTGVmdCgpKQorICAgICwgbV9zaXplKHIud2lkdGgoKQorICAgICwgci5o
ZWlnaHQoKSkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBRUmVjdEYoKSBjb25zdAorewor
ICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworRmxv
YXRSZWN0IEZsb2F0UmVjdDo6bm9ybWFsaXplZCgpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IG5v
cm1hbGl6ZWRSZWN0ID0gKnRoaXM7CisKKyAgICBpZiAod2lkdGgoKSA8IDApIHsKKyAgICAgICAg
bm9ybWFsaXplZFJlY3Quc2V0WCh4KCkgKyB3aWR0aCgpKTsKKyAgICAgICAgbm9ybWFsaXplZFJl
Y3Quc2V0V2lkdGgoLXdpZHRoKCkpOworICAgIH0KKyAgICBpZiAoaGVpZ2h0KCkgPCAwKSB7Cisg
ICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFkoeSgpICsgaGVpZ2h0KCkpOworICAgICAgICBub3Jt
YWxpemVkUmVjdC5zZXRIZWlnaHQoLWhlaWdodCgpKTsKKyAgICB9CisgICAgcmV0dXJuIG5vcm1h
bGl6ZWRSZWN0OworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1JlY3RRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzUmVjdFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjcgKzI2LDI3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiAjaW5jbHVkZSA8UVJlY3RGPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IFFSZWN0RiYgcikKK0dyYXBo
aWNzUmVjdDo6R3JhcGhpY3NSZWN0KGNvbnN0IFFSZWN0RiYgcikKICAgICA6IG1fbG9jYXRpb24o
ci50b3BMZWZ0KCkpCiAgICAgLCBtX3NpemUoci53aWR0aCgpCiAgICAgLCByLmhlaWdodCgpKQog
ewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0CitHcmFwaGljc1JlY3Q6
Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFFSZWN0Rih4KCksIHkoKSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOwogfQogCi1GbG9hdFJlY3QgRmxvYXRSZWN0Ojpub3JtYWxpemVk
KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBHcmFwaGljc1JlY3Q6Om5vcm1hbGl6ZWQoKSBjb25zdAog
ewotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkUmVjdCA9ICp0aGlzOworICAgIEdyYXBoaWNzUmVj
dCBub3JtYWxpemVkUmVjdCA9ICp0aGlzOwogCiAgICAgaWYgKHdpZHRoKCkgPCAwKSB7CiAgICAg
ICAgIG5vcm1hbGl6ZWRSZWN0LnNldFgoeCgpICsgd2lkdGgoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIFBhc3NS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UKICAgICByZXR1cm4gU3RpbGxJbWFn
ZTo6Y3JlYXRlKG1fZGF0YS5tX3BpeG1hcCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChkZXN0Q29u
dGV4dCA9PSBjb250ZXh0KCkpIHsKQEAgLTE0Miw4ICsxNDIsOCBAQCB2b2lkIEltYWdlQnVmZmVy
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2Uo
bV9kYXRhLm1faW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRl
c3RDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAg
aWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewogICAgICAgICAvLyBXZSdyZSBkcmF3aW5n
IGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVk
IHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAgICAgICBtX2RhdGEubV9p
bWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKLXZvaWQgSW1hZ2VC
dWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGZs
b2F0UmVjdCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGZsb2F0UmVjdCkgY29uc3QKIHsKICAgICBRUGl4
bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwogICAgIGlmICghbmF0aXZlSW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTEwMSw4
ICsxMDEsOCBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzCiAgICAg
cmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkpOwogfQog
Ci12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRl
c3RSZWN0KQogewogICAgIFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lUGl4bWFwKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KQEAgLTIwMSw4ICsyMDEsOCBAQCB2b2lkIEJpdG1h
cEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB9CiAKIC8vIERyYXdpbmcgUm91dGluZXMK
LXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmMs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAg
ICBRUmVjdEYgbm9ybWFsaXplZERzdCA9IGRzdC5ub3JtYWxpemVkKCk7CiAgICAgUVJlY3RGIG5v
cm1hbGl6ZWRTcmMgPSBzcmMubm9ybWFsaXplZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwOSw3ICs2
MDksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXBhaW50KCkKIH0KIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKikgY29u
c3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFw
VGV4dHVyZSopIGNvbnN0CiB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHRl
eHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOwogICAgICAgICBRUGFpbnRlciogcGFpbnRl
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFu
Z2VkKCkgeyB9CiAgICAgLy8gQ29uc3QtY2FzdGluZyBoZXJlIGlzIHNhZmUsIHNpbmNlIGFsbCBv
ZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcidzIGZ1bmN0aW9ucyBhcmUgY29uc3QuZwogICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcios
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEdyYXBoaWNz
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFj
aXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdDsKICNlbHNlCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIHsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRoUXQuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1BhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJQ
YXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBib29sIGlzUG9pbnRPblBhdGhCb3JkZXIoY29u
c3QgUVAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRh
aW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewog
ICAgIFF0OjpGaWxsUnVsZSBzYXZlZFJ1bGUgPSBtX3BhdGguZmlsbFJ1bGUoKTsKICAgICBjb25z
dF9jYXN0PFFQYWludGVyUGF0aCo+KCZtX3BhdGgpLT5zZXRGaWxsUnVsZShydWxlID09IFJVTEVf
RVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7CkBAIC0xMjMsNyAr
MTIzLDcgQEAgc3RhdGljIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaENvbnRleHQoKQogICAgIHJl
dHVybiBjb250ZXh0OwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxl
QXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBh
dGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGFwcGxpZXIpOwogCkBAIC0x
NDIsMTkgKzE0MiwxOSBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBw
CiAgICAgcmV0dXJuIHN0cm9rZS5jcmVhdGVTdHJva2UobV9wYXRoKS5jb250YWlucyhwb2ludCk7
CiB9CiAKLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQg
UGF0aDo6dHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBRVHJhbnNm
b3JtIG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgbV9wYXRoID0gbV9wYXRoICogbWF0cml4OwogfQogCi1GbG9hdFJlY3QgUGF0
aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpib3VuZGluZ1JlY3Qo
KSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGguYm91bmRpbmdSZWN0KCk7CiB9CiAKLUZsb2F0
UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVy
KSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHls
ZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
ID0gc2NyYXRjaENvbnRleHQoKTsKICAgICBRUGFpbnRlclBhdGhTdHJva2VyIHN0cm9rZTsKQEAg
LTE3MiwzMiArMTcyLDMyIEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ry
b2sKICAgICByZXR1cm4gc3Ryb2tlLmNyZWF0ZVN0cm9rZShtX3BhdGgpLmJvdW5kaW5nUmVjdCgp
OwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQg
UGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIG1fcGF0aC5t
b3ZlVG8ocG9pbnQpOwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwKQordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAg
ICBtX3BhdGgubGluZVRvKHApOwogfQogCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRRdWFk
Q3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkK
IHsKICAgICBtX3BhdGgucXVhZFRvKGNwLCBwKTsKIH0KIAotdm9pZCBQYXRoOjphZGRCZXppZXJD
dXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25z
dCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGNwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY3AyLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwKQogewogICAgIG1fcGF0aC5jdWJpY1RvKGNwMSwgY3AyLCBwKTsKIH0KIAotdm9pZCBQ
YXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIs
IGZsb2F0IHJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgR3JhcGhpY3NQb2ludCYg
cDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgRmxvYXRQ
b2ludCBwMChtX3BhdGguY3VycmVudFBvc2l0aW9uKCkpOworICAgIEdyYXBoaWNzUG9pbnQgcDAo
bV9wYXRoLmN1cnJlbnRQb3NpdGlvbigpKTsKIAotICAgIEZsb2F0UG9pbnQgcDFwMCgocDAueCgp
IC0gcDEueCgpKSwgKHAwLnkoKSAtIHAxLnkoKSkpOwotICAgIEZsb2F0UG9pbnQgcDFwMigocDIu
eCgpIC0gcDEueCgpKSwgKHAyLnkoKSAtIHAxLnkoKSkpOworICAgIEdyYXBoaWNzUG9pbnQgcDFw
MCgocDAueCgpIC0gcDEueCgpKSwgKHAwLnkoKSAtIHAxLnkoKSkpOworICAgIEdyYXBoaWNzUG9p
bnQgcDFwMigocDIueCgpIC0gcDEueCgpKSwgKHAyLnkoKSAtIHAxLnkoKSkpOwogICAgIGZsb2F0
IHAxcDBfbGVuZ3RoID0gc3FydGYocDFwMC54KCkgKiBwMXAwLngoKSArIHAxcDAueSgpICogcDFw
MC55KCkpOwogICAgIGZsb2F0IHAxcDJfbGVuZ3RoID0gc3FydGYocDFwMi54KCkgKiBwMXAyLngo
KSArIHAxcDIueSgpICogcDFwMi55KCkpOwogCkBAIC0yMTMsMjEgKzIxMywyMSBAQCB2b2lkIFBh
dGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxCiAKICAgICBmbG9hdCB0YW5nZW50ID0g
cmFkaXVzIC8gdGFuKGFjb3MoY29zX3BoaSkgLyAyKTsKICAgICBmbG9hdCBmYWN0b3JfcDFwMCA9
IHRhbmdlbnQgLyBwMXAwX2xlbmd0aDsKLSAgICBGbG9hdFBvaW50IHRfcDFwMCgocDEueCgpICsg
ZmFjdG9yX3AxcDAgKiBwMXAwLngoKSksIChwMS55KCkgKyBmYWN0b3JfcDFwMCAqIHAxcDAueSgp
KSk7CisgICAgR3JhcGhpY3NQb2ludCB0X3AxcDAoKHAxLngoKSArIGZhY3Rvcl9wMXAwICogcDFw
MC54KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDAgKiBwMXAwLnkoKSkpOwogCi0gICAgRmxvYXRQ
b2ludCBvcnRoX3AxcDAocDFwMC55KCksIC1wMXAwLngoKSk7CisgICAgR3JhcGhpY3NQb2ludCBv
cnRoX3AxcDAocDFwMC55KCksIC1wMXAwLngoKSk7CiAgICAgZmxvYXQgb3J0aF9wMXAwX2xlbmd0
aCA9IHNxcnQob3J0aF9wMXAwLngoKSAqIG9ydGhfcDFwMC54KCkgKyBvcnRoX3AxcDAueSgpICog
b3J0aF9wMXAwLnkoKSk7CiAgICAgZmxvYXQgZmFjdG9yX3JhID0gcmFkaXVzIC8gb3J0aF9wMXAw
X2xlbmd0aDsKIAogICAgIC8vIGFuZ2xlIGJldHdlZW4gb3J0aF9wMXAwIGFuZCBwMXAyIHRvIGdl
dCB0aGUgcmlnaHQgdmVjdG9yIG9ydGhvZ3JhcGhpYyB0byBwMXAwCiAgICAgZG91YmxlIGNvc19h
bHBoYSA9IChvcnRoX3AxcDAueCgpICogcDFwMi54KCkgKyBvcnRoX3AxcDAueSgpICogcDFwMi55
KCkpIC8gKG9ydGhfcDFwMF9sZW5ndGggKiBwMXAyX2xlbmd0aCk7CiAgICAgaWYgKGNvc19hbHBo
YSA8IDAuZikKLSAgICAgICAgb3J0aF9wMXAwID0gRmxvYXRQb2ludCgtb3J0aF9wMXAwLngoKSwg
LW9ydGhfcDFwMC55KCkpOworICAgICAgICBvcnRoX3AxcDAgPSBHcmFwaGljc1BvaW50KC1vcnRo
X3AxcDAueCgpLCAtb3J0aF9wMXAwLnkoKSk7CiAKLSAgICBGbG9hdFBvaW50IHAoKHRfcDFwMC54
KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueCgpKSwgKHRfcDFwMC55KCkgKyBmYWN0b3JfcmEg
KiBvcnRoX3AxcDAueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwKCh0X3AxcDAueCgpICsgZmFj
dG9yX3JhICogb3J0aF9wMXAwLngoKSksICh0X3AxcDAueSgpICsgZmFjdG9yX3JhICogb3J0aF9w
MXAwLnkoKSkpOwogCiAgICAgLy8gY2FsY3VsYXRlIGFuZ2xlcyBmb3IgYWRkQXJjCi0gICAgb3J0
aF9wMXAwID0gRmxvYXRQb2ludCgtb3J0aF9wMXAwLngoKSwgLW9ydGhfcDFwMC55KCkpOworICAg
IG9ydGhfcDFwMCA9IEdyYXBoaWNzUG9pbnQoLW9ydGhfcDFwMC54KCksIC1vcnRoX3AxcDAueSgp
KTsKICAgICBmbG9hdCBzYSA9IGFjb3Mob3J0aF9wMXAwLngoKSAvIG9ydGhfcDFwMF9sZW5ndGgp
OwogICAgIGlmIChvcnRoX3AxcDAueSgpIDwgMC5mKQogICAgICAgICBzYSA9IDIgKiBwaURvdWJs
ZSAtIHNhOwpAQCAtMjM2LDggKzIzNiw4IEBAIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxv
YXRQb2ludCYgcDEKICAgICBib29sIGFudGljbG9ja3dpc2UgPSBmYWxzZTsKIAogICAgIGZsb2F0
IGZhY3Rvcl9wMXAyID0gdGFuZ2VudCAvIHAxcDJfbGVuZ3RoOwotICAgIEZsb2F0UG9pbnQgdF9w
MXAyKChwMS54KCkgKyBmYWN0b3JfcDFwMiAqIHAxcDIueCgpKSwgKHAxLnkoKSArIGZhY3Rvcl9w
MXAyICogcDFwMi55KCkpKTsKLSAgICBGbG9hdFBvaW50IG9ydGhfcDFwMigodF9wMXAyLngoKSAt
IHAueCgpKSwgKHRfcDFwMi55KCkgLSBwLnkoKSkpOworICAgIEdyYXBoaWNzUG9pbnQgdF9wMXAy
KChwMS54KCkgKyBmYWN0b3JfcDFwMiAqIHAxcDIueCgpKSwgKHAxLnkoKSArIGZhY3Rvcl9wMXAy
ICogcDFwMi55KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IG9ydGhfcDFwMigodF9wMXAyLngoKSAt
IHAueCgpKSwgKHRfcDFwMi55KCkgLSBwLnkoKSkpOwogICAgIGZsb2F0IG9ydGhfcDFwMl9sZW5n
dGggPSBzcXJ0ZihvcnRoX3AxcDIueCgpICogb3J0aF9wMXAyLngoKSArIG9ydGhfcDFwMi55KCkg
KiBvcnRoX3AxcDIueSgpKTsKICAgICBmbG9hdCBlYSA9IGFjb3Mob3J0aF9wMXAyLngoKSAvIG9y
dGhfcDFwMl9sZW5ndGgpOwogICAgIGlmIChvcnRoX3AxcDIueSgpIDwgMCkKQEAgLTI1Nyw3ICsy
NTcsNyBAQCB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiAgICAgbV9wYXRoLmNsb3NlU3VicGF0
aCgpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCBy
LCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQordm9pZCBQYXRoOjph
ZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBl
YXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICBxcmVhbCB4YyA9IHAueCgpOwogICAgIHFy
ZWFsIHljID0gcC55KCk7CkBAIC0zMTksMTIgKzMxOSwxMiBAQCB2b2lkIFBhdGg6OmFkZEFyYyhj
b25zdCBGbG9hdFBvaW50JiBwLCBmCiAKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7
CiAgICAgbV9wYXRoLmFkZFJlY3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQ
YXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBtX3BhdGguYWRk
RWxsaXBzZShyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CkBAIC0zNDgs
NyArMzQ4LDcgQEAgYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVy
biAhaXNFbXB0eSgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0
IAorR3JhcGhpY3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICByZXR1
cm4gbV9wYXRoLmN1cnJlbnRQb3NpdGlvbigpOwogfQpAQCAtMzU2LDcgKzM1Niw3IEBAIEZsb2F0
UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCiB2b2lkIFBhdGg6OmFwcGx5KHZvaWQq
IGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgUGF0aEVs
ZW1lbnQgcGVsZW1lbnQ7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbM107CisgICAgR3JhcGhpY3NQ
b2ludCBwb2ludHNbM107CiAgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9wYXRoLmVsZW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgY29u
c3QgUVBhaW50ZXJQYXRoOjpFbGVtZW50JiBjdXIgPSBtX3BhdGguZWxlbWVudEF0KGkpOwpAQCAt
NDA2LDcgKzQwNiw3IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
cGF0aC5sZW5ndGgoKTsKIH0KIAotRmxvYXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZsb2F0
IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CitHcmFwaGljc1BvaW50IFBhdGg6OnBvaW50QXRMZW5n
dGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKIHsKICAgICBvayA9IChsZW5ndGggPj0g
MCAmJiBsZW5ndGggPD0gbV9wYXRoLmxlbmd0aCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
U2ltcGxlRm9udERhdGFRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDEwICs5NywxMCBAQCBT
aW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzCiAgICAgcmV0dXJuIG1fZGVy
aXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK0dyYXBoaWNzUmVj
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAjZWxzZQogYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFp
bnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBOYXRpdmVJbWFn
ZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TmF0
aXZlSW1hZ2VQdHI+KG1fcGl4bWFwKTsKIH0KIAotdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQordm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NS
ZWN0JiBzcmMsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmICht
X3BpeG1hcC0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBub3Jt
YWxpemVkU3JjID0gc3JjLm5vcm1hbGl6ZWQoKTsKLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZERz
dCA9IGRzdC5ub3JtYWxpemVkKCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWRTcmMgPSBz
cmMubm9ybWFsaXplZCgpOworICAgIEdyYXBoaWNzUmVjdCBub3JtYWxpemVkRHN0ID0gZHN0Lm5v
cm1hbGl6ZWQoKTsKIAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBj
dHh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24ob3ApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJ
bWFnZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvU3RpbGxJbWFnZVF0LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcg
KzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3Rp
bGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1
cmVNYXBwZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlUXQ6OnVucGFjaygpCiAgICAgbV9pbWFnZSA9IFFJbWFnZSgpOwogfQogCi12b2lk
IFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgVGV4dHVyZU1hcHBlclF0OjpiZWdp
bkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgICBRUGFpbnRlciogcGFpbnRlciA9IGN1cnJlbnRQYWludGVyKCk7
CiAgICAgIHBhaW50ZXItPnNhdmUoKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwCiB9CiAKIAotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6
OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit2b2lkIFRleHR1cmVN
YXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKIHsK
ICAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRpY19jYXN0PGNvbnN0
IEJpdG1hcFRleHR1cmVRdCY+KHRleHR1cmUpOwogICAgIFFQYWludGVyKiBwYWludGVyID0gbV9w
YWludGVyOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0OjpkcmF3VGV4
dHVyZShjb25zdCAKICAgICBjb25zdCBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBwYWludGVy
LT50cmFuc2Zvcm0oKTsKICAgICBwYWludGVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwogICAgIHBh
aW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIHRydWUpOwotICAgIHBhaW50ZXItPmRyYXdQaXht
YXAodGFyZ2V0UmVjdCwgcGl4bWFwLCBGbG9hdFJlY3QodGV4dHVyZVF0LnNvdXJjZVJlY3QoKSkp
OworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwgcGl4bWFwLCBHcmFwaGljc1Jl
Y3QodGV4dHVyZVF0LnNvdXJjZVJlY3QoKSkpOwogICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShw
cmV2VHJhbnNmb3JtKTsKICAgICBwYWludGVyLT5zZXRPcGFjaXR5KHByZXZPcGFjaXR5KTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJR
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1Rl
eHR1cmVNYXBwZXJRdC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw5
ICs1NSw5IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBUZXh0dXJlTWEKIHB1Ymxp
YzoKICAgICBUZXh0dXJlTWFwcGVyUXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVy
ZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0
bWFwVGV4dHVyZSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNr
VGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1
cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdmly
dHVhbCB2b2lkIGVuZENsaXAoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0
KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1Rp
bGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvVGlsZVF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9UaWxlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsOCArMTIxLDgg
QEAgVmVjdG9yPEludFJlY3Q+IFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQogICAgICAgICBjb250
ZXh0LnNhdmUoKTsKICAgICAgICAgSW50UmVjdCByZWN0ID0gZGlydHlSZWN0c1tuXTsKICAgICAg
ICAgdXBkYXRlZFJlY3RzLmFwcGVuZChyZWN0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKEZsb2F0
UmVjdChyZWN0KSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fYmFja2luZ1N0
b3JlLT5tX2NvbnRlbnRzU2NhbGUsIG1fYmFja2luZ1N0b3JlLT5tX2NvbnRlbnRzU2NhbGUpKTsK
KyAgICAgICAgY29udGV4dC5jbGlwKEdyYXBoaWNzUmVjdChyZWN0KSk7CisgICAgICAgIGNvbnRl
eHQuc2NhbGUoR3JhcGhpY3NTaXplKG1fYmFja2luZ1N0b3JlLT5tX2NvbnRlbnRzU2NhbGUsIG1f
YmFja2luZ1N0b3JlLT5tX2NvbnRlbnRzU2NhbGUpKTsKICAgICAgICAgbV9iYWNraW5nU3RvcmUt
Pm1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KCZjb250ZXh0LCBtX2JhY2tpbmdTdG9y
ZS0+bWFwVG9Db250ZW50cyhyZWN0KSk7CiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAg
IH0KQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFRpbGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4CiAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAodGFyZ2V0
LCAqbV9idWZmZXIsIHNvdXJjZSk7CiB9CiAgICAgCi12b2lkIFRpbGU6OnBhaW50Q2hlY2tlclBh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCkK
K3ZvaWQgVGlsZTo6cGFpbnRDaGVja2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0KQogewogICAgIFFQYWludGVyKiBwYWludGVyID0g
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUVRyYW5zZm9ybSB3b3JsZFRyYW5zZm9y
bSA9IHBhaW50ZXItPndvcmxkVHJhbnNmb3JtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJp
eFF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VT
aW5nbGVGcmFtZVNraWEuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwog
CiBwcml2YXRlOgogICAgIE5hdGl2ZUltYWdlU2tpYSBtX25hdGl2ZUltYWdlOwpAQCAtODIsNyAr
ODIsNyBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
KGNvbnN0IFNrQml0bWFwJik7CiB9OwogCi1GbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKK0dyYXBoaWNzUmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRQb2ludFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRQb2ludFNraWEuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
RmxvYXRQb2ludFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2luY2x1ZGUgIlNr
UG9pbnQuaCIKLSNpbmNsdWRlICJTa2lhVXRpbHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmIHApCi0gICAgOiBtX3gocC5m
WCkKLSAgICAsIG1feShwLmZZKQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBTa1BvaW50
KCkgY29uc3QKLXsKLSAgICBTa1BvaW50IHAgPSB7IFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIobV94
KSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3kpIH07Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UmVjdFNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi0jaW5jbHVkZSAiU2tSZWN0LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgU2tSZWN0JiByKQot
ICAgIDogbV9sb2NhdGlvbihyLmZMZWZ0LCByLmZUb3ApCi0gICAgLCBtX3NpemUoci53aWR0aCgp
LCByLmhlaWdodCgpKQotewotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0
Ci17Ci0gICAgU2tSZWN0IHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9OwotICAg
IHJldHVybiByZWN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgdm9pZCBz
ZXR1cFBhaW50KFNrUGFpbnQqIHBhaW50LCBjCiAvLyBUaGlzIGlzc3VlIGlzIHRyYWNrZWQgaW4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTg5CiB2b2lkIEZvbnQ6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QgewogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihH
bHlwaEJ1ZmZlckdseXBoKSA9PSBzaXplb2YodWludDE2X3QpLCBHbHlwaEJ1ZmZlckdseXBoU2l6
ZV9lcXVhbHNfdWludDE2X3QpOwogCiAgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
ID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYWRpZW50
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBTa1NoYWRlciogR3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQogICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12
b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGll
bnQodGhpcyk7CiAgICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG8KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd0xv
b3BlcigwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVj
dChjb25zdCBGbAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qociwg
cGFpbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDIzLDcgKzQyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW4K
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNldE1hdHJpeChhZmZpbmUpOwogfQog
Ci1zdGF0aWMgdm9pZCBzZXRQYXRoRnJvbUNvbnZleFBvaW50cyhTa1BhdGgqIHBhdGgsIHNpemVf
dCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3N0YXRpYyB2b2lkIHNldFBh
dGhGcm9tQ29udmV4UG9pbnRzKFNrUGF0aCogcGF0aCwgc2l6ZV90IG51bVBvaW50cywgY29uc3Qg
R3JhcGhpY3NQb2ludCogcG9pbnRzKQogewogICAgIHBhdGgtPmluY1Jlc2VydmUobnVtUG9pbnRz
KTsKICAgICBwYXRoLT5tb3ZlVG8oV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwb2ludHNbMF0ueCgp
KSwKQEAgLTQzNiw3ICs0MzYsNyBAQCBzdGF0aWMgdm9pZCBzZXRQYXRoRnJvbUNvbnZleFBvaW50
cyhTa1BhCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXpl
X3QgbnVtUG9pbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBib29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9v
bCBhbnRpYWxpYXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC01ODIsMTUgKzU4MiwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmUoY29uc3QgSW50CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJl
bnQoKTsKIAotICAgIEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCBwMiA9
IHBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHAxID0gcG9pbnQxOworICAgIEdyYXBoaWNzUG9p
bnQgcDIgPSBwb2ludDI7CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54KCkgPT0gcDIu
eCgpKTsKICAgICBpbnQgd2lkdGggPSByb3VuZGYoc3Ryb2tlVGhpY2tuZXNzKCkpOwogCiAgICAg
Ly8gV2Uga25vdyB0aGVzZSBhcmUgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaW5lcywgc28gdGhl
IGxlbmd0aCB3aWxsIGp1c3QKICAgICAvLyBiZSB0aGUgc3VtIG9mIHRoZSBkaXNwbGFjZW1lbnQg
Y29tcG9uZW50IHZlY3RvcnMgZ2l2ZSBvciB0YWtlIDEgLQogICAgIC8vIHByb2JhYmx5IHdvcnRo
IHRoZSBzcGVlZCB1cCBvZiBubyBzcXVhcmUgcm9vdCwgd2hpY2ggYWxzbyB3b24ndCBiZSBleGFj
dC4KLSAgICBGbG9hdFNpemUgZGlzcCA9IHAyIC0gcDE7CisgICAgR3JhcGhpY3NTaXplIGRpc3Ag
PSBwMiAtIHAxOwogICAgIGludCBsZW5ndGggPSBTa1NjYWxhclJvdW5kKGRpc3Aud2lkdGgoKSAr
IGRpc3AuaGVpZ2h0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ry
b2tpbmcoJnBhaW50LCAwLCBsZW5ndGgpOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBw
YWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhj
b25zdCBHcmFwaGljc1BvaW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC02OTgsNyArNjk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dENoZQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFp
bnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHB0LAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBHcmFwaGljc1BvaW50JiBwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcHJpbnRpbmcpCiB7CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d1BhdGgocGF0aCwgcGFpbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03ODQsNyArNzg0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZXN0b3JlKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY0LDEyICs4NjQsMTIgQEAgQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2tTY2FsYXJUb0RvdWJsZShtLmdldFRyYW5zbGF0ZVkoKSkpOwogfQogCi1GbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmdNb2RlKQorR3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSkKIHsKICAgICBy
ZXR1cm4gcmVjdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1Np
emUmIHNpemUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZp
bGxDb2wKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25z
dCBHcmFwaGljc1NpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgYmx1ckZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENvbG9yJiBjb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC0xMTUyLDcgKzExNTIsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HcmFwaGljc1BvaW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1BvaW50U2tpYS5jcHAJKHJldmlzaW9uIDkx
MDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UG9p
bnRTa2lhLmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NQb2ludFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKworI2luY2x1
ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa2lhVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmIHApCisgICAgOiBt
X3gocC5mWCkKKyAgICAsIG1feShwLmZZKQoreworfQorCitGbG9hdFBvaW50OjpvcGVyYXRvciBT
a1BvaW50KCkgY29uc3QKK3sKKyAgICBTa1BvaW50IHAgPSB7IFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIobV94KSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3kpIH07CisgICAgcmV0dXJuIHA7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NQb2ludFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NQb2ludFNraWEuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NQb2ludFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMCArMjksMjAgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKIAogI2luY2x1ZGUgIlNrUG9pbnQuaCIKICNpbmNsdWRl
ICJTa2lhVXRpbHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFBvaW50OjpGbG9h
dFBvaW50KGNvbnN0IFNrUG9pbnQmIHApCitHcmFwaGljc1BvaW50OjpHcmFwaGljc1BvaW50KGNv
bnN0IFNrUG9pbnQmIHApCiAgICAgOiBtX3gocC5mWCkKICAgICAsIG1feShwLmZZKQogewogfQog
Ci1GbG9hdFBvaW50OjpvcGVyYXRvciBTa1BvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQ6Om9w
ZXJhdG9yIFNrUG9pbnQoKSBjb25zdAogewogICAgIFNrUG9pbnQgcCA9IHsgV2ViQ29yZUZsb2F0
VG9Ta1NjYWxhcihtX3gpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1feSkgfTsKICAgICByZXR1
cm4gcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NSZWN0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc1JlY3RTa2lhLmNwcAkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHA6OTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzUmVj
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCisjaW5jbHVkZSAiU2tSZWN0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgU2tSZWN0
JiByKQorICAgIDogbV9sb2NhdGlvbihyLmZMZWZ0LCByLmZUb3ApCisgICAgLCBtX3NpemUoci53
aWR0aCgpLCByLmhlaWdodCgpKQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIFNrUmVjdCgp
IGNvbnN0Cit7CisgICAgU2tSZWN0IHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9
OworICAgIHJldHVybiByZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzUmVjdFNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NSZWN0U2tpYS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1JlY3RTa2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTkgKzI5LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiAjaW5jbHVkZSAiU2tS
ZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29u
c3QgU2tSZWN0JiByKQorR3JhcGhpY3NSZWN0OjpHcmFwaGljc1JlY3QoY29uc3QgU2tSZWN0JiBy
KQogICAgIDogbV9sb2NhdGlvbihyLmZMZWZ0LCByLmZUb3ApCiAgICAgLCBtX3NpemUoci53aWR0
aCgpLCByLmhlaWdodCgpKQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIFNrUmVjdCgpIGNv
bnN0CitHcmFwaGljc1JlY3Q6Om9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0CiB7CiAgICAgU2tSZWN0
IHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9OwogICAgIHJldHVybiByZWN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCwxMiArMTA4LDEyIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpj
b3B5SW1hZ2UKICAgICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgq
bV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1hcCgpLCB0cnVlKTsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShyZWN0LCB0aGlzKTsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQog
ewogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgp
OwpAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RS
ZWN0KQogewogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3Vy
cmVudCgpOwogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1l
U2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIGNvbnRleHQg
PT0gbV9jb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJOYXRpdmVJbWFnZVNraWEuaCIKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlc2FtcGxpbmdN
b2RlIGNvbXB1dGVSZXNhbXBsaW5nTQogewogICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmhhc0lt
YWdlUmVzYW1wbGluZ0hpbnQoKSkgewogICAgICAgICBJbnRTaXplIHNyY1NpemU7Ci0gICAgICAg
IEZsb2F0U2l6ZSBkc3RTaXplOworICAgICAgICBHcmFwaGljc1NpemUgZHN0U2l6ZTsKICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LT5nZXRJbWFnZVJlc2FtcGxpbmdIaW50KCZzcmNTaXplLCAmZHN0
U2l6ZSk7CiAgICAgICAgIHNyY1dpZHRoID0gc3JjU2l6ZS53aWR0aCgpOwogICAgICAgICBzcmNI
ZWlnaHQgPSBzcmNTaXplLmhlaWdodCgpOwpAQCAtMzAwLDkgKzMwMCw5IEBAIHN0YXRpYyB2b2lk
IFRyYW5zZm9ybURpbWVuc2lvbnMoY29uc3QgU2sKIH0KIAogLy8gQSBoZWxwZXIgbWV0aG9kIGZv
ciB0cmFuc2xhdGluZyBuZWdhdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcy4KLUZsb2F0UmVj
dCBub3JtYWxpemVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0dyYXBoaWNzUmVjdCBub3Jt
YWxpemVSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKLSAgICBGbG9hdFJlY3Qgbm9y
bSA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IG5vcm0gPSByZWN0OwogICAgIGlmIChub3JtLndp
ZHRoKCkgPCAwKSB7CiAgICAgICAgIG5vcm0uc2V0WChub3JtLngoKSArIG5vcm0ud2lkdGgoKSk7
CiAgICAgICAgIG5vcm0uc2V0V2lkdGgoLW5vcm0ud2lkdGgoKSk7CkBAIC0zMzAsMTQgKzMzMCwx
NCBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhCiB9CiAKIHZvaWQg
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRTcmNSZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBmbG9hdFNyY1JlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewotICAgIEZsb2F0UmVjdCBub3JtU3Jj
UmVjdCA9IG5vcm1hbGl6ZVJlY3QoZmxvYXRTcmNSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9y
bVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KGZsb2F0U3JjUmVjdCk7CiAgICAgaWYgKGRlc3RSZWN0
LmlzRW1wdHkoKSB8fCBub3JtU3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8v
IG5vdGhpbmcgdG8gZHJhdwogCkBAIC00NjEsOCArNDYxLDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICB9CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAg
ICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ3Niw4
ICs0NzYsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAg
aWYgKCFibSkKICAgICAgICAgcmV0dXJuOyAgLy8gSXQncyB0b28gZWFybHkgYW5kIHdlIGRvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgogCi0gICAgRmxvYXRSZWN0IG5vcm1Ec3RSZWN0ID0gbm9ybWFs
aXplUmVjdChkc3RSZWN0KTsKLSAgICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVS
ZWN0KHNyY1JlY3QpOworICAgIEdyYXBoaWNzUmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJl
Y3QoZHN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVj
dChzcmNSZWN0KTsKIAogICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcuCkBAIC00
OTQsMTMgKzQ5NCwxMyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGdvIGludG8gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWEuY3BwCiAKIHZvaWQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjdHh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBGbG9hdFJlY3Qgbm9ybURzdFJlY3QgPSBub3JtYWxp
emVSZWN0KGRzdFJlY3QpOwotICAgIEZsb2F0UmVjdCBub3JtU3JjUmVjdCA9IG5vcm1hbGl6ZVJl
Y3Qoc3JjUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1Ec3RSZWN0ID0gbm9ybWFsaXplUmVj
dChkc3RSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVSZWN0
KHNyY1JlY3QpOwogCiAgICAgaWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGF0aFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5j
bHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKIApAQCAtNzQsNTAgKzc0
LDUwIEBAIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKICAgICByZXR1cm4gbV9w
YXRoLT5nZXRQb2ludHMoTlVMTCwgMCkgIT0gMDsKIH0KIAotRmxvYXRQb2ludCBQYXRoOjpjdXJy
ZW50UG9pbnQoKSBjb25zdCAKK0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29u
c3QgCiB7CiAgICAgLy8gRklYTUU6IHJldHVybiBjdXJyZW50IHBvaW50IG9mIHN1YnBhdGguCiAg
ICAgZmxvYXQgcXVpZXROYU4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFO
KCk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQocXVpZXROYU4sIHF1aWV0TmFOKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NQb2ludChxdWlldE5hTiwgcXVpZXROYU4pOwogfQogCi1ib29sIFBhdGg6OmNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAorYm9v
bCBQYXRoOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVs
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gU2tQYXRoQ29udGFpbnNQb2ludChtX3BhdGgsIHBvaW50
LAogICAgICAgcnVsZSA9PSBSVUxFX05PTlpFUk8gPyBTa1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBl
IDogU2tQYXRoOjprRXZlbk9kZF9GaWxsVHlwZSk7CiB9CiAKLXZvaWQgUGF0aDo6dHJhbnNsYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEdyYXBo
aWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBtX3BhdGgtPm9mZnNldChXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKHNpemUud2lkdGgoKSksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWlnaHQoKSkp
OwogfQogCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVj
dCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGgtPmdldEJv
dW5kcygpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
K3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIG1f
cGF0aC0+bW92ZVRvKHBvaW50KTsKIH0KIAotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkKIHsKICAgICBtX3BhdGgtPmxpbmVUbyhwb2ludCk7CiB9CiAKLXZvaWQgUGF0aDo6
YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIGVw
KQordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcCwgY29u
c3QgR3JhcGhpY3NQb2ludCYgZXApCiB7CiAgICAgbV9wYXRoLT5xdWFkVG8oY3AsIGVwKTsKIH0K
IAotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgZXApCit2b2lkIFBhdGg6OmFkZEJl
emllckN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAyLCBjb25zdCBHcmFwaGljc1BvaW50JiBlcCkKIHsKICAgICBtX3BhdGgtPmN1YmljVG8ocDEs
IHAyLCBlcCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFkZEFyY1Rv
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQg
cmFkaXVzKQogewogICAgIG1fcGF0aC0+YXJjVG8ocDEsIHAyLCBXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKHJhZGl1cykpOwogfQpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgUGF0aDo6Y2xvc2VTdWJw
YXRoKCkKICAgICBtX3BhdGgtPmNsb3NlKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0
IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBhbnRpY2xv
Y2t3aXNlKSB7Cit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiBwLCBmbG9h
dCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgYW50aWNsb2Nrd2lzZSkgewogICAgIFNrU2Nh
bGFyIGN4ID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwLngoKSk7CiAgICAgU2tTY2FsYXIgY3kg
PSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHAueSgpKTsKICAgICBTa1NjYWxhciByYWRpdXMgPSBX
ZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHIpOwpAQCAtMTYzLDEyICsxNjMsMTIgQEAgdm9pZCBQYXRo
OjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZgogICAgIH0KIH0KIAotdm9pZCBQYXRoOjph
ZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgbV9wYXRoLT5hZGRSZWN0KHJlY3QpOwogfQogCi12
b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjph
ZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBtX3BhdGgtPmFkZE92
YWwocmVjdCk7CiB9CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBQYXRoOjpjbGVhcigpCiAgICAg
bV9wYXRoLT5yZXNldCgpOwogfQogCi1zdGF0aWMgRmxvYXRQb2ludCogY29udmVydFBhdGhQb2lu
dHMoRmxvYXRQb2ludCBkc3RbXSwgY29uc3QgU2tQb2ludCBzcmNbXSwgaW50IGNvdW50KQorc3Rh
dGljIEdyYXBoaWNzUG9pbnQqIGNvbnZlcnRQYXRoUG9pbnRzKEdyYXBoaWNzUG9pbnQgZHN0W10s
IGNvbnN0IFNrUG9pbnQgc3JjW10sIGludCBjb3VudCkKIHsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgZHN0W2ldLnNldFgoU2tTY2FsYXJUb0Zsb2F0KHNy
Y1tpXS5mWCkpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5m
bywgUGF0aEFwcGxpZXIKICAgICBTa1BhdGg6Okl0ZXIgaXRlcigqbV9wYXRoLCBmYWxzZSk7CiAg
ICAgU2tQb2ludCBwdHNbNF07CiAgICAgUGF0aEVsZW1lbnQgcGF0aEVsZW1lbnQ7Ci0gICAgRmxv
YXRQb2ludCBwYXRoUG9pbnRzWzNdOworICAgIEdyYXBoaWNzUG9pbnQgcGF0aFBvaW50c1szXTsK
IAogICAgIGZvciAoOzspIHsKICAgICAgICAgc3dpdGNoIChpdGVyLm5leHQocHRzKSkgewpAQCAt
MjI4LDcgKzIyOCw3IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8K
ICAgICBtX3BhdGgtPnRyYW5zZm9ybSh4Zm9ybSk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpzdHJv
a2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxp
ZXIpIGNvbnN0CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoID0gc2NyYXRjaENvbnRl
eHQoKTsKICAgICBzY3JhdGNoLT5zYXZlKCk7CkBAIC0yNDEsMTIgKzI0MSwxMiBAQCBGbG9hdFJl
Y3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiAgICAgU2tQYXRoIGJvdW5kaW5nUGF0
aDsKICAgICBwYWludC5nZXRGaWxsUGF0aCgqcGxhdGZvcm1QYXRoKCksICZib3VuZGluZ1BhdGgp
OwogCi0gICAgRmxvYXRSZWN0IHIgPSBib3VuZGluZ1BhdGguZ2V0Qm91bmRzKCk7CisgICAgR3Jh
cGhpY3NSZWN0IHIgPSBib3VuZGluZ1BhdGguZ2V0Qm91bmRzKCk7CiAgICAgc2NyYXRjaC0+cmVz
dG9yZSgpOwogICAgIHJldHVybiByOwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0
cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGFwcGxpZXIp
OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IHNjcmF0Y2hDb250ZXh0KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgUGxhdGZvcm1Db250ZXh0U2tpYTo6
U3RhdGUgewogICAgIC8vIElmIG5vbi1lbXB0eSwgdGhlIGN1cnJlbnQgU3RhdGUgaXMgY2xpcHBl
ZCB0byB0aGlzIGltYWdlLgogICAgIFNrQml0bWFwIG1faW1hZ2VCdWZmZXJDbGlwOwogICAgIC8v
IElmIG1faW1hZ2VCdWZmZXJDbGlwIGlzIG5vbi1lbXB0eSwgdGhpcyBpcyB0aGUgcmVnaW9uIHRo
ZSBpbWFnZSBpcyBjbGlwcGVkIHRvLgotICAgIEZsb2F0UmVjdCBtX2NsaXA7CisgICAgR3JhcGhp
Y3NSZWN0IG1fY2xpcDsKIAogICAgIC8vIFRoaXMgaXMgYSBsaXN0IG9mIGNsaXBwaW5nIHBhdGhz
IHdoaWNoIGFyZSBjdXJyZW50bHkgYWN0aXZlLCBpbiB0aGUKICAgICAvLyBvcmRlciBpbiB3aGlj
aCB0aGV5IHdlcmUgcHVzaGVkLgpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6c2F2ZSgpCiAgICAgY2FudmFzKCktPnNhdmUoKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2Uo
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQogewog
ICAgIC8vIFNraWEgZG9lc24ndCBzdXBwb3J0IGNsaXBwaW5nIHRvIGFuIGltYWdlLCBzbyB3ZSBj
cmVhdGUgYSBsYXllci4gVGhlIG5leHQKQEAgLTU4MCwxMyArNTgwLDEzIEBAIGJvb2wgUGxhdGZv
cm1Db250ZXh0U2tpYTo6aXNOYXRpdmVGb250UmUKICNlbmRpZgogfQogCi12b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50U2l6ZSogc3JjU2l6ZSwgRmxv
YXRTaXplKiBkc3RTaXplKSBjb25zdAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRJbWFn
ZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUsIEdyYXBoaWNzU2l6ZSogZHN0U2l6ZSkg
Y29uc3QKIHsKICAgICAqc3JjU2l6ZSA9IG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7CiAg
ICAgKmRzdFNpemUgPSBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplOwogfQogCi12b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OnNldEltYWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBkc3RTaXplKQordm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzZXRJbWFnZVJlc2FtcGxpbmdIaW50KGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgZHN0U2l6ZSkKIHsKICAgICBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNT
aXplID0gc3JjU2l6ZTsKICAgICBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplID0gZHN0U2l6
ZTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEltYWdl
UmVzYW1wCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsZWFySW1hZ2VSZXNhbXBsaW5nSGlu
dCgpCiB7CiAgICAgbV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZSA9IEludFNpemUoKTsKLSAg
ICBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplID0gRmxvYXRTaXplKCk7CisgICAgbV9pbWFn
ZVJlc2FtcGxpbmdIaW50RHN0U2l6ZSA9IEdyYXBoaWNzU2l6ZSgpOwogfQogCiBib29sIFBsYXRm
b3JtQ29udGV4dFNraWE6Omhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSBjb25zdApAQCAtNjAzLDcg
KzYwMyw3IEBAIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aGFzSW1hZ2VSZXNhbXAKICAgICBy
ZXR1cm4gIW1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemUuaXNFbXB0eSgpICYmICFtX2ltYWdl
UmVzYW1wbGluZ0hpbnREc3RTaXplLmlzRW1wdHkoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjphcHBseUNsaXBGcm9tSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBT
a0JpdG1hcCYgaW1hZ2VCdWZmZXIpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5Q2xp
cEZyb21JbWFnZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IFNrQml0bWFwJiBpbWFn
ZUJ1ZmZlcikKIHsKICAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhlIGltYWdlIG1hc2sgY29u
dGFpbnMgb3BhcXVlIGJsYWNrIGZvciB0aGUgcG9ydGlvbnMgdGhhdCBhcmUgdG8gYmUgc2hvd24s
IGFzIHN1Y2ggd2UKICAgICAvLyBvbmx5IGxvb2sgYXQgdGhlIGFscGhhIHdoZW4gY29tcG9zaXRp
bmcuIEknbSBub3QgMTAwJSBzdXJlIHRoaXMgaXMgd2hhdCBXZWJLaXQgZXhwZWN0cyBmb3IgaW1h
Z2UgY2xpcHBpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgLy8g
fHJlY3R8LiBUaGlzIGxheWVyIGlzIGltcGxpY2l0bHkgcmVzdG9yZWQgd2hlbiB0aGUgbmV4dCBy
ZXN0b3JlIGlzCiAgICAgLy8gaW52b2tlZC4KICAgICAvLyBOT1RFOiB8aW1hZ2VCdWZmZXJ8IG1h
eSBiZSBkZWxldGVkIGJlZm9yZSB0aGUgfHJlc3RvcmV8IGlzIGludm9rZWQuCi0gICAgdm9pZCBi
ZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZm
ZXIqKTsKKyAgICB2b2lkIGJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBHcmFwaGljc1Jl
Y3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwogICAgIHZvaWQgY2xpcFBhdGhBbnRpQWxpYXNlZChj
b25zdCBTa1BhdGgmKTsKIAogICAgIC8vIFNldHMgdXAgdGhlIGNvbW1vbiBmbGFncyBvbiBhIHBh
aW50IGZvciBhbnRpYWxpYXNpbmcsIGVmZmVjdHMsIGV0Yy4KQEAgLTE3Miw4ICsxNzIsOCBAQCBw
dWJsaWM6CiAgICAgLy8gdGV4dCBkcmF3aW5nIEFQSXMuCiAgICAgYm9vbCBpc05hdGl2ZUZvbnRS
ZW5kZXJpbmdBbGxvd2VkKCk7CiAKLSAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50
U2l6ZSogc3JjU2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdDsKLSAgICB2b2lkIHNldElt
YWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgRmxvYXRTaXpl
JiBkc3RTaXplKTsKKyAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50U2l6ZSogc3Jj
U2l6ZSwgR3JhcGhpY3NTaXplKiBkc3RTaXplKSBjb25zdDsKKyAgICB2b2lkIHNldEltYWdlUmVz
YW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgR3JhcGhpY3NTaXplJiBk
c3RTaXplKTsKICAgICB2b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwogICAgIGJvb2wg
aGFzSW1hZ2VSZXNhbXBsaW5nSGludCgpIGNvbnN0OwogCkBAIC0xODQsNyArMTg0LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICAvLyBVc2VkIHdoZW4gcmVzdG9yaW5nIGFuZCB0aGUgc3RhdGUg
aGFzIGFuIGltYWdlIGNsaXAuIE9ubHkgc2hvd3MgdGhlIHBpeGVscyBpbgogICAgIC8vIG1fY2Fu
dmFzIHRoYXQgYXJlIGFsc28gaW4gaW1hZ2VCdWZmZXIuCi0gICAgdm9pZCBhcHBseUNsaXBGcm9t
SW1hZ2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU2tCaXRtYXAmKTsKKyAgICB2b2lkIGFwcGx5
Q2xpcEZyb21JbWFnZShjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBTa0JpdG1hcCYpOwogICAg
IHZvaWQgYXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxTa1BhdGg+JiBwYXRo
cyk7CiAKICAgICAvLyBjb21tb24gY29kZSBiZXR3ZWVuIHNldHVwUGFpbnRGb3JbRmlsbGluZyxT
dHJva2luZ10KQEAgLTIwNyw3ICsyMDcsNyBAQCBwcml2YXRlOgogICAgIC8vIFN0b3JlcyBpbWFn
ZSBzaXplcyBmb3IgYSBoaW50IHRvIGNvbXB1dGUgaW1hZ2UgcmVzYW1wbGluZyBtb2Rlcy4KICAg
ICAvLyBWYWx1ZXMgYXJlIHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFn
ZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsKLSAgICBGbG9hdFNpemUgbV9pbWFnZVJlc2FtcGxpbmdI
aW50RHN0U2l6ZTsKKyAgICBHcmFwaGljc1NpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50RHN0U2l6
ZTsKICAgICBib29sIG1fcHJpbnRpbmc7CiAgICAgYm9vbCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVy
OwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2dwdUNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFGb250V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQg
U2tpYVdpbk91dGxpbmVDYWNoZTo6cmVtb3ZlUGF0aHNGb3IKIAogYm9vbCB3aW5kb3dzQ2FuSGFu
ZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0KQogewotICAgIEZsb2F0
U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldDsKICAgICBm
bG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIENvbG9yU3BhY2Ug
c2hhZG93Q29sb3JTcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvU2tpYVV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0IFNrQ2Fu
dmFzJiBjYQogICAgIGludmVyc2VUcmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCwgdHJhbnNmb3Jt
ZWREZXN0KTsKIH0KIAotYm9vbCBTa1BhdGhDb250YWluc1BvaW50KFNrUGF0aCogb3JpZ2luYWxQ
YXRoLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgU2tQYXRoOjpGaWxsVHlwZSBmdCkKK2Jvb2wg
U2tQYXRoQ29udGFpbnNQb2ludChTa1BhdGgqIG9yaWdpbmFsUGF0aCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQsIFNrUGF0aDo6RmlsbFR5cGUgZnQpCiB7CiAgICAgU2tSZWdpb24gcmduOwog
ICAgIFNrUmVnaW9uIGNsaXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1NraWFVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgU2tTY2FsYXIgV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIo
CiB2b2lkIENsaXBSZWN0VG9DYW52YXMoY29uc3QgU2tDYW52YXMmLCBjb25zdCBTa1JlY3QmIHNy
Y1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpOwogCiAvLyBEZXRlcm1pbmUgaWYgYSBnaXZlbiBXZWJL
aXQgcG9pbnQgaXMgY29udGFpbmVkIGluIGEgcGF0aAotYm9vbCBTa1BhdGhDb250YWluc1BvaW50
KFNrUGF0aCosIGNvbnN0IEZsb2F0UG9pbnQmLCBTa1BhdGg6OkZpbGxUeXBlKTsKK2Jvb2wgU2tQ
YXRoQ29udGFpbnNQb2ludChTa1BhdGgqLCBjb25zdCBHcmFwaGljc1BvaW50JiwgU2tQYXRoOjpG
aWxsVHlwZSk7CiAKIC8vIFJldHVybnMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAxeDEgR3JhcGhp
Y3NDb250ZXh0IGludGVuZGVkIGZvciB0ZW1wb3JhcnkKIC8vIG9wZXJhdGlvbnMuIFBsZWFzZSBz
YXZlKCkgdGhlIHN0YXRlIGFuZCByZXN0b3JlKCkgaXQgd2hlbiB5b3UncmUgZG9uZSB3aXRoCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAJKHJldmlzaW9u
IDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkCiAKIC8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgIGlmIChtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldFJlcGwKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwotdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgdmFsdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQb3NpdGlvbihj
b25zdCBHcmFwaGljc1BvaW50JiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gcG9zaXRpb24o
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldFBvc2kKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAq
Lwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKHZh
bHVlID09IGFuY2hvclBvaW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4OCw3ICsxODgsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRBbmNoCiAKIC8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dFNpemUoY29uc3QgRmxvYXRTaXplJiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiB2YWx1ZSkKIHsKICAgICBpZiAodmFs
dWUgPT0gc2l6ZSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVpbXBzIGZyb20g
R3JhcGhpY3NMYXllci5oCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIHsgc2V0TmVlZHNEaXNwbGF5
KCk7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NMYXllciog
bGF5ZXIpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKTsK
QEAgLTU2LDkgKzU2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGQo
R3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludDNEJiBwKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFw
aGljc1BvaW50JiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgR3Jh
cGhpY3NQb2ludDNEJiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBHcmFwaGlj
c1NpemUmIHNpemUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFBy
ZXNlcnZlczNEKGJvb2wgYik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQgPSAwKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJp
dG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4dHVyZSog
bWFza1RleHR1cmUgPSAwKSA9IDA7CiAKICAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhlIHRhcmdl
dCBmb3IgdGhlIGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KICAgICB2aXJ0dWFsIHZvaWQg
YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KikgPSAwOwogICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgY29uc3QgR3JhcGhpY3NSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlw
KCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCkg
PSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZVBlcnNwZWN0aQogICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSB8fCBt
X3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY29uc3QgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndp
ZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyKTsKKyAgICBjb25zdCBHcmFwaGljc1BvaW50
IGNlbnRlclBvaW50ID0gR3JhcGhpY3NQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5o
ZWlnaHQoKSAvIDIpOwogICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KCkKICAgICAgICAgICAgIC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBjZW50
ZXJQb2ludC55KCkpCiAgICAgICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRl
QWxsVHJhbnNmCiAgICAgY29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQoKTsKIAog
ICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3BhcmVudCA/
IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpKS5tdWx0aXBseShtX3RyYW5zZm9ybXMubG9jYWwpOwotICAgIG1fdHJhbnNmb3Jtcy50
YXJnZXRCb3VuZGluZ1JlY3QgPSBGbG9hdFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0
KHRhcmdldFJlY3QoKSkpOworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBH
cmFwaGljc1JlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRhcmdldFJlY3QoKSkpOwog
CiAgICAgbV9zdGF0ZS52aXNpYmxlID0gbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgfHwgbV90
cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPj0gMDsKICAgICBpZiAoIW1fc3RhdGUu
dmlzaWJsZSkKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlQWxsVHJhbnNmCiAKICAgICAvLyBUaGlzIHRyYW5zZm9ybSBpcyBvbmx5IGFwcGxpZWQgaWYg
dXNpbmcgYSB0d28tcGFzcyBmb3IgdGhlIHJlcGxpY2EsIGJlY2F1c2UgdGhlIHRyYW5zZm9ybSBu
ZWVkcyB0byBiZSBhZGp1c3RlZCB0byB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJtZWRpYXRlIHN1cmZh
Y2UsIGluc3RlYWYgb2YgdGhlIHNpemUgb2YgdGhlIGNvbnRlbnQgbGF5ZXIuCiAgICAgaWYgKG1f
cGFyZW50ICYmIG1fcGFyZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICBtX3RyYW5z
Zm9ybXMuY2VudGVyWiA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNE
KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsKKyAgICAg
ICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBvaW50KEdy
YXBoaWNzUG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIsIDAp
KS56KCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1cm47CkBA
IC0xOTUsOSArMTk1LDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUJvdW5kaW5n
UgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJl
Y3RJblJvb3RDb29yZGluYXRlcyA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0YXJnZXRS
ZWN0KCkpOworICAgIGNvbnN0IEdyYXBoaWNzUmVjdCB0YXJnZXRSZWN0SW5Sb290Q29vcmRpbmF0
ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGFyZ2V0UmVjdCgpKTsKIAotICAgIGNv
bnN0IEZsb2F0UmVjdCBwYXJlbnRCb3VuZGluZ1JlY3QgPSBtX3BhcmVudC0+bV90cmFuc2Zvcm1z
LmJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHM7CisgICAgY29uc3QgR3JhcGhpY3NS
ZWN0IHBhcmVudEJvdW5kaW5nUmVjdCA9IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuYm91bmRpbmdS
ZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50czsKICAgICBpZiAocGFyZW50Qm91bmRpbmdSZWN0Lndp
ZHRoKCkgPCAwKQogICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3QgPSB0
YXJnZXRSZWN0SW5Sb290Q29vcmRpbmF0ZXM7CiAgICAgZWxzZSB7CkBAIC0yMTQsMTcgKzIxNCwx
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMoKQogICAgICAgICBtX3Rp
bGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gdGlsZXNUb0FkZDsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0aWxlc1RvQWRkOwogICAg
IFZlY3RvcjxpbnQ+IHRpbGVzVG9SZW1vdmU7CiAgICAgY29uc3QgaW50IFRpbGVFcmFzZVRocmVz
aG9sZCA9IDY7Ci0gICAgRmxvYXRTaXplIHNpemUgPSBjb250ZW50U2l6ZSgpOwotICAgIEZsb2F0
UmVjdCBjb250ZW50UmVjdCgwLCAwLCBzaXplLndpZHRoKCkgKiBtX3N0YXRlLmNvbnRlbnRTY2Fs
ZSwgc2l6ZS5oZWlnaHQoKSAqIG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAgICBHcmFwaGljc1Np
emUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRlbnRSZWN0KDAs
IDAsIHNpemUud2lkdGgoKSAqIG1fc3RhdGUuY29udGVudFNjYWxlLCBzaXplLmhlaWdodCgpICog
bV9zdGF0ZS5jb250ZW50U2NhbGUpOwogCiAgICAgZm9yIChmbG9hdCB5ID0gMDsgeSA8IGNvbnRl
bnRSZWN0LmhlaWdodCgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7CiAgICAgICAgIGZvciAoZmxv
YXQgeCA9IDA7IHggPCBjb250ZW50UmVjdC53aWR0aCgpOyB4ICs9IGdUaWxlRGltZW5zaW9uKSB7
Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwgZ1RpbGVEaW1lbnNpb24sIGdU
aWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCh4LCB5LCBn
VGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwogICAgICAgICAgICAgdGlsZVJlY3QuaW50
ZXJzZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdEluUm9v
dENvb3JkaW5hdGVzID0gdGlsZVJlY3Q7CisgICAgICAgICAgICBHcmFwaGljc1JlY3QgdGlsZVJl
Y3RJblJvb3RDb29yZGluYXRlcyA9IHRpbGVSZWN0OwogICAgICAgICAgICAgdGlsZVJlY3RJblJv
b3RDb29yZGluYXRlcy5zY2FsZSgxLjAgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CiAgICAgICAg
ICAgICB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBS
ZWN0KHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMpOwogICAgICAgICAgICAgc3RhdGljIGJvb2wg
c0Rpc2NhcmRIaWRkZW5UaWxlcyA9IGZhbHNlOwpAQCAtMjM1LDExICsyMzUsMTEgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKCkKICAgICB9CiAKICAgICBmb3IgKGludCBp
ID0gbV90aWxlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBGbG9h
dFJlY3Qgb2xkVGlsZSA9IG1fdGlsZXNbaV0ucmVjdDsKKyAgICAgICAgY29uc3QgR3JhcGhpY3NS
ZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3Q7CiAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKIAogICAgICAgICBmb3IgKGludCBqID0gdGlsZXNUb0FkZC5zaXplKCkgLSAxOyBqID49IDA7
IC0taikgewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0IG5ld1RpbGUgPSB0aWxlc1RvQWRk
W2pdOworICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0IG5ld1RpbGUgPSB0aWxlc1RvQWRk
W2pdOwogICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0gbmV3VGlsZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OmNvbXB1dGVWaXNpYmxlUmUKIHsKICAgICBpZiAoIW5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3Qgcm9vdFZpc2libGVSZWN0OworICAg
IEdyYXBoaWNzUmVjdCByb290VmlzaWJsZVJlY3Q7CiAgICAgaWYgKCFtX3BhcmVudCkKICAgICAg
ICAgcm9vdFZpc2libGVSZWN0ID0gbV9zdGF0ZS5yb290VmlzaWJsZVJlY3Q7CiAgICAgZWxzZSBp
ZiAobV9wYXJlbnQpCkBAIC0zMDAsMTIgKzMwMCwxMiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpyZW5kZXJDb250ZW50KFRlCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBBZGQg
ZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMuCi0gICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1f
Y3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29u
dGVudC5uZWVkc0Rpc3BsYXlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3QgPSBtX2N1
cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVudENvbnRl
bnQubmVlZHNEaXNwbGF5UmVjdDsKICAgICBkaXJ0eVJlY3Quc2NhbGUobV9zdGF0ZS5jb250ZW50
U2NhbGUpOwogCiAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwgbV90
aWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CiAgICAgICAgIFRpbGUmIHRpbGUgPSBtX3RpbGVz
W3RpbGVJbmRleF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0OworICAgICAg
ICBHcmFwaGljc1JlY3QgcmVjdCA9IGRpcnR5UmVjdDsKICAgICAgICAgaWYgKCF0aWxlLnRleHR1
cmUpCiAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0
dXJlKCk7CiAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiYgdGV4dHVyZSA9IHRpbGUudGV4
dHVyZTsKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJD
b250ZW50KFRlCiAgICAgICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBGbG9hdFJlY3QgY29udGVudFJlY3RJblRpbGVDb29yZGlu
YXRlcyA9IGNvbnRlbnRSZWN0OwotICAgICAgICBGbG9hdFBvaW50IG9mZnNldCgtdGlsZS5yZWN0
LngoKSwgLXRpbGUucmVjdC55KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgY29udGVudFJlY3RJ
blRpbGVDb29yZGluYXRlcyA9IGNvbnRlbnRSZWN0OworICAgICAgICBHcmFwaGljc1BvaW50IG9m
ZnNldCgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVjdC55KCkpOwogICAgICAgICBjb250ZW50UmVj
dEluVGlsZUNvb3JkaW5hdGVzLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CiAKICAgICAg
ICAgewpAQCAtMzMxLDggKzMzMSw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNv
bnRlbnQoVGUKICAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgICAgICAg
ICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERyYXdpbmdN
b2RlKCkpOwogICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0
LnkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShtX3N0YXRlLmNvbnRl
bnRTY2FsZSwgbV9zdGF0ZS5jb250ZW50U2NhbGUpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBz
Y2FsZWRDb250ZW50UmVjdChjb250ZW50UmVjdCk7CisgICAgICAgICAgICBjb250ZXh0LnNjYWxl
KEdyYXBoaWNzU2l6ZShtX3N0YXRlLmNvbnRlbnRTY2FsZSwgbV9zdGF0ZS5jb250ZW50U2NhbGUp
KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBzY2FsZWRDb250ZW50UmVjdChjb250ZW50UmVj
dCk7CiAgICAgICAgICAgICBzY2FsZWRDb250ZW50UmVjdC5zY2FsZSgxLjAgLyBtX3N0YXRlLmNv
bnRlbnRTY2FsZSk7CiAgICAgICAgICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlw
ZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQogICAgICAgICAgICAgICAgIGNvbnRleHQuZHJh
d0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFBvaW50KDAsIDApKTsKQEAgLTM2MSw5ICszNjEsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludCgpCiAgICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKIH0KIAotRmxvYXRSZWN0IFRl
eHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAorR3JhcGhpY3NSZWN0
IFRleHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0KSBjb25zdAogewot
ICAgIHJldHVybiBGbG9hdFJlY3QoCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgKICAgICAgICAg
ICAgICAgICB0YXJnZXRSZWN0LngoKSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0LngoKSkg
LyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0LnkoKSAr
ICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwK
ICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpIC8gbV9zdGF0ZS5jb250ZW50U2NhbGUs
CkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNv
bnN0IAogCiAgICAgY29uc3QgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMuaXNTdXJmYWNlID8gMSA6
IG9wdGlvbnMub3BhY2l0eTsKIAotICAgIGNvbnN0IEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0gdGhp
cy0+dGFyZ2V0UmVjdCgpOworICAgIGNvbnN0IEdyYXBoaWNzUmVjdCB0YXJnZXRSZWN0ID0gdGhp
cy0+dGFyZ2V0UmVjdCgpOwogCiAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUg
PT0gTWVkaWFDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhKSB7CiAgICAgICAg
IGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpCkBAIC00MDYs
NyArNDA2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPyByZXBsaWNhTWFz
a1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0
LCBtX3RpbGVzW2ldLnJlY3QpOworICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QgcmVjdCA9IHRh
cmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOwogICAgICAg
ICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCByZWN0LCBtX3Ry
YW5zZm9ybXMudGFyZ2V0LCBvcGFjaXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/IDAgOiBtYXNrVGV4
dHVyZS5nZXQoKSk7CiAgICAgfQogfQpAQCAtNDI3LDcgKzQyNyw3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWwKIHsKICAgICBib29sIGhhc0NsaXAgPSBtX3N0YXRl
Lm1hc2tzVG9Cb3VuZHMgJiYgIW1fY2hpbGRyZW4uaXNFbXB0eSgpOwogICAgIGlmIChoYXNDbGlw
KQotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChtX3RyYW5zZm9ybXMu
Zm9yRGVzY2VuZGFudHMsIEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1fdHJh
bnNmb3Jtcy5mb3JEZXNjZW5kYW50cywgR3JhcGhpY3NSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpKTsKIAogICAgIHBhaW50U2VsZihvcHRpb25zKTsKIApAQCAtNDU4
LDcgKzQ1OCw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVmbGVjdGlvbigKICAg
ICBjb25zdCBJbnRTaXplIHZpZXdwb3J0U2l6ZSA9IG9wdGlvbnMudGV4dHVyZU1hcHBlci0+dmll
d3BvcnRTaXplKCk7CiAgICAgY29uc3QgYm9vbCB1c2VJbnRlcm1lZGlhdGVCdWZmZXJGb3JSZXBs
aWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgb3B0aW9ucy5vcGFjaXR5IDwgMC45OTsKICAg
ICBjb25zdCBib29sIHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvck1hc2sgPSBtYXNrVGV4dHVyZSAm
JiByZXBsaWNhTWFza1RleHR1cmU7Ci0gICAgY29uc3QgRmxvYXRSZWN0IHZpZXdwb3J0UmVjdCgw
LCAwLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKTsKKyAgICBj
b25zdCBHcmFwaGljc1JlY3Qgdmlld3BvcnRSZWN0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgp
LCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOwogCiAgICAgLy8gVGhlIG1hc2sgaGFzIHRvIGJlIGFk
anVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KICAgICBpZiAobWFza1RleHR1cmUpIHsKQEAg
LTUzMCw3ICs1MzAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShU
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0KDAs
IDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworICAgIEdy
YXBoaWNzUmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSk7CiAKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1N1cmZh
Y2U7CiAKQEAgLTYwNSw5ICs2MDUsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29t
cG9zaXRpbmdTCiAgICAgfQogCiAgICAgaWYgKGNoYW5nZU1hc2sgJiAoU2l6ZUNoYW5nZSB8IENv
bnRlbnRzUmVjdENoYW5nZSkpIHsKLSAgICAgICAgRmxvYXRTaXplIHdhbnRlZFNpemUoZ3JhcGhp
Y3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7
CisgICAgICAgIEdyYXBoaWNzU2l6ZSB3YW50ZWRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKS53
aWR0aCgpLCBncmFwaGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAod2Fu
dGVkU2l6ZS5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENv
bnRlbnRUeXBlKQotICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEZsb2F0U2l6ZShncmFwaGljc0xh
eWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3Qo
KS5oZWlnaHQoKSk7CisgICAgICAgICAgICB3YW50ZWRTaXplID0gR3JhcGhpY3NTaXplKGdyYXBo
aWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRz
UmVjdCgpLmhlaWdodCgpKTsKIAogICAgICAgICBpZiAod2FudGVkU2l6ZSAhPSBtX3NpemUpCiAg
ICAgICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAog
I2lmbmRlZiBUZXh0dXJlTWFwcGVyTm9kZV9oCiAjZGVmaW5lIFRleHR1cmVNYXBwZXJOb2RlX2gK
IAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUg
Y29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2Ug
dHJ5IHRvIGRvIHNvLgogICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIERp
cmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGUs
IENhbnZhczNEQ29udGVudFR5cGV9OwogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgbmVlZHNE
aXNwbGF5UmVjdDsKICAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7CiAgICAgICAgIENvbG9yIGJh
Y2tncm91bmRDb2xvcjsKIApAQCAtMTU2LDggKzE1Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b21wdXRlQm91bmRpbmdSZWN0RnJvbVJvb3RJZk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZVRp
bGVzKCk7CiAgICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0OwotICAg
IEZsb2F0UmVjdCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0b3RhbFRh
cmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0OwotICAgIHZvaWQgaW52
YWxpZGF0ZVZpZXdwb3J0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCB0YXJn
ZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiB0b3RhbFRhcmdldFJlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0ZVZp
ZXdwb3J0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKENoYW5n
ZU1hc2spOwogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KTsKIApAQCAtMTg3LDMxICsxODcsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbG9jYWw7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2U7CiAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0aXZlOwotICAgICAgICBGbG9hdFJlY3Qg
dGFyZ2V0Qm91bmRpbmdSZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgdGFyZ2V0Qm91bmRpbmdS
ZWN0OwogICAgICAgICBmbG9hdCBjZW50ZXJaOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdS
ZWN0RnJvbVJvb3Q7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRl
c2NlbmRhbnRzOworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0RnJvbVJvb3Q7Cisg
ICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRhbnRzOwog
ICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgeyB9CiAgICAgfTsKIAogICAgIFRyYW5zZm9ybURhdGEg
bV90cmFuc2Zvcm1zOwogCi0gICAgaW5saW5lIEZsb2F0UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QK
KyAgICBpbmxpbmUgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3QoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBl
ID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7CiAgICAgfQogCi0gICAgaW5s
aW5lIEZsb2F0UmVjdCBlbnRpcmVSZWN0KCkgY29uc3QKKyAgICBpbmxpbmUgR3JhcGhpY3NSZWN0
IGVudGlyZVJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKICAgICB9CiAK
LSAgICBGbG9hdFNpemUgY29udGVudFNpemUoKSBjb25zdAorICAgIEdyYXBoaWNzU2l6ZSBjb250
ZW50U2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29udGVudC5j
b250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQu
aW1hZ2UgPyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7CiAgICAgfQog
ICAgIHN0cnVjdCBUaWxlIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgICAgIEdyYXBo
aWNzUmVjdCByZWN0OwogICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZTsKICAg
ICAgICAgYm9vbCBuZWVkc1Jlc2V0OwogICAgIH07CkBAIC0yMjMsMTggKzIyMywxOCBAQCBwcml2
YXRlOgogICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47CiAgICAgVGV4
dHVyZU1hcHBlck5vZGUqIG1fcGFyZW50OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX2VmZmVj
dFRhcmdldDsKLSAgICBGbG9hdFNpemUgbV9zaXplOworICAgIEdyYXBoaWNzU2l6ZSBtX3NpemU7
CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFN0cmluZyBtX25hbWU7CiAKICAgICBzdHJ1Y3Qg
U3RhdGUgewotICAgICAgICBGbG9hdFBvaW50IHBvczsKLSAgICAgICAgRmxvYXRQb2ludDNEIGFu
Y2hvclBvaW50OwotICAgICAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dCBwb3M7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICAgICAgR3Jh
cGhpY3NTaXplIHNpemU7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CiAgICAgICAg
IGZsb2F0IG9wYWNpdHk7Ci0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAg
IEdyYXBoaWNzUmVjdCBjb250ZW50c1JlY3Q7CiAgICAgICAgIGludCBkZXNjZW5kYW50c1dpdGhD
b250ZW50OwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOwogICAgICAgICBU
ZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYUxheWVyOwpAQCAtMjQ3LDggKzI0Nyw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGJvb2wgbmVlZHNSZXNldDogMTsKICAgICAgICAgYm9vbCBtaWdodEhhdmVP
dmVybGFwcyA6IDE7CiAgICAgICAgIGJvb2wgbmVlZHNSZXBhaW50OwotICAgICAgICBGbG9hdFJl
Y3QgdmlzaWJsZVJlY3Q7Ci0gICAgICAgIEZsb2F0UmVjdCByb290VmlzaWJsZVJlY3Q7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCB2aXNpYmxlUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHJvb3RW
aXNpYmxlUmVjdDsKICAgICAgICAgZmxvYXQgY29udGVudFNjYWxlOwogCiAgICAgICAgIFN0YXRl
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
CiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzAsNyArMzAsNyBAQCBjbGFzcyBCaXRtYXBUZXh0dXJlOwog
CiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVyZSogbWFz
ayA9IDApIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBv
cGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0gMCkgY29uc3QgPSAwOwogfTsKIAog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZm
aW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRl
ICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1F1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjcwLDcgKzI3MCw3IEBAIEFmZmlu
ZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3WSgKICAgICByZXR1cm4gc2hlYXIoMCwg
dGFuKGRlZzJyYWQoYW5nbGUpKSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2Vl
blJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QpCitB
ZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIHNv
dXJjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0KQogewogICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm07CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShkZXN0LngoKSAtIHNvdXJjZS54KCks
IGRlc3QueSgpIC0gc291cmNlLnkoKSk7CkBAIC0yOTMsNDQgKzI5Myw0NCBAQCBJbnRQb2ludCBB
ZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0CiAgICAgcmV0dXJuIEludFBvaW50KGxyb3Vu
ZCh4MiksIGxyb3VuZCh5MikpOwogfQogCi1GbG9hdFBvaW50IEFmZmluZVRyYW5zZm9ybTo6bWFw
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitHcmFwaGljc1BvaW50IEFmZmlu
ZVRyYW5zZm9ybTo6bWFwUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgZG91YmxlIHgyLCB5MjsKICAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksIHgyLCB5
Mik7CiAKLSAgICByZXR1cm4gRmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgyKSwg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCh5MikpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG5h
cnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHgyKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGlj
c1VuaXQoeTIpKTsKIH0KIAogSW50UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3QoY29uc3Qg
SW50UmVjdCAmcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtYXBS
ZWN0KEZsb2F0UmVjdChyZWN0KSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJl
Y3QoR3JhcGhpY3NSZWN0KHJlY3QpKSk7CiB9CiAKLUZsb2F0UmVjdCBBZmZpbmVUcmFuc2Zvcm06
Om1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAorR3JhcGhpY3NSZWN0IEFmZmlu
ZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIGNvbnN0CiB7CiAg
ICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IG1h
cHBlZFJlY3QocmVjdCk7Ci0gICAgICAgIG1hcHBlZFJlY3QubW92ZShuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KG1fdHJhbnNmb3JtWzRdKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3RyYW5zZm9y
bVs1XSkpOworICAgICAgICBHcmFwaGljc1JlY3QgbWFwcGVkUmVjdChyZWN0KTsKKyAgICAgICAg
bWFwcGVkUmVjdC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KG1fdHJhbnNmb3Jt
WzRdKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFuc2Zvcm1bNV0pKTsKICAg
ICAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgRmxvYXRRdWFkIHJlc3VsdDsK
KyAgICBHcmFwaGljc1F1YWQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMShtYXBQb2ludChyZWN0
LmxvY2F0aW9uKCkpKTsKLSAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0
Lm1heFgoKSwgcmVjdC55KCkpKSk7Ci0gICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KEZsb2F0UG9p
bnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKSkpOwotICAgIHJlc3VsdC5zZXRQNChtYXBQb2lu
dChGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSkpKTsKKyAgICByZXN1bHQuc2V0UDIo
bWFwUG9pbnQoR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7CisgICAgcmVz
dWx0LnNldFAzKG1hcFBvaW50KEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgp
KSkpOworICAgIHJlc3VsdC5zZXRQNChtYXBQb2ludChHcmFwaGljc1BvaW50KHJlY3QueCgpLCBy
ZWN0Lm1heFkoKSkpKTsKICAgICByZXR1cm4gcmVzdWx0LmJvdW5kaW5nQm94KCk7CiB9CiAKLUZs
b2F0UXVhZCBBZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25z
dAorR3JhcGhpY3NRdWFkIEFmZmluZVRyYW5zZm9ybTo6bWFwUXVhZChjb25zdCBHcmFwaGljc1F1
YWQmIHEpIGNvbnN0CiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKLSAg
ICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQocSk7Ci0gICAgICAgIG1hcHBlZFF1YWQubW92ZShu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzRdKSwgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChtX3RyYW5zZm9ybVs1XSkpOworICAgICAgICBHcmFwaGljc1F1YWQgbWFwcGVkUXVhZChx
KTsKKyAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0
KG1fdHJhbnNmb3JtWzRdKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFuc2Zv
cm1bNV0pKTsKICAgICAgICAgcmV0dXJuIG1hcHBlZFF1YWQ7CiAgICAgfQogCi0gICAgRmxvYXRR
dWFkIHJlc3VsdDsKKyAgICBHcmFwaGljc1F1YWQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMSht
YXBQb2ludChxLnAxKCkpKTsKICAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQocS5wMigpKSk7CiAg
ICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KHEucDMoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRy
YW5zZm9ybS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDkgKzQ4LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50Owot
Y2xhc3MgRmxvYXRRdWFkOwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NQb2ludDsK
K2NsYXNzIEdyYXBoaWNzUXVhZDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEludFBvaW50
OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwpAQCAtNzAsMTQg
KzcwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBSb3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0byB0aGUg
bmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgogICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQm
KSBjb25zdDsKIAogICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0YW5nbGUg
b3V0LiBUaGlzIGlzIGhlbHBmdWwgZm9yIGJvdW5kaW5nCiAgICAgLy8gYm94IGNvbXB1dGF0aW9u
cyBidXQgbWF5IG5vdCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4KICAgICBJ
bnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IG1h
cFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcFF1YWQoY29u
c3QgRmxvYXRRdWFkJikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IG1hcFJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JikgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcFF1YWQoY29uc3QgR3JhcGhp
Y3NRdWFkJikgY29uc3Q7CiAKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKIApAQCAtMTkx
LDcgKzE5MSw3IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAot
QWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCk7CitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdl
ZW5SZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIHNvdXJjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBk
ZXN0KTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OSArMjgsOSBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1F1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgpAQCAtNTI4LDcgKzUyOCw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFuc2Zvcm1h
dGlvbk1hdHIKICAgICByZXR1cm4gc2NhbGVOb25Vbmlmb3JtKDEuMGYsIC0xLjBmKTsKIH0KIAot
RmxvYXRQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFBvaW50KGNvbnN0IEZsb2F0
UG9pbnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9q
ZWN0UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGlz
IGJhc2ljYWxseSByYXl0cmFjaW5nLiBXZSBoYXZlIGEgcG9pbnQgaW4gdGhlIGRlc3RpbmF0aW9u
CiAgICAgLy8gcGxhbmUgd2l0aCB6PTAsIGFuZCB3ZSBjYXN0IGEgcmF5IHBhcmFsbGVsIHRvIHRo
ZSB6LWF4aXMgZnJvbSB0aGF0CkBAIC01NTYsMTIgKzU1NiwxMiBAQCBGbG9hdFBvaW50IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0CiAgICAgICAgIG91dFkgLz0gdzsKICAgICB9CiAKLSAg
ICByZXR1cm4gRmxvYXRQb2ludChzdGF0aWNfY2FzdDxmbG9hdD4ob3V0WCksIHN0YXRpY19jYXN0
PGZsb2F0PihvdXRZKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoc3RhdGljX2Nhc3Q8R3Jh
cGhpY3NVbml0PihvdXRYKSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihvdXRZKSk7CiB9CiAK
LUZsb2F0UXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFF1YWQoY29uc3QgRmxvYXRR
dWFkJiBxKSBjb25zdAorR3JhcGhpY3NRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0
UXVhZChjb25zdCBHcmFwaGljc1F1YWQmIHEpIGNvbnN0CiB7Ci0gICAgRmxvYXRRdWFkIHByb2pl
Y3RlZFF1YWQ7CisgICAgR3JhcGhpY3NRdWFkIHByb2plY3RlZFF1YWQ7CiAgICAgcHJvamVjdGVk
UXVhZC5zZXRQMShwcm9qZWN0UG9pbnQocS5wMSgpKSk7CiAgICAgcHJvamVjdGVkUXVhZC5zZXRQ
Mihwcm9qZWN0UG9pbnQocS5wMigpKSk7CiAgICAgcHJvamVjdGVkUXVhZC5zZXRQMyhwcm9qZWN0
UG9pbnQocS5wMygpKSk7CkBAIC01NjksNTQgKzU2OSw1NCBAQCBGbG9hdFF1YWQgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnByb2plY3RRCiAgICAgcmV0dXJuIHByb2plY3RlZFF1YWQ7CiB9CiAKLUZs
b2F0UG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHApIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChj
b25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIGlmIChpc0lkZW50aXR5T3JUcmFu
c2xhdGlvbigpKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChwLngoKSArIHN0YXRpY19jYXN0
PGZsb2F0PihtX21hdHJpeFszXVswXSksIHAueSgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0
cml4WzNdWzFdKSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KHAueCgpICsgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVswXSksIHAueSgpICsgc3RhdGljX2Nhc3Q8
R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsxXSkpOwogCiAgICAgZG91YmxlIHgsIHk7CiAgICAg
bXVsdFZlY01hdHJpeChwLngoKSwgcC55KCksIHgsIHkpOwotICAgIHJldHVybiBGbG9hdFBvaW50
KHN0YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NQb2ludChzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHgpLCBzdGF0aWNfY2Fz
dDxHcmFwaGljc1VuaXQ+KHkpKTsKIH0KIAotRmxvYXRQb2ludDNEIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApIGNvbnN0CitHcmFwaGljc1BvaW50
M0QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYg
cCkgY29uc3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UG9pbnQzRChwLngoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFsz
XVswXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC55KCkgKyBzdGF0aWNfY2FzdDxm
bG9hdD4obV9tYXRyaXhbM11bMV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueigp
ICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzJdKSk7CisgICAgICAgIHJldHVybiBH
cmFwaGljc1BvaW50M0QocC54KCkgKyBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4
WzNdWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkoKSArIHN0YXRpY19jYXN0
PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHAueigpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsyXSkpOwog
CiAgICAgZG91YmxlIHgsIHksIHo7CiAgICAgbXVsdFZlY01hdHJpeChwLngoKSwgcC55KCksIHAu
eigpLCB4LCB5LCB6KTsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKHN0YXRpY19jYXN0PGZsb2F0
Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeikpOworICAg
IHJldHVybiBHcmFwaGljc1BvaW50M0Qoc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih4KSwgc3Rh
dGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih5KSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih6KSk7
CiB9CiAKIEludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVj
dCAmcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtYXBSZWN0KEZs
b2F0UmVjdChyZWN0KSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoR3Jh
cGhpY3NSZWN0KHJlY3QpKSk7CiB9CiAKLUZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpIGNvbnN0CitHcmFwaGljc1JlY3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKSBjb25zdAogewogICAg
IGlmIChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBtYXBw
ZWRSZWN0KHIpOwotICAgICAgICBtYXBwZWRSZWN0Lm1vdmUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1f
bWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSk7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0KHIpOworICAgICAgICBtYXBwZWRSZWN0Lm1vdmUo
c3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVswXSksIHN0YXRpY19jYXN0PEdy
YXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMV0pKTsKICAgICAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7
CiAgICAgfQogCi0gICAgRmxvYXRRdWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEZsb2F0UXVhZChy
KSk7CisgICAgR3JhcGhpY3NRdWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEdyYXBoaWNzUXVhZChy
KSk7CiAgICAgcmV0dXJuIHJlc3VsdFF1YWQuYm91bmRpbmdCb3goKTsKIH0KIAotRmxvYXRRdWFk
IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkgY29uc3QK
K0dyYXBoaWNzUXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVhZChjb25zdCBHcmFwaGlj
c1F1YWQmIHEpIGNvbnN0CiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsK
LSAgICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQocSk7Ci0gICAgICAgIG1hcHBlZFF1YWQubW92
ZShzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9tYXRyaXhbM11bMV0pKTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIG1hcHBlZFF1YWQocSk7Cisg
ICAgICAgIG1hcHBlZFF1YWQubW92ZShzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4
WzNdWzBdKSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsxXSkpOwogICAg
ICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVzdWx0Owor
ICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHEucDEo
KSkpOwogICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKICAgICByZXN1bHQuc2V0
UDMobWFwUG9pbnQocS5wMygpKSk7CkBAIC04NzksNyArODc5LDcgQEAgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cgogICAgIHJldHVybiAqdGhpczsKIH0KIAotVHJhbnNm
b3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3QgRmxv
YXRSZWN0JiBmcm9tLCBjb25zdCBGbG9hdFJlY3QmIHRvKQorVHJhbnNmb3JtYXRpb25NYXRyaXgg
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBmcm9t
LCBjb25zdCBHcmFwaGljc1JlY3QmIHRvKQogewogICAgIEFTU0VSVCghZnJvbS5pc0VtcHR5KCkp
OwogICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0by53aWR0aCgpIC8gZnJvbS53aWR0
aCgpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNp
Zm5kZWYgVHJhbnNmb3JtYXRpb25NYXRyaXhfaAogI2RlZmluZSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eF9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+IC8vZm9yIG1lbWNw
eQogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CkBAIC02MCw5ICs2MCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgSW50UmVjdDsK
LWNsYXNzIEZsb2F0UG9pbnQzRDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0UXVhZDsK
K2NsYXNzIEdyYXBoaWNzUG9pbnQzRDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBo
aWNzUXVhZDsKIAogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXggewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwpAQCAtMTIzLDIxICsxMjMsMjEgQEAgcHVibGljOgogICAgIHZvaWQgbWFw
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4MiwgZG91YmxlJiB5MikgY29uc3QgeyBtdWx0
VmVjTWF0cml4KHgsIHksIHgyLCB5Mik7IH0KIAogICAgIC8vIE1hcCBhIDNEIHBvaW50IHRocm91
Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgM0QgcG9pbnQuCi0gICAgRmxvYXRQb2ludDNE
IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQz
RCBtYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmKSBjb25zdDsKIAogICAgIC8vIE1hcCBh
IDJEIHBvaW50IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgMkQgcG9pbnQuCiAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgaWdub3JlcyB0aGUgeiBjb21wb25lbnQsIGVmZmVjdGl2ZWx5
IHByb2plY3RpbmcgdGhlIHBvaW50IGludG8gdGhlIHo9MCBwbGFuZS4KLSAgICBGbG9hdFBvaW50
IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1h
cFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAgIC8vIExpa2UgdGhlIHZl
cnNpb24gYWJvdmUsIGV4Y2VwdCB0aGF0IGl0IHJvdW5kcyB0aGUgbWFwcGVkIHBvaW50IHRvIHRo
ZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCiAgICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50
UG9pbnQmIHApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KG1h
cFBvaW50KEZsb2F0UG9pbnQocCkpKTsKKyAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludCht
YXBQb2ludChHcmFwaGljc1BvaW50KHApKSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIG1hdHJp
eCBoYXMgM0QgY29tcG9uZW50cywgdGhlIHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQgaXMKICAg
ICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVseSBwcm9qZWN0aW5nIHRoZSByZWN0IGludG8gdGhlIHo9
MCBwbGFuZQotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Owor
ICAgIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiAg
ICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRoaXMgaXMg
aGVscGZ1bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBtYXkgbm90
IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgpAQCAtMTQ1LDE2ICsxNDUsMTYg
QEAgcHVibGljOgogCiAgICAgLy8gSWYgdGhlIG1hdHJpeCBoYXMgM0QgY29tcG9uZW50cywgdGhl
IHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQgaXMKICAgICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVs
eSBwcm9qZWN0aW5nIHRoZSBxdWFkIGludG8gdGhlIHo9MCBwbGFuZQotICAgIEZsb2F0UXVhZCBt
YXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYpIGNvbnN0OworICAgIEdyYXBoaWNzUXVhZCBtYXBRdWFk
KGNvbnN0IEdyYXBoaWNzUXVhZCYpIGNvbnN0OwogCiAgICAgLy8gTWFwIGEgcG9pbnQgb24gdGhl
IHo9MCBwbGFuZSBpbnRvIGEgcG9pbnQgb24KICAgICAvLyB0aGUgcGxhbmUgd2l0aCB3aXRoIHRo
ZSB0cmFuc2Zvcm0gYXBwbGllZCwgYnkgZXh0ZW5kaW5nCiAgICAgLy8gYSByYXkgcGVycGVuZGlj
dWxhciB0byB0aGUgc291cmNlIHBsYW5lIGFuZCBjb21wdXRpbmcKICAgICAvLyB0aGUgbG9jYWwg
eCx5IHBvc2l0aW9uIG9mIHRoZSBwb2ludCB3aGVyZSB0aGF0IHJheSBpbnRlcnNlY3RzCiAgICAg
Ly8gd2l0aCB0aGUgZGVzdGluYXRpb24gcGxhbmUuCi0gICAgRmxvYXRQb2ludCBwcm9qZWN0UG9p
bnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcHJvamVjdFBv
aW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICAvLyBQcm9qZWN0cyB0aGUgZm91
ciBjb3JuZXJzIG9mIHRoZSBxdWFkCi0gICAgRmxvYXRRdWFkIHByb2plY3RRdWFkKGNvbnN0IEZs
b2F0UXVhZCYpIGNvbnN0OworICAgIEdyYXBoaWNzUXVhZCBwcm9qZWN0UXVhZChjb25zdCBHcmFw
aGljc1F1YWQmKSBjb25zdDsKIAogICAgIGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeFswXVswXTsgfQogICAgIHZvaWQgc2V0TTExKGRvdWJsZSBmKSB7IG1fbWF0cml4WzBdWzBd
ID0gZjsgfQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BlcnNwZWN0
aXZlKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bM10gIT0gMC4wZjsgfQogCiAgICAgLy8g
cmV0dXJucyBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBhIHJlY3QgdG8gYSByZWN0Ci0gICAg
c3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlY3RUb1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlY3RU
b1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAgICBi
b29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyBDR1BhdGhSZWYgY3JlYXRlUGF0
aEZvckdseXBoKEhEQyAKIH0KIAogc3RhdGljIHZvaWQgZHJhd0dESUdseXBocyhHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCkKIHsKICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQtPmZpbGxDb2xv
cigpOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0dESUdseXBocyhHcmFw
aGljc0NvbnRleAogCiAgICAgICAgIGRyYXdJbnRvQml0bWFwID0gZmlsbENvbG9yLmFscGhhKCkg
IT0gMjU1IHx8IGdyYXBoaWNzQ29udGV4dC0+aW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgICAg
ICBpZiAoIWRyYXdJbnRvQml0bWFwKSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0Owor
ICAgICAgICAgICAgR3JhcGhpY3NTaXplIG9mZnNldDsKICAgICAgICAgICAgIGZsb2F0IGJsdXI7
CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIENvbG9yU3BhY2Ugc2hhZG93
Q29sb3JTcGFjZTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgdm9pZCBkcmF3R0RJR2x5cGhz
KEdyYXBoaWNzQ29udGV4CiAgICAgU2V0VGV4dEFsaWduKGhkYywgVEFfTEVGVCB8IFRBX0JBU0VM
SU5FKTsKIAogICAgIC8vIFVuaXNjcmliZSBnaXZlcyB1cyBvZmZzZXRzIHRvIGhlbHAgcmVmaW5l
IHRoZSBwb3NpdGlvbmluZyBvZiBjb21iaW5pbmcgZ2x5cGhzLgotICAgIEZsb2F0U2l6ZSB0cmFu
c2xhdGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOworICAgIEdyYXBoaWNzU2l6ZSB0
cmFuc2xhdGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOwogICAgIGlmICh0cmFuc2xh
dGlvbi53aWR0aCgpIHx8IHRyYW5zbGF0aW9uLmhlaWdodCgpKSB7CiAgICAgICAgIFhGT1JNIHhm
b3JtOwogICAgICAgICB4Zm9ybS5lTTExID0gMS4wOwpAQCAtMjk4LDcgKzI5OCw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdHRElHbHlwaHMoR3JhcGhpY3NDb250ZXgKIH0KIAogdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGJvb2wg
c2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCk7
CkBAIC0zNTAsMTIgKzM1MCwxMiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBnCiAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIG1hdHJpeCk7CiAK
ICAgICAvLyBVbmlzY3JpYmUgZ2l2ZXMgdXMgb2Zmc2V0cyB0byBoZWxwIHJlZmluZSB0aGUgcG9z
aXRpb25pbmcgb2YgY29tYmluaW5nIGdseXBocy4KLSAgICBGbG9hdFNpemUgdHJhbnNsYXRpb24g
PSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChmcm9tKTsKKyAgICBHcmFwaGljc1NpemUgdHJhbnNsYXRp
b24gPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChmcm9tKTsKIAogICAgIENHQ29udGV4dFNldEZvbnRT
aXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAgICAgd2tTZXRDR0NvbnRleHRG
b250UmVuZGVyaW5nU3R5bGUoY2dDb250ZXh0LCBmb250LT5pc1N5c3RlbUZvbnQoKSwgZmFsc2Us
IGZvbnQtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dC
bHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JT
cGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFdpbi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ28KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsCitHcmFwaGlj
c1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAg
IFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKQEAgLTYzLDEwICs2MywxMCBAQCBG
bG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAgICAgaWYgKHJ1bi5ydGwo
KSkgewogICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CiAgICAgICAgIGZsb2F0IHRv
dGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
cG9pbnQueCgpICsgZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCBy
b3VuZGYodG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0
ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHBvaW50LngoKSArIGZs
b29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHRvdGFsV2lk
dGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsK
ICAgICB9IAogICAgIAotICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxvb3JmKGJl
Zm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYoYWZ0ZXJXaWR0aCkgLSBmbG9vcmYoYmVmb3Jl
V2lkdGgpLCBoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHBvaW50LngoKSArIGZsb29yZihi
ZWZvcmVXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKGFmdGVyV2lkdGgpIC0gZmxvb3JmKGJlZm9y
ZVdpZHRoKSwgaCk7CiB9CiAKIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29u
c3QKQEAgLTk0LDcgKzk0LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbAogICAgIHJldHVybiBiZWZvcmVXaWR0aDsKIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bykgY29u
c3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5j
ZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCkBAIC0xMDcsMTEgKzEwNywxMSBAQCB2b2lk
IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJl
dHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2lu
dC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7
CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9p
bnQpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFu
Y2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGds
eXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgRm9u
dDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4s
IGdseXBoQnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZh
bmNlLCBwb2ludC55KCkpKTsKIH0KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgY29uc3QgQ29sb3ImIGdyYW1tYXJQ
YXR0ZXJuQ29sb3IoCiAgICAgcmV0dXJuIGdyYW1tYXJDb2xvcjsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDks
NyArMTQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJlcwogICAg
IFJlc3RvcmVEQyhtX2hkYywgLTEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoY29uc3QgR3JhcGhpY3NSZWN0JiBjbGlwUmVjdCkK
IHsKICAgICBpZiAoIW1faGRjKQogICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaQogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIGlmICghbV9oZGMpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0xheWVyQ0FDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNB
Q0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNBQ0YuaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQu
aCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgpAQCAtMjAz
LDEzICsyMDMsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6cmVtb3ZlRnJvbVBhcmVudAog
ICAgIGxheWVyRm9yU3VwZXJsYXllcigpLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOyAgICAgICAg
ICAgIAogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpzZXRQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNldFBvc2l0aW9uKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9u
KHBvaW50KTsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllckNBQ0Y6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpCit2b2lk
IEdyYXBoaWNzTGF5ZXJDQUNGOjpzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0Qm
IHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAgICByZXR1
cm47CkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0QW5jaG9y
UG9pbnQoYwogICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXll
ckNBQ0Y6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0xheWVy
Q0FDRjo6c2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUg
PT0gbV9zaXplKQogICAgICAgICByZXR1cm47CkBAIC0zMjcsNyArMzI3LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ0FDRjo6c2V0TmVlZHNEaXNwbGF5KAogICAgICAgICBtX2xheWVyLT5zZXROZWVk
c0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KGRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSByZWN0OwpAQCAtNDE1
LDcgKzQxNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNldERlYnVnQm9yZGVyKGMKICAg
ICB9CiB9CiAKLWJvb2wgR3JhcGhpY3NMYXllckNBQ0Y6OnJlcXVpcmVzVGlsZWRMYXllcihjb25z
dCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Citib29sIEdyYXBoaWNzTGF5ZXJDQUNGOjpyZXF1aXJl
c1RpbGVkTGF5ZXIoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSBjb25zdAogewogICAgIGlmICgh
bV9kcmF3c0NvbnRlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU0NCw3ICs1NDQsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjp1cGRhdGVMYXllclNpemUoCiAKIHZvaWQgR3JhcGhp
Y3NMYXllckNBQ0Y6OnVwZGF0ZUFuY2hvclBvaW50KCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIoKS0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2lu
dC55KCkpKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2lu
dChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsKICAgICBwcmltYXJ5TGF5
ZXIoKS0+c2V0QW5jaG9yUG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKICAgICB1cGRhdGVMYXll
clBvc2l0aW9uKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NMYXllckNBQ0YuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0Yu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIGluUG9pbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmIGluUG9pbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgaW5TaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRp
b24oY29uc3QgR3JhcGhpY3NQb2ludCYgaW5Qb2ludCk7CisgICAgdmlydHVhbCB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgaW5Qb2ludCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBpblNpemUpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCkBAIC03NCw3
ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFj
aXR5KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKIApAQCAtOTMs
NyArOTMsNyBAQCBwcml2YXRlOgogICAgIFdLQ0FDRkxheWVyKiBob3N0TGF5ZXJGb3JTdWJsYXll
cnMoKSBjb25zdDsKICAgICBXS0NBQ0ZMYXllciogbGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3Q7
CiAKLSAgICBib29sIHJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBGbG9hdFNpemUmKSBjb25zdDsK
KyAgICBib29sIHJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBHcmFwaGljc1NpemUmKSBjb25zdDsK
ICAgICB2b2lkIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKTsKIAog
ICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBkZWZhdWx0Q29udGVudHNPcmll
bnRhdGlvbigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDkgKzc2LDkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShI
QklUTQogCiAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAg
IGlmIChzaXplKQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9h
dFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50
U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAg
ICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBHcmFwaGljc1JlY3QoMC4wZiwgMC4w
ZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAgICAgZHJh
dygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1I
ZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6
ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAg
ICBkcmF3KCZnYywgR3JhcGhpY3NSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1w
SW5mby5ibUhlaWdodCksIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgo
KSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29w
eSk7CiAKICAgICAvLyBEbyBjbGVhbnVwCiAgICAgQ0dDb250ZXh0UmVsZWFzZShjZ0NvbnRleHQp
OwpAQCAtODYsNyArODYsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhC
SVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1h
dGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgc2l6
ZV90IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZy
YW1lczsgKytpKSB7CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFt
ZU1hdGNoaW5nU291cmMKICAgICAgICAgaWYgKENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IHN0
YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS5oZWlnaHQoKSkgJiYgQ0dJbWFnZUdldFdpZHRoKGlt
YWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUud2lkdGgoKSkpIHsKICAgICAgICAg
ICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIG1f
Y3VycmVudEZyYW1lID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxl
Q29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgICAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0
LCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdo
dCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiAgICAgICAgICAgICBtX2N1cnJl
bnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291
cmMKIAogICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5kLCBmYWxs
YmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCiAgICAgSW50U2l6ZSBpbWFnZVNpemUg
PSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0
KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHls
ZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEdyYXBo
aWNzUmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgp
KSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNh
aXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Miw5ICs4Miw5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJ
VE0KIAogICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBp
ZiAoc2l6ZSkKLSAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZnYywgRmxvYXRS
ZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEludFNp
emUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAg
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZnYywgR3JhcGhpY3NSZWN0KDAuMGYsIDAuMGYs
IGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEludFNpemUoKnNpemUpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKICAgICBlbHNlCi0gICAgICAgIGRyYXco
JmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVp
Z2h0KSwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUu
aGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKKyAgICAgICAg
ZHJhdygmZ2MsIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcElu
Zm8uYm1IZWlnaHQpLCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCks
IGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkp
OwogCiAgICAgLy8gRG8gY2xlYW51cAogICAgIGNhaXJvX2Rlc3Ryb3kodGFyZ2V0UmVmKTsKQEAg
LTkyLDcgKzkyLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGlu
Z1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFt
ZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHNpemVfdCBm
cmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXM7
ICsraSkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1h
dGNoaW5nU291cmMKICAgICAgICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChp
bWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNT
aXplLndpZHRoKCkpKSB7CiAgICAgICAgICAgICBzaXplX3QgY3VycmVudEZyYW1lID0gbV9jdXJy
ZW50RnJhbWU7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgICAgICBk
cmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCks
IHNyY1NpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3NpdGVPcCk7Cisg
ICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBz
cmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBj
b21wb3NpdGVPcCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKIAogICAgIC8vIE5vIGltYWdlIG9m
IHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJy
ZW50IGZyYW1lCiAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwot
ICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53
aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3Np
dGVPcCk7CisgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwg
aW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGNvbXBvc2l0ZU9wKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiwyMCArMTE2LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ28KICAgICBBU1NFUlQobV9wYXJlbnQpOwogICAgIEFTU0VSVChtX3BhcmVu
dC0+bV90cmFuc2Zvcm1MYXllciA9PSBsYXllcik7CiAKLSAgICBGbG9hdFNpemUgcGFyZW50U2l6
ZSA9IGxheWVyLT5ib3VuZHMoKS5zaXplKCk7Ci0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXplID0g
bV9wYXJlbnQtPm5hdHVyYWxTaXplKCk7CisgICAgR3JhcGhpY3NTaXplIHBhcmVudFNpemUgPSBs
YXllci0+Ym91bmRzKCkuc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBuYXR1cmFsU2l6ZSA9IG1f
cGFyZW50LT5uYXR1cmFsU2l6ZSgpOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSByYXRpbyBvZiB0
aGVzZSB0d28gc2l6ZXMgYW5kIHVzZSB0aGF0IHJhdGlvIHRvIHNjYWxlIHRoZSBxdFZpZGVvTGF5
ZXI6Ci0gICAgRmxvYXRTaXplIHJhdGlvKHBhcmVudFNpemUud2lkdGgoKSAvIG5hdHVyYWxTaXpl
LndpZHRoKCksIHBhcmVudFNpemUuaGVpZ2h0KCkgLyBuYXR1cmFsU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgR3JhcGhpY3NTaXplIHJhdGlvKHBhcmVudFNpemUud2lkdGgoKSAvIG5hdHVyYWxTaXplLndp
ZHRoKCksIHBhcmVudFNpemUuaGVpZ2h0KCkgLyBuYXR1cmFsU2l6ZS5oZWlnaHQoKSk7CiAKICAg
ICBpbnQgdmlkZW9XaWR0aCA9IDA7CiAgICAgaW50IHZpZGVvSGVpZ2h0ID0gMDsKICAgICBtX3Bh
cmVudC0+bV9tb3ZpZS0+Z2V0TmF0dXJhbFNpemUodmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQpOwot
ICAgIEZsb2F0UmVjdCB2aWRlb0JvdW5kcygwLCAwLCB2aWRlb1dpZHRoICogcmF0aW8ud2lkdGgo
KSwgdmlkZW9IZWlnaHQgKiByYXRpby5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludDNEIHZpZGVv
QW5jaG9yID0gbV9wYXJlbnQtPm1fcXRWaWRlb0xheWVyLT5hbmNob3JQb2ludCgpOworICAgIEdy
YXBoaWNzUmVjdCB2aWRlb0JvdW5kcygwLCAwLCB2aWRlb1dpZHRoICogcmF0aW8ud2lkdGgoKSwg
dmlkZW9IZWlnaHQgKiByYXRpby5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NQb2ludDNEIHZpZGVv
QW5jaG9yID0gbV9wYXJlbnQtPm1fcXRWaWRlb0xheWVyLT5hbmNob3JQb2ludCgpOwogCiAgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBuZXcgcG9zaXRpb24gYmFzZWQgb24gdGhlIHBhcmVudCdzIHNpemU6
Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbihwYXJlbnRTaXplLndpZHRoKCkgKiAwLjUgLSB2aWRl
b0JvdW5kcy53aWR0aCgpICogKDAuNSAtIHZpZGVvQW5jaG9yLngoKSksCisgICAgR3JhcGhpY3NQ
b2ludCBwb3NpdGlvbihwYXJlbnRTaXplLndpZHRoKCkgKiAwLjUgLSB2aWRlb0JvdW5kcy53aWR0
aCgpICogKDAuNSAtIHZpZGVvQW5jaG9yLngoKSksCiAgICAgICAgIHBhcmVudFNpemUuaGVpZ2h0
KCkgKiAwLjUgLSB2aWRlb0JvdW5kcy5oZWlnaHQoKSAqICgwLjUgLSB2aWRlb0FuY2hvci55KCkp
KTsgCiAKICAgICBtX3BhcmVudC0+bV9xdFZpZGVvTGF5ZXItPnNldEJvdW5kcyh2aWRlb0JvdW5k
cyk7CkBAIC0xMTkxLDcgKzExOTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hcmsgdGhlIGxheWVyIGFzIGFu
Y2hvcmVkIGluIHRoZSB0b3AgbGVmdC4KLSAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0QW5jaG9yUG9p
bnQoR3JhcGhpY3NQb2ludDNEKCkpOwogCiAgICAgbV9xdFZpZGVvTGF5ZXIgPSBQbGF0Zm9ybUNB
TGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsKICAgICBp
ZiAoIW1fcXRWaWRlb0xheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5OSw3ICs4OTksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6Y3Jl
YXRlTGF5ZXJGb3JNCiAKICAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBkcmF3aW5nIGl0c2VsZiwg
YW5jaG9yZWQgaW4gdGhlIHRvcCBsZWZ0LCBhbmQgYm90dG9tLXVwLgogICAgIG1fcXRWaWRlb0xh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9xdFZpZGVvTGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBtX3F0VmlkZW9MYXllci0+c2V0QW5jaG9yUG9p
bnQoR3JhcGhpY3NQb2ludDNEKCkpOwogICAgIG1fcXRWaWRlb0xheWVyLT5zZXRDb250ZW50c09y
aWVudGF0aW9uKEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcCk7
CiAjaWZuZGVmIE5ERUJVRwogICAgIG1fcXRWaWRlb0xheWVyLT5zZXROYW1lKCJWaWRlbyBsYXll
ciIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGlj
YXRpb25TZXJ2aWNlcy5oPgpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtQ2hhcldpZHRoSW4KICAgICAgICAgaW5pdENoYXJXaWR0aHMoKTsKICAgICB9CiB9
Ci1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0CitHcmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVz
ZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOwpAQCAtMTI5
LDcgKzEyOSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHMKICAg
ICBDR0ZvbnRHZXRHbHlwaEJCb3hlcyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgJmdseXBoLCAx
LCAmYm94KTsKICAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CiAg
ICAgQ0dGbG9hdCBzY2FsZSA9IHBvaW50U2l6ZSAvIGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgp
OwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KGJveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOworICAgIEdy
YXBoaWNzUmVjdCBib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGJveCwg
Q0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOwogICAgIGlmIChtX3N5
bnRoZXRpY0JvbGRPZmZzZXQpCiAgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5n
Qm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTksMTIgKzk5LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQ2hh
cldpZHRoSW4KICAgICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1Jbml0LgogfQog
Ci1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgg
Z2x5cGgpIGNvbnN0CitHcmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVz
ZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOwogICAgIC8v
RklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVy
biBHcmFwaGljc1JlY3QoKTsKIH0KICAgICAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5j
cHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPG1sYW5nLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y2hh
ci5oPgpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKICAgICBSZWxlYXNlREMoMCwgZGMpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERh
dGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAorR3JhcGhpY3NSZWN0IFNp
bXBsZUZvbnREYXRhOjpib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAg
ICBIREMgaGRjID0gR2V0REMoMCk7CiAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYywgR01fQURWQU5D
RUQpOwpAQCAtMjE1LDcgKzIxNSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91bmRz
Rm9yR0RJR2wKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKICAgICBSZWxlYXNlREMo
MCwgaGRjKTsKICAgICAKLSAgICByZXR1cm4gRmxvYXRSZWN0KGdkaU1ldHJpY3MuZ21wdEdseXBo
T3JpZ2luLngsIC1nZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi55LAorICAgIHJldHVybiBHcmFw
aGljc1JlY3QoZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmlnaW4ueCwgLWdkaU1ldHJpY3MuZ21wdEds
eXBoT3JpZ2luLnksCiAgICAgICAgIGdkaU1ldHJpY3MuZ21CbGFja0JveFggKyBtX3N5bnRoZXRp
Y0JvbGRPZmZzZXQsIGdkaU1ldHJpY3MuZ21CbGFja0JveFkpOyAKIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5p
c2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzksMTEgKzMzOSwxMSBAQCBib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBl
QW5kUGxhY2VJCiAgICAgICAgIC8vIGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGltZSBjb21l
cyB0byBkcmF3IHRob3NlIGdseXBocywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0ZQogICAg
ICAgICAvLyB0cmFuc2xhdGlvbi4KICAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7Ci0gICAgICAg
ICAgICBGbG9hdFNpemUgc2l6ZShvZmZzZXRYLCAtb2Zmc2V0WSk7CisgICAgICAgICAgICBHcmFw
aGljc1NpemUgc2l6ZShvZmZzZXRYLCAtb2Zmc2V0WSk7CiAgICAgICAgICAgICBnbHlwaEJ1ZmZl
ci0+YWRkKGdseXBoLCBmb250RGF0YSwgYWR2YW5jZSwgJnNpemUpOwogICAgICAgICB9CiAKLSAg
ICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5k
c0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShtX2dseXBoT3JpZ2lu
LngoKSwgbV9nbHlwaE9yaWdpbi55KCkpOwogICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hY
ID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7CiAgICAgICAg
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5
cGhCb3VuZHMubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6ICAgIAog
ICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKICAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKLSAgICBGbG9h
dFBvaW50IG1fZ2x5cGhPcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBtX2dseXBoT3JpZ2luOwog
ICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFg7CiAgICAgZmxvYXQgbV9tYXhHbHlwaEJv
dW5kaW5nQm94WDsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0Uu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0ZvbnRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNp
bmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250
Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xp
c3QuaCIKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogU2NyZWVuRGNSZWxlYXNlciByZWxlYXNl
U2NyZWVuRGM7CiAKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorICAgICAgICAgICAgICAg
ICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCkgY29uc3QKIHsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUZXh0KGZvbnREYXRhLCBnbHlw
aEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CiB9CkBAIC0yMDUsNyArMjA1LDcgQEAg
c3RhdGljIGludCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1bkNvbQogICAgIHJldHVybiBvZmZz
ZXQ7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKK3ZvaWQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKHRvIDwgMCkKQEAg
LTIyMiw3ICsyMjIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
CiAgICAgICAgIGludCBsZW4gPSBjb21wLnRleHRMZW5ndGgoKTsKICAgICAgICAgaW50IGN1ckVu
ZCA9IGN1clBvcyArIGxlbjsKICAgICAgICAgaWYgKGN1clBvcyA8IHRvICYmIGZyb20gPCBjdXJF
bmQgJiYgIWNvbXAuaXNTcGFjZSgpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHB0ID0gcG9p
bnQ7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHB0ID0gcG9pbnQ7CiAgICAgICAgICAgICBp
ZiAocnVuLnJ0bCgpKQogICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsgdyAtIGNv
bXAubV9vZmZzZXQgLSBjb21wLm1fd2lkdGgpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjM1LDcg
KzIzNSw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICB9
CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3Qg
QXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywg
aW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNv
bnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBj
b25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0
byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMzE3LDIxICszMTcs
MjEgQEAgc3RhdGljIGZsb2F0IGN1cnNvclRvWChjb25zdCBGb250KiBmb250LAogICAgIHJldHVy
biB3aWR0aDsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LAorR3JhcGhpY3NSZWN0
IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIFRleHRSdW5Db21wb25l
bnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVu
dHMsICp0aGlzLCBydW4pOwogCiAgICAgaWYgKCFmcm9tICYmIHRvID09IHJ1bi5sZW5ndGgoKSkK
LSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCksIHB0LnkoKSwgdywgaCk7CisgICAgICAg
IHJldHVybiBHcmFwaGljc1JlY3QocHQueCgpLCBwdC55KCksIHcsIGgpOwogCiAgICAgZmxvYXQg
eDEgPSBjdXJzb3JUb1godGhpcywgY29tcG9uZW50cywgdywgcnVuLnJ0bCgpLCBmcm9tKTsKICAg
ICBmbG9hdCB4MiA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25lbnRzLCB3LCBydW4ucnRsKCksIHRv
KTsKICAgICBpZiAoeDIgPCB4MSkKICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CiAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOworICAgIHJl
dHVybiBHcmFwaGljc1JlY3QocHQueCgpICsgeDEsIHB0LnkoKSwgeDIgLSB4MSwgaCk7CiB9CiAK
IGJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dy
YWRpZW50V2luQ0UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wLCAyPiYgR3IKICAg
ICByZXR1cm4gbV9zdG9wczsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRl
eHQqIGMsIGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3ND
b250ZXh0KiBjLCBjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgYy0+ZmlsbFJlY3Qociwg
dGhpcyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9H
cmFwaGljc0NvbnRleHRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMg
aW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKIH0KIAogLy8gVW5saWtlIGVuY2xvc2lu
Z0ludFJlY3QoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIHN0cmljdCByb3VuZGluZy4KLXN0YXRpYyBp
bmxpbmUgSW50UmVjdCByb3VuZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorc3RhdGljIGlubGlu
ZSBJbnRSZWN0IHJvdW5kUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgcmV0dXJu
IEludFJlY3Qoc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLnkoKSksIHN0YWJsZVJv
dW5kKHIubWF4WCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci5tYXhZKCkp
IC0gc3RhYmxlUm91bmQoci55KCkpKTsKIH0KQEAgLTExNywxMSArMTE3LDExIEBAIHRlbXBsYXRl
PGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgSW50UG9pbnQKICAgICByZXR1cm4gSW50UG9pbnQoeCwg
eSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBtYXBQ
b2ludChjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBUJiB0KQordGVtcGxhdGU8Y2xhc3MgVD4g
c3RhdGljIGlubGluZSBHcmFwaGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAsIGNvbnN0IFQmIHQpCiB7CiAgICAgZG91YmxlIHgsIHk7CiAgICAgdC5tYXAocC54KCksIHAu
eSgpLCAmeCwgJnkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChzdGF0
aWNfY2FzdDxmbG9hdD4oeCksIHN0YXRpY19jYXN0PGZsb2F0Pih5KSk7CiB9CiAKIHRlbXBsYXRl
PGNsYXNzIFRyYW5zZm9ybSwgY2xhc3MgUmVjdCwgY2xhc3MgVmFsdWU+IHN0YXRpYyBpbmxpbmUg
UmVjdCBtYXBSZWN0KGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQpAQCAtMTU2LDkgKzE1Niw5IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgSW50
UmVjdCAKICAgICByZXR1cm4gbWFwUmVjdDxULCBJbnRSZWN0LCBpbnQ+KHJlY3QsIHRyYW5zZm9y
bSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IG1hcFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUJiB0cmFuc2Zvcm0pCit0ZW1wbGF0ZTxj
bGFzcyBUPiBzdGF0aWMgaW5saW5lIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCwgY29uc3QgVCYgdHJhbnNmb3JtKQogewotICAgIHJldHVybiBtYXBSZWN0PFQs
IEZsb2F0UmVjdCwgZG91YmxlPihyZWN0LCB0cmFuc2Zvcm0pOworICAgIHJldHVybiBtYXBSZWN0
PFQsIEdyYXBoaWNzUmVjdCwgZG91YmxlPihyZWN0LCB0cmFuc2Zvcm0pOwogfQogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEYXRhIHsKQEAgLTE5Niw3ICsxOTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsKICAgICB9CiAKLSAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICB2b2lkIHNjYWxlKGNvbnN0
IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKICAgICB7CiAgICAgICAgIG1fdHJhbnNmb3JtLnNjYWxlTm9u
VW5pZm9ybShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIH0KQEAgLTIyMSw3ICsy
MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3Qp
OwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkg
Y29uc3QKKyAgICBHcmFwaGljc1JlY3QgbWFwUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3Qp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsK
ICAgICB9CkBAIC0yMzEsMTYgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3Ry
YW5zZm9ybS5tYXBQb2ludChwb2ludCk7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBtYXBQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKyAgICBHcmFwaGljc1BvaW50IG1hcFBv
aW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fdHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKICAgICB9CiAKLSAgICBGbG9hdFNpemUg
bWFwU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CisgICAgR3JhcGhpY3NTaXplIG1h
cFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSBjb25zdAogICAgIHsKICAgICAgICAgZG91
YmxlIHcsIGg7CiAgICAgICAgIG1fdHJhbnNmb3JtLm1hcChzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCksIHcsIGgpOwotICAgICAgICByZXR1cm4gRmxvYXRTaXplKHN0YXRpY19jYXN0PGZsb2F0
Pih3KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6
ZShzdGF0aWNfY2FzdDxmbG9hdD4odyksIHN0YXRpY19jYXN0PGZsb2F0PihoKSk7CiAgICAgfQog
CiAgICAgdm9pZCBzYXZlKCkKQEAgLTUwNywxMyArNTA3LDEzIEBAIFRyYW5zcGFyZW50TGF5ZXJE
Qzo6VHJhbnNwYXJlbnRMYXllckRDKEcKICAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hp
ZnRYIC09IG1fb3JpZ1JlY3QueCgpOwogICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlm
dFkgLT0gbV9vcmlnUmVjdC55KCk7CiAKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wTGVmdCA9
IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludChyZWN0QmVmb3JlVHJhbnNm
b3JtLT5sb2NhdGlvbigpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHJlY3RC
ZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7Cisg
ICAgICAgICAgICBHcmFwaGljc1BvaW50IHRvcExlZnQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1h
cFBvaW50KEdyYXBoaWNzUG9pbnQocmVjdEJlZm9yZVRyYW5zZm9ybS0+bG9jYXRpb24oKSkpOwor
ICAgICAgICAgICAgR3JhcGhpY3NQb2ludCB0b3BSaWdodChyZWN0QmVmb3JlVHJhbnNmb3JtLT5t
YXhYKCkgLSAxLCByZWN0QmVmb3JlVHJhbnNmb3JtLT55KCkpOwogICAgICAgICAgICAgdG9wUmln
aHQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKLSAgICAgICAgICAg
IEZsb2F0UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNmb3JtLT54KCksIHJlY3RCZWZv
cmVUcmFuc2Zvcm0tPm1heFkoKSAtIDEpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBib3R0
b21MZWZ0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+bWF4
WSgpIC0gMSk7CiAgICAgICAgICAgICBib3R0b21MZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5t
YXBQb2ludChib3R0b21MZWZ0KTsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaWRlVG9wID0gdG9w
UmlnaHQgLSB0b3BMZWZ0OwotICAgICAgICAgICAgRmxvYXRTaXplIHNpZGVMZWZ0ID0gYm90dG9t
TGVmdCAtIHRvcExlZnQ7CisgICAgICAgICAgICBHcmFwaGljc1NpemUgc2lkZVRvcCA9IHRvcFJp
Z2h0IC0gdG9wTGVmdDsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBzaWRlTGVmdCA9IGJvdHRv
bUxlZnQgLSB0b3BMZWZ0OwogICAgICAgICAgICAgZmxvYXQgd2lkdGggPSBfaHlwb3Qoc2lkZVRv
cC53aWR0aCgpICsgMSwgc2lkZVRvcC5oZWlnaHQoKSArIDEpOwogICAgICAgICAgICAgZmxvYXQg
aGVpZ2h0ID0gX2h5cG90KHNpZGVMZWZ0LndpZHRoKCkgKyAxLCBzaWRlTGVmdC5oZWlnaHQoKSAr
IDEpOwogCkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFy
Yyhjb25zdCBJbgogICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50
KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQogewogICAgIGlmICghbV9kYXRhLT5tX29w
YWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8IG5wb2ludHMgPD0gMSB8fCAhcG9pbnRzKQog
ICAgICAgICByZXR1cm47CkBAIC04NjQsNyArODY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb252ZXhQb2x5Z29uKAogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UE9JTlQs
IDIwPiB3aW5Qb2ludHMobnBvaW50cyk7Ci0gICAgRmxvYXRQb2ludCB0clBvaW50ID0gbV9kYXRh
LT5tYXBQb2ludChwb2ludHNbMF0pOworICAgIEdyYXBoaWNzUG9pbnQgdHJQb2ludCA9IG1fZGF0
YS0+bWFwUG9pbnQocG9pbnRzWzBdKTsKICAgICB3aW5Qb2ludHNbMF0ueCA9IHN0YWJsZVJvdW5k
KHRyUG9pbnQueCgpKTsKICAgICB3aW5Qb2ludHNbMF0ueSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQu
eSgpKTsKICAgICBSRUNUIHJlY3QgPSB7IHdpblBvaW50c1swXS54LCB3aW5Qb2ludHNbMF0ueSwg
d2luUG9pbnRzWzBdLngsIHdpblBvaW50c1swXS55IH07CkBAIC05MTgsNyArOTE4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIFNlbGVjdE9iamVjdChk
Yywgb2xkQnJ1c2gpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlh
bGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC05Mjks
NyArOTI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKAogICAg
IC8vIEZJWE1FOiBJTVBMRU1FTlQhIQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQogICAg
ICAgICByZXR1cm47CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogICAgIEZpbGxSZWN0KHRyYW5zcGFyZW50REMuaGRjKCksICZ0cmFu
c3BhcmVudERDLnJlY3QoKSwgaGJydXNoLmdldCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjEsMTggKzEwMjEsMTggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIERyYXdGb2N1c1JlY3QoZGMsICZyZWN0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZs
b2F0IHdpZHRoLCBib29sIHByaW50aW5nKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cm9rZVN0eWxlIG9sZFN0eWxlID0gc3Ryb2tlU3R5
bGUoKTsKICAgICBzZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgZHJhd0xpbmUocm91
bmRlZEludFBvaW50KG9yaWdpbiksIHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9hdFNpemUo
d2lkdGgsIDApKSk7CisgICAgZHJhd0xpbmUocm91bmRlZEludFBvaW50KG9yaWdpbiksIHJvdW5k
ZWRJbnRQb2ludChvcmlnaW4gKyBHcmFwaGljc1NpemUod2lkdGgsIDApKSk7CiAgICAgc2V0U3Ry
b2tlU3R5bGUob2xkU3R5bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tp
bmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdM
aW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTEwNjMsNyAr
MTA2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBj
bGlwKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVh
clJlY3QoY29uc3QgRmwKICAgICBmaWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6d2hpdGUpLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCiB7
CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ry
b2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1OSw3ICsxMTU5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYQogICAgIG1fZGF0
YS0+cm90YXRlKHJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdy
YXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogfQpAQCAtMTIx
NCw3ICsxMjE0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwog
ICAgIGlmICghbV9kYXRhLT5tX2RjKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFNpemUg
c2hhZG93T2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAgZmxvYXQg
c2hhZG93Qmx1ciA9IDA7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JTcGFjZSBz
aGFkb3dDb2xvclNwYWNlOwpAQCAtMTIyNywxMCArMTIyNywxMCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAgICAgZHN0UmVjdC5pbmZsYXRlKHN0YWJsZVJvdW5k
KHNoYWRvd0JsdXIpKTsKICAgICBkc3RSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGRzdFJlY3QpOwog
ICAKLSAgICBGbG9hdFNpemUgbmV3VG9wTGVmdChtX2RhdGEtPm1hcFNpemUodG9wTGVmdCkpOwot
ICAgIEZsb2F0U2l6ZSBuZXdUb3BSaWdodChtX2RhdGEtPm1hcFNpemUodG9wUmlnaHQpKTsKLSAg
ICBGbG9hdFNpemUgbmV3Qm90dG9tTGVmdChtX2RhdGEtPm1hcFNpemUoYm90dG9tTGVmdCkpOwot
ICAgIEZsb2F0U2l6ZSBuZXdCb3R0b21SaWdodChtX2RhdGEtPm1hcFNpemUoYm90dG9tUmlnaHQp
KTsKKyAgICBHcmFwaGljc1NpemUgbmV3VG9wTGVmdChtX2RhdGEtPm1hcFNpemUodG9wTGVmdCkp
OworICAgIEdyYXBoaWNzU2l6ZSBuZXdUb3BSaWdodChtX2RhdGEtPm1hcFNpemUodG9wUmlnaHQp
KTsKKyAgICBHcmFwaGljc1NpemUgbmV3Qm90dG9tTGVmdChtX2RhdGEtPm1hcFNpemUoYm90dG9t
TGVmdCkpOworICAgIEdyYXBoaWNzU2l6ZSBuZXdCb3R0b21SaWdodChtX2RhdGEtPm1hcFNpemUo
Ym90dG9tUmlnaHQpKTsKIAogICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVudERjKG1f
ZGF0YSwgZHN0UmVjdCwgJmZpbGxSZWN0KTsKICAgICBIREMgZGMgPSB0cmFuc3BhcmVudERjLmhk
YygpOwpAQCAtMTMwMCw3ICsxMzAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSb3Vu
ZENvcm5lcihibwogfQogCiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQorR3JhcGhpY3NS
ZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFwaGljc1Jl
Y3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gZnJlY3Q7CkBAIC0xMzk2LDcgKzEzOTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBHcmFkaWVudCogZ3JhZGllbnQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByLCBjb25zdCBH
cmFkaWVudCogZ3JhZGllbnQpCiB7CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTQyNSw4ICsxNDI1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47CiAKICAgICByZWN0Lm1vdmUodHJhbnNw
YXJlbnREQy50b1NoaWZ0KCkpOwotICAgIEZsb2F0UG9pbnQgZnAwID0gbV9kYXRhLT5tYXBQb2lu
dChncmFkaWVudC0+cDAoKSk7Ci0gICAgRmxvYXRQb2ludCBmcDEgPSBtX2RhdGEtPm1hcFBvaW50
KGdyYWRpZW50LT5wMSgpKTsKKyAgICBHcmFwaGljc1BvaW50IGZwMCA9IG1fZGF0YS0+bWFwUG9p
bnQoZ3JhZGllbnQtPnAwKCkpOworICAgIEdyYXBoaWNzUG9pbnQgZnAxID0gbV9kYXRhLT5tYXBQ
b2ludChncmFkaWVudC0+cDEoKSk7CiAgICAgSW50UG9pbnQgcDAoc3RhYmxlUm91bmQoZnAwLngo
KSksIHN0YWJsZVJvdW5kKGZwMC55KCkpKTsKICAgICBJbnRQb2ludCBwMShzdGFibGVSb3VuZChm
cDEueCgpKSwgc3RhYmxlUm91bmQoZnAxLnkoKSkpOwogICAgIHAwICs9IHRyYW5zcGFyZW50REMu
dG9TaGlmdCgpOwpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogICAgIGludCB5ID0gcmVjdC55KCk7CiAgICAgaW50IHdpZHRoID0g
cmVjdC53aWR0aCgpOwogICAgIGludCBoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAgIEZsb2F0
U2l6ZSBkID0gZ3JhZGllbnQtPnAxKCkgLSBncmFkaWVudC0+cDAoKTsKKyAgICBHcmFwaGljc1Np
emUgZCA9IGdyYWRpZW50LT5wMSgpIC0gZ3JhZGllbnQtPnAwKCk7CiAgICAgYm9vbCB2ZXJ0aWNh
bCA9IGZhYnMoZC5oZWlnaHQoKSkgPiBmYWJzKGQud2lkdGgoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7CiAgICAgICAgIGNvbnN0IEdyYWRpZW50OjpDb2xv
clN0b3AmIHN0b3AgPSBzdG9wc1tpXTsKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIEFmZmluZVRyYW5z
Zm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgKICAgICByZXR1cm4gbV9kYXRhLT5tX3RyYW5z
Zm9ybTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QpCiB7CiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIApAQCAtMTUwNCw3ICsxNTA0
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIHJlc3Rv
cmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNl
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdyYXBoaWNz
U2l6ZSYsIGZsb2F0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KQEAgLTE1MzAsNyArMTUzMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0No
YXJWaXNpYmxlKFVDaGFyIGMKICAgICByZXR1cm4gYyAmJiBjICE9IHplcm9XaWR0aFNwYWNlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWZpbGxDb2xvcigpLmFscGhh
KCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQogICAgICAgICByZXR1cm47CkBAIC0xNTQ1LDcgKzE1
NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9uCiAgICAgZmxv
YXQgb2xkT3BhY2l0eSA9IG1fZGF0YS0+bV9vcGFjaXR5OwogICAgIG1fZGF0YS0+bV9vcGFjaXR5
ICo9IGZpbGxDb2xvcigpLmFscGhhKCkgLyAyNTUuMDsKIAotICAgIEZsb2F0UmVjdCB0ZXh0UmVj
dCA9IGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgZm9udC5mb250TWV0cmlj
cygpLmhlaWdodCgpLCBmcm9tLCB0byk7CisgICAgR3JhcGhpY3NSZWN0IHRleHRSZWN0ID0gZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBmb250LmZvbnRNZXRyaWNzKCkuaGVp
Z2h0KCksIGZyb20sIHRvKTsKICAgICB0ZXh0UmVjdC5zZXRZKHRleHRSZWN0LnkoKSAtIGZvbnQu
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgSW50UmVjdCB0clJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KG1fZGF0YS0+bWFwUmVjdCh0ZXh0UmVjdCkpOwogICAgIFJFQ1QgYm1wUmVjdDsKQEAg
LTE1NTQsNyArMTU1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBG
b24KICAgICAgICAgewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKDApOwogICAgICAg
ICAgICAgZ2Muc2V0Qml0bWFwKGJtcCk7Ci0gICAgICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUo
bV9kYXRhLT5tX3RyYW5zZm9ybS5hKCksIG1fZGF0YS0+bV90cmFuc2Zvcm0uZCgpKSk7CisgICAg
ICAgICAgICBnYy5zY2FsZShHcmFwaGljc1NpemUobV9kYXRhLT5tX3RyYW5zZm9ybS5hKCksIG1f
ZGF0YS0+bV90cmFuc2Zvcm0uZCgpKSk7CiAgICAgICAgICAgICBmb250LmRyYXdUZXh0KCZnYywg
cnVuLCBJbnRQb2ludCgwLCBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7
CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQga2V5MTsKQEAgLTE1NjksNyArMTU2OSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb24KIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQpCiB7CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTYwMCw4ICsxNjAwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0
IFNpbQogICAgICAgICA/IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5nZXRTY2FsZWRGb250SGFu
ZGxlKGhlaWdodCwgc2NhbGVYID09IHNjYWxlWSA/IDAgOiB3aWR0aCkKICAgICAgICAgOiAwOwog
Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZm9udERh
dGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgIEZsb2F0UG9pbnQgdHJQb2ludCA9IG1f
ZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50
KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OworICAgIEdyYXBoaWNzUG9pbnQgdHJQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2lu
dCk7CiAgICAgaW50IHkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7CiAKICAgICBDb2xvciBj
b2xvciA9IGZpbGxDb2xvcigpOwpAQCAtMTYzMiw3ICsxNjMyLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0KGNvbnN0IFNpbQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zmc2V0Owog
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSAwOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIENv
bG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTE2NDAsNyArMTY0MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBTaW0KICAgICAgICAgJiYgZ2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpCiAg
ICAgICAgICYmIHNoYWRvd0NvbG9yLmFscGhhKCk7CiAgICAgQ09MT1JSRUYgc2hhZG93UkdCQ29s
b3I7Ci0gICAgRmxvYXRQb2ludCB0clNoYWRvd1BvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdHJT
aGFkb3dQb2ludDsKICAgICBpZiAoaGFzU2hhZG93KSB7CiAgICAgICAgIHNoYWRvd1JHQkNvbG9y
ID0gUkdCKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xv
ci5ibHVlKCkpOwogICAgICAgICB0clNoYWRvd1BvaW50ID0gbV9kYXRhLT5tYXBQb2ludChzdGFy
dFBvaW50ICsgc2hhZG93T2Zmc2V0KTsKQEAgLTE4MzYsOCArMTgzNiw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Qml0bWFwKFNoYXJlZEIKICAgICAgICAgdHJhbnNwYXJlbnREQy5maWxs
QWxwaGFDaGFubmVsKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0bWFwUGF0
dGVybihTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdEluLCBjb25zdCBJbnRTaXpl
JiBvcmlnU291cmNlU2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0bWFwUGF0dGVy
bihTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdEluLCBjb25zdCBJ
bnRTaXplJiBvcmlnU291cmNlU2l6ZSkKIHsKICAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQog
ICAgICAgICByZXR1cm47CkBAIC0xODUzLDggKzE4NTMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0JpdG1hcFBhdHRlcm4oCiAgICAgaWYgKCFkYykKICAgICAgICAgcmV0dXJuOwogICAg
IHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLSAgICBGbG9hdFJlY3QgbW92
ZWREc3RSZWN0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChGbG9hdFJl
Y3QodHJSZWN0KSk7Ci0gICAgRmxvYXRTaXplIG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlvbigp
IC0gZGVzdFJlY3RJbi5sb2NhdGlvbigpKTsKKyAgICBHcmFwaGljc1JlY3QgbW92ZWREc3RSZWN0
ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChHcmFwaGljc1JlY3QodHJS
ZWN0KSk7CisgICAgR3JhcGhpY3NTaXplIG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlvbigpIC0g
ZGVzdFJlY3RJbi5sb2NhdGlvbigpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bV9kYXRhLT5tX3RyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1vdmVkLndpZHRo
KCksIG1vdmVkLmhlaWdodCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIyICs0MywyMiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKG1f
ZGF0YS0+bV9iaXRtYXAtPndpZHRoKCksIG1fZGF0YS0+bV9iaXRtYXAtPmhlaWdodCgpKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1
ZSkge30KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RS
ZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKIAogICAg
IGNvbnN0IEltYWdlQnVmZmVyRGF0YSogbV9kYXRhOwogfTsKIAotdm9pZCBCdWZmZXJlZEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgSW50UmVjdCBpbnREc3RSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChkc3RSZWN0KTsKICAgICBJbnRSZWN0IGludFNyY1JlY3Qoc3JjUmVjdCk7CiAg
ICAgbV9kYXRhLT5tX2JpdG1hcC0+ZHJhdyhjdHh0LCBpbnREc3RSZWN0LCBpbnRTcmNSZWN0LCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAotdm9pZCBCdWZmZXJlZEltYWdlOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQordm9pZCBCdWZmZXJlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIG1f
ZGF0YS0+bV9iaXRtYXAtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgc2l6ZSgpKTsKIH0K
QEAgLTEwOCwyMCArMTA4LDIwIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkSW1hZ2UoJm1fZGF0YSkpOwog
fQogCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsK
ICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOwogICAgIGNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CiAgICAgaW1hZ2VDb3B5LT5kcmF3
UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVD
b2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDkgKzc4LDkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0
SEJJVE1BUE9mU2l6ZShIQklUTQogCiAgICAgICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFw
SW1hZ2U6OnNpemUoKTsKICAgICAgICAgaWYgKHNpemUpCi0gICAgICAgICAgICBkcmF3RnJhbWVN
YXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1wSW5mby5ibVdpZHRoLCBi
bXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZn
YywgR3JhcGhpY3NSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCks
IEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLCAwLCBibXBJbmZv
LmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndp
ZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZUNvcHkpOworICAgICAgICAgICAgZHJhdygmZ2MsIEdyYXBoaWNzUmVjdCgwLCAwLCBibXBJbmZv
LmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBHcmFwaGljc1JlY3QoMCwgMCwgaW1hZ2VTaXpl
LndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBv
c2l0ZUNvcHkpOwogICAgIH0KIAogICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhPbGRCbXAp
OwpAQCAtODgsNyArODgsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhC
SVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1h
dGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJh
d0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaW50
IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lczsg
KytpKSB7CkBAIC05OCwxNyArOTgsMTcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0
Y2hpbmdTb3VyYwogCiAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFt
ZTsKICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwotICAgICAgICBkcmF3KGN0eHQsIGRzdFJl
Y3QsIEZsb2F0UmVjdCgwLCAwLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0
LCBHcmFwaGljc1JlY3QoMCwgMCwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwg
c3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiAgICAgICAgIG1fY3VycmVudEZyYW1lID0g
Y3VycmVudEZyYW1lOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm8gaW1hZ2Ug
b2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1
cnJlbnQgZnJhbWUKICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7
Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwor
ICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgR3JhcGhpY3NSZWN0KDAsIDAsIGltYWdlU2l6ZS53aWR0
aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsK
IH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0SW4sIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdEluLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgaWYg
KCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzMsMTQgKzEz
MywxNCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgc3Rh
cnRBbmltYXRpb24oKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdElu
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQor
dm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUmVmUHRyPFNoYXJlZEJpdG1h
cD4gYm1wID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWJtcCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5DRS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0
aFdpbkNFLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9QYXRoV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC01Myw0MiArNTMsNDIgQEAgUGF0aCYgUGF0aDo6
b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9v
bCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkg
Y29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIFdp
bmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0aC0+Y29udGFpbnMocG9pbnQs
IHJ1bGUpOwogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Cit2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAg
bV9wYXRoLT50cmFuc2xhdGUoc2l6ZSk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1Jl
Y3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7CiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9wYXRoLT5tb3ZlVG8ocG9pbnQpOwogfQogCi12b2lk
IFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6YWRk
TGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIG1fcGF0aC0+YWRkTGlu
ZVRvKHBvaW50KTsKIH0KIAotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8o
Y29uc3QgR3JhcGhpY3NQb2ludCYgY3AsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAg
bV9wYXRoLT5hZGRRdWFkQ3VydmVUbyhjcCwgcCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVy
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29u
c3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFw
aGljc1BvaW50JiBjcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcCkKIHsKICAgICBtX3BhdGgtPmFkZEJlemllckN1cnZlVG8oY3AxLCBjcDIsIHApOwog
fQogCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBHcmFw
aGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKIHsK
ICAgICBtX3BhdGgtPmFkZEFyY1RvKHAxLCBwMiwgcmFkaXVzKTsKIH0KQEAgLTk4LDE3ICs5OCwx
NyBAQCB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiAgICAgbV9wYXRoLT5jbG9zZVN1YnBhdGgo
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwg
ZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3ZvaWQgUGF0aDo6YWRk
QXJjKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFy
LCBib29sIGFudGljbG9ja3dpc2UpCiB7CiAgICAgbV9wYXRoLT5hZGRFbGxpcHNlKHAsIHIsIHIs
IHNhciwgZWFyLCBhbnRpY2xvY2t3aXNlKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIp
CiB7CiAgICAgbV9wYXRoLT5hZGRSZWN0KHIpOwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNz
UmVjdCYgcikKIHsKICAgICBtX3BhdGgtPmFkZEVsbGlwc2Uocik7CiB9CkBAIC0xMzMsMTMgKzEz
MywxMyBAQCB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2ZvCiAgICAgbV9w
YXRoLT50cmFuc2Zvcm0odCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1Jl
Y3QoU3Ryb2tlU3R5bGVBcHBsaWVyKikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VC
b3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKikgY29uc3QKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiwg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9r
ZVN0eWxlQXBwbGllciosIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdAogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wg
UGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKICAgICByZXR1cm4gIWlzRW1wdHkoKTsKIH0K
IAotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludCBQ
YXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGgtPmxhc3RQb2lu
dCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxh
dGZvcm1QYXRoV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5D
RS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bVBhdGhXaW5DRS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJlemllcihpbnQgc2Vn
bWVudHMsIAogICAgIHB0c1tvZmZzZXQgKyBzZWdtZW50cyAtIDFdID0gcHA7CiB9CiAKLXN0YXRp
YyBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBGbG9hdFBvaW50
JiBwKQorc3RhdGljIGJvb2wgY29udGFpbnNQb2ludChjb25zdCBHcmFwaGljc1JlY3QmIHIsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgcmV0dXJuIHAueCgpID49IHIueCgpICYmIHAu
eSgpID49IHIueSgpICYmIHAueCgpIDwgci5tYXhYKCkgJiYgcC55KCkgPCByLm1heFkoKTsKIH0K
QEAgLTEzMSwxOCArMTMxLDE4IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZUFuZ2xlKGZsb2F0JiBh
bmdsZSkKICAgICAgICAgYW5nbGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0cmFuc2Zvcm1BcmNQ
b2ludChmbG9hdCYgeCwgZmxvYXQmIHksIGNvbnN0IEZsb2F0UG9pbnQmIGMpCitzdGF0aWMgdm9p
ZCB0cmFuc2Zvcm1BcmNQb2ludChmbG9hdCYgeCwgZmxvYXQmIHksIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGMpCiB7CiAgICAgeCArPSBjLngoKTsKICAgICB5ICs9IGMueSgpOwogfQogCi1zdGF0aWMg
dm9pZCBpbmZsYXRlUmVjdFRvQ29udGFpblBvaW50KEZsb2F0UmVjdCYgciwgZmxvYXQgeCwgZmxv
YXQgeSkKK3N0YXRpYyB2b2lkIGluZmxhdGVSZWN0VG9Db250YWluUG9pbnQoR3JhcGhpY3NSZWN0
JiByLCBmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGlmIChyLmlzRW1wdHkoKSkgewogICAgICAg
ICByLnNldFgoeCk7CiAgICAgICAgIHIuc2V0WSh5KTsKLSAgICAgICAgci5zZXRTaXplKEZsb2F0
U2l6ZSgxLCAxKSk7CisgICAgICAgIHIuc2V0U2l6ZShHcmFwaGljc1NpemUoMSwgMSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh4IDwgci54KCkpIHsKQEAgLTI0OSw3ICsyNDks
NyBAQCBzdGF0aWMgdm9pZCBkcmF3UG9seWdvbnMoSERDIGRjLCBjb25zdCBWCiAgICAgICAgIGlm
ICh3aW5Qb2ludHMpIHsKICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbikgewogICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCBucG9pbnRzOyArK2kyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQgdHJQb2ludCA9IHRyYW5zZm9ybWF0aW9uLT5tYXBQb2lu
dChpLT5hdChpMikpOworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50IHRyUG9pbnQg
PSB0cmFuc2Zvcm1hdGlvbi0+bWFwUG9pbnQoaS0+YXQoaTIpKTsKICAgICAgICAgICAgICAgICAg
ICAgd2luUG9pbnRzW2kyXS54ID0gc3RhYmxlUm91bmQodHJQb2ludC54KCkpOwogICAgICAgICAg
ICAgICAgICAgICB3aW5Qb2ludHNbaTJdLnkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxMCw3IEBAIGludCBQbGF0Zm9ybVBhdGhFbGVt
ZW50OjpudW1Qb2ludHMoKSBjb24KICAgICB9CiB9CiAKLXZvaWQgUGF0aFBvbHlnb246Om1vdmUo
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCit2b2lkIFBhdGhQb2x5Z29uOjptb3ZlKGNvbnN0IEdy
YXBoaWNzU2l6ZSYgb2Zmc2V0KQogewogICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46Oml0ZXJh
dG9yIGkgPSBiZWdpbigpOyBpIDwgZW5kKCk7ICsraSkKICAgICAgICAgaS0+bW92ZShvZmZzZXQp
OwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgUGF0aFBvbHlnb246OnRyYW5zZm9ybShjb25zdCBB
ZmZpbmUKICAgICAgICAgKmkgPSB0Lm1hcFBvaW50KCppKTsKIH0KIAotYm9vbCBQYXRoUG9seWdv
bjo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBhdGhQb2x5
Z29uOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBp
ZiAoc2l6ZSgpIDwgMykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk1LDcgKzM5NSw3IEBA
IGJvb2wgUGF0aFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG8KICAgICByZXR1cm4gaW50
ZXJzZWN0ZWQgJiAxOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om1vdmUoY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQpCit2b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om1vdmUoY29uc3Qg
R3JhcGhpY3NTaXplJiBvZmZzZXQpCiB7CiAgICAgaW50IG4gPSBudW1Db250cm9sUG9pbnRzKCk7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCkBAIC00MDYsMTIgKzQwNiwxMiBAQCB2
b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OnRyYW5zZm9ybShjb25zCiB7CiAgICAgaW50IG4gPSBu
dW1Db250cm9sUG9pbnRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAg
ICAgICAgRmxvYXRQb2ludCBwID0gdC5tYXBQb2ludChtX2RhdGEubV9wb2ludHNbaV0pOworICAg
ICAgICBHcmFwaGljc1BvaW50IHAgPSB0Lm1hcFBvaW50KG1fZGF0YS5tX3BvaW50c1tpXSk7CiAg
ICAgICAgIG1fZGF0YS5tX3BvaW50c1tpXS5zZXQocC54KCksIHAueSgpKTsKICAgICB9CiB9CiAK
LXZvaWQgUGxhdGZvcm1QYXRoRWxlbWVudDo6aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShGbG9hdFJl
Y3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkgY29uc3QKK3ZvaWQgUGxhdGZvcm1Q
YXRoRWxlbWVudDo6aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShHcmFwaGljc1JlY3QmIHIsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGxhc3RQb2ludCkgY29uc3QKIHsKICAgICBpZiAobV90eXBlID09IFBh
dGhBcmNUbykgewogICAgICAgICBjb25zdCBBcmNUbyYgZGF0YSA9IG1fZGF0YS5tX2FyY1RvRGF0
YTsKQEAgLTU2NCw3ICs1NjQsNyBAQCB2b2lkIFBsYXRmb3JtUGF0aDo6YXBwZW5kKGNvbnN0IFBs
YXRmb3JtCiB2b2lkIFBsYXRmb3JtUGF0aDo6Y2xlYXIoKQogewogICAgIG1fZWxlbWVudHMuY2xl
YXIoKTsKLSAgICBtX2JvdW5kaW5nUmVjdCA9IEZsb2F0UmVjdCgpOworICAgIG1fYm91bmRpbmdS
ZWN0ID0gR3JhcGhpY3NSZWN0KCk7CiAgICAgbV9zdWJwYXRocy5jbGVhcigpOwogICAgIG1fY3Vy
cmVudFBvaW50LmNsZWFyKCk7CiAgICAgbV9wZW5MaWZ0ZWQgPSB0cnVlOwpAQCAtNTgyLDcgKzU4
Miw3IEBAIHZvaWQgUGxhdGZvcm1QYXRoOjpmaWxsUGF0aChIREMgZGMsIGNvbnMKICAgICBTZWxl
Y3RPYmplY3QoZGMsIG9sZFBlbik7CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXRoOjp0cmFuc2xhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBQbGF0Zm9ybVBhdGg6OnRyYW5zbGF0ZShjb25z
dCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVtZW50czo6
aXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50cy5lbmQoKTsg
KytpdCkKICAgICAgICAgaXQtPm1vdmUoc2l6ZSk7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBQ
bGF0Zm9ybVBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbgogICAgICAgICBpdC0+dHJhbnNmb3Jt
KHQpOwogfQogCi1ib29sIFBsYXRmb3JtUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBsYXRmb3JtUGF0aDo6Y29udGFpbnMo
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAg
Ly8gb3B0aW1pemF0aW9uOiBjaGVjayB0aGUgYm91bmRpbmcgcmVjdCBmaXJzdAogICAgIGlmICgh
Y29udGFpbnNQb2ludChtX2JvdW5kaW5nUmVjdCwgcG9pbnQpKQpAQCAtNjE2LDM1ICs2MTYsMzUg
QEAgYm9vbCBQbGF0Zm9ybVBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3ZvaWQgUGxhdGZvcm1QYXRoOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQpCiB7CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6TW92ZVRvIGRhdGEgPSB7IHsgcG9pbnQu
eCgpLCBwb2ludC55KCkgfSB9OwogICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7CiAg
ICAgYXBwZW5kKHBlKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZExpbmVUbyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGxhdGZvcm1QYXRoOjphZGRMaW5lVG8oY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6TGluZVRvIGRh
dGEgPSB7IHsgcG9pbnQueCgpLCBwb2ludC55KCkgfSB9OwogICAgIFBsYXRmb3JtUGF0aEVsZW1l
bnQgcGUoZGF0YSk7CiAgICAgYXBwZW5kKHBlKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6OmFk
ZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQor
dm9pZCBQbGF0Zm9ybVBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNw
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OlF1
YWRDdXJ2ZVRvIGRhdGEgPSB7IHsgY3AueCgpLCBjcC55KCkgfSwgeyBwLngoKSwgcC55KCkgfSB9
OwogICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7CiAgICAgYXBwZW5kKHBlKTsKIH0K
IAotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYg
Y3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBs
YXRmb3JtUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcDEsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBQ
bGF0Zm9ybVBhdGhFbGVtZW50OjpCZXppZXJDdXJ2ZVRvIGRhdGEgPSB7IHsgY3AxLngoKSwgY3Ax
LnkoKSB9LCB7IGNwMi54KCksIGNwMi55KCkgfSwgeyBwLngoKSwgcC55KCkgfSB9OwogICAgIFBs
YXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7CiAgICAgYXBwZW5kKHBlKTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybVBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIGZwMSwgY29uc3QgRmxvYXRQ
b2ludCYgZnAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBsYXRmb3JtUGF0aDo6YWRkQXJjVG8oY29u
c3QgR3JhcGhpY3NQb2ludCYgZnAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBmcDIsIGZsb2F0IHJh
ZGl1cykKIHsKICAgICBjb25zdCBQYXRoUG9pbnQmIHAwID0gbV9jdXJyZW50UG9pbnQ7CiAgICAg
UGF0aFBvaW50IHAxOwpAQCAtNzE0LDcgKzcxNCw3IEBAIHZvaWQgUGxhdGZvcm1QYXRoOjpjbG9z
ZVN1YnBhdGgoKQogfQogCiAvLyBhZGQgYSBjaXJjdWxhciBhcmMgY2VudHJlZCBhdCBwIHdpdGgg
cmFkaXVzIHIgZnJvbSBzdGFydCBhbmdsZSBzYXIgKHJhZGlhbnMpIHRvIGVuZCBhbmdsZSBlYXIK
LXZvaWQgUGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0
IGEsIGZsb2F0IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCit2
b2lkIFBsYXRmb3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBmbG9h
dCBhLCBmbG9hdCBiLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQog
ewogICAgIGZsb2F0IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZOwogCkBAIC03MjcsNyArNzI3
LDcgQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYQogICAgIHRyYW5z
Zm9ybUFyY1BvaW50KHN0YXJ0WCwgc3RhcnRZLCBwKTsKICAgICB0cmFuc2Zvcm1BcmNQb2ludChl
bmRYLCBlbmRZLCBwKTsKIAotICAgIEZsb2F0UG9pbnQgc3RhcnQoc3RhcnRYLCBzdGFydFkpOwor
ICAgIEdyYXBoaWNzUG9pbnQgc3RhcnQoc3RhcnRYLCBzdGFydFkpOwogICAgIG1vdmVUbyhzdGFy
dCk7CiAKICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyBkYXRhID0geyB7IGVuZFgsIGVu
ZFkgfSwgeyBwLngoKSwgcC55KCkgfSwgIHsgYSwgYiB9LCAhYW50aWNsb2Nrd2lzZSB9OwpAQCAt
NzM2LDI4ICs3MzYsMjggQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxv
YQogfQogCiAKLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikK
K3ZvaWQgUGxhdGZvcm1QYXRoOjphZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAg
ICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKIAogICAgIGZsb2F0IHJpZ2h0ID0gci5tYXhYKCkgLSAx
OwogICAgIGZsb2F0IGJvdHRvbSA9IHIubWF4WSgpIC0gMTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQ
b2ludChyaWdodCwgci55KCkpKTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyaWdodCwgYm90
dG9tKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoci54KCksIGJvdHRvbSkpOworICAgIGFk
ZExpbmVUbyhHcmFwaGljc1BvaW50KHJpZ2h0LCByLnkoKSkpOworICAgIGFkZExpbmVUbyhHcmFw
aGljc1BvaW50KHJpZ2h0LCBib3R0b20pKTsKKyAgICBhZGRMaW5lVG8oR3JhcGhpY3NQb2ludChy
LngoKSwgYm90dG9tKSk7CiAgICAgYWRkTGluZVRvKHIubG9jYXRpb24oKSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGxhdGZv
cm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKLSAgICBGbG9hdFNp
emUgcmFkaXVzKHIud2lkdGgoKSAqIDAuNSwgci5oZWlnaHQoKSAqIDAuNSk7CisgICAgR3JhcGhp
Y3NTaXplIHJhZGl1cyhyLndpZHRoKCkgKiAwLjUsIHIuaGVpZ2h0KCkgKiAwLjUpOwogICAgIGFk
ZEVsbGlwc2Uoci5sb2NhdGlvbigpICsgcmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhl
aWdodCgpLCAwLCAwLCB0cnVlKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVBhdGg6OmFwcGx5KHZvaWQq
IGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgUGF0aEVs
ZW1lbnQgcGVsZW1lbnQ7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbM107CisgICAgR3JhcGhpY3NQ
b2ludCBwb2ludHNbM107CiAgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwogCiAgICAgZm9y
IChQbGF0Zm9ybVBhdGhFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdp
bigpKTsgaXQgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytpdCkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhX
aW5DRS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIw
LDggQEAKICNpZm5kZWYgUGxhdGZvcm1QYXRoV2luQ0VfaAogI2RlZmluZSBQbGF0Zm9ybVBhdGhX
aW5DRV9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTM5LDEzICsz
OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3ggPSB4OwogICAgICAg
ICAgICAgbV95ID0geTsKICAgICAgICAgfTsKLSAgICAgICAgb3BlcmF0b3IgRmxvYXRQb2ludCgp
IGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV94LCBtX3kpOyB9Ci0gICAgICAgIHZvaWQgbW92
ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKKyAgICAgICAgb3BlcmF0b3IgR3JhcGhpY3NQb2lu
dCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV94LCBtX3kpOyB9CisgICAgICAgIHZv
aWQgbW92ZShjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCkKICAgICAgICAgewogICAgICAgICAg
ICAgbV94ICs9IG9mZnNldC53aWR0aCgpOwogICAgICAgICAgICAgbV95ICs9IG9mZnNldC5oZWln
aHQoKTsKICAgICAgICAgfQotICAgICAgICBQYXRoUG9pbnQmIG9wZXJhdG9yPShjb25zdCBGbG9h
dFBvaW50JiBwKQorICAgICAgICBQYXRoUG9pbnQmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc1Bv
aW50JiBwKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3ggPSBwLngoKTsKICAgICAgICAgICAg
IG1feSA9IHAueSgpOwpAQCAtNTUsOSArNTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
fTsKIAogICAgIHN0cnVjdCBQYXRoUG9seWdvbjogcHVibGljIFZlY3RvcjxQYXRoUG9pbnQ+IHsK
LSAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKKyAgICAgICAgdm9p
ZCBtb3ZlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCB0cmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3Q7CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0OwogICAgIH07CiAKICAgICBjbGFzcyBQbGF0Zm9y
bVBhdGhFbGVtZW50IHsKQEAgLTExNywxMSArMTE3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgY29uc3QgUGF0aFBvaW50JiBwb2ludEF0KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLm1fcG9pbnRzW2luZGV4XTsgfQogICAgICAgICBpbnQgbnVtUG9pbnRzKCkgY29u
c3Q7CiAgICAgICAgIGludCBudW1Db250cm9sUG9pbnRzKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
bW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7CisgICAgICAgIHZvaWQgbW92ZShjb25zdCBH
cmFwaGljc1NpemUmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdCk7CiAgICAgICAgIFBhdGhFbGVtZW50VHlwZSB0eXBlKCkgY29uc3Q7CiAg
ICAgICAgIFBsYWZvcm1QYXRoRWxlbWVudFR5cGUgcGxhdGZvcm1UeXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9Ci0gICAgICAgIHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShGbG9hdFJl
Y3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkgY29uc3Q7CisgICAgICAgIHZvaWQg
aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShHcmFwaGljc1JlY3QmIHIsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGxhc3RQb2ludCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBQbGFmb3JtUGF0
aEVsZW1lbnRUeXBlIG1fdHlwZTsKQEAgLTE0OCwyMiArMTQ4LDIyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICB2b2lkIHN0cm9rZVBhdGgoSERDLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0qIHRyKSBjb25zdDsKICAgICAgICAgdm9pZCBmaWxsUGF0aChIREMsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSogdHIpIGNvbnN0OwotICAgICAgICBGbG9hdFBvaW50IGxhc3RQb2ludCgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpID8gRmxvYXRQb2ludCgwLCAwKSA6IG1fZWxl
bWVudHMubGFzdCgpLmxhc3RQb2ludCgpOyB9CisgICAgICAgIEdyYXBoaWNzUG9pbnQgbGFzdFBv
aW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5pc0VtcHR5KCkgPyBHcmFwaGljc1BvaW50
KDAsIDApIDogbV9lbGVtZW50cy5sYXN0KCkubGFzdFBvaW50KCk7IH0KIAotICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdSZWN0
OyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRS
dWxlIHJ1bGUpIGNvbnN0OwotICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpOworICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRpbmdSZWN0OyB9CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0OworICAgICAgICB2b2lk
IHRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpOwogICAgICAgICB2b2lkIHRyYW5z
Zm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwogCi0gICAgICAgIHZvaWQgbW92ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRy
b2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFkZEJlemll
ckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZEFy
Y1RvKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzKTsK
KyAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgICAgICB2b2lk
IGFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkUXVhZEN1
cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCk7CisgICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQy
LCBjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgR3Jh
cGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBmbG9hdCByYWRpdXMpOwogICAgICAg
ICB2b2lkIGNsb3NlU3VicGF0aCgpOwotICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxv
YXRQb2ludCYgcCwgZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wg
YW50aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIp
OwotICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKTsKKyAgICAgICAg
dm9pZCBhZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGZsb2F0IGEsIGZsb2F0IGIs
IGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpOworICAgICAgICB2b2lk
IGFkZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKTsKKyAgICAgICAgdm9pZCBhZGRFbGxpcHNl
KGNvbnN0IEdyYXBoaWNzUmVjdCYgcik7CiAgICAgICAgIHZvaWQgYXBwbHkodm9pZCogaW5mbywg
UGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3Q7CiAKICAgICBwcml2YXRlOgpAQCAt
MTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhZGRUb1N1
YnBhdGgoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSk7CiAKICAgICAgICAgUGxhdGZvcm1Q
YXRoRWxlbWVudHMgbV9lbGVtZW50czsKLSAgICAgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdSZWN0
OworICAgICAgICBHcmFwaGljc1JlY3QgbV9ib3VuZGluZ1JlY3Q7CiAgICAgICAgIFZlY3RvcjxQ
YXRoUG9seWdvbj4gbV9zdWJwYXRoczsKICAgICAgICAgUGF0aFBvaW50IG1fY3VycmVudFBvaW50
OwogICAgICAgICBib29sIG1fcGVuTGlmdGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJl
ZEJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCwxNiArMzk4LDE2IEBAIHN0YXRpYyBM
T05HIG5vcm1hbGl6ZVBoYXNlKExPTkcgcGhhc2UsIGkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TE9ORz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBoYXNlKSAlIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihsaW1pdCkpOwogfQogCi12b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9y
aWdTb3VyY2VTaXplKQordm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRT
aXplJiBvcmlnU291cmNlU2l6ZSkKIHsKICAgICBpZiAoIW1fcGl4ZWxzKQogICAgICAgICByZXR1
cm47CiAgICAgY3R4dC0+ZHJhd0JpdG1hcFBhdHRlcm4odGhpcywgdGlsZVJlY3RJbiwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBvcmlnU291
cmNlU2l6ZSk7CiB9CiAKLXZvaWQgU2hhcmVkQml0bWFwOjpkcmF3UGF0dGVybihIREMgaGRjLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKK3ZvaWQgU2hhcmVkQml0bWFwOjpkcmF3
UGF0dGVybihIREMgaGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBj
b25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6
ZSkKIHsKICAgICBpZiAoIW1fcGl4ZWxzKQogICAgICAgICByZXR1cm47CkBAIC00MjAsNyArNDIw
LDcgQEAgdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEhEQyBoZGMsIAogICAgIGludCBi
bXBXaWR0aCA9IHdpZHRoKCk7CiAgICAgaW50IGJtcEhlaWdodCA9IGhlaWdodCgpOwogCi0gICAg
RmxvYXRSZWN0IHRpbGVSZWN0KHRpbGVSZWN0SW4pOworICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVj
dCh0aWxlUmVjdEluKTsKICAgICBpZiAoYm1wV2lkdGggIT0gb3JpZ1NvdXJjZVNpemUud2lkdGgo
KSkgewogICAgICAgICBkb3VibGUgcmF0ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oYm1wV2lkdGgp
IC8gb3JpZ1NvdXJjZVNpemUud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHRlbXAgPSB0aWxlUmVj
dC53aWR0aCgpICogcmF0ZTsKQEAgLTQ0NiwxMiArNDQ2LDEyIEBAIHZvaWQgU2hhcmVkQml0bWFw
OjpkcmF3UGF0dGVybihIREMgaGRjLCAKIAogICAgIEFmZmluZVRyYW5zZm9ybSB0ZiA9IHBhdHRl
cm5UcmFuc2Zvcm0gKiB0cmFuc2Zvcm07CiAKLSAgICBGbG9hdFJlY3QgdHJSZWN0ID0gdGYubWFw
UmVjdChkZXN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHRyUmVjdCA9IHRmLm1hcFJlY3QoZGVz
dFJlY3QpOwogCiAgICAgUkVDVCBjbGlwQm94OwogICAgIGludCBjbGlwVHlwZSA9IEdldENsaXBC
b3goaGRjLCAmY2xpcEJveCk7CiAgICAgaWYgKGNsaXBUeXBlID09IFNJTVBMRVJFR0lPTikKLSAg
ICAgICAgdHJSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoY2xpcEJveC5sZWZ0LCBjbGlwQm94LnRv
cCwgY2xpcEJveC5yaWdodCAtIGNsaXBCb3gubGVmdCwgY2xpcEJveC5ib3R0b20gLSBjbGlwQm94
LnRvcCkpOworICAgICAgICB0clJlY3QuaW50ZXJzZWN0KEdyYXBoaWNzUmVjdChjbGlwQm94Lmxl
ZnQsIGNsaXBCb3gudG9wLCBjbGlwQm94LnJpZ2h0IC0gY2xpcEJveC5sZWZ0LCBjbGlwQm94LmJv
dHRvbSAtIGNsaXBCb3gudG9wKSk7CiAgICAgZWxzZSBpZiAoY2xpcFR5cGUgPT0gQ09NUExFWFJF
R0lPTikgewogICAgICAgICBPd25QdHI8SFJHTj4gY2xpcFJnbiA9IGFkb3B0UHRyKENyZWF0ZVJl
Y3RSZ24oMCwgMCwgMCwgMCkpOwogICAgICAgICBpZiAoR2V0Q2xpcFJnbihoZGMsIGNsaXBSZ24u
Z2V0KCkpID4gMCkgewpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgU2hhcmVkQml0bWFwOjpkcmF3
UGF0dGVybihIREMgaGRjLCAKICAgICAgICAgICAgICAgICBHZXRSZWdpb25EYXRhKGNsaXBSZ24u
Z2V0KCksIHJlZ2lvbkRhdGFTaXplLCByZWdpb25EYXRhLmRhdGEoKSk7CiAgICAgICAgICAgICAg
ICAgUkVDVCogcmVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UkVDVCo+KHJlZ2lvbkRhdGFbMF0uQnVm
ZmVyKTsKICAgICAgICAgICAgICAgICBmb3IgKERXT1JEIGkgPSAwOyBpIDwgcmVnaW9uRGF0YVsw
XS5yZGgubkNvdW50OyArK2ksICsrcmVjdCkKLSAgICAgICAgICAgICAgICAgICAgdHJSZWN0Lmlu
dGVyc2VjdChGbG9hdFJlY3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJl
Y3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOworICAgICAgICAgICAgICAgICAg
ICB0clJlY3QuaW50ZXJzZWN0KEdyYXBoaWNzUmVjdChyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJl
Y3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRt
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1BvaW50OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CkBAIC04MiwxMSArODIsMTEgQEAgcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBjbGlwQml0bWFwKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGJvb2wgdXNlQWxwaGEpOwogCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4
dCwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKTsKLSAg
ICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKKyAgICB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdElu
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKICAgICB2b2lkIGRyYXcoSERDLCBjb25z
dCBJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihIREMsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291
cmNlU2l6ZSk7CisgICAgdm9pZCBkcmF3UGF0dGVybihIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291
cmNlU2l6ZSk7CiAKICAgICBjbGFzcyBEQ1Byb3ZpZGVyIHsKICAgICBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNF
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hl
LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9p
ZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0ZpeGVkUGl0
Y2ggPSAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBGX0ZJWEVEX1BJVENIKTsKIH0KIAotRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25z
dAorR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhp
Y3NSZWN0KCk7CiB9CiAgICAgCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvRmxvYXRSZWN0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVjdFd4LmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9GbG9hdFJlY3RXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBL
ZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotI2luY2x1ZGUgPHd4L2RlZnMuaD4K
LSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBV
U0UoV1hHQykKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IHd4UmVjdDJERG91YmxlJiByKQot
ICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50KHIubV94LCByLm1feSkpCi0gICAgLCBtX3NpemUo
RmxvYXRTaXplKHIubV93aWR0aCwgci5tX2hlaWdodCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3Bl
cmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdAotewotICAgIHJldHVybiB3eFJlY3QyRERvdWJs
ZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotfQotI2VuZGlmCi0KLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFd4LmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgRm9udDo6Y2FuRXhwYW5k
QXJvdW5kSWRlb2dyYXBoc0luQ28KIH0KIAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIC8vIHByZXBhcmUgREMKICAgICBDb2xvciBjb2xv
ciA9IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcKICAgICBncmFwaGljc0NvbnRleHQt
PnJlc3RvcmUoKTsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAjaWYgT1MoV0lORE9XUykg
fHwgT1MoREFSV0lOKQogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBpdCh0aGlzLCBydW4pOwpA
QCAtOTYsMTcgKzk2LDE3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFQKICNpZiBPUyhXSU5ET1dTKQogICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CiAg
ICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRo
KSwgcG9pbnQueSgpLCByb3VuZGYodG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZih0
b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KHBvaW50LngoKSArIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50LnkoKSwg
cm91bmRmKHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYodG90YWxXaWR0aCAtIGFm
dGVyV2lkdGgpLCBoKTsKICNlbHNlCiAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSBpdC50b3Rh
bFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxvb3JmKHRv
dGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYodG90YWxXaWR0aCAtIGJl
Zm9yZVdpZHRoKSAtIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAg
ICByZXR1cm4gR3JhcGhpY3NSZWN0KHBvaW50LngoKSArIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0
ZXJXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBm
bG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKICNlbmRpZgogICAgIH0gCiAgICAg
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9vcmYoYmVmb3JlV2lkdGgpLCBw
b2ludC55KCksIHJvdW5kZihhZnRlcldpZHRoKSAtIGZsb29yZihiZWZvcmVXaWR0aCksIGgpOwor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsgZmxvb3JmKGJlZm9yZVdpZHRoKSwg
cG9pbnQueSgpLCByb3VuZGYoYWZ0ZXJXaWR0aCkgLSBmbG9vcmYoYmVmb3JlV2lkdGgpLCBoKTsK
ICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogI2VuZGlmCiB9CiAKQEAgLTExOCw3ICsxMTgsNyBA
QCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0dXJuIDA7
CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICNpZiBPUyhXSU5ET1dTKSB8fCBPUyhEQVJX
SU4pCiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2Vz
ICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgpAQCAtMTQ5LDE0ICsxNDksMTQgQEAgdm9pZCBG
b250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogICAgICAgICBzdGFydFggKz0gYmVm
b3JlV2lkdGg7CiAKICAgICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93IGF0IHRoZSBzdGFy
dGluZyBwb2ludCByZXR1cm5lZCBpbiBzdGFydFguCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50
KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQoc3RhcnRY
LCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGdseXBoQnVm
ZmVyLCBzdGFydFBvaW50KTsKICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbmRpZgog
fQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVm
ZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4s
IGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNl
LCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBo
QnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBw
b2ludC55KCkpKTsKIH0KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFj
a0ZvbnRzLCBHbHlwaE92ZXJmbG93KikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFBsYXRmb3JtR3JhZGllbnQgR3JhZGllbnQ6
OnBsYXRmb3JtR3JhZGkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFkaWVudDo6ZmlsbChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFw
aGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTEyLDcgKzEx
Miw3IEBAIHB1YmxpYzoKICAgICB3eFdpbmRvd0RDKiBjb250ZXh0OwogI2VuZGlmCiAgICAgaW50
IG1zd0RDU3RhdGVJRDsKLSAgICBGbG9hdFNpemUgY3VycmVudFNjYWxlOworICAgIEdyYXBoaWNz
U2l6ZSBjdXJyZW50U2NhbGU7CiAgICAgd3hSZWdpb24gZ3RrQ3VycmVudENsaXBSZ247CiAgICAg
d3hSZWdpb24gZ3RrUGFpbnRDbGlwUmduOwogfTsKQEAgLTIzMCw4ICsyMzAsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKLSAg
ICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBwb2ludDE7
CisgICAgR3JhcGhpY3NQb2ludCBwMiA9IHBvaW50MjsKICAgICAKICAgICBzYXZlKCk7CiAgICAg
bV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tu
ZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKHN0cm9rZVN0eWxlKCkpKSk7CkBAIC0yNjIs
NyArMjYyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbgogICAg
IHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29u
KHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50
aWFsaWFzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBu
cG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFz
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4
MCw3ICsyODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAg
ICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHln
b24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlh
bGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTEs
NyArMjkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKAogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzMzLDcgKzMz
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBHcmFwaGljc1JlY3Qm
IHIpCiB7CiAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRDbGlwcGluZ1JlZ2lvbihyLngoKSwgci55
KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CkBAIC00MDcsMTkgKzQwNywxOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0CiAjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4s
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dChjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29s
IHByaW50aW5nKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHNhdmUoKTsKLSAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gb3JpZ2luICsgRmxv
YXRTaXplKHdpZHRoLCAwKTsKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvaW50ID0gb3JpZ2luICsg
R3JhcGhpY3NTaXplKHdpZHRoLCAwKTsKICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBlbih3eFBl
bihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgd3hTT0xJRCkpOwogICAgIG1fZGF0
YS0+Y29udGV4dC0+RHJhd0xpbmUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgZW5kUG9pbnQueCgp
LCBlbmRQb2ludC55KCkpOwogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxv
YXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4s
IGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgc3dpdGNo
IChzdHlsZSkgewogICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6CkBAIC00
ODYsNyArNDg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZQog
I2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNjYWxlKSAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUm
IHNjYWxlKSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9kYXRhLT5jb250ZXh0KSB7CkBA
IC00OTcsMTMgKzQ5NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxv
YXRTCiAjZW5kaWYKIH0KIAotRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6Y3VycmVudFNjYWxl
KCkKK0dyYXBoaWNzU2l6ZSBHcmFwaGljc0NvbnRleHQ6OmN1cnJlbnRTY2FsZSgpCiB7CiAgICAg
cmV0dXJuIG1fZGF0YS0+Y3VycmVudFNjYWxlOwogfQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ01v
ZGUpCitHcmFwaGljc1JlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEdyYXBoaWNzUmVjdCYgZnJlY3QsIFJvdW5kaW5nTW9kZSkKIHsKLSAgICBGbG9hdFJlY3Qg
cmVzdWx0OworICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAKICAgICB3eENvb3JkIHggPSAod3hD
b29yZClmcmVjdC54KCk7CiAgICAgd3hDb29yZCB5ID0gKHd4Q29vcmQpZnJlY3QueSgpOwpAQCAt
NjI2LDEzICs2MjYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UAogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhp
Y3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KEZsb2F0
U2l6ZSBjb25zdCYsIGZsb2F0LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coR3JhcGhpY3NTaXplIGNvbnN0JiwgZmxvYXQs
IENvbG9yIGNvbnN0JiwgQ29sb3JTcGFjZSkKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCiB9
CkBAIC02NTIsMTIgKzY1MiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5CiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOyAK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmLCBmbG9hdCkKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCiB9CkBAIC02OTIsNyArNjky
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCByZWN0
KHIpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHIpOwogICAgIGNsaXAocmVjdCk7CiAgICAgUGF0
aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzUmVjdFd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc1JlY3RXeC5jcHAJKHJl
dmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9G
bG9hdFJlY3RXeC5jcHA6OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc1JlY3RXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKworI2luY2x1ZGUgPHd4L2RlZnMuaD4KKyNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoV1hHQykKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0
KGNvbnN0IHd4UmVjdDJERG91YmxlJiByKQorICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50KHIu
bV94LCByLm1feSkpCisgICAgLCBtX3NpemUoRmxvYXRTaXplKHIubV93aWR0aCwgci5tX2hlaWdo
dCkpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdAor
eworICAgIHJldHVybiB3eFJlY3QyRERvdWJsZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkp
OworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0dyYXBoaWNzUmVjdFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc1JlY3RXeC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NSZWN0V3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiAj
aW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+CkBAIC0zMiwxMyAr
MzIsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXWEdDKQotRmxvYXRSZWN0
OjpGbG9hdFJlY3QoY29uc3Qgd3hSZWN0MkREb3VibGUmIHIpCi0gICAgOiBtX2xvY2F0aW9uKEZs
b2F0UG9pbnQoci5tX3gsIHIubV95KSkKLSAgICAsIG1fc2l6ZShGbG9hdFNpemUoci5tX3dpZHRo
LCByLm1faGVpZ2h0KSkKK0dyYXBoaWNzUmVjdDo6R3JhcGhpY3NSZWN0KGNvbnN0IHd4UmVjdDJE
RG91YmxlJiByKQorICAgIDogbV9sb2NhdGlvbihHcmFwaGljc1BvaW50KHIubV94LCByLm1feSkp
CisgICAgLCBtX3NpemUoR3JhcGhpY3NTaXplKHIubV93aWR0aCwgci5tX2hlaWdodCkpCiB7CiB9
CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdAorR3JhcGhpY3NS
ZWN0OjpvcGVyYXRvciB3eFJlY3QyRERvdWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHd4UmVj
dDJERG91YmxlKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMjAgKzk5LDIwIEBAIFBh
c3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRl
c3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOwogICAgIGNvbnRleHQtPmRy
YXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
cmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CiAgICAgaW1hZ2VDb3B5LT5kcmF3UGF0
dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xv
clNwYWNlLCBvcCwgZGVzdFJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgpAQCAtODcsNyArODcsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbml0UGxhdGZv
cm1EYXRhKCkKIAogLy8gRHJhd2luZyBSb3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFtX3NvdXJj
ZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjQsMTIgKzEyNCwxMiBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgZmxvYXQgc2NhbGVY
ID0gc3JjLndpZHRoKCkgLyBkc3Qud2lkdGgoKTsKICAgICBmbG9hdCBzY2FsZVkgPSBzcmMuaGVp
Z2h0KCkgLyBkc3QuaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9
IGRzdDsKLSAgICBGbG9hdFNpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7CisgICAg
R3JhcGhpY3NSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkc3Q7CisgICAgR3JhcGhpY3NTaXplIHNl
bGZTaXplID0gY3VycmVudEZyYW1lU2l6ZSgpOwogICAgIAogICAgIGlmIChzcmMuc2l6ZSgpICE9
IHNlbGZTaXplKSB7Ci0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQ
b2ludChkc3QueCgpIC0gc3JjLngoKSAvIHNjYWxlWCwgZHN0LnkoKSAtIHNyYy55KCkgLyBzY2Fs
ZVkpKTsKLSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEZsb2F0U2l6ZShzZWxmU2l6
ZS53aWR0aCgpIC8gc2NhbGVYLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHNjYWxlWSkpOworICAgICAg
ICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQoZHN0LngoKSAtIHNy
Yy54KCkgLyBzY2FsZVgsIGRzdC55KCkgLSBzcmMueSgpIC8gc2NhbGVZKSk7CisgICAgICAgIGFk
anVzdGVkRGVzdFJlY3Quc2V0U2l6ZShHcmFwaGljc1NpemUoc2VsZlNpemUud2lkdGgoKSAvIHNj
YWxlWCwgc2VsZlNpemUuaGVpZ2h0KCkgLyBzY2FsZVkpKTsKICAgICB9CiAKICAgICBnYy0+Q2xp
cChkc3QueCgpLCBkc3QueSgpLCBkc3Qud2lkdGgoKSwgZHN0LmhlaWdodCgpKTsKQEAgLTE3Nyw3
ICsxNzcsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAg
ICAgIG9ic2VydmVyLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCkKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0KQogewogI2lmIFVTRShXWEdDKQog
ICAgIHd4R0NEQyogY29udGV4dCA9ICh3eEdDREMqKWN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L1BhdGhXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJQ
YXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxp
ZXIuaCIgCkBAIC03NSw3ICs3NSw3IEBAIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICBtX3BhdGggPSBuZXcgd3hHcmFwaGljc1BhdGgoKnBhdGgubV9wYXRoKTsKIH0KIAotYm9vbCBQ
YXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1bGUgcnVs
ZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IGNvbnN0IFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1f
cGF0aCkgewpAQCAtODksMTIgKzg5LDEyIEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG8KICAgICByZXR1cm4gZmFsc2U7IAogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NT
aXplJikKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OmJv
dW5kaW5nUmVjdCgpIGNvbnN0IAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNv
bnN0IAogeyAKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKSB7CkBAIC0xMDIsMTYgKzEw
MiwxNiBAQCBGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QgCiAgICAgfQogI2Vu
ZGlmCiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBw
bGllciogYXBwbGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1Jl
Y3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
KTsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3QKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tl
U3R5bGVBcHBsaWVyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0CiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBQ
YXRoOjpjbGVhcigpIAogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSAKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50KSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKQpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW4KICNlbmRpZgogfQog
Ci12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgCit2b2lkIFBh
dGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgCiB7CiAjaWYgVVNFKFdY
R0MpCiAgICAgaWYgKG1fcGF0aCkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFBhdGg6OmFkZExp
bmVUbyhjb25zdCBGbG9hdFBvaW50JiBwCiAjZW5kaWYKIH0KIAotdm9pZCBQYXRoOjphZGRRdWFk
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sLCBjb25zdCBGbG9hdFBvaW50JiBlbmQp
IAordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9s
LCBjb25zdCBHcmFwaGljc1BvaW50JiBlbmQpIAogewogI2lmIFVTRShXWEdDKQogICAgIGlmICht
X3BhdGgpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25z
dCBGbG9hdFBvaQogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbDIsIGNvbnN0
IEZsb2F0UG9pbnQmIGVuZCkgCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgR3Jh
cGhpY3NQb2ludCYgY29udHJvbDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2wyLCBjb25z
dCBHcmFwaGljc1BvaW50JiBlbmQpIAogewogI2lmIFVTRShXWEdDKQogICAgIGlmIChtX3BhdGgp
CkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZs
b2F0UAogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGZsb2F0IHJhZGl1cykgCit2b2lkIFBh
dGg6OmFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQyLCBmbG9hdCByYWRpdXMpIAogewogI2lmIFVTRShXWEdDKQogICAgIGlmICht
X3BhdGgpCkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKSAKICNl
bmRpZgogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dp
c2UpIAordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGZsb2F0
IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgY2xvY2t3aXNl
KSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKQpAQCAtMTkzLDcgKzE5Myw3IEBA
IHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW4KICNlbmRpZgogfQogCi12
b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSAKK3ZvaWQgUGF0aDo6YWRk
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIAogewogI2lmIFVTRShXWEdDKQogICAgIGlm
IChtX3BhdGgpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdAogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIAordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCkgCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0aCkKQEAgLTIzOSwxMSAr
MjM5LDExIEBAIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKICAgICByZXR1cm4g
IWlzRW1wdHkoKTsKIH0KIAotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAK
K0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCiB7CiAgICAgLy8gRklY
TUU6IHJldHVybiBjdXJyZW50IHBvaW50IG9mIHN1YnBhdGguCiAgICAgZmxvYXQgcXVpZXROYU4g
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0dXJuIEZs
b2F0UG9pbnQocXVpZXROYU4sIHF1aWV0TmFOKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChx
dWlldE5hTiwgcXVpZXROYU4pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVG
b250RGF0YVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHVuaWNv
ZGUvdWNoYXIuaD4KQEAgLTEzNyw5ICsxMzcsOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRl
cm1pbmVQaXRjaCgpCiAgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKIH0KIAot
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBj
b25zdAorR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KEdseXBoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KCk7CiB9CiAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRlICJBc3Nl
cnRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJ
bWFnZVJlZiBpbWFnZSkKICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKIH0K
IAotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRT
aXplIHNjYWxlKQorRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFn
ZSwgR3JhcGhpY3NTaXplIHNjYWxlKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVy
biAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1T
Y3JlZW5HdGsuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5NSwx
MCBAQCBzdGF0aWMgR2RrU2NyZWVuKiBnZXRTY3JlZW4oR3RrV2lkZ2V0KiB3CiAgICAgcmV0dXJu
IGd0a193aWRnZXRfaGFzX3NjcmVlbih3aWRnZXQpID8gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHdp
ZGdldCkgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5S
ZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRn
ZXQpCiB7CiAgICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgR3RrV2lkZ2V0KiBjb250YWluZXIg
PSBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpKTsKICAgICBpZiAoY29udGFpbmVyKQpAQCAtMTA2LDI1ICsxMDYsMjUgQEAgRmxvYXRS
ZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiAKICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9
IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVlbl9nZXRfZGVmYXVs
dCgpOwogICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIGdpbnQgbW9uaXRvciA9IGNvbnRhaW5l
ciA/IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dpZGdldF9n
ZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKIAogICAgIEdka1JlY3RhbmdsZSBnZW9tZXRyeTsK
ICAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRvciwgJmdl
b21ldHJ5KTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoZ2VvbWV0cnkueCwgZ2VvbWV0cnkueSwg
Z2VvbWV0cnkud2lkdGgsIGdlb21ldHJ5LmhlaWdodCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVj
dChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0
KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCitH
cmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBp
ZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7CiAKICNpZiBQTEFURk9STShYMTEpCiAgICAgR3RrV2lkZ2V0KiBjb250
YWluZXIgPSBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpKTsKICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBpZiAoIWd0a193
aWRnZXRfZ2V0X3JlYWxpemVkKGNvbnRhaW5lcikpCiAgICAgICAgIHJldHVybiBzY3JlZW5SZWN0
KHdpZGdldCk7CkBAIC0xNDEsOSArMTQxLDkgQEAgRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJl
Y3QoV2lkZ2V0KiB3aQogICAgIGludCB4UmVzID0gWEdldFdpbmRvd1Byb3BlcnR5KEdES19ESVNQ
TEFZX1hESVNQTEFZKGRpc3BsYXkpLCBHREtfV0lORE9XX1hXSU5ET1cocm9vdFdpbmRvdyksIHhw
cm9wZXJ0eSwKICAgICAgICAgMCwgNCwgRkFMU0UsIFhBX0NBUkRJTkFMLCAmcmV0VHlwZSwgJnJl
dEZvcm1hdCwgJnJldE5JdGVtcywgJnJldEFmdGVyLCAoZ3VjaGFyKiopJndvcmtBcmVhUG9zKTsK
IAotICAgIEZsb2F0UmVjdCByZWN0OworICAgIEdyYXBoaWNzUmVjdCByZWN0OwogICAgIGlmICh4
UmVzID09IFN1Y2Nlc3MgJiYgd29ya0FyZWFQb3MgIT0gTlVMTCAmJiByZXRUeXBlID09IFhBX0NB
UkRJTkFMICYmIHJldE5JdGVtcyA9PSA0ICYmIHJldEZvcm1hdCA9PSAzMikgewotICAgICAgICBy
ZWN0ID0gRmxvYXRSZWN0KHdvcmtBcmVhUG9zWzBdLCB3b3JrQXJlYVBvc1sxXSwgd29ya0FyZWFQ
b3NbMl0sIHdvcmtBcmVhUG9zWzNdKTsKKyAgICAgICAgcmVjdCA9IEdyYXBoaWNzUmVjdCh3b3Jr
QXJlYVBvc1swXSwgd29ya0FyZWFQb3NbMV0sIHdvcmtBcmVhUG9zWzJdLCB3b3JrQXJlYVBvc1sz
XSk7CiAgICAgICAgIC8vIHJlY3QgY29udGFpbnMgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUg
d2hvbGUgc2NyZWVuIG5vdCBqdXN0IGluIHRoZSBtb25pdG9yCiAgICAgICAgIC8vIGNvbnRhaW5p
bmcgdGhlIHdpZGdldCwgc28gd2UgaW50ZXJzZWN0IGl0IHdpdGggdGhlIG1vbml0b3IgcmVjdGFu
Z2xlLgogICAgICAgICByZWN0LmludGVyc2VjdChzY3JlZW5SZWN0KHdpZGdldCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3ICs0ODQsNyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
eWxlKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5V
TEwpOwogCiAgICAgSW50U2l6ZSBhcnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5lclJlY3QuaGVp
Z2h0KCkpOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb3NpdGlvbihpbm5lclJlY3QubG9jYXRpb24o
KSk7CisgICAgR3JhcGhpY3NQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigp
KTsKICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCiAgICAgICAgIGFycm93
UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw3ICs0OTQsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKFJlCiAgICAgSW50UmVjdCBpY29uUmVjdChy
ZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAgICAgICAg
ICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUp
IC8gMiwKICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25T
aXplKTsKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIG1fcGFuZWxDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NS
ZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHBhaW50
R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC01MzcsOCArNTM3LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVNsaWRlclRyYQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OwogCi0gICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHIpLCBtX3BhbmVsQ29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVj
dChJbnRSZWN0KHIueCgpLCByLnkoKSArIChyLmhlaWdodCgpIC0gbV9tZWRpYVNsaWRlckhlaWdo
dCkgLyAyLAorICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChyKSwgbV9wYW5lbENv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFwaGlj
c1JlY3QoSW50UmVjdChyLngoKSwgci55KCkgKyAoci5oZWlnaHQoKSAtIG1fbWVkaWFTbGlkZXJI
ZWlnaHQpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndp
ZHRoKCksIG1fbWVkaWFTbGlkZXJIZWlnaHQpKSwgbV9zbGlkZXJDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOwpAQCAtNjAz
LDcgKzYwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHUKIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0g
ICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChyZWN0
KSwgbV9wYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
Q3VycmVudFRpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNv
bnRleHQ7CiAKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIG1fcGFuZWxD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoR3JhcGhp
Y3NSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludEJ1
dHRvbihHcmFwCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwgImFy
cm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKIAogICAgIGRvdWJsZSBhcnJvd1Np
emUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpICogYXJyb3dTY2FsaW5n
OwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBh
cnJvd1NpemUpIC8gMiwKKyAgICBHcmFwaGljc1BvaW50IGFycm93UG9pbnQocmVjdC54KCkgKyAo
cmVjdC53aWR0aCgpIC0gYXJyb3dTaXplKSAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8gMik7CiAKICAgICBpZiAo
ZmxhZ3MgJiBHVEtfU1RBVEVfRkxBR19BQ1RJVkUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFn
SW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUpCitEcmFnSW1hZ2VSZWYgc2NhbGVE
cmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBHcmFwaGljc1NpemUpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gaW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmVlbi5o
IgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCkBAIC00MSwxNCArNDEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9h
dFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0
KikKIHsKICAgICBCU2NyZWVuIHNjcmVlbjsKICAgICAvLyBGSVhNRTogV2UgYXNzdW1lIHRoaXMg
c2NyZWVuIGlzIHZhbGlkCi0gICAgcmV0dXJuIEZsb2F0UmVjdChzY3JlZW4uRnJhbWUoKSk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdChzY3JlZW4uRnJhbWUoKSk7CiB9CiAKLUZsb2F0UmVjdCBz
Y3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlbkF2
YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHVz
ZSB0aGUgZ2V0X2Rlc2tiYXJfZnJhbWUoKSBmdW5jdGlvbgogICAgIC8vIGZyb20gSW50ZXJmYWNl
RGVmcy5oIHRvIG1ha2UgdGhpcyBzbWFsbGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShSZXRhaW5QdHI8TlNJbWFnZT4pCiAgICAgLy8g
ZGVsZXRlIGl0LiBJdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gaXQgZmFsbHMgb3V0IG9mIHNjb3Bl
LgogfQogCi1SZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1h
Z2U+IGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCitSZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFn
SW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAg
ICAgTlNTaXplIG9yaWdpbmFsU2l6ZSA9IFtpbWFnZS5nZXQoKSBzaXplXTsKICAgICBOU1NpemUg
bmV3U2l6ZSA9IE5TTWFrZVNpemUoKG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndpZHRoKCkp
LCAob3JpZ2luYWxTaXplLmhlaWdodCAqIHNjYWxlLmhlaWdodCgpKSk7CkBAIC0yMTEsNyArMjEx
LDcgQEAgc3RhdGljIHZvaWQgZHJhd0F0UG9pbnQoTlNTdHJpbmcgKnN0cmluZwogICAgICAgICBb
W3RleHRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNl
XSBnZXRSZWQ6JnJlZCBncmVlbjomZ3JlZW4gYmx1ZTomYmx1ZSBhbHBoYTomYWxwaGFdOwogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VSR0JBKHJlZCAqIDI1NSwgZ3Jl
ZW4gKiAyNTUsIGJsdWUgKiAyNTUsIGFscGhhICogMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7
CiAgICAgICAgIAotICAgICAgICB3ZWJDb3JlRm9udC5kcmF3VGV4dCgmZ3JhcGhpY3NDb250ZXh0
LCBydW4sIEZsb2F0UG9pbnQocG9pbnQueCwgKGZsaXBwZWQgPyBwb2ludC55IDogKC0xICogcG9p
bnQueSkpKSk7CisgICAgICAgIHdlYkNvcmVGb250LmRyYXdUZXh0KCZncmFwaGljc0NvbnRleHQs
IHJ1biwgR3JhcGhpY3NQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50LnkgOiAoLTEgKiBw
b2ludC55KSkpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghZmxpcHBlZCkKICAgICAgICAgICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKIAotI2ltcG9ydCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0
ICJHcmFwaGljc1JlY3QuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcu
aCIKICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTUxLDEzICs1MSwxMyBAQCBib29sIHNjcmVlbklzTW9u
b2Nocm9tZShXaWRnZXQqKQogLy8gVGhlc2UgZnVuY3Rpb25zIHNjYWxlIGJldHdlZW4gc2NyZWVu
IGFuZCBwYWdlIGNvb3JkaW5hdGVzIGJlY2F1c2UgSmF2YVNjcmlwdC9ET00gb3BlcmF0aW9ucyAK
IC8vIGFzc3VtZSB0aGF0IHRoZSBzY3JlZW4gYW5kIHRoZSBwYWdlIHNoYXJlIHRoZSBzYW1lIGNv
b3JkaW5hdGUgc3lzdGVtLgogCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkK
K0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIE5TV2luZG93
ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gOiBu
aWw7CiAgICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW5Gb3JXaW5kb3cod2luZG93KSBmcmFt
ZV0sIHdpbmRvdyk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCog
d2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQp
CiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lk
Z2V0KCkgd2luZG93XSA6IG5pbDsKICAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbkZvcldp
bmRvdyh3aW5kb3cpIHZpc2libGVGcmFtZV0sIHdpbmRvdyk7CkBAIC04NSwxOCArODUsMTggQEAg
c3RhdGljIENHRmxvYXQgd2luZG93U2NhbGVGYWN0b3IoTlNXaW5kbwogI2VuZGlmCiB9CiAKLUZs
b2F0UmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmIHJlY3QsIE5TV2luZG93ICpkZXN0aW5h
dGlvbikKK0dyYXBoaWNzUmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmIHJlY3QsIE5TV2lu
ZG93ICpkZXN0aW5hdGlvbikKIHsKLSAgICBGbG9hdFJlY3QgdXNlclJlY3QgPSByZWN0OworICAg
IEdyYXBoaWNzUmVjdCB1c2VyUmVjdCA9IHJlY3Q7CiAgICAgdXNlclJlY3Quc2V0WShOU01heFko
W3NjcmVlbkZvcldpbmRvdyhkZXN0aW5hdGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC55KCkgKyB1
c2VyUmVjdC5oZWlnaHQoKSkpOyAvLyBmbGlwCiAgICAgaWYgKGRlc3RpbmF0aW9uKQogICAgICAg
ICB1c2VyUmVjdC5zY2FsZSgxIC8gd2luZG93U2NhbGVGYWN0b3IoZGVzdGluYXRpb24pKTsgLy8g
c2NhbGUgZG93bgogICAgIHJldHVybiB1c2VyUmVjdDsKIH0KIAotTlNSZWN0IHRvRGV2aWNlU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNlKQorTlNSZWN0IHRvRGV2
aWNlU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNlKQogewot
ICAgIEZsb2F0UmVjdCBkZXZpY2VSZWN0ID0gcmVjdDsKKyAgICBHcmFwaGljc1JlY3QgZGV2aWNl
UmVjdCA9IHJlY3Q7CiAgICAgaWYgKHNvdXJjZSkKICAgICAgICAgZGV2aWNlUmVjdC5zY2FsZSh3
aW5kb3dTY2FsZUZhY3Rvcihzb3VyY2UpKTsgLy8gc2NhbGUgdXAKICAgICBkZXZpY2VSZWN0LnNl
dFkoTlNNYXhZKFtzY3JlZW5Gb3JXaW5kb3coc291cmNlKSBmcmFtZV0pIC0gKGRldmljZVJlY3Qu
eSgpICsgZGV2aWNlUmVjdC5oZWlnaHQoKSkpOyAvLyBmbGlwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5H
KQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTYxLDcgKzYxLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
c3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKICNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZl
bnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsKIAotICAgIHZvaWQgaW1tZWRpYXRl
U2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7CisgICAgdm9pZCBp
bW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9uKTsK
ICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCk7CiAgICAgdm9p
ZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpOwogCi0gICAgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5l
d1Bvc2l0aW9uKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmlt
YXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pOwogCiAgICAgdm9pZCBzZXRJ
c0RyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKSB7IG1fZHJhd2luZ0ludG9MYXllciA9IGI7IH0KICAg
ICBib29sIGlzRHJhd2luZ0ludG9MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0ludG9M
YXllcjsgfQpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBhZGp1c3RT
Y3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7CiAgICAgZmxvYXQgYWRqdXN0
U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQg
YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0
IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAg
ICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0OwpAQCAtMTUyLDE1ICsxNTIs
MTUgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGxF
dmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluOwogICAgIAogICAgIENGVGltZUludGVy
dmFsIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIEZsb2F0U2l6ZSBtX292ZXJm
bG93U2Nyb2xsRGVsdGE7Ci0gICAgRmxvYXRTaXplIG1fc3RyZXRjaFNjcm9sbEZvcmNlOwotICAg
IEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7CisgICAgR3JhcGhpY3NTaXplIG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YTsKKyAgICBHcmFwaGljc1NpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7Cisg
ICAgR3JhcGhpY3NTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKIAogICAgIC8vIFJ1YmJlciBiYW5k
IHN0YXRlLgogICAgIENGVGltZUludGVydmFsIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBt
X3N0YXJ0U3RyZXRjaDsKLSAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKLSAgICBGbG9hdFNp
emUgbV9vcmlnVmVsb2NpdHk7CisgICAgR3JhcGhpY3NTaXplIG1fc3RhcnRTdHJldGNoOworICAg
IEdyYXBoaWNzUG9pbnQgbV9vcmlnT3JpZ2luOworICAgIEdyYXBoaWNzU2l6ZSBtX29yaWdWZWxv
Y2l0eTsKICAgICBUaW1lcjxTY3JvbGxBbmltYXRvck1hYz4gbV9zbmFwUnViYmVyQmFuZFRpbWVy
OwogI2VuZGlmCiAgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3JNYWMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCkBAIC05MCw3ICs5
MCw3IEBAIC0gKE5TUmVjdClib3VuZHMKICAgICBpZiAoIV9hbmltYXRvcikKICAgICAgICAgcmV0
dXJuIE5TWmVyb1JlY3Q7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlv
biA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NQ
b2ludCBjdXJyZW50UG9zaXRpb24gPSBfYW5pbWF0b3ItPmN1cnJlbnRQb3NpdGlvbigpOwogICAg
IHJldHVybiBOU01ha2VSZWN0KGN1cnJlbnRQb3NpdGlvbi54KCksIGN1cnJlbnRQb3NpdGlvbi55
KCksIDAsIDApOwogfQogCkBAIC01MTYsNyArNTE2LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1h
Yzo6c2Nyb2xsKFNjcm9sbGJhcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFu
aW1hdG9yTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgb2Zmc2V0KQordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAgICBbbV9zY3JvbGxB
bmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5dOwogICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9p
bnQob2Zmc2V0KTsKQEAgLTUzOCw3ICs1MzgsNyBAQCBmbG9hdCBTY3JvbGxBbmltYXRvck1hYzo6
YWRqdXN0U2Nyb2xsWVBvCiAgICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlv
biwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFi
bGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIH0KIAotRmxvYXRQb2ludCBTY3JvbGxBbmlt
YXRvck1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVz
dFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zaXRpb24p
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb247CkBAIC01NDYsMTIgKzU0
NiwxMiBAQCBGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RTY3JvCiAgICAgZmxv
YXQgbmV3WCA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxl
V2lkdGgoKSksIDApOwogICAgIGZsb2F0IG5ld1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9z
aXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1f
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOwogCi0gICAgcmV0dXJuIEZsb2F0
UG9pbnQobmV3WCwgbmV3WSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobmV3WCwgbmV3WSk7
CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1l
ZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9uKQogewot
ICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZO
ZWNlc3NhcnkobmV3UG9zaXRpb24pOworICAgIEdyYXBoaWNzUG9pbnQgYWRqdXN0ZWRQb3NpdGlv
biA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOwogIAogICAg
IGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQb3NYICYmIGFkanVzdGVkUG9z
aXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCiAgICAgICAgIHJldHVybjsKQEAgLTU4Myw3ICs1
ODMsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCCiAgICAgbm90
aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVk
aWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3
UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50
Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9uKQogewog
ICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcik7CiAgICAgQ0dGbG9hdCBwcm9ncmVz
cyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfcHJvZ3Jlc3NdOwpAQCAtODY1LDcg
Kzg2NSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZUdlc3R1cmVFdmUKIAogYm9v
bCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9h
dCBkZWx0YVkpCiB7Ci0gICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7CisgICAgR3JhcGhpY3NTaXpl
IGxpbWl0RGVsdGE7CiAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewog
ICAgICAgICBpZiAoZGVsdGFZIDwgMCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0
byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcApAQCAt
OTMzLDcgKzkzMyw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNtb290aFNjcm9sbFdpdGgK
ICAgICBmbG9hdCBkZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CiAKICAg
ICAvLyBSZXNldCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92
ZSBkZWx0YSBhdCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAg
bV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7CisgICAgbV9vdmVyZmxvd1Njcm9s
bERlbHRhID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRh
WCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwogICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFZ
ID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7CkBAIC05NzAsNyArOTcwLDcgQEAgdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6c21vb3RoU2Nyb2xsV2l0aAogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50
LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKQEAgLTEwNjAs
OSArMTA2MCw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNtb290aFNjcm9sbFdpdGgKICAg
ICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKG1fc3RyZXRjaFNjcm9sbEZv
cmNlLndpZHRoKCkgKyBkZWx0YVgpOwogICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uu
c2V0SGVpZ2h0KG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpICsgZGVsdGFZKTsKIAotICAg
ICAgICAgICAgRmxvYXRTaXplIGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91
bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0aWNEZWx0
YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxl
Q29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2lu
KCkpIC0gc3RyZXRjaEFtb3VudDsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2luID0g
b3JpZ09yaWdpbiArIGRhbXBlZERlbHRhOworICAgICAgICAgICAgR3JhcGhpY3NTaXplIGRhbXBl
ZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxG
b3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0
Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgb3Jp
Z09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlv
bigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsK
KyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbmV3T3JpZ2luID0gb3JpZ09yaWdpbiArIGRhbXBl
ZERlbHRhOwogCiAgICAgICAgICAgICBpZiAob3JpZ09yaWdpbiAhPSBuZXdPcmlnaW4pIHsKICAg
ICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9D
b250ZW50RWRnZShmYWxzZSk7CkBAIC0xMDg4LDcgKzEwODgsNyBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yTWFjOjpiZWdpblNjcm9sbEdlc3R1CiAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3Mg
PSBmYWxzZTsKICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwogICAgIG1fbGFz
dE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKLSAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBG
bG9hdFNpemUoKTsKKyAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKICAg
ICBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0ID0gbV9zY3JvbGxhYmxlQXJlYS0+aXNI
b3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpOwogICAgIG1fc2Nyb2xs
ZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0ID0gbV9zY3JvbGxhYmxlQXJlYS0+aXNIb3Jpem9udGFs
U2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigpOwogICAgIG1fY3VtdWxhdGl2ZUhvcml6
b250YWxTY3JvbGwgPSAwOwpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ck1hYzo6YmVnaW5TY3JvbGxHZXN0dQogICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRo
KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0Rl
bHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKIAotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YSA9IEZsb2F0U2l6ZSgpOworICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEdyYXBoaWNzU2l6
ZSgpOwogICAgIAogICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKICAg
ICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKQEAgLTExMTUsNyArMTExNSw3IEBA
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kKCkKIHsKICAgICBDRlRpbWVJ
bnRlcnZhbCB0aW1lRGVsdGEgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVw
dGltZV0gLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKICAgICBpZiAobV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2lu
Z1RpbWVvdXQpCi0gICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAg
ICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKIAogICAgIG1faW5TY3Jv
bGxHZXN0dXJlID0gZmFsc2U7CiAKQEAgLTExMjMsOSArMTEyMyw5IEBAIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdGFy
dFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgbV9z
dGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50
KCk7Ci0gICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICBtX3N0YXJ0U3RyZXRj
aCA9IEdyYXBoaWNzU2l6ZSgpOworICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9pbnQoKTsK
KyAgICBtX29yaWdWZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogCiAgICAgbV9zbmFwUnViYmVy
QmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMC82MC4wKTsKIH0KQEAgLTExNDksMTUgKzExNDks
MTUgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmRUaQogICAgIGlmICgh
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpIHsK
ICAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CiAKLSAgICAgICAgaWYgKG1fc3RhcnRT
dHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBH
cmFwaGljc1NpemUoKSkgewogICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFi
bGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNo
ID09IEZsb2F0U2l6ZSgpKSB7ICAgIAorICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09
IEdyYXBoaWNzU2l6ZSgpKSB7ICAgIAogICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRU
aW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9h
dFNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBoaWNz
U2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAg
ICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ09y
aWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZs
b2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXpl
KCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAg
ICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xMTgyLDE3ICsxMTgyLDE3IEBAIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kVGkKICAgICAgICAgICAgICAgICBt
X29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdFBv
aW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGlt
ZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAo
ZmxvYXQpdGltZURlbHRhKSksCisgICAgICAgIEdyYXBoaWNzUG9pbnQgZGVsdGEocm91bmRUb0Rl
dmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0
Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1lRGVsdGEpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVs
YXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1Zl
bG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkpOwogCiAgICAgICAgIGlmIChmYWJz
KGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAgICAgICAg
RmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CiAKICAgICAg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlKGZhbHNlKTsKICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2lu
KTsKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdU
b0NvbnRlbnRFZGdlKHRydWUpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9
IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICBHcmFwaGlj
c1NpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJl
Ym91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKICAgICAgICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGlj
RGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwpAQCAtMTIwMiwxNiArMTIwMiwxNiBAQCB2b2lk
IFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRpCiAgICAgICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLT5kaWRDb21wbGV0ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0
cmV0Y2gpKTsKIAogICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLSAg
ICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9
IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOwot
ICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1f
c3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgICAgICAgICBtX29yaWdPcmlnaW4g
PSBHcmFwaGljc1BvaW50KCk7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEdyYXBoaWNz
U2l6ZSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9zdGFydFRpbWUgPSBb
TlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgICAgIG1fc3RhcnRT
dHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NT
aXplKCk7CiAgICAgfQogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsVmlld01hYy5tbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlv
bnMuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NSZWN0LmgiCiAj
aW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOb3RJbXBs
ZW1lbnRlZC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsNyBAQCBzdGF0aWMgdm9pZCBwYWludENo
ZWNrYm94KENvbnRyb2xTdGF0ZXMgCiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZs
YXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBpbmZsYXRlZFJlY3Quc2V0
SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBjb250
ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAg
ICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7Cisg
ICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9y
KSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxh
dGVkUmVjdC55KCkpOwogICAgIH0KICAgICAKQEAgLTM0OCw3ICszNDgsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMgc3RhCiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRX
aWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBpbmZsYXRl
ZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAg
ICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0Lnko
KSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFj
dG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6
b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0Lngo
KSwgLWluZmxhdGVkUmVjdC55KCkpOwogICAgIH0KICAgICAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBz
dGF0aWMgdm9pZCBwYWludEJ1dHRvbihDb250cm9sUGFydCBwYXJ0CiAgICAgICAgICAgICBpbmZs
YXRlZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKICAg
ICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8g
em9vbUZhY3Rvcik7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0
LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9h
dFNpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOworICAgICAgICAgICAgY29udGV4dC0+c2Nh
bGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwog
ICAgICAgICB9CiAgICAgfSAKQEAgLTUzMyw3ICs1MzMsNyBAQCBzdGF0aWMgdm9pZCBwYWludFN0
ZXBwZXIoQ29udHJvbFN0YXRlcyBzCiAgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgp
IC8gem9vbUZhY3Rvcik7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLyB6
b29tRmFjdG9yKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgpLCByZWN0Lnko
KSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFj
dG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6
b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0
LnkoKSk7CiAgICAgfQogICAgIENHUmVjdCBib3VuZHMocmVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2Up
CiAgICAgZGVsZXRlIGltYWdlOwogfQogCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJh
Z0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFn
SW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAgICAgaWYg
KCFpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkhvc3RXaW5kb3cuaCIKQEAgLTg5LDE2ICs4OSwxNiBAQCBib29sIHNjcmVlbklzTW9u
b2Nocm9tZShXaWRnZXQqIHcpCiAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5z
Y3JlZW4oc2NyZWVuTnVtYmVyKHcpKS0+Y29sb3JDb3VudCgpID09IDI7CiB9CiAKLUZsb2F0UmVj
dCBzY3JlZW5SZWN0KFdpZGdldCogdykKK0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCog
dykKIHsKICAgICBRUmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21l
dHJ5KHNjcmVlbk51bWJlcih3KSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChyLngoKSwgci55KCks
IHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChyLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFp
bGFibGVSZWN0KFdpZGdldCogdykKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdp
ZGdldCogdykKIHsKICAgICBRUmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPmF2YWls
YWJsZUdlb21ldHJ5KHNjcmVlbk51bWJlcih3KSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChyLngo
KSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVj
dChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1NjcmVlblF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JlZW5RdC5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2NyZWVuUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTUyLDE2ICs1MiwxNiBAQCBzdGF0aWMgUVdp
ZGdldCogcXdpZGdldEZvclBhZ2UoY29uc3QgUGFnCiAgICAgcmV0dXJuIGZyYW1lVmlldy0+cXdp
ZGdldCgpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChjb25zdCBQYWdlKiBwYWdlKQorR3Jh
cGhpY3NSZWN0IHNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFnZSkKIHsKICAgICBRV2lkZ2V0KiBx
dyA9IHF3aWRnZXRGb3JQYWdlKHBhZ2UpOwogICAgIGlmICghcXcpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgLy8gVGFr
ZW4gZnJvbSBLR2xvYmFsU2V0dGluZ3M6OmRlc2t0b3BHZW9tZXRyeQogICAgIFFEZXNrdG9wV2lk
Z2V0KiBkdyA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpOwogICAgIGlmICghZHcpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAg
ICAgcmV0dXJuIEludFJlY3QoZHctPnNjcmVlbkdlb21ldHJ5KHF3KSk7CiB9CkBAIC03NSwxNiAr
NzUsMTYgQEAgaW50IHNjcmVlbkRlcHRoKGNvbnN0IFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIHF3
LT5kZXB0aCgpOwogfQogCi1GbG9hdFJlY3QgdXNhYmxlU2NyZWVuUmVjdChjb25zdCBQYWdlKiBw
YWdlKQorR3JhcGhpY3NSZWN0IHVzYWJsZVNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFnZSkKIHsK
ICAgICBRV2lkZ2V0KiBxdyA9IHF3aWRnZXRGb3JQYWdlKHBhZ2UpOwogICAgIGlmICghcXcpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogCiAgICAgLy8gVGFrZW4gZnJvbSBLR2xvYmFsU2V0dGluZ3M6OmRlc2t0b3BHZW9tZXRyeQog
ICAgIFFEZXNrdG9wV2lkZ2V0KiBkdyA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpOwogICAgIGlm
ICghZHcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOwogCiAgICAgcmV0dXJuIEludFJlY3QoZHctPmF2YWlsYWJsZUdlb21ldHJ5KHF3
KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VD
R1dpbi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0
aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNnQ29udGV4dEZyb21CCiAgICAgcmV0dXJuIGJpdG1hcENv
bnRleHQ7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1h
Z2UsIEZsb2F0U2l6ZSBzY2FsZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1h
Z2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSBzY2FsZSkKIHsKICAgICAvLyBGSVhNRTogZHVlIHRv
IHRoZSB3YXkgZHJhZyBpbWFnZXMgYXJlIGRvbmUgb24gd2luZG93cyB3ZSBuZWVkIAogICAgIC8v
IHRvIHByZXByb2Nlc3MgdGhlIGFscGhhIGNoYW5uZWwgPHJkYXI6Ly9wcm9ibGVtLzUwMTU5NDY+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWly
b1dpbi5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBA
IHN0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGNyZWF0ZUNhaXJvQ29udGUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoQnl0ZXMpOwogfQog
Ci1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNp
emUgc2NhbGUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdl
LCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAgICAgLy8gRklYTUU6IGR1ZSB0byB0aGUgd2F5IGRy
YWcgaW1hZ2VzIGFyZSBkb25lIG9uIHdpbmRvd3Mgd2UgbmVlZCAKICAgICAvLyB0byBwcmVwcm9j
ZXNzIHRoZSBhbHBoYSBjaGFubmVsIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQ2PgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNj
cmVlbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJIb3N0
V2luZG93LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCkBAIC05MywxMyAr
OTMsMTMgQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAjZW5kaWYK
IH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qg
c2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBNT05JVE9SSU5GT0VYIG1vbml0b3JJ
bmZvID0gbW9uaXRvckluZm9Gb3JXaWRnZXQod2lkZ2V0KTsKICAgICByZXR1cm4gbW9uaXRvcklu
Zm8ucmNNb25pdG9yOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQq
IHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0
KQogewogICAgIE1PTklUT1JJTkZPRVggbW9uaXRvckluZm8gPSBtb25pdG9ySW5mb0ZvcldpZGdl
dCh3aWRnZXQpOwogICAgIHJldHVybiBtb25pdG9ySW5mby5yY1dvcms7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiQml0bWFwSW5mby5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lkIFBvcHVw
TWVudVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTCiAgICAgSW50UmVjdCBwb3B1cFJlY3QocG9w
dXBYLCByU2NyZWVuQ29vcmRzLm1heFkoKSwgcG9wdXBXaWR0aCwgcG9wdXBIZWlnaHQpOwogCiAg
ICAgLy8gVGhlIHBvcHVwIG5lZWRzIHRvIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2YgdGhlIHNj
cmVlbiBhbmQgbm90IG92ZXJsYXAgYW55IHRvb2xiYXJzCi0gICAgRmxvYXRSZWN0IHNjcmVlbiA9
IHNjcmVlbkF2YWlsYWJsZVJlY3Qodik7CisgICAgR3JhcGhpY3NSZWN0IHNjcmVlbiA9IHNjcmVl
bkF2YWlsYWJsZVJlY3Qodik7CiAKICAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0IGdvIG9mZiB0
aGUgc2NyZWVuIHZlcnRpY2FsbHkKICAgICBpZiAocG9wdXBSZWN0Lm1heFkoKSA+IHNjcmVlbi5o
ZWlnaHQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVlbEV2
ZW50V2luLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vV2hlZWxFdmVudFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKIAotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAKQEAgLTY1LDcgKzY1LDcgQEAgc3RhdGlj
IGludCB2ZXJ0aWNhbFNjcm9sbExpbmVzKCkKICAgICByZXR1cm4gc2Nyb2xsTGluZXM7CiB9CiAK
LVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQgaFduZCwgY29uc3Qg
RmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24pCitQbGF0Zm9ybVdo
ZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChIV05EIGhXbmQsIGNvbnN0IEdyYXBoaWNzU2l6
ZSYgZGVsdGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxvY2F0aW9uKQogICAgIDogbV9pc0FjY2Vw
dGVkKGZhbHNlKQogICAgICwgbV9zaGlmdEtleShmYWxzZSkKICAgICAsIG1fY3RybEtleShmYWxz
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0RyYWdJbWFnZVdpbkNFLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9EcmFnSW1hZ2VX
aW5DRS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
Y2UvRHJhZ0ltYWdlV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZv
aWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSkKICAgICAgICAgOjpEZWxldGVP
YmplY3QoaW1hZ2UpOwogfQogCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdl
UmVmLCBGbG9hdFNpemUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVm
LCBHcmFwaGljc1NpemUpCiB7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9EcmFnSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvRHJhZ0ltYWdlV3guY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0RyYWdJbWFnZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdJbWFnZS5o
IgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDAsNyArNDAsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VS
ZWYpCiB7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1h
Z2UsIEZsb2F0U2l6ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYg
aW1hZ2UsIEdyYXBoaWNzU2l6ZSkKIHsKICAgICByZXR1cm4gaW1hZ2U7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JlZW5XeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvU2NyZWVuV3guY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NjcmVlbld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiU2NyZWVuLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIldpZGdldC5oIgogCiAjaW5jbHVkZSA8d3gvZGVm
cy5oPgpAQCAtMzYsMTcgKzM2LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRS
ZWN0IHNjYWxlU2NyZWVuUmVjdFRvV2lkZ2V0KEZsb2F0UmVjdCByZWN0LCBXaWRnZXQqKQorR3Jh
cGhpY3NSZWN0IHNjYWxlU2NyZWVuUmVjdFRvV2lkZ2V0KEdyYXBoaWNzUmVjdCByZWN0LCBXaWRn
ZXQqKQogewogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFJlY3Qgc2NhbGVXaWRnZXRSZWN0
VG9TY3JlZW4oRmxvYXRSZWN0IHJlY3QsIFdpZGdldCopCitHcmFwaGljc1JlY3Qgc2NhbGVXaWRn
ZXRSZWN0VG9TY3JlZW4oR3JhcGhpY3NSZWN0IHJlY3QsIFdpZGdldCopCiB7CiAgICAgcmV0dXJu
IHJlY3Q7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhp
Y3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAvKgogICAgIGludCBkaXNwbGF5
TnVtOwpAQCAtNTcsNyArNTcsNyBAQCBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdl
dCkKICAgICAgICAgcmV0dXJuIHRoaXNEaXNwbGF5LkdldEdlb21ldHJ5KCk7CiAgICAgfQogKi8K
LSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQog
CiBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCkBAIC03NSw3ICs3NSw3IEBAIGJvb2wg
c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiB3eENvbG91ckRp
c3BsYXkoKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRn
ZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsK
IC8qCiAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXQtPndpZGdldCgpOwpAQCAtODYsNyArODYs
NyBAQCBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpCiAgICAgICAgIC8v
cmV0dXJuIHRoaXNEaXNwbGF5LkdldENsaWVudEFyZWEoKTsKICAgICB9CiAqLyAgICAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBmbG9h
dCBzY2FsZUZhY3RvcihXaWRnZXQqKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
U2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9TY3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9u
b24ta2VybmVkLWRyYXdpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC93eGNvZGUvbm9uLWtlcm5lZC1kcmF3aW5nLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL25vbi1rZXJuZWQtZHJhd2luZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSwyMyArMjEsMjMgQEAKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovDQotDQotI2luY2x1ZGUgIkZvbnQuaCINCi0jaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCINCi0NCi0jaW5jbHVkZSA8d3gvZGVmcy5oPg0KKyAqLworCisjaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3eC9kZWZzLmg+
CiAjaW5jbHVkZSA8d3gvZGNjbGllbnQuaD4KIAogI2lmIF9fV1hHVEtfXyAmJiBVU0UoV1hHQykK
ICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CiAjaW5jbHVkZSA8
cGFuZ28vcGFuZ29jYWlyby5oPgotI2VuZGlmDQotDQotbmFtZXNwYWNlIFdlYkNvcmUgew0KLQ0K
LWV4dGVybiB2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29s
b3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsNCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitleHRlcm4gdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qgd3hDb2xv
dXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCk7CiAKICNpZiBfX1dYR1RLX18g
JiYgVVNFKFdYR0MpCiBQYW5nb0ZvbnRNYXAqIHBhbmdvRm9udE1hcCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRyYXdpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9ndGsvbm9uLWtl
cm5lZC1kcmF3aW5nLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC93eGNvZGUvZ3RrL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Myw3ICsxODMsNyBAQCBQYW5nb0dseXBoIHBhbmdvX2ZvbnRfZ2V0X2dseXBoKFBhbmdv
Rm9uCiAjZW5kaWYgLy8gVVNFKFdYR0MpCiAKIAotdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dCwgY29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQg
ZHJhd1RleHRXaXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQpCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgd3hHQ0RDKiBkYyA9IHN0
YXRpY19jYXN0PHd4R0NEQyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vbm9uLWtl
cm5lZC1kcmF3aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC93eGNvZGUvbWFjL2NhcmJvbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiA5MTAx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL25vbi1r
ZXJuZWQtZHJhd2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgpAQCAtNDEsNyArNDEs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgZHJhd1RleHRXaXRoU3BhY2luZyhH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lk
IGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwogICAg
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9ub24ta2VybmVk
LWRyYXdpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4
Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBkb3VibGUgUmFk
VG9EZWcoZG91YmxlIGRlZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgZHJhd1RleHRX
aXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29s
b3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogI2lmIFVTRShXWEdDKQogICAgIHd4
R0NEQyogZGMgPSBzdGF0aWNfY2FzdDx3eEdDREMqPihncmFwaGljc0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKTsKQEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmco
R3JhcGhpY3NDb250ZXh0CiAKICAgICAvLyBpZiB0aGUgY29udGV4dCBoYXMgYmVlbiBzY2FsZWQs
IHdlIG11c3QgbWFudWFsbHkgcmUtYXBwbHkgdGhhdCBzY2FsZQogICAgIC8vIHRvIHRoZSBIREMu
Ci0gICAgRmxvYXRTaXplIHNjYWxlID0gZ3JhcGhpY3NDb250ZXh0LT5jdXJyZW50U2NhbGUoKTsK
LSAgICBpZiAoc2NhbGUgIT0gRmxvYXRTaXplKDEuMCwgMS4wKSkgeworICAgIEdyYXBoaWNzU2l6
ZSBzY2FsZSA9IGdyYXBoaWNzQ29udGV4dC0+Y3VycmVudFNjYWxlKCk7CisgICAgaWYgKHNjYWxl
ICE9IEdyYXBoaWNzU2l6ZSgxLjAsIDEuMCkpIHsKICAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhk
YywgR01fQURWQU5DRUQpOwogICAgICAgICBYRk9STSB4Rm9ybTsKICAgICAgICAgeEZvcm0uZU0x
MSA9IHNjYWxlLndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdp
blZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
cXQvUGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIGNs
YXNzIEVsbGlwc2lzQm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgRWxsaXBz
aXNCb3goUmVuZGVyT2JqZWN0KiBvYmosIGNvbnN0IEF0b21pY1N0cmluZyYgZWxsaXBzaXNTdHIs
IElubGluZUZsb3dCb3gqIHBhcmVudCwKICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc1ZlcnRpY2FsLCBJbmxpbmVCb3gq
IG1hcmt1cEJveCkKLSAgICAgICAgOiBJbmxpbmVCb3gob2JqLCBGbG9hdFBvaW50KDAsIHkpLCB3
aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBh
cmVudCkKKyAgICAgICAgOiBJbmxpbmVCb3gob2JqLCBHcmFwaGljc1BvaW50KDAsIHkpLCB3aWR0
aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWwsIDAsIDAsIHBhcmVu
dCkKICAgICAgICAgLCBtX2hlaWdodChoZWlnaHQpCiAgICAgICAgICwgbV9zdHIoZWxsaXBzaXNT
dHIpCiAgICAgICAgICwgbV9tYXJrdXBCb3gobWFya3VwQm94KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzOSw3ICs1MzksNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRl
CiAgICAgcmV0dXJuICFyZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVy
KSk7CiB9CiAKLWJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3Vs
dChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRU
ZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVy
LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgLy8gSWYgaXQgaXMgbm90IGEgcmVj
dC1iYXNlZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFzIHRvIGJlIG5vLW9wLgogICAgIC8vIFJl
dHVybiBmYWxzZSwgc28gdGhlIGhpdCB0ZXN0IHN0b3BzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIw
LDcgQEAKICNpZm5kZWYgSGl0VGVzdFJlc3VsdF9oCiAjZGVmaW5lIEhpdFRlc3RSZXN1bHRfaAog
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIGl0IGlzIHJlY3QtYmFzZWQgaGl0IHRlc3QgYW5kIG5lZWRzIHRvIGNvbnRp
bnVlIHVudGlsIHRoZSByZWN0IGlzIGZ1bGx5CiAgICAgLy8gZW5jbG9zZWQgYnkgdGhlIGJvdW5k
YXJpZXMgb2YgYSBub2RlLgogICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChO
b2RlKiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFJlY3Qm
ID0gSW50UmVjdCgpKTsKLSAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9k
ZSosIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2
b2lkIGFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAKICAgICAvLyBJZiBtX3JlY3RCYXNl
ZFRlc3RSZXN1bHQgaXMgMCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1cm4gKm1f
cmVjdEJhc2VkVGVzdFJlc3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDI1
ICszMjcsMjUgQEAgdm9pZCBJbmxpbmVCb3g6OmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbAogICAg
ICAgICBwYXJlbnQoKS0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKIH0KIAotRmxvYXRQ
b2ludCBJbmxpbmVCb3g6OmxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKQorR3JhcGhpY3NQb2lu
dCBJbmxpbmVCb3g6OmxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKQogewogICAgIGlmICghcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UG9pbnQoeCgpLCB5KCkpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dCh4KCksIHkoKSk7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gcm9vdCgpLT5ibG9jaygpOwog
ICAgIGlmIChibG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoeCgpLCBibG9jay0+aGVpZ2h0KCkgLSBoZWlnaHQoKSAtIHko
KSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KHgoKSwgYmxvY2stPmhlaWdodCgpIC0g
aGVpZ2h0KCkgLSB5KCkpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoYmxv
Y2stPndpZHRoKCkgLSB3aWR0aCgpIC0geCgpLCB5KCkpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludChibG9jay0+d2lkdGgoKSAtIHdpZHRoKCkgLSB4KCksIHkoKSk7CiB9CiAKLXZvaWQg
SW5saW5lQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoRmxvYXRSZWN0JiByZWN0KQordm9pZCBJbmxp
bmVCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KCFyZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgcm9vdCgpLT5ibG9jaygpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVj
dCk7CiB9CiAKLUZsb2F0UG9pbnQgSW5saW5lQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCitHcmFwaGljc1BvaW50IElubGluZUJveDo6ZmxpcEZvcldyaXRp
bmdNb2RlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmICghcmVuZGVyZXIo
KS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJu
IHBvaW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBJbmxp
bmVCb3goUmVuZGVyT2JqZWN0KiBvYmosIEZsb2F0UG9pbnQgdG9wTGVmdCwgZmxvYXQgbG9naWNh
bFdpZHRoLCBib29sIGZpcnN0TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKKyAgICBJbmxpbmVCb3go
UmVuZGVyT2JqZWN0KiBvYmosIEdyYXBoaWNzUG9pbnQgdG9wTGVmdCwgZmxvYXQgbG9naWNhbFdp
ZHRoLCBib29sIGZpcnN0TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKICAgICAgICAgICAgICAgYm9v
bCBkaXJ0eSwgYm9vbCBleHRyYWN0ZWQsIGJvb2wgaXNIb3Jpem9udGFsLCBJbmxpbmVCb3gqIG5l
eHQsIElubGluZUJveCogcHJldiwgSW5saW5lRmxvd0JveCogcGFyZW50KQogICAgICAgICA6IG1f
bmV4dChuZXh0KQogICAgICAgICAsIG1fcHJldihwcmV2KQpAQCAtMjMyLDExICsyMzIsMTEgQEAg
cHVibGljOgogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgpOyB9CiAg
ICAgZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQogCi0gICAgY29u
c3QgRmxvYXRQb2ludCYgdG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQorICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQ7
IH0KIAogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBs
b2dpY2FsV2lkdGgoKSA6IGxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIGZsb2F0IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbEhlaWdodCgpIDogbG9naWNhbFdp
ZHRoKCk7IH0KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUod2lk
dGgoKSwgaGVpZ2h0KCkpOyB9CisgICAgR3JhcGhpY3NTaXplIHNpemUoKSBjb25zdCB7IHJldHVy
biBJbnRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsgfQogICAgIGZsb2F0IHJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQogICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KIApAQCAtMjcxLDcgKzI3MSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBUaGUgbG9naWNhbCBoZWlnaHQgaXMgb3VyIGV4dGVudCBpbiB0aGUgYmxvY2sgZmxv
dyBkaXJlY3Rpb24sIGkuZS4sIGhlaWdodCBmb3IgaG9yaXpvbnRhbCB0ZXh0IGFuZCB3aWR0aCBm
b3IgdmVydGljYWwgdGV4dC4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdDsK
IAotICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsKCkgPyBJbnRSZWN0KG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCksIG1fbG9naWNh
bFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3RvcExlZnQueSgpLCBtX3RvcExl
ZnQueCgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQorICAgIEdyYXBoaWNz
UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBJ
bnRSZWN0KG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCksIG1fbG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3RvcExlZnQueSgpLCBtX3RvcExlZnQueCgpLCBtX2xv
Z2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQogCiAgICAgdmlydHVhbCBpbnQgYmFzZWxp
bmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBjb25zdCB7IHJldHVybiBib3hN
b2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgbV9maXJzdExpbmUs
IGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9u
T25Db250YWluaW5nTGluZSk7IH0KICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jp
em9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRh
aW5pbmdMaW5lKTsgfQpAQCAtMzE2LDkgKzMxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7
Ci0gICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoRmxvYXRSZWN0Jik7Ci0gICAgRmxvYXRQb2lu
dCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRQb2ludCYpOworICAgIEdyYXBoaWNzUG9p
bnQgbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOworICAgIHZvaWQgZmxpcEZvcldyaXRpbmdN
b2RlKEdyYXBoaWNzUmVjdCYpOworICAgIEdyYXBoaWNzUG9pbnQgZmxpcEZvcldyaXRpbmdNb2Rl
KGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShJbnRS
ZWN0Jik7CiAgICAgSW50UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEludFBvaW50Jik7
CiAKQEAgLTMzNCw3ICszMzQsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIFJlbmRlck9iamVj
dCogbV9yZW5kZXJlcjsKIAotICAgIEZsb2F0UG9pbnQgbV90b3BMZWZ0OworICAgIEdyYXBoaWNz
UG9pbnQgbV90b3BMZWZ0OwogICAgIGZsb2F0IG1fbG9naWNhbFdpZHRoOwogICAgIAogICAgIC8v
IFNvbWUgb2YgdGhlc2UgYml0cyBhcmUgYWN0dWFsbHkgZm9yIHN1YmNsYXNzZXMgYW5kIG1vdmVk
IGhlcmUgdG8gY29tcGFjdCB0aGUgc3RydWN0dXJlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMTYgKzI1
MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXlvdXRPdmVyZmxvdyhjb25zdCBMYXlvdXRS
ZWN0JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwogICAgIHZv
aWQgc2V0VmlzdWFsT3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYsIExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKIAotICAgIEZsb2F0UmVjdCBmcmFtZVJlY3RJbmNs
dWRpbmdMaW5lSGVpZ2h0KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
KSBjb25zdAorICAgIEdyYXBoaWNzUmVjdCBmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0KExh
eW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCht
X3RvcExlZnQueCgpLCBsaW5lVG9wLCB3aWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7Ci0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QobGluZVRvcCwgbV90b3BMZWZ0LnkoKSwgbGluZUJvdHRv
bSAtIGxpbmVUb3AsIGhlaWdodCgpKTsKKyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
bV90b3BMZWZ0LngoKSwgbGluZVRvcCwgd2lkdGgoKSwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGxpbmVUb3AsIG1fdG9wTGVmdC55KCksIGxpbmVC
b3R0b20gLSBsaW5lVG9wLCBoZWlnaHQoKSk7CiAgICAgfQogICAgIAotICAgIEZsb2F0UmVjdCBs
b2dpY2FsRnJhbWVSZWN0SW5jbHVkaW5nTGluZUhlaWdodChMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKKyAgICBHcmFwaGljc1JlY3QgbG9naWNhbEZyYW1l
UmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxp
bmVCb3R0b20pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGxvZ2ljYWxM
ZWZ0KCksIGxpbmVUb3AsIGxvZ2ljYWxXaWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7Cisg
ICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QobG9naWNhbExlZnQoKSwgbGluZVRvcCwgbG9naWNh
bFdpZHRoKCksIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBk
ZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4g
bV9kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIEludFJlY3QgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdChpbnQKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZW5kUG9zID0gdGV4dFJ1
bi5sZW5ndGgoKTsKIAotICAgIEludFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxl
Y3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbFRv
cCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIEludFJlY3QgciA9IGVuY2xvc2luZ0lu
dFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBHcmFwaGljc1BvaW50KGxv
Z2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOwogCiAgICAgaW50
IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54KCkgPiBsb2dpY2FsUmlnaHQo
KSkKQEAgLTM1MCw5ICszNTAsOSBAQCBib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpCiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOwor
ICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygp
OwogICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIEZsb2F0UmVj
dCByZWN0KGJveE9yaWdpbiwgc2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgcmVjdChib3hPcmln
aW4sIHNpemUoKSk7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRpb24gJiYg
dmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBv
aW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWluZXIgLSB0
b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiAgICAgICAgIGlmICghcmVzdWx0LmFk
ZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2ludEluQ29u
dGFpbmVyLCByZWN0KSkKQEAgLTM2MSwyNiArMzYxLDI2IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6
bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0U2l6ZSBJ
bmxpbmVUZXh0Qm94OjphcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGbG9hdFJlY3QmIHRl
eHRSZWN0LCBib29sIHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwpCitHcmFw
aGljc1NpemUgSW5saW5lVGV4dEJveDo6YXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgY29uc3QgR3Jh
cGhpY3NSZWN0JiB0ZXh0UmVjdCwgYm9vbCBzdHJva2VkLCBib29sIG9wYXF1ZSwgYm9vbCBob3Jp
em9udGFsKQogewogICAgIGlmICghc2hhZG93KQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1NpemUoKTsKIAotICAgIEZsb2F0U2l6ZSBleHRyYU9m
ZnNldDsKKyAgICBHcmFwaGljc1NpemUgZXh0cmFPZmZzZXQ7CiAgICAgaW50IHNoYWRvd1ggPSBo
b3Jpem9udGFsID8gc2hhZG93LT54KCkgOiBzaGFkb3ctPnkoKTsKICAgICBpbnQgc2hhZG93WSA9
IGhvcml6b250YWwgPyBzaGFkb3ctPnkoKSA6IC1zaGFkb3ctPngoKTsKLSAgICBGbG9hdFNpemUg
c2hhZG93T2Zmc2V0KHNoYWRvd1gsIHNoYWRvd1kpOworICAgIEdyYXBoaWNzU2l6ZSBzaGFkb3dP
ZmZzZXQoc2hhZG93WCwgc2hhZG93WSk7CiAgICAgaW50IHNoYWRvd0JsdXIgPSBzaGFkb3ctPmJs
dXIoKTsKICAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAK
ICAgICBpZiAoc2hhZG93LT5uZXh0KCkgfHwgc3Ryb2tlZCB8fCAhb3BhcXVlKSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBzaGFkb3dSZWN0KHRleHRSZWN0KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNo
YWRvd1JlY3QodGV4dFJlY3QpOwogICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93Qmx1
cik7CiAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQpOwogICAgICAgICBjb250
ZXh0LT5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQtPmNsaXAoc2hhZG93UmVjdCk7CiAKLSAgICAg
ICAgZXh0cmFPZmZzZXQgPSBGbG9hdFNpemUoMCwgMiAqIHRleHRSZWN0LmhlaWdodCgpICsgbWF4
KDAuMGYsIHNoYWRvd09mZnNldC5oZWlnaHQoKSkgKyBzaGFkb3dCbHVyKTsKKyAgICAgICAgZXh0
cmFPZmZzZXQgPSBHcmFwaGljc1NpemUoMCwgMiAqIHRleHRSZWN0LmhlaWdodCgpICsgbWF4PEdy
YXBoaWNzVW5pdD4oMC4wZiwgc2hhZG93T2Zmc2V0LmhlaWdodCgpKSArIHNoYWRvd0JsdXIpOwog
ICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAgICAgfQogCkBAIC0zODgsOCAr
Mzg4LDggQEAgRmxvYXRTaXplIElubGluZVRleHRCb3g6OmFwcGx5U2hhZG93VG9HcgogICAgIHJl
dHVybiBleHRyYU9mZnNldDsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3Mo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVu
JiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lz
TWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlv
blBvaW50LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQorc3RhdGljIHZvaWQgcGFp
bnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lz
TWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zm
c2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50JiB0ZXh0T3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBi
b3hSZWN0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwgYm9vbCBob3Jp
em9udGFsKQogewogICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQtPmZpbGxDb2xvcigpOwog
ICAgIENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2UgPSBjb250ZXh0LT5maWxsQ29sb3JTcGFjZSgp
OwpAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6Z2V0RW1waGFzaXNNYXJr
UG9zaXQKIAogZW51bSBSb3RhdGlvbkRpcmVjdGlvbiB7IENvdW50ZXJjbG9ja3dpc2UsIENsb2Nr
d2lzZSB9OwogCi1zdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjb25zdCBG
bG9hdFJlY3QmIGJveFJlY3QsIFJvdGF0aW9uRGlyZWN0aW9uIGNsb2Nrd2lzZSkKK3N0YXRpYyBp
bmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVj
dCwgUm90YXRpb25EaXJlY3Rpb24gY2xvY2t3aXNlKQogewogICAgIHJldHVybiBjbG9ja3dpc2Ug
PyBBZmZpbmVUcmFuc2Zvcm0oMCwgMSwgLTEsIDAsIGJveFJlY3QueCgpICsgYm94UmVjdC5tYXhZ
KCksIGJveFJlY3QubWF4WSgpIC0gYm94UmVjdC54KCkpCiAgICAgICAgIDogQWZmaW5lVHJhbnNm
b3JtKDAsIC0xLCAxLCAwLCBib3hSZWN0LngoKSAtIGJveFJlY3QubWF4WSgpLCBib3hSZWN0Lngo
KSArIGJveFJlY3QubWF4WSgpKTsKQEAgLTUxOSw5ICs1MTksOSBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgCiAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5t
b3ZlKDAsIHN0eWxlVG9Vc2UtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDogLWxvZ2lj
YWxIZWlnaHQoKSk7CiAKLSAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVk
aW5nRmxpcHBpbmcoKTsKKyAgICBHcmFwaGljc1BvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5j
bHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZShhZGp1c3RlZFBhaW50T2Zmc2V0
LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwotICAgIEZsb2F0UmVjdCBib3hSZWN0KGJv
eE9yaWdpbiwgTGF5b3V0U2l6ZShsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCgpKSk7Cisg
ICAgR3JhcGhpY3NSZWN0IGJveFJlY3QoYm94T3JpZ2luLCBMYXlvdXRTaXplKGxvZ2ljYWxXaWR0
aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKIAogICAgIFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5l
ZFRleHQgPSBzdHlsZVRvVXNlLT5oYXNUZXh0Q29tYmluZSgpICYmIHRleHRSZW5kZXJlcigpLT5p
c0NvbWJpbmVUZXh0KCkgJiYgdG9SZW5kZXJDb21iaW5lVGV4dCh0ZXh0UmVuZGVyZXIoKSktPmlz
Q29tYmluZWQoKSA/IHRvUmVuZGVyQ29tYmluZVRleHQodGV4dFJlbmRlcmVyKCkpIDogMDsKIApA
QCAtNTM2LDcgKzUzNiw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWkKICAgICAvLyBTZXQgb3VyIGZvbnQuCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9V
c2UtPmZvbnQoKTsKIAotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiA9IEZsb2F0UG9pbnQoYm94
T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7
CisgICAgR3JhcGhpY3NQb2ludCB0ZXh0T3JpZ2luID0gR3JhcGhpY3NQb2ludChib3hPcmlnaW4u
eCgpLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKIAogICAg
IGlmIChjb21iaW5lZFRleHQpCiAgICAgICAgIGNvbWJpbmVkVGV4dC0+YWRqdXN0VGV4dE9yaWdp
bih0ZXh0T3JpZ2luLCBib3hSZWN0KTsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAgICAgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoVGV4dFJ1biwgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoJm9iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNp
c01hcmtUZXh0UnVuID0gY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJU
ZXh0UnVuIDogdGV4dFJ1bjsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgZW1waGFzaXNNYXJrVGV4
dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIGJveFJl
Y3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50
KCkpIDogdGV4dE9yaWdpbjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgZW1waGFzaXNNYXJr
VGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSAr
IGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpIDogdGV4dE9yaWdpbjsKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRleHQpCiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENsb2Nr
d2lzZSkpOwogCkBAIC03MTcsNyArNzE3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQ
YWludEluZm8mIHBhaQogCiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4s
IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciwgMSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4dFJ1biA9
IGNvbWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IHRleHRS
dW47Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBjb21i
aW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0LndpZHRoKCkgLyAy
LCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IHRleHRPcmln
aW47CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBj
b21iaW5lZFRleHQgPyBHcmFwaGljc1BvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0LndpZHRo
KCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IHRl
eHRPcmlnaW47CiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQogICAgICAgICAgICAgICAg
IGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDbG9ja3dpc2UpKTsKIApAQCAt
Nzg2LDcgKzc4Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoaW4K
ICAgICBlUG9zID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwogfQogCi12b2lk
IElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZv
bnQmIGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHls
ZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIzLDkgKzgyMyw5IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgKIAogICAgIGludCBkZWx0YVkgPSByZW5k
ZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25C
b3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgp
OwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBGbG9hdFBvaW50
IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOworICAg
IEdyYXBoaWNzUG9pbnQgbG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAt
IGRlbHRhWSk7CiAKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6
ZShtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0KSk7CisgICAgR3JhcGhpY3NSZWN0IGNsaXBSZWN0
KGxvY2FsT3JpZ2luLCBHcmFwaGljc1NpemUobV9sb2dpY2FsV2lkdGgsIHNlbEhlaWdodCkpOwog
ICAgIGZsb2F0IG1heFggPSBmbG9vcmYoY2xpcFJlY3QubWF4WCgpKTsKICAgICBjbGlwUmVjdC5z
ZXRYKGZsb29yZihjbGlwUmVjdC54KCkpKTsKICAgICBjbGlwUmVjdC5zZXRXaWR0aChtYXhYIC0g
Y2xpcFJlY3QueCgpKTsKQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50U2VsZWN0aW9uKEdyYXBoCiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9u
dCwgdGV4dFJ1biwgbG9jYWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNvbG9yU3BhY2Uo
KSwgc1BvcywgZVBvcyk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlv
bkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBi
b3hPcmlnaW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0
UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJv
eE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQ
b3MsIGludCBlbmRQb3MpCiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQ
b3MgPSBtYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwpAQCAtODUxLDcgKzg1MSw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2sKIAogICAgIGludCBkZWx0YVkgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rp
b25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRv
cCgpOwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBGbG9hdFBv
aW50IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOwor
ICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnko
KSAtIGRlbHRhWSk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgY29u
c3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMsIHN0
eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogfQogCkBAIC04NjcsMjAgKzg2NywyMCBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0CiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJvb3RJbmxpbmVCb3gqIHIgPSByb290KCk7Ci0gICAgRmxvYXRSZWN0IHJvb3RS
ZWN0KHBhaW50T2Zmc2V0LngoKSArIHItPngoKSwgcGFpbnRPZmZzZXQueSgpICsgc2VsZWN0aW9u
VG9wKCksIHItPmxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7Ci0gICAgRmxvYXRS
ZWN0IHRleHRSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCBsb2dpY2Fs
V2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCByb290UmVjdChw
YWludE9mZnNldC54KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlvblRvcCgp
LCByLT5sb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVj
dCB0ZXh0UmVjdChwYWludE9mZnNldC54KCkgKyB4KCksIHJvb3RSZWN0LnkoKSwgbG9naWNhbFdp
ZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKIAogICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+cGFpbnRDdXN0b21IaWdobGlnaHQocmVuZGVyZXIoKS0+bm9kZSgpLCB0eXBlLCB0ZXh0UmVj
dCwgcm9vdFJlY3QsIHRydWUsIGZhbHNlKTsKIH0KIAogI2VuZGlmCiAKLXZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBpbnQgZGVjbywgY29uc3QgU2hhZG93RGF0YSogc2hhZG93KQor
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIGludCBkZWNvLCBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3cpCiB7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgbG9jYWxPcmlnaW4gPSBib3hP
cmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBsb2NhbE9yaWdpbiA9IGJveE9yaWdpbjsKIAogICAg
IGZsb2F0IHdpZHRoID0gbV9sb2dpY2FsV2lkdGg7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBj
Tm9UcnVuY2F0aW9uKSB7CkBAIC05MDUsOSArOTA1LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcAogICAgIGJvb2wgc2V0Q2xpcCA9IGZhbHNlOwogICAgIGludCBl
eHRyYU9mZnNldCA9IDA7CiAgICAgaWYgKCFsaW5lc0FyZU9wYXF1ZSAmJiBzaGFkb3cgJiYgc2hh
ZG93LT5uZXh0KCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvY2FsT3JpZ2luLCBG
bG9hdFNpemUod2lkdGgsIGJhc2VsaW5lICsgMikpOworICAgICAgICBHcmFwaGljc1JlY3QgY2xp
cFJlY3QobG9jYWxPcmlnaW4sIEdyYXBoaWNzU2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7CiAg
ICAgICAgIGZvciAoY29uc3QgU2hhZG93RGF0YSogcyA9IHNoYWRvdzsgczsgcyA9IHMtPm5leHQo
KSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobG9jYWxPcmlnaW4sIEZsb2F0
U2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7CisgICAgICAgICAgICBHcmFwaGljc1JlY3Qgc2hh
ZG93UmVjdChsb2NhbE9yaWdpbiwgR3JhcGhpY3NTaXplKHdpZHRoLCBiYXNlbGluZSArIDIpKTsK
ICAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzLT5ibHVyKCkpOwogICAgICAgICAgICAg
aW50IHNoYWRvd1ggPSBpc0hvcml6b250YWwoKSA/IHMtPngoKSA6IHMtPnkoKTsKICAgICAgICAg
ICAgIGludCBzaGFkb3dZID0gaXNIb3Jpem9udGFsKCkgPyBzLT55KCkgOiAtcy0+eCgpOwpAQCAt
OTM0LDcgKzkzNCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXAK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCBzaGFkb3dYID0gaXNIb3Jpem9udGFsKCkg
PyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOwogICAgICAgICAgICAgaW50IHNoYWRvd1kgPSBp
c0hvcml6b250YWwoKSA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgpOwotICAgICAgICAgICAg
Y29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZz
ZXQpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93WCwgc2hhZG93WSAt
IGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5ibHVyKCksIHNoYWRvdy0+Y29sb3IoKSwgY29sb3JTcGFj
ZSk7CiAgICAgICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgICAgICAgICAgc2hhZG93ID0g
c2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcih1bmRlcmxpbmUsIGNvbG9yU3BhY2UpOwogICAgICAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgLy8gTGVhdmUgb25lIHBp
eGVsIG9mIHdoaXRlIGJldHdlZW4gdGhlIGJhc2VsaW5lIGFuZCB0aGUgdW5kZXJsaW5lLgotICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4u
eCgpLCBsb2NhbE9yaWdpbi55KCkgKyBiYXNlbGluZSArIDEpLCB3aWR0aCwgaXNQcmludGluZyk7
CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoR3JhcGhpY3NQb2ludChsb2Nh
bE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSArIGJhc2VsaW5lICsgMSksIHdpZHRoLCBpc1By
aW50aW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZGVjbyAmIE9WRVJMSU5FKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvdmVybGluZSwgY29sb3JTcGFjZSk7CkBA
IC05NTMsNyArOTUzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3Jh
cAogICAgICAgICBpZiAoZGVjbyAmIExJTkVfVEhST1VHSCkgewogICAgICAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IobGluZXRocm91Z2gsIGNvbG9yU3BhY2UpOwogICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2NhbE9yaWdp
bi55KCkgKyAyICogYmFzZWxpbmUgLyAzKSwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEdyYXBoaWNzUG9pbnQobG9jYWxPcmlnaW4ueCgp
LCBsb2NhbE9yaWdpbi55KCkgKyAyICogYmFzZWxpbmUgLyAzKSwgd2lkdGgsIGlzUHJpbnRpbmcp
OwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIApAQCAtOTc4LDcgKzk3OCw3IEBA
IHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0xpbmUKICAgICB9CiB9CiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0Nv
bnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBt
YXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFy
KQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBo
aWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRN
YXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29s
IGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJz
ICg1MzI3ODg3KQogICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmco
KSkKQEAgLTEwMDksNyArMTAwOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGlu
Z09yR3JhbW0KICAgICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0ICYgd2lkdGgKICAgICAgICAgaW50
IGRlbHRhWSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUo
KSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0g
c2VsZWN0aW9uVG9wKCk7CiAgICAgICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQo
KTsKLSAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdp
bi55KCkgLSBkZWx0YVkpOworICAgICAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQoYm94T3Jp
Z2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7CiAgICAgICAgIFRleHRSdW4gcnVuID0g
Y29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAgICAgLy8gRklYTUU6IENvbnZl
cnQgdGhlIGRvY3VtZW50IG1hcmtlcnMgdG8gZmxvYXQgcmVjdHMuCkBAIC0xMDIxLDcgKzEwMjEs
NyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tCiAgICAgICAgIC8v
IGRpc3BsYXkgYSB0b29sVGlwLiBXZSBkb24ndCBkbyB0aGlzIGZvciBtaXNzcGVsbGluZyBtYXJr
ZXJzLgogICAgICAgICBpZiAoZ3JhbW1hcikgewogICAgICAgICAgICAgbWFya2VyUmVjdC5tb3Zl
KC1ib3hPcmlnaW4ueCgpLCAtYm94T3JpZ2luLnkoKSk7Ci0gICAgICAgICAgICBtYXJrZXJSZWN0
ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBtYXJrZXJSZWN0ID0gcmVuZGVy
ZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobWFya2VyUmVjdCkpLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgICAgICB0b1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIo
bWFya2VyKS0+c2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMTA0MywxMCArMTA0MywxMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdP
ckdyYW1tCiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5k
ZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAg
ICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5kcmF3TGlu
ZUZvclRleHRDaGVja2luZyhGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3Jp
Z2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5lU3R5bGVG
b3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CisgICAgcHQtPmRyYXdMaW5lRm9yVGV4dENo
ZWNraW5nKEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgp
ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtl
clR5cGUobWFya2VyLT50eXBlKCkpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRl
eHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
Rm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0KiBwdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVu
dE1hcmtlciogbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7
CiAgICAgLy8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0IGFzIGZvciBzZWxlY3Rp
b24sIHNvIHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIGhpZ2hsaWdodCBhcmUgb24K
ICAgICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcgb3V0LgpA
QCAtMTA1OSw3ICsxMDU5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1h
cmtlcgogCiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0IGFzc29jaWF0
ZWQgd2l0aCB0aGlzIG1hcmtlci4gVGhlIGNvbXB1dGVkIHJlY3QgaXMgaW4gYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCiAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250
LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgSW50UG9pbnQoeCgpLCBzZWxlY3Rpb25Ub3AoKSks
IHNlbEhlaWdodCwgc1BvcywgZVBvcykpOwotICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKKyAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVh
ZChHcmFwaGljc1JlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAg
dG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdChtYXJrZXJS
ZWN0KTsKICAgICAKICAgICAvLyBPcHRpb25hbGx5IGhpZ2hsaWdodCB0aGUgdGV4dApAQCAtMTA2
OSw4ICsxMDY5LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcgog
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnB0KTsKICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHB0LCBjb2xvciwg
Y29sb3IsIDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFs
bCEKLSAgICAgICAgcHQtPmNsaXAoRmxvYXRSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55
KCkgLSBkZWx0YVksIG1fbG9naWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKLSAgICAgICAgcHQtPmRy
YXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHJ1biwgRmxvYXRQb2ludChib3hPcmlnaW4ueCgpLCBi
b3hPcmlnaW4ueSgpIC0gZGVsdGFZKSwgc2VsSGVpZ2h0LCBjb2xvciwgc3R5bGUtPmNvbG9yU3Bh
Y2UoKSwgc1BvcywgZVBvcyk7CisgICAgICAgIHB0LT5jbGlwKEdyYXBoaWNzUmVjdChib3hPcmln
aW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZLCBtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0
KSk7CisgICAgICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEdyYXBoaWNz
UG9pbnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIHNlbEhlaWdodCwg
Y29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogICAgIH0KIH0KIApAQCAt
MTA4NywxMSArMTA4NywxMSBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVw
bGFjCiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgbWFya2VyLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHN0YXJ0UG9pbnQsIGgsIHNQb3MsIGVQ
b3MpKTsKLSAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgbWFya2Vy
UmVjdCA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmtl
clJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIHRvUmVuZGVyZWREb2N1bWVudE1h
cmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiB9CiAgICAgCi12b2lk
IElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBG
b250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9j
dW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJv
eE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJhY2tn
cm91bmQpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5ub2RlKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExNTQsNyArMTE1NCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1h
cmtlcnMKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVu
ZGVybGluZShHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQordm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25z
dCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1
bmRlcmxpbmUpCiB7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCiAg
ICAgICAgIHJldHVybjsKQEAgLTExOTYsNyArMTE5Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRDb21wb3NpdGlvblVuZGUKIAogICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5l
LmNvbG9yLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIGN0eC0+c2V0
U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGN0eC0+ZHJhd0xpbmVGb3JUZXh0
KEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgbG9naWNh
bEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcyksIHdpZHRoLCB0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSk7CisgICAgY3R4LT5kcmF3TGluZUZvclRleHQoR3JhcGhpY3NQb2lu
dChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkg
LSBsaW5lVGhpY2tuZXNzKSwgd2lkdGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmlu
dGluZygpKTsKIH0KIAogaW50IElubGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnND
YXJldE9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsgLy8gZmFsc2UgZm9yIG9mZnNldCBhZnRlciBs
aW5lIGJyZWFrCiAKICAgICAvLyBOZWVkcyB0byBiZSBwdWJsaWMsIHNvIHRoZSBzdGF0aWMgcGFp
bnRUZXh0V2l0aFNoYWRvd3MoKSBmdW5jdGlvbiBjYW4gdXNlIGl0LgotICAgIHN0YXRpYyBGbG9h
dFNpemUgYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaGFkb3dEYXRhKiwgY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBzdHJva2VkLCBi
b29sIG9wYXF1ZSwgYm9vbCBob3Jpem9udGFsKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NTaXplIGFw
cGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2hhZG93
RGF0YSosIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGV4dFJlY3QsIGJvb2wgc3Ryb2tlZCwgYm9vbCBv
cGFxdWUsIGJvb2wgaG9yaXpvbnRhbCk7CiAKIHByaXZhdGU6CiAgICAgSW5saW5lVGV4dEJveCog
bV9wcmV2VGV4dEJveDsgLy8gVGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVu
ZGVyT2JqZWN0CkBAIC0xNjUsMTggKzE2NSwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgIC8vIGRlbm90ZSBubyB0cnVuY2F0aW9uICh0aGUgd2hvbGUgcnVuIHBhaW50cykgYW5k
IGZ1bGwgdHJ1bmNhdGlvbiAobm90aGluZyBwYWludHMgYXQgYWxsKS4KIAogcHJvdGVjdGVkOgot
ICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBpbnQg
c3RhcnRQb3MsIGludCBlbmRQb3MpOwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSos
IGNvbnN0IEZvbnQmLCBib29sIGJhY2tncm91bmQpOwotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlv
blVuZGVybGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9u
QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmln
aW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7
CisgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBH
cmFwaGljc1BvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wg
YmFja2dyb3VuZCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRp
b25VbmRlcmxpbmUmKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBwYWludEN1c3RvbUhp
Z2hsaWdodChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAj
ZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGludCBkZWNvcmF0aW9uLCBjb25zdCBT
aGFkb3dEYXRhKik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwot
ICAgIHZvaWQgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUq
LCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFy
a2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1l
bnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBhaW50RGVj
b3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4s
IGludCBkZWNvcmF0aW9uLCBjb25zdCBTaGFkb3dEYXRhKik7CisgICAgdm9pZCBwYWludFNlbGVj
dGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIFJl
bmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTcGVsbGluZ09yR3JhbW1h
ck1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4s
IERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFy
KTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSos
IGNvbnN0IEZvbnQmKTsKICAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIo
RG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKIAogICAgIFRleHRS
dW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSog
cHIKICAgICBib29sIGZpeGVkID0gcmVuZGVyZXItPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVy
LT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247CiAgICAgaWYgKGZpeGVkKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFu
c2Zvcm1zLgotICAgICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXco
KS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQgZml4ZWRPZmZzZXQgPSByZW5kZXJlci0+dmlldygpLT5sb2NhbFRvQWJzb2x1dGUoR3Jh
cGhpY3NQb2ludCgpLCB0cnVlKTsKICAgICAgICAgbV9wYWludE9mZnNldCA9IExheW91dFNpemUo
Zml4ZWRPZmZzZXQueCgpLCBmaXhlZE9mZnNldC55KCkpICsgb2Zmc2V0OwogICAgIH0gZWxzZQog
ICAgICAgICBtX3BhaW50T2Zmc2V0ID0gcHJldi0+bV9wYWludE9mZnNldCArIG9mZnNldDsKQEAg
LTExNyw3ICsxMTcsNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiBy
CiAjZW5kaWYKIHsKICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHJvb3QtPmNvbnRhaW5l
cigpOwotICAgIEZsb2F0UG9pbnQgYWJzQ29udGVudFBvaW50ID0gY29udGFpbmVyLT5sb2NhbFRv
QWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgR3JhcGhpY3NQb2ludCBh
YnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50
KCksIGZhbHNlLCB0cnVlKTsKICAgICBtX3BhaW50T2Zmc2V0ID0gTGF5b3V0U2l6ZShhYnNDb250
ZW50UG9pbnQueCgpLCBhYnNDb250ZW50UG9pbnQueSgpKTsKIAogICAgIGlmIChjb250YWluZXIt
Pmhhc092ZXJmbG93Q2xpcCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0
VHlwZXMuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2lmbmRlZiBMYXlv
dXRUeXBlc19oCiAjZGVmaW5lIExheW91dFR5cGVzX2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsMjIgKzQ2LDIyIEBAIHR5cGVkZWYgSW50UG9pbnQgTGF5
b3V0UG9pbnQ7CiB0eXBlZGVmIEludFNpemUgTGF5b3V0U2l6ZTsKIHR5cGVkZWYgSW50UmVjdCBM
YXlvdXRSZWN0OwogCi1pbmxpbmUgTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK2lubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3Qo
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpOwogfQogCi1pbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHApCitpbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50KGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsK
IH0KIAotaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBv
aW50JiBwKQoraW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBHcmFw
aGljc1BvaW50JiBwKQogewogICAgIHJldHVybiBmbG9vcmVkSW50UG9pbnQocCk7CiB9CiAKLWlu
bGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQor
aW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBHcmFwaGljc1NpemUm
IHMpCiB7CiAgICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChzKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVT
ZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTI3NDcsNyArMjc0Nyw3IEBA
IEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0c0YKICAgICAgICAgcmV0dXJu
IEdhcFJlY3RzKCk7CiAKICAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0cmFuc2Zv
cm1zCi0gICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFw
cGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBGbG9hdFBvaW50KCkpOworICAgIFRyYW5zZm9ybVN0YXRl
IHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVjdGlvbiwg
R3JhcGhpY3NQb2ludCgpKTsKICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWlu
ZXIsIGZhbHNlLCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUpOwogICAgIEludFBvaW50IG9mZnNldEZy
b21SZXBhaW50Q29udGFpbmVyID0gcm91bmRlZEludFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBl
ZFBvaW50KCkpOwogCkBAIC0yNzc2LDcgKzI3NzYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dFNlbGVjdGlvbihQYWludEluCiAgICAgICAgICAgICAgICAgaWYgKCFoYXNMYXllcigpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNCb3VuZHMp
OwogICAgICAgICAgICAgICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUobG9jYWxCb3VuZHMpOwot
ICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFk
KEZsb2F0UmVjdChsb2NhbEJvdW5kcyksIGxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9IGxvY2FsVG9D
b250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChsb2NhbEJvdW5kcyksIGxheWVyLT5yZW5kZXJlcigp
KS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0Jv
dW5kcy5tb3ZlKGxheWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGxheWVyLT5hZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMo
Z2FwUmVjdHNCb3VuZHMpOwpAQCAtNTczMyw3ICs1NzMzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8TAogICAgICAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChh
Y2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFic29s
dXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJCbG9jazo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgLy8gRm9yIGJs
b2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0
aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKICAgICAvLyBpbmxpbmUgYm94ZXMgYWJvdmUgYW5k
IGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3JtIGEgc2luZ2xl
IGlycmVndWxhcgpAQCAtNTc0MSwxMiArNTc0MSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGCiAgICAgaWYgKGlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24o
KSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxvd3MgdGhh
dCBhcmUgaG9yaXpvbnRhbC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ2NzgxCi0gICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxh
cHNlZE1hcmdpbkJlZm9yZSgpLAorICAgICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0KDAsIC1j
b2xsYXBzZWRNYXJnaW5CZWZvcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpICsgY29sbGFwc2VkTWFyZ2lu
QWZ0ZXIoKSk7CiAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2Fs
UmVjdCkpOwogICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpOworICAgICAgICBxdWFk
cy5hcHBlbmQoUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgwLCAw
LCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCbG9jazo6cmVjdFdp
dGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgaW50IG91dGxpbmVXaWR0aCkKQEAgLTU4NzQsMTAgKzU4NzQsMTAgQEAgSW50UmVjdCBSZW5k
ZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saQogCiAgICAgICAgICAgICBpbnQgbXlSaWdodCA9
IHggKyBjYXJldFdpZHRoOwogICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBjYWxsIGxvY2FsVG9B
YnNvbHV0ZUZvckNvbnRlbnQoKSB0d2ljZSBoZXJlLCB0b28/Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChteVJpZ2h0LCAw
KSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJz
b2x1dGUoR3JhcGhpY3NQb2ludChteVJpZ2h0LCAwKSk7CiAKICAgICAgICAgICAgIGludCBjb250
YWluZXJSaWdodCA9IGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JDb250ZW50KCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGFic0NvbnRhaW5l
clBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoY29udGFpbmVyUmlnaHQsIDApKTsK
KyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzQ29udGFpbmVyUG9pbnQgPSBsb2NhbFRvQWJz
b2x1dGUoR3JhcGhpY3NQb2ludChjb250YWluZXJSaWdodCwgMCkpOwogCiAgICAgICAgICAgICAq
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gYWJzQ29udGFpbmVyUG9pbnQueCgpIC0gYWJzUmlnaHRQ
b2ludC54KCk7CiAgICAgICAgIH0KQEAgLTU5MjAsMTIgKzU5MjAsMTIgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigp
ICYmIGN1cnItPmlzQm94KCkpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRv
UmVuZGVyQm94KGN1cnIpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAgICAgICAgICAg
ICAgIGlmIChib3gtPmxheWVyKCkpIAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5s
b2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngoKSwgYWRk
aXRpb25hbE9mZnNldC55KCkgKyBib3gtPnkoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvcyA9
IEdyYXBoaWNzUG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngoKSwgYWRkaXRpb25h
bE9mZnNldC55KCkgKyBib3gtPnkoKSk7CiAgICAgICAgICAgICAgICAgYm94LT5hZGRGb2N1c1Jp
bmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcykpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNjMyLDcgKzYzMiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgTGF5b3V0
VW5pdCBwb3NpdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAg
ICBMYXlvdXRVbml0IGRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGRl
c2lyZWRDb2x1bW5Db3VudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFk
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCkBAIC00NjEsOSArNDYxLDkgQEAgdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVj
dHMoVmVjdG9yPExheQogICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zm
c2V0LCBzaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewotICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKKyAgICBxdWFkcy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoMCwgMCwgd2lkdGgoKSwgaGVp
Z2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgpCkBA
IC00NzYsMTUgKzQ3NiwxNSBAQCB2b2lkIFJlbmRlckJveDo6dXBkYXRlTGF5ZXJUcmFuc2Zvcm0o
KQogSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CiB7CiAgICAg
SW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9
IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9z
ID0gbG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgcmVjdC5tb3ZlKGFic1Bv
cy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFF1YWQgUmVu
ZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKK0dyYXBoaWNzUXVhZCBSZW5kZXJC
b3g6OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAogewogICAgIEludFJlY3QgcmVjdCA9IGNv
bnRlbnRCb3hSZWN0KCk7Ci0gICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KHJlY3QpKTsKKyAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QocmVj
dCkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KiBjYWNoZWRPZmZz
ZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0CkBAIC00OTIsNyArNDkyLDcgQEAgSW50UmVjdCBS
ZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaQogICAgIEludFJlY3QgYm94ID0gYm9yZGVy
Qm91bmRpbmdCb3goKTsKICAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOwog
Ci0gICAgRmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IEZsb2F0UmVjdChib3gpOwor
ICAgIEdyYXBoaWNzUXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBHcmFwaGljc1JlY3QoYm94
KTsKICAgICBpZiAoY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKQogICAgICAgICBjb250
YWluZXJSZWxhdGl2ZVF1YWQubW92ZShjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXItPngo
KSwgY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyLT55KCkpOwogICAgIGVsc2UKQEAgLTgx
Nyw3ICs4MTcsNyBAQCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgUmVuZGVyQm94OjpkZXRlCiAg
ICAgICAgIHJldHVybiBCYWNrZ3JvdW5kQmxlZWROb25lOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIEZsb2F0U2l6ZSBjb250ZXh0U2NhbGluZyhz
dGF0aWNfY2FzdDxmbG9hdD4oY3RtLnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55
U2NhbGUoKSkpOworICAgIEdyYXBoaWNzU2l6ZSBjb250ZXh0U2NhbGluZyhzdGF0aWNfY2FzdDxm
bG9hdD4oY3RtLnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUoKSkpOwog
ICAgIGlmIChib3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlKGNvbnRleHRTY2FsaW5nKSkKICAg
ICAgICAgcmV0dXJuIEJhY2tncm91bmRCbGVlZFNocmlua0JhY2tncm91bmQ7CiAgICAgCkBAIC0x
MDg1LDExICsxMDg1LDExIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChj
b24KICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAgUm9v
dElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkgOiAwOwogICAgIGlmIChy
KSB7Ci0gICAgICAgIEZsb2F0UmVjdCByb290UmVjdChwYWludE9mZnNldC54KCkgKyByLT54KCks
IHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVjdGlvblRvcCgpLCByLT5sb2dpY2FsV2lkdGgoKSwg
ci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHBhaW50
T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQo
KSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByb290UmVjdChwYWludE9mZnNldC54KCkgKyByLT54
KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVjdGlvblRvcCgpLCByLT5sb2dpY2FsV2lkdGgo
KSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0
KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5o
ZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21I
aWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRUZXh0LCBm
YWxzZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdChwYWludE9m
ZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkp
OworICAgICAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwg
cGFpbnRPZmZzZXQueSgpICsgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBp
bWFnZVJlY3QsIGltYWdlUmVjdCwgYmVoaW5kVGV4dCwgZmFsc2UpOwogICAgIH0KIH0KQEAgLTEz
NTUsNyArMTM1NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3goSW5saW5lQm8K
ICAgICAgICAgYm94LT5yZW1vdmUoKTsKICAgICAgICAgYm94LT5kZXN0cm95KHJlbmRlckFyZW5h
KCkpOwogICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIHNldExvY2F0aW9u
KHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KGJveC0+eCgpLCBib3gtPnkoKSkpKTsKKyAgICAg
ICAgc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KEdyYXBoaWNzUG9pbnQoYm94LT54KCksIGJv
eC0+eSgpKSkpOwogICAgICAgICBtX2lubGluZUJveFdyYXBwZXIgPSBib3g7CiAgICAgfQogfQpA
QCAtMzQ0MCwxNCArMzQ0MCwxNCBAQCBJbnRTaXplIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdN
b2RlKGNvCiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRTaXplKG9m
ZnNldC53aWR0aCgpLCBoZWlnaHQoKSAtIG9mZnNldC5oZWlnaHQoKSkgOiBJbnRTaXplKHdpZHRo
KCkgLSBvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAotRmxvYXRQb2ludCBS
ZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikg
Y29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb247Ci0gICAg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBGbG9hdFBvaW50KHBvc2l0aW9uLngo
KSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55KCkpIDogRmxvYXRQb2ludCh3aWR0aCgpIC0gcG9zaXRp
b24ueCgpLCBwb3NpdGlvbi55KCkpOworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gR3JhcGhpY3NQb2ludChwb3NpdGlvbi54KCksIGhlaWdodCgpIC0gcG9zaXRpb24ueSgp
KSA6IEdyYXBoaWNzUG9pbnQod2lkdGgoKSAtIHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsK
IH0KIAotdm9pZCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3QmIHJlY3Qp
IGNvbnN0Cit2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEdyYXBoaWNzUmVjdCYg
cmVjdCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgIC8v
IFRoZSBjb250ZW50IGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIElnbm9yZXMgdHJhbnNmb3Jtcy4K
ICAgICBMYXlvdXRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0OwogICAgIC8vIFRoZSBj
b250ZW50IGJveCBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgY29vcmRzICh0YWtpbmcgdHJhbnNmb3Jt
cyBpbnRvIGFjY291bnQpLgotICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29u
c3Q7CisgICAgR3JhcGhpY3NRdWFkIGFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdDsKIAogICAg
IC8vIEJvdW5kcyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBSZXNwZWN0
cyB0cmFuc2Zvcm1zCiAgICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgSW50UG9pbnQqIGNh
Y2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3Q7CkBAIC0yMjgsNyArMjI4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJnaW5BZnRlcigpIGNv
bnN0IHsgcmV0dXJuIG1hcmdpbkFmdGVyKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYp
OwogICAgIAogICAgIEludFJlY3QgcmVmbGVjdGlvbkJveCgpIGNvbnN0OwogICAgIGludCByZWZs
ZWN0aW9uT2Zmc2V0KCkgY29uc3Q7CkBAIC0zOTQsOCArMzk0LDggQEAgcHVibGljOgogICAgIExh
eW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29uc3QgTGF5b3V0
UG9pbnQmKSBjb25zdDsKICAgICBJbnRTaXplIGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBJbnRT
aXplJikgY29uc3Q7CiAgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UmVjdCYpIGNvbnN0
OwotICAgIEZsb2F0UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKLSAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3QmKSBjb25zdDsKKyAg
ICBHcmFwaGljc1BvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBHcmFwaGljc1BvaW50Jikg
Y29uc3Q7CisgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0JikgY29uc3Q7
CiAgICAgSW50U2l6ZSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCkgY29uc3Q7CiAK
ICAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5k
ZXJTdHlsZSopIGNvbnN0OwpAQCAtNDA2LDcgKzQwNiw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJP
dmVyZmxvdyogaGFzUmVuZGVyT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93Lmdl
dCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0
aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9y
bWF0aW9uKEZsb2F0U2l6ZSYgLyogaW50cmluc2ljUmF0aW8gKi8sIGJvb2wmIC8qIGlzUGVyY2Vu
dGFnZUludHJpbnNpY1NpemUgKi8pIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
SW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihHcmFwaGljc1NpemUmIC8qIGludHJpbnNpY1JhdGlv
ICovLCBib29sJiAvKiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplICovKSBjb25zdCB7IH0KIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAgc3RhdGljIElu
dFJlY3QgYmFja2dyb3VuZFJlY3RBZGp1c3RlZEZvcgogICAgIEludFJlY3QgYWRqdXN0ZWRSZWN0
ID0gYm9yZGVyUmVjdDsKICAgICAvLyBXZSBuZWVkIHRvIHNocmluayB0aGUgYm9yZGVyIGJ5IG9u
ZSBkZXZpY2UgcGl4ZWwgb24gZWFjaCBzaWRlLgogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBj
b250ZXh0LT5nZXRDVE0oKTsKLSAgICBGbG9hdFNpemUgY29udGV4dFNjYWxlKHN0YXRpY19jYXN0
PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgpKSk7
CisgICAgR3JhcGhpY3NTaXplIGNvbnRleHRTY2FsZShzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnhT
Y2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUoKSkpOwogICAgIGFkanVzdGVk
UmVjdC5pbmZsYXRlWCgtY2VpbGYoMSAvIGNvbnRleHRTY2FsZS53aWR0aCgpKSk7CiAgICAgYWRq
dXN0ZWRSZWN0LmluZmxhdGVZKC1jZWlsZigxIC8gY29udGV4dFNjYWxlLmhlaWdodCgpKSk7CiAg
ICAgcmV0dXJuIGFkanVzdGVkUmVjdDsKQEAgLTE5MzYsMjYgKzE5MzYsMjYgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoRwogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lk
IGZpbmRJbm5lclZlcnRleChjb25zdCBGbG9hdFBvaW50JiBvdXRlckNvcm5lciwgY29uc3QgRmxv
YXRQb2ludCYgaW5uZXJDb3JuZXIsIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlclBvaW50LCBGbG9h
dFBvaW50JiByZXN1bHQpCitzdGF0aWMgdm9pZCBmaW5kSW5uZXJWZXJ0ZXgoY29uc3QgR3JhcGhp
Y3NQb2ludCYgb3V0ZXJDb3JuZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGlubmVyQ29ybmVyLCBj
b25zdCBHcmFwaGljc1BvaW50JiBjZW50ZXJQb2ludCwgR3JhcGhpY3NQb2ludCYgcmVzdWx0KQog
ewogICAgIC8vIElmIHRoZSBsaW5lIGJldHdlZW4gb3V0ZXIgYW5kIGlubmVyIGNvcm5lciBpcyB0
b3dhcmRzIHRoZSBob3Jpem9udGFsLCBpbnRlcnNlY3Qgd2l0aCBhIHZlcnRpY2FsIGxpbmUgdGhy
b3VnaCB0aGUgY2VudGVyLAogICAgIC8vIG90aGVyd2lzZSB3aXRoIGEgaG9yaXpvbnRhbCBsaW5l
IHRocm91Z2ggdGhlIGNlbnRlci4gVGhlIHBvaW50cyB0aGF0IGZvcm0gdGhpcyBsaW5lIGFyZSBh
cmJpdHJhcnkgKHdlIHVzZSAwLCAxMDApLgogICAgIC8vIE5vdGUgdGhhdCBpZiBmaW5kSW50ZXJz
ZWN0aW9uIGZhaWxzLCBpdCB3aWxsIGxlYXZlIHJlc3VsdCB1bnRvdWNoZWQuCiAgICAgaWYgKGZh
YnMob3V0ZXJDb3JuZXIueCgpIC0gaW5uZXJDb3JuZXIueCgpKSA+IGZhYnMob3V0ZXJDb3JuZXIu
eSgpIC0gaW5uZXJDb3JuZXIueSgpKSkKLSAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlckNv
cm5lciwgaW5uZXJDb3JuZXIsIEZsb2F0UG9pbnQoY2VudGVyUG9pbnQueCgpLCAwKSwgRmxvYXRQ
b2ludChjZW50ZXJQb2ludC54KCksIDEwMCksIHJlc3VsdCk7CisgICAgICAgIGZpbmRJbnRlcnNl
Y3Rpb24ob3V0ZXJDb3JuZXIsIGlubmVyQ29ybmVyLCBHcmFwaGljc1BvaW50KGNlbnRlclBvaW50
LngoKSwgMCksIEdyYXBoaWNzUG9pbnQoY2VudGVyUG9pbnQueCgpLCAxMDApLCByZXN1bHQpOwog
ICAgIGVsc2UKLSAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlckNvcm5lciwgaW5uZXJDb3Ju
ZXIsIEZsb2F0UG9pbnQoMCwgY2VudGVyUG9pbnQueSgpKSwgRmxvYXRQb2ludCgxMDAsIGNlbnRl
clBvaW50LnkoKSksIHJlc3VsdCk7CisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0ZXJDb3Ju
ZXIsIGlubmVyQ29ybmVyLCBHcmFwaGljc1BvaW50KDAsIGNlbnRlclBvaW50LnkoKSksIEdyYXBo
aWNzUG9pbnQoMTAwLCBjZW50ZXJQb2ludC55KCkpLCByZXN1bHQpOwogfQogCiB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgUm91
bmRlZFJlY3QmIGlubmVyQm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVzLCBib29s
IHNlY29uZEVkZ2VNYXRjaGVzKQogewotICAgIEZsb2F0UG9pbnQgcXVhZFs0XTsKKyAgICBHcmFw
aGljc1BvaW50IHF1YWRbNF07CiAKICAgICBjb25zdCBJbnRSZWN0JiBvdXRlclJlY3QgPSBvdXRl
ckJvcmRlci5yZWN0KCk7CiAgICAgY29uc3QgSW50UmVjdCYgaW5uZXJSZWN0ID0gaW5uZXJCb3Jk
ZXIucmVjdCgpOwogCi0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludChpbm5lclJlY3QubG9jYXRp
b24oKS54KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJSZWN0LndpZHRoKCkpIC8gMiwgaW5u
ZXJSZWN0LmxvY2F0aW9uKCkueSgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlubmVyUmVjdC5oZWln
aHQoKSkgLyAyKTsKKyAgICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50KGlubmVyUmVjdC5sb2Nh
dGlvbigpLngoKSArIHN0YXRpY19jYXN0PGZsb2F0Pihpbm5lclJlY3Qud2lkdGgoKSkgLyAyLCBp
bm5lclJlY3QubG9jYXRpb24oKS55KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJSZWN0Lmhl
aWdodCgpKSAvIDIpOwogCiAgICAgLy8gRm9yIGVhY2ggc2lkZSwgY3JlYXRlIGEgcXVhZCB0aGF0
IGVuY29tcGFzc2VzIGFsbCBwYXJ0cyBvZiB0aGF0IHNpZGUgdGhhdCBtYXkgZHJhdywKICAgICAv
LyBpbmNsdWRpbmcgYXJlYXMgaW5zaWRlIHRoZSBpbm5lckJvcmRlci4KQEAgLTIwMzMsMTggKzIw
MzMsMTggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZAogICAgIH0K
IAogICAgIC8vIFNxdWFyZSBvZmYgdGhlIGVuZCB3aGljaCBzaG91bGRuJ3QgYmUgYWZmZWN0ZWQg
YnkgYW50aWFsaWFzaW5nLCBhbmQgY2xpcC4KLSAgICBGbG9hdFBvaW50IGZpcnN0UXVhZFs0XTsK
KyAgICBHcmFwaGljc1BvaW50IGZpcnN0UXVhZFs0XTsKICAgICBmaXJzdFF1YWRbMF0gPSBxdWFk
WzBdOwogICAgIGZpcnN0UXVhZFsxXSA9IHF1YWRbMV07Ci0gICAgZmlyc3RRdWFkWzJdID0gc2lk
ZSA9PSBCU1RvcCB8fCBzaWRlID09IEJTQm90dG9tID8gRmxvYXRQb2ludChxdWFkWzNdLngoKSwg
cXVhZFsyXS55KCkpCi0gICAgICAgIDogRmxvYXRQb2ludChxdWFkWzJdLngoKSwgcXVhZFszXS55
KCkpOworICAgIGZpcnN0UXVhZFsyXSA9IHNpZGUgPT0gQlNUb3AgfHwgc2lkZSA9PSBCU0JvdHRv
bSA/IEdyYXBoaWNzUG9pbnQocXVhZFszXS54KCksIHF1YWRbMl0ueSgpKQorICAgICAgICA6IEdy
YXBoaWNzUG9pbnQocXVhZFsyXS54KCksIHF1YWRbM10ueSgpKTsKICAgICBmaXJzdFF1YWRbM10g
PSBxdWFkWzNdOwogICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcENvbnZleFBvbHlnb24oNCwgZmly
c3RRdWFkLCAhZmlyc3RFZGdlTWF0Y2hlcyk7CiAKLSAgICBGbG9hdFBvaW50IHNlY29uZFF1YWRb
NF07CisgICAgR3JhcGhpY3NQb2ludCBzZWNvbmRRdWFkWzRdOwogICAgIHNlY29uZFF1YWRbMF0g
PSBxdWFkWzBdOwotICAgIHNlY29uZFF1YWRbMV0gPSBzaWRlID09IEJTVG9wIHx8IHNpZGUgPT0g
QlNCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbMF0ueCgpLCBxdWFkWzFdLnkoKSkKLSAgICAgICAg
OiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSk7CisgICAgc2Vjb25kUXVhZFsx
XSA9IHNpZGUgPT0gQlNUb3AgfHwgc2lkZSA9PSBCU0JvdHRvbSA/IEdyYXBoaWNzUG9pbnQocXVh
ZFswXS54KCksIHF1YWRbMV0ueSgpKQorICAgICAgICA6IEdyYXBoaWNzUG9pbnQocXVhZFsxXS54
KCksIHF1YWRbMF0ueSgpKTsKICAgICBzZWNvbmRRdWFkWzJdID0gcXVhZFsyXTsKICAgICBzZWNv
bmRRdWFkWzNdID0gcXVhZFszXTsKICAgICAvLyBBbnRpYWxpYXNpbmcgYWZmZWN0cyB0aGUgc2Vj
b25kIHNpZGUuCkBAIC0yMDgxLDcgKzIwODEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpnZXRCb3JkZXJFZGdlCiAgICAgICAgICFob3Jpem9udGFsIHx8IGluY2x1ZGVMb2dpY2FsTGVm
dEVkZ2UpOwogfQogCi1ib29sIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0Jh
Y2tncm91bmRFZGdlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAorYm9vbCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShjb25zdCBH
cmFwaGljc1NpemUmIGNvbnRleHRTY2FsZSkgY29uc3QKIHsKICAgICBCb3JkZXJFZGdlIGVkZ2Vz
WzRdOwogICAgIGdldEJvcmRlckVkZ2VJbmZvKGVkZ2VzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjYWxj
dWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBJbnRS
ZWN0JiBwYWludFJlY3QsIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5Jik7CiAgICAgdm9pZCBnZXRC
b3JkZXJFZGdlSW5mbyhjbGFzcyBCb3JkZXJFZGdlW10sIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0
RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKSBjb25zdDsK
LSAgICBib29sIGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29uc3QgRmxvYXRTaXplJiBj
b250ZXh0U2NhbGUpIGNvbnN0OworICAgIGJvb2wgYm9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRn
ZShjb25zdCBHcmFwaGljc1NpemUmIGNvbnRleHRTY2FsZSkgY29uc3Q7CiAKICAgICBib29sIHNo
b3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCosIEltYWdlKiwgY29uc3Qgdm9p
ZCosIGNvbnN0IEludFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDcgKzY0LDcgQEAgZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVkIAogICAg
IHJldHVybiBSZW5kZXJUZXh0Ojp3aWR0aChmcm9tLCBsZW5ndGgsIGZvbnQsIHhQb3NpdGlvbiwg
ZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyQ29tYmluZVRl
eHQ6OmFkanVzdFRleHRPcmlnaW4oRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRS
ZWN0JiBib3hSZWN0KSBjb25zdAordm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6YWRqdXN0VGV4dE9y
aWdpbihHcmFwaGljc1BvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBHcmFwaGljc1JlY3QmIGJveFJl
Y3QpIGNvbnN0CiB7CiAgICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgdGV4dE9yaWdpbi5t
b3ZlKGJveFJlY3QuaGVpZ2h0KCkgLyAyIC0gY2VpbGYobV9jb21iaW5lZFRleHRXaWR0aCkgLyAy
LCBzdHlsZSgpLT5mb250KCkucGl4ZWxTaXplKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAgcHVibGljOgogICAgIFJlbmRlckNvbWJpbmVUZXh0KE5vZGUqLCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+KTsKIAogICAgIHZvaWQgY29tYmluZVRleHQoKTsKLSAgICB2b2lk
IGFkanVzdFRleHRPcmlnaW4oRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0
JiBib3hSZWN0KSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFRleHRPcmlnaW4oR3JhcGhpY3NQb2lu
dCYgdGV4dE9yaWdpbiwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3hSZWN0KSBjb25zdDsKICAgICB2
b2lkIGNoYXJhY3RlcnNUb1JlbmRlcihpbnQgc3RhcnQsIGNvbnN0IFVDaGFyKiYgY2hhcmFjdGVy
cywgaW50JiBsZW5ndGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNDb21iaW5lZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZv
bnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzYgKzQ0LDM2IEBAIGJvb2wgUmVuZGVyRGV0YWlsc01h
cmtlcjo6aXNPcGVuKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBQYXRo
IGNyZWF0ZVBhdGgoY29uc3QgRmxvYXRQb2ludCogcGF0aCkKK3N0YXRpYyBQYXRoIGNyZWF0ZVBh
dGgoY29uc3QgR3JhcGhpY3NQb2ludCogcGF0aCkKIHsKICAgICBQYXRoIHJlc3VsdDsKLSAgICBy
ZXN1bHQubW92ZVRvKEZsb2F0UG9pbnQocGF0aFswXS54KCksIHBhdGhbMF0ueSgpKSk7CisgICAg
cmVzdWx0Lm1vdmVUbyhHcmFwaGljc1BvaW50KHBhdGhbMF0ueCgpLCBwYXRoWzBdLnkoKSkpOwog
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNDsgKytpKQotICAgICAgICByZXN1bHQuYWRkTGluZVRv
KEZsb2F0UG9pbnQocGF0aFtpXS54KCksIHBhdGhbaV0ueSgpKSk7CisgICAgICAgIHJlc3VsdC5h
ZGRMaW5lVG8oR3JhcGhpY3NQb2ludChwYXRoW2ldLngoKSwgcGF0aFtpXS55KCkpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVEb3duQXJyb3dQYXRoKCkKIHsK
LSAgICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgRmxvYXRQb2ludCgwLjBmLCAwLjA3ZiksIEZs
b2F0UG9pbnQoMC41ZiwgMC45M2YpLCBGbG9hdFBvaW50KDEuMGYsIDAuMDdmKSwgRmxvYXRQb2lu
dCgwLjBmLCAwLjA3ZikgfTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1s0XSA9IHsgR3JhcGhp
Y3NQb2ludCgwLjBmLCAwLjA3ZiksIEdyYXBoaWNzUG9pbnQoMC41ZiwgMC45M2YpLCBHcmFwaGlj
c1BvaW50KDEuMGYsIDAuMDdmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAwLjA3ZikgfTsKICAgICBy
ZXR1cm4gY3JlYXRlUGF0aChwb2ludHMpOwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVVcEFycm93
UGF0aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0UG9pbnQoMC4wZiwg
MC45M2YpLCBGbG9hdFBvaW50KDAuNWYsIDAuMDdmKSwgRmxvYXRQb2ludCgxLjBmLCAwLjkzZiks
IEZsb2F0UG9pbnQoMC4wZiwgMC45M2YpIH07CisgICAgR3JhcGhpY3NQb2ludCBwb2ludHNbNF0g
PSB7IEdyYXBoaWNzUG9pbnQoMC4wZiwgMC45M2YpLCBHcmFwaGljc1BvaW50KDAuNWYsIDAuMDdm
KSwgR3JhcGhpY3NQb2ludCgxLjBmLCAwLjkzZiksIEdyYXBoaWNzUG9pbnQoMC4wZiwgMC45M2Yp
IH07CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBhdGggY3Jl
YXRlTGVmdEFycm93UGF0aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0
UG9pbnQoMS4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4xNGYsIDAuNWYpLCBGbG9hdFBvaW50KDEu
MGYsIDEuMGYpLCBGbG9hdFBvaW50KDEuMGYsIDAuMGYpIH07CisgICAgR3JhcGhpY3NQb2ludCBw
b2ludHNbNF0gPSB7IEdyYXBoaWNzUG9pbnQoMS4wZiwgMC4wZiksIEdyYXBoaWNzUG9pbnQoMC4x
NGYsIDAuNWYpLCBHcmFwaGljc1BvaW50KDEuMGYsIDEuMGYpLCBHcmFwaGljc1BvaW50KDEuMGYs
IDAuMGYpIH07CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBh
dGggY3JlYXRlUmlnaHRBcnJvd1BhdGgoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnRzWzRdID0g
eyBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuODZmLCAwLjVmKSwgRmxvYXRQ
b2ludCgwLjBmLCAxLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSB9OworICAgIEdyYXBoaWNz
UG9pbnQgcG9pbnRzWzRdID0geyBHcmFwaGljc1BvaW50KDAuMGYsIDAuMGYpLCBHcmFwaGljc1Bv
aW50KDAuODZmLCAwLjVmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAxLjBmKSwgR3JhcGhpY3NQb2lu
dCgwLjBmLCAwLjBmKSB9OwogICAgIHJldHVybiBjcmVhdGVQYXRoKHBvaW50cyk7CiB9CiAKQEAg
LTExNiw3ICsxMTYsNyBAQCBQYXRoIFJlbmRlckRldGFpbHNNYXJrZXI6OmdldFBhdGgoY29uc3Qg
CiB7CiAgICAgUGF0aCByZXN1bHQgPSBnZXRDYW5vbmljYWxQYXRoKCk7CiAgICAgcmVzdWx0LnRy
YW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZShsb2dpY2FsSGVpZ2h0KCkpKTsKLSAgICBy
ZXN1bHQudHJhbnNsYXRlKEZsb2F0U2l6ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKSk7CisgICAg
cmVzdWx0LnRyYW5zbGF0ZShHcmFwaGljc1NpemUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTcsOSArMTU3LDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRS
ZXBsYWNlZAogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBGbG9hdFJlY3QgY29udGVudFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0
IGNvbnRlbnRSZWN0OwogICAgIFBhdGggcGF0aDsKLSAgICBGbG9hdFJlY3QgcmVwbGFjZW1lbnRU
ZXh0UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAgICBGb250
IGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsKQEAgLTE3
NywxMCArMTc3LDEwIEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQK
ICAgICBmbG9hdCBsYWJlbFkgPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5sb2NhdGlvbigp
LnkoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAtIGZvbnRNZXRyaWNz
LmhlaWdodCgpKSAvIDIgKyBmb250TWV0cmljcy5hc2NlbnQoKSk7CiAgICAgY29udGV4dC0+c2V0
QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0
UHJlc3NlZFRleHRPcGFjaXR5IDogcmVwbGFjZW1lbnRUZXh0VGV4dE9wYWNpdHkpOwogICAgIGNv
bnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7
Ci0gICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgRmxvYXRQb2ludChsYWJlbFgs
IGxhYmVsWSkpOworICAgIGNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCBydW4sIEdyYXBoaWNz
UG9pbnQobGFiZWxYLCBsYWJlbFkpKTsKIH0KIAotYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiBwYXRoLCBGbG9hdFJlY3QmIHJl
cGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRX
aWR0aCkKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21l
dHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgR3JhcGhpY3NSZWN0JiBj
b250ZW50UmVjdCwgUGF0aCYgcGF0aCwgR3JhcGhpY3NSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0
LCBGb250JiBmb250LCBUZXh0UnVuJiBydW4sIGZsb2F0JiB0ZXh0V2lkdGgpCiB7CiAgICAgY29u
dGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIGNvbnRlbnRSZWN0Lm1vdmVCeShhY2N1
bXVsYXRlZE9mZnNldCk7CkBAIC0yMDAsMTIgKzIwMCwxMiBAQCBib29sIFJlbmRlckVtYmVkZGVk
T2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgcnVuID0gVGV4dFJ1bihtX3JlcGxhY2VtZW50VGV4
dCk7CiAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0aChydW4pOwogICAgIAotICAgIHJlcGxhY2Vt
ZW50VGV4dFJlY3Quc2V0U2l6ZShGbG9hdFNpemUodGV4dFdpZHRoICsgcmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luICogMiwgcmVwbGFjZW1lbnRUZXh0Um91bmRl
ZFJlY3RIZWlnaHQpKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldFNpemUoR3JhcGhpY3NT
aXplKHRleHRXaWR0aCArIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0TGVmdFJpZ2h0VGV4dE1h
cmdpbiAqIDIsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0SGVpZ2h0KSk7CiAgICAgZmxvYXQg
eCA9IChjb250ZW50UmVjdC5zaXplKCkud2lkdGgoKSAvIDIgLSByZXBsYWNlbWVudFRleHRSZWN0
LnNpemUoKS53aWR0aCgpIC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLngoKTsKICAgICBm
bG9hdCB5ID0gKGNvbnRlbnRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBsYWNlbWVudFRl
eHRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIpICsgY29udGVudFJlY3QubG9jYXRpb24oKS55KCk7
Ci0gICAgcmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKTsK
KyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQoeCwgeSkp
OwogICAgIAotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVwbGFjZW1lbnRUZXh0UmVjdCwgRmxv
YXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVudFRleHRS
b3VuZGVkUmVjdFJhZGl1cykpOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVwbGFjZW1lbnRU
ZXh0UmVjdCwgR3JhcGhpY3NTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCBy
ZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0yNTEsOSArMjUxLDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dmlld0NsZWFy
ZWQoKQogIAogYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJbk1pc3NpbmdQbHVnaW5JbmRp
Y2F0b3IoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0Owor
ICAgIEdyYXBoaWNzUmVjdCBjb250ZW50UmVjdDsKICAgICBQYXRoIHBhdGg7Ci0gICAgRmxvYXRS
ZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHJlcGxhY2VtZW50VGV4
dFJlY3Q7CiAgICAgRm9udCBmb250OwogICAgIFRleHRSdW4gcnVuKCIiKTsKICAgICBmbG9hdCB0
ZXh0V2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRvcklzUHJl
c3NlZChib29sKTsKICAgICBib29sIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKE1vdXNlRXZl
bnQqKTsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0aCYsIEZs
b2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4
dFdpZHRoKTsKKyAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgR3JhcGhpY3NSZWN0JiBjb250ZW50UmVjdCwgUGF0
aCYsIEdyYXBoaWNzUmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYsIFRleHRSdW4mLCBm
bG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIFN0cmluZyBtX3JlcGxhY2VtZW50VGV4dDsKICAgICBi
b29sIG1faGFzRmFsbGJhY2tDb250ZW50OyAvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9uIEhUTUxP
YmplY3RFbGVtZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1l
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Miw3ICs2OTIsNyBAQCBib29s
IFJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKE1vdXNlRXZlCiAgICAgICAgIGlmIChuZWVkc0xh
eW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoZXZ0LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+YnV0dG9uKCkgPT0gTGVm
dEJ1dHRvbikgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwb3MgPSBsb2NhbFRvQWJzb2x1dGUo
KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAg
ICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1fY29scywgZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCku
eCgpIC0gcG9zLngoKSk7CiAgICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1fcm93cywgZXZ0LT5h
YnNvbHV0ZUxvY2F0aW9uKCkueSgpIC0gcG9zLnkoKSk7CiAgICAgICAgICAgICBpZiAobV9jb2xz
Lm1fc3BsaXRCZWluZ1Jlc2l6ZWQgIT0gbm9TcGxpdCB8fCBtX3Jvd3MubV9zcGxpdEJlaW5nUmVz
aXplZCAhPSBub1NwbGl0KSB7CkBAIC03MDIsNyArNzAyLDcgQEAgYm9vbCBSZW5kZXJGcmFtZVNl
dDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCB8fCAoZXZ0LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldnQtPmJ1dHRvbigpID09IExl
ZnRCdXR0b24pKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlUmVzaXppbmcobV9jb2xzLCBldnQtPmFic29sdXRlTG9jYXRp
b24oKS54KCkgLSBwb3MueCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlUmVzaXppbmcobV9yb3dz
LCBldnQtPmFic29sdXRlTG9jYXRpb24oKS55KCkgLSBwb3MueSgpKTsKICAgICAgICAgICAgIGlm
IChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+YnV0dG9u
KCkgPT0gTGVmdEJ1dHRvbikgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIFJl
bmRlckltYWdlOjppbWFnZURpbWVuc2lvbnNDaGFuZ2VkCiAgICAgICAgIGlmIChyZWN0KSB7CiAg
ICAgICAgICAgICAvLyBUaGUgaW1hZ2UgY2hhbmdlZCByZWN0IGlzIGluIHNvdXJjZSBpbWFnZSBj
b29yZGluYXRlcyAocHJlLXpvb21pbmcpLAogICAgICAgICAgICAgLy8gc28gbWFwIGZyb20gdGhl
IGJvdW5kcyBvZiB0aGUgaW1hZ2UgdG8gdGhlIGNvbnRlbnRzQm94LgotICAgICAgICAgICAgcmVw
YWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoKnJlY3QsIEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXplKDEuMGYpKSwgY29udGVudEJveFJl
Y3QoKSkpOworICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1hcFJl
Y3QoKnJlY3QsIEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1faW1hZ2VSZXNvdXJjZS0+
aW1hZ2VTaXplKDEuMGYpKSwgY29udGVudEJveFJlY3QoKSkpOwogICAgICAgICAgICAgLy8gR3Vh
cmQgYWdhaW5zdCB0b28tbGFyZ2UgY2hhbmdlZCByZWN0cy4KICAgICAgICAgICAgIHJlcGFpbnRS
ZWN0LmludGVyc2VjdChjb250ZW50Qm94UmVjdCgpKTsKICAgICAgICAgfSBlbHNlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTQ3MSw3ICs0NzEsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8CiAgICAgICAgIGN1bGxl
ZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRl
ZE9mZnNldCkpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVC
b3goKSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkp
Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9hdFJlY3Qo
YWNjdW11bGF0ZWRPZmZzZXQgKyBjdXJyLT50b3BMZWZ0KCksIGN1cnItPnNpemUoKSkpKTsKKyAg
ICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBoaWNzUmVjdChh
Y2N1bXVsYXRlZE9mZnNldCArIGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSkpOwogICAg
IH0gZWxzZQogICAgICAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRlZE9mZnNl
dCwgTGF5b3V0U2l6ZSgpKSk7CiAKQEAgLTQ5OSwxMSArNDk5LDExIEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVIKICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94
KiByb290Qm94ID0gY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAg
ICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJv
eC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmly
c3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAg
ICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3Qg
cmVzdWx0OwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGN1cnJCb3gtPmlubGlu
ZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBvZmZzZXQuaGVpZ2h0
KCkgKyBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luTGVmdCgp
ICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGN1cnJCb3gtPmlu
bGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBvZmZzZXQuaGVp
Z2h0KCkgKyBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luTGVm
dCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0
LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjdXJyQm94LT5pbmxpbmVC
b3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBj
dXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFyZ2lu
Qm90dG9tKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zm
c2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjdXJyQm94LT5pbmxp
bmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0
LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFy
Z2luQm90dG9tKCkpOwogICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRS
ZWN0KHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlz
UmVuZGVySW5saW5lKCkpIHsKQEAgLTUxNiwxNCArNTE2LDE0IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVIKICAgICAgICAgICAgICAgICAgICAgUm9vdElubGluZUJv
eCogcm9vdEJveCA9IGNoaWxkTGluZS0+cm9vdCgpOwogICAgICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigp
LT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBjaGlsZExp
bmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGNoaWxkTGlu
ZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFy
Z2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZz
ZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRM
aW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dp
Y2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+
bWFyZ2luTG9naWNhbFJpZ2h0KCkpOwpAQCAtNTM2LDM3ICs1MzYsMzcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUgogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBpbnQgbG9n
aWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
RmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgY2hpbGRUZXh0LT54KCksIG9mZnNldC5oZWlnaHQo
KSArIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRo
KCkgKyBjaGlsZFRleHQtPngoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwgY2hpbGRU
ZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkg
KyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhl
aWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsIG9mZnNldC5o
ZWlnaHQoKSArIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2lj
YWxXaWR0aCgpKTsKICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVj
dChyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBS
ZW5kZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9p
ZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRz
KQogewogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIGN1bGxlZElu
bGluZUFic29sdXRlUXVhZHModGhpcywgcXVhZHMpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dC
b3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRMaW5lQm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3Qo
Y3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1
cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChs
b2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0g
ICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgpKSk7Cisg
ICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgpKSk7
CiAKICAgICBpZiAoY29udGludWF0aW9uKCkpCiAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNv
bHV0ZVF1YWRzKHF1YWRzKTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFi
c29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRz
KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVh
ZHMpCiB7CiAgICAgaWYgKCFjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSkgewotICAgICAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoKSkpOworICAgICAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC01ODMsMTEgKzU4MywxMSBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRCiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCog
cm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwogICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gt
PnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0
TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAg
ICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmly
c3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJl
c3VsdDsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkg
LSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBj
dXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGN1cnJCb3gt
PmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBsb2dpY2Fs
VG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luTGVmdCgpICsgY3VyckJveC0+
bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwgY3VyckJveC0+
aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhl
aWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gt
Pm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NS
ZWN0KGxvZ2ljYWxUb3AsIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJv
eC0+bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJv
eC0+bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgICAgICAg
ICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewpAQCAtNjAw
LDE0ICs2MDAsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUQog
ICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRMaW5lLT5y
b290KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9n
aWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RM
aW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFp
bmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZs
b2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChjaGlsZExpbmUt
PngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
TGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBj
aGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChsb2dpY2FsVG9wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dp
Y2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNo
aWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJp
Z2h0KCkpOwpAQCAtNjIwLDExICs2MjAsMTEgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElu
bGluZUFic29sdXRlUQogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBj
aGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RC
b3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRh
aW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29u
dGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAg
ICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KGNoaWxk
VGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGNoaWxk
VGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2Fs
SGVpZ2h0KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwg
Y2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IEdyYXBoaWNzUmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwg
Y2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTc2OCwxNSArNzY4LDE1IEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5lc0JvdW5k
aW5nQm8KICAgICAgICAgZmxvYXQgeSA9IGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZUJveCgpLT55
KCkgOiBsb2dpY2FsTGVmdFNpZGU7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gaXNIb3Jpem9udGFs
ID8gbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZSA6IGxhc3RMaW5lQm94KCktPmxv
Z2ljYWxCb3R0b20oKSAtIHg7CiAgICAgICAgIGZsb2F0IGhlaWdodCA9IGlzSG9yaXpvbnRhbCA/
IGxhc3RMaW5lQm94KCktPmxvZ2ljYWxCb3R0b20oKSAtIHkgOiBsb2dpY2FsUmlnaHRTaWRlIC0g
bG9naWNhbExlZnRTaWRlOwotICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdMYXlvdXRSZWN0KEZs
b2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHJlc3VsdCA9IGVuY2xvc2lu
Z0xheW91dFJlY3QoR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GbG9hdFJlY3QgUmVuZGVySW5saW5lOjpjdWxsZWRJ
bmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3QKK0dy
YXBoaWNzUmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJl
bmRlcklubGluZSogY29udGFpbmVyKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZXN1bHQ7Cisg
ICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCkBAIC03OTEsOSArNzkxLDkg
QEAgRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQm91bgogICAgICAgICAgICAg
ICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJl
bmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250
TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAg
ICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RM
aW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAgICAgICAg
ICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlm
Tm9uWmVybyhGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJy
Qm94LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94
LT5tYXJnaW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KSk7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhHcmFwaGljc1JlY3Qo
Y3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCks
IGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBj
dXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0
KGxvZ2ljYWxUb3AsIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJveC0+
bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJveC0+
bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0b20oKSkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0KGxvZ2ljYWxUb3AsIGN1cnJC
b3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCksIGxvZ2lj
YWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkgKyBjdXJy
Qm94LT5tYXJnaW5Cb3R0b20oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYg
KGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBk
b2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgpAQCAtODA2
LDEyICs4MDYsMTIgQEAgRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQm91bgog
ICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3Ao
KSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxl
KCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9v
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
OwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5
bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVp
Z2h0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGNoaWxkTGluZS0+
eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChjaGlsZExpbmUtPngoKSAt
IGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+
bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBjaGlsZExp
bmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChs
b2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+eSgpIC0g
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5l
LT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxk
TGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpKTsKQEAgLTgyNSw5ICs4MjUsOSBAQCBGbG9hdFJl
Y3QgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVCb3VuCiAgICAgICAgICAgICAgICAgaW50IGxv
Z2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+
c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSkt
PmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBpbnQgbG9n
aWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgp
KS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlz
SG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZs
b2F0UmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lk
dGgoKSwgbG9naWNhbEhlaWdodCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJ
Zk5vblplcm8oR3JhcGhpY3NSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRl
eHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGxv
Z2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQtPmxvZ2lj
YWxXaWR0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhH
cmFwaGljc1JlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNo
aWxkVGV4dC0+bG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTEzNDAsMTIgKzEzNDAsMTIgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmlu
Z1JlY3RzKFZlYwogICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKHRoaXMsIHJlY3Rz
LCB0b0xheW91dFNpemUoYWRkaXRpb25hbE9mZnNldCkpOwogICAgIGVsc2UgewogICAgICAgICBm
b3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1
cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nTGF5
b3V0UmVjdChGbG9hdFJlY3QoYWRkaXRpb25hbE9mZnNldC54KCkgKyBjdXJyLT54KCksIGFkZGl0
aW9uYWxPZmZzZXQueSgpICsgY3Vyci0+eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQo
KSkpKTsKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBo
aWNzUmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwgYWRkaXRpb25hbE9mZnNl
dC55KCkgKyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOwogICAg
IH0KIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgp
ICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwb3Mo
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHBvcyhhZGRpdGlv
bmFsT2Zmc2V0KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3Jy
ZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAgICAgICAgICAgaWYgKGN1cnItPmhhc0xheWVyKCkp
IAogICAgICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgpOwpAQCAtMTUz
Niw3ICsxNTM2LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZERhc2hib2FyZFJlZ2lvbnMoVgog
ICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAg
ICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsK
ICAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRYKGFic1Bvcy54KCkgKyByZWdpb24uYm91bmRzLngo
KSk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQb3MueSgpICsgcmVnaW9uLmJvdW5k
cy55KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBM
YXlvdXRVbml0IG1hcmdpbkVuZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFk
PiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+
Jik7CiAKICAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJP
YmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCkBAIC05OCwxMiArOTgsMTIgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIEZsb2F0UmVjdCBjdWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25z
dCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGN1bGxl
ZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsK
ICAgICBJbnRSZWN0IGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25z
dDsKICAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0OwogICAg
IElubGluZUJveCogY3VsbGVkSW5saW5lTGFzdExpbmVCb3goKSBjb25zdDsKICAgICB2b2lkIGN1
bGxlZElubGluZUFic29sdXRlUmVjdHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZl
Y3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIGN1bGxlZElubGluZUFi
c29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxGbG9hdFF1
YWQ+Jik7CisgICAgdm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJlbmRlcklu
bGluZSogY29udGFpbmVyLCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYpOwogCiAgICAgdm9pZCBhZGRD
aGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9j
dXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgpAQCAtNzQyLDE1ICs3NDIsMTUgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVy
TGF5ZXI6OnBlcnNwZQogICAgIHJldHVybiB0OwogfQogCi1GbG9hdFBvaW50IFJlbmRlckxheWVy
OjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CitHcmFwaGljc1BvaW50IFJlbmRlckxheWVyOjpw
ZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5oYXNUcmFu
c2Zvcm0oKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzUG9pbnQoKTsKIAogICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJC
b3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSByZW5kZXJlcigpLT5zdHlsZSgpOwogCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc3R5bGUtPnBl
cnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC53aWR0aCgpKSwKKyAg
ICByZXR1cm4gR3JhcGhpY3NQb2ludChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCkuY2FsY0Zs
b2F0VmFsdWUoYm9yZGVyQm94LndpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
LT5wZXJzcGVjdGl2ZU9yaWdpblkoKS5jYWxjRmxvYXRWYWx1ZShib3JkZXJCb3guaGVpZ2h0KCkp
KTsKIH0KIApAQCAtMTEyNCw3ICsxMTI0LDcgQEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVy
Q29vcmRzKGNvbnN0IAogICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYmICghYW5j
ZXN0b3JMYXllciB8fCBhbmNlc3RvckxheWVyID09IHJlbmRlcmVyKCktPnZpZXcoKS0+bGF5ZXIo
KSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGZpeGVkIGxheWVyJ3MgY29udGFpbmVyIGlzIHRoZSBy
b290LCBqdXN0IGFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3LiBXZSBjYW4gb2J0YWluIHRo
aXMgYnkgY2FsbGluZwogICAgICAgICAvLyBsb2NhbFRvQWJzb2x1dGUoKSBvbiB0aGUgUmVuZGVy
Vmlldy4KLSAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpLCB0cnVlKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBhYnNQb3Mg
PSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludCgpLCB0cnVlKTsKICAg
ICAgICAgbG9jYXRpb24gKz0gZmxvb3JlZEludFNpemUoYWJzUG9zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTEzNjUsNyArMTM2NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
KGludCB4LCBpbnQgeSkKICAgICAgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52
YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCiAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAotICAgICAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VN
b3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgICAgIEdyYXBo
aWNzUXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gR3JhcGhpY3NRdWFkKHJlY3RGb3JS
ZXBhaW50KTsKICAgICAgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCiAgICAgICAgICAgICBxdWFk
Rm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRl
UXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKICAgICAgICAgZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VN
b3VzZU1vdmVFdmVudCk7CkBAIC0xNDAxLDcgKzE0MDEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpz
Y3JvbGxSZWN0VG9WaXNpYmxlKGNvCiAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZy
b20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KICAg
ICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICAgICAgQVNTRVJUKGJveCk7
Ci0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gYm94LT5sb2NhbFRvQWJzb2x1dGUoKTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBib3gtPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAg
ICAgICBhYnNQb3MubW92ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5ib3JkZXJUb3AoKSk7CiAK
ICAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoYWJzUG9zLngoKSArIHNjcm9s
bFhPZmZzZXQoKSwgYWJzUG9zLnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgYm94LT5jbGllbnRXaWR0
aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsKQEAgLTI5MDQsMTAgKzI5MDQsMTAgQEAgc3RhdGlj
IGRvdWJsZSBjb21wdXRlWk9mZnNldChjb25zdCBIaXRUZQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIC8vIEZsYXR0ZW4gdGhlIHBvaW50IGludG8gdGhlIHRhcmdldCBwbGFuZQotICAgIEZsb2F0
UG9pbnQgdGFyZ2V0UG9pbnQgPSB0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpOworICAgIEdy
YXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQgPSB0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpOwog
ICAgIAogICAgIC8vIE5vdyBtYXAgdGhlIHBvaW50IGJhY2sgdGhyb3VnaCB0aGUgdHJhbnNmb3Jt
LCB3aGljaCBjb21wdXRlcyBaLgotICAgIEZsb2F0UG9pbnQzRCBiYWNrbWFwcGVkUG9pbnQgPSB0
cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQz
RCh0YXJnZXRQb2ludCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBiYWNrbWFwcGVkUG9pbnQgPSB0
cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1hcFBvaW50KEdyYXBoaWNzUG9p
bnQzRCh0YXJnZXRQb2ludCkpOwogICAgIHJldHVybiBiYWNrbWFwcGVkUG9pbnQueigpOwogfQog
CkBAIC0yOTI0LDcgKzI5MjQsNyBAQCBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZT4gUmVuCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSB3ZSBuZWVkIHRvIG1ha2UgdHJhbnNmb3JtIHN0YXRlLCB0aGVuIGJhc2UgaXQgb2ZmIG9mIGhp
dFRlc3RQb2ludCwKICAgICAgICAgLy8gd2hpY2ggaXMgcmVsYXRpdmUgdG8gcm9vdExheWVyLgot
ICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6Y3JlYXRl
KGhpdFRlc3RQb2ludCwgRmxvYXRRdWFkKGhpdFRlc3RSZWN0KSk7CisgICAgICAgIHRyYW5zZm9y
bVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFBvaW50LCBH
cmFwaGljc1F1YWQoaGl0VGVzdFJlY3QpKTsKICAgICAgICAgY29udmVydFRvTGF5ZXJDb29yZHMo
cm9vdExheWVyLCBvZmZzZXQpOwogICAgIH0KICAgICAKQEAgLTM0OTEsNyArMzQ5MSw3IEBAIElu
dFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJlY3QoKSAKICAgICBSZW5kZXJMYXllciog
Y2xpcHBpbmdSb290TGF5ZXIgPSBjbGlwcGluZ1Jvb3QoKTsKICAgICBJbnRSZWN0IGxheWVyQm91
bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwogICAgIGNh
bGN1bGF0ZVJlY3RzKGNsaXBwaW5nUm9vdExheWVyLCByZW5kZXJWaWV3LT5kb2N1bWVudFJlY3Qo
KSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJl
Y3QpOwotICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFF1YWQoZm9yZWdyb3VuZFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOworICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fi
c29sdXRlUXVhZChHcmFwaGljc1F1YWQoZm9yZWdyb3VuZFJlY3QpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOwogfQogCiBJbnRSZWN0IFJlbmRlckxheWVyOjpzZWxmQ2xpcFJlY3QoKSBjb25zdApA
QCAtMzUwMCw3ICszNTAwLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6c2VsZkNsaXBSZWN0KCkg
Y29ucwogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RMYXllciA9IGNsaXBwaW5nUm9vdCgp
OwogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVj
dCwgb3V0bGluZVJlY3Q7CiAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcHBpbmdSb290TGF5ZXIsIHJl
bmRlclZpZXctPmRvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZv
cmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCk7Ci0gICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVy
LT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChiYWNrZ3JvdW5kUmVj
dCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVy
LT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChiYWNrZ3JvdW5k
UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmFk
ZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBJbnRSZWN0JiBib3VuZHMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDI1LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGxheWVy
IGhhcyBhIC13ZWJraXQtcGVyc3BlY3RpdmUuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNm
b3JtIGhhcyB0aGUgcGVyc3BlY3RpdmUtb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHBlcnNwZWN0aXZlVHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBw
ZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcGVyc3BlY3RpdmVP
cmlnaW4oKSBjb25zdDsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQ
cmVzZXJ2ZTNEOyB9CiAgICAgYm9vbCBoYXMzRFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNmb3JtICYmICFtX3RyYW5zZm9ybS0+aXNBZmZpbmUoKTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcgbGF5ZXIs
IHJvb3RMYXllciBpcyB0aGUgbGF5ZXIgaXRzZWxmLgogICAgICAgICBJbnRSZWN0IHBhcmVudENs
aXBSZWN0ID0gbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNlc3Rvciwg
dHJ1ZSk7CiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludEluZm86OmluZmlu
aXRlUmVjdCgpKTsKLSAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9u
KEZsb2F0UG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXll
clBhcmVudExvY2F0aW9uKSk7CisgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5zZXRQ
b3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAocGFyZW50Q2xpcFJlY3QubG9jYXRpb24oKSAtIGdy
YXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwogICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdM
YXllci0+c2V0U2l6ZShwYXJlbnRDbGlwUmVjdC5zaXplKCkpOwogCiAgICAgICAgIC8vIGJhY2tn
cm91bmRSZWN0IGlzIHJlbGF0aXZlIHRvIGNvbXBBbmNlc3Rvciwgc28gc3VidHJhY3QgZGVsdGFY
L2RlbHRhWSB0byBnZXQgYmFjayB0byBsb2NhbCBjb29yZHMuCkBAIC00MDUsNyArNDA1LDcgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICBncmFwaGlj
c0xheWVyUGFyZW50TG9jYXRpb24gPSBwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpOwogICAgIH0K
IAotICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsgKHJlbGF0
aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2Nh
dGlvbikpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQb2ludCgp
ICsgKHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQ
YXJlbnRMb2NhdGlvbikpOwogICAgIAogICAgIEludFNpemUgb2xkT2Zmc2V0RnJvbVJlbmRlcmVy
ID0gbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKICAgICBtX2dyYXBoaWNz
TGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihsb2NhbENvbXBvc2l0aW5nQm91bmRzLmxvY2F0
aW9uKCkgLSBJbnRQb2ludCgpKTsKQEAgLTQxNCw4ICs0MTQsOCBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgaWYgKG9sZE9mZnNldEZyb21SZW5kZXJlciAh
PSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKQogICAgICAgICBtX2dyYXBo
aWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgIAotICAgIEZsb2F0U2l6ZSBvbGRTaXpl
ID0gbV9ncmFwaGljc0xheWVyLT5zaXplKCk7Ci0gICAgRmxvYXRTaXplIG5ld1NpemUgPSByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzLnNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgb2xkU2l6ZSA9
IG1fZ3JhcGhpY3NMYXllci0+c2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBuZXdTaXplID0gcmVs
YXRpdmVDb21wb3NpdGluZ0JvdW5kcy5zaXplKCk7CiAgICAgaWYgKG9sZFNpemUgIT0gbmV3U2l6
ZSkgewogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CiAgICAgICAg
IC8vIEEgYm91bmRzIGNoYW5nZSB3aWxsIGFsbW9zdCBhbHdheXMgcmVxdWlyZSByZWRpc3BsYXku
IFVzdWFsbHkgdGhhdCByZWRpc3BsYXkKQEAgLTQyOCw3ICs0MjgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgSW50UmVjdCBjbGlwcGluZ0JveDsKICAg
ICBpZiAobV9jbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIGNsaXBwaW5nQm94ID0gY2xpcEJveCh0
b1JlbmRlckJveChyZW5kZXJlcigpKSk7Ci0gICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludCgpICsgKGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2NhbENvbXBv
c2l0aW5nQm91bmRzLmxvY2F0aW9uKCkpKTsKKyAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRQ
b3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2Fs
Q29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX2NsaXBwaW5nTGF5ZXIt
PnNldFNpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5z
ZXRPZmZzZXRGcm9tUmVuZGVyZXIoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIEludFBvaW50KCkp
OwogICAgIH0KQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR3JhcGhpY3NMCiAgICAgICAgICAgICBtX21hc2tMYXllci0+c2V0U2l6ZShtX2dyYXBoaWNz
TGF5ZXItPnNpemUoKSk7CiAgICAgICAgICAgICBtX21hc2tMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9tYXNrTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9p
bnQoKSk7CisgICAgICAgIG1fbWFza0xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KCkp
OwogICAgICAgICBtX21hc2tMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKG1fZ3JhcGhpY3NM
YXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwogICAgIH0KICAgICAKQEAgLTQ0OSw5ICs0NDks
OSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAgIElu
dFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGRlbHRhLCBib3JkZXJCb3guc2l6ZSgpKTsKIAog
ICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllcyB0aGF0IGRlcGVuZCBvbiBsYXllciBkaW1lbnNp
b25zCi0gICAgICAgIEZsb2F0UG9pbnQzRCB0cmFuc2Zvcm1PcmlnaW4gPSBjb21wdXRlVHJhbnNm
b3JtT3JpZ2luKGJvcmRlckJveCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCB0cmFuc2Zvcm1P
cmlnaW4gPSBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGJvcmRlckJveCk7CiAgICAgICAgIC8vIENv
bXB1dGUgdGhlIGFuY2hvciBwb2ludCwgd2hpY2ggaXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgcmVu
ZGVyZXIgYm94IHVubGVzcyB0cmFuc2Zvcm0tb3JpZ2luIGlzIHNldC4KLSAgICAgICAgRmxvYXRQ
b2ludDNEIGFuY2hvcihyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLndpZHRoKCkgICE9IDAuMGYg
PyAoKGxheWVyQm91bmRzLngoKSAtIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMueCgpKSArIHRy
YW5zZm9ybU9yaWdpbi54KCkpIC8gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy53aWR0aCgpICA6
IDAuNWYsCisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3IocmVsYXRpdmVDb21wb3NpdGlu
Z0JvdW5kcy53aWR0aCgpICAhPSAwLjBmID8gKChsYXllckJvdW5kcy54KCkgLSByZWxhdGl2ZUNv
bXBvc2l0aW5nQm91bmRzLngoKSkgKyB0cmFuc2Zvcm1PcmlnaW4ueCgpKSAvIHJlbGF0aXZlQ29t
cG9zaXRpbmdCb3VuZHMud2lkdGgoKSAgOiAwLjVmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuaGVpZ2h0KCkgIT0gMC4wZiA/ICgobGF5ZXJC
b3VuZHMueSgpIC0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy55KCkpICsgdHJhbnNmb3JtT3Jp
Z2luLnkoKSkgLyByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmhlaWdodCgpIDogMC41ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW4ueigpKTsKICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRBbmNob3JQb2ludChhbmNob3IpOwpAQCAtNDczLDE3ICs0NzMs
MTcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX2dyYXBoaWNz
TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLjVmLCAwLjVmLCAwKSk7CisgICAg
ICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKDAuNWYs
IDAuNWYsIDApKTsKICAgICB9CiAKICAgICBpZiAobV9mb3JlZ3JvdW5kTGF5ZXIpIHsKLSAgICAg
ICAgRmxvYXRQb2ludCBmb3JlZ3JvdW5kUG9zaXRpb247Ci0gICAgICAgIEZsb2F0U2l6ZSBmb3Jl
Z3JvdW5kU2l6ZSA9IG5ld1NpemU7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgZm9yZWdyb3VuZFBv
c2l0aW9uOworICAgICAgICBHcmFwaGljc1NpemUgZm9yZWdyb3VuZFNpemUgPSBuZXdTaXplOwog
ICAgICAgICBJbnRTaXplIGZvcmVncm91bmRPZmZzZXQgPSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNl
dEZyb21SZW5kZXJlcigpOwogICAgICAgICBpZiAobV9jbGlwcGluZ0xheWVyKSB7CiAgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGEgY2xpcHBpbmcgbGF5ZXIgKHdoaWNoIGNsaXBzIGRlc2NlbmRh
bnRzKSwgdGhlbiB0aGUgZm9yZWdyb3VuZCBsYXllciBpcyBhIGNoaWxkIG9mIGl0LAogICAgICAg
ICAgICAgLy8gc28gdGhhdCBpdCBnZXRzIGNvcnJlY3RseSBzb3J0ZWQgd2l0aCBjaGlsZHJlbi4g
SW4gdGhhdCBjYXNlLCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY2xpcHBpbmcgbGF5ZXIuCi0g
ICAgICAgICAgICBmb3JlZ3JvdW5kU2l6ZSA9IEZsb2F0U2l6ZShjbGlwcGluZ0JveC5zaXplKCkp
OworICAgICAgICAgICAgZm9yZWdyb3VuZFNpemUgPSBHcmFwaGljc1NpemUoY2xpcHBpbmdCb3gu
c2l6ZSgpKTsKICAgICAgICAgICAgIGZvcmVncm91bmRPZmZzZXQgPSBjbGlwcGluZ0JveC5sb2Nh
dGlvbigpIC0gSW50UG9pbnQoKTsKICAgICAgICAgfQogCkBAIC00OTgsOSArNDk4LDkgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICAKICAgICAgICAg
Ly8gVGhlIHJlZmxlY3Rpb24gbGF5ZXIgaGFzIHRoZSBib3VuZHMgb2YgbV9vd25pbmdMYXllci0+
cmVmbGVjdGlvbkxheWVyKCksCiAgICAgICAgIC8vIGJ1dCB0aGUgcmVmbGVjdGVkIGxheWVyIGlz
IHRoZSBib3VuZHMgb2YgdGhpcyBsYXllciwgc28gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhcHBy
b3ByaWF0ZWx5LgotICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBjb21wb3NpdGVkQm91
bmRzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZsZWN0aW9uTGF5ZXJCb3VuZHMgPSByZWZsZWN0
aW9uQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwotICAgICAgICByZWZsZWN0aW9uQmFja2lu
Zy0+Z3JhcGhpY3NMYXllcigpLT5zZXRSZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbihGbG9hdFBvaW50
KCkgKyAobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlZmxlY3Rpb25MYXllckJvdW5kcy5sb2Nh
dGlvbigpKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBsYXllckJvdW5kcyA9IGNvbXBvc2l0ZWRC
b3VuZHMoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHJlZmxlY3Rpb25MYXllckJvdW5kcyA9IHJl
ZmxlY3Rpb25CYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCk7CisgICAgICAgIHJlZmxlY3Rpb25C
YWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKEdyYXBo
aWNzUG9pbnQoKSArIChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVmbGVjdGlvbkxheWVyQm91
bmRzLmxvY2F0aW9uKCkpKTsKICAgICB9CiAKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRl
bnRzUmVjdChjb250ZW50c0JveCgpKTsKQEAgLTk4NSwxMSArOTg1LDExIEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnQKICAgICBpbWFnZS0+c3RhcnRBbmltYXRpb24o
KTsKIH0KIAotRmxvYXRQb2ludDNEIFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVRyYW5zZm9y
bU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CitHcmFwaGljc1BvaW50M0Qg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3Qm
IGJvcmRlckJveCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlcigp
LT5zdHlsZSgpOwogCi0gICAgRmxvYXRQb2ludDNEIG9yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50
M0Qgb3JpZ2luOwogICAgIG9yaWdpbi5zZXRYKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YKCkuY2Fs
Y0Zsb2F0VmFsdWUoYm9yZGVyQm94LndpZHRoKCkpKTsKICAgICBvcmlnaW4uc2V0WShzdHlsZS0+
dHJhbnNmb3JtT3JpZ2luWSgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC5oZWlnaHQoKSkpOwog
ICAgIG9yaWdpbi5zZXRaKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5aKCkpOwpAQCAtOTk3LDE0ICs5
OTcsMTQgQEAgRmxvYXRQb2ludDNEIFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZQogICAgIHJl
dHVybiBvcmlnaW47CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRl
UGVyc3BlY3RpdmVPcmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdAorR3JhcGhp
Y3NQb2ludCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25z
dCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
cmVuZGVyZXIoKS0+c3R5bGUoKTsKIAogICAgIGZsb2F0IGJveFdpZHRoID0gYm9yZGVyQm94Lndp
ZHRoKCk7CiAgICAgZmxvYXQgYm94SGVpZ2h0ID0gYm9yZGVyQm94LmhlaWdodCgpOwogCi0gICAg
RmxvYXRQb2ludCBvcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBvcmlnaW47CiAgICAgb3JpZ2lu
LnNldFgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJveFdpZHRo
KSk7CiAgICAgb3JpZ2luLnNldFkoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWSgpLmNhbGNGbG9h
dFZhbHVlKGJveEhlaWdodCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCkBAIC0xNjQsOSArMTY0LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBJ
bnRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OwogICAgIC8vIFJl
c3VsdCBpcyB0cmFuc2Zvcm0gb3JpZ2luIGluIHBpeGVscy4KLSAgICBGbG9hdFBvaW50M0QgY29t
cHV0ZVRyYW5zZm9ybU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0OworICAg
IEdyYXBoaWNzUG9pbnQzRCBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJv
cmRlckJveCkgY29uc3Q7CiAgICAgLy8gUmVzdWx0IGlzIHBlcnNwZWN0aXZlIG9yaWdpbiBpbiBw
aXhlbHMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlUGVyc3BlY3RpdmVPcmlnaW4oY29uc3QgSW50
UmVjdCYgYm9yZGVyQm94KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGNvbXB1dGVQZXJzcGVj
dGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0OwogCiAgICAgdm9pZCB1
cGRhdGVMYXllck9wYWNpdHkoY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHVwZGF0ZUxh
eWVyVHJhbnNmb3JtKGNvbnN0IFJlbmRlclN0eWxlKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjphZGRUb092ZXJsYXAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFib3VuZHND
b21wdXRlZCkgewotICAgICAgICBsYXllckJvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgpKSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgbGF5ZXJCb3VuZHMgPSBsYXllci0+cmVuZGVy
ZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobGF5ZXItPmxvY2FsQm91bmRp
bmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgIC8vIEVtcHR5IHJlY3Rz
IG5ldmVyIGludGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBvc2VzIG9m
IG92ZXJsYXAgdGVzdGluZy4KICAgICAgICAgaWYgKGxheWVyQm91bmRzLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGxheWVyQm91bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CkBAIC02NDQsNyAr
NjQ0LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wbwogICAgIElu
dFJlY3QgYWJzQm91bmRzOwogICAgIGlmIChvdmVybGFwTWFwICYmICFvdmVybGFwTWFwLT5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gSWYgd2UncmUgdGVzdGluZyBmb3Igb3ZlcmxhcCwgd2Ugb25s
eSBuZWVkIHRvIGNvbXBvc2l0ZSBpZiB3ZSBvdmVybGFwIHNvbWV0aGluZyB0aGF0IGlzIGFscmVh
ZHkgY29tcG9zaXRlZC4KLSAgICAgICAgYWJzQm91bmRzID0gbGF5ZXItPnJlbmRlcmVyKCktPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5nQm94KCkpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBhYnNCb3VuZHMgPSBsYXllci0+cmVuZGVy
ZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobGF5ZXItPmxvY2FsQm91bmRp
bmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgIC8vIEVtcHR5IHJlY3Rz
IG5ldmVyIGludGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBvc2VzIG9m
IG92ZXJsYXAgdGVzdGluZy4KICAgICAgICAgaWYgKGFic0JvdW5kcy5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBhYnNCb3VuZHMuc2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKQEAgLTk0NSw3ICs5NDUs
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkCiAgICAgICAgIG1f
Y2xpcExheWVyLT5zZXRTaXplKGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlIC8q
IGV4Y2x1ZGUgc2Nyb2xsYmFycyAqLykuc2l6ZSgpKTsKIAogICAgICAgICBJbnRQb2ludCBzY3Jv
bGxQb3NpdGlvbiA9IGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgbV9zY3Jv
bGxMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Ny
b2xsUG9zaXRpb24ueSgpKSk7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKEdy
YXBoaWNzUG9pbnQoLXNjcm9sbFBvc2l0aW9uLngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSkpOwog
ICAgICAgICB1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCk7CiAgICAgfQogfQpAQCAtOTUz
LDcgKzk1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWQKIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRTY3JvbGwoY29uc3QgSW50UG9p
bnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIGlmIChtX3Njcm9sbExheWVyKQotICAgICAgICBt
X3Njcm9sbExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3NpdGlvbi54KCks
IC1zY3JvbGxQb3NpdGlvbi55KCkpKTsKKyAgICAgICAgbV9zY3JvbGxMYXllci0+c2V0UG9zaXRp
b24oR3JhcGhpY3NQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgp
KSk7CiB9CiAKIFN0cmluZyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyVHJlZUFzVGV4dChi
b29sIHNob3dEZWJ1Z0luZm8pCkBAIC0xNjE3LDggKzE2MTcsOCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZW5zdXJlUm9vdExhCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBtX3Jvb3RD
b250ZW50TGF5ZXItPnNldE5hbWUoIlJvb3QgcGxhdGZvcm0iKTsKICNlbmRpZgotICAgICAgICBt
X3Jvb3RDb250ZW50TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKG1fcmVuZGVyVmlldy0+bWF4WExh
eW91dE92ZXJmbG93KCksIG1fcmVuZGVyVmlldy0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsKLSAg
ICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KCkpOworICAg
ICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFNpemUoR3JhcGhpY3NTaXplKG1fcmVuZGVyVmll
dy0+bWF4WExheW91dE92ZXJmbG93KCksIG1fcmVuZGVyVmlldy0+bWF4WUxheW91dE92ZXJmbG93
KCkpKTsKKyAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1Bv
aW50KCkpOwogCiAgICAgICAgIC8vIE5lZWQgdG8gY2xpcCB0byBwcmV2ZW50IHRyYW5zZm9ybWVk
IGNvbnRlbnQgc2hvd2luZyBvdXRzaWRlIHRoaXMgZnJhbWUKICAgICAgICAgbV9yb290Q29udGVu
dExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OSw3
ICs0NzksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQCiAgICAg
Y29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDQ7CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0
IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic09mZnNl
dCA9IGxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzT2Zmc2V0ID0gbG9j
YWxUb0Fic29sdXRlKCk7CiAKICAgICBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbiA9IGZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwogICAgIC8vIFdl
IG5lZWQgdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRo
ZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRp
b24gaXMgaW5jb2hlcmVudApAQCAtNTIxLDcgKzUyMSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
cGFuU2Nyb2xsKGNvbnN0IEludFAKIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3dhcmQoY29u
c3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
d29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0g
bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJz
b2x1dGUoKTsKICAgICBpbnQgb2Zmc2V0WCA9IGRlc3RpbmF0aW9uLngoKSAtIGFic1Bvcy54KCk7
CiAgICAgaW50IG9mZnNldFkgPSBkZXN0aW5hdGlvbi55KCkgLSBhYnNQb3MueSgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxMSw3ICsxNzExLDcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZQogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkK
ICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwog
ICAgIGVsc2UKLSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChy
ZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAg
cmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENv
bnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAKICAgICByZXR1cm4gcmVjdDsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250
cm9scy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNSArNzEsMTUgQEAg
c3RhdGljIFdLTWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSBkZXRlcgogfQogCiAvLyBVdGlsaXR5
IHRvIHNjYWxlIHdoZW4gdGhlIFVJIHBhcnQgYXJlIG5vdCBzY2FsZWQgYnkgd2tEcmF3TWVkaWFV
SVBhcnQKLXN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENv
bnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCAmb3JpZ2luYWxSZWN0KQorc3RhdGljIEdyYXBoaWNzUmVjdCBnZXRVbnpvb21lZFJl
Y3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCiB7CiAgICAgZmxvYXQg
em9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIEZsb2F0UmVjdCB1
bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0
KG9yaWdpbmFsUmVjdCk7CiAgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVu
em9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAg
ICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9v
bUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJl
Y3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNj
YWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpv
b21lZFJlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHVuem9vbWVkUmVjdDsKQEAgLTE0Niw3
ICsxNDYsNyBAQCBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZWRpYVNsaWRlcjogewogICAgICAgICAgICAg
aWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50
KG8pKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9v
bWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CisgICAgICAg
ICAgICAgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFk
anVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgICAgICAgICAgd2tE
cmF3TWVkaWFTbGlkZXJUcmFjayh0aGVtZVN0eWxlLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkg
KiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSwg
bWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4OSw3ICsxODksNyBAQCBJbnRQb2ludCBSZW5k
ZXJNZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkCiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBtdXRl
QnV0dG9uQm94LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAgICAgaW50IHkgPSB5T2Zmc2V0
ICogem9vbUxldmVsICsgbXV0ZUJ1dHRvbkJveC0+b2Zmc2V0SGVpZ2h0KCkgLSBzaXplLmhlaWdo
dCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0
cnVlKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxU
b0Fic29sdXRlKEdyYXBoaWNzUG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwg
dHJ1ZSwgdHJ1ZSk7CiAgICAgaWYgKGFic1BvaW50LnkoKSA8IDApCiAgICAgICAgIHkgPSBtdXRl
QnV0dG9uQm94LT5oZWlnaHQoKTsKICAgICByZXR1cm4gSW50UG9pbnQoeE9mZnNldCAqIHpvb21M
ZXZlbCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIHZvaWQgUmVu
ZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCiAKICAgICAvLyBDb21wdXRlIHRoZSB0b3AgbGVmdCB0
YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQsIGJ1dCB1c2UKICAgICAvLyB0aGUgYWN0dWFs
IHdpZHRoIG9mIHRoZSBlbGVtZW50IHRvIHNpemUgdGhlIHBvcHVwLgotICAgIEZsb2F0UG9pbnQg
YWJzVG9wTGVmdCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsK
KyAgICBHcmFwaGljc1BvaW50IGFic1RvcExlZnQgPSBsb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQ
b2ludCgpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgSW50UmVjdCBhYnNCb3VuZHMgPSBhYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpOwogICAgIGFic0JvdW5kcy5zZXRMb2NhdGlvbihyb3VuZGVkSW50UG9p
bnQoYWJzVG9wTGVmdCkpOwogICAgIG1fcG9wdXAtPnNob3coYWJzQm91bmRzLCBkb2N1bWVudCgp
LT52aWV3KCksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkN1cnNv
ckxpc3QuaCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRh
cnkuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgpAQCAtODY5LDMxICs4NjksMzEgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OmRyYXdMaW5lRm9yQm94U2lkZShHcgogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUob2xkU3Ryb2tlU3R5bGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcXVhZFs0XTsKKyAgICAgICAg
ICAgIEdyYXBoaWNzUG9pbnQgcXVhZFs0XTsKICAgICAgICAgICAgIHN3aXRjaCAoc2lkZSkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQlNUb3A6Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMF0g
PSBGbG9hdFBvaW50KHgxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCksIHkxKTsKLSAgICAgICAg
ICAgICAgICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoeDEgKyBtYXgoYWRqYWNlbnRXaWR0aDEs
IDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KHgyIC0g
bWF4KGFkamFjZW50V2lkdGgyLCAwKSwgeTIpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzNd
ID0gRmxvYXRQb2ludCh4MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7CisgICAgICAg
ICAgICAgICAgICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxICsgbWF4KC1hZGphY2VudFdp
ZHRoMSwgMCksIHkxKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBoaWNzUG9p
bnQoeDEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApLCB5Mik7CisgICAgICAgICAgICAgICAgICAg
IHF1YWRbMl0gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSwgeTIp
OworICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiAtIG1heCgt
YWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgQlNCb3R0b206Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMF0g
PSBGbG9hdFBvaW50KHgxICsgbWF4KGFkamFjZW50V2lkdGgxLCAwKSwgeTEpOwotICAgICAgICAg
ICAgICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCh4MSArIG1heCgtYWRqYWNlbnRXaWR0aDEs
IDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KHgyIC0g
bWF4KC1hZGphY2VudFdpZHRoMiwgMCksIHkyKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsz
XSA9IEZsb2F0UG9pbnQoeDIgLSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7CisgICAgICAg
ICAgICAgICAgICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxICsgbWF4KGFkamFjZW50V2lk
dGgxLCAwKSwgeTEpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhpY3NQb2lu
dCh4MSArIG1heCgtYWRqYWNlbnRXaWR0aDEsIDApLCB5Mik7CisgICAgICAgICAgICAgICAgICAg
IHF1YWRbMl0gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCksIHky
KTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIgLSBtYXgo
YWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgICAgICAgICAgICBxdWFkWzBdID0g
RmxvYXRQb2ludCh4MSwgeTEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHF1YWRbMV0gPSBGbG9hdFBvaW50KHgxLCB5MiAtIG1heCgtYWRqYWNlbnRXaWR0
aDIsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoeDIsIHky
IC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbM10g
PSBGbG9hdFBvaW50KHgyLCB5MSArIG1heChhZGphY2VudFdpZHRoMSwgMCkpOworICAgICAgICAg
ICAgICAgICAgICBxdWFkWzBdID0gR3JhcGhpY3NQb2ludCh4MSwgeTEgKyBtYXgoLWFkamFjZW50
V2lkdGgxLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBHcmFwaGljc1BvaW50
KHgxLCB5MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAg
cXVhZFsyXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSk7
CisgICAgICAgICAgICAgICAgICAgIHF1YWRbM10gPSBHcmFwaGljc1BvaW50KHgyLCB5MSArIG1h
eChhZGphY2VudFdpZHRoMSwgMCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIEJTUmlnaHQ6Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMF0gPSBG
bG9hdFBvaW50KHgxLCB5MSArIG1heChhZGphY2VudFdpZHRoMSwgMCkpOwotICAgICAgICAgICAg
ICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCh4MSwgeTIgLSBtYXgoYWRqYWNlbnRXaWR0aDIs
IDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoeDIsIHkyIC0g
bWF4KC1hZGphY2VudFdpZHRoMiwgMCkpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0g
RmxvYXRQb2ludCh4MiwgeTEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSk7CisgICAgICAgICAg
ICAgICAgICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxLCB5MSArIG1heChhZGphY2VudFdp
ZHRoMSwgMCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhpY3NQb2ludCh4
MSwgeTIgLSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcXVh
ZFsyXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCkpOwor
ICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiwgeTEgKyBtYXgo
LWFkamFjZW50V2lkdGgxLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCkBAIC0xMDg1LDcgKzEwODUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRP
dXRsaW5lKEdyYXBoaWNzCiBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKQogewogICAgIGlmICh1c2VUcmFuc2Zvcm1zKSB7Ci0g
ICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgICAgICBWZWN0b3I8R3JhcGhpY3NR
dWFkPiBxdWFkczsKICAgICAgICAgYWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAKICAgICAgICAgc2l6
ZV90IG4gPSBxdWFkcy5zaXplKCk7CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBJbnRSZWN0IFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JvCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBHcmFw
aGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIFZlY3RvcjxJbnRSZWN0
PiByZWN0czsKICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoYWJz
UG9zKSk7CiAKQEAgLTExMTIsMjAgKzExMTIsMjAgQEAgSW50UmVjdCBSZW5kZXJPYmplY3Q6OmFi
c29sdXRlQm91bmRpbmdCbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3Zv
aWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxHcmFwaGljc1F1
YWQ+JiBxdWFkcykKIHsKICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CiAgICAgLy8gRklYTUU6
IGFkZEZvY3VzUmluZ1JlY3RzKCkgbmVlZHMgdG8gYmUgcGFzc2VkIHRoaXMgdHJhbnNmb3JtLXVu
YXdhcmUKICAgICAvLyBsb2NhbFRvQWJzb2x1dGUoKSBvZmZzZXQgaGVyZSBiZWNhdXNlIFJlbmRl
cklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoKQogICAgIC8vIGltcGxpY2l0bHkgYXNzdW1lcyB0
aGF0LiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1lZAogICAgIC8v
IGRlc2NlbmRhbnRzLgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IGxvY2FsVG9BYnNv
bHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVQb2ludCA9IGxvY2FsVG9BYnNvbHV0
ZSgpOwogICAgIGFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQoYWJzb2x1
dGVQb2ludCkpOwogICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsgCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIEludFJlY3QgcmVjdCA9IHJl
Y3RzW2ldOwogICAgICAgICByZWN0Lm1vdmUoLWFic29sdXRlUG9pbnQueCgpLCAtYWJzb2x1dGVQ
b2ludC55KCkpOwotICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFF1YWQocmVjdCkpKTsKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQo
R3JhcGhpY3NRdWFkKHJlY3QpKSk7CiAgICAgfQogfQogCkBAIC0xODIzLDcgKzE4MjMsNyBAQCBJ
bnRSZWN0IFJlbmRlck9iamVjdDo6dmlld1JlY3QoKSBjb25zdAogICAgIHJldHVybiB2aWV3KCkt
PnZpZXdSZWN0KCk7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1
dGUoY29uc3QgRmxvYXRQb2ludCYgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFu
c2Zvcm1zKSBjb25zdAorR3JhcGhpY3NQb2ludCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0
ZShjb25zdCBHcmFwaGljc1BvaW50JiBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJh
bnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBsb2NhbFBvaW50KTsKICAgICBt
YXBMb2NhbFRvQ29udGFpbmVyKDAsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0
ZSk7CkBAIC0xODMyLDcgKzE4MzIsNyBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxU
b0Fic29sdXRlCiAgICAgcmV0dXJuIHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2ludCgpOwog
fQogCi1GbG9hdFBvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsKGNvbnN0IEZsb2F0
UG9pbnQmIGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNv
bnN0CitHcmFwaGljc1BvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9y
bXMpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3Jt
U3RhdGU6OlVuYXBwbHlJbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uLCBjb250YWluZXJQb2ludCk7
CiAgICAgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5z
Zm9ybVN0YXRlKTsKQEAgLTE4OTksNyArMTg5OSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRU
cmFuc2Zvcm1Gcm9tQ29udGEKICAgICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRhaW5lck9i
amVjdC0+aGFzTGF5ZXIoKSAmJiBjb250YWluZXJPYmplY3QtPnN0eWxlKCktPmhhc1BlcnNwZWN0
aXZlKCkpIHsKICAgICAgICAgLy8gUGVycHNlY3RpdmUgb24gdGhlIGNvbnRhaW5lciBhZmZlY3Rz
IHVzLCBzbyB3ZSBoYXZlIHRvIGZhY3RvciBpdCBpbiBoZXJlLgogICAgICAgICBBU1NFUlQoY29u
dGFpbmVyT2JqZWN0LT5oYXNMYXllcigpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwZXJzcGVjdGl2
ZU9yaWdpbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+bGF5ZXIo
KS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwZXJzcGVjdGl2
ZU9yaWdpbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+bGF5ZXIo
KS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBw
ZXJzcGVjdGl2ZU1hdHJpeDsKICAgICAgICAgcGVyc3BlY3RpdmVNYXRyaXguYXBwbHlQZXJzcGVj
dGl2ZShjb250YWluZXJPYmplY3QtPnN0eWxlKCktPnBlcnNwZWN0aXZlKCkpOwpAQCAtMTkxMyw3
ICsxOTEzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRyYW5zZm9ybUZyb21Db250YQogI2Vu
ZGlmCiB9CiAKLUZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9Db250YWluZXJRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgYm9vbCBmaXhlZCkgY29uc3QKK0dyYXBoaWNzUXVhZCBSZW5kZXJPYmplY3Q6Omxv
Y2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgbG9jYWxRdWFkLCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCkgY29uc3QKIHsKICAg
ICAvLyBUcmFjayB0aGUgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZCdzIGJvdW5kaW5n
IGJveC4gQXMgbWFwTG9jYWxUb0NvbnRhaW5lcigpIGNhbGxzIG9mZnNldEZyb21Db250YWluZXIo
KSwKICAgICAvLyBpdCB3aWxsIHVzZSB0aGF0IHBvaW50IGFzIHRoZSByZWZlcmVuY2UgcG9pbnQg
dG8gZGVjaWRlIHdoaWNoIGNvbHVtbidzIHRyYW5zZm9ybSB0byBhcHBseSBpbiBtdWx0aXBsZS1j
b2x1bW4gYmxvY2tzLgpAQCAtMjM3MSw3ICsyMzcxLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFk
ZERhc2hib2FyZFJlZ2lvbnMoVgogICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7
CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOworICAgICAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwog
ICAgICAgICByZWdpb24uYm91bmRzLnNldFgoYWJzUG9zLngoKSArIHN0eWxlUmVnaW9uLm9mZnNl
dC5sZWZ0KCkudmFsdWUoKSk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQb3MueSgp
ICsgc3R5bGVSZWdpb24ub2Zmc2V0LnRvcCgpLnZhbHVlKCkpOwogCkBAIC0yNTg3LDI0ICsyNTg3
LDI0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGQKICAgICAgICAg
cmVuZGVyZXItPnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogfQogCi1GbG9hdFJlY3QgUmVu
ZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVy
T2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
KTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAog
ewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIC8vIFJldHVybnMgdGhlIHNtYWxsZXN0IHJl
Y3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRlbnQKIC8vIHJlc3BlY3Rp
bmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9rZS13aWR0aCBhbmQg
bWFya2VycwotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIEFm
ZmluZVRyYW5zZm9ybSBSZW5kZXJPYmplY3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QKQEAgLTI2
MTksNyArMjYxOSw3IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyT2JqZWN0Ojpsb2MK
ICAgICByZXR1cm4gaWRlbnRpdHk7CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRGbG9h
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdEdyYXBoaWNz
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5o
IgogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgpAQCAtMzcyLDEyICszNzIsMTIgQEAgcHVi
bGljOgogICAgIC8vIHNpbmNlIHN0cm9rZS13aWR0aCBpcyBpZ25vcmVkIChhbmQgbWFya2VyIHNp
emUgY2FuIGRlcGVuZCBvbiBzdHJva2Utd2lkdGgpLgogICAgIC8vIG9iamVjdEJvdW5kaW5nQm94
IGlzIHJldHVybmVkIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIC8vIFRoZSBuYW1lIG9iamVjdEJv
dW5kaW5nQm94IGlzIHRha2VuIGZyb20gdGhlIFNWRyAxLjEgc3BlYy4KLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VC
b3VuZGluZ0JveCgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUgc21hbGxlc3QgcmVjdGFu
Z2xlIGVuY2xvc2luZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29udGVudAogICAgIC8vIHJlc3BlY3Rp
bmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9rZS13aWR0aCBhbmQg
bWFya2VycwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgb25seSByZXR1cm5zIHRoZSB0cmFu
c2Zvcm09IiIgdmFsdWUgZnJvbSB0aGUgZWxlbWVudAogICAgIC8vIG1vc3QgY2FsbHNpdGVzIHdh
bnQgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGluc3RlYWQuCkBAIC0zODcsMTAgKzM4NywxMCBA
QCBwdWJsaWM6CiAgICAgLy8gVGhpcyBpbmNsdWRlcyBhbnkgdmlld3BvcnQgdHJhbnNmb3JtcyBh
bmQgeC95IG9mZnNldHMgYXMgd2VsbCBhcyB0aGUgdHJhbnNmb3JtPSIiIHZhbHVlIG9mZiB0aGUg
ZWxlbWVudC4KICAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpIGNvbnN0OwogCi0gICAgLy8gU1ZHIHVzZXMgRmxvYXRQb2ludCBwcmVjaXNl
IGhpdCB0ZXN0aW5nLCBhbmQgcGFzc2VzIHRoZSBwb2ludCBpbiBwYXJlbnQKKyAgICAvLyBTVkcg
dXNlcyBHcmFwaGljc1BvaW50IHByZWNpc2UgaGl0IHRlc3RpbmcsIGFuZCBwYXNzZXMgdGhlIHBv
aW50IGluIHBhcmVudAogICAgIC8vIGNvb3JkaW5hdGVzIGluc3RlYWQgb2YgaW4gcmVwYWludCBj
b250YWluZXIgY29vcmRpbmF0ZXMuICBFdmVudHVhbGx5IHRoZQogICAgIC8vIHJlc3Qgb2YgdGhl
IHJlbmRlcmluZyB0cmVlIHdpbGwgbW92ZSB0byBhIHNpbWlsYXIgbW9kZWwuCi0gICAgdmlydHVh
bCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0
VGVzdEFjdGlvbik7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNBbm9ueW1vdXMoKSBjb25zdCB7IHJl
dHVybiBtX2lzQW5vbnltb3VzOyB9CkBAIC01NzUsMTYgKzU3NSwxNiBAQCBwdWJsaWM6CiAKICAg
ICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBjb29yZGluYXRl
cwogICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkuIElmIHVzZVRyYW5zZm9ybXMgaXMgdHJ1ZSwgdGFr
ZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4gRXZlbnR1YWxseSBsb2NhbFRvQWJzb2x1dGUoKSB3
aWxsIGFsd2F5cyBiZSB0cmFuc2Zvcm0tYXdhcmUuCi0gICAgRmxvYXRQb2ludCBsb2NhbFRvQWJz
b2x1dGUoY29uc3QgRmxvYXRQb2ludCYgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwgYm9vbCBm
aXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7Ci0gICAgRmxv
YXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgZml4ZWQgPSBm
YWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OworICAgIEdyYXBoaWNzUG9p
bnQgbG9jYWxUb0Fic29sdXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxvY2FsUG9pbnQgPSBHcmFw
aGljc1BvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFs
c2UpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVUb0xvY2FsKGNvbnN0IEdyYXBo
aWNzUG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNl
KSBjb25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFic29sdXRlIGNvb3Jk
aW5hdGVzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCi0gICAgRmxvYXRRdWFkIGxv
Y2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFs
c2UpIGNvbnN0CisgICAgR3JhcGhpY3NRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgR3Jh
cGhpY3NRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbG9jYWxUb0NvbnRhaW5lclF1YWQocXVhZCwgMCwgZml4ZWQpOwogICAgIH0KICAg
ICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiBj
b250YWluZXIsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICBGbG9hdFF1YWQg
bG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CisgICAgR3Jh
cGhpY3NRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYsIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0OwogCiAgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVyKCkgcmVu
ZGVyZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKS4gSW4gbXVsdGktY29sdW1uIGxheW91dCwKICAg
ICAvLyBkaWZmZXJlbnQgb2Zmc2V0cyBhcHBseSBhdCBkaWZmZXJlbnQgcG9pbnRzLCBzbyByZXR1
cm4gdGhlIG9mZnNldCB0aGF0IGFwcGxpZXMgdG8gdGhlIGdpdmVuIHBvaW50LgpAQCAtNTk3LDkg
KzU5Nyw5IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KGJv
b2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIC8vIEJ1aWxkIGFuIGFycmF5IG9mIHF1
YWRzIGluIGFic29sdXRlIGNvb3JkcyBmb3IgbGluZSBib3hlcwotICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKSB7IH0KIAotICAgIHZvaWQgYWJzb2x1
dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZvaWQgYWJzb2x1dGVG
b2N1c1JpbmdRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpOwogCiAgICAgLy8gdGhlIHJlY3Qg
dGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIGFzIHRoZSBwYWlu
dGluZ1Jvb3QKICAgICBMYXlvdXRSZWN0IHBhaW50aW5nUm9vdFJlY3QoTGF5b3V0UmVjdCYgdG9w
TGV2ZWxSZWN0KTsKQEAgLTEwNzYsMjcgKzEwNzYsMjcgQEAgaW5saW5lIGludCBhZGp1c3RGb3JB
YnNvbHV0ZVpvb20oaW50IHZhbAogICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20odmFs
dWUsIHJlbmRlcmVyLT5zdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRRdWFk
Rm9yQWJzb2x1dGVab29tKEZsb2F0UXVhZCYgcXVhZCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K2lubGluZSB2b2lkIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShHcmFwaGljc1F1
YWQmIHF1YWQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgZmxvYXQgem9vbSA9IHJl
bmRlcmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAgICAgaWYgKHpvb20gIT0gMSkKICAg
ICAgICAgcXVhZC5zY2FsZSgxIC8gem9vbSwgMSAvIHpvb20pOwogfQogCi1pbmxpbmUgdm9pZCBh
ZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20oRmxvYXRSZWN0JiByZWN0LCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yQWJzb2x1dGVa
b29tKEdyYXBoaWNzUmVjdCYgcmVjdCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBm
bG9hdCB6b29tID0gcmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICBpZiAo
em9vbSAhPSAxKQogICAgICAgICByZWN0LnNjYWxlKDEgLyB6b29tLCAxIC8gem9vbSk7CiB9CiAK
LWlubGluZSB2b2lkIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShGbG9hdFF1YWQmIHF1YWQs
IGZsb2F0IHBhZ2VTY2FsZSkKK2lubGluZSB2b2lkIGFkanVzdEdyYXBoaWNzUXVhZEZvclBhZ2VT
Y2FsZShHcmFwaGljc1F1YWQmIHF1YWQsIGZsb2F0IHBhZ2VTY2FsZSkKIHsKICAgICBpZiAocGFn
ZVNjYWxlICE9IDEpCiAgICAgICAgIHF1YWQuc2NhbGUoMSAvIHBhZ2VTY2FsZSwgMSAvIHBhZ2VT
Y2FsZSk7CiB9CiAKLWlubGluZSB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclBhZ2VTY2FsZShGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IHBhZ2VTY2FsZSkKK2lubGluZSB2b2lkIGFkanVzdEdyYXBoaWNz
UmVjdEZvclBhZ2VTY2FsZShHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0IHBhZ2VTY2FsZSkKIHsK
ICAgICBpZiAocGFnZVNjYWxlICE9IDEpCiAgICAgICAgIHJlY3Quc2NhbGUoMSAvIHBhZ2VTY2Fs
ZSwgMSAvIHBhZ2VTY2FsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBA
IExheW91dFVuaXQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWMKIAogICAgIC8vIDEwLjMu
MiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1lbnRzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS92
aXN1ZGV0Lmh0bWwjaW5saW5lLXJlcGxhY2VkLXdpZHRoCiAgICAgYm9vbCBpc1BlcmNlbnRhZ2VJ
bnRyaW5zaWNTaXplID0gZmFsc2U7Ci0gICAgRmxvYXRTaXplIGludHJpbnNpY1JhdGlvOworICAg
IEdyYXBoaWNzU2l6ZSBpbnRyaW5zaWNSYXRpbzsKICAgICBpZiAoY29udGVudFJlbmRlcmVyKSB7
CiAgICAgICAgIGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRp
b24oaW50cmluc2ljUmF0aW8sIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpOwogICAgICAgICBj
b250ZW50UmVuZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXItPnN0eWxlKCk7CkBAIC0zMjYsNyAr
MzI2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhYwogCiAgICAg
Ly8gMTAuNi4yIElubGluZSwgcmVwbGFjZWQgZWxlbWVudHM6IGh0dHA6Ly93d3cudzMub3JnL1RS
L0NTUzIxL3Zpc3VkZXQuaHRtbCNpbmxpbmUtcmVwbGFjZWQtaGVpZ2h0CiAgICAgYm9vbCBpc1Bl
cmNlbnRhZ2VJbnRyaW5zaWNTaXplID0gZmFsc2U7Ci0gICAgRmxvYXRTaXplIGludHJpbnNpY1Jh
dGlvOworICAgIEdyYXBoaWNzU2l6ZSBpbnRyaW5zaWNSYXRpbzsKICAgICBpZiAoY29udGVudFJl
bmRlcmVyKSB7CiAgICAgICAgIGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZUludHJpbnNpY1JhdGlv
SW5mb3JtYXRpb24oaW50cmluc2ljUmF0aW8sIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpOwog
ICAgICAgICBjb250ZW50UmVuZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXItPnN0eWxlKCk7CkBA
IC00NDIsNyArNDQyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0aW9uUmVj
dAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgY29tcHV0ZVJlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdCA9
IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lciku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJR
dWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKICAgICAKICAgICByZXR1cm4gcmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAKICNpbmNs
dWRlICJDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA5MTAx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkVsbGlwc2lzQm94LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC0yNjksNyArMjY5LDcg
QEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJUZXh0OjpvcmlnaQogdm9pZCBSZW5kZXJU
ZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGJv
eCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKLSAgICAg
ICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoRmxvYXRSZWN0KGFjY3VtdWxhdGVk
T2Zmc2V0ICsgYm94LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgpKSkpOworICAgICAgICByZWN0cy5h
cHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChHcmFwaGljc1JlY3QoYWNjdW11bGF0ZWRPZmZzZXQg
KyBib3gtPnRvcExlZnQoKSwgYm94LT5zaXplKCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6
YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtMjk4LDcgKzI5
OCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFYKICAgICAgICAg
ICAgICAgICAgICAgci5zZXRYKHNlbGVjdGlvblJlY3QueCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFF1YWQocikpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgICAgICAgICAg
cmVjdHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKHIpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7CiAgICAgICAgICAgICBJbnRSZWN0
IHIgPSBib3gtPnNlbGVjdGlvblJlY3Qoc3RhcnQsIHJlYWxFbmQpOwpAQCAtMzEzLDcgKzMxMyw3
IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFYKICAgICAgICAgICAg
ICAgICAgICAgICAgIHIuc2V0WChib3gtPngoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRRdWFkKHIpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1F1YWQocikp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZvckJveChJ
bmxpbmUKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogICAgIAotdm9pZCBSZW5kZXJUZXh0Ojph
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgQ2xpcHBpbmdPcHRpb24gb3B0
aW9uKQordm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+
JiBxdWFkcywgQ2xpcHBpbmdPcHRpb24gb3B0aW9uKQogewogICAgIGZvciAoSW5saW5lVGV4dEJv
eCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7
CiAgICAgICAgIEludFJlY3QgYm91bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygp
OwpAQCAtMzU2LDE2ICszNTYsMTYgQEAgdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxGbAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0
SGVpZ2h0KGVsbGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7CiAgICAgICAgIH0K
LSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvdW5k
YXJpZXMpKSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBo
aWNzUmVjdChib3VuZGFyaWVzKSkpOwogICAgIH0KIH0KICAgICAKLXZvaWQgUmVuZGVyVGV4dDo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlclRleHQ6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewogICAgIGFic29s
dXRlUXVhZHMocXVhZHMsIE5vQ2xpcHBpbmcpOwogfQogCi12b2lkIFJlbmRlclRleHQ6OmFic29s
dXRlUXVhZHNGb3JSYW5nZShWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQordm9pZCBSZW5kZXJUZXh0
OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKIHsKICAg
ICAvLyBXb3JrIGFyb3VuZCBzaWduZWQvdW5zaWduZWQgaXNzdWVzLiBUaGlzIGZ1bmN0aW9uIHRh
a2VzIHVuc2lnbmVkcywgYW5kIGlzIG9mdGVuIHBhc3NlZCBVSU5UX01BWAogICAgIC8vIHRvIG1l
YW4gImFsbCB0aGUgd2F5IHRvIHRoZSBlbmQiLiBJbmxpbmVUZXh0Qm94IGNvb3JkaW5hdGVzIGFy
ZSB1bnNpZ25lZHMsIHNvIGNoYW5naW5nIHRoaXMgCkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBS
ZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVgogICAgICAgICAgICAgICAgICAgICBy
LnNldFgoc2VsZWN0aW9uUmVjdC54KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChyKSkpOworICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3Jh
cGhpY3NSZWN0KHIpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQpOwogICAgICAgICAgICAgSW50UmVjdCBy
ID0gYm94LT5zZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFsRW5kKTsKQEAgLTQwNiw3ICs0MDYsNyBA
QCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAgICAgICAgICAg
ICAgICAgICAgICByLnNldFgoYm94LT54KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChyKSkpOworICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2Nh
bFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChyKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtOTc2LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNP
bmx5V2hpdGVzcGFjZSgKICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSArIGxlbik7CiB9CiAK
LUZsb2F0UG9pbnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSBjb25zdAorR3JhcGhpY3NQ
b2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1bk9yaWdpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIElu
dFBvaW50KGZpcnN0UnVuWCgpLCBmaXJzdFJ1blkoKSk7CiB9CkBAIC0xMzMzLDcgKzEzMzMsNyBA
QCBJbnRSZWN0IFJlbmRlclRleHQ6OmxpbmVzQm91bmRpbmdCb3goKSBjCiAgICAgICAgIGZsb2F0
IHkgPSBpc0hvcml6b250YWwgPyBmaXJzdFRleHRCb3goKS0+eSgpIDogbG9naWNhbExlZnRTaWRl
OwogICAgICAgICBmbG9hdCB3aWR0aCA9IGlzSG9yaXpvbnRhbCA/IGxvZ2ljYWxSaWdodFNpZGUg
LSBsb2dpY2FsTGVmdFNpZGUgOiBsYXN0VGV4dEJveCgpLT5sb2dpY2FsQm90dG9tKCkgLSB4Owog
ICAgICAgICBmbG9hdCBoZWlnaHQgPSBpc0hvcml6b250YWwgPyBsYXN0VGV4dEJveCgpLT5sb2dp
Y2FsQm90dG9tKCkgLSB5IDogbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKLSAg
ICAgICAgcmVzdWx0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCkpOworICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0
MTgsNyArMTQxOCw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVjdEZvclIK
ICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpCiAgICAgICAgICAgICBjYi0+YWRqdXN0UmVj
dEZvckNvbHVtbnMocmVjdCk7CiAKLSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFk
KEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0
KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICB9CiAKICAg
ICByZXR1cm4gcmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgdm9pZCBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoVmVj
dG9yPEludFJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwotICAgIHZvaWQg
YWJzb2x1dGVRdWFkc0ZvclJhbmdlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rp
b25IZWlnaHQgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9y
PEdyYXBoaWNzUXVhZD4mKTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHNGb3JSYW5nZShWZWN0b3I8
R3JhcGhpY3NRdWFkPiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogCiAgICAg
ZW51bSBDbGlwcGluZ09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07Ci0gICAg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgQ2xpcHBpbmdPcHRpb24gb3B0
aW9uID0gTm9DbGlwcGluZyk7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGlj
c1F1YWQ+JiwgQ2xpcHBpbmdPcHRpb24gb3B0aW9uID0gTm9DbGlwcGluZyk7CiAKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7
CiAKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBsaW5lc0Jv
dW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRp
bmdCb3goKSBjb25zdDsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RSdW5PcmlnaW4oKSBjb25zdDsK
KyAgICBHcmFwaGljc1BvaW50IGZpcnN0UnVuT3JpZ2luKCkgY29uc3Q7CiAgICAgZmxvYXQgZmly
c3RSdW5YKCkgY29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5ZKCkgY29uc3Q7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MDMsNyArNTAzLDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpmb3JtYXRNZWRpYUNvbnRy
b2xzUgogSW50UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0
dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QK
IHsKICAgICBpbnQgeSA9IC1zaXplLmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQg
PSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94
LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1Bv
aW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQobXV0ZUJ1
dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgaWYgKGFic1BvaW50
LnkoKSA8IDApCiAgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LT5oZWlnaHQoKTsKICAgICByZXR1
cm4gSW50UG9pbnQoMCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIHByaXZh
dGU6CiAKICAgICBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRT
aXplJiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsK
IAotICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0
KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3Qg
RmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OworICAgIEdyYXBo
aWNzUmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJl
bmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OwogICAgIAogICAgIC8vIEdl
dCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gIFVzZWQgYnkgc29tZSBvZiB0
aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NDUsMTIg
KzU0NSwxMiBAQCBJbnRSZWN0IFJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdChjb25zCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9Q
YWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0
IEludFJlY3QmIHIpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRU
b1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJl
bmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGlucHV0UmVjdCwg
Y29uc3QgSW50UmVjdCYgcikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFydFJlY3QoaW5wdXRS
ZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKICAgICAKICAgICAv
LyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5w
dXQgcmVuZGVyZXIKLSAgICBGbG9hdFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXI7CisgICAg
R3JhcGhpY3NTaXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyOwogICAgIGNvbnN0IFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBwYXJ0UmVuZGVyZXI7CiAgICAgd2hpbGUgKHJlbmRlcmVyICYmIHJl
bmRlcmVyICE9IGlucHV0UmVuZGVyZXIpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250YWlu
aW5nUmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7CkBAIC03OTMsNyArNzkzLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZQogICAgICAgICBpbmZsYXRl
ZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwogICAgICAg
ICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZl
bCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0Lngo
KSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwogICAgICAgICBw
YWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRS
ZWN0LnkoKSk7CiAgICAgfQogCkBAIC05NTQsNyArOTU0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRQcm9ncmVzc0JhcihSZQogCiAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy0+c3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUoMiAqIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCAwKTsKLSAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgtMSwgMSkpOworICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKC0xLCAxKSk7CiAgICAgfQogICAgIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QubG9jYXRpb24oKSk7CkBAIC0xMDI5LDEyICsxMDI5LDEy
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KIAogICAgIENHQ29s
b3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CiAKLSAgICBGbG9h
dFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAy
LjBmKTsKKyAgICBHcmFwaGljc1JlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRo
KCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyB0
b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBS
ZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNy
ZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWlu
UHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlh
bChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQueSgpKSwg
Q0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC5tYXhZKCkpLCB0b3BGdW5j
dGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGll
bnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAt
IDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKKyAgICBHcmFwaGljc1JlY3QgYm90
dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIuMGYsIHIu
d2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3Qg
Q0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFja3MgPSB7IDAsIEJvdHRvbUdyYWRpZW50
SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gYm90dG9t
RnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxM
LCAmYm90dG9tQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9t
U2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtl
KGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJv
dHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQubWF4WSgpKSwgYm90dG9tRnVuY3Rpb24u
Z2V0KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtMTEwNiwxOCArMTEwNiwxOCBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dEZpbGxDb2xvcihvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlD
b2xvciksIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKIAotICAgIEZsb2F0UG9pbnQgYXJyb3cxWzNdOwot
ICAgIGFycm93MVswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgLSBzcGFjZUJldHdl
ZW5BcnJvd3MgLyAyLjBmKTsKLSAgICBhcnJvdzFbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsg
YXJyb3dXaWR0aCwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwotICAgIGFy
cm93MVsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVy
WSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYgLSBhcnJvd0hlaWdodCk7CisgICAgR3JhcGhp
Y3NQb2ludCBhcnJvdzFbM107CisgICAgYXJyb3cxWzBdID0gR3JhcGhpY3NQb2ludChsZWZ0RWRn
ZSwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93MVsxXSA9
IEdyYXBoaWNzUG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZIC0gc3BhY2VCZXR3
ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzJdID0gR3JhcGhpY3NQb2ludChsZWZ0RWRn
ZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4w
ZiAtIGFycm93SGVpZ2h0KTsKIAogICAgIC8vIERyYXcgdGhlIHRvcCBhcnJvdwogICAgIHBhaW50
SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBhcnJvdzEsIHRydWUpOwogCi0gICAg
RmxvYXRQb2ludCBhcnJvdzJbM107Ci0gICAgYXJyb3cyWzBdID0gRmxvYXRQb2ludChsZWZ0RWRn
ZSwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwotICAgIGFycm93MlsxXSA9
IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVu
QXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cyWzJdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFy
cm93V2lkdGggLyAyLjBmLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZiArIGFy
cm93SGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IGFycm93MlszXTsKKyAgICBhcnJvdzJbMF0g
PSBHcmFwaGljc1BvaW50KGxlZnRFZGdlLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8g
Mi4wZik7CisgICAgYXJyb3cyWzFdID0gR3JhcGhpY3NQb2ludChsZWZ0RWRnZSArIGFycm93V2lk
dGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBhcnJvdzJbMl0g
PSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgKyBz
cGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmICsgYXJyb3dIZWlnaHQpOwogCiAgICAgLy8gRHJhdyB0
aGUgYm90dG9tIGFycm93CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29u
KDMsIGFycm93MiwgdHJ1ZSk7CkBAIC0xMzQxLDcgKzEzNDEsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNsaWRlclRodW1iKFJlCiAgICAgICAgICAgICBbc2xpZGVyVGh1bWJDZWxsIHN0
b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpuaWwgbW91c2VJc1VwOllF
U107CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CisgICAgR3JhcGhpY3NSZWN0
IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlk
ZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBz
bGlkZXIuCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCkKICAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkgKyB2
ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwpAQCAtMTM0OSwxMiArMTM0OSwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRl
clRodW1iKFJlCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7CiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpOwogICAgIAotICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBib3VuZHM7Cisg
ICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdCA9IGJvdW5kczsKICAgICBpZiAoem9vbUxldmVs
ICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53
aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpv
b21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8uY29udGV4
dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwotICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVs
KSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxl
dmVsLCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgt
dW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KICAgICAKQEAgLTEz
NjIsMTIgKzEzNjIsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihS
ZQogICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS85NDIxNzgxPi4KICAgICBp
ZiAoIW8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpKSB7CiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwgdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+dHJhbnNsYXRlKDAsIC0odW56b29tZWRSZWN0LnkoKSArIHVuem9vbWVk
UmVjdC5oZWlnaHQoKSkpOwogICAgIH0KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwgdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIHBhaW50SW5mby5j
b250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMSwgLTEpKTsKICAgICBwYWludEluZm8uY29udGV4
dC0+dHJhbnNsYXRlKDAsIC0odW56b29tZWRSZWN0LnkoKSArIHVuem9vbWVkUmVjdC5oZWlnaHQo
KSkpOwogI2VuZGlmCiAgICAgCkBAIC0xMzk0LDcgKzEzOTQsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNlYXJjaEZpZWxkKFJlCiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1
bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5z
ZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3Qu
eSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2
ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhp
Y3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9
CiAKQEAgLTE0ODYsNyArMTQ4Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGRDYW4KIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKIAotICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2VsQnV0dG9u
UmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkp
XTsKKyAgICBHcmFwaGljc1JlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJl
Y3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07
CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIC8vIFRha2UgY2FyZSBvZiBjYXNlcyB3
aGVyZSB0aGUgY2FuY2VsIGJ1dHRvbiB3YXMgbm90IGFsaWduZWQgd2l0aCB0aGUgcmlnaHQgYm9y
ZGVyIG9mIHRoZSBpbnB1dCBlbGVtZW50IChmb3IgZS5nLgpAQCAtMTQ5OSwxMiArMTQ5OSwxMiBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAKICAgICBsb2NhbEJv
dW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxC
b3VuZHMsIHIpOwogCi0gICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7Cisg
ICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CiAgICAgaWYgKHpvb21M
ZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJl
Y3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQo
dW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21M
ZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpv
b21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xh
dGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAKQEAgLTE1
NzEsNyArMTU3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXMK
IAogICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOwog
Ci0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9y
Qm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAg
IEdyYXBoaWNzUmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJv
dW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKICAgICBs
b2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywg
bG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dp
dGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKQEAgLTE2MDcs
NyArMTYwNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXMKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0
KTsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAK
LSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JC
b3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CisgICAg
R3JhcGhpY3NSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91
bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOwogICAgIGxv
Y2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBs
b2NhbEJvdW5kcywgcik7CiAgICAgCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3Vu
ZHMpOwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZFJlcwogICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0Lndp
ZHRoKCkgLyB6b29tTGV2ZWwpOwogICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0KHVuem9v
bWVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwp
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tTGV2
ZWwsIHpvb21MZXZlbCkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11
bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogCkBAIC0xNzExLDE1
ICsxNzExLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3MKIH0K
IAogLy8gVXRpbGl0eSB0byBzY2FsZSB3aGVuIHRoZSBVSSBwYXJ0IGFyZSBub3Qgc2NhbGVkIGJ5
IHdrRHJhd01lZGlhVUlQYXJ0Ci1zdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFk
anVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKK3N0YXRpYyBHcmFwaGljc1JlY3Qg
Z2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQog
ewogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAg
ICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KG9yaWdpbmFsUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0
IHVuem9vbWVkUmVjdChvcmlnaW5hbFJlY3QpOwogICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZiAm
JiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1l
KSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAv
IHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0
LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9v
bUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVk
UmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHVuem9vbWVk
UmVjdDsKQEAgLTE4MTAsNyArMTgxMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVk
aWFTbGlkZXJUcmEKICAgICBDb250ZXh0Q29udGFpbmVyIGNnQ29udGV4dENvbnRhaW5lcihwYWlu
dEluZm8uY29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjZ0NvbnRleHRDb250
YWluZXIuY29udGV4dCgpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRV
bnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOworICAg
IEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJy
ZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOwogICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2so
bWVkaWFDb250cm9sbGVyVGhlbWUoKSwgY29udGV4dCwgdW56b29tZWRSZWN0LCAKICAgICAgICAg
dGltZUxvYWRlZCwgY3VycmVudFRpbWUsIGR1cmF0aW9uLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxh
Z3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE4ODQsNyArMTg4NCw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGkKIAogICAgIENvbnRleHRDb250YWlu
ZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250ZXh0KTsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBGbG9h
dFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRl
eHQobywgcGFpbnRJbmZvLCByKTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0ID0gZ2V0
VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKICAg
ICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSwgbWVkaWFDb250cm9s
bGVyVGhlbWUoKSwgY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQoKSwgdW56b29tZWRSZWN0LCBn
ZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAg
LTE4OTcsNyArMTg5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFUaW1lUmVt
YWkKIAogICAgIENvbnRleHRDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5j
b250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50
SW5mby5jb250ZXh0KTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRS
ZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICBHcmFwaGlj
c1JlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRl
eHQobywgcGFpbnRJbmZvLCByKTsKICAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVRpbWVSZW1h
aW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250YWluZXIu
Y29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lU2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1
OCwxMiArNzU4LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQK
IAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7
CiAKLSAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIu
aGVpZ2h0KCkgLyAyLjBmKTsKKyAgICBHcmFwaGljc1JlY3QgdG9wR3JhZGllbnQoci54KCksIHIu
eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlv
bkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUsIE5V
TEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRvcHRDRiwg
Q0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJhY2tzKSk7
CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3Jh
ZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC5tYXhZ
KCkpLCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBGbG9hdFJlY3Qg
Ym90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIuMGYs
IHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKKyAgICBHcmFw
aGljc1JlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQo
KSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsK
ICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFja3MgPSB7IDAsIEJv
dHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlv
blJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBO
VUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGlu
Z1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2Us
IENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRpZW50LnkoKSksIENH
UG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQubWF4WSgpKSwgYm90
dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtODI5LDEwICs4MjksMTAgQEAg
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dAogICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8uY29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3IoTm9TdHJva2UsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCi0g
ICAgRmxvYXRQb2ludCBhcnJvd1szXTsKLSAgICBhcnJvd1swXSA9IEZsb2F0UG9pbnQobGVmdEVk
Z2UsIGNlbnRlclkgLSBhcnJvd0hlaWdodCAvIDIuMGYpOwotICAgIGFycm93WzFdID0gRmxvYXRQ
b2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBhcnJvd0hlaWdodCAvIDIuMGYp
OwotICAgIGFycm93WzJdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjBm
LCBjZW50ZXJZICsgYXJyb3dIZWlnaHQgLyAyLjBmKTsKKyAgICBHcmFwaGljc1BvaW50IGFycm93
WzNdOworICAgIGFycm93WzBdID0gR3JhcGhpY3NQb2ludChsZWZ0RWRnZSwgY2VudGVyWSAtIGFy
cm93SGVpZ2h0IC8gMi4wZik7CisgICAgYXJyb3dbMV0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdl
ICsgYXJyb3dXaWR0aCwgY2VudGVyWSAtIGFycm93SGVpZ2h0IC8gMi4wZik7CisgICAgYXJyb3db
Ml0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRlclkg
KyBhcnJvd0hlaWdodCAvIDIuMGYpOwogCiAgICAgLy8gRHJhdyB0aGUgYXJyb3cKICAgICBwYWlu
dEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgYXJyb3csIHRydWUpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw3ICs1MTksNyBAQCBib29sIFJlbmRlclRoZW1lV2lu
Q0U6OnBhaW50U2xpZGVyVGh1bWIoCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7CiAgICAgaWYgKG1lZGlhRWxlbWVudCkg
ewogICAgICAgICBmbG9hdCBwdCA9IChtZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkgLSBtZWRp
YUVsZW1lbnQtPnN0YXJ0VGltZSgpKSAvIG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKLSAgICAg
ICAgRmxvYXRSZWN0IGludFJlY3QgPSByOworICAgICAgICBHcmFwaGljc1JlY3QgaW50UmVjdCA9
IHI7CiAgICAgICAgIGludFJlY3Quc2V0WChpbnRSZWN0LngoKSArIGludFJlY3Qud2lkdGgoKSAq
IHB0IC0gMik7CiAgICAgICAgIGludFJlY3Quc2V0V2lkdGgoNSk7CiAgICAgICAgIGkuY29udGV4
dC0+ZmlsbFJlY3QoaW50UmVjdCk7CkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZAogYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1l
ZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihv
LCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVjdCBpbVJlY3QgPSByOworICAgIEdyYXBoaWNz
UmVjdCBpbVJlY3QgPSByOwogICAgIGltUmVjdC5pbmZsYXRlKC0yKTsKICAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihD
b2xvcjo6YmxhY2spOwpAQCAtNTU4LDE4ICs1NTgsMTggQEAgYm9vbCBSZW5kZXJUaGVtZVdpbkNF
OjpwYWludE1lZGlhTXV0ZUJ1dAogICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludElu
Zm8sIHIpOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVu
dFBhcmVudChvLT5ub2RlKCkpOwogICAgIGJvb2wgbXV0ZWQgPSAhbWVkaWFFbGVtZW50IHx8IG1l
ZGlhRWxlbWVudC0+bXV0ZWQoKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKKyAgICBHcmFw
aGljc1JlY3QgaW1SZWN0ID0gcjsKICAgICBpbVJlY3QuaW5mbGF0ZSgtMik7CiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmJsYWNrKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENv
bG9yOjpibGFjayk7Ci0gICAgRmxvYXRQb2ludCBwdHNbNl0gPSB7Ci0gICAgICAgIEZsb2F0UG9p
bnQoaW1SZWN0LngoKSArIDEsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAot
ICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAs
IGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAotICAgICAgICBGbG9hdFBvaW50
KGltUmVjdC5tYXhYKCkgLSAxLCBpbVJlY3QueSgpKSwKLSAgICAgICAgRmxvYXRQb2ludChpbVJl
Y3QubWF4WCgpIC0gMSwgaW1SZWN0Lm1heFkoKSksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0
LngoKSArIDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSArIDIuMCAqIGltUmVj
dC5oZWlnaHQoKSAvIDMuMCksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0LngoKSArIDEsIGlt
UmVjdC55KCkgKyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApCisgICAgR3JhcGhpY3NQb2lu
dCBwdHNbNl0gPSB7CisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSArIDEsIGltUmVj
dC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAorICAgICAgICBHcmFwaGljc1BvaW50KGlt
UmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAsIGltUmVjdC55KCkgKyBpbVJlY3Qu
aGVpZ2h0KCkgLyAzLjApLAorICAgICAgICBHcmFwaGljc1BvaW50KGltUmVjdC5tYXhYKCkgLSAx
LCBpbVJlY3QueSgpKSwKKyAgICAgICAgR3JhcGhpY3NQb2ludChpbVJlY3QubWF4WCgpIC0gMSwg
aW1SZWN0Lm1heFkoKSksCisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSArIDEgKyBp
bVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSArIDIuMCAqIGltUmVjdC5oZWlnaHQoKSAv
IDMuMCksCisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSArIDEsIGltUmVjdC55KCkg
KyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApCiAgICAgfTsKICAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oNiwgcHRzKTsKICAgICBpZiAobXV0ZWQpCkBAIC01ODEs
NyArNTgxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhTXV0ZUJ1dAogYm9v
bCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGJv
b2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVjdCBpbVJl
Y3QgPSByOworICAgIEdyYXBoaWNzUmVjdCBpbVJlY3QgPSByOwogICAgIGltUmVjdC5pbmZsYXRl
KC0zKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwpAQCAtNTk1LDcgKzU5NSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVBsYXlCdXQKICAgICAgICAgaW1SZWN0Lm1v
dmUoMi4wICogd2lkdGggLyAzLjAsIDApOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Zmls
bFJlY3QoaW1SZWN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50IHB0c1szXSA9
IHsgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgRmxvYXRQb2ludChpbVJlY3Qu
bWF4WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgRmxvYXRQb2ludChp
bVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OworICAgICAgICBHcmFwaGljc1BvaW50IHB0c1sz
XSA9IHsgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgR3JhcGhpY3NQb2lu
dChpbVJlY3QubWF4WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgR3Jh
cGhpY3NQb2ludChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OwogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRzKTsKICAgICB9CiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTYwNSwxMCArNjA1LDEwIEBAIGJvb2wgUmVuZGVy
VGhlbWVXaW5DRTo6cGFpbnRNZWRpYVBsYXlCdXQKIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFp
bnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgYm9vbCByYyA9IHBhaW50QnV0dG9u
KG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7CisgICAgR3JhcGhp
Y3NSZWN0IGltUmVjdCA9IHI7CiAgICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIEZsb2F0UG9p
bnQgcHRzWzNdID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAy
LjAsIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC54KCksIChpbVJlY3QueSgpICsgaW1S
ZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgo
KSkgLyAyLjAsIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgRmxvYXRQb2ludCBwdHMyWzNdID0geyBG
bG9hdFBvaW50KGltUmVjdC5tYXhYKCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KChpbVJlY3Qu
eCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkg
LyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIGltUmVjdC5tYXhZKCkpIH07CisgICAg
R3JhcGhpY3NQb2ludCBwdHNbM10gPSB7IEdyYXBoaWNzUG9pbnQoKGltUmVjdC54KCkgKyBpbVJl
Y3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSwg
KGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9pbnQoKGltUmVj
dC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkgfTsKKyAgICBHcmFw
aGljc1BvaW50IHB0czJbM10gPSB7IEdyYXBoaWNzUG9pbnQoaW1SZWN0Lm1heFgoKSwgaW1SZWN0
LnkoKSksIEdyYXBoaWNzUG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwg
KGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9pbnQoaW1SZWN0
Lm1heFgoKSwgaW1SZWN0Lm1heFkoKSkgfTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwog
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKQEAgLTYy
MSwxMCArNjIxLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNlZWtCYWMK
IGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CiB7CiAgICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxv
YXRSZWN0IGltUmVjdCA9IHI7CisgICAgR3JhcGhpY3NSZWN0IGltUmVjdCA9IHI7CiAgICAgaW1S
ZWN0LmluZmxhdGUoLTMpOwotICAgIEZsb2F0UG9pbnQgcHRzWzNdID0geyBGbG9hdFBvaW50KGlt
UmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1h
eFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBv
aW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgRmxvYXRQb2ludCBwdHMyWzNd
ID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAsIGltUmVj
dC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIChpbVJlY3QueSgpICsgaW1SZWN0Lm1h
eFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAy
LjAsIGltUmVjdC5tYXhZKCkpIH07CisgICAgR3JhcGhpY3NQb2ludCBwdHNbM10gPSB7IEdyYXBo
aWNzUG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoKGltUmVjdC54
KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAv
IDIuMCksIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkgfTsKKyAgICBH
cmFwaGljc1BvaW50IHB0czJbM10gPSB7IEdyYXBoaWNzUG9pbnQoKGltUmVjdC54KCkgKyBpbVJl
Y3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoaW1SZWN0Lm1heFgo
KSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9pbnQoKGlt
UmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkgfTsKICAgICBw
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJv
a2VDb2xvcihDb2xvcjo6YmxhY2spOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29s
b3IoQ29sb3I6OmJsYWNrKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3
IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4g
dHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAiKSI7CiB9CiAKLVRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQmIHApCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
KQogewogICAgIHRzIDw8ICIoIjsgICAgCiAgICAgaWYgKGhhc0ZyYWN0aW9ucyhwLngoKSkpCkBA
IC0xMDksNyArMTA5LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
YwogICAgIHJldHVybiB0cyA8PCAiKSI7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0U2l6ZSYgcykKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcykKIHsKICAgICB0cyA8PCAid2lk
dGg9IjsKICAgICBpZiAoaGFzRnJhY3Rpb25zKHMud2lkdGgoKSkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDkxMDExKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsOCArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50
OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUG9p
bnQ7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEludFBvaW50Owog
Y2xhc3MgSW50UmVjdDsKQEAgLTcwLDggKzcwLDggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJP
YmplY3QoVGV4dFN0cmVhbQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBJbnRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgSW50UmVjdCYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
RmxvYXRQb2ludCYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
RmxvYXRTaXplJik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBH
cmFwaGljc1BvaW50Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBHcmFwaGljc1NpemUmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4KIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZlY3RvcjxJdGVtPiYgdmVjdG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zMzEsOSArMzMxLDkgQEAgdm9pZCBSZW5kZXJW
aWV3OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYQogICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0
KGFjY3VtdWxhdGVkT2Zmc2V0LCBtX2xheWVyLT5zaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJW
aWV3OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVy
Vmlldzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7Ci0gICAg
cXVhZHMuYXBwZW5kKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fbGF5ZXItPnNpemUoKSkpOwor
ICAgIHF1YWRzLmFwcGVuZChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX2xheWVyLT5z
aXplKCkpKTsKIH0KIAogc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9u
KFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0zNzksNyArMzc5LDcg
QEAgSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbAogICAgICAgICAvLyBS
ZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBy
ZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KICAgICAgICAgSW50
UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7Ci0g
ICAgICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGN1cnJSZWN0KSk7CisgICAgICAgICAgICBHcmFwaGljc1F1
YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhp
Y3NSZWN0KGN1cnJSZWN0KSk7CiAgICAgICAgICAgICBjdXJyUmVjdCA9IGFic1F1YWQuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsgCiAgICAgICAgIH0KICAgICAgICAgc2VsUmVjdC51bml0ZShjdXJy
UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9u
IDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmludGluZygpIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRNYXhpbWFsT3V0bGluZVNpemUoaW50IG8pOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9u
IDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6c2V0V2lk
Z2V0KFBhc3NSZWZQdHI8CiAgICAgICAgIC8vIHN0eWxlIHBvaW50ZXIpLgogICAgICAgICBpZiAo
c3R5bGUoKSkgewogICAgICAgICAgICAgaWYgKCFuZWVkc0xheW91dCgpKQotICAgICAgICAgICAg
ICAgIHNldFdpZGdldEdlb21ldHJ5KEludFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1
YWQoY29udGVudEJveFJlY3QoKSkpLmJvdW5kaW5nQm94KCkpLCBjb250ZW50Qm94UmVjdCgpLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgc2V0V2lkZ2V0R2VvbWV0cnkoSW50UmVjdChsb2NhbFRv
QWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChjb250ZW50Qm94UmVjdCgpKSkuYm91bmRpbmdCb3go
KSksIGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgICAgICBtX3dpZGdldC0+aGlkZSgp
OwogICAgICAgICAgICAgZWxzZSB7CkBAIC0zMjcsNyArMzI3LDcgQEAgdm9pZCBSZW5kZXJXaWRn
ZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKAogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0
IGNvbnRlbnRCb3ggPSBjb250ZW50Qm94UmVjdCgpOwotICAgIEludFJlY3QgYWJzb2x1dGVDb250
ZW50Qm94ID0gSW50UmVjdChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChjb250ZW50Qm94
KSkuYm91bmRpbmdCb3goKSk7CisgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3ggPSBJbnRS
ZWN0KGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKGNvbnRlbnRCb3gpKS5ib3VuZGlu
Z0JveCgpKTsKICAgICBib29sIGJvdW5kc0NoYW5nZWQgPSBzZXRXaWRnZXRHZW9tZXRyeShhYnNv
bHV0ZUNvbnRlbnRCb3gsIGNvbnRlbnRCb3guc2l6ZSgpKTsKIAogICAgIC8vIGlmIHRoZSBmcmFt
ZSBib3VuZHMgZ290IGNoYW5nZWQsIG9yIGlmIHZpZXcgbmVlZHMgbGF5b3V0IChwb3NzaWJseSBp
bmRpY2F0aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgUm9vdElu
bGluZUJveDo6YWRkSGlnaGxpZ2h0T3ZlcmZsb3cKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
SGlnaGxpZ2h0IGFjdHMgYXMgYSBzZWxlY3Rpb24gaW5mbGF0aW9uLgotICAgIEZsb2F0UmVjdCBy
b290UmVjdCgwLCBzZWxlY3Rpb25Ub3AoKSwgbG9naWNhbFdpZHRoKCksIHNlbGVjdGlvbkhlaWdo
dCgpKTsKKyAgICBHcmFwaGljc1JlY3Qgcm9vdFJlY3QoMCwgc2VsZWN0aW9uVG9wKCksIGxvZ2lj
YWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y3VzdG9tSGlnaGxp
Z2h0UmVjdChyZW5kZXJlcigpLT5ub2RlKCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmhpZ2hsaWdo
dCgpLCByb290UmVjdCkpOwogICAgIHNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhpbmZsYXRl
ZFJlY3QsIGluZmxhdGVkUmVjdCwgbGluZVRvcCgpLCBsaW5lQm90dG9tKCkpOwogfQpAQCAtMTcw
LDggKzE3MCw4IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBpbmZsYXRlZCByZWN0IHNvIHRoYXQgd2Ug
Y2FuIHByb3Blcmx5IGhpdCB0ZXN0LgotICAgIEZsb2F0UmVjdCByb290UmVjdChwYWludE9mZnNl
dC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlvblRvcCgpLCBsb2dpY2FsV2lk
dGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3QgPSBw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hsaWdodFJlY3QocmVuZGVyZXIoKS0+
bm9kZSgpLCBoaWdobGlnaHRUeXBlLCByb290UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHJvb3RS
ZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcGFpbnRPZmZzZXQueSgpICsgc2VsZWN0aW9uVG9w
KCksIGxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0
IGluZmxhdGVkUmVjdCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y3VzdG9tSGlnaGxpZ2h0
UmVjdChyZW5kZXJlcigpLT5ub2RlKCksIGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKICAgICBp
ZiAoaW5mbGF0ZWRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQogICAgICAgICBwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHJlbmRlcmVyKCktPm5v
ZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFRyYW5zZm9ybVN0YXRl
OjpmbGF0dGVuKCkKICAgICBmbGF0dGVuV2l0aFRyYW5zZm9ybSgqbV9hY2N1bXVsYXRlZFRyYW5z
Zm9ybSk7CiB9CiAKLUZsb2F0UG9pbnQgVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50KCkgY29u
c3QKK0dyYXBoaWNzUG9pbnQgVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50KCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybiBtX2xhc3RQ
bGFuYXJQb2ludDsKQEAgLTk4LDcgKzk4LDcgQEAgRmxvYXRQb2ludCBUcmFuc2Zvcm1TdGF0ZTo6
bWFwcGVkUG9pbnQoKQogICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLT5pbnZlcnNl
KCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKIH0KIAotRmxvYXRRdWFkIFRyYW5z
Zm9ybVN0YXRlOjptYXBwZWRRdWFkKCkgY29uc3QKK0dyYXBoaWNzUXVhZCBUcmFuc2Zvcm1TdGF0
ZTo6bWFwcGVkUXVhZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJhbnNmb3Jt
KQogICAgICAgICByZXR1cm4gbV9sYXN0UGxhbmFyUXVhZDsKQEAgLTE2NCwxMiArMTY0LDEyIEBA
IHZvaWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpmbGF0dGVuV2kKICAgICBtX2FjY3VtdWxh
dGluZ1RyYW5zZm9ybSA9IGZhbHNlOwogfQogCi1GbG9hdFBvaW50IEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZTo6bWFwcGVkUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY2N1bXVs
YXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsK
IH0KIAotRmxvYXRRdWFkIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUXVhZCgpIGNv
bnN0CitHcmFwaGljc1F1YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJv
amVjdFF1YWQobV9sYXN0UGxhbmFyUXVhZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcs
OCBAQAogI2RlZmluZSBUcmFuc2Zvcm1TdGF0ZV9oCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBl
bnVtIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiB7IEZsYXR0ZW5UcmFuc2Zvcm0sIEFjY3VtdWxhdGVU
cmFuc2Zvcm0gfTsKIAogICAgIC8vIElmIHF1YWQgaXMgbm9uLW51bGwsIGl0IHdpbGwgYmUgbWFw
cGVkCi0gICAgVHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtRGlyZWN0aW9uIG1hcHBpbmdEaXJlY3Rp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UXVhZCogcXVhZCA9IDApCisgICAg
VHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtRGlyZWN0aW9uIG1hcHBpbmdEaXJlY3Rpb24sIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUXVhZCogcXVhZCA9IDApCiAgICAgICAg
IDogbV9sYXN0UGxhbmFyUG9pbnQocCkKICAgICAgICAgLCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9y
bShmYWxzZSkKICAgICAgICAgLCBtX21hcFF1YWQocXVhZCAhPSAwKQpAQCAtNjUsMTggKzY1LDE4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsYXR0ZW4oKTsKIAogICAgIC8vIFJldHVybiB0aGUgY29v
cmRzIG9mIHRoZSBwb2ludCBvciBxdWFkIGluIHRoZSBsYXN0IGZsYXR0ZW5lZCBsYXllcgotICAg
IEZsb2F0UG9pbnQgbGFzdFBsYW5hclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGxhbmFy
UG9pbnQ7IH0KLSAgICBGbG9hdFF1YWQgbGFzdFBsYW5hclF1YWQoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RQbGFuYXJRdWFkOyB9CisgICAgR3JhcGhpY3NQb2ludCBsYXN0UGxhbmFyUG9pbnQoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJQb2ludDsgfQorICAgIEdyYXBoaWNzUXVhZCBsYXN0
UGxhbmFyUXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclF1YWQ7IH0KIAogICAgIC8v
IFJldHVybiB0aGUgcG9pbnQgb3IgcXVhZCBtYXBwZWQgdGhyb3VnaCB0aGUgY3VycmVudCB0cmFu
c2Zvcm0KLSAgICBGbG9hdFBvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7Ci0gICAgRmxvYXRRdWFk
IG1hcHBlZFF1YWQoKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcHBlZFBvaW50KCkgY29u
c3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CiAgICAgCi0gICAgRmxvYXRQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKLSAgICBGbG9hdFF1YWQg
bV9sYXN0UGxhbmFyUXVhZDsKKyAgICBHcmFwaGljc1BvaW50IG1fbGFzdFBsYW5hclBvaW50Owor
ICAgIEdyYXBoaWNzUXVhZCBtX2xhc3RQbGFuYXJRdWFkOwogCiAgICAgLy8gV2Ugb25seSBhbGxv
Y2F0ZSB0aGUgdHJhbnNmb3JtIGlmIHdlIG5lZWQgdG8KICAgICBPd25QdHI8VHJhbnNmb3JtYXRp
b25NYXRyaXg+IG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm07CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZh
dGU6CiAKIGNsYXNzIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAs
IGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFw
aGljc1F1YWQmIHF1YWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZShwLCBxdWFkKSk7CiAgICAgfQpAQCAtMTAxLDE3ICsxMDEsMTcg
QEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNsYXRlKGludCB4LCBpbnQgeSwgVHJhbnNmb3JtQWNj
dW11bGF0aW9uKTsKICAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyLCBUcmFuc2Zvcm1BY2N1bXVsYXRpb24pOwog
Ci0gICAgRmxvYXRQb2ludCBtYXBwZWRQb2ludCgpIGNvbnN0OwotICAgIEZsb2F0UXVhZCBtYXBw
ZWRRdWFkKCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBtYXBwZWRQb2ludCgpIGNvbnN0Owor
ICAgIEdyYXBoaWNzUXVhZCBtYXBwZWRRdWFkKCkgY29uc3Q7CiAgICAgdm9pZCBmbGF0dGVuKCk7
CiAKLSAgICBGbG9hdFBvaW50IG1fbGFzdFBsYW5hclBvaW50OwotICAgIEZsb2F0UXVhZCBtX2xh
c3RQbGFuYXJRdWFkOworICAgIEdyYXBoaWNzUG9pbnQgbV9sYXN0UGxhbmFyUG9pbnQ7CisgICAg
R3JhcGhpY3NRdWFkIG1fbGFzdFBsYW5hclF1YWQ7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9hY2N1bXVsYXRlZFRyYW5zZm9ybTsKICAgICBib29sIG1fYWNjdW11bGF0aW5nVHJhbnNmb3Jt
OwogCiBwcml2YXRlOgotICAgIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZShjb25zdCBGbG9hdFBv
aW50JiBwLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCisgICAgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCkKICAg
ICAgICAgOiBtX2xhc3RQbGFuYXJQb2ludChwKQogICAgICAgICAsIG1fbGFzdFBsYW5hclF1YWQo
cXVhZCkKICAgICAgICAgLCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybShmYWxzZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTAgKzE0MiwxMCBA
QCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgTGF5b3V0VW5p
dCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgaW5kZXhXaWR0aCArIGdSYWRpY2Fs
TGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAtIHJvb3RQYWQ7CiAg
ICAgYWRqdXN0ZWRQYWludE9mZnNldC5zZXRZKGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgc3R5
bGUoKS0+cGFkZGluZ1RvcCgpLnZhbHVlKCkgLSByb290UGFkKTsKICAgICAKLSAgICBGbG9hdFBv
aW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgpKTsKLSAg
ICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAq
IGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRp
Y2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BM
ZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgZ1Jh
ZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50IGxlZnRF
bmQoc3RhcnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hp
ZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHRvcFN0YXJ0KHN0
YXJ0IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50
IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250V2lkdGgg
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7
CisgICAgR3JhcGhpY3NQb2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRY
UG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgZ1JhZGljYWxUb3BM
ZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IGxlZnRFbmQoc3Rh
cnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hpZnQgKiBz
dHlsZSgpLT5mb250U2l6ZSgpKTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIAogICAgIFBhdGggcm9v
dDsKICAgICAKLSAgICByb290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRo
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkpOworICAgIHJvb3QubW92ZVRvKEdyYXBoaWNzUG9p
bnQodG9wU3RhcnQueCgpICsgd2lkdGgsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiAgICAg
Ly8gZHJhdyB0b3AKICAgICByb290LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8gZHJhdyBm
cm9tIHRvcCBsZWZ0IGNvcm5lciB0byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApAQCAtMTc3LDcg
KzE3Nyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBt
YXNrLm1vdmVUbyh0b3BTdGFydCk7CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CiAg
ICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2lu
dCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVu
ZC55KCkpKTsKKyAgICBtYXNrLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BMZWZ0Lngo
KSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAog
ICAgIGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsMTAgKzEw
OCwxMCBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50CiAgICAgCiAg
ICAgd2lkdGggKz0gdG9wU3RhcnRTaGlmdDsKICAgICAKLSAgICBGbG9hdFBvaW50IHRvcFN0YXJ0
KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAtIHRvcFN0YXJ0U2hpZnQsIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpKTsKLSAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoYWRqdXN0
ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxCb3R0b21Qb2ludFhQb3Mg
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7
Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRX
aWR0aCAqIGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50
IGxlZnRFbmQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLCB0b3BMZWZ0LnkoKSArIGdSYWRpY2Fs
TGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIEdyYXBoaWNzUG9pbnQg
dG9wU3RhcnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoIC0gdG9wU3RhcnRT
aGlmdCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgYm90dG9t
TGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFkaWNhbEJvdHRv
bVBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsgZ1JhZGlj
YWxCYXNlUGFkKTsKKyAgICBHcmFwaGljc1BvaW50IHRvcExlZnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICwgYWRqdXN0ZWRQ
YWludE9mZnNldC55KCkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOwor
ICAgIEdyYXBoaWNzUG9pbnQgbGVmdEVuZChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAsIHRvcExl
ZnQueSgpICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CiAg
ICAgCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRl
eHQpOwogICAgIApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9v
dDo6cGFpbnQoUGFpbnQKICAgICAKICAgICBQYXRoIHJvb3Q7CiAgICAgCi0gICAgcm9vdC5tb3Zl
VG8oRmxvYXRQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpKSk7CisgICAgcm9vdC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0
aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiAgICAgLy8gZHJhdyB0b3AKICAgICByb290
LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8gZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0
byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICBtYXNrLm1vdmVUbyh0b3BTdGFydCk7
CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CiAgICAgbWFzay5hZGRMaW5lVG8odG9w
TGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBs
ZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKKyAgICBtYXNrLmFk
ZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICog
dG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+Y2xp
cChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdS
ZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TVkdSZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3Mg
R3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJlbmRlck9iamVjdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBTaGFkb3dEYXRhOjph
ZGp1c3RSZWN0Rm9yU2hhZG93KEludAogICAgIHJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkg
LSBzaGFkb3dUb3AgKyBzaGFkb3dCb3R0b20pOwogfQogCi12b2lkIFNoYWRvd0RhdGE6OmFkanVz
dFJlY3RGb3JTaGFkb3coRmxvYXRSZWN0JiByZWN0LCBpbnQgYWRkaXRpb25hbE91dGxpbmVTaXpl
KSBjb25zdAordm9pZCBTaGFkb3dEYXRhOjphZGp1c3RSZWN0Rm9yU2hhZG93KEdyYXBoaWNzUmVj
dCYgcmVjdCwgaW50IGFkZGl0aW9uYWxPdXRsaW5lU2l6ZSkgY29uc3QKIHsKICAgICBMYXlvdXRV
bml0IHNoYWRvd0xlZnQgPSAwOwogICAgIExheW91dFVuaXQgc2hhZG93UmlnaHQgPSAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmV4
dChQYXNzT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvdykgeyBtX25leHQgPSBzaGFkb3c7IH0KIAog
ICAgIHZvaWQgYWRqdXN0UmVjdEZvclNoYWRvdyhJbnRSZWN0JiwgaW50IGFkZGl0aW9uYWxPdXRs
aW5lU2l6ZSA9IDApIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0UmVjdEZvclNoYWRvdyhGbG9hdFJl
Y3QmLCBpbnQgYWRkaXRpb25hbE91dGxpbmVTaXplID0gMCkgY29uc3Q7CisgICAgdm9pZCBhZGp1
c3RSZWN0Rm9yU2hhZG93KEdyYXBoaWNzUmVjdCYsIGludCBhZGRpdGlvbmFsT3V0bGluZVNpemUg
PSAwKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1feDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBS
ZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbwogICAgIGlmICghZmlyc3RDaGlsZCgp
ICYmICFzZWxmV2lsbFBhaW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgR3JhcGhp
Y3NSZWN0IHJlcGFpbnRSZWN0ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAg
ICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChy
ZXBhaW50UmVjdCwgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLCBwYWludEluZm8pKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTE0OCwyNyArMTQ4LDI3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVy
OjphZGRGb2N1c1JpbmdSZWMKIAogdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKQogewotICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsK
LSAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgbV9yZXBhaW50Qm91
bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gR3JhcGhp
Y3NSZWN0KCk7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgpOworICAg
IG1fcmVwYWludEJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBTVkdSZW5kZXJT
dXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVjdEJvdW5k
aW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CiAgICAg
U1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKHRoaXMs
IG1fcmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAotYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5v
ZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEdyYXBoaWNz
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQogewogICAgIC8vIEdpdmUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIgYSBj
aGFuY2UgdG8gYXBwbHkgaXRzIHZpZXdwb3J0IGNsaXAKICAgICBpZiAoIXBvaW50SXNJbnNpZGVW
aWV3cG9ydENsaXAocG9pbnRJblBhcmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNl
KCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisgICAgR3JhcGhpY3NQb2ludCBsb2NhbFBvaW50
ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFy
ZW50KTsKIAogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0
aGlzLCBsb2NhbFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5ub2Rl
QXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRHcmFwaGljc1BvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MywyOCArNTMsMjggQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBv
aW50Jik7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5n
Qm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFp
bnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBo
aWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICAvLyBBbGxv
dyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0
IHRpbWUgaW4gbGF5b3V0KCkKICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxUcmFuc2Zv
cm0oKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRD
b250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCksIHBhaW50
KCkgYW5kIG5vZGVBdEZsb2F0UG9pbnQoKQorICAgIC8vIEFsbG93IFJlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWVzIGluIGxheW91dCgpLCBwYWlu
dCgpIGFuZCBub2RlQXRHcmFwaGljc1BvaW50KCkKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZpZXdw
b3J0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEZs
b2F0UG9pbnQmIC8qcG9pbnRJblBhcmVudCovKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgR3JhcGhpY3NQb2ludCYgLypw
b2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgc2VsZldpbGxQYWlu
dCgpOwogICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwogCiBwcml2YXRlOgogICAg
IFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0UmVjdCBtX29iamVj
dEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OwotICAgIEZs
b2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9vYmplY3RC
b3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKKyAgICBH
cmFwaGljc1JlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CiAgICAgYm9vbCBtX25lZWRzQm91bmRh
cmllc1VwZGF0ZSA6IDE7CiB9OwogICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCB2b2lkIFJlbmRlclNW
R0ZvcmVpZ25PYmplY3Q6OmxheW91dCgpCiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNJ
blBhcmVudHMgPSB0cnVlOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1f
dmlld3BvcnQ7CisgICAgR3JhcGhpY3NSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKIAog
ICAgIC8vIENhY2hlIHZpZXdwb3J0IGJvdW5kYXJpZXMKLSAgICBGbG9hdFBvaW50IHZpZXdwb3J0
TG9jYXRpb24oZm9yZWlnbi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCkudmFsdWUo
Zm9yZWlnbikpOwotICAgIG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qodmlld3BvcnRMb2NhdGlvbiwg
RmxvYXRTaXplKGZvcmVpZ24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPmhlaWdo
dCgpLnZhbHVlKGZvcmVpZ24pKSk7CisgICAgR3JhcGhpY3NQb2ludCB2aWV3cG9ydExvY2F0aW9u
KGZvcmVpZ24tPngoKS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+eSgpLnZhbHVlKGZvcmVpZ24p
KTsKKyAgICBtX3ZpZXdwb3J0ID0gR3JhcGhpY3NSZWN0KHZpZXdwb3J0TG9jYXRpb24sIEdyYXBo
aWNzU2l6ZShmb3JlaWduLT53aWR0aCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT5oZWlnaHQo
KS52YWx1ZShmb3JlaWduKSkpOwogICAgIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFy
ZW50cykKICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IG9sZFZpZXdw
b3J0ICE9IG1fdmlld3BvcnQ7CiAKQEAgLTE0Miw5ICsxNDIsOSBAQCB2b2lkIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6OmxheW91dCgpCiAgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgp
OwogfQogCi1ib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
Ym9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsK
LSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRyYW5zZm9ybSgpLmludmVyc2UoKS5t
YXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBs
b2NhbFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKIAogICAg
IC8vIEVhcmx5IGV4aXQgaWYgbG9jYWwgcG9pbnQgaXMgbm90IGNvbnRhaW5lZCBpbiBjbGlwcGVk
IHZpZXdwb3J0IGFyZWEKICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRl
bih0aGlzKSAmJiAhbV92aWV3cG9ydC5jb250YWlucyhsb2NhbFBvaW50KSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAK
ICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDUsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
cmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCgpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tl
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBG
bG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZpZXdwb3J0OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CisgICAgdmly
dHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdwb3J0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGlz
U1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNjQsNyArNjQs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgYm9vbCBtX25lZWRz
VHJhbnNmb3JtVXBkYXRlIDogMTsKLSAgICBGbG9hdFJlY3QgbV92aWV3cG9ydDsKKyAgICBHcmFw
aGljc1JlY3QgbV92aWV3cG9ydDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9y
bTsKICAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVu
dFN0b3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0dyYWRpZW50U3RvcC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDkgKzQ0LDkgQEAgcHVibGljOgogICAgIC8vIFJlbmRlck9iamVjdCdzIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb25zIEFTU0VSVF9OT1RfUkVBQ0hFRCgpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDAwCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KikgeyByZXR1cm4gSW50
UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZs
b2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0K
KyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdIaWRkZW5Db250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEyICs0NCwxMiBAQCB2b2lkIFJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lcjo6cGFpbnQoUGFpCiAgICAgLy8gVGhpcyBzdWJ0cmVlIGRvZXMgbm90IHBhaW50
LgogfQogCi12b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYpCit2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1dGVR
dWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpCiB7CiAgICAgLy8gVGhpcyBzdWJ0cmVlIGRvZXMg
bm90IHRha2UgdXAgc3BhY2Ugb3IgcGFpbnQKIH0KIAotYm9vbCBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXI6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgRmxvYXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lcjo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgSGl0VGVzdEFjdGlvbikKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIAogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRG
bG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwog
fTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKICNp
bmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlLmgiCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgUmVu
ZGVyU1ZHSW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQq
IGltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKIAotICAgIEZs
b2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBtX29iamVj
dEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KGltYWdlLT54KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+
eSgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPndpZHRoKCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+aGVp
Z2h0KCkudmFsdWUoaW1hZ2UpKTsKKyAgICBHcmFwaGljc1JlY3Qgb2xkQm91bmRhcmllcyA9IG1f
b2JqZWN0Qm91bmRpbmdCb3g7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVj
dChpbWFnZS0+eCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPnkoKS52YWx1ZShpbWFnZSksIGltYWdl
LT53aWR0aCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPmhlaWdodCgpLnZhbHVlKGltYWdlKSk7CiAg
ICAgaWYgKG1fb2JqZWN0Qm91bmRpbmdCb3ggIT0gb2xkQm91bmRhcmllcykgewogICAgICAgICBt
X3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gdHJ1ZTsKICAgICAgICAgc2V0TmVlZHNMYXlvdXQo
dHJ1ZSk7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYQogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIW1faW1hZ2VSZXNvdXJjZS0+
aGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBHcmFwaGljc1JlY3QgYm91
bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlmICghU1ZH
UmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5kaW5nQm94
LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQogICAgICAgICByZXR1cm47CiAKQEAgLTEy
Myw4ICsxMjMsOCBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAK
ICAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250
ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCk7Ci0gICAgICAgICAgICAgICAgRmxv
YXRSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICAgICAgICAgICAgICBG
bG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKTsK
KyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgZGVzdFJlY3QgPSBtX29iamVjdEJvdW5kaW5n
Qm94OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0KDAsIDAsIGltYWdlLT53
aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogCiAgICAgICAgICAgICAgICAgU1ZHSW1hZ2VFbGVt
ZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkp
OwogICAgICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8o
KS5hbGlnbigpICE9IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX05PTkUpCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQo
UGFpbnRJbmZvJiBwYQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCitib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
IHsKICAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28gd2Ugb25s
eSBoaXQtdGVzdCB0aGVuLgogICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3Jv
dW5kKQpAQCAtMTUwLDcgKzE1MCw3IEBAIGJvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0
UG9pbnQoY28KICAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50
c0hpdFJ1bGVzOjpTVkdfSU1BR0VfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRl
ckV2ZW50cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSk7CiAgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2li
bGUpIHsKLSAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICAgICAgR3JhcGhp
Y3NQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5t
YXBQb2ludChwb2ludEluUGFyZW50KTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAoIVNWR1Jl
bmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC01Myw5ICs1Myw5IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KIAotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3RCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RC
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJl
Y3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIApAQCAtNjQsMTUgKzY0LDE1IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZs
b2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29s
IG5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAK
ICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KIAogICAgIGJvb2wgbV91cGRhdGVDYWNoZWRSZXBhaW50
UmVjdCA6IDE7CiAgICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3Vu
ZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAgR3JhcGhp
Y3NSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1fcmVwYWludEJv
dW5kaW5nQm94OwogICAgIE93blB0cjxSZW5kZXJJbWFnZVJlc291cmNlPiBtX2ltYWdlUmVzb3Vy
Y2U7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjggKzQz
LDI4IEBAIElubGluZUZsb3dCb3gqIFJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW4KICAgICByZXR1
cm4gYm94OwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0ID0gUmVuZGVy
U1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMpKQogICAgICAgICByZXR1
cm4gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR0lu
bGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclNWR0lu
bGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewogICAgIGlmIChjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rv
cih0aGlzKSkKICAgICAgICAgcmV0dXJuIG9iamVjdC0+c3Ryb2tlQm91bmRpbmdCb3goKTsKIAot
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAK
LUZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdJbmxpbmU6OnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkgY29uc3QKIHsKICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhpcykpCiAg
ICAgICAgIHJldHVybiBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAK
LSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQog
CiBJbnRSZWN0IFJlbmRlclNWR0lubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCkBAIC04MiwxNSArODIsMTUg
QEAgdm9pZCBSZW5kZXJTVkdJbmxpbmU6Om1hcExvY2FsVG9Db250YWluZQogICAgIFNWR1JlbmRl
clN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5lciwgdXNl
VHJhbnNmb3JtcywgZml4ZWQsIHRyYW5zZm9ybVN0YXRlKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdJ
bmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5k
ZXJTVkdJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQog
ewogICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVy
U1ZHVGV4dEFuY2VzdG9yKHRoaXMpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nQm94ID0gb2JqZWN0LT5zdHJva2VCb3VuZGlu
Z0JveCgpOworICAgIEdyYXBoaWNzUmVjdCB0ZXh0Qm91bmRpbmdCb3ggPSBvYmplY3QtPnN0cm9r
ZUJvdW5kaW5nQm94KCk7CiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBib3ggPSBmaXJzdExpbmVC
b3goKTsgYm94OyBib3ggPSBib3gtPm5leHRMaW5lQm94KCkpCi0gICAgICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCh0ZXh0Qm91bmRpbmdCb3gueCgpICsgYm94
LT54KCksIHRleHRCb3VuZGluZ0JveC55KCkgKyBib3gtPnkoKSwgYm94LT5sb2dpY2FsV2lkdGgo
KSwgYm94LT5sb2dpY2FsSGVpZ2h0KCkpKSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRv
QWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCh0ZXh0Qm91bmRpbmdCb3gueCgpICsgYm94LT54KCks
IHRleHRCb3VuZGluZ0JveC55KCkgKyBib3gtPnkoKSwgYm94LT5sb2dpY2FsV2lkdGgoKSwgYm94
LT5sb2dpY2FsSGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW5saW5lOjp3aWxsQmVE
ZXN0cm95ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0MSwxNCBA
QCBwdWJsaWM6CiAgICAgLy8gV2Ugc2VhcmNoIGZvciB0aGUgcm9vdCB0ZXh0IGVsZW1lbnQgYW5k
IHRha2UgaXRzIGJvdW5kaW5nIGJveC4KICAgICAvLyBJdCBpcyBhbHNvIG5lY2Vzc2FyeSB0byB0
YWtlIHRoZSBzdHJva2UgYW5kIHJlcGFpbnQgcmVjdCBvZgogICAgIC8vIHRoaXMgZWxlbWVudCwg
c2luY2Ugd2UgbmVlZCBpdCBmb3IgZmlsdGVycy4KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5k
aW5nQm94KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5n
Qm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7
CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNm
b3JtU3RhdGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFw
aGljc1F1YWQ+Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbmxpbmVGbG93Qm94KiBjcmVh
dGVJbmxpbmVGbG93Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24u
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0xODAsNyArMTgwLDcgQEAgVmlzaWJsZVBvc2l0aW9u
IFJlbmRlclNWR0lubGluZVRleHQ6OnBvcwogICAgIEFTU0VSVChjb250YWluaW5nQmxvY2spOwog
CiAgICAgLy8gTWFwIGxvY2FsIHBvaW50IHRvIGFic29sdXRlIHBvaW50LCBhcyB0aGUgY2hhcmFj
dGVyIG9yaWdpbnMgc3RvcmVkIGluIHRoZSB0ZXh0IGZyYWdtZW50cyB1c2UgYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCi0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KHBvaW50KTsKKyAgICBHcmFw
aGljc1BvaW50IGFic29sdXRlUG9pbnQocG9pbnQpOwogICAgIGFic29sdXRlUG9pbnQubW92ZUJ5
KGNvbnRhaW5pbmdCbG9jay0+bG9jYXRpb24oKSk7CiAKICAgICBmbG9hdCBjbG9zZXN0RGlzdGFu
Y2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CkBAIC0xOTksNyArMTk5LDcg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvcwogICAgICAgICB1bnNp
Z25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CiAgICAgICAgICAg
ICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwotICAg
ICAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0g
YmFzZWxpbmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOworICAgICAgICAgICAg
R3JhcGhpY3NSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gYmFzZWxp
bmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOwogICAgICAgICAgICAgZnJhZ21l
bnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9ybSk7CiAgICAgICAgICAg
ICBpZiAoIWZyYWdtZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgICAgICBm
cmFnbWVudFJlY3QgPSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBw
cml2YXRlOgogCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgb2JqZWN0Qm91bmRpbmdCb3ggZm9yIERS
VCByZXN1bHRzIGFuZCBmaWx0ZXJzIGF0IHRoZSBtb21lbnQuCiAgICAgLy8gVGhpcyBzaG91bGQg
YmUgZml4ZWQgdG8gZ2l2ZSBiYWNrIHRoZSBvYmplY3RCb3VuZGluZ0JveCBvZiB0aGUgdGV4dCBy
b290LgotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IEludFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3UKICAgICBJbnRSZWN0IGJv
eCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAg
ICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKIAotICAgIEZsb2F0UXVhZCBj
b250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QoYm94
KSwgcmVwYWludENvbnRhaW5lcik7CisgICAgR3JhcGhpY3NRdWFkIGNvbnRhaW5lclJlbGF0aXZl
UXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChib3gpLCByZXBhaW50Q29u
dGFpbmVyKTsKICAgICByZXR1cm4gY29udGFpbmVyUmVsYXRpdmVRdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CiB9CiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVj
dDo6YWJzb2x1dGVSZWN0cwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJl
bmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFk
cykKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBo
aWNzUXVhZD4mIHF1YWRzKQogewogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFk
KHN0cm9rZUJvdW5kaW5nQm94KCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJl
Y3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIEludFBvaW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4m
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQs
IFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5n
ZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShTVkcpCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgpA
QCAtNzgsNyArNzgsNyBAQCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAK
LWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCitib29sIFJlbmRlclNWR1Bh
dGg6OmZpbGxDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgYm9vbCByZXF1aXJl
c0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQogewogICAgIGlmICghbV9maWxsQm91bmRpbmdCb3gu
Y29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MCw3ICs5MCw3IEBA
IGJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEYKICAgICByZXR1cm4gbV9w
YXRoLmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJv
a2UpCitib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQogewogICAgIGlmICghbV9zdHJva2VBbmRN
YXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYg
cGFpCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpOworICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0OjpwYWlu
dEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFuc2Zvcm0s
IHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQzLDEzICsyNDMsMTMgQEAgdm9p
ZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZQogICAgICAgICByZWN0cy5hcHBl
bmQocmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiti
b29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAgIC8vIFdl
IG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10ZXN0IHRo
ZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFu
c2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgIEdyYXBoaWNzUG9p
bnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50
SW5QYXJlbnQpOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdB
cmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzAsMjkg
KzI3MCwyOSBAQCBib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9pbnQoY29uCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlTWFy
a2VyQm91bmRzSWZOZWVkZWQoKQorR3JhcGhpY3NSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0
ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKIHsKICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgQVNTRVJUKHN2Z0VsZW1lbnQg
JiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFzdmdFbGVtZW50LT5pc1N0eWxl
ZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIAogICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CiAgICAgaWYgKCFzdHlsZWRFbGVt
ZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAg
ICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
c3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgIEFTU0VSVChzdmdTdHlsZS0+aGFz
TWFya2VycygpKTsKIAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2Vz
Q2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKICAgICBpZiAoIXJl
c291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KCk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2VyU3RhcnQg
PSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIq
IG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CiAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CiAgICAgaWYgKCFt
YXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgcmV0dXJu
IG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0LCBtYXJr
ZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoc3ZnRWxlbWVu
dCksIG1fcGF0aCk7CiB9CkBAIC0zMDAsOSArMzAwLDkgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Bh
dGg6OmNhbGN1bGF0ZU1hcmtlcgogdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzKCkKIHsKICAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBtX2ZpbGxC
b3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxv
YXRSZWN0KCk7CisgICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7Cisg
ICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAg
ICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBk
YXRlQ2FjaGVkQm91bmRhcmkKICAgICB9CiAKICAgICBpZiAoc3ZnU3R5bGUtPmhhc01hcmtlcnMo
KSkgewotICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFya2VyQm91
bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG1hcmtlckJvdW5kcyA9IGNhbGN1
bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CiAgICAgICAgIGlmICghbWFya2VyQm91bmRzLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gudW5pdGUo
bWFya2VyQm91bmRzKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2
LDEzIEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHTWFya2VyTGF5b3V0SW5m
by5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBH
cmFwaGljc1BvaW50OwogY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwogY2xhc3MgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ7CiAKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0
aGUgc3Ryb2tlCi0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wg
cmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwot
ICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNT
dHJva2UgPSB0cnVlKTsKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50
JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9O
WkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9v
bCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdC
b3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtlckJvdW5k
aW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogICAgIHZp
cnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzU1ZH
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTYzLDkgKzYzLDkgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRH
cmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogCi0gICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgR3JhcGhpY3NSZWN0
IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVDYWNoZWRC
b3VuZGFyaWVzKCk7CiAKIHByaXZhdGU6CkBAIC03Nyw5ICs3Nyw5IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKIAogICAgIG11dGFibGUgUGF0aCBtX3Bh
dGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0
cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGlu
Z0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9maWxsQm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NS
ZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1fcmVw
YWludEJvdW5kaW5nQm94OwogICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJMYXlvdXRJ
bmZvOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlLmgJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGVudW0gUmVuZGVyU1ZH
UmVzb3VyY2VNb2RlIHsKIH07CiAKIGNsYXNzIENvbG9yOwotY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGF0aDsKIGNs
YXNzIFJlbmRlck9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGlj
c0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOworICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwogCiAgICAg
dmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgPSAwOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpyZW1v
dmVBbGwKICAgICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2NsaXBCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9jbGlwQm91bmRhcmll
cyA9IEdyYXBoaWNzUmVjdCgpOwogICAgIGlmICghbV9jbGlwcGVyLmlzRW1wdHkoKSkgewogICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKICAgICAgICAgbV9jbGlwcGVyLmNsZWFy
KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFw
cGx5UmVzbwogICAgIHJldHVybiBhcHBseUNsaXBwaW5nVG9Db250ZXh0KG9iamVjdCwgb2JqZWN0
LT5vYmplY3RCb3VuZGluZ0JveCgpLCBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCksIGNvbnRleHQpOwogfQogCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0
aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
b2JqZWN0Qm91bmRpbmdCb3gpCitib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cGF0aE9u
bHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
b2JqZWN0Qm91bmRpbmdCb3gpCiB7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2xpcC1wYXRoIGdl
dHMgY2xpcHBlZCBpdHNlbGYsIHdlIGhhdmUgdG8gZmFsbGJhY2sgdG8gbWFza2luZy4KICAgICBp
ZiAoIXN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHkoKSkKQEAg
LTE1MCwxMyArMTUwLDEzIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25s
eUMKICAgICB9CiAgICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9uIHdhbnRzIHVzIHRvIGNsaXAg
ZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBhIGNoaWxkLgogICAgIGlmIChj
bGlwUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGNsaXBQYXRoLmFkZFJlY3QoRmxvYXRSZWN0KCkp
OworICAgICAgICBjbGlwUGF0aC5hZGRSZWN0KEdyYXBoaWNzUmVjdCgpKTsKICAgICBjb250ZXh0
LT5jbGlwUGF0aChjbGlwUGF0aCwgY2xpcFJ1bGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5k
ZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK2Jvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R3JhcGhpY3NSZWN0JiByZXBhaW50UmVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewog
ICAgIGlmICghbV9jbGlwcGVyLmNvbnRhaW5zKG9iamVjdCkpCiAgICAgICAgIG1fY2xpcHBlci5z
ZXQob2JqZWN0LCBuZXcgQ2xpcHBlckRhdGEpOwpAQCAtMTcyLDggKzE3Miw4IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJz
b2x1dGVUcmFuc2Zvcm07CiAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRy
YW5zZm9ybSk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChyZXBhaW50UmVjdCk7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIEdyYXBo
aWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJl
cGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9
IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJl
cihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xp
cERhdGEgJiYgIWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUYXJn
ZXRSZWN0LCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xpcE1hc2tJ
bWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikpCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKENs
aXBwZXJEYXRhKiBjbGlwcGVyRGF0YSwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0Jv
eCkKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1h
Z2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhLCBjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJv
dW5kaW5nQm94KQogewogICAgIEFTU0VSVChjbGlwcGVyRGF0YSk7CiAgICAgQVNTRVJUKGNsaXBw
ZXJEYXRhLT5jbGlwTWFza0ltYWdlKTsKQEAgLTI5Myw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlCiAgICAgfQogfQogCi1ib29sIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYgb2JqZWN0
Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UG9pbnQmIG5vZGVBdFBvaW50KQorYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBHcmFwaGljc1JlY3Qm
IG9iamVjdEJvdW5kaW5nQm94LCBjb25zdCBHcmFwaGljc1BvaW50JiBub2RlQXRQb2ludCkKIHsK
LSAgICBGbG9hdFBvaW50IHBvaW50ID0gbm9kZUF0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBw
b2ludCA9IG5vZGVBdFBvaW50OwogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNs
aXBwaW5nQXJlYSh0aGlzLCBwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzE0
LDE0ICszMTQsMTQgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbAog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEludFBvaW50IGhpdFBvaW50OwogICAgICAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+
bm9kZUF0RmxvYXRQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZHQ2xpcENv
bnRlbnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCisgICAgICAgIGlmIChy
ZW5kZXJlci0+bm9kZUF0R3JhcGhpY3NQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVz
dDo6U1ZHQ2xpcENvbnRlbnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlc291cmNlQm91bmRpbmdCb3go
UmVuZGVyT2JqZWN0KiBvYmplY3QpCitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIC8v
IFJlc291cmNlIHdhcyBub3QgbGF5b3V0ZWQgeWV0LiBHaXZlIGJhY2sgdGhlIGJvdW5kaW5nQm94
IG9mIHRoZSBvYmplY3QuCiAgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQpAQCAtMzMxLDcgKzMz
MSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlc28KICAgICAgICAg
Y2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpOwogCiAgICAgaWYgKHN0YXRpY19jYXN0
PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKSA9PSBTVkdVbml0
VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAg
ICAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5k
aW5nQm94KCk7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgICAgIHRy
YW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGluZ0Jv
eC55KCkpOwogICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJvdW5kaW5n
Qm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBA
CiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCiAKICNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgpAQCAtNTIsMTEgKzUyLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0ZvckludmFs
aWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVy
T2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQg
cmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94
KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291cmNlVHlw
ZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBDbGlwcGVyUmVzb3VyY2VUeXBlOyB9CiAg
ICAgCi0gICAgYm9vbCBoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRQb2ludCYpOworICAgIGJvb2wgaGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEdyYXBoaWNz
UmVjdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgY2xpcFBhdGhVbml0cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR0NsaXBQ
YXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKTsgfQogCkBAIC02NCwxMyArNjQs
MTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBjbGlwUGF0aCBjYW4gYmUgY2xpcHBlZCB0
b28sIGJ1dCBkb24ndCBoYXZlIGEgYm91bmRpbmdCb3ggb3IgcmVwYWludFJlY3QuIFNvIHdlIGNh
bid0IGNhbGwKICAgICAvLyBhcHBseVJlc291cmNlIGRpcmVjdGx5IGFuZCB1c2UgdGhlIHJlY3Rz
IGZyb20gdGhlIG9iamVjdCwgc2luY2UgdGhleSBhcmUgZW1wdHkgZm9yIFJlbmRlclNWR1Jlc291
cmNlcwotICAgIGJvb2wgYXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3QqLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQqKTsKLSAgICBi
b29sIHBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7
Ci0gICAgYm9vbCBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqLCBjb25zdCBG
bG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KTsKKyAgICBib29sIGFwcGx5Q2xpcHBpbmdUb0Nv
bnRleHQoUmVuZGVyT2JqZWN0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NS
ZWN0JiwgR3JhcGhpY3NDb250ZXh0Kik7CisgICAgYm9vbCBwYXRoT25seUNsaXBwaW5nKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIGJvb2wgZHJhd0NvbnRlbnRJ
bnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiwgY29uc3QgR3JhcGhpY3NSZWN0JiBvYmplY3RCb3Vu
ZGluZ0JveCk7CiAgICAgdm9pZCBjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCk7CiAK
ICAgICBib29sIG1faW52YWxpZGF0aW9uQmxvY2tlZDsKLSAgICBGbG9hdFJlY3QgbV9jbGlwQm91
bmRhcmllczsKKyAgICBHcmFwaGljc1JlY3QgbV9jbGlwQm91bmRhcmllczsKICAgICBIYXNoTWFw
PFJlbmRlck9iamVjdCosIENsaXBwZXJEYXRhKj4gbV9jbGlwcGVyOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDggQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTIxLDcgKzEyMSw3IEBAIFBhc3NSZWZQdHI8U1ZHRmls
dGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmUKICAgICByZXR1cm4gYnVpbGRlci5yZWxlYXNlKCk7CiB9
CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmZpdHNJbk1heGltdW1JbWFnZVNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQorYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6Zml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUm
IHNpemUsIEdyYXBoaWNzU2l6ZSYgc2NhbGUpCiB7CiAgICAgYm9vbCBtYXRjaGVzRmlsdGVyU2l6
ZSA9IHRydWU7CiAgICAgaWYgKHNpemUud2lkdGgoKSA+IGtNYXhGaWx0ZXJTaXplKSB7CkBAIC0x
NTcsNyArMTU3LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQog
ICAgIH0KIAogICAgIE93blB0cjxGaWx0ZXJEYXRhPiBmaWx0ZXJEYXRhKGFkb3B0UHRyKG5ldyBG
aWx0ZXJEYXRhKSk7Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gb2JqZWN0LT5v
YmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9
IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKIAogICAgIFNWR0ZpbHRlckVsZW1lbnQqIGZp
bHRlckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgpKTsKICAg
ICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gZmlsdGVyRWxlbWVudC0+ZmlsdGVyQm91bmRpbmdC
b3godGFyZ2V0Qm91bmRpbmdCb3gpOwpAQCAtMTc0LDEwICsxNzQsMTAgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2Fs
ZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgYWJzb2x1dGVUcmFuc2Zvcm0u
ZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5mKCkpOwogCiAgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRl
IGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgotICAgIEZs
b2F0UmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwotICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOworICAg
IEdyYXBoaWNzUmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwor
ICAgIEdyYXBoaWNzUmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0Jv
eCgpOwogICAgIGRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMp
OwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOworICAgIEdyYXBo
aWNzUmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOwogCiAgICAgLy8gQ3JlYXRlIHRo
ZSBTVkdGaWx0ZXIgb2JqZWN0LgogICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0g
ZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2Fs
ZSBmYWN0b3IgZm9yIHRoZSB1c2Ugb2YgZmlsdGVyUmVzLgogICAgIC8vIEFsc28gc2VlIGh0dHA6
Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjRmlsdGVyRWZmZWN0c1JlZ2lvbgotICAg
IEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKKyAgICBHcmFwaGljc1NpemUgc2NhbGUoMSwgMSk7CiAg
ICAgaWYgKGZpbHRlckVsZW1lbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZmlsdGVyUmVzQXR0
cikpIHsKICAgICAgICAgc2NhbGUuc2V0V2lkdGgoZmlsdGVyRWxlbWVudC0+ZmlsdGVyUmVzWCgp
IC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzLndpZHRoKCkpOwogICAgICAgICBzY2FsZS5zZXRI
ZWlnaHQoZmlsdGVyRWxlbWVudC0+ZmlsdGVyUmVzWSgpIC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFy
aWVzLmhlaWdodCgpKTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIERldGVy
bWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50ZXJtZWRpYXRlIElt
YWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRlclNpemUuCi0gICAg
RmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOworICAgIEdy
YXBoaWNzUmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsKICAgICB0
ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAg
Zml0c0luTWF4aW11bUltYWdlU2l6ZSh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKIApA
QCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVz
b3UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihsYXN0RWZmZWN0KTsK
LSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwor
ICAgIEdyYXBoaWNzUmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7
CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNp
emUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBm
YWN0b3JzLgogICAgIGlmICghZml0c0luTWF4aW11bUltYWdlU2l6ZShzdWJSZWdpb24uc2l6ZSgp
LCBzY2FsZSkpIHsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjphcHBseVJlc291CiAgICAgICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5zY2FsZShzY2Fs
ZSk7CiAKICAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEtPnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKLSAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y2xl
YXJSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zaXpl
KCkpKTsKKyAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y2xlYXJSZWN0KEdyYXBoaWNzUmVjdChH
cmFwaGljc1BvaW50KCksIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zaXplKCkpKTsKICAgICBmaWx0
ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gc291cmNlR3JhcGhpYy5yZWxlYXNlKCk7CiAg
ICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKIApAQCAtMzE2LDcgKzMxNiw3
IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKICAgICAgICAgaWYg
KHJlc3VsdEltYWdlKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0
YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKIAotICAgICAgICAgICAg
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJl
c29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6
ZSgxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAv
IGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5jbGlwKGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVjdC0+c3R5
bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpKTsKQEAgLTMyNywxMiArMzI3LDEyIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OnBvc3RBcHBseVIKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyLmNsZWFy
KCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3Vu
ZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBpZiAoU1ZHRmlsdGVyRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRl
ckVsZW1lbnQqPihub2RlKCkpKQogICAgICAgICByZXR1cm4gZWxlbWVudC0+ZmlsdGVyQm91bmRp
bmdCb3gob2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpKTsKIAotICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5l
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyX2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShG
SUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VD
b250YWluZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKQEAgLTUyLDggKzUyLDggQEAgc3Ry
dWN0IEZpbHRlckRhdGEgewogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpY0J1
ZmZlcjsKICAgICBHcmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dDsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgRmxvYXRSZWN0IGJvdW5kYXJp
ZXM7Ci0gICAgRmxvYXRTaXplIHNjYWxlOworICAgIEdyYXBoaWNzUmVjdCBib3VuZGFyaWVzOwor
ICAgIEdyYXBoaWNzU2l6ZSBzY2FsZTsKICAgICBib29sIGJ1aWxkZWQgOiAxOwogICAgIGJvb2wg
bWFya2VkRm9yUmVtb3ZhbCA6IDE7CiB9OwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKICAgICB2aXJ0
dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0
KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwogCi0gICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKKyAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwog
CiAgICAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoRmlsdGVy
Kik7CiAKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJTVkdSZXNv
dXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBmaXRzSW5NYXhp
bXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYpOworICAgIGJvb2wgZml0
c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUmLCBHcmFwaGljc1NpemUmKTsK
IAogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRGF0YSo+IG1fZmlsdGVyOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTEgQEAgdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6cwogICAgIH0KIH0KIAotRmxvYXRSZWN0IFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihG
aWx0ZXJFZmZlY3QqIGVmZmVjdCkKIHsKLSAgICBGbG9hdFJlY3QgdW5pdGVSZWN0OwotICAgIEZs
b2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygp
OwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKKyAgICBH
cmFwaGljc1JlY3QgdW5pdGVSZWN0OworICAgIEdyYXBoaWNzUmVjdCBzdWJyZWdpb25Cb3VuZGlu
Z0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOworICAgIEdyYXBoaWNzUmVjdCBzdWJy
ZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKICAgICBTVkdGaWx0ZXIqIGZpbHRlciA9IHN0
YXRpY19jYXN0PFNWR0ZpbHRlcio+KGVmZmVjdC0+ZmlsdGVyKCkpOwogICAgIEFTU0VSVChmaWx0
ZXIpOwogCkBAIC04NSw3ICs4NSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGkKICAgICBpZiAoZmlsdGVyLT5lZmZlY3RCb3VuZGluZ0JveE1vZGUoKSkgewogICAg
ICAgICBzdWJyZWdpb24gPSB1bml0ZVJlY3Q7CiAgICAgICAgIC8vIEF2b2lkIHRoZSBjYWxsaW5n
IG9mIGEgdmlydHVhbCBtZXRob2Qgc2V2ZXJhbCB0aW1lcy4KLSAgICAgICAgRmxvYXRSZWN0IHRh
cmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLT50YXJnZXRCb3VuZGluZ0JveCgpOworICAgICAgICBH
cmFwaGljc1JlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5kaW5nQm94
KCk7CiAKICAgICAgICAgaWYgKGVmZmVjdC0+aGFzWCgpKQogICAgICAgICAgICAgc3VicmVnaW9u
LnNldFgodGFyZ2V0Qm91bmRpbmdCb3gueCgpICsgc3VicmVnaW9uQm91bmRpbmdCb3gueCgpICog
dGFyZ2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7CkBAIC0xMTQsOCArMTE0LDggQEAgRmxvYXRSZWN0
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aQogCiAgICAgZWZmZWN0LT5zZXRGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVN1
YnJlZ2lvbiA9IGZpbHRlci0+bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsK
LSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVN1YnJlZ2lvbiA9IGZpbHRlci0+bWFwTG9j
YWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsKKyAgICBHcmFwaGljc1NpemUgZmlsdGVy
UmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpOwogICAgIGFic29sdXRlU3Vi
cmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmlsdGVyUmVzb2x1dGlvbi5o
ZWlnaHQoKSk7CiAKICAgICAvLyBGRUltYWdlIG5lZWRzIHRoZSB1bmNsaXBwZWQgc3VicmVnaW9u
IGluIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdApAQCAtMTI0
LDcgKzEyNCw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGkKICAg
ICAgICAgc3RhdGljX2Nhc3Q8RkVJbWFnZSo+KGVmZmVjdCktPnNldEFic29sdXRlU3VicmVnaW9u
KGFic29sdXRlU3VicmVnaW9uKTsKIAogICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0
byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRGaWx0ZXJS
ZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0
ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CiAgICAgYWJzb2x1
dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpLCBmaWx0
ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKICAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3Qo
YWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBUaGV5IGRlcGVu
ZCBvbiB0aGUgUmVuZGVyT2JqZWN0IGFyZ3VtZW50IG9mIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
OjphcHBseVJlc291cmNlLgotICAgIHN0YXRpYyBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCopOworICAgIHN0YXRpYyBHcmFwaGljc1JlY3Qg
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCopOwogCiAgICAg
aW5saW5lIHZvaWQgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1LDggQEAgc3RhdGljIGlubGlu
ZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0
ZVRyYW5zZm9ybTsKICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1h
dGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0
ZVRyYW5zZm9ybSk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1
dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNW
R0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcih0
ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNv
bHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRleHRSb290QmxvY2st
PnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIEdyYXBoaWNzUmVjdCBjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVj
dCk7CiAgICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
Y3JlYXRlTWFza0FuZFN3YXBDb250CiAKIHN0YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIGNs
aXBUb1RleHRNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJvdW5kaW5nQm94TW9kZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0pCkBAIC0xMjIsMTQgKzEyMiwxNCBAQCBzdGF0aWMg
aW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFi
c29sdXRlVHJhbnNmb3JtOwogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5z
Zm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290QmxvY2ssIGFi
c29sdXRlVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBh
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOwotICAgIEZsb2F0UmVjdCBjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVj
dCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNm
b3JtLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0
ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRS
ZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0KTsKIAogICAg
IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQsIGFic29sdXRl
VHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBpbWFnZUJ1ZmZlcik7CiAKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIGlmIChib3VuZGluZ0JveE1vZGUpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0JveCA9IHRleHRSb290QmxvY2stPm9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXNrQm91bmRpbmdCb3ggPSB0ZXh0
Um9vdEJsb2NrLT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgICAgICBtYXRyaXgudHJhbnNsYXRl
KG1hc2tCb3VuZGluZ0JveC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOwogICAgICAgICBtYXRy
aXguc2NhbGVOb25Vbmlmb3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNrQm91bmRpbmdC
b3guaGVpZ2h0KCkpOwogICAgIH0KQEAgLTE2Myw3ICsxNjMsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OmFwcGx5UmVzCiAKICAgICAvLyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRy
eSBvZiB0aGUgYXBwbGljYWJsZSBlbGVtZW50IGhhcyBubyB3aWR0aCBvciBoZWlnaHQgYW5kIG9i
amVjdEJvdW5kaW5nQm94IGlzIHNwZWNpZmllZCwKICAgICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZl
Y3QgKGUuZy4gYSBncmFkaWVudCBvciBhIGZpbHRlcikgd2lsbCBiZSBpZ25vcmVkLgotICAgIEZs
b2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsK
KyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5k
aW5nQm94KCk7CiAgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDksNyArMjQ5LDcgQEAg
dm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbAogICAgICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtOwogICAgICAgICAgICAgY2FsY3VsYXRlR3Jh
ZGllbnRUcmFuc2Zvcm0oZ3JhZGllbnRUcmFuc2Zvcm0pOwogCi0gICAgICAgICAgICBGbG9hdFJl
Y3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB0YXJnZXRSZWN0OwogICAg
ICAgICAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9y
bShjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCB0YXJnZXRSZWN0LCBvYmpl
Y3QsIGJvdW5kaW5nQm94TW9kZSgpLCBncmFkaWVudFRyYW5zZm9ybSkpOwogICAgICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbEdyYWRpZW50KGdyYWRpZW50RGF0YS0+Z3JhZGllbnQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNyArMjQsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhp
Y3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kikg
eyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJj
ZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50RGF0YSosIGNvbnN0IFZlY3Rv
cjxHcmFkaWVudDo6Q29sb3JTdG9wPiYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFy
R3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDggKzUwLDggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50Ojpi
dQogICAgIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCogbGluZWFyR3JhZGllbnRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVtZW50KTsK
IAogICAgIC8vIERldGVybWluZSBncmFkaWVudCBzdGFydC9lbmQgcG9pbnRzCi0gICAgRmxvYXRQ
b2ludCBzdGFydFBvaW50OwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBzdGFydFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9pbnQ7CiAgICAgbGluZWFy
R3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhtX2F0dHJpYnV0ZXMsIHN0
YXJ0UG9pbnQsIGVuZFBvaW50KTsKIAogICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQgPSBHcmFk
aWVudDo6Y3JlYXRlKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmFwcGx5Vmlld3AKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlcjo6bWFya2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hcmtl
clRyYW5zZm9ybWF0aW9uKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyOjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNm
b3JtYXRpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGNvb3JkaW5hdGVzID0gUmVuZGVyU1ZH
Q29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgIEdyYXBoaWNz
UmVjdCBjb29yZGluYXRlcyA9IFJlbmRlclNWR0NvbnRhaW5lcjo6cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKTsKIAogICAgIC8vIE1hcCByZXBhaW50IHJlY3QgaW50byBwYXJlbnQgY29v
cmRpbmF0ZSBzcGFjZSwgaW4gd2hpY2ggdGhlIG1hcmtlciBib3VuZGFyaWVzIGhhdmUgdG8gYmUg
ZXZhbHVhdGVkCiAgICAgY29vcmRpbmF0ZXMgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFw
UmVjdChjb29yZGluYXRlcyk7CkBAIC05MiwxMiArOTIsMTIgQEAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBSZW5kZXJTVkdSZXNvdXJjZQogICAgIC8vIHJldHVybiB2aWV3cG9ydFRyYW5zbGF0aW9u
ICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNmb3JtKCk7CiB9CiAKLUZsb2F0UG9p
bnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QKK0dyYXBo
aWNzUG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QK
IHsKICAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJF
bGVtZW50Kj4obm9kZSgpKTsKICAgICBBU1NFUlQobWFya2VyKTsKIAotICAgIHJldHVybiBGbG9h
dFBvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVl
KG1hcmtlcikpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVl
KG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOwogfQogCiBmbG9hdCBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcjo6YW5nbGUoKSBjb25zdApAQCAtMTEyLDcgKzExMiw3IEBAIGZs
b2F0IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjphbmdsZSgpIGMKICAgICByZXR1cm4gYW5nbGU7
CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyVHJh
bnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhdXRvQW5nbGUsIGZs
b2F0IHN0cm9rZVdpZHRoKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNl
TWFya2VyOjptYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4s
IGZsb2F0IGF1dG9BbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgU1ZHTWFy
a2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+KG5vZGUo
KSk7CiAgICAgQVNTRVJUKG1hcmtlcik7CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCB2b2lkIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyOjpkcmF3KFBhaW50CiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyOjpw
YWludChpbmZvLCBJbnRQb2ludCgpKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyOjptYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBjb250ZW50VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBm
bG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICAvLyBUaGUgJ29yaWdpbicgY29vcmRpbmF0
ZSBtYXBzIHRvIFNWR3MgcmVmWC9yZWZZLCBnaXZlbiBpbiBjb29yZGluYXRlcyByZWxhdGl2ZSB0
byB0aGUgdmlld3BvcnQgZXN0YWJsaXNoZWQgYnkgdGhlIG1hcmtlcgotICAgIEZsb2F0UG9pbnQg
bWFwcGVkT3JpZ2luID0gdmlld3BvcnRUcmFuc2Zvcm0oKS5tYXBQb2ludChvcmlnaW4pOworICAg
IEdyYXBoaWNzUG9pbnQgbWFwcGVkT3JpZ2luID0gdmlld3BvcnRUcmFuc2Zvcm0oKS5tYXBQb2lu
dChvcmlnaW4pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uID0gY29udGVu
dFRyYW5zZm9ybWF0aW9uOwogICAgIGlmIChzdHJva2VXaWR0aCAhPSAtMSkKQEAgLTE2Niw3ICsx
NjYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpjYWxjVmlld3BvCiAKICAgICBm
bG9hdCB3ID0gbWFya2VyLT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1hcmtlcik7CiAgICAgZmxvYXQg
aCA9IG1hcmtlci0+bWFya2VySGVpZ2h0KCkudmFsdWUobWFya2VyKTsKLSAgICBtX3ZpZXdwb3J0
ID0gRmxvYXRSZWN0KDAsIDAsIHcsIGgpOworICAgIG1fdmlld3BvcnQgPSBHcmFwaGljc1JlY3Qo
MCwgMCwgdywgaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdNYXJrZXJF
bGVtZW50LmgiCkBAIC00NiwxOSArNDYsMTkgQEAgcHVibGljOgogICAgIHZvaWQgZHJhdyhQYWlu
dEluZm8mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKIAogICAgIC8vIENhbGN1bGF0ZXMgbWFy
a2VyIGJvdW5kYXJpZXMsIG1hcHBlZCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQncyBjb29yZGluYXRl
IHNwYWNlCi0gICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IG1hcmtl
ckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJik7
CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3Bv
cnQoKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50
VHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlclRyYW5zZm9ybWF0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUsIGZsb2F0IHN0cm9rZVdp
ZHRoKSBjb25zdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWFya2VyVHJhbnNmb3JtYXRpb24oY29u
c3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5k
ZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NS
ZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gR3JhcGhpY3NS
ZWN0KCk7IH0KIAotICAgIEZsb2F0UG9pbnQgcmVmZXJlbmNlUG9pbnQoKSBjb25zdDsKKyAgICBH
cmFwaGljc1BvaW50IHJlZmVyZW5jZVBvaW50KCkgY29uc3Q7CiAgICAgZmxvYXQgYW5nbGUoKSBj
b25zdDsKICAgICBTVkdNYXJrZXJVbml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKS0+bWFya2VyVW5pdHMoKTsg
fQogCkBAIC02OCwxMiArNjgsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBHZW5lcmF0
ZXMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNhYmxlIHRvIHJlbmRlciBtYXJrZXIgY29udGVu
dC4gSGFuZGxlcyBzY2FsaW5nIHRoZSBtYXJrZXIgY29udGVudAogICAgIC8vIGFjb3JkaW5nIHRv
IFNWR3MgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBjb25jZXB0LCB3aGVuIGEgc3Ryb2tlV2lk
dGggdmFsdWUgIT0gLTEgaXMgcGFzc2VkIGluLgotICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJD
b250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjb250ZW50VHJhbnNm
b3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgc3Ryb2tlV2lkdGggPSAt
MSkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlv
bihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsKIAogICAg
IEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAgbXV0YWJs
ZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVj
dCBtX3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0OwogfTsKIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDggKzI0LDggQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYxLDcgKzYxLDcgQEAgUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXI6On5SZW5kZXJTVkdSZXNvdQogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpy
ZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikKIHsKLSAg
ICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0UmVjdCgpOworICAgIG1fbWFza0NvbnRl
bnRCb3VuZGFyaWVzID0gR3JhcGhpY3NSZWN0KCk7CiAgICAgaWYgKCFtX21hc2tlci5pc0VtcHR5
KCkpIHsKICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fbWFza2VyKTsKICAgICAgICAgbV9tYXNr
ZXIuY2xlYXIoKTsKQEAgLTk4LDggKzk4LDggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tl
cjo6YXBwbHlSZXNvdQogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKICAg
ICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0
U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIEZs
b2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KG9i
amVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRSZWN0IGNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJlY3QpOwor
ICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5t
YXBSZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgR3Jh
cGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xz
OjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRh
cmdldFJlY3QpOwogCiAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIWNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIFNWR01hc2tFbGVtZW50KiBt
YXNrRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKTsKQEAgLTEz
NSw3ICsxMzUsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVuCiAg
ICAgLy8gRXZlbnR1YWxseSBhZGp1c3QgdGhlIG1hc2sgaW1hZ2UgY29udGV4dCBhY2NvcmRpbmcg
dG8gdGhlIHRhcmdldCBvYmplY3RCb3VuZGluZ0JveC4KICAgICBBZmZpbmVUcmFuc2Zvcm0gbWFz
a0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKICAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250ZW50
VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
IHsKLSAgICAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RC
b3VuZGluZ0JveCgpOworICAgICAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBv
YmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgICAgIG1hc2tDb250ZW50VHJhbnNmb3Jt
YXRpb24udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRpbmdCb3gu
eSgpKTsKICAgICAgICAgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVuaWZvcm0o
b2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwog
ICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0obWFza0NvbnRlbnRUcmFuc2Zvcm1h
dGlvbik7CkBAIC0xNzUsMTMgKzE3NSwxMyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2Vy
OjpjYWxjdWxhdGVNCiAgICAgfQogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCitHcmFwaGljc1Jl
Y3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwogICAgIEFTU0VSVChtYXNrRWxlbWVudCk7
CiAKLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5k
aW5nQm94KCk7Ci0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGFyaWVzID0gbWFza0VsZW1lbnQtPm1h
c2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGluZ0JveCk7CisgICAgR3JhcGhpY3NSZWN0IG9iamVj
dEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNz
UmVjdCBtYXNrQm91bmRhcmllcyA9IG1hc2tFbGVtZW50LT5tYXNrQm91bmRpbmdCb3gob2JqZWN0
Qm91bmRpbmdCb3gpOwogCiAgICAgLy8gUmVzb3VyY2Ugd2FzIG5vdCBsYXlvdXRlZCB5ZXQuIEdp
dmUgYmFjayBjbGlwcGluZyByZWN0IG9mIHRoZSBtYXNrLgogICAgIGlmIChzZWxmTmVlZHNMYXlv
dXQoKSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXI6OnJlc291CiAgICAgaWYgKG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzLmlzRW1wdHkoKSkKICAg
ICAgICAgY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0
IG1hc2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAgR3JhcGhpY3NSZWN0IG1h
c2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CiAgICAgaWYgKG1hc2tFbGVtZW50LT5t
YXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAgICAg
IHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGlu
Z0JveC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXJf
aAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFy
a0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDbGllbnRG
cm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0gdHJ1ZSk7
CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0
Kik7CiAKICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1hc2tVbml0cygpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKS0+bWFza1VuaXRzKCk7
IH0KICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1hc2tDb250ZW50VW5pdHMoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSktPm1hc2tDb250
ZW50VW5pdHMoKTsgfQpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0Nv
bnRlbnRJbnRvTWFza0ltYWdlKE1hc2tlckRhdGEqLCBjb25zdCBTVkdNYXNrRWxlbWVudCosIFJl
bmRlck9iamVjdCopOwogICAgIHZvaWQgY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgp
OwogCi0gICAgRmxvYXRSZWN0IG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzOworICAgIEdyYXBoaWNz
UmVjdCBtX21hc2tDb250ZW50Qm91bmRhcmllczsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCos
IE1hc2tlckRhdGEqPiBtX21hc2tlcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc28KIAogICAgIC8vIFNwZWM6IFdoZW4g
dGhlIGdlb21ldHJ5IG9mIHRoZSBhcHBsaWNhYmxlIGVsZW1lbnQgaGFzIG5vIHdpZHRoIG9yIGhl
aWdodCBhbmQgb2JqZWN0Qm91bmRpbmdCb3ggaXMgc3BlY2lmaWVkLAogICAgIC8vIHRoZW4gdGhl
IGdpdmVuIGVmZmVjdCAoZS5nLiBhIGdyYWRpZW50IG9yIGEgZmlsdGVyKSB3aWxsIGJlIGlnbm9y
ZWQuCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3Vu
ZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+
b2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBpZiAobV9hdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9k
ZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFw
cGx5UmVzbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIENvbXB1dGUg
YWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMgdG8gYnVpbGQgdGhlIHRpbGUgaW1hZ2UgJiB0
aGUgcGF0dGVybi4KLSAgICAgICAgRmxvYXRSZWN0IHRpbGVCb3VuZGFyaWVzOworICAgICAgICBH
cmFwaGljc1JlY3QgdGlsZUJvdW5kYXJpZXM7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0aWxl
SW1hZ2VUcmFuc2Zvcm07CiAgICAgICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0ob2Jq
ZWN0LCBtX2F0dHJpYnV0ZXMsIHBhdHRlcm5FbGVtZW50LCB0aWxlQm91bmRhcmllcywgdGlsZUlt
YWdlVHJhbnNmb3JtKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNyw3ICsxMTcs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvCiAgICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKICAgICAgICAgU1ZHSW1hZ2VCdWZmZXJU
b29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0
ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICAgICAgRmxvYXRSZWN0IGFic29s
dXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVCb3VuZGFy
aWVzKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNv
bHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVCb3VuZGFyaWVzKTsKIAogICAgICAgICAvLyBCdWls
ZCB0aWxlIGltYWdlLgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFnZSA9IGNy
ZWF0ZVRpbGVJbWFnZShvYmplY3QsIG1fYXR0cmlidXRlcywgdGlsZUJvdW5kYXJpZXMsIGFic29s
dXRlVGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5zZm9ybSk7CkBAIC0xOTYsMTkgKzE5Niwx
OSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5CiAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBjYWxjdWxhdGVQYXR0
ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUmVjdCBjYWxj
dWxhdGVQYXR0ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCog
cGF0dGVybkVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKIAogICAgIGlm
IChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KGF0dHJpYnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53
aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAorICAgICAgICByZXR1cm4gR3JhcGhpY3NS
ZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0Jv
eC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0Jv
eC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5k
aW5nQm94LndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5oZWln
aHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwog
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShwYXR0ZXJuRWxlbWVu
dCksCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShwYXR0ZXJu
RWxlbWVudCksCiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnkoKS52YWx1ZShwYXR0
ZXJuRWxlbWVudCksCiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFs
dWUocGF0dGVybkVsZW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5oZWln
aHQoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCkpOwpAQCAtMjE3LDEzICsyMTcsMTMgQEAgc3RhdGlj
IGlubGluZSBGbG9hdFJlY3QgY2FsY3VsYXRlUGF0dGVybgogYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OmJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUGF0dGVybkVsZW1l
bnQqIHBhdHRlcm5FbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NS
ZWN0JiBwYXR0ZXJuQm91bmRhcmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9y
bSkgY29uc3QKIHsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgIEFTU0VSVChwYXR0ZXJuRWxl
bWVudCk7CiAKLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSByZW5kZXJlci0+b2Jq
ZWN0Qm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBy
ZW5kZXJlci0+b2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBwYXR0ZXJuQm91bmRhcmllcyA9IGNh
bGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGF0dHJpYnV0ZXMsIG9iamVjdEJvdW5kaW5nQm94LCBw
YXR0ZXJuRWxlbWVudCk7IAogICAgIGlmIChwYXR0ZXJuQm91bmRhcmllcy53aWR0aCgpIDw9IDAg
fHwgcGF0dGVybkJvdW5kYXJpZXMuaGVpZ2h0KCkgPD0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjQxLDE2ICsyNDEsMTYgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1
aWxkVGlsZQogCiBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm46OmNyZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0
JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUaWxl
Qm91bmRhcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZUJvdW5kYXJpZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3QK
IHsKICAgICBBU1NFUlQob2JqZWN0KTsKIAogICAgIC8vIENsYW1wIHRpbGUgaW1hZ2Ugc2l6ZSBh
Z2FpbnN0IFNWRyB2aWV3cG9ydCBzaXplLCBhcyBsYXN0IHJlc29ydCwgdG8gYXZvaWQgYWxsb2Nh
dGluZyBodWdlIGltYWdlIGJ1ZmZlcnMuCi0gICAgRmxvYXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0g
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KG9iamVjdCktPmNvbnRlbnRCb3hS
ZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRlbnRCb3hSZWN0ID0gU1ZHUmVuZGVyU3VwcG9y
dDo6ZmluZFRyZWVSb290T2JqZWN0KG9iamVjdCktPmNvbnRlbnRCb3hSZWN0KCk7CiAKLSAgICBG
bG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRpbGVCb3Vu
ZGFyaWVzOworICAgIEdyYXBoaWNzUmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9
IGFic29sdXRlVGlsZUJvdW5kYXJpZXM7CiAgICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3Vu
ZGFyaWVzLndpZHRoKCkgPiBjb250ZW50Qm94UmVjdC53aWR0aCgpKQogICAgICAgICBjbGFtcGVk
QWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRXaWR0aChjb250ZW50Qm94UmVjdC53aWR0aCgpKTsK
IApAQCAtMjY2LDcgKzI2Niw3IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IFJlbmRlclNWR1Jl
c291cmMKICAgICBBU1NFUlQodGlsZUltYWdlQ29udGV4dCk7CiAKICAgICAvLyBUaGUgaW1hZ2Ug
YnVmZmVyIHJlcHJlc2VudHMgdGhlIGZpbmFsIHJlbmRlcmVkIHNpemUsIHNvIHRoZSBjb250ZW50
IGhhcyB0byBiZSBzY2FsZWQgKHRvIGF2b2lkIHBpeGVsYXRpb24pLgotICAgIHRpbGVJbWFnZUNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZShhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgLyB0
aWxlQm91bmRhcmllcy53aWR0aCgpLAorICAgIHRpbGVJbWFnZUNvbnRleHQtPnNjYWxlKEdyYXBo
aWNzU2l6ZShhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgLyB0aWxlQm91bmRhcmllcy53
aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzLmhlaWdodCgpIC8gdGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkpKTsKIAogICAg
IC8vIEFwcGx5IHRpbGUgaW1hZ2UgdHJhbnNmb3JtYXRpb25zLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAog
I2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUGF0dGVybkF0dHJpYnV0
ZXMuaCIKQEAgLTUzLDE2ICs1MywxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dCom
LCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hv
cnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0
KikgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9
CiAgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKIAogcHJp
dmF0ZToKLSAgICBib29sIGJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBGbG9hdFJl
Y3QmIHBhdHRlcm5Cb3VuZGFyaWVzLCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9y
bSkgY29uc3Q7CisgICAgYm9vbCBidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYsIGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiwgR3Jh
cGhpY3NSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywgQWZmaW5lVHJhbnNmb3JtJiB0aWxlSW1hZ2VU
cmFuc2Zvcm0pIGNvbnN0OwogCi0gICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlVGls
ZUltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CisgICAgUGFzc093
blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlVGlsZUltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
dHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlQm91bmRhcmllcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NS
ZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJ
bWFnZVRyYW5zZm9ybSkgY29uc3Q7CiAKICAgICBib29sIG1fc2hvdWxkQ29sbGVjdFBhdHRlcm5B
dHRyaWJ1dGVzIDogMTsKICAgICBQYXR0ZXJuQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3Jh
ZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlUmFkaWFsR3JhZGllbnQ6OmJ1CiAgICAgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KiByYWRp
YWxHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQq
PihncmFkaWVudEVsZW1lbnQpOwogCiAgICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IGZvY2FsL2Nl
bnRlciBwb2ludHMgYW5kIHJhZGl1cwotICAgIEZsb2F0UG9pbnQgZm9jYWxQb2ludDsKLSAgICBG
bG9hdFBvaW50IGNlbnRlclBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZm9jYWxQb2ludDsKKyAg
ICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50OwogICAgIGZsb2F0IHJhZGl1czsKICAgICByYWRp
YWxHcmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5kUmFkaXVzKG1f
YXR0cmlidXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVNvbGlkQ29sb3IuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyAr
MzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCBy
ZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJP
YmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBj
b25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhp
Y3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gR3JhcGhp
Y3NSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNl
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CiAgICAgc3RhdGljIFJlbmRl
clNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIFJlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290KCkKIHsK
IH0KIAotdm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlv
bihGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvLCBib29sJiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNT
aXplKSBjb25zdAordm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0aW9JbmZv
cm1hdGlvbihHcmFwaGljc1NpemUmIGludHJpbnNpY1JhdGlvLCBib29sJiBpc1BlcmNlbnRhZ2VJ
bnRyaW5zaWNTaXplKSBjb25zdAogewogICAgIC8vIFNwZWM6IGh0dHA6Ly9kZXYudzMub3JnL1NW
Ry9wcm9maWxlcy8xLjFGMi9wdWJsaXNoL2Nvb3Jkcy5odG1sI0ludHJpbnNpY1NpemluZwogICAg
IC8vIFRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIG9mIHRoZSB2aWV3cG9ydCBvZiBTVkcgY29u
dGVudCBpcyBuZWNlc3NhcnkgZm9yIGV4YW1wbGUsIHdoZW4gaW5jbHVkaW5nCkBAIC03Niw3ICs3
Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1JhdGkKICAgICAvLyDi
gJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZXMgYWZ0ZXIgcmVzb2x2aW5nIGJv
dGggdmFsdWVzIHRvIHVzZXIgdW5pdHMuCiAgICAgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSA9
IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5o
ZWlnaHQoKS5pc0ZpeGVkKCkpIHsKLSAgICAgICAgaW50cmluc2ljUmF0aW8gPSBGbG9hdFNpemUo
d2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEdyYXBoaWNzU2l6
ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkwLDcg
KzkwLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0aQogICAgIC8v
IGFjY291bnQgZm9yIGNlcnRhaW4gY2FzZXMgb2YgdGhlIGludHJpbnNpYyB3aWR0aC9oZWlnaHQg
Y2FsY3VsYXRpb24gaW4gUmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoL0hl
aWdodC4KICAgICBpZiAoaW50cmluc2ljUmF0aW8uaXNFbXB0eSgpICYmIHN0eWxlKCktPndpZHRo
KCkuaXNQZXJjZW50KCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpIHsKICAgICAg
ICAgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSA9IHRydWU7Ci0gICAgICAgIGludHJpbnNpY1Jh
dGlvID0gRmxvYXRTaXplKHN0eWxlKCktPndpZHRoKCkucGVyY2VudCgpLCBzdHlsZSgpLT5oZWln
aHQoKS5wZXJjZW50KCkpOworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEdyYXBoaWNzU2l6ZShz
dHlsZSgpLT53aWR0aCgpLnBlcmNlbnQoKSwgc3R5bGUoKS0+aGVpZ2h0KCkucGVyY2VudCgpKTsK
ICAgICB9CiB9CiAKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNhbGNW
aWV3cG9ydCgpCiAgICAgaWYgKCFzdmctPmhhc1NldENvbnRhaW5lclNpemUoKSkgewogICAgICAg
ICAvLyBJbiB0aGUgbm9ybWFsIGNhc2Ugb2YgPHN2Zz4gYmVpbmcgc3RhbmQtYWxvbmUgb3IgaW4g
YSBDU1NCb3hNb2RlbCBvYmplY3Qgd2UgdXNlCiAgICAgICAgIC8vIFJlbmRlckJveDo6d2lkdGgo
KS9oZWlnaHQoKSAod2hpY2ggcHVsbHMgZGF0YSBmcm9tIFJlbmRlclN0eWxlKQotICAgICAgICBt
X3ZpZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIG1f
dmlld3BvcnRTaXplID0gR3JhcGhpY3NTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6
Y2FsY1ZpZXdwb3J0KCkKICAgICAvLyBGSVhNRTogQ2hlY2sgaG93IFNWR0ltYWdlICsgem9vbWlu
ZyBpcyBzdXBwb3NlZCB0byBiZSBoYW5kbGVkPwogICAgIFNWR0xlbmd0aCB3aWR0aCA9IHN2Zy0+
d2lkdGgoKTsKICAgICBTVkdMZW5ndGggaGVpZ2h0ID0gc3ZnLT5oZWlnaHQoKTsKLSAgICBtX3Zp
ZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJj
ZW50YWdlID8gc3ZnLT5yZWxhdGl2ZVdpZHRoVmFsdWUoKSA6IHdpZHRoLnZhbHVlKHN2ZyksCisg
ICAgbV92aWV3cG9ydFNpemUgPSBHcmFwaGljc1NpemUod2lkdGgudW5pdFR5cGUoKSA9PSBMZW5n
dGhUeXBlUGVyY2VudGFnZSA/IHN2Zy0+cmVsYXRpdmVXaWR0aFZhbHVlKCkgOiB3aWR0aC52YWx1
ZShzdmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC51bml0VHlwZSgp
ID09IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVlKCkgOiBo
ZWlnaHQudmFsdWUoc3ZnKSk7CiB9CiAKQEAgLTM2NSw3ICszNjUsNyBAQCBBZmZpbmVUcmFuc2Zv
cm0gUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvCiAgICAgSW50U2l6ZSBib3JkZXJBbmRQYWRkaW5n
ID0gYm9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCk7CiAgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0g
c3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgZmxvYXQgc2NhbGUgPSBz
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgRmxvYXRQb2ludCB0cmFuc2xhdGUgPSBzdmct
PmN1cnJlbnRUcmFuc2xhdGUoKTsKKyAgICBHcmFwaGljc1BvaW50IHRyYW5zbGF0ZSA9IHN2Zy0+
Y3VycmVudFRyYW5zbGF0ZSgpOwogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0oc2NhbGUsIDAsIDAs
IHNjYWxlLCBib3JkZXJBbmRQYWRkaW5nLndpZHRoKCkgKyB0cmFuc2xhdGUueCgpLCBib3JkZXJB
bmRQYWRkaW5nLmhlaWdodCgpICsgdHJhbnNsYXRlLnkoKSk7CiAgICAgcmV0dXJuIGN0bSAqIHN2
Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpIC8gc2NhbGUsIGhlaWdodCgpIC8gc2Nh
bGUpOwogfQpAQCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW4KICAgICByZXBhaW50UmVjdCA9IGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0o
KS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKIAogICAgIC8vIEFwcGx5IGluaXRpYWwgdmlld3BvcnQg
Y2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVyZmxvdyBzZXR0aW5ncyAgICAKLSAgICByZXBhaW50
UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBt
X3ZpZXdwb3J0U2l6ZSkpKTsKKyAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50
UmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX3ZpZXdwb3J0U2l6ZSkpKTsKIAog
ICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7
CiAgICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKSkK
QEAgLTQyNyw5ICs0MjcsOSBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExvY2FsVG9Db250YWlu
ZXIoCiAKIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7Ci0g
ICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1fc3Ryb2tlQm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZsb2F0UmVj
dCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICBtX3N0
cm9rZUJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CisgICAgbV9yZXBhaW50Qm91bmRpbmdC
b3ggPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250
YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRpbmdCb3gsIG1fc3Ryb2tlQm91
bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKICAgICBTVkdSZW5kZXJTdXBwb3J0Ojpp
bnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91bmRpbmdC
b3gpOwpAQCAtNDQ5LDEwICs0NDksMTAgQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2lu
dChjb25zdCBIaQogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0UG9pbnQo
cmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAgICAgICBp
ZiAoY2hpbGQtPm5vZGVBdEdyYXBoaWNzUG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50
LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENTUy9IVE1MIGFzc3Vt
ZXMgdGhlIGxvY2FsIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSBib3JkZXIgYm94LCByaWdodD8K
ICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9yZGVyQm94
KTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBub2RlQXRGbG9hdFBvaW50KCkgZG9lc24ndCBoYW5k
bGUgcmVjdC1iYXNlZCBoaXQgdGVzdHMgeWV0LgorICAgICAgICAgICAgLy8gRklYTUU6IG5vZGVB
dEdyYXBoaWNzUG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIGhpdCB0ZXN0cyB5ZXQu
CiAgICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChjaGlsZC0+
bm9kZSgpLCBwb2ludEluQ29udGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBS
ZW5kZXJTVkdSb290X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAKICNp
bmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICB2aXJ0dWFs
IH5SZW5kZXJTVkdSb290KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1Jh
dGlvSW5mb3JtYXRpb24oRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbywgYm9vbCYgaXNQZXJjZW50
YWdlSW50cmluc2ljU2l6ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5z
aWNSYXRpb0luZm9ybWF0aW9uKEdyYXBoaWNzU2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlz
UGVyY2VudGFnZUludHJpbnNpY1NpemUpIGNvbnN0OwogICAgIGNvbnN0IFJlbmRlck9iamVjdENo
aWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQogICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQog
CkBAIC03MSwxMiArNzEsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICBib29sIGZp
bGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBmaWxsQ29udGFpbnMoY29u
c3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3Qg
R3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9r
ZUJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQorICAg
IHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQorICAgIHZp
cnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIApAQCAtOTYsMTAgKzk2LDEwIEBAIHByaXZhdGU6CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25zdDsKIAog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0U2l6ZSBtX3Zp
ZXdwb3J0U2l6ZTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBGbG9h
dFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRp
bmdCb3g7CisgICAgR3JhcGhpY3NTaXplIG1fdmlld3BvcnRTaXplOworICAgIEdyYXBoaWNzUmVj
dCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3N0cm9rZUJvdW5kaW5n
Qm94OworICAgIEdyYXBoaWNzUmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAgICBtdXRhYmxl
IEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CiAgICAgYm9vbCBtX2lz
TGF5b3V0U2l6ZUNoYW5nZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNPclRyYW5z
Zm9ybVVwZGF0ZSA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCkBAIC0xNTMsNyArMTUzLDcg
QEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgICAgICBzZXRDaGlsZHJlbklubGlu
ZSh0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gb25seSBs
YXlvdXQgdGhlIGNoaWxkIGJveGVzLCBpZiBuZWVkZWQuCi0gICAgRmxvYXRSZWN0IG9sZEJvdW5k
YXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvbGRCb3VuZGFy
aWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7
CiAgICAgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpOwogCkBAIC0xODIsMTQgKzE4MiwxNCBA
QCBSb290SW5saW5lQm94KiBSZW5kZXJTVkdUZXh0OjpjcmVhdGVSb290CiAgICAgcmV0dXJuIGJv
eDsKIH0KIAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVu
ZGVyU1ZHVGV4dDo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludElu
UGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgUG9pbnRlckV2ZW50
c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1RFWFRfSElUVEVT
VElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlzVmlz
aWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CiAgICAgaWYgKGlzVmlz
aWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKICAgICAgICAgaWYgKChoaXRSdWxl
cy5jYW5IaXRTdHJva2UgJiYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpIHx8ICFo
aXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRG
aWxsICYmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVp
cmVGaWxsKSkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisgICAg
ICAgICAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgICAgICAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAKQEAgLTIyNCw3ICsyMjQsNyBA
QCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25GCiAgICAgcmV0dXJuIGNs
b3Nlc3RCb3gtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoTGF5b3V0UG9pbnQocG9pbnRJ
bkNvbnRlbnRzLngoKSwgY2xvc2VzdEJveC0+eSgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4
dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlclNW
R1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewogICAg
IHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCkpKTsK
IH0KQEAgLTI0NSw5ICsyNDUsOSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5m
byYgcGFpCiAgICAgUmVuZGVyQmxvY2s6OnBhaW50KGJsb2NrSW5mbywgSW50UG9pbnQoKSk7CiB9
CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CitH
cmFwaGljc1JlY3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewot
ICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAg
ICBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CiAg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
ICAgICBpZiAoIXN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKICAgICAgICAgcmV0dXJuIHN0cm9rZUJv
dW5kYXJpZXM7CkBAIC0yNTgsOSArMjU4LDkgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnN0
cm9rZUJvdW5kaW5nQgogICAgIHJldHVybiBzdHJva2VCb3VuZGFyaWVzOwogfQogCi1GbG9hdFJl
Y3QgUmVuZGVyU1ZHVGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAor
R3JhcGhpY3NSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBzdHJva2VCb3VuZGluZ0Jv
eCgpOworICAgIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7
CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2Vz
KHRoaXMsIHJlcGFpbnRSZWN0KTsKIAogICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiB0ZXh0U2hh
ZG93ID0gc3R5bGUoKS0+dGV4dFNoYWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVz
VXBkYXRlKCkgeyBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSB0cnVlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJhbnNmb3Jt
VXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIHN0YXRpYyBSZW5kZXJTVkdUZXh0
KiBsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoUmVuZGVyT2JqZWN0Kik7CiAgICAgc3RhdGlj
IGNvbnN0IFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcihjb25zdCBS
ZW5kZXJPYmplY3QqKTsKQEAgLTU0LDIxICs1NCwyMSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24p
OwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5
b3V0UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9p
ZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICB2aXJ0dWFsIElu
dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29s
IGZpeGVkID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3Jt
cywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gZnJhbWVSZWN0KCk7IH0K
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gZnJh
bWVSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJl
bnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xv
Y2FsVHJhbnNmb3JtOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHRQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNyArMjIsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4
dFBhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVh
ZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJv
eC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRh
aW5lci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBib29sIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6OmNhCiAg
ICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpnVGFnKSB8fCAhc3RhdGljX2Nh
c3Q8U1ZHR0VsZW1lbnQqPihlbGVtZW50KS0+aXNTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CiAKLSAgICBGbG9hdFNpemUgdHJhbnNsYXRp
b24gPSBzdGF0aWNfY2FzdDxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCo+KGVsZW1lbnQp
LT5jb250YWluZXJUcmFuc2xhdGlvbigpOworICAgIEdyYXBoaWNzU2l6ZSB0cmFuc2xhdGlvbiA9
IHN0YXRpY19jYXN0PFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCktPmNv
bnRhaW5lclRyYW5zbGF0aW9uKCk7CiAgICAgaWYgKCF0cmFuc2xhdGlvbi53aWR0aCgpICYmICF0
cmFuc2xhdGlvbi5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksOCArNDksOCBAQCB2b2lkIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpj
YWxjVmllCiAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpKSB7
CiAgICAgICAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50
Kj4oZWxlbWVudCk7CiAKLSAgICAgICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3Bv
cnQ7Ci0gICAgICAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHN2Zy0+eCgpLnZhbHVlKHN2ZykK
KyAgICAgICAgIEdyYXBoaWNzUmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3BvcnQ7CisgICAgICAg
ICBtX3ZpZXdwb3J0ID0gR3JhcGhpY3NSZWN0KHN2Zy0+eCgpLnZhbHVlKHN2ZykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPnkoKS52YWx1ZShzdmcpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgc3ZnLT53aWR0aCgpLnZhbHVlKHN2ZykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPmhlaWdodCgpLnZhbHVlKHN2ZykpOwpAQCAt
NzgsNyArNzgsNyBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1ZpZXdwb3J0CiAg
ICAgLy8gcmV0dXJuIHZpZXdwb3J0VHJhbnNsYXRpb24gKiBsb2NhbFRyYW5zZm9ybSgpICogdmll
d3BvcnRUcmFuc2Zvcm0oKQogfQogCi1ib29sIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpw
b2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQp
Citib29sIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpwb2ludElzSW5zaWRlVmlld3BvcnRD
bGlwKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQpCiB7CiAgICAgLy8gUmVzcGVj
dCB0aGUgdmlld3BvcnQgY2xpcCAod2hpY2ggaXMgaW4gcGFyZW50IGNvb3JkcykKICAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOSAr
NDUsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBhcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBwb2ludElu
UGFyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50KTsKIAotICAgIEZsb2F0UmVjdCBtX3ZpZXdw
b3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0OwogICAgIG11dGFibGUgQWZmaW5lVHJh
bnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH07CiAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VC
dWZmZXJUb29scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTVkdJ
bWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFucwogICAgIH0KIH0KIAotYm9vbCBTVkdJbWFn
ZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
VGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBP
d25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQor
Ym9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBHcmFwaGlj
c1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBjbGFtcGVkQWJz
b2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIEludFNpemUgaW1hZ2VTaXplKHJvdW5kZWRJbWFnZUJ1
ZmZlclNpemUoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKICAgICBJbnRTaXpl
IHVuY2xhbXBlZEltYWdlU2l6ZShTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZm
ZXJTaXplKGFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKQEAgLTY3LDcgKzY3LDcgQEAgYm9v
bCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZgogICAgIEFTU0VSVChpbWFnZUNv
bnRleHQpOwogCiAgICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZlY3RzLCBhcyB0aGUgYWJz
b2x1dGUgdGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhbmQgdGhl
IGltYWdlIGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCi0gICAgaW1hZ2VDb250ZXh0LT5zY2FsZShG
bG9hdFNpemUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRhcmdldFJlY3Qu
d2lkdGgoKSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0
LmhlaWdodCgpKSk7CisgICAgaW1hZ2VDb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUodW5jbGFt
cGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRhcmdldFJlY3Qud2lkdGgoKSwgdW5jbGFt
cGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LmhlaWdodCgpKSk7CiAK
ICAgICBpbWFnZUJ1ZmZlciA9IGltYWdlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVAog
ICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IHNhdmVkQ29udGVudFRyYW5zZm9ybWF0aW9uOwog
fQogCi12b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1h
Z2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKK3ZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRv
SW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRBYnNvbHV0
ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogewogICAgIEFT
U0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQoaW1hZ2VCdWZmZXIpOwpAQCAtMTA4LDE3ICsxMDgs
MTcgQEAgdm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZgogICAgICAgICBp
bWFnZUJ1ZmZlci5jbGVhcigpOwogfQogCi1JbnRTaXplIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJv
dW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorSW50U2l6ZSBTVkdJ
bWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEdyYXBoaWNzU2l6
ZSYgc2l6ZSkKIHsKICAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
c2l6ZS53aWR0aCgpKSksIHN0YXRpY19jYXN0PGludD4obHJvdW5kZihzaXplLmhlaWdodCgpKSkp
OwogfQogCi1GbG9hdFJlY3QgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZs
b2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQorR3JhcGhpY3NSZWN0IFNWR0ltYWdlQnVmZmVy
VG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCkK
IHsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogCiAgICAgY29uc3QgUmVuZGVyU1ZHUm9vdCogc3Zn
Um9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChyZW5kZXJlcik7Ci0g
ICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRhcmdldFJl
Y3Q7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0
ZVRhcmdldFJlY3Q7CiAgICAgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pbnRlcnNlY3Qoc3Zn
Um9vdC0+ZnJhbWVSZWN0KCkpOwogICAgIHJldHVybiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFn
ZUJ1ZmZlclRvb2xzLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsy
NywyMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1j
bGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1JlY3Q7Citj
bGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiAKIGNsYXNzIFNWR0ltYWdlQnVmZmVyVG9vbHMgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNWR0ltYWdlQnVmZmVyVG9vbHMpOwogcHVibGljOgotICAgIHN0YXRpYyBib29sIGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZl
cj4mLCBDb2xvclNwYWNlKTsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBj
bGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29sb3JTcGFj
ZSk7CiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqLCBSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBzdGF0aWMg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0
ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdl
dFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNvbnN0IFJlbmRl
ck9iamVjdCosIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHN0YXRp
YyBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KTsKLSAgICBz
dGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwor
ICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRl
cmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1dGVUYXJn
ZXRSZWN0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0
IEdyYXBoaWNzU2l6ZSYpOwogCiBwcml2YXRlOgogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHMoKSB7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcg
QEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTQogICAgICAgICBpZiAo
bWFya2VyLT50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0OworICAgICAgICBHcmFw
aGljc1JlY3QgbWFya2VyUmVjdDsKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSB0
ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3go
KSkgewogICAgICAgICAgICAgaWYgKCFib3gtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgU1ZHSW5saW5lRmxv
d0JveDo6Y29tcHV0ZVRleHRNYXRjaE0KICAgICAgICAgICAgICAgICBpZiAoIXRleHRCb3gtPm1h
cFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21lbnQsIGZyYWdt
ZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbikpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdCA9
IHRleHRCb3gtPnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdtZW50
U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwgc3R5bGUpOworICAgICAgICAgICAg
ICAgIEdyYXBoaWNzUmVjdCBmcmFnbWVudFJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0Rm9y
VGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5k
UG9zaXRpb24sIHN0eWxlKTsKICAgICAgICAgICAgICAgICBmcmFnbWVudC5idWlsZEZyYWdtZW50
VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAgICAgICAgICAgICBpZiAoIWZyYWdt
ZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRS
ZWN0ID0gZnJhZ21lbnRUcmFuc2Zvcm0ubWFwUmVjdChmcmFnbWVudFJlY3QpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgZmxvYXQgU1ZHSW5s
aW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZQogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJl
Y3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBT
VkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0
aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUpCitHcmFwaGljc1JlY3QgU1ZHSW5saW5lVGV4dEJveDo6
c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdt
ZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAgICAgQVNT
RVJUKHN0eWxlKTsKQEAgLTEwMywxMyArMTAzLDEzIEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25SZWMKIAogICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVu
ZGVyZXItPnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBGb250TWV0cmljcyYgc2NhbGVkRm9udE1l
dHJpY3MgPSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCk7Ci0gICAgRmxvYXRQb2ludCB0ZXh0T3Jp
Z2luKGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworICAgIEdyYXBoaWNzUG9pbnQgdGV4dE9yaWdp
bihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKQog
ICAgICAgICB0ZXh0T3JpZ2luLnNjYWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpOwog
CiAgICAgdGV4dE9yaWdpbi5tb3ZlKDAsIC1zY2FsZWRGb250TWV0cmljcy5mbG9hdEFzY2VudCgp
KTsKIAotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0ID0gc2NhbGVkRm9udC5zZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCksIHRleHRPcmlnaW4s
IGZyYWdtZW50LmhlaWdodCAqIHNjYWxpbmdGYWN0b3IsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uKTsKKyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdCA9IHNjYWxlZEZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZnJhZ21lbnQpLCB0ZXh0T3Jp
Z2luLCBmcmFnbWVudC5oZWlnaHQgKiBzY2FsaW5nRmFjdG9yLCBzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbik7CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgPT0gMSkKICAgICAgICAgcmV0dXJuIHNl
bGVjdGlvblJlY3Q7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBJbnRSZWN0IFNWR0lubGluZVRleHRC
b3g6OnNlbGVjdGlvblJlY3QoCiAgICAgQVNTRVJUKHN0eWxlKTsKIAogICAgIEFmZmluZVRyYW5z
Zm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsKKyAg
ICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdDsKICAgICBpbnQgZnJhZ21lbnRTdGFydFBvc2l0
aW9uID0gMDsKICAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAKQEAgLTE0NSw3ICsx
NDUsNyBAQCBJbnRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoCiAgICAgICAg
IGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVu
dCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QgPSBzZWxlY3Rp
b25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZy
YWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGZyYWdtZW50
UmVjdCA9IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdtZW50U3Rh
cnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwgc3R5bGUpOwogICAgICAgICBmcmFnbWVu
dC5idWlsZEZyYWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAgICAgaWYg
KCFmcmFnbWVudFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgICAgICBmcmFnbWVudFJl
Y3QgPSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CkBAIC01NzksNyAr
NTc5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAgIGlm
IChmcmFnbWVudC53aWR0aCA8PSAwICYmIHRoaWNrbmVzcyA8PSAwKQogICAgICAgICByZXR1cm47
CiAKLSAgICBGbG9hdFBvaW50IGRlY29yYXRpb25PcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQu
eSk7CisgICAgR3JhcGhpY3NQb2ludCBkZWNvcmF0aW9uT3JpZ2luKGZyYWdtZW50LngsIGZyYWdt
ZW50LnkpOwogICAgIGZsb2F0IHdpZHRoID0gZnJhZ21lbnQud2lkdGg7CiAgICAgY29uc3QgRm9u
dE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250TWV0cmljcygpOwog
CkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRp
b25XaQogICAgIGRlY29yYXRpb25PcmlnaW4ubW92ZSgwLCAtc2NhbGVkRm9udE1ldHJpY3MuZmxv
YXRBc2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9uLCBzY2Fs
ZWRGb250TWV0cmljcywgdGhpY2tuZXNzKSk7CiAKICAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5h
ZGRSZWN0KEZsb2F0UmVjdChkZWNvcmF0aW9uT3JpZ2luLCBGbG9hdFNpemUod2lkdGgsIHRoaWNr
bmVzcykpKTsKKyAgICBwYXRoLmFkZFJlY3QoR3JhcGhpY3NSZWN0KGRlY29yYXRpb25PcmlnaW4s
IEdyYXBoaWNzU2l6ZSh3aWR0aCwgdGhpY2tuZXNzKSkpOwogCiAgICAgaWYgKGFjcXVpcmVQYWlu
dGluZ1Jlc291cmNlKGNvbnRleHQsIHNjYWxpbmdGYWN0b3IsIGRlY29yYXRpb25SZW5kZXJlciwg
ZGVjb3JhdGlvblN0eWxlKSkKICAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4
dCwgJnBhdGgpOwpAQCAtNjE1LDIxICs2MTUsMjEgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRXaXRoU2hhZAogICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0UmVuZGVy
ZXItPnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdHlsZS0+
dGV4dFNoYWRvdygpOwogCi0gICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50LngsIGZy
YWdtZW50LnkpOwotICAgIEZsb2F0U2l6ZSB0ZXh0U2l6ZShmcmFnbWVudC53aWR0aCwgZnJhZ21l
bnQuaGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJh
Z21lbnQueSk7CisgICAgR3JhcGhpY3NTaXplIHRleHRTaXplKGZyYWdtZW50LndpZHRoLCBmcmFn
bWVudC5oZWlnaHQpOwogCiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkgewogICAgICAgICB0
ZXh0T3JpZ2luLnNjYWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpOwogICAgICAgICB0
ZXh0U2l6ZS5zY2FsZShzY2FsaW5nRmFjdG9yKTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3Qgc2hh
ZG93UmVjdChGbG9hdFBvaW50KHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSAtIHNjYWxl
ZEZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKSwgdGV4dFNpemUpOworICAgIEdyYXBo
aWNzUmVjdCBzaGFkb3dSZWN0KEdyYXBoaWNzUG9pbnQodGV4dE9yaWdpbi54KCksIHRleHRPcmln
aW4ueSgpIC0gc2NhbGVkRm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpLCB0ZXh0U2l6
ZSk7CiAKICAgICBkbyB7CiAgICAgICAgIGlmICghcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRl
eHRQYWludGluZyhjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCB0ZXh0UnVuLCBzdHlsZSkpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBGbG9hdFNpemUgZXh0cmFPZmZzZXQ7CisgICAgICAg
IEdyYXBoaWNzU2l6ZSBleHRyYU9mZnNldDsKICAgICAgICAgaWYgKHNoYWRvdykKICAgICAgICAg
ICAgIGV4dHJhT2Zmc2V0ID0gYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChjb250ZXh0LCBz
aGFkb3csIHNoYWRvd1JlY3QsIGZhbHNlIC8qIHN0cm9rZWQgKi8sIHRydWUgLyogb3BhcXVlICov
LCB0cnVlIC8qIGhvcml6b250YWwgKi8pOwogCkBAIC03MDMsNyArNzAzLDcgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpYwogCiBJbnRSZWN0IFNWR0lubGluZVRleHRC
b3g6OmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCB0ZXh0UmVj
dDsKKyAgICBHcmFwaGljc1JlY3QgdGV4dFJlY3Q7CiAKICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0
KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQodGhpcy0+dGV4dFJlbmRlcmVy
KCkpOwogICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOwpAQCAtNzE3LDcgKzcxNyw3IEBAIEludFJl
Y3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmQKICAgICB1bnNpZ25lZCB0ZXh0RnJh
Z21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKICAgICAgICAgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4dEZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgRmxv
YXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gYmFzZWxpbmUsIGZy
YWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOworICAgICAgICBHcmFwaGljc1JlY3QgZnJh
Z21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21lbnQud2lk
dGgsIGZyYWdtZW50LmhlaWdodCk7CiAgICAgICAgIGZyYWdtZW50LmJ1aWxkRnJhZ21lbnRUcmFu
c2Zvcm0oZnJhZ21lbnRUcmFuc2Zvcm0pOwogICAgICAgICBpZiAoIWZyYWdtZW50VHJhbnNmb3Jt
LmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50VHJhbnNm
b3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKQEAgLTczOCw5ICs3MzgsOSBAQCBib29sIFNWR0lu
bGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0CiAgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0
UnVsZXMucmVxdWlyZVZpc2libGUpIHsKICAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5IaXRTdHJv
a2UgJiYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpIHx8ICFo
aXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRG
aWxsICYmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkgfHwgIWhp
dFJ1bGVzLnJlcXVpcmVGaWxsKSkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYm94T3JpZ2lu
KHgoKSwgeSgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luKHgoKSwgeSgp
KTsKICAgICAgICAgICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAg
ICAgICAgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOworICAgICAgICAgICAg
R3JhcGhpY3NSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgICAgICAgICAgaWYgKHJl
Y3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewog
ICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBw
b2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3Rh
cnRzTmV3VGV4dENodW5rKGJvb2wgbmV3VGV4dENodW5rKSB7IG1fc3RhcnRzTmV3VGV4dENodW5r
ID0gbmV3VGV4dENodW5rOyB9CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50
KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFn
bWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBp
bnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqKTsKKyAgICBHcmFwaGljc1JlY3Qg
c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQg
ZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5
bGUqKTsKIAogcHJpdmF0ZToKICAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5
bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCwxMyArNDQsMTMgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBGbG9hdFBv
aW50IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgR3JhcGhpY3NQb2lu
dCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyKiBtYXJrZXIoKSBjb25zdCB7IHJldHVybiBtX21hcmtlcjsgfQogCiAgICAgZmxv
YXQgY3VycmVudEFuZ2xlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbnNsb3Bl
Q2hhbmdlID0gbV9pbnNsb3BlUG9pbnRzWzFdIC0gbV9pbnNsb3BlUG9pbnRzWzBdOwotICAgICAg
ICBGbG9hdFNpemUgb3V0c2xvcGVDaGFuZ2UgPSBtX291dHNsb3BlUG9pbnRzWzFdIC0gbV9vdXRz
bG9wZVBvaW50c1swXTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGluc2xvcGVDaGFuZ2UgPSBtX2lu
c2xvcGVQb2ludHNbMV0gLSBtX2luc2xvcGVQb2ludHNbMF07CisgICAgICAgIEdyYXBoaWNzU2l6
ZSBvdXRzbG9wZUNoYW5nZSA9IG1fb3V0c2xvcGVQb2ludHNbMV0gLSBtX291dHNsb3BlUG9pbnRz
WzBdOwogCiAgICAgICAgIGRvdWJsZSBpbnNsb3BlID0gcmFkMmRlZyhhdGFuMihpbnNsb3BlQ2hh
bmdlLmhlaWdodCgpLCBpbnNsb3BlQ2hhbmdlLndpZHRoKCkpKTsKICAgICAgICAgZG91YmxlIG91
dHNsb3BlID0gcmFkMmRlZyhhdGFuMihvdXRzbG9wZUNoYW5nZS5oZWlnaHQoKSwgb3V0c2xvcGVD
aGFuZ2Uud2lkdGgoKSkpOwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbWFy
a2VyID0gbWFya2VyOwogICAgIH0KIAotICAgIHZvaWQgdXBkYXRlT3V0c2xvcGUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCisgICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkKICAgICB7CiAgICAgICAgIG1fb3V0c2xvcGVQb2ludHNbMF0gPSBtX29yaWdp
bjsKICAgICAgICAgbV9vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50OwpAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZU1hcmtlckRhdGFGb3JQYXRoRWxlbWVudChjb25z
dCBQYXRoRWxlbWVudCogZWxlbWVudCkKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQqIHBvaW50
cyA9IGVsZW1lbnQtPnBvaW50czsKKyAgICAgICAgR3JhcGhpY3NQb2ludCogcG9pbnRzID0gZWxl
bWVudC0+cG9pbnRzOwogCiAgICAgICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewogICAgICAg
ICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKQEAgLTEwOSwxMiArMTA5LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKICAgICAg
ICAgICAgIHVwZGF0ZUluc2xvcGUocG9pbnRzWzBdKTsKICAgICAgICAgICAgIG1fb3JpZ2luID0g
bV9zdWJwYXRoU3RhcnQ7Ci0gICAgICAgICAgICBtX3N1YnBhdGhTdGFydCA9IEZsb2F0UG9pbnQo
KTsKKyAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gR3JhcGhpY3NQb2ludCgpOwogICAgICAg
ICB9CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRlSW5zbG9wZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKKyAgICB2b2lkIHVwZGF0ZUluc2xvcGUoY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQpCiAgICAgewogICAgICAgICBtX2luc2xvcGVQb2ludHNbMF0gPSBtX29yaWdpbjsK
ICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzFdID0gcG9pbnQ7CkBAIC0xMjIsMTAgKzEyMiwxMCBA
QCBwcml2YXRlOgogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1fbWFya2VyOwotICAgIEZsb2F0UG9pbnQgbV9vcmlnaW47Ci0gICAgRmxvYXRQb2ludCBt
X3N1YnBhdGhTdGFydDsKLSAgICBGbG9hdFBvaW50IG1faW5zbG9wZVBvaW50c1syXTsKLSAgICBG
bG9hdFBvaW50IG1fb3V0c2xvcGVQb2ludHNbMl07CisgICAgR3JhcGhpY3NQb2ludCBtX29yaWdp
bjsKKyAgICBHcmFwaGljc1BvaW50IG1fc3VicGF0aFN0YXJ0OworICAgIEdyYXBoaWNzUG9pbnQg
bV9pbnNsb3BlUG9pbnRzWzJdOworICAgIEdyYXBoaWNzUG9pbnQgbV9vdXRzbG9wZVBvaW50c1sy
XTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2Vy
TGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU3RhcnRBbmRNaWRN
YXIKICAgICArK2VsZW1lbnRJbmRleDsKIH0KIAotRmxvYXRSZWN0IFNWR01hcmtlckxheW91dElu
Zm86OmNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFy
a2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJva2VXaWR0aCwgY29uc3QgUGF0aCYgcGF0aCkK
K0dyYXBoaWNzUmVjdCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpjYWxjdWxhdGVCb3VuZGFyaWVzKFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciwgZmxvYXQg
c3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgbV9sYXlvdXQuY2xlYXIoKTsK
ICAgICBtX21pZE1hcmtlciA9IG1pZE1hcmtlcjsKQEAgLTgwLDEyICs4MCwxMiBAQCBGbG9hdFJl
Y3QgU1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2FsY3VsYXRlCiAgICAgfQogCiAgICAgaWYgKG1fbGF5
b3V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRlcmF0b3Ig
aXQgPSBtX2xheW91dC5iZWdpbigpOwogICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRv
ciBlbmQgPSBtX2xheW91dC5lbmQoKTsKIAotICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgR3Jh
cGhpY3NSZWN0IGJvdW5kczsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IE1hcmtlckxheW91dCYgbGF5b3V0ID0gKml0OwogCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBT
VkdNYXJrZXJMYXlvdXRJbmZvOjpkcmF3TWFya2VycyhQYQogICAgIH0KIH0KIAotdm9pZCBTVkdN
YXJrZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbWFya2VyLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKQordm9pZCBT
VkdNYXJrZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJjZU1h
cmtlciogbWFya2VyLCBjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKQog
ewogICAgIEFTU0VSVChtYXJrZXIpOwogICAgIG1fbGF5b3V0LmFwcGVuZChNYXJrZXJMYXlvdXQo
bWFya2VyLCBtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0aW9uKG9yaWdpbiwgYW5nbGUsIG1fc3Ry
b2tlV2lkdGgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtl
ckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR01hcmtlckxheW91dEluZm8uaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTQgKzQ5LDE0IEBAIHB1YmxpYzoKICAgICBTVkdNYXJrZXJMYXlvdXRJbmZvKCk7CiAgICAg
flNWR01hcmtlckxheW91dEluZm8oKTsKIAotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFy
aWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciwg
ZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsKKyAgICBHcmFwaGljc1JlY3QgY2FsY3Vs
YXRlQm91bmRhcmllcyhSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIsIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBl
bmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBQYXRoJik7CiAgICAgdm9pZCBkcmF3
TWFya2VycyhQYWludEluZm8mKTsKIAogICAgIC8vIFVzZWQgYnkgc3RhdGljIGlubGluZSBoZWxw
ZXIgZnVuY3Rpb25zIGluIFNWR01hcmtlckxheW91dEluZm8uY3BwCiAgICAgU1ZHTWFya2VyRGF0
YSYgbWFya2VyRGF0YSgpIHsgcmV0dXJuIG1fbWFya2VyRGF0YTsgfQogICAgIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyKiBtaWRNYXJrZXIoKSBjb25zdCB7IHJldHVybiBtX21pZE1hcmtlcjsgfQog
ICAgIGludCYgZWxlbWVudEluZGV4KCkgeyByZXR1cm4gbV9lbGVtZW50SW5kZXg7IH0KLSAgICB2
b2lkIGFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiwgY29uc3QgRmxv
YXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSk7CisgICAgdm9pZCBhZGRMYXlvdXRlZE1hcmtl
cihSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwg
ZmxvYXQgYW5nbGUpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU1ZHUmVuZGVy
U3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1YKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUtPm9w
YWNpdHkoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93
KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxIHx8IHNoYWRvdykgewotICAgICAgICBGbG9hdFJlY3Qg
cmVwYWludFJlY3QgPSBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7Cisg
ICAgICAgIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdCA9IG9iamVjdC0+cmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKTsKIAogICAgICAgICBpZiAob3BhY2l0eSA8IDEpIHsKICAgICAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHJlcGFpbnRSZWN0KTsKQEAgLTE2Niw3ICsxNjYs
NyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvCiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIFNWR1Jl
bmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJlbmRlck9i
amVjdCogY29udGFpbmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9hdFJlY3Qm
IHN0cm9rZUJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkKK3ZvaWQg
U1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBjb250YWluZXIsIEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEdy
YXBoaWNzUmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEdyYXBoaWNzUmVjdCYgcmVwYWludEJvdW5k
aW5nQm94KQogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29udGFpbmVyLT5m
aXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKQpAQCAtMTg1LDcg
KzE4NSw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckIKICAgICB9
CiB9CiAKLWJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCitib29sIFNW
R1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIGxvY2FsUmVwYWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxU
cmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQogewogICAgIGlmIChsb2NhbFRy
YW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgIHJldHVybiBsb2NhbFJlcGFpbnRSZWN0Lmlu
dGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIGJvb2wgU1ZHUmVu
ZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbigKICAgICByZXR1cm4gb2JqZWN0LT5zdHlsZSgp
LT5vdmVyZmxvd1goKSA9PSBPSElEREVOOwogfQogCi12b2lkIFNWR1JlbmRlclN1cHBvcnQ6Omlu
dGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKK3ZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJz
ZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBH
cmFwaGljc1JlY3QmIHJlcGFpbnRSZWN0KQogewogICAgIEFTU0VSVChvYmplY3QpOwogCkBAIC0z
MDUsNyArMzA1LDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50Ugog
ICAgICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOwogfQogCi1i
b29sIFNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBTVkdSZW5kZXJTdXBwb3J0Ojpw
b2ludEluQ2xpcHBpbmdBcmVhKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NQb2ludDsK
K2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgUmVuZGVyQm94
TW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CkBAIC01MiwxMyArNTIsMTMgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcmZsb3dIaWRkZW4oY29uc3QgUmVuZGVyT2JqZWN0
Kik7CiAKICAgICAvLyBDYWxjdWxhdGVzIHRoZSByZXBhaW50UmVjdCBpbiBjb21iaW5hdGlvbiB3
aXRoIGZpbHRlciwgY2xpcHBlciBhbmQgbWFza2VyIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAg
IHN0YXRpYyB2b2lkIGludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5k
ZXJPYmplY3QqLCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RSZXBhaW50
UmVjdFdpdGhSZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NSZWN0Jik7CiAK
ICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGluIGEgY2xp
cHBpbmcgYXJlYQotICAgIHN0YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHN0YXRpYyBib29sIHBvaW50SW5DbGlwcGlu
Z0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCi0gICAgc3RhdGlj
IHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBj
b250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tl
Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICBzdGF0aWMg
Ym9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBsb2Nh
bFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVHJhbnNmb3JtLCBjb25z
dCBQYWludEluZm8mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdC
b3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgR3JhcGhpY3NSZWN0JiBvYmplY3RC
b3VuZGluZ0JveCwgR3JhcGhpY3NSZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgR3JhcGhpY3NSZWN0
JiByZXBhaW50Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBib29sIHBhaW50SW5mb0ludGVyc2Vj
dHNSZXBhaW50UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIGxvY2FsUmVwYWludFJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYpOwogCiAg
ICAgLy8gSW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5IG5lYXJseSBhbGwgU1ZHIHJlbmRlcmVy
cyBjZW50cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMgLyByZXBhaW50IHJlY3Qg
Y2FsY3VsYXRpb25zCiAgICAgc3RhdGljIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZUlmTm90RGVmYXVsdChUZXh0U3RyZWFtCiAg
ICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgbmFtZSwgdmFsdWUpOwogfQogCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFJlY3QgJnIpCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc1JlY3QgJnIp
CiB7CiAgICAgdHMgPDwgImF0ICgiOyAKICAgICBpZiAoaGFzRnJhY3Rpb25zKHIueCgpKSkgCkBA
IC01MzQsNyArNTM0LDcgQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJl
YQogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRl
ci0+cHJpbWl0aXZlVW5pdHMoKSk7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAgIC8vIENy
ZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRl
ci4KLSAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGR1
bW15UmVjdDsKICAgICAgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0
ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15
UmVjdCwgdHJ1ZSk7CiAgICAgICAgIGlmIChSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRl
ciA9IGZpbHRlci0+YnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgewogICAgICAg
ICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3Qo
KSkKQEAgLTU4MCw4ICs1ODAsOCBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4
dFN0cmVhCiAgICAgICAgIGxpbmVhckdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRpZW50QXR0
cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRp
ZXModHMsIGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFu
c2Zvcm0oKSwgYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CiAKLSAgICAgICAgRmxvYXRQ
b2ludCBzdGFydFBvaW50OwotICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50OworICAgICAgICBH
cmFwaGljc1BvaW50IHN0YXJ0UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9pbnQ7
CiAgICAgICAgIGxpbmVhckdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlU3RhcnRFbmRQb2ludHMo
YXR0cmlidXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOwogCiAgICAgICAgIHRzIDw8ICIgW3N0
YXJ0PSIgPDwgc3RhcnRQb2ludCA8PCAiXSBbZW5kPSIgPDwgZW5kUG9pbnQgPDwgIl1cbiI7CkBA
IC01OTYsOCArNTk2LDggQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJl
YQogICAgICAgICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNvbGxlY3RHcmFkaWVudEF0dHJpYnV0
ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHdyaXRlQ29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKHRz
LCBhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpLCBhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3Jt
KCksIGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogCi0gICAgICAgIEZsb2F0UG9pbnQg
Zm9jYWxQb2ludDsKLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICAgICAgR3Jh
cGhpY3NQb2ludCBmb2NhbFBvaW50OworICAgICAgICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50
OwogICAgICAgICBmbG9hdCByYWRpdXM7CiAgICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+
Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMoYXR0cmlidXRlcywgZm9jYWxQb2lu
dCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7CiAKQEAgLTY0MCw3ICs2NDAsNyBAQCB2b2lkIHdyaXRl
U1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiB0cywgCiAgICAgd3JpdGVTdGFuZGFyZFByZWZpeCh0
cywgdGV4dCwgaW5kZW50KTsKIAogICAgIC8vIFdoeSBub3QganVzdCBsaW5lc0JvdW5kaW5nQm94
KCk/Ci0gICAgdHMgPDwgIiAiIDw8IEZsb2F0UmVjdCh0ZXh0LmZpcnN0UnVuT3JpZ2luKCksIHRl
eHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSkgPDwgIlxuIjsKKyAgICB0cyA8PCAiICIgPDwg
R3JhcGhpY3NSZWN0KHRleHQuZmlyc3RSdW5PcmlnaW4oKSwgdGV4dC5saW5lc0JvdW5kaW5nQm94
KCkuc2l6ZSgpKSA8PCAiXG4iOwogICAgIHdyaXRlUmVzb3VyY2VzKHRzLCB0ZXh0LCBpbmRlbnQp
OwogICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveGVzKHRzLCB0ZXh0LCBpbmRlbnQpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1JlY3Q7CitjbGFzcyBHcmFwaGljc1NpemU7CiBj
bGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5kZXJJbWFnZTsKQEAgLTYx
LDcgKzYxLDcgQEAgdm9pZCB3cml0ZVJlc291cmNlcyhUZXh0U3RyZWFtJiwgY29uc3QgUgogLy8g
aGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAg
dGhlIHJlbmRlciB0cmVlLgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBDb2xvciYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29u
c3QgRmxvYXRSZWN0Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBHcmFwaGljc1JlY3QmKTsKIAogLy8gaGVscGVyIG9wZXJhdG9ycyBzcGVjaWZpYyB0byBkdW1w
aW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRv
IGR1bXAgdGhlIHJlbmRlciB0cmVlCiAvLyB0aGVzZSBjb3VsZCBiZSBkZWZpbmVkIGluIHNlcGFy
YXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVzZSBnZW5lcmljIHNpZ25hdHVyZXMg
dW5pbnRlbnRpb25hbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
b290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDgg
KzQ5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5m
b3JtYXRpb24oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9
CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJl
dHVybiBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0K
IAogICAgIElubGluZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0IEludFBv
aW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJl
ZUVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgi
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgpAQCAtNDIsOSArNDIsOSBA
QCBQYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50CiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkpOwogfQog
Ci1GbG9hdFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNvbnRhaW5lclRyYW5z
bGF0aW9uKCkgY29uc3QKK0dyYXBoaWNzU2l6ZSBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVu
dDo6Y29udGFpbmVyVHJhbnNsYXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFNpemUo
bV94T2Zmc2V0LnZhbHVlKHRoaXMpLCBtX3lPZmZzZXQudmFsdWUodGhpcykpOworICAgIHJldHVy
biBHcmFwaGljc1NpemUobV94T2Zmc2V0LnZhbHVlKHRoaXMpLCBtX3lPZmZzZXQudmFsdWUodGhp
cykpOwogfQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVt
ZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVl
RWxlbWVudHMuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYs
MTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBH
cmFwaGljc1NpemU7CiBjbGFzcyBTVkdVc2VFbGVtZW50OwogCiBjbGFzcyBTVkdTaGFkb3dUcmVl
Q29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0ZShEb2N1
bWVudCopOwogCi0gICAgRmxvYXRTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7Cisg
ICAgR3JhcGhpY3NTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBTVkdMZW5ndGgmIHkp
CiAgICAgewogICAgICAgICBtX3hPZmZzZXQgPSB4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCB2b2lkIFNWR1RleHRMYXlv
dXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBt
X3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9rKTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQgcG9pbnQgPSBtX3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4dFBhdGhP
ZmZzZXQsIG9rKTsKICAgICAgICAgICAgIEFTU0VSVChvayk7CiAKICAgICAgICAgICAgIHggPSBw
b2ludC54KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVy
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UXVlcnkuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMyw3IEBAIHN0
cnVjdCBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhIDogU1YKICAgICB9CiAKICAgICB1bnNp
Z25lZCBwb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9zaXRpb247CisgICAgR3JhcGhp
Y3NQb2ludCBzdGFydFBvc2l0aW9uOwogfTsKIAogYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9z
aXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiBmcmFnbWVudCkgY29uc3QKQEAgLTMzNSw3ICszMzUsNyBAQCBib29sIFNWR1RleHRR
dWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjCiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9u
c0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGF0YS0+c3Rh
cnRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7CisgICAgZGF0
YS0+c3RhcnRQb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7
CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAgICBTVkdUZXh0TWV0cmljcyBtZXRy
aWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRl
eHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0aW9uKTsKQEAg
LTM1NCwxMCArMzU0LDEwIEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFy
YWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0UXVlcnk6OnN0YXJ0
UG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUG9p
bnQgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsKIAogICAg
IFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEgZGF0YShwb3NpdGlvbik7CiAgICAgZXhlY3V0
ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxs
YmFjayk7CkBAIC0zNzIsNyArMzcyLDcgQEAgc3RydWN0IEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJE
YXRhIDogU1ZHVAogICAgIH0KIAogICAgIHVuc2lnbmVkIHBvc2l0aW9uOwotICAgIEZsb2F0UG9p
bnQgZW5kUG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb3NpdGlvbjsKIH07CiAKIGJv
b2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdApAQCAtMzg0LDcg
KzM4NCw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGUKICAgICBp
ZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRh
LCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21lbnQueCwg
ZnJhZ21lbnQueSk7CisgICAgZGF0YS0+ZW5kUG9zaXRpb24gPSBHcmFwaGljc1BvaW50KGZyYWdt
ZW50LngsIGZyYWdtZW50LnkpOwogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1Rl
eHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIs
IGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCwgc3RhcnRQb3NpdGlvbiArIDEpOwogICAgIGlmIChx
dWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQpAQCAtNDAxLDEwICs0MDEsMTAgQEAgYm9vbCBTVkdU
ZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1G
bG9hdFBvaW50IFNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBw
b3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUG9pbnQgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9m
Q2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgIHJldHVy
biBHcmFwaGljc1BvaW50KCk7CiAKICAgICBFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSBkYXRh
KHBvc2l0aW9uKTsKICAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6OmVuZFBv
c2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk7CkBAIC00NjIsMTUgKzQ2MiwxNSBAQCBzdHJ1Y3Qg
RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhIDogU1ZHVGV4dFF1CiAgICAgfQogCiAgICAgdW5zaWduZWQg
cG9zaXRpb247Ci0gICAgRmxvYXRSZWN0IGV4dGVudDsKKyAgICBHcmFwaGljc1JlY3QgZXh0ZW50
OwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhTVkdU
ZXh0UXVlcnk6OkRhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVu
dCwgaW50IHN0YXJ0UG9zaXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQorc3RhdGljIGlubGluZSB2
b2lkIGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhTVkdUZXh0UXVlcnk6OkRhdGEqIHF1ZXJ5RGF0
YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIEdy
YXBoaWNzUmVjdCYgZXh0ZW50KQogewogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSBxdWVyeURh
dGEtPnRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFj
dG9yKTsKIAotICAgIGV4dGVudC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGZyYWdtZW50LngsIGZy
YWdtZW50LnkgLSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c2NhbGVkRm9udCgpLmZvbnRNZXRy
aWNzKCkuZmxvYXRBc2NlbnQoKSAvIHNjYWxpbmdGYWN0b3IpKTsKKyAgICBleHRlbnQuc2V0TG9j
YXRpb24oR3JhcGhpY3NQb2ludChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gcXVlcnlEYXRhLT50
ZXh0UmVuZGVyZXItPnNjYWxlZEZvbnQoKS5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkgLyBz
Y2FsaW5nRmFjdG9yKSk7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAgICBTVkdU
ZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5n
ZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFy
dFBvc2l0aW9uKTsKQEAgLTQ4MSw3ICs0ODEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3Vs
YXRlR2x5cGhCb3VuZGFyCiAgICAgfQogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNW
R1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVy
ZXIsIGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOwotICAgIGV4
dGVudC5zZXRTaXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3MuaGVpZ2h0KCkp
KTsKKyAgICBleHRlbnQuc2V0U2l6ZShHcmFwaGljc1NpemUobWV0cmljcy53aWR0aCgpLCBtZXRy
aWNzLmhlaWdodCgpKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07
CiAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9ybSwg
U1ZHVGV4dEZyYWdtZW50OjpUcmFuc2Zvcm1JZ25vcmluZ1RleHRMZW5ndGgpOwpAQCAtNTA0LDEw
ICs1MDQsMTAgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbAogICAg
IHJldHVybiB0cnVlOwogfQogCi1GbG9hdFJlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJh
Y3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdUZXh0UXVlcnk6
OmV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmICht
X3RleHRCb3hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhIGRh
dGEocG9zaXRpb24pOwogICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6ZXh0
ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayk7CkBAIC01MTYsMTkgKzUxNiwxOSBAQCBGbG9hdFJlY3Qg
U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlCiAKIC8vIGNoYXJhY3Rlck51bWJlckF0UG9z
aXRpb24oKSBpbXBsZW1lbnRhdGlvbgogc3RydWN0IENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25E
YXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKLSAgICBDaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9u
RGF0YShjb25zdCBGbG9hdFBvaW50JiBxdWVyeVBvc2l0aW9uKQorICAgIENoYXJhY3Rlck51bWJl
ckF0UG9zaXRpb25EYXRhKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHF1ZXJ5UG9zaXRpb24pCiAgICAg
ICAgIDogcG9zaXRpb24ocXVlcnlQb3NpdGlvbikKICAgICB7CiAgICAgfQogCi0gICAgRmxvYXRQ
b2ludCBwb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IHBvc2l0aW9uOwogfTsKIAogYm9vbCBT
VkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVy
eURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgQ2hh
cmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBGbG9hdFJlY3QgZXh0ZW50
OworICAgIEdyYXBoaWNzUmVjdCBleHRlbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGZyYWdtZW50Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0
YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7CiAgICAgICAgIGludCBlbmRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb24gKyAxOwpAQCAtNTQ1LDcgKzU0NSw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpj
aGFyYWN0ZXJOdW1iZXJBdFBvc2kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBTVkdUZXh0
UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pIGNvbnN0CitpbnQgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3RleHRCb3hl
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1RleHRRdWVyeV9oCiAKICNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIlNWR1RleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzgs
MTEgKzM4LDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3RlcnMoKSBj
b25zdDsKICAgICBmbG9hdCB0ZXh0TGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgc3ViU3RyaW5n
TGVuZ3RoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0g
ICAgRmxvYXRQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBw
b3NpdGlvbikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0
ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9zaXRp
b25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CiAgICAgZmxvYXQgcm90YXRp
b25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGV4
dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBpbnQgY2hhcmFj
dGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAgICBp
bnQgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7
CiAKICAgICAvLyBQdWJsaWMgaGVscGVyIHN0cnVjdC4gUHJpdmF0ZSBjbGFzc2VzIGluIFNWR1Rl
eHRRdWVyeSBpbmhlcml0IGZyb20gaXQuCiAgICAgc3RydWN0IERhdGE7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNyArODEsNyBAQCBmbG9hdCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXCiAg
ICAgcmV0dXJuIGl0LnJ1bldpZHRoU29GYXIoKTsKIH0KICAKLXZvaWQgU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpk
cmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50KSBjb25zdAogewogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAg
U1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwpAQCAtMTE0LDExICsxMTQs
MTEgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogICAgIGZsb2F0
IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSwg
Zm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOwogICAgIEFTU0VSVChhY3RpdmVQYWludGlu
Z1Jlc291cmNlKTsKIAotICAgIEZsb2F0UG9pbnQgZ2x5cGhPcmlnaW47CisgICAgR3JhcGhpY3NQ
b2ludCBnbHlwaE9yaWdpbjsKICAgICBnbHlwaE9yaWdpbi5zZXRYKHN2Z0ZvbnREYXRhLT5ob3Jp
em9udGFsT3JpZ2luWCgpICogc2NhbGUpOwogICAgIGdseXBoT3JpZ2luLnNldFkoc3ZnRm9udERh
dGEtPmhvcml6b250YWxPcmlnaW5ZKCkgKiBzY2FsZSk7CiAKLSAgICBGbG9hdFBvaW50IGN1cnJl
bnRQb2ludCA9IHBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50ID0gcG9pbnQ7
CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHJlc291cmNlTW9kZSA9IGNvbnRleHQtPnRleHRE
cmF3aW5nTW9kZSgpID09IFRleHRNb2RlU3Ryb2tlID8gQXBwbHlUb1N0cm9rZU1vZGUgOiBBcHBs
eVRvRmlsbE1vZGU7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewog
ICAgICAgICBHbHlwaCBnbHlwaCA9IGdseXBoQnVmZmVyLmdseXBoQXQoZnJvbSArIGkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWN0aXZlUGFpbnRpbmdSZXNv
dXJjZShSZW5kZXJTVkdSZXNvdXJjZSogb2JqZWN0KSB7IG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJj
ZSA9IG9iamVjdDsgfQogCiAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIg
Y2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgdG8sIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0
IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBpbnQm
IGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdDsKICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBzdHJ1Y3QgUGF0dGVybkF0dHJpYnV0ZXMgewogICAgIFNWR0xlbmd0
aCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CiAgICAgU1ZHTGVuZ3RoIHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aDsgfQogICAgIFNWR0xlbmd0aCBoZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2hlaWdodDsgfQotICAgIEZsb2F0UmVjdCB2aWV3Qm94KCkgY29uc3QgeyByZXR1cm4gbV92
aWV3Qm94OyB9CisgICAgR3JhcGhpY3NSZWN0IHZpZXdCb3goKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXdCb3g7IH0KICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHByZXNlcnZlQXNwZWN0UmF0aW8o
KSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KICAgICBib29sIGJvdW5k
aW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hNb2RlOyB9CiAgICAgYm9v
bCBib3VuZGluZ0JveE1vZGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1v
ZGVDb250ZW50OyB9CkBAIC04Nyw3ICs4Nyw3IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmlidXRlcyB7
CiAgICAgICAgIG1faGVpZ2h0U2V0ID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRW
aWV3Qm94KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCisgICAgdm9pZCBzZXRWaWV3Qm94KGNvbnN0
IEdyYXBoaWNzUmVjdCYgdmFsdWUpCiAgICAgewogICAgICAgICBtX3ZpZXdCb3ggPSB2YWx1ZTsK
ICAgICAgICAgbV92aWV3Qm94U2V0ID0gdHJ1ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBwcml2YXRl
OgogICAgIFNWR0xlbmd0aCBtX3k7CiAgICAgU1ZHTGVuZ3RoIG1fd2lkdGg7CiAgICAgU1ZHTGVu
Z3RoIG1faGVpZ2h0OwotICAgIEZsb2F0UmVjdCBtX3ZpZXdCb3g7CisgICAgR3JhcGhpY3NSZWN0
IG1fdmlld0JveDsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3BlY3RS
YXRpbzsKICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgIGJvb2wgbV9ib3VuZGluZ0Jv
eE1vZGVDb250ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMs
NyBAQCBQYXRoIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphbmltYXRpb25QCiAgICAgcmV0dXJu
IFBhdGgoKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZs
b2F0UG9pbnQmIHBvaW50KQorc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMs
IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmIChzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHN0YXRpYyBib29sIHBhcnNlUG9pbnQo
Y29uc3QgU3RyaW5nJiBzLCAKICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHBvaW50ID0gRmxvYXRQb2ludCh4LCB5KTsK
KyAgICBwb2ludCA9IEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgCiAgICAgLy8gZGlzYWxsb3cg
YW55dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kCiAgICAgcmV0dXJuICFza2lwT3B0aW9u
YWxTcGFjZXMoY3VyLCBlbmQpOwpAQCAtMTg3LDkgKzE4Nyw5IEBAIGJvb2wgU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNh
bGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0
cmluZyYgYnlTdHJpbmcpCiB7CiAgICAgcGFyc2VQb2ludChmcm9tU3RyaW5nLCBtX2Zyb21Qb2lu
dCk7Ci0gICAgRmxvYXRQb2ludCBieVBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgYnlQb2ludDsK
ICAgICBwYXJzZVBvaW50KGJ5U3RyaW5nLCBieVBvaW50KTsKLSAgICBtX3RvUG9pbnQgPSBGbG9h
dFBvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55KCkgKyBi
eVBvaW50LnkoKSk7CisgICAgbV90b1BvaW50ID0gR3JhcGhpY3NQb2ludChtX2Zyb21Qb2ludC54
KCkgKyBieVBvaW50LngoKSwgbV9mcm9tUG9pbnQueSgpICsgYnlQb2ludC55KCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9u
RWxlbWVudDo6Y2FsY3VsYXRlQQogICAgICAgICBQYXRoIHBhdGggPSBhbmltYXRpb25QYXRoKCk7
CiAgICAgICAgIGZsb2F0IHBvc2l0aW9uT25QYXRoID0gcGF0aC5sZW5ndGgoKSAqIHBlcmNlbnRh
Z2U7CiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBwYXRo
LnBvaW50QXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dCBwb3NpdGlvbiA9IHBhdGgucG9pbnRBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOwogICAg
ICAgICBpZiAob2spIHsKICAgICAgICAgICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBvc2l0aW9u
LngoKSwgcG9zaXRpb24ueSgpKTsKICAgICAgICAgICAgIFJvdGF0ZU1vZGUgcm90YXRlTW9kZSA9
IHRoaXMtPnJvdGF0ZU1vZGUoKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBGbG9hdFNpemUgZGlmZiA9IG1fdG9Qb2ludCAtIG1fZnJvbVBvaW50OworICAgIEdy
YXBoaWNzU2l6ZSBkaWZmID0gbV90b1BvaW50IC0gbV9mcm9tUG9pbnQ7CiAgICAgdHJhbnNmb3Jt
LT50cmFuc2xhdGUoZGlmZi53aWR0aCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50LngoKSwg
ZGlmZi5oZWlnaHQoKSAqIHBlcmNlbnRhZ2UgKyBtX2Zyb21Qb2ludC55KCkpOwogfQogICAgIApA
QCAtMjY1LDEzICsyNjUsMTMgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YXBwbHlS
ZXN1bAogCiBmbG9hdCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlzdGFuY2Uo
Y29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQogewotICAg
IEZsb2F0UG9pbnQgZnJvbTsKLSAgICBGbG9hdFBvaW50IHRvOworICAgIEdyYXBoaWNzUG9pbnQg
ZnJvbTsKKyAgICBHcmFwaGljc1BvaW50IHRvOwogICAgIGlmICghcGFyc2VQb2ludChmcm9tU3Ry
aW5nLCBmcm9tKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghcGFyc2VQb2ludCh0b1N0
cmluZywgdG8pKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgRmxvYXRTaXplIGRpZmYgPSB0byAt
IGZyb207CisgICAgR3JhcGhpY3NTaXplIGRpZmYgPSB0byAtIGZyb207CiAgICAgcmV0dXJuIHNx
cnRmKGRpZmYud2lkdGgoKSAqIGRpZmYud2lkdGgoKSArIGRpZmYuaGVpZ2h0KCkgKiBkaWZmLmhl
aWdodCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxMyBAQCBw
cml2YXRlOgogICAgIH07CiAgICAgUm90YXRlTW9kZSByb3RhdGVNb2RlKCkgY29uc3Q7CiAKLSAg
ICBGbG9hdFNpemUgbV9hbmltYXRlZFRyYW5zbGF0aW9uOworICAgIEdyYXBoaWNzU2l6ZSBtX2Fu
aW1hdGVkVHJhbnNsYXRpb247CiAgICAgZmxvYXQgbV9hbmltYXRlZEFuZ2xlOwogCiAgICAgLy8g
Tm90ZTogd2UgZG8gbm90IHN1cHBvcnQgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIHRvL2Zyb20gY29v
cmRzIGFzIHRoZSBzcGVjIGltcGxpZXMgd2Ugc2hvdWxkIChvcGVyYSBkb2Vzbid0IGVpdGhlcikK
LSAgICBGbG9hdFBvaW50IG1fZnJvbVBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9mcm9tUG9p
bnQ7CiAgICAgZmxvYXQgbV9mcm9tQW5nbGU7Ci0gICAgRmxvYXRQb2ludCBtX3RvUG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBtX3RvUG9pbnQ7CiAgICAgZmxvYXQgbV90b0FuZ2xlOwogCiAgICAg
dW5zaWduZWQgbV9iYXNlSW5kZXhJblRyYW5zZm9ybUxpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDEzICsyNTEsMTMgQEAgZmxvYXQgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OmNhbGN1bAogICAgIGlmICghdG8uaXNWYWxpZCgpIHx8IGZyb20udHlw
ZSgpICE9IHRvLnR5cGUoKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICh0by50eXBlKCkg
PT0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURSkgewotICAgICAgICBGbG9h
dFNpemUgZGlmZiA9IHRvLnRyYW5zbGF0ZSgpIC0gZnJvbS50cmFuc2xhdGUoKTsKKyAgICAgICAg
R3JhcGhpY3NTaXplIGRpZmYgPSB0by50cmFuc2xhdGUoKSAtIGZyb20udHJhbnNsYXRlKCk7CiAg
ICAgICAgIHJldHVybiBzcXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZmLndpZHRoKCkgKyBkaWZmLmhl
aWdodCgpICogZGlmZi5oZWlnaHQoKSk7CiAgICAgfQogICAgIGlmICh0by50eXBlKCkgPT0gU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURSkKICAgICAgICAgcmV0dXJuIGZhYnNmKHRv
LmFuZ2xlKCkgLSBmcm9tLmFuZ2xlKCkpOwogICAgIGlmICh0by50eXBlKCkgPT0gU1ZHVHJhbnNm
b3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBkaWZmID0gdG8u
c2NhbGUoKSAtIGZyb20uc2NhbGUoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGRpZmYgPSB0by5z
Y2FsZSgpIC0gZnJvbS5zY2FsZSgpOwogICAgICAgICByZXR1cm4gc3FydGYoZGlmZi53aWR0aCgp
ICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwogICAgIH0K
ICAgICByZXR1cm4gLTE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQb2lu
dExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBv
aW50TGlzdC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkUG9pbnRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lk
IFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OmNhbGN1CiAgICAgaWYgKCFpdGVtQ291bnQg
fHwgaXRlbUNvdW50ICE9IHRvUG9pbnRMaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBpdGVtQ291bnQ7ICsrbikgewotICAgICAgICBGbG9h
dFBvaW50JiB0byA9IHRvUG9pbnRMaXN0LmF0KG4pOworICAgICAgICBHcmFwaGljc1BvaW50JiB0
byA9IHRvUG9pbnRMaXN0LmF0KG4pOwogICAgICAgICB0byArPSBmcm9tUG9pbnRMaXN0LmF0KG4p
OwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIFNWR0FuaW1hdGVkUmVjdEFuaW1hdG9y
OjpTVkdBbmltYXRlZFJlY3QKIAogUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1h
dGVkUmVjdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogewotICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+IGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1h
dGVkVHlwZTo6Y3JlYXRlUmVjdChuZXcgRmxvYXRSZWN0KTsKKyAgICBPd25QdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QobmV3IEdy
YXBoaWNzUmVjdCk7CiAgICAgcGFyc2VSZWN0KHN0cmluZywgYW5pbWF0ZWRUeXBlLT5yZWN0KCkp
OwogICAgIHJldHVybiBhbmltYXRlZFR5cGUucmVsZWFzZSgpOwogfQpAQCAtNjQsMTcgKzY0LDE3
IEBAIHZvaWQgU1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OmNhbGN1bGF0ZUEKICAgICBTVkdBbmlt
YXRlRWxlbWVudCogYW5pbWF0aW9uRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FuaW1hdGVFbGVt
ZW50Kj4obV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBbmltYXRpb25Nb2RlIGFuaW1hdGlvbk1v
ZGUgPSBhbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCk7CiAgICAgLy8gVG8gYW5pbWF0
aW9uIHVzZXMgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBsb3dlciBwcmlvcml0eSBhbmltYXRpb25z
IGFzIHRoZSBiYXNlIHZhbHVlLgotICAgIEZsb2F0UmVjdCYgYW5pbWF0ZWRSZWN0ID0gYW5pbWF0
ZWQtPnJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QmIGFuaW1hdGVkUmVjdCA9IGFuaW1hdGVkLT5y
ZWN0KCk7CiAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pCiAgICAgICAgIGZy
b20tPnJlY3QoKSA9IGFuaW1hdGVkUmVjdDsKICAgICAKLSAgICBjb25zdCBGbG9hdFJlY3QmIGZy
b21SZWN0ID0gZnJvbS0+cmVjdCgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgdG9SZWN0ID0gdG8t
PnJlY3QoKTsKLSAgICBGbG9hdFJlY3QgbmV3UmVjdDsgICAgCisgICAgY29uc3QgR3JhcGhpY3NS
ZWN0JiBmcm9tUmVjdCA9IGZyb20tPnJlY3QoKTsKKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIHRv
UmVjdCA9IHRvLT5yZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IG5ld1JlY3Q7ICAgIAogICAgIGlm
IChhbmltYXRpb25FbGVtZW50LT5jYWxjTW9kZSgpID09IENhbGNNb2RlRGlzY3JldGUpCiAgICAg
ICAgIG5ld1JlY3QgPSBwZXJjZW50YWdlIDwgMC41ID8gZnJvbVJlY3QgOiB0b1JlY3Q7CiAgICAg
ZWxzZQotICAgICAgICBuZXdSZWN0ID0gRmxvYXRSZWN0KCh0b1JlY3QueCgpIC0gZnJvbVJlY3Qu
eCgpKSAqIHBlcmNlbnRhZ2UgKyBmcm9tUmVjdC54KCksCisgICAgICAgIG5ld1JlY3QgPSBHcmFw
aGljc1JlY3QoKHRvUmVjdC54KCkgLSBmcm9tUmVjdC54KCkpICogcGVyY2VudGFnZSArIGZyb21S
ZWN0LngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9SZWN0LnkoKSAtIGZyb21S
ZWN0LnkoKSkgKiBwZXJjZW50YWdlICsgZnJvbVJlY3QueSgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh0b1JlY3Qud2lkdGgoKSAtIGZyb21SZWN0LndpZHRoKCkpICogcGVyY2VudGFn
ZSArIGZyb21SZWN0LndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvUmVj
dC5oZWlnaHQoKSAtIGZyb21SZWN0LmhlaWdodCgpKSAqIHBlcmNlbnRhZ2UgKyBmcm9tUmVjdC5o
ZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlw
ZWRlZiBTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+IFNWR0FuaW1hdGVkUmVj
dDsKK3R5cGVkZWYgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8R3JhcGhpY3NSZWN0PiBTVkdB
bmltYXRlZFJlY3Q7CiAKIC8vIEhlbHBlciBtYWNyb3MgdG8gZGVjbGFyZS9kZWZpbmUgYSBTVkdB
bmltYXRlZFJlY3Qgb2JqZWN0CiAjZGVmaW5lIERFQ0xBUkVfQU5JTUFURURfUkVDVChVcHBlclBy
b3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCi1ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZKFNWR0Fu
aW1hdGVkUmVjdCwgRmxvYXRSZWN0LCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KQorREVD
TEFSRV9BTklNQVRFRF9QUk9QRVJUWShTVkdBbmltYXRlZFJlY3QsIEdyYXBoaWNzUmVjdCwgVXBw
ZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkKIAogI2RlZmluZSBERUZJTkVfQU5JTUFURURfUkVD
VChPd25lclR5cGUsIERPTUF0dHJpYnV0ZSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkg
XAogREVGSU5FX0FOSU1BVEVEX1BST1BFUlRZKEFuaW1hdGVkUmVjdCwgT3duZXJUeXBlLCBET01B
dHRyaWJ1dGUsIERPTUF0dHJpYnV0ZS5sb2NhbE5hbWUoKSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQ
cm9wZXJ0eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiBmcm9tVmFsdWUsIE93
blB0cjxTVkdBbmltYXRlZFR5cGU+JiB0b1ZhbHVlLCBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiYg
YW5pbWF0ZWRWYWx1ZSk7CiAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5jZShjb25z
dCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwogCi0gICAgc3Rh
dGljIGJvb2wgcGFyc2VTVkdSZWN0KGNvbnN0IFN0cmluZyYsIEZsb2F0UmVjdCYpOworICAgIHN0
YXRpYyBib29sIHBhcnNlU1ZHUmVjdChjb25zdCBTdHJpbmcmLCBHcmFwaGljc1JlY3QmKTsKIH07
CiAjZW5kaWYgLy8gRU5BQkxFKFNWR19BTklNQVRJT04pCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZFR5cGUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBA
CiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKFNWR19BTklNQVRJT04pCiAjaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRUeXBlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR0NvbG9yLmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0xODksNyArMTg5LDcgQEAgUGFzc093blB0cjxT
VkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVAogICAgIHJldHVybiBhbmltYXRlZFR5cGUucmVs
ZWFzZSgpOwogfQogCi1QYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVSZWN0KEZsb2F0UmVjdCogcmVjdCkKK1Bhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBl
PiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QoR3JhcGhpY3NSZWN0KiByZWN0KQogewogICAg
IEFTU0VSVChyZWN0KTsKICAgICBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBhbmltYXRlZFR5cGUg
PSBhZG9wdFB0cihuZXcgU1ZHQW5pbWF0ZWRUeXBlKEFuaW1hdGVkUmVjdCkpOwpAQCAtMjc3LDcg
KzI3Nyw3IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIFNWR0FuaW1hdGVkVHlwZToKICAgICBy
ZXR1cm4gKm1fZGF0YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogfQogCi1GbG9hdFJlY3QmIFNWR0Fu
aW1hdGVkVHlwZTo6cmVjdCgpCitHcmFwaGljc1JlY3QmIFNWR0FuaW1hdGVkVHlwZTo6cmVjdCgp
CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFJlY3QpOwogICAgIHJldHVybiAqbV9k
YXRhLnJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
b2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIFNWR0Fu
Z2xlOwogY2xhc3MgU1ZHTGVuZ3RoOwogY2xhc3MgU1ZHTGVuZ3RoTGlzdDsKQEAgLTUyLDcgKzUy
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3Jl
YXRlUGF0aChQYXNzT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtPik7CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQb2ludExpc3QoU1ZHUG9pbnRMaXN0Kik7CiAg
ICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQcmVzZXJ2ZUFzcGVj
dFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qKTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxT
VkdBbmltYXRlZFR5cGU+IGNyZWF0ZVJlY3QoRmxvYXRSZWN0Kik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVSZWN0KEdyYXBoaWNzUmVjdCopOwogICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlU3RyaW5nKFN0cmluZyopOwog
CiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGgo
KTsKICAgICBTVkdQb2ludExpc3QmIHBvaW50TGlzdCgpOwogICAgIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8oKTsKLSAgICBGbG9hdFJlY3QmIHJlY3QoKTsKKyAg
ICBHcmFwaGljc1JlY3QmIHJlY3QoKTsKICAgICBTdHJpbmcmIHN0cmluZygpOwogCiAgICAgU3Ry
aW5nIHZhbHVlQXNTdHJpbmcoKTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgICAg
ICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aDsKICAgICAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
byogcHJlc2VydmVBc3BlY3RSYXRpbzsKICAgICAgICAgU1ZHUG9pbnRMaXN0KiBwb2ludExpc3Q7
Ci0gICAgICAgIEZsb2F0UmVjdCogcmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0KiByZWN0Owog
ICAgICAgICBTdHJpbmcqIHN0cmluZzsKICAgICB9IG1fZGF0YTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NyArMjQsNyBAQAogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNTcsNyArMTU3
LDcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIAogICAgIGlmIChy
YWRpdXMgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0
UmVjdChjeCgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzLCBjeSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVz
LCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKSk7CisgICAgcGF0aC5hZGRFbGxpcHNlKEdyYXBoaWNz
UmVjdChjeCgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzLCBjeSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVz
LCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKSk7CiB9CiAKIGJvb2wgU1ZHQ2lyY2xlRWxlbWVudDo6
c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1
bWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTYgKzgwLDE2IEBAIGJvb2wgU1ZHRG9jdW1l
bnQ6Onpvb21BbmRQYW5FbmFibGVkKCkgY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
U1ZHRG9jdW1lbnQ6OnN0YXJ0UGFuKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0KQordm9pZCBTVkdE
b2N1bWVudDo6c3RhcnRQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgc3RhcnQpCiB7CiAgICAgaWYg
KHJvb3RFbGVtZW50KCkpCi0gICAgICAgIG1fdHJhbnNsYXRlID0gRmxvYXRQb2ludChzdGFydC54
KCkgLSByb290RWxlbWVudCgpLT5jdXJyZW50VHJhbnNsYXRlKCkueCgpLCByb290RWxlbWVudCgp
LT5jdXJyZW50VHJhbnNsYXRlKCkueSgpICsgc3RhcnQueSgpKTsKKyAgICAgICAgbV90cmFuc2xh
dGUgPSBHcmFwaGljc1BvaW50KHN0YXJ0LngoKSAtIHJvb3RFbGVtZW50KCktPmN1cnJlbnRUcmFu
c2xhdGUoKS54KCksIHJvb3RFbGVtZW50KCktPmN1cnJlbnRUcmFuc2xhdGUoKS55KCkgKyBzdGFy
dC55KCkpOwogfQogCi12b2lkIFNWR0RvY3VtZW50Ojp1cGRhdGVQYW4oY29uc3QgRmxvYXRQb2lu
dCYgcG9zKSBjb25zdAordm9pZCBTVkdEb2N1bWVudDo6dXBkYXRlUGFuKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvcykgY29uc3QKIHsKICAgICBpZiAocm9vdEVsZW1lbnQoKSkgewotICAgICAgICBy
b290RWxlbWVudCgpLT5zZXRDdXJyZW50VHJhbnNsYXRlKEZsb2F0UG9pbnQocG9zLngoKSAtIG1f
dHJhbnNsYXRlLngoKSwgbV90cmFuc2xhdGUueSgpIC0gcG9zLnkoKSkpOworICAgICAgICByb290
RWxlbWVudCgpLT5zZXRDdXJyZW50VHJhbnNsYXRlKEdyYXBoaWNzUG9pbnQocG9zLngoKSAtIG1f
dHJhbnNsYXRlLngoKSwgbV90cmFuc2xhdGUueSgpIC0gcG9zLnkoKSkpOwogICAgICAgICBpZiAo
cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBA
QAogI2lmIEVOQUJMRShTVkcpCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHpvb21BbmRQYW5F
bmFibGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHN0YXJ0UGFuKGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0KTsKLSAgICB2b2lkIHVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNvbnN0Owor
ICAgIHZvaWQgc3RhcnRQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgc3RhcnQpOworICAgIHZvaWQg
dXBkYXRlUGFuKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvcykgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgU1ZHRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBLVVJMJik7CkBAIC01NSw3ICs1NSw3IEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2Rl
KikgY29uc3Q7CiAKLSAgICBGbG9hdFBvaW50IG1fdHJhbnNsYXRlOworICAgIEdyYXBoaWNzUG9p
bnQgbV90cmFuc2xhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIGNv
bnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIFNWR0UKICAgICByZXR1cm4gcmFyZVNW
R0RhdGEoKS0+ZWxlbWVudEluc3RhbmNlcygpOwogfQogCi1ib29sIFNWR0VsZW1lbnQ6OmJvdW5k
aW5nQm94KEZsb2F0UmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5
IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0Citib29sIFNWR0VsZW1lbnQ6OmJvdW5kaW5nQm94
KEdyYXBoaWNzUmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0
eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAgaWYgKGlzU3R5bGVkTG9jYXRhYmxlKCkp
IHsKICAgICAgICAgcmVjdCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAog
ICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlc0ZvckVsZW1l
bnQoKSBjb25zdDsKIAotICAgIGJvb2wgYm91bmRpbmdCb3goRmxvYXRSZWN0JiwgU1ZHTG9jYXRh
YmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gU1ZHTG9jYXRhYmxlOjpBbGxvd1N0eWxlVXBkYXRl
KSBjb25zdDsKKyAgICBib29sIGJvdW5kaW5nQm94KEdyYXBoaWNzUmVjdCYsIFNWR0xvY2F0YWJs
ZTo6U3R5bGVVcGRhdGVTdHJhdGVneSA9IFNWR0xvY2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0ZSkg
Y29uc3Q7CiAKICAgICB2b2lkIHNldEN1cnNvckVsZW1lbnQoU1ZHQ3Vyc29yRWxlbWVudCopOwog
ICAgIHZvaWQgY3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3
IEBACiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0
ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNzIsNyArMTcyLDcgQEAg
dm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJgogICAgIGlmIChyYWRpdXNZ
IDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3Qo
Y3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1gsIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXNZLCBy
YWRpdXNYICogMiwgcmFkaXVzWSAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoR3JhcGhpY3NS
ZWN0KGN4KCkudmFsdWUodGhpcykgLSByYWRpdXNYLCBjeSgpLnZhbHVlKHRoaXMpIC0gcmFkaXVz
WSwgcmFkaXVzWCAqIDIsIHJhZGl1c1kgKiAyKSk7CiB9CiAgCiBib29sIFNWR0VsbGlwc2VFbGVt
ZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTIxMCw3ICsyMTAs
NyBAQCBib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzZXRGaWx0CiAgICAgaWYgKGF0
dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cikKICAgICAgICByZXR1cm4gY29udm9sdmVN
YXRyaXgtPnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFkoKSkpOwog
ICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpCi0gICAg
ICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0UG9pbnQo
a2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSkpOworICAgICAgIHJldHVy
biBjb252b2x2ZU1hdHJpeC0+c2V0S2VybmVsVW5pdExlbmd0aChHcmFwaGljc1BvaW50KGtlcm5l
bFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCkpKTsKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKQogICAgICAgICByZXR1cm4gY29udm9sdmVN
YXRyaXgtPnNldFByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSgpKTsKIApAQCAtMzA3LDcgKzMw
Nyw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWEKICAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVy
LAogICAgICAgICAgICAgICAgICAgICBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSks
IGRpdmlzb3JWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgYmlhcygpLCBJbnRQb2ludCh0YXJn
ZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksCi0gICAgICAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFgoKSksIHBy
ZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhp
Y3NQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpKSwgcHJlc2Vy
dmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBw
ZW5kKGlucHV0MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQYXNzUmVmUHRyPFNWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQ+IFNWR0ZFCiAKIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUG9pbnRMaWdodFNv
dXJjZTo6Y3JlYXRlKEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKSk7CisgICAgcmV0dXJuIFBv
aW50TGlnaHRTb3VyY2U6OmNyZWF0ZShHcmFwaGljc1BvaW50M0QoeCgpLCB5KCksIHooKSkpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50
LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGln
aHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCBQYXNzUmVmUHRy
PFNWR0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVTCiAKIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+
IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIEZsb2F0
UG9pbnQzRCBwb3MoeCgpLCB5KCksIHooKSk7Ci0gICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvbihw
b2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKyAgICBHcmFwaGljc1BvaW50
M0QgcG9zKHgoKSwgeSgpLCB6KCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBkaXJlY3Rpb24ocG9p
bnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7CiAKICAgICByZXR1cm4gU3BvdExp
Z2h0U291cmNlOjpjcmVhdGUocG9zLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQoKSwgbGlt
aXRpbmdDb25lQW5nbGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVy
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDE2ICsyMTEsMTYgQEAgdm9pZCBT
VkdGaWx0ZXJFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYgogICAgICAgICBvYmplY3QtPnNldE5l
ZWRzTGF5b3V0KHRydWUpOwogfQogCi1GbG9hdFJlY3QgU1ZHRmlsdGVyRWxlbWVudDo6ZmlsdGVy
Qm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkgY29uc3QKK0dy
YXBoaWNzUmVjdCBTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGluZ0JveChjb25zdCBHcmFw
aGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBmaWx0
ZXJCQm94OworICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJCQm94OwogICAgIGlmIChmaWx0ZXJVbml0
cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKLSAg
ICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9i
amVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAgICAg
IGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmpl
Y3RCb3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91
bmRpbmdCb3guaGVpZ2h0KCkgKyBvYmplY3RCb3VuZGluZ0JveC55KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQo
KS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAg
IGVsc2UKLSAgICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWUodGhpcyksCisg
ICAgICAgIGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlckVsZW1lbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRmlsdGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJFbGVtZW50PiBjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2b2lkIHNldEZpbHRlclJlcyh1
bnNpZ25lZCBsb25nIGZpbHRlclJlc1gsIHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWSk7Ci0gICAg
RmxvYXRSZWN0IGZpbHRlckJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAg
IEdyYXBoaWNzUmVjdCBmaWx0ZXJCb3VuZGluZ0JveChjb25zdCBHcmFwaGljc1JlY3QmKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBTVkdGaWx0ZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxNCArMTU0LDE0IEBAIHZvaWQgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUKICAgICBpZiAodGhpcy0+aGFzQXR0cmlidXRl
KFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKICAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWln
aHQodHJ1ZSk7CiAKLSAgICBGbG9hdFJlY3QgZWZmZWN0QkJveDsKKyAgICBHcmFwaGljc1JlY3Qg
ZWZmZWN0QkJveDsKICAgICBpZiAocHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKQotICAgICAgICBl
ZmZlY3RCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAorICAgICAgICBl
ZmZlY3RCQm94ID0gR3JhcGhpY3NSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgp
KTsKICAgICBlbHNlCi0gICAgICAgIGVmZmVjdEJCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVlKHRo
aXMpLAorICAgICAgICBlZmZlY3RCQm94ID0gR3JhcGhpY3NSZWN0KHgoKS52YWx1ZSh0aGlzKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KCkudmFsdWUodGhpcyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkF0dHIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCkBAIC0z
NSwxNCArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VWaWV3Qm94KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgcywgRmxvYXRS
ZWN0JiB2aWV3Qm94KQorYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1bWVu
dCogZG9jLCBjb25zdCBTdHJpbmcmIHMsIEdyYXBoaWNzUmVjdCYgdmlld0JveCkKIHsKICAgICBj
b25zdCBVQ2hhciogYyA9IHMuY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBj
ICsgcy5sZW5ndGgoKTsKICAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGRvYywgYywgZW5kLCB2aWV3
Qm94LCB0cnVlKTsKIH0KIAotYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1
bWVudCogZG9jLCBjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0UmVjdCYg
dmlld0JveCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3goRG9jdW1lbnQqIGRvYywgY29uc3QgVUNoYXIqJiBjLCBjb25zdCBVQ2hhciogZW5kLCBHcmFw
aGljc1JlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUpCiB7CiAgICAgU3RyaW5nIHN0cihjLCBl
bmQgLSBjKTsKIApAQCAtNTQsNyArNTQsNyBAQCBib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VW
aWV3Qm94KERvY3VtCiAgICAgZmxvYXQgaGVpZ2h0ID0gMC4wZjsKICAgICBib29sIHZhbGlkID0g
cGFyc2VOdW1iZXIoYywgZW5kLCB4KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHkpICYmIHBhcnNl
TnVtYmVyKGMsIGVuZCwgd2lkdGgpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgaGVpZ2h0LCBmYWxz
ZSk7CiAgICAgaWYgKCF2YWxpZGF0ZSkgewotICAgICAgICB2aWV3Qm94ID0gRmxvYXRSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB2aWV3Qm94ID0gR3JhcGhpY3NSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKCF2
YWxpZCkgewpAQCAtNzYsMTEgKzc2LDExIEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZp
ZXdCb3goRG9jdW0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZpZXdCb3gg
PSBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgdmlld0JveCA9IEdyYXBoaWNz
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5l
VHJhbnNmb3JtIFNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShjb25zdCBG
bG9hdFJlY3QmIHZpZXdCb3hSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpCitBZmZp
bmVUcmFuc2Zvcm0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0
IEdyYXBoaWNzUmVjdCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8m
IHByZXNlcnZlQXNwZWN0UmF0aW8sIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkK
IHsKICAgICBpZiAoIXZpZXdCb3hSZWN0LndpZHRoKCkgfHwgIXZpZXdCb3hSZWN0LmhlaWdodCgp
KQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC05MSw3ICs5MSw3IEBAIEFm
ZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3gKIGJvb2wgU1ZHRml0VG9WaWV3
Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShEb2N1bWVudCogZG9jdW1lbnQsIEF0dHJpYnV0ZSog
YXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikg
ewotICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHZpZXdC
b3g7CiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIHBh
cnNlVmlld0JveChkb2N1bWVudCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCk7CiAgICAgICAgIHNl
dFZpZXdCb3hCYXNlVmFsdWUodmlld0JveCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRv
Vmlld0JveC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRU
b1ZpZXdCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjUgKzMwLDI1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEF0dHJpYnV0ZTsKIGNsYXNz
IERvY3VtZW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3Mg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKIAogY2xhc3MgU1ZHRml0VG9WaWV3Qm94IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5TVkdGaXRUb1ZpZXdCb3goKSB7IH0KIAotICAgIGJvb2wgcGFyc2VW
aWV3Qm94KERvY3VtZW50KiwgY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwg
RmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7Ci0gICAgc3RhdGljIEFm
ZmluZVRyYW5zZm9ybSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEZsb2F0UmVjdCYgdmll
d0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mLCBmbG9hdCB2aWV3V2lkdGgs
IGZsb2F0IHZpZXdIZWlnaHQpOworICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29u
c3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgR3JhcGhpY3NSZWN0JiB2aWV3Qm94
LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSB2aWV3
Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEdyYXBoaWNzUmVjdCYgdmlld0JveFJlY3QsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWln
aHQpOwogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShEb2N1bWVudCosIEF0dHJpYnV0
ZSopOwogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAg
ICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3Qm94QmFzZVZhbHVlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld0JveEJhc2VWYWx1ZShjb25zdCBHcmFwaGlj
c1JlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlQXNwZWN0UmF0aW9CYXNl
VmFsdWUoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpID0gMDsKIAogcHJpdmF0ZToKLSAg
ICBib29sIHBhcnNlVmlld0JveChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIEZsb2F0UmVjdCYp
OworICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgR3JhcGhp
Y3NSZWN0Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgpAQCAtMTYwLDggKzE2MCw4IEBAIHZvaWQg
U1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGEKIHsKICAgICBBU1NFUlQocGF0aC5p
c0VtcHR5KCkpOwogCi0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4MSgpLnZhbHVlKHRoaXMp
LCB5MSgpLnZhbHVlKHRoaXMpKSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4Migp
LnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5tb3ZlVG8oR3JhcGhp
Y3NQb2ludCh4MSgpLnZhbHVlKHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5h
ZGRMaW5lVG8oR3JhcGhpY3NQb2ludCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMp
KSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxl
bWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJMaW5l
YXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xOTksMTUg
KzE5OSwxNSBAQCBib29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y29sbGVjdEdyCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpjYWxjdWxh
dGVTdGFydEVuZFBvaW50cyhjb25zdCBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmIGF0dHJpYnV0
ZXMsIEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZsb2F0UG9pbnQmIGVuZFBvaW50KQordm9pZCBT
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKGNvbnN0IExp
bmVhckdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywgR3JhcGhpY3NQb2ludCYgc3RhcnRQ
b2ludCwgR3JhcGhpY3NQb2ludCYgZW5kUG9pbnQpCiB7CiAgICAgLy8gRGV0ZXJtaW5lIGdyYWRp
ZW50IHN0YXJ0L2VuZCBwb2ludHMKICAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUo
KSkgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngxKCkudmFs
dWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwot
ICAgICAgICBlbmRQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVlQXNQZXJj
ZW50YWdlKCksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAgICAg
c3RhcnRQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy54MSgpLnZhbHVlQXNQZXJjZW50
YWdlKCksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAgICAgZW5k
UG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDIoKS52YWx1ZUFzUGVyY2VudGFnZSgp
LCBhdHRyaWJ1dGVzLnkyKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgc3RhcnRQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy54MSgpLnZhbHVlKHRoaXMp
LCBhdHRyaWJ1dGVzLnkxKCkudmFsdWUodGhpcykpOwotICAgICAgICBlbmRQb2ludCA9IEZsb2F0
UG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLnkyKCkudmFsdWUo
dGhpcykpOworICAgICAgICBzdGFydFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLngx
KCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZSh0aGlzKSk7CisgICAgICAgIGVu
ZFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWUodGhpcyksIGF0dHJp
YnV0ZXMueTIoKS52YWx1ZSh0aGlzKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CiAKICAgICBib29sIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoTGluZWFyR3JhZGll
bnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBvaW50cyhjb25zdCBM
aW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmLCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGbG9hdFBv
aW50JiBlbmRQb2ludCk7CisgICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBvaW50cyhjb25zdCBM
aW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmLCBHcmFwaGljc1BvaW50JiBzdGFydFBvaW50LCBHcmFw
aGljc1BvaW50JiBlbmRQb2ludCk7CiAKIHByaXZhdGU6CiAgICAgU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgU1ZH
RWxlbWVudCogU1ZHTG9jYXRhYmxlOjpmYXJ0aGVzdFZpZXdwbwogICAgIHJldHVybiBmYXJ0aGVz
dDsKIH0KIAotRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25zdCBTVkdFbGVtZW50
KiBlbGVtZW50LCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCitHcmFw
aGljc1JlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQs
IFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICBBU1NFUlQo
ZWxlbWVudCk7CiAgICAgaWYgKHN0eWxlVXBkYXRlU3RyYXRlZ3kgPT0gQWxsb3dTdHlsZVVwZGF0
ZSkKQEAgLTcyLDcgKzcyLDcgQEAgRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25z
dCBTVgogCiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQgZ2V0QkJv
eCBmb3IgZGV0YWNoZWQgZWxlbWVudHMuCiAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
KTsKIAogICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpLT5vYmplY3RCb3VuZGluZ0JveCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Citj
bGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogCiBjbGFzcyBTVkdMb2NhdGFi
bGUgewpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFN0eWxlVXBkYXRlU3Ry
YXRlZ3kgeyBBbGxvd1N0eWxlVXBkYXRlLCBEaXNhbGxvd1N0eWxlVXBkYXRlIH07CiAgICAgCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBk
YXRlU3RyYXRlZ3kpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRT
Y3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QgPSAwOwogICAgIEFmZmluZVRyYW5z
Zm9ybSBnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmLCBT
dHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CkBAIC01Nyw3ICs1
Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBs
b2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3BlKSBjb25z
dCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogCi0gICAgc3RhdGljIEZsb2F0UmVjdCBn
ZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKKyAgICBzdGF0
aWMgR3JhcGhpY3NSZWN0IGdldEJCb3goY29uc3QgU1ZHRWxlbWVudCosIFN0eWxlVXBkYXRlU3Ry
YXRlZ3kpOwogICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0ZUNUTShjb25zdCBTVkdF
bGVtZW50KiwgQ1RNU2NvcGUsIFN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwx
NiArMTc1LDE2IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib28KICAg
ICAgICAgb2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAotRmxvYXRSZWN0IFNWR01h
c2tFbGVtZW50OjptYXNrQm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGlu
Z0JveCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdNYXNrRWxlbWVudDo6bWFza0JvdW5kaW5nQm94
KGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgRmxv
YXRSZWN0IG1hc2tCQm94OworICAgIEdyYXBoaWNzUmVjdCBtYXNrQkJveDsKICAgICBpZiAobWFz
a1VuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
KQotICAgICAgICBtYXNrQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAq
IG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAg
ICAgIG1hc2tCQm94ID0gR3JhcGhpY3NSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3Vu
ZGluZ0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRp
bmdCb3gud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkudmFs
dWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAgICBlbHNl
Ci0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZSh0aGlzKSwKKyAgICAgICAg
bWFza0JCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB5KCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoKCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFNWR01hc2tFbGVtZW50IDog
cHVibGljIFNWR1N0eWxlZEwKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdNYXNr
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCi0gICAg
RmxvYXRSZWN0IG1hc2tCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBH
cmFwaGljc1JlY3QgbWFza0JvdW5kaW5nQm94KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIFNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJTVkdQYXJz
ZXJVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0
LmgiCiAKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBwYXJzZU51
bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cgogICAgIHJldHVybiBjdXIgPT0gZW5kOwogfQog
Ci1ib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZywgRmxvYXRSZWN0JiByZWN0KQor
Ym9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEdyYXBoaWNzUmVjdCYgcmVjdCkK
IHsKICAgICBjb25zdCBVQ2hhciogcHRyID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICBjb25z
dCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwpAQCAtMjAwLDcgKzIwMCw3IEBA
IGJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG8KICAgICBmbG9hdCB3aWR0
aCA9IDA7CiAgICAgZmxvYXQgaGVpZ2h0ID0gMDsKICAgICBib29sIHZhbGlkID0gcGFyc2VOdW1i
ZXIocHRyLCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAmJiBwYXJzZU51bWJl
cihwdHIsIGVuZCwgd2lkdGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBoZWlnaHQsIGZhbHNl
KTsKLSAgICByZWN0ID0gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIHJlY3Qg
PSBHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgcmV0dXJuIHZhbGlkOwog
fQogCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBwb2ludHNMaXN0RnJvbVNWR0RhdGEoU1ZHUG9p
bnRMaXN0JgogICAgICAgICB9CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhjdXIsIGVuZCk7
CiAKLSAgICAgICAgcG9pbnRzTGlzdC5hcHBlbmQoRmxvYXRQb2ludCh4UG9zLCB5UG9zKSk7Cisg
ICAgICAgIHBvaW50c0xpc3QuYXBwZW5kKEdyYXBoaWNzUG9pbnQoeFBvcywgeVBvcykpOwogICAg
IH0KICAgICByZXR1cm4gY3VyID09IGVuZCAmJiAhZGVsaW1QYXJzZWQ7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTQgKzMwLDE0IEBAIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29kZVJhbmcK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CiBjbGFzcyBTVkdQb2ludExpc3Q7CiAKIGJvb2wgcGFyc2VOdW1iZXIoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tpcCA9IHRy
dWUpOwogYm9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiwgZmxvYXQmIG51
bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7CiBib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxOdW1iZXIo
Y29uc3QgU3RyaW5nJiBzLCBmbG9hdCYgaCwgZmxvYXQmIHYpOwogYm9vbCBwYXJzZUFyY0ZsYWco
Y29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wmIGZsYWcpOwotYm9vbCBw
YXJzZVJlY3QoY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7Citib29sIHBhcnNlUmVjdChjb25z
dCBTdHJpbmcmLCBHcmFwaGljc1JlY3QmKTsKIAogLy8gU1ZHIGFsbG93cyBzZXZlcmFsIGRpZmZl
cmVudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnM6CiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcv
cGF0aHMuaHRtbCNQYXRoRGF0YUJORgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5k
ZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxl
bmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAgU1ZHUGF0aEJsZW5kZXI6
OlNWR1BhdGhCbGVuZGVyKCkKIH0KIAogLy8gSGVscGVyIGZ1bmN0aW9ucwotc3RhdGljIGlubGlu
ZSBGbG9hdFBvaW50IGJsZW5kRmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBG
bG9hdFBvaW50JiBiLCBmbG9hdCBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NQb2lu
dCBibGVuZEdyYXBoaWNzUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgYiwgZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoKGIu
eCgpIC0gYS54KCkpICogcHJvZ3Jlc3MgKyBhLngoKSwgKGIueSgpIC0gYS55KCkpICogcHJvZ3Jl
c3MgKyBhLnkoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKGIueCgpIC0gYS54KCkpICog
cHJvZ3Jlc3MgKyBhLngoKSwgKGIueSgpIC0gYS55KCkpICogcHJvZ3Jlc3MgKyBhLnkoKSk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRBbmltYXRlZEZsb2F0KGZsb2F0IGZyb20sIGZs
b2F0IHRvLCBmbG9hdCBwcm9ncmVzcykKQEAgLTY0LDI1ICs2NCwyNSBAQCBmbG9hdCBTVkdQYXRo
QmxlbmRlcjo6YmxlbmRBbmltYXRlZERpbWVuCiAgICAgcmV0dXJuIG1fdG9Nb2RlID09IEFic29s
dXRlQ29vcmRpbmF0ZXMgPyBhbmltVmFsdWUgKyBjdXJyZW50VmFsdWUgOiBhbmltVmFsdWUgLSBj
dXJyZW50VmFsdWU7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0
ZWRGbG9hdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGZyb21Qb2ludCwgY29uc3QgRmxvYXRQb2lu
dCYgdG9Qb2ludCkKK0dyYXBoaWNzUG9pbnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRH
cmFwaGljc1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZyb21Qb2ludCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgdG9Qb2ludCkKIHsKICAgICBpZiAobV9mcm9tTW9kZSA9PSBtX3RvTW9kZSkKLSAg
ICAgICAgcmV0dXJuIGJsZW5kRmxvYXRQb2ludChmcm9tUG9pbnQsIHRvUG9pbnQsIG1fcHJvZ3Jl
c3MpOworICAgICAgICByZXR1cm4gYmxlbmRHcmFwaGljc1BvaW50KGZyb21Qb2ludCwgdG9Qb2lu
dCwgbV9wcm9ncmVzcyk7CiAKICAgICAvLyBUcmFuc2Zvcm0gdG9Qb2ludCB0byB0aGUgY29vcmRp
bmF0ZSBtb2RlIG9mIGZyb21Qb2ludAotICAgIEZsb2F0UG9pbnQgYW5pbWF0ZWRQb2ludCA9IHRv
UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBhbmltYXRlZFBvaW50ID0gdG9Qb2ludDsKICAgICBp
ZiAobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBhbmltYXRlZFBv
aW50ICs9IG1fdG9DdXJyZW50UG9pbnQ7CiAgICAgZWxzZQogICAgICAgICBhbmltYXRlZFBvaW50
Lm1vdmUoLW1fdG9DdXJyZW50UG9pbnQueCgpLCAtbV90b0N1cnJlbnRQb2ludC55KCkpOwogCi0g
ICAgYW5pbWF0ZWRQb2ludCA9IGJsZW5kRmxvYXRQb2ludChmcm9tUG9pbnQsIGFuaW1hdGVkUG9p
bnQsIG1fcHJvZ3Jlc3MpOworICAgIGFuaW1hdGVkUG9pbnQgPSBibGVuZEdyYXBoaWNzUG9pbnQo
ZnJvbVBvaW50LCBhbmltYXRlZFBvaW50LCBtX3Byb2dyZXNzKTsKIAogICAgIGlmIChtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7CiAKICAg
ICAvLyBUcmFuc2Zvcm0gdGhlIGFuaW1hdGVkIHBvaW50IHRvIHRoZSBjb29yZGluYXRlIG1vZGUs
IG5lZWRlZCBmb3IgdGhlIGN1cnJlbnQgcHJvZ3Jlc3MuCi0gICAgRmxvYXRQb2ludCBjdXJyZW50
UG9pbnQgPSBibGVuZEZsb2F0UG9pbnQobV9mcm9tQ3VycmVudFBvaW50LCBtX3RvQ3VycmVudFBv
aW50LCBtX3Byb2dyZXNzKTsKKyAgICBHcmFwaGljc1BvaW50IGN1cnJlbnRQb2ludCA9IGJsZW5k
R3JhcGhpY3NQb2ludChtX2Zyb21DdXJyZW50UG9pbnQsIG1fdG9DdXJyZW50UG9pbnQsIG1fcHJv
Z3Jlc3MpOwogICAgIGlmIChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAg
ICByZXR1cm4gYW5pbWF0ZWRQb2ludCArIGN1cnJlbnRQb2ludDsKIApAQCAtOTIsMTMgKzkyLDEz
IEBAIEZsb2F0UG9pbnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWQKIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IGZyb21U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1RhcmdldFBvaW50Owog
ICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50
KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0UG9p
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgZmFs
c2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsK
KyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRh
cmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBt
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2ludCA9
IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1
cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDYsMTMg
KzEwNiwxMyBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQoCiAKIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2lu
dCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OworICAgIEdy
YXBoaWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQ
b2ludDsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VMaW5lVG9TZWdtZW50KGZyb21UYXJn
ZXRQb2ludCkKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UtPnBhcnNlTGluZVRvU2VnbWVudCh0b1Rh
cmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+bGlu
ZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2lu
dCksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsK
KyAgICBtX2NvbnN1bWVyLT5saW5lVG8oYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRh
cmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBt
X2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBv
aW50ICsgdG9UYXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0OCwxOSArMTQ4LDE5
IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWwKIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50
IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQ
b2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9h
dFBvaW50IHRvUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDI7CisgICAgR3JhcGhpY3NQ
b2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBmcm9tUG9pbnQxOworICAg
IEdyYXBoaWNzUG9pbnQgZnJvbVBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9p
bnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1BvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHRvUG9p
bnQyOwogICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoZnJv
bVBvaW50MSwgZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90b1Nv
dXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50MiwgdG9UYXJn
ZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZl
VG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Q
b2ludDIsIHRvUG9pbnQyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmlt
YXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKKyAgICBtX2Nv
bnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVBvaW50
MSwgdG9Qb2ludDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFuaW1hdGVk
R3JhcGhpY3NQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21UYXJnZXRQb2ludCwgdG9U
YXJnZXRQb2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50
UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9p
bnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJl
bnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50
IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CkBAIC0xNjksMTYgKzE2OSwxNiBA
QCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlCiAKIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQ
b2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZs
b2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOworICAgIEdy
YXBoaWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVBvaW50
MjsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0
b1BvaW50MjsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhT
ZWdtZW50KGZyb21Qb2ludDIsIGZyb21UYXJnZXRQb2ludCkKICAgICAgICAgfHwgIW1fdG9Tb3Vy
Y2UtPnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCh0b1BvaW50MiwgdG9UYXJnZXRQb2lu
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZlVG9DdWJp
Y1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50
KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisgICAgbV9jb25zdW1lci0+Y3VydmVU
b0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21Qb2ludDIsIHRvUG9p
bnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEdy
YXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zy
b21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQ
b2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50
ICsgdG9UYXJnZXRQb2ludDsKQEAgLTE4NywxNiArMTg3LDE2IEBAIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmJsZW5kQ3VydmVUb0N1YmljU20KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7
Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2lu
dDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVRhcmdl
dFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50
IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1BvaW50MTsKICAgICBpZiAoIW1f
ZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChmcm9tUG9pbnQxLCBmcm9t
VGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0
aWNTZWdtZW50KHRvUG9pbnQxLCB0b1RhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkRmxvYXRQ
b2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9p
bnQpLAorICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMoYmxlbmRBbmltYXRlZEdyYXBo
aWNzUG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1Rh
cmdldFBvaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJy
ZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0
UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1
cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBv
aW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CkBAIC0yMDUsMTMgKzIwNSwx
MyBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFkcmF0CiAKIGJvb2wgU1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQogewotICAg
IEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2lu
dDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50
IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90b1NvdXJj
ZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCh0b1RhcmdldFBvaW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Nt
b290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9p
bnQpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7
CisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkR3Jh
cGhpY3NQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLCBtX2lzSW5GaXJzdEhh
bGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3VycmVu
dFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBv
aW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9DdXJy
ZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2lu
dCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwpA
QCAtMjI0LDEzICsyMjQsMTMgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21l
bnQoKQogICAgIGZsb2F0IGZyb21BbmdsZTsKICAgICBib29sIGZyb21MYXJnZUFyYzsKICAgICBi
b29sIGZyb21Td2VlcDsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFw
aGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKICAgICBmbG9hdCB0b1J4OwogICAgIGZsb2F0IHRv
Unk7CiAgICAgZmxvYXQgdG9BbmdsZTsKICAgICBib29sIHRvTGFyZ2VBcmM7CiAgICAgYm9vbCB0
b1N3ZWVwOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50
IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQXJjVG9TZWdtZW50
KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5nbGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVwLCBmcm9t
VGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUFyY1RvU2VnbWVudCh0
b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xhcmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQwLDcgKzI0MCw3IEBAIGJvb2wgU1ZHUGF0aEJs
ZW5kZXI6OmJsZW5kQXJjVG9TZWdtZW50KCkKICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFu
aW1hdGVkRmxvYXQoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBtX3Byb2dyZXNzKSwKICAgICAgICAgICAg
ICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21MYXJnZUFyYyA6IHRv
TGFyZ2VBcmMsCiAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRp
b24gPyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5p
bWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisgICAgICAg
ICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50
LCB0b1RhcmdldFBvaW50KSwKICAgICAgICAgICAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZP
ZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3VycmVudFBv
aW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50
IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9DdXJyZW50
UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6
IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwpAQCAtMzY1LDggKzM2NSw4IEBAIHZv
aWQgU1ZHUGF0aEJsZW5kZXI6OmNsZWFudXAoKQogICAgIG1fdG9Tb3VyY2UgPSAwOwogICAgIG1f
ZnJvbVNvdXJjZSA9IDA7CiAgICAgbV9jb25zdW1lciA9IDA7Ci0gICAgbV9mcm9tQ3VycmVudFBv
aW50ID0gRmxvYXRQb2ludCgpOwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBGbG9hdFBvaW50KCk7
CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fdG9DdXJy
ZW50UG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQmxlbmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQmxlbmRlci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQmxlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTQgQEAgcHJpdmF0
ZToKICAgICBib29sIGJsZW5kQXJjVG9TZWdtZW50KCk7CiAKICAgICBmbG9hdCBibGVuZEFuaW1h
dGVkRGltZW5zb25hbEZsb2F0KGZsb2F0LCBmbG9hdCwgRmxvYXRCbGVuZE1vZGUpOwotICAgIEZs
b2F0UG9pbnQgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwg
Y29uc3QgRmxvYXRQb2ludCYgdG8pOworICAgIEdyYXBoaWNzUG9pbnQgYmxlbmRBbmltYXRlZEdy
YXBoaWNzUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgZnJvbSwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgdG8pOwogCiAgICAgU1ZHUGF0aFNvdXJjZSogbV9mcm9tU291cmNlOwogICAgIFNWR1BhdGhT
b3VyY2UqIG1fdG9Tb3VyY2U7CiAgICAgU1ZHUGF0aENvbnN1bWVyKiBtX2NvbnN1bWVyOwogCi0g
ICAgRmxvYXRQb2ludCBtX2Zyb21DdXJyZW50UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBtX3RvQ3Vy
cmVudFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9mcm9tQ3VycmVudFBvaW50OworICAgIEdy
YXBoaWNzUG9pbnQgbV90b0N1cnJlbnRQb2ludDsKICAgICAKICAgICBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbV9mcm9tTW9kZTsKICAgICBQYXRoQ29vcmRpbmF0ZU1vZGUgbV90b01vZGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBTVkdQYXRoQnVpbGRlcjo6U1ZHUGF0aEJ1aWxkZXIoKQogewogfQogCi12b2lk
IFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJv
b2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1aWxkZXI6
Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgYm9vbCBjbG9zZWQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGgpOwogICAgIG1fY3Vy
cmVudCA9IG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRhcmdldFBvaW50IDogbV9jdXJy
ZW50ICsgdGFyZ2V0UG9pbnQ7CkBAIC00MiwxNCArNDIsMTQgQEAgdm9pZCBTVkdQYXRoQnVpbGRl
cjo6bW92ZVRvKGNvbnN0IEZsb2F0UAogICAgIG1fcGF0aC0+bW92ZVRvKG1fY3VycmVudCk7CiB9
CiAKLXZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCdWlsZGVyOjpsaW5l
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBt
b2RlKQogewogICAgIEFTU0VSVChtX3BhdGgpOwogICAgIG1fY3VycmVudCA9IG1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcyA/IHRhcmdldFBvaW50IDogbV9jdXJyZW50ICsgdGFyZ2V0UG9pbnQ7
CiAgICAgbV9wYXRoLT5hZGRMaW5lVG8obV9jdXJyZW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnVp
bGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5h
dGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAg
ICBBU1NFUlQobV9wYXRoKTsKICAgICBpZiAobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNyBAQAogI2RlZmluZSBTVkdQYXRoQnVpbGRlcl9oCiAKICNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAj
aW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogCkBAIC00Mywy
MSArNDMsMjEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHsgbV9wYXRo
ID0gMDsgfQogCiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6ZWRQYXJz
aW5nIG1vZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8o
Y29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBtb3Zl
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
OworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGlj
c1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKIAogICAgIC8v
IE9ubHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2b2lkIGxp
bmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENv
b3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYs
IFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIFBh
dGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sLCBjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29u
c3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9v
dGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0
LCBib29sLCBib29sLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQYXRoKiBtX3BhdGg7Ci0gICAgRmxvYXRQ
b2ludCBtX2N1cnJlbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2N1cnJlbnQ7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTggKzM0LDE4IEBAIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6U1ZHUGF0aEJ5dGVTdHIKIHsK
IH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9i
eXRlU3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGlu
YXRlcyA/ICBQYXRoU2VnTW92ZVRvUmVsIDogUGF0aFNlZ01vdmVUb0Ficyk7Ci0gICAgd3JpdGVG
bG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9p
bnQpOwogfQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJl
YW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8g
UGF0aFNlZ0xpbmVUb1JlbCA6IFBhdGhTZWdMaW5lVG9BYnMpOwotICAgIHdyaXRlRmxvYXRQb2lu
dCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0K
IAogdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb0hvcml6b250YWwoZmxvYXQg
eCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCkBAIC02MiwzOSArNjIsMzkgQEAgdm9pZCBTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb1ZlcgogICAgIHdyaXRlRmxvYXQoeSk7CiB9CiAK
LXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBv
aW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9ieXRlU3RyZWFt
KTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBh
dGhTZWdDdXJ2ZVRvQ3ViaWNSZWwgOiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzKTsKLSAgICB3cml0
ZUZsb2F0UG9pbnQocG9pbnQxKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQyKTsKLSAgICB3
cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludChwb2lu
dDEpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludChwb2ludDIpOworICAgIHdyaXRlR3JhcGhpY3NQ
b2ludCh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpj
dXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVu
dFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9DdWJpY1Nt
b290aFJlbCA6IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMpOwotICAgIHdyaXRlRmxvYXRQ
b2ludChwb2ludDIpOwotICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3Jp
dGVHcmFwaGljc1BvaW50KHBvaW50Mik7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBv
aW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0
aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRl
cjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAg
ICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVs
YXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsIDogUGF0aFNlZ0N1
cnZlVG9RdWFkcmF0aWNBYnMpOwotICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDEpOwotICAgIHdy
aXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50
MSk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQ
YXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VS
VChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwgOiBQYXRoU2VnQ3Vy
dmVUb1F1YWRyYXRpY1Ntb290aEFicyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50
KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwogfQogCi12b2lkIFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmds
ZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBs
YXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZVN0cmVh
bSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQ
YXRoU2VnQXJjUmVsIDogUGF0aFNlZ0FyY0Ficyk7CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmFyY1RvKGZsbwogICAgIHdyaXRlRmxvYXQoYW5nbGUp
OwogICAgIHdyaXRlRmxhZyhsYXJnZUFyY0ZsYWcpOwogICAgIHdyaXRlRmxhZyhzd2VlcEZsYWcp
OwotICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1Bv
aW50KHRhcmdldFBvaW50KTsKIH0KIAogdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmNs
b3NlUGF0aCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBAQAogI2Rl
ZmluZSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIKQEAg
LTQxLDE4ICs0MiwxOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgeyBt
X2J5dGVTdHJlYW0gPSAwOyB9CiAKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcvTm9y
bWFsaXplZFBhcnNpbmcgbW9kZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVh
bCB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29y
ZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNv
bnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgp
OwogCiAgICAgLy8gT25seSB1c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4KICAgICB2aXJ0
dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbGluZVRvVmVydGljYWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21v
b3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBz
d2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZp
cnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBj
dXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRp
Y1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcs
IGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVUeXBlPgogICAgIHZvaWQgd3JpdGVUeXBl
KGNvbnN0IEJ5dGVUeXBlJiB0eXBlKQpAQCAtNzYsMTAgKzc3LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIHdyaXRlVHlwZShkYXRhKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlRmxvYXRQb2ludChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICB2b2lkIHdyaXRlR3JhcGhpY3NQb2ludChjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCkKICAgICB7Ci0gICAgICAgIHdyaXRlRmxvYXQocG9pbnQu
eCgpKTsKLSAgICAgICAgd3JpdGVGbG9hdChwb2ludC55KCkpOworICAgICAgICB3cml0ZUZsb2F0
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocG9pbnQueCgpKSk7CisgICAgICAgIHdyaXRlRmxvYXQo
bmFycm93UHJlY2lzaW9uVG9GbG9hdChwb2ludC55KCkpKTsKICAgICB9CiAKICAgICB2b2lkIHdy
aXRlU2VnbWVudFR5cGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTUgKzQ4LDE1IEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlOjoKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+KHJlYWRT
VkdTZWdtZW50VHlwZSgpKTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBv
aW50KQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0YXJnZXRQ
b2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2Vn
bWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJl
YWRGbG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkR3JhcGhpY3NQb2ludCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03Miw0MiArNzIsNDIgQEAgYm9vbCBTVkdQYXRoQnl0
ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQor
Ym9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEdy
YXBoaWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50
JiB0YXJnZXRQb2ludCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHBv
aW50MiA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2lu
dCgpOworICAgIHBvaW50MSA9IHJlYWRHcmFwaGljc1BvaW50KCk7CisgICAgcG9pbnQyID0gcmVh
ZEdyYXBoaWNzUG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2
ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2lu
dCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0
YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEdyYXBoaWNz
UG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2lu
dCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBvaW50ID0g
cmVhZEZsb2F0UG9pbnQoKTsKKyAgICBwb2ludDEgPSByZWFkR3JhcGhpY3NQb2ludCgpOworICAg
IHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2lu
dCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOwor
ICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxv
YXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3
ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUs
IGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQp
CiB7CiAgICAgcnggPSByZWFkRmxvYXQoKTsKICAgICByeSA9IHJlYWRGbG9hdCgpOwogICAgIGFu
Z2xlID0gcmVhZEZsb2F0KCk7CiAgICAgbGFyZ2VBcmMgPSByZWFkRmxhZygpOwogICAgIHN3ZWVw
ID0gcmVhZEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAg
dGFyZ2V0UG9pbnQgPSByZWFkR3JhcGhpY3NQb2ludCgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVT
dHJlYW0uaCIKICNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KQEAgLTQzLDE1ICs0MywxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBw
YXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBTVkdQYXRo
U2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VM
aW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9T
ZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdt
ZW50KEdyYXBoaWNzUG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmbG9hdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudChmbG9hdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2lu
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0
UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFy
Y1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEdyYXBoaWNz
UG9pbnQmLCBHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNz
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChH
cmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJv
b2wmLCBHcmFwaGljc1BvaW50Jik7CiAKICNpZiBDT01QSUxFUihNU1ZDKQogI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQ3MDEpCkBAIC04NiwxMSArODYsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIHJlYWRUeXBlPHVuc2lnbmVkIHNob3J0LCBVbnNpZ25lZFNob3J0Qnl0ZT4oKTsKICAg
ICB9CiAKLSAgICBGbG9hdFBvaW50IHJlYWRGbG9hdFBvaW50KCkKKyAgICBHcmFwaGljc1BvaW50
IHJlYWRHcmFwaGljc1BvaW50KCkKICAgICB7CiAgICAgICAgIGZsb2F0IHggPSByZWFkVHlwZTxm
bG9hdCwgRmxvYXRCeXRlPigpOwogICAgICAgICBmbG9hdCB5ID0gcmVhZFR5cGU8ZmxvYXQsIEZs
b2F0Qnl0ZT4oKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoeCwgeSk7CisgICAgICAgIHJl
dHVybiBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIH0KIAogICAgIFNWR1BhdGhCeXRlU3RyZWFt
KiBtX3N0cmVhbTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQ29uc3VtZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIFNWR1BhdGhDb25zdW1lcl9oCiAK
ICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KIApAQCAtNTAsMTggKzUwLDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYW51cCgpID0gMDsKIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNu
Zy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29s
IGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxpbmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCkgPSAwOwogCiAgICAgLy8gT25seSB1c2VkIGlu
IFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4KICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRh
bChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGxpbmVU
b1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFk
cmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25z
dCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVw
RmxhZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRv
UXVhZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBs
YXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5TVkdQYXRoQ29u
c3VtZXIoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw5ICs5Myw5IEBAIGZsb2F0IFNWR1BhdGhFbGVtZW50OjpnZXRU
b3RhbExlbmd0aCgpCiAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBvaW50IFNW
R1BhdGhFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCkKK0dyYXBoaWNzUG9p
bnQgU1ZHUGF0aEVsZW1lbnQ6OmdldFBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQogewotICAg
IEZsb2F0UG9pbnQgcG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDsKICAgICBTVkdQYXRo
UGFyc2VyRmFjdG9yeTo6c2VsZigpLT5nZXRQb2ludEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVh
bShtX3BhdGhCeXRlU3RyZWFtLmdldCgpLCBsZW5ndGgsIHBvaW50KTsKICAgICByZXR1cm4gcG9p
bnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gOTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUGF0
aEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAK
ICAgICBmbG9hdCBnZXRUb3RhbExlbmd0aCgpOwotICAgIEZsb2F0UG9pbnQgZ2V0UG9pbnRBdExl
bmd0aChmbG9hdCBkaXN0YW5jZSk7CisgICAgR3JhcGhpY3NQb2ludCBnZXRQb2ludEF0TGVuZ3Ro
KGZsb2F0IGRpc3RhbmNlKTsKICAgICB1bnNpZ25lZCBsb25nIGdldFBhdGhTZWdBdExlbmd0aChm
bG9hdCBkaXN0YW5jZSk7CiAKICAgICBQYXNzUmVmUHRyPFNWR1BhdGhTZWdDbG9zZVBhdGg+IGNy
ZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGgoU1ZHUGF0aFNlZ1JvbGUgcm9sZSA9IFBhdGhTZWdVbmRl
ZmluZWRSb2xlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDbG9z
ZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQog
ewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQ
b2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZU1vdmVUb1NlZ21lbnQodGFyZ2V0UG9pbnQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBTVkdQYXRo
UGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNl
TGluZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBHcmFw
aGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3VyY2UtPnBhcnNlTGluZVRvU2Vn
bWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTE5LDkgKzEx
OSw5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFMKIAogYm9vbCBT
VkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9p
bnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0
UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBwb2lu
dDI7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5w
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNDIsOCArMTQyLDggQEAgYm9vbCBTVkdQYXRoUGFy
c2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZwogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7Ci0gICAg
RmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50MjsKKyAgICBH
cmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3VyY2UtPnBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudChwb2ludDIsIHRhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1
cnZlVG9DdWJpY1NtbwogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBvaW50Owog
CiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7Ci0gICAg
ICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5zY2FsZSgyLCAy
KTsKICAgICAgICAgcG9pbnQxLm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJvbFBv
aW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewpA
QCAtMTczLDE2ICsxNzMsMTYgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJp
Y1NtbwogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQo
KQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7
CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2lu
dDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KHBvaW50
MSwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9wYXRo
UGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgbV9jb250cm9sUG9p
bnQgPSBwb2ludDE7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7
CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAg
IHBvaW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2ludC54KCksIDIgKiBtX2NvbnRyb2xQb2ludC55
KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogbV9j
b250cm9sUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgp
KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIG1f
Y29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIG1fY29udHJvbFBvaW50Lnko
KSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewogICAgICAg
ICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVudFBvaW50LngoKSwgMiAqIG1fY3VycmVudFBv
aW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIubW92ZSgzICogbV9jdXJyZW50UG9pbnQueCgp
LCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCBib29sIFNWR1Bh
dGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpCiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJn
ZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3Vy
Y2UtPnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodGFyZ2V0UG9pbnQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNCwxMSArMjE0LDExIEBAIGJvb2wgU1ZHUGF0aFBh
cnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKICAgICAgICAgbV9jb250cm9sUG9pbnQgPSBtX2N1
cnJlbnRQb2ludDsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFy
c2luZykgewotICAgICAgICBGbG9hdFBvaW50IGN1YmljUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsK
KyAgICAgICAgR3JhcGhpY3NQb2ludCBjdWJpY1BvaW50ID0gbV9jdXJyZW50UG9pbnQ7CiAgICAg
ICAgIGN1YmljUG9pbnQuc2NhbGUoMiwgMik7CiAgICAgICAgIGN1YmljUG9pbnQubW92ZSgtbV9j
b250cm9sUG9pbnQueCgpLCAtbV9jb250cm9sUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDEobV9jdXJyZW50UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCBtX2N1cnJl
bnRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBv
aW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIHRhcmdldFBvaW50Lnko
KSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQxKG1f
Y3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9pbnQueSgp
ICsgMiAqIGN1YmljUG9pbnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDIodGFy
Z2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICog
Y3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgICAg
IHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwpAQCAtMjQyLDcgKzI0Miw3IEBAIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQogICAgIGZsb2F0IGFuZ2xlOwogICAg
IGJvb2wgbGFyZ2VBcmM7CiAgICAgYm9vbCBzd2VlcDsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBv
aW50OworICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJjZS0+
cGFyc2VBcmNUb1NlZ21lbnQocngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQ
b2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjYzLDcgKzI2Myw3IEBAIGJvb2wg
U1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQogICAgIH0KIAogICAgIGlmIChtX3Bh
dGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewotICAgICAgICBGbG9hdFBvaW50
IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAgICBHcmFwaGljc1BvaW50IHBvaW50MSA9
IG1fY3VycmVudFBvaW50OwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMpCiAgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAg
bV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKQEAgLTI4MCw5ICsyODAsOSBAQCBib29sIFNW
R1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGFGcm9tU291CiAKICAgICBtX3BhdGhQYXJzaW5nTW9k
ZSA9IHBhdGhQYXJzaW5nTW9kZTsKIAotICAgIG1fY29udHJvbFBvaW50ID0gRmxvYXRQb2ludCgp
OwotICAgIG1fY3VycmVudFBvaW50ID0gRmxvYXRQb2ludCgpOwotICAgIG1fc3ViUGF0aFBvaW50
ID0gRmxvYXRQb2ludCgpOworICAgIG1fY29udHJvbFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOwor
ICAgIG1fY3VycmVudFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fc3ViUGF0aFBvaW50
ID0gR3JhcGhpY3NQb2ludCgpOwogICAgIG1fY2xvc2VQYXRoID0gdHJ1ZTsKIAogICAgIC8vIFNr
aXAgYW55IGxlYWRpbmcgc3BhY2VzLgpAQCAtNDAxLDE1ICs0MDEsMTUgQEAgdm9pZCBTVkdQYXRo
UGFyc2VyOjpjbGVhbnVwKCkKIC8vIFRoaXMgd29ya3MgYnkgY29udmVydGluZyB0aGUgU1ZHIGFy
YyB0byAic2ltcGxlIiBiZXppZXJzLgogLy8gUGFydGx5IGFkYXB0ZWQgZnJvbSBOaWtvJ3MgY29k
ZSBpbiBrZGVsaWJzL2tkZWNvcmUvc3ZnaWNvbnMuCiAvLyBTZWUgYWxzbyBTVkcgaW1wbGVtZW50
YXRpb24gbm90ZXM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90ZS5odG1sI0FyY0Nv
bnZlcnNpb25FbmRwb2ludFRvQ2VudGVyCi1ib29sIFNWR1BhdGhQYXJzZXI6OmRlY29tcG9zZUFy
Y1RvQ3ViaWMoZmxvYXQgYW5nbGUsIGZsb2F0IHJ4LCBmbG9hdCByeSwgRmxvYXRQb2ludCYgcG9p
bnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxh
ZykKK2Jvb2wgU1ZHUGF0aFBhcnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJpYyhmbG9hdCBhbmdsZSwg
ZmxvYXQgcngsIGZsb2F0IHJ5LCBHcmFwaGljc1BvaW50JiBwb2ludDEsIEdyYXBoaWNzUG9pbnQm
IHBvaW50MiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKQogewotICAgIEZsb2F0
U2l6ZSBtaWRQb2ludERpc3RhbmNlID0gcG9pbnQxIC0gcG9pbnQyOworICAgIEdyYXBoaWNzU2l6
ZSBtaWRQb2ludERpc3RhbmNlID0gcG9pbnQxIC0gcG9pbnQyOwogICAgIG1pZFBvaW50RGlzdGFu
Y2Uuc2NhbGUoMC41Zik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcG9pbnRUcmFuc2Zvcm07CiAg
ICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRlKC1hbmdsZSk7CiAKLSAgICBGbG9hdFBvaW50IHRyYW5z
Zm9ybWVkTWlkUG9pbnQgPSBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50KG1pZFBv
aW50RGlzdGFuY2Uud2lkdGgoKSwgbWlkUG9pbnREaXN0YW5jZS5oZWlnaHQoKSkpOworICAgIEdy
YXBoaWNzUG9pbnQgdHJhbnNmb3JtZWRNaWRQb2ludCA9IHBvaW50VHJhbnNmb3JtLm1hcFBvaW50
KEdyYXBoaWNzUG9pbnQobWlkUG9pbnREaXN0YW5jZS53aWR0aCgpLCBtaWRQb2ludERpc3RhbmNl
LmhlaWdodCgpKSk7CiAgICAgZmxvYXQgc3F1YXJlUnggPSByeCAqIHJ4OwogICAgIGZsb2F0IHNx
dWFyZVJ5ID0gcnkgKiByeTsKICAgICBmbG9hdCBzcXVhcmVYID0gdHJhbnNmb3JtZWRNaWRQb2lu
dC54KCkgKiB0cmFuc2Zvcm1lZE1pZFBvaW50LngoKTsKQEAgLTQyOSw3ICs0MjksNyBAQCBib29s
IFNWR1BhdGhQYXJzZXI6OmRlY29tcG9zZUFyY1RvQ3ViaWMoCiAKICAgICBwb2ludDEgPSBwb2lu
dFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDEpOwogICAgIHBvaW50MiA9IHBvaW50VHJhbnNmb3Jt
Lm1hcFBvaW50KHBvaW50Mik7Ci0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9pbnQyIC0gcG9pbnQx
OworICAgIEdyYXBoaWNzU2l6ZSBkZWx0YSA9IHBvaW50MiAtIHBvaW50MTsKIAogICAgIGZsb2F0
IGQgPSBkZWx0YS53aWR0aCgpICogZGVsdGEud2lkdGgoKSArIGRlbHRhLmhlaWdodCgpICogZGVs
dGEuaGVpZ2h0KCk7CiAgICAgZmxvYXQgc2NhbGVGYWN0b3JTcXVhcmVkID0gc3RkOjptYXgoMSAv
IGQgLSAwLjI1ZiwgMC5mKTsKQEAgLTQzOSw3ICs0MzksNyBAQCBib29sIFNWR1BhdGhQYXJzZXI6
OmRlY29tcG9zZUFyY1RvQ3ViaWMoCiAgICAgICAgIHNjYWxlRmFjdG9yID0gLXNjYWxlRmFjdG9y
OwogCiAgICAgZGVsdGEuc2NhbGUoc2NhbGVGYWN0b3IpOwotICAgIEZsb2F0UG9pbnQgY2VudGVy
UG9pbnQgPSBGbG9hdFBvaW50KDAuNWYgKiAocG9pbnQxLngoKSArIHBvaW50Mi54KCkpIC0gZGVs
dGEuaGVpZ2h0KCksCisgICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQb2ludCA9IEdyYXBoaWNzUG9p
bnQoMC41ZiAqIChwb2ludDEueCgpICsgcG9pbnQyLngoKSkgLSBkZWx0YS5oZWlnaHQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmICogKHBvaW50MS55KCkg
KyBwb2ludDIueSgpKSArIGRlbHRhLndpZHRoKCkpOwogCiAgICAgZmxvYXQgdGhldGExID0gYXRh
bjJmKHBvaW50MS55KCkgLSBjZW50ZXJQb2ludC55KCksIHBvaW50MS54KCkgLSBjZW50ZXJQb2lu
dC54KCkpOwpAQCAtNDcwLDkgKzQ3MCw5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6ZGVjb21wb3Nl
QXJjVG9DdWJpYygKICAgICAgICAgZmxvYXQgc2luRW5kVGhldGEgPSBzaW5mKGVuZFRoZXRhKTsK
ICAgICAgICAgZmxvYXQgY29zRW5kVGhldGEgPSBjb3NmKGVuZFRoZXRhKTsKIAotICAgICAgICBw
b2ludDEgPSBGbG9hdFBvaW50KGNvc1N0YXJ0VGhldGEgLSB0ICogc2luU3RhcnRUaGV0YSwgc2lu
U3RhcnRUaGV0YSArIHQgKiBjb3NTdGFydFRoZXRhKTsKKyAgICAgICAgcG9pbnQxID0gR3JhcGhp
Y3NQb2ludChjb3NTdGFydFRoZXRhIC0gdCAqIHNpblN0YXJ0VGhldGEsIHNpblN0YXJ0VGhldGEg
KyB0ICogY29zU3RhcnRUaGV0YSk7CiAgICAgICAgIHBvaW50MS5tb3ZlKGNlbnRlclBvaW50Lngo
KSwgY2VudGVyUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludCA9IEZs
b2F0UG9pbnQoY29zRW5kVGhldGEsIHNpbkVuZFRoZXRhKTsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dCB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQoY29zRW5kVGhldGEsIHNpbkVuZFRoZXRhKTsK
ICAgICAgICAgdGFyZ2V0UG9pbnQubW92ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50Lnko
KSk7CiAgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50OwogICAgICAgICBwb2ludDIubW92ZSh0
ICogc2luRW5kVGhldGEsIC10ICogY29zRW5kVGhldGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFBhcnNlci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAg
IHZvaWQgY2xlYW51cCgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgZGVjb21wb3NlQXJjVG9DdWJp
YyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIGJvb2wgbGFy
Z2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CisgICAgYm9vbCBkZWNvbXBvc2VBcmNUb0N1Ymlj
KGZsb2F0LCBmbG9hdCwgZmxvYXQsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50JiwgYm9v
bCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKTsKICAgICB2b2lkIHBhcnNlQ2xvc2VQYXRo
U2VnbWVudCgpOwogICAgIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KCk7CiAgICAgYm9vbCBwYXJz
ZUxpbmVUb1NlZ21lbnQoKTsKQEAgLTYyLDkgKzYyLDkgQEAgcHJpdmF0ZToKICAgICBQYXRoUGFy
c2luZ01vZGUgbV9wYXRoUGFyc2luZ01vZGU7CiAgICAgU1ZHUGF0aFNlZ1R5cGUgbV9sYXN0Q29t
bWFuZDsKICAgICBib29sIG1fY2xvc2VQYXRoOwotICAgIEZsb2F0UG9pbnQgbV9jb250cm9sUG9p
bnQ7Ci0gICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb2ludDsKLSAgICBGbG9hdFBvaW50IG1fc3Vi
UGF0aFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9jb250cm9sUG9pbnQ7CisgICAgR3JhcGhp
Y3NQb2ludCBtX2N1cnJlbnRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fc3ViUGF0aFBvaW50
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
Niw3ICsyOTYsNyBAQCBib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRUb3RhbExlbmd0CiAg
ICAgcmV0dXJuIG9rOwogfQogCi1ib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRQb2ludEF0
TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFtLCBmbG9h
dCBsZW5ndGgsIEZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6
Z2V0UG9pbnRBdExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qIHN0
cmVhbSwgZmxvYXQgbGVuZ3RoLCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBBU1NFUlQo
c3RyZWFtKTsKICAgICBpZiAoc3RyZWFtLT5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5dGVTdHJl
YW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBTVkdQYXRoQnl0ZVN0cmVhbSosIE93blB0cjxTVkdQYXRo
Qnl0ZVN0cmVhbT4mLCBmbG9hdCk7CiAgICAgYm9vbCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9t
U1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCBsZW5ndGgsIHVuc2ln
bmVkIGxvbmcmIHBhdGhTZWcpOwogICAgIGJvb2wgZ2V0VG90YWxMZW5ndGhPZlNWR1BhdGhCeXRl
U3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwgZmxvYXQmIHRvdGFsTGVuZ3RoKTsKLSAgICBib29s
IGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwg
ZmxvYXQgbGVuZ3RoLCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBnZXRQb2ludEF0TGVuZ3RoT2ZT
VkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGZsb2F0IGxlbmd0aCwgR3JhcGhp
Y3NQb2ludCYpOwogCiBwcml2YXRlOgogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6
OlNWR1BhdGhTZWdMaXN0QnVpCiB7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpt
b3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVUbyhjb25zdCBHcmFw
aGljc1BvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7
CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsK
QEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVUbyhjb25z
dAogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZH
UGF0aFNlZ01vdmV0b1JlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwgbV9wYXRo
U2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQg
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVt
ZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC04OSw3ICs4OSw3IEBAIHZvaWQg
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG9WZXJ0aWMKICAgICAgICAgbV9wYXRoU2VnTGlz
dC0+YXBwZW5kKG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJl
bCh5LCBtX3BhdGhTZWdSb2xlKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpj
dXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAg
ICBBU1NFUlQobV9wYXRoRWxlbWVudCk7CiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3QpOwpAQCAt
OTksNyArOTksNyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb0N1YmljCiAg
ICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2lu
dDEueCgpLCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCBtX3BhdGhTZWdSb2xl
KSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3Vy
dmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFT
U0VSVChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC0xMDks
NyArMTA5LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9DdWJpYwogICAg
ICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwg
cG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1Bh
dGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50KTsKICAg
ICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBTVkdQYXRo
U2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9RdWFkcgogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBl
bmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwodGFy
Z2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50MS54KCksIHBvaW50MS55KCksIG1f
cGF0aFNlZ1JvbGUpKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGlu
YXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0
aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9w
YXRoU2VnTGlzdCk7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxk
ZXI6OmN1cnZlVG9RdWFkcgogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxl
bWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodGFyZ2V0UG9p
bnQueCgpLCB0YXJnZXRQb2ludC55KCksIG1fcGF0aFNlZ1JvbGUpKTsKIH0KIAotdm9pZCBTVkdQ
YXRoU2VnTGlzdEJ1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUs
IGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlzdEJ1
aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wgbGFyZ2VB
cmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQs
IFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50KTsK
ICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFNlZ0xpc3RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdMaXN0QnVpbGRlci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUs
NyBAQAogI2RlZmluZSBTVkdQYXRoU2VnTGlzdEJ1aWxkZXJfaAogCiAjaWYgRU5BQkxFKFNWRykK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2lu
Y2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKQEAgLTUxLDE4ICs1MSwxOCBAQCBwcml2YXRlOgog
ICAgIH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVkUGFyc2lu
ZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29s
IGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBj
dXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRv
KGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRp
bmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQ
b2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAgICAvLyBP
bmx5IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9pZCBsaW5l
VG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9p
ZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRy
YXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxv
YXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29u
c3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1
cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2lu
dCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0
aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRp
bmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBh
cmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZs
YWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAgICAgU1ZH
UGF0aEVsZW1lbnQqIG1fcGF0aEVsZW1lbnQ7CiAgICAgU1ZHUGF0aFNlZ0xpc3QqIG1fcGF0aFNl
Z0xpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5j
cHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0
U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMjEgKzU5LDIxIEBAIFNWR1BhdGhTZWdU
eXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXgKICAgICByZXR1cm4gcGF0aFNlZ1R5cGU7CiB9
CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRv
U2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBBU1NFUlQobV9zZWdt
ZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdNb3Zl
VG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdNb3ZlVG9SZWwpOwog
ICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3ZlVG8gPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFyZ2V0UG9p
bnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CisgICAgdGFyZ2V0UG9p
bnQgPSBHcmFwaGljc1BvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVu
dChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBh
cnNlTGluZVRvU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBBU1NF
UlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBh
dGhTZWdMaW5lVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdMaW5l
VG9SZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBsaW5lVG8gPSBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGxpbmVUby0+eCgpLCBsaW5lVG8tPnkoKSk7CisgICAg
dGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGxpbmVUby0+eCgpLCBsaW5lVG8tPnkoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk1LDQ3ICs5NSw0NyBAQCBib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUxpbmVUb1ZlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBw
b2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29s
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQ
b2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21lbnQtPnBh
dGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpYyogY3ViaWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljKj4o
bV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54MSgpLCBj
dWJpYy0+eTEoKSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMt
PnkyKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+
eSgpKTsKKyAgICBwb2ludDEgPSBHcmFwaGljc1BvaW50KGN1YmljLT54MSgpLCBjdWJpYy0+eTEo
KSk7CisgICAgcG9pbnQyID0gR3JhcGhpY3NQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMtPnkyKCkp
OworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChjdWJpYy0+eCgpLCBjdWJpYy0+eSgp
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2lu
dCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9D
dWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50JiB0
YXJnZXRQb2ludCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdt
ZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMgfHwgbV9z
ZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWwpOwog
ICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqIGN1YmljU21vb3RoID0gc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aCo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAg
cG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eDIoKSwgY3ViaWNTbW9vdGgtPnkyKCkp
OwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eCgpLCBjdWJpY1Nt
b290aC0+eSgpKTsKKyAgICBwb2ludDIgPSBHcmFwaGljc1BvaW50KGN1YmljU21vb3RoLT54Migp
LCBjdWJpY1Ntb290aC0+eTIoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGN1
YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1Bh
dGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9p
bnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgQVNTRVJUKG1f
c2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2Vn
Q3VydmVUb1F1YWRyYXRpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNl
Z0N1cnZlVG9RdWFkcmF0aWNSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKiBx
dWFkcmF0aWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYyo+KG1fc2Vn
bWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngxKCksIHF1
YWRyYXRpYy0+eTEoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+
eCgpLCBxdWFkcmF0aWMtPnkoKSk7CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludChxdWFkcmF0
aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1Bv
aW50KHF1YWRyYXRpYy0+eCgpLCBxdWFkcmF0aWMtPnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291
cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRh
cmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnMgfHwg
bV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
UmVsKTsKICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogcXVhZHJhdGljU21vb3RoID0g
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQuZ2V0KCkp
OwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWNTbW9vdGgtPngoKSwgcXVh
ZHJhdGljU21vb3RoLT55KCkpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChxdWFk
cmF0aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9h
dCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dl
ZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6
cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9v
bCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsK
ICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlw
ZSgpID09IFBhdGhTZWdBcmNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhT
ZWdBcmNSZWwpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6
OnBhcnNlQXJjVG9TZWcKICAgICBhbmdsZSA9IGFyY1RvLT5hbmdsZSgpOwogICAgIGxhcmdlQXJj
ID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwogICAgIHN3ZWVwID0gYXJjVG8tPnN3ZWVwRmxhZygp
OwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChhcmNUby0+eCgpLCBhcmNUby0+eSgpKTsK
KyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXJjVG8tPngoKSwgYXJjVG8tPnkoKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U2VnTGlzdFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
U2VnTGlzdFNvdXJjZS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU2VnTGlzdFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAj
ZGVmaW5lIFNWR1BhdGhTZWdMaXN0U291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJT
VkdQYXRoU2VnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKICNpbmNsdWRlICJTVkdQ
YXRoU291cmNlLmgiCkBAIC00NSwxNSArNDUsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpOwogICAgIHZpcnR1YWwgU1ZH
UGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpOwogCi0gICAgdmlydHVhbCBi
b29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBh
cnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlTW92
ZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRv
U2VnbWVudChHcmFwaGljc1BvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvSG9y
aXpvbnRhbFNlZ21lbnQoZmxvYXQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9WZXJ0
aWNhbFNlZ21lbnQoZmxvYXQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNT
ZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0
UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChG
bG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9h
dFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChHcmFw
aGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmLCBHcmFw
aGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmly
dHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wm
LCBib29sJiwgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgY29uc3QgU1ZHUGF0aFNlZ0xpc3QmIG1f
cGF0aFNlZ0xpc3Q7CiAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IG1fc2VnbWVudDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNSArMzYsMTUg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhT
ZWdUeXBlJikgPSAwOwogICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZH
UGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvU2VnbWVudChGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1v
dmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VM
aW5lVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHBh
cnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBv
aW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQ
b2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBm
bG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNz
UG9pbnQmLCBHcmFwaGljc1BvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKSA9IDA7
CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQ
b2ludCYsIEdyYXBoaWNzUG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJv
b2wmLCBHcmFwaGljc1BvaW50JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgU3RyaW5nIFNWR1BhdGhTdHJpbmdC
dWlsZGVyOjpyZXN1bHQoKQogICAgIHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
IH0KIAotdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0
aFN0cmluZ0J1aWxkZXI6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwg
Ym9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcykKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZv
cm1hdCgiTSAlLjZsZyAlLjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkp
OwpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjptb3ZlVG8oY29u
c3QgCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIm0gJS42
bGcgJS42bGcgIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKIH0KIAotdm9p
ZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6
OmxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVN
b2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiTCAlLjZsZyAlLjZsZyAi
LCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwpAQCAtNjcsNyArNjcsNyBAQCB2
b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpsaW5lVG9WZXJ0aWNhCiAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInYgJS42bGcgIiwgeSkpOwogfQogCi12b2lk
IFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6
OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMp
CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIkMgJS42bGcg
JS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwg
cG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkp
KTsKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb0N1
YmljKAogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJjICUu
NmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBvaW50MS54KCksIHBvaW50MS55
KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQu
eSgpKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290
aChjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50
LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1
cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBp
ZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJTICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBvaW50
Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CkBA
IC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9DdWJpY1MK
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgicyAlLjZsZyAl
LjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54
KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpj
dXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3Ry
aW5nQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKIHsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJRICUuNmxnICUuNmxnICUuNmxnICUu
NmxnICIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9p
bnQueSgpKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1
cnZlVG9RdWFkcmEKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1h
dCgicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCB0
YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJp
bmdCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxk
ZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRl
Q29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3Jt
YXQoIlQgJS42bGcgJS42bGcgIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsK
QEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb1F1YWRy
YQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJ0ICUuNmxn
ICUuNmxnICIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CiB9CiAKLXZvaWQg
U1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5n
bGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5n
QnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJn
ZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcykKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1h
dCgiQSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZsZyAlLjZsZyAiLCByMSwgcjIsIGFuZ2xl
LCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55
KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5oCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhTdHJp
bmdCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTM3LDE4ICszNywxOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUNvbnN1bWluZygpIHsgcmV0dXJu
IHRydWU7IH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFy
c2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBi
b29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRv
KGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29v
cmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhp
Y3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0
aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAgICAv
LyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9pZCBs
aW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwg
dm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1
YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFyY1Rv
KGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywg
Y29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFk
cmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29v
cmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNv
bnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9p
ZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2Vl
cEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAgICAg
U3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NywyMyArMTI3LDIzIEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6Om5leHQK
ICAgICByZXR1cm4gbmV4dENvbW1hbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBpZiAoIXBhcnNlTnVt
YmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9l
bmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0
UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRv
WSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQp
CiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBpZiAoIXBhcnNlTnVtYmVy
KG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQs
IHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQodG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29sIFNWR1BhdGhT
dHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVyCiAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3Vy
cmVudCwgbV9lbmQsIHkpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50Miwg
RmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNl
Q3VydmVUb0N1YmljU2VnbWVudChHcmFwaGljc1BvaW50JiBwb2ludDEsIEdyYXBoaWNzUG9pbnQm
IHBvaW50MiwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgeDE7CiAg
ICAgZmxvYXQgeTE7CkBAIC0xNzIsMTMgKzE3MiwxMyBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1CiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEp
OwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICB0YXJnZXRQb2ludCA9IEZs
b2F0UG9pbnQodG9YLCB0b1kpOworICAgIHBvaW50MSA9IEdyYXBoaWNzUG9pbnQoeDEsIHkxKTsK
KyAgICBwb2ludDIgPSBHcmFwaGljc1BvaW50KHgyLCB5Mik7CisgICAgdGFyZ2V0UG9pbnQgPSBH
cmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50
MSwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgeDE7CiAgICAgZmxv
YXQgeTE7CkBAIC0xODksMTIgKzE4OSwxMiBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1CiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0
b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEpOwotICAg
IHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgcG9pbnQxID0gR3JhcGhp
Y3NQb2ludCh4MSwgeTEpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRv
WSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQpCiB7CiAgICAgZmxvYXQgeDI7CiAgICAgZmxvYXQgeTI7CkBAIC0yMDUsMjMgKzIwNSwy
MyBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1CiAgICAgICAgIHx8
ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51
bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2lu
dCh0b1gsIHRvWSk7CisgICAgcG9pbnQyID0gR3JhcGhpY3NQb2ludCh4MiwgeTIpOworICAgIHRh
cmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
U2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCkKIHsKICAgICBmbG9hdCB0b1g7CiAgICAgZmxvYXQgdG9ZOwogICAgIGlmICghcGFy
c2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9YKQogICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
bV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdl
dFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGlj
c1BvaW50KHRvWCwgdG9ZKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU3Ry
aW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQm
IGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYg
cngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAs
IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIGZsb2F0IHRvWDsKICAgICBmbG9h
dCB0b1k7CkBAIC0yMzMsNyArMjMzLDcgQEAgYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZUFyY1RvU2VnbQogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9Y
KQogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7
CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHUGF0aFN0
cmluZ1NvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
QEAgLTQzLDE1ICs0MywxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1Nl
Z21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBu
ZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpOwogCi0gICAgdmlydHVh
bCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29s
IHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNl
TW92ZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlTGlu
ZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRv
SG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9W
ZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZp
cnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZs
b2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBG
bG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChH
cmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmLCBH
cmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAg
dmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJv
b2wmLCBib29sJiwgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1
aWxkZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
VHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTkgKzMzLDE5
IEBAIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNWR1BhdGhUcmEKIHsKIH0KIAotdm9p
ZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYg
dGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSkKK3ZvaWQgU1ZHUGF0aFRyYXZl
cnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50
LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3Rh
dGUpOwogICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxT
dGF0ZS0+bW92ZVRvKHRhcmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29y
ZGluYXRlTW9kZSkKK3ZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bGluZVRvKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CiAg
ICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwogICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90
YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+bGluZVRvKHRhcmdldFBvaW50KTsKIH0KIAot
dm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCit2b2lkIFNWR1BhdGhUcmF2ZXJz
YWxTdGF0ZUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0
ZSk7CiAgICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0
YXRlLT5jdWJpY0JlemllclRvKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CkBAIC04OCw3
ICs4OCw3IEBAIGZsb2F0IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRvdGEKICAgICBy
ZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aDsKIH0KIAotRmxvYXRQb2ludCBT
VkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJyZW50UG9pbnQoKQorR3JhcGhpY3NQb2lu
dCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJyZW50UG9pbnQoKQogewogICAgIEFT
U0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKICAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV9j
dXJyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1
aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNh
bFN0YXRlQnVpbGRlci5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIy
LDcgQEAKICNkZWZpbmUgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcl9oCiAKICNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCiAjaW5jbHVkZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aENv
bnN1bWVyLmgiCiAKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbG9u
ZyBwYXRoU2VnbWVudEluZGV4KCk7CiAgICAgZmxvYXQgdG90YWxMZW5ndGgoKTsKLSAgICBGbG9h
dFBvaW50IGN1cnJlbnRQb2ludCgpOworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50KCk7
CiAKICAgICB2b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGUq
IHRyYXZlcnNhbFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0cmF2ZXJzYWxTdGF0ZTsgfQog
ICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0aChmbG9hdCk7CkBAIC00NCwxOSArNDQsMTkgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxp
emVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3Qg
R3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAK
IHByaXZhdGU6CiAgICAgLy8gTm90IHVzZWQgZm9yIFBhdGhUcmF2ZXJzYWxTdGF0ZS4KICAgICB2
aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb1ZlcnRpY2Fs
KGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2ws
IGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBo
aWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMo
Y29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b1F1YWRyYXRpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29v
cmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIFBhdGhUcmF2ZXJz
YWxTdGF0ZSogbV90cmF2ZXJzYWxTdGF0ZTsKICAgICBmbG9hdCBtX2Rlc2lyZWRMZW5ndGg7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NyArMjMsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCiAK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsNyArMzgsNyBAQCBTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2YWx1ZUFz
U3RyaW5nKCkgY29uCiAgICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgIik7IC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2UgdXNlIGNvbW1hcyB0byBzZXBlcmF0ZT8K
IAotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCA9IGF0KGkpOworICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCA9IGF0KGkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZChT
dHJpbmc6Om51bWJlcihwb2ludC54KCkpICsgJyAnICsgU3RyaW5nOjpudW1iZXIocG9pbnQueSgp
KSk7CiAgICAgfQogCkBAIC01Niw5ICs1Niw5IEBAIGJvb2wgU1ZHUG9pbnRMaXN0OjpjcmVhdGVB
bmltYXRlZChjb25zdCAKICAgICBpZiAoIWl0ZW1Db3VudCB8fCBpdGVtQ291bnQgIT0gdG9MaXN0
LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7
IG4gPCBpdGVtQ291bnQ7ICsrbikgewotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBmcm9tID0g
ZnJvbUxpc3QuYXQobik7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHRvID0gdG9MaXN0LmF0
KG4pOwotICAgICAgICBGbG9hdFBvaW50IHNlZ21lbnQgPSBGbG9hdFBvaW50KGFkanVzdEFuaW1h
dGVkVmFsdWUoZnJvbS54KCksIHRvLngoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBmcm9tID0gZnJvbUxpc3QuYXQobik7CisgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHRvID0gdG9MaXN0LmF0KG4pOworICAgICAgICBHcmFwaGljc1BvaW50IHNlZ21lbnQg
PSBHcmFwaGljc1BvaW50KGFkanVzdEFuaW1hdGVkVmFsdWUoZnJvbS54KCksIHRvLngoKSwgcHJv
Z3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdEFu
aW1hdGVkVmFsdWUoZnJvbS55KCksIHRvLnkoKSwgcHJvZ3Jlc3MpKTsKICAgICAgICAgcmVzdWx0
TGlzdC5hcHBlbmQoc2VnbWVudCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BvaW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExp
c3QuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIAotY2xhc3MgU1ZH
UG9pbnRMaXN0IDogcHVibGljIFZlY3RvcjxGbG9hdFBvaW50PiB7CitjbGFzcyBTVkdQb2ludExp
c3QgOiBwdWJsaWMgVmVjdG9yPEdyYXBoaWNzUG9pbnQ+IHsKIHB1YmxpYzoKICAgICBTVkdQb2lu
dExpc3QoKSB7IH0KIApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZTw+CiBzdHJ1
Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0PiB7CiAgICAgc3RhdGljIFNWR1BvaW50
TGlzdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBTVkdQb2ludExpc3QoKTsgfQotICAgIHR5cGVk
ZWYgRmxvYXRQb2ludCBMaXN0SXRlbVR5cGU7CisgICAgdHlwZWRlZiBHcmFwaGljc1BvaW50IExp
c3RJdGVtVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3
IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKIAogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xNTYsOSArMTU2LDkgQEAgYmFpbE91
dDoKICAgICByZXR1cm4gYXNwZWN0UmF0aW87CiB9CiAKLXZvaWQgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6dHJhbnNmb3JtUmVjdChGbG9hdFJlY3QmIGRlc3RSZWN0LCBGbG9hdFJlY3QmIHNyY1Jl
Y3QpCit2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJlY3QoR3JhcGhpY3NS
ZWN0JiBkZXN0UmVjdCwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KQogewotICAgIEZsb2F0U2l6ZSBp
bWFnZVNpemUgPSBzcmNSZWN0LnNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgaW1hZ2VTaXplID0g
c3JjUmVjdC5zaXplKCk7CiAgICAgZmxvYXQgb3JpZ0Rlc3RXaWR0aCA9IGRlc3RSZWN0LndpZHRo
KCk7CiAgICAgZmxvYXQgb3JpZ0Rlc3RIZWlnaHQgPSBkZXN0UmVjdC5oZWlnaHQoKTsKICAgICBz
d2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNz
IEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIAogY2xhc3MgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbyB7CiBwdWJsaWM6CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dE1lZXRPclNsaWNlKHVuc2lnbmVkIHNob3J0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdW5zaWdu
ZWQgc2hvcnQgbWVldE9yU2xpY2UoKSBjb25zdCB7IHJldHVybiBtX21lZXRPclNsaWNlOyB9CiAK
LSAgICB2b2lkIHRyYW5zZm9ybVJlY3QoRmxvYXRSZWN0JiBkZXN0UmVjdCwgRmxvYXRSZWN0JiBz
cmNSZWN0KTsKKyAgICB2b2lkIHRyYW5zZm9ybVJlY3QoR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oZmxv
YXQgbG9naWNYLCBmbG9hdCBsb2dpY1ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCBsb2dpY1dpZHRoLCBmbG9hdCBsb2dpY0hlaWdodCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTIyMCwxNiArMjIwLDE2IEBAIGJvb2wgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5k
UmFkaXVzKGNvbnN0IFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywgRmxvYXRQ
b2ludCYgZm9jYWxQb2ludCwgRmxvYXRQb2ludCYgY2VudGVyUG9pbnQsIGZsb2F0JiByYWRpdXMp
Cit2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2lu
dHNBbmRSYWRpdXMoY29uc3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBH
cmFwaGljc1BvaW50JiBmb2NhbFBvaW50LCBHcmFwaGljc1BvaW50JiBjZW50ZXJQb2ludCwgZmxv
YXQmIHJhZGl1cykKIHsKICAgICAvLyBEZXRlcm1pbmUgZ3JhZGllbnQgZm9jYWwvY2VudGVyIHBv
aW50cyBhbmQgcmFkaXVzCiAgICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpIHsK
LSAgICAgICAgZm9jYWxQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKLSAgICAg
ICAgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZUFzUGVyY2Vu
dGFnZSgpLCBhdHRyaWJ1dGVzLmN5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CisgICAgICAgIGZv
Y2FsUG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMuZngoKS52YWx1ZUFzUGVyY2VudGFn
ZSgpLCBhdHRyaWJ1dGVzLmZ5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CisgICAgICAgIGNlbnRl
clBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWVBc1BlcmNlbnRhZ2Uo
KSwgYXR0cmlidXRlcy5jeSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwogICAgICAgICByYWRpdXMg
PSBhdHRyaWJ1dGVzLnIoKS52YWx1ZUFzUGVyY2VudGFnZSgpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGZvY2FsUG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMuZngoKS52YWx1ZSh0aGlzKSwg
YXR0cmlidXRlcy5meSgpLnZhbHVlKHRoaXMpKTsKLSAgICAgICAgY2VudGVyUG9pbnQgPSBGbG9h
dFBvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZSh0aGlzKSwgYXR0cmlidXRlcy5jeSgpLnZhbHVl
KHRoaXMpKTsKKyAgICAgICAgZm9jYWxQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy5m
eCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLmZ5KCkudmFsdWUodGhpcykpOworICAgICAgICBj
ZW50ZXJQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVlKHRoaXMpLCBh
dHRyaWJ1dGVzLmN5KCkudmFsdWUodGhpcykpOwogICAgICAgICByYWRpdXMgPSBhdHRyaWJ1dGVz
LnIoKS52YWx1ZSh0aGlzKTsKICAgICB9CiAKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlCiAKICAgICAgICAgZGVsdGFYID0gY29zZihh
bmdsZSkgKiByYWRpdXNNYXg7CiAgICAgICAgIGRlbHRhWSA9IHNpbmYoYW5nbGUpICogcmFkaXVz
TWF4OwotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChkZWx0YVggKyBjZW50ZXJQb2lu
dC54KCksIGRlbHRhWSArIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIGZvY2FsUG9pbnQgPSBH
cmFwaGljc1BvaW50KGRlbHRhWCArIGNlbnRlclBvaW50LngoKSwgZGVsdGFZICsgY2VudGVyUG9p
bnQueSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIGJv
b2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMmKTsK
LSAgICB2b2lkIGNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5kUmFkaXVzKGNvbnN0IFJhZGlh
bEdyYWRpZW50QXR0cmlidXRlcyYsIEZsb2F0UG9pbnQmIGZvY2FsUG9pbnQsIEZsb2F0UG9pbnQm
IGNlbnRlclBvaW50LCBmbG9hdCYgcmFkaXVzKTsKKyAgICB2b2lkIGNhbGN1bGF0ZUZvY2FsQ2Vu
dGVyUG9pbnRzQW5kUmFkaXVzKGNvbnN0IFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyYsIEdyYXBo
aWNzUG9pbnQmIGZvY2FsUG9pbnQsIEdyYXBoaWNzUG9pbnQmIGNlbnRlclBvaW50LCBmbG9hdCYg
cmFkaXVzKTsKIAogcHJpdmF0ZToKICAgICBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTYgKzIxLDE2IEBACiAjZGVmaW5lIFNWR1JlY3RfaAogCiAjaWYgRU5BQkxFKFNW
RykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNp
bmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU1ZH
UHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0PiB7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBpbml0aWFs
VmFsdWUoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJp
bmcoY29uc3QgRmxvYXRSZWN0JiB0eXBlKQorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRzPEdyYXBo
aWNzUmVjdD4geworICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgaW5pdGlhbFZhbHVlKCkgeyByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEdy
YXBoaWNzUmVjdCYgdHlwZSkKICAgICB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIodHlwZS54KCkpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTgsNyArMTk4LDcgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYQog
ICAgIGZsb2F0IHhWYWx1ZSA9IHgoKS52YWx1ZSh0aGlzKTsKICAgICBmbG9hdCB5VmFsdWUgPSB5
KCkudmFsdWUodGhpcyk7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCh4VmFsdWUsIHlWYWx1ZSwgd2lk
dGhWYWx1ZSwgaGVpZ2h0VmFsdWUpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHhWYWx1ZSwgeVZh
bHVlLCB3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZSk7CiAKICAgICBib29sIGhhc1J4ID0gaGFzQXR0
cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpOwogICAgIGJvb2wgaGFzUnkgPSBoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnJ5QXR0cik7CkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBTVkdSZWN0RWxlbWVu
dDo6dG9QYXRoRGF0YShQYXRoJiBwYQogICAgICAgICAgICAgcnhWYWx1ZSA9IHJ5VmFsdWU7CiAg
ICAgICAgIGVsc2UgaWYgKCFoYXNSeSkKICAgICAgICAgICAgIHJ5VmFsdWUgPSByeFZhbHVlOwot
ICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyeFZhbHVlLCByeVZh
bHVlKSk7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgR3JhcGhpY3NTaXplKHJ4
VmFsdWUsIHJ5VmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTE0MiwxMyArMTQyLDEz
IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFN0eWxlVHlwZSgKICAgICBzZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmNvbnRlbnRTdHlsZVR5cGVBdHRyLCB0eXBlKTsKIH0KIAotRmxvYXRS
ZWN0IFNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTVkdF
bGVtZW50Ojp2aWV3cG9ydCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHZpZXdSZWN0YW5nbGU7
CisgICAgR3JhcGhpY3NSZWN0IHZpZXdSZWN0YW5nbGU7CiAgICAgaWYgKCFpc091dGVybW9zdFNW
RygpKQotICAgICAgICB2aWV3UmVjdGFuZ2xlLnNldExvY2F0aW9uKEZsb2F0UG9pbnQoeCgpLnZh
bHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKKyAgICAgICAgdmlld1JlY3RhbmdsZS5zZXRM
b2NhdGlvbihHcmFwaGljc1BvaW50KHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7
CiAKLSAgICB2aWV3UmVjdGFuZ2xlLnNldFNpemUoRmxvYXRTaXplKHdpZHRoKCkudmFsdWUodGhp
cyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKSk7ICAgIAorICAgIHZpZXdSZWN0YW5nbGUuc2V0U2l6
ZShHcmFwaGljc1NpemUod2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykp
KTsgICAgCiAgICAgcmV0dXJuIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld1JlY3RhbmdsZS53
aWR0aCgpLCB2aWV3UmVjdGFuZ2xlLmhlaWdodCgpKS5tYXBSZWN0KHZpZXdSZWN0YW5nbGUpOwog
fQogCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50U2Nh
bGUoZmxvYQogICAgIGZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihzY2FsZSk7CiB9CiAKLXZvaWQg
U1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50JiB0cmFu
c2xhdGlvbikKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZShjb25zdCBH
cmFwaGljc1BvaW50JiB0cmFuc2xhdGlvbikKIHsKICAgICBtX3RyYW5zbGF0aW9uID0gdHJhbnNs
YXRpb247CiAgICAgdXBkYXRlQ3VycmVudFRyYW5zbGF0ZSgpOwpAQCAtMzg5LDE5ICszODksMTkg
QEAgdm9pZCBTVkdTVkdFbGVtZW50Ojpmb3JjZVJlZHJhdygpCiAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAotTm9kZUxpc3QqIFNWR1NWR0VsZW1lbnQ6Omdl
dEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCopCitOb2RlTGlz
dCogU1ZHU1ZHRWxlbWVudDo6Z2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBHcmFwaGljc1JlY3Qm
LCBTVkdFbGVtZW50KikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUgYnVnIDEx
Mjc0KQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0RW5j
bG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KikKK05vZGVMaXN0KiBTVkdT
VkdFbGVtZW50OjpnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0VsZW1l
bnQqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzQpCiAgICAg
cmV0dXJuIDA7CiB9CiAKLWJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1ZH
RWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hl
Y2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICAvLyBUT0RPIDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAgICAgLy8g
RklYTUU6IFdoeSBpcyBlbGVtZW50IGlnbm9yZWQ/PwpAQCAtNDA5LDcgKzQwOSw3IEBAIGJvb2wg
U1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1YKICAgICByZXR1cm4gcmVjdC5pbnRl
cnNlY3RzKGdldEJCb3goKSk7CiB9CiAKLWJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tFbmNsb3N1
cmUoU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgU1ZHU1ZHRWxlbWVu
dDo6Y2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkK
IHsKICAgICAvLyBUT0RPIDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAgICAg
Ly8gRklYTUU6IFdoeSBpcyBlbGVtZW50IGlnbm9yZWQ/PwpAQCAtNDM4LDkgKzQzOCw5IEBAIFNW
R0FuZ2xlIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0FuZ2xlKCkKICAgICByZXR1cm4gU1ZHQW5n
bGUoKTsKIH0KIAotRmxvYXRQb2ludCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdQb2ludCgpCitH
cmFwaGljc1BvaW50IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1BvaW50KCkKIHsKLSAgICByZXR1
cm4gRmxvYXRQb2ludCgpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiB9CiAKIFNWR01h
dHJpeCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQpAQCAtNDQ4LDkgKzQ0OCw5IEBA
IFNWR01hdHJpeCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgKICAgICByZXR1cm4gU1ZH
TWF0cml4KCk7CiB9CiAKLUZsb2F0UmVjdCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdSZWN0KCkK
K0dyYXBoaWNzUmVjdCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdSZWN0KCkKIHsKLSAgICByZXR1
cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBTVkdUcmFu
c2Zvcm0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtKCkKQEAgLTQ3Niw3ICs0NzYs
NyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6bG9jYWxDb29yCiAgICAgICAgIGlm
IChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewogICAgICAgICAg
ICAgLy8gVHJhbnNsYXRlIGluIG91ciBDU1MgcGFyZW50IGNvb3JkaW5hdGUgc3BhY2UKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBDU1MgdHJh
bnNmb3Jtcy4KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYXRpb24gPSByZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgR3Jh
cGhpY3NQb2ludCBsb2NhdGlvbiA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQ
b2ludCgpLCBmYWxzZSwgdHJ1ZSk7CiAKICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwgaGVyZSEg
bG9jYWxUb0Fic29sdXRlKCkgaW5jbHVkZXMgdGhlIHgveSBvZmZzZXQgY29taW5nIGZyb20gdGhl
IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oKSwgYmVjYXVzZQogICAgICAgICAgICAgLy8gUmVuZGVy
U1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIChjYWxsZWQgdGhyb3VnaCBtYXBM
b2NhbFRvQ29udGFpbmVyKCksIGNhbGxlZCBmcm9tIGxvY2FsVG9BYnNvbHV0ZSgpKQpAQCAtNTY2
LDEyICs1NjYsMTIgQEAgYm9vbCBTVkdTVkdFbGVtZW50Ojppc091dGVybW9zdFNWRygpIGNvbgog
ICAgIHJldHVybiAhcGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKTsKIH0KIAotRmxvYXRSZWN0
IFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRWaWV3Qm94UmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3Qg
U1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3QKIHsKICAgICBpZiAodXNl
Q3VycmVudFZpZXcoKSkgewogICAgICAgICBpZiAoU1ZHVmlld1NwZWMqIHZpZXcgPSBjdXJyZW50
VmlldygpKSAvLyB3aGF0IGlmIHdlIHNob3VsZCB1c2UgaXQgYnV0IGl0IGlzIG5vdCBzZXQ/CiAg
ICAgICAgICAgICByZXR1cm4gdmlldy0+dmlld0JveCgpOwotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKICAgICB9CiAKICAgICByZXR1
cm4gdmlld0JveCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Y29udGVudFN0eWxlVHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVudFN0eWxlVHlwZShj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOwogCi0gICAgRmxvYXRSZWN0IHZpZXdwb3J0KCkgY29u
c3Q7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdwb3J0KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENv
bnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkgeyBtX2NvbnRhaW5lclNp
emUgPSBjb250YWluZXJTaXplOyBtX2hhc1NldENvbnRhaW5lclNpemUgPSB0cnVlOyB9CiAgICAg
SW50U2l6ZSBjb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJTaXplOyB9
CkBAIC03OCwxMyArNzgsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlQ3VycmVudFZpZXco
Ym9vbCBjdXJyZW50Vmlldyk7CiAKICAgICBTVkdWaWV3U3BlYyogY3VycmVudFZpZXcoKSBjb25z
dDsKLSAgICBGbG9hdFJlY3QgY3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGN1cnJlbnRWaWV3Qm94UmVjdCgpIGNvbnN0OwogCiAgICAgZmxvYXQgY3VycmVudFNj
YWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDdXJyZW50U2NhbGUoZmxvYXQgc2NhbGUpOwogCi0g
ICAgRmxvYXRQb2ludCYgY3VycmVudFRyYW5zbGF0ZSgpIHsgcmV0dXJuIG1fdHJhbnNsYXRpb247
IH0KLSAgICB2b2lkIHNldEN1cnJlbnRUcmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYpOworICAg
IEdyYXBoaWNzUG9pbnQmIGN1cnJlbnRUcmFuc2xhdGUoKSB7IHJldHVybiBtX3RyYW5zbGF0aW9u
OyB9CisgICAgdm9pZCBzZXRDdXJyZW50VHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsK
IAogICAgIC8vIE9ubHkgdXNlZCBmcm9tIHRoZSBiaW5kaW5ncy4KICAgICB2b2lkIHVwZGF0ZUN1
cnJlbnRUcmFuc2xhdGUoKTsKQEAgLTEwMywxOCArMTAzLDE4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHVuc3VzcGVuZFJlZHJhd0FsbCgpOwogICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKIAotICAgIE5v
ZGVMaXN0KiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQq
IHJlZmVyZW5jZUVsZW1lbnQpOwotICAgIE5vZGVMaXN0KiBnZXRFbmNsb3N1cmVMaXN0KGNvbnN0
IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOwotICAgIGJvb2wgY2hl
Y2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIGJvb2wg
Y2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIE5vZGVM
aXN0KiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0VsZW1lbnQq
IHJlZmVyZW5jZUVsZW1lbnQpOworICAgIE5vZGVMaXN0KiBnZXRFbmNsb3N1cmVMaXN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOworICAgIGJvb2wg
Y2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAg
IGJvb2wgY2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOwog
ICAgIHZvaWQgZGVzZWxlY3RBbGwoKTsKIAogICAgIHN0YXRpYyBmbG9hdCBjcmVhdGVTVkdOdW1i
ZXIoKTsKICAgICBzdGF0aWMgU1ZHTGVuZ3RoIGNyZWF0ZVNWR0xlbmd0aCgpOwogICAgIHN0YXRp
YyBTVkdBbmdsZSBjcmVhdGVTVkdBbmdsZSgpOwotICAgIHN0YXRpYyBGbG9hdFBvaW50IGNyZWF0
ZVNWR1BvaW50KCk7CisgICAgc3RhdGljIEdyYXBoaWNzUG9pbnQgY3JlYXRlU1ZHUG9pbnQoKTsK
ICAgICBzdGF0aWMgU1ZHTWF0cml4IGNyZWF0ZVNWR01hdHJpeCgpOwotICAgIHN0YXRpYyBGbG9h
dFJlY3QgY3JlYXRlU1ZHUmVjdCgpOworICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgY3JlYXRlU1ZH
UmVjdCgpOwogICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gY3JlYXRlU1ZHVHJhbnNmb3JtKCk7CiAg
ICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KGNvbnN0
IFNWR01hdHJpeCYpOwogCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV91c2VDdXJyZW50VmlldzsKICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNv
bnRhaW5lcjsKLSAgICBGbG9hdFBvaW50IG1fdHJhbnNsYXRpb247CisgICAgR3JhcGhpY3NQb2lu
dCBtX3RyYW5zbGF0aW9uOwogICAgIG11dGFibGUgT3duUHRyPFNWR1ZpZXdTcGVjPiBtX3ZpZXdT
cGVjOwogICAgIEludFNpemUgbV9jb250YWluZXJTaXplOwogICAgIGJvb2wgbV9oYXNTZXRDb250
YWluZXJTaXplOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgU1ZHRWxlbWVudCogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6ZgogICAgIHJldHVy
biBTVkdMb2NhdGFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KHRoaXMpOwogfQogCi1GbG9h
dFJlY3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0
ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3Ry
YXRlZ3kpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Z2V0QkJveCh0aGlzLCBz
dHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RWaWV3
cG9ydEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0Vmll
d3BvcnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0
eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEdyYXBoaWNzUmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBk
YXRlKSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRh
dGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVw
ZGF0ZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgU1ZHRWxlbWVudCogU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbgogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpmYXJ0aGVzdFZpZXdwb3J0RWxl
bWVudCh0aGlzKTsKIH0KIAotRmxvYXRSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QK
K0dyYXBoaWNzUmVjdCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0QkJveChTdHls
ZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFNWR1RyYW5zZm9ybWFibGU6OmdldEJCb3godGhpcywgc3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVtZW50YWxU
cmFuc2Zvcm0oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVT
dHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NS
ZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0
OwogCiAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVudHMgd2hp
Y2ggcmVuZGVyIGFzIHBhdGhzCiAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0aCYpIGNv
bnN0IHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwzNyArMTMwLDM3IEBAIGZsb2F0
IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW4KICAgICByZXR1cm4gU1ZHVGV4dFF1
ZXJ5KHJlbmRlcmVyKCkpLnN1YlN0cmluZ0xlbmd0aChjaGFybnVtLCBuY2hhcnMpOwogfQogCi1G
bG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1
bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0dyYXBoaWNzUG9pbnQg
U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNo
YXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgaWYgKGNoYXJudW0gPiBn
ZXROdW1iZXJPZkNoYXJzKCkpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnN0YXJ0UG9zaXRp
b25PZkNoYXJhY3RlcihjaGFybnVtKTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OmdldEVuZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEVu
ZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25z
dAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCiAgICAgaWYgKGNoYXJudW0gPiBnZXROdW1iZXJPZkNoYXJzKCkpIHsKICAgICAgICAg
ZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsKICAgICB9CiAKICAgICByZXR1cm4gU1ZHVGV4dFF1
ZXJ5KHJlbmRlcmVyKCkpLmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXIoY2hhcm51bSk7CiB9CiAKLUZs
b2F0UmVjdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBj
aGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZDaGFycygp
KSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogICAgIH0KIAogICAgIHJldHVy
biBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuZXh0ZW50T2ZDaGFyYWN0ZXIoY2hhcm51bSk7CkBA
IC0xNzgsNyArMTc4LDcgQEAgZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRSb3RhdGlv
bgogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkucm90YXRpb25PZkNoYXJhY3Rl
cihjaGFybnVtKTsKIH0KIAotaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Q2hhck51bUF0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitpbnQgU1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpnZXRDaGFyTnVtQXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKICAgICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmNoYXJhY3Rl
ck51bWJlckF0UG9zaXRpb24ocG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDExICs4Miwx
MSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZ2V0TnVtYmVyT2ZDaGFycygpIGNvbnN0OwogICAg
IGZsb2F0IGdldENvbXB1dGVkVGV4dExlbmd0aCgpIGNvbnN0OwogICAgIGZsb2F0IGdldFN1YlN0
cmluZ0xlbmd0aCh1bnNpZ25lZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGdldFN0YXJ0UG9zaXRpb25PZkNoYXIodW5zaWdu
ZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZ2V0RW5k
UG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owot
ICAgIEZsb2F0UmVjdCBnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9u
Q29kZSYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1
bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2lu
dCBnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVt
LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgZmxvYXQgZ2V0Um90YXRpb25PZkNoYXIodW5z
aWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIGludCBnZXRDaGFyTnVt
QXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgaW50IGdldENoYXJOdW1B
dFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICB2b2lkIHNlbGVjdFN1
YlN0cmluZyh1bnNpZ25lZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKIAogICAgIHN0YXRpYyBTVkdUZXh0Q29udGVudEVsZW1lbnQqIGVsZW1lbnRGcm9t
UmVuZGVyZXIoUmVuZGVyT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAiU1ZHRWxl
bWVudEluc3RhbmNlLmgiCkBAIC05Myw3ICs5Myw3IEBAIFNWR0VsZW1lbnQqIFNWR1RleHRFbGVt
ZW50OjpmYXJ0aGVzdFZpZXcKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6ZmFydGhlc3RW
aWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdUZXh0RWxlbWVudDo6Z2V0
QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitHcmFw
aGljc1JlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHls
ZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpn
ZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9
IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGdldEJC
b3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dT
dHlsZVVwZGF0ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVu
Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKICAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
OCArMjQsOCBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUu
aCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNzgsMzEgKzc4LDMxIEBAIHZvaWQgU1ZHVHJh
bnNmb3JtOjpzZXRUcmFuc2xhdGUoZmxvYXQgdHgKICAgICBtX21hdHJpeC50cmFuc2xhdGUodHgs
IHR5KTsKIH0KIAotRmxvYXRQb2ludCBTVkdUcmFuc2Zvcm06OnRyYW5zbGF0ZSgpIGNvbnN0CitH
cmFwaGljc1BvaW50IFNWR1RyYW5zZm9ybTo6dHJhbnNsYXRlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1fbWF0cml4LmUoKSwgbV9tYXRyaXguZigp
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDo6bmFycm93UHJlY2lzaW9uKG1fbWF0cml4LmUo
KSwgbV9tYXRyaXguZigpKTsKIH0KIAogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNjYWxlKGZsb2F0
IHN4LCBmbG9hdCBzeSkKIHsKICAgICBtX3R5cGUgPSBTVkdfVFJBTlNGT1JNX1NDQUxFOwogICAg
IG1fYW5nbGUgPSAwOwotICAgIG1fY2VudGVyID0gRmxvYXRQb2ludCgpOworICAgIG1fY2VudGVy
ID0gR3JhcGhpY3NQb2ludCgpOwogCiAgICAgbV9tYXRyaXgubWFrZUlkZW50aXR5KCk7CiAgICAg
bV9tYXRyaXguc2NhbGVOb25Vbmlmb3JtKHN4LCBzeSk7CiB9CiAKLUZsb2F0U2l6ZSBTVkdUcmFu
c2Zvcm06OnNjYWxlKCkgY29uc3QKK0dyYXBoaWNzU2l6ZSBTVkdUcmFuc2Zvcm06OnNjYWxlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24obV9tYXRyaXgu
YSgpLCBtX21hdHJpeC5kKCkpOworICAgIHJldHVybiBHcmFwaGljc1NpemU6Om5hcnJvd1ByZWNp
c2lvbihtX21hdHJpeC5hKCksIG1fbWF0cml4LmQoKSk7CiB9CiAKIHZvaWQgU1ZHVHJhbnNmb3Jt
OjpzZXRSb3RhdGUoZmxvYXQgYW5nbGUsIGZsb2F0IGN4LCBmbG9hdCBjeSkKIHsKICAgICBtX3R5
cGUgPSBTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBtX2FuZ2xlID0gYW5nbGU7Ci0gICAgbV9j
ZW50ZXIgPSBGbG9hdFBvaW50KGN4LCBjeSk7CisgICAgbV9jZW50ZXIgPSBHcmFwaGljc1BvaW50
KGN4LCBjeSk7CiAKICAgICAvLyBUT0RPOiB0b1N0cmluZygpIGltcGxlbWVudGF0aW9uLCB3aGlj
aCBjYW4gc2hvdyBjeCwgY3kgKG5lZWQgdG8gYmUgc3RvcmVkPykKICAgICBtX21hdHJpeC5tYWtl
SWRlbnRpdHkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiwxMiArMjIsMTIgQEAKICNkZWZpbmUgU1ZHVHJhbnNmb3JtX2gKIAogI2lmIEVOQUJM
RShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQu
aCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1NpemU7CiAKIGNsYXNzIFNWR1RyYW5zZm9ybSB7
CiBwdWJsaWM6CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZU1hdHJp
eCgpOwogCiAgICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0gICAg
RmxvYXRQb2ludCByb3RhdGlvbkNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2VudGVyOyB9Cisg
ICAgR3JhcGhpY3NQb2ludCByb3RhdGlvbkNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2VudGVy
OyB9CiAKICAgICB2b2lkIHNldE1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2
b2lkIHNldFRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpOwpAQCAtNjIsOCArNjIsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTa2V3WShmbG9hdCBhbmdsZSk7CiAgICAgCiAgICAgLy8gSW50
ZXJuYWwgdXNlIG9ubHkgKGFuaW1hdGlvbiBzeXN0ZW0pCi0gICAgRmxvYXRQb2ludCB0cmFuc2xh
dGUoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgc2NhbGUoKSBjb25zdDsKKyAgICBHcmFwaGljc1Bv
aW50IHRyYW5zbGF0ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZSgpIGNvbnN0Owog
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IFNWR19UUkFOU0ZP
Uk1fVU5LTk9XTjsgfQogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CkBAIC03Myw3
ICs3Myw3IEBAIHByaXZhdGU6CiAKICAgICBTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsKICAgICBm
bG9hdCBtX2FuZ2xlOwotICAgIEZsb2F0UG9pbnQgbV9jZW50ZXI7CisgICAgR3JhcGhpY3NQb2lu
dCBtX2NlbnRlcjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9tYXRyaXg7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybURpc3Rh
bmNlLmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgog
CiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNjIsMTQgKzYyLDE0IEBAIFNWR1RyYW5zZm9ybURpc3Rh
bmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW4KICAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gYmUgYWJs
ZSB0byBzdWJ0cmFjdCB0byBtYXRyaWNlcwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7Ci0gICAgICAgIEZsb2F0U2l6ZSBjZW50
ZXJEaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCkgLSBmcm9tU1ZHVHJh
bnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBjZW50ZXJEaXN0
YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCkgLSBmcm9tU1ZHVHJhbnNmb3Jt
LnJvdGF0aW9uQ2VudGVyKCk7CiAgICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9ybS5hbmds
ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS5hbmdsZSgpOwogICAgICAgICBtX2N4ID0gY2VudGVyRGlz
dGFuY2Uud2lkdGgoKTsKICAgICAgICAgbV9jeSA9IGNlbnRlckRpc3RhbmNlLmhlaWdodCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNG
T1JNX1RSQU5TTEFURTogewotICAgICAgICBGbG9hdFNpemUgdHJhbnNsYXRpb25EaXN0YW5jZSA9
IHRvU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFuc2xhdGUo
KTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHRyYW5zbGF0aW9uRGlzdGFuY2UgPSB0b1NWR1RyYW5z
Zm9ybS50cmFuc2xhdGUoKSAtIGZyb21TVkdUcmFuc2Zvcm0udHJhbnNsYXRlKCk7CiAgICAgICAg
IG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0cmFuc2xhdGlvbkRpc3RhbmNlLndpZHRoKCksIHRyYW5z
bGF0aW9uRGlzdGFuY2UuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTM1
LDcgKzEzNSw3IEBAIFNWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRkU1YKICAg
ICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fU0NBTEU6IHsKLSAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gZmlyc3Quc2Nh
bGUoKSArIHNlY29uZC5zY2FsZSgpOworICAgICAgICBHcmFwaGljc1NpemUgc2NhbGUgPSBmaXJz
dC5zY2FsZSgpICsgc2Vjb25kLnNjYWxlKCk7CiAgICAgICAgIHRyYW5zZm9ybS5zZXRTY2FsZShz
Y2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07
CiAgICAgfQpAQCAtMjA0LDIwICsyMDQsMjAgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURp
c3RhbmNlOjphZGRUbwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX01BVFJJ
WDoKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0ubWF0cml4KCkgKiBtX3Ry
YW5zZm9ybSk7CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRF
OiB7Ci0gICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRpb24gPSB0cmFuc2Zvcm0udHJhbnNsYXRl
KCk7Ci0gICAgICAgIHRyYW5zbGF0aW9uICs9IEZsb2F0U2l6ZTo6bmFycm93UHJlY2lzaW9uKG1f
dHJhbnNmb3JtLmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCB0
cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKKyAgICAgICAgdHJhbnNsYXRpb24g
Kz0gR3JhcGhpY3NTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zvcm0uZSgpLCBtX3RyYW5z
Zm9ybS5mKCkpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0VHJhbnNsYXRlKHRyYW5zbGF0aW9u
LngoKSwgdHJhbnNsYXRpb24ueSgpKTsKICAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9ybTsKICAg
ICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsKLSAgICAg
ICAgRmxvYXRTaXplIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlKCk7Ci0gICAgICAgIHNjYWxlICs9
IEZsb2F0U2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fdHJhbnNmb3JtLmEoKSwgbV90cmFuc2Zvcm0u
ZCgpKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlKCk7Cisg
ICAgICAgIHNjYWxlICs9IEdyYXBoaWNzU2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fdHJhbnNmb3Jt
LmEoKSwgbV90cmFuc2Zvcm0uZCgpKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9y
bTsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7
CiAgICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9uIGlzIGNh
bGN1bGF0ZWQgY29ycmVjdGx5IGhlcmUKLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSB0cmFu
c2Zvcm0ucm90YXRpb25DZW50ZXIoKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBjZW50ZXIgPSB0
cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFJvdGF0
ZSh0cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2VudGVyLngoKSArIG1fY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2VudGVyLnkoKSArIG1fY3kpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNw
cAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6
OnRvQ2xpcFBhdGgoUGF0aCYgcGF0CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdF
eHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJOb3QgYWxsb3dlZCB0byB1c2UgaW5kaXJlY3QgcmVm
ZXJlbmNlIGluIDxjbGlwLXBhdGg+Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihuKS0+dG9DbGlwUGF0aChw
YXRoKTsKLSAgICAgICAgICAgIHBhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSh4KCkudmFsdWUodGhp
cyksIHkoKS52YWx1ZSh0aGlzKSkpOworICAgICAgICAgICAgcGF0aC50cmFuc2xhdGUoR3JhcGhp
Y3NTaXplKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7CiAgICAgICAgICAgICBw
YXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDcgKzUzLDcgQEAgdm9pZCBTVkdWaWV3U3BlYzo6c2V0VHJhbnNmb3JtKGNvbnN0IFN0cgogCiB2
b2lkIFNWR1ZpZXdTcGVjOjpzZXRWaWV3Qm94U3RyaW5nKGNvbnN0IFN0cmluZyYgdmlld0JveFN0
cikKIHsKLSAgICBGbG9hdFJlY3Qgdmlld0JveDsKKyAgICBHcmFwaGljc1JlY3Qgdmlld0JveDsK
ICAgICBjb25zdCBVQ2hhciogYyA9IHZpZXdCb3hTdHIuY2hhcmFjdGVycygpOwogICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBjICsgdmlld0JveFN0ci5sZW5ndGgoKTsKICAgICBpZiAoIXBhcnNlVmll
d0JveChtX2NvbnRleHRFbGVtZW50LT5kb2N1bWVudCgpLCBjLCBlbmQsIHZpZXdCb3gsIGZhbHNl
KSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdTcGVjKGNv
bnN0IFN0CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwgKmN1cnJW
aWV3U3BlYyAhPSAnKCcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgdmll
d0JveDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3Qgdmlld0JveDsKICAgICAgICAgICAg
ICAgICBpZiAoIXBhcnNlVmlld0JveChtX2NvbnRleHRFbGVtZW50LT5kb2N1bWVudCgpLCBjdXJy
Vmlld1NwZWMsIGVuZCwgdmlld0JveCwgZmFsc2UpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3Qm94KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBAIFNWR1pvb21FdmVudDo6U1ZHWm9vbUV2ZW50KCkKIHsKIH0KIAotRmxvYXRS
ZWN0IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAorR3JhcGhpY3NSZWN0IFNW
R1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3pvb21S
ZWN0U2NyZWVuOwogfQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIFNWR1pvb21FdmVudDo6c2V0UHJl
dmlvdXNTY2FsZShmbG9hCiAgICAgbV9wcmV2aW91c1NjYWxlID0gc2NhbGU7CiB9CiAKLUZsb2F0
UG9pbnQgU1ZHWm9vbUV2ZW50OjpwcmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0CitHcmFwaGljc1Bv
aW50IFNWR1pvb21FdmVudDo6cHJldmlvdXNUcmFuc2xhdGUoKSBjb25zdAogewogICAgIHJldHVy
biBtX3ByZXZpb3VzVHJhbnNsYXRlOwogfQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFNWR1pvb21F
dmVudDo6c2V0TmV3U2NhbGUoZmxvYXQgc2NhCiAgICAgbV9uZXdTY2FsZSA9IHNjYWxlOwogfQog
Ci1GbG9hdFBvaW50IFNWR1pvb21FdmVudDo6bmV3VHJhbnNsYXRlKCkgY29uc3QKK0dyYXBoaWNz
UG9pbnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSBjb25zdAogewogICAgIHJldHVybiBt
X25ld1RyYW5zbGF0ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIFNWR1pvb21FdmVudF9oCiAjaWYgRU5B
QkxFKFNWRykKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlVJRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzMs
MTcgKzMzLDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdab29tRXZlbnQ+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdab29tRXZlbnQpOyB9CiAKICAgICAv
LyAnU1ZHWm9vbUV2ZW50JyBmdW5jdGlvbnMKLSAgICBGbG9hdFJlY3Qgem9vbVJlY3RTY3JlZW4o
KSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgem9vbVJlY3RTY3JlZW4oKSBjb25zdDsKIAogICAg
IGZsb2F0IHByZXZpb3VzU2NhbGUoKSBjb25zdDsKICAgICB2b2lkIHNldFByZXZpb3VzU2NhbGUo
ZmxvYXQpOwogCi0gICAgRmxvYXRQb2ludCBwcmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0OworICAg
IEdyYXBoaWNzUG9pbnQgcHJldmlvdXNUcmFuc2xhdGUoKSBjb25zdDsKIAogICAgIGZsb2F0IG5l
d1NjYWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXROZXdTY2FsZShmbG9hdCk7CiAKLSAgICBGbG9h
dFBvaW50IG5ld1RyYW5zbGF0ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgbmV3VHJhbnNs
YXRlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHWm9vbUV2ZW50KCk7CkBAIC01MywxMCAr
NTMsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX25ld1NjYWxlOwogICAgIGZsb2F0IG1fcHJl
dmlvdXNTY2FsZTsKIAotICAgIEZsb2F0UmVjdCBtX3pvb21SZWN0U2NyZWVuOworICAgIEdyYXBo
aWNzUmVjdCBtX3pvb21SZWN0U2NyZWVuOwogCi0gICAgRmxvYXRQb2ludCBtX25ld1RyYW5zbGF0
ZTsKLSAgICBGbG9hdFBvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7CisgICAgR3JhcGhpY3NQb2lu
dCBtX25ld1RyYW5zbGF0ZTsKKyAgICBHcmFwaGljc1BvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIK
ICNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTE3Niw3ICsxNzYsNyBAQCBi
b29sIFNWR0ltYWdlOjpoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3RF
bGVtZW50LT5oZWlnaHQoKS51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlOwogfQog
Ci12b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg5LDEyICsx
ODksMTIgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbgogICAgIGlm
IChjb21wb3NpdGVPcCAhPSBDb21wb3NpdGVTb3VyY2VPdmVyKQogICAgICAgICBjb250ZXh0LT5i
ZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlKGRzdFJlY3Qu
d2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVp
Z2h0KCkpOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZShkc3RSZWN0LndpZHRoKCkgLyBzcmNSZWN0
LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKTsKICAgICAKICAg
ICAvLyBXZSBjYW4gb25seSBkcmF3IHRoZSBlbnRpcmUgZnJhbWUsIGNsaXBwZWQgdG8gdGhlIHJl
Y3Qgd2Ugd2FudC4gU28gY29tcHV0ZSB3aGVyZSB0aGUgdG9wIGxlZnQKICAgICAvLyBvZiB0aGUg
aW1hZ2Ugd291bGQgYmUgaWYgd2Ugd2VyZSBkcmF3aW5nIHdpdGhvdXQgY2xpcHBpbmcsIGFuZCB0
cmFuc2xhdGUgYWNjb3JkaW5nbHkuCi0gICAgRmxvYXRTaXplIHRvcExlZnRPZmZzZXQoc3JjUmVj
dC5sb2NhdGlvbigpLngoKSAqIHNjYWxlLndpZHRoKCksIHNyY1JlY3QubG9jYXRpb24oKS55KCkg
KiBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludCBkZXN0T2Zmc2V0ID0gZHN0UmVjdC5s
b2NhdGlvbigpIC0gdG9wTGVmdE9mZnNldDsKKyAgICBHcmFwaGljc1NpemUgdG9wTGVmdE9mZnNl
dChzcmNSZWN0LmxvY2F0aW9uKCkueCgpICogc2NhbGUud2lkdGgoKSwgc3JjUmVjdC5sb2NhdGlv
bigpLnkoKSAqIHNjYWxlLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGRlc3RPZmZzZXQg
PSBkc3RSZWN0LmxvY2F0aW9uKCkgLSB0b3BMZWZ0T2Zmc2V0OwogCiAgICAgY29udGV4dC0+dHJh
bnNsYXRlKGRlc3RPZmZzZXQueCgpLCBkZXN0T2Zmc2V0LnkoKSk7CiAgICAgY29udGV4dC0+c2Nh
bGUoc2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KIAogICAgIFNW
R0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRvUmVj
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGZy
b21SZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgUGFzc1JlZlB0cjxGRUltYWdlPiBGRUlt
YWdlOjpjcmVhdGUoRmlsdAogdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpCiB7CiAgICAgQVNTRVJUKG1faW1hZ2UpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0
UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0KG1fYWJz
b2x1dGVTdWJyZWdpb24pOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0KEdyYXBoaWNzUG9pbnQo
KSwgbV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgcGFpbnRSZWN0KG1fYWJzb2x1
dGVTdWJyZWdpb24pOwogICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBh
aW50UmVjdCwgc3JjUmVjdCk7CiAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0
KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0
KSk7CkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgRkVJbWFnZTo6YXBwbHkoKQogICAgIGlmICghcmVz
dWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0
UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV9hYnNv
bHV0ZVN1YnJlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3QoR3JhcGhpY3NQb2ludCgp
LCBtX2ltYWdlLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBkZXN0UmVjdChtX2Fic29sdXRl
U3VicmVnaW9uKTsKICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0
UmVjdCwgc3JjUmVjdCk7CiAKICAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQ
YWludFJlY3QoKS5sb2NhdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgRkVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFSW1hZ2U+IGNyZWF0ZShGaWx0ZXIqLCBQ
YXNzUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpOwogCi0gICAg
dm9pZCBzZXRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU3VicmVn
aW9uKSB7IG1fYWJzb2x1dGVTdWJyZWdpb24gPSBhYnNvbHV0ZVN1YnJlZ2lvbjsgfQorICAgIHZv
aWQgc2V0QWJzb2x1dGVTdWJyZWdpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBhYnNvbHV0ZVN1YnJl
Z2lvbikgeyBtX2Fic29sdXRlU3VicmVnaW9uID0gYWJzb2x1dGVTdWJyZWdpb247IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBhcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CkBAIC01MSw3
ICs1MSw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbyBtX3ByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgRmxvYXRSZWN0
IG1fYWJzb2x1dGVTdWJyZWdpb247CisgICAgR3JhcGhpY3NSZWN0IG1fYWJzb2x1dGVTdWJyZWdp
b247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJz
b2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBHcmFwaGljc1JlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBjb25zdCBHcmFwaGljc1JlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94
TW9kZSkKICAgICA6IEZpbHRlcigpCiAgICAgLCBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRl
VHJhbnNmb3JtKQogICAgICwgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24oYWJzb2x1dGVT
b3VyY2VEcmF3aW5nUmVnaW9uKQpAQCAtNTAsNyArNTAsNyBAQCBmbG9hdCBTVkdGaWx0ZXI6OmFw
cGx5VmVydGljYWxTY2FsZShmbG9hCiAgICAgcmV0dXJuIEZpbHRlcjo6YXBwbHlWZXJ0aWNhbFNj
YWxlKHZhbHVlKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uaGVpZ2h0KCkgLyBtX2ZpbHRlclJl
Z2lvbi5oZWlnaHQoKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3Jl
YXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RC
Qm94TW9kZSkKK1Bhc3NSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGFi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRCb3Vu
ZGluZ0JveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJv
eE1vZGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFu
c2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZp
bHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNSwzMCArMzUsMzAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBib29sKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IGNy
ZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBH
cmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBib29sKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJCb3hN
b2RlOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBmaWx0
ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CiAKLSAg
ICB2aXJ0dWFsIEZsb2F0UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybS5pbnZl
cnNlKCkubWFwUG9pbnQocG9pbnQpOyB9Ci0gICAgRmxvYXRSZWN0IG1hcExvY2FsUmVjdFRvQWJz
b2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0
ZVRyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1BvaW50IG1h
cEFic29sdXRlUG9pbnRUb0xvY2FsUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNv
bnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50
KTsgfQorICAgIEdyYXBoaWNzUmVjdCBtYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm0ubWFw
UmVjdChyZWN0KTsgfQogCiAgICAgdmlydHVhbCBmbG9hdCBhcHBseUhvcml6b250YWxTY2FsZShm
bG9hdCB2YWx1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBhcHBseVZlcnRpY2FsU2NhbGUo
ZmxvYXQgdmFsdWUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KLSAg
ICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJv
dW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc291cmNlSW1hZ2VSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KKyAgICBHcmFw
aGljc1JlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5k
aW5nQm94OyB9CiAKIHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3
aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgU1ZHRmlsdGVy
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNz
UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBHcmFwaGljc1JlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBjb25zdCBHcmFwaGljc1JlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBl
ZmZlY3RCQm94TW9kZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9y
bTsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxv
YXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0
ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworICAgIEdyYXBoaWNzUmVj
dCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKKyAgICBHcmFwaGljc1JlY3QgbV90YXJn
ZXRCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsK
KyAgICBHcmFwaGljc1JlY3QgbV9maWx0ZXJSZWdpb247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hN
b2RlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgQXVkaW9MaXN0ZW5l
cl9oCiAjZGVmaW5lIEF1ZGlvTGlzdGVuZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NSwyNyArNDUsMjcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIC8vIFBvc2l0aW9uCi0gICAgdm9pZCBzZXRQb3NpdGlvbihkb3Vi
bGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSB7IHNldFBvc2l0aW9uKEZsb2F0UG9pbnQzRCh4LCB5
LCB6KSk7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCAmcG9zaXRp
b24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBw
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lkIHNldFBvc2l0
aW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgc2V0UG9zaXRpb24oR3JhcGhpY3NQ
b2ludDNEKHgsIHksIHopKTsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQ
b2ludDNEICZwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBjb25zdCBH
cmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQog
CiAgICAgLy8gT3JpZW50YXRpb24KICAgICB2b2lkIHNldE9yaWVudGF0aW9uKGRvdWJsZSB4LCBk
b3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSB1cFgsIGRvdWJsZSB1cFksIGRvdWJsZSB1cFopCiAg
ICAgewotICAgICAgICBzZXRPcmllbnRhdGlvbihGbG9hdFBvaW50M0QoeCwgeSwgeikpOwotICAg
ICAgICBzZXRVcFZlY3RvcihGbG9hdFBvaW50M0QodXBYLCB1cFksIHVwWikpOworICAgICAgICBz
ZXRPcmllbnRhdGlvbihHcmFwaGljc1BvaW50M0QoeCwgeSwgeikpOworICAgICAgICBzZXRVcFZl
Y3RvcihHcmFwaGljc1BvaW50M0QodXBYLCB1cFksIHVwWikpOwogICAgIH0KLSAgICB2b2lkIHNl
dE9yaWVudGF0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCAmb3JpZW50YXRpb24pIHsgbV9vcmllbnRh
dGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKyAgICB2b2lkIHNldE9yaWVudGF0
aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9
IG9yaWVudGF0aW9uOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBvcmllbnRhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KIAogICAgIC8vIFVwLXZlY3RvcgotICAg
IHZvaWQgc2V0VXBWZWN0b3IoY29uc3QgRmxvYXRQb2ludDNEICZ1cFZlY3RvcikgeyBtX3VwVmVj
dG9yID0gdXBWZWN0b3I7IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHVwVmVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV91cFZlY3RvcjsgfQorICAgIHZvaWQgc2V0VXBWZWN0b3IoY29uc3QgR3Jh
cGhpY3NQb2ludDNEICZ1cFZlY3RvcikgeyBtX3VwVmVjdG9yID0gdXBWZWN0b3I7IH0KKyAgICBj
b25zdCBHcmFwaGljc1BvaW50M0QmIHVwVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV91cFZlY3Rv
cjsgfQogCiAgICAgLy8gVmVsb2NpdHkKLSAgICB2b2lkIHNldFZlbG9jaXR5KGRvdWJsZSB4LCBk
b3VibGUgeSwgZG91YmxlIHopIHsgc2V0VmVsb2NpdHkoRmxvYXRQb2ludDNEKHgsIHksIHopKTsg
fQotICAgIHZvaWQgc2V0VmVsb2NpdHkoY29uc3QgRmxvYXRQb2ludDNEICZ2ZWxvY2l0eSkgeyBt
X3ZlbG9jaXR5ID0gdmVsb2NpdHk7IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHZlbG9jaXR5
KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHkoZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgeyBzZXRWZWxvY2l0eShHcmFwaGljc1BvaW50M0Qo
eCwgeSwgeikpOyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShjb25zdCBHcmFwaGljc1BvaW50M0Qg
JnZlbG9jaXR5KSB7IG1fdmVsb2NpdHkgPSB2ZWxvY2l0eTsgfQorICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgdmVsb2NpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9CiAKICAgICAv
LyBEb3BwbGVyIGZhY3RvcgogICAgIHZvaWQgc2V0RG9wcGxlckZhY3Rvcihkb3VibGUgZG9wcGxl
ckZhY3RvcikgeyBtX2RvcHBsZXJGYWN0b3IgPSBkb3BwbGVyRmFjdG9yOyB9CkBAIC03OSwxMSAr
NzksMTEgQEAgcHJpdmF0ZToKICAgICBBdWRpb0xpc3RlbmVyKCk7CiAKICAgICAvLyBQb3NpdGlv
biAvIE9yaWVudGF0aW9uCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Ci0gICAgRmxvYXRQ
b2ludDNEIG1fb3JpZW50YXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fdXBWZWN0b3I7CisgICAg
R3JhcGhpY3NQb2ludDNEIG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1fb3JpZW50
YXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1fdXBWZWN0b3I7CiAKLSAgICBGbG9hdFBvaW50
M0QgbV92ZWxvY2l0eTsKKyAgICBHcmFwaGljc1BvaW50M0QgbV92ZWxvY2l0eTsKIAogICAgIGRv
dWJsZSBtX2RvcHBsZXJGYWN0b3I7CiAgICAgZG91YmxlIG1fc3BlZWRPZlNvdW5kOwpJbmRleDog
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgQXVkaW9QYW5uZXJOb2RlOjpBdWRpb1Bhbm5l
ck5vZGUoQXVkaW9DbwogICAgIG1fZGlzdGFuY2VHYWluID0gQXVkaW9HYWluOjpjcmVhdGUoImRp
c3RhbmNlR2FpbiIsIDEuMCwgMC4wLCAxLjApOwogICAgIG1fY29uZUdhaW4gPSBBdWRpb0dhaW46
OmNyZWF0ZSgiY29uZUdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKIAotICAgIG1fcG9zaXRpb24gPSBG
bG9hdFBvaW50M0QoMCwgMCwgMCk7Ci0gICAgbV9vcmllbnRhdGlvbiA9IEZsb2F0UG9pbnQzRCgx
LCAwLCAwKTsKLSAgICBtX3ZlbG9jaXR5ID0gRmxvYXRQb2ludDNEKDAsIDAsIDApOworICAgIG1f
cG9zaXRpb24gPSBHcmFwaGljc1BvaW50M0QoMCwgMCwgMCk7CisgICAgbV9vcmllbnRhdGlvbiA9
IEdyYXBoaWNzUG9pbnQzRCgxLCAwLCAwKTsKKyAgICBtX3ZlbG9jaXR5ID0gR3JhcGhpY3NQb2lu
dDNEKDAsIDAsIDApOwogICAgIAogICAgIHNldFR5cGUoTm9kZVR5cGVQYW5uZXIpOwogCkBAIC0x
NjUsOCArMTY1LDggQEAgdm9pZCBBdWRpb1Bhbm5lck5vZGU6OmdldEF6aW11dGhFbGV2YXRpbwog
ICAgIGRvdWJsZSBhemltdXRoID0gMC4wOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2Ut
bGlzdGVuZXIgdmVjdG9yCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24gPSBsaXN0
ZW5lcigpLT5wb3NpdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VMaXN0ZW5lciA9IG1f
cG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5l
clBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAgICBHcmFwaGljc1BvaW50M0Qg
c291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKIAogICAgIGlm
IChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgewogICAgICAgICAvLyBkZWdlbmVyYXRlIGNhc2Ug
aWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhlIHNhbWUgcG9pbnQKQEAgLTE3OCwxOSAr
MTc4LDE5IEBAIHZvaWQgQXVkaW9QYW5uZXJOb2RlOjpnZXRBemltdXRoRWxldmF0aW8KICAgICBz
b3VyY2VMaXN0ZW5lci5ub3JtYWxpemUoKTsKIAogICAgIC8vIEFsaWduIGF4ZXMKLSAgICBGbG9h
dFBvaW50M0QgbGlzdGVuZXJGcm9udCA9IGxpc3RlbmVyKCktPm9yaWVudGF0aW9uKCk7Ci0gICAg
RmxvYXRQb2ludDNEIGxpc3RlbmVyVXAgPSBsaXN0ZW5lcigpLT51cFZlY3RvcigpOwotICAgIEZs
b2F0UG9pbnQzRCBsaXN0ZW5lclJpZ2h0ID0gbGlzdGVuZXJGcm9udC5jcm9zcyhsaXN0ZW5lclVw
KTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJGcm9udCA9IGxpc3RlbmVyKCktPm9yaWVu
dGF0aW9uKCk7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyVXAgPSBsaXN0ZW5lcigpLT51
cFZlY3RvcigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lclJpZ2h0ID0gbGlzdGVuZXJG
cm9udC5jcm9zcyhsaXN0ZW5lclVwKTsKICAgICBsaXN0ZW5lclJpZ2h0Lm5vcm1hbGl6ZSgpOwog
Ci0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnROb3JtID0gbGlzdGVuZXJGcm9udDsKKyAg
ICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJGcm9udE5vcm0gPSBsaXN0ZW5lckZyb250OwogICAg
IGxpc3RlbmVyRnJvbnROb3JtLm5vcm1hbGl6ZSgpOwogCi0gICAgRmxvYXRQb2ludDNEIHVwID0g
bGlzdGVuZXJSaWdodC5jcm9zcyhsaXN0ZW5lckZyb250Tm9ybSk7CisgICAgR3JhcGhpY3NQb2lu
dDNEIHVwID0gbGlzdGVuZXJSaWdodC5jcm9zcyhsaXN0ZW5lckZyb250Tm9ybSk7CiAKICAgICBk
b3VibGUgdXBQcm9qZWN0aW9uID0gc291cmNlTGlzdGVuZXIuZG90KHVwKTsKIAotICAgIEZsb2F0
UG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0ZW5lciAtIHVwUHJvamVjdGlvbiAq
IHVwOworICAgIEdyYXBoaWNzUG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0ZW5l
ciAtIHVwUHJvamVjdGlvbiAqIHVwOwogICAgIHByb2plY3RlZFNvdXJjZS5ub3JtYWxpemUoKTsK
IAogICAgIGF6aW11dGggPSAxODAuMCAqIGFjb3MocHJvamVjdGVkU291cmNlLmRvdChsaXN0ZW5l
clJpZ2h0KSkgLyBwaURvdWJsZTsKQEAgLTIzMiw4ICsyMzIsOCBAQCBmbG9hdCBBdWRpb1Bhbm5l
ck5vZGU6OmRvcHBsZXJSYXRlKCkKICAgICBpZiAoZG9wcGxlckZhY3RvciA+IDAuMCkgewogICAg
ICAgICBkb3VibGUgc3BlZWRPZlNvdW5kID0gbGlzdGVuZXIoKS0+c3BlZWRPZlNvdW5kKCk7CiAK
LSAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEICZzb3VyY2VWZWxvY2l0eSA9IG1fdmVsb2NpdHk7
Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmbGlzdGVuZXJWZWxvY2l0eSA9IGxpc3RlbmVy
KCktPnZlbG9jaXR5KCk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmc291cmNlVmVs
b2NpdHkgPSBtX3ZlbG9jaXR5OworICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50M0QgJmxpc3Rl
bmVyVmVsb2NpdHkgPSBsaXN0ZW5lcigpLT52ZWxvY2l0eSgpOwogCiAgICAgICAgIC8vIERvbid0
IGJvdGhlciBpZiBib3RoIHNvdXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0eQogICAg
ICAgICBib29sIHNvdXJjZUhhc1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVybygpOwpA
QCAtMjQxLDggKzI0MSw4IEBAIGZsb2F0IEF1ZGlvUGFubmVyTm9kZTo6ZG9wcGxlclJhdGUoKQog
CiAgICAgICAgIGlmIChzb3VyY2VIYXNWZWxvY2l0eSB8fCBsaXN0ZW5lckhhc1ZlbG9jaXR5KSB7
CiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZSB0byBsaXN0ZW5lciB2ZWN0b3IK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+
cG9zaXRpb24oKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0g
bV9wb3NpdGlvbiAtIGxpc3RlbmVyUG9zaXRpb247CisgICAgICAgICAgICBHcmFwaGljc1BvaW50
M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7CisgICAgICAgICAg
ICBHcmFwaGljc1BvaW50M0Qgc291cmNlVG9MaXN0ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5l
clBvc2l0aW9uOwogCiAgICAgICAgICAgICBkb3VibGUgc291cmNlTGlzdGVuZXJNYWduaXR1ZGUg
PSBzb3VyY2VUb0xpc3RlbmVyLmxlbmd0aCgpOwogCkBAIC0yNzIsNyArMjcyLDcgQEAgZmxvYXQg
QXVkaW9QYW5uZXJOb2RlOjpkb3BwbGVyUmF0ZSgpCiAKIGZsb2F0IEF1ZGlvUGFubmVyTm9kZTo6
ZGlzdGFuY2VDb25lR2FpbigpCiB7Ci0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24g
PSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lclBv
c2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKIAogICAgIGRvdWJsZSBsaXN0ZW5lckRp
c3RhbmNlID0gbV9wb3NpdGlvbi5kaXN0YW5jZVRvKGxpc3RlbmVyUG9zaXRpb24pOwogICAgIGRv
dWJsZSBkaXN0YW5jZUdhaW4gPSBtX2Rpc3RhbmNlRWZmZWN0LmdhaW4obGlzdGVuZXJEaXN0YW5j
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkF1ZGlvTm9kZS5o
IgogI2luY2x1ZGUgIkNvbmUuaCIKICNpbmNsdWRlICJEaXN0YW5jZS5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1ZGUgIlBh
bm5lci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtNzUsMTYgKzc1LDE2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCk7CiAKICAgICAv
LyBQb3NpdGlvbgotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG9zaXRpb247IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHopIHsgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQorICAgIEdyYXBoaWNz
UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lk
IHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9wb3NpdGlvbiA9IEdy
YXBoaWNzUG9pbnQzRCh4LCB5LCB6KTsgfQogCiAgICAgLy8gT3JpZW50YXRpb24KLSAgICBGbG9h
dFBvaW50M0Qgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9Ci0gICAg
dm9pZCBzZXRPcmllbnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50
YXRpb24gPSBGbG9hdFBvaW50M0QoeCwgeSwgeik7IH0KKyAgICBHcmFwaGljc1BvaW50M0Qgb3Jp
ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRPcmll
bnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50YXRpb24gPSBHcmFw
aGljc1BvaW50M0QoeCwgeSwgeik7IH0KIAogICAgIC8vIFZlbG9jaXR5Ci0gICAgRmxvYXRQb2lu
dDNEIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQotICAgIHZvaWQgc2V0
VmVsb2NpdHkoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0gRmxvYXRQ
b2ludDNEKHgsIHksIHopOyB9CisgICAgR3JhcGhpY3NQb2ludDNEIHZlbG9jaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV92ZWxvY2l0eTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHkoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0gR3JhcGhpY3NQb2ludDNEKHgsIHksIHopOyB9
CiAKICAgICAvLyBEaXN0YW5jZSBwYXJhbWV0ZXJzCiAgICAgdW5zaWduZWQgc2hvcnQgZGlzdGFu
Y2VNb2RlbCgpIHsgcmV0dXJuIG1fZGlzdGFuY2VFZmZlY3QubW9kZWwoKTsgfQpAQCAtMTI5LDkg
KzEyOSw5IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFBhbm5lcj4gbV9wYW5uZXI7CiAgICAgdW5z
aWduZWQgbV9wYW5uaW5nTW9kZWw7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAg
ICBGbG9hdFBvaW50M0QgbV9vcmllbnRhdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV92ZWxvY2l0
eTsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0Qg
bV9vcmllbnRhdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV92ZWxvY2l0eTsKIAogICAgIC8v
IEdhaW4KICAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDkxMDI2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxl
dml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUg
YW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNz
ZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFu
Z2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cg
cGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhl
c2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNo
YXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaDoKKyAgICAgICAgKFdlYktpdDo6dG9HcmFwaGlj
c1JlY3QpOgorICAgICAgICAoV2ViS2l0Ojp0b0FQSSk6CisgICAgICAgICogU2hhcmVkL0RpY3Rp
b25hcnlQb3B1cEluZm8uaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKENvcmVJUEM6Ojo6
ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAg
ICAgICogU2hhcmVkL1dlYkV2ZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6
OmRlbHRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6d2hlZWxUaWNrcyk6Cisg
ICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
V2hlZWxFdmVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6OldlYldoZWVs
RXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOgorICAgICAgICAqIFNo
YXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2
ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
V2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW06
CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6
CisgICAgICAgICogU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBT
aGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
Y29udmVydFRvRGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xp
ZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNl
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJTcGFjZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRDdXJy
ZW50TW91c2VMb2NhdGlvbl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6RmluZEluZGljYXRvcjo6RmluZEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6Omlu
ZmxhdGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6ZnJhbWVSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6cGF0aFdpdGhSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OkZpbmRJbmRpY2F0b3I6OmRyYXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9GaW5kSW5kaWNhdG9y
Lmg6CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OnNlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6dGV4dFJlY3Rz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhUHJveHk6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6OmRyb3BUaWxlc091dHNpZGVSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjptYXBUb0NvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjptYXBGcm9tQ29udGVudHMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6VGls
ZWREcmF3aW5nQXJlYVByb3h5OjpnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0Rmlu
ZEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6OmNvYWxlc2NlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG93Q29y
cmVjdGlvblBhbmVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6c2V0
V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6d2luZG93RnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
VUlDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tOgorICAgICAgICAoV2Vi
S2l0OjpDb3JyZWN0aW9uUGFuZWw6OnNob3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6Y29udmVydFRvRGV2aWNl
U3BhY2UpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmNvbnZlcnRUb1VzZXJTcGFjZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBv
cHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNvbnZl
cnRUb0RldmljZVNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvVXNl
clNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAgICAgICAgKiBX
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKFdL
QnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZTo6bnVtYmVyT2ZQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMubW06CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luOjpjb252ZXJ0UG9pbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwOgorICAgICAgICAoV2ViS2l0
OjpzZXRYQnV0dG9uRXZlbnRGaWVsZHNCeVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Q2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xp
ZW50OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3VzdG9t
SGlnaGxpZ2h0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cGFpbnRD
dXN0b21IaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnBhaW50
Q3VzdG9tU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpwYWlu
dEN1c3RvbVNjcm9sbENvcm5lcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRB
bmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpkaWRTeW5jaHJvbml6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpuZWVkc0Rpc3BsYXlSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGVJbnRvVGlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9j
ZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JD
bGllbnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJl
Y3Rpb25QYW5lbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0
OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2NhbGVkU25hcHNob3RJ
bkRvY3VtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpiZWdpblBy
aW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UmVjdFRvUERGKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhv
c3RDQS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RDQTo6c2l6ZURpZENoYW5n
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6cGFpbnRJbnRvQml0bWFw
KToKKyAgICAgICAgKiBtYWMvV2ViS2l0Mi5vcmRlcjoKKwogMjAxMS0wNy0xNCAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21l
c3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9t
ZXNzYWdlcy5weQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQCBkZWYg
c3RydWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpBbmlt
YXRpb24nLAogICAgICAgICAnV2ViQ29yZTo6RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCcsCiAg
ICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCi0gICAgICAgICdXZWJDb3Jl
OjpGbG9hdFBvaW50M0QnLAorICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NQb2ludDNEJywKICAg
ICAgICAgJ1dlYkNvcmU6OkdyYW1tYXJEZXRhaWwnLAogICAgICAgICAnV2ViQ29yZTo6SWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb24nLAogICAgICAgICAnV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
JywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uaAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVw
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIERpY3Rpb25h
cnlQb3B1cEluZm9faAogCiAjaW5jbHVkZSAiRm9udEluZm8uaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUG9pbnQuaD4KIAogI2lm
IFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OSw3ICs0OSw3
IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJbmZvIHsKICAgICAgICAgSG90S2V5CiAgICAgfTsK
IAotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
UG9pbnQgb3JpZ2luOwogICAgIEZvbnRJbmZvIGZvbnRJbmZvOwogICAgIFR5cGUgdHlwZTsKICNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAKICNpZiBQTEFU
Rk9STShRVCkKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRQb2ludDNELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1BvaW50M0QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+CkBAIC02MiwzNiArNjIsMzYgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIEFyZ3VtZW50
Q29kZXI8RmxvYXRQb2ludD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2lu
dD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGZsb2F0UG9pbnQpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50Pjo6ZW5j
b2RlKGVuY29kZXIsIGZsb2F0UG9pbnQpOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhp
Y3NQb2ludD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50KTsKIH0KIAotYm9vbCBBcmd1bWVu
dENvZGVyPEZsb2F0UG9pbnQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBGbG9h
dFBvaW50JiBmbG9hdFBvaW50KQorYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzUG9pbnQ+Ojpk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc1BvaW50JiBmbG9hdFBvaW50
KQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjpkZWNvZGUo
ZGVjb2RlciwgZmxvYXRQb2ludCk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3Jh
cGhpY3NQb2ludD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFBvaW50KTsKIH0KIAogCi12b2lkIEFy
Z3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rlciwg
Y29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NS
ZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgR3JhcGhpY3NSZWN0
JiBmbG9hdFJlY3QpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjplbmNv
ZGUoZW5jb2RlciwgZmxvYXRSZWN0KTsKKyAgICBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNz
UmVjdD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFJlY3QpOwogfQogCi1ib29sIEFyZ3VtZW50Q29k
ZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRSZWN0
JiBmbG9hdFJlY3QpCitib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NSZWN0Pjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgR3JhcGhpY3NSZWN0JiBmbG9hdFJlY3QpCiB7Ci0gICAg
cmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKGRlY29kZXIsIGZs
b2F0UmVjdCk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NSZWN0Pjo6
ZGVjb2RlKGRlY29kZXIsIGZsb2F0UmVjdCk7CiB9CiAKIAotdm9pZCBBcmd1bWVudENvZGVyPEZs
b2F0U2l6ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgZmxvYXRTaXplKQordm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmVuY29kZShB
cmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZmxvYXRTaXplKQog
ewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRTaXplPjo6ZW5jb2RlKGVuY29kZXIsIGZs
b2F0U2l6ZSk7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+OjplbmNvZGUo
ZW5jb2RlciwgZmxvYXRTaXplKTsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEZsb2F0U2l6ZSYgZmxvYXRTaXplKQor
Ym9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmRlY29kZShBcmd1bWVudERlY29kZXIq
IGRlY29kZXIsIEdyYXBoaWNzU2l6ZSYgZmxvYXRTaXplKQogewotICAgIHJldHVybiBTaW1wbGVB
cmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZShkZWNvZGVyLCBmbG9hdFNpemUpOworICAg
IHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmRlY29kZShkZWNvZGVy
LCBmbG9hdFNpemUpOwogfQogCiAKQEAgLTU1MiwxNCArNTUyLDE0IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjoKIAogI2lmIFBMQVRGT1JNKFFUKQogCi12b2lkIEFy
Z3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCit2b2lkIEFyZ3VtZW50Q29kZXI8
R3JhcGhpY3NQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3Qg
R3JhcGhpY3NQb2ludDNEJiBmbG9hdFBvaW50M0QpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2Rl
cjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludDNEKTsKKyAgICBTaW1w
bGVBcmd1bWVudENvZGVyPEdyYXBoaWNzUG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBv
aW50M0QpOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCitib29s
IEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2ludDNEPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgR3JhcGhpY3NQb2ludDNEJiBmbG9hdFBvaW50M0QpCiB7Ci0gICAgcmV0dXJuIFNp
bXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9p
bnQzRCk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2ludDNEPjo6
ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQzRCk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENy
ZWRlbnRpYWw7CiAgICAgY2xhc3MgQ3Vyc29yOwogICAgIGNsYXNzIERhdGFiYXNlRGV0YWlsczsK
LSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBG
bG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2ludDsKKyAgICBjbGFzcyBHcmFwaGljc1Jl
Y3Q7CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwogICAgIGNsYXNzIEhUVFBIZWFkZXJNYXA7CiAg
ICAgY2xhc3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UmVjdDsKQEAgLTYzLDcgKzYzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKFFUKQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEFuaW1hdGlvbjsKLSAgICBjbGFzcyBGbG9hdFBvaW50M0Q7CisgICAgY2xh
c3MgR3JhcGhpY3NQb2ludDNEOwogICAgIGNsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
OwogICAgIGNsYXNzIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICBjbGFzcyBQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjsKQEAgLTgxLDE5ICs4MSwxOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwordGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1BvaW50PiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUG9pbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6R3JhcGhpY3NQb2ludCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UmVjdCYpOwordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpGbG9hdFNpemU+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1NpemU+IHsKKyAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXpl
Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6Okdy
YXBoaWNzU2l6ZSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpJbnRQb2ludD4gewpAQCAtMjAzLDkgKzIwMyw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZToKIH07CiAKICNpZiBQTEFURk9STShRVCkKLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQz
RCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpG
bG9hdFBvaW50M0QmKTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
R3JhcGhpY3NQb2ludDNEPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQzRCYpOworICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpHcmFwaGljc1BvaW50M0QmKTsKIH07CiAK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAog
Ly8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBtb3ZlIHRvIG1ha2VpbmcgdGhlIFdlYkNvcmUv
UGxhdGZvcm1Gb29FdmVudHMgdHJpdmlhbCBjbGFzc2VzIHNvIHRoYXQKIC8vIHdlIGNhbiB1c2Ug
dGhlbSBhcyB0aGUgZXZlbnQgdHlwZS4KIAotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1NpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lu
dFBvaW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE3NywxNSAr
MTc3LDE1IEBAIHB1YmxpYzoKIAogICAgIFdlYldoZWVsRXZlbnQoKSB7IH0KIAotICAgIFdlYldo
ZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJp
dHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisgICAgV2ViV2hlZWxFdmVudChUeXBl
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJiBkZWx0YSwg
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgTW9k
aWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgV2ViV2hl
ZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0
eSwgUGhhc2UgcGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsYm9vbCBoYXNQcmVjaXNlU2Nyb2xs
aW5nRGVsdGFzLCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOworICAgIFdlYldoZWVsRXZl
bnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYg
ZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJp
dHksIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLGJvb2wgaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcywgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgogCiAgICAg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplIGRlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YTsgfQotICAgIGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSB3aGVlbFRpY2tzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbFRpY2tzOyB9Cisg
ICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplIGRlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWx0YTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSB3aGVlbFRpY2tzKCkgY29u
c3QgeyByZXR1cm4gbV93aGVlbFRpY2tzOyB9CiAgICAgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHko
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHcmFudWxhcml0eT4obV9ncmFudWxhcml0eSk7
IH0KICNpZiBQTEFURk9STShNQUMpCiAgICAgUGhhc2UgcGhhc2UoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxQaGFzZT4obV9waGFzZSk7IH0KQEAgLTIwMSw4ICsyMDEsOCBAQCBwcml2YXRl
OgogCiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICBXZWJDb3JlOjpJbnRQ
b2ludCBtX2dsb2JhbFBvc2l0aW9uOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2RlbHRhOwot
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3doZWVsVGlja3M7CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NTaXplIG1fZGVsdGE7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NTaXplIG1fd2hlZWxUaWNrczsK
ICAgICB1aW50MzJfdCBtX2dyYW51bGFyaXR5OyAvLyBHcmFudWxhcml0eQogI2lmIFBMQVRGT1JN
KE1BQykKICAgICB1aW50MzJfdCBtX3BoYXNlOyAvLyBQaGFzZQpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDgg
KzI0LDggQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3Vt
ZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKIApAQCAtNTUsOSArNTUsOSBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICBXZWJMYXll
cklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwogCi0gICAgRmxvYXRQb2ludCBwb3M7
Ci0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIEZsb2F0U2l6ZSBzaXplOworICAg
IEdyYXBoaWNzUG9pbnQgcG9zOworICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3JQb2ludDsKKyAg
ICBHcmFwaGljc1NpemUgc2l6ZTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CiAgICAgSW50UmVj
dCBjb250ZW50c1JlY3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7ICAgIAogCi1XZWJXaGVlbEV2ZW50OjpXZWJX
aGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0IEZsb2F0
U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVycyBtb2Rp
ZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCitXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5
cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
d2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVycyBtb2RpZmllcnMs
IGRvdWJsZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVz
dGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9u
KGdsb2JhbFBvc2l0aW9uKQpAQCAtNDksNyArNDksNyBAQCBXZWJXaGVlbEV2ZW50OjpXZWJXaGVl
bEV2ZW50KFR5cGUgdHlwZSwgCiB9CiAKICNpZiBQTEFURk9STShNQUMpCi1XZWJXaGVlbEV2ZW50
OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0
IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBoYXNlIHBo
YXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMs
IE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCitXZWJXaGVlbEV2ZW50OjpX
ZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBoYXNl
IHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXMsIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVu
dCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24p
CiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51
SXRlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5o
PgpAQCAtMTg4LDkgKzE4OCw5IEBAIGlubGluZSBQcm94eWluZ1JlZlB0cjxXZWJVUkxSZXNwb25z
ZT4gdG8KIAogLyogR2VvbWV0cnkgY29udmVyc2lvbnMgKi8KIAotaW5saW5lIFdlYkNvcmU6OkZs
b2F0UmVjdCB0b0Zsb2F0UmVjdChjb25zdCBXS1JlY3QmIHdrUmVjdCkKK2lubGluZSBXZWJDb3Jl
OjpHcmFwaGljc1JlY3QgdG9HcmFwaGljc1JlY3QoY29uc3QgV0tSZWN0JiB3a1JlY3QpCiB7Ci0g
ICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdChzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9y
aWdpbi54KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueSksCisgICAgcmV0dXJu
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdChzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9yaWdpbi54
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0LnNpemUud2lkdGgpLCBzdGF0
aWNfY2FzdDxmbG9hdD4od2tSZWN0LnNpemUuaGVpZ2h0KSk7CiB9CiAKQEAgLTIxMCw3ICsyMTAs
NyBAQCBpbmxpbmUgV2ViQ29yZTo6SW50UmVjdCB0b0ludFJlY3QoY29uc3QgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih3a1JlY3Quc2l6ZS53aWR0aCksIHN0
YXRpY19jYXN0PGludD4od2tSZWN0LnNpemUuaGVpZ2h0KSk7CiB9CiAKLWlubGluZSBXS1JlY3Qg
dG9BUEkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQoraW5saW5lIFdLUmVjdCB0b0FQ
SShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgV0tSZWN0IHdrUmVj
dDsKICAgICB3a1JlY3Qub3JpZ2luLnggPSByZWN0LngoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFw
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgU2hhcmVhYmxl
Qml0bWFwOjpwYWludChHcmFwaGljc0NvbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXplLndp
ZHRoKCkgKiA0KSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0LnNp
emUoKSk7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0LnNpemUo
KSk7CiAgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQo
c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsICZjb250ZXh0KTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9XZWJFdmVudEZhY3RvcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw4ICsxNTAsOCBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6
OldoZWVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGV2ZW50LT5jYW52YXMu
eCAtIHBvc2l0aW9uLT54LCBldmVudC0+Y2FudmFzLnkgLSBwb3NpdGlvbi0+eSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50UG9pbnQoZXZlbnQtPmNhbnZhcy54LCBldmVudC0+Y2FudmFz
LnkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHdoZWVsVGlja3NYLCB3aGVlbFRp
Y2tzWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NTaXplKGRlbHRhWCwgZGVs
dGFZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUod2hlZWxUaWNrc1gs
IHdoZWVsVGlja3NZKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXaGVlbEV2ZW50OjpT
Y3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmll
cnNGb3JFdmVudChldmVudC0+bW9kaWZpZXJzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC0+dGltZXN0YW1wKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZl
bnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dl
YkV2ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMTkgKzEz
NywxOSBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgZ2Rr
X2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7CiAgICAgZ2RrX2V2ZW50X2dldF9yb290
X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOwogCi0gICAgRmxvYXRTaXplIHdoZWVsVGlj
a3M7CisgICAgR3JhcGhpY3NTaXplIHdoZWVsVGlja3M7CiAgICAgc3dpdGNoIChldmVudC0+c2Ny
b2xsLmRpcmVjdGlvbikgewogICAgIGNhc2UgR0RLX1NDUk9MTF9VUDoKLSAgICAgICAgd2hlZWxU
aWNrcyA9IEZsb2F0U2l6ZSgwLCAxKTsKKyAgICAgICAgd2hlZWxUaWNrcyA9IEdyYXBoaWNzU2l6
ZSgwLCAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHREtfU0NST0xMX0RPV046Ci0gICAg
ICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUoMCwgLTEpOworICAgICAgICB3aGVlbFRpY2tzID0g
R3JhcGhpY3NTaXplKDAsIC0xKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHREtfU0NST0xM
X0xFRlQ6Ci0gICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUoMSwgMCk7CisgICAgICAgIHdo
ZWVsVGlja3MgPSBHcmFwaGljc1NpemUoMSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
R0RLX1NDUk9MTF9SSUdIVDoKLSAgICAgICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgtMSwgMCk7
CisgICAgICAgIHdoZWVsVGlja3MgPSBHcmFwaGljc1NpemUoLTEsIDApOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE1OCw3
ICsxNTgsNyBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAg
Ly8gRklYTUU6IFtHVEtdIEFkZCBhIHNldHRpbmcgdG8gY2hhbmdlIHRoZSBwaXhlbHMgcGVyIGxp
bmUgdXNlZCBmb3Igc2Nyb2xsaW5nCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU0ODI2CiAgICAgZmxvYXQgc3RlcCA9IHN0YXRpY19jYXN0PGZsb2F0PihT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOwotICAgIEZsb2F0U2l6ZSBkZWx0YSh3aGVl
bFRpY2tzLndpZHRoKCkgKiBzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpICogc3RlcCk7CisgICAg
R3JhcGhpY3NTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0ZXAsIHdoZWVsVGlja3Mu
aGVpZ2h0KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpX
aGVlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4LCB5KSwKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDk3LDcgKzEwOTcsNyBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50
RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmllcnMgICAg
ICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwogICAgIGRvdWJsZSB0aW1lc3RhbXAg
ICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCB0aW1lc3RhbXBdOwogICAgIAotICAgIHJl
dHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgSW50UG9pbnQocG9zaXRpb24pLCBJ
bnRQb2ludChnbG9iYWxQb3NpdGlvbiksIEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSksIEZsb2F0
U2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgcGhhc2UsIG1vbWVu
dHVtUGhhc2UsIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIG1vZGlmaWVycywgdGltZXN0YW1w
KTsKKyAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIEludFBvaW50KHBv
c2l0aW9uKSwgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb24pLCBHcmFwaGljc1NpemUoZGVsdGFYLCBk
ZWx0YVkpLCBHcmFwaGljc1NpemUod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwgZ3JhbnVsYXJp
dHksIHBoYXNlLCBtb21lbnR1bVBoYXNlLCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCBtb2Rp
ZmllcnMsIHRpbWVzdGFtcCk7CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgogI2luY2x1ZGUgPFFLZXlFdmVudD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFBvaW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc1BvaW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpNb2RpZmllcnMg
bW9kaWZpCiAKIFdlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2
ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQsIGludCBldmVudENsaWNrQ291bnQp
CiB7Ci0gICAgRmxvYXRQb2ludCBkZWx0YShldmVudC0+cG9zKCkueCgpIC0gZXZlbnQtPmxhc3RQ
b3MoKS54KCksIGV2ZW50LT5wb3MoKS55KCkgLSBldmVudC0+bGFzdFBvcygpLnkoKSk7CisgICAg
R3JhcGhpY3NQb2ludCBkZWx0YShldmVudC0+cG9zKCkueCgpIC0gZXZlbnQtPmxhc3RQb3MoKS54
KCksIGV2ZW50LT5wb3MoKS55KCkgLSBldmVudC0+bGFzdFBvcygpLnkoKSk7CiAKICAgICBXZWJF
dmVudDo6VHlwZSB0eXBlICAgICAgICAgICAgID0gd2ViRXZlbnRUeXBlRm9yRXZlbnQoZXZlbnQp
OwogICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b24gICAgPSBtb3VzZUJ1dHRvbkZvckV2
ZW50KGV2ZW50KTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFj
dG9yeTo6Y3JlYXRlV2ViCiAgICAgZGVsdGFYICo9IChmdWxsVGljaykgPyBRQXBwbGljYXRpb246
OndoZWVsU2Nyb2xsTGluZXMoKSAqIGNEZWZhdWx0UXRTY3JvbGxTdGVwIDogMTsKICAgICBkZWx0
YVkgKj0gKGZ1bGxUaWNrKSA/IFFBcHBsaWNhdGlvbjo6d2hlZWxTY3JvbGxMaW5lcygpICogY0Rl
ZmF1bHRRdFNjcm9sbFN0ZXAgOiAxOwogCi0gICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZl
bnQ6OldoZWVsLCBlLT5wb3MoKS50b1BvaW50KCksIGUtPnNjcmVlblBvcygpLCBGbG9hdFNpemUo
ZGVsdGFYLCBkZWx0YVkpLCBGbG9hdFNpemUod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwgZ3Jh
bnVsYXJpdHksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKKyAgICByZXR1cm4gV2ViV2hlZWxFdmVu
dChXZWJFdmVudDo6V2hlZWwsIGUtPnBvcygpLnRvUG9pbnQoKSwgZS0+c2NyZWVuUG9zKCksIEdy
YXBoaWNzU2l6ZShkZWx0YVgsIGRlbHRhWSksIEdyYXBoaWNzU2l6ZSh3aGVlbFRpY2tzWCwgd2hl
ZWxUaWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOwogfQogCiBXZWJL
ZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChRS2V5
RXZlbnQqIGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XZWJFdmVudEZh
Y3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2ViRXZl
bnRGYWN0b3J5LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
d2luL1dlYkV2ZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MCw3ICs0NDAsNyBA
QCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9u
LCBnbG9iYWxQb3NpdGlvbiwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdo
ZWVsVGlja3NYLCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIHRpbWVzdGFt
cCk7CisgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3NpdGlvbiwg
Z2xvYmFsUG9zaXRpb24sIEdyYXBoaWNzU2l6ZShkZWx0YVgsIGRlbHRhWSksIEdyYXBoaWNzU2l6
ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1l
c3RhbXApOwogfQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2Vi
S2V5Ym9hcmRFdmVudChIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJhbSwgTFBB
UkFNIGxwYXJhbSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRv
ci5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJ
bmRpY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBjb25z
dCBpbnQgZ3JhZGllbnRMaWdodEFscGhhID0gMjUKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBh
c3NSZWZQdHI8RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKK1Bhc3NSZWZQdHI8RmluZElu
ZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IEdyYXBoaWNzUmVjdCYgc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxHcmFwaGljc1JlY3Q+JiB0
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKIHsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb250ZW50SW1hZ2VI
YW5kbGUpOwogICAgIGlmICghY29udGVudEltYWdlKQpAQCAtODcsNyArODcsNyBAQCBQYXNzUmVm
UHRyPEZpbmRJbmRpY2F0b3I+IEZpbmRJbmRpY2F0b3I6CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGaW5kSW5kaWNhdG9yKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCB0ZXh0UmVj
dHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29udGVudEltYWdlLnJlbGVhc2UoKSkpOwog
fQogCi1GaW5kSW5kaWNhdG9yOjpGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZSkKK0ZpbmRJbmRpY2F0b3I6OkZpbmRJ
bmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4mIHRleHRS
ZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gY29udGVudEltYWdlKQogICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
cyhzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykKICAgICAsIG1fdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0
ZXMpCiAgICAgLCBtX2NvbnRlbnRJbWFnZShjb250ZW50SW1hZ2UpCkBAIC05OCwxOCArOTgsMTgg
QEAgRmluZEluZGljYXRvcjo6fkZpbmRJbmRpY2F0b3IoKQogewogfQogCi1zdGF0aWMgRmxvYXRS
ZWN0IGluZmxhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgaW5mbGF0ZVgsIGZs
b2F0IGluZmxhdGVZKQorc3RhdGljIEdyYXBoaWNzUmVjdCBpbmZsYXRlUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVYLCBmbG9hdCBpbmZsYXRlWSkKIHsKLSAgICBG
bG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsKKyAgICBHcmFwaGljc1JlY3QgaW5mbGF0ZWRS
ZWN0ID0gcmVjdDsKICAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwogICAgIGlu
ZmxhdGVkUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7CiAgICAgCiAgICAgcmV0dXJuIGluZmxhdGVk
UmVjdDsKIH0KIAotRmxvYXRSZWN0IEZpbmRJbmRpY2F0b3I6OmZyYW1lUmVjdCgpIGNvbnN0CitH
cmFwaGljc1JlY3QgRmluZEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gRmxvYXRSZWN0KG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueCgpIC0gbGVm
dEJvcmRlclRoaWNrbmVzcywgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy55KCkg
LSB0b3BCb3JkZXJUaGlja25lc3MsCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChtX3NlbGVjdGlv
blJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLngoKSAtIGxlZnRCb3JkZXJUaGlja25lc3MsIG1fc2Vs
ZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueSgpIC0gdG9wQm9yZGVyVGhpY2tuZXNzLAog
ICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy53
aWR0aCgpICsgcmlnaHRCb3JkZXJUaGlja25lc3MgKyBsZWZ0Qm9yZGVyVGhpY2tuZXNzLAogICAg
ICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy5oZWln
aHQoKSArIHRvcEJvcmRlclRoaWNrbmVzcyArIGJvdHRvbUJvcmRlclRoaWNrbmVzcyk7CiB9CkBA
IC0xMzQsMTAgKzEzNCwxMCBAQCBzdGF0aWMgQ29sb3IgZ3JhZGllbnREYXJrQ29sb3IoKQogICAg
IHJldHVybiBDb2xvcihncmFkaWVudERhcmtSZWQsIGdyYWRpZW50RGFya0dyZWVuLCBncmFkaWVu
dERhcmtCbHVlLCBncmFkaWVudERhcmtBbHBoYSk7CiB9CiAKLXN0YXRpYyBQYXRoIHBhdGhXaXRo
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBwYXRoUmVjdCwgZmxvYXQgcmFkaXVzKQorc3Rh
dGljIFBhdGggcGF0aFdpdGhSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHBhdGhSZWN0
LCBmbG9hdCByYWRpdXMpCiB7CiAgICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJl
Y3QocGF0aFJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOworICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocGF0aFJlY3QsIEdyYXBoaWNzU2l6ZShyYWRpdXMsIHJhZGl1cykpOwogCiAgICAg
cmV0dXJuIHBhdGg7CiB9CkBAIC0xNDUsMTUgKzE0NSwxNSBAQCBzdGF0aWMgUGF0aCBwYXRoV2l0
aFJvdW5kZWRSZWN0KGNvbnN0IEZsCiB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRp
bmF0ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRmxvYXRSZWN0IHRleHRSZWN0ID0gbV90ZXh0
UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IHRleHRSZWN0ID0gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKICAg
ICAgICAgdGV4dFJlY3QubW92ZShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25l
c3MpOwogCi0gICAgICAgIEZsb2F0UmVjdCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4
dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0
c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKLSAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0aFJl
Y3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJv
cmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOworICAgICAgICBHcmFwaGlj
c1JlY3Qgb3V0ZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9udGFsT3V0
c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJv
cmRlcik7CisgICAgICAgIEdyYXBoaWNzUmVjdCBpbm5lclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3Qo
dGV4dFJlY3QsIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIsIHZlcnRpY2FsUGFk
ZGluZ0luc2lkZUxpZ2h0Qm9yZGVyKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNo
YWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xvclNwYWNl
U1JHQik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEdyYXBoaWNzU2l6
ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93
Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dEZpbGxDb2xvcihsaWdodEJvcmRlckNvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKHBhdGhXaXRoUm91bmRlZFJlY3Qob3V0
ZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7CiAgICAgICAgIH0KQEAgLTE2MSw3ICsxNjEsNyBA
QCB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhSb3VuZGVk
UmVjdChpbm5lclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKLSAgICAgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRo
UmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0Lngo
KSwgaW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4g
Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQoaW5uZXJQYXRoUmVjdC54
KCksIGlubmVyUGF0aFJlY3QueSgpKSwgR3JhcGhpY3NQb2ludChpbm5lclBhdGhSZWN0LngoKSwg
aW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsKICAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMCwgZ3JhZGllbnRMaWdodENvbG9yKCkpOwogICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENv
bG9yU3RvcCgxLCBncmFkaWVudERhcmtDb2xvcigpKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQg
RmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQKIAogICAgICAgICB7CiAgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRTaXplKHJvdW5k
ZihsZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRmKHRvcEJvcmRlclRoaWNrbmVzcykpKTsKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoR3JhcGhpY3NTaXplKHJvdW5kZihs
ZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRmKHRvcEJvcmRlclRoaWNrbmVzcykpKTsKICAgICAg
ICAgICAgIG1fY29udGVudEltYWdlLT5wYWludChncmFwaGljc0NvbnRleHQsIEludFBvaW50KDAs
IDApLCBtX2NvbnRlbnRJbWFnZS0+Ym91bmRzKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5oCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRmluZEluZGljYXRvcl9oCiAKICNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
QEAgLTQwLDIzICs0MCwyMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmluZEluZGlj
YXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbmRJbmRpY2F0b3I+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBj
b25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5h
dGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsK
ICAgICB+RmluZEluZGljYXRvcigpOwogCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlv
blJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZVJlY3Qo
KSBjb25zdDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93
Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzOyB9CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGZyYW1lUmVjdCgpIGNvbnN0Owog
Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0cygpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7IH0KKyAgICBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsgfQogCiAgICAgU2hh
cmVhYmxlQml0bWFwKiBjb250ZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRJbWFn
ZS5nZXQoKTsgfQogCiAgICAgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAKIHByaXZhdGU6Ci0gICAgRmluZElu
ZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBjb250ZW50SW1hZ2UpOworICAgIEZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhp
Y3NSZWN0PiYgdGV4dFJlY3RzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudElt
YWdlKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nv
b3JkaW5hdGVzOwotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IG1fc2Vs
ZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBo
aWNzUmVjdD4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKICAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBtX2NvbnRlbnRJbWFnZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsOCArMTMx
LDggQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RWRp
dG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVj
dG9yPFdURjo6U3RyaW5nPiYpID0gMDsKICNlbmRpZgotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhp
Y3NSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBjb252ZXJ0VG9Vc2VyU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7CiAgICAgCkBAIC0xNjUsNyArMTY1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgQ0dDb250ZXh0UmVmIGNvbnRhaW5pbmdXaW5kb3dHcmFwaGljc0NvbnRleHQoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IFN0
cmluZyYsIGRvdWJsZSBzY2FsZUZhY3RvciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRp
dmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpSZWFzb25G
b3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJl
Y3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRT
dHJpbmcpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxl
ZERyYXdpbmdBcmVhUHJveHkuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjcsNyArMTY3LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldFRpbGVDcmVhdAog
ICAgIG1fdGlsZUNyZWF0aW9uRGVsYXkgPSBkZWxheTsKIH0KIAotdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9hdFNpemUm
IGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcikKK3ZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29u
c3QgR3JhcGhpY3NTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgR3JhcGhpY3NTaXplJiBjb3Zl
ck11bHRpcGxpZXIpCiB7CiAgICAgbV9rZWVwQXJlYU11bHRpcGxpZXIgPSBrZWVwTXVsdGlwbGll
cjsKICAgICBtX2NvdmVyQXJlYU11bHRpcGxpZXIgPSBjb3Zlck11bHRpcGxpZXI7CkBAIC0yNzAs
NyArMjcwLDcgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0IAogCiAg
ICAgLy8gQXNzdW1lcyB0aGUgYmFja2luZyBzdG9yZSBpcyBwYWludGVkIHdpdGggdGhlIHNjYWxl
IHRyYW5zZm9ybSBhcHBsaWVkLgogICAgIC8vIFNpbmNlIHRpbGUgY29udGVudCBpcyBhbHJlYWR5
IHNjYWxlZCwgZmlyc3QgcmV2ZXJ0IHRoZSBzY2FsaW5nIGZyb20gdGhlIHBhaW50ZXIuCi0gICAg
Z2Muc2NhbGUoRmxvYXRTaXplKDEgLyBtX2NvbnRlbnRzU2NhbGUsIDEgLyBtX2NvbnRlbnRzU2Nh
bGUpKTsKKyAgICBnYy5zY2FsZShHcmFwaGljc1NpemUoMSAvIG1fY29udGVudHNTY2FsZSwgMSAv
IG1fY29udGVudHNTY2FsZSkpOwogCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tQ29u
dGVudHMocmVjdCk7CiAKQEAgLTQzNywxMyArNDM3LDEzIEBAIGJvb2wgVGlsZWREcmF3aW5nQXJl
YVByb3h5OjpyZXNpemVFZGdlVGkKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRyb3BU
aWxlc091dHNpZGVSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQogewotICAgIEZsb2F0UmVj
dCBrZWVwUmVjdEYgPSBrZWVwUmVjdDsKKyAgICBHcmFwaGljc1JlY3Qga2VlcFJlY3RGID0ga2Vl
cFJlY3Q7CiAKICAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRv
UmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAg
Zm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5h
dGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0aWxlUmVj
dCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0g
aXQtPnNlY29uZC0+cmVjdCgpOwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2Vl
cFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsKICAgICB9
CkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJlbW92ZVRp
bGUoYwogCiBJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwVG9Db250ZW50cyhjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChHcmFwaGljc1JlY3QocmVjdC54KCkgLyBtX2NvbnRlbnRzU2NhbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpIC8gbV9jb250ZW50c1NjYWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLyBt
X2NvbnRlbnRzU2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y3QuaGVpZ2h0KCkgLyBtX2NvbnRlbnRzU2NhbGUpKTsKQEAgLTQ4NSw3ICs0ODUsNyBAQCBJbnRS
ZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwVG9Db250CiAKIEludFJlY3QgVGlsZWREcmF3
aW5nQXJlYVByb3h5OjptYXBGcm9tQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgKiBtX2Nv
bnRlbnRzU2NhbGUsCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0KHJl
Y3QueCgpICogbV9jb250ZW50c1NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWN0LnkoKSAqIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpICogbV9jb250ZW50c1NjYWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpICogbV9jb250ZW50
c1NjYWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJh
d2luZ0FyZWFQcm94eS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTIgKzg1
LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRpbGVDcmVhdGlvbkRlbGF5KGRvdWJsZSBkZWxh
eSk7CiAKICAgICAvLyBUaWxlZCBhcmUgZHJvcHBlZCBvdXRzaWRlIHRoZSBrZWVwIGFyZWEsIGFu
ZCBjcmVhdGVkIGZvciBjb3ZlciBhcmVhLiBUaGUgdmFsdWVzIGEgcmVsYXRpdmUgdG8gdGhlIHZp
ZXdwb3J0IHNpemUuCi0gICAgdm9pZCBnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoV2Vi
Q29yZTo6RmxvYXRTaXplJiBrZWVwTXVsdGlwbGllciwgV2ViQ29yZTo6RmxvYXRTaXplJiBjb3Zl
ck11bHRpcGxpZXIpCisgICAgdm9pZCBnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoV2Vi
Q29yZTo6R3JhcGhpY3NTaXplJiBrZWVwTXVsdGlwbGllciwgV2ViQ29yZTo6R3JhcGhpY3NTaXpl
JiBjb3Zlck11bHRpcGxpZXIpCiAgICAgewogICAgICAgICBrZWVwTXVsdGlwbGllciA9IG1fa2Vl
cEFyZWFNdWx0aXBsaWVyOwogICAgICAgICBjb3Zlck11bHRpcGxpZXIgPSBtX2NvdmVyQXJlYU11
bHRpcGxpZXI7CiAgICAgfQotICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJz
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKTsKKyAgICB2b2lkIHNldEtlZXBBbmRDb3ZlckFy
ZWFNdWx0aXBsaWVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGtlZXBNdWx0aXBsaWVy
LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGNvdmVyTXVsdGlwbGllcik7CiAKICAgICB2
b2lkIHRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgpOwogCkBAIC0xNjMsOCArMTYzLDggQEAgcHJp
dmF0ZToKIAogICAgIFdlYkNvcmU6OkludFNpemUgbV90aWxlU2l6ZTsKICAgICBkb3VibGUgbV90
aWxlQ3JlYXRpb25EZWxheTsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9rZWVwQXJlYU11bHRp
cGxpZXI7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY292ZXJBcmVhTXVsdGlwbGllcjsKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc1NpemUgbV9rZWVwQXJlYU11bHRpcGxpZXI7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NTaXplIG1fY292ZXJBcmVhTXVsdGlwbGllcjsKIAogICAgIFdlYkNvcmU6Oklu
dFJlY3QgbV92aXNpYmxlQXJlYTsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0RpcmVjdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNr
ZXJDbGllbnQuaD4KQEAgLTIxMDIsMTIgKzIxMDIsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omdl
dElzUmVzaXphYmxlKGJvb2wmIAogICAgIGlzUmVzaXphYmxlID0gbV91aUNsaWVudC5pc1Jlc2l6
YWJsZSh0aGlzKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKGNvbnN0
IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0V2luZG93
RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBtX3VpQ2xp
ZW50LnNldFdpbmRvd0ZyYW1lKHRoaXMsIG1fcGFnZUNsaWVudC0+Y29udmVydFRvRGV2aWNlU3Bh
Y2UobmV3V2luZG93RnJhbWUpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFdpbmRvd0Zy
YW1lKEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2lu
ZG93RnJhbWUoR3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBuZXdXaW5kb3dG
cmFtZSA9IG1fcGFnZUNsaWVudC0+Y29udmVydFRvVXNlclNwYWNlKG1fdWlDbGllbnQud2luZG93
RnJhbWUodGhpcykpOwogfQpAQCAtMjMyNyw3ICsyMzI3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZENvdW50U3RyaW5nTWF0Y2hlcwogICAgIG1fZmluZENsaWVudC5kaWRDb3VudFN0cmluZ01h
dGNoZXModGhpcywgc3RyaW5nLCBtYXRjaENvdW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OnNldEZpbmRJbmRpY2F0b3IoY29uc3QgRmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dD
b29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9u
UmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudElt
YWdlSGFuZGxlLCBib29sIGZhZGVPdXQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RmluZEluZGlj
YXRvcihjb25zdCBHcmFwaGljc1JlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVz
LCBjb25zdCBWZWN0b3I8R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5k
bGUsIGJvb2wgZmFkZU91dCkKIHsKICAgICBSZWZQdHI8RmluZEluZGljYXRvcj4gZmluZEluZGlj
YXRvciA9IEZpbmRJbmRpY2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnRlbnRJbWFnZUhh
bmRsZSk7CiAgICAgbV9wYWdlQ2xpZW50LT5zZXRGaW5kSW5kaWNhdG9yKGZpbmRJbmRpY2F0b3Iu
cmVsZWFzZSgpLCBmYWRlT3V0KTsKQEAgLTI2ODIsOCArMjY4Miw4IEBAIHN0YXRpYyBXZWJXaGVl
bEV2ZW50IGNvYWxlc2NlKGNvbnN0IFdlYlcKIHsKICAgICBBU1NFUlQoY2FuQ29hbGVzY2UoYSwg
YikpOwogCi0gICAgRmxvYXRTaXplIG1lcmdlZERlbHRhID0gYS5kZWx0YSgpICsgYi5kZWx0YSgp
OwotICAgIEZsb2F0U2l6ZSBtZXJnZWRXaGVlbFRpY2tzID0gYS53aGVlbFRpY2tzKCkgKyBiLndo
ZWVsVGlja3MoKTsKKyAgICBHcmFwaGljc1NpemUgbWVyZ2VkRGVsdGEgPSBhLmRlbHRhKCkgKyBi
LmRlbHRhKCk7CisgICAgR3JhcGhpY3NTaXplIG1lcmdlZFdoZWVsVGlja3MgPSBhLndoZWVsVGlj
a3MoKSArIGIud2hlZWxUaWNrcygpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiBX
ZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgYi5wb3NpdGlvbigpLCBiLmdsb2JhbFBvc2l0
aW9uKCksIG1lcmdlZERlbHRhLCBtZXJnZWRXaGVlbFRpY2tzLCBiLmdyYW51bGFyaXR5KCksIGIu
cGhhc2UoKSwgYi5tb21lbnR1bVBoYXNlKCksIGIuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygp
LCBiLm1vZGlmaWVycygpLCBiLnRpbWVzdGFtcCgpKTsKQEAgLTMxNDQsMTIgKzMxNDQsMTIgQEAg
ZmxvYXQgV2ViUGFnZVByb3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbQogICAgIHJldHVybiBtX3Vp
Q2xpZW50LmZvb3RlckhlaWdodCh0aGlzLCBmcmFtZSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29u
c3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fdWlDbGllbnQuZHJhd0hlYWRlcih0aGlz
LCBmcmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVyKFdlYkZy
YW1lUHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFdlYlBhZ2VQcm94
eTo6ZHJhd0Zvb3RlcihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBy
ZWN0KQogewogICAgIG1fdWlDbGllbnQuZHJhd0Zvb3Rlcih0aGlzLCBmcmFtZSwgcmVjdCk7CiB9
CkBAIC0zMzI4LDcgKzMzMjgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3Vic3RpdHV0aW9uc1Bh
bmVsSXNTCiB9CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi12b2lk
IFdlYlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29u
c3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBHcmFw
aGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1fcGFnZUNs
aWVudC0+c2hvd0NvcnJlY3Rpb25QYW5lbCgoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBl
KXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywg
cmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDdXJzb3I7CiAgICAgY2xhc3MgRHJhZ0Rh
dGE7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBj
bGFzcyBJbnRTaXplOwogICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBzdHJ1Y3QgVGV4
dENoZWNraW5nUmVzdWx0OwpAQCAtNDE1LDcgKzQxNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhp
ZGVGaW5kVUkoKTsKICAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBG
aW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgdm9pZCBkaWRDb3VudFN0
cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCk7Ci0gICAgdm9p
ZCBzZXRGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVj
dEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KTsKKyAgICB2b2lkIHNl
dEZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4m
IHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpOwogICAgIHZvaWQg
ZGlkRmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKICAgICB2
b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAjaWYgUExBVEZPUk0oV0lO
KQpAQCAtNDM0LDEyICs0MzQsMTIgQEAgcHVibGljOgogCiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0
KFdlYkZyYW1lUHJveHkqKTsKICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJhbWVQcm94eSop
OwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdIZWFkZXIoV2ViRnJhbWVQcm94eSosIGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJGcmFt
ZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgLy8gRGljdGlvbmFyeS4KLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYp
OwogI2VuZGlmCiAKICAgICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29yZTo6UG9s
aWN5QWN0aW9uLCBXZWJGcmFtZVByb3h5KiwgdWludDY0X3QgbGlzdGVuZXJJRCk7CkBAIC02MzIs
OCArNjMyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJsZShib29s
JiBzdGF0dXNCYXJJc1Zpc2libGUpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9vbCBpc1Jl
c2l6YWJsZSk7CiAgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJsZSk7Ci0g
ICAgdm9pZCBzZXRXaW5kb3dGcmFtZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2
b2lkIGdldFdpbmRvd0ZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgc2V0V2lu
ZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdm9pZCBnZXRXaW5k
b3dGcmFtZShXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIHNjcmVlblRvV2luZG93
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2ViQ29yZTo6SW50UG9pbnQm
IHdpbmRvd1BvaW50KTsKICAgICB2b2lkIHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHZpZXdSZWN0LCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHQpOwogICAgIHZvaWQgcnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3Qg
ZnJhbWVJRCwgYm9vbCYgc2hvdWxkQ2xvc2UpOwpAQCAtNzY5LDcgKzc2OSw3IEBAIHByaXZhdGU6
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgc3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5n
KGJvb2wmKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdm9p
ZCBzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAgIHZvaWQgZGlzbWlzc0Nv
cnJlY3Rpb25QYW5lbChpbnQzMl90IHJlYXNvbik7CiAgICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgU3RyaW5nJiByZXN1bHQpOwogICAgIHZvaWQgcmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgpIC0+IChi
b29sIHN0YXR1c0JhcklzVmlzaWJsZSkKICAgICBTZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXph
YmxlKQogICAgIEdldElzUmVzaXphYmxlKCkgLT4gKGJvb2wgaXNSZXNpemFibGUpCi0gICAgU2V0
V2luZG93RnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdldFdpbmRv
d0ZyYW1lKCkgLT4gKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKKyAgICBTZXRXaW5k
b3dGcmFtZShXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93RnJhbWUpCisgICAgR2V0V2luZG93
RnJhbWUoKSAtPiAoV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd0ZyYW1lKQogICAgIFNjcmVl
blRvV2luZG93KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29yZTo6SW50
UG9pbnQgd2luZG93UG9pbnQpCiAgICAgV2luZG93VG9TY3JlZW4oV2ViQ29yZTo6SW50UmVjdCBy
ZWN0KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkKICAgICBSdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwoV1RGOjpTdHJpbmcgbWVzc2FnZSwgdWludDY0X3QgZnJhbWVJRCkgLT4g
KGJvb2wgc2hvdWxkQ2xvc2UpCkBAIC0xNjQsNyArMTY0LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFn
ZVByb3h5IHsKIAogICAgICMgRmluZCBtZXNzYWdlcwogICAgIERpZENvdW50U3RyaW5nTWF0Y2hl
cyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCi0gICAgU2V0RmluZElu
ZGljYXRvcihXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdCwgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNv
bnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KQorICAgIFNldEZpbmRJbmRpY2F0b3IoV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0IHNlbGVjdGlvblJlY3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGlj
c1JlY3Q+IHRleHRSZWN0cywgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50
SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCkKICAgICBEaWRGaW5kU3RyaW5nKFdURjo6U3RyaW5n
IHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKICAgICBEaWRGYWlsVG9GaW5kU3RyaW5nKFdU
Rjo6U3RyaW5nIHN0cmluZykKICNpZiBQTEFURk9STShXSU4pCkBAIC0yNDYsNyArMjQ2LDcgQEAg
bWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgICMgQXV0b2NvcnJlY3Rpb24g
bWVzc2FnZXMKLSAgICBTaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBXZWJD
b3JlOjpGbG9hdFJlY3QgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFj
ZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4gYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCisgICAgU2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90
IHBhbmVsVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogICAgIERpc21pc3ND
b3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24pCiAgICAgRGlzbWlzc0NvcnJlY3Rpb25QYW5l
bFNvb24oaW50MzJfdCByZWFzb24pIC0+IChTdHJpbmcgcmVzdWx0KQogICAgIFJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIFN0cmluZyByZXBsYWNlZFN0
cmluZywgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlVJQ2xpZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBACiAjaW5jbHVkZSAiV2ViTnVtYmVyLmgiCiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1
cmVzLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBXZWJV
SUNsaWVudDo6c2V0SXNSZXNpemFibGUoV2ViUGFnZQogICAgIG1fY2xpZW50LnNldElzUmVzaXph
YmxlKHRvQVBJKHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCi12
b2lkIFdlYlVJQ2xpZW50OjpzZXRXaW5kb3dGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZnJhbWUpCit2b2lkIFdlYlVJQ2xpZW50OjpzZXRXaW5kb3dGcmFtZShXZWJQ
YWdlUHJveHkqIHBhZ2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJhbWUpCiB7CiAgICAgaWYgKCFt
X2NsaWVudC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUyLDEyICsyNTIs
MTIgQEAgdm9pZCBXZWJVSUNsaWVudDo6c2V0V2luZG93RnJhbWUoV2ViUGFnZQogICAgIG1fY2xp
ZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmNs
aWVudEluZm8pOwogfQogCi1GbG9hdFJlY3QgV2ViVUlDbGllbnQ6OndpbmRvd0ZyYW1lKFdlYlBh
Z2VQcm94eSogcGFnZSkKK0dyYXBoaWNzUmVjdCBXZWJVSUNsaWVudDo6d2luZG93RnJhbWUoV2Vi
UGFnZVByb3h5KiBwYWdlKQogewogICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJhbWUpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogCi0gICAgcmV0dXJuIHRvRmxvYXRSZWN0KG1fY2xpZW50LmdldFdpbmRvd0ZyYW1lKHRvQVBJ
KHBhZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZvKSk7CisgICAgcmV0dXJuIHRvR3JhcGhpY3NSZWN0
KG1fY2xpZW50LmdldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZv
KSk7CiB9CiAKIGJvb2wgV2ViVUlDbGllbnQ6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bCgpIGNvbnN0CkBAIC0zMzIsNyArMzMyLDcgQEAgZmxvYXQgV2ViVUlDbGllbnQ6OmZvb3Rlckhl
aWdodChXZWJQYWdlUAogICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9BUEkocGFn
ZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2ViVUlD
bGllbnQ6OmRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJVSUNsaWVudDo6ZHJh
d0hlYWRlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5kcmF3SGVh
ZGVyKQogICAgICAgICByZXR1cm47CkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBXZWJVSUNsaWVu
dDo6ZHJhd0hlYWRlcihXZWJQYWdlUHJveAogICAgIG1fY2xpZW50LmRyYXdIZWFkZXIodG9BUEko
cGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmNsaWVudEluZm8pOwog
fQogCi12b2lkIFdlYlVJQ2xpZW50OjpkcmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSogcGFnZSwgV2Vi
RnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
V2ViVUlDbGllbnQ6OmRyYXdGb290ZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5
KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmICgh
bV9jbGllbnQuZHJhd0Zvb3RlcikKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBJ
bnRTaXplOwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KQEAgLTg0LDggKzg0LDggQEAg
cHVibGljOgogICAgIGJvb2wgaXNSZXNpemFibGUoV2ViUGFnZVByb3h5Kik7CiAgICAgdm9pZCBz
ZXRJc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqLCBib29sKTsKIAotICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSopOworICAgIHZvaWQgc2V0
V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSopOwog
CiAgICAgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSBjb25zdDsKICAgICBi
b29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmLCBXZWJGcmFtZVByb3h5Kik7CkBAIC0xMDEsOCArMTAxLDggQEAgcHVibGljOgogICAgIC8v
IFByaW50aW5nLgogICAgIGZsb2F0IGhlYWRlckhlaWdodChXZWJQYWdlUHJveHkqLCBXZWJGcmFt
ZVByb3h5Kik7CiAgICAgZmxvYXQgZm9vdGVySGVpZ2h0KFdlYlBhZ2VQcm94eSosIFdlYkZyYW1l
UHJveHkqKTsKLSAgICB2b2lkIGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94
eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJQ
YWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Cisg
ICAgdm9pZCBkcmF3SGVhZGVyKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFnZVByb3h5
KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZv
aWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5Kik7CiAKICAgICBib29s
IGNhblJ1bk1vZGFsKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUxLDEzICsxNTEsMTMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0
ZVVuZG9SZWRvKFdlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBQYWdl
Q2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVj
dCkKK0dyYXBoaWNzUmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29u
c3QgR3JhcGhpY3NSZWN0JiB2aWV3UmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
IHJldHVybiB2aWV3UmVjdDsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK0dyYXBoaWNzUmVjdCBQYWdl
Q2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgdmlld1Jl
Y3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdmlld1JlY3Q7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBs
LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
UGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwg
Ym9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9V
c2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpHcmFwaGljc1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNl
clNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdl
Q2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc0LDEzICsxNzQsMTMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9SZWRv
KFdlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBQYWdlQ2xpZW50SW1w
bDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK0dyYXBo
aWNzUmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgR3JhcGhp
Y3NSZWN0JiB2aWV3UmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB2
aWV3UmVjdDsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK0dyYXBoaWNzUmVjdCBQYWdlQ2xpZW50SW1w
bDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgdmlld1JlY3QpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdmlld1JlY3Q7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5V
bmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNlclNwYWNlKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9p
bnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUZXh0SW5wdXRTdGF0ZShib29sIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUpOwogICAg
IHZpcnR1YWwgdm9pZCByZXNldFRleHRJbnB1dFN0YXRlKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNlclNwYWNlKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9p
bnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwogICAgIApAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBzY2FsZUZhY3Rv
ciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNz
RGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZp
cnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncyk7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmly
dHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoV2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJl
c3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgogI2lt
cG9ydCAiV2ViUG9wdXBNZW51UHJveHlNYWMuaCIKICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4dHJhcy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVu
dC5oPgpAQCAtMjY5LDEyICsyNjksMTIgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVzZXRUZXh0
SW5wdXRTdGF0ZQogICAgIFttX3drVmlldyBfcmVzZXRUZXh0SW5wdXRTdGF0ZV07CiB9CiAKLUZs
b2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VT
cGFjZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIFttX3drVmlldyBf
Y29udmVydFRvRGV2aWNlU3BhY2U6cmVjdF07CiB9CiAKLUZsb2F0UmVjdCBQYWdlQ2xpZW50SW1w
bDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0dyYXBoaWNzUmVj
dCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9Vc2VyU3BhY2U6cmVjdF07
CiB9CkBAIC00MjQsNyArNDI0LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0RpY3Rp
b25hcnlMbwogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3JyZWN0aW9u
UGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
aG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBj
b25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBpZiAoIWlzVmlld1Zpc2li
bGUoKSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3
IEBACiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0RyYWdEYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzUmVjdC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CkBAIC0yNDkw
LDcgKzI0OTAsNyBAQCAtICh2b2lkKXBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRDdXJyZW50CiAg
ICAgdGhlUG9pbnQgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnRoZVBvaW50
XTsKICAgICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2ludCBmcm9tVmlldzpu
aWxdOwogCi0gICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oRmxvYXRQb2ludCh0aGVQb2ludC54LCB0aGVQb2ludC55KSk7CisgICAgX2RhdGEtPl9wYWdl
LT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oR3JhcGhpY3NQb2ludCh0aGVQb2lu
dC54LCB0aGVQb2ludC55KSk7CiB9CiAKIC0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJEb2N1bWVu
dFRhZwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25Q
YW5lbC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Q29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3Mg
Q29ycmVjdGlvblBhbmVsIHsKIHB1YmxpYzoKICAgICBDb3JyZWN0aW9uUGFuZWwoKTsKICAgICB+
Q29ycmVjdGlvblBhbmVsKCk7Ci0gICAgdm9pZCBzaG93KFdLVmlldyosIFdlYkNvcmU6OkNvcnJl
Y3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRl
cm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdm9pZCBzaG93KFdLVmlldyosIFdlYkNv
cmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgU3RyaW5nIGRpc21p
c3MoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgc3Rh
dGljIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXS1ZpZXcqLCBOU0NvcnJlY3Rp
b25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudFN0cmluZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Q29ycmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02
MCw3ICs2MCw3IEBAIENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgpCiAgICAgZGlz
bWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBm
YWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmlldywgQ29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhXS1Zp
ZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBHcmFw
aGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIGRpc21pc3NJ
bnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwgZmFsc2Up
OwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQgPENhcmJvbi9D
YXJib24uaD4gLy8gRm9yIFNldFN5c3RlbVVJTW9kZSgpCiAjaW1wb3J0IDxJT0tpdC9wd3JfbWd0
L0lPUE1MaWIuaD4gLy8gRm9yIElPUE1Bc3NlcnRpb25DcmVhdGUoKQogI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYk5TV2luZG93RXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNyAr
MjY4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERyYWdJbWFnZShjb25zdCBXZQogICAgIG1f
cGFnZUNsaWVudC0+c2V0RHJhZ0ltYWdlKGNsaWVudFBvc2l0aW9uLCBkcmFnSW1hZ2UucmVsZWFz
ZSgpLCBpc0xpbmtEcmFnKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludCkKK3Zv
aWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBACiAjaW5jbHVkZSA8UXREZWJ1Zz4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tGcmFtZS5oPgogI2luY2x1ZGUg
PFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIFF0V2ViUGFn
ZVByb3h5OjpleGVjdXRlVW5kb1JlZG8oV2ViCiAgICAgICAgIG1fdW5kb1N0YWNrLT5yZWRvKCk7
CiB9CiAKLUZsb2F0UmVjdCBRdFdlYlBhZ2VQcm94eTo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFF0V2ViUGFnZVByb3h5Ojpjb252ZXJ0
VG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHJl
Y3Q7CiB9CkBAIC0zNzYsNyArMzc2LDcgQEAgSW50UmVjdCBRdFdlYlBhZ2VQcm94eTo6d2luZG93
VG9TY3JlZW4oYwogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFJlY3QgUXRXZWJQYWdlUHJv
eHk6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitHcmFwaGljc1Jl
Y3QgUXRXZWJQYWdlUHJveHk6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QpCiB7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE2LDggKzExNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2
aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNl
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3Jh
cGhpY3NSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1Rv
U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQ
cm94eVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIFdlYlBv
cHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpCiAgICAgTU9OSVRPUklORk9FWCBtb25pdG9y
SW5mbzsKICAgICBtb25pdG9ySW5mby5jYlNpemUgPSBzaXplb2YoTU9OSVRPUklORk9FWCk7CiAg
ICAgOjpHZXRNb25pdG9ySW5mbyhtb25pdG9yLCAmbW9uaXRvckluZm8pOwotICAgIEZsb2F0UmVj
dCBzY3JlZW4gPSBtb25pdG9ySW5mby5yY1dvcms7CisgICAgR3JhcGhpY3NSZWN0IHNjcmVlbiA9
IG1vbml0b3JJbmZvLnJjV29yazsKIAogICAgIC8vIENoZWNrIHRoYXQgd2UgZG9uJ3QgZ28gb2Zm
IHRoZSBzY3JlZW4gdmVydGljYWxseQogICAgIGlmIChwb3B1cFJlY3QubWF4WSgpID4gc2NyZWVu
LmhlaWdodCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5j
cHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9FZGl0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNlbmRpZgpAQCAtMTEyNyw3ICsxMTI3LDcgQEAgdm9p
ZCBXZWJWaWV3OjpzZXRDdXN0b21Ecm9wVGFyZ2V0KElEcm9wVAogICAgICAgICA6OlJlZ2lzdGVy
RHJhZ0Ryb3AobV93aW5kb3csIHRoaXMpOwogfQogCi1GbG9hdFJlY3QgV2ViVmlldzo6Y29udmVy
dFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFdlYlZp
ZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAg
ICByZXR1cm4gcmVjdDsKIH0KQEAgLTExNDIsNyArMTE0Miw3IEBAIEludFJlY3QgV2ViVmlldzo6
d2luZG93VG9TY3JlZW4oY29uc3QgSW4KICAgICByZXR1cm4gcmVjdDsKIH0KIAotRmxvYXRSZWN0
IFdlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitHcmFw
aGljc1JlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICByZXR1cm4gcmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsOCArMTkwLDggQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0
dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRU
b1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5MzksNiArMzkzOSw5IEBACiAvKiBCZWdpbiBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2pl
Y3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJpYnV0ZXMgPSB7
CisJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gTk87CisJCQl9OwogCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDFERUI5MUIxMDg3MzNEQTUwMDEwRTlDRCAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYktpdDIiICovOwogCQkJY29t
cGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4xIjsKIAkJCWRldmVsb3BtZW50UmVnaW9uID0g
RW5nbGlzaDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgaW50IEluamVjdGVkQnVuZGxl
OjpudW1iZXJPZlBhZ2VzKFdlYkZyYQogICAgIGlmICghcGFnZUhlaWdodEluUGl4ZWxzKQogICAg
ICAgICBwYWdlSGVpZ2h0SW5QaXhlbHMgPSBjb3JlRnJhbWUtPnZpZXcoKS0+aGVpZ2h0KCk7CiAK
LSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgRmxvYXRT
aXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKKyAgICByZXR1cm4g
UHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgR3JhcGhpY3NTaXplKHBhZ2VX
aWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIAogaW50IEluamVjdGVkQnVu
ZGxlOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIGlkLCBkb3VibGUgcGFnZVdpZHRoSW5QaXhlbHMsIGRvdWJsZSBwYWdlSGVpZ2h0SW5QaXhl
bHMpCkBAIC0yMTEsNyArMjExLDcgQEAgaW50IEluamVjdGVkQnVuZGxlOjpwYWdlTnVtYmVyRm9y
RWxlbWVudAogICAgIGlmICghcGFnZUhlaWdodEluUGl4ZWxzKQogICAgICAgICBwYWdlSGVpZ2h0
SW5QaXhlbHMgPSBjb3JlRnJhbWUtPnZpZXcoKS0+aGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gUHJp
bnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChlbGVtZW50LCBGbG9hdFNpemUocGFnZVdp
ZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgIHJldHVybiBQcmludENvbnRl
eHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJ
blBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKIFN0cmluZyBJbmplY3RlZEJ1bmRs
ZTo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoV2ViRnJhbWUqIGZyYW1lLCBpbnQgcGFnZUlu
ZGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdo
dCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIFdLQnVuZGxlUGFnZU92
ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmwKIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVybGF5U2V0
TmVlZHNEaXNwbGF5KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYs
IFdLUmVjdCByZWN0KQogewotICAgIHRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZiktPnNldE5l
ZWRzRGlzcGxheShlbmNsb3NpbmdJbnRSZWN0KHRvRmxvYXRSZWN0KHJlY3QpKSk7CisgICAgdG9J
bXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2luZ0ludFJl
Y3QodG9HcmFwaGljc1JlY3QocmVjdCkpKTsKIH0KIAogZmxvYXQgV0tCdW5kbGVQYWdlT3Zlcmxh
eUZyYWN0aW9uRmFkZWRJbihXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VPdmVybGF5
UmVmKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21h
Yy9OZXRzY2FwZVBsdWdpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tCShyZXZpc2lv
biA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9t
YWMvTmV0c2NhcGVQbHVnaW5NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBA
QCBOUEJvb2wgTmV0c2NhcGVQbHVnaW46OmNvbnZlcnRQb2ludChkb3ViCiAgICAgZG91YmxlIHNv
dXJjZVhJblNjcmVlblNwYWNlOwogICAgIGRvdWJsZSBzb3VyY2VZSW5TY3JlZW5TcGFjZTsKIAot
ICAgIEZsb2F0UG9pbnQgc291cmNlSW5TY3JlZW5TcGFjZTsKKyAgICBHcmFwaGljc1BvaW50IHNv
dXJjZUluU2NyZWVuU3BhY2U7CiAgICAgc3dpdGNoIChzb3VyY2VTcGFjZSkgewogICAgIGNhc2Ug
TlBDb29yZGluYXRlU3BhY2VQbHVnaW46CiAgICAgICAgIHNvdXJjZVhJblNjcmVlblNwYWNlID0g
c291cmNlWCArIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLngoKSArIG1fdmlld0Zy
YW1lSW5XaW5kb3dDb29yZGluYXRlcy54KCkgKyBtX25wV2luZG93Lng7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDEx
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2lu
WDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDcgKzM3NCw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBzZXRYQnV0dG9uRXZlbnRGaWVsZHMKICAgICBzZXRDb21tb25Nb3VzZUV2ZW50RmllbGRz
KHhCdXR0b24sIHdlYkV2ZW50LCBwbHVnaW5Mb2NhdGlvbik7CiAKICAgICB4QnV0dG9uLnR5cGUg
PSBCdXR0b25QcmVzczsKLSAgICBGbG9hdFNpemUgdGlja3MgPSB3ZWJFdmVudC53aGVlbFRpY2tz
KCk7CisgICAgR3JhcGhpY3NTaXplIHRpY2tzID0gd2ViRXZlbnQud2hlZWxUaWNrcygpOwogICAg
IGlmICh0aWNrcy5oZWlnaHQoKSkgewogICAgICAgICBpZiAodGlja3MuaGVpZ2h0KCkgPiAwKQog
ICAgICAgICAgICAgeEJ1dHRvbi5idXR0b24gPSA0OyAvLyB1cApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDI0ICs5NSwyNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKCkKICAg
ICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiB3aW5kb3dGcmFtZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRX
aW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgd2luZG93RnJhbWUpCiB7CiAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFdpbmRvd0ZyYW1lKHdpbmRvd0ZyYW1l
KSk7CiB9CiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQorR3JhcGhp
Y3NSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCiB7Ci0gICAgRmxvYXRSZWN0IG5l
d1dpbmRvd0ZyYW1lOworICAgIEdyYXBoaWNzUmVjdCBuZXdXaW5kb3dGcmFtZTsKIAogICAgIGlm
ICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZSgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpH
ZXRXaW5kb3dGcmFtZTo6UmVwbHkobmV3V2luZG93RnJhbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkK
LSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7CiAKICAgICByZXR1cm4gbmV3V2luZG93RnJhbWU7CiB9CiAKLUZsb2F0UmVjdCBXZWJDaHJv
bWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6OnBhZ2VS
ZWN0KCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9wYWdlLT5zaXpl
KCkpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX3BhZ2UtPnNp
emUoKSk7CiB9CiAKIGZsb2F0IFdlYkNocm9tZUNsaWVudDo6c2NhbGVGYWN0b3IoKQpAQCAtNTU5
LDEzICs1NTksMTMgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRlZExpbgog
ewogfQogCi1GbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KE5v
ZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3Qp
CitHcmFwaGljc1JlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUq
LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGluZVJlY3Qp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAg
cmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6cGFpbnRD
dXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBs
aW5lUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJlaGluZFRl
eHQsIGJvb2wgZW50aXJlTGluZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNTgyLDcg
KzU4Miw3IEBAIFN0cmluZyBXZWJDaHJvbWVDbGllbnQ6OmdlbmVyYXRlUmVwbGFjZW0KICAgICBy
ZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkuZ2VuZXJhdGVGaWxlRm9yVXBs
b2FkKG1fcGFnZSwgcGF0aCk7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3Rv
bVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSwgCitib29sIFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiYXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJh
ckNvbnRyb2xTdGF0ZSwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSwg
ZmxvYXQgcHJvcG9ydGlvbiwgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrKQogewpAQCAtNTkwLDcg
KzU5MCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9s
bENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQorYm9vbCBXZWJDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRX
aW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVj
dChjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAgICAgCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9h
dFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBwYWdl
UmVjdCgpOwogICAgIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKICAgICAKQEAg
LTE0OSwxNyArMTQ5LDE3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVW
aXNpdGVkTGlua3MoKTsKICAgICAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjdXN0
b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
dHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsaW5lUmVjdCk7Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhp
Y3NSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRv
bWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGxpbmVSZWN0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSosIGNv
bnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
IGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRp
cmVMaW5lKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0
ZWRGaWxlRm9yVXBsb2FkKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RyaW5nJiBnZW5lcmF0ZWRGaWxl
bmFtZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxi
YXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
V2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUsIAorICAgIHZpcnR1YWwgYm9vbCBwYWludEN1
c3RvbVNjcm9sbGJhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QmLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTdGF0
ZSwgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZsb2F0IHBy
b3BvcnRpb24sIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayk7Ci0gICAgdmlydHVh
bCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3Rv
bVNjcm9sbENvcm5lcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbU92ZXJoYW5nQXJl
YShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1l
dGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGludCwgV2ViQ29yZTo6VGV4dENoZWNr
aW5nVHlwZU1hc2ssIGNvbnN0IFdURjo6U3RyaW5nJik7CiAjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
ZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVj
dGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwog
ICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJl
YXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpyZW1vdmVGcm9tUGFyZW50KAogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAg
ICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUyLDcgKzE1Miw3
IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QKICAgICBub3RpZnlD
aGFuZ2UoKTsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50
KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkKIHsKICAgICBpZiAoYW5jaG9yUG9pbnQoKSA9PSBw
KQogICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRBbmNob3JQb2ludChjbwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBp
ZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNSw3ICszMDUs
NyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgpCiAgICAgbm90aWZ5
Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBtX25lZWRz
RGlzcGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CkBAIC0zMjUsNyAr
MzI1LDcgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRTeW5jaHJvbml6ZSgpCiB7CiAgICAg
bV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICBtX21vZGlmaWVkID0gZmFsc2U7Ci0gICAgbV9u
ZWVkc0Rpc3BsYXlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0g
R3JhcGhpY3NSZWN0KCk7CiAgICAgaWYgKG1faGFzUGVuZGluZ0FuaW1hdGlvbnMpCiAgICAgICAg
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgpKTsKICAgICBtX2hhc1Bl
bmRpbmdBbmltYXRpb25zID0gZmFsc2U7CkBAIC0zNTIsOSArMzUyLDkgQEAgV2ViR3JhcGhpY3NM
YXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJH
cmFwaGljc0xheWVyKj4obGF5ZXIpOwogfQogCi1GbG9hdFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6
bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3QgV2ViR3JhcGhpY3NMYXllcjo6
bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NS
ZWN0IHJlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWln
aHQoKSk7CiAgICAgaWYgKCFtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3Qo
bV9uZWVkc0Rpc3BsYXlSZWN0KTsKICAgICByZXR1cm4gcmVjdDsKQEAgLTM4Myw3ICszODMsNyBA
QCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0CiAgICAgbV9sYXllcklu
Zm8ucG9zID0gcG9zaXRpb24oKTsKICAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNl
cnZlczNEKCk7CiAgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChyZXBsaWNh
TGF5ZXIoKSk7Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9IEZsb2F0U2l6ZShzaXplKCkud2lkdGgo
KSAqIG1fY29udGVudFNjYWxlLCBzaXplKCkuaGVpZ2h0KCkgKiBtX2NvbnRlbnRTY2FsZSk7Cisg
ICAgbV9sYXllckluZm8uc2l6ZSA9IEdyYXBoaWNzU2l6ZShzaXplKCkud2lkdGgoKSAqIG1fY29u
dGVudFNjYWxlLCBzaXplKCkuaGVpZ2h0KCkgKiBtX2NvbnRlbnRTY2FsZSk7CiAgICAgbV9sYXll
ckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNEaXNwbGF5
ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKQEAgLTM5MiwxMiAr
MzkyLDEyIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICAg
ICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ld
KSk7CiB9CiAKLXN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBkaXZpZGVJbnRvVGlsZXMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorc3RhdGljIFZlY3RvcjxHcmFwaGljc1JlY3Q+IGRpdmlkZUludG9U
aWxlcyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4g
dGlsZXM7CisgICAgVmVjdG9yPEdyYXBoaWNzUmVjdD4gdGlsZXM7CiAgICAgZm9yIChmbG9hdCB5
ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgeSArPSBnVGlsZURpbWVuc2lvbikgewogICAg
ICAgICBmb3IgKGZsb2F0IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyB4ICs9IGdUaWxl
RGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh4LCB5LCBnVGlsZURpbWVu
c2lvbiwgZ1RpbGVEaW1lbnNpb24pOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHRpbGUoeCwg
eSwgZ1RpbGVEaW1lbnNpb24sIGdUaWxlRGltZW5zaW9uKTsKICAgICAgICAgICAgIHRpbGUuaW50
ZXJzZWN0KHJlY3QpOwogICAgICAgICAgICAgdGlsZXMuYXBwZW5kKHRpbGUpOwogICAgICAgICB9
CkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9V
SVBybwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllcnNbaV07Ci0gICAgICAgIEZs
b2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKTsKKyAgICAgICAg
R3JhcGhpY3NSZWN0IHVwZGF0ZVJlY3QgPSBsYXllci0+bmVlZHNEaXNwbGF5UmVjdCgpOwogCiAg
ICAgICAgIGxheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwogCkBAIC00NjYsOSArNDY2LDkgQEAgdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9VSVBybwogICAgICAgICBlbHNlIGlmICgh
bGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
VmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3Qp
OworICAgICAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJbnRvVGls
ZXModXBkYXRlUmVjdCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJ
bmRleCA8IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAgICAgICBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07CisgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07CiAg
ICAgICAgICAgICBJbnRSZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KHRpbGVSZWN0KTsKIAogICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvIGNodW5rKGVuY2xv
c2luZ1VwZGF0ZVJlY3QpOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2VuZExheWVyc1RvVUlQcm8KICAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5zbGF0ZSgt
dGlsZVJlY3QueCgpLCAtdGlsZVJlY3QueSgpKTsKICAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgmcGFpbnRlcik7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdEltYWdl
KQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShkaXJlY3RJbWFnZS5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVjdCgpLCBGbG9hdFJlY3Qo
MCwgMCwgZGlyZWN0SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5oZWlnaHQoKSkpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShkaXJlY3RJbWFnZS5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVjdCgpLCBHcmFwaGljc1JlY3QoMCwg
MCwgZGlyZWN0SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5oZWlnaHQoKSkpOwogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3JhcGhpY3NM
YXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ1VwZGF0ZVJlY3QpOwogICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgV2ViR3JhcGhpY3NMYXllcl9o
CiAjZGVmaW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNTIsOSArNTIs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFw
aGljc0xheWVyKik7CiAgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBo
aWNzTGF5ZXIqKTsKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAg
ICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOworICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBHcmFwaGljc1NpemUmKTsKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOwogICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmKTsKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwpAQCAtNzEs
MTQgKzcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVy
Kik7CiAgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmKTsKICAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgV2ViS2l0OjpXZWJM
YXllcklEIGlkKCkgY29uc3Q7CiAgICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8mIGxheWVy
SW5mbygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Q7Cisg
ICAgR3JhcGhpY3NSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25zdDsKICAgICBzdGF0aWMgVmVj
dG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gdGFrZUxheWVyc1RvRGVsZXRlKCk7CiAgICAgc3RhdGlj
IFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwogICAgIGJv
b2wgaXNNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kaWZpZWQ7IH0KQEAgLTkzLDcgKzkz
LDcgQEAgcHJpdmF0ZToKICAgICBXZWJLaXQ6OldlYkxheWVySW5mbyBtX2xheWVySW5mbzsKICAg
ICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IG1fYmFja2luZ1N0b3JlOwogICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0Owor
ICAgIEdyYXBoaWNzUmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7CiAgICAgYm9vbCBtX25lZWRzRGlz
cGxheTsKICAgICBib29sIG1fbW9kaWZpZWQ7CiAgICAgYm9vbCBtX2NvbnRlbnROZWVkc0Rpc3Bs
YXk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJFZGl0b3JDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmEKIH0KIAogI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29y
cmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb3JyZWN0aW9uUGFuZWwodHlwZSwgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcs
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDcgKzY0NCw3IEBAIHZvaWQgRHJh
d2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUluZm8KICAgICBtX3Njcm9sbE9mZnNldCA9IElu
dFNpemUoKTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpOwotICAgIGdyYXBoaWNzQ29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3IoKSwgbV93
ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5z
Y2FsZShHcmFwaGljc1NpemUobV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpLCBtX3dl
YlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCkpKTsKIAogICAgIHVwZGF0ZUluZm8udXBkYXRl
UmVjdEJvdW5kcyA9IGJvdW5kczsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIEZpbmRDb250cm9sbGVyOjp1cGRh
dGVGaW5kSW5kaWNhdG9yCiAgICAgLy8gV2Ugd2FudCB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2lu
ZG93IGNvb3JkaW5hdGVzLgogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMgPSBzZWxlY3RlZEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coc2VsZWN0aW9u
UmVjdCk7CiAgICAgCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzOworICAgIFZlY3Rv
cjxHcmFwaGljc1JlY3Q+IHRleHRSZWN0czsKICAgICBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24o
KS0+Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOwogCiAgICAgLy8g
Q3JlYXRlIGEgYmFja2luZyBzdG9yZSBhbmQgcGFpbnQgdGhlIGZpbmQgaW5kaWNhdG9yIHRleHQg
aW50byBpdC4KQEAgLTE5OCw3ICsxOTgsNyBAQCBib29sIEZpbmRDb250cm9sbGVyOjp1cGRhdGVG
aW5kSW5kaWNhdG9yCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIHdhbnQgdGhl
IHRleHQgcmVjdHMgaW4gc2VsZWN0aW9uIHJlY3QgY29vcmRpbmF0ZXMuCi0gICAgVmVjdG9yPEZs
b2F0UmVjdD4gdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAgVmVjdG9y
PEdyYXBoaWNzUmVjdD4gdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CiAgICAg
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgSW50UmVjdCB0ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzID0gc2VsZWN0
ZWRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodGV4dFJl
Y3RzW2ldKSk7CkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZp
bmRJbmRpY2F0b3IoKQogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNldEZpbmRJbmRpY2F0b3IoRmxvYXRSZWN0KCksIFZlY3RvcjxGbG9hdFJlY3Q+KCksIGhhbmRs
ZSwgZmFsc2UpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0RmluZEluZGljYXRvcihHcmFwaGljc1JlY3QoKSwgVmVjdG9yPEdyYXBoaWNzUmVjdD4oKSwg
aGFuZGxlLCBmYWxzZSkpOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZhbHNlOwog
fQogCkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFn
ZU92ZXJsYQogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRv
dyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRp
dXMsIGhvbGVTaGFkb3dDb2xvcihmcmFjdGlvbkZhZGVkSW4pLCBDb2xvclNwYWNlU1JHQik7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd09mZnNl
dFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBob2xlU2hhZG93Q29sb3IoZnJh
Y3Rpb25GYWRlZEluKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0RmlsbENvbG9yKGhvbGVGaWxsQ29sb3IoZnJhY3Rpb25GYWRlZEluKSwgQ29sb3JTcGFjZVNS
R0IpOwogCiAgICAgICAgIC8vIERyYXcgd2hpdGUgZnJhbWVzIGFyb3VuZCB0aGUgaG9sZXMuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTE0LDcgKzkxNCw3IEBAIFBhc3NSZWZQdHI8V2Vi
SW1hZ2U+IFdlYlBhZ2U6OnNjYWxlZFNuYXAKICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsK
ICAgICAKICAgICBpZiAoc2NhbGUpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsKICAgICAK
ICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAg
ICAgZnJhbWVWaWV3LT5wYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgcmVjdCk7
CkBAIC0yMjgyLDcgKzIyODIsNyBAQCB2b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRpbmcodWludDY0
X3QgZnJhCiAgICAgbV9wcmludENvbnRleHQtPmJlZ2luKHByaW50SW5mby5hdmFpbGFibGVQYXBl
cldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpOwogCiAgICAgZmxvYXQgZnVs
bFBhZ2VIZWlnaHQ7Ci0gICAgbV9wcmludENvbnRleHQtPmNvbXB1dGVQYWdlUmVjdHMoRmxvYXRS
ZWN0KDAsIDAsIHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxh
YmxlUGFwZXJIZWlnaHQpLCAwLCAwLCBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3IsIGZ1
bGxQYWdlSGVpZ2h0LCB0cnVlKTsKKyAgICBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0
cyhHcmFwaGljc1JlY3QoMCwgMCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50
SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCksIDAsIDAsIHByaW50SW5mby5wYWdlU2V0dXBTY2Fs
ZUZhY3RvciwgZnVsbFBhZ2VIZWlnaHQsIHRydWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmVuZFBy
aW50aW5nKCkKQEAgLTIyOTksNyArMjI5OSw3IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZVBhZ2Vz
Rm9yUHJpbnRpbmcodWkKIAogICAgIGlmIChtX3ByaW50Q29udGV4dCkgewogICAgICAgICByZXN1
bHRQYWdlUmVjdHMgPSBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3RzKCk7Ci0gICAgICAgIHJlc3Vs
dFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyA9IG1fcHJpbnRDb250ZXh0LT5jb21wdXRlQXV0
b21hdGljU2NhbGVGYWN0b3IoRmxvYXRTaXplKHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRo
LCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpKSAqIHByaW50SW5mby5wYWdlU2V0dXBT
Y2FsZUZhY3RvcjsKKyAgICAgICAgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0g
bV9wcmludENvbnRleHQtPmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3RvcihHcmFwaGljc1NpemUo
cHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhl
aWdodCkpICogcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yOwogICAgIH0KIAogICAgIC8v
IElmIHdlJ3JlIGFza2VkIHRvIHByaW50LCB3ZSBzaG91bGQgYWN0dWFsbHkgcHJpbnQgYXQgbGVh
c3QgYSBibGFuayBwYWdlLgpAQCAtMjMzMCw3ICsyMzMwLDcgQEAgdm9pZCBXZWJQYWdlOjpkcmF3
UmVjdFRvUERGKHVpbnQ2NF90IGZyYQogICAgICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29u
dGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
dHgoY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsK
KyAgICAgICAgY3R4LnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgICAgICBjdHgudHJh
bnNsYXRlKDAsIC1yZWN0LmhlaWdodCgpKTsKICAgICAgICAgbV9wcmludENvbnRleHQtPnNwb29s
UmVjdChjdHgsIHJlY3QpOwogCkBAIC0yMzY2LDcgKzIzNjYsNyBAQCB2b2lkIFdlYlBhZ2U6OmRy
YXdQYWdlc1RvUERGKHVpbnQ2NF90IGZyCiAgICAgICAgICAgICBDR1BERkNvbnRleHRCZWdpblBh
Z2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCiAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOwotICAgICAgICAgICAgY3R4LnNjYWxlKEZsb2F0
U2l6ZSgxLCAtMSkpOworICAgICAgICAgICAgY3R4LnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkp
OwogICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VSZWN0
KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2Uo
Y3R4LCBwYWdlLCBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSkud2lkdGgoKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNp
b24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNyArNTIwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dEN1c3RvbVRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJik7CiAKICNpZiBQTEFURk9STShN
QUMpCi0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYpOworICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExv
Y2F0aW9uKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQmKTsKICAgICB2b2lkIHBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRGljdGlvbmFyeVBvcHVwSW5mbzo6VHlwZSwgV2ViQ29y
ZTo6RnJhbWUqLCBXZWJDb3JlOjpSYW5nZSosIE5TRGljdGlvbmFyeSAqb3B0aW9ucyk7CiAKICAg
ICB2b2lkIHNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAjIERpY3Rp
b25hcnkgc3VwcG9ydC4KLSAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oV2Vi
Q29yZTo6RmxvYXRQb2ludCBwb2ludCkKKyAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24oV2ViQ29yZTo6R3JhcGhpY3NQb2ludCBwb2ludCkKICNlbmRpZgogCiAgICAgUHJlZmVy
ZW5jZXNEaWRDaGFuZ2UoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlIHN0b3JlKQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVy
VHJlZUhvc3RDQS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MywxNiArMTMzLDE2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdENBOjpzaXplRGlkQ2hhbmdlKGNvbnMK
IAogICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29t
cG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAogICAgIC8vIGZvciB0
aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgR3JhcGhpY3NTaXplIG9sZFNpemUg
PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CiAKICAgICBpZiAobmV3U2l6ZS53aWR0
aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7Ci0gICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWlu
KHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNp
emUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0
YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0
KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChHcmFwaGljc1JlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkg
LSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwogICAgIH0KIAogICAgIGlmIChuZXdTaXplLmhl
aWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0
KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoR3JhcGhpY3NSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwg
bmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChtX3BhZ2VP
dmVybGF5TGF5ZXIpCiAgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXpl
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsNyAr
NDM0LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlU2VsZWN0aW9uKGNvbnN0IFZpcwogICAgIHJl
dHVybiBpc1Bvc2l0aW9uSW5SYW5nZShwb3NpdGlvbiwgc2VsZWN0ZWRSYW5nZS5nZXQoKSk7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBmbG9hdFBvaW50KQogewogICAg
IEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAg
LTUyOSw3ICs1MjksNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9y
CiAgICAgaWYgKCFmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1
YWRzOwogICAgIHJhbmdlLT50ZXh0UXVhZHMocXVhZHMpOwogICAgIGlmIChxdWFkcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yCiAgICAgCiAgICAgRGljdGlvbmFyeVBvcHVwSW5mbyBk
aWN0aW9uYXJ5UG9wdXBJbmZvOwogICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udHlwZSA9IHR5cGU7
Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdlUmVjdC54
KCksIHJhbmdlUmVjdC55KCkpOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2luID0gR3Jh
cGhpY3NQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpKTsKICAgICBkaWN0aW9uYXJ5
UG9wdXBJbmZvLmZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gZm9udERlc2NyaXB0
b3JBdHRyaWJ1dGVzOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAg
ICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKW9wdGlvbnM7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5n
QXJlYVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnBhaW50
SW50b0JpdG1hcChTCiB7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0KGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwogICAgIGdyYXBoaWNzQ29udGV4
dC0+dHJhbnNsYXRlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAgIGdyYXBoaWNz
Q29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxlLCBzY2FsZSkpOwotICAgIEludFJlY3QgY29u
dGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0aWxlUmVjdC54KCkgLyBzY2Fs
ZSwKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShzY2FsZSwgc2NhbGUp
KTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChHcmFwaGljc1Jl
Y3QodGlsZVJlY3QueCgpIC8gc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LnkoKSAvIHNjYWxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgp
IC8gc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbGVSZWN0LmhlaWdodCgpIC8gc2NhbGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L21hYy9XZWJLaXQyLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL21hYy9XZWJL
aXQyLm9yZGVyCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQyL21hYy9XZWJLaXQy
Lm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc5LDcgKzE0NzksNyBAQCBfV0tQYWdlSGFzSG9y
aXpvbnRhbFNjcm9sbGJhcgogX19aTjZXZWJLaXQxOU5hdGl2ZVdlYldoZWVsRXZlbnRDMUVQN05T
RXZlbnRQNk5TVmlldwogX19aTjZXZWJLaXQxNVdlYkV2ZW50RmFjdG9yeTE5Y3JlYXRlV2ViV2hl
ZWxFdmVudEVQN05TRXZlbnRQNk5TVmlldwogX1dLR2V0V2hlZWxFdmVudERlbHRhcwotX19aTjZX
ZWJLaXQxM1dlYldoZWVsRXZlbnRDMUVOU184V2ViRXZlbnQ0VHlwZUVSS043V2ViQ29yZThJbnRQ
b2ludEVTNl9SS05TM185RmxvYXRTaXplRVM5X05TMF8xMUdyYW51bGFyaXR5RU5TMF81UGhhc2VF
U0JfYk5TMV85TW9kaWZpZXJzRWQKK19fWk42V2ViS2l0MTNXZWJXaGVlbEV2ZW50QzFFTlNfOFdl
YkV2ZW50NFR5cGVFUktON1dlYkNvcmU4SW50UG9pbnRFUzZfUktOUzNfMTJHcmFwaGljc1NpemVF
UzlfTlMwXzExR3JhbnVsYXJpdHlFTlMwXzVQaGFzZUVTQl9iTlMxXzlNb2RpZmllcnNFZAogX19a
TjZXZWJLaXQxMldlYlBhZ2VQcm94eTE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE5TmF0aXZlV2Vi
V2hlZWxFdmVudEUKIF9fWk4zV1RGNlZlY3RvcklONldlYktpdDE5TmF0aXZlV2ViV2hlZWxFdmVu
dEVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbVBLUzJfCiBfX1pOM1dURjZWZWN0b3JJTjZXZWJLaXQx
OU5hdGl2ZVdlYldoZWVsRXZlbnRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCkBAIC0yMTgyLDE3
ICsyMTgyLDE3IEBAIF9fWk42V2ViS2l0MTFXZWJVSUNsaWVudDE5c2V0TWVudUJhcklzVmkKIF9f
Wk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3NhZ2VzMTJXZWJQYWdlUHJveHkxNFNldElz
UmVzaXphYmxlRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2YkVFRXZQTlNfMTVBcmd1bWVu
dERlY29kZXJFUFQwX1QxXwogX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE0c2V0SXNSZXNpemFi
bGVFYgogX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50MTRzZXRJc1Jlc2l6YWJsZUVQTlNfMTJXZWJQ
YWdlUHJveHlFYgotX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMxMldlYlBh
Z2VQcm94eTE0R2V0V2luZG93RnJhbWVFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVfRnZSTjdX
ZWJDb3JlOUZsb2F0UmVjdEVFRUV2UE5TXzE1QXJndW1lbnREZWNvZGVyRVBOU18xNUFyZ3VtZW50
RW5jb2RlckVQVDBfVDFfCi1fX1pONldlYktpdDEyV2ViUGFnZVByb3h5MTRnZXRXaW5kb3dGcmFt
ZUVSTjdXZWJDb3JlOUZsb2F0UmVjdEUKK19fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1l
c3NhZ2VzMTJXZWJQYWdlUHJveHkxNEdldFdpbmRvd0ZyYW1lRU42V2ViS2l0MTJXZWJQYWdlUHJv
eHlFTVM1X0Z2Uk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUVFRXZQTlNfMTVBcmd1bWVudERlY29k
ZXJFUE5TXzE1QXJndW1lbnRFbmNvZGVyRVBUMF9UMV8KK19fWk42V2ViS2l0MTJXZWJQYWdlUHJv
eHkxNGdldFdpbmRvd0ZyYW1lRVJON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIF9fWk42V2ViS2l0
MTFXZWJVSUNsaWVudDExd2luZG93RnJhbWVFUE5TXzEyV2ViUGFnZVByb3h5RQotX19aTjZXZWJL
aXQxNFBhZ2VDbGllbnRJbXBsMThjb252ZXJ0VG9Vc2VyU3BhY2VFUktON1dlYkNvcmU5RmxvYXRS
ZWN0RQorX19aTjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMThjb252ZXJ0VG9Vc2VyU3BhY2VFUktO
N1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIC1bV0tWaWV3KEludGVybmFsKSBfY29udmVydFRvVXNl
clNwYWNlOl0KLV9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3NhZ2VzMTJXZWJQYWdl
UHJveHkxNFNldFdpbmRvd0ZyYW1lRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2UktON1dl
YkNvcmU5RmxvYXRSZWN0RUVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1QxXwotX19aTjdD
b3JlSVBDMThjYWxsTWVtYmVyRnVuY3Rpb25JTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzJfRnZS
S043V2ViQ29yZTlGbG9hdFJlY3RFRVM0X0VFdlJLTlNfMTBBcmd1bWVudHMxSVQxX0VFUFRfVDBf
Ci1fX1pONldlYktpdDEyV2ViUGFnZVByb3h5MTRzZXRXaW5kb3dGcmFtZUVSS043V2ViQ29yZTlG
bG9hdFJlY3RFCi1fX1pONldlYktpdDE0UGFnZUNsaWVudEltcGwyMGNvbnZlcnRUb0RldmljZVNw
YWNlRVJLTjdXZWJDb3JlOUZsb2F0UmVjdEUKK19fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlO
OE1lc3NhZ2VzMTJXZWJQYWdlUHJveHkxNFNldFdpbmRvd0ZyYW1lRU42V2ViS2l0MTJXZWJQYWdl
UHJveHlFTVM1X0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFRUV2UE5TXzE1QXJndW1lbnRE
ZWNvZGVyRVBUMF9UMV8KK19fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42V2ViS2l0
MTJXZWJQYWdlUHJveHlFTVMyX0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFUzRfRUV2UktO
U18xMEFyZ3VtZW50czFJVDFfRUVQVF9UMF8KK19fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxNHNl
dFdpbmRvd0ZyYW1lRVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCitfX1pONldlYktpdDE0UGFn
ZUNsaWVudEltcGwyMGNvbnZlcnRUb0RldmljZVNwYWNlRVJLTjdXZWJDb3JlMTJHcmFwaGljc1Jl
Y3RFCiAtW1dLVmlldyhJbnRlcm5hbCkgX2NvbnZlcnRUb0RldmljZVNwYWNlOl0KLV9fWk42V2Vi
S2l0MTFXZWJVSUNsaWVudDE0c2V0V2luZG93RnJhbWVFUE5TXzEyV2ViUGFnZVByb3h5RVJLTjdX
ZWJDb3JlOUZsb2F0UmVjdEUKK19fWk42V2ViS2l0MTFXZWJVSUNsaWVudDE0c2V0V2luZG93RnJh
bWVFUE5TXzEyV2ViUGFnZVByb3h5RVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCiBfX1pONldl
YktpdDEyV2ViUGFnZVByb3h5OHNob3dQYWdlRXYKIF9fWk42V2ViS2l0MTFXZWJVSUNsaWVudDhz
aG93UGFnZUVQTlNfMTJXZWJQYWdlUHJveHlFCiBfX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJ
TjhNZXNzYWdlczEyV2ViUGFnZVByb3h5MjJEaXNtaXNzQ29ycmVjdGlvblBhbmVsRU42V2ViS2l0
MTJXZWJQYWdlUHJveHlFTVM1X0Z2aUVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1QxXwpA
QCAtMjY4OCwyMCArMjY4OCwyMCBAQCBfX1pONldlYktpdDExV2ViVUlDbGllbnQ1Zm9jdXNFUE5T
XzEyV2ViCiAtW1dLVGV4dElucHV0V2luZG93Q29udHJvbGxlciBpbnRlcnByZXRLZXlFdmVudDpz
dHJpbmc6XQogLVtXS1RleHRJbnB1dFBhbmVsIF9pbnRlcnByZXRLZXlFdmVudDpzdHJpbmc6XQog
X19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50N3VuZm9jdXNFUE5TXzEyV2ViUGFnZVByb3h5RQotX19a
TjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMxMldlYlBhZ2VQcm94eTE5U2hvd0Nv
cnJlY3Rpb25QYW5lbEVONldlYktpdDEyV2ViUGFnZVByb3h5RU1TNV9GdmlSS043V2ViQ29yZTlG
bG9hdFJlY3RFUktOM1dURjZTdHJpbmdFU0RfUktOU0FfNlZlY3RvcklTQl9MbTBFRUVFRUV2UE5T
XzE1QXJndW1lbnREZWNvZGVyRVBUMF9UMV8KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRzNUlpTjdX
ZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFUzRfTlMzXzZWZWN0b3JJUzRfTG0wRUVFRTZk
ZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTN18KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRz
NElpTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFUzRfRTZkZWNvZGVFUE5TXzE1QXJn
dW1lbnREZWNvZGVyRVJTNV8KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lpTjdXZWJDb3JlOUZs
b2F0UmVjdEVOM1dURjZTdHJpbmdFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNV8K
LV9fWk43Q29yZUlQQzEwQXJndW1lbnRzMklpTjdXZWJDb3JlOUZsb2F0UmVjdEVFNmRlY29kZUVQ
TlNfMTVBcmd1bWVudERlY29kZXJFUlMzXworX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44
TWVzc2FnZXMxMldlYlBhZ2VQcm94eTE5U2hvd0NvcnJlY3Rpb25QYW5lbEVONldlYktpdDEyV2Vi
UGFnZVByb3h5RU1TNV9GdmlSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2U3RyaW5n
RVNEX1JLTlNBXzZWZWN0b3JJU0JfTG0wRUVFRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBf
VDFfCitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czVJaU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RU4z
V1RGNlN0cmluZ0VTNF9OUzNfNlZlY3RvcklTNF9MbTBFRUVFNmRlY29kZUVQTlNfMTVBcmd1bWVu
dERlY29kZXJFUlM3XworX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SWlON1dlYkNvcmUxMkdyYXBo
aWNzUmVjdEVOM1dURjZTdHJpbmdFUzRfRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJT
NV8KK19fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lpTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTjNX
VEY2U3RyaW5nRUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2RlckVSUzVfCitfX1pON0NvcmVJ
UEMxMEFyZ3VtZW50czJJaU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUU2ZGVjb2RlRVBOU18xNUFy
Z3VtZW50RGVjb2RlckVSUzNfCiBfX1pON0NvcmVJUEMxOVZlY3RvckFyZ3VtZW50Q29kZXJJTGIw
RU4zV1RGNlN0cmluZ0VFNmRlY29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUk5TMV82VmVjdG9y
SVMyX0xtMEVFRQogX19aTjNXVEY2VmVjdG9ySU5TXzZTdHJpbmdFTG0wRUUxNHNocmlua0NhcGFj
aXR5RW0KLV9fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42V2ViS2l0MTJXZWJQYWdl
UHJveHlFTVMyX0Z2aVJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VTQV9SS05T
N182VmVjdG9ySVM4X0xtMEVFRUVpUzRfUzhfUzhfU0NfRUV2UktOU18xMEFyZ3VtZW50czVJVDFf
VDJfVDNfVDRfVDVfRUVQVF9UMF8KLV9fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxOXNob3dDb3Jy
ZWN0aW9uUGFuZWxFaVJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VTOF9SS05T
NV82VmVjdG9ySVM2X0xtMEVFRQotX19aTjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMTlzaG93Q29y
cmVjdGlvblBhbmVsRU43V2ViQ29yZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVFUktO
UzFfOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VTQV9SS05TN182VmVjdG9ySVM4X0xtMEVFRQot
X19aTjZXZWJLaXQxNUNvcnJlY3Rpb25QYW5lbDRzaG93RVA2V0tWaWV3TjdXZWJDb3JlMTlDb3Jy
ZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TM185RmxvYXRSZWN0RVJLTjNXVEY2U3RyaW5n
RVNDX1JLTlM5XzZWZWN0b3JJU0FfTG0wRUVFCitfX1pON0NvcmVJUEMxOGNhbGxNZW1iZXJGdW5j
dGlvbklONldlYktpdDEyV2ViUGFnZVByb3h5RU1TMl9GdmlSS043V2ViQ29yZTEyR3JhcGhpY3NS
ZWN0RVJLTjNXVEY2U3RyaW5nRVNBX1JLTlM3XzZWZWN0b3JJUzhfTG0wRUVFRWlTNF9TOF9TOF9T
Q19FRXZSS05TXzEwQXJndW1lbnRzNUlUMV9UMl9UM19UNF9UNV9FRVBUX1QwXworX19aTjZXZWJL
aXQxMldlYlBhZ2VQcm94eTE5c2hvd0NvcnJlY3Rpb25QYW5lbEVpUktON1dlYkNvcmUxMkdyYXBo
aWNzUmVjdEVSS04zV1RGNlN0cmluZ0VTOF9SS05TNV82VmVjdG9ySVM2X0xtMEVFRQorX19aTjZX
ZWJLaXQxNFBhZ2VDbGllbnRJbXBsMTlzaG93Q29ycmVjdGlvblBhbmVsRU43V2ViQ29yZTE5Q29y
cmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVFUktOUzFfMTJHcmFwaGljc1JlY3RFUktOM1dURjZT
dHJpbmdFU0FfUktOUzdfNlZlY3RvcklTOF9MbTBFRUUKK19fWk42V2ViS2l0MTVDb3JyZWN0aW9u
UGFuZWw0c2hvd0VQNldLVmlld043V2ViQ29yZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5
cGVFUktOUzNfMTJHcmFwaGljc1JlY3RFUktOM1dURjZTdHJpbmdFU0NfUktOUzlfNlZlY3RvcklT
QV9MbTBFRUUKIC1bV0tWaWV3IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdCi1fX1pON0NvcmVJUEMx
MEFyZ3VtZW50czRJaU43V2ViQ29yZTlGbG9hdFJlY3RFTjNXVEY2U3RyaW5nRVM0X0VEMkV2Ci1f
X1pON0NvcmVJUEMxMEFyZ3VtZW50czNJaU43V2ViQ29yZTlGbG9hdFJlY3RFTjNXVEY2U3RyaW5n
RUVEMkV2CitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czRJaU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0
RU4zV1RGNlN0cmluZ0VTNF9FRDJFdgorX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSWlON1dlYkNv
cmUxMkdyYXBoaWNzUmVjdEVOM1dURjZTdHJpbmdFRUQyRXYKIF9fX3Nob3dfYmxvY2tfaW52b2tl
XzEKIF9fWk42V2ViS2l0MTVDb3JyZWN0aW9uUGFuZWwyNWhhbmRsZUFjY2VwdGVkUmVwbGFjZW1l
bnRFUDhOU1N0cmluZ1MyX1MyX2wKIC1bV0tWaWV3KFByaXZhdGUpIHNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnXQpAQCAtMjg0NiwyMSArMjg0NiwyMSBAQCBfX1pONldlYktpdDE1V2ViUHJvY2Vzc1By
b3h5NHNlbmRJTjhNZXNzCiBfX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdlczEy
V2ViUGFnZVByb3h5MTNEaWRGaW5kU3RyaW5nRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2
UktOM1dURjZTdHJpbmdFakVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1QxXwogX19aTjZX
ZWJLaXQxMldlYlBhZ2VQcm94eTEzZGlkRmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0VqCiBfX1pO
NldlYktpdDEzV2ViRmluZENsaWVudDEzZGlkRmluZFN0cmluZ0VQTlNfMTJXZWJQYWdlUHJveHlF
UktOM1dURjZTdHJpbmdFagotX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMx
MldlYlBhZ2VQcm94eTE2U2V0RmluZEluZGljYXRvckVONldlYktpdDEyV2ViUGFnZVByb3h5RU1T
NV9GdlJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlZlY3RvcklTN19MbTBFRUVSS05TNF8x
NVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1Qx
XwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SU43V2ViQ29yZTlGbG9hdFJlY3RFTjNXVEY2VmVj
dG9ySVMyX0xtMEVFRU42V2ViS2l0MTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRWJFNmRlY29kZUVQ
TlNfMTVBcmd1bWVudERlY29kZXJFUlM5XwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSU43V2Vi
Q29yZTlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVMyX0xtMEVFRU42V2ViS2l0MTVTaGFyZWFibGVC
aXRtYXA2SGFuZGxlRUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2RlckVSUzlfCi1fX1pON0Nv
cmVJUEMxMEFyZ3VtZW50czJJTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJUzJfTG0w
RUVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNl8KLV9fWk43Q29yZUlQQzE5VmVj
dG9yQXJndW1lbnRDb2RlcklMYjBFTjdXZWJDb3JlOUZsb2F0UmVjdEVFNmRlY29kZUVQTlNfMTVB
cmd1bWVudERlY29kZXJFUk4zV1RGNlZlY3RvcklTMl9MbTBFRUUKLV9fWk4zV1RGNlZlY3RvcklO
N1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFMTRleHBhbmRDYXBhY2l0eUVtUEtTMl8KLV9fWk4zV1RG
NlZlY3RvcklON1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQotX19a
TjNXVEYxNlZlY3RvckJ1ZmZlckJhc2VJTjdXZWJDb3JlOUZsb2F0UmVjdEVFMTRhbGxvY2F0ZUJ1
ZmZlckVtCi1fX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRU43V2ViQ29yZTlGbG9hdFJlY3RFRTRt
b3ZlRVBLUzJfUzVfUFMyXwotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTlGbG9hdFJlY3RFTG0w
RUUxNHNocmlua0NhcGFjaXR5RW0KLV9fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42
V2ViS2l0MTJXZWJQYWdlUHJveHlFTVMyX0Z2UktON1dlYkNvcmU5RmxvYXRSZWN0RVJLTjNXVEY2
VmVjdG9ySVM0X0xtMEVFRVJLTlMxXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViRVM0X1M5X1NE
X2JFRXZSS05TXzEwQXJndW1lbnRzNElUMV9UMl9UM19UNF9FRVBUX1QwXwotX19aTjZXZWJLaXQx
MldlYlBhZ2VQcm94eTE2c2V0RmluZEluZGljYXRvckVSS043V2ViQ29yZTlGbG9hdFJlY3RFUktO
M1dURjZWZWN0b3JJUzJfTG0wRUVFUktOU18xNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYgotX19a
TjZXZWJLaXQxM0ZpbmRJbmRpY2F0b3I2Y3JlYXRlRVJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04z
V1RGNlZlY3RvcklTMl9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUUKLV9fWk4z
V1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFQzJFUktTM18KLV9fWk4zV1RGMTJW
ZWN0b3JDb3BpZXJJTGIwRU43V2ViQ29yZTlGbG9hdFJlY3RFRTE3dW5pbml0aWFsaXplZENvcHlF
UEtTMl9TNV9QUzJfCitfX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdlczEyV2Vi
UGFnZVByb3h5MTZTZXRGaW5kSW5kaWNhdG9yRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2
UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZlY3RvcklTN19MbTBFRUVSS05TNF8x
NVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1Qx
XworX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RU4zV1RG
NlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViRTZkZWNv
ZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTOV8KK19fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lO
N1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVOM1dURjZWZWN0b3JJUzJfTG0wRUVFTjZXZWJLaXQxNVNo
YXJlYWJsZUJpdG1hcDZIYW5kbGVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTOV8K
K19fWk43Q29yZUlQQzEwQXJndW1lbnRzMklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVOM1dURjZW
ZWN0b3JJUzJfTG0wRUVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNl8KK19fWk43
Q29yZUlQQzE5VmVjdG9yQXJndW1lbnRDb2RlcklMYjBFTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RF
RTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJOM1dURjZWZWN0b3JJUzJfTG0wRUVFCitf
X1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNGV4cGFuZENhcGFj
aXR5RW1QS1MyXworX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUxtMEVF
MTVyZXNlcnZlQ2FwYWNpdHlFbQorX19aTjNXVEYxNlZlY3RvckJ1ZmZlckJhc2VJTjdXZWJDb3Jl
MTJHcmFwaGljc1JlY3RFRTE0YWxsb2NhdGVCdWZmZXJFbQorX19aTjNXVEYxMVZlY3Rvck1vdmVy
SUxiMEVON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFNG1vdmVFUEtTMl9TNV9QUzJfCitfX1pOM1dU
RjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNHNocmlua0NhcGFjaXR5RW0K
K19fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42V2ViS2l0MTJXZWJQYWdlUHJveHlF
TVMyX0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZlY3RvcklTNF9MbTBFRUVS
S05TMV8xNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkVTNF9TOV9TRF9iRUV2UktOU18xMEFyZ3Vt
ZW50czRJVDFfVDJfVDNfVDRfRUVQVF9UMF8KK19fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxNnNl
dEZpbmRJbmRpY2F0b3JFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZlY3RvcklT
Ml9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViCitfX1pONldlYktpdDEzRmlu
ZEluZGljYXRvcjZjcmVhdGVFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZlY3Rv
cklTMl9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUUKK19fWk4zV1RGNlZlY3Rv
cklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVMbTBFRUMyRVJLUzNfCitfX1pOM1dURjEyVmVjdG9y
Q29waWVySUxiMEVON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFMTd1bmluaXRpYWxpemVkQ29weUVQ
S1MyX1M1X1BTMl8KIF9fWk42V2ViS2l0MTRQYWdlQ2xpZW50SW1wbDE2c2V0RmluZEluZGljYXRv
ckVOM1dURjEwUGFzc1JlZlB0cklOU18xM0ZpbmRJbmRpY2F0b3JFRUViCiAtW1dLVmlldyhJbnRl
cm5hbCkgX3NldEZpbmRJbmRpY2F0b3I6ZmFkZU91dDpdCiBfX1pONldlYktpdDE5RmluZEluZGlj
YXRvcldpbmRvdzZjcmVhdGVFUDZXS1ZpZXcKQEAgLTI4NzgsNyArMjg3OCw3IEBAIF9fWk42V2Vi
S2l0MTNGaW5kSW5kaWNhdG9yNGRyYXdFUk43V2ViQ28KIF9fWk4zV1RGMTBSZWZDb3VudGVkSU43
V2ViQ29yZTlHZW5lcmF0b3JFRTVkZXJlZkV2CiBfV0tXaW5kb3dCb3VuY2VBbmltYXRpb25Db250
ZXh0Q3JlYXRlCiAtW1dlYkZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gX2luaXRXaXRoRmlu
ZEluZGljYXRvcldpbmRvdzphbmltYXRpb25EdXJhdGlvbjphbmltYXRpb25Qcm9ncmVzc0NhbGxi
YWNrOmFuaW1hdGlvbkRpZEVuZENhbGxiYWNrOl0KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lO
N1dlYkNvcmU5RmxvYXRSZWN0RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1U2hhcmVh
YmxlQml0bWFwNkhhbmRsZUVFRDJFdgorX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSU43V2ViQ29y
ZTEyR3JhcGhpY3NSZWN0RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1U2hhcmVhYmxl
Qml0bWFwNkhhbmRsZUVFRDJFdgogLVtXZWJGaW5kSW5kaWNhdG9yV2luZG93QW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczpdCiBfX1pONldlYktpdDE5RmluZEluZGljYXRvcldpbmRvdzIzYm91
bmNlQW5pbWF0aW9uQ2FsbGJhY2tFZAogX1dLV2luZG93Qm91bmNlQW5pbWF0aW9uU2V0QW5pbWF0
aW9uUHJvZ3Jlc3MKQEAgLTMxOTksMTAgKzMxOTksMTAgQEAgX19aTjNXVEY5SGFzaFRhYmxlSU43
V2ViQ29yZTdJbnRSZWN0RVN0NAogLVtXS1ByaW50aW5nVmlldyBpc0ZsaXBwZWRdCiAtW1dLUHJp
bnRpbmdWaWV3IGxvY2F0aW9uT2ZQcmludFJlY3Q6XQogLVtXS1ByaW50aW5nVmlldyBkcmF3UGFn
ZUJvcmRlcldpdGhTaXplOl0KLV9fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxMGRyYXdIZWFkZXJF
UE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTlGbG9hdFJlY3RFCi1fX1pONldlYktpdDEx
V2ViVUlDbGllbnQxMGRyYXdIZWFkZXJFUE5TXzEyV2ViUGFnZVByb3h5RVBOU18xM1dlYkZyYW1l
UHJveHlFUktON1dlYkNvcmU5RmxvYXRSZWN0RQotX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTEw
ZHJhd0Zvb3RlckVQTlNfMTNXZWJGcmFtZVByb3h5RVJLTjdXZWJDb3JlOUZsb2F0UmVjdEUKLV9f
Wk42V2ViS2l0MTFXZWJVSUNsaWVudDEwZHJhd0Zvb3RlckVQTlNfMTJXZWJQYWdlUHJveHlFUE5T
XzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTlGbG9hdFJlY3RFCitfX1pONldlYktpdDEyV2Vi
UGFnZVByb3h5MTBkcmF3SGVhZGVyRVBOU18xM1dlYkZyYW1lUHJveHlFUktON1dlYkNvcmUxMkdy
YXBoaWNzUmVjdEUKK19fWk42V2ViS2l0MTFXZWJVSUNsaWVudDEwZHJhd0hlYWRlckVQTlNfMTJX
ZWJQYWdlUHJveHlFUE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0
RQorX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTEwZHJhd0Zvb3RlckVQTlNfMTNXZWJGcmFtZVBy
b3h5RVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCitfX1pONldlYktpdDExV2ViVUlDbGllbnQx
MGRyYXdGb290ZXJFUE5TXzEyV2ViUGFnZVByb3h5RVBOU18xM1dlYkZyYW1lUHJveHlFUktON1dl
YkNvcmUxMkdyYXBoaWNzUmVjdEUKIF9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3Nh
Z2VzMTJXZWJQYWdlUHJveHkyMUNvbXB1dGVkUGFnZXNDYWxsYmFja0VONldlYktpdDEyV2ViUGFn
ZVByb3h5RU1TNV9GdlJLTjNXVEY2VmVjdG9ySU43V2ViQ29yZTdJbnRSZWN0RUxtMEVFRWR5RUVF
dlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCiBfX1pON0NvcmVJUEMxMEFyZ3VtZW50czNJ
TjNXVEY2VmVjdG9ySU43V2ViQ29yZTdJbnRSZWN0RUxtMEVFRWR5RTZkZWNvZGVFUE5TXzE1QXJn
dW1lbnREZWNvZGVyRVJTNl8KIF9fWk43Q29yZUlQQzEwQXJndW1lbnRzMklOM1dURjZWZWN0b3JJ
TjdXZWJDb3JlN0ludFJlY3RFTG0wRUVFZEU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2RlckVS
UzZfCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjYpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDQzIEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1vdmUgdGhlbSB0byBh
biBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNlIGEgR3JhcGhp
Y3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRoZWlyCisgICAgICAg
IGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZvcm1zLiBUaGlzIG1h
a2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0cy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcHVi
bGljL1dlYkZsb2F0UmVjdC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFJlY3Q6Om9wZXJh
dG9yIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzZXRXaW5kb3dSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6d2luZG93UmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnBhZ2VSZWN0KToKKyAgICAgICAgKiBzcmMv
Q2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNw
cDoKKyAgICAgICAgKiBzcmMvV2ViRm9udEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
b250SW1wbDo6ZHJhd1RleHQpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OnNwb29sUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZVBsdWdpblByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9QaXhlbFJl
YWRiYWNrVG9DYW52YXMpOgorICAgICAgICAqIHRlc3RzL0RyYWdJbWFnZVRlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorICAgICAgICAqIHRlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwOgorICAgICAgICAq
IHRlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkVDVFRv
R3JhcGhpY3NSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAqIHRlc3Rz
L1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAy
MDExLTA3LTE0ICBJbHlhIFNoZXJtYW4gIDxpc2hlcm1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmVuYW1lIEF1dG9GaWxsIC0+IEF1dG9maWxsIGFuZCBhdXRvRmlsbCAtPiBhdXRvZmlsbApJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0LmgJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRS
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJDb21t
b24uaCIKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewpAQCAtODEsOSArODEsOSBAQCBzdHJ1Y3QgV2ViRmxvYXRSZWN0IHsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIAotICAgIG9wZXJhdG9yIFdlYkNvcmU6OkZsb2F0UmVjdCgpIGNvbnN0
CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6R3JhcGhpY3NSZWN0KCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgfQogI2VuZGlmCiB9OwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDcgQEAKICNpbmNsdWRlICJFeHRlcm5hbFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIkZpbGVD
aG9vc2VyLmgiCiAjaW5jbHVkZSAiRmlsZUljb25Mb2FkZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIK
QEAgLTE3NSwxMyArMTc1LDEzIEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6Y2hyb21lRGVzdHJv
eWVkKCkKICAgICAvLyBPdXIgbGlmZXRpbWUgaXMgYm91bmQgdG8gdGhlIFdlYlZpZXdJbXBsLgog
fQogCi12b2lkIENocm9tZUNsaWVudEltcGw6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByKQordm9pZCBDaHJvbWVDbGllbnRJbXBsOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgcikKIHsKICAgICBpZiAobV93ZWJWaWV3LT5jbGllbnQoKSkKICAgICAgICAgbV93ZWJW
aWV3LT5jbGllbnQoKS0+c2V0V2luZG93UmVjdChJbnRSZWN0KHIpKTsKIH0KIAotRmxvYXRSZWN0
IENocm9tZUNsaWVudEltcGw6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVu
dEltcGw6OndpbmRvd1JlY3QoKQogewogICAgIFdlYlJlY3QgcmVjdDsKICAgICBpZiAobV93ZWJW
aWV3LT5jbGllbnQoKSkKQEAgLTE5MywxMCArMTkzLDEwIEBAIEZsb2F0UmVjdCBDaHJvbWVDbGll
bnRJbXBsOjp3aW5kb3dSZWN0KCkKICAgICAgICAgcmVjdC53aWR0aCA9IG1fd2ViVmlldy0+c2l6
ZSgpLndpZHRoOwogICAgICAgICByZWN0LmhlaWdodCA9IG1fd2ViVmlldy0+c2l6ZSgpLmhlaWdo
dDsKICAgICB9Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0KTsKKyAgICByZXR1cm4gR3JhcGhp
Y3NSZWN0KHJlY3QpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50SW1wbDo6cGFnZVJlY3Qo
KQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudEltcGw6OnBhZ2VSZWN0KCkKIHsKICAgICAvLyBX
ZSBoaWRlIHRoZSBkZXRhaWxzIG9mIHRoZSB3aW5kb3cncyBib3JkZXIgdGhpY2tuZXNzIGZyb20g
dGhlIHdlYiBwYWdlIGJ5CiAgICAgLy8gc2ltcGxlIHJlLXVzaW5nIHRoZSB3aW5kb3cgcG9zaXRp
b24gaGVyZS4gIFNvLCBmcm9tIHRoZSBwb2ludC1vZi12aWV3IG9mCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsOSArNjIsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBDaHJvbWVDbGllbnQg
bWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3Qo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFw
aGljc1JlY3Qgd2luZG93UmVjdCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
IHBhZ2VSZWN0KCk7CiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogICAgIHZpcnR1
YWwgdm9pZCBmb2N1cygpOwogICAgIHZpcnR1YWwgdm9pZCB1bmZvY3VzKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAko
cmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JD
bGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
Ikluc3BlY3RvckNsaWVudEltcGwuaCIKIAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xz
QWdlbnRJbXBsLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udElt
cGwuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZvbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgV2Vi
Rm9udEltcGw6OmRyYXdUZXh0KFdlYkNhbnZhcyogY2EKIAogICAgIGdjLnNhdmUoKTsKICAgICBn
Yy5zZXRGaWxsQ29sb3IoY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGdjLmNsaXAo
V2ViQ29yZTo6RmxvYXRSZWN0KGNsaXApKTsKKyAgICBnYy5jbGlwKFdlYkNvcmU6OkdyYXBoaWNz
UmVjdChjbGlwKSk7CiAgICAgbV9mb250LmRyYXdUZXh0KCZnYywgcnVuLCBsZWZ0QmFzZWxpbmUs
IGZyb20sIHRvKTsKICAgICBnYy5yZXN0b3JlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzU1LDcgKzM1NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBjdHguc2F2ZSgpOwogI2lmIE9TKFVO
SVgpICYmICFPUyhEQVJXSU4pCi0gICAgICAgIGN0eC5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUo
c2NhbGUsIHNjYWxlKSk7CisgICAgICAgIGN0eC5zY2FsZShXZWJDb3JlOjpHcmFwaGljc1NpemUo
c2NhbGUsIHNjYWxlKSk7CiAjZW5kaWYKICAgICAgICAgY3R4LnRyYW5zbGF0ZShzdGF0aWNfY2Fz
dDxmbG9hdD4oLXBhZ2VSZWN0LngoKSksCiAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KC1wYWdlUmVjdC55KCkpKTsKQEAgLTM2NSw3ICszNjUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBzY2FsZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBh
Z2VSZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBm
bG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VI
ZWlnaHQpCisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgR3JhcGhpY3NS
ZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBm
bG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyhwcmludFJlY3QsIGhlYWRl
ckhlaWdodCwgZm9vdGVySGVpZ2h0LCB1c2VyU2NhbGVGYWN0b3IsIG91dFBhZ2VIZWlnaHQpOwog
ICAgIH0KQEAgLTQxMiw3ICs0MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAxLjA7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgRmxvYXRSZWN0
JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9h
dCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0KQorICAgIHZpcnR1YWwgdm9p
ZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEdyYXBoaWNzUmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBo
ZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBm
bG9hdCYgb3V0UGFnZUhlaWdodCkKICAgICB7CiAgICAgICAgIG1fcGFnZUNvdW50ID0gbV9wbHVn
aW4tPnByaW50QmVnaW4oSW50UmVjdChwcmludFJlY3QpLCBtX3ByaW50ZXJEUEkpOwogICAgIH0K
QEAgLTEzMzcsNyArMTMzNyw3IEBAIGludCBXZWJGcmFtZUltcGw6OnByaW50QmVnaW4oY29uc3Qg
V2ViU2kKICAgICBlbHNlCiAgICAgICAgIG1fcHJpbnRDb250ZXh0ID0gYWRvcHRQdHIobmV3IENo
cm9tZVByaW50Q29udGV4dChmcmFtZSgpKSk7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgwLCAwLCBz
dGF0aWNfY2FzdDxmbG9hdD4ocGFnZVNpemUud2lkdGgpLAorICAgIEdyYXBoaWNzUmVjdCByZWN0
KDAsIDAsIHN0YXRpY19jYXN0PGZsb2F0PihwYWdlU2l6ZS53aWR0aCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VTaXplLmhlaWdodCkpOwogICAgIG1f
cHJpbnRDb250ZXh0LT5iZWdpbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgIGZs
b2F0IHBhZ2VIZWlnaHQ7CkBAIC0xNzg3LDcgKzE3ODcsNyBAQCBpbnQgV2ViRnJhbWVJbXBsOjpw
YWdlTnVtYmVyRm9yRWxlbWVudEJ5CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4g
LTE7CiAKLSAgICBGbG9hdFNpemUgcGFnZVNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWln
aHRJblBpeGVscyk7CisgICAgR3JhcGhpY3NTaXplIHBhZ2VTaXplKHBhZ2VXaWR0aEluUGl4ZWxz
LCBwYWdlSGVpZ2h0SW5QaXhlbHMpOwogICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1i
ZXJGb3JFbGVtZW50KGVsZW1lbnQsIHBhZ2VTaXplKTsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOTQsNyArMTA5NCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2Fu
dmEKICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxB
cnJheS5nZXQoKSwgcmVjdC5zaXplKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkp
LCBJbnRQb2ludCgpKTsKICAgICAgICAgZ2Muc2F2ZSgpOwogICAgICAgICBnYy50cmFuc2xhdGUo
SW50U2l6ZSgwLCBiaXRtYXBIZWlnaHQpKTsKLSAgICAgICAgZ2Muc2NhbGUoRmxvYXRTaXplKDEu
MGYsIC0xLjBmKSk7CisgICAgICAgIGdjLnNjYWxlKEdyYXBoaWNzU2l6ZSgxLjBmLCAtMS4wZikp
OwogICAgICAgICAvLyBVc2UgaW52ZXJ0UmVjdCBpbiBuZXh0IGxpbmUsIHNvIHRoYXQgdHJhbnNm
b3JtIGFib3ZlIGludmVydHMgaXQgYmFjayB0bwogICAgICAgICAvLyBkZXNpcmVkIGRlc3RpbmF0
aW9uIHJlY3QuCiAgICAgICAgIGdjLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwg
Q29sb3JTcGFjZURldmljZVJHQiwgaW52ZXJ0UmVjdC5sb2NhdGlvbigpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw4ICs4Niw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IDB1OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6Q29sb3JTcGFjZSwKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QmLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzUmVjdCYsIFdlYkNvcmU6OkNvbG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpCiAgICAgewogICAgIH0KQEAgLTEwNSw3ICsxMDUsNyBA
QCBURVNUKERyYWdJbWFnZVRlc3QsIE51bGxIYW5kbGluZykKIAogICAgIGRlbGV0ZURyYWdJbWFn
ZSgwKTsKICAgICBFWFBFQ1RfVFJVRShkcmFnSW1hZ2VTaXplKDApLmlzWmVybygpKTsKLSAgICBF
WFBFQ1RfRkFMU0Uoc2NhbGVEcmFnSW1hZ2UoMCwgRmxvYXRTaXplKDAuNSwgMC41KSkpOworICAg
IEVYUEVDVF9GQUxTRShzY2FsZURyYWdJbWFnZSgwLCBHcmFwaGljc1NpemUoMC41LCAwLjUpKSk7
CiAgICAgRVhQRUNUX0ZBTFNFKGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbigwLCAwLjUpKTsK
ICAgICBFWFBFQ1RfRkFMU0UoY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKDApKTsKICAgICBFWFBF
Q1RfRkFMU0UoY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKDApKTsKQEAgLTExNyw3
ICsxMTcsNyBAQCBURVNUKERyYWdJbWFnZVRlc3QsIE5vbk51bGxIYW5kbGluZykKICAgICBEcmFn
SW1hZ2VSZWYgZHJhZ0ltYWdlID0gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKHRlc3RJbWFnZS5n
ZXQoKSk7CiAgICAgQVNTRVJUX1RSVUUoZHJhZ0ltYWdlKTsKIAotICAgIGRyYWdJbWFnZSA9IHNj
YWxlRHJhZ0ltYWdlKGRyYWdJbWFnZSwgRmxvYXRTaXplKDAuNSwgMC41KSk7CisgICAgZHJhZ0lt
YWdlID0gc2NhbGVEcmFnSW1hZ2UoZHJhZ0ltYWdlLCBHcmFwaGljc1NpemUoMC41LCAwLjUpKTsK
ICAgICBBU1NFUlRfVFJVRShkcmFnSW1hZ2UpOwogICAgIEludFNpemUgc2l6ZSA9IGRyYWdJbWFn
ZVNpemUoZHJhZ0ltYWdlKTsKICAgICBFWFBFQ1RfRVEoMSwgc2l6ZS53aWR0aCgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxBbmltYXRv
ck5vbmVUZXN0LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvck5vbmUuaCIKIAotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5o
IgpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdmVydGljYWxEYXRhLnJlc2V0
KCk7CiAgICAgfQogCi0gICAgTU9DS19NRVRIT0QxKHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbiwgdm9pZChjb25zdCBGbG9hdFBvaW50JikpOworICAgIE1PQ0tfTUVUSE9EMShzY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24sIHZvaWQoY29uc3QgR3JhcGhpY3NQb2ludCYpKTsKIH07
CiAKIFRFU1QoU2Nyb2xsQW5pbWF0b3JFbmFibGVkLCBFbmFibGVkKQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJl
bmN5V2luVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBGbG9hdFJlY3QgUkVDVFRvRmxvYXRSZWN0KGNvbnN0
IFJFQ1QqIHJlY3QpCitzdGF0aWMgR3JhcGhpY3NSZWN0IFJFQ1RUb0dyYXBoaWNzUmVjdChjb25z
dCBSRUNUKiByZWN0KQogewotICAgIHJldHVybiBGbG9hdFJlY3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHJlY3QtPmxlZnQpLAotICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJl
Y3QtPnRvcCksCi0gICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+
cmlnaHQgLSByZWN0LT5sZWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZs
b2F0PihyZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4ocmVjdC0+bGVmdCksCisgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHJlY3QtPnRvcCksCisgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCksCisgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHJlY3Qt
PmJvdHRvbSAtIHJlY3QtPnRvcCkpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3TmF0aXZlUmVjdChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsCkBAIC0xMTksNyArMTE5LDcgQEAgVEVTVChUcmFuc3Bh
cmVuY3lXaW4sIE5vTGF5ZXIpCiAKICAgICAvLyBTY2FsZVRyYW5zZm9ybQogICAgIHNyYy0+Y29u
dGV4dCgpLT5zYXZlKCk7Ci0gICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZSgyLjAs
IDAuNSkpOworICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShHcmFwaGljc1NpemUoMi4wLCAwLjUp
KTsKICAgICB7CiAgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CiAgICAgICAgIGhlbHBl
ci5pbml0KHNyYy0+Y29udGV4dCgpLApAQCAtMTcxLDcgKzE3MSw3IEBAIFRFU1QoVHJhbnNwYXJl
bmN5V2luLCBXaGl0ZUxheWVyKQogCiAgICAgLy8gU2NhbGVUcmFuc2Zvcm0KICAgICBzcmMtPmNv
bnRleHQoKS0+c2F2ZSgpOwotICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUoMi4w
LCAwLjUpKTsKKyAgICBzcmMtPmNvbnRleHQoKS0+c2NhbGUoR3JhcGhpY3NTaXplKDIuMCwgMC41
KSk7CiAgICAgewogICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOwogICAgICAgICBoZWxw
ZXIuaW5pdChzcmMtPmNvbnRleHQoKSwKQEAgLTI1OSw3ICsyNTksNyBAQCBURVNUKFRyYW5zcGFy
ZW5jeVdpbiwgT3BhcXVlQ29tcG9zaXRlTGF5CiAKICAgICAvLyBTY2FsZVRyYW5zZm9ybQogICAg
IHNyYy0+Y29udGV4dCgpLT5zYXZlKCk7Ci0gICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0
U2l6ZSgyLjAsIDAuNSkpOworICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShHcmFwaGljc1NpemUo
Mi4wLCAwLjUpKTsKICAgICB7CiAgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CiAgICAg
ICAgIGhlbHBlci5pbml0KHNyYy0+Y29udGV4dCgpLApAQCAtMzExLDEwICszMTEsMTAgQEAgVEVT
VChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNvbXBvc2l0ZUxheQogICAgIC8vIE1ha2UgYSByZWQg
Ym90dG9tIGxheWVyLCBmb2xsb3dlZCBieSBhIGhhbGYgZ3JlZW4gbmV4dCBsYXllciBAIDUwJS4K
ICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUo
MTYsIDE2KSwgQ29sb3JTcGFjZURldmljZVJHQikpOwogCi0gICAgRmxvYXRSZWN0IGZ1bGxSZWN0
KDAsIDAsIDE2LCAxNik7CisgICAgR3JhcGhpY3NSZWN0IGZ1bGxSZWN0KDAsIDAsIDE2LCAxNik7
CiAgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxSZWN0LCByZWQsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwogICAgIHNyYy0+Y29udGV4dCgpLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDAu
NSk7Ci0gICAgRmxvYXRSZWN0IHJpZ2h0SGFsZig4LCAwLCA4LCAxNik7CisgICAgR3JhcGhpY3NS
ZWN0IHJpZ2h0SGFsZig4LCAwLCA4LCAxNik7CiAgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0
KHJpZ2h0SGFsZiwgZ3JlZW4sIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCiAgICAgLy8gTWFrZSBh
IHRyYW5zcGFyZW5jeSBsYXllciBpbnNldCBieSBvbmUgcGl4ZWwsIGFuZCBmaWxsIGl0IGluc2V0
IGJ5CkBAIC0zMjYsNyArMzI2LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNvbXBv
c2l0ZUxheQogICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zv
cm0sCiAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoMSwgMSwgMTQsIDE0KSk7CiAKLSAgICAg
ICAgRmxvYXRSZWN0IGlubmVyKDIsIDIsIDEyLCAxMik7CisgICAgICAgIEdyYXBoaWNzUmVjdCBp
bm5lcigyLCAyLCAxMiwgMTIpOwogICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChp
bm5lciwgQ29sb3IoMHg3ZjAwMDAwMCksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICAv
LyBUaGVzZSBjb29yZGluYXRlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxheWVyLCB3aGlzaCBpcyBp
bnNldCBieSAxeDEKICAgICAgICAgLy8gcGl4ZWxzIGZyb20gdGhlIHRvcCBsZWZ0LiBTbyB3ZSdy
ZSBhY3R1YWxseSBjbGVhcmluZyAoMiwgMikgYW5kCkBAIC0zNjQsNyArMzY0LDcgQEAgVEVTVChU
cmFuc3BhcmVuY3lXaW4sIFRyYW5zbGF0ZU9wYXF1ZUNvbQogICAgIC8vIEZpbGwgd2l0aCB3aGl0
ZS4KICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNp
emUoMTYsIDE2KSwgQ29sb3JTcGFjZURldmljZVJHQikpOwogICAgIENvbG9yIHdoaXRlKDB4RkZG
RkZGRkYpOwotICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOworICAgIEdyYXBo
aWNzUmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOwogICAgIHNyYy0+Y29udGV4dCgpLT5maWxs
UmVjdChmdWxsUmVjdCwgd2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCiAgICAgLy8gU2Ny
b2xsIGRvd24gYnkgOCAoY29vcmRpbmF0ZSBzeXN0ZW0gZ29lcyB1cCkuCkBAIC0zODQsNyArMzg0
LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFRyYW5zbGF0ZU9wYXF1ZUNvbQogCiAgICAgICAg
IC8vIERyYXcgYSByZWQgcGl4ZWwgYXQgKDE1LCAxNSkuIFRoaXMgc2hvdWxkIGJlIHRoZSBhdCAo
MTUsIDcpIGFmdGVyCiAgICAgICAgIC8vIHRoZSB0cmFuc2Zvcm0uCi0gICAgICAgIEZsb2F0UmVj
dCBib3R0b21SaWdodCgxNSwgMTUsIDEsIDEpOworICAgICAgICBHcmFwaGljc1JlY3QgYm90dG9t
UmlnaHQoMTUsIDE1LCAxLCAxKTsKICAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3Qo
Ym90dG9tUmlnaHQsIGdyZWVuLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgaGVscGVy
LmNvbXBvc2l0ZSgpOwogICAgIH0KQEAgLTQwMyw3ICs0MDMsNyBAQCBURVNUKFRyYW5zcGFyZW5j
eVdpbiwgUm90YXRlT3BhcXVlQ29tcG9zCiAKICAgICAvLyBUaGUgYmFja2dyb3VuZCBpcyB3aGl0
ZS4KICAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZGKTsKLSAgICBGbG9hdFJlY3QgZnVsbFJlY3Qo
MCwgMCwgMTYsIDE2KTsKKyAgICBHcmFwaGljc1JlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsK
ICAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdoaXRlLCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKIAogICAgIC8vIFJvdGF0ZSB0aGUgaW1hZ2UgYnkgOTAgZGVncmVlcy4gVGhp
cyBtYXRyaXggaXMgdGhlIHNhbWUgYXMKQEAgLTQyMCw3ICs0MjAsNyBAQCBURVNUKFRyYW5zcGFy
ZW5jeVdpbiwgUm90YXRlT3BhcXVlQ29tcG9zCiAgICAgLy8gU2luY2UgdGhlIHJvdGF0aW9uIGlz
IGFwcGxpZWQsIHRoaXMgd2lsbCBhY3R1YWxseSBiZSBhIHZlcnRpY2FsIGxpbmUKICAgICAvLyBk
b3duIHRoZSBtaWRkbGUgb2YgdGhlIGltYWdlLgogICAgIHNyYy0+Y29udGV4dCgpLT5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKDAuNSk7Ci0gICAgRmxvYXRSZWN0IGJsYWNrUmVjdCgwLCAtOSwgMTYs
IDIpOworICAgIEdyYXBoaWNzUmVjdCBibGFja1JlY3QoMCwgLTksIDE2LCAyKTsKICAgICBDb2xv
ciBibGFjaygweEZGMDAwMDAwKTsKICAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoYmxhY2tS
ZWN0LCBibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAKQEAgLTQ4MiwxMCArNDgyLDEwIEBA
IFRFU1QoVHJhbnNwYXJlbmN5V2luLCBESVNBQkxFRF9UcmFuc2xhdGUKIAogICAgIC8vIFRoZSBi
YWNrZ3JvdW5kIGlzIHdoaXRlIG9uIHRvcCB3aXRoIHJlZCBvbiBib3R0b20uCiAgICAgQ29sb3Ig
d2hpdGUoMHhGRkZGRkZGRik7Ci0gICAgRmxvYXRSZWN0IHRvcFJlY3QoMCwgMCwgMTYsIDgpOwor
ICAgIEdyYXBoaWNzUmVjdCB0b3BSZWN0KDAsIDAsIDE2LCA4KTsKICAgICBzcmMtPmNvbnRleHQo
KS0+ZmlsbFJlY3QodG9wUmVjdCwgd2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIENv
bG9yIHJlZCgweEZGRkYwMDAwKTsKLSAgICBGbG9hdFJlY3QgYm90dG9tUmVjdCgwLCA4LCAxNiwg
OCk7CisgICAgR3JhcGhpY3NSZWN0IGJvdHRvbVJlY3QoMCwgOCwgMTYsIDgpOwogICAgIHNyYy0+
Y29udGV4dCgpLT5maWxsUmVjdChib3R0b21SZWN0LCByZWQsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwogCiAgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsKQEAgLTUyNyw3ICs1MjcsNyBAQCBURVNU
KFRyYW5zcGFyZW5jeVdpbiwgU2NhbGUpCiB7CiAgICAgLy8gQ3JlYXRlIGFuIG9wYXF1ZSB3aGl0
ZSBidWZmZXIuCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShJbnRTaXplKDE2LCAxNiksIENvbG9yU3BhY2VEZXZpY2VSR0IpKTsKLSAgICBGbG9hdFJlY3Qg
ZnVsbEJ1ZmZlcigwLCAwLCAxNiwgMTYpOworICAgIEdyYXBoaWNzUmVjdCBmdWxsQnVmZmVyKDAs
IDAsIDE2LCAxNik7CiAgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1bGxCdWZmZXIsIENv
bG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAgICAvLyBTY2FsZSBieSAyeC4K
QEAgLTU4MCwxMyArNTgwLDEzIEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBTY2FsZVRyYW5zcGFy
ZW5jeSkKIHsKICAgICAvLyBDcmVhdGUgYW4gb3BhcXVlIHdoaXRlIGJ1ZmZlci4KICAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTYsIDE2KSwg
Q29sb3JTcGFjZURldmljZVJHQikpOwotICAgIEZsb2F0UmVjdCBmdWxsQnVmZmVyKDAsIDAsIDE2
LCAxNik7CisgICAgR3JhcGhpY3NSZWN0IGZ1bGxCdWZmZXIoMCwgMCwgMTYsIDE2KTsKICAgICBz
cmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbEJ1ZmZlciwgQ29sb3I6OndoaXRlLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKIAogICAgIC8vIE1ha2UgYW5vdGhlciBsYXllciAod2hpY2ggZHVwbGlj
YXRlcyBob3cgV2ViS2l0IHdpbGwgbWFrZSB0aGlzKS4gV2UgZmlsbAogICAgIC8vIHRoZSB0b3Ag
aGFsZiB3aXRoIHJlZCwgYW5kIGhhdmUgdGhlIGxheWVyIGJlIDUwJSBvcGFxdWUuCiAgICAgc3Jj
LT5jb250ZXh0KCktPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMC41KTsKLSAgICBGbG9hdFJlY3Qg
dG9wSGFsZigwLCAwLCAxNiwgOCk7CisgICAgR3JhcGhpY3NSZWN0IHRvcEhhbGYoMCwgMCwgMTYs
IDgpOwogICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdCh0b3BIYWxmLCBDb2xvcigweEZGRkYw
MDAwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAgICAvLyBTY2FsZSBieSAyeC4KQEAgLTY1
Miw3ICs2NTIsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgVGV4dCkKIAogICAgICAgICAvLyBX
cml0ZSBzZXZlcmFsIGRpZmZlcmVudCBzcXVhcmVzIHRvIHNpbXVsYXRlIENsZWFyVHlwZS4gVGhl
c2Ugc2hvdWxkCiAgICAgICAgIC8vIGFsbCByZWR1Y2UgdG8gMi8zIGNvdmVyYWdlLgotICAgICAg
ICBGbG9hdFJlY3QgcGl4ZWwoMCwgMCwgMSwgMSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBwaXhl
bCgwLCAwLCAxLCAxKTsKICAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWws
IDB4RkZGRjAwMDAsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBwaXhlbC5tb3ZlKDEu
MGYsIDAuMGYpOwogICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhG
RjAwRkYwMCwgQ29sb3JTcGFjZURldmljZVJHQik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAkocmV2aXNpb24g
OTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIFRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmUKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChM
YXllckNocm9taXVtOjpjcmVhdGUoMCkpOwogCiAgICAgLy8gUGljayBzb21lIHJhbmRvbSBwcm9w
ZXJ0aWVzIHRvIHNldC4gVGhlIHZhbHVlcyBhcmUgbm90IGltcG9ydGFudCwgd2UncmUganVzdCB0
ZXN0aW5nIHRoYXQgYXQgbGVhc3Qgc29tZSBwcm9wZXJ0aWVzIGFyZSBtYWtpbmcgaXQgdGhyb3Vn
aC4KLSAgICBGbG9hdFBvaW50IHJvb3RQb3NpdGlvbiA9IEZsb2F0UG9pbnQoMi4zLCA3LjQpOwor
ICAgIEdyYXBoaWNzUG9pbnQgcm9vdFBvc2l0aW9uID0gR3JhcGhpY3NQb2ludCgyLjMsIDcuNCk7
CiAgICAgbGF5ZXJUcmVlUm9vdC0+c2V0UG9zaXRpb24ocm9vdFBvc2l0aW9uKTsKIAogICAgIGZs
b2F0IGZpcnN0Q2hpbGRPcGFjaXR5ID0gMC4yNTsKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlCiAgICAgZXhwZWN0VHJlZXNBcmVJZGVu
dGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKIAogICAg
IC8vIENoZWNrIHRoYXQgdGhlIHByb3BlcnR5IHZhbHVlcyB3ZSBzZXQgb24gdGhlIExheWVyQ2hy
b21pdW0gdHJlZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBDQ0xheWVySW1wbCB0cmVlLgotICAgIEZs
b2F0UG9pbnQgcm9vdENDTGF5ZXJQb3NpdGlvbiA9IGNjTGF5ZXJUcmVlUm9vdC0+cG9zaXRpb24o
KTsKKyAgICBHcmFwaGljc1BvaW50IHJvb3RDQ0xheWVyUG9zaXRpb24gPSBjY0xheWVyVHJlZVJv
b3QtPnBvc2l0aW9uKCk7CiAgICAgRVhQRUNUX0VRKHJvb3RQb3NpdGlvbi54KCksIHJvb3RDQ0xh
eWVyUG9zaXRpb24ueCgpKTsKICAgICBFWFBFQ1RfRVEocm9vdFBvc2l0aW9uLnkoKSwgcm9vdEND
TGF5ZXJQb3NpdGlvbi55KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTAy
NikKKysrIFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI1IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1vdmUgdGhlbSB0
byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNlIGEgR3Jh
cGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRoZWlyCisgICAg
ICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZvcm1zLiBUaGlz
IG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0cy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudEVmbDo6d2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGll
bnRFZmw6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZs
OjpwYWdlUmVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmg6
CisgICAgICAgICogZXdrL2V3a19wcml2YXRlLmg6CisgICAgICAgICogZXdrL2V3a192aWV3LmNw
cDoKKyAgICAgICAgKGV3a192aWV3X3BhaW50X2NvbnRleHRfc2NhbGUpOgorICAgICAgICAoZXdr
X3ZpZXdfcGFnZV9yZWN0X2dldCk6CisKIDIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpv
ZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91
bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3RhCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEVmbC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQAogI2luY2x1ZGUgIkVXZWJLaXQuaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2lu
Y2x1ZGUgIkZpbGVJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudEVmbC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTk3
LDE3ICs5NywxNyBAQCB2b2lkIENocm9tZUNsaWVudEVmbDo6Zm9jdXNlZEZyYW1lQ2hhbmdlCiB7
CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRFZmw6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NS
ZWN0IENocm9tZUNsaWVudEVmbDo6d2luZG93UmVjdCgpCiB7CiAgICAgRWNvcmVfRXZhcyogZWUg
PSAwOwogICAgIGludCB4LCB5LCB3LCBoOwogCiAgICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwogICAgIGVjb3JlX2V2YXNfZ2Vv
bWV0cnlfZ2V0KGVlLCAmeCwgJnksICZ3LCAmaCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCh4LCB5
LCB3LCBoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHgsIHksIHcsIGgpOwogfQogCi12b2lk
IENocm9tZUNsaWVudEVmbDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIENocm9tZUNsaWVudEVmbDo6c2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKCFld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5k
b3dfZ2V0KG1fdmlldykpCiAgICAgICAgIHJldHVybjsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lk
IENocm9tZUNsaWVudEVmbDo6c2V0V2luZG93UmVjdChjb25zCiAgICAgZWNvcmVfZXZhc19yZXNp
emUoZWUsIGludHJlY3Qud2lkdGgoKSwgaW50cmVjdC5oZWlnaHQoKSk7CiB9CiAKLUZsb2F0UmVj
dCBDaHJvbWVDbGllbnRFZmw6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRF
Zmw6OnBhZ2VSZWN0KCkKIHsKICAgICByZXR1cm4gZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChtX3Zp
ZXcpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50RWZsLmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9lZmwv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEw
ICs0MCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwog
CiAgICAgdmlydHVhbCB2b2lkKiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChj
b25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0
KCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUsNyArMTc1LDcgQEAgRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2Rl
YwogCiB2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpOwogCi1XZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3Zp
ZXdfcGFnZV9yZWN0X2dldChFdmFzX09iamVjdCAqbyk7CitXZWJDb3JlOjpHcmFwaGljc1JlY3Qg
ZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChFdmFzX09iamVjdCAqbyk7CiAKIGNvbnN0IGNoYXIqIGV3
a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRfZ2V0KHZvaWQpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMwOCw3ICszMzA4LDcgQEAg
dm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NjYWxlKEV3a19WaQogewogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwogCi0gICAgY3R4dC0+Z2MtPnNjYWxlKFdlYkNvcmU6
OkZsb2F0U2l6ZShzY2FsZV94LCBzY2FsZV95KSk7CisgICAgY3R4dC0+Z2MtPnNjYWxlKFdlYkNv
cmU6OkdyYXBoaWNzU2l6ZShzY2FsZV94LCBzY2FsZV95KSk7CiB9CiAKIC8qKgpAQCAtNDQ3Myw3
ICs0NDczLDcgQEAgdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhcwogICoK
ICAqIEByZXR1cm4gcGFnZSBzaXplLgogICovCi1XZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdf
cGFnZV9yZWN0X2dldChFdmFzX09iamVjdCAqbykKK1dlYkNvcmU6OkdyYXBoaWNzUmVjdCBld2tf
dmlld19wYWdlX3JlY3RfZ2V0KEV2YXNfT2JqZWN0ICpvKQogewogICAgIEVXS19WSUVXX1NEX0dF
VChvLCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwpJbmRleDogU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwkocmV2aXNpb24gOTEwMjYpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0wNy0xNCAgTGV2aSBXZWludHJh
dWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVuYW1lIEZsb2F0UmVjdC9Qb2lu
dC9TaXplIGFuZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcgdGhlIEZsb2F0KiBncmFwaGlj
cyBjbGFzc2VzIHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFjdGlvbiB3aGljaCBjdXJyZW50
bHkgY2hhbmdlcyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJvbSBGbG9hdCB0byBDR0Zsb2F0
IG9uIENHIHBsYXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNzIHVzZSA2NGJpdCBmbG9hdHMg
Zm9yIHRoZXNlIG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6d2luZG93UmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudDo6cGFnZVJlY3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnBhZ2VOdW1iZXJG
b3JFbGVtZW50QnlJZCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJl
ck9mUGFnZXNGb3JGcmFtZSk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoK
KyAgICAgICAgKGJlZ2luX3ByaW50X2NhbGxiYWNrKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhdyk6CisKIDIwMTEtMDct
MTQgIEx1a2FzeiBTbGFjaGNpYWsgIDxsLnNsYWNoY2lha0BzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDkx
MDExKQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkZpbGVDaG9v
c2VyLmgiCiAjaW5jbHVkZSAiRmlsZUljb25Mb2FkZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkd0a1V0aWxpdGllcy5oIgpAQCAtODgsNyArODgsNyBAQCB2b2lkIENocm9tZUNsaWVu
dDo6Y2hyb21lRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotRmxvYXRSZWN0IENo
cm9tZUNsaWVudDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50Ojp3aW5k
b3dSZWN0KCkKIHsKICAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3RvcGxl
dmVsKEdUS19XSURHRVQobV93ZWJWaWV3KSk7CiAgICAgaWYgKGd0a193aWRnZXRfaXNfdG9wbGV2
ZWwod2luZG93KSkgewpAQCAtOTcsMTAgKzk3LDEwIEBAIEZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6
OndpbmRvd1JlY3QoKQogICAgICAgICBndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5ET1cod2lu
ZG93KSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9w
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJl
dHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1Jl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIEludFJlY3QgaW50cmVjdCA9IElu
dFJlY3QocmVjdCk7CiAgICAgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMqIHdlYldpbmRvd0ZlYXR1
cmVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfZmVhdHVyZXMobV93ZWJWaWV3KTsKQEAg
LTEyNiw3ICsxMjYsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBG
CiAgICAgfQogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCitHcmFwaGlj
c1JlY3QgQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCiB7CiAgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uOwogI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsIDE4LCAwKQpJbmRleDogU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxMCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
Ci0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
Jik7CisgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKTsK
IAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAgICAgICAgIHZp
cnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsy
NTYsNyBAQCBpbnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYWdlTnVtYmVyCiAgICAgRWxl
bWVudCogY29yZUVsZW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlk
KEF0b21pY1N0cmluZyhpZCkpOwogICAgIGlmICghY29yZUVsZW1lbnQpCiAgICAgICAgIHJldHVy
biAtMTsKLSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChjb3Jl
RWxlbWVudCwgRmxvYXRTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkpOworICAgIHJldHVybiBQ
cmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGNvcmVFbGVtZW50LCBHcmFwaGljc1Np
emUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CiB9CiAKIC8qKgpAQCAtMjc1LDcgKzI3NSw3IEBA
IGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mUGEKICAgICBpZiAoIWNvcmVG
cmFtZSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVt
YmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEZsb2F0U2l6ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsK
KyAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgR3JhcGhp
Y3NTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkpOwogfQogCiAvKioKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NjAsNyArNzYwLDcgQEAgc3RhdGljIHZvaWQgYmVnaW5fcHJpbnRfY2FsbGJhY2so
R3RrUHJpbgogCiAgICAgZmxvYXQgd2lkdGggPSBndGtfcHJpbnRfY29udGV4dF9nZXRfd2lkdGgo
Y29udGV4dCk7CiAgICAgZmxvYXQgaGVpZ2h0ID0gZ3RrX3ByaW50X2NvbnRleHRfZ2V0X2hlaWdo
dChjb250ZXh0KTsKLSAgICBGbG9hdFJlY3QgcHJpbnRSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHdp
ZHRoLCBoZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCBwcmludFJlY3QgPSBHcmFwaGljc1JlY3Qo
MCwgMCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBwcmludENvbnRleHQtPmJlZ2luKHdpZHRoKTsK
IApJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNSw3ICs3MDUsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X3dlYl92aWV3X2RyYXcoR3RrCiAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKICAg
ICAgICAgaWYgKCFyZWN0TGlzdC0+c3RhdHVzICYmIHJlY3RMaXN0LT5udW1fcmVjdGFuZ2xlcyA+
IDApIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdExpc3QtPm51bV9yZWN0
YW5nbGVzOyBpKyspCi0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJl
Y3QoRmxvYXRSZWN0KHJlY3RMaXN0LT5yZWN0YW5nbGVzW2ldKSkpOworICAgICAgICAgICAgICAg
IHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdChyZWN0TGlzdC0+cmVj
dGFuZ2xlc1tpXSkpKTsKICAgICAgICAgfQogICAgICAgICBwYWludFdlYlZpZXcoZnJhbWUsIHBy
aXYtPnRyYW5zcGFyZW50LCBnYywgcmVjdCwgcmVjdHMpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2hhaWt1L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L0NoYW5n
ZUxvZwkocmV2aXNpb24gOTEwMjYpCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1
YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50
L1NpemUgYW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNz
IGNsYXNzZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRs
eSBjaGFuZ2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQg
b24gQ0cgcGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBm
b3IgdGhlc2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNldFdpbmRvd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnBhZ2VSZWN0KToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oOgorCiAyMDExLTA3LTEyICBKb3NlcGggUGVj
b3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXBwbGljYXRpb25DYWNoZSB1
cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBmYWlsIHdoZW4gcmVhY2hpbmcgcGVyLW9yaWdp
biBxdW90YQpJbmRleDogU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDIxICs2MSwyMSBAQCB2b2lkIENocm9tZUNsaWVudEhhaWt1OjpjaHJv
bWVEZXN0cm95ZWQoCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6c2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVj
dCgpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1JlY3QoKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAyMDAsIDIwMCk7
CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgwLCAwLCAyMDAsIDIwMCk7CiB9CiAKLUZsb2F0UmVj
dCBDaHJvbWVDbGllbnRIYWlrdTo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVu
dEhhaWt1OjpwYWdlUmVjdCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KDAsIDAsIDIwMCwgMjAwKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KDAsIDAs
IDIwMCwgMjAwKTsKIH0KIAogZmxvYXQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjYWxlRmFjdG9yKCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFp
a3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEhhaWt1LmgJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9oYWlr
dS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxMiArMzAsMTIgQEAKICNkZWZpbmUgQ2hyb21lQ2xpZW50SGFpa3VfaAogCiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0OwogICAgIGNs
YXNzIFBhZ2U7CiAgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiAKQEAgLTQ2LDEwICs0Niwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0
cm95ZWQoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgICAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9h
dFJlY3QgcGFnZVJlY3QoKTsKKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcGFnZVJlY3Qo
KTsKIAogICAgICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDkxMDI2KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRy
YXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9p
bnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhp
Y3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVu
dGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9h
dCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRz
IGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0
aW9uYWxpdHkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAg
ICAoLVtXZWJGcmFtZSBwYWdlTnVtYmVyRm9yRWxlbWVudDplbGVtZW50OnBhZ2VXaWR0aEluUGl4
ZWxzOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBudW1iZXJPZlBhZ2VzOnBhZ2VXaWR0aEluUGl4
ZWxzOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OmNnQ29udGV4dDpw
YWdlV2lkdGhJblBpeGVsczpdKToKKyAgICAgICAgKiBNaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFz
Lm1tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdBdFBvaW50OmZvbnQ6dGV4dENvbG9y
OmFsbG93aW5nRm9udFNtb290aGluZzpdKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db3Jy
ZWN0aW9uUGFuZWwuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwu
bW06CisgICAgICAgIChDb3JyZWN0aW9uUGFuZWw6OnNob3cpOgorICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdCk6
CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmN1c3RvbUhp
Z2hsaWdodFJlY3QpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hs
aWdodCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKiBXZWJLaXQub3JkZXI6
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2Nv
bXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3RvcjpwYWdlU2l6ZTpdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfYmVnaW5Q
cmludE1vZGVXaXRoUGFnZVdpZHRoOmhlaWdodDpzaHJpbmtUb0ZpdDpdKToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX2JlZ2luU2NyZWVuUGFnaW5hdGlvbk1vZGVXaXRoUGFnZVNpemU6c2hyaW5r
VG9GaXQ6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGxheW91dFRvTWluaW11bVBhZ2VXaWR0
aDpoZWlnaHQ6bWF4aW11bVNocmlua1JhdGlvOmFkanVzdGluZ1ZpZXdTaXplOl0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBzZWxlY3Rpb25UZXh0UmVjdHNdKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYlJlbmRlck5vZGUubW06CisgICAgICAgIChjb3B5UmVuZGVyTm9kZSk6CisKIDIwMTEtMDct
MTMgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBy
b3ZlIG5hbWVzIG9mIHNvbWUgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgYWNjZXNzb3IgbWV0aG9k
cwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViS2l0Lm9yZGVyCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYktpdC5vcmRlcgkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJLaXQub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTE2NzQsOCArMTY3NCw4
IEBAIF9fWk43V2ViQ29yZTIxUGxhdGZvcm1LZXlib2FyZEV2ZW50RDFFdgogLVtXZWJGcmFtZVZp
ZXcgX3Njcm9sbExpbmVIb3Jpem9udGFsbHk6XQogLVtXZWJGcmFtZVZpZXcgX2hvcml6b250YWxL
ZXlib2FyZFNjcm9sbERpc3RhbmNlXQogLVtXZWJGcmFtZVZpZXcgX3Njcm9sbEhvcml6b250YWxs
eUJ5Ol0KLV9fWk4xNVdlYkVkaXRvckNsaWVudDE5c2hvd0NvcnJlY3Rpb25QYW5lbEVON1dlYkNv
cmUxOUNvcnJlY3Rpb25QYW5lbEluZm85UGFuZWxUeXBlRVJLTlMwXzlGbG9hdFJlY3RFUktOM1dU
RjZTdHJpbmdFUzlfUktOUzZfNlZlY3RvcklTN19MbTBFRUUKLV9fWk4xNUNvcnJlY3Rpb25QYW5l
bDRzaG93RVA3V2ViVmlld043V2ViQ29yZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVF
UktOUzJfOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VTQl9SS05TOF82VmVjdG9ySVM5X0xtMEVF
RQorX19aTjE1V2ViRWRpdG9yQ2xpZW50MTlzaG93Q29ycmVjdGlvblBhbmVsRU43V2ViQ29yZTE5
Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVFUktOUzBfMTJHcmFwaGljc1JlY3RFUktOM1dU
RjZTdHJpbmdFUzlfUktOUzZfNlZlY3RvcklTN19MbTBFRUUKK19fWk4xNUNvcnJlY3Rpb25QYW5l
bDRzaG93RVA3V2ViVmlld043V2ViQ29yZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVF
UktOUzJfMTJHcmFwaGljc1JlY3RFUktOM1dURjZTdHJpbmdFU0JfUktOUzhfNlZlY3RvcklTOV9M
bTBFRUUKIF9fX3Nob3dfYmxvY2tfaW52b2tlXzEKIF9fWk4xNUNvcnJlY3Rpb25QYW5lbDI1aGFu
ZGxlQWNjZXB0ZWRSZXBsYWNlbWVudEVQOE5TU3RyaW5nUzFfUzFfbAogLVtXZWJWaWV3KFdlYlZp
ZXdUZXh0Q2hlY2tpbmcpIGhhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdDpdCkBAIC0xNzA0LDkg
KzE3MDQsOSBAQCBfX19yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZ19ibG9ja19pbnZva2VfCiAtW1dl
YkVkaXRvclNwZWxsQ2hlY2tSZXNwb25kZXIgcGVyZm9ybV0KIC1bV2ViRWRpdG9yU3BlbGxDaGVj
a1Jlc3BvbmRlciAuY3h4X2Rlc3RydWN0XQogX19fZGVzdHJveV9oZWxwZXJfYmxvY2tfMQotX19a
TjE1V2ViQ2hyb21lQ2xpZW50MTljdXN0b21IaWdobGlnaHRSZWN0RVBON1dlYkNvcmU0Tm9kZUVS
S04zV1RGMTJBdG9taWNTdHJpbmdFUktOUzBfOUZsb2F0UmVjdEUKK19fWk4xNVdlYkNocm9tZUNs
aWVudDE5Y3VzdG9tSGlnaGxpZ2h0UmVjdEVQTjdXZWJDb3JlNE5vZGVFUktOM1dURjEyQXRvbWlj
U3RyaW5nRVJLTlMwXzEyR3JhcGhpY3NSZWN0RQogLVtXZWJIVE1MVmlldyhXZWJJbnRlcm5hbCkg
X2hpZ2hsaWdodGVyRm9yVHlwZTpdCi1fX1pOMTVXZWJDaHJvbWVDbGllbnQyMHBhaW50Q3VzdG9t
SGlnaGxpZ2h0RVBON1dlYkNvcmU0Tm9kZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFUktOUzBfOUZs
b2F0UmVjdEVTOV9iYgorX19aTjE1V2ViQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbUhpZ2hsaWdo
dEVQTjdXZWJDb3JlNE5vZGVFUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlMwXzEyR3JhcGhpY3NS
ZWN0RVM5X2JiCiAtW1dlYlZpZXcoV2ViUGVuZGluZ1B1YmxpYykgZmluZFN0cmluZzpvcHRpb25z
Ol0KIF9fWkwxMGZpbmRTdHJpbmdQNk5TVmlld1A4TlNTdHJpbmdtCiAtW1dlYkhUTUxWaWV3KFdl
YkRvY3VtZW50SW50ZXJuYWxQcm90b2NvbHMpIF9maW5kU3RyaW5nOm9wdGlvbnM6XQpAQCAtMTc5
Miw3ICsxNzkyLDcgQEAgX1dLUVRNb3ZpZU1heFRpbWVTZWVrYWJsZQogLVtXZWJGcmFtZSBjaGls
ZEZyYW1lc10KIC1bV2ViRnJhbWUgbmFtZV0KICtbV2ViQ29yZVN0YXRpc3RpY3MgamF2YVNjcmlw
dE9iamVjdHNDb3VudF0KLV9fWk4xNVdlYkNocm9tZUNsaWVudDEzc2V0V2luZG93UmVjdEVSS043
V2ViQ29yZTlGbG9hdFJlY3RFCitfX1pOMTVXZWJDaHJvbWVDbGllbnQxM3NldFdpbmRvd1JlY3RF
UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIC1bV2ViRnJhbWVWaWV3IHNjcm9sbFRvQmVnaW5u
aW5nT2ZEb2N1bWVudDpdCiAtW1dlYkZyYW1lVmlldyBfc2Nyb2xsVG9CZWdpbm5pbmdPZkRvY3Vt
ZW50XQogLVtXZWJGcmFtZVZpZXcgc2Nyb2xsVG9FbmRPZkRvY3VtZW50Ol0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkocmV2aXNpb24gOTEwMTEp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzUsMTIgKzI3NSwxMiBAQCAtIChOU1N0cmluZyAqKWNvdW50ZXJWYWx1ZUZv
ckVsZW1lbnQ6KERPCiAKIC0gKGludClwYWdlTnVtYmVyRm9yRWxlbWVudDooRE9NRWxlbWVudCop
ZWxlbWVudDooZmxvYXQpcGFnZVdpZHRoSW5QaXhlbHM6KGZsb2F0KXBhZ2VIZWlnaHRJblBpeGVs
cwogewotICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGNvcmUo
ZWxlbWVudCksIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxz
KSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoY29yZShl
bGVtZW50KSwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhl
bHMpKTsKIH0KIAogLSAoaW50KW51bWJlck9mUGFnZXM6KGZsb2F0KXBhZ2VXaWR0aEluUGl4ZWxz
OihmbG9hdClwYWdlSGVpZ2h0SW5QaXhlbHMKIHsKLSAgICByZXR1cm4gUHJpbnRDb250ZXh0Ojpu
dW1iZXJPZlBhZ2VzKF9wcml2YXRlLT5jb3JlRnJhbWUsIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBp
eGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVt
YmVyT2ZQYWdlcyhfcHJpdmF0ZS0+Y29yZUZyYW1lLCBHcmFwaGljc1NpemUocGFnZVdpZHRoSW5Q
aXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCiAtIChOU1N0cmluZyAqKXBhZ2VQcm9w
ZXJ0eTooY29uc3QgY2hhciAqKXByb3BlcnR5TmFtZTooaW50KXBhZ2VOdW1iZXIKQEAgLTMwNSw3
ICszMDUsNyBAQCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4dFJlZiljCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY2dDb250
ZXh0KTsKLSAgICBQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyhjb3Jl
RnJhbWUsIGdyYXBoaWNzQ29udGV4dCwgRmxvYXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdl
SGVpZ2h0SW5QaXhlbHMpKTsKKyAgICBQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNXaXRoQm91
bmRhcmllcyhjb3JlRnJhbWUsIGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0
aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIAogQGVuZApJbmRleDogU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCShyZXZpc2lvbiA5
MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9p
bnQ6KE5TUG9pbnQpcG9pbnQgCiAgICAgICAgIFtbdGV4dENvbG9yIGNvbG9yVXNpbmdDb2xvclNw
YWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdIGdldFJlZDomcmVkIGdyZWVuOiZncmVlbiBi
bHVlOiZibHVlIGFscGhhOiZhbHBoYV07CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxs
Q29sb3IobWFrZVJHQkEocmVkICogMjU1LCBncmVlbiAqIDI1NSwgYmx1ZSAqIDI1NSwgYWxwaGEg
KiAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAotICAgICAgICB3ZWJDb3JlRm9udC5kcmF3
VGV4dCgmZ3JhcGhpY3NDb250ZXh0LCBydW4sIEZsb2F0UG9pbnQocG9pbnQueCwgKGZsaXBwZWQg
PyBwb2ludC55IDogKC0xICogcG9pbnQueSkpKSk7CisgICAgICAgIHdlYkNvcmVGb250LmRyYXdU
ZXh0KCZncmFwaGljc0NvbnRleHQsIHJ1biwgR3JhcGhpY3NQb2ludChwb2ludC54LCAoZmxpcHBl
ZCA/IHBvaW50LnkgOiAoLTEgKiBwb2ludC55KSkpKTsKIAogICAgICAgICBpZiAoIWZsaXBwZWQp
CiAgICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5l
bC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L0NvcnJlY3Rpb25QYW5lbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNz
IENvcnJlY3Rpb25QYW5lbCB7CiBwdWJsaWM6CiAgICAgQ29ycmVjdGlvblBhbmVsKCk7CiAgICAg
fkNvcnJlY3Rpb25QYW5lbCgpOwotICAgIHZvaWQgc2hvdyhXZWJWaWV3KiwgV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJv
dW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
dGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIHNob3coV2ViVmlldyosIFdl
YkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgU3RyaW5nIGRp
c21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAg
c3RhdGljIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXZWJWaWV3KiwgTlNDb3Jy
ZWN0aW9uUmVzcG9uc2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiA5MTAxMSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBDb3JyZWN0aW9uUGFuZWw6On5Db3JyZWN0aW9u
UGFuZWwoKQogICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlv
blBhbmVsSWdub3JlZCwgZmFsc2UpOwogfQogCi12b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hvdyhX
ZWJWaWV3KiB2aWV3LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlv
blBhbmVsOjpzaG93KFdlYlZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSB0eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0
cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdz
KQogewogICAgIGRpc21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsSWdub3JlZCwgZmFsc2UpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDkxMDExKQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEwICs0MCwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2
b2lkIGNocm9tZURlc3Ryb3llZCgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCB3aW5kb3dSZWN0KCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBwYWdl
UmVjdCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAK
ICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAKQEAgLTEyOSwxMCArMTI5LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vy
c29yJik7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjdXN0b21IaWdobGlnaHRS
ZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgdHlwZSwKLSAgICAg
ICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsaW5lUmVjdCk7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpHcmFwaGljc1JlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChXZWJDb3JlOjpOb2RlKiwgY29u
c3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzUmVjdCYgbGluZVJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdo
dChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsCi0gICAgICAg
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBsaW5lUmVjdCwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBib3hS
ZWN0LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGxpbmVSZWN0LAogICAgICAgICBib29s
IGJlaGluZFRleHQsIGJvb2wgZW50aXJlTGluZSk7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6Oktl
eWJvYXJkVUlNb2RlIGtleWJvYXJkVUlNb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiA5MTAx
MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEwIEBACiAjaW1wb3J0IDxXZWJDb3JlL0Vs
ZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmlsZUNob29zZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRmlsZUljb25Mb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3Qu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzUmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JY29uLmg+CkBAIC0xNTgsMjAg
KzE1OCwyMCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKCkKIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBzY2FsZSBiZXR3ZWVuIHdpbmRvdyBhbmQgV2ViVmlldyBjb29yZGluYXRl
cyBiZWNhdXNlIEphdmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMgCiAvLyBhc3N1bWUgdGhhdCB0aGUg
V2ViVmlldyBhbmQgdGhlIHdpbmRvdyBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbS4K
IAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gdG9EZXZpY2VTcGFjZShyZWN0
LCBbbV93ZWJWaWV3IHdpbmRvd10pOwogICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBzZXRGcmFtZTp3aW5kb3dSZWN0XTsKIH0KIAotRmxvYXRS
ZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21l
Q2xpZW50Ojp3aW5kb3dSZWN0KCkKIHsKICAgICBOU1JlY3Qgd2luZG93UmVjdCA9IFtbbV93ZWJW
aWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3RnJhbWU6bV93ZWJWaWV3XTsKICAgICBy
ZXR1cm4gdG9Vc2VyU3BhY2Uod2luZG93UmVjdCwgW21fd2ViVmlldyB3aW5kb3ddKTsKIH0KIAog
Ly8gRklYTUU6IFdlIG5lZWQgdG8gYWRkIEFQSSBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGlz
LgotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IFdl
YkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQogewogICAgIHJldHVybiBbbV93ZWJWaWV3IGZyYW1l
XTsKIH0KQEAgLTczOCw3ICs3MzgsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGFzaGJvYXJk
UmVnaW9uc0NoCiAKICNlbmRpZgogCi1GbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21I
aWdobGlnaHRSZWN0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3Qg
RmxvYXRSZWN0JiBsaW5lUmVjdCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3Rv
bUhpZ2hsaWdodFJlY3QoTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25z
dCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIApAQCAtNzU1LDcgKzc1NSw3IEBAIEZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1
c3RvbUhpZ2hsaWcKICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIH0KIAotdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVS
ZWN0LAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqIG5v
ZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3hSZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0LAogICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9v
bCBlbnRpcmVMaW5lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7
CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxs
Q2hlY2tlciosIGludCwgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFdURjo6
U3RyaW5nJik7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlv
blBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdmly
dHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5m
bzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZS
ZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVw
bGFjZW1lbnRTdHJpbmdzKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bChXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0
dWFsIFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50Lm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtODYzLDcgKzg2Myw3IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2kKIH0KIAogI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSBwYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJl
Y3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25z
dCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1f
Y29ycmVjdGlvblBhbmVsLnNob3cobV93ZWJWaWV3LCBwYW5lbFR5cGUsIGJvdW5kaW5nQm94T2ZS
ZXBsYWNlZFN0cmluZywgcmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50U3RyaW5nLCBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgLSAoTlNB
cnJheSAqKV9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50UwogICAgIGZsb2F0IHByaW50SGVpZ2h0
ID0gcm9vdC0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBhZ2VTaXplLmhl
aWdodCA6IGRvY3VtZW50UmVjdC5oZWlnaHQoKSAvIHByaW50U2NhbGVGYWN0b3I7CiAKICAgICBQ
cmludENvbnRleHQgcHJpbnRDb250ZXh0KF9wcml2YXRlLT5jb3JlRnJhbWUpOwotICAgIHByaW50
Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKEZsb2F0U2l6ZShwcmludFdpZHRo
LCBwcmludEhlaWdodCksIHRydWUpOworICAgIHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3Rz
V2l0aFBhZ2VTaXplKEdyYXBoaWNzU2l6ZShwcmludFdpZHRoLCBwcmludEhlaWdodCksIHRydWUp
OwogICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFnZVJlY3RzID0gcHJpbnRDb250ZXh0LnBh
Z2VSZWN0cygpOwogCiAgICAgc2l6ZV90IHNpemUgPSBwYWdlUmVjdHMuc2l6ZSgpOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDEyICs5MCwxMiBAQAogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25I
YW5kbGVycy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9u
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgpA
QCAtMjE0NywxMyArMjE0NywxMyBAQCAtIChCT09MKV9iZWdpblByaW50TW9kZVdpdGhQYWdlV2lk
dGg6KGZsCiAKICAgICBmbG9hdCBwYWdlTG9naWNhbFdpZHRoID0gaXNIb3Jpem9udGFsID8gcGFn
ZVdpZHRoIDogcGFnZUhlaWdodDsKICAgICBmbG9hdCBwYWdlTG9naWNhbEhlaWdodCA9IGlzSG9y
aXpvbnRhbCA/IHBhZ2VIZWlnaHQgOiBwYWdlV2lkdGg7Ci0gICAgRmxvYXRTaXplIG1pbkxheW91
dFNpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpOworICAgIEdyYXBoaWNz
U2l6ZSBtaW5MYXlvdXRTaXplKHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KTsK
ICAgICBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8gPSAxOwogCiAgICAgLy8gSWYgd2UgYXJlIGEg
ZnJhbWVzZXQganVzdCBwcmludCB3aXRoIHRoZSBsYXlvdXQgd2UgaGF2ZSBvbnNjcmVlbiwgb3Ro
ZXJ3aXNlIHJlbGF5b3V0CiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBwYWdlIHdpZHRoLgogICAg
IGlmIChzaHJpbmtUb0ZpdCAmJiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1l
bnQoKS0+aXNGcmFtZVNldCgpKSkgewotICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJl
c2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9hdFNpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFn
ZUxvZ2ljYWxIZWlnaHQpLCBGbG9hdFNpemUocGFnZUxvZ2ljYWxXaWR0aCAqIF9XZWJIVE1MVmll
d1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWlnaHQgKiBfV2ViSFRN
TFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKKyAgICAgICAgbWluTGF5b3V0U2l6
ZSA9IGZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oR3JhcGhpY3NTaXplKHBhZ2VM
b2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KSwgR3JhcGhpY3NTaXplKHBhZ2VMb2dpY2Fs
V2lkdGggKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIHBhZ2VMb2dp
Y2FsSGVpZ2h0ICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CiAg
ICAgICAgIG1heGltdW1TaHJpbmtSYXRpbyA9IF9XZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNo
cmlua0ZhY3RvciAvIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcjsKICAg
ICB9CiAKQEAgLTIxODMsMTMgKzIxODMsMTMgQEAgLSAoQk9PTClfYmVnaW5TY3JlZW5QYWdpbmF0
aW9uTW9kZVdpdGhQYQogCiAgICAgZmxvYXQgcGFnZUxvZ2ljYWxXaWR0aCA9IGlzSG9yaXpvbnRh
bCA/IHBhZ2VTaXplLndpZHRoIDogcGFnZVNpemUuaGVpZ2h0OwogICAgIGZsb2F0IHBhZ2VMb2dp
Y2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsID8gcGFnZVNpemUuaGVpZ2h0IDogcGFnZVNpemUud2lk
dGg7Ci0gICAgRmxvYXRTaXplIG1pbkxheW91dFNpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxv
Z2ljYWxIZWlnaHQpOworICAgIEdyYXBoaWNzU2l6ZSBtaW5MYXlvdXRTaXplKHBhZ2VMb2dpY2Fs
V2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8g
PSAxOwogCiAgICAgLy8gSWYgd2UgYXJlIGEgZnJhbWVzZXQganVzdCBwcmludCB3aXRoIHRoZSBs
YXlvdXQgd2UgaGF2ZSBvbnNjcmVlbiwgb3RoZXJ3aXNlIHJlbGF5b3V0CiAgICAgLy8gYWNjb3Jk
aW5nIHRvIHRoZSBwYWdlIHdpZHRoLgogICAgIGlmIChzaHJpbmtUb0ZpdCAmJiAoIWZyYW1lLT5k
b2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKSkgewotICAgICAg
ICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9h
dFNpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpLCBGbG9hdFNpemUocGFn
ZUxvZ2ljYWxXaWR0aCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3Rvciwg
cGFnZUxvZ2ljYWxIZWlnaHQgKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0
b3IpKTsKKyAgICAgICAgbWluTGF5b3V0U2l6ZSA9IGZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVw
aW5nUmF0aW8oR3JhcGhpY3NTaXplKHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0
KSwgR3JhcGhpY3NTaXplKHBhZ2VMb2dpY2FsV2lkdGggKiBfV2ViSFRNTFZpZXdQcmludGluZ01p
bmltdW1TaHJpbmtGYWN0b3IsIHBhZ2VMb2dpY2FsSGVpZ2h0ICogX1dlYkhUTUxWaWV3UHJpbnRp
bmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CiAgICAgICAgIG1heGltdW1TaHJpbmtSYXRpbyA9IF9X
ZWJIVE1MVmlld1ByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciAvIF9XZWJIVE1MVmlld1ByaW50
aW5nTWluaW11bVNocmlua0ZhY3RvcjsKICAgICB9CiAKQEAgLTMwMjIsOSArMzAyMiw5IEBAIC0g
KHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOihmbG9hdCkKIAogICAgIGlmIChGcmFtZVZp
ZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgaWYgKG1pblBhZ2VM
b2dpY2FsV2lkdGggPiAwLjApIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBwYWdlU2l6ZShtaW5Q
YWdlTG9naWNhbFdpZHRoLCBtaW5QYWdlTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBHcmFw
aGljc1NpemUgcGFnZVNpemUobWluUGFnZUxvZ2ljYWxXaWR0aCwgbWluUGFnZUxvZ2ljYWxIZWln
aHQpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSAmJiBjb3JlRnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSAmJiAhY29yZUZyYW1lLT5kb2N1bWVudCgpLT5yZW5k
ZXJWaWV3KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAg
ICAgICAgcGFnZVNpemUgPSBGbG9hdFNpemUobWluUGFnZUxvZ2ljYWxIZWlnaHQsIG1pblBhZ2VM
b2dpY2FsV2lkdGgpOworICAgICAgICAgICAgICAgIHBhZ2VTaXplID0gR3JhcGhpY3NTaXplKG1p
blBhZ2VMb2dpY2FsSGVpZ2h0LCBtaW5QYWdlTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgIGNv
cmVWaWV3LT5mb3JjZUxheW91dEZvclBhZ2luYXRpb24ocGFnZVNpemUsIG1heGltdW1TaHJpbmtS
YXRpbywgYWRqdXN0Vmlld1NpemUgPyBBZGp1c3RWaWV3U2l6ZSA6IERvTm90QWRqdXN0Vmlld1Np
emUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29yZVZpZXctPmZvcmNlTGF5b3V0
KCFhZGp1c3RWaWV3U2l6ZSk7CkBAIC01OTcxLDcgKzU5NzEsNyBAQCAtIChOU0FycmF5ICopc2Vs
ZWN0aW9uVGV4dFJlY3RzCiAgICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGxpc3Q7CisgICAgVmVjdG9yPEdy
YXBoaWNzUmVjdD4gbGlzdDsKICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpCiAgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmdldENsaXBwZWRWaXNp
YmxlVGV4dFJlY3RhbmdsZXMobGlzdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViUmVuZGVyTm9kZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlJlbmRlck5vZGUubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJSZW5kZXJOb2RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3
IEBAIHN0YXRpYyBXZWJSZW5kZXJOb2RlICpjb3B5UmVuZGVyTm9kZShSZW4KICAgICBGcmFtZSog
ZnJhbWUgPSBmcmFtZVZpZXcgPyBmcmFtZVZpZXctPmZyYW1lKCkgOiAwOwogCiAgICAgLy8gRklY
TUU6IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IG5vZGUt
PmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9z
ID0gbm9kZS0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgaW50IHggPSAw
OwogICAgIGludCB5ID0gMDsKICAgICBpbnQgd2lkdGggPSAwOwpJbmRleDogU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDkxMDI2KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0wNy0xNCAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVuYW1lIEZsb2F0UmVjdC9Qb2ludC9TaXplIGFu
ZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcgdGhlIEZsb2F0KiBncmFwaGljcyBjbGFzc2Vz
IHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFjdGlvbiB3aGljaCBjdXJyZW50bHkgY2hhbmdl
cyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJvbSBGbG9hdCB0byBDR0Zsb2F0IG9uIENHIHBs
YXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNzIHVzZSA2NGJpdCBmbG9hdHMgZm9yIHRoZXNl
IG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6
OmR5bmFtaWNQcm9wZXJ0eUNoYW5nZUV2ZW50KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6c2V0
V2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6d2luZG93UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cGFnZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnZpc2libGVSZWN0Rm9yVGlsZWRCYWNraW5nU3Rv
cmUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZCk6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQYWdlcyk6CisKIDIwMTEtMDct
MTMgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBy
b3ZlIG5hbWVzIG9mIHNvbWUgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UgYWNjZXNzb3IgbWV0aG9k
cwpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjMs
MjEgKzEyMjMsMjEgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OmR5bmFtaWNQcm9wZXJ0eUNoYQog
ICAgICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEt
Pm1haW5GcmFtZSgpKTsKICAgICAgICAgaWYgKCFmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRmxvYXRTaXplIGtlZXBNdWx0aXBsaWVyOwot
ICAgICAgICBGbG9hdFNpemUgY292ZXJNdWx0aXBsaWVyOworICAgICAgICBHcmFwaGljc1NpemUg
a2VlcE11bHRpcGxpZXI7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBjb3Zlck11bHRpcGxpZXI7CiAg
ICAgICAgIGZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5nZXRLZWVwQW5kQ292ZXJBcmVhTXVs
dGlwbGllcnMoa2VlcE11bHRpcGxpZXIsIGNvdmVyTXVsdGlwbGllcik7CiAgICAgICAgIFFTaXpl
RiBxU2l6ZSA9IHEtPnByb3BlcnR5KCJfcV9UaWxlZEJhY2tpbmdTdG9yZUtlZXBBcmVhTXVsdGlw
bGllciIpLnRvU2l6ZUYoKTsKLSAgICAgICAga2VlcE11bHRpcGxpZXIgPSBGbG9hdFNpemUocVNp
emUud2lkdGgoKSwgcVNpemUuaGVpZ2h0KCkpOworICAgICAgICBrZWVwTXVsdGlwbGllciA9IEdy
YXBoaWNzU2l6ZShxU2l6ZS53aWR0aCgpLCBxU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGZyYW1l
LT50aWxlZEJhY2tpbmdTdG9yZSgpLT5zZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoa2Vl
cE11bHRpcGxpZXIsIGNvdmVyTXVsdGlwbGllcik7CiAgICAgfSBlbHNlIGlmIChldmVudC0+cHJv
cGVydHlOYW1lKCkgPT0gIl9xX1RpbGVkQmFja2luZ1N0b3JlQ292ZXJBcmVhTXVsdGlwbGllciIp
IHsKICAgICAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29y
ZShxLT5tYWluRnJhbWUoKSk7CiAgICAgICAgIGlmICghZnJhbWUtPnRpbGVkQmFja2luZ1N0b3Jl
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEZsb2F0U2l6ZSBrZWVwTXVsdGlwbGll
cjsKLSAgICAgICAgRmxvYXRTaXplIGNvdmVyTXVsdGlwbGllcjsKKyAgICAgICAgR3JhcGhpY3NT
aXplIGtlZXBNdWx0aXBsaWVyOworICAgICAgICBHcmFwaGljc1NpemUgY292ZXJNdWx0aXBsaWVy
OwogICAgICAgICBmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+Z2V0S2VlcEFuZENvdmVyQXJl
YU11bHRpcGxpZXJzKGtlZXBNdWx0aXBsaWVyLCBjb3Zlck11bHRpcGxpZXIpOwogICAgICAgICBR
U2l6ZUYgcVNpemUgPSBxLT5wcm9wZXJ0eSgiX3FfVGlsZWRCYWNraW5nU3RvcmVDb3ZlckFyZWFN
dWx0aXBsaWVyIikudG9TaXplRigpOwotICAgICAgICBjb3Zlck11bHRpcGxpZXIgPSBGbG9hdFNp
emUocVNpemUud2lkdGgoKSwgcVNpemUuaGVpZ2h0KCkpOworICAgICAgICBjb3Zlck11bHRpcGxp
ZXIgPSBHcmFwaGljc1NpemUocVNpemUud2lkdGgoKSwgcVNpemUuaGVpZ2h0KCkpOwogICAgICAg
ICBmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxp
ZXJzKGtlZXBNdWx0aXBsaWVyLCBjb3Zlck11bHRpcGxpZXIpOwogICAgIH0KICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBD
aHJvbWVDbGllbnRRdDo6fkNocm9tZUNsaWVudFF0KCkKICNlbmRpZgogfQogCi12b2lkIENocm9t
ZUNsaWVudFF0OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgQ2hy
b21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIGlmICghbV93ZWJQYWdlKQogICAgICAgICByZXR1cm47CkBAIC0xMjUsMTAgKzEyNSwxMCBA
QCB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRXaW5kb3dSZWN0KGNvbnN0CiAgICAgbGlrZSB0b29s
YmFycy9zY3JvbGxiYXJzIGV0Yy4gSXQgaXMgdXNlZCBieSB0aGUgdmlld3BvcnQgbWV0YSB0YWcg
YXMgd2VsbCBhcwogICAgIGJ5IHRoZSBET00gV2luZG93IG9iamVjdDogb3V0ZXJIZWlnaHQoKSwg
b3V0ZXJXaWR0aCgpLCBzY3JlZW5YKCksIHNjcmVlblkoKS4KICovCi1GbG9hdFJlY3QgQ2hyb21l
Q2xpZW50UXQ6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudFF0Ojp3aW5k
b3dSZWN0KCkKIHsKICAgICBpZiAoIXBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAgICAgICByZXR1
cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKICAgICByZXR1
cm4gcGxhdGZvcm1QYWdlQ2xpZW50KCktPndpbmRvd1JlY3QoKTsKIH0KIApAQCAtMTM5LDExICsx
MzksMTEgQEAgYm9vbCBDaHJvbWVDbGllbnRRdDo6YWxsb3dzQWNjZWxlcmF0ZWRDbwogICAgIHJl
dHVybiBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
OwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50UXQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVj
dCBDaHJvbWVDbGllbnRRdDo6cGFnZVJlY3QoKQogewogICAgIGlmICghbV93ZWJQYWdlKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChRUmVjdEYoUVBv
aW50RigwLCAwKSwgbV93ZWJQYWdlLT52aWV3cG9ydFNpemUoKSkpOworICAgICAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChRUmVjdEYoUVBvaW50Rigw
LCAwKSwgbV93ZWJQYWdlLT52aWV3cG9ydFNpemUoKSkpOwogfQogCiBmbG9hdCBDaHJvbWVDbGll
bnRRdDo6c2NhbGVGYWN0b3IoKQpAQCAtNjY3LDcgKzY2Nyw3IEBAIEludFJlY3QgQ2hyb21lQ2xp
ZW50UXQ6OnZpc2libGVSZWN0Rm9yVGkKICAgICBpZiAoIXBsYXRmb3JtUGFnZUNsaWVudCgpLT52
aWV3UmVzaXplc1RvQ29udGVudHNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBRUmVjdChtX3dl
YlBhZ2UtPm1haW5GcmFtZSgpLT5zY3JvbGxQb3NpdGlvbigpLCBtX3dlYlBhZ2UtPm1haW5GcmFt
ZSgpLT5nZW9tZXRyeSgpLnNpemUoKSk7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChG
bG9hdFJlY3QocGxhdGZvcm1QYWdlQ2xpZW50KCktPmdyYXBoaWNzSXRlbVZpc2libGVSZWN0KCkp
KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChHcmFwaGljc1JlY3QocGxhdGZvcm1QYWdl
Q2xpZW50KCktPmdyYXBoaWNzSXRlbVZpc2libGVSZWN0KCkpKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
CShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBD
aHJvbWVDbGllbnRRdF9oCiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJRdFBsYXRmb3JtUGx1Z2lu
LmgiCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsZUNo
b29zZXI7CiBjbGFzcyBGaWxlSWNvbkxvYWRlcjsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdy
YXBoaWNzUmVjdDsKIGNsYXNzIFBhZ2U7CiBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKIGNsYXNz
IFF0QWJzdHJhY3RXZWJQb3B1cDsKQEAgLTYzLDEwICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCiAgICAgdmlydHVhbCB2b2lkKiB3ZWJWaWV3
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAKICAg
ICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNyArNDMx
LDcgQEAgaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWdlTnVtYmVyRgogICAgIGlmICgh
ZWxlbWVudCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0dXJuIFByaW50Q29udGV4dDo6
cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpKTsK
KyAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChlbGVtZW50LCBH
cmFwaGljc1NpemUod2lkdGgsIGhlaWdodCkpOwogfQogCiBpbnQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ6Om51bWJlck9mUGFnZXMoUVdlYkZyYW1lKiBmcmFtZSwgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCkKQEAgLTQ0MCw3ICs0NDAsNyBAQCBpbnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6
Om51bWJlck9mUGFnCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAtMTsKIAot
ICAgIHJldHVybiBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZyYW1lLCBGbG9hdFNp
emUod2lkdGgsIGhlaWdodCkpOworICAgIHJldHVybiBQcmludENvbnRleHQ6Om51bWJlck9mUGFn
ZXMoY29yZUZyYW1lLCBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCkpOwogfQogCiAvLyBTdXNw
ZW5kIGFjdGl2ZSBET00gb2JqZWN0cyBpbiB0aGlzIGZyYW1lLgpJbmRleDogU291cmNlL1dlYktp
dC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTEwMjYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMS0wNy0xNCAgTGV2aSBXZWludHJhdWIgIDxs
ZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVuYW1lIEZsb2F0UmVjdC9Qb2ludC9TaXpl
IGFuZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcgdGhlIEZsb2F0KiBncmFwaGljcyBjbGFz
c2VzIHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFjdGlvbiB3aGljaCBjdXJyZW50bHkgY2hh
bmdlcyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJvbSBGbG9hdCB0byBDR0Zsb2F0IG9uIENH
IHBsYXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNzIHVzZSA2NGJpdCBmbG9hdHMgZm9yIHRo
ZXNlIG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0
eS4KKworICAgICAgICAqIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
SFVEU2xpZGVyOjpkcmF3KToKKyAgICAgICAgKEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6Okxh
eWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6d2lu
ZG93UmVjdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KToKKyAgICAgICAg
KFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbENvcm5lcik6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJG
cmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQpOgorICAgICAgICAoV2ViRnJhbWU6OnBh
Z2VOdW1iZXJGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChXZWJGcmFtZTo6bnVtYmVyT2ZQYWdl
cyk6CisgICAgICAgIChXZWJGcmFtZTo6c2V0UHJpbnRpbmcpOgorICAgICAgICAoV2ViRnJhbWU6
OnNldEluUHJpbnRpbmdNb2RlKToKKyAgICAgICAgKFdlYkZyYW1lOjpmcmFtZUJvdW5kcyk6Cisg
ICAgICAgICogV2ViS2l0R3JhcGhpY3MuY3BwOgorICAgICAgICAoV2ViRHJhd1RleHQpOgorICAg
ICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0
KToKKwogMjAxMS0wNy0xMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgog
CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUgdXBkYXRlIHNob3VsZCBub3QgaW1tZWRpYXRlbHkg
ZmFpbCB3aGVuIHJlYWNoaW5nIHBlci1vcmlnaW4gcXVvdGEKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MTAxMSkK
KysrIFNvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBIVURTbGlkZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBjbwogICAgIH0KIAogICAgIC8vIERyYXcgYSBkaWFtb25kCi0gICAgRmxvYXRQ
b2ludCBwb2ludHNbNF07CisgICAgR3JhcGhpY3NQb2ludCBwb2ludHNbNF07CiAgICAgZmxvYXQg
aGFsZiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2J1dHRvblNpemUpIC8gMjsKICAgICBwb2ludHNb
MF0uc2V0WChtX3JlY3QubG9jYXRpb24oKS54KCkgKyBtX2J1dHRvblBvc2l0aW9uICsgaGFsZik7
CiAgICAgcG9pbnRzWzBdLnNldFkobV9yZWN0LmxvY2F0aW9uKCkueSgpKTsKQEAgLTIwOSw5ICsy
MDksOSBAQCB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkxheWVyQ2xpCiAgICAgaWYg
KCF2aWRlb0xheWVyIHx8IHZpZGVvTGF5ZXItPnN1cGVybGF5ZXIoKSAhPSBsYXllcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gbGF5ZXItPmJvdW5kcygp
OworICAgIEdyYXBoaWNzUmVjdCBsYXllckJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKIAotICAg
IEZsb2F0U2l6ZSB2aWRlb1NpemUgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigpLT5uYXR1cmFsU2l6
ZSgpOworICAgIEdyYXBoaWNzU2l6ZSB2aWRlb1NpemUgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigp
LT5uYXR1cmFsU2l6ZSgpOwogICAgIGZsb2F0IHNjYWxlRmFjdG9yOwogICAgIGlmICh2aWRlb1Np
emUuYXNwZWN0UmF0aW8oKSA+IGxheWVyQm91bmRzLnNpemUoKS5hc3BlY3RSYXRpbygpKQogICAg
ICAgICBzY2FsZUZhY3RvciA9IGxheWVyQm91bmRzLndpZHRoKCkgLyB2aWRlb1NpemUud2lkdGgo
KTsKQEAgLTIyMCwxMSArMjIwLDExIEBAIHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6
TGF5ZXJDbGkKICAgICB2aWRlb1NpemUuc2NhbGUoc2NhbGVGYWN0b3IpOwogCiAgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBjZW50ZXJlZCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgdmlkZW9Cb3VuZHMgYW5k
IGxheWVyQm91bmRzOgotICAgIEZsb2F0UG9pbnQgdmlkZW9Qb3NpdGlvbjsKLSAgICBGbG9hdFBv
aW50IHZpZGVvT3JpZ2luOworICAgIEdyYXBoaWNzUG9pbnQgdmlkZW9Qb3NpdGlvbjsKKyAgICBH
cmFwaGljc1BvaW50IHZpZGVvT3JpZ2luOwogICAgIHZpZGVvT3JpZ2luLnNldFgoKGxheWVyQm91
bmRzLndpZHRoKCkgLSB2aWRlb1NpemUud2lkdGgoKSkgKiAwLjUpOwogICAgIHZpZGVvT3JpZ2lu
LnNldFkoKGxheWVyQm91bmRzLmhlaWdodCgpIC0gdmlkZW9TaXplLmhlaWdodCgpKSAqIDAuNSk7
Ci0gICAgdmlkZW9MYXllci0+c2V0RnJhbWUoRmxvYXRSZWN0KHZpZGVvT3JpZ2luLCB2aWRlb1Np
emUpKTsKKyAgICB2aWRlb0xheWVyLT5zZXRGcmFtZShHcmFwaGljc1JlY3QodmlkZW9PcmlnaW4s
IHZpZGVvU2l6ZSkpOwogfQogI2VuZGlmIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUwLDcgKzM1MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
RnJhbWU6OnBhaW4KICAgICBnYy5zYXZlKCk7CiAgICAgTE9ORyB3aWR0aCA9IHJlY3QucmlnaHQg
LSByZWN0LmxlZnQ7CiAgICAgTE9ORyBoZWlnaHQgPSByZWN0LmJvdHRvbSAtIHJlY3QudG9wOwot
ICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGRpcnR5UmVjdDsKICAg
ICBkaXJ0eVJlY3Quc2V0V2lkdGgod2lkdGgpOwogICAgIGRpcnR5UmVjdC5zZXRIZWlnaHQoaGVp
Z2h0KTsKICAgICBnYy5jbGlwKGRpcnR5UmVjdCk7CkBAIC05MjcsNyArOTI3LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6cGFnZQogICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBjb3JlRnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGNvcmVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQogICAgICAgICByZXR1cm4gRV9GQUlMOwotICAgICpyZXN1bHQgPSBQcmludENv
bnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEZsb2F0U2l6ZShwYWdlV2lkdGhJ
blBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgKnJlc3VsdCA9IFByaW50Q29udGV4
dDo6cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aElu
UGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAt
OTQzLDcgKzk0Myw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6Om51bWIK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgICpyZXN1
bHQgPSBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZyYW1lLCBGbG9hdFNpemUocGFn
ZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgICpyZXN1bHQgPSBQcmlu
dENvbnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZyYW1lLCBHcmFwaGljc1NpemUocGFnZVdpZHRo
SW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogICAgIHJldHVybiBTX09LOwogfQogCkBA
IC0yMDE0LDcgKzIwMTQsNyBAQCB2b2lkIFdlYkZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50
aW5nCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodGhpcyk7CiAgICAgQVNTRVJUKGNv
cmVGcmFtZSk7Ci0gICAgY29yZUZyYW1lLT5zZXRQcmludGluZyhwcmludGluZywgRmxvYXRTaXpl
KG1pblBhZ2VXaWR0aCwgbWluUGFnZUhlaWdodCksIG1heGltdW1TaHJpbmtSYXRpbywgYWRqdXN0
Vmlld1NpemUgPyBBZGp1c3RWaWV3U2l6ZSA6IERvTm90QWRqdXN0Vmlld1NpemUpOworICAgIGNv
cmVGcmFtZS0+c2V0UHJpbnRpbmcocHJpbnRpbmcsIEdyYXBoaWNzU2l6ZShtaW5QYWdlV2lkdGgs
IG1pblBhZ2VIZWlnaHQpLCBtYXhpbXVtU2hyaW5rUmF0aW8sIGFkanVzdFZpZXdTaXplID8gQWRq
dXN0Vmlld1NpemUgOiBEb05vdEFkanVzdFZpZXdTaXplKTsKIH0KIAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJGcmFtZTo6c2V0SW5QcmludGluZ01vZGUoIApAQCAtMjAzMiw3ICsyMDMy
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6c2V0SQogCiAgICAgLy8g
SWYgd2UgYXJlIGEgZnJhbWVzZXQganVzdCBwcmludCB3aXRoIHRoZSBsYXlvdXQgd2UgaGF2ZSBv
bnNjcmVlbiwgb3RoZXJ3aXNlIHJlbGF5b3V0CiAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBwYXBl
ciBzaXplCi0gICAgRmxvYXRTaXplIG1pbkxheW91dFNpemUoMC4wLCAwLjApOworICAgIEdyYXBo
aWNzU2l6ZSBtaW5MYXlvdXRTaXplKDAuMCwgMC4wKTsKICAgICBpZiAobV9pblByaW50aW5nTW9k
ZSAmJiAhY29yZUZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpIHsKICAgICAgICAgaWYg
KCFwcmludERDKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwNDYs
NyArMjA0Niw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6OnNldEkKICAg
ICAgICAgaW50IHBhcGVyVmVydGljYWxQaXhlbHNQZXJJbmNoID0gOjpHZXREZXZpY2VDYXBzKHBy
aW50REMsIExPR1BJWEVMU1kpOwogICAgICAgICBpbnQgcGFwZXJIZWlnaHQgPSBwcmludFJlY3Qu
aGVpZ2h0KCkgKiBkZXNpcmVkUGl4ZWxzUGVySW5jaCAvIHBhcGVyVmVydGljYWxQaXhlbHNQZXJJ
bmNoOwogICAgICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsKLSAgICAgICAgbWlu
TGF5b3V0U2l6ZSA9IGNvcmVGcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0
U2l6ZShwYXBlcldpZHRoLCBwYXBlckhlaWdodCksIEZsb2F0U2l6ZShwYXBlcldpZHRoICogUHJp
bnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYXBlckhlaWdodCAqIFByaW50aW5nTWluaW11bVNo
cmlua0ZhY3RvcikpOworICAgICAgICBtaW5MYXlvdXRTaXplID0gY29yZUZyYW1lLT5yZXNpemVQ
YWdlUmVjdHNLZWVwaW5nUmF0aW8oR3JhcGhpY3NTaXplKHBhcGVyV2lkdGgsIHBhcGVySGVpZ2h0
KSwgR3JhcGhpY3NTaXplKHBhcGVyV2lkdGggKiBQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3Is
IHBhcGVySGVpZ2h0ICogUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CiAgICAgfQogCiAg
ICAgc2V0UHJpbnRpbmcobV9pblByaW50aW5nTW9kZSwgbWluTGF5b3V0U2l6ZS53aWR0aCgpLCBt
aW5MYXlvdXRTaXplLmhlaWdodCgpLCBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgLyBQcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIHRydWUpOwpAQCAtMjU0MCw3ICsyNTQwLDcgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6ZnJhbQogICAgIGlmICghdmlldykKICAg
ICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIEZsb2F0UmVjdCBib3VuZHMgPSB2aWV3LT52aXNp
YmxlQ29udGVudFJlY3QodHJ1ZSk7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kcyA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdCh0cnVlKTsKICAgICByZXN1bHQtPmJvdHRvbSA9IChMT05HKSBib3Vu
ZHMuaGVpZ2h0KCk7CiAgICAgcmVzdWx0LT5yaWdodCA9IChMT05HKSBib3VuZHMud2lkdGgoKTsK
ICAgICByZXR1cm4gU19PSzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdEdyYXBoaWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViS2l0R3JhcGhpY3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBXZWJEcmF3VGV4dChXZWJU
ZXh0UmVuZGVySW5mbyogaW5mbwogICAgICAgICAvLyBTZXQgc2hhZG93IHNldHRpbmcKICAgICAg
ICAgaWYgKGluZm8tPnN0cnVjdFNpemUgPT0gc2l6ZW9mKFdlYlRleHRSZW5kZXJJbmZvKSAmJgog
ICAgICAgICAgICAgKGluZm8tPnNoYWRvd09mZnNldC5jeCB8fCBpbmZvLT5zaGFkb3dPZmZzZXQu
Y3kgfHwgaW5mby0+c2hhZG93Qmx1ciB8fCBpbmZvLT5zaGFkb3dDb2xvcikpCi0gICAgICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoaW5mby0+c2hhZG93T2Zmc2V0LmN4LCBpbmZv
LT5zaGFkb3dPZmZzZXQuY3kpLCBpbmZvLT5zaGFkb3dCbHVyLCBpbmZvLT5zaGFkb3dDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhHcmFw
aGljc1NpemUoaW5mby0+c2hhZG93T2Zmc2V0LmN4LCBpbmZvLT5zaGFkb3dPZmZzZXQuY3kpLCBp
bmZvLT5zaGFkb3dCbHVyLCBpbmZvLT5zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CiAKICAgICAgICAgV2ViQ29yZURyYXdUZXh0QXRQb2ludChjb250ZXh0LCBkcmF3U3RyaW5nLCBp
bmZvLT5wdCwgbWFrZUZvbnQoKihpbmZvLT5kZXNjcmlwdGlvbikpLCBpbmZvLT5jb2xvciwgaW5m
by0+dW5kZXJsaW5lZEluZGV4KTsKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAxMCw3ICs1MDEwLDcgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYgogewogICAgIGlmICghcmVjdCkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnQgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIEdyYXBo
aWNzUmVjdCB2aXNpYmxlQ29udGVudCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgcmVjdC0+bGVmdCA9IChMT05HKSB2aXNpYmxlQ29udGVu
dC54KCk7CiAgICAgcmVjdC0+dG9wID0gKExPTkcpIHZpc2libGVDb250ZW50LnkoKTsKICAgICBy
ZWN0LT5yaWdodCA9IChMT05HKSB2aXNpYmxlQ29udGVudC5tYXhYKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJ
KHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRmlsZUljb25Mb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIp
CiB7CiAgICAgSVdlYlVJRGVsZWdhdGUqIHVpRGVsZWdhdGUgPSAwOwogICAgIGlmIChTVUNDRUVE
RUQobV93ZWJWaWV3LT51aURlbGVnYXRlKCZ1aURlbGVnYXRlKSkpIHsKQEAgLTk1LDcgKzk1LDcg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29ucwogICAgIH0KIH0KIAot
RmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgV2Vi
Q2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKIHsKICAgICBJV2ViVUlEZWxlZ2F0ZSogdWlEZWxl
Z2F0ZSA9IDA7CiAgICAgaWYgKFNVQ0NFRURFRChtX3dlYlZpZXctPnVpRGVsZWdhdGUoJnVpRGVs
ZWdhdGUpKSkgewpAQCAtMTA4LDEwICsxMDgsMTAgQEAgRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVu
dDo6d2luZG93UmVjdCgpCiAgICAgICAgICAgICByZXR1cm4gcmVjdDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi1GbG9h
dFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21l
Q2xpZW50OjpwYWdlUmVjdCgpCiB7CiAgICAgUkVDVCByZWN0OwogICAgIG1fd2ViVmlldy0+ZnJh
bWVSZWN0KCZyZWN0KTsKQEAgLTY0OSw3ICs2NDksNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6
cG9wdWxhdGVWaXNpdGVkTGluCiAgICAgaGlzdG9yeS0+YWRkVmlzaXRlZExpbmtzVG9QYWdlR3Jv
dXAobV93ZWJWaWV3LT5wYWdlKCktPmdyb3VwKCkpOwogfQogCi1ib29sIFdlYkNocm9tZUNsaWVu
dDo6cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUsIAorYm9vbCBXZWJDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9s
U3RhdGUgc3RhdGUsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQsIGJvb2wgdmVydGljYWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZs
b2F0IHByb3BvcnRpb24sIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBwYXJ0cykKIHsKQEAgLTcx
Nyw3ICs3MTcsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiCiAg
ICAgcmV0dXJuIFNVQ0NFRURFRChocik7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWlu
dEN1c3RvbVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbENvcm5l
cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0
LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgdmlydHVh
bCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogICAgIAotICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpHcmFwaGljc1JlY3QgcGFnZVJlY3QoKTsKICAgICAKICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxl
RmFjdG9yKCk7CiAKQEAgLTEzMCwxMCArMTMwLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50Q3Vz
dG9tU2Nyb2xsYmFyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplLCAKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDdXN0b21TY3JvbGxiYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NSZWN0JiwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJh
ckNvbnRyb2xTdGF0ZSwgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2
ZXJ0aWNhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2
YWx1ZSwgZmxvYXQgcHJvcG9ydGlvbiwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNr
KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5Q
YW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsK
ICAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8V1RGOjpTdHJp
bmc+JiwgV2ViQ29yZTo6RmlsZUljb25Mb2FkZXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2
aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKICNpbmNs
dWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0VsZW1lbnQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NS
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0luc3BlY3RvckNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3dpbmNlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjYpCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbmNlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisy
MDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0
MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFu
Z2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFi
c3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlw
ZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0
IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0cy4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50V2luQ0UuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRX
aW5DRTo6d2luZG93UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjpz
ZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnBhZ2VS
ZWN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oOgorCiAy
MDExLTA3LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQXBwbGljYXRpb25DYWNoZSB1cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBmYWlsIHdo
ZW4gcmVhY2hpbmcgcGVyLW9yaWdpbiBxdW90YQpJbmRleDogU291cmNlL1dlYktpdC93aW5jZS9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5jcHAJKHJldmlz
aW9uIDkxMDExKQorKysgU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDIyICs1MCwyMiBAQCB2b2lkIENo
cm9tZUNsaWVudFdpbkNFOjpjaHJvbWVEZXN0cm95ZWQoCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAK
LUZsb2F0UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3Qg
Q2hyb21lQ2xpZW50V2luQ0U6OndpbmRvd1JlY3QoKQogewogICAgIGlmICghbV93ZWJWaWV3KQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
KTsKIAogICAgIFJFQ1QgcmVjdDsKICAgICBtX3dlYlZpZXctPmZyYW1lUmVjdCgmcmVjdCk7CiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFdpbmRvd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgQ2hyb21lQ2xpZW50V2luQ0U6OnNldFdpbmRvd1Jl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1G
bG9hdFJlY3QgQ2hyb21lQ2xpZW50V2luQ0U6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJv
bWVDbGllbnRXaW5DRTo6cGFnZVJlY3QoKQogewogICAgIHJldHVybiB3aW5kb3dSZWN0KCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW5jZS9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRXaW5DRS5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvd2lu
Y2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMTAgKzM4LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVk
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKTsKIAotICAgIHZpcnR1
YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QgcGFnZVJlY3QoKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3Io
KTsKIApJbmRleDogU291cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDI2KQorKysgU291cmNlL1dlYktp
dC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMS0wNy0x
NCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVuYW1l
IEZsb2F0UmVjdC9Qb2ludC9TaXplIGFuZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcgdGhl
IEZsb2F0KiBncmFwaGljcyBjbGFzc2VzIHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFjdGlv
biB3aGljaCBjdXJyZW50bHkgY2hhbmdlcyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJvbSBG
bG9hdCB0byBDR0Zsb2F0IG9uIENHIHBsYXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNzIHVz
ZSA2NGJpdCBmbG9hdHMgZm9yIHRoZXNlIG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAg
ICAgKHd4V2ViRnJhbWVQcmludG91dDo6SW5pdGlhbGl6ZVdpdGhQYWdlU2l6ZSk6CisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRXeDo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRXeDo6d2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6
cGFnZVJlY3QpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaDoKKwog
MjAxMS0wNy0xMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIEFwcGxpY2F0aW9uQ2FjaGUgdXBkYXRlIHNob3VsZCBub3QgaW1tZWRpYXRlbHkgZmFpbCB3
aGVuIHJlYWNoaW5nIHBlci1vcmlnaW4gcXVvdGEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd3gvV2Vi
RnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gvV2ViRnJhbWUuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvd3gvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFd4LmgiCkBA
IC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAgICAgICBtX3ByaW50Q29udGV4dC5iZWdpbiht
X3BhZ2VXaWR0aCk7CiAgICAgICAgIAogICAgICAgICBmbG9hdCBwYWdlSGVpZ2h0ID0gcGFnZVJl
Y3QuaGVpZ2h0OwotICAgICAgICBtX3ByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzKFdlYkNv
cmU6OkZsb2F0UmVjdChwYWdlUmVjdCksIC8qIGhlYWRlckhlaWdodCAqLyAwLCAvKiBmb290ZXJI
ZWlnaHQgKi8gMCwgLyogdXNlclNjYWxlRmFjdG9yICovIDEuMCwgcGFnZUhlaWdodCk7CisgICAg
ICAgIG1fcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMoV2ViQ29yZTo6R3JhcGhpY3NSZWN0
KHBhZ2VSZWN0KSwgLyogaGVhZGVySGVpZ2h0ICovIDAsIC8qIGZvb3RlckhlaWdodCAqLyAwLCAv
KiB1c2VyU2NhbGVGYWN0b3IgKi8gMS4wLCBwYWdlSGVpZ2h0KTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBPbkJlZ2luUHJpbnRpbmcoKQpJbmRleDogU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0Nocm9tZUNsaWVudFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3d4L1dl
YktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJj
ZS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiRmlsZUljb25Mb2FkZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJJY29uLmgiCkBAIC05MCwyMSArOTAsMjEgQEAgdm9p
ZCBDaHJvbWVDbGllbnRXeDo6Y2hyb21lRGVzdHJveWVkKCkKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIENocm9tZUNsaWVudFd4OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpCit2b2lkIENocm9tZUNsaWVudFd4OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IENocm9tZUNsaWVu
dFd4Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRXeDo6d2luZG93UmVj
dCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50V3g6
OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRXeDo6cGFnZVJlY3QoKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVy
biBHcmFwaGljc1JlY3QoKTsKIH0KIAogZmxvYXQgQ2hyb21lQ2xpZW50V3g6OnNjYWxlRmFjdG9y
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGll
bnRXeC5oCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9y
dC9DaHJvbWVDbGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCArNDMsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3aW5k
b3dSZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAgdmly
dHVhbCBGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdl
UmVjdCgpOwogCiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100866</attachid>
            <date>2011-07-14 14:42:20 -0700</date>
            <delta_ts>2011-07-14 16:37:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64413-20110714144219.patch</filename>
            <type>text/plain</type>
            <size>1891071</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3Qv
UG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3Jh
cGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3Vy
cmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dG
bG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxv
YXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1
bmN0aW9uYWxpdHkuCisKIDIwMTEtMDctMTQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IFNob3VsZCBub3QgZGlzcGF0Y2ggZGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0IGZvciB0aGUgaW5pdGlhbCBlbXB0eSBkb2N1bWVudApJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsMTEgKzEwNTYsNiBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
dGV4dFNoYWRvdy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFF1YWQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGF0YS5jcHAKQEAgLTEwNzMsNiArMTA2OCwxMSBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
UmVjdC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDc1LDE2ICsyNDc1
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEJhc2VsaW5lLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIFwKQEAgLTI1MjEsNiArMjUxMSwxNiBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1BvaW50M0QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1BvaW50M0QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQ
b2ludC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9p
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlczNELmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBfX1pOM1dURjZTdHJpbmdDMUVQOE5TU3RyaW5n
CiBfX1pOM1dURjZTdHJpbmdDMUVQSzEwX19DRlN0cmluZwogX19aTjdXZWJDb3JlMTBDcmVkZW50
aWFsQzFFUktOM1dURjZTdHJpbmdFUzRfTlNfMjFDcmVkZW50aWFsUGVyc2lzdGVuY2VFCiBfX1pO
N1dlYkNvcmUxMENyZWRlbnRpYWxDMUV2Ci1fX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05T
XzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEMxRVJLTlNfOEludFBvaW50
RQogX19aTjdXZWJDb3JlMTBKU0RvY3VtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEw
SWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk43V2Vi
Q29yZTEwSlNEb2N1bWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnQ2Y3JlYXRl
RVJLTjNXVEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVS
S05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RWlOUzVfSU5TXzROb2RlRUVFCkBAIC0yMjAsOSArMjIw
LDkgQEAgX19aTjdXZWJDb3JlMTFtZW1vcnlDYWNoZUV2CiBfX1pON1dlYkNvcmUxMXN0YXJ0T2ZX
b3JkRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfOUVXb3JkU2lkZUUKIF9fWk43V2ViQ29yZTEx
dG9Vc2VyU3BhY2VFUks3X05TUmVjdFA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTExd3JpdGVUb0Zp
bGVFaVBLY2kKLV9fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbVNjcm9sbGJh
ckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RU5TXzIwU2Nyb2xsYmFyQ29u
dHJvbFNpemVFak5TXzEzU2Nyb2xsYmFyUGFydEViZmZqCitfX1pON1dlYkNvcmUxMkNocm9tZUNs
aWVudDIwcGFpbnRDdXN0b21TY3JvbGxiYXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJH
cmFwaGljc1JlY3RFTlNfMjBTY3JvbGxiYXJDb250cm9sU2l6ZUVqTlNfMTNTY3JvbGxiYXJQYXJ0
RWJmZmoKIF9fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjNwYWludEN1c3RvbU92ZXJoYW5nQXJl
YUVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEVTNV9TNV8KLV9fWk43V2ViQ29y
ZTEyQ2hyb21lQ2xpZW50MjNwYWludEN1c3RvbVNjcm9sbENvcm5lckVQTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTJDaHJvbWVDbGllbnQyM3BhaW50
Q3VzdG9tU2Nyb2xsQ29ybmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NS
ZWN0RQogX19aTjdXZWJDb3JlMTJFZGl0aW5nU3R5bGVEMUV2CiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjEwbW91c2VNb3ZlZEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MTBtb3VzZU1vdmVkRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCkBAIC0yNjUsMTQgKzI2NSwx
NCBAQCBfX1pON1dlYkNvcmUxMkljb25EYXRhYmFzZUMxRXYKIF9fWk43V2ViQ29yZTEySlNET01X
cmFwcGVyMzR2aXJ0dWFsRnVuY3Rpb25Ub1ByZXZlbnRXZWFrVnRhYmxlRXYKIF9fWk43V2ViQ29y
ZTEyUG9wdXBNZW51TWFjQzFFUE5TXzE1UG9wdXBNZW51Q2xpZW50RQogX19aTjdXZWJDb3JlMTJQ
cmludENvbnRleHQxMnBhZ2VQcm9wZXJ0eUVQTlNfNUZyYW1lRVBLY2kKLV9fWk43V2ViQ29yZTEy
UHJpbnRDb250ZXh0MTNudW1iZXJPZlBhZ2VzRVBOU181RnJhbWVFUktOU185RmxvYXRTaXplRQot
X19aTjdXZWJDb3JlMTJQcmludENvbnRleHQxNmNvbXB1dGVQYWdlUmVjdHNFUktOU185RmxvYXRS
ZWN0RWZmZlJmYgorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQxM251bWJlck9mUGFnZXNFUE5T
XzVGcmFtZUVSS05TXzEyR3JhcGhpY3NTaXplRQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQx
NmNvbXB1dGVQYWdlUmVjdHNFUktOU18xMkdyYXBoaWNzUmVjdEVmZmZSZmIKIF9fWk43V2ViQ29y
ZTEyUHJpbnRDb250ZXh0MTZpc1BhZ2VCb3hWaXNpYmxlRVBOU181RnJhbWVFaQotX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1iZXJGb3JFbGVtZW50RVBOU183RWxlbWVudEVSS05T
XzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDIwcGFnZU51bWJlckZvckVs
ZW1lbnRFUE5TXzdFbGVtZW50RVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmUxMlBy
aW50Q29udGV4dDI2cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHNFUE5TXzVGcmFtZUVpaWlpaWlp
Ci1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9y
RVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjdzcG9vbEFsbFBh
Z2VzV2l0aEJvdW5kYXJpZXNFUE5TXzVGcmFtZUVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185
RmxvYXRTaXplRQotX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyOGNvbXB1dGVQYWdlUmVjdHNX
aXRoUGFnZVNpemVFUktOU185RmxvYXRTaXplRWIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0
Mjdjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3JFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43
V2ViQ29yZTEyUHJpbnRDb250ZXh0MjdzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXNFUE5TXzVG
cmFtZUVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplRVJLTlNfMTJH
cmFwaGljc1NpemVFYgogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQzZW5kRXYKIF9fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0NWJlZ2luRWZmCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlz
cG9vbFBhZ2VFUk5TXzE1R3JhcGhpY3NDb250ZXh0RWlmCkBAIC0zMjUsNyArMzI1LDcgQEAgX19a
TjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDlfX0NGRXJybwogX19aTjdXZWJDb3JlMTNUeXBp
bmdDb21tYW5kMzlpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRFUE5TXzhE
b2N1bWVudEUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0b3J5
TmFtZUVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlG
bG9hdFJlY3RFUDhOU1dpbmRvdworX19aTjdXZWJDb3JlMTN0b0RldmljZVNwYWNlRVJLTlNfMTJH
cmFwaGljc1JlY3RFUDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18y
MUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pT
QzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBO
U18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpAQCAtNDA5LDE2ICs0MDksMTYgQEAgX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQyMXNldENvbXBvcwogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQyMmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJFZgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQ0Y2xpcEVSS05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xp
cEVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05T
XzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRzYXZlRXYKLV9fWk43
V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NXNjYWxlRVJLTlNfOUZsb2F0U2l6ZUUKK19fWk43V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0NXNjYWxlRVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDdyZXN0b3JlRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0OGZpbGxQYXRoRVJLTlNfNFBhdGhFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUK
K19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGljc1Jl
Y3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhp
Y3NSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0OWNsZWFyUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNf
OEludFBvaW50RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDlzZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9y
U3BhY2VFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU18xMkdy
YXBoaWNzU2l6ZUVmUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ5dHJhbnNsYXRlRWZmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dEMxRVA5Q0dDb250ZXh0CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEQxRXYKQEAgLTQ4
OSw3ICs0ODksNyBAQCBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kCiBf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCiBfX1pON1dlYkNvcmUx
NmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLN19O
U1JlY3QKLV9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCitf
X1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43
V2ViQ29yZTE2aXNFbmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRp
dGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3JlMTZzdGFydE9mUGFyYWdyYXBo
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVF
CiBfX1pON1dlYkNvcmUxN0NyZWRlbnRpYWxTdG9yYWdlMjRnZXRGcm9tUGVyc2lzdGVudFN0b3Jh
Z2VFUktOU18xNVByb3RlY3Rpb25TcGFjZUUKQEAgLTcxNiw3ICs3MTYsNyBAQCBfX1pON1dlYkNv
cmU0UGFnZTlnb0ZvcndhcmRFdgogX19aTjdXZWJDb3JlNFBhZ2U5aW5pdEdyb3VwRXYKIF9fWk43
V2ViQ29yZTRQYWdlQzFFUk5TMF8xMVBhZ2VDbGllbnRzRQogX19aTjdXZWJDb3JlNFBhZ2VEMUV2
Ci1fX1pON1dlYkNvcmU0UGF0aDE0YWRkUm91bmRlZFJlY3RFUktOU185RmxvYXRSZWN0RVJLTlNf
OUZsb2F0U2l6ZUUKK19fWk43V2ViQ29yZTRQYXRoMTRhZGRSb3VuZGVkUmVjdEVSS05TXzEyR3Jh
cGhpY3NSZWN0RVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmU0UGF0aEMxRXYKIF9f
Wk43V2ViQ29yZTRQYXRoRDFFdgogX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0aW9u
U3BhY2UKQEAgLTczNCw3ICs3MzQsNyBAQCBfX1pON1dlYkNvcmU1RnJhbWUxN3NldFRleHRab29t
RmFjdG9yRWYKIF9fWk43V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnRFUktO
U184SW50UG9pbnRFCiBfX1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdhaW5zdEVsZW1l
bnRFUDdOU0FycmF5UE5TXzdFbGVtZW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVzZXRQYWdlQW5k
VGV4dFpvb21GYWN0b3JzRWZmCi1fX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tl
ZXBpbmdSYXRpb0VSS05TXzlGbG9hdFNpemVFUzNfCitfX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6
ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05TXzEyR3JhcGhpY3NTaXplRVMzXwogX19aTjdXZWJD
b3JlNUZyYW1lMjhzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50RVA3TlNBcnJheVBOU183RWxl
bWVudEVQbVBiCiBfX1pON1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFIVE1M
RnJhbWVPd25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCiBfX1pON1dlYkNvcmU1
RnJhbWU3c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVFCkBAIC04MjQs
NyArODI0LDcgQEAgX19aTjdXZWJDb3JlN0VsZW1lbnQxNnJlbW92ZVNoYWRvd1Jvb3RFdgogX19a
TjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgogX19aTjdXZWJDb3JlN0ludFJlY3Q1dW5pdGVFUktT
MF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0OWludGVyc2VjdEVSS1MwXwotX19aTjdXZWJDb3JlN0lu
dFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmU3SW50UmVjdEMxRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU3SW50U2l6ZUMxRVJLN19OU1NpemUKIF9fWk43V2Vi
Q29yZTdUZXh0UnVuMTlhbGxvd3NSb3VuZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVu
MjFzX2FsbG93c1JvdW5kaW5nSGFja3NFCkBAIC04NTAsNyArODUwLDcgQEAgX19aTjdXZWJDb3Jl
OERvY3VtZW50NGhlYWRFdgogX19aTjdXZWJDb3JlOEZvcm1EYXRhNmNyZWF0ZUVQS3ZtCiBfX1pO
N1dlYkNvcmU4Rm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmU4R3JhZGllbnQxMmFkZENvbG9yU3Rv
cEVmUktOU181Q29sb3JFCi1fX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2lu
dEVTM18KK19fWk43V2ViQ29yZThHcmFkaWVudEMxRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzXwog
X19aTjdXZWJDb3JlOEludFBvaW50QzFFUks4X05TUG9pbnQKIF9fWk43V2ViQ29yZThQb3NpdGlv
bkMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaU5TMF8xMEFuY2hvclR5cGVFCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKQEAgLTkyOSw5ICs5MjksOSBAQCBf
X1pON1dlYkNvcmU4b3BlbkZpbGVFUktOM1dURjZTdHJpbmdFTlNfCiBfX1pON1dlYkNvcmU4dG9T
dHJpbmdFUktOM1dURjZWZWN0b3JJTlNfMTFQcm94eVNlcnZlckVMbTBFRUUKIF9fWk43V2ViQ29y
ZTlET01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNv
cmU5RE9NV2luZG93MzZkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHNFdgotX19a
TjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLN19OU1JlY3QKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RD
MUVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVF
CitfX1pON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEMxRVJLN19OU1JlY3QKK19fWk43V2ViQ29yZTEy
R3JhcGhpY3NSZWN0QzFFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NTaXpl
QzFFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRF
dgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCkBAIC05NTMsNyArOTUz
LDcgQEAgX19aTjdXZWJDb3JlOUZyYW1lVmlldzIwZW50ZXJDb21wb3NpdGluZwogX19aTjdXZWJD
b3JlOUZyYW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcGFpbnRzRXYKIF9fWk43V2ViQ29yZTlGcmFt
ZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW5kQ29sb3JFUktOU181Q29sb3JFCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjN1cGRhdGVDYW5IYXZlU2Nyb2xsYmFyc0V2Ci1fX1pON1dlYkNvcmU5RnJhbWVW
aWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU185RmxvYXRTaXplRWZOU18xOUFkanVz
dFZpZXdTaXplT3JOb3RFCitfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjRmb3JjZUxheW91dEZvclBh
Z2luYXRpb25FUktOU18xMkdyYXBoaWNzU2l6ZUVmTlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzI2YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWRFUGZmZmYK
IF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyOXNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuRWIK
IF9fWk43V2ViQ29yZTlGcmFtZVZpZXczN3VwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1
cnNpdmVFdgpAQCAtMTAzNyw3ICsxMDM3LDcgQEAgX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDEx
cGVyc2lzdGVuY2VFdgogX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDR1c2VyRXYKIF9fWk5LN1dl
YkNvcmUxMENyZWRlbnRpYWw3aXNFbXB0eUV2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsOHBh
c3N3b3JkRXYKLV9fWk5LN1dlYkNvcmUxMEZsb2F0UG9pbnRjdjhfTlNQb2ludEV2CitfX1pOSzdX
ZWJDb3JlMTNHcmFwaGljc1BvaW50Y3Y4X05TUG9pbnRFdgogX19aTks3V2ViQ29yZTEwUGx1Z2lu
RGF0YTE2c3VwcG9ydHNNaW1lVHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmUxMFJl
bmRlclRleHQxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDlm
aXJzdFJ1blhFdgpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgX19aTks3V2ViQ29yZTEySWNvbkRhdGFi
YXNlMTJkYXRhYmFzZVBhdAogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9w
VGhyZWFkQWN0aXZpdHlFdgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2
CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKLV9fWk5LN1dl
YkNvcmUxMlJlbmRlck9iamVjdDE1bG9jYWxUb0Fic29sdXRlRVJLTlNfMTBGbG9hdFBvaW50RWJi
CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEzR3Jh
cGhpY3NQb2ludEViYgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0NHZpZXdFdgogX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0N2NoaWxkQXRFagogX19aTks3V2ViQ29yZTEyUmVuZGVyV2lk
Z2V0MTR3aW5kb3dDbGlwUmVjdEV2CkBAIC0xMTM4LDcgKzExMzgsNyBAQCBfX1pOSzdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjExY3VycmVudEZvCiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlv
bjE1Y29weVR5cGluZ1N0eWxlRXYKIF9fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTdpc0lu
UGFzc3dvcmRGaWVsZEV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE4aXNGb2N1c2Vk
QW5kQWN0aXZlRXYKLV9fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMzFnZXRDbGlwcGVkVmlz
aWJsZVRleHRSZWN0YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUUKK19f
Wk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMzFnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5n
bGVzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1JlY3RFTG0wRUVFCiBfX1pOSzdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjZib3VuZHNFYgogX19aTks3V2ViQ29yZTE0UmVuZGVyTGlzdEl0ZW0x
MG1hcmtlclRleHRFdgogX19aTks3V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMGNvbm5lY3Rpb25F
dgpAQCAtMTIwOSw3ICsxMjA5LDcgQEAgX19aTks3V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFs
bGVuZ2VCYQogX19aTks3V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlNWVycm9y
RXYKIF9fWk5LN1dlYkNvcmUyN0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZTZpc051bGxFdgog
X19aTks3V2ViQ29yZTRGb250NXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtO
U18xNFNpbXBsZUZvbnREYXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhf
RUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCi1fX1pOSzdXZWJDb3JlNEZvbnQ4ZHJhd1RleHRFUE5T
XzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWkKK19f
Wk5LN1dlYkNvcmU0Rm9udDhkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4
dFJ1bkVSS05TXzEzR3JhcGhpY3NQb2ludEVpaQogX19aTks3V2ViQ29yZTRLVVJMMTBwcm90b2Nv
bElzRVBLYwogX19aTks3V2ViQ29yZTRLVVJMMTFjcmVhdGVDRlVSTEV2CiBfX1pOSzdXZWJDb3Jl
NEtVUkwxMWlzTG9jYWxGaWxlRXYKQEAgLTEyNDUsNyArMTI0NSw3IEBAIF9fWk5LN1dlYkNvcmU1
UmFuZ2UyMWNvbXBhcmVCb3VuZGFyeVBvaW4KIF9fWk5LN1dlYkNvcmU1UmFuZ2U0dGV4dEV2CiBf
X1pOSzdXZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVSaQogX19aTks3V2ViQ29yZTVSYW5nZTlmaXJz
dE5vZGVFdgotX19aTks3V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU185
RmxvYXRRdWFkRUxtMEVFRWIKK19fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZW
ZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFYgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNy
ZWF0ZVdpbmRvd0VQTlNfNUZyYW1lRVJLTlNfMTZGcmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5k
b3dGZWF0dXJlc0VSS05TXzE2TmF2aWdhdGlvbkFjdGlvbkUKIF9fWk5LN1dlYkNvcmU2Q3Vyc29y
MTRwbGF0Zm9ybUN1cnNvckV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0RXYK
QEAgLTEzMTEsOCArMTMxMSw4IEBAIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0
ZXNwYWMKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9u
RU5TXzlFQWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUVOU18yN0Vk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU5RE9NV2luZG93MjdwZW5k
aW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgotX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMWJvdW5k
aW5nQm94RXYKLV9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0Y3Y3X05TUmVjdEV2CitfX1pOSzdXZWJD
b3JlMTJHcmFwaGljc1F1YWQxMWJvdW5kaW5nQm94RXYKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNz
UmVjdGN2N19OU1JlY3RFdgogX19aTks3V2ViQ29yZTlGcmFtZVRyZWUxMnRyYXZlcnNlTmV4dEVQ
S05TXzVGcmFtZUUKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMTRpc0Rlc2NlbmRhbnRPZkVQS05T
XzVGcmFtZUUKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMjB0cmF2ZXJzZU5leHRXaXRoV3JhcEVi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODEwLDExICs4MTAsNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU3BhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
RGFzaEFycmF5LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udEJhc2VsaW5lLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oJywKQEAgLTgzOCw2ICs4MzMs
MTEgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NRdWFkLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzUmVjdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1Np
emUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCcsCkBAIC0zOTQ1
LDExICszOTQ1LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hh
ZG93LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5jcHAnLApAQCAtMzk2NSw2ICszOTYwLDExIEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1JlY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1NpemUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCcsCkBAIC00
MDMyLDcgKzQwMzIsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvVXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0RyYXdFcnJvclVuZGVybGluZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzUmVjdENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCcsCkBAIC00MDQ5LDE0ICs0MDQ5
LDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25N
YXRyaXhDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9y
Q0cuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cu
Y3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
UG9pbnRDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
UmVjdENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NT
aXplQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cCcsCkBAIC00Mjk2LDggKzQyOTYsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbnRQb2ludEd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JbnRSZWN0R3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Q29sb3JIYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zs
b2F0UG9pbnRIYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0Zsb2F0UmVjdEhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udENhY2hlSGFpa3UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKQEAgLTQzMDYsNiArNDMw
NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJl
ZU5vZGVIYWlrdS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YWRpZW50SGFpa3UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dyYXBoaWNzUG9pbnRIYWlrdS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzUmVjdEhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhSGFpa3UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAnLApAQCAtNDMyMiw5ICs0
MzIyLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwJywKQEAgLTQzMzMsNiArNDMz
MCw5IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVO
b2RlTWFjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0TWFjLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NQb2ludE1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzUmVjdE1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzU2l6ZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ljb25NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1t
JywKQEAgLTQzODUsOCArNDM4NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvQ29udGV4dFNoYWRvd1F0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRXh0ZW5zaW9uczNEUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9x
dC9FeHRlbnNpb25zM0RRdC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
bG9hdFBvaW50UXQuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9h
dFJlY3RRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNo
ZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhUXQuY3BwJywKQEAgLTQzOTksNiArNDM5Nyw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9JY29uUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGFRdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcCcsCkBAIC00NDIxLDggKzQ0MjEsNiBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXll
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxv
YXRQb2ludFNraWEuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zs
b2F0UmVjdFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAnLApAQCAtNDQzMSw2ICs0NDI5LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NQb2ludFNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzUmVjdFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbnRQb2ludFNraWEuY3BwJywKQEAgLTQ1NjEsNyArNDU2MSw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvQ29sb3JXeC5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVjdFd4LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywK
QEAgLTQ1NzIsNiArNDU3MSw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
R2x5cGhNYXBXeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRp
ZW50V3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0Nv
bnRleHRXeC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
UmVjdFd4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSWNvbld4LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJEYXRhV3gu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAn
LApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTE4NywxMCArMTg3LDEwIEBAIF9f
Wk5LN1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhMTFpc1NlZ21lbnQKIF9fWk43V2ViQ29yZTlHbHlw
aFBhZ2U0ZmlsbEVqalB0alBLTlNfMTRTaW1wbGVGb250RGF0YUUKIF9fWk5LN1dlYkNvcmUxNFNp
bXBsZUZvbnREYXRhMjJwbGF0Zm9ybUJvdW5kc0ZvckdseXBoRXQKIF9fWk5LN1dlYkNvcmUxNkZv
bnRQbGF0Zm9ybURhdGE2Y3RGb250RXYKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzZDR1Jl
Y3QKLV9fWk43V2ViQ29yZTEwRmxvYXRQb2ludEMxRVJLN0NHUG9pbnQKLV9fWk43V2ViQ29yZTlG
bG9hdFNpemVDMUVSSzZDR1NpemUKLV9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0Y3Y2Q0dSZWN0RXYK
K19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0QzFFUks2Q0dSZWN0CitfX1pON1dlYkNvcmUxM0dy
YXBoaWNzUG9pbnRDMUVSSzdDR1BvaW50CitfX1pON1dlYkNvcmUxMkdyYXBoaWNzU2l6ZUMxRVJL
NkNHU2l6ZQorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NSZWN0Y3Y2Q0dSZWN0RXYKIF9fWk43V2Vi
Q29yZTE0U2ltcGxlRm9udERhdGExN3BsYXRmb3JtR2x5cGhJbml0RXYKIF9fWk43V2ViQ29yZTE1
R2x5cGhNZXRyaWNzTWFwSWZFMThsb2NhdGVQYWdlU2xvd0Nhc2VFagogX19aTks3V2ViQ29yZTE0
U2ltcGxlRm9udERhdGEyMXBsYXRmb3JtV2lkdGhGb3JHbHlwaEV0CkBAIC0zMjAsMTYgKzMyMCwx
NiBAQCBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuCiBfX1pON1dlYkNv
cmU4bWFrZVJHQkFFaWlpaQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxD
b2xvckVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDIwc2V0UGxhdGZvcm1GaWxsQ29sb3JFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNl
RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05T
XzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQxNGRyYXdT
aW1wbGVUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWlpCitfX1pOSzdXZWJDb3JlNEZvbnQ4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWkKK19fWk5LN1dlYkNvcmU0
Rm9udDE0ZHJhd1NpbXBsZVRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5F
UktOU18xM0dyYXBoaWNzUG9pbnRFaWkKIF9fWk5LN1dlYkNvcmU0Rm9udDMzZ2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JTaW1wbGVUZXh0RVJLTlNfN1RleHRSdW5FaWlSTlNfMTFHbHlwaEJ1ZmZlckVO
UzBfMjBGb3JUZXh0RW1waGFzaXNPck5vdEUKLV9fWk43V2ViQ29yZTExR2x5cGhCdWZmZXIzYWRk
RXRQS05TXzE0U2ltcGxlRm9udERhdGFFZlBLTlNfOUZsb2F0U2l6ZUUKLV9fWk5LN1dlYkNvcmU0
Rm9udDE1ZHJhd0dseXBoQnVmZmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzExR2x5cGhC
dWZmZXJFUktOU18xMEZsb2F0UG9pbnRFCi1fX1pOSzdXZWJDb3JlNEZvbnQxMGRyYXdHbHlwaHNF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVBLTlNfMTRTaW1wbGVGb250RGF0YUVSS05TXzExR2x5cGhC
dWZmZXJFaWlSS05TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTExR2x5cGhCdWZmZXIzYWRk
RXRQS05TXzE0U2ltcGxlRm9udERhdGFFZlBLTlNfMTJHcmFwaGljc1NpemVFCitfX1pOSzdXZWJD
b3JlNEZvbnQxNWRyYXdHbHlwaEJ1ZmZlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMUds
eXBoQnVmZmVyRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTks3V2ViQ29yZTRGb250MTBkcmF3
R2x5cGhzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVQS05TXzE0U2ltcGxlRm9udERhdGFFUktOU18x
MUdseXBoQnVmZmVyRWlpUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmU0Rm9udDE4
c2hvdWxkVXNlU21vb3RoaW5nRXYKLV9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlnZXRT
aGFkb3dFUk5TXzlGbG9hdFNpemVFUmZSTlNfNUNvbG9yRVJOU18xMENvbG9yU3BhY2VFCitfX1pO
SzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Z2V0U2hhZG93RVJOU18xMkdyYXBoaWNzU2l6ZUVS
ZlJOU181Q29sb3JFUk5TXzEwQ29sb3JTcGFjZUUKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1dGV4dERyYXdpbmdNb2RlRXYKLV9fWk43V2ViQ29yZUwyMnNob3dHbHlwaHNXaXRoQWR2
YW5jZXNFUktOU18xMEZsb2F0UG9pbnRFUEtOU18xNFNpbXBsZUZvbnREYXRhRVA5Q0dDb250ZXh0
UEt0UEs2Q0dTaXplbQorX19aTjdXZWJDb3JlTDIyc2hvd0dseXBoc1dpdGhBZHZhbmNlc0VSS05T
XzEzR3JhcGhpY3NQb2ludEVQS05TXzE0U2ltcGxlRm9udERhdGFFUDlDR0NvbnRleHRQS3RQSzZD
R1NpemVtCiBfX1pOM1dURjZWZWN0b3JJUGNMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTks3
V2ViQ29yZTExSW1hZ2VTb3VyY2UxNmZyYW1lU2l6ZUF0SW5kZXhFbQogX19aTjdXZWJDb3JlMTVS
ZXNvdXJjZVJlcXVlc3QyM2RvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0RXYKQEAgLTE1NjQsMTAgKzE1
NjQsMTAgQEAgX19aTjdXZWJDb3JlMjZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZQogX19aTks3
V2ViQ29yZTEwU2Nyb2xsVmlldzE4dmlzaWJsZUNvbnRlbnRSZWN0RWIKIF9fWk5LN1dlYkNvcmUx
MFNjcm9sbFZpZXcyNnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0RWIKIF9fWk43V2ViQ29yZTdJ
bnRSZWN0OWludGVyc2VjdEVSS1MwXwotX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfN0lu
dFJlY3RFCi1fX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKLV9fWk43
V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJbnRTaXplRQotX19aTjdXZWJDb3JlMTZlbmNsb3Np
bmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0QzFF
UktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEMxRVJLTlNfOEludFBv
aW50RQorX19aTjdXZWJDb3JlMTJHcmFwaGljc1NpemVDMUVSS05TXzdJbnRTaXplRQorX19aTjdX
ZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNv
cmUxMFJlbmRlclZpZXc0MXJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJz
RVJLTlNfN0ludFJlY3RFYgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyN2NhcHNMb2NrU3Rh
dGVNYXlIYXZlQ2hhbmdlZEV2CiBfX1pOSzdXZWJDb3JlOERvY3VtZW50MzJ1c2VTZWN1cmVLZXli
b2FyZEVudHJ5V2hlbkFjdGl2ZUV2CkBAIC0xODY2LDcgKzE4NjYsNyBAQCBfX1pOSzdXZWJDb3Jl
OVJlbmRlckJveDIzb3V0bGluZUJvdW5kc0ZvCiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDE3Ym9y
ZGVyQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjlhZGp1c3RSZWN0
Rm9yT3V0bGluZUFuZFNoYWRvd0VSTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJC
bG9jazIyb3V0bGluZVN0eWxlRm9yUmVwYWludEV2Ci1fX1pOSzdXZWJDb3JlOUZsb2F0UXVhZDEx
Ym91bmRpbmdCb3hFdgorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NRdWFkMTFib3VuZGluZ0JveEV2
CiBfX1pON1dlYkNvcmU5UmVuZGVyQm94MjFjb21wdXRlUmVjdEZvclJlcGFpbnRFUE5TXzIwUmVu
ZGVyQm94TW9kZWxPYmplY3RFUk5TXzdJbnRSZWN0RWIKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckJs
b2NrMTFpc0Jsb2NrRmxvd0V2CiBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcyM3JlcGFpbnRDb250
ZW50UmVjdGFuZ2xlRVJLTlNfN0ludFJlY3RFYgpAQCAtMTk1MCw3ICsxOTUwLDcgQEAgX19aTks3
V2ViQ29yZTlGcmFtZVZpZXcxOWJhc2VCYWNrZ3JvdW5kQwogX19aTks3V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MThjb21wb3NpdGVPcGVyYXRpb25FdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQyMXNldENvbXBvc2l0ZU9wZXJhdGlvbkVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQogX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyOXNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhm
aWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQorX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEVS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3Qx
OG1heGltYWxPdXRsaW5lU2l6ZUVOU18xMFBhaW50UGhhc2VFCiBfX1pOSzdXZWJDb3JlN0ludFJl
Y3QxMGludGVyc2VjdHNFUktTMF8KIF9fWk5LN1dlYkNvcmUxN1JlbmRlckxpbmVCb3hMaXN0NXBh
aW50RVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RVJOU185UGFpbnRJbmZvRWlpCkBAIC0xOTcw
LDEzICsxOTcwLDEzIEBAIF9fWk5LN1dlYkNvcmUxM0lubGluZVRleHRCb3gxOWxvZ2ljYWxPdmUK
IF9fWk5LN1dlYkNvcmU5SW5saW5lQm94MTZsb2dpY2FsRnJhbWVSZWN0RXYKIF9fWk43V2ViQ29y
ZTEzSW5saW5lVGV4dEJveDE0c2VsZWN0aW9uU3RhdGVFdgogX19aTjdXZWJDb3JlOUlubGluZUJv
eDI1bG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZ0V2Ci1fX1pON1dlYkNvcmUxM0lubGluZVRleHRC
b3gyMHBhaW50RG9jdW1lbnRNYXJrZXJzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxv
YXRQb2ludEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RWIKK19fWk43V2ViQ29yZTEzSW5s
aW5lVGV4dEJveDIwcGFpbnREb2N1bWVudE1hcmtlcnNFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfMTNHcmFwaGljc1BvaW50RVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFYgogX19aTjdX
ZWJDb3JlMjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIxNG1hcmtlcnNGb3JOb2RlRVBOU180Tm9k
ZUUKIF9fWk5LM1dURjdIYXNoTWFwSU5TXzZSZWZQdHJJTjdXZWJDb3JlNE5vZGVFRUVQTlNfNlZl
Y3RvcklOUzJfMjJSZW5kZXJlZERvY3VtZW50TWFya2VyRUxtMEVFRU5TXzdQdHJIYXNoSVM0X0VF
TlNfMTBIYXNoVHJhaXRzSVM0X0VFTlNCX0lTOF9FRUUzZ2V0RVBTM18KIF9fWk5LN1dlYkNvcmUx
M0lubGluZVRleHRCb3gyM2dldEVtcGhhc2lzTWFya1Bvc2l0aW9uRVBOU18xMVJlbmRlclN0eWxl
RVJOU18yMFRleHRFbXBoYXNpc1Bvc2l0aW9uRQogX19aTjdXZWJDb3JlMjF1cGRhdGVHcmFwaGlj
c0NvbnRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfNUNvbG9yRVM0X2ZOU18xMENvbG9y
U3BhY2VFCi1fX1pON1dlYkNvcmVMMjBwYWludFRleHRXaXRoU2hhZG93c0VQTlNfMTVHcmFwaGlj
c0NvbnRleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0Vp
aWlpUktOU18xMEZsb2F0UG9pbnRFUktOU185RmxvYXRSZWN0RVBLTlNfMTBTaGFkb3dEYXRhRWJi
Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhkcmF3VGV4dEVSS05TXzRGb250RVJLTlNf
N1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWkKK19fWk43V2ViQ29yZUwyMHBhaW50VGV4dFdp
dGhTaGFkb3dzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5F
UktOM1dURjEyQXRvbWljU3RyaW5nRWlpaWlSS05TXzEzR3JhcGhpY3NQb2ludEVSS05TXzEyR3Jh
cGhpY3NSZWN0RVBLTlNfMTBTaGFkb3dEYXRhRWJiCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDhkcmF3VGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9p
bnRFaWkKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MTNwYWludEJlaGF2aW9yRXYKIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcxNnNldFBhaW50QmVoYXZpb3JFagogX19aTjdXZWJDb3JlMTBSZW5kZXJW
aWV3MTNub3RpZnlXaWRnZXRzRU5TXzE4V2lkZ2V0Tm90aWZpY2F0aW9uRQpAQCAtMzYxMSw4ICsz
NjExLDggQEAgX19aTjdXZWJDb3JlOERvY3VtZW50MjdjYW5jZWxGb2N1c0FwcGVhcgogX19aTjdX
ZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MjF1cGRhdGVGb2N1c0FwcGVhcmFuY2VFYgogX19aTjdX
ZWJDb3JlN0VsZW1lbnQyMXVwZGF0ZUZvY3VzQXBwZWFyYW5jZUViCiBfX1pOSzdXZWJDb3JlMTND
b250YWluZXJOb2RlN2dldFJlY3RFdgotX19aTks3V2ViQ29yZTEzQ29udGFpbmVyTm9kZTE4Z2V0
VXBwZXJMZWZ0Q29ybmVyRVJOU18xMEZsb2F0UG9pbnRFCi1fX1pOSzdXZWJDb3JlMTJSZW5kZXJP
YmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEwRmxvYXRQb2ludEViYgorX19aTks3V2ViQ29y
ZTEzQ29udGFpbmVyTm9kZTE4Z2V0VXBwZXJMZWZ0Q29ybmVyRVJOU18xM0dyYXBoaWNzUG9pbnRF
CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEzR3Jh
cGhpY3NQb2ludEViYgogX19aTks3V2ViQ29yZTlSZW5kZXJCb3gxOW1hcExvY2FsVG9Db250YWlu
ZXJFUE5TXzIwUmVuZGVyQm94TW9kZWxPYmplY3RFYmJSTlNfMTRUcmFuc2Zvcm1TdGF0ZUUKIF9f
Wk5LN1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlMTFtYXBwZWRQb2ludEV2CiBfX1pOSzdXZWJDb3Jl
OVJlbmRlckJveDE5b2Zmc2V0RnJvbUNvbnRhaW5lckVQTlNfMTJSZW5kZXJPYmplY3RFUktOU184
SW50UG9pbnRFCkBAIC0zNjIwLDcgKzM2MjAsNyBAQCBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3QzMXNob3VsZFVzZVRyCiBfX1pON1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlNG1vdmVFaWlOUzBf
MjFUcmFuc2Zvcm1BY2N1bXVsYXRpb25FCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJWaWV3MTltYXBM
b2NhbFRvQ29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJiUk5TXzE0VHJhbnNm
b3JtU3RhdGVFCiBfX1pON1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlN2ZsYXR0ZW5FdgotX19aTks3
V2ViQ29yZTEzQ29udGFpbmVyTm9kZTE5Z2V0TG93ZXJSaWdodENvcm5lckVSTlNfMTBGbG9hdFBv
aW50RQorX19aTks3V2ViQ29yZTEzQ29udGFpbmVyTm9kZTE5Z2V0TG93ZXJSaWdodENvcm5lckVS
TlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE5c2Nyb2xsUmVj
dFRvVmlzaWJsZUVSS05TXzdJbnRSZWN0RWJSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XwogX19a
Tks3V2ViQ29yZTlSZW5kZXJCb3gyOGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWRFYgogX19a
TjdXZWJDb3JlMTFSZW5kZXJMYXllcjE1Z2V0UmVjdFRvRXhwb3NlRVJLTlNfN0ludFJlY3RFUzNf
UktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KQEAgLTM3NzYsNyArMzc3Niw3IEBAIF9fWk43V2Vi
Q29yZTIwR3JhcGhpY3NDb250ZXh0U3RhdGVhU0VSS1MKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MjByZXN0b3JlUGxhdGZvcm1TdGF0ZUV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJCdXR0
b24xNWNvbnRyb2xDbGlwUmVjdEVpaQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xp
cEVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05T
XzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU5UmVuZGVyQm94MTVwb3BDb250ZW50c0NsaXBFUk5T
XzlQYWludEluZm9FTlNfMTBQYWludFBoYXNlRWlpCiBfX1pOSzdXZWJDb3JlOUlubGluZUJveDRy
b290RXYKIF9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTJwYWludE91dGxpbmVFUE5TXzE1R3Jh
cGhpY3NDb250ZXh0RVJLTlNfN0ludFJlY3RFCkBAIC00MjE5LDcgKzQyMTksNyBAQCBfX1pON1dl
YkNvcmUxNkpTSFRNTERpdkVsZW1lbnQxOGdldE93blByCiBfX1pON1dlYkNvcmUxMUxheW91dFN0
YXRlbndFbVBOU18xMVJlbmRlckFyZW5hRQogX19aTjdXZWJDb3JlMTFMYXlvdXRTdGF0ZUMxRVBT
MF9QTlNfOVJlbmRlckJveEVSS05TXzdJbnRTaXplRWliUE5TXzEwQ29sdW1uSW5mb0UKIF9fWk43
V2ViQ29yZTExTGF5b3V0U3RhdGVDMkVQUzBfUE5TXzlSZW5kZXJCb3hFUktOU183SW50U2l6ZUVp
YlBOU18xMENvbHVtbkluZm9FCi1fX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGxvY2FsVG9D
b250YWluZXJRdWFkRVJLTlNfOUZsb2F0UXVhZEVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEVi
CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGxvY2FsVG9Db250YWluZXJRdWFkRVJLTlNf
MTJHcmFwaGljc1F1YWRFUE5TXzIwUmVuZGVyQm94TW9kZWxPYmplY3RFYgogX19aTjdXZWJDb3Jl
TDI0Zm9udERhdGFGb3JHZW5lcmljRmFtaWx5RVBOU184RG9jdW1lbnRFUktOU18xNUZvbnREZXNj
cmlwdGlvbkVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTdn
ZXRDYWNoZWRGb250RGF0YUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNXVEYxMkF0b21pY1N0
cmluZ0ViTlMwXzEyU2hvdWxkUmV0YWluRQogX19aTks3V2ViQ29yZTEyUmVuZGVySW5saW5lMTZi
YXNlbGluZVBvc2l0aW9uRU5TXzEyRm9udEJhc2VsaW5lRWJOU18xN0xpbmVEaXJlY3Rpb25Nb2Rl
RU5TXzE2TGluZVBvc2l0aW9uTW9kZUUKQEAgLTQ0ODcsNyArNDQ4Nyw3IEBAIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MThzZXRTdHJva2UKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MjZzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzc0VmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDExZHJhd0VsbGlwc2VFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTRQYXRoQzFF
dgotX19aTjdXZWJDb3JlNFBhdGgxMGFkZEVsbGlwc2VFUktOU185RmxvYXRSZWN0RQorX19aTjdX
ZWJDb3JlNFBhdGgxMGFkZEVsbGlwc2VFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0OGRyYXdQYXRoRVJLTlNfNFBhdGhFCiBfX1pON1dlYkNvcmU0UGF0
aEQxRXYKIF9fWk43V2ViQ29yZTIwSlNIVE1MSGVhZGluZ0VsZW1lbnREMUV2CkBAIC00NTcwLDkg
KzQ1NzAsOSBAQCBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMjJzZXRNYXJnaW5TdGFyCiBfX1pO
N1dlYkNvcmUxMVJlbmRlckJsb2NrMjBzZXRNYXJnaW5FbmRGb3JDaGlsZEVQTlNfOVJlbmRlckJv
eEVpCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMjd1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXRFdgogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjIzY29tcHV0ZVNjcm9sbERpbWVuc2lvbnNF
UGJTMV8KLV9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEzMHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbkVSS05TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTE3U2Nyb2xsQW5pbWF0
b3JNYWMzMHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbkVSS05TXzEwRmxvYXRQb2ludEUK
LV9fWk5LN1dlYkNvcmUxN1Njcm9sbEFuaW1hdG9yTWFjMzFhZGp1c3RTY3JvbGxQb3NpdGlvbklm
TmVjZXNzYXJ5RVJLTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTMwc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uRVJLTlNfMTNHcmFwaGljc1BvaW50RQor
X19aTjdXZWJDb3JlMTdTY3JvbGxBbmltYXRvck1hYzMwc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTks3V2ViQ29yZTE3U2Nyb2xsQW5pbWF0
b3JNYWMzMWFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnlFUktOU18xM0dyYXBoaWNzUG9p
bnRFCiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDI2bG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3dF
dgogX19aTjdXZWJDb3JlMTdSZW5kZXJUZXh0Q29udHJvbDI3dXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5RWJiCiBfX1pOSzdXZWJDb3JlMThUZXh0RmllbGRJbnB1dFR5cGUxMWlzVGV4dEZpZWxk
RXYKQEAgLTQ2ODMsOCArNDY4Myw4IEBAIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTFuZXh0
U2libGluZ0UKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQxOGNhbkJlU2VsZWN0aW9uTGVhZkV2
CiBfX1pON1dlYkNvcmUxMFJlbmRlclRleHQyM3NlbGVjdGlvblJlY3RGb3JSZXBhaW50RVBOU18y
MFJlbmRlckJveE1vZGVsT2JqZWN0RWIKIF9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDEzc2Vs
ZWN0aW9uUmVjdEVpaWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQyMHNlbGVjdGlvblJlY3RGb3JUZXh0
RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQy
NnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9p
bnRFaWlpCitfX1pOSzdXZWJDb3JlNEZvbnQyMHNlbGVjdGlvblJlY3RGb3JUZXh0RVJLTlNfN1Rl
eHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWlpCitfX1pOSzdXZWJDb3JlNEZvbnQyNnNlbGVj
dGlvblJlY3RGb3JTaW1wbGVUZXh0RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRF
aWlpCiBfX1pON1dlYkNvcmVMMThlbGxpcHNpc1JlY3RGb3JCb3hFUE5TXzEzSW5saW5lVGV4dEJv
eEVqagogX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMWNvbXB1dGVSZWN0Rm9yUmVwYWludEVQ
TlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEVSTlNfN0ludFJlY3RFYgogX19aTjdXZWJDb3JlMTFS
ZW5kZXJCbG9jazI3c2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50RVBOU18yMFJlbmRlckJveE1v
ZGVsT2JqZWN0RQpAQCAtNDc4NywxMyArNDc4NywxMyBAQCBfX1pOSzdXZWJDb3JlMTFSZW5kZXJM
YXllcjIwbGF5ZXJGb3JTY3JvCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTdwYWludFNjcm9s
bENvcm5lckVQTlNfMTVHcmFwaGljc0NvbnRleHRFaWlSS05TXzdJbnRSZWN0RQogX19aTks3V2Vi
Q29yZTExUmVuZGVyTGF5ZXIxNnNjcm9sbENvcm5lclJlY3RFdgogX19aTjdXZWJDb3JlMTFSZW5k
ZXJMYXllcjEycGFpbnRSZXNpemVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVpaVJLTlNfN0ludFJl
Y3RFCi1fX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gxNHBhaW50U2VsZWN0aW9uRVBOU18xNUdy
YXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2ludEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRG
b250RQorX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTRwYWludFNlbGVjdGlvbkVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU18xM0dyYXBoaWNzUG9pbnRFUE5TXzExUmVuZGVyU3R5bGVFUktO
U180Rm9udEUKIF9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDE3c2VsZWN0aW9uU3RhcnRFbmRF
UmlTMV8KIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDI0c2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclRoZW1lMzBhY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3JFdgogX19aTks3V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMzOHBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yRXYKIF9fWk5LN1dlYkNvcmU1Q29sb3IxNGJsZW5kV2l0
aFdoaXRlRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjBkcmF3SGlnaGxpZ2h0Rm9y
VGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaVJLTlNfNUNv
bG9yRU5TXzEwQ29sb3JTcGFjZUVpaQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMGRy
YXdIaWdobGlnaHRGb3JUZXh0RVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEzR3JhcGhp
Y3NQb2ludEVpUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRWlpCiBfX1pOSzdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QyNHNlbGVjdGlvbkZvcmVncm91bmRDb2xvckV2CiBfX1pOSzdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QxNHNlbGVjdGlvbkNvbG9yRWkKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclRoZW1l
MzBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JFdgpAQCAtNDg1OSw4ICs0ODU5LDggQEAg
X19aTjdXZWJDb3JlMTJSZW5kZXJJbmxpbmUyOWNsaXBwZWRPdmVyZgogX19aTks3V2ViQ29yZTEy
UmVuZGVySW5saW5lMzBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hFdgogX19aTks3V2Vi
Q29yZTEyUmVuZGVySW5saW5lMzdjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94
RXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlcklubGluZTIzY3VsbGVkSW5saW5lQm91bmRpbmdCb3hF
UEtTMF8KLV9fWk43V2ViQ29yZTlGbG9hdFJlY3QxNHVuaXRlSWZOb25aZXJvRVJLUzBfCi1fX1pO
N1dlYkNvcmU3SW50UmVjdEMxRVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhp
Y3NSZWN0MTR1bml0ZUlmTm9uWmVyb0VSS1MwXworX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05T
XzEyR3JhcGhpY3NSZWN0RQogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDMwbGluZXNWaXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94RXYKIF9fWk43V2ViQ29yZTdJbnRSZWN0MTR1bml0ZUlmTm9uWmVy
b0VSS1MwXwogX19aTjdXZWJDb3JlMTdSZW5kZXJMaW5lQm94TGlzdDE0ZGlydHlMaW5lQm94ZXNF
dgpAQCAtNTIyNiw5ICs1MjI2LDkgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyNnNl
dFBsYXRmbwogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZHJhd1JlY3RFUktOU183SW50
UmVjdEUKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExc3Ryb2tlU3R5bGVFdgogX19a
Tks3V2ViQ29yZTVDb2xvcjRkYXJrRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdk
cmF3Q29udmV4UG9seWdvbkVtUEtOU18xMEZsb2F0UG9pbnRFYgotX19aTjdXZWJDb3JlNFBhdGg2
bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlNFBhdGg5YWRkTGluZVRvRVJL
TlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2RyYXdDb252
ZXhQb2x5Z29uRW1QS05TXzEzR3JhcGhpY3NQb2ludEViCitfX1pON1dlYkNvcmU0UGF0aDZtb3Zl
VG9FUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmU0UGF0aDlhZGRMaW5lVG9FUktO
U18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmU0UGF0aDEyY2xvc2VTdWJwYXRoRXYKIF9f
Wk43V2ViQ29yZTE4UmVuZGVyVGFibGVTZWN0aW9uNXBhaW50RVJOU185UGFpbnRJbmZvRWlpCiBf
X1pON1dlYkNvcmUxOFJlbmRlclRhYmxlU2VjdGlvbjExcGFpbnRPYmplY3RFUk5TXzlQYWludElu
Zm9FaWkKQEAgLTUyNTQsNyArNTI1NCw3IEBAIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94MTRjb250
ZW50Qm94UmVjdEUKIF9fWk43V2ViQ29yZTEzUmVuZGVyTGlzdEJveDE5cGFpbnRJdGVtQmFja2dy
b3VuZEVSTlNfOVBhaW50SW5mb0VpaWkKIF9fWk43V2ViQ29yZTEzUmVuZGVyTGlzdEJveDE5aXRl
bUJvdW5kaW5nQm94UmVjdEVpaWkKIF9fWk43V2ViQ29yZTEzUmVuZGVyTGlzdEJveDE5cGFpbnRJ
dGVtRm9yZWdyb3VuZEVSTlNfOVBhaW50SW5mb0VpaWkKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MTJkcmF3QmlkaVRleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMmRyYXdCaWRpVGV4dEVSS05T
XzRGb250RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pOM1dURjEwUmVm
Q291bnRlZElON1dlYkNvcmUxMUJpZGlDb250ZXh0RUU1ZGVyZWZFdgogX19aTjdXZWJDb3JlMTJC
aWRpUmVzb2x2ZXJJTlNfMTVUZXh0UnVuSXRlcmF0b3JFTlNfMTZCaWRpQ2hhcmFjdGVyUnVuRUUy
MWNyZWF0ZUJpZGlSdW5zRm9yTGluZUVSS1MxX05TXzIzVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGVF
YgogX19aTjdXZWJDb3JlMTJCaWRpUmVzb2x2ZXJJTlNfMTVUZXh0UnVuSXRlcmF0b3JFTlNfMTZC
aWRpQ2hhcmFjdGVyUnVuRUU5YXBwZW5kUnVuRXYKQEAgLTUzMzksOCArNTMzOSw4IEBAIF9fWk5L
N1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QKIF9fWk5LN1dlYkNvcmUyNUFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QxMWVsZW1lbnRSZWN0RXYKIF9fWk5LN1dlYkNvcmUxOUFjY2Vz
c2liaWxpdHlPYmplY3QxM2lzUmFkaW9CdXR0b25FdgogX19aTks3V2ViQ29yZTI1QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDE1Ym91bmRpbmdCb3hSZWN0RXYKLV9fWk43V2ViQ29yZTEyUmVuZGVy
T2JqZWN0MjJhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVh
ZEVMbTBFRUUKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRRdWFkRUxtMEVFMTVyZXNl
cnZlQ2FwYWNpdHlFbQorX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMmFic29sdXRlRm9jdXNS
aW5nUXVhZHNFUk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKK19fWk4zV1RG
NlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUXVhZEVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0K
IF9fWk5LN1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q5aXNGb2N1c2VkRXYKIF9f
Wk5LN1dlYkNvcmU3RWxlbWVudDIwaXNFbmFibGVkRm9ybUNvbnRyb2xFdgogLVtBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciByZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0XQpAQCAtNTM5
MSwxMiArNTM5MSwxMiBAQCBfX1pOM1dURjlIYXNoVGFibGVJeXlOU18xN0lkZW50aXR5RXh0cmFj
CiBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMTNpc0xpbmtWaXNpdGVkRXkKIF9fWk43V2ViQ29yZTEx
UmVuZGVyU3R5bGUxN3NldFRleHREZWNvcmF0aW9uRWkKIF9fWk43V2ViQ29yZTE1U3R5bGVWaXN1
YWxEYXRhQzFFUktTMF8KLV9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDE1cGFpbnREZWNvcmF0
aW9uRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2ludEVpUEtOU18xMFNoYWRv
d0RhdGFFCitfX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gxNXBhaW50RGVjb3JhdGlvbkVQTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU18xM0dyYXBoaWNzUG9pbnRFaVBLTlNfMTBTaGFkb3dEYXRh
RQogX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyM2dldFRleHREZWNvcmF0aW9uQ29sb3JzRWlS
TlNfNUNvbG9yRVMyX1MyX2IKIF9fWk43V2ViQ29yZUwxNWRlY29yYXRpb25Db2xvckVQTlNfMTJS
ZW5kZXJPYmplY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd0xpbmVGb3JU
ZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1
ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTNHcmFwaGljc1BvaW50RWZiCiBfX1pOSzdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQxNXN0cm9rZVRoaWNrbmVzc0V2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDE5cm91bmRUb0RldmljZVBpeGVsc0VSS05TXzlGbG9hdFJlY3RFTlMwXzEyUm91bmRp
bmdNb2RlRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxOXJvdW5kVG9EZXZpY2VQaXhl
bHNFUktOU18xMkdyYXBoaWNzUmVjdEVOUzBfMTJSb3VuZGluZ01vZGVFCiBfX1pON1dlYkNvcmUx
N0hUTUxTY3JpcHRFbGVtZW50MTlyZW1vdmVkRnJvbURvY3VtZW50RXYKIF9fWk43V2ViQ29yZTEz
U2NyaXB0RWxlbWVudDE5cmVtb3ZlZEZyb21Eb2N1bWVudEV2CiBfX1pON1dlYkNvcmUxN0pTSFRN
TEJvZHlFbGVtZW50RDFFdgpAQCAtNTU1NSw4ICs1NTU1LDggQEAgX19aTks3V2ViQ29yZTE0UmVu
ZGVyUmVwbGFjZWQxMGlzU2VsZWN0ZQogX19aTjdXZWJDb3JlMTFSZW5kZXJJbWFnZTEzcGFpbnRS
ZXBsYWNlZEVSTlNfOVBhaW50SW5mb0VpaQogX19aTks3V2ViQ29yZTE5UmVuZGVySW1hZ2VSZXNv
dXJjZTVpbWFnZUVpaQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBO
U181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOEludFBvaW50RU5TXzE3Q29tcG9zaXRlT3Bl
cmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFn
ZUVOU18xMENvbG9yU3BhY2VFUktOU185RmxvYXRSZWN0RVM2X05TXzE3Q29tcG9zaXRlT3BlcmF0
b3JFYgotX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZTRkcmF3RVBOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzlGbG9hdFJlY3RFUzVfTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0
b3JFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFnZUVO
U18xMENvbG9yU3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJh
dG9yRWIKK19fWk43V2ViQ29yZTExQml0bWFwSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVP
cGVyYXRvckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2UxNHN0YXJ0QW5pbWF0aW9uRWIKIF9f
Wk43V2ViQ29yZTExQml0bWFwSW1hZ2UyMW1heUZpbGxXaXRoU29saWRDb2xvckV2CiBfX1pOSzdX
ZWJDb3JlMTFCaXRtYXBJbWFnZTE2Y3VycmVudEZyYW1lU2l6ZUV2CkBAIC01ODk4LDcgKzU4OTgs
NyBAQCBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50CiBfX1pON1dlYkNv
cmUyMkltYWdlUXVhbGl0eUNvbnRyb2xsZXIzc2V0RVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0
RVBOM1dURjdIYXNoTWFwSVBLdk5TXzdJbnRTaXplRU5TM183UHRySGFzaElTNl9FRU5TM18xMEhh
c2hUcmFpdHNJUzZfRUVOU0FfSVM3X0VFRUVTNl9SS1M3XwogX19aTjdXZWJDb3JlMTFJbWFnZVNv
dXJjZTIwZnJhbWVEdXJhdGlvbkF0SW5kZXhFbQogX19aTks3V2ViQ29yZTExQml0bWFwSW1hZ2Ux
MHNvbGlkQ29sb3JFdgotX19aTjdXZWJDb3JlNUltYWdlMThmaWxsV2l0aFNvbGlkQ29sb3JFUE5T
XzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzVDb2xvckVOU18xMENvbG9y
U3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2ViQ29yZTVJbWFnZTE4ZmlsbFdp
dGhTb2xpZENvbG9yRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVJL
TlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQogX19aTjdX
ZWJDb3JlNVRpbWVySU5TXzIySW1hZ2VRdWFsaXR5Q29udHJvbGxlckVFNWZpcmVkRXYKIF9fWk43
V2ViQ29yZTIySW1hZ2VRdWFsaXR5Q29udHJvbGxlcjI4aGlnaFF1YWxpdHlSZXBhaW50VGltZXJG
aXJlZEVQTlNfNVRpbWVySVMwX0VFCiBfX1pON1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlJbWFnZU1h
cExpbmtEMEV2CkBAIC01OTQxLDcgKzU5NDEsNyBAQCBfX1pOSzdXZWJDb3JlMTdIVE1MQ2FudmFz
RWxlbWVudDE3Y3JlYXRlCiBfX1pON1dlYkNvcmUxMUltYWdlQnVmZmVyQzFFUktOU183SW50U2l6
ZUVOU18xMENvbG9yU3BhY2VFTlNfMTNSZW5kZXJpbmdNb2RlRVJiCiBfX1pON1dlYkNvcmUxMUlt
YWdlQnVmZmVyQzJFUktOU183SW50U2l6ZUVOU18xMENvbG9yU3BhY2VFTlNfMTNSZW5kZXJpbmdN
b2RlRVJiCiBfX1pON1dlYkNvcmUxNUltYWdlQnVmZmVyRGF0YUMxRVJLTlNfN0ludFNpemVFCi1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzlGbG9hdFNpemVFCitfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzEyR3JhcGhpY3NTaXplRQogX19a
Tks3V2ViQ29yZTExSW1hZ2VCdWZmZXI3Y29udGV4dEV2CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDI2c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNFYgogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQyOHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlFTlNfMjBJbnRlcnBvbGF0
aW9uUXVhbGl0eUUKQEAgLTU5NzYsMTQgKzU5NzYsMTQgQEAgX19aTjdXZWJDb3JlNTNqc0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRAogX19aTjdXZWJDb3JlMjZKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDEwc3Ryb2tlUmVjdEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQxMHN0cm9rZVJlY3RFZmZmZgogX19aTjdXZWJDb3JlMjRDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQxMHN0cm9rZVJlY3RFZmZmZmYKLV9fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MTBzdHJva2VSZWN0RVJLTlNfOUZsb2F0UmVjdEVmCi1fX1pON1dlYkNvcmUyNENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDdkaWREcmF3RVJLTlNfOUZsb2F0UmVjdEVqCi1fX1pOSzdX
ZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm03bWFwUmVjdEVSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dl
YkNvcmUxN0hUTUxDYW52YXNFbGVtZW50N2RpZERyYXdFUktOU185RmxvYXRSZWN0RQotX19aTjdX
ZWJDb3JlN21hcFJlY3RFUktOU185RmxvYXRSZWN0RVMyX1MyXwotX19aTjdXZWJDb3JlOUZsb2F0
UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0OGNvbnRhaW5zRVJL
UzBfCi1fX1pON1dlYkNvcmU5RmxvYXRSZWN0NXVuaXRlRVJLUzBfCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDEwc3Ryb2tlUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RWYKK19fWk43V2Vi
Q29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEN2RpZERyYXdFUktOU18xMkdyYXBoaWNzUmVj
dEVqCitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm03bWFwUmVjdEVSS05TXzEyR3JhcGhp
Y3NSZWN0RQorX19aTjdXZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDdkaWREcmF3RVJLTlNfMTJH
cmFwaGljc1JlY3RFCitfX1pON1dlYkNvcmU3bWFwUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVMy
X1MyXworX19aTjdXZWJDb3JlMTJHcmFwaGljc1JlY3Q5aW50ZXJzZWN0RVJLUzBfCitfX1pOSzdX
ZWJDb3JlMTJHcmFwaGljc1JlY3Q4Y29udGFpbnNFUktTMF8KK19fWk43V2ViQ29yZTEyR3JhcGhp
Y3NSZWN0NXVuaXRlRVJLUzBfCiBfX1pON1dlYkNvcmU0MHNldEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEU3Ryb2tlU3R5bGVFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUyNkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMTRzZXRTdHJv
a2VTdHlsZUVQTjNKU0M5RXhlY1N0YXRlRU5TMV83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTI0Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEMTRzZXRTdHJva2VDb2xvckVSS04zV1RGNlN0cmluZ0UKQEAg
LTYwMjIsOCArNjAyMiw4IEBAIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyNmNyZWF0ZUVO
UzAKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyQzJFTlMwXzlMYXllclR5cGVFUDdDQUxh
eWVyUE5TXzIxUGxhdGZvcm1DQUxheWVyQ2xpZW50RQogLVtXZWJMYXllciBhY3Rpb25Gb3JLZXk6
XQogX19aTjdXZWJDb3JlMTNHcmFwaGljc0xheWVyMjF1cGRhdGVEZWJ1Z0luZGljYXRvcnNFdgot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0E3c2V0U2l6ZUVSS05TXzlGbG9hdFNpemVFCi1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTExc2V0UG9zaXRpb25FUktOU18xMEZsb2F0UG9p
bnRFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTdzZXRTaXplRVJLTlNfMTJHcmFwaGlj
c1NpemVFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTExc2V0UG9zaXRpb25FUktOU18x
M0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE2c2V0TWFza3NU
b0JvdW5kc0ViCiBfX1pON1dlYkNvcmUyMVJlbmRlckxheWVyQ29tcG9zaXRvcjIzYXR0YWNoUm9v
dFBsYXRmb3JtTGF5ZXJFTlMwXzE5Um9vdExheWVyQXR0YWNobWVudEUKIF9fWk5LN1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTEzcGxhdGZvcm1MYXllckV2CkBAIC02MDgxLDggKzYwODEsOCBAQCBf
X1pOSzdXZWJDb3JlMjZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0CiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzTGF5ZXJDQTE0c2V0UHJlc2VydmVzM0RFYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xh
eWVyQ0EyMXNldEJhY2tmYWNlVmlzaWJpbGl0eUViCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5
ZXJDQTE1c2V0TmVlZHNEaXNwbGF5RXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFz
ZXROZWVkc0Rpc3BsYXlJblJlY3RFUktOU185RmxvYXRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFw
aGljc0xheWVyQ0ExNHNldEFuY2hvclBvaW50RVJLTlNfMTJGbG9hdFBvaW50M0RFCitfX1pON1dl
YkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIxc2V0TmVlZHNEaXNwbGF5SW5SZWN0RVJLTlNfMTJHcmFw
aGljc1JlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE0c2V0QW5jaG9yUG9pbnRF
UktOU18xNUdyYXBoaWNzUG9pbnQzREUKIF9fWk5LN1dlYkNvcmUxOFJlbmRlckxheWVyQmFja2lu
ZzExY29udGVudHNCb3hFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNXNldENvbnRl
bnRzUmVjdEVSS05TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTE4UmVuZGVyTGF5ZXJCYWNraW5n
MjJjb250YWluc1BhaW50ZWRDb250ZW50RXYKQEAgLTYxMDYsMTUgKzYxMDYsMTUgQEAgX19aTjNX
VEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMTVQbAogX19aTjdXZWJDb3JlMTVQbGF0Zm9y
bUNBTGF5ZXIyMHJlbW92ZUZyb21TdXBlcmxheWVyRXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1D
QUxheWVyMTJzZXRTdWJsYXllcnNFUktOM1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJUzBfRUVMbTBF
RUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTV1cGRhdGVMYXllclNpemVFdgotX19a
TjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXI5c2V0Qm91bmRzRVJLTlNfOUZsb2F0UmVjdEUKK19f
Wk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyOXNldEJvdW5kc0VSS05TXzEyR3JhcGhpY3NSZWN0
RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOXVwZGF0ZUxheWVyUG9zaXRpb25Fdgot
X19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxMXNldFBvc2l0aW9uRVJLTlNfMTJGbG9hdFBv
aW50M0RFCitfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjExc2V0UG9zaXRpb25FUktOU18x
NUdyYXBoaWNzUG9pbnQzREUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTl1cGRhdGVN
YXNrc1RvQm91bmRzRXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMTZzZXRNYXNrc1Rv
Qm91bmRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTh1cGRhdGVDb250ZW50c1Jl
Y3RFdgogX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxOHJlbW92ZUFsbFN1YmxheWVyc0V2
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIzdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnRF
dgotX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxNXNldE5lZWRzRGlzcGxheUVQS05TXzlG
bG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE1c2V0TmVlZHNEaXNwbGF5
RVBLTlNfMTJHcmFwaGljc1JlY3RFCiAtW1dlYkxheWVyIHNldE5lZWRzRGlzcGxheV0KIF9fWk43
V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMTVwbGF0Zm9ybUNBTGF5ZXJFUHYKIF9fWlRobjQ0MF9O
SzdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyN3BsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudEV2
CkBAIC02MTQ0LDggKzYxNDQsOCBAQCBfX1pOSzdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQyCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDI5cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXNFdgogX19aTks3V2ViQ29yZTExSW1hZ2VCdWZmZXIxNGRyYXdz
VXNpbmdDb3B5RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVkcmF3SW1hZ2VCdWZm
ZXJFUE5TXzExSW1hZ2VCdWZmZXJFTlNfMTBDb2xvclNwYWNlRVJLTlNfN0ludFJlY3RFTlNfMTdD
b21wb3NpdGVPcGVyYXRvckViCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd0lt
YWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRU5TXzEwQ29sb3JTcGFjZUVSS05TXzlGbG9hdFJl
Y3RFUzZfTlNfMTdDb21wb3NpdGVPcGVyYXRvckViCi1fX1pON1dlYkNvcmUxMUltYWdlQnVmZmVy
NGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RU5TXzEwQ29sb3JTcGFjZUVSS05TXzlGbG9hdFJl
Y3RFUzZfTlNfMTdDb21wb3NpdGVPcGVyYXRvckViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0ltYWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRU5TXzEwQ29sb3JTcGFjZUVS
S05TXzEyR3JhcGhpY3NSZWN0RVM2X05TXzE3Q29tcG9zaXRlT3BlcmF0b3JFYgorX19aTjdXZWJD
b3JlMTFJbWFnZUJ1ZmZlcjRkcmF3RVBOU18xNUdyYXBoaWNzQ29udGV4dEVOU18xMENvbG9yU3Bh
Y2VFUktOU18xMkdyYXBoaWNzUmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIKIF9fWk5L
N1dlYkNvcmUxMUltYWdlQnVmZmVyOWNvcHlJbWFnZUV2CiBfX1pON1dlYkNvcmUxMUJpdG1hcElt
YWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1hZ2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFw
SW1hZ2VDMkVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQpAQCAtNjI4MCw5ICs2MjgwLDkg
QEAgX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MjhhZGROb2RlVG9SZQogX19aTjdXZWJDb3Jl
MTRIVE1MTWFwRWxlbWVudDEzbWFwTW91c2VFdmVudEVpaVJLTlNfN0ludFNpemVFUk5TXzEzSGl0
VGVzdFJlc3VsdEUKIF9fWk43V2ViQ29yZTE1SFRNTEFyZWFFbGVtZW50MTNtYXBNb3VzZUV2ZW50
RWlpUktOU183SW50U2l6ZUVSTlNfMTNIaXRUZXN0UmVzdWx0RQogX19aTks3V2ViQ29yZTE1SFRN
TEFyZWFFbGVtZW50OWdldFJlZ2lvbkVSS05TXzdJbnRTaXplRQotX19aTjdXZWJDb3JlNFBhdGg3
YWRkUmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmU0UGF0aDdhZGRSZWN0RVJLTlNf
MTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU0UGF0aEMxRVJLUzBfCi1fX1pOSzdXZWJDb3Jl
NFBhdGg4Y29udGFpbnNFUktOU18xMEZsb2F0UG9pbnRFTlNfOFdpbmRSdWxlRQorX19aTks3V2Vi
Q29yZTRQYXRoOGNvbnRhaW5zRVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzhXaW5kUnVsZUUKIF9f
Wk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDEzc2V0VVJMRWxlbWVudEVQTlNfN0VsZW1lbnRFCiBf
X1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFSZW5kZXJC
bG9jazE5dXBkYXRlSGl0VGVzdFJlc3VsdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfOEludFBv
aW50RQpAQCAtNjMwMCw3ICs2MzAwLDcgQEAgX19aTjdXZWJDb3JlMTRIVE1MQ29sbGVjdGlvbkQw
RXYKIF9fWk5LN1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsxMWVsZW1lbnRSZWN0
RXYKIF9fWk5LN1dlYkNvcmUxNUhUTUxBcmVhRWxlbWVudDExY29tcHV0ZVJlY3RFUE5TXzEyUmVu
ZGVyT2JqZWN0RQogX19aTks3V2ViQ29yZTE1SFRNTEFyZWFFbGVtZW50MTFjb21wdXRlUGF0aEVQ
TlNfMTJSZW5kZXJPYmplY3RFCi1fX1pON1dlYkNvcmU0UGF0aDl0cmFuc2xhdGVFUktOU185Rmxv
YXRTaXplRQorX19aTjdXZWJDb3JlNFBhdGg5dHJhbnNsYXRlRVJLTlNfMTJHcmFwaGljc1NpemVF
CiBfX1pOSzdXZWJDb3JlNFBhdGgxMmJvdW5kaW5nUmVjdEV2CiBfX1pON1dlYkNvcmUyOEpTSFRN
TFNlbGVjdEVsZW1lbnRQcm90b3R5cGVEMUV2CiBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMTNG
bG9hdFdpdGhSZWN0QzJFUE5TXzlSZW5kZXJCb3hFCkBAIC02Mzk0LDkgKzYzOTQsOSBAQCBfX1pO
SzdXZWJDb3JlNldpZGdldDI3Y29udmVydEZyb21Db250YWluCiBfX1pON1dlYkNvcmU2V2lkZ2V0
MzNjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3RFUEtTMF9SS05TXzhJbnRQb2ludEUK
IF9fWk43V2ViQ29yZThEb2N1bWVudDE3cHJlcGFyZU1vdXNlRXZlbnRFUktOU18xNEhpdFRlc3RS
ZXF1ZXN0RVJLTlNfOEludFBvaW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dl
YkNvcmUxM0lubGluZVRleHRCb3gxMW5vZGVBdFBvaW50RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVS
TlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfOEludFBvaW50RWlpaWkKLV9fWk5LN1dlYkNvcmU5Rmxv
YXRSZWN0MTBpbnRlcnNlY3RzRVJLUzBfCitfX1pOSzdXZWJDb3JlMTJHcmFwaGljc1JlY3QxMGlu
dGVyc2VjdHNFUktTMF8KIF9fWk43V2ViQ29yZTlJbmxpbmVCb3gxOGZsaXBGb3JXcml0aW5nTW9k
ZUVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDI4YWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdEVQTlNfNE5vZGVFaWlSS05TXzlGbG9hdFJlY3RFCitfX1pON1dl
YkNvcmUxM0hpdFRlc3RSZXN1bHQyOGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHRFUE5TXzRO
b2RlRWlpUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTROb2RlMzBlbmNsb3NpbmdM
aW5rRXZlbnRQYXJlbnRPclNlbGZFdgogX19aTjdXZWJDb3JlOERvY3VtZW50MTJzZXRIb3Zlck5v
ZGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9i
amVjdDEzaG92ZXJBbmNlc3RvckV2CkBAIC02NTI3LDcgKzY1MjcsNyBAQCBfX1pON1dlYkNvcmUx
M1Jvb3RJbmxpbmVCb3gxNWNsZWFyVHJ1bmNhCiBfX1pON1dlYkNvcmUxMUVsbGlwc2lzQm94RDBF
dgogX19aTjdXZWJDb3JlMTNJbmxpbmVGbG93Qm94MTVjbGVhclRydW5jYXRpb25FdgogX19aTjdX
ZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTVjbGVhclRydW5jYXRpb25FdgotX19aTjdXZWJDb3JlMTBS
ZW5kZXJUZXh0MTNhYnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBF
RUVOUzBfMTRDbGlwcGluZ09wdGlvbkUKK19fWk43V2ViQ29yZTEwUmVuZGVyVGV4dDEzYWJzb2x1
dGVRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRU5TMF8xNENsaXBw
aW5nT3B0aW9uRQogX19aTks3V2ViQ29yZTEzSW5saW5lVGV4dEJveDE5Y2FsY3VsYXRlQm91bmRh
cmllc0V2CiBfX1pOSzdXZWJDb3JlMTNSb290SW5saW5lQm94MTFlbGxpcHNpc0JveEV2CiBfX1pO
N1dlYkNvcmUxMUVsbGlwc2lzQm94MTNzZWxlY3Rpb25SZWN0RWlpCkBAIC02Njk3LDcgKzY2OTcs
NyBAQCBfX1pON1dlYkNvcmUxMlJlbmRlcldpZGdldDVwYWludEVSTlNfOVBhCiBfX1pOSzdXZWJD
b3JlOVJlbmRlckJveDE1Ym9yZGVyRml0QWRqdXN0RVJOU183SW50UmVjdEUKIF9fWk43V2ViQ29y
ZTEwU2Nyb2xsVmlldzVwYWludEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTZXaWRnZXQ1cGFpbnRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0lu
dFJlY3RFCi1fX1pON1dlYkNvcmUxOW1ha2VNYXBCZXR3ZWVuUmVjdHNFUktOU185RmxvYXRSZWN0
RVMyXworX19aTjdXZWJDb3JlMTltYWtlTWFwQmV0d2VlblJlY3RzRVJLTlNfMTJHcmFwaGljc1Jl
Y3RFUzJfCiBfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eVNjYWxlRXYKIF9fWk5LN1dl
YkNvcmUxNUFmZmluZVRyYW5zZm9ybTZ4U2NhbGVFdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5
ZXIyMHJlcXVpcmVzU2xvd1JlcGFpbnRzRXYKQEAgLTY3MzUsNyArNjczNSw3IEBAIF9fWk43V2Vi
Q29yZTE2SlNIVE1MUHJlRWxlbWVudEMxRVBOM0pTQzkKIF9fWk43V2ViQ29yZTEyY2FjaGVXcmFw
cGVySU5TXzE0SFRNTFByZUVsZW1lbnRFRUV2UE5TXzE1RE9NV3JhcHBlcldvcmxkRVBUX1BOU18x
MkpTRE9NV3JhcHBlckUKIF9fWk43V2ViQ29yZTEzQVhXZWJBcmVhVGV4dEV2CiBfX1pON1dlYkNv
cmUyN0RlZmF1bHRMb2NhbGl6YXRpb25TdHJhdGVneTEzQVhXZWJBcmVhVGV4dEV2Ci1fX1pON1dl
YkNvcmUxMFJlbmRlclZpZXcxM2Fic29sdXRlUXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRR
dWFkRUxtMEVFRQorX19aTjdXZWJDb3JlMTBSZW5kZXJWaWV3MTNhYnNvbHV0ZVF1YWRzRVJOM1dU
RjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCiBfX1pON1dlYkNvcmUyNUFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QxNmdldERvY3VtZW50TGlua3NFUk4zV1RGNlZlY3RvcklOUzFfNlJl
ZlB0cklOU18xOUFjY2Vzc2liaWxpdHlPYmplY3RFRUVMbTBFRUUKIF9fWk43V2ViQ29yZThEb2N1
bWVudDVsaW5rc0V2CiBfX1pOSzdXZWJDb3JlMTRIVE1MQ29sbGVjdGlvbjhuZXh0SXRlbUV2CkBA
IC03MjM3LDEwICs3MjM3LDEwIEBAIF9fWk43V2ViQ29yZTIxUmVuZGVyTGF5ZXJDb21wb3NpdG9y
MzV1cGQKIF9fWk43V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyOHBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmRFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfOVBhaW50SW5mb0VSS05TXzdJbnRSZWN0
RQogX19aTjdXZWJDb3JlMTRSZW5kZXJUaGVtZU1hYzIycGFpbnRNZWRpYVJld2luZEJ1dHRvbkVQ
TlNfMTJSZW5kZXJPYmplY3RFUktOU185UGFpbnRJbmZvRVJLTlNfN0ludFJlY3RFCiBfX1pON1dl
YkNvcmUxNFJlbmRlclRoZW1lTWFjMjBwYWludE1lZGlhUGxheUJ1dHRvbkVQTlNfMTJSZW5kZXJP
YmplY3RFUktOU185UGFpbnRJbmZvRVJLTlNfN0ludFJlY3RFCi1fX1pON1dlYkNvcmUxM0lubGlu
ZVRleHRCb3gyOGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHRFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVBLTlNfMTBTaGFkb3dEYXRhRVJLTlNfOUZsb2F0UmVjdEViYmIKLV9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdzZXRQbGF0Zm9y
bVNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKLV9f
Wk5LN1dlYkNvcmU5RmxvYXRTaXplY3Y2Q0dTaXplRXYKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4
dEJveDI4YXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRF
UEtOU18xMFNoYWRvd0RhdGFFUktOU18xMkdyYXBoaWNzUmVjdEViYmIKK19fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzEyR3JhcGhpY3NTaXplRWZSS05TXzVDb2xv
ckVOU18xMENvbG9yU3BhY2VFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE3c2V0UGxh
dGZvcm1TaGFkb3dFUktOU18xMkdyYXBoaWNzU2l6ZUVmUktOU181Q29sb3JFTlNfMTBDb2xvclNw
YWNlRQorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NTaXplY3Y2Q0dTaXplRXYKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MTFjbGVhclNoYWRvd0V2CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDE5Y2xlYXJQbGF0Zm9ybVNoYWRvd0V2CiBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVs
ZW1lbnQyMGFzeW5jRXZlbnRUaW1lckZpcmVkRVBOU181VGltZXJJUzBfRUUKQEAgLTczMjIsNyAr
NzMyMiw3IEBAIF9fWk5LN1dlYkNvcmUxMU1lZGlhUGxheWVyNnBhdXNlZEV2CiBfX1pOSzdXZWJD
b3JlMzBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb242cGF1c2VkRXYKIF9fWk5LN1dlYkNv
cmUzNE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM0cmF0ZUV2CiBfX1pON1dlYkNv
cmUyM01lZGlhQ29udHJvbFJvb3RFbGVtZW50MTVwbGF5YmFja1N0b3BwZWRFdgotX19aTjNXVEY2
VmVjdG9ySU43V2ViQ29yZTlGbG9hdFJlY3RFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCitfX1pO
M1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNXJlc2VydmVDYXBhY2l0
eUVtCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJCbG9jazE5dmlydHVhbENvbnRpbnVhdGlvbkV2CiBf
X1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTFyZW1vdmVDaGlsZEVQUzBfCiBfX1pON1dlYkNvcmUy
MVJlbmRlckxheWVyQ29tcG9zaXRvcjE4bGF5ZXJXaWxsQmVSZW1vdmVkRVBOU18xMVJlbmRlckxh
eWVyRVMyXwpAQCAtNzM0Niw4ICs3MzQ2LDggQEAgX19aTjdXZWJDb3JlMTdSZW5kZXJTbGlkZXJU
aHVtYjZsYXlvdXRFdgogX19aTjdXZWJDb3JlMTJSZW5kZXJTbGlkZXI5dGh1bWJSZWN0RXYKIF9f
Wk43V2ViQ29yZTlTdGVwUmFuZ2UxNnZhbHVlRnJvbUVsZW1lbnRFUE5TXzE2SFRNTElucHV0RWxl
bWVudEVQYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOHNldHVwQ29udGVudHNMYXll
ckVQTlNfMTVQbGF0Zm9ybUNBTGF5ZXJFCi1fX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE0
c2V0QW5jaG9yUG9pbnRFUktOU18xMkZsb2F0UG9pbnQzREUKLV9fWk4zV1RGNlZlY3RvcklON1dl
YkNvcmU5RmxvYXRSZWN0RUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCitfX1pON1dlYkNvcmUxNVBs
YXRmb3JtQ0FMYXllcjE0c2V0QW5jaG9yUG9pbnRFUktOU18xNUdyYXBoaWNzUG9pbnQzREUKK19f
Wk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVMbTBFRTE0c2hyaW5rQ2FwYWNp
dHlFbQogX19aTjdXZWJDb3JlMTRSZW5kZXJUaGVtZU1hYzIxcGFpbnRNZWRpYVNsaWRlclRyYWNr
RVBOU18xMlJlbmRlck9iamVjdEVSS05TXzlQYWludEluZm9FUktOU183SW50UmVjdEUKIF9fWk5L
N1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ4YnVmZmVyZWRFdgogX19aTjdXZWJDb3JlMTFNZWRp
YVBsYXllcjhidWZmZXJlZEV2CkBAIC03NDg3LDggKzc0ODcsOCBAQCBfX1pON1dlYkNvcmUxNFNj
cm9sbEFuaW1hdG9yMjFub3RpdHlQb3NpCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjhz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uRVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3Jl
MTFSZW5kZXJMYXllcjE1c2V0U2Nyb2xsT2Zmc2V0RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJD
b3JlMTFSZW5kZXJMYXllcjhzY3JvbGxUb0VpaQotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIz
NmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZEVSS05TXzlGbG9hdFF1YWRFCi1f
X1pOSzdXZWJDb3JlOUZsb2F0UXVhZDEzY29udGFpbnNQb2ludEVSS05TXzEwRmxvYXRQb2ludEUK
K19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMzZkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNv
b25JblF1YWRFUktOU18xMkdyYXBoaWNzUXVhZEUKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNzUXVh
ZDEzY29udGFpbnNQb2ludEVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTlTY3Jv
bGxiYXIxNW9mZnNldERpZENoYW5nZUV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXllcjE0c2Ny
b2xsUG9zaXRpb25FUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTl1cGRh
dGVUaHVtYlBvc2l0aW9uRXYKQEAgLTgwOTEsOSArODA5MSw5IEBAIF9fWk43V2ViQ29yZTIwVHJh
bnNmb3JtYXRpb25NYXRyaXg4bXVsdGkKIF9fWk5LN1dlYkNvcmUyMVJlbmRlckxheWVyQ29tcG9z
aXRvcjIxY2FuUmVuZGVyM0RUcmFuc2Zvcm1zRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVy
MTZjdXJyZW50VHJhbnNmb3JtRXYKIF9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4
N21hcFJlY3RFUktOU183SW50UmVjdEUKLV9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0
cml4N21hcFJlY3RFUktOU185RmxvYXRSZWN0RQotX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRp
b25NYXRyaXg3bWFwUXVhZEVSS05TXzlGbG9hdFF1YWRFCi1fX1pOSzdXZWJDb3JlMjBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDhtYXBQb2ludEVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmUy
MFRyYW5zZm9ybWF0aW9uTWF0cml4N21hcFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKK19fWk5L
N1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4N21hcFF1YWRFUktOU18xMkdyYXBoaWNzUXVh
ZEUKK19fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OG1hcFBvaW50RVJLTlNfMTNH
cmFwaGljc1BvaW50RQogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjVnZXRUcmFuc2Zvcm1G
cm9tQ29udGFpbmVyRVBLUzBfUktOU183SW50U2l6ZUVSTlNfMjBUcmFuc2Zvcm1hdGlvbk1hdHJp
eEUKIF9fWk43V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXg5dHJhbnNsYXRlRWRkCiBfX1pO
N1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlMTRhcHBseVRyYW5zZm9ybUVSS05TXzIwVHJhbnNmb3Jt
YXRpb25NYXRyaXhFTlMwXzIxVHJhbnNmb3JtQWNjdW11bGF0aW9uRQpAQCAtODQ4Myw5ICs4NDgz
LDkgQEAgX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMjJzZXRSZQogX19aTjdXZWJD
b3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTFzZXRBZGRpdGl2ZUViCiBfX1pON1dlYkNvcmUxOVBs
YXRmb3JtQ0FBbmltYXRpb24xMXNldEZpbGxNb2RlRU5TMF8xMkZpbGxNb2RlVHlwZUUKIF9fWk43
V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMzBzZXRUcmFuc2Zvcm1BbmltYXRpb25FbmRwb2ludHNF
UktOU18xN0tleWZyYW1lVmFsdWVMaXN0RVBLTlNfOUFuaW1hdGlvbkVQTlNfMTlQbGF0Zm9ybUNB
QW5pbWF0aW9uRWlOU18xOFRyYW5zZm9ybU9wZXJhdGlvbjEzT3BlcmF0aW9uVHlwZUViUktOU183
SW50U2l6ZUUKLV9fWk43V2ViQ29yZUwyNWdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWVFUEtOU18x
OFRyYW5zZm9ybU9wZXJhdGlvbkVOUzBfMTNPcGVyYXRpb25UeXBlRVJLTlNfN0ludFNpemVFUk5T
XzEyRmxvYXRQb2ludDNERQotX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTJzZXRG
cm9tVmFsdWVFUktOU18xMkZsb2F0UG9pbnQzREUKLV9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFu
aW1hdGlvbjEwc2V0VG9WYWx1ZUVSS05TXzEyRmxvYXRQb2ludDNERQorX19aTjdXZWJDb3JlTDI1
Z2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZUVQS05TXzE4VHJhbnNmb3JtT3BlcmF0aW9uRU5TMF8x
M09wZXJhdGlvblR5cGVFUktOU183SW50U2l6ZUVSTlNfMTVHcmFwaGljc1BvaW50M0RFCitfX1pO
N1dlYkNvcmUxOVBsYXRmb3JtQ0FBbmltYXRpb24xMnNldEZyb21WYWx1ZUVSS05TXzE1R3JhcGhp
Y3NQb2ludDNERQorX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTBzZXRUb1ZhbHVl
RVJLTlNfMTVHcmFwaGljc1BvaW50M0RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMx
dGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZUVQS05TXzE0QW5pbWF0aW9uVmFsdWVFUEtO
U185QW5pbWF0aW9uRQogX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTdzZXRUaW1p
bmdGdW5jdGlvbkVQS05TXzE0VGltaW5nRnVuY3Rpb25FCiBfX1pON1dlYkNvcmUxOVBsYXRmb3Jt
Q0FBbmltYXRpb24xNnNldFZhbHVlRnVuY3Rpb25FTlMwXzE3VmFsdWVGdW5jdGlvblR5cGVFCkBA
IC04NTU5LDkgKzg1NTksOSBAQCBfX1pOSzdXZWJDb3JlMThDb21wb3NpdGVBbmltYXRpb24xNmdl
dEFuCiBfX1pON1dlYkNvcmUxN0tleWZyYW1lQW5pbWF0aW9uMTZnZXRBbmltYXRlZFN0eWxlRVJO
M1dURjZSZWZQdHJJTlNfMTFSZW5kZXJTdHlsZUVFRQogX19aTjdXZWJDb3JlMjRIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUxNGFwcGx5VHJhbnNmb3JtRVJLTlNfMjBUcmFuc2Zvcm1hdGlvbk1hdHJp
eEVOUzBfMjFUcmFuc2Zvcm1BY2N1bXVsYXRpb25FCiBfX1pOSzdXZWJDb3JlMjRIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUxMW1hcHBlZFBvaW50RXYKLV9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0
aW9uTWF0cml4MTJwcm9qZWN0UG9pbnRFUktOU18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3Jl
MjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDEycHJvamVjdFBvaW50RVJLTlNfMTNHcmFwaGljc1BvaW50
RQogX19aTjdXZWJDb3JlMjRIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU3ZmxhdHRlbkV2Ci1fX1pO
SzdXZWJDb3JlMjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDExcHJvamVjdFF1YWRFUktOU185RmxvYXRR
dWFkRQorX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXgxMXByb2plY3RRdWFkRVJL
TlNfMTJHcmFwaGljc1F1YWRFCiBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMTNoaXRUZXN0Rmxv
YXRzRVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RWlpaWkKIF9fWk43
V2ViQ29yZTExUmVuZGVyQmxvY2syNGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbEVSTlNfMTNIaXRU
ZXN0UmVzdWx0RWlpaWkKIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94MThmbGlwRm9yV3JpdGluZ01v
ZGVFUktOU184SW50UG9pbnRFCkBAIC04Nzc5LDEwICs4Nzc5LDEwIEBAIF9fWk4zV1RGNlZlY3Rv
cklQTjdXZWJDb3JlOVJlbmRlckJveEVMbTAKIF9fWlRobjhfTjdXZWJDb3JlMjBIVE1MUGFyYWdy
YXBoRWxlbWVudEQwRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjNjcmVhdGVLZXlm
cmFtZUFuaW1hdGlvbkVQS05TXzlBbmltYXRpb25FTlNfMThBbmltYXRlZFByb3BlcnR5SURFYgog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EzMHNldFRyYW5zZm9ybUFuaW1hdGlvbktleWZy
YW1lc0VSS05TXzE3S2V5ZnJhbWVWYWx1ZUxpc3RFUEtOU185QW5pbWF0aW9uRVBOU18xOVBsYXRm
b3JtQ0FBbmltYXRpb25FaU5TXzE4VHJhbnNmb3JtT3BlcmF0aW9uMTNPcGVyYXRpb25UeXBlRWJS
S05TXzdJbnRTaXplRQotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyRmxvYXRQb2ludDNERUxt
MEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQorX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTE1R3JhcGhp
Y3NQb2ludDNERUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjNXVEY2VmVjdG9ySVBLTjdX
ZWJDb3JlMTRUaW1pbmdGdW5jdGlvbkVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTjdXZWJD
b3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTFzZXRLZXlUaW1lc0VSS04zV1RGNlZlY3RvcklmTG0w
RUVFCi1fX1pON1dlYkNvcmUxOVBsYXRmb3JtQ0FBbmltYXRpb245c2V0VmFsdWVzRVJLTjNXVEY2
VmVjdG9ySU5TXzEyRmxvYXRQb2ludDNERUxtMEVFRQorX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNB
QW5pbWF0aW9uOXNldFZhbHVlc0VSS04zV1RGNlZlY3RvcklOU18xNUdyYXBoaWNzUG9pbnQzREVM
bTBFRUUKIF9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjE4c2V0VGltaW5nRnVuY3Rp
b25zRVJLTjNXVEY2VmVjdG9ySVBLTlNfMTRUaW1pbmdGdW5jdGlvbkVMbTBFRUUKIF9fWk43V2Vi
Q29yZUwyOGNyZWF0ZUhUTUxMaW5rRWxlbWVudFdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNf
MTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xMUhUTUxFbGVtZW50RUVF
CiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTdKU0hUTUxMaW5rRWxlbWVudEVOU18x
NUhUTUxMaW5rRWxlbWVudEVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KQEAgLTg4NzYsNyArODg3Niw3IEBAIF9fWk43V2Vi
Q29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjEyc2V0RnIKIF9fWk43V2ViQ29yZTE5UGxhdGZvcm1D
QUFuaW1hdGlvbjEwc2V0VG9WYWx1ZUVSS05TXzIwVHJhbnNmb3JtYXRpb25NYXRyaXhFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTI4Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lc0VS
S05TXzE3S2V5ZnJhbWVWYWx1ZUxpc3RFUEtOU185QW5pbWF0aW9uRVJLTjNXVEY2U3RyaW5nRWQK
IF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFzZXRBbmltYXRpb25LZXlmcmFtZXNFUktO
U18xN0tleWZyYW1lVmFsdWVMaXN0RVBLTlNfOUFuaW1hdGlvbkVQTlNfMTlQbGF0Zm9ybUNBQW5p
bWF0aW9uRQotX19aTjdXZWJDb3JlMTlGbG9hdEFuaW1hdGlvblZhbHVlRDBFdgorX19aTjdXZWJD
b3JlMTEyR3JhcGhpY3NBbmltYXRpb25WYWx1ZUQwRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMjB1cGRhdGVPcGFjaXR5T25MYXllckV2CiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FM
YXllcjEwc2V0T3BhY2l0eUVmCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25F
UE5TXzVGcmFtZUVqCkBAIC05MDQ2LDkgKzkwNDYsOSBAQCBfX1pOSzdXZWJDb3JlMTBTdHlsZUlt
YWdlMTRpc1BlbmRpbmdJbWFnCiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJMaXN0SXRlbTM2cmVxdWly
ZXNGb3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uRXYKIF9fWk5LN1dlYkNvcmUxNlN0eWxlQ2Fj
aGVkSW1hZ2U1aW1hZ2VFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfN0ludFNpemVFCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDE0ZHJhd1RpbGVkSW1hZ2VFUE5TXzVJbWFnZUVOU18xMENv
bG9yU3BhY2VFUktOU183SW50UmVjdEVSS05TXzhJbnRQb2ludEVSS05TXzdJbnRTaXplRU5TXzE3
Q29tcG9zaXRlT3BlcmF0b3JFYgotX19aTjdXZWJDb3JlNUltYWdlOWRyYXdUaWxlZEVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RVJLTlNfMTBGbG9hdFBvaW50RVJLTlNfOUZs
b2F0U2l6ZUVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2Vi
Q29yZTVJbWFnZTlkcmF3VGlsZWRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFUktOU18xM0dyYXBoaWNzUG9pbnRFUktOU18xMkdyYXBoaWNzU2l6ZUVOU18xMENvbG9y
U3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNm
b3JtMTVzY2FsZU5vblVuaWZvcm1FZGQKLV9fWk43V2ViQ29yZTVJbWFnZTExZHJhd1BhdHRlcm5F
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE1QWZmaW5lVHJhbnNm
b3JtRVJLTlNfMTBGbG9hdFBvaW50RU5TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJh
dG9yRVM1XworX19aTjdXZWJDb3JlNUltYWdlMTFkcmF3UGF0dGVybkVQTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfMTNH
cmFwaGljc1BvaW50RU5TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRVM1Xwog
X19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZTI2bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVFdgog
X19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtMTJpc0ludmVydGlibGVFdgogX19aTjdXZWJD
b3JlMjRKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQxM3Zpc2l0Q2hpbGRyZW5FUk4zSlNDOU1hcmtT
dGFja0UKQEAgLTkwNjUsNyArOTA2NSw3IEBAIF9fWk43V2ViQ29yZTExQ2FudmFzU3R5bGUxNGFw
cGx5RmlsbENvbG8KIF9fWk43V2ViQ29yZTUxanNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90
b3R5cGVGdW5jdGlvbkZpbGxSZWN0RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDhmaWxsUmVjdEVmZmZmCiBfX1pOSzdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxMmZpbGxHcmFkaWVudEV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlNDBzZXRKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREdsb2JhbEFscGhhRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNP
YmplY3RFTlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQxNHNldEdsb2JhbEFscGhhRWYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OHNldEFs
cGhhRWYKQEAgLTkwNzUsOCArOTA3NSw4IEBAIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJENHMKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDVTdGF0ZUVMbTFFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk43V2ViQ29yZTI0Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJENVN0YXRlQzJFUktTMV8KIF9fWk43V2ViQ29yZTI0Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEMjVzZXRBbGxBdHRyaWJ1dGVzVG9EZWZhdWx0RXYKLV9fWk43V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0MTVzZXRMZWdhY3lTaGFkb3dFUktOU185RmxvYXRTaXplRWZS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDljbGVhclJlY3RFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQxNXNldExlZ2FjeVNoYWRvd0VSS05TXzEyR3JhcGhpY3NTaXplRWZSS05TXzVDb2xvckVOU18x
MENvbG9yU3BhY2VFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDljbGVhclJlY3RFUktO
U18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
N3Jlc3RvcmVFdgogX19aTjdXZWJDb3JlNFBhdGg5dHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFu
c2Zvcm1FCiBfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm0xMGlzSWRlbnRpdHlFdgpAQCAt
OTA4NCw3ICs5MDg0LDcgQEAgX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtN2ludmVyc2VF
dgogX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJENGlzMmRFdgogX19aTjdX
ZWJDb3JlNTVqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uR2V0SW1h
Z2VEYXRhRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pOSzdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQxMmdldEltYWdlRGF0YUVmZmZmUmkKLV9fWk5LN1dlYkNvcmUxN0hUTUxDYW52YXNF
bGVtZW50MjJjb252ZXJ0TG9naWNhbFRvRGV2aWNlRVJLTlNfOUZsb2F0UmVjdEUKK19fWk5LN1dl
YkNvcmUxN0hUTUxDYW52YXNFbGVtZW50MjJjb252ZXJ0TG9naWNhbFRvRGV2aWNlRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pOSzdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjI0Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhRVJLTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTVJbWFnZUJ1ZmZlckRhdGE3
Z2V0RGF0YUVSS05TXzdJbnRSZWN0RVJLTlNfN0ludFNpemVFYmIKIF9fWk43V2ViQ29yZUwyMnVu
cHJlbXVsdGl0cGx5U2NhbmxpbmVFUHZtCkBAIC05MTQxLDcgKzkxNDEsNyBAQCBfX1pON1dlYkNv
cmUxN0hUTUxDYW52YXNFbGVtZW50OXNldEhlaWdoCiBfX1pON1dlYkNvcmU1MmpzQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25EcmF3SW1hZ2VFUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTI2SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBO
M0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlk
cmF3SW1hZ2VFUE5TXzE2SFRNTEltYWdlRWxlbWVudEVmZlJpCi1fX1pON1dlYkNvcmUyNENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE2SFRNTEltYWdlRWxlbWVudEVSS05T
XzlGbG9hdFJlY3RFUzVfUktOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRVJpCitfX1pON1dlYkNvcmUy
NENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE2SFRNTEltYWdlRWxlbWVu
dEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X1JLTlNfMTdDb21wb3NpdGVPcGVyYXRvckVSaQogX19a
Tks3V2ViQ29yZTE2SFRNTEltYWdlRWxlbWVudDhjb21wbGV0ZUV2CiBfX1pON1dlYkNvcmUyMkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQxMWNoZWNrT3JpZ2luRVBLTlNfMTZIVE1MSW1hZ2VFbGVtZW50
RQogX19aTjdXZWJDb3JlMjJDYW52YXNSZW5kZXJpbmdDb250ZXh0MTFjaGVja09yaWdpbkVSS05T
XzRLVVJMRQpAQCAtOTE1MCw3ICs5MTUwLDcgQEAgX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmln
aW4xMnRhaW50c0NhbgogX19aTks3V2ViQ29yZTExQml0bWFwSW1hZ2UyM2hhc1NpbmdsZVNlY3Vy
aXR5T3JpZ2luRXYKIF9fWk43V2ViQ29yZUwyNXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2VFUlBL
dFMxX2NSTlNfMTdDU1NQcmltaXRpdmVWYWx1ZTlVbml0VHlwZXNFUmkKIF9fWk43V2ViQ29yZTI0
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJbWFnZUVQTlNfMTdIVE1MQ2FudmFzRWxlbWVu
dEVmZlJpCi1fX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VF
UE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFUktOU185RmxvYXRSZWN0RVM1X1JpCitfX1pON1dlYkNv
cmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE3SFRNTENhbnZhc0Vs
ZW1lbnRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9SaQogX19aTjdXZWJDb3JlMjJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MTFjaGVja09yaWdpbkVQS05TXzE3SFRNTENhbnZhc0VsZW1lbnRFCiBfX1pO
N1dlYkNvcmUxN0hUTUxDYW52YXNFbGVtZW50MjltYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJs
ZUV2CiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlMTVnZXRDR0ltYWdlQXJyYXlFdgpAQCAtOTE4
OSw3ICs5MTg5LDcgQEAgX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMgog
X19aTjdXZWJDb3JlMjFjb21wb3NpdGVPcGVyYXRvck5hbWVFTlNfMTdDb21wb3NpdGVPcGVyYXRv
ckUKIF9fWk43V2ViQ29yZUwxMXBhcnNlRG91YmxlRVBLdFMxX2NSZAogX19aTjdXZWJDb3JlMjRD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxJbWFnZUVsZW1lbnRF
ZmZmZlJpCi1fX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VF
UE5TXzE2SFRNTEltYWdlRWxlbWVudEVSS05TXzlGbG9hdFJlY3RFUzVfUmkKK19fWk43V2ViQ29y
ZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJbWFnZUVQTlNfMTZIVE1MSW1hZ2VFbGVt
ZW50RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfUmkKIF9fWk43V2ViQ29yZTlSZW5kZXJCb3gzM21h
cmtGb3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZEV2CiBfX1pOSzdXZWJDb3JlMTZTdHlsZUNh
Y2hlZEltYWdlMjJ1c2VzSW1hZ2VDb250YWluZXJTaXplRXYKIF9fWk43V2ViQ29yZTExQml0bWFw
SW1hZ2UyMGZyYW1lRHVyYXRpb25BdEluZGV4RW0KQEAgLTkyNzQsOCArOTI3NCw4IEBAIF9fWk43
V2ViQ29yZTE1SFRNTExpbmtFbGVtZW50MTlyZW1vdmVkRnIKIF9fWlRobjhfTjdXZWJDb3JlMTVI
VE1MSHRtbEVsZW1lbnREMEV2CiBfX1pON1dlYkNvcmU2M2pzQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEUHJvdG90eXBlRnVuY3Rpb25DcmVhdGVMaW5lYXJHcmFkaWVudEVQTjNKU0M5RXhlY1N0YXRl
RQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQyMGNyZWF0ZUxpbmVhckdy
YWRpZW50RWZmZmZSaQotX19aTjdXZWJDb3JlMTRDYW52YXNHcmFkaWVudEMxRVJLTlNfMTBGbG9h
dFBvaW50RVMzXwotX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18xMEZsb2F0UG9pbnRFUzNf
CitfX1pON1dlYkNvcmUxNENhbnZhc0dyYWRpZW50QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNf
CitfX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEzR3JhcGhpY3NQb2ludEVTM18KIF9fWk43
V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5T
XzE0Q2FudmFzR3JhZGllbnRFCiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTZKU0Nh
bnZhc0dyYWRpZW50RU5TXzE0Q2FudmFzR3JhZGllbnRFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4z
SlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dlYkNvcmUx
NWdldERPTVN0cnVjdHVyZUlOU18xNkpTQ2FudmFzR3JhZGllbnRFRUVQTjNKU0M5U3RydWN0dXJl
RVBOUzJfOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEUKQEAgLTkyODUsNyArOTI4
NSw3IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVzZXRGaWxsR3IKIF9fWk5LN1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDloYXNTaGFkb3dFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50
NXBhaW50RVBOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk43V2ViQ29yZThHcmFkaWVudDVwYWlu
dEVQOUNHQ29udGV4dAotX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2N0NHUG9pbnRFdgorX19a
Tks3V2ViQ29yZTEzR3JhcGhpY3NQb2ludGN2N0NHUG9pbnRFdgogX19aTjdXZWJDb3JlOEdyYWRp
ZW50MTZwbGF0Zm9ybUdyYWRpZW50RXYKIF9fWk43V2ViQ29yZThHcmFkaWVudDIwc29ydFN0b3Bz
SWZOZWNlc3NhcnlFdgogX19aTjdXZWJDb3JlMTZKU0NhbnZhc0dyYWRpZW50RDFFdgpAQCAtOTMy
MSwxMyArOTMyMSwxMyBAQCBfX1pON1dlYkNvcmUyN0pTQ2FudmFzR3JhZGllbnRDb25zdHJ1Y3Rv
CiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90SU43V2ViQ29yZTI3SlNDYW52YXNHcmFkaWVu
dENvbnN0cnVjdG9yRU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlI
YXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdX
ZWJDb3JlNjNqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRl
UmFkaWFsR3JhZGllbnRFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEMjBjcmVhdGVSYWRpYWxHcmFkaWVudEVmZmZmZmZSaQotX19aTjdXZWJD
b3JlMTRDYW52YXNHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RWZTM19mCi1fX1pON1dlYkNv
cmU4R3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2ludEVmUzNfZmYKK19fWk43V2ViQ29yZTE0Q2Fu
dmFzR3JhZGllbnRDMUVSS05TXzEzR3JhcGhpY3NQb2ludEVmUzNfZgorX19aTjdXZWJDb3JlOEdy
YWRpZW50QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFZlMzX2ZmCiBfX1pON1dlYkNvcmUyN0pTQ2Fu
dmFzR3JhZGllbnRDb25zdHJ1Y3RvckQxRXYKIF9fWk43V2ViQ29yZTU4anNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRQcm90b3R5cGVGdW5jdGlvbkNyZWF0ZUltYWdlRGF0YUVQTjNKU0M5RXhlY1N0
YXRlRQogX19aTjdXZWJDb3JlMjZKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDE1Y3JlYXRlSW1h
Z2VEYXRhRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pOSzdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQxNWNyZWF0ZUltYWdlRGF0YUVmZlJpCi1fX1pOSzdXZWJDb3JlMTdIVE1MQ2FudmFz
RWxlbWVudDIyY29udmVydExvZ2ljYWxUb0RldmljZUVSS05TXzlGbG9hdFNpemVFCitfX1pOSzdX
ZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDIyY29udmVydExvZ2ljYWxUb0RldmljZUVSS05TXzEy
R3JhcGhpY3NTaXplRQogX19aTjdXZWJDb3JlOUltYWdlRGF0YTZjcmVhdGVFUktOU183SW50U2l6
ZUUKIF9fWk43V2ViQ29yZTE2Q2FudmFzUGl4ZWxBcnJheTZjcmVhdGVFagogX19aTjdXZWJDb3Jl
MTF0b0ltYWdlRGF0YUVOM0pTQzdKU1ZhbHVlRQpAQCAtOTM2Myw3ICs5MzYzLDcgQEAgX19aTks3
V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJENwogX19aTjdXZWJDb3JlMTFsaW5lQ2Fw
TmFtZUVOU183TGluZUNhcEUKIF9fWk43V2ViQ29yZTQ2anNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRQcm90b3R5cGVGdW5jdGlvbkFyY0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQzYXJjRWZmZmZmYlJpCi1fX1pON1dlYkNvcmU0UGF0aDZh
ZGRBcmNFUktOU18xMEZsb2F0UG9pbnRFZmZmYgorX19aTjdXZWJDb3JlNFBhdGg2YWRkQXJjRVJL
TlNfMTNHcmFwaGljc1BvaW50RWZmZmIKIF9fWk43V2ViQ29yZTM1anNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRMaW5lV2lkdGhFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJ
ZGVudGlmaWVyRQogX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWxpbmVX
aWR0aEV2CiBfX1pON1dlYkNvcmUzNGpzQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJETGluZUpvaW5F
UE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtOTM4
Nyw3ICs5Mzg3LDcgQEAgX19aTjdXZWJDb3JlNDhqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAog
X19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ1YXJjVG9FZmZmZmZSaQogX19a
TjdXZWJDb3JlNTZqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uSXNQ
b2ludEluUGF0aEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQxM2lzUG9pbnRJblBhdGhFZmYKLV9fWk5LN1dlYkNvcmUxNUFmZmluZVRyYW5z
Zm9ybThtYXBQb2ludEVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybThtYXBQb2ludEVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTUxanND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90b3R5cGVGdW5jdGlvbkZpbGxUZXh0RVBOM0pTQzlF
eGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOGZpbGxU
ZXh0RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmU1M2pzQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEUHJvdG90eXBlRnVuY3Rpb25TdHJva2VUZXh0RVBOM0pTQzlFeGVjU3RhdGVFCkBAIC05
NDA5LDEwICs5NDA5LDEwIEBAIF9fWk43V2ViQ29yZTIySlNUZXh0TWV0cmljc1Byb3RvdHlwZUQx
RXYKIF9fWk43V2ViQ29yZTE1Q1NTRm9udFNlbGVjdG9yMzR1bnJlZ2lzdGVyRm9ySW52YWxpZGF0
aW9uQ2FsbGJhY2tzRVBOU18xOEZvbnRTZWxlY3RvckNsaWVudEUKIF9fWk5LM1dURjlIYXNoVGFi
bGVJUE43V2ViQ29yZTE4Rm9udFNlbGVjdG9yQ2xpZW50RVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0
b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U0ZmluZElT
M19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNfUzNfUzdfRUVFRU5TXzIySGFzaFRhYmxl
Q29uc3RJdGVyYXRvcklTM19TM19TNV9TN19TOV9TOV9FRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJs
ZUlQTjdXZWJDb3JlMThGb250U2VsZWN0b3JDbGllbnRFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3Rv
cklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTZyZW1vdmVF
UFMzXwotX19aTjdXZWJDb3JlNFBhdGg4YWRkQXJjVG9FUktOU18xMEZsb2F0UG9pbnRFUzNfZgot
X19aTjdXZWJDb3JlNFBhdGgxNmFkZEJlemllckN1cnZlVG9FUktOU18xMEZsb2F0UG9pbnRFUzNf
UzNfCitfX1pON1dlYkNvcmU0UGF0aDhhZGRBcmNUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19m
CitfX1pON1dlYkNvcmU0UGF0aDE2YWRkQmV6aWVyQ3VydmVUb0VSS05TXzEzR3JhcGhpY3NQb2lu
dEVTM19TM18KIF9fWk43V2ViQ29yZUwzNGNvcHlDbG9zaW5nU3VicGF0aHNBcHBsaWVyRnVuY3Rp
b25FUHZQSzEzQ0dQYXRoRWxlbWVudAotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFF1YWRDdXJ2ZVRv
RVJLTlNfMTBGbG9hdFBvaW50RVMzXworX19aTjdXZWJDb3JlNFBhdGgxNGFkZFF1YWRDdXJ2ZVRv
RVJLTlNfMTNHcmFwaGljc1BvaW50RVMzXwogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02
cm90YXRlRWQKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NnJvdGF0ZUVmCiBfX1pON1dl
YkNvcmUzNWpzRE9NV2luZG93Q2FudmFzUGF0dGVybkNvbnN0cnVjdG9yRVBOM0pTQzlFeGVjU3Rh
dGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTk3MTIsNyArOTcxMiw3IEBA
IF9fWk43V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTExZGF0YUNoYW4KIF9fWk43V2ViQ29yZTE2
UERGRG9jdW1lbnRJbWFnZTE0c2V0Q3VycmVudFBhZ2VFaQogX19aTks3V2ViQ29yZTE2UERGRG9j
dW1lbnRJbWFnZTRzaXplRXYKIF9fWk5LN1dlYkNvcmU1SW1hZ2UxM2lzQml0bWFwSW1hZ2VFdgot
X19aTjdXZWJDb3JlMTZQREZEb2N1bWVudEltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0UmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRv
ckUKK19fWk43V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTRkcmF3RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0
ZU9wZXJhdG9yRQogX19aTks3V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTlhZGp1c3RDVE1FUE5T
XzE1R3JhcGhpY3NDb250ZXh0RQogX19aTjdXZWJDb3JlTDE5ZnJhbWVzZXRDb25zdHJ1Y3RvckVS
S05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RVBOU18xNUhUTUxGb3JtRWxlbWVudEVi
CiBfX1pON1dlYkNvcmUxOUhUTUxGcmFtZVNldEVsZW1lbnQ2Y3JlYXRlRVJLTlNfMTNRdWFsaWZp
ZWROYW1lRVBOU184RG9jdW1lbnRFCkBAIC05NzkxLDE3ICs5NzkxLDE3IEBAIF9fWk43V2ViQ29y
ZTExTGF5b3V0U3RhdGVDMUVQTlNfMTJSZW5kZXIKIF9fWk43V2ViQ29yZTExTGF5b3V0U3RhdGVD
MkVQTlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUxMVJlbmRlclN0eWxlOHNldFJpZ2h0
RU5TXzZMZW5ndGhFCiBfX1pOSzdXZWJDb3JlMTBTaGFkb3dEYXRhMTlhZGp1c3RSZWN0Rm9yU2hh
ZG93RVJOU183SW50UmVjdEVpCi1fX1pON1dlYkNvcmUxMFNoYWRvd0JsdXJDMUVSS05TXzlGbG9h
dFNpemVFUzNfUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQotX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMTRkcmF3UmVjdFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRS
ZWN0RVJLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1ckMx
RVJLTlNfMTJHcmFwaGljc1NpemVFUzNfUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQorX19a
TjdXZWJDb3JlMTBTaGFkb3dCbHVyMTRkcmF3UmVjdFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCiBfX1pOSzdX
ZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMGNsaXBCb3VuZHNFdgotX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMjZjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdEVQTlNfMTVHcmFwaGljc0NvbnRleHRF
UktOU185RmxvYXRSZWN0RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIy
NmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEy
R3JhcGhpY3NSZWN0RVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNmFk
anVzdEJsdXJSYWRpdXNFUE5TXzE1R3JhcGhpY3NDb250ZXh0RQotX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMjRkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfOUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50U2l6ZUVTQ18K
K19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI0ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nRVBOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfMTRSb3VuZGVkUmVjdDVS
YWRpaUVSS05TXzdJbnRTaXplRVNDXwogX19aTjdXZWJDb3JlMTNTY3JhdGNoQnVmZmVyMTZnZXRT
Y3JhdGNoQnVmZmVyRVJLTlNfN0ludFNpemVFCi1fX1pOSzdXZWJDb3JlMTNTY3JhdGNoQnVmZmVy
MTdtYXRjaGVzTGFzdFNoYWRvd0VSS05TXzlGbG9hdFNpemVFUktOU181Q29sb3JFTlNfMTBDb2xv
clNwYWNlRVJLTlNfOUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCitfX1pOSzdX
ZWJDb3JlMTNTY3JhdGNoQnVmZmVyMTdtYXRjaGVzTGFzdFNoYWRvd0VSS05TXzEyR3JhcGhpY3NT
aXplRVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNf
MTRSb3VuZGVkUmVjdDVSYWRpaUUKIF9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjE2Ymx1clNoYWRv
d0J1ZmZlckVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMTRibHVyTGF5
ZXJJbWFnZUVQaFJLTlNfN0ludFNpemVFaQotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMTVkcmF3
TGF5ZXJQaWVjZXNFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE0
Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50U2l6ZUVTQ19OUzBfMTVTaGFkb3dEaXJlY3Rpb25F
CitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNWRyYXdMYXllclBpZWNlc0VQTlNfMTVHcmFwaGlj
c0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktO
U183SW50U2l6ZUVTQ19OUzBfMTVTaGFkb3dEaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU1VGltZXJJ
TlNfMTNTY3JhdGNoQnVmZmVyRUU1ZmlyZWRFdgogX19aTjdXZWJDb3JlMTNTY3JhdGNoQnVmZmVy
MTB0aW1lckZpcmVkRVBOU181VGltZXJJUzBfRUUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVj
dDI3b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyRVBTMF8KQEAgLTk5NzQsNyArOTk3NCw3IEBA
IF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjhwYXNzTW91c2VNb3YKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMjdwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWVFUk5TXzI4TW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0c0VQTlNfNUZyYW1lRVBOU18xM0hpdFRlc3RSZXN1bHRFCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVmlldzI1Y29udmVydEZyb21Db250YWluaW5nVmlld0VSS05TXzhJbnRQ
b2ludEUKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MTdjb252ZXJ0VG9SZW5kZXJlckVQS05TXzEy
UmVuZGVyT2JqZWN0RVJLTlNfOEludFBvaW50RQotX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0
MTVhYnNvbHV0ZVRvTG9jYWxFUktOU18xMEZsb2F0UG9pbnRFYmIKK19fWk5LN1dlYkNvcmUxMlJl
bmRlck9iamVjdDE1YWJzb2x1dGVUb0xvY2FsRVJLTlNfMTNHcmFwaGljc1BvaW50RWJiCiBfX1pO
SzdXZWJDb3JlOVJlbmRlckJveDIzbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnRFYmJSTlNfMTRUcmFu
c2Zvcm1TdGF0ZUUKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclZpZXcyM21hcEFic29sdXRlVG9Mb2Nh
bFBvaW50RWJiUk5TXzE0VHJhbnNmb3JtU3RhdGVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjI5cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWVFUk5TXzI4TW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0c0VQTlNfNUZyYW1lRQpAQCAtMTAyNjYsOSArMTAyNjYsOSBAQCBfX1pOSzdXZWJD
b3JlMjlTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlCiBfX1pOSzdXZWJDb3JlMTZTVkdUcmFuc2Zv
cm1MaXN0MTFjb25jYXRlbmF0ZUVSTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBfX1pON1dlYkNvcmUx
M1JlbmRlclNWR1BhdGgyMnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNFdgogX19aTks3V2ViQ29yZTE0
U1ZHUmVuZGVyU3R5bGUxMGhhc01hcmtlcnNFdgotX19aTjdXZWJDb3JlMTZTVkdSZW5kZXJTdXBw
b3J0MzNpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXNFUEtOU18xMlJlbmRlck9iamVj
dEVSTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDMzaW50ZXJz
ZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzRVBLTlNfMTJSZW5kZXJPYmplY3RFUk5TXzEyR3Jh
cGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdSb290MjJ1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzRXYKLV9fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDI5Y29tcHV0ZUNvbnRhaW5l
ckJvdW5kaW5nQm94ZXNFUEtOU18xMlJlbmRlck9iamVjdEVSTlNfOUZsb2F0UmVjdEVTNV9TNV8K
K19fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDI5Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5n
Qm94ZXNFUEtOU18xMlJlbmRlck9iamVjdEVSTlNfMTJHcmFwaGljc1JlY3RFUzVfUzVfCiBfX1pO
SzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGlzU1ZHSGlkZGVuQ29udGFpbmVyRXYKIF9fWk5LN1dl
YkNvcmUxM1JlbmRlclNWR1BhdGgyMmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm1FdgogX19aTks3V2Vi
Q29yZTEzUmVuZGVyU1ZHUGF0aDE3b2JqZWN0Qm91bmRpbmdCb3hFdgpAQCAtMTAyODMsNyArMTAy
ODMsNyBAQCBfX1pON1dlYkNvcmUxM1JlbmRlclNWR1Jvb3QyMWNvbXB1dGVSZWN0CiBfX1pOSzdX
ZWJDb3JlMTNSZW5kZXJTVkdSb290MjVsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtRXYKIF9fWk5L
N1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxMmN1cnJlbnRTY2FsZUV2CiBfX1pOSzdXZWJDb3JlMTNT
VkdTVkdFbGVtZW50MjJ2aWV3Qm94VG9WaWV3VHJhbnNmb3JtRWZmCi1fX1pON1dlYkNvcmUxNVNW
R0ZpdFRvVmlld0JveDIydmlld0JveFRvVmlld1RyYW5zZm9ybUVSS05TXzlGbG9hdFJlY3RFUktO
U18yMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9FZmYKK19fWk43V2ViQ29yZTE1U1ZHRml0VG9WaWV3
Qm94MjJ2aWV3Qm94VG9WaWV3VHJhbnNmb3JtRVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18yMlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9FZmYKIF9fWk5LN1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTdt
YXBSZWN0RVJLTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTNSZW5kZXJTVkdSb290MTltYXBM
b2NhbFRvQ29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJiUk5TXzE0VHJhbnNm
b3JtU3RhdGVFCiBfX1pON1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlMTRhcHBseVRyYW5zZm9ybUVS
S05TXzE1QWZmaW5lVHJhbnNmb3JtRU5TMF8yMVRyYW5zZm9ybUFjY3VtdWxhdGlvbkUKQEAgLTEw
Mjk3LDcgKzEwMjk3LDcgQEAgX19aTjdXZWJDb3JlMTdTTUlMVGltZUNvbnRhaW5lcjViZWdpbkV2
CiBfX1pON1dlYkNvcmUxN1NNSUxUaW1lQ29udGFpbmVyMTZ1cGRhdGVBbmltYXRpb25zRU5TXzhT
TUlMVGltZUUKIF9fWk43V2ViQ29yZTE3U01JTFRpbWVDb250YWluZXIxNHNvcnRCeVByaW9yaXR5
RVJOM1dURjZWZWN0b3JJUE5TXzE0U1ZHU01JTEVsZW1lbnRFTG0wRUVFTlNfOFNNSUxUaW1lRQog
X19aTjdXZWJDb3JlMTdTTUlMVGltZUNvbnRhaW5lcjEwc3RhcnRUaW1lckVOU184U01JTFRpbWVF
UzFfCi1fX1pON1dlYkNvcmU4U1ZHSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U185RmxvYXRSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQor
X19aTjdXZWJDb3JlOFNWR0ltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJH
cmFwaGljc1JlY3RFUzVfTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCiBf
X1pUaG42NF9ON1dlYkNvcmU5RnJhbWVWaWV3Mjl3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
ckVQTlNfOVNjcm9sbGJhckUKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MzRub3RpZnlQYWdlVGhh
dENvbnRlbnRBcmVhV2lsbFBhaW50RXYKIF9fWk5LN1dlYkNvcmUxN1Njcm9sbEFuaW1hdG9yTWFj
MjBjb250ZW50QXJlYVdpbGxQYWludEV2CkBAIC0xMDMwNiw3ICsxMDMwNiw3IEBAIF9fWk5LN1dl
YkNvcmUxM1JlbmRlclNWR1Jvb3QyMmxvY2FsVG9QYXIKIF9fWk43V2ViQ29yZTlQYWludEluZm8x
NGFwcGx5VHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBfX1pON1dlYkNvcmU5UmVu
ZGVyQm94NXBhaW50RVJOU185UGFpbnRJbmZvRWlpCiBfX1pON1dlYkNvcmUxM1JlbmRlclNWR1Bh
dGg1cGFpbnRFUk5TXzlQYWludEluZm9FaWkKLV9fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9y
dDMwcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE1
QWZmaW5lVHJhbnNmb3JtRVJLTlNfOVBhaW50SW5mb0UKK19fWk43V2ViQ29yZTE2U1ZHUmVuZGVy
U3VwcG9ydDMwcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0RVJLTlNfMTJHcmFwaGljc1Jl
Y3RFUktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzlQYWludEluZm9FCiBfX1pON1dlYkNvcmUx
NlNWR1JlbmRlclN1cHBvcnQyNXByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnRFUE5TXzEyUmVuZGVy
T2JqZWN0RVJOU185UGFpbnRJbmZvRQogX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTdmaWxs
QW5kU3Ryb2tlUGF0aEVQTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pON1dlYkNvcmVMMjNyZXF1
ZXN0UGFpbnRpbmdSZXNvdXJjZUVOU18yMVJlbmRlclNWR1Jlc291cmNlTW9kZUVQTlNfMTJSZW5k
ZXJPYmplY3RFUEtOU18xMVJlbmRlclN0eWxlRVJOU181Q29sb3JFCkBAIC0xMDQ4Miw5ICsxMDQ4
Miw5IEBAIF9fWk43V2ViQ29yZUwxMmNvbXBhcmVTdG9wc0VSS05TXzIwQ1NTR3IKIF9fWk5TdDE3
X1RlbXBvcmFyeV9idWZmZXJJUE43V2ViQ29yZTIwQ1NTR3JhZGllbnRDb2xvclN0b3BFUzFfRUQx
RXYKIF9fWk43V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZThwdXRJbWFnZUVSS05TXzdJ
bnRTaXplRU4zV1RGMTBQYXNzUmVmUHRySU5TXzVJbWFnZUVFRQogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxNGRyYXdUaWxlZEltYWdlRVBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJL
TlNfN0ludFJlY3RFUzZfTlMxXzhUaWxlUnVsZUVTN19OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIK
LV9fWk43V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRF
UktOU185RmxvYXRSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9y
RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0
RVJOU185R2VuZXJhdG9yRQotX19aTjdXZWJDb3JlOEdyYWRpZW50NGZpbGxFUE5TXzE1R3JhcGhp
Y3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2U0
ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9OU18xMENv
bG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUk5TXzlHZW5lcmF0b3JFCitfX1pO
N1dlYkNvcmU4R3JhZGllbnQ0ZmlsbEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBo
aWNzUmVjdEUKIF9fWk5LM1dURjlIYXNoVGFibGVJTjdXZWJDb3JlN0ludFNpemVFU3Q0cGFpcklT
Ml9qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM0X0VFTlNfN0ludEhhc2hJUzJfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQV9JakVFRUVTQl9FOGNvbnRhaW5z
SVMyX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNF9TOF9FRUVFYlJLVF8KIF9fWk43
V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2VEMEV2CiBfX1pON1dlYkNvcmUxOUNTU0JvcmRlckltYWdl
VmFsdWVEMEV2CkBAIC0xMTE4OCw4ICsxMTE4OCw4IEBAIF9fWk5LN1dlYkNvcmUxNUZvbnREZXNj
cmlwdGlvbjEzbGlnaHRlclcKIF9fWk5LN1dlYkNvcmUxM0hUTUxIUkVsZW1lbnQxMG1hcFRvRW50
cnlFUktOU18xM1F1YWxpZmllZE5hbWVFUk5TXzIwTWFwcGVkQXR0cmlidXRlRW50cnlFCiBfX1pO
N1dlYkNvcmUxM0hUTUxIUkVsZW1lbnQyMHBhcnNlTWFwcGVkQXR0cmlidXRlRVBOU185QXR0cmli
dXRlRQogX19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzZDR1JlY3RQOE5TV2luZG93Ci1fX1pO
N1dlYkNvcmU5RmxvYXRSZWN0NXNjYWxlRWZmCi1fX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VF
UktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0NXNj
YWxlRWZmCitfX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVQ
OE5TV2luZG93CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMmZpcnN0TGluZVN0eWxlU2xv
d0Nhc2VFdgogX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2sxNGZpcnN0TGluZUJsb2NrRXYKIF9f
Wk43V2ViQ29yZTEzV2lkdGhJdGVyYXRvcjIxbm9ybWFsaXplVm9pY2luZ01hcmtzRWkKQEAgLTEx
MjA2LDggKzExMjA2LDggQEAgX19aTjNXVEY2VmVjdG9ySU5TXzlSZXRhaW5QdHJJUEs4X19DVExp
bgogX19aTjdXZWJDb3JlMjFDb21wbGV4VGV4dENvbnRyb2xsZXIxNENvbXBsZXhUZXh0UnVuQzJF
UEs3X19DVFJ1blBLTlNfMTRTaW1wbGVGb250RGF0YUVQS3RqbTdDRlJhbmdlCiBfX1pON1dlYkNv
cmUyMUNvbXBsZXhUZXh0Q29udHJvbGxlcjIzYWRqdXN0R2x5cGhzQW5kQWR2YW5jZXNFdgogX19a
Tks3V2ViQ29yZTE2Rm9udFBsYXRmb3JtRGF0YTE5cm91bmRzR2x5cGhBZHZhbmNlc0V2Ci1fX1pO
N1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOU185RmxvYXRSZWN0RUUxOGxvY2F0ZVBhZ2VTbG93
Q2FzZUVqCi1fX1pOSzNXVEY3SGFzaE1hcElpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5T
MV85RmxvYXRSZWN0RUUxNkdseXBoTWV0cmljc1BhZ2VFTlNfN0ludEhhc2hJakVFTlNfMTBIYXNo
VHJhaXRzSWlFRU5TOV9JUzZfRUVFM2dldEVSS2kKK19fWk43V2ViQ29yZTE1R2x5cGhNZXRyaWNz
TWFwSU5TXzEyR3JhcGhpY3NSZWN0RUUxOGxvY2F0ZVBhZ2VTbG93Q2FzZUVqCitfX1pOSzNXVEY3
SGFzaE1hcElpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TMV8xMkdyYXBoaWNzUmVjdEVF
MTZHbHlwaE1ldHJpY3NQYWdlRU5TXzdJbnRIYXNoSWpFRU5TXzEwSGFzaFRyYWl0c0lpRUVOUzlf
SVM2X0VFRTNnZXRFUktpCiBfX1pON1dlYkNvcmUyMUNvbXBsZXhUZXh0Q29udHJvbGxlcjE0Q29t
cGxleFRleHRSdW4xN3NldElzTm9uTW9ub3RvbmljRXYKIF9fWk43V2ViQ29yZTIxQ29tcGxleFRl
eHRDb250cm9sbGVyRDFFdgogX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMjFD
b21wbGV4VGV4dENvbnRyb2xsZXIxNENvbXBsZXhUZXh0UnVuRUVFTG0xNkVFRDFFdgpAQCAtMTEy
MzgsNyArMTEyMzgsNyBAQCBfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTlkZWZhdWx0
CiBfX1pOSzdXZWJDb3JlMTZIVE1MRWxlbWVudFN0YWNrMTNpbkJ1dHRvblNjb3BlRVJLTlNfMTNR
dWFsaWZpZWROYW1lRQogX19aTjdXZWJDb3JlTDIyZGVjb2RlTm9uQVNDSUlTZXF1ZW5jZUVQS2hq
CiBfX1pON1dlYkNvcmUyMFJlbmRlckJveE1vZGVsT2JqZWN0MjFjbGlwQm9yZGVyU2lkZVBvbHln
b25FUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTRSb3VuZGVkUmVjdEVTNV9OU183Qm94U2lk
ZUViYgotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2NsaXBDb252ZXhQb2x5Z29uRW1Q
S05TXzEwRmxvYXRQb2ludEViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE3Y2xpcENv
bnZleFBvbHlnb25FbVBLTlNfMTNHcmFwaGljc1BvaW50RWIKIF9fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0OGNsaXBQYXRoRVJLTlNfNFBhdGhFTlNfOFdpbmRSdWxlRQogX19aTjNXVEY5SGFz
aFRhYmxlSVBLTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUVTNF9OU18xN0lkZW50aXR5RXh0cmFj
dG9ySVM0X0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xMEhhc2hUcmFpdHNJUzRfRUVTQV9FM2FkZElT
NF9TNF9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzRfUzRfUzhfRUVFRVN0NHBhaXJJTlNf
MTdIYXNoVGFibGVJdGVyYXRvcklTNF9TNF9TNl9TOF9TQV9TQV9FRWJFUktUX1JLVDBfCiBfX1pO
M1dURjlIYXNoVGFibGVJUEtON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRVM0X05TXzE3SWRlbnRp
dHlFeHRyYWN0b3JJUzRfRUVOU183UHRySGFzaElTNF9FRU5TXzEwSGFzaFRyYWl0c0lTNF9FRVNB
X0U2ZXhwYW5kRXYKQEAgLTExMzE4LDggKzExMzE4LDggQEAgX19aTkszV1RGMTJTdHJpbmdBcHBl
bmRJUEtjTlNfNlN0cmluZ0VFYwogX19aTjdXZWJDb3JlMjRTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIzNWV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzRXYKIF9fWk5LN1dlYkNvcmUx
N1hNTERvY3VtZW50UGFyc2VyMTBsaW5lTnVtYmVyRXYKIF9fWk43V2ViQ29yZTIxU1ZHRG9jdW1l
bnRFeHRlbnNpb25zMzZyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXRFUE5TXzEw
U1ZHRWxlbWVudEUKLV9fWk43V2ViQ29yZTE1U1ZHRml0VG9WaWV3Qm94MTJwYXJzZVZpZXdCb3hF
UE5TXzhEb2N1bWVudEVSUEt0UzRfUk5TXzlGbG9hdFJlY3RFYgotX19aVGhuMzEyX043V2ViQ29y
ZTEzU1ZHU1ZHRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitf
X1pON1dlYkNvcmUxNVNWR0ZpdFRvVmlld0JveDEycGFyc2VWaWV3Qm94RVBOU184RG9jdW1lbnRF
UlBLdFM0X1JOU18xMkdyYXBoaWNzUmVjdEViCitfX1pUaG4zMTJfTjdXZWJDb3JlMTNTVkdTVkdF
bGVtZW50MTlzZXRWaWV3Qm94QmFzZVZhbHVlRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dl
YkNvcmUyMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8yNHBhcnNlUHJlc2VydmVBc3BlY3RSYXRpb0VS
UEt0UzJfYlJiCiBfX1pUaG4zMTJfTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MzFzZXRQcmVzZXJ2
ZUFzcGVjdFJhdGlvQmFzZVZhbHVlRVJLTlNfMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvRQogX19a
TjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxNlNWR1N0eWxlZEVsZW1lbnRFUzNfTlNfMTdJZGVu
dGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VF
UzlfRTNhZGRJUzNfUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1MzX1M3X0VFRUVT
dDRwYWlySU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzNfUzVfUzdfUzlfUzlfRUViRVJLVF9S
S1QwXwpAQCAtMTE0ODQsOCArMTE0ODQsOCBAQCBfX1pOSzdXZWJDb3JlMTRSZW5kZXJTVkdJbWFn
ZTE3c3Ryb2tlQm91CiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJTVkdJbWFnZTI5cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXNFdgogX19aTks3V2ViQ29yZTEzUmVuZGVyU1ZHVGV4dDE3c3Ryb2tl
Qm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEzUmVuZGVyU1ZHVGV4dDI5cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXNFdgotX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9jazEzYWJzb2x1dGVR
dWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFCi1fX1pON1dlYkNvcmUxMENs
aWVudFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMTNh
YnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCitfX1pO
N1dlYkNvcmUxMENsaWVudFJlY3RDMUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3Jl
NHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBDbGll
bnRSZWN0RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzEySlNDbGllbnRSZWN0RU5T
XzEwQ2xpZW50UmVjdEVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18x
N0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTE1Z2V0RE9NU3RydWN0dXJlSU5T
XzEySlNDbGllbnRSZWN0RUVFUE4zSlNDOVN0cnVjdHVyZUVQTlMyXzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFCkBAIC0xMTUyNCw3ICsxMTUyNCw3IEBAIF9fWk43V2ViQ29yZTEy
SlNTVkdFbGVtZW50MThnZXRPd25Qcm9wZXIKIF9fWk4zSlNDMThnZXRTdGF0aWNWYWx1ZVNsb3RJ
TjdXZWJDb3JlMTJKU1NWR0VsZW1lbnRFTlMxXzlKU0VsZW1lbnRFRUViUE5TXzlFeGVjU3RhdGVF
UEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
IF9fWk43V2ViQ29yZTI0SlNTVkdTVkdFbGVtZW50UHJvdG90eXBlMThnZXRPd25Qcm9wZXJ0eVNs
b3RFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFUk5TMV8xMlByb3BlcnR5U2xv
dEUKIF9fWk4zSlNDMjFnZXRTdGF0aWNQcm9wZXJ0eVNsb3RJTjdXZWJDb3JlMjRKU1NWR1NWR0Vs
ZW1lbnRQcm90b3R5cGVFTlNfOEpTT2JqZWN0RUVFYlBOU185RXhlY1N0YXRlRVBLTlNfOUhhc2hU
YWJsZUVQVF9SS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOSzdXZWJD
b3JlMTBTVkdFbGVtZW50MTFib3VuZGluZ0JveEVSTlNfOUZsb2F0UmVjdEVOU18xMlNWR0xvY2F0
YWJsZTE5U3R5bGVVcGRhdGVTdHJhdGVneUUKK19fWk5LN1dlYkNvcmUxMFNWR0VsZW1lbnQxMWJv
dW5kaW5nQm94RVJOU18xMkdyYXBoaWNzUmVjdEVOU18xMlNWR0xvY2F0YWJsZTE5U3R5bGVVcGRh
dGVTdHJhdGVneUUKIF9fWk5LN1dlYkNvcmUyNVNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQxN2lz
U3R5bGVkTG9jYXRhYmxlRXYKIF9fWk5LN1dlYkNvcmUyNVNWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQ3Z2V0QkJveEVOU18xMlNWR0xvY2F0YWJsZTE5U3R5bGVVcGRhdGVTdHJhdGVneUUKIF9fWk43
V2ViQ29yZTEyU1ZHTG9jYXRhYmxlN2dldEJCb3hFUEtOU18xMFNWR0VsZW1lbnRFTlMwXzE5U3R5
bGVVcGRhdGVTdHJhdGVneUUKQEAgLTExNTg1LDcgKzExNTg1LDcgQEAgX19aTjdXZWJDb3JlMTZT
VkdSb290SW5saW5lQm94RDBFdgogX19aTjdXZWJDb3JlMTZTVkdJbmxpbmVUZXh0Qm94RDBFdgog
X19aTjdXZWJDb3JlMTRSZW5kZXJTVkdJbWFnZTVwYWludEVSTlNfOVBhaW50SW5mb0VpaQogX19a
TjdXZWJDb3JlMTNSZW5kZXJTVkdUZXh0NXBhaW50RVJOU185UGFpbnRJbmZvRWlpCi1fX1pON1dl
YkNvcmUyMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8xM3RyYW5zZm9ybVJlY3RFUk5TXzlGbG9hdFJl
Y3RFUzJfCitfX1pON1dlYkNvcmUyMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8xM3RyYW5zZm9ybVJl
Y3RFUk5TXzEyR3JhcGhpY3NSZWN0RVMyXwogX19aTjdXZWJDb3JlMTZTVkdSb290SW5saW5lQm94
NXBhaW50RVJOU185UGFpbnRJbmZvRWlpaWkKIF9fWk43V2ViQ29yZTE2U1ZHSW5saW5lRmxvd0Jv
eDM3Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlckVQTlNfMTlSZW5kZXJTVkdJ
bmxpbmVUZXh0RQogX19aTjdXZWJDb3JlMTZTVkdJbmxpbmVUZXh0Qm94NXBhaW50RVJOU185UGFp
bnRJbmZvRWlpaWkKQEAgLTExOTYzLDggKzExOTYzLDggQEAgX19aTjdXZWJDb3JlMjBSZW5kZXJF
bWJlZGRlZE9iamVjdDMwc2V0UwogX19aTjdXZWJDb3JlMTdtaXNzaW5nUGx1Z2luVGV4dEV2CiBf
X1pON1dlYkNvcmUyN0RlZmF1bHRMb2NhbGl6YXRpb25TdHJhdGVneTE3bWlzc2luZ1BsdWdpblRl
eHRFdgogX19aTjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRlZE9iamVjdDEzcGFpbnRSZXBsYWNlZEVS
TlNfOVBhaW50SW5mb0VpaQotX19aTjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRlZE9iamVjdDI2Z2V0
UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnlFaWlSTlNfOUZsb2F0UmVjdEVSTlNfNFBhdGhFUzJfUk5T
XzRGb250RVJOU183VGV4dFJ1bkVSZgotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRSZWN0
RVJLTlNfOUZsb2F0UmVjdEVSS05TXzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmUyMFJlbmRlckVt
YmVkZGVkT2JqZWN0MjZnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeUVpaVJOU18xMkdyYXBoaWNz
UmVjdEVSTlNfNFBhdGhFUzJfUk5TXzRGb250RVJOU183VGV4dFJ1bkVSZgorX19aTjdXZWJDb3Jl
NFBhdGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xMkdyYXBoaWNz
U2l6ZUUKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU5SFRNTFRva2VuOUF0dHJpYnV0ZUVMbTEw
RUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRU43V2ViQ29y
ZTlIVE1MVG9rZW45QXR0cmlidXRlRUU0bW92ZUVQS1MzX1M2X1BTM18KIF9fWk43V2ViQ29yZTlI
VE1MVG9rZW45QXR0cmlidXRlQzFFUktTMV8KQEAgLTE0MTMyLDggKzE0MTMyLDggQEAgX19aTjdX
ZWJDb3JlMjhTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbAogX19aTks3V2ViQ29yZTExRWRpdENv
bW1hbmQxOWlzQ3JlYXRlTGlua0NvbW1hbmRFdgogX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTE0
RG9jdW1lbnRNYXJrZXJFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM1dURjExVmVjdG9y
TW92ZXJJTGIwRU43V2ViQ29yZTE0RG9jdW1lbnRNYXJrZXJFRTRtb3ZlRVBLUzJfUzVfUFMyXwot
X19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MjhwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2Vy
RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2ludEVSS05TXzE0RG9jdW1lbnRN
YXJrZXJFUE5TXzExUmVuZGVyU3R5bGVFUktOU180Rm9udEViCi1fX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDIzZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmdFUktOU18xMEZsb2F0UG9pbnRFZk5T
MF8yMVRleHRDaGVja2luZ0xpbmVTdHlsZUUKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI4
cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18x
M0dyYXBoaWNzUG9pbnRFUktOU18xNERvY3VtZW50TWFya2VyRVBOU18xMVJlbmRlclN0eWxlRVJL
TlNfNEZvbnRFYgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyM2RyYXdMaW5lRm9yVGV4
dENoZWNraW5nRVJLTlNfMTNHcmFwaGljc1BvaW50RWZOUzBfMjFUZXh0Q2hlY2tpbmdMaW5lU3R5
bGVFCiBfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMjJSZW5kZXJlZERvY3VtZW50TWFya2VyRUxt
MEVFNmluc2VydElTMl9FRXZtUktUXwogX19aTjdXZWJDb3JlMjBDb21wb3NpdGVFZGl0Q29tbWFu
ZDI3YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkRVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29y
ZUwyMGV4ZWN1dGVGb3J3YXJkRGVsZXRlRVBOU181RnJhbWVFUE5TXzVFdmVudEVOU18xOUVkaXRv
ckNvbW1hbmRTb3VyY2VFUktOM1dURjZTdHJpbmdFCkBAIC0xNDIyNCw3ICsxNDIyNCw3IEBAIF9f
Wk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjMwcmlnaHRWaXMKIF9fWk5LN1dlYkNvcmU4UG9z
aXRpb24xNnByaW1hcnlEaXJlY3Rpb25FdgogX19aTks3V2ViQ29yZTE5SFRNTFRleHRBcmVhRWxl
bWVudDI5aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnRFUE5TXzIzQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnRFCiBfX1pOSzdXZWJDb3JlMTlIVE1MVGV4dEFyZWFFbGVtZW50OW1heExlbmd0aEV2
Ci1fX1pOSzdXZWJDb3JlNEZvbnQyN3NlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dEVSS05TXzdU
ZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpaQorX19aTks3V2ViQ29yZTRGb250MjdzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHRFUktOU183VGV4dFJ1bkVSS05TXzEzR3JhcGhpY3NQb2ludEVp
aWkKIF9fWk43V2ViQ29yZTIxQ29tcGxleFRleHRDb250cm9sbGVyN2FkdmFuY2VFalBOU18xMUds
eXBoQnVmZmVyRQogX19aTjdXZWJDb3JlMjZSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTE3c3Vi
dHJlZUhhc0NoYW5nZWRFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIzdGV4dERpZENoYW5nZUluVGV4
dEFyZWFFUE5TXzdFbGVtZW50RQpAQCAtMTQyMzIsNyArMTQyMzIsNyBAQCBfX1oza2l0UE43V2Vi
Q29yZTE5SFRNTFRleHRBcmVhRWxlbWVudEUKIF9fWk43V2ViQ29yZTVSYW5nZTExc2V0RW5kQWZ0
ZXJFUE5TXzROb2RlRVJpCiBfX1pOSzdXZWJDb3JlNVJhbmdlMTFjaGVja05vZGVCQUVQTlNfNE5v
ZGVFUmkKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQzM3ByZXZpb3VzT2Zmc2V0Rm9yQmFja3dh
cmREZWxldGlvbkVpCi1fX1pOSzdXZWJDb3JlNEZvbnQxNWRyYXdDb21wbGV4VGV4dEVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaQorX19aTks3
V2ViQ29yZTRGb250MTVkcmF3Q29tcGxleFRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNf
N1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWkKIF9fWk5LN1dlYkNvcmU0Rm9udDM0Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dEVSS05TXzdUZXh0UnVuRWlpUk5TXzExR2x5
cGhCdWZmZXJFTlMwXzIwRm9yVGV4dEVtcGhhc2lzT3JOb3RFCiBfX1pON1dlYkNvcmUxMUdseXBo
QnVmZmVyM2FkZEV0UEtOU18xNFNpbXBsZUZvbnREYXRhRTZDR1NpemUKIF9fWk5LN1dlYkNvcmUx
NlJlbmRlckxpc3RNYXJrZXIxOGNhbkJlU2VsZWN0aW9uTGVhZkV2CkBAIC0xNDI2Nyw3ICsxNDI2
Nyw3IEBAIF9fWk43V2ViQ29yZTE0Um91bmRlZFJlY3Q1UmFkaWk1c2NhbGVFZgogX19aTjdXZWJD
b3JlMTRSb3VuZGVkUmVjdDE5aW5jbHVkZUxvZ2ljYWxFZGdlc0VSS05TMF81UmFkaWlFYmJiCiBf
X1pON1dlYkNvcmUxNFJvdW5kZWRSZWN0NVJhZGlpNmV4cGFuZEVpaWlpCiBfX1pON1dlYkNvcmU0
UGF0aDE0YWRkUm91bmRlZFJlY3RFUktOU18xNFJvdW5kZWRSZWN0RQotX19aTjdXZWJDb3JlNFBh
dGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzlGbG9hdFNpemVFUzZfUzZf
UzZfCitfX1pON1dlYkNvcmU0UGF0aDE0YWRkUm91bmRlZFJlY3RFUktOU18xMkdyYXBoaWNzUmVj
dEVSS05TXzEyR3JhcGhpY3NTaXplRVM2X1M2X1M2XwogX19aTjdXZWJDb3JlMjFjcmVhdGVMaXN0
SXRlbUVsZW1lbnRFUE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTEzSFRNTExJRWxlbWVudDZj
cmVhdGVFUE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTM5anNEb2N1bWVudFByb3RvdHlwZUZ1
bmN0aW9uR2V0U2VsZWN0aW9uRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0xNDM4MSwxMiArMTQzODEs
MTIgQEAgX19aTjNXVEY5SGFzaFRhYmxlSU43V2ViQ29yZTdJbnRTaXplRVN0NAogX19aTjNXVEY5
SGFzaFRhYmxlSU43V2ViQ29yZTdJbnRTaXplRVN0NHBhaXJJUzJfTlNfNlJlZlB0cklOUzFfNUlt
YWdlRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN0ludEhhc2hJUzJfRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TRF9JUzZfRUVFRVNFX0U2cmVt
b3ZlRVBTN18KIF9fWk4zV1RGOUhhc2hUYWJsZUlON1dlYkNvcmU3SW50U2l6ZUVTdDRwYWlySVMy
X05TXzZSZWZQdHJJTlMxXzVJbWFnZUVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5T
XzdJbnRIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVO
U0RfSVM2X0VFRUVTRV9FRDFFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyM2ZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlRVJLTlNfN0ludFJlY3RFUktOU18xNFJvdW5kZWRSZWN0RVJLTlNf
NUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKLV9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjE1ZHJhd0lu
c2V0U2hhZG93RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUzVfUktOU18x
NFJvdW5kZWRSZWN0NVJhZGlpRQotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMjVkcmF3SW5zZXRT
aGFkb3dXaXRoVGlsaW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUzVf
UktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFNpemVFU0NfCi1fX1pOSzdXZWJDb3Jl
MTNTY3JhdGNoQnVmZmVyMjJtYXRjaGVzTGFzdEluc2V0U2hhZG93RVJLTlNfOUZsb2F0U2l6ZUVS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFUktOU185RmxvYXRSZWN0RVNBX1JLTlNfMTRSb3Vu
ZGVkUmVjdDVSYWRpaUUKLV9fWk43V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2UxMWRyYXdQYXR0ZXJu
RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUktOU18xNUFmZmluZVRyYW5z
Zm9ybUVSS05TXzEwRmxvYXRQb2ludEVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVy
YXRvckVTNV8KLV9fWk43V2ViQ29yZThHcmFkaWVudDMxYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVk
RHJhd2luZ0VSTlNfN0ludFNpemVFUk5TXzlGbG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxMUltYWdl
QnVmZmVyMTFkcmF3UGF0dGVybkVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0
RVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU18xMEZsb2F0UG9pbnRFTlNfMTBDb2xvclNwYWNl
RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFUzVfCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNWRy
YXdJbnNldFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVT
NV9SS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIyNWRy
YXdJbnNldFNoYWRvd1dpdGhUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFw
aGljc1JlY3RFUzVfUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFNpemVFU0NfCitf
X1pOSzdXZWJDb3JlMTNTY3JhdGNoQnVmZmVyMjJtYXRjaGVzTGFzdEluc2V0U2hhZG93RVJLTlNf
MTJHcmFwaGljc1NpemVFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRVJLTlNfMTJHcmFwaGlj
c1JlY3RFU0FfUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRQorX19aTjdXZWJDb3JlMTRHZW5lcmF0
ZWRJbWFnZTExZHJhd1BhdHRlcm5FUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFUktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xMENv
bG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckVTNV8KK19fWk43V2ViQ29yZThHcmFkaWVu
dDMxYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZ0VSTlNfN0ludFNpemVFUk5TXzEyR3Jh
cGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjExZHJhd1BhdHRlcm5FUE5TXzE1
R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xNUFmZmluZVRyYW5zZm9y
bUVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVy
YXRvckVTNV8KIF9fWk43V2ViQ29yZTVJbWFnZTE0c3RhcnRBbmltYXRpb25FYgogX19aTjNXVEY5
SGFzaFRhYmxlSVBON1dlYkNvcmUyMFJlbmRlckJveE1vZGVsT2JqZWN0RVN0NHBhaXJJUzNfTlNf
N0hhc2hNYXBJUEt2TlMxXzdJbnRTaXplRU5TXzdQdHJIYXNoSVM3X0VFTlNfMTBIYXNoVHJhaXRz
SVM3X0VFTlNCX0lTOF9FRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNGX0VFTlM5X0lTM19F
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNCX0lTM19FRU5TQl9JU0VfRUVFRVNLX0UxNmxvb2t1cEZv
cldyaXRpbmdFUktTM18KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMjBSZW5kZXJCb3hN
b2RlbE9iamVjdEVTdDRwYWlySVMzX05TXzdIYXNoTWFwSVBLdk5TMV83SW50U2l6ZUVOU183UHRy
SGFzaElTN19FRU5TXzEwSGFzaFRyYWl0c0lTN19FRU5TQl9JUzhfRUVFRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTRl9FRU5TOV9JUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TQl9JUzNfRUVO
U0JfSVNFX0VFRUVTS19FM2FkZElTM19TRV9OU18xN0hhc2hNYXBUcmFuc2xhdG9ySVNGX1NNX1NJ
X0VFRUVTNF9JTlNfMTdIYXNoVGFibGVJdGVyYXRvcklTM19TRl9TSF9TSV9TTV9TS19FRWJFUktU
X1JLVDBfCkBAIC0xNDM5NCw3ICsxNDM5NCw3IEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJD
b3JlMjBSZW5kZXJCb3gKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMjBSZW5kZXJCb3hN
b2RlbE9iamVjdEVTdDRwYWlySVMzX05TXzdIYXNoTWFwSVBLdk5TMV83SW50U2l6ZUVOU183UHRy
SGFzaElTN19FRU5TXzEwSGFzaFRyYWl0c0lTN19FRU5TQl9JUzhfRUVFRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTRl9FRU5TOV9JUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TQl9JUzNfRUVO
U0JfSVNFX0VFRUVTS19FNnJlaGFzaEVpCiBfX1pTdDE2X19tZXJnZV9iYWNrd2FyZElQTjdXZWJD
b3JlMjBDU1NHcmFkaWVudENvbG9yU3RvcEVTMl9TMl9QRmJSS1MxX1M0X0VFVDFfVF9TOF9UMF9T
OV9TN19UMl8KIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDM1Ym9yZGVySW1hZ2VJc0xvYWRl
ZEFuZENhbkJlUmVuZGVyZWRFdgotX19aTks3V2ViQ29yZTIwUmVuZGVyQm94TW9kZWxPYmplY3Qy
OGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2VFUktOU185RmxvYXRTaXplRQorX19aTks3V2Vi
Q29yZTIwUmVuZGVyQm94TW9kZWxPYmplY3QyOGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2VF
UktOU18xMkdyYXBoaWNzU2l6ZUUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043
V2ViQ29yZTdJbnRTaXplRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNo
SVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VF
RUVTRF9FMTZsb29rdXBGb3JXcml0aW5nRVJLUzJfCiBfX1pOM1dURjlIYXNoVGFibGVJUEt2U3Q0
cGFpcklTMl9ON1dlYkNvcmU3SW50U2l6ZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVO
U183UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VF
TlNDX0lTNV9FRUVFU0RfRTNhZGRJUzJfUzVfTlNfMTdIYXNoTWFwVHJhbnNsYXRvcklTNl9TRl9T
QV9FRUVFUzNfSU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzJfUzZfUzhfU0FfU0ZfU0RfRUViRVJL
VF9SS1QwXwogX19aTjNXVEY5SGFzaFRhYmxlSVBLdlN0NHBhaXJJUzJfTjdXZWJDb3JlN0ludFNp
emVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM2X0VFTlNfN1B0ckhhc2hJUzJfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQ19JUzVfRUVFRVNEX0UzYWRkSVMy
X1M2X05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNl9TQV9FRUVFUzNfSU5TXzE3SGFz
aFRhYmxlSXRlcmF0b3JJUzJfUzZfUzhfU0FfU0ZfU0RfRUViRVJLVF9SS1QwXwpAQCAtMTQ0Nzcs
MTIgKzE0NDc3LDEyIEBAIF9fWk43V2ViQ29yZTQxanNET01TZWxlY3Rpb25Qcm90b3R5cGVGdW4K
IF9fWk43V2ViQ29yZTEyRE9NU2VsZWN0aW9uMTBnZXRSYW5nZUF0RWlSaQogX19aTjdXZWJDb3Jl
Mzhqc1JhbmdlUHJvdG90eXBlRnVuY3Rpb25HZXRDbGllbnRSZWN0c0VQTjNKU0M5RXhlY1N0YXRl
RQogX19aTks3V2ViQ29yZTVSYW5nZTE0Z2V0Q2xpZW50UmVjdHNFdgotX19aTks3V2ViQ29yZTVS
YW5nZTIxZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVM
bTBFRUUKLV9fWk43V2ViQ29yZTEwUmVuZGVyVGV4dDIxYWJzb2x1dGVRdWFkc0ZvclJhbmdlRVJO
M1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUVqamIKLV9fWk43V2ViQ29yZUw1MmFkanVz
dEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGVFUk4zV1RGNlZl
Y3RvcklOU185RmxvYXRRdWFkRUxtMEVFRVBOU184RG9jdW1lbnRFUE5TXzEyUmVuZGVyT2JqZWN0
RQotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTlGbG9hdFF1YWRFTG0wRUU2YXBwZW5kSVMyX0VF
dlBLVF9tCi1fX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFUktOM1dURjZWZWN0b3JJTlNf
OUZsb2F0UXVhZEVMbTBFRUUKLV9fWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMkVSS04zV1RG
NlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRQorX19aTks3V2ViQ29yZTVSYW5nZTIxZ2V0Qm9y
ZGVyQW5kVGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCitf
X1pON1dlYkNvcmUxMFJlbmRlclRleHQyMWFic29sdXRlUXVhZHNGb3JSYW5nZUVSTjNXVEY2VmVj
dG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRWpqYgorX19aTjdXZWJDb3JlTDUyYWRqdXN0Rmxv
YXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZUVSTjNXVEY2VmVjdG9y
SU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRVBOU184RG9jdW1lbnRFUE5TXzEyUmVuZGVyT2JqZWN0
RQorX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyR3JhcGhpY3NRdWFkRUxtMEVFNmFwcGVuZElT
Ml9FRXZQS1RfbQorX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMxRVJLTjNXVEY2VmVjdG9y
SU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRQorX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMy
RVJLTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRQogX19aTjdXZWJDb3JlMTBD
bGllbnRSZWN0QzFFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVj
U3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE0Q2xpZW50UmVjdExpc3RFCiBfX1pO
N1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTZKU0NsaWVudFJlY3RMaXN0RU5TXzE0Q2xpZW50
UmVjdExpc3RFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQVDBfCkBAIC0xNTczOSwxMCArMTU3MzksMTAgQEAgX19aTjdXZWJDb3Jl
MjJSZW5kZXJTVkdGb3JlaWduT2JqZWN0MjFjbwogX19aTks3V2ViQ29yZTIyUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdDE5bWFwTG9jYWxUb0NvbnRhaW5lckVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVj
dEViYlJOU18xNFRyYW5zZm9ybVN0YXRlRQogX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdSb290MTFu
b2RlQXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05T
XzhJbnRQb2ludEVpaU5TXzEzSGl0VGVzdEFjdGlvbkUKIF9fWk5LN1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybThtYXBQb2ludEVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29yZTEzUmVuZGVyU1ZH
VGV4dDE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVz
dFJlc3VsdEVSS05TXzEwRmxvYXRQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCitfX1pON1dlYkNv
cmUxM1JlbmRlclNWR1RleHQxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0
RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMTNIaXRUZXN0QWN0
aW9uRQogX19aTjdXZWJDb3JlMjFQb2ludGVyRXZlbnRzSGl0UnVsZXNDMUVOUzBfMTFFSGl0VGVz
dGluZ0VSS05TXzE0SGl0VGVzdFJlcXVlc3RFTlNfMTRFUG9pbnRlckV2ZW50c0UKLV9fWk43V2Vi
Q29yZTE2U1ZHUmVuZGVyU3VwcG9ydDE5cG9pbnRJbkNsaXBwaW5nQXJlYUVQTlNfMTJSZW5kZXJP
YmplY3RFUktOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUyMlJlbmRlclNWR0ZvcmVpZ25P
YmplY3QxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRl
c3RSZXN1bHRFUktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19aTjdXZWJD
b3JlMTZTVkdSZW5kZXJTdXBwb3J0MTlwb2ludEluQ2xpcHBpbmdBcmVhRVBOU18xMlJlbmRlck9i
amVjdEVSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTIyUmVuZGVyU1ZHRm9yZWln
bk9iamVjdDE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0
VGVzdFJlc3VsdEVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCiBfX1pO
N1dlYkNvcmUyN1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTExbm9kZUF0UG9pbnRFUktOU18x
NEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU184SW50UG9pbnRFaWlOU18x
M0hpdFRlc3RBY3Rpb25FCiBfX1pON1dlYkNvcmUxN1JlbmRlclRleHRDb250cm9sMTloaXRJbm5l
clRleHRFbGVtZW50RVJOU18xM0hpdFRlc3RSZXN1bHRFaWlpaQogX19aTks3V2ViQ29yZTE2U1ZH
U3R5bGVkRWxlbWVudDV0aXRsZUV2CkBAIC0xNTc2OCw3ICsxNTc2OCw3IEBAIF9fWk5LN1dlYkNv
cmU4RHJhZ0RhdGExMWNvbnRhaW5zVVJMRVBOU18KIF9fWk5LN1dlYkNvcmU4RHJhZ0RhdGE1YXNV
UkxFUE5TXzVGcmFtZUVOUzBfMjRGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3lFUE4zV1RGNlN0cmlu
Z0UKIF9fWk43V2ViQ29yZTEwUGFzdGVib2FyZDVhc1VSTEVQTlNfNUZyYW1lRQogX19aTjdXZWJD
b3JlMTBQYXN0ZWJvYXJkMTBnZXRCZXN0VVJMRVBOU181RnJhbWVFCi1fX1pON1dlYkNvcmUxM1Jl
bmRlclNWR1BhdGgxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18x
M0hpdFRlc3RSZXN1bHRFUktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19a
TjdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTZub2RlQXRGbG9hdFBvaW50RVJLTlNfMTRIaXRUZXN0
UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzEzSGl0
VGVzdEFjdGlvbkUKIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQxNGhhc1NWR1Jvb3ROb2RlRXYKIF9f
Wk43V2ViQ29yZTRQYWdlMjJhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkRVBOU185UGFnZUdyb3VwRQog
X19aTjdXZWJDb3JlMTZDU1NTdHlsZVNlbGVjdG9yMTVTZWxlY3RvckNoZWNrZXIyMmFsbFZpc2l0
ZWRTdGF0ZUNoYW5nZWRFdgpAQCAtMTYyMTEsNyArMTYyMTEsNyBAQCBfX1pOM1dURjZWZWN0b3JJ
TjdXZWJDb3JlMTREb2N1bWVudE1hcmtlCiBfX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gzMWNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXJFUktOU18xNERvY3VtZW50TWFya2VyRVBOU18x
MVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjIxcmVtb3ZlTWFya2Vyc0Zyb21MaXN0RVBOU180Tm9kZUVQTjNXVEY2VmVjdG9ySU5T
XzIyUmVuZGVyZWREb2N1bWVudE1hcmtlckVMbTBFRUVOU18xNERvY3VtZW50TWFya2VyMTFNYXJr
ZXJUeXBlc0UKIF9fWk5LN1dlYkNvcmUyOFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIxOHdp
bmRvd1JlY3RGb3JSYW5nZUVQS05TXzVSYW5nZUUKLV9fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1
YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUViCitfX1pOSzdXZWJDb3JlNVJh
bmdlOXRleHRRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRWIKIF9f
Wk43V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMzdzZWxlY3RDbG9zZXN0V29yZE9yTGlu
a0Zyb21Nb3VzZUV2ZW50RVJLTlNfMjhNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzRQogX19a
Tks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDEwaXNMaXZlTGlua0V2CkBAIC0xNjMzMiw4ICsxNjMz
Miw4IEBAIF9fWk43V2ViQ29yZTE3c2V0SlNET01XaW5kb3dUb3BFUE4zSlNDOUUKIF9fWk43V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0MjFjcmVhdGVWaXNpYmxlUG9zaXRpb25FUktOU184UG9zaXRpb25F
CiBfX1pON1dlYkNvcmUyNHNldEpTSFRNTEVsZW1lbnRUYWJJbmRleEVQTjNKU0M5RXhlY1N0YXRl
RVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTExSFRNTEVsZW1lbnQx
MXNldFRhYkluZGV4RWkKLV9fWk43V2ViQ29yZTEyUmVuZGVySW5saW5lMTNhYnNvbHV0ZVF1YWRz
RVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUUKLV9fWk43V2ViQ29yZTEyUmVuZGVy
SW5saW5lMjVjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzRVBLUzBfUk4zV1RGNlZlY3RvcklOU185
RmxvYXRRdWFkRUxtMEVFRQorX19aTjdXZWJDb3JlMTJSZW5kZXJJbmxpbmUxM2Fic29sdXRlUXVh
ZHNFUk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKK19fWk43V2ViQ29yZTEy
UmVuZGVySW5saW5lMjVjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzRVBLUzBfUk4zV1RGNlZlY3Rv
cklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKIF9fWk43V2ViQ29yZTIyc2V0SlNFbGVtZW50U2Ny
b2xsTGVmdEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9f
Wk43V2ViQ29yZTdFbGVtZW50MTNzZXRTY3JvbGxMZWZ0RWkKIF9fWk43V2ViQ29yZTlSZW5kZXJC
b3gxM3NldFNjcm9sbExlZnRFaQpAQCAtMTYzOTAsNyArMTYzOTAsNyBAQCBfX1pON1dlYkNvcmU1
UmFuZ2UxM3NldFN0YXJ0QWZ0ZXJFUE5TXzROCiBfX1pON1dlYkNvcmUzMmpzSFRNTElucHV0RWxl
bWVudFNlbGVjdGlvblN0YXJ0RVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEw
SWRlbnRpZmllckUKIF9fWk5LN1dlYkNvcmUxOEpTSFRNTElucHV0RWxlbWVudDE0c2VsZWN0aW9u
U3RhcnRFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyOHBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfOVBhaW50
SW5mb0VSS05TXzdJbnRSZWN0RQotX19aTks3V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyMWNvbnZl
cnRUb1BhaW50aW5nUmVjdEVQS05TXzEyUmVuZGVyT2JqZWN0RVMzX1JLTlNfOUZsb2F0UmVjdEVS
S05TXzdJbnRSZWN0RQorX19aTks3V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyMWNvbnZlcnRUb1Bh
aW50aW5nUmVjdEVQS05TXzEyUmVuZGVyT2JqZWN0RVMzX1JLTlNfMTJHcmFwaGljc1JlY3RFUktO
U183SW50UmVjdEUKIF9fWlRobjhfTjdXZWJDb3JlMzBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVs
ZW1lbnREMEV2CiBfX1pUaG44X043V2ViQ29yZTMxU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxl
bWVudEQwRXYKIF9fWk43V2ViQ29yZTIwSlNIVE1MSGVhZGluZ0VsZW1lbnQzcHV0RVBOM0pTQzlF
eGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVy
dHlTbG90RQpAQCAtMTY1MDEsNyArMTY1MDEsNyBAQCBfX1pOM1dURjlIYXNoVGFibGVJUE43V2Vi
Q29yZTROb2RlRVN0NHBhCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTROb2RlRVN0NHBh
aXJJUzNfZkVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNf
MTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWZFRUVFU0NfRTZsb29r
dXBFUktTM18KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlNE5vZGVFU3Q0cGFpcklTM19m
RU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJI
YXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TQl9JZkVFRUVTQ19FNnJlaGFzaEVpCiBf
X1pOM1dURjZWZWN0b3JJTlNfNlJlZlB0cklON1dlYkNvcmUxMUhUTUxFbGVtZW50RUVFTG0wRUUx
NGV4cGFuZENhcGFjaXR5RW0KLV9fWk43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TXzlGbG9h
dFJlY3RFRUQxRXYKK19fWk43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TXzEyR3JhcGhpY3NS
ZWN0RUVEMUV2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTI0dHJhdmVyc2VQcmV2aW91c1dpdGhX
cmFwRWIKIF9fWk4zV1RGNlZlY3Rvckl0TG0wRUU2aW5zZXJ0SXRFRXZtUEtUX20KIF9fWk5LN1dl
YkNvcmUxMlNlYXJjaEJ1ZmZlcjE2aXNXb3JkU3RhcnRNYXRjaEVtbQpAQCAtMTY1NzgsNyArMTY1
NzgsNyBAQCBfX1pON1dlYkNvcmVMMTNwYXJzZUtleVRpbWVzRVJLTjNXVEY2U3RyCiBfX1pON1dl
YkNvcmUxNFNWR1NNSUxFbGVtZW50MTVwYXJzZUJlZ2luT3JFbmRFUktOM1dURjZTdHJpbmdFTlMw
XzEwQmVnaW5PckVuZEUKIF9fWk43V2ViQ29yZTE0U1ZHU01JTEVsZW1lbnQxNXBhcnNlQ2xvY2tW
YWx1ZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0U1ZHU01JTEVsZW1lbnQxNnBhcnNl
T2Zmc2V0VmFsdWVFUktOM1dURjZTdHJpbmdFCi1fX1pOSzNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJ
ZGVudGl0eUV4dHJhY3RvcklkRUVOU185RmxvYXRIYXNoSWRFRU5TXzEwSGFzaFRyYWl0c0lkRUVT
Nl9FOGNvbnRhaW5zSWROU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJZGRTNF9FRUVFYlJLVF8K
K19fWk5LM1dURjlIYXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzEyR3Jh
cGhpY3NIYXNoSWRFRU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FOGNvbnRhaW5zSWROU18yMklkZW50
aXR5SGFzaFRyYW5zbGF0b3JJZGRTNF9FRUVFYlJLVF8KIF9fWk4zV1RGNlZlY3RvcklON1dlYkNv
cmU4U01JTFRpbWVFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pTdDE2X19pbnRyb3NvcnRf
bG9vcElQTjdXZWJDb3JlOFNNSUxUaW1lRWxFdlRfUzNfVDBfCiBfX1pTdDIyX19maW5hbF9pbnNl
cnRpb25fc29ydElQTjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM18KQEAgLTE2NjgzLDE0ICsxNjY4
MywxNCBAQCBfX1pON1dlYkNvcmUxN1NNSUxUaW1lQ29udGFpbmVyMTB0aW1lckZpCiBfX1pON1dl
YkNvcmUxOVNWR0FuaW1hdGlvbkVsZW1lbnQxOWVuZGVkQWN0aXZlSW50ZXJ2YWxFdgogX19aTks3
V2ViQ29yZTIyQXBwbHlQcm9wZXJ0eUZpbGxMYXllcklOU184RUZpbGxCb3hFRTEwYXBwbHlWYWx1
ZUVQTlNfMTZDU1NTdHlsZVNlbGVjdG9yRVBOU184Q1NTVmFsdWVFCiBfX1pON1dlYkNvcmUxNkNT
U1N0eWxlU2VsZWN0b3IxMW1hcEZpbGxDbGlwRU5TXzEzQ1NTUHJvcGVydHlJREVQTlNfOUZpbGxM
YXllckVQTlNfOENTU1ZhbHVlRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2NsaXBU
b0ltYWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRVJLTlNfOUZsb2F0UmVjdEUKLV9fWk5LN1dl
YkNvcmUxMUltYWdlQnVmZmVyNGNsaXBFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0
UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdjbGlwVG9JbWFnZUJ1ZmZlckVQ
TlNfMTFJbWFnZUJ1ZmZlckVSS05TXzEyR3JhcGhpY3NSZWN0RQorX19aTks3V2ViQ29yZTExSW1h
Z2VCdWZmZXI0Y2xpcEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEUK
IF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUyM2luaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzRVJLTlNf
OUZpbGxMYXllckUKIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94NDFwZXJwZW5kaWN1bGFyQ29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodEV2CiBfX1pOSzdXZWJDb3JlMTRTaW1wbGVGb250RGF0YTMy
dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGFFdgogX19aTkszV1RGOUhhc2hUYWJsZUlQ
S043V2ViQ29yZTEzSW5saW5lVGV4dEJveEVTdDRwYWlySVM0X1M1X0lOU182VmVjdG9ySVBLTlMx
XzE0U2ltcGxlRm9udERhdGFFTG0wRUVFTlMxXzEzR2x5cGhPdmVyZmxvd0VFRU5TXzE4UGFpckZp
cnN0RXh0cmFjdG9ySVNEX0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lTNF9FRU5TSl9JU0NfRUVFRVNLX0U0ZmluZElTNF9OU18yMklkZW50aXR5
SGFzaFRyYW5zbGF0b3JJUzRfU0RfU0hfRUVFRU5TXzIySGFzaFRhYmxlQ29uc3RJdGVyYXRvcklT
NF9TRF9TRl9TSF9TTV9TS19FRVJLVF8KIF9fWk43V2ViQ29yZTEzSW5saW5lRmxvd0JveDI1Zmxp
cExpbmVzSW5CbG9ja0RpcmVjdGlvbkVpaQotX19aTjdXZWJDb3JlMTZmaW5kSW50ZXJzZWN0aW9u
RVJLTlNfMTBGbG9hdFBvaW50RVMyX1MyX1MyX1JTMF8KK19fWk43V2ViQ29yZTE2ZmluZEludGVy
c2VjdGlvbkVSS05TXzEzR3JhcGhpY3NQb2ludEVTMl9TMl9TMl9SUzBfCiBfX1pON1dlYkNvcmUy
MFJlbmRlckJveE1vZGVsT2JqZWN0MTlkcmF3Qm94U2lkZUZyb21QYXRoRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzdJbnRSZWN0RVJLTlNfNFBhdGhFUEtOU18xMEJvcmRlckVkZ2VFZmZOU183
Qm94U2lkZUVQS05TXzExUmVuZGVyU3R5bGVFTlNfNUNvbG9yRU5TXzEyRUJvcmRlclN0eWxlRU5T
XzI0QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlRWJiCiBfX1pON1dlYkNvcmUyMFJlbmRlckJveE1v
ZGVsT2JqZWN0MjdwYWludFRyYW5zbHVjZW50Qm9yZGVyU2lkZXNFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVBLTlNfMTFSZW5kZXJTdHlsZUVSS05TXzE0Um91bmRlZFJlY3RFUzhfUEtOU18xMEJvcmRl
ckVkZ2VFTlNfMjRCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2VFYmJiCiBfX1pOM1dURjlIYXNoVGFi
bGVJUE5TXzE1TGlzdEhhc2hTZXROb2RlSVBON1dlYkNvcmUxMVJlbmRlckJsb2NrMTRGbG9hdGlu
Z09iamVjdEVMbTRFRUVTN19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVM3X0VFTlNfMjhMaXN0SGFz
aFNldE5vZGVIYXNoRnVuY3Rpb25zSVM1X0xtNEVOUzNfMjdGbG9hdGluZ09iamVjdEhhc2hGdW5j
dGlvbnNFRUVOU18xMEhhc2hUcmFpdHNJUzdfRUVTRV9FMTZsb29rdXBGb3JXcml0aW5nRVJLUzdf
CkBAIC0xNjgwMiwxNiArMTY4MDIsMTYgQEAgX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMjNw
YXJzZVBhdGhEYQogX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMTVtb3ZlVG9OZXh0
VG9rZW5FdgogX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMTlwYXJzZVNWR1NlZ21l
bnRUeXBlRVJOU18xNFNWR1BhdGhTZWdUeXBlRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2Vy
MThwYXJzZU1vdmVUb1NlZ21lbnRFdgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNl
MThwYXJzZU1vdmVUb1NlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTI0U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyNm1vdmVUb0VSS05TXzEwRmxvYXRQb2ludEViTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCi1fX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjE1
d3JpdGVGbG9hdFBvaW50RVJLTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTlTVkdQYXRo
U3RyaW5nU291cmNlMThwYXJzZU1vdmVUb1NlZ21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEUKK19f
Wk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyNm1vdmVUb0VSS05TXzEzR3JhcGhp
Y3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyNFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjE1d3JpdGVGbG9hdFBvaW50RVJLTlNfMTNHcmFwaGljc1BvaW50RQog
X19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxN2NvbnRpbnVlQ29uc3VtaW5n
RXYKIF9fWk5LN1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UxMWhhc01vcmVEYXRhRXYKIF9f
Wk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTExbmV4dENvbW1hbmRFTlNfMTRTVkdQYXRo
U2VnVHlwZUUKIF9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMjVpbmNyZW1l
bnRQYXRoU2VnbWVudENvdW50RXYKIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjE4cGFyc2VM
aW5lVG9TZWdtZW50RXYKLV9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTE4cGFyc2VM
aW5lVG9TZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlcjZsaW5lVG9FUktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0
ZU1vZGVFCitfX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UxOHBhcnNlTGluZVRvU2Vn
bWVudEVSTlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXI2bGluZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVN
b2RlRQogX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI5Y2xvc2VQYXRoRXYK
IF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjdjbGVhbnVwRXYKIF9fWk43V2ViQ29yZTI0U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyN2NsZWFudXBFdgpAQCAtMTY4MzQsMTQgKzE2ODM0LDE0IEBA
IF9fWk43V2ViQ29yZTE0U1ZHUGF0aEJ1aWxkZXJDMUV2CiBfX1pON1dlYkNvcmUyM1NWR1BhdGhC
eXRlU3RyZWFtU291cmNlQzFFUE5TXzE3U1ZHUGF0aEJ5dGVTdHJlYW1FCiBfX1pON1dlYkNvcmUy
M1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMTVtb3ZlVG9OZXh0VG9rZW5FdgogX19aTjdXZWJDb3Jl
MjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE5cGFyc2VTVkdTZWdtZW50VHlwZUVSTlNfMTRTVkdQ
YXRoU2VnVHlwZUUKLV9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOHBhcnNl
TW92ZVRvU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVp
bGRlcjZtb3ZlVG9FUktOU18xMEZsb2F0UG9pbnRFYk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQor
X19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE4cGFyc2VNb3ZlVG9TZWdtZW50
RVJOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyNm1vdmVU
b0VSS05TXzEzR3JhcGhpY3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dl
YkNvcmUxNFNWR1BhdGhCdWlsZGVyMTdjb250aW51ZUNvbnN1bWluZ0V2CiBfX1pOSzdXZWJDb3Jl
MjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTExaGFzTW9yZURhdGFFdgogX19aTjdXZWJDb3JlMjNT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTExbmV4dENvbW1hbmRFTlNfMTRTVkdQYXRoU2VnVHlwZUUK
IF9fWk43V2ViQ29yZTE0U1ZHUGF0aEJ1aWxkZXIyNWluY3JlbWVudFBhdGhTZWdtZW50Q291bnRF
dgotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE4cGFyc2VMaW5lVG9TZWdt
ZW50RVJOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyNmxpbmVU
b0VSS05TXzEwRmxvYXRQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29y
ZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOHBhcnNlTGluZVRvU2VnbWVudEVSTlNfMTNHcmFw
aGljc1BvaW50RQorX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRlcjZsaW5lVG9FUktOU18xM0dy
YXBoaWNzUG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1Bh
dGhCdWlsZGVyOWNsb3NlUGF0aEV2CiBfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyN2NsZWFu
dXBFdgogX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZUQwRXYKQEAgLTE2ODY4
LDcgKzE2ODY4LDcgQEAgX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxOFNWR0dyYWRpZQog
X19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxOFNWR0dyYWRpZW50RWxlbWVudEVTM19OU18x
N0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFpdHNJ
UzNfRUVTOV9FNmV4cGFuZEV2CiBfX1pOSzdXZWJDb3JlMzFSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50MTVib3VuZGluZ0JveE1vZGVFdgogX19aTks3V2ViQ29yZTMxUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudDEzYnVpbGRHcmFkaWVudEVQTlNfMTJHcmFkaWVudERhdGFFUE5T
XzE4U1ZHR3JhZGllbnRFbGVtZW50RQotX19aTjdXZWJDb3JlMjRTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQyM2NhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzRVJLTlNfMjRMaW5lYXJHcmFkaWVudEF0dHJp
YnV0ZXNFUk5TXzEwRmxvYXRQb2ludEVTNV8KK19fWk43V2ViQ29yZTI0U1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50MjNjYWxjdWxhdGVTdGFydEVuZFBvaW50c0VSS05TXzI0TGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzRVJOU18xM0dyYXBoaWNzUG9pbnRFUzVfCiBfX1pON1dlYkNvcmU4R3JhZGllbnQx
NXNldFNwcmVhZE1ldGhvZEVOU18yMEdyYWRpZW50U3ByZWFkTWV0aG9kRQogX19aTjdXZWJDb3Jl
OEdyYWRpZW50MTJhZGRDb2xvclN0b3BFUktOUzBfOUNvbG9yU3RvcEUKIF9fWk43V2ViQ29yZTMx
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDI2Y2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zv
cm1FUk5TXzE1QWZmaW5lVHJhbnNmb3JtRQpAQCAtMTY4NzksMTggKzE2ODc5LDE4IEBAIF9fWk43
V2ViQ29yZTMxUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmEKIF9fWk43V2ViQ29yZTI0U1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50MjVjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzRVJOU18yNFJhZGlh
bEdyYWRpZW50QXR0cmlidXRlc0UKIF9fWk5LN1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQxNWJvdW5kaW5nQm94TW9kZUV2CiBfX1pOSzdXZWJDb3JlMzFSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50MTNidWlsZEdyYWRpZW50RVBOU18xMkdyYWRpZW50RGF0YUVQ
TlNfMThTVkdHcmFkaWVudEVsZW1lbnRFCi1fX1pON1dlYkNvcmUyNFNWR1JhZGlhbEdyYWRpZW50
RWxlbWVudDM1Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXNFUktOU18yNFJhZGlh
bEdyYWRpZW50QXR0cmlidXRlc0VSTlNfMTBGbG9hdFBvaW50RVM1X1JmCitfX1pON1dlYkNvcmUy
NFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDM1Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRS
YWRpdXNFUktOU18yNFJhZGlhbEdyYWRpZW50QXR0cmlidXRlc0VSTlNfMTNHcmFwaGljc1BvaW50
RVM1X1JmCiBfX1pON1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQyNmNh
bGN1bGF0ZUdyYWRpZW50VHJhbnNmb3JtRVJOU18xNUFmZmluZVRyYW5zZm9ybUUKIF9fWk43V2Vi
Q29yZTEyU1ZHVHJhbnNmb3JtOHNldFNjYWxlRWZmCiBfX1pON1dlYkNvcmUxMlNWR1RyYW5zZm9y
bTlzZXRSb3RhdGVFZmZmCiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIxN3BhcnNlQXJjVG9T
ZWdtZW50RXYKLV9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTE3cGFyc2VBcmNUb1Nl
Z21lbnRFUmZTMV9TMV9SYlMyX1JOU18xMEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUxOVNWR1Bh
dGhTdHJpbmdTb3VyY2UxN3BhcnNlQXJjVG9TZWdtZW50RVJmUzFfUzFfUmJTMl9STlNfMTNHcmFw
aGljc1BvaW50RQogX19aTjdXZWJDb3JlMTJwYXJzZUFyY0ZsYWdFUlBLdFMxX1JiCi1fX1pON1dl
YkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjVhcmNUb0VmZmZiYlJLTlNfMTBGbG9hdFBv
aW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTE3cGFyc2VBcmNUb1NlZ21lbnRFUmZTMV9TMV9SYlMyX1JOU18xMEZsb2F0UG9p
bnRFCi1fX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIxOWRlY29tcG9zZUFyY1RvQ3ViaWNFZmZm
Uk5TXzEwRmxvYXRQb2ludEVTMl9iYgorX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXI1YXJjVG9FZmZmYmJSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRl
TW9kZUUKK19fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxN3BhcnNlQXJjVG9T
ZWdtZW50RVJmUzFfUzFfUmJTMl9STlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMTNT
VkdQYXRoUGFyc2VyMTlkZWNvbXBvc2VBcmNUb0N1YmljRWZmZlJOU18xM0dyYXBoaWNzUG9pbnRF
UzJfYmIKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtNXNjYWxlRWRkCi1fX1pON1dlYkNv
cmUxNFNWR1BhdGhCdWlsZGVyMTJjdXJ2ZVRvQ3ViaWNFUktOU18xMEZsb2F0UG9pbnRFUzNfUzNf
TlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyMTJj
dXJ2ZVRvQ3ViaWNFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfUzNfTlNfMThQYXRoQ29vcmRpbmF0
ZU1vZGVFCiBfX1pUaG4xMjBfTjdXZWJDb3JlMTZTVkdTY3JpcHRFbGVtZW50MTZzZXRIcmVmQmFz
ZVZhbHVlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMjhwYXJz
ZUxpbmVUb0hvcml6b250YWxTZWdtZW50RXYKIF9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1Nv
dXJjZTI4cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudEVSZgpAQCAtMTY4OTksMTEgKzE2ODk5
LDExIEBAIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjI2cGFyc2VMaW5lVG8KIF9fWk43V2Vi
Q29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTI2cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnRFUmYK
IF9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMTRsaW5lVG9WZXJ0aWNhbEVm
TlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIyNHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudEV2Ci1fX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3Vy
Y2UyNHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RVMyX1MyXwotX19a
TjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEw
RmxvYXRQb2ludEVTM19TM19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTE5
U1ZHUGF0aFN0cmluZ1NvdXJjZTI0cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50RVJOU18xM0dyYXBo
aWNzUG9pbnRFUzJfUzJfCitfX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjEy
Y3VydmVUb0N1YmljRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4UGF0aENvb3JkaW5h
dGVNb2RlRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMzBwYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnRFdgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMzBwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEVTMl8KLV9fWk43V2ViQ29y
ZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xMEZs
b2F0UG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUxOVNWR1Bh
dGhTdHJpbmdTb3VyY2UzMHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFw
aGljc1BvaW50RVMyXworX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxOGN1
cnZlVG9DdWJpY1Ntb290aEVSS05TXzEzR3JhcGhpY3NQb2ludEVTM19OU18xOFBhdGhDb29yZGlu
YXRlTW9kZUUKIF9fWk43V2ViQ29yZTEyU1ZHVHJhbnNmb3JtOXNldE1hdHJpeEVSS05TXzE1QWZm
aW5lVHJhbnNmb3JtRQogX19aTjdXZWJDb3JlTDE2dHNwYW5Db25zdHJ1Y3RvckVSS05TXzEzUXVh
bGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RWIKIF9fWk43V2ViQ29yZTE1U1ZHVFNwYW5FbGVtZW50
NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RQpAQCAtMTY5MTcsOCAr
MTY5MTcsOCBAQCBfX1pON1dlYkNvcmUxNVJlbmRlclNWR0lubGluZTE3dXBkYXRlRnJvCiBfX1pO
SzdXZWJDb3JlMTVTVkdUU3BhbkVsZW1lbnQyNWNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXJFUE5T
XzROb2RlRQogX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTI4cGFyc2VMaW5l
VG9Ib3Jpem9udGFsU2VnbWVudEVSZgogX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTI2cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnRFUmYKLV9fWk43V2ViQ29yZTIzU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2UyNHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudEVSTlNfMTBGbG9hdFBv
aW50RVMyX1MyXwotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTMwcGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfCitfX1pON1dlYkNv
cmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMjRwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnRFUk5T
XzEzR3JhcGhpY3NQb2ludEVTMl9TMl8KK19fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UzMHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50
RVMyXwogX19aTjdXZWJDb3JlTDI1cmVjdXJzaXZlVXBkYXRlU2NhbGVkRm9udEVQTlNfMTJSZW5k
ZXJPYmplY3RFCiBfX1pOSzdXZWJDb3JlMTVSZW5kZXJTVkdJbmxpbmUxMWlzU1ZHSW5saW5lRXYK
IF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUzMFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRl
cjEyVGV4dFBvc2l0aW9uRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQpAQCAtMTY5MjgsMTEgKzE2
OTI4LDExIEBAIF9fWk4zV1RGMTFWZWN0b3JNb3ZlcklMYjBFTjdXZWJDb3JlMjNTVkcKIF9fWk5L
N1dlYkNvcmUxNlNWR0lubGluZUZsb3dCb3gxOWNhbGN1bGF0ZUJvdW5kYXJpZXNFdgogX19aTjdX
ZWJDb3JlMTZTVkdJbmxpbmVGbG93Qm94NXBhaW50RVJOU185UGFpbnRJbmZvRWlpaWkKIF9fWk43
V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjI4cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudEV2Ci1f
X1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UyOHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnRFUk5TXzEwRmxvYXRQb2ludEVTMl8KLV9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyMTZjdXJ2ZVRvUXVhZHJhdGljRVJLTlNfMTBGbG9hdFBvaW50RVMzX05TXzE4UGF0
aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMjhwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFUzJfCitfX1pON1dl
YkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjE2Y3VydmVUb1F1YWRyYXRpY0VSS05TXzEz
R3JhcGhpY3NQb2ludEVTM19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTEz
U1ZHUGF0aFBhcnNlcjM0cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudEV2Ci1fX1pO
N1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UzNHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTBGbG9hdFBvaW50RU5TXzE4
UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMzRw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFCitf
X1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjIyY3VydmVUb1F1YWRyYXRpY1Nt
b290aEVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43
V2ViQ29yZThTVkdDb2xvcjIzY29sb3JGcm9tUkdCQ29sb3JTdHJpbmdFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmVMMTVtYXNrQ29uc3RydWN0b3JFUktOU18xM1F1YWxpZmllZE5hbWVFUE5T
XzhEb2N1bWVudEViCiBfX1pON1dlYkNvcmUxNFNWR01hc2tFbGVtZW50NmNyZWF0ZUVSS05TXzEz
UXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RQpAQCAtMTY5NTIsMjAgKzE2OTUyLDIwIEBAIF9f
WlRobjEyOF9OSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU0KIF9fWk5LN1dlYkNvcmUxN1N0
eWxlUmVzb3VyY2VEYXRhZXFFUktTMF8KIF9fWlRobjEyOF9ON1dlYkNvcmUyM1JlbmRlclNWR1Jl
c291cmNlTWFza2VyMjVyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlRWIKIF9fWk43V2ViQ29yZTE3
U3R5bGVSZXNvdXJjZURhdGFEMUV2Ci1fX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291
cmNlMjhwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfCi1f
X1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMzRwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUyM1NWR1BhdGhC
eXRlU3RyZWFtU291cmNlMjhwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50RVJOU18xM0dyYXBo
aWNzUG9pbnRFUzJfCitfX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMzRwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pO
N1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFza2VyMTlyZXNvdXJjZUJvdW5kaW5nQm94RVBO
U18xMlJlbmRlck9iamVjdEUKLV9fWk5LN1dlYkNvcmUxNFNWR01hc2tFbGVtZW50MTVtYXNrQm91
bmRpbmdCb3hFUktOU185RmxvYXRSZWN0RQorX19aTks3V2ViQ29yZTE0U1ZHTWFza0VsZW1lbnQx
NW1hc2tCb3VuZGluZ0JveEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMjNSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjMxY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdEV2CiBf
X1pON1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFza2VyMjFyZW1vdmVDbGllbnRGcm9tQ2Fj
aGVFUE5TXzEyUmVuZGVyT2JqZWN0RWIKIF9fWk5LM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEy
UmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8xME1hc2tlckRhdGFFRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U4Y29udGFpbnNJUzNfTlNfMjJJZGVudGl0
eUhhc2hUcmFuc2xhdG9ySVMzX1M3X1NCX0VFRUViUktUXwogX19aTjdXZWJDb3JlMjNSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjEzYXBwbHlSZXNvdXJjZUVQTlNfMTJSZW5kZXJPYmplY3RFUE5TXzEx
UmVuZGVyU3R5bGVFUlBOU18xNUdyYXBoaWNzQ29udGV4dEV0Ci1fX1pON1dlYkNvcmUxOVNWR0lt
YWdlQnVmZmVyVG9vbHMzNmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlckVQS05T
XzEyUmVuZGVyT2JqZWN0RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTE5U1ZHSW1hZ2VC
dWZmZXJUb29sczE3Y3JlYXRlSW1hZ2VCdWZmZXJFUktOU185RmxvYXRSZWN0RVMzX1JOM1dURjZP
d25QdHJJTlNfMTFJbWFnZUJ1ZmZlckVFRU5TXzEwQ29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTE5
U1ZHSW1hZ2VCdWZmZXJUb29sczM2Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVy
RVBLTlNfMTJSZW5kZXJPYmplY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKK19fWk43V2ViQ29yZTE5
U1ZHSW1hZ2VCdWZmZXJUb29sczE3Y3JlYXRlSW1hZ2VCdWZmZXJFUktOU18xMkdyYXBoaWNzUmVj
dEVTM19STjNXVEY2T3duUHRySU5TXzExSW1hZ2VCdWZmZXJFRUVOU18xMENvbG9yU3BhY2VFCiBf
X1pON1dlYkNvcmUyMmxpbmVhclJHQkNvbG9yU3BhY2VSZWZFdgogX19aTjdXZWJDb3JlMjNSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjI0ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlRVBOU18xME1hc2tl
ckRhdGFFUEtOU18xNFNWR01hc2tFbGVtZW50RVBOU18xMlJlbmRlck9iamVjdEUKIF9fWk43V2Vi
Q29yZTE5U1ZHSW1hZ2VCdWZmZXJUb29sczI2cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXJFUE5T
XzExSW1hZ2VCdWZmZXJFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
Ci1fX1pON1dlYkNvcmUxOVNWR0ltYWdlQnVmZmVyVG9vbHMxN2NsaXBUb0ltYWdlQnVmZmVyRVBO
U18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfOUZsb2F0UmVj
dEVSTjNXVEY2T3duUHRySU5TXzExSW1hZ2VCdWZmZXJFRUUKK19fWk43V2ViQ29yZTE5U1ZHSW1h
Z2VCdWZmZXJUb29sczE3Y2xpcFRvSW1hZ2VCdWZmZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU18xMkdyYXBoaWNzUmVjdEVSTjNXVEY2T3duUHRySU5T
XzExSW1hZ2VCdWZmZXJFRUUKIF9fWk43V2ViQ29yZTQ2anNET01XaW5kb3dQcm90b3R5cGVGdW5j
dGlvbkdldE1hdGNoZWRDU1NSdWxlc0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3V2ViQ29yZTlE
T01XaW5kb3cxOGdldE1hdGNoZWRDU1NSdWxlc0VQTlNfN0VsZW1lbnRFUktOM1dURjZTdHJpbmdF
YgogX19aTks3V2ViQ29yZTI2Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24yNGdldExheWVyZWRT
aG9ydGhhbmRWYWx1ZUVQS2ltCkBAIC0xNzEwMCw3ICsxNzEwMCw3IEBAIF9fWk5LN1dlYkNvcmUx
NFJlbmRlclJ1YnlCYXNlMTByZW5kZXJOYW0KIF9fWk43V2ViQ29yZTE0UmVuZGVyUnVieVRleHRE
MEV2CiBfX1pOSzdXZWJDb3JlOFNWR0ltYWdlMTd1c2VzQ29udGFpbmVyU2l6ZUV2CiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFnZUVOU18xMENvbG9yU3Bh
Y2VFUktOU183SW50UmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIKLV9fWk43V2ViQ29y
ZTVJbWFnZTlkcmF3VGlsZWRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVT
NV9OUzBfOFRpbGVSdWxlRVM2X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9y
RQorX19aTjdXZWJDb3JlNUltYWdlOWRyYXdUaWxlZEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U18xMkdyYXBoaWNzUmVjdEVTNV9OUzBfOFRpbGVSdWxlRVM2X05TXzEwQ29sb3JTcGFjZUVOU18x
N0NvbXBvc2l0ZU9wZXJhdG9yRQogX19aTks3V2ViQ29yZTE0U2ltcGxlRm9udERhdGEyM2Jyb2tl
bklkZW9ncmFwaEZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTE4dmVydGljYWxUZXh0Q3Vyc29yRXYK
IF9fWk5LN1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhMjZ1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YUV2CkBAIC0xNzExNSwyOSArMTcxMTUsMjkgQEAgX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGUx
NWJvcmRlckxlZnRXaQogX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGUxN2JvcmRlckJvdHRvbVdp
ZHRoRXYKIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUxMnNldEJvcmRlckZpdEVOU18xMEVCb3Jk
ZXJGaXRFCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJCbG9jazE4YWRqdXN0Rm9yQm9yZGVyRml0RWlS
aVMxXwotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMjdkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxp
bmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJl
Y3Q1UmFkaWlFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI3ZHJhd1Jl
Y3RTaGFkb3dXaXRob3V0VGlsaW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhp
Y3NSZWN0RVJLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJD
b3JlMTBTaGFkb3dCbHVyMTZkcmF3U2hhZG93QnVmZmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEUK
IF9fWk5LN1dlYkNvcmU0UGF0aDZsZW5ndGhFdgogX19aTjdXZWJDb3JlMThQYXRoVHJhdmVyc2Fs
U3RhdGVDMUVOUzBfMTlQYXRoVHJhdmVyc2FsQWN0aW9uRQogX19aTks3V2ViQ29yZTRQYXRoNWFw
cGx5RVB2UEZ2UzFfUEtOU18xMVBhdGhFbGVtZW50RUUKIF9fWk43V2ViQ29yZUwyNkNHUGF0aEFw
cGxpZXJUb1BhdGhBcHBsaWVyRVB2UEsxM0NHUGF0aEVsZW1lbnQKIF9fWk43V2ViQ29yZUwyNXBh
dGhMZW5ndGhBcHBsaWVyRnVuY3Rpb25FUHZQS05TXzExUGF0aEVsZW1lbnRFCi1fX1pON1dlYkNv
cmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTZtb3ZlVG9FUktOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dl
YkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTZsaW5lVG9FUktOU18xMEZsb2F0UG9pbnRFCi1fX1pO
N1dlYkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTEzY3ViaWNCZXppZXJUb0VSS05TXzEwRmxvYXRQ
b2ludEVTM19TM18KK19fWk43V2ViQ29yZTE4UGF0aFRyYXZlcnNhbFN0YXRlNm1vdmVUb0VSS05T
XzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTE4UGF0aFRyYXZlcnNhbFN0YXRlNmxpbmVU
b0VSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTE4UGF0aFRyYXZlcnNhbFN0YXRl
MTNjdWJpY0JlemllclRvRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzXwogX19aTjNXVEY2VmVj
dG9ySU43V2ViQ29yZTExQ3ViaWNCZXppZXJFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pO
N1dlYkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTEyY2xvc2VTdWJwYXRoRXYKIF9fWk4zV1RGNlZl
Y3RvcklkTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MTFzZXRMaW5lRGFzaEVSS04zV1RGNlZlY3RvcklkTG0wRUVFZgogX19aTjdXZWJDb3JlMTNJ
bmxpbmVGbG93Qm94OXBhaW50TWFza0VSTlNfOVBhaW50SW5mb0VpaQogX19aTjdXZWJDb3JlOFNW
R0ltYWdlMjZuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZUV2Ci1fX1pON1dlYkNvcmUxMFNoYWRv
d0JsdXIyOGRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0UmVjdEVTNV9SS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50UmVj
dEUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI4ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGlu
Z0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9SS05TXzE0Um91
bmRlZFJlY3Q1UmFkaWlFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUx
MnNldE1heEhlaWdodEVOU182TGVuZ3RoRQogX19aTjdXZWJDb3JlMTNDU1NTdHlsZVNoZWV0MThk
ZXRlcm1pbmVOYW1lc3BhY2VFUktOM1dURjEyQXRvbWljU3RyaW5nRQogX19aTks3V2ViQ29yZTEw
U3R5bGVJbWFnZTEzZXJyb3JPY2N1cnJlZEV2CiBfX1pOSzdXZWJDb3JlMTlTdHlsZUdlbmVyYXRl
ZEltYWdlMjFpbWFnZUhhc1JlbGF0aXZlV2lkdGhFdgotX19aVGhuMTA0X043V2ViQ29yZTE0Q1NT
Q2FudmFzVmFsdWUxM2NhbnZhc0NoYW5nZWRFUE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFUktOU185
RmxvYXRSZWN0RQotX19aTjdXZWJDb3JlMTRDU1NDYW52YXNWYWx1ZTEzY2FudmFzQ2hhbmdlZEVQ
TlNfMTdIVE1MQ2FudmFzRWxlbWVudEVSS05TXzlGbG9hdFJlY3RFCitfX1pUaG4xMDRfTjdXZWJD
b3JlMTRDU1NDYW52YXNWYWx1ZTEzY2FudmFzQ2hhbmdlZEVQTlNfMTdIVE1MQ2FudmFzRWxlbWVu
dEVSS05TXzEyR3JhcGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTRDU1NDYW52YXNWYWx1ZTEzY2Fu
dmFzQ2hhbmdlZEVQTlNfMTdIVE1MQ2FudmFzRWxlbWVudEVSS05TXzEyR3JhcGhpY3NSZWN0RQog
X19aTjdXZWJDb3JlMTRqc0xvY2F0aW9uSGFzaEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1
ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pOSzdXZWJDb3JlOExvY2F0aW9uNGhhc2hFdgogX19a
TjdXZWJDb3JlMTBKU0xvY2F0aW9uM3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRp
ZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKQEAgLTE3MTk5LDcgKzE3
MTk5LDcgQEAgX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQxMQogX19aTjdX
ZWJDb3JlMjJKU0hUTUxUYWJsZUNlbGxFbGVtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMx
XzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4z
SlNDOWxvb2t1cFB1dElON1dlYkNvcmUyMkpTSFRNTFRhYmxlQ2VsbEVsZW1lbnRFRUViUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBU
XwogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18x
NkhUTUxWaWRlb0VsZW1lbnRFZmZSaQotX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFUktOU185RmxvYXRSZWN0RVM1
X1JpCitfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5T
XzE2SFRNTFZpZGVvRWxlbWVudEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X1JpCiBfX1pON1dlYkNv
cmUxNUdyYXBoaWNzQ29udGV4dDE3c2V0U3Ryb2tlR3JhZGllbnRFTjNXVEYxMFBhc3NSZWZQdHJJ
TlNfOEdyYWRpZW50RUVFCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlk
cmF3SW1hZ2VFUE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFZmZmZlJpCiBfX1pON1dlYkNvcmU2MGpz
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25EcmF3SW1hZ2VGcm9tUmVj
dEVQTjNKU0M5RXhlY1N0YXRlRQpAQCAtMjI3MzgsOCArMjI3MzgsOCBAQCBfX1pON1dlYkNvcmUy
MXNldEpTRG9jdW1lbnRPbnNjcm9sbEVQTjNKCiBfX1pON1dlYkNvcmUzNmpzRE9NV2luZG93UHJv
dG90eXBlRnVuY3Rpb25SZXNpemVUb0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3V2ViQ29yZTlE
T01XaW5kb3c4cmVzaXplVG9FZmYKIF9fWk43V2ViQ29yZTE5c2NyZWVuQXZhaWxhYmxlUmVjdEVQ
TlNfNldpZGdldEUKLV9fWk43V2ViQ29yZTlET01XaW5kb3cxNmFkanVzdFdpbmRvd1JlY3RFUktO
U185RmxvYXRSZWN0RVJTMV9TM18KLV9fWk5LN1dlYkNvcmU2Q2hyb21lMTNzZXRXaW5kb3dSZWN0
RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTlET01XaW5kb3cxNmFkanVzdFdpbmRvd1Jl
Y3RFUktOU18xMkdyYXBoaWNzUmVjdEVSUzFfUzNfCitfX1pOSzdXZWJDb3JlNkNocm9tZTEzc2V0
V2luZG93UmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlTDM0ZXhlY3V0ZVNj
cm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudEVQTlNfNUZyYW1lRVBOU181RXZlbnRFTlNfMTlFZGl0
b3JDb21tYW5kU291cmNlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyNGxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9sbExvZ2ljYWxEaXJlY3Rpb25F
TlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjIxbG9naWNhbFNjcm9sbE92ZXJmbG93RU5TXzIyU2Nyb2xsTG9naWNhbERpcmVjdGlvbkVO
U18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTIyOTE5LDcgKzIyOTE5LDcgQEAg
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0NmFwcGVuZEVSS1MwXwogX19aTjdXZWJDb3JlMTNI
aXRUZXN0UmVzdWx0MjZtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdEV2CiBfX1pOSzdXZWJDb3Jl
MTNIaXRUZXN0UmVzdWx0MTlyZWN0QmFzZWRUZXN0UmVzdWx0RXYKIF9fWk43V2ViQ29yZTIxU3Rh
dGljSGFzaFNldE5vZGVMaXN0RDBFdgotX19aTjdXZWJDb3JlOVJlbmRlckJveDEzYWJzb2x1dGVR
dWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFCitfX1pON1dlYkNvcmU5UmVu
ZGVyQm94MTNhYnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0w
RUVFCiBfX1pON1dlYkNvcmUzOWpzRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uU2Nyb2xsQnlMaW5l
c0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlN0VsZW1lbnQxM3Njcm9sbEJ5TGluZXNF
aQogX19aTjdXZWJDb3JlMzlqc0VsZW1lbnRQcm90b3R5cGVGdW5jdGlvblNjcm9sbEJ5UGFnZXNF
UE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTI0MjkwLDEyICsyNDI5MCwxMiBAQCBfX1pON1dlYkNvcmU4
RG9jdW1lbnQyM2RvY3VtZW50RGlkQmVjb21lCiBfX1pON1dlYkNvcmU2MGpzRE9NV2luZG93UHJv
dG90eXBlRnVuY3Rpb25XZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZUVQTjNKU0M5RXhl
Y1N0YXRlRQogX19aTjdXZWJDb3JlMTN0b1dlYktpdFBvaW50RU4zSlNDN0pTVmFsdWVFCiBfX1pO
SzdXZWJDb3JlOURPTVdpbmRvdzMyd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2VFUE5T
XzROb2RlRVBLTlNfMTFXZWJLaXRQb2ludEUKLV9fWk5LN1dlYkNvcmU0Tm9kZTEzY29udmVydFRv
UGFnZUVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmU0Tm9kZTEzY29udmVydFRvUGFn
ZUVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTE0anNXZWJLaXRQb2ludFhFUE4z
SlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJD
b3JlMTRqc1dlYktpdFBvaW50WUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8x
MElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU2MGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25X
ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3
V2ViQ29yZTlET01XaW5kb3czMndlYmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlRVBOU180
Tm9kZUVQS05TXzExV2ViS2l0UG9pbnRFCi1fX1pOSzdXZWJDb3JlNE5vZGUxNWNvbnZlcnRGcm9t
UGFnZUVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmU0Tm9kZTE1Y29udmVydEZyb21Q
YWdlRVJLTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdF
U3Q0cGFpcklTMV9TMV9FTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzNfRUVOU18xMFN0cmluZ0hh
c2hFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVTOV9FRVM5X0UxNmxv
b2t1cEZvcldyaXRpbmdJUzFfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMxX1MzX1M2X0VF
RUVTMl9JUFMzX2JFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFU3Q0cGFpcklT
MV9TMV9FTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzNfRUVOU18xMFN0cmluZ0hhc2hFTlNfMTRQ
YWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVTOV9FRVM5X0UzYWRkSVMxX1MxX05T
XzE3SGFzaE1hcFRyYW5zbGF0b3JJUzNfU0FfUzZfRUVFRVMyX0lOU18xN0hhc2hUYWJsZUl0ZXJh
dG9ySVMxX1MzX1M1X1M2X1NBX1M5X0VFYkVSS1RfUktUMF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlO
U182U3RyaW5nRVN0NHBhaXJJUzFfUzFfRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVMzX0VFTlNf
MTBTdHJpbmdIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFUzlf
RUVTOV9FM2FkZElTMV9TM19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzFfUzNfUzZfRUVF
RVMyX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMxX1MzX1M1X1M2X1NBX1M5X0VFYkVSS1RfUktU
MF8KQEAgLTI1MTA5LDggKzI1MTA5LDggQEAgX19aTjdXZWJDb3JlMjBzZXRKU0VsZW1lbnRPbnNj
cm9sbEVQTjNKUwogX19aTks3V2ViQ29yZTZDaHJvbWUyMndpbGxSdW5Nb2RhbEhUTUxEaWFsb2dF
UEtOU181RnJhbWVFCiBfX1pOSzdXZWJDb3JlNkNocm9tZTE0Y2FuUnVuTW9kYWxOb3dFdgogX19a
TjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEybG9hZHNCbG9ja2VkRXYKLV9fWk43V2ViQ29yZTE0
V2luZG93RmVhdHVyZXNDMUVSS04zV1RGNlN0cmluZ0VSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dl
YkNvcmUxNFdpbmRvd0ZlYXR1cmVzQzJFUktOM1dURjZTdHJpbmdFUktOU185RmxvYXRSZWN0RQor
X19aTjdXZWJDb3JlMTRXaW5kb3dGZWF0dXJlc0MxRVJLTjNXVEY2U3RyaW5nRVJLTlNfMTJHcmFw
aGljc1JlY3RFCitfX1pON1dlYkNvcmUxNFdpbmRvd0ZlYXR1cmVzQzJFUktOM1dURjZTdHJpbmdF
UktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTE0V2luZG93RmVhdHVyZXMxOXBhcnNl
RGlhbG9nRmVhdHVyZXNFUktOM1dURjZTdHJpbmdFUk5TMV83SGFzaE1hcElTMl9TMl9OUzFfMTBT
dHJpbmdIYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzJfRUVTOF9FRQogX19aTjdXZWJDb3JlMTRXaW5k
b3dGZWF0dXJlczEyZmxvYXRGZWF0dXJlRVJLTjNXVEY3SGFzaE1hcElOUzFfNlN0cmluZ0VTM19O
UzFfMTBTdHJpbmdIYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzNfRUVTNl9FRVBLY2ZmZgogX19aTjdX
ZWJDb3JlMTRXaW5kb3dGZWF0dXJlczExYm9vbEZlYXR1cmVFUktOM1dURjdIYXNoTWFwSU5TMV82
U3RyaW5nRVMzX05TMV8xMFN0cmluZ0hhc2hFTlMxXzEwSGFzaFRyYWl0c0lTM19FRVM2X0VFUEtj
YgpAQCAtMjU0NzMsNyArMjU0NzMsNyBAQCBfX1pON1dlYkNvcmUxN1Bhc3N3b3JkSW5wdXRUeXBl
MjZzaG91bGRSCiBfX1pON1dlYkNvcmUxNU51bWJlcklucHV0VHlwZTIwaGFzVW5hY2NlcHRhYmxl
VmFsdWVFdgogX19aTjdXZWJDb3JlMTVOdW1iZXJJbnB1dFR5cGUxN2lzQWNjZXB0YWJsZVZhbHVl
RVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjBwYXJzZUxvY2FsaXplZE51bWJlckVSS04z
V1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI2cGFpbnRDb21wb3NpdGlv
bkJhY2tncm91bmRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTBGbG9hdFBvaW50RVBOU18x
MVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFaWkKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI2
cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTNH
cmFwaGljc1BvaW50RVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFaWkKIF9fWk5LN1dlYkNv
cmUxNU51bWJlcklucHV0VHlwZTIzY29udmVydEZyb21WaXNpYmxlVmFsdWVFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxNU51bWJlcklucHV0VHlwZTE1aGFuZGxlQmx1ckV2ZW50RXYKIF9f
Wk43V2ViQ29yZTE1TnVtYmVySW5wdXRUeXBlMThoYW5kbGVLZXlkb3duRXZlbnRFUE5TXzEzS2V5
Ym9hcmRFdmVudEUKQEAgLTI1OTExLDggKzI1OTExLDggQEAgX19aTjdXZWJDb3JlMTBSZW5kZXJW
aWV3Mjljb21wdXRlUHJlZmVycgogX19aTjdXZWJDb3JlMjJDU1NSYWRpYWxHcmFkaWVudFZhbHVl
MTRjcmVhdGVHcmFkaWVudEVQTlNfMTJSZW5kZXJPYmplY3RFUktOU183SW50U2l6ZUUKIF9fWk43
V2ViQ29yZTIyQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZUQwRXYKIF9fWk43V2ViQ29yZTlDU1NQYXJz
ZXIxOXBhcnNlUmFkaWFsR3JhZGllbnRFUk4zV1RGNlJlZlB0cklOU184Q1NTVmFsdWVFRUVOU18x
N0NTU0dyYWRpZW50UmVwZWF0RQotX19aTjdXZWJDb3JlTDI0ZGlzdGFuY2VUb0ZhcnRoZXN0Q29y
bmVyRVJLTlNfMTBGbG9hdFBvaW50RVJLTlNfOUZsb2F0U2l6ZUVSUzBfCi1fX1pOSzdXZWJDb3Jl
OUZsb2F0U2l6ZTE0ZGlhZ29uYWxMZW5ndGhFdgorX19aTjdXZWJDb3JlTDI0ZGlzdGFuY2VUb0Zh
cnRoZXN0Q29ybmVyRVJLTlNfMTNHcmFwaGljc1BvaW50RVJLTlNfMTJHcmFwaGljc1NpemVFUlMw
XworX19aTks3V2ViQ29yZTEyR3JhcGhpY3NTaXplMTRkaWFnb25hbExlbmd0aEV2CiBfX1pOSzdX
ZWJDb3JlMTZDU1NHcmFkaWVudFZhbHVlMTZpc0xpbmVhckdyYWRpZW50RXYKIF9fWk5LN1dlYkNv
cmUyMkNTU1JhZGlhbEdyYWRpZW50VmFsdWUxNmlzUmFkaWFsR3JhZGllbnRFdgogX19aTks3V2Vi
Q29yZTIyQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTdjc3NUZXh0RXYKQEAgLTI1OTI4LDkgKzI1OTI4
LDkgQEAgX19aTjdXZWJDb3JlMTdTVkdQb2x5Z29uRWxlbWVudDZjcmVhdGVFUgogX19aTjdXZWJD
b3JlMTRTVkdQb2x5RWxlbWVudEMyRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1lbnRF
CiBfX1pON1dlYkNvcmUxNFNWR1BvbHlFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJpYnV0ZUVQTlNf
OUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTIxcG9pbnRzTGlzdEZyb21TVkdEYXRhRVJOU18xMlNW
R1BvaW50TGlzdEVSS04zV1RGNlN0cmluZ0UKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMEZs
b2F0UG9pbnRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCi1fX1pOM1dURjZWZWN0b3JJTjdXZWJD
b3JlMTBGbG9hdFBvaW50RUxtMEVFYVNFUktTM18KLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUx
MEZsb2F0UG9pbnRFTG0wRUUxNHNocmlua0NhcGFjaXR5RW0KK19fWk4zV1RGNlZlY3RvcklON1dl
YkNvcmUxM0dyYXBoaWNzUG9pbnRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCitfX1pOM1dURjZW
ZWN0b3JJTjdXZWJDb3JlMTNHcmFwaGljc1BvaW50RUxtMEVFYVNFUktTM18KK19fWk4zV1RGNlZl
Y3RvcklON1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRFTG0wRUUxNHNocmlua0NhcGFjaXR5RW0KIF9f
Wk43V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQxOXN2Z0F0dHJpYnV0ZUNoYW5nZWRFUktOU18xM1F1
YWxpZmllZE5hbWVFCiBfX1pOSzdXZWJDb3JlMTRTVkdQb2x5RWxlbWVudDdpc1ZhbGlkRXYKIF9f
Wk43V2ViQ29yZTMzanNTdG9yYWdlUHJvdG90eXBlRnVuY3Rpb25HZXRJdGVtRVBOM0pTQzlFeGVj
U3RhdGVFCkBAIC0yNjAzMiwxMSArMjYwMzIsMTEgQEAgX19aTks3V2ViQ29yZTRGb250MThlbXBo
YXNpc01hcmtIZWlnaHRFUgogX19aTks3V2ViQ29yZTRGb250MjRnZXRFbXBoYXNpc01hcmtHbHlw
aERhdGFFUktOM1dURjEyQXRvbWljU3RyaW5nRVJOU185R2x5cGhEYXRhRQogX19aTks3V2ViQ29y
ZTE0U2ltcGxlRm9udERhdGEyMGVtcGhhc2lzTWFya0ZvbnREYXRhRVJLTlNfMTVGb250RGVzY3Jp
cHRpb25FCiBfX1pOSzdXZWJDb3JlNEZvbnQxOWVtcGhhc2lzTWFya0Rlc2NlbnRFUktOM1dURjEy
QXRvbWljU3RyaW5nRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2RyYXdFbXBoYXNp
c01hcmtzRVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS04zV1RGMTJBdG9taWNTdHJpbmdFUktO
U18xMEZsb2F0UG9pbnRFaWkKLV9fWk5LN1dlYkNvcmU0Rm9udDE3ZHJhd0VtcGhhc2lzTWFya3NF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRvbWljU3RyaW5n
RVJLTlNfMTBGbG9hdFBvaW50RWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQzMGRyYXdFbXBoYXNpc01h
cmtzRm9yU2ltcGxlVGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS04z
V1RGMTJBdG9taWNTdHJpbmdFUktOU18xMEZsb2F0UG9pbnRFaWkKK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0MTdkcmF3RW1waGFzaXNNYXJrc0VSS05TXzRGb250RVJLTlNfN1RleHRSdW5F
UktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCitfX1pOSzdXZWJD
b3JlNEZvbnQxN2RyYXdFbXBoYXNpc01hcmtzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdU
ZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSS05TXzEzR3JhcGhpY3NQb2ludEVpaQorX19a
Tks3V2ViQ29yZTRGb250MzBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHRFUE5TXzE1R3Jh
cGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTNH
cmFwaGljc1BvaW50RWlpCiBfX1pON1dlYkNvcmU0Rm9udDIyY2FuUmVjZWl2ZVRleHRFbXBoYXNp
c0VpCi1fX1pOSzdXZWJDb3JlNEZvbnQxN2RyYXdFbXBoYXNpc01hcmtzRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzExR2x5cGhCdWZmZXJFUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTBG
bG9hdFBvaW50RQorX19aTks3V2ViQ29yZTRGb250MTdkcmF3RW1waGFzaXNNYXJrc0VQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU18xMUdseXBoQnVmZmVyRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VS
S05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZUwyMW9mZnNldFRvTWlkZGxlT2ZHbHlw
aEVQS05TXzE0U2ltcGxlRm9udERhdGFFdAogX19aTjdXZWJDb3JlNTZqc0NTU1N0eWxlRGVjbGFy
YXRpb25Qcm90b3R5cGVGdW5jdGlvbklzUHJvcGVydHlJbXBsaWNpdEVQTjNKU0M5RXhlY1N0YXRl
RQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9uMThpc1Byb3BlcnR5SW1wbGljaXRF
UktOM1dURjZTdHJpbmdFCkBAIC0yNjM4MCw3ICsyNjM4MCw3IEBAIF9fWk43V2ViQ29yZTdEYXRh
UmVmSU5TXzE4U3R5bGVTaGFkb3dTVkcKIF9fWk43V2ViQ29yZTE4U3R5bGVTaGFkb3dTVkdEYXRh
QzFFUktTMF8KIF9fWk5LN1dlYkNvcmUxOFN0eWxlU2hhZG93U1ZHRGF0YWVxRVJLUzBfCiBfX1pO
N1dlYkNvcmUxNFNWR1JlbmRlclN0eWxlMThzZXRTdHJva2VEYXNoQXJyYXlFUktOM1dURjZWZWN0
b3JJTlNfOVNWR0xlbmd0aEVMbTBFRUUKLV9fWk5LN1dlYkNvcmUxMFNoYWRvd0RhdGExOWFkanVz
dFJlY3RGb3JTaGFkb3dFUk5TXzlGbG9hdFJlY3RFaQorX19aTks3V2ViQ29yZTEwU2hhZG93RGF0
YTE5YWRqdXN0UmVjdEZvclNoYWRvd0VSTlNfMTJHcmFwaGljc1JlY3RFaQogX19aTjdXZWJDb3Jl
MTNSZW5kZXJTVkdQYXRoMjNzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZUV2CiBfX1pON1dlYkNvcmUx
MlNWR0xhbmdTcGFjZTE2aXNLbm93bkF0dHJpYnV0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUUKIF9f
Wk43V2ViQ29yZTV3cml0ZUVSTlNfMTBUZXh0U3RyZWFtRVJLTlNfMTNSZW5kZXJTVkdSb290RWkK
QEAgLTI2Mzk3LDEwICsyNjM5NywxMCBAQCBfX1pOSzdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTRs
b2NhbFRyYW5zCiBfX1pON1dlYkNvcmVMMjR3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2VFUk5TXzEw
VGV4dFN0cmVhbUVQTlNfMTdSZW5kZXJTVkdSZXNvdXJjZUUKIF9fWk5LN1dlYkNvcmUyN1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjEycmVzb3VyY2VUeXBlRXYKIF9fWk43V2ViQ29yZTIwU1ZH
UGF0aFBhcnNlckZhY3RvcnkyNWJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW1FUE5TXzE3U1ZHUGF0
aEJ5dGVTdHJlYW1FUk4zV1RGNlN0cmluZ0VOU18xNVBhdGhQYXJzaW5nTW9kZUUKLV9fWk43V2Vi
Q29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RWJOU18x
OFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2
bW92ZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RWJOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9f
Wk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIxN2NvbnRpbnVlQ29uc3VtaW5nRXYKIF9f
Wk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIyNWluY3JlbWVudFBhdGhTZWdtZW50Q291
bnRFdgotX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRlcjZsaW5lVG9FUktOU18xMEZs
b2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhT
dHJpbmdCdWlsZGVyNmxpbmVUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGlu
YXRlTW9kZUUKIF9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI5Y2xvc2VQYXRoRXYK
IF9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2cmVzdWx0RXYKIF9fWk43V2ViQ29y
ZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI3Y2xlYW51cEV2CkBAIC0yNjQ3Myw5ICsyNjQ3Myw5IEBA
IF9fWk43V2ViQ29yZUwzNGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGgKIF9fWk4zV1RGNlZlY3Rv
ckl0TG0yNTZFRTZhcHBlbmRJdEVFdlBLVF9tCiBfX1pOM1dURjZWZWN0b3JJU3Q0cGFpcklQS043
V2ViQ29yZThGb250RGF0YUViRUxtMUVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjdXZWJDb3Jl
MTJCaWRpUmVzb2x2ZXJJTlNfMTVUZXh0UnVuSXRlcmF0b3JFTlNfMTZCaWRpQ2hhcmFjdGVyUnVu
RUUyN2xvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbEVOM1dURjdVbmljb2RlOURpcmVjdGlvbkUK
LV9fWk5LN1dlYkNvcmUxN1JlbmRlckNvbWJpbmVUZXh0MTZhZGp1c3RUZXh0T3JpZ2luRVJOU18x
MEZsb2F0UG9pbnRFUktOU185RmxvYXRSZWN0RQorX19aTks3V2ViQ29yZTE3UmVuZGVyQ29tYmlu
ZVRleHQxNmFkanVzdFRleHRPcmlnaW5FUk5TXzEzR3JhcGhpY3NQb2ludEVSS05TXzEyR3JhcGhp
Y3NSZWN0RQogX19aTks3V2ViQ29yZTE3UmVuZGVyQ29tYmluZVRleHQxOGNoYXJhY3RlcnNUb1Jl
bmRlckVpUlBLdFJpCi1fX1pOSzdXZWJDb3JlNEZvbnQzMWRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRv
bWljU3RyaW5nRVJLTlNfMTBGbG9hdFBvaW50RWlpCitfX1pOSzdXZWJDb3JlNEZvbnQzMWRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1Rl
eHRSdW5FUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pO
N1dlYkNvcmVMMTlub3JtYWxpemVDaGFyYWN0ZXJzRVBLdGpSTjNXVEY2VmVjdG9ySXRMbTBFRUUK
IF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGU5c2V0TG9jYWxlRVJLTjNXVEYxMkF0b21pY1N0cmlu
Z0UKIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUxMHNldEh5cGhlbnNFTlNfN0h5cGhlbnNFCkBA
IC0yNjQ5MCwxMCArMjY0OTAsMTAgQEAgX19aTjdXZWJDb3JlMTFSZW5kZXJTdHlsZTI0c2V0SHlw
aGVuYXRpbwogX19aTjNXVEYxMVZlY3Rvck1vdmVySUxiMEVTdDRwYWlySU5TXzEyQXRvbWljU3Ry
aW5nRU5TXzlSZXRhaW5QdHJJUEsxMF9fQ0ZMb2NhbGVFRUVFMTVtb3ZlT3ZlcmxhcHBpbmdFUEtT
OF9TQl9QUzhfCiBfX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRVN0NHBhaXJJTlNfMTJBdG9taWNT
dHJpbmdFTlNfOVJldGFpblB0cklQSzEwX19DRkxvY2FsZUVFRUU0bW92ZUVQS1M4X1NCX1BTOF8K
IF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDEzaXNDb21iaW5lVGV4dEV2Ci1fX1pOM1dURjlI
YXNoVGFibGVJaVN0NHBhaXJJaVBON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzJfOUZsb2F0
UmVjdEVFMTZHbHlwaE1ldHJpY3NQYWdlRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOF9FRU5T
XzdJbnRIYXNoSWpFRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TRV9J
UzdfRUVFRVNGX0UxNmxvb2t1cEZvcldyaXRpbmdFUktpCi1fX1pOM1dURjlIYXNoVGFibGVJaVN0
NHBhaXJJaVBON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzJfOUZsb2F0UmVjdEVFMTZHbHlw
aE1ldHJpY3NQYWdlRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOF9FRU5TXzdJbnRIYXNoSWpF
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TRV9JUzdfRUVFRVNGX0Uz
YWRkSWlTN19OU18xN0hhc2hNYXBUcmFuc2xhdG9ySVM4X1NIX1NDX0VFRUVTMV9JTlNfMTdIYXNo
VGFibGVJdGVyYXRvcklpUzhfU0FfU0NfU0hfU0ZfRUViRVJLVF9SS1QwXwotX19aTjNXVEY5SGFz
aFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzlGbG9hdFJl
Y3RFRTE2R2x5cGhNZXRyaWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183
SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3
X0VFRUVTRl9FNGZpbmRJaU5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklpUzhfU0NfRUVFRU5T
XzE3SGFzaFRhYmxlSXRlcmF0b3JJaVM4X1NBX1NDX1NIX1NGX0VFUktUXwotX19aTjNXVEY5SGFz
aFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzlGbG9hdFJl
Y3RFRTE2R2x5cGhNZXRyaWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183
SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3
X0VFRUVTRl9FNnJlaGFzaEVpCitfX1pOM1dURjlIYXNoVGFibGVJaVN0NHBhaXJJaVBON1dlYkNv
cmUxNUdseXBoTWV0cmljc01hcElOUzJfMTJHcmFwaGljc1JlY3RFRTE2R2x5cGhNZXRyaWNzUGFn
ZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183SW50SGFzaElqRUVOU18xNFBhaXJI
YXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3X0VFRUVTRl9FMTZsb29rdXBGb3JX
cml0aW5nRVJLaQorX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlw
aE1ldHJpY3NNYXBJTlMyXzEyR3JhcGhpY3NSZWN0RUUxNkdseXBoTWV0cmljc1BhZ2VFRU5TXzE4
UGFpckZpcnN0RXh0cmFjdG9ySVM4X0VFTlNfN0ludEhhc2hJakVFTlNfMTRQYWlySGFzaFRyYWl0
c0lOU18xMEhhc2hUcmFpdHNJaUVFTlNFX0lTN19FRUVFU0ZfRTNhZGRJaVM3X05TXzE3SGFzaE1h
cFRyYW5zbGF0b3JJUzhfU0hfU0NfRUVFRVMxX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySWlTOF9T
QV9TQ19TSF9TRl9FRWJFUktUX1JLVDBfCitfX1pOM1dURjlIYXNoVGFibGVJaVN0NHBhaXJJaVBO
N1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzJfMTJHcmFwaGljc1JlY3RFRTE2R2x5cGhNZXRy
aWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183SW50SGFzaElqRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3X0VFRUVTRl9FNGZpbmRJ
aU5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklpUzhfU0NfRUVFRU5TXzE3SGFzaFRhYmxlSXRl
cmF0b3JJaVM4X1NBX1NDX1NIX1NGX0VFUktUXworX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRwYWly
SWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzEyR3JhcGhpY3NSZWN0RUUxNkdseXBo
TWV0cmljc1BhZ2VFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM4X0VFTlNfN0ludEhhc2hJakVF
TlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJaUVFTlNFX0lTN19FRUVFU0ZfRTZy
ZWhhc2hFaQogX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMjFDb21wbGV4VGV4
dENvbnRyb2xsZXIxNENvbXBsZXhUZXh0UnVuRUVFTG0xNkVFMTVyZXNlcnZlQ2FwYWNpdHlFbQog
X19aTjdXZWJDb3JlMThSZW5kZXJMYXllckJhY2tpbmcxOXVwZGF0ZUNvbnRlbnRzU2NhbGVFZgog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOXVwZGF0ZUNvbnRlbnRzU2NhbGVFdgpAQCAt
Mjc3MzIsOCArMjc3MzIsOCBAQCBfX1pON1dlYkNvcmUxN0luc3BlY3RvckRPTUFnZW50OWhpZ2hs
aWdoCiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTdkcmF3Tm9kZUhpZ2hsaWdo
dEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pOSzdXZWJDb3JlMTdJbnNwZWN0b3JET01BZ2Vu
dDE3ZHJhd05vZGVIaWdobGlnaHRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RQogX19aTjdXZWJDb3Jl
MThET01Ob2RlSGlnaGxpZ2h0ZXIxN0RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29u
dGV4dEVQTlNfNE5vZGVFTlMwXzEzSGlnaGxpZ2h0TW9kZUUKLV9fWk43V2ViQ29yZTEyX0dMT0JB
TF9fTl8xMjRkcmF3T3V0bGluZWRRdWFkV2l0aENsaXBFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfOUZsb2F0UXVhZEVTNV9SS05TXzVDb2xvckUKLV9fWk43V2ViQ29yZTEyX0dMT0JBTF9fTl8x
MTZkcmF3T3V0bGluZWRRdWFkRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFF1YWRF
UktOU181Q29sb3JFCitfX1pON1dlYkNvcmUxMl9HTE9CQUxfX05fMTI0ZHJhd091dGxpbmVkUXVh
ZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NRdWFkRVM1X1JL
TlNfNUNvbG9yRQorX19aTjdXZWJDb3JlMTJfR0xPQkFMX19OXzExNmRyYXdPdXRsaW5lZFF1YWRF
Uk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1F1YWRFUktOU181Q29sb3JFCiBf
X1pON1dlYkNvcmVMMThnZXRKU0RhdGFiYXNlVGFibGVFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43
V2ViQ29yZTQ3anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkRhdGFiYXNlSWRF
UE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTIwSlNJbmplY3RlZFNjcmlwdEhvc3QxMGRh
dGFiYXNlSWRFUE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTI4NjcxLDEzICsyODY3MSwxMyBAQCBfX1pO
M0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE2Z2V0Q29uCiBfX1pOM0pTQzhCaW5kaW5nc0wy
MmNhbGxSdW50aW1lQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxM0lk
ZW50aWZpZXJSZXAzZ2V0RWkKIF9fWk43V2ViQ29yZUwxMGNhbGxQbHVnaW5FUE4zSlNDOUV4ZWNT
dGF0ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjBwYWdlTnVtYmVyRm9yRWxlbWVudEVQ
TlNfN0VsZW1lbnRFUktOU185RmxvYXRTaXplRQotX19aTjdXZWJDb3JlNUZyYW1lMTFzZXRQcmlu
dGluZ0ViUktOU185RmxvYXRTaXplRWZOU18xOUFkanVzdFZpZXdTaXplT3JOb3RFCitfX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDIwcGFnZU51bWJlckZvckVsZW1lbnRFUE5TXzdFbGVtZW50RVJL
TlNfMTJHcmFwaGljc1NpemVFCitfX1pON1dlYkNvcmU1RnJhbWUxMXNldFByaW50aW5nRWJSS05T
XzEyR3JhcGhpY3NTaXplRWZOU18xOUFkanVzdFZpZXdTaXplT3JOb3RFCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjZhZGp1c3RNZWRpYVR5cGVGb3JQcmludGluZ0ViCi1fX1pON1dlYkNvcmU5RnJh
bWVWaWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU185RmxvYXRTaXplRWZOU18xOUFk
anVzdFZpZXdTaXplT3JOb3RFCi1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDM2Y29tcHV0ZVBh
Z2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsRVJLTlNfOUZsb2F0U2l6ZUViCitfX1pON1dlYkNv
cmU5RnJhbWVWaWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU18xMkdyYXBoaWNzU2l6
ZUVmTlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQz
NmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbEVSS05TXzEyR3JhcGhpY3NTaXpl
RWIKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0NWJlZ2luRWZmCi1fX1pON1dlYkNvcmUxMlBy
aW50Q29udGV4dDEzbnVtYmVyT2ZQYWdlc0VQTlNfNUZyYW1lRVJLTlNfOUZsb2F0U2l6ZUUKK19f
Wk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTNudW1iZXJPZlBhZ2VzRVBOU181RnJhbWVFUktOU18x
MkdyYXBoaWNzU2l6ZUUKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjZwYWdlU2l6ZUFuZE1h
cmdpbnNJblBpeGVsc0VQTlNfNUZyYW1lRWlpaWlpaWkKIF9fWk43V2ViQ29yZThEb2N1bWVudDI2
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHNFaVJOU183SW50U2l6ZUVSaVMzX1MzX1MzXwogX19a
TjdXZWJDb3JlMTZDU1NTdHlsZVNlbGVjdG9yMTJzdHlsZUZvclBhZ2VFaQpAQCAtMjg4MTYsNyAr
Mjg4MTYsNyBAQCBfX1pON1dlYkNvcmUxOHdyaXRlU1ZHSW5saW5lVGV4dEVSTlNfMTBUCiBfX1pO
SzdXZWJDb3JlMTlSZW5kZXJTVkdJbmxpbmVUZXh0MTByZW5kZXJOYW1lRXYKIF9fWk5LN1dlYkNv
cmUxOVJlbmRlclNWR0lubGluZVRleHQxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29y
ZTEwUmVuZGVyVGV4dDE0Zmlyc3RSdW5PcmlnaW5FdgotX19aTjdXZWJDb3JlbHNFUk5TXzEwVGV4
dFN0cmVhbUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmVsc0VSTlNfMTBUZXh0U3RyZWFt
RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxMmhhc0ZyYWN0aW9uc0VkCiBfX1pO
N1dlYkNvcmUxMFRleHRTdHJlYW1sc0VqCiBfX1pON1dlYkNvcmUxM3dyaXRlU1ZHSW1hZ2VFUk5T
XzEwVGV4dFN0cmVhbUVSS05TXzE0UmVuZGVyU1ZHSW1hZ2VFaQpAQCAtMjg5NTcsNyArMjg5NTcs
NyBAQCBfX1pOSzdXZWJDb3JlNEZvbnQyMmZsb2F0V2lkdGhVc2luZ1NWR0ZvCiBfX1pOSzdXZWJD
b3JlNEZvbnQ3c3ZnRm9udEV2CiBfX1pOSzdXZWJDb3JlMTRTVkdGb250RWxlbWVudDQyaG9yaXpv
bnRhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzRVJLTjNXVEY2U3RyaW5nRVM0X1M0
X1M0XwogX19aTjdXZWJDb3JlTDMya2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHNFUk4z
V1RGNlZlY3RvcklOU18xNFNWR0tlcm5pbmdQYWlyRUxtMEVFRVJLTlMwXzZTdHJpbmdFUzdfUzdf
UzdfCi1fX1pOSzdXZWJDb3JlNEZvbnQyMGRyYXdUZXh0VXNpbmdTVkdGb250RVBOU18xNUdyYXBo
aWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpCitfX1pOSzdXZWJD
b3JlNEZvbnQyMGRyYXdUZXh0VXNpbmdTVkdGb250RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05T
XzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pON1dlYkNvcmUxNlNWR1RleHRS
dW5XYWxrZXJJTlNfMjhTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhRUU0d2Fsa0VSS05TXzdU
ZXh0UnVuRWJSS04zV1RGNlN0cmluZ0VpaQogX19aTjdXZWJDb3JlTDI4ZHJhd1RleHRVc2luZ1NW
R0ZvbnRDYWxsYmFja0VSS05TXzhTVkdHbHlwaEVSTlNfMjhTVkdUZXh0UnVuV2Fsa2VyRHJhd1Rl
eHREYXRhRQogX19aTjdXZWJDb3JlMjhTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhRDFFdgpA
QCAtMjkwNDIsMTAgKzI5MDQyLDEwIEBAIF9fWk5LN1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MTVz
dXBwb3J0c00KIF9fWk43V2ViQ29yZTE5U1ZHTWFya2VyTGF5b3V0SW5mbzE5Y2FsY3VsYXRlQm91
bmRhcmllc0VQTlNfMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlckVTMl9TMl9mUktOU180UGF0aEUK
IF9fWk43V2ViQ29yZUwyNXByb2Nlc3NTdGFydEFuZE1pZE1hcmtlcnNFUHZQS05TXzExUGF0aEVs
ZW1lbnRFCiBfX1pON1dlYkNvcmUxM1NWR01hcmtlckRhdGEzMHVwZGF0ZU1hcmtlckRhdGFGb3JQ
YXRoRWxlbWVudEVQS05TXzExUGF0aEVsZW1lbnRFCi1fX1pON1dlYkNvcmUxOVNWR01hcmtlckxh
eW91dEluZm8xN2FkZExheW91dGVkTWFya2VyRVBOU18yM1JlbmRlclNWR1Jlc291cmNlTWFya2Vy
RVJLTlNfMTBGbG9hdFBvaW50RWYKLV9fWk5LN1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFy
a2VyMjBtYXJrZXJUcmFuc2Zvcm1hdGlvbkVSS05TXzEwRmxvYXRQb2ludEVmZgorX19aTjdXZWJD
b3JlMTlTVkdNYXJrZXJMYXlvdXRJbmZvMTdhZGRMYXlvdXRlZE1hcmtlckVQTlNfMjNSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlckVSS05TXzEzR3JhcGhpY3NQb2ludEVmCitfX1pOSzdXZWJDb3JlMjNS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjIwbWFya2VyVHJhbnNmb3JtYXRpb25FUktOU18xM0dyYXBo
aWNzUG9pbnRFZmYKIF9fWk5LN1dlYkNvcmU4U1ZHQW5nbGU1dmFsdWVFdgotX19aTks3V2ViQ29y
ZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIyN21hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbkVS
S05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfMTBGbG9hdFBvaW50RWYKK19fWk5LN1dlYkNvcmUy
M1JlbmRlclNWR1Jlc291cmNlTWFya2VyMjdtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb25FUktO
U18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzEzR3JhcGhpY3NQb2ludEVmCiBfX1pOSzdXZWJDb3Jl
MTZTVkdNYXJrZXJFbGVtZW50MjJ2aWV3Qm94VG9WaWV3VHJhbnNmb3JtRWZmCiBfX1pOM1dURjZW
ZWN0b3JJTjdXZWJDb3JlMTJNYXJrZXJMYXlvdXRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBf
X1pOSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjIybG9jYWxUb1BhcmVudFRyYW5z
Zm9ybUV2CkBAIC0yOTA1Myw3ICsyOTA1Myw3IEBAIF9fWk43V2ViQ29yZTIzUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIyMXIKIF9fWk43V2ViQ29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIxN2Fw
cGx5Vmlld3BvcnRDbGlwRVJOU185UGFpbnRJbmZvRQogX19aTjdXZWJDb3JlMjV3cml0ZVNWR1Jl
c291cmNlQ29udGFpbmVyRVJOU18xMFRleHRTdHJlYW1FUktOU18xMlJlbmRlck9iamVjdEVpCiBf
X1pOSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjEwcmVuZGVyTmFtZUV2Ci1fX1pO
N1dlYkNvcmVsc0VSTlNfMTBUZXh0U3RyZWFtRVJLTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJD
b3JlbHNFUk5TXzEwVGV4dFN0cmVhbUVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29y
ZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIyNXJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGVFYgog
X19aTjdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlckQwRXYKIF9fWk43V2ViQ29yZTI3
anNTVkdQYXRoRWxlbWVudFBhdGhTZWdMaXN0RVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVl
RVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTI5MDg1LDcgKzI5MDg1LDcgQEAgX19aTjdXZWJDb3Jl
MjBTVkdQYXRoUGFyc2VyRmFjdG9yeTQwYnVpbAogX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlz
dFNvdXJjZUMxRVJLTlNfMTRTVkdQYXRoU2VnTGlzdEUKIF9fWk43V2ViQ29yZTIwU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UxNW1vdmVUb05leHRUb2tlbkV2CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdM
aXN0U291cmNlMTlwYXJzZVNWR1NlZ21lbnRUeXBlRVJOU18xNFNWR1BhdGhTZWdUeXBlRQotX19a
TjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJjZTE4cGFyc2VNb3ZlVG9TZWdtZW50RVJOU18x
MEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMThwYXJzZU1v
dmVUb1NlZ21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk5LN1dlYkNvcmUyMFNWR1BhdGhT
ZWdMaXN0U291cmNlMTFoYXNNb3JlRGF0YUV2CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0
U291cmNlRDBFdgogX19aTjdXZWJDb3JlNjRqc1NWR1BhdGhFbGVtZW50UHJvdG90eXBlRnVuY3Rp
b25DcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0y
OTA5NCw3ICsyOTA5NCw3IEBAIF9fWk5LN1dlYkNvcmUyNVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnMKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18yN0pTU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY0Fic0VOU18yNVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnNFRUVQTlNfMTJKU0RPTVdyYXBw
ZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dl
YkNvcmUyN0pTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fic0MxRVBOM0pTQzlTdHJ1Y3R1cmVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMjVTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljQWJzRUVFCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMTFuZXh0
Q29tbWFuZEVOU18xNFNWR1BhdGhTZWdUeXBlRQotX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlz
dFNvdXJjZTI0cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfUzJf
CitfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMjRwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEVTMl9TMl8KIF9fWk43V2ViQ29yZTU4anNTVkdQYXRo
RWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aEVQTjNKU0M5
RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDI1Y3JlYXRlU1ZHUGF0aFNl
Z0Nsb3NlUGF0aEVOU18xNFNWR1BhdGhTZWdSb2xlRQogX19aTks3V2ViQ29yZTE5U1ZHUGF0aFNl
Z0Nsb3NlUGF0aDExcGF0aFNlZ1R5cGVFdgpAQCAtMjkxMzMsNyArMjkxMzMsNyBAQCBfX1pON1dl
YkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xNFNWR1BhCiBfX1pON1dlYkNvcmU0M2pzU1ZHUGF0
aFNlZ0xpc3RQcm90b3R5cGVGdW5jdGlvblJlbW92ZUl0ZW1FUE4zSlNDOUV4ZWNTdGF0ZUUKIF9f
Wk43V2ViQ29yZTI5U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYxMHJlbW92ZUl0ZW1FalJp
CiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xNFNWR1BhdGhTZWdMaXN0RUUxNnJl
bW92ZUl0ZW1WYWx1ZXNFUlMxX2pSaQotX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRl
cjEyY3VydmVUb0N1YmljRVJLTlNfMTBGbG9hdFBvaW50RVMzX1MzX05TXzE4UGF0aENvb3JkaW5h
dGVNb2RlRQorX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRlcjEyY3VydmVUb0N1Ymlj
RVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19a
TjdXZWJDb3JlOFNWR1BhaW50MTdjcmVhdGVVUklBbmRDb2xvckVSS04zV1RGNlN0cmluZ0VSS05T
XzVDb2xvckUKIF9fWk5LN1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQx
MHJlbmRlck5hbWVFdgogX19aTjdXZWJDb3JlTDI5d3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRp
ZXNFUk5TXzEwVGV4dFN0cmVhbUVOU18yMEdyYWRpZW50U3ByZWFkTWV0aG9kRVJLTlNfMTVBZmZp
bmVUcmFuc2Zvcm1FYgpAQCAtMjkxNjgsMTMgKzI5MTY4LDEzIEBAIF9fWk4zV1RGOUhhc2hUYWJs
ZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmoKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTJS
ZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExUGF0dGVybkRhdGFFRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U0ZmluZElTM19OU18yMklkZW50aXR5SGFz
aFRyYW5zbGF0b3JJUzNfUzdfU0JfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzdfUzlf
U0JfU0dfU0VfRUVSS1RfCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2Jq
ZWN0RVN0NHBhaXJJUzNfUE5TMV8xMVBhdHRlcm5EYXRhRUVOU18xOFBhaXJGaXJzdEV4dHJhY3Rv
cklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFp
dHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FNmxvb2t1cEVSS1MzXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFQYXR0ZXJuRGF0YUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTZyZWhhc2hFaQot
X19aTks3V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMjNidWlsZFRpbGVJbWFnZVRy
YW5zZm9ybUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU18xN1BhdHRlcm5BdHRyaWJ1dGVzRVBLTlNf
MTdTVkdQYXR0ZXJuRWxlbWVudEVSTlNfOUZsb2F0UmVjdEVSTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
CitfX1pOSzdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4yM2J1aWxkVGlsZUltYWdl
VHJhbnNmb3JtRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzE3UGF0dGVybkF0dHJpYnV0ZXNFUEtO
U18xN1NWR1BhdHRlcm5FbGVtZW50RVJOU18xMkdyYXBoaWNzUmVjdEVSTlNfMTVBZmZpbmVUcmFu
c2Zvcm1FCiBfX1pOSzdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4xMHJlbmRlck5h
bWVFdgogX19aTjNXVEYyMGRlbGV0ZUFsbFBhaXJTZWNvbmRzSVBON1dlYkNvcmUxMVBhdHRlcm5E
YXRhRUtOU183SGFzaE1hcElQTlMxXzEyUmVuZGVyT2JqZWN0RVMzX05TXzdQdHJIYXNoSVM2X0VF
TlNfMTBIYXNoVHJhaXRzSVM2X0VFTlM5X0lTM19FRUVFRUV2UlQwXwogX19aTjdXZWJDb3JlMjRS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm5EMEV2Ci1fX1pUaG4zMjBfTjdXZWJDb3JlMTdTVkdQYXR0
ZXJuRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitfX1pUaG4z
MjBfTjdXZWJDb3JlMTdTVkdQYXR0ZXJuRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05T
XzEyR3JhcGhpY3NSZWN0RQogX19aVGhuMTY4X043V2ViQ29yZTE3U1ZHUGF0dGVybkVsZW1lbnQx
NnNldEhyZWZCYXNlVmFsdWVFUktOM1dURjZTdHJpbmdFCi1fX1pOSzdXZWJDb3JlMjRSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4xNWNyZWF0ZVRpbGVJbWFnZUVQTlNfMTJSZW5kZXJPYmplY3RFUktO
U18xN1BhdHRlcm5BdHRyaWJ1dGVzRVJLTlNfOUZsb2F0UmVjdEVTOF9SS05TXzE1QWZmaW5lVHJh
bnNmb3JtRQorX19aTks3V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMTVjcmVhdGVU
aWxlSW1hZ2VFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfMTdQYXR0ZXJuQXR0cmlidXRlc0VSS05T
XzEyR3JhcGhpY3NSZWN0RVM4X1JLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBfX1pON1dlYkNvcmU3
UGF0dGVybjI0c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
CiBfX1pUaG4xMjhfTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4xN3Bvc3RBcHBs
eVJlc291cmNlRVBOU18xMlJlbmRlck9iamVjdEVSUE5TXzE1R3JhcGhpY3NDb250ZXh0RXRQS05T
XzRQYXRoRQogX19aTkszV1RGOUhhc2hUYWJsZUlQS043V2ViQ29yZTE3U1ZHUGF0dGVybkVsZW1l
bnRFUzRfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTNF9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTBI
YXNoVHJhaXRzSVM0X0VFU0FfRThjb250YWluc0lTNF9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0
b3JJUzRfUzRfUzhfRUVFRWJSS1RfCkBAIC0yOTMxNCwxNSArMjkzMTQsMTUgQEAgX19aTjdXZWJD
b3JlMTVqc1NWR0FuZ2xlVmFsdWVFUE4zSlNDOUV4ZQogX19aTjdXZWJDb3JlMThqc1NWR0FuZ2xl
VW5pdFR5cGVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVy
RQogX19aTjdXZWJDb3JlMjJqc1NWR1NWR0VsZW1lbnRWaWV3Qm94RVBOM0pTQzlFeGVjU3RhdGVF
TlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxl
bWVudDE1dmlld0JveEFuaW1hdGVkRXYKLV9fWk43V2ViQ29yZTE5U1ZHQW5pbWF0ZWRQcm9wZXJ0
eTIxbG9va3VwT3JDcmVhdGVXcmFwcGVySU5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJ
TlNfOUZsb2F0UmVjdEVFRVMzX0VFTjNXVEYxMFBhc3NSZWZQdHJJVF9FRVBOU18xMFNWR0VsZW1l
bnRFUktOU18xM1F1YWxpZmllZE5hbWVFUktOUzVfMTJBdG9taWNTdHJpbmdFUlQwXwotX19aTjdX
ZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNf
MjZTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZklOU185RmxvYXRSZWN0RUVFCi1fX1pON1dlYkNv
cmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTdKU1NWR0FuaW1hdGVkUmVjdEVOU18yNlNWR0FuaW1hdGVk
UHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9hdFJlY3RFRUVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNK
U0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KK19fWk43V2ViQ29yZTE5
U1ZHQW5pbWF0ZWRQcm9wZXJ0eTIxbG9va3VwT3JDcmVhdGVXcmFwcGVySU5TXzI2U1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1JlY3RFRUVTM19FRU4zV1RGMTBQYXNzUmVm
UHRySVRfRUVQTlNfMTBTVkdFbGVtZW50RVJLTlNfMTNRdWFsaWZpZWROYW1lRVJLTlM1XzEyQXRv
bWljU3RyaW5nRVJUMF8KK19fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFUE5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfMTJH
cmFwaGljc1JlY3RFRUUKK19fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xN0pTU1ZHQW5p
bWF0ZWRSZWN0RU5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1Jl
Y3RFRUVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xv
YmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTE3SlNTVkdBbmltYXRlZFJlY3QxOGdldE93blBy
b3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVSTlMxXzEyUHJv
cGVydHlTbG90RQogX19aTjNKU0MxOGdldFN0YXRpY1ZhbHVlU2xvdElON1dlYkNvcmUxN0pTU1ZH
QW5pbWF0ZWRSZWN0RU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlI
YXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdX
ZWJDb3JlMjRqc1NWR0FuaW1hdGVkUmVjdEJhc2VWYWxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pT
VmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQotX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlZFByb3Bl
cnR5VGVhck9mZklOU185RmxvYXRSZWN0RUU3YmFzZVZhbEV2Ci1fX1pON1dlYkNvcmU0dG9KU0VQ
TjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xOFNWR1Byb3BlcnR5
VGVhck9mZklOU185RmxvYXRSZWN0RUVFCi1fX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNf
OUpTU1ZHUmVjdEVOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU185RmxvYXRSZWN0RUVFRUVQTlNf
MTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQ
VDBfCitfX1pON1dlYkNvcmUyNlNWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhp
Y3NSZWN0RUU3YmFzZVZhbEV2CitfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMkdyYXBo
aWNzUmVjdEVFRQorX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzlKU1NWR1JlY3RFTlNf
MThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1JlY3RFRUVFRVBOU18xMkpTRE9NV3Jh
cHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43
V2ViQ29yZTlKU1NWR1JlY3QxOGdldE93blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJL
TlMxXzEwSWRlbnRpZmllckVSTlMxXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MxOGdldFN0YXRp
Y1ZhbHVlU2xvdElON1dlYkNvcmU5SlNTVkdSZWN0RU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNf
OUV4ZWNTdGF0ZUVQS05TXzlIYXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJv
cGVydHlTbG90RQogX19aTjdXZWJDb3JlMTBqc1NWR1JlY3RYRVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTI5Mzk3LDcgKzI5Mzk3LDcgQEAgX19a
TjdXZWJDb3JlMTJTVkdMb2NhdGFibGUyM2ZhcnRoZXN0VmlldwogX19aTjdXZWJDb3JlNDBqc1NW
R0NpcmNsZUVsZW1lbnROZWFyZXN0Vmlld3BvcnRFbGVtZW50RVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk5LN1dlYkNvcmUyOVNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50MjJuZWFyZXN0Vmlld3BvcnRFbGVtZW50RXYKIF9fWk43V2ViQ29y
ZTI2UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIxN2FwcGx5Vmlld3BvcnRDbGlwRVJOU185UGFp
bnRJbmZvRQotX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVF
RDBFdgorX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1JlY3RF
RUQwRXYKIF9fWk43V2ViQ29yZThTVkdBbmdsZTE2c2V0VmFsdWVBc1N0cmluZ0VSS04zV1RGNlN0
cmluZ0VSaQogX19aTjdXZWJDb3JlMzNqc1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnRSb3RhdGVF
UE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdX
ZWJDb3JlMjVTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50MTRyb3RhdGVBbmltYXRlZEV2CkBAIC0y
OTQyMSw3ICsyOTQyMSw3IEBAIF9fWk43V2ViQ29yZTMwanNTVkdBbmltYXRlZExlbmd0aExpc3RB
bmkKIF9fWk43V2ViQ29yZTI1anNTVkdBbmltYXRlZEFuZ2xlQW5pbVZhbEVQTjNKU0M5RXhlY1N0
YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUyNlNWR0Fu
aW1hdGVkUHJvcGVydHlUZWFyT2ZmSU5TXzhTVkdBbmdsZUVFN2FuaW1WYWxFdgogX19aTjdXZWJD
b3JlMjRqc1NWR0FuaW1hdGVkUmVjdEFuaW1WYWxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQotX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlZFByb3BlcnR5
VGVhck9mZklOU185RmxvYXRSZWN0RUU3YW5pbVZhbEV2CitfX1pON1dlYkNvcmUyNlNWR0FuaW1h
dGVkUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhpY3NSZWN0RUU3YW5pbVZhbEV2CiBfX1pON1dl
YkNvcmUyN2pzU1ZHQ2lyY2xlRWxlbWVudFRyYW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83
SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUzM2pzU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0QW5pbVZhbEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8x
MElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUzOWpzU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvQW5pbVZhbEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZp
ZXJFCkBAIC0yOTQ5NSw3ICsyOTQ5NSw3IEBAIF9fWk43V2ViQ29yZTE4c2V0SlNTVkdBbmdsZVZh
bHVlRVBOM0pTQzkKIF9fWk43V2ViQ29yZTlKU1NWR1JlY3QzcHV0RVBOM0pTQzlFeGVjU3RhdGVF
UktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQog
X19aTjNKU0M5bG9va3VwUHV0SU43V2ViQ29yZTlKU1NWR1JlY3RFRUViUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwogX19aTjdX
ZWJDb3JlMTNzZXRKU1NWR1JlY3RYRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMw
XzdKU1ZhbHVlRQotX19aTks3V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9hdFJl
Y3RFRTRyb2xlRXYKK19fWk5LN1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMkdyYXBo
aWNzUmVjdEVFNHJvbGVFdgogX19aTjdXZWJDb3JlNDBqc1NWR1RyYW5zZm9ybUxpc3RQcm90b3R5
cGVGdW5jdGlvbkNsZWFyRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNEpTU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbzNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJF
TlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzlsb29rdXBQdXRJ
TjdXZWJDb3JlMjRKU1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9FRUViUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwpAQCAtMjk1MTgs
NyArMjk1MTgsNyBAQCBfX1pON1dlYkNvcmUyM1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50MTZyCiBf
X1pON1dlYkNvcmUyOVNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50MjFzdXBwbGVtZW50YWxU
cmFuc2Zvcm1FdgogX19aTks3V2ViQ29yZTIzU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQxM2FuaW1h
dGlvblBhdGhFdgogX19aTjdXZWJDb3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVudDI0Y2FsY3Vs
YXRlRnJvbUFuZFRvVmFsdWVzRVJLTjNXVEY2U3RyaW5nRVM0XwotX19aTjdXZWJDb3JlTDEwcGFy
c2VQb2ludEVSS04zV1RGNlN0cmluZ0VSTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlTDEw
cGFyc2VQb2ludEVSS04zV1RGNlN0cmluZ0VSTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJD
b3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVudDIyY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZUVmalBO
U18xNFNWR1NNSUxFbGVtZW50RQogX19aTjdXZWJDb3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDIwYXBwbHlSZXN1bHRzVG9UYXJnZXRFdgogX19aTjdXZWJDb3JlMTVTVkdHbHlwaEVsZW1lbnQx
OXJlbW92ZWRGcm9tRG9jdW1lbnRFdgpAQCAtMjk1OTksNyArMjk1OTksNyBAQCBfX1pON1dlYkNv
cmUyNlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50CiBfX1pON1dlYkNvcmUyMFNWR1RyYW5zZm9y
bURpc3RhbmNlQzFFUktOU18xMlNWR1RyYW5zZm9ybUVTM18KIF9fWk43V2ViQ29yZTIwU1ZHVHJh
bnNmb3JtRGlzdGFuY2VDMkVSS05TXzEyU1ZHVHJhbnNmb3JtRVMzXwogX19aTks3V2ViQ29yZTEy
U1ZHVHJhbnNmb3JtNXNjYWxlRXYKLV9fWk43V2ViQ29yZTlGbG9hdFNpemUxNW5hcnJvd1ByZWNp
c2lvbkVkZAorX19aTjdXZWJDb3JlMTJHcmFwaGljc1NpemUxNW5hcnJvd1ByZWNpc2lvbkVkZAog
X19aTks3V2ViQ29yZTIwU1ZHVHJhbnNmb3JtRGlzdGFuY2UxNHNjYWxlZERpc3RhbmNlRWYKIF9f
Wk5LN1dlYkNvcmUyMFNWR1RyYW5zZm9ybURpc3RhbmNlMTdhZGRUb1NWR1RyYW5zZm9ybUVSS05T
XzEyU1ZHVHJhbnNmb3JtRQogX19aTjdXZWJDb3JlMTRTVkdQb2x5RWxlbWVudDI2YXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXBFdgpAQCAtMjk2MDksNyArMjk2MDksNyBAQCBfX1pON1dlYkNvcmUx
NVNWR0ltYWdlRWxlbWVudDMwZmlsbEF0dHJpCiBfX1pON1dlYkNvcmUxM1NWR1VzZUVsZW1lbnQy
NmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwRXYKIF9fWk43V2ViQ29yZTEzU1ZHVXNlRWxlbWVu
dDMwZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwRXYKIF9fWk5LN1dlYkNvcmUxMlNWR1Ry
YW5zZm9ybTl0cmFuc2xhdGVFdgotX19aTjdXZWJDb3JlMTBGbG9hdFBvaW50MTVuYXJyb3dQcmVj
aXNpb25FZGQKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludDE1bmFycm93UHJlY2lzaW9uRWRk
CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTlzZXRNYXRyaXhFZGRkZGRkCiBfX1pON1dl
YkNvcmUxMFRyZWVTaGFyZWRJTlNfMThTVkdFbGVtZW50SW5zdGFuY2VFRTE0cmVtb3ZlZExhc3RS
ZWZFdgogX19aTjdXZWJDb3JlMThTVkdFbGVtZW50SW5zdGFuY2VEMEV2CkBAIC0yOTY2NywxMSAr
Mjk2NjcsMTEgQEAgX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm01c2tld1hFZAogX19aTjdX
ZWJDb3JlMTJTVkdUcmFuc2Zvcm04c2V0U2tld1lFZgogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFu
c2Zvcm01c2tld1lFZAogX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDE3
Y2FsY3VsYXRlRGlzdGFuY2VFUktOM1dURjZTdHJpbmdFUzRfCi1fX1pON1dlYkNvcmUyMFNWR1Bh
dGhTdHJpbmdCdWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xMEZsb2F0UG9pbnRFUzNf
TlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWls
ZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMTRsaW5l
VG9WZXJ0aWNhbEVmTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUyMFNWR1Bh
dGhTdHJpbmdCdWlsZGVyMTZsaW5lVG9Ib3Jpem9udGFsRWZOU18xOFBhdGhDb29yZGluYXRlTW9k
ZUUKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIxNmN1cnZlVG9RdWFkcmF0aWNF
UktOU18xMEZsb2F0UG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCi1fX1pON1dlYkNv
cmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTBG
bG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjBTVkdQYXRo
U3RyaW5nQnVpbGRlcjE2Y3VydmVUb1F1YWRyYXRpY0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19O
U18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxk
ZXIyMmN1cnZlVG9RdWFkcmF0aWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxMFNWR0VsZW1lbnQyNmF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwRXYKIF9fWk43V2ViQ29yZTEwU1ZHRWxlbWVudDMwZmlsbEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwRXYKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU4U1ZHR2x5cGgxMEFy
YWJpY0Zvcm1FTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCkBAIC0yOTcxMyw3ICsyOTcxMyw3IEBA
IF9fWk43V2ViQ29yZUwxNXZpZXdDb25zdHJ1Y3RvckVSS05TXzEzUXUKIF9fWk43V2ViQ29yZTE0
U1ZHVmlld0VsZW1lbnQ2Y3JlYXRlRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1lbnRF
CiBfX1pON1dlYkNvcmUxNFNWR1ZpZXdFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJpYnV0ZUVQTlNf
OUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTE0U1ZHVmlld0VsZW1lbnQxNnJlbmRlcmVySXNOZWVk
ZWRFUE5TXzExUmVuZGVyU3R5bGVFCi1fX1pUaG4xNzZfTjdXZWJDb3JlMTRTVkdWaWV3RWxlbWVu
dDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitfX1pUaG4xNzZfTjdXZWJD
b3JlMTRTVkdWaWV3RWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzEyR3JhcGhpY3NS
ZWN0RQogX19aVGhuMTc2X043V2ViQ29yZTE0U1ZHVmlld0VsZW1lbnQzMXNldFByZXNlcnZlQXNw
ZWN0UmF0aW9CYXNlVmFsdWVFUktOU18yMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9FCiBfX1pON1dl
YkNvcmUxNFNWR1ZpZXdFbGVtZW50RDBFdgogX19aTjdXZWJDb3JlMThTVkdDbGlwUGF0aEVsZW1l
bnQyMHBhcnNlTWFwcGVkQXR0cmlidXRlRVBOU185QXR0cmlidXRlRQpAQCAtMjk3MjcsMTUgKzI5
NzI3LDE1IEBAIF9fWk43V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMzEKIF9fWk43
V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMjFyZW1vdmVDbGllbnRGcm9tQ2FjaGVF
UE5TXzEyUmVuZGVyT2JqZWN0RWIKIF9fWk5LM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVu
ZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8xMUNsaXBwZXJEYXRhRUVOU18xOFBhaXJGaXJzdEV4
dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhh
c2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FOGNvbnRhaW5zSVMzX05TXzIySWRlbnRpdHlI
YXNoVHJhbnNsYXRvcklTM19TN19TQl9FRUVFYlJLVF8KIF9fWk43V2ViQ29yZTI0UmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyMTNhcHBseVJlc291cmNlRVBOU18xMlJlbmRlck9iamVjdEVQTlNfMTFS
ZW5kZXJTdHlsZUVSUE5TXzE1R3JhcGhpY3NDb250ZXh0RXQKLV9fWk43V2ViQ29yZTI0UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyMjJhcHBseUNsaXBwaW5nVG9Db250ZXh0RVBOU18xMlJlbmRlck9i
amVjdEVSS05TXzlGbG9hdFJlY3RFUzVfUE5TXzE1R3JhcGhpY3NDb250ZXh0RQorX19aTjdXZWJD
b3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIyMmFwcGx5Q2xpcHBpbmdUb0NvbnRleHRFUE5T
XzEyUmVuZGVyT2JqZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfUE5TXzE1R3JhcGhpY3NDb250
ZXh0RQogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWly
SVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183
UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNE
X0lTNl9FRUVFU0VfRTE2bG9va3VwRm9yV3JpdGluZ0VSS1MzXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTNhZGRJUzNfUzZf
TlNfMTdIYXNoTWFwVHJhbnNsYXRvcklTN19TR19TQl9FRUVFUzRfSU5TXzE3SGFzaFRhYmxlSXRl
cmF0b3JJUzNfUzdfUzlfU0JfU0dfU0VfRUViRVJLVF9SS1QwXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTRmaW5kSVMzX05T
XzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TN19TQl9FRUVFTlNfMTdIYXNoVGFibGVJdGVy
YXRvcklTM19TN19TOV9TQl9TR19TRV9FRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJD
b3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExQ2xpcHBlckRhdGFFRU5TXzE4UGFp
ckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRz
SU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U2bG9va3VwRVJLUzNfCiBfX1pO
M1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8x
MUNsaXBwZXJEYXRhRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMz
X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVT
RV9FNnJlaGFzaEVpCi1fX1pON1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjE2cGF0
aE9ubHlDbGlwcGluZ0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RQorX19a
TjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIxNnBhdGhPbmx5Q2xpcHBpbmdFUE5T
XzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pOSzdXZWJDb3JlMjlT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDEwdG9DbGlwUGF0aEVSTlNfNFBhdGhFCi1fX1pO
N1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjI0ZHJhd0NvbnRlbnRJbnRvTWFza0lt
YWdlRVBOU18xMUNsaXBwZXJEYXRhRVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTI0UmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMjRkcmF3Q29udGVudEludG9NYXNrSW1hZ2VFUE5TXzExQ2xp
cHBlckRhdGFFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVj
dDI4aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lckV2CiBfX1pOSzdXZWJDb3JlMjRSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIxMHJlbmRlck5hbWVFdgogX19aTjdXZWJDb3JlTDE4d3JpdGVOYW1l
VmFsdWVQYWlySU5TXzEyU1ZHVW5pdFR5cGVzMTFTVkdVbml0VHlwZUVFRXZSTlNfMTBUZXh0U3Ry
ZWFtRVBLY1RfCkBAIC0yOTc0Niw3ICsyOTc0Niw3IEBAIF9fWk5LN1dlYkNvcmUxOVJlbmRlclNW
R0lubGluZVRleHQxN29iamUKIF9fWk43V2ViQ29yZUwxOW1ldGFkYXRhQ29uc3RydWN0b3JFUktO
U18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEViCiBfX1pON1dlYkNvcmUxOFNWR01ldGFk
YXRhRWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEUKIF9f
Wk43V2ViQ29yZTE4U1ZHTWV0YWRhdGFFbGVtZW50RDBFdgotX19aVGhuMTkyX043V2ViQ29yZTE2
U1ZHTWFya2VyRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitf
X1pUaG4xOTJfTjdXZWJDb3JlMTZTVkdNYXJrZXJFbGVtZW50MTlzZXRWaWV3Qm94QmFzZVZhbHVl
RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxNFNWR1JlbmRlclN0eWxlMjJzZXRN
YXJrZXJTdGFydFJlc291cmNlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTVkdSZW5k
ZXJTdHlsZTIwc2V0TWFya2VyTWlkUmVzb3VyY2VFUktOM1dURjZTdHJpbmdFCiBfX1pOSzdXZWJD
b3JlMTRTVkdQb2x5RWxlbWVudDE1c3VwcG9ydHNNYXJrZXJzRXYKQEAgLTI5NzcwLDcgKzI5Nzcw
LDcgQEAgX19aTjdXZWJDb3JlTDE3c3ltYm9sQ29uc3RydWN0b3JFUktOU18xMwogX19aTjdXZWJD
b3JlMTZTVkdTeW1ib2xFbGVtZW50NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERv
Y3VtZW50RQogX19aTjdXZWJDb3JlMTZTVkdTeW1ib2xFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJp
YnV0ZUVQTlNfOUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDE5c3Zn
QXR0cmlidXRlQ2hhbmdlZEVSS05TXzEzUXVhbGlmaWVkTmFtZUUKLV9fWlRobjE5Ml9ON1dlYkNv
cmUxNlNWR1N5bWJvbEVsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU185RmxvYXRSZWN0
RQorX19aVGhuMTkyX043V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDE5c2V0Vmlld0JveEJhc2VW
YWx1ZUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTks3V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVu
dDIyc2VsZkhhc1JlbGF0aXZlTGVuZ3Roc0V2CiBfX1pUaG4xOTJfTjdXZWJDb3JlMTZTVkdTeW1i
b2xFbGVtZW50MzFzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlRVJLTlNfMjJTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvRQogX19aTjdXZWJDb3JlMTZTVkdTeW1ib2xFbGVtZW50MTZyZW5kZXJl
cklzTmVlZGVkRVBOU18xMVJlbmRlclN0eWxlRQpAQCAtMjk4NTAsOCArMjk4NTAsOCBAQCBfX1pO
N1dlYkNvcmUxMlJlbmRlck9iamVjdDIzc2V0TmVlZHNUcmFuCiBfX1pOSzdXZWJDb3JlMTBTVkdF
bGVtZW50MTRpc0dyYWRpZW50U3RvcEV2CiBfX1pON1dlYkNvcmUzN2pzU1ZHR3JhZGllbnRFbGVt
ZW50R3JhZGllbnRUcmFuc2Zvcm1FUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBf
MTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMThTVkdHcmFkaWVudEVsZW1lbnQyNWdyYWRpZW50
VHJhbnNmb3JtQW5pbWF0ZWRFdgotX19aTjdXZWJDb3JlMThSZW5kZXJTVkdDb250YWluZXIxNm5v
ZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRF
UktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQotX19aTjdXZWJDb3JlMThSZW5k
ZXJTVkdDb250YWluZXIyNXBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXBFUktOU18xMEZsb2F0UG9p
bnRFCitfX1pON1dlYkNvcmUxOFJlbmRlclNWR0NvbnRhaW5lcjE2bm9kZUF0RmxvYXRQb2ludEVS
S05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEzR3JhcGhpY3NQ
b2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCitfX1pON1dlYkNvcmUxOFJlbmRlclNWR0NvbnRhaW5l
cjI1cG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcEVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43
V2ViQ29yZUwyN2NyZWF0ZVNWR0RlZnNFbGVtZW50V3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEwU1ZHRWxlbWVudEVF
RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzE2SlNTVkdEZWZzRWxlbWVudEVOU18x
NFNWR0RlZnNFbGVtZW50RUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwogX19aTjdXZWJDb3JlMTZKU1NWR0RlZnNFbGVtZW50
QzFFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xNFNWR0RlZnNFbGVtZW50RUVFCkBAIC0yOTg2MiwxMSArMjk4NjIsMTEgQEAgX19a
TjdXZWJDb3JlMTZKU1NWR0RlZnNFbGVtZW50RDFFdgogX19aVGhuOF9ON1dlYkNvcmUxNFNWR0Rl
ZnNFbGVtZW50RDBFdgogX19aVGhuOF9ON1dlYkNvcmUxNVNWR01QYXRoRWxlbWVudEQwRXYKIF9f
Wk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyQzFFdgotX19aTjdXZWJDb3JlMjFTVkdQ
YXRoU2VnTGlzdEJ1aWxkZXI2bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RWJOU18xOFBhdGhDb29y
ZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyNm1vdmVUb0VS
S05TXzEzR3JhcGhpY3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNv
cmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjE3Y29udGludWVDb25zdW1pbmdFdgogX19aTjdXZWJD
b3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIyNWluY3JlbWVudFBhdGhTZWdtZW50Q291bnRFdgot
X19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEw
RmxvYXRQb2ludEVTM19TM19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKLV9fWk43V2ViQ29yZTIx
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xMEZsb2F0UG9p
bnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdM
aXN0QnVpbGRlcjEyY3VydmVUb0N1YmljRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4
UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIx
OGN1cnZlVG9DdWJpY1Ntb290aEVSS05TXzEzR3JhcGhpY3NQb2ludEVTM19OU18xOFBhdGhDb29y
ZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTE0U1ZHUGF0aEVsZW1lbnQzN2NyZWF0ZVNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnNFZmZmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCiBfX1pON1dl
YkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjljbG9zZVBhdGhFdgogX19aTjdXZWJDb3JlMjFT
VkdQYXRoU2VnTGlzdEJ1aWxkZXI3Y2xlYW51cEV2CkBAIC0yOTkwMCw3ICsyOTkwMCw3IEBAIF9f
Wk43V2ViQ29yZTIwU1ZHUGF0aFBhcnNlckZhY3RvcnkzMGJ1aWwKIF9fWk43V2ViQ29yZTE0U1ZH
UGF0aEJsZW5kZXJDMUV2CiBfX1pON1dlYkNvcmUxNFNWR1BhdGhCbGVuZGVyMTdibGVuZEFuaW1h
dGVkUGF0aEVmUE5TXzEzU1ZHUGF0aFNvdXJjZUVTMl9QTlNfMTVTVkdQYXRoQ29uc3VtZXJFCiBf
X1pON1dlYkNvcmUxNFNWR1BhdGhCbGVuZGVyMThibGVuZE1vdmVUb1NlZ21lbnRFdgotX19aTjdX
ZWJDb3JlMTRTVkdQYXRoQmxlbmRlcjIzYmxlbmRBbmltYXRlZEZsb2F0UG9pbnRFUktOU18xMEZs
b2F0UG9pbnRFUzNfCitfX1pON1dlYkNvcmUxNFNWR1BhdGhCbGVuZGVyMjNibGVuZEFuaW1hdGVk
RmxvYXRQb2ludEVSS05TXzEzR3JhcGhpY3NQb2ludEVTM18KIF9fWk43V2ViQ29yZTE0U1ZHUGF0
aEJsZW5kZXIyNGJsZW5kQ3VydmVUb0N1YmljU2VnbWVudEV2CiBfX1pON1dlYkNvcmUxNFNWR1Bh
dGhCbGVuZGVyMzBibGVuZEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFdgogX19aTjdXZWJDb3Jl
MTRTVkdQYXRoQmxlbmRlcjdjbGVhbnVwRXYKQEAgLTI5OTM1LDcgKzI5OTM1LDcgQEAgX19aTjdX
ZWJDb3JlMjdKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZQogX19aTjdXZWJDb3JlMjVTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsRDBFdgogX19aTjdXZWJDb3JlMzNKU1NWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWxEMUV2CiBfX1pON1dlYkNvcmUzMVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWxEMEV2Ci1fX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjZsaW5lVG9F
UktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUy
MVNWR1BhdGhTZWdMaXN0QnVpbGRlcjZsaW5lVG9FUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQ
YXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MjVjcmVhdGVT
VkdQYXRoU2VnTGluZXRvQWJzRWZmTlNfMTRTVkdQYXRoU2VnUm9sZUUKIF9fWk43V2ViQ29yZTIx
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMTRsaW5lVG9WZXJ0aWNhbEVmTlNfMThQYXRoQ29vcmRpbmF0
ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MzNjcmVhdGVTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnNFZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCkBAIC0yOTk5Nyw5ICsyOTk5Nyw5
IEBAIF9fWk43V2ViQ29yZTI5SlNTVkdQYXRoU2VnTGluZXRvVmVydGljYWwKIF9fWk43V2ViQ29y
ZTI3U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsRDBFdgogX19aTjdXZWJDb3JlMzFKU1NWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsRDFFdgogX19aTjdXZWJDb3JlMjlTVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbFJlbEQwRXYKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVy
MTZjdXJ2ZVRvUXVhZHJhdGljRVJLTlNfMTBGbG9hdFBvaW50RVMzX05TXzE4UGF0aENvb3JkaW5h
dGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIxNmN1cnZlVG9RdWFk
cmF0aWNFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBf
X1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MzVjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Fic0VmZmZmTlNfMTRTVkdQYXRoU2VnUm9sZUUKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTBGbG9hdFBvaW50RU5T
XzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxk
ZXIyMmN1cnZlVG9RdWFkcmF0aWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50NDFjcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFic0VmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCiBf
X1pOSzdXZWJDb3JlMjlTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FiczExcGF0aFNlZ1R5cGVF
dgogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzMxSlNTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0Fic0VOU18yOVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzRUVFUE5TXzEySlNE
T01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwpA
QCAtMzAwNDUsMTIgKzMwMDQ1LDEyIEBAIF9fWk43V2ViQ29yZTMxSlNTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXQKIF9fWk43V2ViQ29yZTI5U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWxEMEV2
CiBfX1pON1dlYkNvcmUzN0pTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxEMUV2
CiBfX1pON1dlYkNvcmUzNVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsRDBFdgot
X19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJ
TlMyXzEwRmxvYXRQb2ludEVFRUVFTG0wRUU0ZmlsbEVSS1M2X20KLV9fWk4zV1RGNlZlY3RvcklO
U182UmVmUHRySU43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TMl8xMEZsb2F0UG9pbnRF
RUVFRUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCitfX1pOM1dURjZWZWN0b3JJTlNfNlJlZlB0cklO
N1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOUzJfMTNHcmFwaGljc1BvaW50RUVFRUVMbTBF
RTRmaWxsRVJLUzZfbQorX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMThTVkdQ
cm9wZXJ0eVRlYXJPZmZJTlMyXzEzR3JhcGhpY3NQb2ludEVFRUVFTG0wRUUxNHNocmlua0NhcGFj
aXR5RW0KIF9fWk43V2ViQ29yZTM4anNTVkdQb2ludExpc3RQcm90b3R5cGVGdW5jdGlvbkdldEl0
ZW1FUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEy
U1ZHUG9pbnRMaXN0RUUyNGdldEl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVqUmkKLV9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlF
eGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2Zm
SU5TXzEwRmxvYXRQb2ludEVFRQotX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzEwSlNT
VkdQb2ludEVOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUVFRVBOU18x
MkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBU
MF8KK19fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxP
YmplY3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEzR3JhcGhpY3NQb2ludEVFRQorX19a
TjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzEwSlNTVkdQb2ludEVOU18xOFNWR1Byb3BlcnR5
VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5
RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTEwSlNT
VkdQb2ludDE4Z2V0T3duUHJvcGVydHlTbG90RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVu
dGlmaWVyRVJOUzFfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90
SU43V2ViQ29yZTEwSlNTVkdQb2ludEVOUzFfMTJKU0RPTVdyYXBwZXJFRUViUE5TXzlFeGVjU3Rh
dGVFUEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xv
dEUKIF9fWk43V2ViQ29yZTExanNTVkdQb2ludFhFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMzAwNTgsNyArMzAwNTgsNyBAQCBfX1pON1dlYkNv
cmUxMWpzU1ZHUG9pbnRZRVBOM0pTQzlFeGVjU3RhCiBfX1pON1dlYkNvcmUxMlNWR1BvaW50TGlz
dDE0Y3JlYXRlQW5pbWF0ZWRFUktTMF9TMl9SUzBfZgogX19aTjdXZWJDb3JlMzBTVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTE4ZGV0YWNoTGlzdFdyYXBw
ZXJzRWoKIF9fWk43V2ViQ29yZTEwSlNTVkdQb2ludEQxRXYKLV9fWk43V2ViQ29yZTE4U1ZHUHJv
cGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRDBFdgorX19aTjdXZWJDb3JlMThTVkdQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUVEMEV2CiBfX1pON1dlYkNvcmUxOVJlbmRl
clNWR0lubGluZVRleHQxNnBvc2l0aW9uRm9yUG9pbnRFUktOU184SW50UG9pbnRFCiBfX1pOSzdX
ZWJDb3JlMTZTVkdJbmxpbmVUZXh0Qm94MjdvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnRFUktO
U18xNVNWR1RleHRGcmFnbWVudEVmYgogX19aTjdXZWJDb3JlMTlSZW5kZXJTVkdJbmxpbmVUZXh0
MTRsb2NhbENhcmV0UmVjdEVQTlNfOUlubGluZUJveEVpUGkKQEAgLTMwMTIwLDExICszMDEyMCwx
MSBAQCBfX1pON1dlYkNvcmUzMWpzU1ZHU1ZHRWxlbWVudEN1cnJlbnRUcmFuCiBfX1pON1dlYkNv
cmUxMEpTU1ZHUG9pbnQzcHV0RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5T
MV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M5bG9va3VwUHV0SU43
V2ViQ29yZTEwSlNTVkdQb2ludEVFRWJQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVO
U183SlNWYWx1ZUVQS05TXzlIYXNoVGFibGVFUFRfCiBfX1pON1dlYkNvcmUxNHNldEpTU1ZHUG9p
bnRYRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQotX19aTks3
V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFNHJvbGVFdgotX19a
TjdXZWJDb3JlMjRTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmZJTlNfMTNTVkdTVkdFbGVtZW50RU5T
XzEwRmxvYXRQb2ludEVFMTJjb21taXRDaGFuZ2VFdgorX19aTks3V2ViQ29yZTE4U1ZHUHJvcGVy
dHlUZWFyT2ZmSU5TXzEzR3JhcGhpY3NQb2ludEVFNHJvbGVFdgorX19aTjdXZWJDb3JlMjRTVkdT
dGF0aWNQcm9wZXJ0eVRlYXJPZmZJTlNfMTNTVkdTVkdFbGVtZW50RU5TXzEzR3JhcGhpY3NQb2lu
dEVFMTJjb21taXRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MjJ1cGRhdGVD
dXJyZW50VHJhbnNsYXRlRXYKLV9fWk43V2ViQ29yZTI0U1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
SU5TXzEzU1ZHU1ZHRWxlbWVudEVOU18xMEZsb2F0UG9pbnRFRUQwRXYKLV9fWk43V2ViQ29yZTE4
U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRDJFdgorX19aTjdXZWJDb3JlMjRT
VkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmZJTlNfMTNTVkdTVkdFbGVtZW50RU5TXzEzR3JhcGhpY3NQ
b2ludEVFRDBFdgorX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUVEMkV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxMWlzU1ZHSW5saW5lRXYK
IF9fWk43V2ViQ29yZTEwU1ZHRWxlbWVudDIzY3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWRFdgogX19a
TjdXZWJDb3JlMThqc1NWR0dFbGVtZW50U3R5bGVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMzAxNDUsOCArMzAxNDUsOCBAQCBfX1pON1dlYkNv
cmUxM1NWR1NWR0VsZW1lbnQxOHN5bmNocm9uaXplCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1l
bnQzMHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpb0V2CiBfX1pON1dlYkNvcmUyMWpzU1ZH
U1ZHRWxlbWVudEhlaWdodEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElk
ZW50aWZpZXJFCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxNGhlaWdodEFuaW1hdGVkRXYK
LV9fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9hdFJlY3RFRTEyY29tbWl0
Q2hhbmdlRXYKLV9fWk43V2ViQ29yZTE3U1ZHUHJvcGVydHlUcmFpdHNJTlNfOUZsb2F0UmVjdEVF
OHRvU3RyaW5nRVJLUzFfCitfX1pON1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMkdy
YXBoaWNzUmVjdEVFMTJjb21taXRDaGFuZ2VFdgorX19aTjdXZWJDb3JlMTdTVkdQcm9wZXJ0eVRy
YWl0c0lOU18xMkdyYXBoaWNzUmVjdEVFOHRvU3RyaW5nRVJLUzFfCiBfX1pON1dlYkNvcmUxM3Nl
dEpTU1ZHUmVjdFlFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmUxN3NldEpTU1ZHUmVjdFdpZHRoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84
SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMThzZXRKU1NWR1JlY3RIZWlnaHRF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCkBAIC0zMDE5Miwx
MyArMzAxOTIsMTMgQEAgX19aTjdXZWJDb3JlMTZTVkdTdHlsZWRFbGVtZW50MjRnZXRQcmVzZQog
X19aTjdXZWJDb3JlMTNTdHlsZWRFbGVtZW50MjJnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsRU5TXzIw
TWFwcGVkQXR0cmlidXRlRW50cnlFUE5TXzlBdHRyaWJ1dGVFCiBfX1pON1dlYkNvcmU0NmpzU1ZH
U1ZHRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRlU1ZHUG9pbnRFUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDE0Y3JlYXRlU1ZHUG9pbnRFdgotX19aTjdX
ZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUUxMmNvbW1pdENoYW5n
ZUV2CitfX1pON1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRF
RTEyY29tbWl0Q2hhbmdlRXYKIF9fWk43V2ViQ29yZTE0c2V0SlNTVkdQb2ludFlFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUpTU1ZH
TnVtYmVyRDFFdgogX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJZkVEMEV2CiBfX1pO
N1dlYkNvcmUzNWpzU1ZHTWF0cml4UHJvdG90eXBlRnVuY3Rpb25JbnZlcnNlRVBOM0pTQzlFeGVj
U3RhdGVFCiBfX1pON1dlYkNvcmU0MmpzU1ZHUG9pbnRQcm90b3R5cGVGdW5jdGlvbk1hdHJpeFRy
YW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRQotX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludDE1bWF0
cml4VHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCitfX1pOSzdXZWJDb3JlMTNHcmFw
aGljc1BvaW50MTVtYXRyaXhUcmFuc2Zvcm1FUktOU18xNUFmZmluZVRyYW5zZm9ybUUKIF9fWk5L
N1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTNtYXBFZGRSZFMxXwogX19aTjdXZWJDb3JlNDVqc1NW
R1NWR0VsZW1lbnRQcm90b3R5cGVGdW5jdGlvbkNyZWF0ZVNWR1JlY3RFUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDEzY3JlYXRlU1ZHUmVjdEV2CkBAIC0zMDIy
NSw4ICszMDIyNSw4IEBAIF9fWk43V2ViQ29yZTE2anNTVkdTVkdFbGVtZW50WEVQTjNKU0M5RXgK
IF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDl4QW5pbWF0ZWRFdgogX19aTks3V2ViQ29yZTIy
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDEwcmVuZGVyTmFtZUV2CiBfX1pON1dlYkNvcmUyNWpzU1ZH
UmVjdEVsZW1lbnRDbGFzc05hbWVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBf
MTBJZGVudGlmaWVyRQotX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIxOGhp
dFRlc3RDbGlwQ29udGVudEVSS05TXzlGbG9hdFJlY3RFUktOU18xMEZsb2F0UG9pbnRFCi1fX1pO
N1dlYkNvcmUyNFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjE2bm9kZUF0RmxvYXRQb2ludEVSS05T
XzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEwRmxvYXRQb2ludEVO
U18xM0hpdFRlc3RBY3Rpb25FCitfX1pON1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjE4aGl0VGVzdENsaXBDb250ZW50RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xM0dyYXBoaWNz
UG9pbnRFCitfX1pON1dlYkNvcmUyNFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjE2bm9kZUF0Rmxv
YXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEz
R3JhcGhpY3NQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCiBfX1pON1dlYkNvcmUyNlJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOWlkQ2hhbmdlZEV2CiBfX1pON1dlYkNvcmUyOVNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50MTZpc0tub3duQXR0cmlidXRlRVJLTlNfMTNRdWFsaWZpZWROYW1l
RQogX19aTjdXZWJDb3JlMzNqc1NWR0NsaXBQYXRoRWxlbWVudENsaXBQYXRoVW5pdHNFUE4zSlND
OUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMzAyNDQsOSAr
MzAyNDQsOSBAQCBfX1pON1dlYkNvcmUyMEpTU1ZHTWV0YWRhdGFFbGVtZW50RDFFdgogX19aVGhu
OF9ON1dlYkNvcmUxOFNWR01ldGFkYXRhRWxlbWVudEQwRXYKIF9fWk43V2ViQ29yZTE1U1ZHSW1h
Z2VFbGVtZW50MTlzeW5jaHJvbml6ZVByb3BlcnR5RVJLTlNfMTNRdWFsaWZpZWROYW1lRQogX19a
TjdXZWJDb3JlMTVTVkdJbWFnZUVsZW1lbnQxNXN5bmNocm9uaXplSHJlZkV2Ci1fX1pON1dlYkNv
cmUyNlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyMjVwb2ludElzSW5zaWRlVmlld3BvcnRDbGlw
RVJLTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTRzdHJva2VD
b250YWluc0VSS05TXzEwRmxvYXRQb2ludEViCi1fX1pOSzdXZWJDb3JlNFBhdGgxNHN0cm9rZUNv
bnRhaW5zRVBOU18xOFN0cm9rZVN0eWxlQXBwbGllckVSS05TXzEwRmxvYXRQb2ludEUKK19fWk43
V2ViQ29yZTI2UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIyNXBvaW50SXNJbnNpZGVWaWV3cG9y
dENsaXBFUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUxM1JlbmRlclNWR1BhdGgx
NHN0cm9rZUNvbnRhaW5zRVJLTlNfMTNHcmFwaGljc1BvaW50RWIKK19fWk5LN1dlYkNvcmU0UGF0
aDE0c3Ryb2tlQ29udGFpbnNFUE5TXzE4U3Ryb2tlU3R5bGVBcHBsaWVyRVJLTlNfMTNHcmFwaGlj
c1BvaW50RQogX19aTks3V2ViQ29yZTEzU1ZHVXNlRWxlbWVudDI4aW5zdGFuY2VGb3JTaGFkb3dU
cmVlRWxlbWVudEVQTlNfNE5vZGVFCiBfX1pOSzdXZWJDb3JlMTNTVkdVc2VFbGVtZW50MjhpbnN0
YW5jZUZvclNoYWRvd1RyZWVFbGVtZW50RVBOU180Tm9kZUVQTlNfMThTVkdFbGVtZW50SW5zdGFu
Y2VFCiBfX1pOSzdXZWJDb3JlMThTVkdFbGVtZW50SW5zdGFuY2UxN3NoYWRvd1RyZWVFbGVtZW50
RXYKQEAgLTMwMzMyLDcgKzMwMzMyLDcgQEAgX19aTjdXZWJDb3JlMjRpc01pZGRsZU1vdXNlQnV0
dG9uRXZlbnRFUAogX19aTks3V2ViQ29yZTExU1ZHQUVsZW1lbnQ2dGFyZ2V0RXYKIF9fWk43V2Vi
Q29yZTE3SlNTVkdJbWFnZUVsZW1lbnQzcHV0RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVu
dGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M5bG9v
a3VwUHV0SU43V2ViQ29yZTE3SlNTVkdJbWFnZUVsZW1lbnRFRUViUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwotX19aTjdXZWJD
b3JlMTRSZW5kZXJTVkdJbWFnZTE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVl
c3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEwRmxvYXRQb2ludEVOU18xM0hpdFRlc3RBY3Rp
b25FCitfX1pON1dlYkNvcmUxNFJlbmRlclNWR0ltYWdlMTZub2RlQXRGbG9hdFBvaW50RVJLTlNf
MTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfMTNHcmFwaGljc1BvaW50
RU5TXzEzSGl0VGVzdEFjdGlvbkUKIF9fWk5LN1dlYkNvcmUxNlNWR1NjcmlwdEVsZW1lbnQyN2Fk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMc0VSTjNXVEYxMUxpc3RIYXNoU2V0SU5TXzRLVVJMRUxt
MjU2RU5TXzhLVVJMSGFzaEVFRQogX19aTks3V2ViQ29yZTE1U1ZHSW1hZ2VFbGVtZW50MjdhZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHNFUk4zV1RGMTFMaXN0SGFzaFNldElOU180S1VSTEVMbTI1
NkVOU184S1VSTEhhc2hFRUUKIF9fWk43V2ViQ29yZTQxanNTVkdEb2N1bWVudFByb3RvdHlwZUZ1
bmN0aW9uQ3JlYXRlRXZlbnRFUE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTMwMzkyLDEzICszMDM5Miwx
MyBAQCBfX1pON1dlYkNvcmUxNVNWR0ltYWdlRWxlbWVudDE3c3luY2hyb25pCiBfX1pON1dlYkNv
cmUxNVNWR0ltYWdlRWxlbWVudDMwc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvRXYKIF9f
Wk43V2ViQ29yZTE1U1ZHSW1hZ2VFbGVtZW50MzZzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWRFdgogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDI1Y3JlYXRlU1ZHUGF0aFNl
Z01vdmV0b1JlbEVmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCi1fX1pON1dlYkNvcmUyMFNWR1BhdGhT
ZWdMaXN0U291cmNlMzBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5TXzEwRmxvYXRQ
b2ludEVTMl8KK19fWk43V2ViQ29yZTIwU1ZHUGF0aFNlZ0xpc3RTb3VyY2UzMHBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50RVMyXwogX19aTks3V2ViQ29y
ZTE5U1ZHUGF0aFNlZ01vdmV0b1JlbDExcGF0aFNlZ1R5cGVFdgogX19aTjdXZWJDb3JlMjRqc1NW
R1BhdHRlcm5FbGVtZW50V2lkdGhFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBf
MTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMTdTVkdQYXR0ZXJuRWxlbWVudDEzd2lkdGhBbmlt
YXRlZEV2CiBfX1pON1dlYkNvcmU0MWpzU1ZHUG9pbnRMaXN0UHJvdG90eXBlRnVuY3Rpb25SZW1v
dmVJdGVtRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlO
U18xMlNWR1BvaW50TGlzdEVFMjdyZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZH
QW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFalJpCi1fX1pON1dlYkNvcmUxOFNWR1By
b3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRTEzZGV0YWNoV3JhcHBlckV2CitfX1pON1dl
YkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRTEzZGV0YWNoV3Jh
cHBlckV2CiBfX1pON1dlYkNvcmUyMlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2lu
dExpc3RFRTEyY29tbWl0Q2hhbmdlRXYKIF9fWk43V2ViQ29yZTI4anNTVkdQb2x5Z29uRWxlbWVu
dFRyYW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZp
ZXJFCiBfX1pON1dlYkNvcmU1MGpzU1ZHU1ZHRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRl
U1ZHVHJhbnNmb3JtRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0zMDQwNyw3ICszMDQwNyw3IEBAIF9f
Wk43V2ViQ29yZTEyU1ZHVHJhbnNmb3JtQzFFTlMwXzE2U1ZHVHIKIF9fWk5LN1dlYkNvcmUxM1NW
R1NWR0VsZW1lbnQxMWN1cnJlbnRWaWV3RXYKIF9fWk43V2ViQ29yZTExU1ZHVmlld1NwZWNDMUVQ
TlNfMTBTVkdFbGVtZW50RQogX19aTjdXZWJDb3JlMTFTVkdWaWV3U3BlYzEzcGFyc2VWaWV3U3Bl
Y0VSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTExU1ZHVmlld1NwZWMxOXNldFZpZXdCb3hC
YXNlVmFsdWVFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTFTVkdWaWV3U3BlYzE5c2V0
Vmlld0JveEJhc2VWYWx1ZUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTFTVkdW
aWV3U3BlYzMxc2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZUVSS05TXzIyU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb0UKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDE3c2V0VXNlQ3VycmVu
dFZpZXdFYgogX19aTjdXZWJDb3JlMTFTVkdWaWV3U3BlY0QwRXYKQEAgLTMwNDI3LDkgKzMwNDI3
LDkgQEAgX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDE0Z2V0VG90YWxMZQogX19aTjdXZWJD
b3JlMjZqc1NWR1BvbHlsaW5lRWxlbWVudFBvaW50c0VQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNW
YWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU0MWpzU1ZHUG9pbnRMaXN0UHJv
dG90eXBlRnVuY3Rpb25BcHBlbmRJdGVtRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUx
MHRvU1ZHUG9pbnRFTjNKU0M3SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5
SU5TXzEyU1ZHUG9pbnRMaXN0RUUyN2FwcGVuZEl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBT
VkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18x
OFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUVFRVJpCi1fX1pON1dlYkNvcmUy
MlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTMwcHJvY2Vzc0luY29t
aW5nTGlzdEl0ZW1XcmFwcGVyRVJOM1dURjZSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJ
TlNfMTBGbG9hdFBvaW50RUVFRUVQagotX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJD
b3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlMyXzEwRmxvYXRQb2ludEVFRUVFTG0wRUUxNGV4cGFu
ZENhcGFjaXR5RW0KK19fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEyU1ZHUG9pbnRM
aXN0RUUyN2FwcGVuZEl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5VGVh
ck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRVJpCitfX1pON1dlYkNvcmUyMlNWR0xpc3RQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTMwcHJvY2Vzc0luY29taW5nTGlzdEl0ZW1X
cmFwcGVyRVJOM1dURjZSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUVFRUVQagorX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMThTVkdQ
cm9wZXJ0eVRlYXJPZmZJTlMyXzEzR3JhcGhpY3NQb2ludEVFRUVFTG0wRUUxNGV4cGFuZENhcGFj
aXR5RW0KIF9fWk43V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQxOXN5bmNocm9uaXplUHJvcGVydHlF
UktOU18xM1F1YWxpZmllZE5hbWVFCiBfX1pON1dlYkNvcmUxNFNWR1BvbHlFbGVtZW50MTdzeW5j
aHJvbml6ZVBvaW50c0V2CiBfX1pON1dlYkNvcmUxNkpTU1ZHUmVjdEVsZW1lbnQzcHV0RVBOM0pT
QzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJv
cGVydHlTbG90RQpAQCAtMzA0NTAsMTAgKzMwNDUwLDEwIEBAIF9fWk5LN1dlYkNvcmUyNVNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQKIF9fWk43V2ViQ29yZTM2anNTVkdHRWxlbWVudFByb3RvdHlw
ZUZ1bmN0aW9uR2V0Q1RNRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmU0MmpzU1ZHR0Vs
ZW1lbnRQcm90b3R5cGVGdW5jdGlvbkdldFNjcmVlbkNUTUVQTjNKU0M5RXhlY1N0YXRlRQogX19a
TjdXZWJDb3JlNjBqc1NWR1RleHRDb250ZW50RWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uR2V0Q2hh
ck51bUF0UG9zaXRpb25FUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk5LN1dlYkNvcmUyMVNWR1RleHRD
b250ZW50RWxlbWVudDIwZ2V0Q2hhck51bUF0UG9zaXRpb25FUktOU18xMEZsb2F0UG9pbnRFCi1f
X1pOSzdXZWJDb3JlMTJTVkdUZXh0UXVlcnkyNWNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25FUktO
U18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3JlMjFTVkdUZXh0Q29udGVudEVsZW1lbnQyMGdl
dENoYXJOdW1BdFBvc2l0aW9uRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTks3V2ViQ29yZTEy
U1ZHVGV4dFF1ZXJ5MjVjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRVJLTlNfMTNHcmFwaGljc1Bv
aW50RQogX19aTks3V2ViQ29yZTEyU1ZHVGV4dFF1ZXJ5MzNjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0
aW9uQ2FsbGJhY2tFUE5TMF80RGF0YUVSS05TXzE1U1ZHVGV4dEZyYWdtZW50RQotX19aTjdXZWJD
b3JlTDI0Y2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzRVBOU18xMlNWR1RleHRRdWVyeTREYXRhRVJL
TlNfMTVTVkdUZXh0RnJhZ21lbnRFaVJOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlTDI0Y2Fs
Y3VsYXRlR2x5cGhCb3VuZGFyaWVzRVBOU18xMlNWR1RleHRRdWVyeTREYXRhRVJLTlNfMTVTVkdU
ZXh0RnJhZ21lbnRFaVJOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTU1anNTVkdUZXh0
Q29udGVudEVsZW1lbnRQcm90b3R5cGVGdW5jdGlvbkdldEV4dGVudE9mQ2hhckVQTjNKU0M5RXhl
Y1N0YXRlRQogX19aTks3V2ViQ29yZTIxU1ZHVGV4dENvbnRlbnRFbGVtZW50MTVnZXRFeHRlbnRP
ZkNoYXJFalJpCiBfX1pOSzdXZWJDb3JlMTJTVkdUZXh0UXVlcnkxN2V4dGVudE9mQ2hhcmFjdGVy
RWoKQEAgLTMwNjYxLDcgKzMwNjYxLDcgQEAgX19aTjdXZWJDb3JlOFNWR1BhaW50NnNldFVyaUVS
S04zV1RGNlN0cgogX19aTjdXZWJDb3JlMzFKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVs
M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5T
MV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDOWxvb2t1cFB1dElON1dlYkNvcmUzMUpTU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWxFRUViUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwogX19aTjdXZWJDb3JlMzVzZXRK
U1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsWEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpT
T2JqZWN0RU5TMF83SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFNlZ0xpc3RTb3VyY2Ux
OHBhcnNlTGluZVRvU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMjBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTE4cGFyc2VMaW5lVG9TZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRF
CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMjhwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50RVJmCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMjZwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudEVSZgogX19aTks3V2ViQ29yZTMwU1ZHQW5pbWF0ZWRMaXN0UHJv
cGVydHlUZWFyT2ZmSU5TXzE0U1ZHUGF0aFNlZ0xpc3RFRTIxaXNBbmltYXRlZExpc3RUZWFyT2Zm
RXYKQEAgLTMwNjg4LDE1ICszMDY4OCwxNSBAQCBfX1pON1dlYkNvcmUyOVNWR1BhdGhTZWdMaXN0
UHJvcGVydHlUZWFyCiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xNFNWR1BhdGhT
ZWdMaXN0RUUxN3JlcGxhY2VJdGVtVmFsdWVzRVJTMV9SS04zV1RGNlJlZlB0cklOU18xMFNWR1Bh
dGhTZWdFRUVqUmkKIF9fWk43V2ViQ29yZTU4anNTVkdQYXRoRWxlbWVudFByb3RvdHlwZUZ1bmN0
aW9uQ3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJD
b3JlNDFqc1NWR1BvaW50TGlzdFByb3RvdHlwZUZ1bmN0aW9uSW5pdGlhbGl6ZUVQTjNKU0M5RXhl
Y1N0YXRlRQotX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExpc3RF
RTI3aW5pdGlhbGl6ZVZhbHVlc0FuZFdyYXBwZXJzRVBOU18zMFNWR0FuaW1hdGVkTGlzdFByb3Bl
cnR5VGVhck9mZklTMV9FRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE4U1ZHUHJvcGVydHlUZWFyT2Zm
SU5TXzEwRmxvYXRQb2ludEVFRUVFUmkKK19fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5T
XzEyU1ZHUG9pbnRMaXN0RUUyN2luaXRpYWxpemVWYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdB
bmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNW
R1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRVJpCiBfX1pON1dlYkNvcmUx
NFNWR1BvbHlFbGVtZW50MzZzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRFdgog
X19aTjdXZWJDb3JlNDdqc1NWR1BvaW50TGlzdFByb3RvdHlwZUZ1bmN0aW9uSW5zZXJ0SXRlbUJl
Zm9yZUVQTjNKU0M5RXhlY1N0YXRlRQotX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNf
MTJTVkdQb2ludExpc3RFRTMzaW5zZXJ0SXRlbUJlZm9yZVZhbHVlc0FuZFdyYXBwZXJzRVBOU18z
MFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZklTMV9FRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRUVFalJpCitfX1pON1dlYkNv
cmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xMlNWR1BvaW50TGlzdEVFMzNpbnNlcnRJdGVtQmVmb3Jl
VmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMx
X0VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUVFRUVqUmkKIF9fWk5LN1dlYkNvcmUzMFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVh
ck9mZklOU18xMlNWR1BvaW50TGlzdEVFMjFpc0FuaW1hdGVkTGlzdFRlYXJPZmZFdgotX19aTjdX
ZWJDb3JlMjJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmSU5TXzEyU1ZHUG9pbnRMaXN0RUUxOHJlbW92
ZUl0ZW1Gcm9tTGlzdEVQTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUVF
YgotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEwRmxvYXRQb2ludEVMbTBFRTZpbnNlcnRJUzJf
RUV2bVJLVF8KK19fWk43V2ViQ29yZTIyU1ZHTGlzdFByb3BlcnR5VGVhck9mZklOU18xMlNWR1Bv
aW50TGlzdEVFMThyZW1vdmVJdGVtRnJvbUxpc3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5T
XzEzR3JhcGhpY3NQb2ludEVFRWIKK19fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxM0dyYXBoaWNz
UG9pbnRFTG0wRUU2aW5zZXJ0SVMyX0VFdm1SS1RfCiBfX1pON1dlYkNvcmU0MmpzU1ZHUG9pbnRM
aXN0UHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlSXRlbUVQTjNKU0M5RXhlY1N0YXRlRQotX19aTjdX
ZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExpc3RFRTI4cmVwbGFjZUl0ZW1W
YWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFf
RUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9p
bnRFRUVFRWpSaQorX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExp
c3RFRTI4cmVwbGFjZUl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5VGVh
ck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRWpSaQogX19aTjdXZWJDb3JlNDlqc1NWR1BhdGhF
bGVtZW50UHJvdG90eXBlRnVuY3Rpb25HZXRQb2ludEF0TGVuZ3RoRVBOM0pTQzlFeGVjU3RhdGVF
CiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MTZnZXRQb2ludEF0TGVuZ3RoRWYKIF9fWk43
V2ViQ29yZTM5anNTVkdUZXh0Q29udGVudEVsZW1lbnRSZXF1aXJlZEZlYXR1cmVzRVBOM0pTQzlF
eGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTMwNzg1LDcgKzMw
Nzg1LDcgQEAgX19aTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MTFkZXNlbGVjdEFsbAogX19aTjdX
ZWJDb3JlMzBzZXRKU1NWR1NWR0VsZW1lbnRDdXJyZW50U2NhbGVFUE4zSlNDOUV4ZWNTdGF0ZUVQ
TlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQx
NXNldEN1cnJlbnRTY2FsZUVmCiBfX1pOSzdXZWJDb3JlMTlTVkdQYXRoU2VnQ2xvc2VQYXRoMTlw
YXRoU2VnVHlwZUFzTGV0dGVyRXYKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVy
NWFyY1RvRWZmZmJiUktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitf
X1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjVhcmNUb0VmZmZiYlJLTlNfMTNHcmFw
aGljc1BvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRo
RWxlbWVudDIyY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbEVmZmZmZmJiTlNfMTRTVkdQYXRoU2VnUm9s
ZUUKIF9fWk5LN1dlYkNvcmUxNlNWR1BhdGhTZWdBcmNSZWwxMXBhdGhTZWdUeXBlRXYKIF9fWk43
V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xOEpTU1ZHUGF0aFNlZ0FyY1JlbEVOU18xNlNWR1Bh
dGhTZWdBcmNSZWxFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdK
U0RPTUdsb2JhbE9iamVjdEVQVDBfCkBAIC0zMDg1MiwxMSArMzA4NTIsMTEgQEAgX19aTjdXZWJD
b3JlMTNjcmVhdGVXcmFwcGVySU5TXzE1SlNTVkdTZQogX19aTjdXZWJDb3JlMTVKU1NWR1NldEVs
ZW1lbnRDMUVQTjNKU0M5U3RydWN0dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzEzU1ZHU2V0RWxlbWVudEVFRQogX19aTjdXZWJDb3JlMTJjYWNoZVdyYXBw
ZXJJTlNfMTNTVkdTZXRFbGVtZW50RUVFdlBOU18xNURPTVdyYXBwZXJXb3JsZEVQVF9QTlNfMTJK
U0RPTVdyYXBwZXJFCiBfX1pON1dlYkNvcmUxNUpTU1ZHU2V0RWxlbWVudDE4Z2V0T3duUHJvcGVy
dHlTbG90RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRVJOUzFfMTJQcm9wZXJ0
eVNsb3RFCi1fX1pOM1dURjlIYXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5T
XzlGbG9hdEhhc2hJZEVFTlNfMTBIYXNoVHJhaXRzSWRFRVM2X0UzYWRkSWRkTlNfMjJJZGVudGl0
eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVFRVN0NHBhaXJJTlNfMTdIYXNoVGFibGVJdGVyYXRvcklk
ZFMyX1M0X1M2X1M2X0VFYkVSS1RfUktUMF8KLV9fWk4zV1RGOUhhc2hUYWJsZUlkZE5TXzE3SWRl
bnRpdHlFeHRyYWN0b3JJZEVFTlNfOUZsb2F0SGFzaElkRUVOU18xMEhhc2hUcmFpdHNJZEVFUzZf
RTZyZWhhc2hFaQorX19aTjNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3Rvcklk
RUVOU18xMkdyYXBoaWNzSGFzaElkRUVOU18xMEhhc2hUcmFpdHNJZEVFUzZfRTNhZGRJZGROU18y
MklkZW50aXR5SGFzaFRyYW5zbGF0b3JJZGRTNF9FRUVFU3Q0cGFpcklOU18xN0hhc2hUYWJsZUl0
ZXJhdG9ySWRkUzJfUzRfUzZfUzZfRUViRVJLVF9SS1QwXworX19aTjNXVEY5SGFzaFRhYmxlSWRk
TlNfMTdJZGVudGl0eUV4dHJhY3RvcklkRUVOU18xMkdyYXBoaWNzSGFzaElkRUVOU18xMEhhc2hU
cmFpdHNJZEVFUzZfRTZyZWhhc2hFaQogX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTE0U1ZHU01J
TEVsZW1lbnQ5Q29uZGl0aW9uRUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCi1fX1pOM1dURjlIYXNo
VGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzlGbG9hdEhhc2hJZEVFTlNfMTBI
YXNoVHJhaXRzSWRFRVM2X0UxNmxvb2t1cEZvcldyaXRpbmdFUktkCi1fX1pOM1dURjlIYXNoVGFi
bGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzlGbG9hdEhhc2hJZEVFTlNfMTBIYXNo
VHJhaXRzSWRFRVM2X0U0ZmluZElkTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVF
RU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJZGRTMl9TNF9TNl9TNl9FRVJLVF8KK19fWk4zV1RGOUhh
c2hUYWJsZUlkZE5TXzE3SWRlbnRpdHlFeHRyYWN0b3JJZEVFTlNfMTJHcmFwaGljc0hhc2hJZEVF
TlNfMTBIYXNoVHJhaXRzSWRFRVM2X0UxNmxvb2t1cEZvcldyaXRpbmdFUktkCitfX1pOM1dURjlI
YXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzEyR3JhcGhpY3NIYXNoSWRF
RU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FNGZpbmRJZE5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRv
cklkZFM0X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySWRkUzJfUzRfUzZfUzZfRUVSS1RfCiBf
X1pTdDEzX19oZWFwX3NlbGVjdElQTjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM19TM18KIF9fWlN0
OW1ha2VfaGVhcElQTjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM18KIF9fWlN0OXNvcnRfaGVhcElQ
TjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM18KQEAgLTMwODg3LDEyICszMDg4NywxMiBAQCBfX1pO
N1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MThnZXRQYXRoU2VnCiBfX1pON1dlYkNvcmUyMFNWR1Bh
dGhQYXJzZXJGYWN0b3J5NDJnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJl
YW1FUE5TXzE3U1ZHUGF0aEJ5dGVTdHJlYW1FZlJtCiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXJDMUV2CiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIxNnNldERlc2lyZWRMZW5ndGhFZgotX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyNm1vdmVUb0VSS05TXzEwRmxvYXRQb2ludEViTlNfMThQYXRoQ29vcmRp
bmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI2bW92
ZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RWJOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43
V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjE3Y29udGludWVDb25zdW1pbmdF
dgogX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyMTZwYXRoU2VnbWVu
dEluZGV4RXYKIF9fWk43V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjdjbGVh
bnVwRXYKIF9fWk43V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjI1aW5jcmVt
ZW50UGF0aFNlZ21lbnRDb3VudEV2Ci1fX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXI2bGluZVRvRVJLTlNfMTBGbG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2Rl
RQorX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyNmxpbmVUb0VSS05T
XzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZUwx
NnZrZXJuQ29uc3RydWN0b3JFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEViCiBf
X1pON1dlYkNvcmUxNVNWR1ZLZXJuRWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVF
UE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZUwyOGNyZWF0ZVNWR1ZLZXJuRWxlbWVudFdyYXBw
ZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xMFNWR0VsZW1lbnRFRUUKQEAgLTMxMDEzLDcgKzMxMDEzLDcgQEAgX19aTjdXZWJD
b3JlMzFqc1NWR1VzZUVsZW1lbnRSZXF1aXJlZEZlYQogX19aTks3V2ViQ29yZTE1UmVuZGVyU1ZH
SW5saW5lMTltYXBMb2NhbFRvQ29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJi
Uk5TXzE0VHJhbnNmb3JtU3RhdGVFCiBfX1pON1dlYkNvcmU1M2pzU1ZHU1ZHRWxlbWVudFByb3Rv
dHlwZUZ1bmN0aW9uR2V0VHJhbnNmb3JtVG9FbGVtZW50RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pU
djBfbjU2X05LN1dlYkNvcmUyNVNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ2Z2V0Q1RNRU5TXzEy
U1ZHTG9jYXRhYmxlMTlTdHlsZVVwZGF0ZVN0cmF0ZWd5RQotX19aTks3V2ViQ29yZTRGb250MzJz
ZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWlpaQorX19aTks3V2ViQ29yZTRGb250MzJzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5n
U1ZHRm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpaQogX19aTks3V2Vi
Q29yZTEzUmVuZGVyU1ZHVGV4dDE0Zmlyc3RMaW5lQmxvY2tFdgogX19aTjdXZWJDb3JlMTVTVkdW
S2VybkVsZW1lbnQyNGJ1aWxkVmVydGljYWxLZXJuaW5nUGFpckVSTjNXVEY2VmVjdG9ySU5TXzE0
U1ZHS2VybmluZ1BhaXJFTG0wRUVFCiBfX1pOSzdXZWJDb3JlMTZTVkdDdXJzb3JFbGVtZW50Mjdh
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHNFUk4zV1RGMTFMaXN0SGFzaFNldElOU180S1VSTEVM
bTI1NkVOU184S1VSTEhhc2hFRUUKQEAgLTMxMDczLDcgKzMxMDczLDcgQEAgX19aTjNXVEY5SGFz
aFRhYmxlSVBON1dlYkNvcmUxMlJlbmRlck9iagogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNv
cmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX2lFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzVf
RUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMz
X0VFTlNCX0lpRUVFRVNDX0U0ZmluZElTM19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNf
UzVfUzlfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzVfUzdfUzlfU0VfU0NfRUVSS1Rf
CiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNf
aUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWly
SGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWlFRUVFU0NfRTZleHBhbmRFdgog
X19aTks3V2ViQ29yZTI2TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24xNmdldE9wZXJhdGlvblR5
cGVFdgotX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXg4bWFwUG9pbnRFUktOU18x
MkZsb2F0UG9pbnQzREUKK19fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OG1hcFBv
aW50RVJLTlNfMTVHcmFwaGljc1BvaW50M0RFCiBfX1pOSzdXZWJDb3JlMjRTaG9ydGhhbmRQcm9w
ZXJ0eVdyYXBwZXI2ZXF1YWxzRVBLTlNfMTFSZW5kZXJTdHlsZUVTM18KIF9fWk5LN1dlYkNvcmUy
NFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcjVibGVuZEVQS05TXzEzQW5pbWF0aW9uQmFzZUVQTlNf
MTFSZW5kZXJTdHlsZUVQS1M0X1M3X2QKIF9fWk5LN1dlYkNvcmUyNUZpbGxMYXllcnNQcm9wZXJ0
eVdyYXBwZXI1YmxlbmRFUEtOU18xM0FuaW1hdGlvbkJhc2VFUE5TXzExUmVuZGVyU3R5bGVFUEtT
NF9TN19kCkBAIC0zMTkzMywxNCArMzE5MzMsMTQgQEAgX19aTks3V2ViQ29yZTE5Q2FjaGVkQ1NT
U3R5bGVTaGVldDhlbmNvZAogX19aTjdXZWJDb3JlNkVkaXRvcjM0c2V0TWFya2VkVGV4dE1hdGNo
ZXNBcmVIaWdobGlnaHRlZEViCiBfX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNGb3JU
ZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFuZ2VFampiCiBfX1pOSzdXZWJDb3JlNVJhbmdlMThz
aGFkb3dUcmVlUm9vdE5vZGVFdgotX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MjBwYWludFRl
eHRNYXRjaE1hcmtlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMEZsb2F0UG9pbnRFUktO
U18xNERvY3VtZW50TWFya2VyRVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFCitfX1pON1dl
YkNvcmUxM0lubGluZVRleHRCb3gyMHBhaW50VGV4dE1hdGNoTWFya2VyRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzEzR3JhcGhpY3NQb2ludEVSS05TXzE0RG9jdW1lbnRNYXJrZXJFUE5TXzEx
UmVuZGVyU3R5bGVFUktOU180Rm9udEUKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyMjNyZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0VOU18xNERvY3VtZW50TWFya2VyMTBNYXJr
ZXJUeXBlRQotX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zMWdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtMEVFRQorX19aTks3
V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zMWdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXNF
Uk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUmVjdEVMbTBFRUUKIF9fWk5LN1dlYkNvcmU1RnJh
bWUxNHNlbGVjdGlvbkltYWdlRWIKIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEw
TlNNZW51SXRlbQogX19aTks3V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtN2VuYWJsZWRFdgogX19a
TjdXZWJDb3JlOUZyYW1lVmlldzEyc2V0TWVkaWFUeXBlRVJLTjNXVEY2U3RyaW5nRQotX19aTjdX
ZWJDb3JlMTJQcmludENvbnRleHQyOGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVFUktOU185
RmxvYXRTaXplRWIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFnZVJlY3Rz
V2l0aFBhZ2VTaXplRVJLTlNfMTJHcmFwaGljc1NpemVFYgogX19aTjdXZWJDb3JlMThjb3JyZWN0
ZWRUZXh0Q29sb3JFTlNfNUNvbG9yRVMwXwogX19aTjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgog
X19aTjdXZWJDb3JlMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUMxRVJLTlNfMTVQcm90ZWN0aW9u
U3BhY2VFUktOU18xMENyZWRlbnRpYWxFalJLTlNfMTZSZXNvdXJjZVJlc3BvbnNlRVJLTlNfMTNS
ZXNvdXJjZUVycm9yRQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTk4MCwxMSArOTgwLDYg
QEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3Bw
IFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCkBAIC05OTIsNiArOTg3
LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzUG9pbnQzRC5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQu
Y3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1NpemUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgXApAQCAtMTk2NiwxMSArMTk2Niw2IEBAIEhFQURFUlMgKz0g
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFNpemUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYW1pbHkuaCBcCkBAIC0xOTgyLDYgKzE5NzcsMTEgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuaCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1F1YWQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0Lmgg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMzRC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIFwKQEAgLTI1MjksMTAg
KzI1MjksMTAgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zs
b2F0UmVjdFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcCBcCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9JY29uUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwIFwKQEAgLTMw
MTcsNyArMzAxNyw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKICAg
ICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRS
ZWN0Q0cuY3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNH
LmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5j
cHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIFwKICAgICAg
ICAgICAgIHBsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAKIApAQCAtMzAyOSw3ICszMDI5LDcgQEAg
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKICAgICAgICAgICAgIHBsYXRmb3Jt
L21hYy9TaGFyZWRCdWZmZXJNYWMubW0gXAogICAgICAgICAgICAgcGxhdGZvcm0vbWFjL0tVUkxN
YWMubW0gXAogICAgICAgICAgICAgcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nTWFjLm1tIFwKLSAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0gXAorICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbSBcCiAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UmVjdE1hYy5tbSBcCiAgICAgICAgICAgICBw
bGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBcCiAgICAgICAgICAg
ICBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBj
b3B5KQpAQCAtMTQyMyw5ICsxNDIzLDkgQEAKICAgICAgICAgICAgICMgdGhlIHNwZWNpZmljIGV4
Y2x1c2lvbnMgaW4gdGhlICJzb3VyY2VzISIgbGlzdCBiZWxvdy4KICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsn
aW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWNcXC5tbSQnXSwKLSAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hY1xc
Lm1tJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFJlY3RNYWNcXC5tbSQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRTaXplTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUG9pbnRNYWNcXC5tbSQnXSwKKyAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NSZWN0TWFj
XFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzU2l6ZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hY1xcLmNwcCQnXSwKICAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWNcXC5tbSQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UmVj
dE1hY1xcLm1tJCddLApAQCAtMTQ5Miw5ICsxNDkyLDkgQEAKICAgICAgICAgfV0sCiAgICAgICAg
IFsnT1M9PSJtYWMiIGFuZCB1c2Vfc2tpYT09MScsIHsKICAgICAgICAgICAnc291cmNlcy8nOiBb
Ci0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2lu
dENHXFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0Zsb2F0UmVjdENHXFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUG9pbnRDR1xcLmNwcCQnXSwKKyAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RD
R1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc1NpemVDR1xcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDR1xcLmNwcCQnXSwKICAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0dcXC5jcHAkJ10s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjczNDEsNDYgKzI3MzQxLDYgQEAKIAkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50LmNwcCIKLQkJCQkJPgotCQkJCTwv
RmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0UG9pbnQuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UG9pbnQzRC5jcHAiCi0JCQkJCT4K
LQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGbG9hdFBvaW50M0QuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQot
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UXVhZC5jcHAiCi0J
CQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xGbG9hdFF1YWQuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8Rmls
ZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UmVjdC5jcHAi
Ci0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFJlY3QuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5j
cHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJ
CQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuY3Bw
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtMjc1MjksNiArMjc0ODksNDYgQEAKIAkJCQkJPgog
CQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEdyYXBoaWNzUG9pbnQuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NQb2ludC5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NQb2ludDNELmNwcCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdy
YXBoaWNzUG9pbnQzRC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NRdWFkLmNwcCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEdyYXBoaWNzUXVhZC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NSZWN0LmNw
cCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzUmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhp
Y3NTaXplLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzU2l6ZS5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcR3JhcGhpY3NUeXBlcy5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0yODM1NiwxNCAr
MjgzNTYsMTQgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJ
CQkJPEZpbGUKLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcRmxv
YXRQb2ludENHLmNwcCIKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Y2dcRm9udFBsYXRmb3JtRGF0YS5oIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgogCQkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgogCQkJCQkJCT4KIAkJCQkJCQk8VG9vbAotCQkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKIAkJCQkJ
CQkvPgogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgpAQCAtMjgzNzEsMTIgKzI4MzcxLDEyIEBACiAJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCiAJCQkJCQkJPgogCQkJCQkJCTxUb29sCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgogCQkJCQkJCS8+CiAJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZsb2F0UmVjdENHLmNwcCIKKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhZGllbnRDRy5jcHAiCiAJ
CQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJCQlOYW1lPSJEZWJ1Z19DYWly
b19DRkxpdGV8V2luMzIiCkBAIC0yODM5Niw3ICsyODM5Niw3IEBACiAJCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZsb2F0U2l6ZUNHLmNwcCIKKwkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhcGhpY3NDb250ZXh0Q0cuY3BwIgogCQkJ
CQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgpAQCAtMjg0MTYsNyArMjg0MTYsNyBAQAogCQkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGb250UGxhdGZvcm1EYXRhLmgiCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmgiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJCQlOYW1l
PSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCkBAIC0yODQzNiw3ICsyODQzNiw3IEBACiAJCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYWRpZW50Q0cuY3BwIgorCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc1BvaW50Q0cu
Y3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgpAQCAtMjg0NTYsNyArMjg0NTYsNyBAQAogCQkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc0NvbnRleHRDRy5jcHAiCisJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYXBoaWNzUmVjdENH
LmNwcCIKIAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQkJCU5hbWU9IkRl
YnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKQEAgLTI4NDc2LDE0ICsyODQ3NiwxNCBAQAogCQkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVDRy5oIgorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xj
Z1xHcmFwaGljc1NpemVDRy5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
IAkJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCiAJCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCiAJCQkJCQkJPgogCQkJCQkJCTxUb29sCi0JCQkJCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIgorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCQkJ
CS8+CiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CkBAIC0yODQ5MSw3ICsyODQ5MSw3IEBACiAJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CiAJCQkJCQkJPgogCQkJCQkJCTxUb29sCi0JCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29s
IgorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCQkJCS8+CiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjIzLDggKzIyMyw4IEBACiAJCTBGRDMwODBGMTE3Q0Y3RTcwMEE3OTFGNyAv
KiBSZW5kZXJGcmFtZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDMwODBEMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCAq
LzsgfTsKIAkJMEZEMzA4RDUxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDhEMzExN0Qx
Njg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCAqLzsgfTsKIAkJMEZEMzA4RDYxMTdEMTY4
NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEMzA4RDQxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFt
ZS5oICovOyB9OwotCQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ3MjM4MDBFQzhC
RDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZENzIzODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ3
MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLzsgfTsKKwkJMEZENzIzODIw
RUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBo
aWNzUXVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZENzIzODEwRUM4QkQ5MzAw
Q0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgKi87IH07CiAJCTBGRjUwMjVCMTAyQkE5MDEwMDY2
RjM5QSAvKiBET01TdHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkY1MDI1OTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5o
ICovOyB9OwogCQkwRkY1MDI1QzEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjUwMjVBMTAy
QkE5MDEwMDY2RjM5QSAvKiBET01TdHlsZU1lZGlhLm1tICovOyB9OwogCQkwRkY1MDI2MzEwMkJB
OTJDMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1MDI2MjEwMkJBOTJCMDA2NkYzOUEgLyog
RE9NU3R5bGVNZWRpYUludGVybmFsLmggKi87IH07CkBAIC00MzMzLDkgKzQzMzMsOSBAQAogCQlC
MjY2Q0Q0RDBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEIwQzNBRUM2NTAwRUIw
OEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJQjI2NkNENEUwQzNBRUM2NTAwRUIw
OEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjY2Q0Q0QzBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24u
aCAqLzsgfTsKIAkJQjI3NTM1NTgwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICov
OyB9OwotCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJCMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovOyB9OwotCQlCMjc1MzU1QTBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENH
LmNwcCAqLzsgfTsKLQkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi87IH07CisJCUIyNzUzNTU5MEIw
NTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzUG9pbnRDRy5jcHAgKi87IH07CisJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1JlY3RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3BwICov
OyB9OworCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkQwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUUwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3Bw
ICovOyB9OwogCQlCMjc1MzU1RjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMTBC
MDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5jcHAgKi87IH07CiAJCUIyNzUzNTYwMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2lu
dENHLmNwcCAqLzsgfTsKQEAgLTQzNDYsMTIgKzQzNDYsMTIgQEAKIAkJQjI3NTM1NjUwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1
bWVudEltYWdlLmggKi87IH07CiAJCUIyNzUzNTY2MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUz
ODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovOyB9OwogCQlCMjc1MzU2NzBCMDUzODE0
MDAyQ0U2NEYgLyogQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNzUzNTY4MEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNw
cCAqLzsgfTsKLQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNCMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQjI3NTM1NkEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVj
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmNwcCAqLzsgfTsKLQkJQjI3NTM1NkIw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIy
NzUzNTZDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZS5jcHAgKi87IH07Ci0JCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYg
LyogR3JhcGhpY3NQb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5jcHAg
Ki87IH07CisJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQjBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUIyNzUzNTZBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFw
aGljc1JlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI3NTM1M0MwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdC5jcHAgKi87IH07CisJ
CUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1JlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNF
MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemUuY3BwICovOyB9OworCQlCMjc1MzU2RDBC
MDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhp
Y3NTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQjI3NTM1NkUwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
Y29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QjI3NTM1NkYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bWFnZS5jcHAgKi87IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDIwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTQzNjIsOSArNDM2Miw5IEBACiAJCUIyNzUzNTc1MEIwNTM4MTQw
MDJDRTY0RiAvKiBJbnRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc2MEIwNTM4
MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3
NTM1NzcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEEwQjA1MzgxNDAwMkNFNjRGIC8qIENv
bG9yTWFjLm1tICovOyB9OwotCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2lu
dE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tICovOyB9OwotCQlCMjc1
MzU3OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UmVjdE1hYy5tbSAqLzsgfTsKLQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0U2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi87IH07CisJ
CUIyNzUzNTc4MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEIwQjA1MzgxNDAw
MkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRNYWMubW0gKi87IH07CisJCUIyNzUzNTc5MEIwNTM4MTQw
MDJDRTY0RiAvKiBHcmFwaGljc1JlY3RNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NS
ZWN0TWFjLm1tICovOyB9OworCQlCMjc1MzU3QTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NT
aXplTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSAqLzsgfTsKIAkJ
QjI3NTM1N0IwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlTWFjLm1tICovOyB9OwogCQlCMjc1MzU3QzBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9p
bnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi87IH07CiAJCUIyNzUz
NTdEMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFJlY3RNYWMubW0gKi87IH07CkBAIC00NDg1LDggKzQ0ODUsOCBAQAogCQlCMkNCOTI2MjBCNUJE
QTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8q
IERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSAqLzsgfTsKIAkJQjJDQjkyNjMwQjVCREEwMjAwOUJB
QTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVGMEI1QkRBMDIwMDlCQUE3OCAvKiBET01T
VkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi87IH07CiAJCUIyQ0I5MjY0MEI1QkRBMDIwMDlCQUE3
OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDQjkyNjAwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNW
R0VsZW1lbnRJbnN0YW5jZUxpc3QubW0gKi87IH07Ci0JCUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3
QiAvKiBGbG9hdFBvaW50M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJFMjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAg
Ki87IH07Ci0JCUIyRTI3Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlFMEIwRjJC
MDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhp
Y3NQb2ludDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBHcmFwaGljc1BvaW50M0QuY3BwICovOyB9
OworCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RTBCMEYyQjA5
MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJFNEVDOTcwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pv
b21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkU0RUM5NDBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmNwcCAqLzsgfTsKIAkJ
QjJFNEVDOTgwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFNEVDOTUwRDAwQzIyQjAwNDMyNjQz
IC8qIFNWR1pvb21FdmVudC5oICovOyB9OwogCQlCMkVEOTc3MTBCMUY1NUNFMDAyNTdEMEYgLyog
R3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENH
LmNwcCAqLzsgfTsKQEAgLTY2MDMsOCArNjYwMyw4IEBACiAJCTBGRDMwODBEMTE3Q0Y3RTcwMEE3
OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyRnJhbWVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDMw
OEQzMTE3RDE2ODQwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVySUZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEMzA4RDQxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJJRnJhbWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZENzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFF1YWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0
UXVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFF1YWQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MDBFQzhCRDkzMDBDQTVE
RDcgLyogR3JhcGhpY3NRdWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzUXVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ3MjM4MTBFQzhC
RDkzMDBDQTVERDcgLyogR3JhcGhpY3NRdWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzUXVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjUwMjU5MTAyQkE5MDEwMDY2RjM5QSAvKiBET01TdHlsZU1lZGlhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0eWxlTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZGNTAyNUExMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWEu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TdHlsZU1lZGlh
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY1MDI2MjEwMkJBOTJCMDA2NkYz
OUEgLyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTA5MjQsOSArMTA5MjQsOSBAQAogCQlCMjY2Q0Q0QjBDM0FFQzY1MDBFQjA4RDIgLyog
SlNTVkdFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU1ZHRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NkNE
NEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtYXRp
b25NYXRyaXhDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTJCMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0Q0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRT
aXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6
ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1MkIwQjA1MzgxNDAw
MkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NQb2ludENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdENHLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1JlY3RDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1NpemVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NTaXplQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUz
MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFBvaW50Q0cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5MzcsMTIgKzEwOTM3LDEyIEBA
CiAJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQREZEb2N1bWVudEltYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYgLyogQ29s
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0IwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZs
b2F0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1M0MwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmxvYXRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3
NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmxvYXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyNzUzNTNFMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0U2l6ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NQb2lu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTNCMEIwNTM4MTQwMDJD
RTY0RiAvKiBHcmFwaGljc1BvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHcmFwaGljc1BvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTND
MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzUmVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NT
aXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1Np
emUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzRjBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHcmFwaGljc1NpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDAw
QjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEljb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDEwQjA1Mzgx
NDAwMkNFNjRGIC8qIEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQyMEIw
NTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTUzLDkgKzEwOTUz
LDkgQEAKIAkJQjI3NTM1NDcwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI3NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRTaXplSGFzaC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjc1MzU0QTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZsb2F0UG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTRD
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRmxvYXRSZWN0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0U2l6ZU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1NEIwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzUG9pbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gR3JhcGhpY3NQb2ludE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdE1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc1JlY3RNYWMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFw
aGljc1NpemVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
R3JhcGhpY3NTaXplTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0
RTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gSW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyNzUzNTRGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbnRQb2ludE1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NTAwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW50UmVjdE1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMDgwLDggKzExMDgwLDggQEAK
IAkJQjJDQjkyNUUwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5z
dGFuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjVGMEI1QkRBMDIw
MDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVt
ZW50SW5zdGFuY2VMaXN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IERPTVNWR0VsZW1lbnRJbnN0YW5jZUxpc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9h
dFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQz
RC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdD
N0IgLyogR3JhcGhpY3NQb2ludDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHcmFwaGljc1BvaW50M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1BvaW50M0QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHWm9vbUV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJFNEVDOTUwRDAwQzIyQjAwNDMy
NjQzIC8qIFNWR1pvb21FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHWm9vbUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk2MEQw
MEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBTVkdab29tRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4OTIs
MTQgKzE3ODkyLDE0IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKLQkJCQlCMjc1MzUy
QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKLQkJCQlCMjc1MzUyQzBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLAotCQkJCUIyNzUzNTJEMEIwNTM4
MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2MEEwREE1NkNGMTAw
MjFFQjVEIC8qIEdyYWRpZW50Q0cuY3BwICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCAqLywKIAkJCQlCMkVEOTc3MDBCMUY1NUNFMDAy
NTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCTkzNDkwN0UzMTI1QkJCQzgw
MDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIw
MEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAorCQkJCUIy
NzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovLAorCQkJCUIy
NzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RDRy5jcHAgKi8sCisJCQkJQjI3
NTM1MkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCAqLywKIAkJCQlCMkEx
MEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCiAJCQkJMjI5MkIy
N0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKIAkJCQkyMkJE
OUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKQEAgLTE3OTI4
LDkgKzE3OTI4LDYgQEAKIAkJCQkzN0MyMzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRl
eHRDb250cm9sbGVyLmggKi8sCiAJCQkJMzdDMjM4MUYxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBs
ZXhUZXh0Q29udHJvbGxlckFUU1VJLmNwcCAqLywKIAkJCQkzN0MyMzgyMDEwOThDODQyMDBFRjlG
NzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQuY3BwICovLAotCQkJCUIyNzUzNTRC
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tICovLAotCQkJCUIyNzUzNTRDMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8sCi0JCQkJQjI3NTM1NEQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0U2l6ZU1hYy5tbSAqLywKIAkJCQlCMkFGRkM3NDBEMDBBNUMxMDAz
MDA3NEQgLyogRm9udENhY2hlTWFjLm1tICovLAogCQkJCTM3QzIzNjBBMTA5N0VERUQwMEVGOUY3
MiAvKiBGb250Q29tcGxleFRleHRNYWMuY3BwICovLAogCQkJCUIyQUZGQzc1MEQwMEE1QzEwMDMw
MDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLywKQEAgLTE3OTM5LDYgKzE3OTM2
LDkgQEAKIAkJCQlCMkFGRkM3QjBEMDBBNUMxMDAzMDA3NEQgLyogR2x5cGhQYWdlVHJlZU5vZGVN
YWMuY3BwICovLAogCQkJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRl
eHQzRE1hYy5tbSAqLywKIAkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3ND
b250ZXh0TWFjLm1tICovLAorCQkJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGlj
c1BvaW50TWFjLm1tICovLAorCQkJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGlj
c1JlY3RNYWMubW0gKi8sCisJCQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNz
U2l6ZU1hYy5tbSAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5t
bSAqLywKIAkJCQlCMjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMubW0gKi8sCiAJ
CQkJQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tICovLApAQCAtMTc5
ODMsMTYgKzE3OTgzLDYgQEAKIAkJCQk5MzgyREY1NzEwQThENUM5MDA5MjU2NTIgLyogQ29sb3JT
cGFjZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAq
LywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCi0J
CQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLAotCQkJCUIy
NzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCi0JCQkJQjJFMjdDOUQw
QjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgKi8sCi0JCQkJQjJFMjdDOUUwQjBG
MkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovLAotCQkJCTBGRDcyMzgxMEVDOEJEOTMw
MENBNURENyAvKiBGbG9hdFF1YWQuY3BwICovLAotCQkJCTBGRDcyMzgwMEVDOEJEOTMwMENBNURE
NyAvKiBGbG9hdFF1YWQuaCAqLywKLQkJCQlCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0LmNwcCAqLywKLQkJCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
LmggKi8sCi0JCQkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5jcHAgKi8s
Ci0JCQkJQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oICovLAogCQkJCUIy
QzNEQTRGMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmNwcCAqLywKIAkJCQlCMkMzREE1MDBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udC5oICovLAogCQkJCUJDQjkyRDRFMTI5MzU1MEIwMEM4Mzg3RiAv
KiBGb250QmFzZWxpbmUuaCAqLywKQEAgLTE4MDM0LDYgKzE4MDI0LDE2IEBACiAJCQkJMEY1ODBC
MDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBB
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKKwkJCQlCMjc1MzUzQTBC
MDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5jcHAgKi8sCisJCQkJQjI3NTM1M0IwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuaCAqLywKKwkJCQlCMkUyN0M5RDBCMEYyQjA5
MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmNwcCAqLywKKwkJCQlCMkUyN0M5RTBCMEYyQjA5
MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNELmggKi8sCisJCQkJMEZENzIzODEwRUM4QkQ5MzAw
Q0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgKi8sCisJCQkJMEZENzIzODAwRUM4QkQ5MzAwQ0E1
REQ3IC8qIEdyYXBoaWNzUXVhZC5oICovLAorCQkJCUIyNzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAv
KiBHcmFwaGljc1JlY3QuY3BwICovLAorCQkJCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBH
cmFwaGljc1JlY3QuaCAqLywKKwkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhp
Y3NTaXplLmNwcCAqLywKKwkJCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NT
aXplLmggKi8sCiAJCQkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMu
Y3BwICovLAogCQkJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmgg
Ki8sCiAJCQkJNzdBMTdBN0ExMkYyODkwQjAwNEUwMkY2IC8qIEdyYXBoaWNzVHlwZXMzRC5oICov
LApAQCAtMjExOTYsMTEgKzIxMTk2LDExIEBACiAJCQkJNDlFRUNERTYxMDUwM0MyNDAwMDk5RkFC
IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVCQzVEODIxMzhCNEM0RTAw
QTBDRjhBIC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5
OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjI3
NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUIyRTI3Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGRDcyMzgyMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUIyNzUzNTZEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhp
Y3NQb2ludDNELmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcg
LyogR3JhcGhpY3NRdWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2QjBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NSZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2RDBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDk5M0JF
NjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNjIyODc4NDBCNERCMzIyMDAwQzM0REYgLyogRm9jdXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUIyQzNEQTYxMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250LmggaW4gSGVhZGVycyAq
LywKQEAgLTI0MTA2LDE3ICsyNDEwNiwxNyBAQAogCQkJCUE4Q0ZGMDREMEExNTRGMDkwMDBBNDIz
NCAvKiBGaXhlZFRhYmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVDREU1MTA1
MDNDMjQwMDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkVC
QzVEODExMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUIyNzUzNTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50
Q0cuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnRNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQkwRkQ3MjM4MzBFQzhCRDkzMDBDQTVE
RDcgLyogRmxvYXRRdWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTZBMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1NUEwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUz
NTc5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlCMjc1MzU3QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNz
UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8q
IEdyYXBoaWNzUG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1OTBCMDUzODE0
MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUz
NTc4MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZENzIzODMwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCMjc1MzU2QTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGlj
c1JlY3RDRy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU3OTBCMDUzODE0MDAyQ0U2NEYg
LyogR3JhcGhpY3NSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NkMwQjA1Mzgx
NDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1
QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0OTkzQkU1MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjIwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YWNoZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUltYWdlTWFw
TGluay5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtNjg2LDcgKzY4Niw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNPZmZTY3IKICAgICBBU1NFUlQobV9yZW5kZXJlcik7CiAgICAg
SW50UmVjdCBjb250ZW50UmVjdCA9IG1fcmVuZGVyZXItPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93
UmVjdCgpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fcmVuZGVyZXItPmZyYW1lKCktPnZpZXco
KTsKLSAgICBGbG9hdFJlY3Qgdmlld1JlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsK
KyAgICBHcmFwaGljc1JlY3Qgdmlld1JlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsK
ICAgICB2aWV3UmVjdC5pbnRlcnNlY3QoY29udGVudFJlY3QpOwogICAgIHJldHVybiB2aWV3UmVj
dC5pc0VtcHR5KCk7CiB9CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmJvdW5kCiAgICAgCiAgICAgLy8gYWJzb2x1dGVGb2N1c1JpbmdRdWFk
cyB3aWxsIHF1ZXJ5IHRoZSBoaWVyYXJjaHkgYmVsb3cgdGhpcyBlbGVtZW50LCB3aGljaCBmb3Ig
bGFyZ2Ugd2VicGFnZXMgY2FuIGJlIHZlcnkgc2xvdy4KICAgICAvLyBGb3IgYSB3ZWIgYXJlYSwg
d2hpY2ggd2lsbCBoYXZlIHRoZSBtb3N0IGVsZW1lbnRzIG9mIGFueSBlbGVtZW50LCBhYnNvbHV0
ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAg
IFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgIGlmIChvYmotPmlzVGV4dCgpKQogICAg
ICAgICB0b1JlbmRlclRleHQob2JqKS0+YWJzb2x1dGVRdWFkcyhxdWFkcywgUmVuZGVyVGV4dDo6
Q2xpcFRvRWxsaXBzaXMpOwogICAgIGVsc2UgaWYgKGlzV2ViQXJlYSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3IucG0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDEwICs3NiwxMCBAQCBteSAlc3ZnVHlwZU5lZWRp
bmdUZWFyT2ZmID0gKAogICAgICJTVkdOdW1iZXIiID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8Zmxv
YXQ+IiwKICAgICAiU1ZHTnVtYmVyTGlzdCIgPT4gIlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZH
TnVtYmVyTGlzdD4iLAogICAgICJTVkdQYXRoU2VnTGlzdCIgPT4gIlNWR1BhdGhTZWdMaXN0UHJv
cGVydHlUZWFyT2ZmIiwKLSAgICAiU1ZHUG9pbnQiID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8Rmxv
YXRQb2ludD4iLAorICAgICJTVkdQb2ludCIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxHcmFwaGlj
c1BvaW50PiIsCiAgICAgIlNWR1BvaW50TGlzdCIgPT4gIlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmY8
U1ZHUG9pbnRMaXN0PiIsCiAgICAgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8iID0+ICJTVkdQcm9w
ZXJ0eVRlYXJPZmY8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4iLAotICAgICJTVkdSZWN0IiA9PiAi
U1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UmVjdD4iLAorICAgICJTVkdSZWN0IiA9PiAiU1ZHUHJv
cGVydHlUZWFyT2ZmPEdyYXBoaWNzUmVjdD4iLAogICAgICJTVkdTdHJpbmdMaXN0IiA9PiAiU1ZH
U3RhdGljTGlzdFByb3BlcnR5VGVhck9mZjxTVkdTdHJpbmdMaXN0PiIsCiAgICAgIlNWR1RyYW5z
Zm9ybSIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxTVkdUcmFuc2Zvcm0+IiwKICAgICAiU1ZHVHJh
bnNmb3JtTGlzdCIgPT4gIlNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4Niw3IEBAIHN1YiBB
ZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVkVHlwZQogICAgICR0eXBlID1+IHMvU1ZHQW5pbWF0ZWQv
LzsKIAogICAgIGlmICgkdHlwZSBlcSAiUG9pbnQiIG9yICR0eXBlIGVxICJSZWN0IikgewotICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJGbG9hdCR0eXBlLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IkdyYXBoaWNzJHR5cGUuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiU3Ry
aW5nIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyAr
MjEzLDcgQEAgc3ViIEdldFNWR1Byb3BlcnR5VHlwZXMKICAgICB9CiAKICAgICBpZiAoJHN2Z1By
b3BlcnR5VHlwZSkgewotICAgICAgICAkc3ZnUHJvcGVydHlUeXBlID0gIlNWR1BvaW50IiBpZiAk
c3ZnUHJvcGVydHlUeXBlIGVxICJGbG9hdFBvaW50IjsKKyAgICAgICAgJHN2Z1Byb3BlcnR5VHlw
ZSA9ICJTVkdQb2ludCIgaWYgJHN2Z1Byb3BlcnR5VHlwZSBlcSAiR3JhcGhpY3NQb2ludCI7CiAg
ICAgfQogCiAgICAgcmV0dXJuICgkc3ZnUHJvcGVydHlUeXBlLCAkc3ZnTGlzdFByb3BlcnR5VHlw
ZSwgJHN2Z05hdGl2ZVR5cGUpOwpAQCAtMjc1LDcgKzI3NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxudGVtcGxhdGU8dHlwZW5hbWUg
UHJvcGVydHlUeXBlPiBjbGFzcyBTVkdMaXN0UHJvcGVydHlUZWFyT2ZmO1xuIik7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgRmxvYXRSZWN0O1xu
IikgaWYgJHN2Z1Byb3BlcnR5VHlwZSAmJiAkc3ZnUHJvcGVydHlUeXBlIGVxICJGbG9hdFJlY3Qi
OworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNzIEdyYXBoaWNzUmVjdDtcbiIpIGlm
ICRzdmdQcm9wZXJ0eVR5cGUgJiYgJHN2Z1Byb3BlcnR5VHlwZSBlcSAiR3JhcGhpY3NSZWN0IjsK
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyAkY2xhc3NOYW1lIHtcbiIpOwogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJwdWJsaWM6XG4iKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJDYW52
YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzU3R5bGUuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOENhbnZhc0dyYWRpZW50
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBTdHJpbmcgQ1NTQ2FudmFzVmFsdWU6OmNzc1RleHQoKSBj
b25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZh
c0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIGNoYW5nZWRSZWN0
KQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpCiB7CiAgICAgSW50UmVjdCBpbWFnZUNo
YW5nZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0KTsKICAgICBSZW5kZXJPYmpl
Y3RTaXplQ291bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjYW52
YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVj
dCk7CisgICAgdmlydHVhbCB2b2lkIGNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQqLCBj
b25zdCBHcmFwaGljc1JlY3QmIGNoYW5nZWRSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgY2FudmFz
UmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBjYW52YXNEZXN0
cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMiArMTQyLDEyIEBA
IHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAgICBmbG9hdCBncmFk
aWVudExlbmd0aCA9IDA7CiAgICAgYm9vbCBjb21wdXRlZEdyYWRpZW50TGVuZ3RoID0gZmFsc2U7
CiAgICAgCi0gICAgRmxvYXRQb2ludCBncmFkaWVudFN0YXJ0ID0gZ3JhZGllbnQtPnAwKCk7Ci0g
ICAgRmxvYXRQb2ludCBncmFkaWVudEVuZDsKKyAgICBHcmFwaGljc1BvaW50IGdyYWRpZW50U3Rh
cnQgPSBncmFkaWVudC0+cDAoKTsKKyAgICBHcmFwaGljc1BvaW50IGdyYWRpZW50RW5kOwogICAg
IGlmIChpc0xpbmVhckdyYWRpZW50KCkpCiAgICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnQt
PnAxKCk7CiAgICAgZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudCgpKQotICAgICAgICBncmFkaWVu
dEVuZCA9IGdyYWRpZW50U3RhcnQgKyBGbG9hdFNpemUoZ3JhZGllbnQtPmVuZFJhZGl1cygpLCAw
KTsKKyAgICAgICAgZ3JhZGllbnRFbmQgPSBncmFkaWVudFN0YXJ0ICsgR3JhcGhpY3NTaXplKGdy
YWRpZW50LT5lbmRSYWRpdXMoKSwgMCk7CiAgICAgICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtU3RvcHM7ICsraSkgewogICAgICAgICBjb25zdCBDU1NHcmFkaWVudENvbG9yU3Rv
cCYgc3RvcCA9IG1fc3RvcHNbaV07CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBDU1NHcmFkaWVu
dFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudAogICAgICAgICAgICAgZWxzZSBpZiAoQ1NTUHJpbWl0
aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpIHsKICAgICAgICAgICAgICAgICBmbG9h
dCBsZW5ndGggPSBzdG9wLm1fcG9zaXRpb24tPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlLCBy
b290U3R5bGUsIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICAgICAgICAgIGlmICgh
Y29tcHV0ZWRHcmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUg
Z3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7CisgICAgICAgICAgICAg
ICAgICAgIEdyYXBoaWNzU2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50
RW5kKTsKICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUu
ZGlhZ29uYWxMZW5ndGgoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3Rv
cHNbaV0ub2Zmc2V0ID0gKGdyYWRpZW50TGVuZ3RoID4gMCkgPyBsZW5ndGggLyBncmFkaWVudExl
bmd0aCA6IDA7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRT
dG9wcyhHcmFkaWVudAogICAgICAgICAgICAgLy8gdG8gcmVwZWF0IG91dCB0byB0aGUgY29ybmVy
cyBvZiB0aGUgYm94LgogICAgICAgICAgICAgaWYgKGlzUmFkaWFsR3JhZGllbnQoKSkgewogICAg
ICAgICAgICAgICAgIGlmICghY29tcHV0ZWRHcmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAg
ICAgICAgICBGbG9hdFNpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVu
ZCk7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBncmFkaWVudFNpemUoZ3JhZGll
bnRTdGFydCAtIGdyYWRpZW50RW5kKTsKICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5n
dGggPSBncmFkaWVudFNpemUuZGlhZ29uYWxMZW5ndGgoKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0zMTAsMTAgKzMxMCwxMCBAQCB2b2lkIENTU0dyYWRpZW50VmFs
dWU6OmFkZFN0b3BzKEdyYWRpZW50CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bVN0b3BzOyArK2kpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gKHN0b3Bz
W2ldLm9mZnNldCAtIGZpcnN0T2Zmc2V0KSAvIHNjYWxlOwogCi0gICAgICAgICAgICBGbG9hdFBv
aW50IHAwID0gZ3JhZGllbnQtPnAwKCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHAxID0gZ3Jh
ZGllbnQtPnAxKCk7Ci0gICAgICAgICAgICBncmFkaWVudC0+c2V0UDAoRmxvYXRQb2ludChwMC54
KCkgKyBmaXJzdE9mZnNldCAqIChwMS54KCkgLSBwMC54KCkpLCBwMC55KCkgKyBmaXJzdE9mZnNl
dCAqIChwMS55KCkgLSBwMC55KCkpKSk7Ci0gICAgICAgICAgICBncmFkaWVudC0+c2V0UDEoRmxv
YXRQb2ludChwMS54KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLngoKSAtIHAwLngoKSksIHAx
LnkoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEueSgpIC0gcDAueSgpKSkpOworICAgICAgICAg
ICAgR3JhcGhpY3NQb2ludCBwMCA9IGdyYWRpZW50LT5wMCgpOworICAgICAgICAgICAgR3JhcGhp
Y3NQb2ludCBwMSA9IGdyYWRpZW50LT5wMSgpOworICAgICAgICAgICAgZ3JhZGllbnQtPnNldFAw
KEdyYXBoaWNzUG9pbnQocDAueCgpICsgZmlyc3RPZmZzZXQgKiAocDEueCgpIC0gcDAueCgpKSwg
cDAueSgpICsgZmlyc3RPZmZzZXQgKiAocDEueSgpIC0gcDAueSgpKSkpOworICAgICAgICAgICAg
Z3JhZGllbnQtPnNldFAxKEdyYXBoaWNzUG9pbnQocDEueCgpICsgKGxhc3RPZmZzZXQgLSAxKSAq
IChwMS54KCkgLSBwMC54KCkpLCBwMS55KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLnkoKSAt
IHAwLnkoKSkpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc1JhZGlhbEdyYWRpZW50KCkpIHsKICAg
ICAgICAgICAgIC8vIFJhdGhlciB0aGFuIHNjYWxpbmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5j
YXRlIHRoZW0sIHNvIG9ubHkgc2NhbGUgYWNjb3JkaW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50Lgog
ICAgICAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAwOwpAQCAtMzk1LDkgKzM5NSw5IEBAIHN0
YXRpYyBmbG9hdCBwb3NpdGlvbkZyb21WYWx1ZShDU1NQcmltaXQKICAgICB9CiB9CiAKLUZsb2F0
UG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVl
KiBmaXJzdCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQorR3JhcGhpY3NQb2lu
dCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqIGZp
cnN0LCBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
clN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgRmxvYXRQb2lu
dCByZXN1bHQ7CisgICAgR3JhcGhpY3NQb2ludCByZXN1bHQ7CiAKICAgICBpZiAoZmlyc3QpCiAg
ICAgICAgIHJlc3VsdC5zZXRYKHBvc2l0aW9uRnJvbVZhbHVlKGZpcnN0LCBzdHlsZSwgcm9vdFN0
eWxlLCBzaXplLCB0cnVlKSk7CkBAIC00NzMsNyArNDczLDcgQEAgU3RyaW5nIENTU0xpbmVhckdy
YWRpZW50VmFsdWU6OmNzc1RleHQoKQogfQogCiAvLyBDb21wdXRlIHRoZSBlbmRwb2ludHMgc28g
dGhhdCBhIGdyYWRpZW50IG9mIHRoZSBnaXZlbiBhbmdsZSBjb3ZlcnMgYSBib3ggb2YgdGhlIGdp
dmVuIHNpemUuCi1zdGF0aWMgdm9pZCBlbmRQb2ludHNGcm9tQW5nbGUoZmxvYXQgYW5nbGVEZWcs
IGNvbnN0IEludFNpemUmIHNpemUsIEZsb2F0UG9pbnQmIGZpcnN0UG9pbnQsIEZsb2F0UG9pbnQm
IHNlY29uZFBvaW50KQorc3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xl
RGVnLCBjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1BvaW50JiBmaXJzdFBvaW50LCBHcmFw
aGljc1BvaW50JiBzZWNvbmRQb2ludCkKIHsKICAgICBhbmdsZURlZyA9IGZtb2RmKGFuZ2xlRGVn
LCAzNjApOwogICAgIGlmIChhbmdsZURlZyA8IDApCkBAIC01MTIsNyArNTEyLDcgQEAgc3RhdGlj
IHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZwogICAgIC8vIENvbXB1dGUgc3RhcnQg
Y29ybmVyIHJlbGF0aXZlIHRvIGNlbnRlci4KICAgICBmbG9hdCBoYWxmSGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQoKSAvIDI7CiAgICAgZmxvYXQgaGFsZldpZHRoID0gc2l6ZS53aWR0aCgpIC8gMjsKLSAg
ICBGbG9hdFBvaW50IGVuZENvcm5lcjsKKyAgICBHcmFwaGljc1BvaW50IGVuZENvcm5lcjsKICAg
ICBpZiAoYW5nbGVEZWcgPCA5MCkKICAgICAgICAgZW5kQ29ybmVyLnNldChoYWxmV2lkdGgsIGhh
bGZIZWlnaHQpOwogICAgIGVsc2UgaWYgKGFuZ2xlRGVnIDwgMTgwKQpAQCAtNTM5LDggKzUzOSw4
IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU0xpbmVhckdyYWRpZW50VmEKICAgICAKICAgICBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpLT5yZW5kZXJTdHlsZSgpOwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFBvaW50OwotICAg
IEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBmaXJzdFBvaW50Owor
ICAgIEdyYXBoaWNzUG9pbnQgc2Vjb25kUG9pbnQ7CiAgICAgaWYgKG1fYW5nbGUpIHsKICAgICAg
ICAgZmxvYXQgYW5nbGUgPSBtX2FuZ2xlLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfREVHKTsKICAgICAgICAgZW5kUG9pbnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJz
dFBvaW50LCBzZWNvbmRQb2ludCk7CkBAIC02NDksMTkgKzY0OSwxOSBAQCBmbG9hdCBDU1NSYWRp
YWxHcmFkaWVudFZhbHVlOjpyZXNvbHZlUmFkCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3Rh
dGljIGZsb2F0IGRpc3RhbmNlVG9DbG9zZXN0Q29ybmVyKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRQb2ludCYgY29ybmVyKQorc3RhdGljIGZsb2F0IGRp
c3RhbmNlVG9DbG9zZXN0Q29ybmVyKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgc2l6ZSwgR3JhcGhpY3NQb2ludCYgY29ybmVyKQogewotICAgIEZsb2F0UG9pbnQg
dG9wTGVmdDsKLSAgICBmbG9hdCB0b3BMZWZ0RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIHRvcExl
ZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BMZWZ0OworICAgIGZs
b2F0IHRvcExlZnREaXN0YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gdG9wTGVmdCkuZGlhZ29uYWxM
ZW5ndGgoKTsKIAotICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQoc2l6ZS53aWR0aCgpLCAwKTsKLSAg
ICBmbG9hdCB0b3BSaWdodERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSB0b3BSaWdodCkuZGlhZ29u
YWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1BvaW50IHRvcFJpZ2h0KHNpemUud2lkdGgoKSwgMCk7
CisgICAgZmxvYXQgdG9wUmlnaHREaXN0YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gdG9wUmlnaHQp
LmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgZmxvYXQgYm90dG9tTGVmdERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSBi
b3R0b21MZWZ0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgYm90dG9tTGVm
dCgwLCBzaXplLmhlaWdodCgpKTsKKyAgICBmbG9hdCBib3R0b21MZWZ0RGlzdGFuY2UgPSBHcmFw
aGljc1NpemUocCAtIGJvdHRvbUxlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBGbG9hdFBv
aW50IGJvdHRvbVJpZ2h0KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgZmxvYXQg
Ym90dG9tUmlnaHREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gYm90dG9tUmlnaHQpLmRpYWdvbmFs
TGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQb2ludCBib3R0b21SaWdodChzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIGZsb2F0IGJvdHRvbVJpZ2h0RGlzdGFuY2UgPSBHcmFwaGljc1Np
emUocCAtIGJvdHRvbVJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOwogCiAgICAgY29ybmVyID0gdG9w
TGVmdDsKICAgICBmbG9hdCBtaW5EaXN0YW5jZSA9IHRvcExlZnREaXN0YW5jZTsKQEAgLTY4Miwx
OSArNjgyLDE5IEBAIHN0YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb24KICAg
ICByZXR1cm4gbWluRGlzdGFuY2U7CiB9CiAKLXN0YXRpYyBmbG9hdCBkaXN0YW5jZVRvRmFydGhl
c3RDb3JuZXIoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9h
dFBvaW50JiBjb3JuZXIpCitzdGF0aWMgZmxvYXQgZGlzdGFuY2VUb0ZhcnRoZXN0Q29ybmVyKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSwgR3JhcGhpY3NQ
b2ludCYgY29ybmVyKQogewotICAgIEZsb2F0UG9pbnQgdG9wTGVmdDsKLSAgICBmbG9hdCB0b3BM
ZWZ0RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIHRvcExlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7Cisg
ICAgR3JhcGhpY3NQb2ludCB0b3BMZWZ0OworICAgIGZsb2F0IHRvcExlZnREaXN0YW5jZSA9IEdy
YXBoaWNzU2l6ZShwIC0gdG9wTGVmdCkuZGlhZ29uYWxMZW5ndGgoKTsKIAotICAgIEZsb2F0UG9p
bnQgdG9wUmlnaHQoc2l6ZS53aWR0aCgpLCAwKTsKLSAgICBmbG9hdCB0b3BSaWdodERpc3RhbmNl
ID0gRmxvYXRTaXplKHAgLSB0b3BSaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGlj
c1BvaW50IHRvcFJpZ2h0KHNpemUud2lkdGgoKSwgMCk7CisgICAgZmxvYXQgdG9wUmlnaHREaXN0
YW5jZSA9IEdyYXBoaWNzU2l6ZShwIC0gdG9wUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAg
ICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgZmxvYXQgYm90
dG9tTGVmdERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSBib3R0b21MZWZ0KS5kaWFnb25hbExlbmd0
aCgpOworICAgIEdyYXBoaWNzUG9pbnQgYm90dG9tTGVmdCgwLCBzaXplLmhlaWdodCgpKTsKKyAg
ICBmbG9hdCBib3R0b21MZWZ0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIGJvdHRvbUxlZnQp
LmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBGbG9hdFBvaW50IGJvdHRvbVJpZ2h0KHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgZmxvYXQgYm90dG9tUmlnaHREaXN0YW5jZSA9IEZs
b2F0U2l6ZShwIC0gYm90dG9tUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQ
b2ludCBib3R0b21SaWdodChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgIGZsb2F0
IGJvdHRvbVJpZ2h0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIGJvdHRvbVJpZ2h0KS5kaWFn
b25hbExlbmd0aCgpOwogCiAgICAgY29ybmVyID0gdG9wTGVmdDsKICAgICBmbG9hdCBtYXhEaXN0
YW5jZSA9IHRvcExlZnREaXN0YW5jZTsKQEAgLTcxNyw3ICs3MTcsNyBAQCBzdGF0aWMgZmxvYXQg
ZGlzdGFuY2VUb0ZhcnRoZXN0Q29ybmVyKGNvCiAKIC8vIENvbXB1dGUgaG9yaXpvbnRhbCByYWRp
dXMgb2YgZWxsaXBzZSB3aXRoIGNlbnRlciBhdCAwLDAgd2hpY2ggcGFzc2VzIHRocm91Z2ggcCwg
YW5kIGhhcwogLy8gd2lkdGgvaGVpZ2h0IGdpdmVuIGJ5IGFzcGVjdFJhdGlvLgotc3RhdGljIGlu
bGluZSBmbG9hdCBob3Jpem9udGFsRWxsaXBzZVJhZGl1cyhjb25zdCBGbG9hdFNpemUmIHAsIGZs
b2F0IGFzcGVjdFJhdGlvKQorc3RhdGljIGlubGluZSBmbG9hdCBob3Jpem9udGFsRWxsaXBzZVJh
ZGl1cyhjb25zdCBHcmFwaGljc1NpemUmIHAsIGZsb2F0IGFzcGVjdFJhdGlvKQogewogICAgIC8v
IHheMi9hXjIgKyB5XjIvYl4yID0gMQogICAgIC8vIGEvYiA9IGFzcGVjdFJhdGlvLCBiID0gYS9h
c3BlY3RSYXRpbwpAQCAtNzMyLDEzICs3MzIsMTMgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NT
UmFkaWFsR3JhZGllbnRWYQogICAgIAogICAgIFJlbmRlclN0eWxlKiByb290U3R5bGUgPSByZW5k
ZXJlci0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCk7CiAKLSAg
ICBGbG9hdFBvaW50IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCks
IG1fZmlyc3RZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKKyAg
ICBHcmFwaGljc1BvaW50IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0
KCksIG1fZmlyc3RZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsK
ICAgICBpZiAoIW1fZmlyc3RYKQogICAgICAgICBmaXJzdFBvaW50LnNldFgoc2l6ZS53aWR0aCgp
IC8gMik7CiAgICAgaWYgKCFtX2ZpcnN0WSkKICAgICAgICAgZmlyc3RQb2ludC5zZXRZKHNpemUu
aGVpZ2h0KCkgLyAyKTsKIAotICAgIEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5k
UG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29uZFkuZ2V0KCksIHJlbmRlcmVyLT5zdHlsZSgp
LCByb290U3R5bGUsIHNpemUpOworICAgIEdyYXBoaWNzUG9pbnQgc2Vjb25kUG9pbnQgPSBjb21w
dXRlRW5kUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29uZFkuZ2V0KCksIHJlbmRlcmVyLT5z
dHlsZSgpLCByb290U3R5bGUsIHNpemUpOwogICAgIGlmICghbV9zZWNvbmRYKQogICAgICAgICBz
ZWNvbmRQb2ludC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwogICAgIGlmICghbV9zZWNvbmRZKQpA
QCAtODE0LDcgKzgxNCw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50
VmEKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc2VzdENv
cm5lcjogewotICAgICAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7CisgICAgICAgICAgICBHcmFw
aGljc1BvaW50IGNvcm5lcjsKICAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0gZGlzdGFuY2VU
b0Nsb3Nlc3RDb3JuZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgICAgICAgICBp
ZiAoc2hhcGUgPT0gQ2lyY2xlKQogICAgICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGRpc3Rh
bmNlOwpAQCAtODMxLDcgKzgzMSw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdy
YWRpZW50VmEKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRmFydGhlc3RDb3JuZXI6IHsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgY29ybmVyOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBj
b3JuZXI7CiAgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNlVG9GYXJ0aGVzdENv
cm5lcihzZWNvbmRQb2ludCwgc2l6ZSwgY29ybmVyKTsKICAgICAgICAgICAgIGlmIChzaGFwZSA9
PSBDaXJjbGUpCiAgICAgICAgICAgICAgICAgc2Vjb25kUmFkaXVzID0gZGlzdGFuY2U7CkBAIC04
NTQsNyArODU0LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYQog
ICAgIC8vIGFkZFN0b3BzKCkgb25seSB1c2VzIG1heEV4dGVudCBmb3IgcmVwZWF0aW5nIGdyYWRp
ZW50cy4KICAgICBmbG9hdCBtYXhFeHRlbnQgPSAwOwogICAgIGlmIChtX3JlcGVhdGluZykgewot
ICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBjb3JuZXI7
CiAgICAgICAgIG1heEV4dGVudCA9IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihzZWNvbmRQb2lu
dCwgc2l6ZSwgY29ybmVyKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiBj
bGFzcyBHcmFkaWVudDsKIAogZW51bSBDU1NHcmFkaWVudFR5cGUgeyBDU1NMaW5lYXJHcmFkaWVu
dCwgQ1NTUmFkaWFsR3JhZGllbnQgfTsKQEAgLTgwLDcgKzgwLDcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50U2l6ZSYpID0gMDsKIAogICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRv
IGZyb250IGVuZCB2YWx1ZXMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJp
bWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5
bGUqIHJvb3RTdHlsZSwgY29uc3QgSW50U2l6ZSYpOworICAgIEdyYXBoaWNzUG9pbnQgY29tcHV0
ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJT
dHlsZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmKTsKICAgICAKICAg
ICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC0yNzUsNyArMjc1
LDcgQEAgc3RhdGljIGJvb2wgYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbAogc3RhdGljIGJv
b2wgZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAg
IGlmICh2YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5w
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2cgPSBz
Y3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgICAgICBp
bnQgaCA9IDA7CiAgICAgICAgIGludCB2ID0gMDsKICAgICAgICAgaWYgKHBhcnNlQXNwZWN0UmF0
aW8odmFsdWUsIGgsIHYpKQpAQCAtMzA5LDcgKzMwOSw3IEBAIHN0YXRpYyBib29sIGdyaWRNZWRp
YUZlYXR1cmVFdmFsKENTU1ZhbHUKIHN0YXRpYyBib29sIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxv
YXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5t
YWluRnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZy
YW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgcmV0dXJuIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgY29tcGFyZVZhbHVlKHN0YXRp
Y19jYXN0PGludD4oc2cuaGVpZ2h0KCkpLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUpLCBvcCk7CiAgICAg
fQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBib29sIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1
cmVFdmEKIHN0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQogewogICAgIGlmICh2YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3Jl
ZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOworICAgICAgICBHcmFw
aGljc1JlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICByZXR1cm4gdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy53
aWR0aCgpKSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSktPmNvbXB1dGVM
ZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlKSwgb3ApOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DbGllbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ2xpZW50UmVjdC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0NsaWVudFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIENsaWVudFJl
Y3Q6OkNsaWVudFJlY3QoY29uc3QgSW50UmVjdCYgcmUKIHsKIH0KIAotQ2xpZW50UmVjdDo6Q2xp
ZW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitDbGllbnRSZWN0OjpDbGllbnRSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKICAgICA6IG1fcmVjdChyZWN0KQogewogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2xpZW50UmVjdC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9DbGllbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5k
ZWYgQ2xpZW50UmVjdF9oCiAjZGVmaW5lIENsaWVudFJlY3RfaAogCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0zOSw3ICszOSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaWVudFJlY3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0KTsg
fQogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBjcmVhdGUoY29uc3QgSW50
UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaWVudFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0KHJlY3QpKTsgfQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2xpZW50UmVjdChyZWN0KSk7IH0KIAog
ICAgICAgICBmbG9hdCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3JlY3QueSgpOyB9CiAgICAgICAg
IGZsb2F0IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0Lm1heFgoKTsgfQpAQCAtNTEsOSAr
NTEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2xpZW50
UmVjdCgpOwogICAgICAgICBDbGllbnRSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgQ2xp
ZW50UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgQ2xpZW50UmVjdChjb25zdCBHcmFw
aGljc1JlY3QmKTsKIAotICAgICAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgICAgICBHcmFwaGlj
c1JlY3QgbV9yZWN0OwogICAgIH07IAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NyArMzYsNyBAQCBDbGllbnRSZWN0TGlzdDo6Q2xpZW50UmVjdExpc3QoKQogewogfQogCi1DbGll
bnRSZWN0TGlzdDo6Q2xpZW50UmVjdExpc3QoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRz
KQorQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KGNvbnN0IFZlY3RvcjxHcmFwaGljc1F1
YWQ+JiBxdWFkcykKIHsKICAgICBtX2xpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShxdWFkcy5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNyBAQAogI2lmbmRlZiBDbGllbnRSZWN0TGlzdF9oCiAjZGVmaW5lIENsaWVudFJlY3RM
aXN0X2gKIAotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBDbGllbnRSZWN0TGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPENs
aWVudFJlY3RMaXN0PiB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
bGllbnRSZWN0TGlzdD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENsaWVudFJlY3RM
aXN0KTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gY3JlYXRl
KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgeyByZXR1cm4gYWRvcHRSZWYobmV3IENs
aWVudFJlY3RMaXN0KHF1YWRzKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50
UmVjdExpc3Q+IGNyZWF0ZShjb25zdCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0TGlzdChxdWFkcykpOyB9CiAgICAgICAgIH5DbGll
bnRSZWN0TGlzdCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwpAQCAtNDcs
NyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBD
bGllbnRSZWN0TGlzdCgpOwotICAgICAgICBDbGllbnRSZWN0TGlzdChjb25zdCBWZWN0b3I8Rmxv
YXRRdWFkPiYpOworICAgICAgICBDbGllbnRSZWN0TGlzdChjb25zdCBWZWN0b3I8R3JhcGhpY3NR
dWFkPiYpOwogCiAgICAgICAgIFZlY3RvcjxSZWZQdHI8Q2xpZW50UmVjdD4gPiBtX2xpc3Q7CiAg
ICAgfTsgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgpAQCAtODQ5LDcgKzg0OSw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6Y2xvbmVDaGls
ZE5vZGVzKENvbnQKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmRlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+ZW5hYmxlKCk7CiB9CiAKLWJvb2wgQ29udGFpbmVyTm9kZTo6
Z2V0VXBwZXJMZWZ0Q29ybmVyKEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBDb250YWlu
ZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NTgsNyAr
ODU4LDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoRgogICAgIFJl
bmRlck9iamVjdCAqcCA9IG87CiAKICAgICBpZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBs
YWNlZCgpKSB7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
KSwgZmFsc2UsIHRydWUpOworICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFw
aGljc1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC04ODMsMTQgKzg4MywxNCBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENv
cm5lcihGCiAgICAgICAgIEFTU0VSVChvKTsKIAogICAgICAgICBpZiAoIW8tPmlzSW5saW5lKCkg
fHwgby0+aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNv
bHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIHBvaW50ID0gby0+
bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocC0+bm9kZSgpICYmIHAt
Pm5vZGUoKSA9PSB0aGlzICYmIG8tPmlzVGV4dCgpICYmICFvLT5pc0JSKCkgJiYgIXRvUmVuZGVy
VGV4dChvKS0+Zmlyc3RUZXh0Qm94KCkpIHsKICAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5n
IC0gc2tpcCB1bnJlbmRlcmVkIHdoaXRlc3BhY2UgdGhhdCBpcyBhIGNoaWxkIG9yIG5leHQgc2li
bGluZyBvZiB0aGUgYW5jaG9yCiAgICAgICAgIH0gZWxzZSBpZiAoKG8tPmlzVGV4dCgpICYmICFv
LT5pc0JSKCkpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgcG9pbnQgPSBGbG9h
dFBvaW50KCk7CisgICAgICAgICAgICBwb2ludCA9IEdyYXBoaWNzUG9pbnQoKTsKICAgICAgICAg
ICAgIGlmIChvLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQobyktPmZpcnN0VGV4dEJveCgpKSB7
CiAgICAgICAgICAgICAgICAgcG9pbnQubW92ZSh0b1JlbmRlclRleHQobyktPmxpbmVzQm91bmRp
bmdCb3goKS54KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlclRleHQobykt
PmZpcnN0VGV4dEJveCgpLT5yb290KCktPmxpbmVUb3AoKSk7CkBAIC05MDYsMTQgKzkwNiwxNCBA
QCBib29sIENvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihGCiAgICAgLy8gSWYgdGhl
IHRhcmdldCBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuIG9yIHNpYmxpbmdzIHRoYXQgY291bGQg
YmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2UgbXVzdCBiZQogICAg
IC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LiAgU2Nyb2xsIHRvIHRoZSBib3R0b20uIEZJ
WE1FOiB3aG8gc2FpZCBhbnl0aGluZyBhYm91dCBzY3JvbGxpbmc/CiAgICAgaWYgKCFvICYmIGRv
Y3VtZW50KCktPnZpZXcoKSkgewotICAgICAgICBwb2ludCA9IEZsb2F0UG9pbnQoMCwgZG9jdW1l
bnQoKS0+dmlldygpLT5jb250ZW50c0hlaWdodCgpKTsKKyAgICAgICAgcG9pbnQgPSBHcmFwaGlj
c1BvaW50KDAsIGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotYm9vbCBDb250YWlu
ZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9v
bCBDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKEdyYXBoaWNzUG9pbnQmIHBvaW50
KSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTIxLDcgKzkyMSw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5l
cigKICAgICBSZW5kZXJPYmplY3QqIG8gPSByZW5kZXJlcigpOwogICAgIGlmICghby0+aXNJbmxp
bmUoKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1Jl
bmRlckJveChvKTsKLSAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2lu
dCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29sdXRlKEdy
YXBoaWNzUG9pbnQoKSwgZmFsc2UsIHRydWUpOwogICAgICAgICBwb2ludC5tb3ZlKGJveC0+c2l6
ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTQ0LDcgKzk0NCw3IEBAIGJv
b2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigKICAgICAgICAgfQogICAgICAg
ICBBU1NFUlQobyk7CiAgICAgICAgIGlmIChvLT5pc1RleHQoKSB8fCBvLT5pc1JlcGxhY2VkKCkp
IHsKLSAgICAgICAgICAgIHBvaW50ID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgcG9pbnQg
PSBHcmFwaGljc1BvaW50KCk7CiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KG8pOwogICAgICAgICAg
ICAgICAgIEludFJlY3QgbGluZXNCb3ggPSB0ZXh0LT5saW5lc0JvdW5kaW5nQm94KCk7CkBAIC05
NjQsNyArOTY0LDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKAog
CiBJbnRSZWN0IENvbnRhaW5lck5vZGU6OmdldFJlY3QoKSBjb25zdAogewotICAgIEZsb2F0UG9p
bnQgIHVwcGVyTGVmdCwgbG93ZXJSaWdodDsKKyAgICBHcmFwaGljc1BvaW50IHVwcGVyTGVmdCwg
bG93ZXJSaWdodDsKICAgICBib29sIGZvdW5kVXBwZXJMZWZ0ID0gZ2V0VXBwZXJMZWZ0Q29ybmVy
KHVwcGVyTGVmdCk7CiAgICAgYm9vbCBmb3VuZExvd2VyUmlnaHQgPSBnZXRMb3dlclJpZ2h0Q29y
bmVyKGxvd2VyUmlnaHQpOwogICAgIApAQCAtOTc3LDcgKzk3Nyw3IEBAIEludFJlY3QgQ29udGFp
bmVyTm9kZTo6Z2V0UmVjdCgpIGNvbnN0CiAgICAgICAgICAgICB1cHBlckxlZnQgPSBsb3dlclJp
Z2h0OwogICAgIH0gCiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodXBw
ZXJMZWZ0LCBsb3dlclJpZ2h0LmV4cGFuZGVkVG8odXBwZXJMZWZ0KSAtIHVwcGVyTGVmdCkpOwor
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdCh1cHBlckxlZnQsIGxvd2Vy
UmlnaHQuZXhwYW5kZWRUbyh1cHBlckxlZnQpIC0gdXBwZXJMZWZ0KSk7CiB9CiAKIHZvaWQgQ29u
dGFpbmVyTm9kZTo6c2V0Rm9jdXMoYm9vbCByZWNlaXZlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiAg
ICAgCiB0eXBlZGVmIHZvaWQgKCpOb2RlQ2FsbGJhY2spKE5vZGUqLCB1bnNpZ25lZCk7CiAKQEAg
LTEwOSw4ICsxMDksOCBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hQb3N0
QXR0YWNoQ2FsbGJhY2tzKCk7CiAKLSAgICBib29sIGdldFVwcGVyTGVmdENvcm5lcihGbG9hdFBv
aW50JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRMb3dlclJpZ2h0Q29ybmVyKEZsb2F0UG9pbnQmKSBj
b25zdDsKKyAgICBib29sIGdldFVwcGVyTGVmdENvcm5lcihHcmFwaGljc1BvaW50JikgY29uc3Q7
CisgICAgYm9vbCBnZXRMb3dlclJpZ2h0Q29ybmVyKEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAog
ICAgIE5vZGUqIG1fZmlyc3RDaGlsZDsKICAgICBOb2RlKiBtX2xhc3RDaGlsZDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIzLDcgKzExMjMsNyBAQCBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBEb2N1bWVudDo6bm9kZXNGcm9tCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgZmxvYXQgem9vbUZhY3RvciA9IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOwotICAgIElu
dFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQoY2VudGVyWCAqIHpvb21G
YWN0b3IgKyB2aWV3KCktPnNjcm9sbFgoKSwgY2VudGVyWSAqIHpvb21GYWN0b3IgKyB2aWV3KCkt
PnNjcm9sbFkoKSkpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEdyYXBo
aWNzUG9pbnQoY2VudGVyWCAqIHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFgoKSwgY2VudGVy
WSAqIHpvb21GYWN0b3IgKyB2aWV3KCktPnNjcm9sbFkoKSkpOwogCiAgICAgaW50IHR5cGUgPSBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwogCkBAIC0x
MTcxLDcgKzExNzEsNyBAQCBzdGF0aWMgTm9kZSogbm9kZUZyb21Qb2ludChGcmFtZSogZnJhbWUs
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgZmxvYXQgem9vbUZhY3RvciA9IGZyYW1lLT5wYWdl
Wm9vbUZhY3RvcigpOwotICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEZsb2F0
UG9pbnQoeCAqIHpvb21GYWN0b3IgICsgZnJhbWVWaWV3LT5zY3JvbGxYKCksIHkgKiB6b29tRmFj
dG9yICsgZnJhbWVWaWV3LT5zY3JvbGxZKCkpKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5k
ZWRJbnRQb2ludChHcmFwaGljc1BvaW50KHggKiB6b29tRmFjdG9yICArIGZyYW1lVmlldy0+c2Ny
b2xsWCgpLCB5ICogem9vbUZhY3RvciArIGZyYW1lVmlldy0+c2Nyb2xsWSgpKSk7CiAKICAgICBp
ZiAoIWZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuY29udGFpbnMocG9pbnQpKQogICAg
ICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTksMTIgKzUxOSwxMiBAQCBJbnRSZWN0IEVsZW1lbnQ6OmJvdW5kc0luV2luZG93U3BhY2UoKSBj
CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgVmVjdG9y
PEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAjaWYg
RU5BQkxFKFNWRykKICAgICBpZiAoaXNTVkdFbGVtZW50KCkgJiYgcmVuZGVyZXIoKSkgewogICAg
ICAgICAvLyBHZXQgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBmcm9tIHRoZSBTVkcgbW9kZWwuCiAg
ICAgICAgIGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBT
VkdFbGVtZW50Kj4odGhpcyk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3Q7CisgICAgICAg
IEdyYXBoaWNzUmVjdCBsb2NhbFJlY3Q7CiAgICAgICAgIGlmIChzdmdFbGVtZW50LT5ib3VuZGlu
Z0JveChsb2NhbFJlY3QpKQogICAgICAgICAgICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyKCktPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CiAgICAgfSBlbHNlCkBAIC01NTcsNyArNTU3
LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVudDo6Z2V0QwogICAgIC8vIEZJ
WE1FOiBIYW5kbGUgU1ZHIGVsZW1lbnRzLgogICAgIC8vIEZJWE1FOiBIYW5kbGUgdGFibGUvaW5s
aW5lLXRhYmxlIHdpdGggYSBjYXB0aW9uLgogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7
CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgcmVuZGVyQm94TW9kZWxPYmpl
Y3QtPmFic29sdXRlUXVhZHMocXVhZHMpOwogCiAgICAgZmxvYXQgcGFnZVNjYWxlID0gMTsKQEAg
LTU3MCw5ICs1NzAsOSBAQCBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBFbGVtZW50OjpnZXRD
CiAgICAgICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIHF1YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCks
IC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKLSAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZv
ckFic29sdXRlWm9vbShxdWFkc1tpXSwgcmVuZGVyQm94TW9kZWxPYmplY3QpOworICAgICAgICAg
ICAgYWRqdXN0R3JhcGhpY3NRdWFkRm9yQWJzb2x1dGVab29tKHF1YWRzW2ldLCByZW5kZXJCb3hN
b2RlbE9iamVjdCk7CiAgICAgICAgICAgICBpZiAocGFnZVNjYWxlICE9IDEpCi0gICAgICAgICAg
ICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUpOwor
ICAgICAgICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwg
cGFnZVNjYWxlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTgzLDEyICs1ODMsMTIgQEAgUGFz
c1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZAogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAjaWYgRU5B
QkxFKFNWRykKICAgICBpZiAoaXNTVkdFbGVtZW50KCkgJiYgcmVuZGVyZXIoKSkgewogICAgICAg
ICAvLyBHZXQgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBmcm9tIHRoZSBTVkcgbW9kZWwuCiAgICAg
ICAgIGNvbnN0IFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdF
bGVtZW50Kj4odGhpcyk7Ci0gICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3Q7CisgICAgICAgIEdy
YXBoaWNzUmVjdCBsb2NhbFJlY3Q7CiAgICAgICAgIGlmIChzdmdFbGVtZW50LT5ib3VuZGluZ0Jv
eChsb2NhbFJlY3QpKQogICAgICAgICAgICAgcXVhZHMuYXBwZW5kKHJlbmRlcmVyKCktPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CiAgICAgfSBlbHNlCkBAIC02MDIsNyArNjAyLDcg
QEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZAogICAgIGlmIChxdWFk
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUoKTsKIAotICAg
IEZsb2F0UmVjdCByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNz
UmVjdCByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tp
XS5ib3VuZGluZ0JveCgpKTsKIApAQCAtNjExLDEwICs2MTEsMTAgQEAgUGFzc1JlZlB0cjxDbGll
bnRSZWN0PiBFbGVtZW50OjpnZXRCb3VuZAogICAgICAgICByZXN1bHQubW92ZSgtdmlzaWJsZUNv
bnRlbnRSZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOwogICAgIH0KIAotICAgIGFk
anVzdEZsb2F0UmVjdEZvckFic29sdXRlWm9vbShyZXN1bHQsIHJlbmRlcmVyKCkpOworICAgIGFk
anVzdEdyYXBoaWNzUmVjdEZvckFic29sdXRlWm9vbShyZXN1bHQsIHJlbmRlcmVyKCkpOwogICAg
IGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBwYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgICAgIGFkanVzdEZsb2F0UmVj
dEZvclBhZ2VTY2FsZShyZXN1bHQsIGZyYW1lLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgICAg
ICAgICBhZGp1c3RHcmFwaGljc1JlY3RGb3JQYWdlU2NhbGUocmVzdWx0LCBmcmFtZS0+cGFnZVNj
YWxlRmFjdG9yKCkpOwogICAgIH0KIAogICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUocmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIGZsb2F0IHBhZ2Vab29t
RmFjdG9yKGNvbnN0IFVJRXZlbgogdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6Y29tcHV0ZVBhZ2VM
b2NhdGlvbigpCiB7CiAgICAgZmxvYXQgem9vbUZhY3RvciA9IHBhZ2Vab29tRmFjdG9yKHRoaXMp
OwotICAgIHNldEFic29sdXRlTG9jYXRpb24ocm91bmRlZEludFBvaW50KEZsb2F0UG9pbnQocGFn
ZVgoKSAqIHpvb21GYWN0b3IsIHBhZ2VZKCkgKiB6b29tRmFjdG9yKSkpOworICAgIHNldEFic29s
dXRlTG9jYXRpb24ocm91bmRlZEludFBvaW50KEdyYXBoaWNzUG9pbnQocGFnZVgoKSAqIHpvb21G
YWN0b3IsIHBhZ2VZKCkgKiB6b29tRmFjdG9yKSkpOwogfQogCiB2b2lkIE1vdXNlUmVsYXRlZEV2
ZW50OjpyZWNlaXZlZFRhcmdldCgpCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBNb3VzZVJlbGF0
ZWRFdmVudDo6Y29tcHV0ZVJlbGF0aXZlUAogICAgIC8vIEFkanVzdCBvZmZzZXRMb2NhdGlvbiB0
byBiZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0J3MgcG9zaXRpb24uCiAgICAgaWYgKCFpc1NpbXVs
YXRlZCgpKSB7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSB0YXJnZXROb2RlLT5yZW5k
ZXJlcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9zID0gci0+YWJzb2x1dGVU
b0xvY2FsKGFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgR3Jh
cGhpY3NQb2ludCBsb2NhbFBvcyA9IHItPmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZUxvY2F0aW9u
KCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgIG1fb2Zmc2V0TG9jYXRpb24gPSByb3VuZGVk
SW50UG9pbnQobG9jYWxQb3MpOwogICAgICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxIC8g
cGFnZVpvb21GYWN0b3IodGhpcyk7CiAgICAgICAgICAgICBpZiAoc2NhbGVGYWN0b3IgIT0gMS4w
ZikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDMsNyArODQzLDcgQEAgYm9vbCBO
b2RlOjpoYXNOb25FbXB0eUJvdW5kaW5nQm94KCkgY29ucwogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJl
bmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0g
cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgcmVuZGVyZXIoKS0+YWJzb2x1dGVS
ZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KGFic1BvcykpOwogICAgIHNpemVfdCBuID0gcmVj
dHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQpAQCAtMjI2Miw3
ICsyMjYyLDcgQEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaQogICAg
ICAgICAgICAgICAgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HIHwgRE9DVU1FTlRfUE9TSVRJ
T05fQ09OVEFJTlM7CiB9CiAKLUZsb2F0UG9pbnQgTm9kZTo6Y29udmVydFRvUGFnZShjb25zdCBG
bG9hdFBvaW50JiBwKSBjb25zdAorR3JhcGhpY3NQb2ludCBOb2RlOjpjb252ZXJ0VG9QYWdlKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlcmUgaXMgYSByZW5k
ZXJlciwganVzdCBhc2sgaXQgdG8gZG8gdGhlIGNvbnZlcnNpb24KICAgICBpZiAocmVuZGVyZXIo
KSkKQEAgLTIyNzcsNyArMjI3Nyw3IEBAIEZsb2F0UG9pbnQgTm9kZTo6Y29udmVydFRvUGFnZShj
b25zdCBGbG8KICAgICByZXR1cm4gcDsKIH0KIAotRmxvYXRQb2ludCBOb2RlOjpjb252ZXJ0RnJv
bVBhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgTm9kZTo6Y29u
dmVydEZyb21QYWdlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAgLy8gSWYg
dGhlcmUgaXMgYSByZW5kZXJlciwganVzdCBhc2sgaXQgdG8gZG8gdGhlIGNvbnZlcnNpb24KICAg
ICBpZiAocmVuZGVyZXIoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50Q29udGV4dDsKIGNsYXNz
IEV2ZW50TGlzdGVuZXI7Ci1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsK
IGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEludFJlY3Q7CkBA
IC00MjgsOCArNDI4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVj
dGlvbigpIGNvbnN0OwogCiAgICAgLy8gR2V0dGluZyBwb2ludHMgaW50byBhbmQgb3V0IG9mIHNj
cmVlbiBzcGFjZQotICAgIEZsb2F0UG9pbnQgY29udmVydFRvUGFnZShjb25zdCBGbG9hdFBvaW50
JikgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBjb252ZXJ0RnJvbVBhZ2UoY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgY29udmVydFRvUGFnZShjb25zdCBHcmFwaGlj
c1BvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBjb252ZXJ0RnJvbVBhZ2UoY29uc3Qg
R3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAg
ICAvLyBJbnRlZ3JhdGlvbiB3aXRoIHJlbmRlcmluZyB0cmVlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNsaWVudFJlY3RMaXN0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCkBAIC0xNjUzLDcgKzE2NTMsNyBAQCB2b2lkIFJhbmdlOjp0ZXh0UmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByCiAgICAgfQogfQogCi12b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkgY29uc3QKK3ZvaWQg
UmFuZ2U6OnRleHRRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMsIGJvb2wgdXNlU2Vs
ZWN0aW9uSGVpZ2h0KSBjb25zdAogewogICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0gbV9zdGFy
dC5jb250YWluZXIoKTsKICAgICBOb2RlKiBlbmRDb250YWluZXIgPSBtX2VuZC5jb250YWluZXIo
KTsKQEAgLTE5MTQsNyArMTkxNCw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IFJhbmdl
OjpnZXRDbGkKIAogICAgIG1fb3duZXJEb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBWZWN0
b3I8R3JhcGhpY3NRdWFkPiBxdWFkczsKICAgICBnZXRCb3JkZXJBbmRUZXh0UXVhZHMocXVhZHMp
OwogCiAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0OjpjcmVhdGUocXVhZHMpOwpAQCAtMTkyMiwx
MSArMTkyMiwxMSBAQCBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBSYW5nZTo6Z2V0Q2xpCiAK
IFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gUmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNv
bnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKKyAgICBHcmFwaGlj
c1JlY3QgcmVjdCA9IGJvdW5kaW5nUmVjdCgpOwogICAgIHJldHVybiByZWN0LmlzRW1wdHkoKSA/
IDAgOiBDbGllbnRSZWN0OjpjcmVhdGUocmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkanVzdEZs
b2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CitzdGF0aWMgdm9pZCBhZGp1c3RHcmFwaGljc1F1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29t
QW5kUGFnZVNjYWxlKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcywgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGRv
Y3VtZW50LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpAQCAtMTk0MSwxMyArMTk0MSwxMyBAQCBz
dGF0aWMgdm9pZCBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kCiAgICAgSW50UmVjdCB2aXNp
YmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHF1YWRzW2ldLm1v
dmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKLSAg
ICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yQWJzb2x1dGVab29tKHF1YWRzW2ldLCByZW5kZXJlcik7
CisgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tpXSwgcmVu
ZGVyZXIpOwogICAgICAgICBpZiAocGFnZVNjYWxlICE9IDEpCi0gICAgICAgICAgICBhZGp1c3RG
bG9hdFF1YWRGb3JQYWdlU2NhbGUocXVhZHNbaV0sIHBhZ2VTY2FsZSk7CisgICAgICAgICAgICBh
ZGp1c3RHcmFwaGljc1F1YWRGb3JQYWdlU2NhbGUocXVhZHNbaV0sIHBhZ2VTY2FsZSk7CiAgICAg
fQogfQogCi12b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzKSBjb25zdAordm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3Rv
cjxHcmFwaGljc1F1YWQ+JiBxdWFkcykgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydENvbnRhaW5l
ciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gbV9lbmQu
Y29udGFpbmVyKCk7CkBAIC0xOTYzLDkgKzE5NjMsOSBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJB
bmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsK
ICAgICAgICAgICAgIGlmICghbm9kZVNldC5jb250YWlucyhub2RlLT5wYXJlbnROb2RlKCkpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2Rl
bE9iamVjdCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+cmVuZGVyQm94TW9kZWxPYmpl
Y3QoKSkgewotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBlbGVtZW50UXVh
ZHM7CisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IGVsZW1lbnRRdWFk
czsKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyQm94TW9kZWxPYmplY3QtPmFic29sdXRlUXVh
ZHMoZWxlbWVudFF1YWRzKTsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkc0Zv
clNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShlbGVtZW50UXVhZHMsIG1fb3duZXJE
b2N1bWVudC5nZXQoKSwgcmVuZGVyQm94TW9kZWxPYmplY3QpOworICAgICAgICAgICAgICAgICAg
ICBhZGp1c3RHcmFwaGljc1F1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxl
KGVsZW1lbnRRdWFkcywgbV9vd25lckRvY3VtZW50LmdldCgpLCByZW5kZXJCb3hNb2RlbE9iamVj
dCk7CiAKICAgICAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGVsZW1lbnRRdWFkcyk7CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMTk3Niw5ICsxOTc2LDkgQEAgdm9pZCBSYW5nZTo6Z2V0Qm9y
ZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9
IChub2RlID09IHN0YXJ0Q29udGFpbmVyKSA/IG1fc3RhcnQub2Zmc2V0KCkgOiAwOwogICAgICAg
ICAgICAgICAgIGludCBlbmRPZmZzZXQgPSAobm9kZSA9PSBlbmRDb250YWluZXIpID8gbV9lbmQu
b2Zmc2V0KCkgOiBJTlRfTUFYOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAgICAgICAgICAgICBWZWN0b3I8R3JhcGhp
Y3NRdWFkPiB0ZXh0UXVhZHM7CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dC0+YWJzb2x1dGVR
dWFkc0ZvclJhbmdlKHRleHRRdWFkcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VT
Y2FsZSh0ZXh0UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7CisgICAg
ICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFu
ZFBhZ2VTY2FsZSh0ZXh0UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7
CiAKICAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQodGV4dFF1YWRzKTsKICAgICAgICAgICAg
IH0KQEAgLTE5ODcsMTkgKzE5ODcsMTkgQEAgdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1
YWRzKFZlY3RvcgogfQogCiAgICAgCi1GbG9hdFJlY3QgUmFuZ2U6OmJvdW5kaW5nUmVjdCgpIGNv
bnN0CitHcmFwaGljc1JlY3QgUmFuZ2U6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3N0YXJ0LmNvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIG1fb3duZXJEb2N1bWVudC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKKyAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBxdWFkczsKICAgICBnZXRCb3JkZXJB
bmRUZXh0UXVhZHMocXVhZHMpOwogICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCi0gICAg
RmxvYXRSZWN0IHJlc3VsdDsKKyAgICBHcmFwaGljc1JlY3QgcmVzdWx0OwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShx
dWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNkZWZpbmUgUmFuZ2VfaAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRl
ICJSYW5nZUJvdW5kYXJ5UG9pbnQuaCIKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgQ2xpZW50UmVj
dExpc3Q7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1
bWVudEZyYWdtZW50OwotY2xhc3MgRmxvYXRRdWFkOworY2xhc3MgR3JhcGhpY3NRdWFkOwogY2xh
c3MgTm9kZVdpdGhJbmRleDsKIGNsYXNzIFRleHQ7CiAKQEAgLTExNSw5ICsxMTUsOSBAQCBwdWJs
aWM6CiAgICAgLy8gTm90IHRyYW5zZm9ybS1mcmllbmRseQogICAgIHZvaWQgdGV4dFJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogICAgIC8v
IFRyYW5zZm9ybS1mcmllbmRseQotICAgIHZvaWQgdGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSkgY29uc3Q7Ci0gICAgdm9pZCBnZXRC
b3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKSBjb25zdDsKLSAgICBGbG9hdFJl
Y3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CisgICAgdm9pZCB0ZXh0UXVhZHMoVmVjdG9yPEdyYXBo
aWNzUXVhZD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKSBjb25zdDsKKyAgICB2
b2lkIGdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpIGNvbnN0Owor
ICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKIAogICAgIHZvaWQgbm9kZUNo
aWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2RlKik7CiAgICAgdm9pZCBub2RlQ2hpbGRyZW5XaWxs
QmVSZW1vdmVkKENvbnRhaW5lck5vZGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVl
bEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIFdoZWVsRXZlbnQ6OldoZWVsRXZlbnQo
KQogewogfQogCi1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHdoZWVs
VGlja3MsIGNvbnN0IEZsb2F0UG9pbnQmIHJhd0RlbHRhLAorV2hlZWxFdmVudDo6V2hlZWxFdmVu
dChjb25zdCBHcmFwaGljc1BvaW50JiB3aGVlbFRpY2tzLCBjb25zdCBHcmFwaGljc1BvaW50JiBy
YXdEZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBJbnRQb2ludCYgc2NyZWVuTG9jYXRpb24sIGNvbnN0IEludFBvaW50JiBwYWdlTG9jYXRp
b24sCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJv
b2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSkKQEAgLTk2LDcgKzk2LDcgQEAgV2hlZWxFdmVudERp
c3BhdGNoTWVkaWF0b3I6OldoZWVsRXZlbnREaQogICAgIGlmICghKGV2ZW50LmRlbHRhWCgpIHx8
IGV2ZW50LmRlbHRhWSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0RXZlbnQoV2hlZWxF
dmVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoZXZlbnQud2hlZWxUaWNrc1goKSwgZXZlbnQud2hlZWxU
aWNrc1koKSksIEZsb2F0UG9pbnQoZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRlbHRhWSgpKSwgZ3Jh
bnVsYXJpdHkoZXZlbnQpLAorICAgIHNldEV2ZW50KFdoZWVsRXZlbnQ6OmNyZWF0ZShHcmFwaGlj
c1BvaW50KGV2ZW50LndoZWVsVGlja3NYKCksIGV2ZW50LndoZWVsVGlja3NZKCkpLCBHcmFwaGlj
c1BvaW50KGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVkoKSksIGdyYW51bGFyaXR5KGV2ZW50
KSwKICAgICAgICAgdmlldywgSW50UG9pbnQoZXZlbnQuZ2xvYmFsWCgpLCBldmVudC5nbG9iYWxZ
KCkpLCBJbnRQb2ludChldmVudC54KCksIGV2ZW50LnkoKSksIGV2ZW50LmN0cmxLZXkoKSwgZXZl
bnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSkpOwogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1doZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
I2lmbmRlZiBXaGVlbEV2ZW50X2gKICNkZWZpbmUgV2hlZWxFdmVudF9oCiAKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIk1vdXNl
UmVsYXRlZEV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDggKzM4LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdoZWVsRXZlbnQpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdoZWVsRXZlbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB3aGVlbFRpY2tzLAotICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcmF3RGVsdGEsIEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2hlZWxFdmVudD4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHdoZWVsVGlja3MsCisg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiByYXdEZWx0YSwgR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LAogICAgICAgICAgICAgY29u
c3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBjb25zdCBJbnRQb2ludCYgcGFnZUxvY2F0aW9u
LAogICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwg
Ym9vbCBtZXRhS2V5KQogICAgICAgICB7CkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFdoZWVsRXZlbnQoKTsKLSAgICAgICAgV2hl
ZWxFdmVudChjb25zdCBGbG9hdFBvaW50JiB3aGVlbFRpY2tzLCBjb25zdCBGbG9hdFBvaW50JiBy
YXdEZWx0YSwKKyAgICAgICAgV2hlZWxFdmVudChjb25zdCBHcmFwaGljc1BvaW50JiB3aGVlbFRp
Y2tzLCBjb25zdCBHcmFwaGljc1BvaW50JiByYXdEZWx0YSwKICAgICAgICAgICAgICAgICAgICBH
cmFudWxhcml0eSBncmFudWxhcml0eSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JlZW5Mb2NhdGlvbiwgY29uc3QgSW50UG9p
bnQmIHBhZ2VMb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wg
YWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NDQsNyArMjc0NCw3IEBAIEludFJlY3Qg
RWRpdG9yOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSoKICAgICBBU1NFUlQoc3RhcnRSZW5kZXJl
cik7CiAgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2Fy
ZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKTsKICAgICBpZiAoc3RhcnRDYXJldFJlY3QgIT0gSW50UmVjdCgpKQotICAgICAgICBz
dGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KHN0YXJ0Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgc3Rh
cnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNz
UmVjdChzdGFydENhcmV0UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAKICAgICBJbmxp
bmVCb3gqIGVuZElubGluZUJveDsKICAgICBpbnQgZW5kQ2FyZXRPZmZzZXQ7CkBAIC0yNzU3LDcg
KzI3NTcsNyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAg
QVNTRVJUKGVuZFJlbmRlcmVyKTsKICAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IGVuZFJlbmRl
cmVyLT5sb2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKICAgICBp
ZiAoZW5kQ2FyZXRSZWN0ICE9IEludFJlY3QoKSkKLSAgICAgICAgZW5kQ2FyZXRSZWN0ID0gZW5k
UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGVuZENhcmV0UmVjdCkpLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOwogCiAgICAgaWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJl
dFJlY3QueSgpKSB7CiAgICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxp
bmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgpAQCAtMTEzNCw3ICsxMTM0LDcgQEAgTGF5b3V0UmVjdCBDYXJldEJhc2U6OmFic29s
dXRlQm91bmRzRm9yTAogICAgIExheW91dFJlY3QgbG9jYWxSZWN0KHJlY3QpOwogICAgIGlmIChj
YXJldFBhaW50ZXItPmlzQm94KCkpCiAgICAgICAgIHRvUmVuZGVyQm94KGNhcmV0UGFpbnRlcikt
PmZsaXBGb3JXcml0aW5nTW9kZShsb2NhbFJlY3QpOwotICAgIHJldHVybiBjYXJldFBhaW50ZXIt
PmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CisgICAgcmV0dXJuIGNhcmV0UGFpbnRlci0+bG9jYWxUb0Fic29sdXRlUXVhZChH
cmFwaGljc1JlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAogTGF5
b3V0UmVjdCBGcmFtZVNlbGVjdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcygpCkBAIC0xNzMyLDcg
KzE3MzIsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3RpCiAgICAg
cmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCi1GbG9hdFJlY3QgRnJhbWVT
ZWxlY3Rpb246OmJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAorR3JhcGhp
Y3NSZWN0IEZyYW1lU2VsZWN0aW9uOjpib3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkg
Y29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwpAQCAtMTc0MywyMCAr
MTc0MywyMCBAQCBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OmJvdW5kcyhib29sIGNsCiAgICAg
cmV0dXJuIGNsaXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3Qs
IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpKSA6IHNlbGVjdGlvblJlY3Q7CiB9CiAKLXZvaWQg
RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMpIGNvbnN0Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlw
cGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxHcmFwaGljc1JlY3Q+JiByZWN0YW5nbGVz
KSBjb25zdAogewogICAgIFJlbmRlclZpZXcqIHJvb3QgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCB2
aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgp
OworICAgIEdyYXBoaWNzUmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCkt
PnZpc2libGVDb250ZW50UmVjdCgpOwogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Cisg
ICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgdG9Ob3JtYWxpemVkUmFuZ2UoKS0+
dGV4dFF1YWRzKHF1YWRzLCB0cnVlKTsKIAogICAgIHNpemVfdCBzaXplID0gcXVhZHMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCksIHZpc2libGVDb250ZW50UmVjdCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBp
bnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCksIHZpc2libGVDb250ZW50UmVjdCk7CiAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25S
ZWN0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDkgKzIzMyw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFR5cGluZ1N0eWxlKFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPik7CiAgICAgdm9pZCBjbGVh
clR5cGluZ1N0eWxlKCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzKGJvb2wgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRzKGJvb2wgY2xp
cFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYpIGNvbnN0OworICAgIHZvaWQg
Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8R3JhcGhpY3NSZWN0PiYpIGNv
bnN0OwogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBjdXJyZW50Rm9ybSgpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xNTUsNyAr
MTU1LDcgQEAgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc1NwZQogCiB2b2lk
IFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFu
Z2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsK
KyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UocmFuZ2VU
b1JlcGxhY2UuZ2V0KCkpOwogICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFp
blRleHQocmFuZ2VUb1JlcGxhY2UuZ2V0KCkpOwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6Y29ycmUKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwogICAgICAgICBtX2Nv
cnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKLSAgICAgICAgRmxvYXRSZWN0IGJv
dW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5n
ZVRvQmVSZXBsYWNlZC5nZXQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCA9
IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFj
ZWQuZ2V0KCkpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNsaWVudCgpLT5zaG93Q29ycmVjdGlvblBhbmVsKG1fY29ycmVjdGlvblBhbmVsSW5mby5w
YW5lbFR5cGUsIGJvdW5kaW5nQm94LCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZWRTdHJp
bmcsIG1fY29ycmVjdGlvblBhbmVsSW5mby5yZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmlu
Zz4oKSk7CiAgICAgfQpAQCAtMzE2LDcgKzMxNiw3IEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlcjo6Y29ycmUKICAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0
aW9ucy5maXJzdCgpOwogICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CiAgICAgICAgIG1f
Y29ycmVjdGlvblBhbmVsSW5mby5pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmFu
Z2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3gg
PSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxh
Y2VkLmdldCgpKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rpb25QYW5lbEluZm8u
cGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3Ry
aW5nLCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9ucyk7CiAgICAgfQpAQCAtMzYyLDE0ICszNjIs
MTQgQEAgYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjppc0F1dAogICAgIHJldHVy
biBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFi
bGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp3aW5k
b3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorR3JhcGhpY3NSZWN0IFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OndpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSogcmFuZ2UpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygp
OwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3Rv
cjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwor
ICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHRleHRRdWFkczsKICAgICByYW5nZS0+dGV4dFF1YWRz
KHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKKyAgICBHcmFwaGljc1Jl
Y3QgYm91bmRpbmdSZWN0OwogICAgIHNpemVfdCBzaXplID0gdGV4dFF1YWRzLnNpemUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgYm91bmRpbmdSZWN0
LnVuaXRlKHRleHRRdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgcHJpdmF0ZToK
IAogICAgIEVkaXRvckNsaWVudCogY2xpZW50KCk7CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRl
eHRDaGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHdpbmRvd1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSopIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0Rm9yUmFuZ2UoY29uc3QgUmFu
Z2UqKSBjb25zdDsKICAgICB2b2lkIG1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1
dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRDb21tYW5kKik7CiAKICAgICBFZGl0b3JDbGll
bnQqIG1fY2xpZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiSFRNTEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCkBAIC01OTMsNyArNTkzLDcgQEAgSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRl
Q2FyZXRCbwogICAgIGlmIChsb2NhbFJlY3QuaXNFbXB0eSgpIHx8ICFyZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIHJldHVybiByZW5kZXJlci0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KGxvY2Fs
UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKIGludCBWaXNpYmxlUG9zaXRpb246
OmxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpIGNvbnN0CkBA
IC02MDYsNyArNjA2LDcgQEAgaW50IFZpc2libGVQb3NpdGlvbjo6bGluZURpcmVjdGlvblBvaW50
RgogICAgIC8vIFRoaXMgaWdub3JlcyB0cmFuc2Zvcm1zIG9uIHB1cnBvc2UsIGZvciBub3cuIFZl
cnRpY2FsIG5hdmlnYXRpb24gaXMgZG9uZQogICAgIC8vIHdpdGhvdXQgY29uc3VsdGluZyB0cmFu
c2Zvcm1zLCBzbyB0aGF0ICd1cCcgaW4gdHJhbnNmb3JtZWQgdGV4dCBpcyAndXAnCiAgICAgLy8g
cmVsYXRpdmUgdG8gdGhlIHRleHQsIG5vdCBhYnNvbHV0ZSAndXAnLgotICAgIEZsb2F0UG9pbnQg
Y2FyZXRQb2ludCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUobG9jYWxSZWN0LmxvY2F0aW9u
KCkpOworICAgIEdyYXBoaWNzUG9pbnQgY2FyZXRQb2ludCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGUobG9jYWxSZWN0LmxvY2F0aW9uKCkpOwogICAgIHJldHVybiByZW5kZXJlci0+Y29udGFp
bmluZ0Jsb2NrKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjYXJldFBvaW50LngoKSA6
IGNhcmV0UG9pbnQueSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA5LDcgKzUwOSw3IEBAIHN0YXRp
YyBpbmxpbmUgSW50UG9pbnQgYWJzb2x1dGVMaW5lRGlyZWMKIHsKICAgICBBU1NFUlQocm9vdCk7
CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHJvb3QtPmJsb2NrKCk7Ci0gICAg
RmxvYXRQb2ludCBhYnNvbHV0ZUJsb2NrUG9pbnQgPSBjb250YWluaW5nQmxvY2stPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVCbG9ja1Bv
aW50ID0gY29udGFpbmluZ0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludCgpKTsK
ICAgICBpZiAoY29udGFpbmluZ0Jsb2NrLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgYWJz
b2x1dGVCbG9ja1BvaW50IC09IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250
ZW50T2Zmc2V0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hv
ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIHZv
aWQgYXBwZW5kU2VydmVyTWFwTW91c2VQb3NpdGlvbgogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgcGFzcyB0cnVlIGZvciB1c2VUcmFuc2Zvcm1z
LgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0ZVRv
TG9jYWwoRmxvYXRQb2ludChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWCgp
LCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgpKSk7CisgICAgR3JhcGhp
Y3NQb2ludCBhYnNvbHV0ZVBvc2l0aW9uID0gcmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChHcmFw
aGljc1BvaW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPnBhZ2VYKCksIHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPnBhZ2VZKCkpKTsKICAgICBpbnQgeCA9IGFic29s
dXRlUG9zaXRpb24ueCgpOwogICAgIGludCB5ID0gYWJzb2x1dGVQb3NpdGlvbi55KCk7CiAgICAg
dXJsICs9ICI/IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIFBhdGggSFRNTEFyZWFFbGVtZW50
Ojpjb21wdXRlUGF0aChSZW5kZXIKICAgICAgICAgcmV0dXJuIFBhdGgoKTsKICAgICAKICAgICAv
LyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IG9iai0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhp
Y3NQb2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgpOwogCiAgICAgLy8gRGVmYXVs
dCBzaG91bGQgZGVmYXVsdCB0byB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmluZyBvYmplY3QuCiAg
ICAgSW50U2l6ZSBzaXplID0gbV9sYXN0U2l6ZTsKQEAgLTExNCw3ICsxMTQsNyBAQCBQYXRoIEhU
TUxBcmVhRWxlbWVudDo6Y29tcHV0ZVBhdGgoUmVuZGVyCiAgICAgICAgIHAudHJhbnNmb3JtKHpv
b21UcmFuc2Zvcm0pOwogICAgIH0KIAotICAgIHAudHJhbnNsYXRlKGFic1BvcyAtIEZsb2F0UG9p
bnQoKSk7CisgICAgcC50cmFuc2xhdGUoYWJzUG9zIC0gR3JhcGhpY3NQb2ludCgpKTsKICAgICBy
ZXR1cm4gcDsKIH0KICAgICAKQEAgLTE0Nyw5ICsxNDcsOSBAQCBQYXRoIEhUTUxBcmVhRWxlbWVu
dDo6Z2V0UmVnaW9uKGNvbnN0IEluCiAgICAgICAgIGNhc2UgUG9seToKICAgICAgICAgICAgIGlm
IChtX2Nvb3Jkc0xlbiA+PSA2KSB7CiAgICAgICAgICAgICAgICAgaW50IG51bVBvaW50cyA9IG1f
Y29vcmRzTGVuIC8gMjsKLSAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KG1f
Y29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZSho
ZWlnaHQpKSk7CisgICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8oR3JhcGhpY3NQb2ludChtX2Nv
b3Jkc1swXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVp
Z2h0KSkpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQobV9jb29y
ZHNbaSAqIDJdLmNhbGNNaW5WYWx1ZSh3aWR0aCksIG1fY29vcmRzW2kgKiAyICsgMV0uY2FsY01p
blZhbHVlKGhlaWdodCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oR3Jh
cGhpY3NQb2ludChtX2Nvb3Jkc1tpICogMl0uY2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNb
aSAqIDIgKyAxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSkpOwogICAgICAgICAgICAgICAgIHBhdGgu
Y2xvc2VTdWJwYXRoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBQYXRoIEhUTUxBcmVhRWxlbWVudDo6Z2V0UmVnaW9uKGNvbnN0IEluCiAg
ICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gMykgewogICAgICAgICAgICAgICAgIExlbmd0
aCByYWRpdXMgPSBtX2Nvb3Jkc1syXTsKICAgICAgICAgICAgICAgICBpbnQgciA9IG1pbihyYWRp
dXMuY2FsY01pblZhbHVlKHdpZHRoKSwgcmFkaXVzLmNhbGNNaW5WYWx1ZShoZWlnaHQpKTsKLSAg
ICAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KG1fY29vcmRzWzBdLmNhbGNN
aW5WYWx1ZSh3aWR0aCkgLSByLCBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSAtIHIs
IDIgKiByLCAyICogcikpOworICAgICAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShHcmFwaGlj
c1JlY3QobV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSAtIHIsIG1fY29vcmRzWzFdLmNh
bGNNaW5WYWx1ZShoZWlnaHQpIC0gciwgMiAqIHIsIDIgKiByKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWN0OgpAQCAtMTY2LDExICsxNjYsMTEg
QEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBJbgogICAgICAgICAgICAg
ICAgIGludCB5MCA9IG1fY29vcmRzWzFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpOwogICAgICAgICAg
ICAgICAgIGludCB4MSA9IG1fY29vcmRzWzJdLmNhbGNNaW5WYWx1ZSh3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgaW50IHkxID0gbV9jb29yZHNbM10uY2FsY01pblZhbHVlKGhlaWdodCk7Ci0gICAg
ICAgICAgICAgICAgcGF0aC5hZGRSZWN0KEZsb2F0UmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0g
eTApKTsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZFJlY3QoR3JhcGhpY3NSZWN0KHgwLCB5MCwg
eDEgLSB4MCwgeTEgLSB5MCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRGVmYXVsdDoKLSAgICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3Qo
MCwgMCwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICAgICAgcGF0aC5hZGRSZWN0KEdyYXBoaWNz
UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBVbmtub3duOgogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDEz
ICsyMDMsMTMgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbgogICAg
IHJldHVybiAwOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmRpZERyYXcoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fY29waWVkSW1hZ2UuY2xlYXIoKTsgLy8gQ2xlYXIg
b3VyIGltYWdlIHNuYXBzaG90IGlmIHdlIGhhdmUgb25lLgogCiAgICAgaWYgKFJlbmRlckJveCog
cm8gPSByZW5kZXJCb3goKSkgewotICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29u
dGVudEJveFJlY3QoKTsKLSAgICAgICAgRmxvYXRSZWN0IHIgPSBtYXBSZWN0KHJlY3QsIEZsb2F0
UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZGVzdFJlY3QpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKKyAg
ICAgICAgR3JhcGhpY3NSZWN0IHIgPSBtYXBSZWN0KHJlY3QsIEdyYXBoaWNzUmVjdCgwLCAwLCBz
aXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZGVzdFJlY3QpOwogICAgICAgICByLmlu
dGVyc2VjdChkZXN0UmVjdCk7CiAgICAgICAgIGlmIChyLmlzRW1wdHkoKSB8fCBtX2RpcnR5UmVj
dC5jb250YWlucyhyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIsIGJvb2wgdXNl
TG93UXVhbGl0eVNjYWxlKQogewogICAgIC8vIENsZWFyIHRoZSBkaXJ0eSByZWN0Ci0gICAgbV9k
aXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBtX2RpcnR5UmVjdCA9IEdyYXBoaWNzUmVjdCgp
OwogCiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMzcxLDcgKzM3MSw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxl
bWVudDoKICNlbmRpZgogfQogCi1JbnRSZWN0IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9n
aWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0CitJbnRSZWN0
IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEdyYXBoaWNz
UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0CiB7CiAgICAgLy8gUHJldmVudCB1bmRlci9vdmVyZmxv
dyBieSBlbnN1cmluZyB0aGUgcmVjdCdzIGJvdW5kcyBzdGF5IHdpdGhpbiBpbnRlZ2VyLWV4cHJl
c3NpYmxlIHJhbmdlCiAgICAgaW50IGxlZnQgPSBjbGFtcFRvSW50ZWdlcihmbG9vcmYobG9naWNh
bFJlY3QueCgpICogbV9wYWdlU2NhbGVGYWN0b3IpKTsKQEAgLTM4Miw3ICszODIsNyBAQCBJbnRS
ZWN0IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhCiAgICAgcmV0dXJuIEludFJlY3Qo
SW50UG9pbnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVm
dCwgYm90dG9tIC0gdG9wKSk7CiB9CiAKLUludFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZl
cnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkgY29uc3QKK0lu
dFNpemUgSFRNTENhbnZhc0VsZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgR3Jh
cGhpY3NTaXplJiBsb2dpY2FsU2l6ZSkgY29uc3QKIHsKICAgICAvLyBQcmV2ZW50IG92ZXJmbG93
IGJ5IGVuc3VyaW5nIHRoZSByZWN0J3MgYm91bmRzIHN0YXkgd2l0aGluIGludGVnZXItZXhwcmVz
c2libGUgcmFuZ2UKICAgICBmbG9hdCB3aWR0aCA9IGNsYW1wVG9JbnRlZ2VyKGNlaWxmKGxvZ2lj
YWxTaXplLndpZHRoKCkgKiBtX3BhZ2VTY2FsZUZhY3RvcikpOwpAQCAtNDIyLDcgKzQyMiw3IEBA
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUKIAogICAgIG1faGFzQ3Jl
YXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIEZsb2F0U2l6ZSB1bnNjYWxlZFNpemUod2lk
dGgoKSwgaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzU2l6ZSB1bnNjYWxlZFNpemUod2lkdGgoKSwg
aGVpZ2h0KCkpOwogICAgIEludFNpemUgc2l6ZSA9IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UodW5z
Y2FsZWRTaXplKTsKICAgICBpZiAoIXNpemUud2lkdGgoKSB8fCAhc2l6ZS5oZWlnaHQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmUKICAgICAvLyB3aGVyZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkgcmV0
dXJucyAwLCBob3dldmVyIHdlIGNvdWxkIHN0aWxsIGJlIGxvdyBvbiBtZW1vcnkuCiAgICAgaWYg
KCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLT5zY2FsZShGbG9hdFNpemUoc2l6ZS53aWR0aCgpIC8gdW5zY2FsZWRTaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkgLyB1bnNjYWxlZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2ltYWdl
QnVmZmVyLT5jb250ZXh0KCktPnNjYWxlKEdyYXBoaWNzU2l6ZShzaXplLndpZHRoKCkgLyB1bnNj
YWxlZFNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAvIHVuc2NhbGVkU2l6ZS5oZWlnaHQoKSkp
OwogICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXModHJ1ZSk7CiAgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KERlZmF1bHRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiAKQEAgLTQ4Nyw3ICs0
ODcsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlCiBBZmZpbmVU
cmFuc2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAogewogICAg
IEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7Ci0gICAgRmxvYXRTaXplIHVuc2NhbGVk
U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgR3JhcGhpY3NTaXplIHVuc2NhbGVkU2l6ZSh3
aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgSW50U2l6ZSBzaXplID0gY29udmVydExvZ2ljYWxUb0Rl
dmljZSh1bnNjYWxlZFNpemUpOwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAg
aWYgKHNpemUud2lkdGgoKSAmJiBzaXplLmhlaWdodCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKICNpZm5kZWYgSFRNTENhbnZhc0VsZW1lbnRfaAogI2RlZmluZSBIVE1MQ2FudmFzRWxlbWVu
dF9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIApAQCAtNTUs
NyArNTUsNyBAQCBjbGFzcyBDYW52YXNPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
Q2FudmFzT2JzZXJ2ZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjYW52YXNDaGFuZ2VkKEhU
TUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVjdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBjaGFuZ2VkUmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW52YXNSZXNp
emVkKEhUTUxDYW52YXNFbGVtZW50KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjYW52YXNEZXN0
cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqKSA9IDA7CiB9OwpAQCAtOTUsNyArOTUsNyBAQCBwdWJs
aWM6CiAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJMKG1pbWVUeXBlLCAwLCBlYyk7IH0KIAogICAg
IC8vIFVzZWQgZm9yIHJlbmRlcmluZwotICAgIHZvaWQgZGlkRHJhdyhjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IGZhbHNlKTsKIApAQCAtMTExLDggKzExMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG1h
a2VQcmVzZW50YXRpb25Db3B5KCk7CiAgICAgdm9pZCBjbGVhclByZXNlbnRhdGlvbkNvcHkoKTsK
IAotICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKLSAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRTaXpl
JikgY29uc3Q7CisgICAgSW50UmVjdCBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEdyYXBo
aWNzUmVjdCYpIGNvbnN0OworICAgIEludFNpemUgY29udmVydExvZ2ljYWxUb0RldmljZShjb25z
dCBHcmFwaGljc1NpemUmKSBjb25zdDsKICAgICBJbnRTaXplIGNvbnZlcnRUb1ZhbGlkRGV2aWNl
U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25zdDsKIAogICAgIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwpAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3JlbmRlcmVySXNDYW52YXM7CiAKICAgICBib29sIG1faWdub3JlUmVzZXQ7
Ci0gICAgRmxvYXRSZWN0IG1fZGlydHlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX2RpcnR5UmVj
dDsKIAogICAgIGZsb2F0IG1fcGFnZVNjYWxlRmFjdG9yOwogICAgIGJvb2wgbV9vcmlnaW5DbGVh
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6Ongo
KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
d29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0g
ci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSByLT5sb2Nh
bFRvQWJzb2x1dGUoKTsKICAgICByZXR1cm4gYWJzUG9zLngoKTsKIH0KIApAQCAtMzc2LDcgKzM3
Niw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNm
b3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAg
IEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgcmV0dXJu
IGFic1Bvcy55KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0dyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DYW52YXNHcmFkaWVudDo6Q2FudmFzR3Jh
ZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorQ2FudmFz
R3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwMSkKICAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShwMCwg
cDEpKQogICAgICwgbV9kYXNoYmFyZENvbXBhdGliaWxpdHlNb2RlKGZhbHNlKQogewogfQogCi1D
YW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0
IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCitDYW52YXNHcmFkaWVudDo6Q2Fu
dmFzR3JhZGllbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwMSwgZmxvYXQgcjEpCiAgICAgOiBtX2dyYWRpZW50KEdyYWRpZW50OjpjcmVh
dGUocDAsIHIwLCBwMSwgcjEpKQogICAgICwgbV9kYXNoYmFyZENvbXBhdGliaWxpdHlNb2RlKGZh
bHNlKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVu
dC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBDYW52YXNHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVk
PENhbnZhc0dyYWRpZW50PiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXNHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGNy
ZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3JhZGllbnQo
cDAsIHAxKSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzR3Jh
ZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBmbG9hdCByMSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzR3Jh
ZGllbnQ+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHAxLCBmbG9hdCByMSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDYW52YXNHcmFkaWVudChwMCwgcjAsIHAxLCByMSkpOwogICAgICAgICB9
CkBAIC01OCw4ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2lu
dCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpOworICAgICAg
ICBDYW52YXNHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDEpOworICAgICAgICBDYW52YXNHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBw
MCwgZmxvYXQgcjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBmbG9hdCByMSk7CiAgICAgICAg
IAogICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7CiAgICAgICAgIGJvb2wgbV9k
YXNoYmFyZENvbXBhdGliaWxpdHlNb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cmVzdG9yZSgpCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0QWxsQXR0cmlidXRlc1RvRGVmYXVsdCgpCiB7CiAgICAgc3RhdGUoKS5tX2dsb2JhbEFs
cGhhID0gMTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CisgICAg
c3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIHN0YXRlKCkubV9z
aGFkb3dCbHVyID0gMDsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNw
YXJlbnQ7CiAgICAgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9IENvbXBvc2l0ZVNvdXJjZU92
ZXI7CkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEFsbEF0dAogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4
dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnQsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQtPnNldExlZ2FjeVNoYWRvdyhHcmFwaGlj
c1NpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAg
ICBjb250ZXh0LT5zZXRBbHBoYSgxKTsKICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlU291cmNlT3Zlcik7CiB9CkBAIC01OTEsNyArNTkxLDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsbwogICAgIH0KIAogICAgIHN0YXRlKCkubV90
cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07Ci0gICAgYy0+c2NhbGUoRmxvYXRTaXplKHN4LCBzeSkp
OworICAgIGMtPnNjYWxlKEdyYXBoaWNzU2l6ZShzeCwgc3kpKTsKICAgICBtX3BhdGgudHJhbnNm
b3JtKEFmZmluZVRyYW5zZm9ybSgpLnNjYWxlTm9uVW5pZm9ybSgxLjAgLyBzeCwgMS4wIC8gc3kp
KTsKIH0KIApAQCAtNzc3LDcgKzc3Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpjbG9zZVBhdGgKICAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRmxvYXRSZWN0IGJvdW5kUmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICBH
cmFwaGljc1JlY3QgYm91bmRSZWN0ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwogICAgIGlmIChi
b3VuZFJlY3Qud2lkdGgoKSB8fCBib3VuZFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1fcGF0aC5j
bG9zZVN1YnBhdGgoKTsKIH0KQEAgLTc4OCw3ICs3ODgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6bW92ZVRvKGZsCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wYXRoLm1vdmVUbyhGbG9h
dFBvaW50KHgsIHkpKTsKKyAgICBtX3BhdGgubW92ZVRvKEdyYXBoaWNzUG9pbnQoeCwgeSkpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6bGluZVRvKGZsb2F0IHgsIGZsb2F0
IHkpCkBAIC03OTgsMTEgKzc5OCwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
bGluZVRvKGZsCiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRmxvYXRQb2ludCBwMSA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgR3JhcGhp
Y3NQb2ludCBwMSA9IEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgaWYgKCFtX3BhdGguaGFzQ3Vy
cmVudFBvaW50KCkpCiAgICAgICAgIG1fcGF0aC5tb3ZlVG8ocDEpOwogICAgIGVsc2UgaWYgKHAx
ICE9IG1fcGF0aC5jdXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLmFkZExpbmVUbyhGbG9h
dFBvaW50KHgsIHkpKTsKKyAgICAgICAgbV9wYXRoLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KHgs
IHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZl
VG8oZmxvYXQgY3B4LCBmbG9hdCBjcHksIGZsb2F0IHgsIGZsb2F0IHkpCkBAIC04MTIsMTEgKzgx
MiwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cXVhZHJhdGljCiAgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9w
YXRoLmhhc0N1cnJlbnRQb2ludCgpKQotICAgICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQo
Y3B4LCBjcHkpKTsKKyAgICAgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KGNweCwgY3B5
KSk7CiAKLSAgICBGbG9hdFBvaW50IHAxID0gRmxvYXRQb2ludCh4LCB5KTsKKyAgICBHcmFwaGlj
c1BvaW50IHAxID0gR3JhcGhpY3NQb2ludCh4LCB5KTsKICAgICBpZiAocDEgIT0gbV9wYXRoLmN1
cnJlbnRQb2ludCgpKQotICAgICAgICBtX3BhdGguYWRkUXVhZEN1cnZlVG8oRmxvYXRQb2ludChj
cHgsIGNweSksIHAxKTsKKyAgICAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRvKEdyYXBoaWNzUG9p
bnQoY3B4LCBjcHkpLCBwMSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpi
ZXppZXJDdXJ2ZVRvKGZsb2F0IGNwMXgsIGZsb2F0IGNwMXksIGZsb2F0IGNwMngsIGZsb2F0IGNw
MnksIGZsb2F0IHgsIGZsb2F0IHkpCkBAIC04MjYsMTEgKzgyNiwxMSBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6YmV6aWVyQ3VyCiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJs
ZUNUTSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbV9wYXRoLmhhc0N1cnJlbnRQb2ludCgp
KQotICAgICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoY3AxeCwgY3AxeSkpOworICAgICAg
ICBtX3BhdGgubW92ZVRvKEdyYXBoaWNzUG9pbnQoY3AxeCwgY3AxeSkpOwogCi0gICAgRmxvYXRQ
b2ludCBwMSA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAgR3JhcGhpY3NQb2ludCBwMSA9IEdyYXBo
aWNzUG9pbnQoeCwgeSk7CiAgICAgaWYgKHAxICE9IG1fcGF0aC5jdXJyZW50UG9pbnQoKSkKLSAg
ICAgICAgbV9wYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludChjcDF4LCBjcDF5KSwgRmxv
YXRQb2ludChjcDJ4LCBjcDJ5KSwgcDEpOworICAgICAgICBtX3BhdGguYWRkQmV6aWVyQ3VydmVU
byhHcmFwaGljc1BvaW50KGNwMXgsIGNwMXkpLCBHcmFwaGljc1BvaW50KGNwMngsIGNwMnkpLCBw
MSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcmNUbyhmbG9hdCB4MSwg
ZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MiwgZmxvYXQgciwgRXhjZXB0aW9uQ29kZSYgZWMp
CkBAIC04NDcsOCArODQ3LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1Rv
KGZsbwogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybjsK
IAotICAgIEZsb2F0UG9pbnQgcDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgRmxvYXRQb2lu
dCBwMiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKKyAgICBHcmFwaGljc1BvaW50IHAxID0gR3JhcGhp
Y3NQb2ludCh4MSwgeTEpOworICAgIEdyYXBoaWNzUG9pbnQgcDIgPSBHcmFwaGljc1BvaW50KHgy
LCB5Mik7CiAKICAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9pbnQoKSkKICAgICAgICAgbV9w
YXRoLm1vdmVUbyhwMSk7CkBAIC04NzcsMTUgKzg3NywxNSBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6YXJjKGZsb2F0CiAKICAgICAvLyBJZiAnc2EnIGFuZCAnZWEnIGRpZmZlciBi
eSBtb3JlIHRoYW4gMlBpLCBqdXN0IGFkZCBhIGNpcmNsZSBzdGFydGluZy9lbmRpbmcgYXQgJ3Nh
JwogICAgIGlmIChhbnRpY2xvY2t3aXNlICYmIHNhIC0gZWEgPj0gMiAqIHBpRmxvYXQpIHsKLSAg
ICAgICAgbV9wYXRoLmFkZEFyYyhGbG9hdFBvaW50KHgsIHkpLCByLCBzYSwgc2EgLSAyICogcGlG
bG9hdCwgYW50aWNsb2Nrd2lzZSk7CisgICAgICAgIG1fcGF0aC5hZGRBcmMoR3JhcGhpY3NQb2lu
dCh4LCB5KSwgciwgc2EsIHNhIC0gMiAqIHBpRmxvYXQsIGFudGljbG9ja3dpc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICghYW50aWNsb2Nrd2lzZSAmJiBlYSAtIHNhID49IDIg
KiBwaUZsb2F0KSB7Ci0gICAgICAgIG1fcGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwg
c2EsIHNhICsgMiAqIHBpRmxvYXQsIGFudGljbG9ja3dpc2UpOworICAgICAgICBtX3BhdGguYWRk
QXJjKEdyYXBoaWNzUG9pbnQoeCwgeSksIHIsIHNhLCBzYSArIDIgKiBwaUZsb2F0LCBhbnRpY2xv
Y2t3aXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcGF0aC5hZGRBcmMoRmxv
YXRQb2ludCh4LCB5KSwgciwgc2EsIGVhLCBhbnRpY2xvY2t3aXNlKTsKKyAgICBtX3BhdGguYWRk
QXJjKEdyYXBoaWNzUG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7CiB9CiAK
IHN0YXRpYyBib29sIHZhbGlkYXRlUmVjdEZvckNhbnZhcyhmbG9hdCYgeCwgZmxvYXQmIHksIGZs
b2F0JiB3aWR0aCwgZmxvYXQmIGhlaWdodCkKQEAgLTkxOCwxMSArOTE4LDExIEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZWN0KGZsb2EKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKCF3aWR0aCAmJiAhaGVpZ2h0KSB7Ci0gICAgICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2lu
dCh4LCB5KSk7CisgICAgICAgIG1fcGF0aC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh4LCB5KSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3BhdGguYWRkUmVjdChGbG9hdFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOworICAgIG1fcGF0aC5hZGRSZWN0KEdyYXBoaWNzUmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBA
IC05NjQsOSArOTY0LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZSgp
CiAKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpIHsKICNpZiBQTEFURk9STShRVCkKLSAgICAg
ICAgRmxvYXRSZWN0IGRpcnR5UmVjdCA9IG1fcGF0aC5wbGF0Zm9ybVBhdGgoKS5jb250cm9sUG9p
bnRSZWN0KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGgucGxhdGZv
cm1QYXRoKCkuY29udHJvbFBvaW50UmVjdCgpOwogI2Vsc2UKLSAgICAgICAgRmxvYXRSZWN0IGRp
cnR5UmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGRp
cnR5UmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKICNlbmRpZgogICAgICAgICAvLyBGYXN0
IGFwcHJveGltYXRpb24gb2YgdGhlIHN0cm9rZSdzIGJvdW5kaW5nIHJlY3QuCiAgICAgICAgIC8v
IFRoaXMgeWllbGRzIGEgc2xpZ2h0bHkgb3ZlcnNpemVkIHJlY3QgYnV0IGlzIHZlcnkgZmFzdApA
QCAtMTAwMyw5ICsxMDAzLDkgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzUG9p
bnRJbgogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7CisgICAgR3JhcGhpY3NQb2ludCBw
b2ludCh4LCB5KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9y
bTsKLSAgICBGbG9hdFBvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBjdG0uaW52ZXJzZSgpLm1hcFBv
aW50KHBvaW50KTsKKyAgICBHcmFwaGljc1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBjdG0uaW52
ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKICAgICBpZiAoIWlzZmluaXRlKHRyYW5zZm9ybWVkUG9p
bnQueCgpKSB8fCAhaXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC55KCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyh0cmFuc2Zvcm1lZFBvaW50KTsK
QEAgLTEwMjAsNyArMTAyMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVh
clJlY3QKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CiAgICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBHcmFwaGljc1JlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIHNh
dmUoKTsKICAgICBzZXRBbGxBdHRyaWJ1dGVzVG9EZWZhdWx0KCk7CkBAIC0xMDQ3LDcgKzEwNDcs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QoCiAgICAgaWYgKGdy
YWRpZW50ICYmIGdyYWRpZW50LT5pc1plcm9TaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCBy
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYgKHNob3VsZERpc3BsYXlUcmFuc3Bh
cmVuY3lFbHNld2hlcmUoKSkKICAgICAgICAgZGlzcGxheVRyYW5zcGFyZW5jeUVsc2V3aGVyZTxJ
bnRSZWN0PihlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKQEAgLTEwNzcsOSArMTA3Nyw5IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWMKICAgICBpZiAoIXN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgcmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBHcmFwaGljc1JlY3QgcmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKIAotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OworICAgIEdyYXBo
aWNzUmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OwogICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKGxp
bmVXaWR0aCAvIDIpOwogCiAgICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwpAQCAt
MTEwOCw3ICsxMTA4LDcgQEAgc3RhdGljIGlubGluZSBDR1NpemUgYWRqdXN0ZWRTaGFkb3dTaXpl
KAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVy
ID0gYmx1cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7
CiAgICAgYXBwbHlTaGFkb3coKTsKQEAgLTExMTksMTQgKzExMTksMTQgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwogICAgIGlmICghcGFyc2VDb2xvck9yQ3VycmVu
dENvbG9yKHN0YXRlKCkubV9zaGFkb3dDb2xvciwgY29sb3IsIGNhbnZhcygpKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRo
LCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBhcHBseVNo
YWRvdygpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCkKIHsK
LSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOwor
ICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7
CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIHN0YXRlKCkubV9zaGFkb3dD
b2xvciA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIDEuMGYpOwogCkBAIC0xMTM0LDcgKzExMzQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0U2hhZG93CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3No
YWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRl
KCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3IsIGZs
b2F0IGFscGhhKQpAQCAtMTE0NSwxOSArMTE0NSwxOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0U2hhZG93CiAgICAgICAgIHJldHVybjsKIAogICAgIHN0YXRlKCkubV9zaGFk
b3dDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdiYSwgYWxwaGEpOwotICAgIHN0YXRl
KCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUo
KS5tX3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3
aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYy0+c2V0
TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dC
bHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGMt
PnNldExlZ2FjeVNoYWRvdyhHcmFwaGljc1NpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1f
c2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhh
KQogewotICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdo
dCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKICAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgc3RhdGUoKS5tX3No
YWRvd0NvbG9yID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdy
YXlMZXZlbCwgYWxwaGEpOwogCkBAIC0xMTY1LDEyICsxMTY1LDEyIEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3cKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0
KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFk
b3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgciwgZmxvYXQg
ZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxv
YXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFw
aGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVy
OwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcs
IGIsIGEpOwogCkBAIC0xMTc4LDEyICsxMTc4LDEyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRTaGFkb3cKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGMt
PnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hh
ZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAg
ICBjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUo
KS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJH
Qik7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQg
eSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxv
YXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFw
aGljc1NpemUod2lkdGgsIGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVy
OwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBRnJvbUNNWUtBKGMsIG0sIHks
IGssIGEpOwogCkBAIC0xMTk4LDEzICsxMTk4LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRTaGFkb3cKICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoZGMtPnBs
YXRmb3JtQ29udGV4dCgpLCBhZGp1c3RlZFNoYWRvd1NpemUod2lkdGgsIC1oZWlnaHQpLCBibHVy
LCBzaGFkb3dDb2xvcik7CiAgICAgQ0dDb2xvclJlbGVhc2Uoc2hhZG93Q29sb3IpOwogI2Vsc2UK
LSAgICBkYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIGJsdXIs
IHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZGMtPnNl
dExlZ2FjeVNoYWRvdyhHcmFwaGljc1NpemUod2lkdGgsIC1oZWlnaHQpLCBibHVyLCBzdGF0ZSgp
Lm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogI2VuZGlmCiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhclNoYWRvdygpCiB7Ci0gICAgc3RhdGUoKS5t
X3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQg
PSBHcmFwaGljc1NpemUoKTsKICAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IDA7CiAgICAgc3Rh
dGUoKS5tX3NoYWRvd0NvbG9yID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgIGFwcGx5U2hhZG93
KCk7CkBAIC0xMjE4LDcgKzEyMTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
YXBwbHlTaGFkCiAKICAgICBmbG9hdCB3aWR0aCA9IHN0YXRlKCkubV9zaGFkb3dPZmZzZXQud2lk
dGgoKTsKICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LmhlaWdodCgp
OwotICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0
KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiB9CiAKIHN0YXRpYyBJbnRTaXplIHNpemUoSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UpCkBAIC0xMjM3LDkgKzEyMzcsOSBAQCBzdGF0aWMgSW50U2l6ZSBzaXplKEhUTUxWaWRl
b0VsZW1lbnQqIHZpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBGbG9hdFJlY3Qgbm9ybWFs
aXplUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUmVj
dCBub3JtYWxpemVSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAorICAgIHJldHVybiBHcmFwaGlj
c1JlY3QobWluKHJlY3QueCgpLCByZWN0Lm1heFgoKSksCiAgICAgICAgIG1pbihyZWN0LnkoKSwg
cmVjdC5tYXhZKCkpLAogICAgICAgICBtYXgocmVjdC53aWR0aCgpLCAtcmVjdC53aWR0aCgpKSwK
ICAgICAgICAgbWF4KHJlY3QuaGVpZ2h0KCksIC1yZWN0LmhlaWdodCgpKSk7CkBAIC0xMjYzLDcg
KzEyNjMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgSW50U2l6ZSBzID0gc2l6ZShpbWFnZSk7Ci0gICAgZHJh
d0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoMCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgRmxv
YXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7CisgICAgZHJhd0ltYWdlKGltYWdlLCBH
cmFwaGljc1JlY3QoMCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgR3JhcGhpY3NSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCkBAIC0xMjc0LDE1ICsxMjc0
LDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICAgICAg
ZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBkcmF3
SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCksIEZsb2F0UmVjdChkeCwgZHks
IGR3LCBkaCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEdyYXBoaWNzUmVjdChzeCwgc3ks
IHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKIH0KIAotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBj
b25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGRy
YXdJbWFnZShpbWFnZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0
ZSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQ29tcG9zaXRlT3BlcmF0b3ImIG9wLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTElt
YWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBDb21wb3NpdGVPcGVyYXRvciYgb3AsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGlmICghaW1hZ2UpIHsKICAgICAgICAgZWMgPSBUWVBFX01JU01B
VENIX0VSUjsKQEAgLTEzMDEsMTAgKzEzMDEsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdJbWFnZQogICAgIGlmICghaW1hZ2UtPmNvbXBsZXRlKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkU3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qo
c3JjUmVjdCk7Ci0gICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWREc3RSZWN0ID0gbm9ybWFsaXplUmVj
dChkc3RSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybWFsaXplZFNyY1JlY3QgPSBub3JtYWxp
emVSZWN0KHNyY1JlY3QpOworICAgIEdyYXBoaWNzUmVjdCBub3JtYWxpemVkRHN0UmVjdCA9IG5v
cm1hbGl6ZVJlY3QoZHN0UmVjdCk7CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZShpbWFnZSkpOworICAgIEdyYXBoaWNzUmVjdCBpbWFnZVJl
Y3QgPSBHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBzaXplKGltYWdlKSk7CiAgICAgaWYg
KCFpbWFnZVJlY3QuY29udGFpbnMobm9ybWFsaXplZFNyY1JlY3QpIHx8ICFzcmNSZWN0LndpZHRo
KCkgfHwgIXNyY1JlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTM0MiwyNSArMTM0MiwyNSBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZHJhd0ltYWdlKGNhbnZhcywgRmxvYXRSZWN0
KDAsIDAsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSksIEZsb2F0UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOworICAgIGRyYXdJbWFnZShjYW52YXMsIEdyYXBoaWNzUmVj
dCgwLCAwLCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpLCBHcmFwaGljc1JlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCksIGVjKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAogICAgIGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLAogICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZHcsIGZsb2F0IGRoLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBkcmF3SW1hZ2Uo
Y2FudmFzLCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBGbG9hdFJlY3QoZHgsIGR5LCBkdywg
ZGgpLCBlYyk7CisgICAgZHJhd0ltYWdlKGNhbnZhcywgR3JhcGhpY3NSZWN0KHN4LCBzeSwgc3cs
IHNoKSwgR3JhcGhpY3NSZWN0KGR4LCBkeSwgZHcsIGRoKSwgZWMpOwogfQogCi12b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBzb3VyY2VD
YW52YXMsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKLSAgICBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogc291cmNlQ2FudmFzLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsCisgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIXNvdXJjZUNhbnZhcykgewogICAgICAgICBlYyA9IFRZ
UEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRmxvYXRSZWN0
IHNyY0NhbnZhc1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzb3VyY2VDYW52YXMtPnNp
emUoKSk7CisgICAgR3JhcGhpY3NSZWN0IHNyY0NhbnZhc1JlY3QgPSBHcmFwaGljc1JlY3QoR3Jh
cGhpY3NQb2ludCgpLCBzb3VyY2VDYW52YXMtPnNpemUoKSk7CiAKICAgICBpZiAoIXNyY0NhbnZh
c1JlY3Qud2lkdGgoKSB8fCAhc3JjQ2FudmFzUmVjdC5oZWlnaHQoKSkgewogICAgICAgICBlYyA9
IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTQyNCwxNyArMTQyNCwxNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
SW50U2l6ZSBzID0gc2l6ZSh2aWRlbyk7Ci0gICAgZHJhd0ltYWdlKHZpZGVvLCBGbG9hdFJlY3Qo
MCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpLCBlYyk7CisgICAgZHJhd0ltYWdlKHZpZGVvLCBHcmFwaGljc1JlY3QoMCwgMCwgcy53aWR0
aCgpLCBzLmhlaWdodCgpKSwgR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7
CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTFZpZGVv
RWxlbWVudCogdmlkZW8sCiAgICAgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gsCiAgICAgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIGRyYXdJbWFnZSh2aWRlbywgRmxvYXRSZWN0KHN4LCBzeSwgc3cs
IHNoKSwgRmxvYXRSZWN0KGR4LCBkeSwgZHcsIGRoKSwgZWMpOworICAgIGRyYXdJbWFnZSh2aWRl
bywgR3JhcGhpY3NSZWN0KHN4LCBzeSwgc3csIHNoKSwgR3JhcGhpY3NSZWN0KGR4LCBkeSwgZHcs
IGRoKSwgZWMpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVj
dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXZpZGVvKSB7
CkBAIC0xNDQ3LDcgKzE0NDcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d0ltYWdlCiAgICAgaWYgKHZpZGVvLT5yZWFkeVN0YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6
SEFWRV9OT1RISU5HIHx8IHZpZGVvLT5yZWFkeVN0YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6
SEFWRV9NRVRBREFUQSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHZpZGVvUmVj
dCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUodmlkZW8pKTsKKyAgICBHcmFwaGljc1Jl
Y3QgdmlkZW9SZWN0ID0gR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgc2l6ZSh2aWRlbykp
OwogICAgIGlmICghdmlkZW9SZWN0LmNvbnRhaW5zKG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCkpIHx8
ICFzcmNSZWN0LndpZHRoKCkgfHwgIXNyY1JlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqYyk7CiAgICAgYy0+Y2xpcChkc3RSZWN0KTsKICAgICBj
LT50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICBjLT5zY2FsZShGbG9h
dFNpemUoZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgp
IC8gc3JjUmVjdC5oZWlnaHQoKSkpOworICAgIGMtPnNjYWxlKEdyYXBoaWNzU2l6ZShkc3RSZWN0
LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0Lmhl
aWdodCgpKSk7CiAgICAgYy0+dHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgpKTsK
ICAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYywgSW50UmVjdChJbnRQb2lu
dCgpLCBzaXplKHZpZGVvKSkpOwogICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOwpAQCAtMTQ4NSw3
ICsxNDg1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAg
ICAgICBvcCA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwot
ICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgRmxvYXRSZWN0
KGR4LCBkeSwgZHcsIGRoKSwgb3AsIGVjKTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIEdyYXBoaWNz
UmVjdChzeCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCksIG9wLCBl
Yyk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRBbHBoYShmbG9hdCBh
bHBoYSkKQEAgLTE1MTEsNyArMTUxMSw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ28KIHsKICAgICBBU1NFUlQoc2hvdWxkRGlzcGxheVRyYW5zcGFyZW5jeUVsc2V3
aGVyZSgpKTsKIAotICAgIEZsb2F0UmVjdCBjYW52YXNSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0
aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCBjYW52YXNSZWN0KDAs
IDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpOwogICAgIGNhbnZhc1Jl
Y3QgPSBzdGF0ZSgpLm1fdHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KGNhbnZhc1JlY3QpOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKQEAgLTE1MzksNyAr
MTUzOSw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IENhbnZhc1JlbmRlcmkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPENhbnZhc0dyYWRpZW50PiBncmFkaWVu
dCA9IENhbnZhc0dyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludCh4MCwgeTApLCBGbG9hdFBvaW50
KHgxLCB5MSkpOworICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNH
cmFkaWVudDo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQoeDAsIHkwKSwgR3JhcGhpY3NQb2ludCh4MSwg
eTEpKTsKICAgICBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9hcmQoZ3JhZGllbnQuZ2V0KCkpOwog
ICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CiB9CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBQ
YXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBDYW52YXNSZW5kZXJpCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNH
cmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAsIHkwKSwgcjAsIEZsb2F0UG9pbnQoeDEsIHkx
KSwgcjEpOworICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFk
aWVudDo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQoeDAsIHkwKSwgcjAsIEdyYXBoaWNzUG9pbnQoeDEs
IHkxKSwgcjEpOwogICAgIHByZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChncmFkaWVudC5nZXQo
KSk7CiAgICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKIH0KQEAgLTE2MDUsNyArMTYwNSw3
IEBAIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW4KICAgICByZXR1cm4g
Q2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgcmVwZWF0WCwgcmVw
ZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRpZERyYXcoY29uc3QgRmxvYXRSZWN0JiByLCB1bnNpZ25lZCBvcHRpb25zKQor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpZERyYXcoY29uc3QgR3JhcGhpY3NSZWN0
JiByLCB1bnNpZ25lZCBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdp
bmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQpAQCAtMTYxMyw3ICsxNjEzLDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRpZERyYXcoYwogICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBy
OworICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3QgPSByOwogICAgIGlmIChvcHRpb25zICYgQ2Fu
dmFzRGlkRHJhd0FwcGx5VHJhbnNmb3JtKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG0g
PSBzdGF0ZSgpLm1fdHJhbnNmb3JtOwogICAgICAgICBkaXJ0eVJlY3QgPSBjdG0ubWFwUmVjdChy
KTsKQEAgLTE2MjEsNyArMTYyMSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
aWREcmF3KGMKIAogICAgIGlmIChvcHRpb25zICYgQ2FudmFzRGlkRHJhd0FwcGx5U2hhZG93ICYm
IGFscGhhQ2hhbm5lbChzdGF0ZSgpLm1fc2hhZG93Q29sb3IpKSB7CiAgICAgICAgIC8vIFRoZSBz
aGFkb3cgZ2V0cyBhcHBsaWVkIGFmdGVyIHRyYW5zZm9ybWF0aW9uCi0gICAgICAgIEZsb2F0UmVj
dCBzaGFkb3dSZWN0KGRpcnR5UmVjdCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0
KGRpcnR5UmVjdCk7CiAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzdGF0ZSgpLm1fc2hhZG93T2Zm
c2V0KTsKICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHN0YXRlKCkubV9zaGFkb3dCbHVyKTsK
ICAgICAgICAgZGlydHlSZWN0LnVuaXRlKHNoYWRvd1JlY3QpOwpAQCAtMTY3Nyw3ICsxNjc3LDcg
QEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IENhbnZhc1JlbmRlcmluZ0NvbgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBGbG9hdFNpemUgdW5zY2FsZWRTaXplKGZhYnMoc3cpLCBmYWJz
KHNoKSk7CisgICAgR3JhcGhpY3NTaXplIHVuc2NhbGVkU2l6ZShmYWJzKHN3KSwgZmFicyhzaCkp
OwogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IGNhbnZhcygpLT5jb252ZXJ0TG9naWNhbFRvRGV2
aWNlKHVuc2NhbGVkU2l6ZSk7CiAgICAgaWYgKHNjYWxlZFNpemUud2lkdGgoKSA8IDEpCiAgICAg
ICAgIHNjYWxlZFNpemUuc2V0V2lkdGgoMSk7CkBAIC0xNzE1LDcgKzE3MTUsNyBAQCBQYXNzUmVm
UHRyPEltYWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29uCiAgICAgICAgIHNoID0gLXNoOwogICAg
IH0KICAgICAKLSAgICBGbG9hdFJlY3QgdW5zY2FsZWRSZWN0KHN4LCBzeSwgc3csIHNoKTsKKyAg
ICBHcmFwaGljc1JlY3QgdW5zY2FsZWRSZWN0KHN4LCBzeSwgc3csIHNoKTsKICAgICBJbnRSZWN0
IHNjYWxlZFJlY3QgPSBjYW52YXMoKS0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFJl
Y3QpOwogICAgIGlmIChzY2FsZWRSZWN0LndpZHRoKCkgPCAxKQogICAgICAgICBzY2FsZWRSZWN0
LnNldFdpZHRoKDEpOwpAQCAtMTc2Nyw3ICsxNzY3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnB1dEltYWdlRAogICAgICAgICBkaXJ0eUhlaWdodCA9IC1kaXJ0eUhlaWdodDsK
ICAgICB9CiAKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QoZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lk
dGgsIGRpcnR5SGVpZ2h0KTsKKyAgICBHcmFwaGljc1JlY3QgY2xpcFJlY3QoZGlydHlYLCBkaXJ0
eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKICAgICBjbGlwUmVjdC5pbnRlcnNlY3QoSW50
UmVjdCgwLCAwLCBkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSkpOwogICAgIEludFNpemUg
ZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwog
ICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKQEAgLTE5
MTMsNyArMTkxMyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkK
ICAgICBUZXh0UnVuIHRleHRSdW4oc3RyaW5nLCBsZW5ndGgsIGZhbHNlLCAwLCAwLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCBUZXh0UnVuOjpO
b1JvdW5kaW5nKTsKIAogICAgIC8vIERyYXcgdGhlIGl0ZW0gdGV4dCBhdCB0aGUgY29ycmVjdCBw
b2ludC4KLSAgICBGbG9hdFBvaW50IGxvY2F0aW9uKHgsIHkpOworICAgIEdyYXBoaWNzUG9pbnQg
bG9jYXRpb24oeCwgeSk7CiAgICAgc3dpdGNoIChzdGF0ZSgpLm1fdGV4dEJhc2VsaW5lKSB7CiAg
ICAgY2FzZSBUb3BUZXh0QmFzZWxpbmU6CiAgICAgY2FzZSBIYW5naW5nVGV4dEJhc2VsaW5lOgpA
QCAtMTk1Miw3ICsxOTUyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdU
ZXh0SQogICAgIH0KIAogICAgIC8vIFRoZSBzbG9wIGJ1aWx0IGluIHRvIHRoaXMgbWFzayByZWN0
IG1hdGNoZXMgdGhlIGhldXJpc3RpYyB1c2VkIGluIEZvbnRDR1dpbi5jcHAgZm9yIEdESSB0ZXh0
LgotICAgIEZsb2F0UmVjdCB0ZXh0UmVjdCA9IEZsb2F0UmVjdChsb2NhdGlvbi54KCkgLSBmb250
TWV0cmljcy5oZWlnaHQoKSAvIDIsIGxvY2F0aW9uLnkoKSAtIGZvbnRNZXRyaWNzLmFzY2VudCgp
IC0gZm9udE1ldHJpY3MubGluZUdhcCgpLAorICAgIEdyYXBoaWNzUmVjdCB0ZXh0UmVjdCA9IEdy
YXBoaWNzUmVjdChsb2NhdGlvbi54KCkgLSBmb250TWV0cmljcy5oZWlnaHQoKSAvIDIsIGxvY2F0
aW9uLnkoKSAtIGZvbnRNZXRyaWNzLmFzY2VudCgpIC0gZm9udE1ldHJpY3MubGluZUdhcCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCArIGZvbnRNZXRyaWNzLmhl
aWdodCgpLCBmb250TWV0cmljcy5saW5lU3BhY2luZygpKTsKICAgICBpZiAoIWZpbGwpCiAgICAg
ICAgIHRleHRSZWN0LmluZmxhdGUoYy0+c3Ryb2tlVGhpY2tuZXNzKCkgLyAyKTsKQEAgLTIwMDYs
NyArMjAwNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEkKICAg
ICBlbHNlIHsKICAgICAgICAgLy8gV2hlbiBzdHJva2luZyB0ZXh0LCBwb2ludHkgbWl0ZXJzIGNh
biBleHRlbmQgb3V0c2lkZSBvZiB0ZXh0UmVjdCwgc28gd2UKICAgICAgICAgLy8gcHVudCBhbmQg
ZGlydHkgdGhlIHdob2xlIGNhbnZhcy4KLSAgICAgICAgZGlkRHJhdyhGbG9hdFJlY3QoMCwgMCwg
Y2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworICAgICAgICBkaWREcmF3
KEdyYXBoaWNzUmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgp
KSk7CiAgICAgfQogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
U2l6ZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAj
aW5jbHVkZSAiUGF0aC5oIgpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBDYW52YXNHcmFkaWVudDsKIGNsYXNzIENhbnZhc1BhdHRlcm47CiBjbGFzcyBDYW52YXNT
dHlsZTsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxl
bWVudDsKQEAgLTE2OCwxNyArMTY4LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdJbWFnZShI
VE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkcmF3SW1h
Z2UoSFRNTEltYWdlRWxlbWVudCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3Qm
IHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQgeSwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50Kiwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgZmxvYXQgc3gsIGZs
b2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcs
IGZsb2F0IGRoLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3SW1hZ2UoSFRNTENhbnZh
c0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1l
bnQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0b3ImLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkcmF3
SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJh
d0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgQ29tcG9zaXRlT3BlcmF0b3ImLCBFeGNl
cHRpb25Db2RlJik7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxW
aWRlb0VsZW1lbnQqLCBmbG9hdCB4LCBmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShI
VE1MVmlkZW9FbGVtZW50KiwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gs
IGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0IGRoLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJik7CiAjZW5k
aWYKIAogICAgIHZvaWQgZHJhd0ltYWdlRnJvbVJlY3QoSFRNTEltYWdlRWxlbWVudCosIGZsb2F0
IHN4ID0gMCwgZmxvYXQgc3kgPSAwLCBmbG9hdCBzdyA9IDAsIGZsb2F0IHNoID0gMCwKQEAgLTI0
MSw3ICsyNDEsNyBAQCBwcml2YXRlOgogICAgICAgICBMaW5lQ2FwIG1fbGluZUNhcDsKICAgICAg
ICAgTGluZUpvaW4gbV9saW5lSm9pbjsKICAgICAgICAgZmxvYXQgbV9taXRlckxpbWl0OwotICAg
ICAgICBGbG9hdFNpemUgbV9zaGFkb3dPZmZzZXQ7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBtX3No
YWRvd09mZnNldDsKICAgICAgICAgZmxvYXQgbV9zaGFkb3dCbHVyOwogICAgICAgICBSR0JBMzIg
bV9zaGFkb3dDb2xvcjsKICAgICAgICAgZmxvYXQgbV9nbG9iYWxBbHBoYTsKQEAgLTI3NSw3ICsy
NzUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhcHBseVNoYWRvdygpOwogCi0gICAgdm9pZCBk
aWREcmF3KGNvbnN0IEZsb2F0UmVjdCYsIHVuc2lnbmVkIG9wdGlvbnMgPSBDYW52YXNEaWREcmF3
QXBwbHlBbGwpOworICAgIHZvaWQgZGlkRHJhdyhjb25zdCBHcmFwaGljc1JlY3QmLCB1bnNpZ25l
ZCBvcHRpb25zID0gQ2FudmFzRGlkRHJhd0FwcGx5QWxsKTsKIAogICAgIEdyYXBoaWNzQ29udGV4
dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNSw3ICs1MDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6bWFya0NvbnRleHRDCiAgICAgZWxzZSB7CiAjZW5kaWYKICAgICAgICAgaWYgKCFt
X21hcmtlZENhbnZhc0RpcnR5KQotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXcoRmxvYXRS
ZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAg
ICAgICAgIGNhbnZhcygpLT5kaWREcmF3KEdyYXBoaWNzUmVjdCgwLCAwLCBjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKICNpZm5kZWYgU2xpZGVyVGh1bWJFbGVtZW50X2gKICNkZWZpbmUgU2xpZGVy
VGh1bWJFbGVtZW50X2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgpAQCAtNDMsNyArNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFw
aGljc1BvaW50OwogCiBjbGFzcyBTbGlkZXJUaHVtYkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVs
ZW1lbnQgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTU5vZGVI
aWdobGlnaHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RP
TU5vZGVIaWdobGlnaHRlci5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1QYXRoIHF1YWRU
b1BhdGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQorUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEdyYXBo
aWNzUXVhZCYgcXVhZCkKIHsKICAgICBQYXRoIHF1YWRQYXRoOwogICAgIHF1YWRQYXRoLm1vdmVU
byhxdWFkLnAxKCkpOwpAQCAtNTgsNyArNTgsNyBAQCBQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBxdWFkUGF0aDsKIH0KIAotdm9pZCBkcmF3T3V0bGlu
ZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBj
b25zdCBDb2xvciYgZmlsbENvbG9yKQordm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgR3JhcGhpY3NRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmls
bENvbG9yKQogewogICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7CiAg
ICAgc3RhdGljIGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcig2MiwgODYsIDE4MCwgMjI4KTsKQEAg
LTgzLDcgKzgzLDcgQEAgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgYwog
ICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwogfQogCi12b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwgY29uc3QgRmxvYXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3Zv
aWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgR3JhcGhpY3NRdWFkJiBxdWFkLCBjb25zdCBHcmFwaGljc1F1YWQmIGNsaXBRdWFkLCBjb25z
dCBDb2xvciYgZmlsbENvbG9yKQogewogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIFBhdGggY2xp
cFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7CkBAIC05MiwxNCArOTIsMTQgQEAgdm9p
ZCBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDbwogICAgIGNvbnRleHQucmVzdG9y
ZSgpOwogfQogCi12b2lkIGRyYXdIaWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRp
bmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFy
Z2luUXVhZCwgRE9NTm9kZUhpZ2hsaWdodGVyOjpIaWdobGlnaHRNb2RlIG1vZGUpCit2b2lkIGRy
YXdIaWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmFwaGlj
c1F1YWQmIGNvbnRlbnRRdWFkLCBjb25zdCBHcmFwaGljc1F1YWQmIHBhZGRpbmdRdWFkLCBjb25z
dCBHcmFwaGljc1F1YWQmIGJvcmRlclF1YWQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgbWFyZ2luUXVh
ZCwgRE9NTm9kZUhpZ2hsaWdodGVyOjpIaWdobGlnaHRNb2RlIG1vZGUpCiB7CiAgICAgc3RhdGlj
IGNvbnN0IENvbG9yIGNvbnRlbnRCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxMjgpOwogICAgIHN0
YXRpYyBjb25zdCBDb2xvciBwYWRkaW5nQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTYwKTsKICAg
ICBzdGF0aWMgY29uc3QgQ29sb3IgYm9yZGVyQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTkyKTsK
ICAgICBzdGF0aWMgY29uc3QgQ29sb3IgbWFyZ2luQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMjI4
KTsKIAotICAgIEZsb2F0UXVhZCBjbGlwUXVhZDsKKyAgICBHcmFwaGljc1F1YWQgY2xpcFF1YWQ7
CiAgICAgaWYgKG1vZGUgPT0gRE9NTm9kZUhpZ2hsaWdodGVyOjpIaWdobGlnaHRNYXJnaW4gfHwg
KG1vZGUgPT0gRE9NTm9kZUhpZ2hsaWdodGVyOjpIaWdobGlnaHRBbGwgJiYgbWFyZ2luUXVhZCAh
PSBib3JkZXJRdWFkKSkgewogICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4
dCwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCwgbWFyZ2luQm94Q29sb3IpOwogICAgICAgICBjbGlw
UXVhZCA9IGJvcmRlclF1YWQ7CkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBkcmF3SGlnaGxpZ2h0
Rm9yQm94KEdyYXBoaWNzQ29udGV4dAogICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAo
Y29udGV4dCwgY2xpcFF1YWQsIGNsaXBRdWFkLCBjb250ZW50Qm94Q29sb3IpOwogfQogCi12b2lk
IGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxpbmVCb3hRdWFkcykKK3ZvaWQgZHJh
d0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYgbGluZUJveFF1YWRzKQogewogICAgIHN0
YXRpYyBjb25zdCBDb2xvciBsaW5lQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsKIApAQCAt
MTMyLDcgKzEzMiw3IEBAIGlubGluZSBJbnRTaXplIGZyYW1lVG9NYWluRnJhbWVPZmZzZXQoRnIK
ICAgICByZXR1cm4gbWFpbkZyYW1lUG9pbnQgLSBJbnRQb2ludCgpOwogfQogCi12b2lkIGRyYXdF
bGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBub2RlLCBjb25zdCBJ
bnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBjb25zdCBGbG9h
dFJlY3QmIG92ZXJsYXlSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCit2b2lkIGRy
YXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBOb2RlKiBub2RlLCBjb25z
dCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgSW50UmVjdCYgYW5jaG9yQm94LCBjb25zdCBH
cmFwaGljc1JlY3QmIG92ZXJsYXlSZWN0LCBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGluZ3MpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGludCByZWN0SW5mbGF0ZVB4ID0gNDsKICAgICBzdGF0aWMgY29u
c3QgaW50IGZvbnRIZWlnaHRQeCA9IDEyOwpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgZHJhd05v
ZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiAKICAgICBJbnRSZWN0IHRpdGxlQW5jaG9yQm94
ID0gYm91bmRpbmdCb3g7CiAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBjb250YWluaW5nRnJhbWUt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKLSAgICBGbG9hdFJlY3Qgb3ZlcmxheVJlY3Qg
PSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3Qgb3ZlcmxheVJl
Y3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICBpZiAoIW92ZXJsYXlSZWN0LmNv
bnRhaW5zKGJvdW5kaW5nQm94KSAmJiAhYm91bmRpbmdCb3guY29udGFpbnMoZW5jbG9zaW5nSW50
UmVjdChvdmVybGF5UmVjdCkpKQogICAgICAgICBvdmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVD
b250ZW50UmVjdCgpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1vdmVybGF5UmVjdC54KCksIC1v
dmVybGF5UmVjdC55KCkpOwpAQCAtMjY3LDEwICsyNjcsMTAgQEAgdm9pZCBkcmF3Tm9kZUhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQmIAogICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJC
b3gud2lkdGgoKSArIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpICsgcmVuZGVyQm94LT5tYXJnaW5S
aWdodCgpLCBib3JkZXJCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpblRvcCgpICsgcmVu
ZGVyQm94LT5tYXJnaW5Cb3R0b20oKSk7CiAKIAotICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVu
dFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRC
b3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7Ci0gICAgICAgIEZsb2F0UXVh
ZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJC
b3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOworICAgICAgICBH
cmFwaGljc1F1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoR3JhcGhpY3NSZWN0KGNvbnRlbnRCb3gpKTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIGFic1Bh
ZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChw
YWRkaW5nQm94KSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVy
Qm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChib3JkZXJCb3gpKTsKKyAgICAg
ICAgR3JhcGhpY3NRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoR3JhcGhpY3NSZWN0KG1hcmdpbkJveCkpOwogCiAgICAgICAgIGFic0NvbnRlbnRRdWFk
Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKICAgICAgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWlu
RnJhbWVPZmZzZXQpOwpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgZHJhd05vZGVIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0JiAKICAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBh
YnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1
YWQsIG1vZGUpOwogICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkgfHwg
aXNTVkdSZW5kZXJlcikgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNob3cgbWFyZ2lu
cy9wYWRkaW5nL2JvcmRlciBmb3IgaW5saW5lcy4KLSAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4g
bGluZUJveFF1YWRzOworICAgICAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBsaW5lQm94UXVhZHM7
CiAgICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGxpbmVCb3hRdWFkcyk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICBsaW5lQm94UXVhZHNbaV0gKz0gbWFpbkZyYW1lT2Zmc2V0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiQ2hyb21lLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oIgpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDo6Y2hhbmcKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBGbG9hdFJlY3QgZnJh
bWVSZWN0ID0gbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7CisgICAgR3Jh
cGhpY3NSZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2luZG93UmVj
dCgpOwogICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOwogICAgIG1fZnJvbnRlbmRQYWdlLT5jaHJv
bWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywxMCBAQAogI2lu
Y2x1ZGUgIkVkaXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJGb2N1c0RpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpbkhhbHRlckNs
aWVudC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgpAQCAtODksMTAgKzg5LDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCkgeyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikgeyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
d2luZG93UmVjdCgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgeyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3Qgd2luZG93UmVjdCgpIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmly
dHVhbCBHcmFwaGljc1JlY3QgcGFnZVJlY3QoKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQog
CiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpIHsgcmV0dXJuIDEuZjsgfQogCkBAIC01
MTcsNyArNTE3LDcgQEAgcHVibGljOgogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tl
cigpIHsgcmV0dXJuICZtX3RleHRDaGVja2VyQ2xpZW50OyB9CiAKICNpZiBVU0UoQVVUT0NPUlJF
Q1RJT05fUEFORUwpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVj
dGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSB7IH0KICAgICB2aXJ0dWFs
IFN0cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQ29y
cmVjdGlvblBhbmVsKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKQEAgLTMyNjUsOCArMzI2NSw4IEBAIEZyYW1lKiBjcmVhdGVXaW5kb3coRnJh
bWUqIG9wZW5lckZyYW1lLCAKICAgICAvLyBzcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBwYWdlLiBX
ZSBjYW4gb25seSByZXNpemUgdGhlIHdpbmRvdywgc28KICAgICAvLyBhZGp1c3QgZm9yIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gdGhlIHdpbmRvdyBzaXplIGFuZCB0aGUgcGFnZSBzaXplLgogCi0g
ICAgRmxvYXRSZWN0IHdpbmRvd1JlY3QgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwot
ICAgIEZsb2F0U2l6ZSBwYWdlU2l6ZSA9IHBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgpLnNpemUo
KTsKKyAgICBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dS
ZWN0KCk7CisgICAgR3JhcGhpY3NTaXplIHBhZ2VTaXplID0gcGFnZS0+Y2hyb21lKCktPnBhZ2VS
ZWN0KCkuc2l6ZSgpOwogICAgIGlmIChmZWF0dXJlcy54U2V0KQogICAgICAgICB3aW5kb3dSZWN0
LnNldFgoZmVhdHVyZXMueCk7CiAgICAgaWYgKGZlYXR1cmVzLnlTZXQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZpbGVJ
Y29uTG9hZGVyLmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRlICJGaWxlTGlz
dC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiR2Vv
bG9jYXRpb24uaCIKQEAgLTEzMiwxNyArMTMyLDE3IEBAIHZvaWQgQ2hyb21lOjpzY3JvbGxiYXJz
TW9kZURpZENoYW5nZSgpIGMKICAgICBtX2NsaWVudC0+c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2Uo
KTsKIH0KIAotdm9pZCBDaHJvbWU6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KSBjb25zdAordm9pZCBDaHJvbWU6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBy
ZWN0KSBjb25zdAogewogICAgIG1fY2xpZW50LT5zZXRXaW5kb3dSZWN0KHJlY3QpOwogfQogCi1G
bG9hdFJlY3QgQ2hyb21lOjp3aW5kb3dSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBDaHJvbWU6
OndpbmRvd1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX2NsaWVudC0+d2luZG93UmVjdCgp
OwogfQogCi1GbG9hdFJlY3QgQ2hyb21lOjpwYWdlUmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3Qg
Q2hyb21lOjpwYWdlUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2xpZW50LT5wYWdlUmVj
dCgpOwogfQpAQCAtNTEzLDEyICs1MTMsMTIgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OnBvcHVsYXRl
VmlzaXRlZExpbmtzKAogewogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdo
bGlnaHRSZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKQor
R3JhcGhpY3NSZWN0IENocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29u
c3QgQXRvbWljU3RyaW5nJiwgY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKLSAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi12b2lkIENocm9tZUNs
aWVudDo6cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wpCit2b2lkIENocm9t
ZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYs
IGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGJvb2wsIGJvb2wpCiB7
CiB9CiAKQEAgLTUzMywxNCArNTMzLDE0IEBAIFN0cmluZyBDaHJvbWVDbGllbnQ6OmdlbmVyYXRl
UmVwbGFjZW1lbnQKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50
OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
LCBTY3JvbGxiYXJDb250cm9sU2l6ZSwKK2Jvb2wgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNj
cm9sbGJhcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBTY3JvbGxiYXJD
b250cm9sU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3Jv
bGxiYXJDb250cm9sU3RhdGUsIFNjcm9sbGJhclBhcnQsIGJvb2wsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBTY3JvbGxiYXJDb250cm9sUGFy
dE1hc2spCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIENocm9tZUNsaWVudDo6cGFp
bnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikK
K2Jvb2wgQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBDaHJvbWVDbGllbnQ7CiAgICAgY2xhc3MgRmlsZUNob29zZXI7CiAg
ICAgY2xhc3MgRmlsZUljb25Mb2FkZXI7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNz
IEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBHZW9sb2NhdGlvbjsK
ICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwpAQCAtODcsMTAgKzg3LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0OwogICAgICAgICB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25z
dDsKIAotICAgICAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7
Ci0gICAgICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKSBjb25zdDsKKyAgICAgICAgR3JhcGhpY3NS
ZWN0IHdpbmRvd1JlY3QoKSBjb25zdDsKIAotICAgICAgICBGbG9hdFJlY3QgcGFnZVJlY3QoKSBj
b25zdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCkgY29uc3Q7CiAgICAgICAgIAog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgRWxlbWVudDsKICAgICBjbGFzcyBGaWxlQ2hvb3NlcjsKICAgICBjbGFz
cyBGaWxlSWNvbkxvYWRlcjsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhp
Y3NSZWN0OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEdlb2xvY2F0aW9uOwogICAgIGNs
YXNzIEdyYXBoaWNzTGF5ZXI7CkBAIC03OSwxMCArNzksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpID0g
MDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVjdCgpID0g
MDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0
JikgPSAwOworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCkgPSAwOwog
ICAgICAgICAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgcGFnZVJlY3QoKSA9IDA7CisgICAg
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCkgPSAwOwogICAgICAgICAKICAgICAg
ICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpID0gMDsKICAgICAKQEAgLTIwOSwxNyArMjA5
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxh
dGVWaXNpdGVkTGlua3MoKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjdXN0b21IaWdo
bGlnaHRSZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVj
dCYgbGluZVJlY3QpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQo
Tm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVj
dCBjdXN0b21IaWdobGlnaHRSZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgbGluZVJlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
dXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBib3hSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0LAogICAgICAg
ICAgICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGlyZUxpbmUpOwogICAgICAgICAgICAgCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxv
YWQoY29uc3QgU3RyaW5nJiBwYXRoLCBTdHJpbmcmIGdlbmVyYXRlZEZpbGVuYW1lKTsKICAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIAorICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyQ29udHJvbFN0YXRlLCBTY3Jv
bGxiYXJQYXJ0IHByZXNzZWRQYXJ0LCBib29sIHZlcnRpY2FsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZsb2F0IHByb3BvcnRpb24sIFNj
cm9sbGJhckNvbnRyb2xQYXJ0TWFzayk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3Rv
bVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3Rv
bU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFJlY3QmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgRE9NV2luZG93OjpkaXNwYXRj
aEFsbFBlbmRpbmdVbmxvYWQKIC8vICAgIHNjcmVlbiByZWN0LgogLy8gNSkgVHJhbnNsYXRlIHRo
ZSB3aW5kb3cgcmVjdCBjb29yZGluYXRlcyB0byBiZSB3aXRoaW4gdGhlIGNvb3JkaW5hdGUgc3Bh
Y2Ugb2YKIC8vICAgIHRoZSBzY3JlZW4gcmVjdC4KLXZvaWQgRE9NV2luZG93OjphZGp1c3RXaW5k
b3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuLCBGbG9hdFJlY3QmIHdpbmRvdywgY29uc3Qg
RmxvYXRSZWN0JiBwZW5kaW5nQ2hhbmdlcykKK3ZvaWQgRE9NV2luZG93OjphZGp1c3RXaW5kb3dS
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgc2NyZWVuLCBHcmFwaGljc1JlY3QmIHdpbmRvdywgY29u
c3QgR3JhcGhpY3NSZWN0JiBwZW5kaW5nQ2hhbmdlcykKIHsKICAgICAvLyBNYWtlIHN1cmUgd2Un
cmUgaW4gYSB2YWxpZCBzdGF0ZSBiZWZvcmUgYWRqdXN0aW5nIGRpbWVuc2lvbnMuCiAgICAgQVNT
RVJUKGlzZmluaXRlKHNjcmVlbi54KCkpKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIERPTVdp
bmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgICAgIHdpbmRvdy5zZXRIZWlnaHQo
cGVuZGluZ0NoYW5nZXMuaGVpZ2h0KCkpOwogICAgIAogICAgIC8vIFJlc2l6ZSB0aGUgd2luZG93
IHRvIGJldHdlZW4gMTAwIGFuZCB0aGUgc2NyZWVuIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgd2lu
ZG93LnNldFdpZHRoKG1pbihtYXgoMTAwLjBmLCB3aW5kb3cud2lkdGgoKSksIHNjcmVlbi53aWR0
aCgpKSk7Ci0gICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEwMC4wZiwgd2luZG93LmhlaWdo
dCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CisgICAgd2luZG93LnNldFdpZHRoKG1pbihtYXg8R3Jh
cGhpY3NVbml0PigxMDAuMGYsIHdpbmRvdy53aWR0aCgpKSwgc2NyZWVuLndpZHRoKCkpKTsKKyAg
ICB3aW5kb3cuc2V0SGVpZ2h0KG1pbihtYXg8R3JhcGhpY3NVbml0PigxMDAuMGYsIHdpbmRvdy5o
ZWlnaHQoKSksIHNjcmVlbi5oZWlnaHQoKSkpOwogICAgIAogICAgIC8vIENvbnN0cmFpbiB0aGUg
d2luZG93IHBvc2l0aW9uIHRvIHRoZSBzY3JlZW4uCiAgICAgd2luZG93LnNldFgobWF4KHNjcmVl
bi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2luZG93LndpZHRoKCkpKSk7
CkBAIC0xMzE1LDcgKzEzMTUsNyBAQCBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiBET01XaW5kb3c6
OndlYmtpCiAKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKIAotICAgIEZsb2F0UG9pbnQgcGFnZVBvaW50KHAtPngoKSwgcC0+
eSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHBhZ2VQb2ludChwLT54KCksIHAtPnkoKSk7CiAgICAg
cGFnZVBvaW50ID0gbm9kZS0+Y29udmVydFRvUGFnZShwYWdlUG9pbnQpOwogICAgIHJldHVybiBX
ZWJLaXRQb2ludDo6Y3JlYXRlKHBhZ2VQb2ludC54KCksIHBhZ2VQb2ludC55KCkpOwogfQpAQCAt
MTMyNyw3ICsxMzI3LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gRE9NV2luZG93Ojp3ZWJr
aQogCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAKLSAgICBGbG9hdFBvaW50IG5vZGVQb2ludChwLT54KCksIHAtPnkoKSk7
CisgICAgR3JhcGhpY3NQb2ludCBub2RlUG9pbnQocC0+eCgpLCBwLT55KCkpOwogICAgIG5vZGVQ
b2ludCA9IG5vZGUtPmNvbnZlcnRGcm9tUGFnZShub2RlUG9pbnQpOwogICAgIHJldHVybiBXZWJL
aXRQb2ludDo6Y3JlYXRlKG5vZGVQb2ludC54KCksIG5vZGVQb2ludC55KCkpOwogfQpAQCAtMTQw
MCw4ICsxNDAwLDggQEAgdm9pZCBET01XaW5kb3c6Om1vdmVCeShmbG9hdCB4LCBmbG9hdCB5KQog
ICAgIGlmIChtX2ZyYW1lICE9IHBhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGbG9hdFJlY3QgZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwotICAgIEZs
b2F0UmVjdCB1cGRhdGUgPSBmcjsKKyAgICBHcmFwaGljc1JlY3QgZnIgPSBwYWdlLT5jaHJvbWUo
KS0+d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCB1cGRhdGUgPSBmcjsKICAgICB1cGRh
dGUubW92ZSh4LCB5KTsKICAgICAvLyBTZWN1cml0eSBjaGVjayAodGhlIHNwZWMgdGFsa3MgYWJv
dXQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIHRvIGRpc2FibGUgdGhpcyBjaGVjay4uLikKICAgICBh
ZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKSksIGZyLCB1cGRhdGUpOwpAQCAtMTQyMCwxMCArMTQyMCwxMCBAQCB2b2lkIERPTVdpbmRv
dzo6bW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpCiAgICAgaWYgKG1fZnJhbWUgIT0gcGFnZS0+bWFp
bkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBmciA9IHBhZ2UtPmNo
cm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IHNyID0gc2NyZWVuQXZhaWxhYmxl
UmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICBHcmFwaGljc1JlY3QgZnIgPSBw
YWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBzciA9IHNjcmVl
bkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgZnIuc2V0TG9j
YXRpb24oc3IubG9jYXRpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHVwZGF0ZSA9IGZyOworICAgIEdy
YXBoaWNzUmVjdCB1cGRhdGUgPSBmcjsKICAgICB1cGRhdGUubW92ZSh4LCB5KTsgICAgIAogICAg
IC8vIFNlY3VyaXR5IGNoZWNrICh0aGUgc3BlYyB0YWxrcyBhYm91dCBVbml2ZXJzYWxCcm93c2Vy
V3JpdGUgdG8gZGlzYWJsZSB0aGlzIGNoZWNrLi4uKQogICAgIGFkanVzdFdpbmRvd1JlY3Qoc3Is
IGZyLCB1cGRhdGUpOwpAQCAtMTQ0Miw5ICsxNDQyLDkgQEAgdm9pZCBET01XaW5kb3c6OnJlc2l6
ZUJ5KGZsb2F0IHgsIGZsb2F0IAogICAgIGlmIChtX2ZyYW1lICE9IHBhZ2UtPm1haW5GcmFtZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgZnIgPSBwYWdlLT5jaHJvbWUoKS0+
d2luZG93UmVjdCgpOwotICAgIEZsb2F0U2l6ZSBkZXN0ID0gZnIuc2l6ZSgpICsgRmxvYXRTaXpl
KHgsIHkpOwotICAgIEZsb2F0UmVjdCB1cGRhdGUoZnIubG9jYXRpb24oKSwgZGVzdCk7CisgICAg
R3JhcGhpY3NSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFw
aGljc1NpemUgZGVzdCA9IGZyLnNpemUoKSArIEdyYXBoaWNzU2l6ZSh4LCB5KTsKKyAgICBHcmFw
aGljc1JlY3QgdXBkYXRlKGZyLmxvY2F0aW9uKCksIGRlc3QpOwogICAgIGFkanVzdFdpbmRvd1Jl
Y3Qoc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSwgZnIsIHVw
ZGF0ZSk7CiAgICAgcGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3QoZnIpOwogfQpAQCAtMTQ2
MSw5ICsxNDYxLDkgQEAgdm9pZCBET01XaW5kb3c6OnJlc2l6ZVRvKGZsb2F0IHdpZHRoLCBmbAog
ICAgIGlmIChtX2ZyYW1lICE9IHBhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBGbG9hdFJlY3QgZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwotICAgIEZs
b2F0U2l6ZSBkZXN0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIEZsb2F0UmVjdCB1
cGRhdGUoZnIubG9jYXRpb24oKSwgZGVzdCk7CisgICAgR3JhcGhpY3NSZWN0IGZyID0gcGFnZS0+
Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFwaGljc1NpemUgZGVzdCA9IEdyYXBoaWNz
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBHcmFwaGljc1JlY3QgdXBkYXRlKGZyLmxvY2F0aW9u
KCksIGRlc3QpOwogICAgIGFkanVzdFdpbmRvd1JlY3Qoc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpKSwgZnIsIHVwZGF0ZSk7CiAgICAgcGFnZS0+Y2hyb21lKCkt
PnNldFdpbmRvd1JlY3QoZnIpOwogfQpAQCAtMTgyNiw3ICsxODI2LDcgQEAgUGFzc1JlZlB0cjxE
T01XaW5kb3c+IERPTVdpbmRvdzo6b3BlbihjbwogICAgIH0KIAogICAgIFdpbmRvd0ZlYXR1cmVz
IHdpbmRvd0ZlYXR1cmVzKHdpbmRvd0ZlYXR1cmVzU3RyaW5nKTsKLSAgICBGbG9hdFJlY3Qgd2lu
ZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54U2V0ID8gd2luZG93RmVhdHVyZXMueCA6IDAsIHdpbmRv
d0ZlYXR1cmVzLnlTZXQgPyB3aW5kb3dGZWF0dXJlcy55IDogMCwKKyAgICBHcmFwaGljc1JlY3Qg
d2luZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54U2V0ID8gd2luZG93RmVhdHVyZXMueCA6IDAsIHdp
bmRvd0ZlYXR1cmVzLnlTZXQgPyB3aW5kb3dGZWF0dXJlcy55IDogMCwKICAgICAgICAgd2luZG93
RmVhdHVyZXMud2lkdGhTZXQgPyB3aW5kb3dGZWF0dXJlcy53aWR0aCA6IDAsIHdpbmRvd0ZlYXR1
cmVzLmhlaWdodFNldCA/IHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA6IDApOwogICAgIFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCk7CiAgICAgRE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0KHNj
cmVlbkF2YWlsYWJsZVJlY3QocGFnZSA/IHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkgOiAwKSwg
d2luZG93UmVjdCwgd2luZG93UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
RXJyb3JDYWxsYmFjazsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEZpbGVT
eXN0ZW1DYWxsYmFjazsKLSAgICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NS
ZWN0OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEhpc3Rvcnk7CiAgICAgY2xhc3MgSURC
RmFjdG9yeTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyBib29sIGRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50cygpOwogICAg
ICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHMoKTsKIAotICAg
ICAgICBzdGF0aWMgdm9pZCBhZGp1c3RXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVu
LCBGbG9hdFJlY3QmIHdpbmRvdywgY29uc3QgRmxvYXRSZWN0JiBwZW5kaW5nQ2hhbmdlcyk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGFkanVzdFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBz
Y3JlZW4sIEdyYXBoaWNzUmVjdCYgd2luZG93LCBjb25zdCBHcmFwaGljc1JlY3QmIHBlbmRpbmdD
aGFuZ2VzKTsKIAogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9u
IG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlzIGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KICAg
ICAgICAgc3RhdGljIHZvaWQgcGFyc2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYs
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1
ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVu
dEhhbmRsZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTI2Nyw3ICsyNjcsNyBAQCBzdGF0aWMgRWxlbWVu
dCogZWxlbWVudFVuZGVyTW91c2UoRG9jdW1lCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnRVbmRlck1vdXNlLT5mcmFtZSgpOwogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZSA/IGZy
YW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMTsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJ
bnRQb2ludChGbG9hdFBvaW50KHAueCgpICogem9vbUZhY3RvciwgcC55KCkgKiB6b29tRmFjdG9y
KSk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQoR3JhcGhpY3NQb2ludChw
LngoKSAqIHpvb21GYWN0b3IsIHAueSgpICogem9vbUZhY3RvcikpOwogCiAgICAgSGl0VGVzdFJl
cXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6
QWN0aXZlKTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChwb2ludCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAj
aW5jbHVkZSAiU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRv
ckluc2VydEFjdGlvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIlRleHRBZmZpbml0eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTU2LDcgKzE1Niw3IEBAIHB1Ymxp
YzoKICAgICB9OwogCiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIHZpcnR1YWwg
dm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChSZWFzb25Gb3JE
aXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlz
c0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQAogI2luY2x1
ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFdmVudFF1
ZXVlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCkBAIC02NTksNyArNjU5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBzZWxlY3Rpb25FeHRlbnRSZQogICAgICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC0+cmVuZGVy
ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAotICAgICAgICBG
bG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSB0YXJnZXROb2RlLT5yZW5kZXJlcigpLT5sb2NhbFRv
QWJzb2x1dGUoRmxvYXRQb2ludChzZWxlY3Rpb25FbmRQb2ludCkpOworICAgICAgICBHcmFwaGlj
c1BvaW50IGFic29sdXRlUG9pbnQgPSB0YXJnZXROb2RlLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJz
b2x1dGUoR3JhcGhpY3NQb2ludChzZWxlY3Rpb25FbmRQb2ludCkpOwogICAgICAgICBzZWxlY3Rp
b25FbmRQb2ludCA9IHJvdW5kZWRJbnRQb2ludChlZGl0YWJsZUVsZW1lbnQtPnJlbmRlcmVyKCkt
PmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZVBvaW50KSk7CiAgICAgICAgIHRhcmdldE5vZGUgPSBl
ZGl0YWJsZUVsZW1lbnQ7CiAgICAgfQpAQCAtMjM1Miw3ICsyMzUyLDcgQEAgdm9pZCBFdmVudEhh
bmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZQogICAgICAgICBtX2Zha2VNb3VzZU1vdmVFdmVu
dFRpbWVyLnN0YXJ0T25lU2hvdChmYWtlTW91c2VNb3ZlSW50ZXJ2YWwpOwogfQogCi12b2lkIEV2
ZW50SGFuZGxlcjo6ZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaEZha2VNb3VzZU1vdmVF
dmVudFNvb25JblF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJiBxdWFkKQogewogICAgIEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCkBAIC0yNjgyLDcgKzI2
ODIsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRICiB9CiAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotYm9vbCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJlc2lz
RXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbikgY29u
c3QKK2Jvb2wgRXZlbnRIYW5kbGVyOjpkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGZsb2F0RHJhZ1ZpZXdwb3J0TG9jYXRpb24pIGNvbnN0CiB7CiAgICAgSW50UG9p
bnQgZHJhZ1ZpZXdwb3J0TG9jYXRpb24oKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uLngo
KSwgKGludClmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uLnkoKSk7CiAgICAgcmV0dXJuIGRyYWdI
eXN0ZXJlc2lzRXhjZWVkZWQoZHJhZ1ZpZXdwb3J0TG9jYXRpb24pOwpAQCAtMjg0NSw3ICsyODQ1
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3QgTW91cwogICAgICAgICBp
ZiAoZHJhZ1N0YXRlKCkubV9kcmFnVHlwZSA9PSBEcmFnU291cmNlQWN0aW9uREhUTUwpIHsKICAg
ICAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZHJhZ1N0YXRlKCkubV9kcmFn
U3JjLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24n
dCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCi0gICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKCk7CisgICAgICAgICAgICAg
ICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKCk7CiAg
ICAgICAgICAgICAgICAgSW50U2l6ZSBkZWx0YSA9IG1fbW91c2VEb3duUG9zIC0gcm91bmRlZElu
dFBvaW50KGFic1Bvcyk7CiAgICAgICAgICAgICAgICAgZHJhZ1N0YXRlKCkubV9kcmFnQ2xpcGJv
YXJkLT5zZXREcmFnSW1hZ2VFbGVtZW50KGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYy5nZXQoKSwgdG9Q
b2ludChkZWx0YSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4IEBAIGNsYXNzIENsaXBi
b2FyZDsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRXZlbnRUYXJnZXQ7Ci1j
bGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRRdWFkOworY2xhc3MgR3JhcGhpY3NQb2ludDsK
K2NsYXNzIEdyYXBoaWNzUXVhZDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTEZyYW1lU2V0RWxl
bWVudDsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwpAQCAtMTE2LDcgKzExNiw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwogCiAgICAgdm9pZCBkaXNwYXRj
aEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKLSAgICB2b2lkIGRpc3BhdGNoRmFrZU1vdXNlTW92
ZUV2ZW50U29vbkluUXVhZChjb25zdCBGbG9hdFF1YWQmKTsKKyAgICB2b2lkIGRpc3BhdGNoRmFr
ZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChjb25zdCBHcmFwaGljc1F1YWQmKTsKIAogICAgIEhp
dFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQmLCBib29sIGFs
bG93U2hhZG93Q29udGVudCwgYm9vbCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdFNjcm9sbGJhcnMgc2Nyb2xsYmFy
cyA9IERvbnRIaXRUZXN0U2Nyb2xsYmFycywKQEAgLTI5MSw3ICsyOTEsNyBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBkaXNwYXRjaERyYWdTcmNFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKLSAgICBib29sIGRyYWdIeXN0ZXJl
c2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIGJvb2wgZHJhZ0h5c3Rl
cmVzaXNFeGNlZWRlZChjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAgICAgYm9vbCBkcmFn
SHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAjZW5kaWYgLy8gRU5B
QkxFKERSQUdfU1VQUE9SVCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5oIgogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCkBAIC01NDgsNyArNTQ4LDcgQEAgQ29sb3IgRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3Vu
ZENvbG9yKAogICAgIHJldHVybiB2aWV3KCktPmJhc2VCYWNrZ3JvdW5kQ29sb3IoKS5ibGVuZCho
dG1sQmFja2dyb3VuZENvbG9yKS5ibGVuZChib2R5QmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9p
ZCBGcmFtZTo6c2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywgY29uc3QgRmxvYXRTaXplJiBwYWdl
U2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvLCBBZGp1c3RWaWV3U2l6ZU9yTm90IHNob3Vs
ZEFkanVzdFZpZXdTaXplKQordm9pZCBGcmFtZTo6c2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywg
Y29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvLCBB
ZGp1c3RWaWV3U2l6ZU9yTm90IHNob3VsZEFkanVzdFZpZXdTaXplKQogewogICAgIC8vIEluIHNl
dHRpbmcgcHJpbnRpbmcsIHdlIHNob3VsZCBub3QgdmFsaWRhdGUgcmVzb3VyY2VzIGFscmVhZHkg
Y2FjaGVkIGZvciB0aGUgZG9jdW1lbnQuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MzcwNApAQCAtNTcxLDExICs1NzEsMTEgQEAgdm9pZCBGcmFt
ZTo6c2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywgYwogICAgICAgICBjaGlsZC0+c2V0UHJpbnRp
bmcocHJpbnRpbmcsIEludFNpemUoKSwgMCwgc2hvdWxkQWRqdXN0Vmlld1NpemUpOwogfQogCi1G
bG9hdFNpemUgRnJhbWU6OnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhjb25zdCBGbG9hdFNp
emUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBleHBlY3RlZFNpemUpCitHcmFwaGlj
c1NpemUgRnJhbWU6OnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhjb25zdCBHcmFwaGljc1Np
emUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgR3JhcGhpY3NTaXplJiBleHBlY3RlZFNpemUpCiB7Ci0g
ICAgRmxvYXRTaXplIHJlc3VsdFNpemU7CisgICAgR3JhcGhpY3NTaXplIHJlc3VsdFNpemU7CiAg
ICAgaWYgKCFjb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NTaXplKCk7CiAKICAgICBpZiAoY29udGVudFJlbmRlcmVy
KCktPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgZmxvYXQg
cmF0aW8gPSBvcmlnaW5hbFNpemUuaGVpZ2h0KCkgLyBvcmlnaW5hbFNpemUud2lkdGgoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsOCArMTQ3LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0OyAvLyBjYW4gYmUg
TlVMTAogCi0gICAgICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywgY29uc3QgRmxv
YXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvLCBBZGp1c3RWaWV3U2l6
ZU9yTm90KTsKLSAgICAgICAgRmxvYXRTaXplIHJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhj
b25zdCBGbG9hdFNpemUmIG9yaWdpbmFsU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBleHBlY3RlZFNp
emUpOworICAgICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0Vmlld1Np
emVPck5vdCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSByZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0
aW8oY29uc3QgR3JhcGhpY3NTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
ZXhwZWN0ZWRTaXplKTsKIAogICAgICAgICBib29sIGluVmlld1NvdXJjZU1vZGUoKSBjb25zdDsK
ICAgICAgICAgdm9pZCBzZXRJblZpZXdTb3VyY2VNb2RlKGJvb2wgPSB0cnVlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTI2MTAsNyAr
MjYxMCw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dChib29sIGFsbG93U3UKICAgICBs
YXlvdXQoYWxsb3dTdWJ0cmVlKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OmZvcmNlTGF5b3V0Rm9y
UGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5r
RmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90IHNob3VsZEFkanVzdFZpZXdTaXplKQordm9pZCBG
cmFtZVZpZXc6OmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbihjb25zdCBHcmFwaGljc1NpemUmIHBh
Z2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rRmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90IHNo
b3VsZEFkanVzdFZpZXdTaXplKQogewogICAgIC8vIER1bXBpbmcgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihtX2ZyYW1lLT5yZW5kZXJlcigpKS5hc2NpaSgpIGlzIGEgZ29vZCB0cmljayB0byBzZWUK
ICAgICAvLyB0aGUgc3RhdGUgb2YgdGhpbmdzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGxheW91dApA
QCAtMjY3Nyw3ICsyNjc3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXBy
ZWNhdAogCiBJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiByZW5kZXJlclJlY3QpIGNvbnN0CiB7
Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KHJlbmRlcmVyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBy
ZWN0ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KHJlbmRlcmVy
UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAKICAgICAvLyBDb252ZXJ0IGZyb20gcGFn
ZSAoImFic29sdXRlIikgdG8gRnJhbWVWaWV3IGNvb3JkaW5hdGVzLgogICAgIHJlY3QubW92ZUJ5
KC1zY3JvbGxQb3NpdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7
CiBjbGFzcyBFdmVudDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzU2l6ZTsKIGNs
YXNzIEZyYW1lOwogY2xhc3MgRnJhbWVBY3Rpb25TY2hlZHVsZXI7CiBjbGFzcyBJbnRSZWN0OwpA
QCAtMjMyLDcgKzIzMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzVmlzdWFsbHlOb25FbXB0
eSgpIHsgbV9pc1Zpc3VhbGx5Tm9uRW1wdHkgPSB0cnVlOyB9CiAKICAgICB2b2lkIGZvcmNlTGF5
b3V0KGJvb2wgYWxsb3dTdWJ0cmVlID0gZmFsc2UpOwotICAgIHZvaWQgZm9yY2VMYXlvdXRGb3JQ
YWdpbmF0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtG
YWN0b3IsIEFkanVzdFZpZXdTaXplT3JOb3QpOworICAgIHZvaWQgZm9yY2VMYXlvdXRGb3JQYWdp
bmF0aW9uKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtG
YWN0b3IsIEFkanVzdFZpZXdTaXplT3JOb3QpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9k
IGlzIHJldGFpbmVkIGJlY2F1c2Ugb2YgZW1iZWRkZWQgV2ViVmlld3MgaW4gQXBwS2l0LiAgV2hl
biBhIFdlYlZpZXcgaXMgZW1iZWRkZWQgaW5zaWRlCiAgICAgLy8gc29tZSBlbmNsb3Npbmcgdmll
dyB3aXRoIGF1dG8tcGFnaW5hdGlvbiwgbm8gY2FsbCBoYXBwZW5zIHRvIHJlc2l6ZSB0aGUgdmll
dy4gIFRoZSBuZXcgcGFnaW5hdGlvbiBtb2RlbApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
cmludENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRD
b250ZXh0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgUHJpbnRDb250ZXh0
Ojp+UHJpbnRDb250ZXh0KCkKICAgICAgICAgZW5kKCk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0
Ojpjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFk
ZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9h
dCYgb3V0UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpCit2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIHByaW50UmVjdCwg
ZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZh
Y3RvciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKQog
ewogICAgIG1fcGFnZVJlY3RzLmNsZWFyKCk7CiAgICAgb3V0UGFnZUhlaWdodCA9IDA7CkBAIC03
MCw3ICs3MCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKGNvbnMKIAog
ICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobV9mcmFtZS0+ZG9jdW1lbnQoKS0+
cmVuZGVyZXIoKSk7CiAgICAgY29uc3QgSW50UmVjdCYgZG9jdW1lbnRSZWN0ID0gdmlldy0+ZG9j
dW1lbnRSZWN0KCk7Ci0gICAgRmxvYXRTaXplIHBhZ2VTaXplID0gbV9mcmFtZS0+cmVzaXplUGFn
ZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0U2l6ZShwcmludFJlY3Qud2lkdGgoKSwgcHJpbnRSZWN0
LmhlaWdodCgpKSwgRmxvYXRTaXplKGRvY3VtZW50UmVjdC53aWR0aCgpLCBkb2N1bWVudFJlY3Qu
aGVpZ2h0KCkpKTsKKyAgICBHcmFwaGljc1NpemUgcGFnZVNpemUgPSBtX2ZyYW1lLT5yZXNpemVQ
YWdlUmVjdHNLZWVwaW5nUmF0aW8oR3JhcGhpY3NTaXplKHByaW50UmVjdC53aWR0aCgpLCBwcmlu
dFJlY3QuaGVpZ2h0KCkpLCBHcmFwaGljc1NpemUoZG9jdW1lbnRSZWN0LndpZHRoKCksIGRvY3Vt
ZW50UmVjdC5oZWlnaHQoKSkpOwogICAgIGZsb2F0IHBhZ2VXaWR0aCA9IHBhZ2VTaXplLndpZHRo
KCk7CiAgICAgZmxvYXQgcGFnZUhlaWdodCA9IHBhZ2VTaXplLmhlaWdodCgpOwogCkBAIC04Miwx
NiArODIsMTYgQEAgdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMoY29ucwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUlu
dGVybmFsKEZsb2F0U2l6ZShwYWdlV2lkdGggLyB1c2VyU2NhbGVGYWN0b3IsIHBhZ2VIZWlnaHQg
LyB1c2VyU2NhbGVGYWN0b3IpLCBhbGxvd0hvcml6b250YWxUaWxpbmcpOworICAgIGNvbXB1dGVQ
YWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChHcmFwaGljc1NpemUocGFnZVdpZHRoIC8gdXNl
clNjYWxlRmFjdG9yLCBwYWdlSGVpZ2h0IC8gdXNlclNjYWxlRmFjdG9yKSwgYWxsb3dIb3Jpem9u
dGFsVGlsaW5nKTsKIH0KIAotdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRo
UGFnZVNpemUoY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzLCBib29sIGFsbG93SG9y
aXpvbnRhbFRpbGluZykKK3ZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzV2l0aFBh
Z2VTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxvd0hv
cml6b250YWxUaWxpbmcpCiB7CiAgICAgbV9wYWdlUmVjdHMuY2xlYXIoKTsKICAgICBjb21wdXRl
UGFnZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWwocGFnZVNpemVJblBpeGVscywgYWxsb3dIb3Jp
em9udGFsVGlsaW5nKTsKIH0KIAotdm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNX
aXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJv
b2wgYWxsb3dJbmxpbmVEaXJlY3Rpb25UaWxpbmcpCit2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0
ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNp
emVJblBpeGVscywgYm9vbCBhbGxvd0lubGluZURpcmVjdGlvblRpbGluZykKIHsKICAgICBpZiAo
IW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgIW1fZnJhbWUtPnZpZXcoKSB8fCAhbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY1LDEzICsxNjUsMTMg
QEAgdm9pZCBQcmludENvbnRleHQ6OmJlZ2luKGZsb2F0IHdpZHRoLCBmbAogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGp1c3QgcHJpbnRpbmcg
cGFyYW1ldGVycyB3aXRob3V0IGdvaW5nIGJhY2sgdG8gc2NyZWVuIG1vZGUuCiAgICAgbV9pc1By
aW50aW5nID0gdHJ1ZTsKIAotICAgIEZsb2F0U2l6ZSBtaW5MYXlvdXRTaXplID0gbV9mcmFtZS0+
cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgRmxv
YXRTaXplKHdpZHRoICogcHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBoZWlnaHQgKiBwcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKKyAgICBHcmFwaGljc1NpemUgbWluTGF5b3V0U2l6
ZSA9IG1fZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhHcmFwaGljc1NpemUod2lk
dGgsIGhlaWdodCksIEdyYXBoaWNzU2l6ZSh3aWR0aCAqIHByaW50aW5nTWluaW11bVNocmlua0Zh
Y3RvciwgaGVpZ2h0ICogcHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CiAKICAgICAvLyBU
aGlzIGNoYW5nZXMgbGF5b3V0LCBzbyBjYWxsZXJzIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhl
eSBkb24ndCBwYWludCB0byBzY3JlZW4gd2hpbGUgaW4gcHJpbnRpbmcgbW9kZS4KICAgICBtX2Zy
YW1lLT5zZXRQcmludGluZyh0cnVlLCBtaW5MYXlvdXRTaXplLCBwcmludGluZ01heGltdW1TaHJp
bmtGYWN0b3IgLyBwcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIEFkanVzdFZpZXdTaXplKTsK
IH0KIAotZmxvYXQgUHJpbnRDb250ZXh0Ojpjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29u
c3QgRmxvYXRTaXplJiBhdmFpbGFibGVQYXBlclNpemUpCitmbG9hdCBQcmludENvbnRleHQ6OmNv
bXB1dGVBdXRvbWF0aWNTY2FsZUZhY3Rvcihjb25zdCBHcmFwaGljc1NpemUmIGF2YWlsYWJsZVBh
cGVyU2l6ZSkKIHsKICAgICBpZiAoIW1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuIDE7
CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBQcmludENvbnRleHQ6OnNwb29sUGFnZShHcmFwaGlj
c0NvbgogICAgIGZsb2F0IHNjYWxlID0gd2lkdGggLyBwYWdlUmVjdC53aWR0aCgpOwogCiAgICAg
Y3R4LnNhdmUoKTsKLSAgICBjdHguc2NhbGUoRmxvYXRTaXplKHNjYWxlLCBzY2FsZSkpOworICAg
IGN0eC5zY2FsZShHcmFwaGljc1NpemUoc2NhbGUsIHNjYWxlKSk7CiAgICAgY3R4LnRyYW5zbGF0
ZSgtcGFnZVJlY3QueCgpLCAtcGFnZVJlY3QueSgpKTsKICAgICBjdHguY2xpcChwYWdlUmVjdCk7
CiAgICAgbV9mcmFtZS0+dmlldygpLT5wYWludENvbnRlbnRzKCZjdHgsIHBhZ2VSZWN0KTsKQEAg
LTIxNyw3ICsyMTcsNyBAQCB2b2lkIFByaW50Q29udGV4dDo6ZW5kKCkKIHsKICAgICBBU1NFUlQo
bV9pc1ByaW50aW5nKTsKICAgICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKLSAgICBtX2ZyYW1lLT5z
ZXRQcmludGluZyhmYWxzZSwgRmxvYXRTaXplKCksIDAsIEFkanVzdFZpZXdTaXplKTsKKyAgICBt
X2ZyYW1lLT5zZXRQcmludGluZyhmYWxzZSwgR3JhcGhpY3NTaXplKCksIDAsIEFkanVzdFZpZXdT
aXplKTsKIH0KIAogc3RhdGljIFJlbmRlckJveE1vZGVsT2JqZWN0KiBlbmNsb3NpbmdCb3hNb2Rl
bE9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCkKQEAgLTIzMCw3ICsyMzAsNyBAQCBzdGF0aWMg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGVuY2xvc2luZ0JvCiAgICAgcmV0dXJuIHRvUmVuZGVyQm94
TW9kZWxPYmplY3Qob2JqZWN0KTsKIH0KIAotaW50IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZv
ckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4
ZWxzKQoraW50IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQogewogICAgIC8vIE1h
a2Ugc3VyZSB0aGUgZWxlbWVudCBpcyBub3QgZnJlZWQgZHVyaW5nIHRoZSBsYXlvdXQuCiAgICAg
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnRSZWYoZWxlbWVudCk7CkBAIC0yNDEsMTAgKzI0MSwxMCBA
QCBpbnQgUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChFCiAgICAgICAgIHJldHVy
biAtMTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCk7
Ci0gICAgRmxvYXRSZWN0IHBhZ2VSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHBhZ2VTaXplSW5QaXhl
bHMpOworICAgIEdyYXBoaWNzUmVjdCBwYWdlUmVjdChHcmFwaGljc1BvaW50KDAsIDApLCBwYWdl
U2l6ZUluUGl4ZWxzKTsKICAgICBQcmludENvbnRleHQgcHJpbnRDb250ZXh0KGZyYW1lKTsKICAg
ICBwcmludENvbnRleHQuYmVnaW4ocGFnZVJlY3Qud2lkdGgoKSwgcGFnZVJlY3QuaGVpZ2h0KCkp
OwotICAgIEZsb2F0U2l6ZSBzY2FsZWRQYWdlU2l6ZSA9IHBhZ2VTaXplSW5QaXhlbHM7CisgICAg
R3JhcGhpY3NTaXplIHNjYWxlZFBhZ2VTaXplID0gcGFnZVNpemVJblBpeGVsczsKICAgICBzY2Fs
ZWRQYWdlU2l6ZS5zY2FsZShmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC8g
cGFnZVJlY3Qud2lkdGgoKSk7CiAgICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHNXaXRo
UGFnZVNpemUoc2NhbGVkUGFnZVNpemUsIGZhbHNlKTsKIApAQCAtMjk5LDIxICsyOTksMjEgQEAg
U3RyaW5nIFByaW50Q29udGV4dDo6cGFnZVNpemVBbmRNYXJnaW5zSQogICAgICAgICAgICBTdHJp
bmc6Om51bWJlcihtYXJnaW5Ub3ApICsgJyAnICsgU3RyaW5nOjpudW1iZXIobWFyZ2luUmlnaHQp
ICsgJyAnICsgU3RyaW5nOjpudW1iZXIobWFyZ2luQm90dG9tKSArICcgJyArIFN0cmluZzo6bnVt
YmVyKG1hcmdpbkxlZnQpOwogfQogCi1pbnQgUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKEZy
YW1lKiBmcmFtZSwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQoraW50IFByaW50
Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhGcmFtZSogZnJhbWUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
cGFnZVNpemVJblBpeGVscykKIHsKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7CiAKLSAgICBGbG9hdFJlY3QgcGFnZVJlY3QoRmxvYXRQb2ludCgwLCAwKSwgcGFnZVNpemVJ
blBpeGVscyk7CisgICAgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KEdyYXBoaWNzUG9pbnQoMCwgMCks
IHBhZ2VTaXplSW5QaXhlbHMpOwogICAgIFByaW50Q29udGV4dCBwcmludENvbnRleHQoZnJhbWUp
OwogICAgIHByaW50Q29udGV4dC5iZWdpbihwYWdlUmVjdC53aWR0aCgpLCBwYWdlUmVjdC5oZWln
aHQoKSk7CiAgICAgLy8gQWNjb3VudCBmb3Igc2hyaW5rLXRvLWZpdC4KLSAgICBGbG9hdFNpemUg
c2NhbGVkUGFnZVNpemUgPSBwYWdlU2l6ZUluUGl4ZWxzOworICAgIEdyYXBoaWNzU2l6ZSBzY2Fs
ZWRQYWdlU2l6ZSA9IHBhZ2VTaXplSW5QaXhlbHM7CiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUo
ZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkp
OwogICAgIHByaW50Q29udGV4dC5jb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBh
Z2VTaXplLCBmYWxzZSk7CiAgICAgcmV0dXJuIHByaW50Q29udGV4dC5wYWdlQ291bnQoKTsKIH0K
IAotdm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyhGcmFtZSog
ZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUm
IHBhZ2VTaXplSW5QaXhlbHMpCit2b2lkIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhC
b3VuZGFyaWVzKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemVJblBpeGVscykKIHsKICAgICBpZiAoIWZyYW1l
LT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgUHJpbnRD
b250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KICAgICBwcmludENvbnRleHQuYmVnaW4ocGFn
ZVNpemVJblBpeGVscy53aWR0aCgpLCBwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpKTsKIAogICAg
IGZsb2F0IHBhZ2VIZWlnaHQ7Ci0gICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHBhZ2VTaXplSW5QaXhlbHMpLCAwLCAwLCAxLCBwYWdl
SGVpZ2h0KTsKKyAgICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0cyhHcmFwaGljc1JlY3Qo
R3JhcGhpY3NQb2ludCgwLCAwKSwgcGFnZVNpemVJblBpeGVscyksIDAsIDAsIDEsIHBhZ2VIZWln
aHQpOwogCiAgICAgY29uc3QgZmxvYXQgcGFnZVdpZHRoID0gcGFnZVNpemVJblBpeGVscy53aWR0
aCgpOwogICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFnZVJlY3RzID0gcHJpbnRDb250ZXh0
LnBhZ2VSZWN0cygpOwpAQCAtMzMyLDExICszMzIsMTEgQEAgdm9pZCBQcmludENvbnRleHQ6OnNw
b29sQWxsUGFnZXNXaXRoQm91bgogCiAgICAgLy8gRmlsbCB0aGUgd2hvbGUgYmFja2dyb3VuZCBi
eSB3aGl0ZS4KICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1
LCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBncmFwaGljc0NvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKKyAgICBncmFwaGlj
c0NvbnRleHQuZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWln
aHQpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0
LnRyYW5zbGF0ZSgwLCB0b3RhbEhlaWdodCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zY2FsZShHcmFwaGljc1NpemUo
MSwgLTEpKTsKIAogICAgIGludCBjdXJyZW50SGVpZ2h0ID0gMDsKICAgICBmb3IgKHNpemVfdCBw
YWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCBwYWdlUmVjdHMuc2l6ZSgpOyBwYWdlSW5kZXgrKykg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OwogY2xhc3Mg
RnJhbWU7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFz
cyBJbnRSZWN0OwogCkBAIC00MywxOCArNDMsMTggQEAgcHVibGljOgogICAgIC8vIEJyZWFrIHVw
IGEgcGFnZSBpbnRvIHJlY3RzIHdpdGhvdXQgcmVsYXlvdXQuCiAgICAgLy8gRklYTUU6IFRoaXMg
bWVhbnMgdGhhdCBDU1MgcGFnZSBicmVha3Mgd29uJ3QgYmUgb24gcGFnZSBib3VuZGFyeSBpZiB0
aGUgc2l6ZSBpcyBkaWZmZXJlbnQgdGhhbiB3aGF0IHdhcyBwYXNzZWQgdG8gYmVnaW4oKS4gVGhh
dCdzIHByb2JhYmx5IG5vdCBhbHdheXMgZGVzaXJhYmxlLgogICAgIC8vIEZJWE1FOiBIZWFkZXIg
YW5kIGZvb3RlciBoZWlnaHQgc2hvdWxkIGJlIGFwcGxpZWQgYmVmb3JlIGxheW91dCwgbm90IGFm
dGVyLgotICAgIC8vIEZJWE1FOiBUaGUgcHJpbnRSZWN0IGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB0
byBkZXRlcm1pbmUgcGFnZSBhc3BlY3QgcmF0aW8sIGl0IHdvdWxkIGJlIGJldHRlciB0byBwYXNz
IGEgRmxvYXRTaXplIHdpdGggcGFnZSBkaW1lbnNpb25zIGluc3RlYWQuCi0gICAgdm9pZCBjb21w
dXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWln
aHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0
UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcgPSBmYWxzZSk7CisgICAgLy8g
RklYTUU6IFRoZSBwcmludFJlY3QgYXJndW1lbnQgaXMgb25seSB1c2VkIHRvIGRldGVybWluZSBw
YWdlIGFzcGVjdCByYXRpbywgaXQgd291bGQgYmUgYmV0dGVyIHRvIHBhc3MgYSBHcmFwaGljc1Np
emUgd2l0aCBwYWdlIGRpbWVuc2lvbnMgaW5zdGVhZC4KKyAgICB2b2lkIGNvbXB1dGVQYWdlUmVj
dHMoY29uc3QgR3JhcGhpY3NSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxv
YXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVp
Z2h0LCBib29sIGFsbG93SG9yaXpvbnRhbFRpbGluZyA9IGZhbHNlKTsKIAogICAgIC8vIERlcHJl
Y2F0ZWQuIFBhZ2Ugc2l6ZSBjb21wdXRhdGlvbiBpcyBhbHJlYWR5IGluIHRoaXMgY2xhc3MsIGNs
aWVudHMgc2hvdWxkbid0IGJlIGNvcHlpbmcgaXQuCi0gICAgdm9pZCBjb21wdXRlUGFnZVJlY3Rz
V2l0aFBhZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscywgYm9vbCBhbGxv
d0hvcml6b250YWxUaWxpbmcpOworICAgIHZvaWQgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6
ZShjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9u
dGFsVGlsaW5nKTsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGFmdGVyIHBhZ2UgcmVj
dHMgYXJlIGNvbXB1dGVkLgogICAgIHNpemVfdCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2VSZWN0cy5zaXplKCk7IH0KICAgICBjb25zdCBJbnRSZWN0JiBwYWdlUmVjdChzaXplX3Qg
cGFnZU51bWJlcikgY29uc3QgeyByZXR1cm4gbV9wYWdlUmVjdHNbcGFnZU51bWJlcl07IH0KICAg
ICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhZ2VSZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFn
ZVJlY3RzOyB9CiAKLSAgICBmbG9hdCBjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3Qg
RmxvYXRTaXplJiBhdmFpbGFibGVQYXBlclNpemUpOworICAgIGZsb2F0IGNvbXB1dGVBdXRvbWF0
aWNTY2FsZUZhY3Rvcihjb25zdCBHcmFwaGljc1NpemUmIGF2YWlsYWJsZVBhcGVyU2l6ZSk7CiAK
ICAgICAvLyBFbnRlciBwcmludCBtb2RlLCB1cGRhdGluZyBsYXlvdXQgZm9yIG5ldyBwYWdlIHNp
emUuCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRv
IGFwcGx5IG5ldyBwcmludCBvcHRpb25zIHdpdGhvdXQgZ29pbmcgYmFjayB0byBzY3JlZW4gbW9k
ZS4KQEAgLTY5LDIyICs2OSwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmQoKTsKIAogICAgIC8v
IFVzZWQgYnkgbGF5b3V0IHRlc3RzLgotICAgIHN0YXRpYyBpbnQgcGFnZU51bWJlckZvckVsZW1l
bnQoRWxlbWVudCosIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscyk7IC8vIFJldHVy
bnMgLTEgaWYgcGFnZSBpc24ndCBmb3VuZC4KKyAgICBzdGF0aWMgaW50IHBhZ2VOdW1iZXJGb3JF
bGVtZW50KEVsZW1lbnQqLCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMpOyAv
LyBSZXR1cm5zIC0xIGlmIHBhZ2UgaXNuJ3QgZm91bmQuCiAgICAgc3RhdGljIFN0cmluZyBwYWdl
UHJvcGVydHkoRnJhbWUqIGZyYW1lLCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdl
TnVtYmVyKTsKICAgICBzdGF0aWMgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKEZyYW1lKiBmcmFtZSwg
aW50IHBhZ2VOdW1iZXIpOwogICAgIHN0YXRpYyBTdHJpbmcgcGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMoRnJhbWUqIGZyYW1lLCBpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBt
YXJnaW5MZWZ0KTsKLSAgICBzdGF0aWMgaW50IG51bWJlck9mUGFnZXMoRnJhbWUqLCBjb25zdCBG
bG9hdFNpemUmIHBhZ2VTaXplSW5QaXhlbHMpOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZQYWdl
cyhGcmFtZSosIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemVJblBpeGVscyk7CiAgICAgLy8g
RHJhdyBhbGwgcGFnZXMgaW50byBhIGdyYXBoaWNzIGNvbnRleHQgd2l0aCBsaW5lcyB3aGljaCBt
ZWFuIHBhZ2UgYm91bmRhcmllcy4KICAgICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBncmFwaGljcyBj
b250ZXh0IHNob3VsZCBiZQogICAgIC8vIChwYWdlU2l6ZUluUGl4ZWxzLmhlaWdodCgpICsgMSkg
KiBudW1iZXItb2YtcGFnZXMgLSAxCi0gICAgc3RhdGljIHZvaWQgc3Bvb2xBbGxQYWdlc1dpdGhC
b3VuZGFyaWVzKEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRTaXplJiBwYWdl
U2l6ZUluUGl4ZWxzKTsKKyAgICBzdGF0aWMgdm9pZCBzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJp
ZXMoRnJhbWUqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXpl
SW5QaXhlbHMpOwogCiBwcm90ZWN0ZWQ6CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgVmVjdG9y
PEludFJlY3Q+IG1fcGFnZVJlY3RzOwogCiBwcml2YXRlOgotICAgIHZvaWQgY29tcHV0ZVBhZ2VS
ZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVs
cywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpOworICAgIHZvaWQgY29tcHV0ZVBhZ2VSZWN0
c1dpdGhQYWdlU2l6ZUludGVybmFsKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemVJblBpeGVs
cywgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpOwogCiAgICAgLy8gVXNlZCB0byBwcmV2ZW50
IG1pc3VzZXMgb2YgYmVnaW4oKSBhbmQgZW5kKCkgKGUuZy4sIGNhbGwgZW5kIHdpdGhvdXQgYmVn
aW4pLgogICAgIGJvb2wgbV9pc1ByaW50aW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9T
Y3JlZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTY3JlZW4uaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93
RmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVh
dHVyZXMuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93
RmVhdHVyZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgV2luZG93RmVhdHVyZXM6OnNldFdpbmRv
d0ZlYXR1cmUoY28KICAgICAgICAgYWRkaXRpb25hbEZlYXR1cmVzLmFwcGVuZChrZXlTdHJpbmcp
OwogfQogCi1XaW5kb3dGZWF0dXJlczo6V2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBkaWFs
b2dGZWF0dXJlc1N0cmluZywgY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5BdmFpbGFibGVSZWN0KQor
V2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVy
ZXNTdHJpbmcsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCkKICAgICA6
IHdpZHRoU2V0KHRydWUpCiAgICAgLCBoZWlnaHRTZXQodHJ1ZSkKICAgICAsIG1lbnVCYXJWaXNp
YmxlKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKIAogICAgIHN0cnVjdCBX
aW5kb3dGZWF0dXJlcyB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGVsZXRlIHRoaXMgY29u
c3RydWN0b3Igb25jZSBWOCBzaG93TW9kYWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9NV2lu
ZG93LgpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAog
ICAgICAgICBXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIHdpbmRvd0ZlYXR1cmVzU3RyaW5n
KTsKLSAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlc1N0
cmluZywgY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5BdmFpbGFibGVSZWN0KTsKKyAgICAgICAgV2lu
ZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBkaWFsb2dGZWF0dXJlc1N0cmluZywgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzY3JlZW5BdmFpbGFibGVSZWN0KTsKIAogICAgICAgICBmbG9hdCB4OwogICAg
ICAgICBib29sIHhTZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50
SGFuZGxlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2No
cm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5o
IgogI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFtZUNocm9taXVtLmNwcAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0ZyYW1lQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC04Niw3ICs4Niw3IEBA
IERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUKICAgICBpZiAoIWJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgYnVmZmVyLT5jb250ZXh0KCktPnRyYW5zbGF0ZSgt
cGFpbnRpbmdSZWN0LngoKSwgLXBhaW50aW5nUmVjdC55KCkpOwotICAgIGJ1ZmZlci0+Y29udGV4
dCgpLT5jbGlwKEZsb2F0UmVjdCgwLCAwLCBwYWludGluZ1JlY3QubWF4WCgpLCBwYWludGluZ1Jl
Y3QubWF4WSgpKSk7CisgICAgYnVmZmVyLT5jb250ZXh0KCktPmNsaXAoR3JhcGhpY3NSZWN0KDAs
IDAsIHBhaW50aW5nUmVjdC5tYXhYKCksIHBhaW50aW5nUmVjdC5tYXhZKCkpKTsKIAogICAgIG1f
dmlldy0+cGFpbnRDb250ZW50cyhidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0KTsKIApA
QCAtMTA5LDcgKzEwOSw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0
aW8KICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgYnVmZmVyLT5jb250
ZXh0KCktPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0LngoKSwgLXBhaW50aW5nUmVjdC55KCkpOwot
ICAgIGJ1ZmZlci0+Y29udGV4dCgpLT5jbGlwKEZsb2F0UmVjdCgwLCAwLCBwYWludGluZ1JlY3Qu
bWF4WCgpLCBwYWludGluZ1JlY3QubWF4WSgpKSk7CisgICAgYnVmZmVyLT5jb250ZXh0KCktPmNs
aXAoR3JhcGhpY3NSZWN0KDAsIDAsIHBhaW50aW5nUmVjdC5tYXhYKCksIHBhaW50aW5nUmVjdC5t
YXhZKCkpKTsKIAogICAgIG1fdmlldy0+cGFpbnRDb250ZW50cyhidWZmZXItPmNvbnRleHQoKSwg
cGFpbnRpbmdSZWN0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRXZlbnRIYW5k
bGVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9FdmVudEhh
bmRsZXJFZmwuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZs
L0V2ZW50SGFuZGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAog
I2luY2x1ZGUgIkNsaXBib2FyZEVmbC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFuZGxlckd0ay5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5k
bGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkV2
ZW50SGFuZGxlci5oIgogCiAjaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0Nv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1Myw3IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW8KIAogICAg
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGJ1ZmZlci0+Y29udGV4dCgpOwogICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZSgtcGFpbnRpbmdSZWN0LngoKSwgLXBhaW50aW5nUmVjdC55KCkpOwotICAg
IGNvbnRleHQtPmNsaXAoRmxvYXRSZWN0KDAsIDAsIHBhaW50aW5nUmVjdC5tYXhYKCksIHBhaW50
aW5nUmVjdC5tYXhZKCkpKTsKKyAgICBjb250ZXh0LT5jbGlwKEdyYXBoaWNzUmVjdCgwLCAwLCBw
YWludGluZ1JlY3QubWF4WCgpLCBwYWludGluZ1JlY3QubWF4WSgpKSk7CiAKICAgICBQYWludEJl
aGF2aW9yIHByZXZpb3VzUGFpbnRCZWhhdmlvciA9IG1fdmlldy0+cGFpbnRCZWhhdmlvcigpOwog
ICAgIG1fdmlldy0+c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yU2VsZWN0aW9uT25seSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRsZXJXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVyV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgogCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcg
KzgzLDcgQEAgSEJJVE1BUCBpbWFnZUZyb21TZWxlY3Rpb24oRnJhbWUqIGZyYW1lLAogICAgIGZy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgIGZyYW1lLT52aWV3KCktPnNl
dFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHkgfCAoZm9yY2VCbGFja1Rl
eHQgPyBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQgOiAwKSk7Ci0gICAgRmxvYXRSZWN0IGZy
ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5ib3VuZHMoKTsKKyAgICBHcmFwaGljc1JlY3QgZnIgPSBm
cmFtZS0+c2VsZWN0aW9uKCktPmJvdW5kcygpOwogICAgIEludFJlY3QgaXIoc3RhdGljX2Nhc3Q8
aW50Pihmci54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGZyLnkoKSksCiAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KGZyLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGZyLmhlaWdodCgp
KSk7CiAgICAgSEJJVE1BUCBpbWFnZSA9IGltYWdlRnJvbVJlY3QoZnJhbWUsIGlyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW5jZS9GcmFtZVdpbkNFLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbmNlL0ZyYW1lV2luQ0UuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luY2UvRnJhbWVXaW5D
RS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgpAQCAtMTA5
LDcgKzEwOSw3IEBAIEhCSVRNQVAgaW1hZ2VGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBmcmFtZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKFBh
aW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8gUGFpbnRCZWhhdmlv
ckZvcmNlQmxhY2tUZXh0IDogMCkpOwotICAgIEZsb2F0UmVjdCBmciA9IGZyYW1lLT5zZWxlY3Rp
b24oKS0+Ym91bmRzKCk7CisgICAgR3JhcGhpY3NSZWN0IGZyID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5ib3VuZHMoKTsKICAgICBJbnRSZWN0IGlyKChpbnQpZnIueCgpLCAoaW50KWZyLnkoKSwgKGlu
dClmci53aWR0aCgpLCAoaW50KWZyLmhlaWdodCgpKTsKICAgICBpZiAoaXIuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIERyYWdJbWFnZVJlZiBmaXREcmFn
SW1hZ2VUb01heFNpemUoRHJhZ0kKICAgICB9CiAgICAgCiAgICAgaWYgKHNyY1NpemUgPT0gb3Jp
Z2luYWxTaXplKQotICAgICAgICByZXR1cm4gcmVzaXplUmF0aW8gPiAwLjBmID8gc2NhbGVEcmFn
SW1hZ2UoaW1hZ2UsIEZsb2F0U2l6ZShyZXNpemVSYXRpbywgcmVzaXplUmF0aW8pKSA6IGltYWdl
OworICAgICAgICByZXR1cm4gcmVzaXplUmF0aW8gPiAwLjBmID8gc2NhbGVEcmFnSW1hZ2UoaW1h
Z2UsIEdyYXBoaWNzU2l6ZShyZXNpemVSYXRpbywgcmVzaXplUmF0aW8pKSA6IGltYWdlOwogICAg
IAogICAgIC8vIFRoZSBpbWFnZSB3YXMgc2NhbGVkIGluIHRoZSB3ZWJwYWdlIHNvIGF0IG1pbmlt
dW0gd2UgbXVzdCBhY2NvdW50IGZvciB0aGF0IHNjYWxpbmcKICAgICBmbG9hdCBzY2FsZXggPSBz
cmNTaXplLndpZHRoKCkgLyAoZmxvYXQpb3JpZ2luYWxTaXplLndpZHRoKCk7CkBAIC02Miw3ICs2
Miw3IEBAIERyYWdJbWFnZVJlZiBmaXREcmFnSW1hZ2VUb01heFNpemUoRHJhZ0kKICAgICAgICAg
c2NhbGV5ICo9IHJlc2l6ZVJhdGlvOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gc2NhbGVEcmFn
SW1hZ2UoaW1hZ2UsIEZsb2F0U2l6ZShzY2FsZXgsIHNjYWxleSkpOworICAgIHJldHVybiBzY2Fs
ZURyYWdJbWFnZShpbWFnZSwgR3JhcGhpY3NTaXplKHNjYWxleCwgc2NhbGV5KSk7CiB9CiAgICAg
CiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjZGVmaW5lIERyYWdJbWFnZV9oCiAKICNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTkwLDcgKzkwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vdGhleSBzaG91bGQgcmVsZWFzZSB0aGUgaW5w
dXQgaW1hZ2UuICBBcyBhIGNvcm9sbGFyeSB0aGVzZSBtZXRob2RzIGRvbid0IGd1YXJhbnRlZQog
ICAgIC8vdGhlIGlucHV0IGltYWdlIHJlZiB3aWxsIHN0aWxsIGJlIHZhbGlkIGFmdGVyIHRoZXkg
aGF2ZSBiZWVuIGNhbGxlZAogICAgIERyYWdJbWFnZVJlZiBmaXREcmFnSW1hZ2VUb01heFNpemUo
RHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRTaXpl
JiBzaXplKTsKLSAgICBEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBG
bG9hdFNpemUgc2NhbGUpOworICAgIERyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1h
Z2VSZWYsIEdyYXBoaWNzU2l6ZSBzY2FsZSk7CiAgICAgRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJh
Z0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0IGRlbHRhKTsKICAgICAK
ICAgICBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBQbGF0Zm9ybVNjcmVlbl9oCiAjZGVmaW5l
IFBsYXRmb3JtU2NyZWVuX2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCkBAIC00MiwyMSArNDIsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBX
aWRnZXQ7CiAKICAgICBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7CiAgICAgaW50IHNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCopOwogICAgIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdp
ZGdldCopOwogCi0gICAgRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAgRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CisgICAgR3JhcGhpY3NSZWN0IHNjcmVl
blJlY3QoV2lkZ2V0Kik7CisgICAgR3JhcGhpY3NSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lk
Z2V0Kik7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNTY3JlZW4gKnNjcmVlbkZvcldpbmRv
dyhOU1dpbmRvdyAqKTsKIAotICAgIEZsb2F0UmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3Qm
LCBOU1dpbmRvdyAqZGVzdGluYXRpb24pOwotICAgIE5TUmVjdCB0b0RldmljZVNwYWNlKGNvbnN0
IEZsb2F0UmVjdCYsIE5TV2luZG93ICpzb3VyY2UpOworICAgIEdyYXBoaWNzUmVjdCB0b1VzZXJT
cGFjZShjb25zdCBOU1JlY3QmLCBOU1dpbmRvdyAqZGVzdGluYXRpb24pOworICAgIE5TUmVjdCB0
b0RldmljZVNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYsIE5TV2luZG93ICpzb3VyY2UpOwogCiAg
ICAgTlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29uc3QgTlNQb2ludCYsIE5TU2NyZWVuICopOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZl
bnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCBjbGFzcyBCTWVz
c2FnZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRmxvYXRQb2ludDsKLSAg
ICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2ludDsKKyAgICBjbGFzcyBH
cmFwaGljc1NpemU7CiAKICAgICAvLyBXaGVlbCBldmVudHMgY29tZSBpbiB0d28gZmxhdm9yczoK
ICAgICAvLyBUaGUgU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQgaXMgYSBmaW5lLWdyYWluZWQgZXZl
bnQgdGhhdCBzcGVjaWZpZXMgdGhlIHByZWNpc2UgbnVtYmVyIG9mIHBpeGVscyB0byBzY3JvbGwu
ICBJdCBpcyBzZW50IGRpcmVjdGx5IGJ5IE1hY0Jvb2sgdG91Y2hwYWRzIG9uIE9TIFgsCkBAIC0x
ODksNyArMTg5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oV0lOKQog
ICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNN
b3VzZUhXaGVlbCk7Ci0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChIV05ELCBjb25zdCBGbG9h
dFNpemUmIGRlbHRhLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbik7CisgICAgICAgIFBsYXRm
b3JtV2hlZWxFdmVudChIV05ELCBjb25zdCBHcmFwaGljc1NpemUmIGRlbHRhLCBjb25zdCBHcmFw
aGljc1BvaW50JiBsb2NhdGlvbik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdYKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNs
dWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTcyLDcgKzcy
LDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaQogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQordm9pZCBTY3JvbGxBbmltYXRvcjo6
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNl
dCkKIHsKICAgICBpZiAobV9jdXJyZW50UG9zWCAhPSBvZmZzZXQueCgpIHx8IG1fY3VycmVudFBv
c1kgIT0gb2Zmc2V0LnkoKSkgewogICAgICAgICBtX2N1cnJlbnRQb3NYID0gb2Zmc2V0LngoKTsK
QEAgLTExOSw5ICsxMTksOSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVHZXN0dXJlRXZl
bnQoCiB9CiAjZW5kaWYKIAotRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvcjo6Y3VycmVudFBvc2l0
aW9uKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGlv
bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJy
ZW50UG9zWSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJy
ZW50UG9zWSk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGl0eVBvc2l0aW9uQ2hhbmdl
ZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc1BvaW50OwogY2xhc3MgUGxhdGZvcm1X
aGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7CkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlv
biBhbHdheXMgc2Nyb2xscyBpbW1lZGlhdGVseSwgbmV2ZXIgYW5pbWF0ZXMuCiAgICAgdmlydHVh
bCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwogCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7
CiAKICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbGFibGVBcmVhOyB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
ICNlbmRpZgogCi0gICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKKyAgICBH
cmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IGNhbmNlbEFuaW1hdGlvbnMoKSB7IH0KIApAQCAtOTMsNyArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwogCiAgICAgU2Nyb2xsYWJs
ZUFyZWEqIG1fc2Nyb2xsYWJsZUFyZWE7Ci0gICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2Ug
YXZvaWQgdXNpbmcgYSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQorICAgIGZsb2F0IG1f
Y3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgR3JhcGhpY3NQb2ludCBpbiBvcmRlciB0
byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBs
ZXhpdHkuCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ck5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yTm9uZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JOb25lLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiT3duQXJyYXlQdHIuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJl
YS5oIgpAQCAtMzE5LDcgKzMxOSw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGwo
U2Nyb2xsYmEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTm9u
ZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNl
dCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oY29uc3QgR3JhcGhpY3NQb2ludCYgb2Zmc2V0KQogewogICAgIHN0b3BBbmltYXRpb25UaW1l
cklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsKICAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5l
ZWRlZCgmbV92ZXJ0aWNhbERhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3JOb25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JOb25lLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9uZSgpOwogCiAgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2lu
dCYpOwogCiAgICAgZW51bSBDdXJ2ZSB7CiAgICAgICAgIExpbmVhciwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvcldp
bi5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgU2Nyb2xs
QW5pbWF0b3JXaW46OnNjcm9sbChTY3JvbGxiYXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBvZmZzZXQpCiB7CiAgICAg
c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOwogICAgIHN0b3BB
bmltYXRpb25UaW1lcklmTmVlZGVkKCZtX3ZlcnRpY2FsRGF0YSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JX
aW4oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0
IEdyYXBoaWNzUG9pbnQmKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWUuaCIKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKFNj
cm9sbERpcmVjdAogICAgIHJldHVybiBzY3JvbGxBbmltYXRvcigpLT5zY3JvbGwob3JpZW50YXRp
b24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIH0KIAotdm9pZCBTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihjb25zdCBHcmFwaGljc1BvaW50JiBvZmZzZXQpCiB7CiAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CkBAIC0xMTQsMTIgKzEx
NCwxMiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvCiAKIHZvaWQg
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCkK
IHsKLSAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludCh4LCBzY3Jv
bGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsKKyAgICBzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oR3JhcGhpY3NQb2ludCh4LCBzY3JvbGxBbmltYXRvcigpLT5jdXJy
ZW50UG9zaXRpb24oKS55KCkpKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9Z
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB5KQogewotICAgIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlv
bigpLngoKSwgeSkpOworICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihHcmFwaGlj
c1BvaW50KHNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOwogfQog
CiB2b2lkIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVudDsKIGNsYXNzIFBs
YXRmb3JtV2hlZWxFdmVudDsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
flNjcm9sbGFibGVBcmVhKCk7CiAKICAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7Ci0gICAgdm9pZCBzY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAgICB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwg
ZmxvYXQgb2Zmc2V0KTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24o
ZmxvYXQgeCk7CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0
IHgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2OSw3ICsyNjksNyBAQCB2b2lkIFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBw
b3MsIGJvb2wgCiAgICAgICAgIGlmIChtX2RyYWdnaW5nRG9jdW1lbnQpCiAgICAgICAgICAgICBk
ZWx0YSA9IHBvcyAtIG1fZG9jdW1lbnREcmFnUG9zOwogICAgICAgICBtX2RyYWdnaW5nRG9jdW1l
bnQgPSB0cnVlOwotICAgICAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOworICAgICAgICBH
cmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFu
aW1hdG9yKCktPmN1cnJlbnRQb3NpdGlvbigpOwogICAgICAgICBpbnQgZGVzdGluYXRpb25Qb3Np
dGlvbiA9IChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBjdXJyZW50UG9z
aXRpb24ueCgpIDogY3VycmVudFBvc2l0aW9uLnkoKSkgKyBkZWx0YTsKICAgICAgICAgaWYgKGRl
bHRhID4gMCkKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUG9zaXRpb24gPSBtaW4oZGVzdGluYXRp
b25Qb3NpdGlvbiArIGRlbHRhLCBtYXhpbXVtKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NjcmVlbkFuZHJvaWQuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMiBAQAogCiAvLyBUaGlzIGluY2x1ZGUgbXVzdCBj
b21lIGZpcnN0LgogI3VuZGVmIExPRyAvLyBGSVhNRTogU3RpbGwgaGF2ZSB0byBkbyB0aGlzIHRv
IGdldCB0aGUgbG9nIHRvIHNob3cgdXAKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJ1dGlscy9Mb2cuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIldp
ZGdldC5oIgogI2luY2x1ZGUgInVpL0Rpc3BsYXlJbmZvLmgiCiAjaW5jbHVkZSAidWkvUGl4ZWxG
b3JtYXQuaCIKICNpbmNsdWRlICJ1aS9TdXJmYWNlQ29tcG9zZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MCwyMCArODksMjAgQEAg
aW50IFNjcmVlbjo6b3JpZW50YXRpb24oKSBjb25zdAogLy8gcG9zaXRpb25pbmcgcG9wdXAgd2lu
ZG93cy4gSWYgd2Ugc3VwcG9ydCBtdWx0aXBsZSB3aW5kb3dzCiAvLyB0aGV5IHdpbGwgYmUgbW9z
dCBsaWtlbHkgZnVsbCBzY3JlZW4uIFRoZXJlZm9yZSwKIC8vIHRoZSBhY2N1cmFjeSBvZiB0aGVz
ZSBudW1iZXIgYXJlIG5vdCB0b28gaW1wb3J0YW50LgotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lk
Z2V0KiBwYWdlKQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiBwYWdlKQogewogICAg
IGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87CiAgICAgYW5kcm9pZDo6U3VyZmFjZUNvbXBvc2Vy
Q2xpZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lkOjpEaXNwbGF5SUQoMCksICZpbmZvKTsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KDAuMCwgMC4wLCBpbmZvLncsIGluZm8uaCk7CisgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgwLjAsIDAuMCwgaW5mby53LCBpbmZvLmgpOwogfQogCiAvLyBTaW1pbGFy
IHNjcmVlblJlY3QsIHRoaXMgZnVuY3Rpb24gaXMgY29tbW9ubHkgdXNlZCBieSBqYXZhc2NyaXB0
cwogLy8gdG8gcG9zaXRpb24gYW5kIHJlc2l6ZSB3aW5kb3dzICh1c3VhbGx5IHRvIGZ1bGwgc2Ny
ZWVuKS4gCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKQorR3JhcGhpY3NS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KikKIHsKICAgICBhbmRyb2lkOjpEaXNwbGF5
SW5mbyBpbmZvOwogICAgIGFuZHJvaWQ6OlN1cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxh
eUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5mbyk7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dCgwLjAsIDAuMCwgaW5mby53LCBpbmZvLmgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoMC4w
LCAwLjAsIGluZm8udywgaW5mby5oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3QW5kcm9pZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9TY3JvbGxWaWV3QW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU2tSZWdpb24u
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTMsNyArMzUzLDcgQEAgY29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKICAgICBy
ZXR1cm4gZHVtbXlDdXJzb3I7CiB9CiAKLXZvaWQqIHNjYWxlRHJhZ0ltYWdlKHZvaWQqLCBGbG9h
dFNpemUpCit2b2lkKiBzY2FsZURyYWdJbWFnZSh2b2lkKiwgR3JhcGhpY3NTaXplKQogewogICAg
IHJldHVybiAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE2ICs0MiwxNiBAQCBDb25lRWZmZWN0OjpDb25lRWZm
ZWN0KCkKIHsKIH0KIAotZG91YmxlIENvbmVFZmZlY3Q6OmdhaW4oRmxvYXRQb2ludDNEIHNvdXJj
ZVBvc2l0aW9uLCBGbG9hdFBvaW50M0Qgc291cmNlT3JpZW50YXRpb24sIEZsb2F0UG9pbnQzRCBs
aXN0ZW5lclBvc2l0aW9uKQorZG91YmxlIENvbmVFZmZlY3Q6OmdhaW4oR3JhcGhpY3NQb2ludDNE
IHNvdXJjZVBvc2l0aW9uLCBHcmFwaGljc1BvaW50M0Qgc291cmNlT3JpZW50YXRpb24sIEdyYXBo
aWNzUG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKQogewogICAgIGlmIChzb3VyY2VPcmllbnRhdGlv
bi5pc1plcm8oKSB8fCAoKG1faW5uZXJBbmdsZSA9PSAzNjAuMCkgJiYgKG1fb3V0ZXJBbmdsZSA9
PSAzNjAuMCkpKQogICAgICAgICByZXR1cm4gMS4wOyAvLyBubyBjb25lIHNwZWNpZmllZCAtIHVu
aXR5IGdhaW4KIAogICAgIC8vIE5vcm1hbGl6ZWQgc291cmNlLWxpc3RlbmVyIHZlY3RvcgotICAg
IEZsb2F0UG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbGlzdGVuZXJQb3NpdGlvbiAtIHNvdXJj
ZVBvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbGlzdGVu
ZXJQb3NpdGlvbiAtIHNvdXJjZVBvc2l0aW9uOwogICAgIHNvdXJjZVRvTGlzdGVuZXIubm9ybWFs
aXplKCk7CiAKLSAgICBGbG9hdFBvaW50M0Qgbm9ybWFsaXplZFNvdXJjZU9yaWVudGF0aW9uID0g
c291cmNlT3JpZW50YXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG5vcm1hbGl6ZWRTb3VyY2VP
cmllbnRhdGlvbiA9IHNvdXJjZU9yaWVudGF0aW9uOwogICAgIG5vcm1hbGl6ZWRTb3VyY2VPcmll
bnRhdGlvbi5ub3JtYWxpemUoKTsKIAogICAgIC8vIEFuZ2xlIGJldHdlZW4gdGhlIHNvdXJjZSBv
cmllbnRhdGlvbiB2ZWN0b3IgYW5kIHRoZSBzb3VyY2UtbGlzdGVuZXIgdmVjdG9yCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9Db25lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2lmbmRlZiBDb25lX2gKICNkZWZpbmUgQ29uZV9oCiAKLSNpbmNsdWRlICJGbG9h
dFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBDb25lRWZmZWN0KCk7CiAK
ICAgICAvLyBSZXR1cm5zIHNjYWxhciBnYWluIGZvciB0aGUgZ2l2ZW4gc291cmNlL2xpc3RlbmVy
IHBvc2l0aW9ucy9vcmllbnRhdGlvbnMKLSAgICBkb3VibGUgZ2FpbihGbG9hdFBvaW50M0Qgc291
cmNlUG9zaXRpb24sIEZsb2F0UG9pbnQzRCBzb3VyY2VPcmllbnRhdGlvbiwgRmxvYXRQb2ludDNE
IGxpc3RlbmVyUG9zaXRpb24pOworICAgIGRvdWJsZSBnYWluKEdyYXBoaWNzUG9pbnQzRCBzb3Vy
Y2VQb3NpdGlvbiwgR3JhcGhpY3NQb2ludDNEIHNvdXJjZU9yaWVudGF0aW9uLCBHcmFwaGljc1Bv
aW50M0QgbGlzdGVuZXJQb3NpdGlvbik7CiAKICAgICAvLyBBbmdsZXMgaW4gZGVncmVlcwogICAg
IHZvaWQgc2V0SW5uZXJBbmdsZShkb3VibGUgaW5uZXJBbmdsZSkgeyBtX2lubmVyQW5nbGUgPSBp
bm5lckFuZ2xlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9icmV3L1NjcmVlbkJy
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JyZXcvU2NyZWVu
QnJldy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYnJl
dy9TY3JlZW5CcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmVlbi5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC01OSwxNSArNTksMTUg
QEAgc3RhdGljIHZvaWQgZ2V0RGlzcGxheUluZm8oRGlzcGxheUluZm8mIAogICAgIGluZm8uZGVw
dGggID0gYml0bWFwSW5mby5uRGVwdGg7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdl
dCopCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKQogewogICAgIERpc3BsYXlJbmZv
IGluZm87CiAgICAgZ2V0RGlzcGxheUluZm8oaW5mbyk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0
KDAsIDAsIGluZm8ud2lkdGgsIGluZm8uaGVpZ2h0KTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KDAsIDAsIGluZm8ud2lkdGgsIGluZm8uaGVpZ2h0KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2
YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxl
UmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICByZXR1cm4gc2NyZWVuUmVjdCh3aWRnZXQpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21p
dW1NYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0RyYWdJbWFnZUNocm9taXVtTWFjLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVm
IGltYWdlKQogICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKIH0KIAotRHJhZ0ltYWdlUmVmIHNj
YWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplIHNjYWxlKQorRHJhZ0lt
YWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgR3JhcGhpY3NTaXplIHNj
YWxlKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJv
bWl1bVNraWEuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlKQogICAg
IGRlbGV0ZSBpbWFnZTsKIH0KIAotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZiBpbWFnZSwgRmxvYXRTaXplIHNjYWxlKQorRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdl
KERyYWdJbWFnZVJlZiBpbWFnZSwgR3JhcGhpY3NTaXplIHNjYWxlKQogewogICAgIGlmICghaW1h
Z2UpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1T
Y3JlZW5DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxMiBAQCBib29s
IHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKICAgICByZXR1cm4gUGxhdGZvcm1C
cmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZSh3aWRnZXQpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVu
UmVjdChXaWRnZXQqIHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lk
Z2V0KQogewogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuUmVjdCh3aWRnZXQpOwog
fQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK0dyYXBo
aWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCh3aWRnZXQpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNo
cm9taXVtLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw3ICsz
NjMsNyBAQCBJbnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgaWYg
KGNocm9tZUNsaWVudCkgewogICAgICAgICAvLyBJZiB0aGUgcG9wdXAgd291bGQgZXh0ZW5kIHBh
c3QgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLCBvcGVuIHVwd2FyZHMKICAgICAgICAgLy8gaW5z
dGVhZC4KLSAgICAgICAgRmxvYXRSZWN0IHNjcmVlbiA9IHNjcmVlbkF2YWlsYWJsZVJlY3QobV9m
cmFtZVZpZXcuZ2V0KCkpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIC8vIFVzZSBwb3B1cEluaXRp
YWxDb29yZGluYXRlLngoKSArIHJpZ2h0T2Zmc2V0IGJlY2F1c2UgUlRMIHBvc2l0aW9uCiAgICAg
ICAgIC8vIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuCiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZS54
KCkgKyByaWdodE9mZnNldCwgcG9wdXBJbml0aWFsQ29vcmRpbmF0ZS55KCksIHRhcmdldFNpemUu
d2lkdGgoKSwgdGFyZ2V0U2l6ZS5oZWlnaHQoKSkpOwpAQCAtMzcxLDcgKzM3MSw3IEBAIEludFJl
Y3QgUG9wdXBDb250YWluZXI6OmxheW91dEFuZENhbGN1bGEKICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBtdWx0aXBsZSBzY3JlZW5zIGFuZCB0aGUgYnJvd3NlciByZWN0IGlzIGluIG9uZSBzY3JlZW4s
IHdlIGhhdmUKICAgICAgICAgLy8gdG8gY2xpcCB0aGUgd2luZG93IHdpZHRoIHRvIHRoZSBzY3Jl
ZW4gd2lkdGguCiAgICAgICAgIC8vIFdoZW4gY2xpcHBpbmcsIHdlIGFsc28gbmVlZCB0byBzZXQg
YSBtYXhpbXVtIHdpZHRoIGZvciB0aGUgbGlzdCBib3guCi0gICAgICAgIEZsb2F0UmVjdCB3aW5k
b3dSZWN0ID0gY2hyb21lQ2xpZW50LT53aW5kb3dSZWN0KCk7CisgICAgICAgIEdyYXBoaWNzUmVj
dCB3aW5kb3dSZWN0ID0gY2hyb21lQ2xpZW50LT53aW5kb3dSZWN0KCk7CiAgICAgICAgIGlmICh3
aW5kb3dSZWN0LngoKSA+PSBzY3JlZW4ueCgpICYmIHdpbmRvd1JlY3QubWF4WCgpIDw9IHNjcmVl
bi5tYXhYKCkgJiYgKHdpZGdldFJlY3QueCgpIDwgc2NyZWVuLngoKSB8fCB3aWRnZXRSZWN0Lm1h
eFgoKSA+IHNjcmVlbi5tYXhYKCkpKSB7CiAgICAgICAgICAgICAvLyBGaXJzdCwgaW52ZXJzZSB0
aGUgcG9wdXAgYWxpZ25tZW50IGlmIGl0IGRvZXMgbm90IGZpdCB0aGUgc2NyZWVuIC0gdGhpcyBt
aWdodCBmaXggdGhpbmdzIChvciBtYWtlIHRoZW0gYmV0dGVyKS4KICAgICAgICAgICAgIEludFJl
Y3QgaW52ZXJzZVdpZGdldFJlY3QgPSBjaHJvbWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJl
Y3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZS54KCkgKyAoaXNSVEwgPyAwIDogcnRsT2Zmc2V0KSwg
cG9wdXBJbml0aWFsQ29vcmRpbmF0ZS55KCksIHRhcmdldFNpemUud2lkdGgoKSwgdGFyZ2V0U2l6
ZS5oZWlnaHQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hY19oCiAjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWNfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRl
ICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKQEAgLTU2LDcgKzU2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNz
UG9pbnQmKTsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKQEAgLTY3LDExICs2NywxMSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwogCi0gICAg
dm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9u
KTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYg
bmV3UG9zaXRpb24pOwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVs
dGFYKTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSk7CiAK
LSAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBuZXdQb3NpdGlvbik7CiAK
ICAgICB2b2lkIHNldElzRHJhd2luZ0ludG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xh
eWVyID0gYjsgfQogICAgIGJvb2wgaXNEcmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3aW5nSW50b0xheWVyOyB9CkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0ZToKIAogICAg
IGZsb2F0IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKICAg
ICBmbG9hdCBhZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7Ci0g
ICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZO
ZWNlc3NhcnkoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQogICAgIGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkgY29uc3Q7CkBA
IC0xNDgsMTUgKzE0OCwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRDdW11bGF0aXZlSG9y
aXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW47CiAKICAgICBD
RlRpbWVJbnRlcnZhbCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBGbG9hdFNp
emUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOwotICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxG
b3JjZTsKLSAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OworICAgIEdyYXBoaWNzU2l6
ZSBtX292ZXJmbG93U2Nyb2xsRGVsdGE7CisgICAgR3JhcGhpY3NTaXplIG1fc3RyZXRjaFNjcm9s
bEZvcmNlOworICAgIEdyYXBoaWNzU2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7CiAKICAgICAvLyBS
dWJiZXIgYmFuZCBzdGF0ZS4KICAgICBDRlRpbWVJbnRlcnZhbCBtX3N0YXJ0VGltZTsKLSAgICBG
bG9hdFNpemUgbV9zdGFydFN0cmV0Y2g7Ci0gICAgRmxvYXRQb2ludCBtX29yaWdPcmlnaW47Ci0g
ICAgRmxvYXRTaXplIG1fb3JpZ1ZlbG9jaXR5OworICAgIEdyYXBoaWNzU2l6ZSBtX3N0YXJ0U3Ry
ZXRjaDsKKyAgICBHcmFwaGljc1BvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBHcmFwaGljc1NpemUg
bV9vcmlnVmVsb2NpdHk7CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9z
bmFwUnViYmVyQmFuZFRpbWVyOwogI2VuZGlmCiAgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKQEAg
LTk4LDcgKzk4LDcgQEAgLSAoTlNSZWN0KWJvdW5kcwogICAgIGlmICghX2FuaW1hdG9yKQogICAg
ICAgICByZXR1cm4gTlNaZXJvUmVjdDsKIAotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY3VycmVu
dFBvc2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc1BvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9u
KCk7CiAgICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBv
c2l0aW9uLnkoKSwgMCwgMCk7CiB9CiAKQEAgLTUyNyw3ICs1MjcsNyBAQCBib29sIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbChTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9m
ZnNldCkKIHsKICAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5dOwog
ICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQob2Zmc2V0KTsKQEAgLTU0OSw3ICs1NDksNyBAQCBm
bG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTCiAgICAgcmV0dXJuIG1heDxm
bG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXpl
KCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIH0K
IAotRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3Np
dGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAorR3JhcGhp
Y3NQb2ludCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklm
TmVjZXNzYXJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlm
ICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkK
ICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwpAQCAtNTU3LDEyICs1NTcsMTIgQEAgRmxvYXRQb2lu
dCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZAogICAgIGZsb2F0IG5ld1ggPSBtYXg8Zmxv
YXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1Np
emUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZVdpZHRoKCkpLCAwKTsKICAg
ICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3Jv
bGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIAotICAgIHJldHVybiBGbG9hdFBvaW50KG5ld1gsIG5ld1kp
OworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG5ld1gsIG5ld1kpOwogfQogCi12b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgbmV3UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVk
aWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pCiB7Ci0g
ICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5l
Y2Vzc2FyeShuZXdQb3NpdGlvbik7CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RlZFBvc2l0aW9u
ID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CiAgCiAgICAg
aWYgKGFkanVzdGVkUG9zaXRpb24ueCgpID09IG1fY3VycmVudFBvc1ggJiYgYWRqdXN0ZWRQb3Np
dGlvbi55KCkgPT0gbV9jdXJyZW50UG9zWSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTk0LDcgKzU5
NCw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXQKICAgICBub3Rp
dHlQb3NpdGlvbkNoYW5nZWQoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjppbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIG5ld1Bvc2l0aW9uKQordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlh
dGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5l
d1Bvc2l0aW9uKQogewogICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcik7CiAgICAg
Q0dGbG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfcHJvZ3Jl
c3NdOwpAQCAtODU2LDcgKzg1Niw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
aGFuZGxlR2UKIAogYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpwaW5uZWRJbkRpcmVj
dGlvbihmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKIHsKLSAgICBGbG9hdFNpemUgbGltaXRE
ZWx0YTsKKyAgICBHcmFwaGljc1NpemUgbGltaXREZWx0YTsKICAgICBpZiAoZmFic2YoZGVsdGFZ
KSA+PSBmYWJzZihkZWx0YVgpKSB7CiAgICAgICAgIGlmIChkZWx0YVkgPCAwKSB7CiAgICAgICAg
ICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCB1cC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90
IHBpbm5lZCB0byB0aGUgdG9wCkBAIC05MjQsNyArOTI0LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpzbW9vdGhTYwogICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YS5oZWlnaHQoKTsKIAogICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNl
IHdlIG1heSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQg
aXQgaW50byBvdmVyZmxvdy4KLSAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUo
KTsKKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBHcmFwaGljc1NpemUoKTsKIAogICAgIGZs
b2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7CiAgICAgZmxv
YXQgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsKQEAgLTk2MSw3
ICs5NjEsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjCiAgICAg
ICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0
YW1wKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9s
bFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7Ci0gICAgICAgICAgICBtX21vbWVu
dHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0
eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzVmVydGljYWxs
eVN0cmV0Y2hlZCkgewpAQCAtMTA1MSw5ICsxMDUxLDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpzbW9vdGhTYwogICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7CiAgICAgICAgICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVp
Z2h0KCkgKyBkZWx0YVkpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2Vp
bGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRo
KCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZv
cmNlLmhlaWdodCgpKSkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1f
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OwotICAgICAgICAgICAg
RmxvYXRQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7CisgICAgICAg
ICAgICBHcmFwaGljc1NpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3Vu
ZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRh
Rm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2li
bGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmln
aW4oKSkgLSBzdHJldGNoQW1vdW50OworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBuZXdPcmln
aW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7CiAKICAgICAgICAgICAgIGlmIChvcmlnT3Jp
Z2luICE9IG5ld09yaWdpbikgewogICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKQEAgLTEwNzksNyArMTA3
OSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YmVnaW5TY3IKICAgICBtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzID0gZmFsc2U7CiAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwotICAg
IG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgIG1fbW9tZW50dW1WZWxvY2l0
eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQg
PSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBv
c2l0aW9uKCk7CiAgICAgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQgPSBtX3Njcm9s
bGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCk7
CiAgICAgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA9IDA7CkBAIC0xMDg5LDcgKzEwODks
NyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2luU2NyCiAgICAgbV9zdHJl
dGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0
Y2hBbW91bnQud2lkdGgoKSkpOwogICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChy
ZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQoKSkpOwogCi0g
ICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7CisgICAgbV9vdmVyZmxvd1Nj
cm9sbERlbHRhID0gR3JhcGhpY3NTaXplKCk7CiAgICAgCiAgICAgaWYgKG1fc25hcFJ1YmJlckJh
bmRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgp
OwpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpz
bmFwUnViYgogewogICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtbTlNQcm9jZXNzSW5m
byBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wOwogICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEg
Pj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCkKLSAgICAgICAgbV9tb21lbnR1bVZlbG9j
aXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEdyYXBoaWNz
U2l6ZSgpOwogCiAgICAgbV9pblNjcm9sbEdlc3R1cmUgPSBmYWxzZTsKIApAQCAtMTExNCw5ICsx
MTE0LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYgogICAgICAg
ICByZXR1cm47CiAKICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VS
ZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIG1f
b3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6
ZSgpOworICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgbV9vcmlnT3Jp
Z2luID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXpl
KCk7CiAKICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wLzYwLjAp
OwogfQpAQCAtMTE0MCwxNSArMTE0MCwxNSBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNuYXBSdWJiCiAgICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2ln
bm9yZU1vbWVudHVtU2Nyb2xscykgewogICAgICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEg
PSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsK
IAotICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKKyAgICAgICAg
aWYgKG1fc3RhcnRTdHJldGNoID09IEdyYXBoaWNzU2l6ZSgpKSB7CiAgICAgICAgICAgICBtX3N0
YXJ0U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7Ci0gICAgICAg
ICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsgICAgCisgICAgICAgICAg
ICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gR3JhcGhpY3NTaXplKCkpIHsgICAgCiAgICAgICAgICAg
ICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgICAgICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fc3RyZXRj
aFNjcm9sbEZvcmNlID0gR3JhcGhpY3NTaXplKCk7CiAgICAgICAgICAgICAgICAgbV9zdGFydFRp
bWUgPSAwOwotICAgICAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0g
ICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAg
ICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAgICAgbV9zdGFy
dFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKKyAgICAgICAgICAgICAgICBtX29yaWdPcmlnaW4g
PSBHcmFwaGljc1BvaW50KCk7CisgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBHcmFw
aGljc1NpemUoKTsKIAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAg
LTExNzMsMTcgKzExNzMsMTcgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFw
UnViYgogICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEZsb2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJk
WmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1f
b3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1lRGVsdGEpKSwKKyAgICAgICAgR3JhcGhp
Y3NQb2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZv
clRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgo
KSwgKGZsb2F0KXRpbWVEZWx0YSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kVG9E
ZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJl
dGNoLmhlaWdodCgpLCAtbV9vcmlnVmVsb2NpdHkuaGVpZ2h0KCksIChmbG9hdCl0aW1lRGVsdGEp
KSk7CiAKICAgICAgICAgaWYgKGZhYnMoZGVsdGEueCgpKSA+PSAxIHx8IGZhYnMoZGVsdGEueSgp
KSA+PSAxKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IG5ld09yaWdpbiA9IG1fb3JpZ09yaWdp
biArIGRlbHRhOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdP
cmlnaW4gKyBkZWx0YTsKIAogICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogICAgICAgICAgICAgaW1tZWRpYXRl
U2Nyb2xsVG9Qb2ludChuZXdPcmlnaW4pOwogICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CiAKLSAgICAgICAgICAg
IEZsb2F0U2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQo
KTsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBuZXdTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJl
YS0+b3ZlcmhhbmdBbW91bnQoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9zdHJldGNo
U2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0
Y2gud2lkdGgoKSkpOwogICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0
KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7CkBAIC0x
MTkzLDE2ICsxMTkzLDE2IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1
YmIKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChy
b3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOwogCiAgICAgICAgICAgICBtX3NuYXBSdWJi
ZXJCYW5kVGltZXIuc3RvcCgpOwotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBG
bG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gR3JhcGhpY3NT
aXplKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAg
ICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICBtX29yaWdP
cmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0
U2l6ZSgpOworICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKKyAg
ICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICAgICAgICAgIG1f
b3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VE
YXRlXTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICAgICAgbV9z
dGFydFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiB9CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02MjksNyArNjI5LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFRpYwogICAgICAgICBjb25zdCBpbnQgeVBvcyA9IHJlY3QueSgpICsgKHJlY3QuaGVp
Z2h0KCkgKiBwZXJjZW50KTsKIAogICAgICAgICAvLyBQYWludC4KLSAgICAgICAgRmxvYXRSZWN0
IHRpY2tSZWN0KHJlY3QueCgpLCB5UG9zLCByZWN0LndpZHRoKCksIDIpOworICAgICAgICBHcmFw
aGljc1JlY3QgdGlja1JlY3QocmVjdC54KCksIHlQb3MsIHJlY3Qud2lkdGgoKSwgMik7CiAgICAg
ICAgIGNvbnRleHQtPmZpbGxSZWN0KHRpY2tSZWN0KTsKICAgICAgICAgY29udGV4dC0+c3Ryb2tl
UmVjdCh0aWNrUmVjdCwgMSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgdm9pZCBwYWludENoZWNr
Ym94KENvbnRyb2xTdGF0ZXMgCiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRl
ZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVp
Z2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBjb250ZXh0
LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7
CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVk
UmVjdC55KCkpOwogICAgIH0KIApAQCAtNDc2LDcgKzQ3Niw3IEBAIHN0YXRpYyB2b2lkIHBhaW50
UmFkaW8oQ29udHJvbFN0YXRlcyBzdGEKICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGlu
ZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGluZmxhdGVkUmVjdC5z
ZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGNv
bnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKLSAg
ICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsK
KyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0
b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5m
bGF0ZWRSZWN0LnkoKSk7CiAgICAgfQogCkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIHZvaWQg
cGFpbnRCdXR0b24oQ29udHJvbFBhcnQgcGFydAogICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNl
dFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBp
bmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3Ip
OwogICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxh
dGVkUmVjdC55KCkpOwotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21G
YWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNz
U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTY0Niw3ICs2NDYsNyBAQCBzdGF0aWMgdm9pZCBwYWludFN0ZXBwZXIoQ29udHJv
bFN0YXRlcyBzCiAgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53aWR0aCgpIC8gem9vbUZhY3Rv
cik7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsK
ICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgpLCByZWN0LnkoKSk7Ci0gICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7
CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAg
fQogICAgIENHUmVjdCBib3VuZHMocmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvRHJhZ0ltYWdlRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvRHJhZ0ltYWdlRWZsLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0ltYWdlRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NyArMzgsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYpCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJl
ZiBpbWFnZSwgRmxvYXRTaXplKQorRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFn
ZVJlZiBpbWFnZSwgR3JhcGhpY3NTaXplKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIGltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3Jt
U2NyZWVuRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
UGxhdGZvcm1TY3JlZW5FZmwuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDE3ICs2MSwxNyBAQCBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFw
aGljc1JlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBpbnQgeCwgeSwgdywg
aDsKICAgICBFdmFzKiBlID0gd2lkZ2V0LT5ldmFzKCk7CiAKICAgICBlY29yZV9ldmFzX3NjcmVl
bl9nZW9tZXRyeV9nZXQoZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChlKSwgJngsICZ5LCAmdywg
JmgpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCh4LCB5LCB3LCBoKTsKKyAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KHgsIHksIHcsIGgpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVj
dChXaWRnZXQqIHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdl
dCogd2lkZ2V0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIHNjcmVlblJl
Y3Qod2lkZ2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVt
ZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE0LDggKzEyMTQs
OCBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1lZGlhU2xpZGVyVHJhCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW5mby5jb250ZXh0OwogCi0gICAgY29udGV4dC0+Zmls
bFJlY3QoRmxvYXRSZWN0KHJlY3QpLCBtX21lZGlhUGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmlj
ZVJHQik7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEludFJlY3QocmVjdC54KCks
IHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtZWRpYVNsaWRlckhlaWdodCkgLyAyLAorICAg
IGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChyZWN0KSwgbV9tZWRpYVBhbmVsQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVj
dChJbnRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbWVkaWFTbGlk
ZXJIZWlnaHQpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LndpZHRoKCksIG1lZGlhU2xpZGVySGVpZ2h0KSksIG1fbWVkaWFTbGlkZXJDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0
eWxlKCk7CkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1l
ZGlhU2xpZGVyVHJhCiAgICAgICAgIEludFBvaW50IHNsaWRlclRvcFJpZ2h0ID0gc2xpZGVyVG9w
TGVmdDsKICAgICAgICAgc2xpZGVyVG9wUmlnaHQubW92ZSgwLCByYW5nZVJlY3QuaGVpZ2h0KCkp
OwogCi0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9tZWRpYVBh
bmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBjb250ZXh0LT5maWxsUmVj
dChHcmFwaGljc1JlY3QocmVjdCksIG1fbWVkaWFQYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKICAgICB9CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMTI5MCw3ICsxMjkwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZWRpYVZvbHVt
ZVNsaQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBpbmZvLmNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9tZWRp
YVBhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGluZm8uY29udGV4dC0+Zmls
bFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpLCBtX21lZGlhUGFuZWxDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxWaWV3RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsVmlld0VmbC5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbFZpZXdFZmwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQml0bWFw
SW1hZ2UuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3OCwxMyArMTc4LDEzIEBAIHByb3RlY3RlZDoKICAgICBCaXRtYXBJbWFnZShJbWFnZU9i
c2VydmVyKiA9IDApOwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3
RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRj
aGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RS
ZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IpOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICNpZiAoT1MoV0lOQ0UpICYmICFQTEFU
Rk9STShRVCkpCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpOwogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShIQUlLVSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIENvbnRleHRTaGFkb3c6OkNvbnRleHRTaGFkb3co
KQogewogfQogCi1Db250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93KGNvbnN0IENvbG9yJiBjb2xv
ciwgZmxvYXQgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK0NvbnRleHRTaGFkb3c6
OkNvbnRleHRTaGFkb3coY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCByYWRpdXMsIGNvbnN0IEdy
YXBoaWNzU2l6ZSYgb2Zmc2V0KQogICAgIDogbV9jb2xvcihjb2xvcikKICAgICAsIG1fYmx1ckRp
c3RhbmNlKHJvdW5kKHJhZGl1cykpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCkBAIC04MCw3ICs4
MCw3IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6Y2xlYXIoKQogICAgIG1fdHlwZSA9IE5vU2hhZG93
OwogICAgIG1fY29sb3IgPSBDb2xvcigpOwogICAgIG1fYmx1ckRpc3RhbmNlID0gMDsKLSAgICBt
X29mZnNldCA9IEZsb2F0U2l6ZSgpOworICAgIG1fb2Zmc2V0ID0gR3JhcGhpY3NTaXplKCk7CiB9
CiAKIGJvb2wgQ29udGV4dFNoYWRvdzo6bXVzdFVzZUNvbnRleHRTaGFkb3coR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KQpAQCAtMTg3LDE3ICsxODcsMTcgQEAgdm9pZCBDb250ZXh0U2hhZG93Ojph
ZGp1c3RCbHVyRGlzdGFuY2UoRwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDYWxjdWxhdGUg
dHJhbnNmb3JtZWQgdW5pdCB2ZWN0b3JzLgotICAgIGNvbnN0IEZsb2F0UXVhZCB1bml0UXVhZChG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDEsIDApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGbG9hdFBvaW50KDAsIDEpLCBGbG9hdFBvaW50KDEsIDEpKTsKKyAgICBjb25zdCBG
bG9hdFF1YWQgdW5pdFF1YWQoR3JhcGhpY3NQb2ludCgwLCAwKSwgR3JhcGhpY3NQb2ludCgxLCAw
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCgwLCAxKSwgR3Jh
cGhpY3NQb2ludCgxLCAxKSk7CiAgICAgY29uc3QgRmxvYXRRdWFkIHRyYW5zZm9ybWVkVW5pdFF1
YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZCh1bml0UXVhZCk7CiAKICAgICAvLyBDYWxjdWxhdGUgWCBh
eGlzIHNjYWxlIGZhY3Rvci4KLSAgICBjb25zdCBGbG9hdFNpemUgeFVuaXRDaGFuZ2UgPSB0cmFu
c2Zvcm1lZFVuaXRRdWFkLnAyKCkgLSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAxKCk7CisgICAgY29u
c3QgR3JhcGhpY3NTaXplIHhVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMigpIC0g
dHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOwogICAgIGNvbnN0IGZsb2F0IHhBeGlzU2NhbGUgPSBz
cXJ0Zih4VW5pdENoYW5nZS53aWR0aCgpICogeFVuaXRDaGFuZ2Uud2lkdGgoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArIHhVbml0Q2hhbmdlLmhlaWdodCgpICogeFVuaXRD
aGFuZ2UuaGVpZ2h0KCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIFkgYXhpcyBzY2FsZSBmYWN0b3Iu
Ci0gICAgY29uc3QgRmxvYXRTaXplIHlVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5w
MygpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOworICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSB5
VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5pdFF1YWQucDMoKSAtIHRyYW5zZm9ybWVkVW5pdFF1
YWQucDEoKTsKICAgICBjb25zdCBmbG9hdCB5QXhpc1NjYWxlID0gc3FydGYoeVVuaXRDaGFuZ2Uu
d2lkdGgoKSAqIHlVbml0Q2hhbmdlLndpZHRoKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKyB5VW5pdENoYW5nZS5oZWlnaHQoKSAqIHlVbml0Q2hhbmdlLmhlaWdodCgpKTsK
IApAQCAtMjA2LDQyICsyMDYsNDIgQEAgdm9pZCBDb250ZXh0U2hhZG93OjphZGp1c3RCbHVyRGlz
dGFuY2UoRwogICAgIG1fYmx1ckRpc3RhbmNlID0gcm91bmRmKHN0YXRpY19jYXN0PGZsb2F0Piht
X2JsdXJEaXN0YW5jZSkgLyBzY2FsZSk7CiB9CiAKLUludFJlY3QgQ29udGV4dFNoYWRvdzo6Y2Fs
Y3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGxheWVyQXJlYSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCitJbnRSZWN0IENv
bnRleHRTaGFkb3c6OmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0KQogewogICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gb2YgdGhlIGJsdXJy
ZWQgYW5kL29yIHRyYW5zZm9ybWVkIGxheWVyLgotICAgIEZsb2F0UmVjdCBsYXllckZsb2F0UmVj
dDsKKyAgICBHcmFwaGljc1JlY3QgbGF5ZXJHcmFwaGljc1JlY3Q7CiAgICAgZmxvYXQgaW5mbGF0
aW9uID0gMDsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0
LT5nZXRDVE0oKTsKICAgICBpZiAobV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAmJiAhdHJhbnNm
b3JtLmlzSWRlbnRpdHkoKSkgewogICAgICAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRQb2x5Z29u
ID0gdHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyQXJlYSkpOwogICAgICAgICB0cmFu
c2Zvcm1lZFBvbHlnb24ubW92ZShtX29mZnNldCk7Ci0gICAgICAgIGxheWVyRmxvYXRSZWN0ID0g
dHJhbnNmb3JtLmludmVyc2UoKS5tYXBRdWFkKHRyYW5zZm9ybWVkUG9seWdvbikuYm91bmRpbmdC
b3goKTsKKyAgICAgICAgbGF5ZXJHcmFwaGljc1JlY3QgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpLm1h
cFF1YWQodHJhbnNmb3JtZWRQb2x5Z29uKS5ib3VuZGluZ0JveCgpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGxheWVyRmxvYXRSZWN0ID0gbGF5ZXJBcmVhOwotICAgICAgICBsYXllckZsb2F0UmVj
dC5tb3ZlKG1fb2Zmc2V0KTsKKyAgICAgICAgbGF5ZXJHcmFwaGljc1JlY3QgPSBsYXllckFyZWE7
CisgICAgICAgIGxheWVyR3JhcGhpY3NSZWN0Lm1vdmUobV9vZmZzZXQpOwogICAgIH0KIAogICAg
IC8vIFdlIGV4cGFuZCB0aGUgYXJlYSBieSB0aGUgYmx1ciByYWRpdXMgdG8gZ2l2ZSBleHRyYSBz
cGFjZSBmb3IgdGhlIGJsdXIgdHJhbnNpdGlvbi4KICAgICBpZiAobV90eXBlID09IEJsdXJTaGFk
b3cpIHsKLSAgICAgICAgbGF5ZXJGbG9hdFJlY3QuaW5mbGF0ZShtX2JsdXJEaXN0YW5jZSk7Cisg
ICAgICAgIGxheWVyR3JhcGhpY3NSZWN0LmluZmxhdGUobV9ibHVyRGlzdGFuY2UpOwogICAgICAg
ICBpbmZsYXRpb24gKz0gbV9ibHVyRGlzdGFuY2U7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHVu
Y2xpcHBlZExheWVyUmVjdCA9IGxheWVyRmxvYXRSZWN0OworICAgIEdyYXBoaWNzUmVjdCB1bmNs
aXBwZWRMYXllclJlY3QgPSBsYXllckdyYXBoaWNzUmVjdDsKIAotICAgIGlmICghY2xpcFJlY3Qu
Y29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChsYXllckZsb2F0UmVjdCkpKSB7CisgICAgaWYgKCFj
bGlwUmVjdC5jb250YWlucyhlbmNsb3NpbmdJbnRSZWN0KGxheWVyR3JhcGhpY3NSZWN0KSkpIHsK
ICAgICAgICAgLy8gTm8gbmVlZCB0byBoYXZlIHRoZSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIGNs
aXAuCi0gICAgICAgIGxheWVyRmxvYXRSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7CisgICAgICAg
IGxheWVyR3JhcGhpY3NSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7CiAKICAgICAgICAgLy8gSWYg
d2UgYXJlIHRvdGFsbHkgb3V0c2lkZSB0aGUgY2xpcCByZWdpb24sIHdlIGFyZW4ndCBwYWludGlu
ZyBhdCBhbGwuCi0gICAgICAgIGlmIChsYXllckZsb2F0UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IGlmIChsYXllckdyYXBoaWNzUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW50
UmVjdCgwLCAwLCAwLCAwKTsKIAogICAgICAgICAvLyBXZSBhZGp1c3QgYWdhaW4gYmVjYXVzZSB0
aGUgcGl4ZWxzIGF0IHRoZSBib3JkZXJzIGFyZSBzdGlsbAogICAgICAgICAvLyBwb3RlbnRpYWxs
eSBhZmZlY3RlZCBieSB0aGUgcGl4ZWxzIG91dHNpZGUgdGhlIGJ1ZmZlci4KICAgICAgICAgaWYg
KG1fdHlwZSA9PSBCbHVyU2hhZG93KSB7Ci0gICAgICAgICAgICBsYXllckZsb2F0UmVjdC5pbmZs
YXRlKG1fYmx1ckRpc3RhbmNlKTsKKyAgICAgICAgICAgIGxheWVyR3JhcGhpY3NSZWN0LmluZmxh
dGUobV9ibHVyRGlzdGFuY2UpOwogICAgICAgICAgICAgdW5jbGlwcGVkTGF5ZXJSZWN0LmluZmxh
dGUobV9ibHVyRGlzdGFuY2UpOwogICAgICAgICAgICAgaW5mbGF0aW9uICs9IG1fYmx1ckRpc3Rh
bmNlOwogICAgICAgICB9CkBAIC0yNDksMTggKzI0OSwxOCBAQCBJbnRSZWN0IENvbnRleHRTaGFk
b3c6OmNhbGN1bGF0ZUxheWVyQm91CiAKICAgICBjb25zdCBpbnQgZnJhbWVTaXplID0gaW5mbGF0
aW9uICogMjsKICAgICBtX3NvdXJjZVJlY3QgPSBJbnRSZWN0KDAsIDAsIGxheWVyQXJlYS53aWR0
aCgpICsgZnJhbWVTaXplLCBsYXllckFyZWEuaGVpZ2h0KCkgKyBmcmFtZVNpemUpOwotICAgIG1f
bGF5ZXJPcmlnaW4gPSBGbG9hdFBvaW50KGxheWVyRmxvYXRSZWN0LngoKSwgbGF5ZXJGbG9hdFJl
Y3QueSgpKTsKKyAgICBtX2xheWVyT3JpZ2luID0gR3JhcGhpY3NQb2ludChsYXllckdyYXBoaWNz
UmVjdC54KCksIGxheWVyR3JhcGhpY3NSZWN0LnkoKSk7CiAKLSAgICBjb25zdCBGbG9hdFBvaW50
IG1fdW5jbGlwcGVkTGF5ZXJPcmlnaW4gPSBGbG9hdFBvaW50KHVuY2xpcHBlZExheWVyUmVjdC54
KCksIHVuY2xpcHBlZExheWVyUmVjdC55KCkpOwotICAgIGNvbnN0IEZsb2F0U2l6ZSBjbGlwcGVk
T3V0ID0gbV91bmNsaXBwZWRMYXllck9yaWdpbiAtIG1fbGF5ZXJPcmlnaW47CisgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCBtX3VuY2xpcHBlZExheWVyT3JpZ2luID0gR3JhcGhpY3NQb2ludCh1bmNs
aXBwZWRMYXllclJlY3QueCgpLCB1bmNsaXBwZWRMYXllclJlY3QueSgpKTsKKyAgICBjb25zdCBH
cmFwaGljc1NpemUgY2xpcHBlZE91dCA9IG1fdW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVy
T3JpZ2luOwogCiAgICAgLy8gU2V0IHRoZSBvcmlnaW4gYXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBv
ZiB0aGUgc2NyYXRjaCBpbWFnZSwgb3IsIGluIGNhc2UgdGhlcmUncyBhIGNsaXBwZWQKICAgICAv
LyBvdXQgcmVnaW9uLCBzZXQgdGhlIG9yaWdpbiBhY2NvcmRpbmdseSB0byB0aGUgZnVsbCBib3Vu
ZGluZyByZWN0J3MgdG9wLWxlZnQgY29ybmVyLgogICAgIGNvbnN0IGZsb2F0IHRyYW5zbGF0aW9u
WCA9IC1sYXllckFyZWEueCgpICsgaW5mbGF0aW9uIC0gZmFic2YoY2xpcHBlZE91dC53aWR0aCgp
KTsKICAgICBjb25zdCBmbG9hdCB0cmFuc2xhdGlvblkgPSAtbGF5ZXJBcmVhLnkoKSArIGluZmxh
dGlvbiAtIGZhYnNmKGNsaXBwZWRPdXQuaGVpZ2h0KCkpOwotICAgIG1fbGF5ZXJDb250ZXh0VHJh
bnNsYXRpb24gPSBGbG9hdFBvaW50KHRyYW5zbGF0aW9uWCwgdHJhbnNsYXRpb25ZKTsKKyAgICBt
X2xheWVyQ29udGV4dFRyYW5zbGF0aW9uID0gR3JhcGhpY3NQb2ludCh0cmFuc2xhdGlvblgsIHRy
YW5zbGF0aW9uWSk7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChsYXllckZsb2F0UmVj
dCk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobGF5ZXJHcmFwaGljc1JlY3QpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db250ZXh0U2hhZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogI2RlZmluZSBDb250ZXh0U2hhZG93X2gKIAogI2luY2x1ZGUg
IkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
QEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAKICAgICBDb2xvciBtX2NvbG9yOwogICAgIGlu
dCBtX2JsdXJEaXN0YW5jZTsKLSAgICBGbG9hdFNpemUgbV9vZmZzZXQ7CisgICAgR3JhcGhpY3NT
aXplIG1fb2Zmc2V0OwogCiAgICAgQ29udGV4dFNoYWRvdygpOwotICAgIENvbnRleHRTaGFkb3co
Y29uc3QgQ29sb3ImLCBmbG9hdCByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKKyAg
ICBDb250ZXh0U2hhZG93KGNvbnN0IENvbG9yJiwgZmxvYXQgcmFkaXVzLCBjb25zdCBHcmFwaGlj
c1NpemUmIG9mZnNldCk7CiAKICAgICBib29sIG11c3RVc2VDb250ZXh0U2hhZG93KEdyYXBoaWNz
Q29udGV4dCopOwogICAgIHZvaWQgY2xlYXIoKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6
CiAgICAgLy8gb3JpZ2luYWwgY29udGV4dC4gSWYgYmx1ciByYWRpdXMgaXMgc3BlY2lmaWVkLCB0
aGUgc2hhZG93IHdpbGwgYmUKICAgICAvLyBmaWx0ZXJlZCBmaXJzdC4KIAotICAgIFBsYXRmb3Jt
Q29udGV4dCBiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgbGF5ZXJBcmVhKTsKKyAgICBQbGF0Zm9ybUNvbnRleHQgYmVnaW5TaGFkb3dMYXllcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSk7CiAgICAgdm9pZCBl
bmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqKTsKICAgICBzdGF0aWMgdm9pZCBwdXJnZVNj
cmF0Y2hCdWZmZXIoKTsKIApAQCAtMTI2LDE0ICsxMjYsMTQgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBQbGF0Zm9ybUltYWdlIG1fbGF5ZXJJbWFnZTsgLy8gQnVmZmVyIHRvIHdoZXJlIHRoZSB0
ZW1wb3Jhcnkgc2hhZG93IHdpbGwgYmUgZHJhd24gdG8uCiAgICAgUGxhdGZvcm1Db250ZXh0IG1f
bGF5ZXJDb250ZXh0OyAvLyBDb250ZXh0IHVzZWQgdG8gcGFpbnQgdGhlIHNoYWRvdyB0byB0aGUg
bGF5ZXIgaW1hZ2UuCi0gICAgRmxvYXRSZWN0IG1fc291cmNlUmVjdDsgLy8gU3ViLXJlY3Qgb2Yg
bV9sYXllckltYWdlIHRoYXQgY29udGFpbnMgdGhlIHNoYWRvdyBwaXhlbHMuCi0gICAgRmxvYXRQ
b2ludCBtX2xheWVyT3JpZ2luOyAvLyBUb3AtbGVmdCBjb3JuZXIgb2YgdGhlIChwb3NzaWJseSBj
bGlwcGVkKSBib3VuZGluZyByZWN0IHRvIGRyYXcgdGhlIHNoYWRvdyB0by4KLSAgICBGbG9hdFBv
aW50IG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247IC8vIFRyYW5zbGF0aW9uIHRvIGFwcGx5IHRv
IG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93IHRvIGJlIGNvcnJlY3RseSBjbGlwcGVkLgor
ICAgIEdyYXBoaWNzUmVjdCBtX3NvdXJjZVJlY3Q7IC8vIFN1Yi1yZWN0IG9mIG1fbGF5ZXJJbWFn
ZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFkb3cgcGl4ZWxzLgorICAgIEdyYXBoaWNzUG9pbnQgbV9s
YXllck9yaWdpbjsgLy8gVG9wLWxlZnQgY29ybmVyIG9mIHRoZSAocG9zc2libHkgY2xpcHBlZCkg
Ym91bmRpbmcgcmVjdCB0byBkcmF3IHRoZSBzaGFkb3cgdG8uCisgICAgR3JhcGhpY3NQb2ludCBt
X2xheWVyQ29udGV4dFRyYW5zbGF0aW9uOyAvLyBUcmFuc2xhdGlvbiB0byBhcHBseSB0byBtX2xh
eWVyQ29udGV4dCBmb3IgdGhlIHNoYWRvdyB0byBiZSBjb3JyZWN0bHkgY2xpcHBlZC4KICAgICBi
b29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAKICAgICB2b2lkIGFkanVzdEJsdXJEaXN0
YW5jZShHcmFwaGljc0NvbnRleHQqKTsKICAgICB2b2lkIGJsdXJMYXllckltYWdlKHVuc2lnbmVk
IGNoYXIqLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGludCBzdHJpZGUpOwotICAgIEludFJl
Y3QgY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKKyAgICBJbnRSZWN0
IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBo
aWNzUmVjdCYgbGF5ZXJBcmVhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CiAKICNpZiBVU0Uo
Q0FJUk8pCiAgICAgdm9pZCBkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYgc2hhZG93UmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdFJh
ZGl1cywgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEludFNpemUmIGJvdHRv
bUxlZnRSYWRpdXMsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzLCBmbG9hdCBhbHBo
YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQzRC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1
aXMgPGJ1aXNAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkZsb2F0
UG9pbnQzRC5oIgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXZvaWQgRmxvYXRQb2ludDNEOjpub3JtYWxpemUoKQotewotICAgIGZsb2F0IHRlbXBMZW5ndGgg
PSBsZW5ndGgoKTsKLQotICAgIGlmICh0ZW1wTGVuZ3RoKSB7Ci0gICAgICAgIG1feCAvPSB0ZW1w
TGVuZ3RoOwotICAgICAgICBtX3kgLz0gdGVtcExlbmd0aDsKLSAgICAgICAgbV96IC89IHRlbXBM
ZW5ndGg7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
LSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAg
ICAgICAgICAgICAgICAgIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+Ci0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwot
Ci0jaWZuZGVmIEZsb2F0UG9pbnQzRF9oCi0jZGVmaW5lIEZsb2F0UG9pbnQzRF9oCi0KLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRmxvYXRQ
b2ludDNEIHsKLXB1YmxpYzoKLSAgICBGbG9hdFBvaW50M0QoKQotICAgICAgICA6IG1feCgwKQot
ICAgICAgICAsIG1feSgwKQotICAgICAgICAsIG1feigwKQotICAgIHsKLSAgICB9Ci0KLSAgICBG
bG9hdFBvaW50M0QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKLSAgICAgICAgOiBtX3goeCkK
LSAgICAgICAgLCBtX3koeSkKLSAgICAgICAgLCBtX3ooeikKLSAgICB7Ci0gICAgfQotCi0gICAg
RmxvYXRQb2ludDNEKGNvbnN0IEZsb2F0UG9pbnQmIHApCi0gICAgICAgIDogbV94KHAueCgpKQot
ICAgICAgICAsIG1feShwLnkoKSkKLSAgICAgICAgLCBtX3ooMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgRmxvYXRQb2ludDNEKGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKLSAgICAgICAgOiBtX3gocC54
KCkpCi0gICAgICAgICwgbV95KHAueSgpKQotICAgICAgICAsIG1feihwLnooKSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQotICAgIHZvaWQgc2V0
WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KLQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBt
X3k7IH0KLSAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5OyB9Ci0KLSAgICBmbG9hdCB6
KCkgY29uc3QgeyByZXR1cm4gbV96OyB9Ci0gICAgdm9pZCBzZXRaKGZsb2F0IHopIHsgbV96ID0g
ejsgfQotICAgIHZvaWQgc2V0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCi0gICAgewotICAg
ICAgICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5OwotICAgICAgICBtX3ogPSB6OwotICAgIH0K
LSAgICB2b2lkIG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkeikKLSAgICB7Ci0gICAg
ICAgIG1feCArPSBkeDsKLSAgICAgICAgbV95ICs9IGR5OwotICAgICAgICBtX3ogKz0gZHo7Ci0g
ICAgfQotICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzeikKLSAgICB7
Ci0gICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5OwotICAgICAgICBtX3ogKj0g
c3o7Ci0gICAgfQotCi0gICAgYm9vbCBpc1plcm8oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuICFtX3ggJiYgIW1feSAmJiAhbV96OwotICAgIH0KLQotICAgIHZvaWQgbm9ybWFsaXplKCk7
Ci0KLSAgICBmbG9hdCBkb3QoY29uc3QgRmxvYXRQb2ludDNEJiBhKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1feCAqIGEueCgpICsgbV95ICogYS55KCkgKyBtX3ogKiBhLnooKTsKLSAg
ICB9Ci0KLSAgICAvLyBTZXRzIHRoaXMgRmxvYXRQb2ludDNEIHRvIHRoZSBjcm9zcyBwcm9kdWN0
IG9mIHRoZSBwYXNzZWQgdHdvLgotICAgIC8vIEl0IGlzIHNhZmUgZm9yICJ0aGlzIiB0byBiZSB0
aGUgc2FtZSBhcyBlaXRoZXIgb3IgYm90aCBvZiB0aGUKLSAgICAvLyBhcmd1bWVudHMuCi0gICAg
dm9pZCBjcm9zcyhjb25zdCBGbG9hdFBvaW50M0QmIGEsIGNvbnN0IEZsb2F0UG9pbnQzRCYgYikK
LSAgICB7Ci0gICAgICAgIGZsb2F0IHggPSBhLnkoKSAqIGIueigpIC0gYS56KCkgKiBiLnkoKTsK
LSAgICAgICAgZmxvYXQgeSA9IGEueigpICogYi54KCkgLSBhLngoKSAqIGIueigpOwotICAgICAg
ICBmbG9hdCB6ID0gYS54KCkgKiBiLnkoKSAtIGEueSgpICogYi54KCk7Ci0gICAgICAgIG1feCA9
IHg7Ci0gICAgICAgIG1feSA9IHk7Ci0gICAgICAgIG1feiA9IHo7Ci0gICAgfQotCi0gICAgLy8g
Q29udmVuaWVuY2UgZnVuY3Rpb24gcmV0dXJuaW5nICJ0aGlzIGNyb3NzIHBvaW50IiBhcyBhCi0g
ICAgLy8gc3RhY2stYWxsb2NhdGVkIHJlc3VsdC4KLSAgICBGbG9hdFBvaW50M0QgY3Jvc3MoY29u
c3QgRmxvYXRQb2ludDNEJiBwb2ludCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQz
RCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5jcm9zcygqdGhpcywgcG9pbnQpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGZsb2F0IGxlbmd0aFNxdWFyZWQoKSBjb25zdCB7
IHJldHVybiB0aGlzLT5kb3QoKnRoaXMpOyB9Ci0gICAgZmxvYXQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJlZCgpKTsgfQotICAgIAotICAgIGZsb2F0IGRpc3RhbmNl
VG8oY29uc3QgRmxvYXRQb2ludDNEJiBhKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBt
X3g7Ci0gICAgZmxvYXQgbV95OwotICAgIGZsb2F0IG1fejsKLX07Ci0KLWlubGluZSBGbG9hdFBv
aW50M0QmIG9wZXJhdG9yICs9KEZsb2F0UG9pbnQzRCYgYSwgY29uc3QgRmxvYXRQb2ludDNEJiBi
KQotewotICAgIGEubW92ZShiLngoKSwgYi55KCksIGIueigpKTsKLSAgICByZXR1cm4gYTsKLX0K
LQotaW5saW5lIEZsb2F0UG9pbnQzRCYgb3BlcmF0b3IgLT0oRmxvYXRQb2ludDNEJiBhLCBjb25z
dCBGbG9hdFBvaW50M0QmIGIpCi17Ci0gICAgYS5tb3ZlKC1iLngoKSwgLWIueSgpLCAtYi56KCkp
OwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludDNEIG9wZXJhdG9yKyhjb25z
dCBGbG9hdFBvaW50M0QmIGEsIGNvbnN0IEZsb2F0UG9pbnQzRCYgYikKLXsKLSAgICByZXR1cm4g
RmxvYXRQb2ludDNEKGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCksIGEueigpICsgYi56KCkp
OwotfQotCi1pbmxpbmUgRmxvYXRQb2ludDNEIG9wZXJhdG9yLShjb25zdCBGbG9hdFBvaW50M0Qm
IGEsIGNvbnN0IEZsb2F0UG9pbnQzRCYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKGEu
eCgpIC0gYi54KCksIGEueSgpIC0gYi55KCksIGEueigpIC0gYi56KCkpOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZsb2F0UG9pbnQzRCYgYSwgY29uc3QgRmxvYXRQb2ludDNE
JiBiKQotewotICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKSAmJiBh
LnooKSA9PSBiLnooKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFBv
aW50M0QmIGEsIGNvbnN0IEZsb2F0UG9pbnQzRCYgYikKLXsKLSAgICByZXR1cm4gYS54KCkgIT0g
Yi54KCkgfHwgYS55KCkgIT0gYi55KCkgfHwgYS56KCkgIT0gYi56KCk7Ci19Ci0KLWlubGluZSBm
bG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0Qm
IGIpCi17Ci0gICAgLy8gZG90IHByb2R1Y3QKLSAgICByZXR1cm4gYS5kb3QoYik7Ci19Ci0KLWlu
bGluZSBGbG9hdFBvaW50M0Qgb3BlcmF0b3IqKGZsb2F0IGssIGNvbnN0IEZsb2F0UG9pbnQzRCYg
dikKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKGsgKiB2LngoKSwgayAqIHYueSgpLCBrICog
di56KCkpOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludDNEIG9wZXJhdG9yKihjb25zdCBGbG9hdFBv
aW50M0QmIHYsIGZsb2F0IGspCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChrICogdi54KCks
IGsgKiB2LnkoKSwgayAqIHYueigpKTsKLX0KLQotaW5saW5lIGZsb2F0IEZsb2F0UG9pbnQzRDo6
ZGlzdGFuY2VUbyhjb25zdCBGbG9hdFBvaW50M0QmIGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICgq
dGhpcyAtIGEpLmxlbmd0aCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBGbG9hdFBvaW50M0RfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1h
dGguaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNv
bnN0IEludFBvaW50JiBwKSA6IG1feChwLngoKSksIG1feShwLnkoKSkKLXsKLX0KLQotdm9pZCBG
bG9hdFBvaW50Ojpub3JtYWxpemUoKQotewotICAgIGZsb2F0IHRlbXBMZW5ndGggPSBsZW5ndGgo
KTsKLQotICAgIGlmICh0ZW1wTGVuZ3RoKSB7Ci0gICAgICAgIG1feCAvPSB0ZW1wTGVuZ3RoOwot
ICAgICAgICBtX3kgLz0gdGVtcExlbmd0aDsKLSAgICB9Ci19Ci0KLWZsb2F0IEZsb2F0UG9pbnQ6
Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7Ci19
Ci0KLUZsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAotewotICAgIGRvdWJsZSBuZXdYLCBuZXdZOwotICAg
IHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3gpLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1feSksIG5ld1gsIG5ld1kpOwotICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb24obmV3WCwg
bmV3WSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmxvYXRQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIGNvbnN0Ci17Ci0gICAgZG91YmxlIG5l
d1gsIG5ld1k7Ci0gICAgdHJhbnNmb3JtLm1hcChzdGF0aWNfY2FzdDxkb3VibGU+KG1feCksIHN0
YXRpY19jYXN0PGRvdWJsZT4obV95KSwgbmV3WCwgbmV3WSk7Ci0gICAgcmV0dXJuIG5hcnJvd1By
ZWNpc2lvbihuZXdYLCBuZXdZKTsKLX0KLQotRmxvYXRQb2ludCBGbG9hdFBvaW50OjpuYXJyb3dQ
cmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5KQotewotICAgIHJldHVybiBGbG9hdFBvaW50KG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoeCksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeSkpOwotfQot
Ci1mbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHAyLCBmbG9hdCYgYykKLXsKLSAgICBpZiAocDIueCgpID09IHAxLngoKSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOwotCi0gICAgLy8geSA9
IG14ICsgYwotICAgIGZsb2F0IHNsb3BlID0gKHAyLnkoKSAtIHAxLnkoKSkgLyAocDIueCgpIC0g
cDEueCgpKTsKLSAgICBjID0gcDEueSgpIC0gc2xvcGUgKiBwMS54KCk7Ci0gICAgcmV0dXJuIHNs
b3BlOwotfQotCi1ib29sIGZpbmRJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBkMSwgY29uc3QgRmxvYXRQb2lu
dCYgZDIsIEZsb2F0UG9pbnQmIGludGVyc2VjdGlvbikgCi17Ci0gICAgZmxvYXQgcE9mZnNldCA9
IDA7Ci0gICAgZmxvYXQgcFNsb3BlID0gZmluZFNsb3BlKHAxLCBwMiwgcE9mZnNldCk7Ci0KLSAg
ICBmbG9hdCBkT2Zmc2V0ID0gMDsKLSAgICBmbG9hdCBkU2xvcGUgPSBmaW5kU2xvcGUoZDEsIGQy
LCBkT2Zmc2V0KTsKLQotICAgIGlmIChkU2xvcGUgPT0gcFNsb3BlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgaWYgKHBTbG9wZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSkgewotICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WChwMS54KCkpOwotICAg
ICAgICBpbnRlcnNlY3Rpb24uc2V0WShkU2xvcGUgKiBpbnRlcnNlY3Rpb24ueCgpICsgZE9mZnNl
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoZFNsb3BlID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7Ci0gICAgICAgIGludGVyc2VjdGlv
bi5zZXRYKGQxLngoKSk7Ci0gICAgICAgIGludGVyc2VjdGlvbi5zZXRZKHBTbG9wZSAqIGludGVy
c2VjdGlvbi54KCkgKyBwT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IAotICAgIC8vIEZpbmQgeCBhdCBpbnRlcnNlY3Rpb24sIHdoZXJlIHlzIG92ZXJsYXA7IHggPSAo
YycgLSBjKSAvIChtIC0gbScpCi0gICAgaW50ZXJzZWN0aW9uLnNldFgoKGRPZmZzZXQgLSBwT2Zm
c2V0KSAvIChwU2xvcGUgLSBkU2xvcGUpKTsKLSAgICBpbnRlcnNlY3Rpb24uc2V0WShwU2xvcGUg
KiBpbnRlcnNlY3Rpb24ueCgpICsgcE9mZnNldCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgRmxvYXRQb2ludF9oCi0jZGVmaW5lIEZsb2F0UG9pbnRfaAotCi0jaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotCi0jaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCi10
eXBlZGVmIHN0cnVjdCBDR1BvaW50IENHUG9pbnQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1B
QykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQotI2lmZGVmIE5TR0VPTUVU
UllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCi10eXBlZGVmIHN0cnVjdCBDR1BvaW50
IE5TUG9pbnQ7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKLSNlbmRp
ZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJxZ2xvYmFsLmgiCi1RVF9C
RUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludEY7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKEhBSUtVKQotY2xhc3MgQlBvaW50OwotI2VuZGlmCi0KLSNpZiBVU0Uo
U0tJQSkKLXN0cnVjdCBTa1BvaW50OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci1jbGFz
cyBJbnRQb2ludDsKLWNsYXNzIEludFNpemU7Ci0KLWNsYXNzIEZsb2F0UG9pbnQgewotcHVibGlj
OgotICAgIEZsb2F0UG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQotICAgIEZsb2F0UG9pbnQo
ZmxvYXQgeCwgZmxvYXQgeSkgOiBtX3goeCksIG1feSh5KSB7IH0KLSAgICBGbG9hdFBvaW50KGNv
bnN0IEludFBvaW50Jik7Ci0KLQotICAgIHN0YXRpYyBGbG9hdFBvaW50IHplcm8oKSB7IHJldHVy
biBGbG9hdFBvaW50KCk7IH0KLQotICAgIHN0YXRpYyBGbG9hdFBvaW50IG5hcnJvd1ByZWNpc2lv
bihkb3VibGUgeCwgZG91YmxlIHkpOwotCi0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1f
eDsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgIHZvaWQgc2V0
WChmbG9hdCB4KSB7IG1feCA9IHg7IH0KLSAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX3kgPSB5
OyB9Ci0gICAgdm9pZCBzZXQoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICB7Ci0gICAgICAgIG1feCA9
IHg7Ci0gICAgICAgIG1feSA9IHk7Ci0gICAgfQotICAgIHZvaWQgbW92ZShmbG9hdCBkeCwgZmxv
YXQgZHkpCi0gICAgewotICAgICAgICBtX3ggKz0gZHg7Ci0gICAgICAgIG1feSArPSBkeTsKLSAg
ICB9Ci0gICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIGEpCi0gICAgewotICAgICAgICBtX3gg
Kz0gYS53aWR0aCgpOwotICAgICAgICBtX3kgKz0gYS5oZWlnaHQoKTsKLSAgICB9Ci0gICAgdm9p
ZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgYSkKLSAgICB7Ci0gICAgICAgIG1feCArPSBhLndpZHRo
KCk7Ci0gICAgICAgIG1feSArPSBhLmhlaWdodCgpOwotICAgIH0KLSAgICB2b2lkIG1vdmVCeShj
b25zdCBJbnRQb2ludCYgYSkKLSAgICB7Ci0gICAgICAgIG1feCArPSBhLngoKTsKLSAgICAgICAg
bV95ICs9IGEueSgpOwotICAgIH0KLSAgICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBh
KQotICAgIHsKLSAgICAgICAgbV94ICs9IGEueCgpOwotICAgICAgICBtX3kgKz0gYS55KCk7Ci0g
ICAgfQotICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQotICAgIHsKLSAgICAgICAg
bV94ICo9IHN4OwotICAgICAgICBtX3kgKj0gc3k7Ci0gICAgfQotCi0gICAgdm9pZCBub3JtYWxp
emUoKTsKLQotICAgIGZsb2F0IGRvdChjb25zdCBGbG9hdFBvaW50JiBhKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1feCAqIGEueCgpICsgbV95ICogYS55KCk7Ci0gICAgfQotCi0gICAg
ZmxvYXQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgZmxvYXQgbGVuZ3RoU3F1YXJlZCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95OwotICAgIH0KLQotICAg
IEZsb2F0UG9pbnQgZXhwYW5kZWRUbyhjb25zdCBGbG9hdFBvaW50JiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KHN0ZDo6bWF4KG1feCwgb3RoZXIubV94KSwg
c3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IHRyYW5z
cG9zZWRQb2ludCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChtX3ks
IG1feCk7Ci0gICAgfQotCi0jaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0p
Ci0gICAgRmxvYXRQb2ludChjb25zdCBDR1BvaW50Jik7Ci0gICAgb3BlcmF0b3IgQ0dQb2ludCgp
IGNvbnN0OwotI2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01F
VFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKLSAgICAgICAgfHwgKFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQotICAgIEZsb2F0UG9pbnQoY29uc3QgTlNQb2lu
dCYpOwotICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgRmxvYXRQb2ludChjb25zdCBRUG9pbnRGJik7Ci0gICAgb3BlcmF0b3IgUVBv
aW50RigpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShIQUlLVSkKLSAgICBGbG9hdFBv
aW50KGNvbnN0IEJQb2ludCYpOwotICAgIG9wZXJhdG9yIEJQb2ludCgpIGNvbnN0OwotI2VuZGlm
Ci0KLSNpZiBVU0UoU0tJQSkKLSAgICBvcGVyYXRvciBTa1BvaW50KCkgY29uc3Q7Ci0gICAgRmxv
YXRQb2ludChjb25zdCBTa1BvaW50Jik7Ci0jZW5kaWYKLQotICAgIEZsb2F0UG9pbnQgbWF0cml4
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7Ci0gICAgRmxvYXRQ
b2ludCBtYXRyaXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgZmxvYXQgbV94LCBtX3k7Ci19OwotCi0KLWlubGluZSBGbG9hdFBvaW50JiBv
cGVyYXRvcis9KEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLm1v
dmUoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZs
b2F0UG9pbnQmIG9wZXJhdG9yKz0oRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikK
LXsKLSAgICBhLm1vdmUoYi54KCksIGIueSgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5l
IEZsb2F0UG9pbnQmIG9wZXJhdG9yLT0oRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRTaXplJiBi
KQotewotICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGE7
Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50IG9wZXJhdG9yKyhjb25zdCBGbG9hdFBvaW50JiBhLCBj
b25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoYS54KCkgKyBiLndp
ZHRoKCksIGEueSgpICsgYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50IG9wZXJh
dG9yKyhjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiKQotewotICAgIHJl
dHVybiBGbG9hdFBvaW50KGEueCgpICsgYi54KCksIGEueSgpICsgYi55KCkpOwotfQotCi1pbmxp
bmUgRmxvYXRTaXplIG9wZXJhdG9yLShjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBv
aW50JiBiKQotewotICAgIHJldHVybiBGbG9hdFNpemUoYS54KCkgLSBiLngoKSwgYS55KCkgLSBi
LnkoKSk7Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50IG9wZXJhdG9yLShjb25zdCBGbG9hdFBvaW50
JiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoYS54KCkg
LSBiLndpZHRoKCksIGEueSgpIC0gYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikKLXsKLSAgICBy
ZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkgPT0gYi55KCk7Ci19Ci0KLWlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYgYikKLXsK
LSAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55KCkgIT0gYi55KCk7Ci19Ci0KLWlubGlu
ZSBmbG9hdCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYg
YikKLXsKLSAgICAvLyBkb3QgcHJvZHVjdAotICAgIHJldHVybiBhLmRvdChiKTsKLX0KLQotaW5s
aW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAg
IHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngoKSkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihwLnkoKSkpKTsKLX0KLQotaW5saW5lIEludFBvaW50IGZsb29yZWRJ
bnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJldHVybiBJbnRQb2ludChzdGF0
aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwotfQotCi1pbmxp
bmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBGbG9hdFBvaW50JiBwKQotewotICAgIHJl
dHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAu
eSgpKSk7Ci19Ci0KLWZsb2F0IGZpbmRTbG9wZShjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3Qg
RmxvYXRQb2ludCYgcDIsIGZsb2F0JiBjKTsKLQotLy8gRmluZCBwb2ludCB3aGVyZSBsaW5lcyB0
aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxzZSBp
ZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgotYm9vbCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYg
ZDEsIGNvbnN0IEZsb2F0UG9pbnQmIGQyLCBGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pOwotCi19
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRR
dWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLQotdXNpbmcgc3RkOjptYXg7Ci11c2luZyBzdGQ6Om1pbjsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGZsb2F0IG1pbjQoZmxvYXQgYSwgZmxv
YXQgYiwgZmxvYXQgYywgZmxvYXQgZCkKLXsKLSAgICByZXR1cm4gbWluKG1pbihhLCBiKSwgbWlu
KGMsIGQpKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBtYXg0KGZsb2F0IGEsIGZsb2F0IGIs
IGZsb2F0IGMsIGZsb2F0IGQpCi17Ci0gICAgcmV0dXJuIG1heChtYXgoYSwgYiksIG1heChjLCBk
KSk7Ci19Ci0KLWlubGluZSBmbG9hdCBkb3QoY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9h
dFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIGEud2lkdGgoKSAqIGIud2lkdGgoKSArIGEuaGVpZ2h0
KCkgKiBiLmhlaWdodCgpOwotfQotCi1pbmxpbmUgYm9vbCBpc1BvaW50SW5UcmlhbmdsZShjb25z
dCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiB0MSwgY29uc3QgRmxvYXRQb2ludCYg
dDIsIGNvbnN0IEZsb2F0UG9pbnQmIHQzKQotewotICAgIC8vIENvbXB1dGUgdmVjdG9ycyAgICAg
ICAgCi0gICAgRmxvYXRTaXplIHYwID0gdDMgLSB0MTsKLSAgICBGbG9hdFNpemUgdjEgPSB0MiAt
IHQxOwotICAgIEZsb2F0U2l6ZSB2MiA9IHAgLSB0MTsKLSAgICAKLSAgICAvLyBDb21wdXRlIGRv
dCBwcm9kdWN0cwotICAgIGZsb2F0IGRvdDAwID0gZG90KHYwLCB2MCk7Ci0gICAgZmxvYXQgZG90
MDEgPSBkb3QodjAsIHYxKTsKLSAgICBmbG9hdCBkb3QwMiA9IGRvdCh2MCwgdjIpOwotICAgIGZs
b2F0IGRvdDExID0gZG90KHYxLCB2MSk7Ci0gICAgZmxvYXQgZG90MTIgPSBkb3QodjEsIHYyKTsK
LQotICAgIC8vIENvbXB1dGUgYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMKLSAgICBmbG9hdCBpbnZE
ZW5vbSA9IDEuMGYgLyAoZG90MDAgKiBkb3QxMSAtIGRvdDAxICogZG90MDEpOwotICAgIGZsb2F0
IHUgPSAoZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIpICogaW52RGVub207Ci0gICAgZmxv
YXQgdiA9IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikgKiBpbnZEZW5vbTsKLQotICAg
IC8vIENoZWNrIGlmIHBvaW50IGlzIGluIHRyaWFuZ2xlCi0gICAgcmV0dXJuICh1ID49IDApICYm
ICh2ID49IDApICYmICh1ICsgdiA8PSAxKTsKLX0KLQotRmxvYXRSZWN0IEZsb2F0UXVhZDo6Ym91
bmRpbmdCb3goKSBjb25zdAotewotICAgIGZsb2F0IGxlZnQgICA9IG1pbjQobV9wMS54KCksIG1f
cDIueCgpLCBtX3AzLngoKSwgbV9wNC54KCkpOwotICAgIGZsb2F0IHRvcCAgICA9IG1pbjQobV9w
MS55KCksIG1fcDIueSgpLCBtX3AzLnkoKSwgbV9wNC55KCkpOwotCi0gICAgZmxvYXQgcmlnaHQg
ID0gbWF4NChtX3AxLngoKSwgbV9wMi54KCksIG1fcDMueCgpLCBtX3A0LngoKSk7Ci0gICAgZmxv
YXQgYm90dG9tID0gbWF4NChtX3AxLnkoKSwgbV9wMi55KCksIG1fcDMueSgpLCBtX3A0LnkoKSk7
Ci0gICAgCi0gICAgcmV0dXJuIEZsb2F0UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKTsKLX0KLQotYm9vbCBGbG9hdFF1YWQ6OmlzUmVjdGlsaW5lYXIoKSBjb25zdAot
ewotICAgIHJldHVybiAobV9wMS54KCkgPT0gbV9wMi54KCkgJiYgbV9wMi55KCkgPT0gbV9wMy55
KCkgJiYgbV9wMy54KCkgPT0gbV9wNC54KCkgJiYgbV9wNC55KCkgPT0gbV9wMS55KCkpCi0gICAg
ICAgIHx8IChtX3AxLnkoKSA9PSBtX3AyLnkoKSAmJiBtX3AyLngoKSA9PSBtX3AzLngoKSAmJiBt
X3AzLnkoKSA9PSBtX3A0LnkoKSAmJiBtX3A0LngoKSA9PSBtX3AxLngoKSk7Ci19Ci0KLWJvb2wg
RmxvYXRRdWFkOjpjb250YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGlzUG9pbnRJblRyaWFuZ2xlKHAsIG1fcDEsIG1fcDIsIG1fcDMpIHx8IGlzUG9p
bnRJblRyaWFuZ2xlKHAsIG1fcDEsIG1fcDMsIG1fcDQpOwotfSAKLQotLy8gTm90ZSB0aGF0IHdl
IG9ubHkgaGFuZGxlIGNvbnZleCBxdWFkcyBoZXJlLgotYm9vbCBGbG9hdFF1YWQ6OmNvbnRhaW5z
UXVhZChjb25zdCBGbG9hdFF1YWQmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBjb250YWlu
c1BvaW50KG90aGVyLnAxKCkpICYmIGNvbnRhaW5zUG9pbnQob3RoZXIucDIoKSkgJiYgY29udGFp
bnNQb2ludChvdGhlci5wMygpKSAmJiBjb250YWluc1BvaW50KG90aGVyLnA0KCkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFF1YWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFF1YWQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBGbG9hdFF1YWRfaAotI2RlZmluZSBGbG9hdFF1YWRfaAotCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBIEZsb2F0UXVhZCBpcyBhIGNv
bGxlY3Rpb24gb2YgNCBwb2ludHMsIG9mdGVuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mCi0v
LyBtYXBwaW5nIGEgcmVjdGFuZ2xlIHRocm91Z2ggdHJhbnNmb3Jtcy4gV2hlbiBpbml0aWFsaXpl
ZCBmcm9tIGEgcmVjdCwgdGhlCi0vLyBwb2ludHMgYXJlIGluIGNsb2Nrd2lzZSBvcmRlciBmcm9t
IHRvcCBsZWZ0LgotY2xhc3MgRmxvYXRRdWFkIHsKLXB1YmxpYzoKLSAgICBGbG9hdFF1YWQoKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFF1YWQoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMywgY29uc3QgRmxvYXRQb2ludCYg
cDQpCi0gICAgICAgIDogbV9wMShwMSkKLSAgICAgICAgLCBtX3AyKHAyKQotICAgICAgICAsIG1f
cDMocDMpCi0gICAgICAgICwgbV9wNChwNCkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRRdWFk
KGNvbnN0IEZsb2F0UmVjdCYgaW5SZWN0KQotICAgICAgICA6IG1fcDEoaW5SZWN0LmxvY2F0aW9u
KCkpCi0gICAgICAgICwgbV9wMihpblJlY3QubWF4WCgpLCBpblJlY3QueSgpKQotICAgICAgICAs
IG1fcDMoaW5SZWN0Lm1heFgoKSwgaW5SZWN0Lm1heFkoKSkKLSAgICAgICAgLCBtX3A0KGluUmVj
dC54KCksIGluUmVjdC5tYXhZKCkpCi0gICAgewotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgcDEo
KSBjb25zdCB7IHJldHVybiBtX3AxOyB9Ci0gICAgRmxvYXRQb2ludCBwMigpIGNvbnN0IHsgcmV0
dXJuIG1fcDI7IH0KLSAgICBGbG9hdFBvaW50IHAzKCkgY29uc3QgeyByZXR1cm4gbV9wMzsgfQot
ICAgIEZsb2F0UG9pbnQgcDQoKSBjb25zdCB7IHJldHVybiBtX3A0OyB9Ci0KLSAgICB2b2lkIHNl
dFAxKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wMSA9IHA7IH0KLSAgICB2b2lkIHNldFAyKGNv
bnN0IEZsb2F0UG9pbnQmIHApIHsgbV9wMiA9IHA7IH0KLSAgICB2b2lkIHNldFAzKGNvbnN0IEZs
b2F0UG9pbnQmIHApIHsgbV9wMyA9IHA7IH0KLSAgICB2b2lkIHNldFA0KGNvbnN0IEZsb2F0UG9p
bnQmIHApIHsgbV9wNCA9IHA7IH0KLQotICAgIC8vIGlzRW1wdHkgdGVzdHMgdGhhdCB0aGUgYm91
bmRpbmcgYm94IGlzIGVtcHR5LiBUaGlzIHdpbGwgbm90IGlkZW50aWZ5Ci0gICAgLy8gInNsYW50
ZWQiIGVtcHR5IHF1YWRzLgotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5k
aW5nQm94KCkuaXNFbXB0eSgpOyB9Ci0KLSAgICAvLyBUZXN0cyB3aGV0aGVyIHRoaXMgcXVhZCBj
YW4gYmUgbG9zc2xlc3NseSByZXByZXNlbnRlZCBieSBhIEZsb2F0UmVjdCwKLSAgICAvLyB0aGF0
IGlzLCBpZiB0d28gZWRnZXMgYXJlIHBhcmFsbGVsIHRvIHRoZSB4LWF4aXMgYW5kIHRoZSBvdGhl
ciB0d28KLSAgICAvLyBhcmUgcGFyYWxsZWwgdG8gdGhlIHktYXhpcy4gSWYgdGhpcyBtZXRob2Qg
cmV0dXJucyB0cnVlLCB0aGUKLSAgICAvLyBjb3JyZXNwb25kaW5nIEZsb2F0UmVjdCBjYW4gYmUg
cmV0cmlldmVkIHdpdGggYm91bmRpbmdCb3goKS4KLSAgICBib29sIGlzUmVjdGlsaW5lYXIoKSBj
b25zdDsKLQotICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhlIGdpdmVuIHBvaW50IGlzIGluc2lkZSwg
b3Igb24gYW4gZWRnZSBvciBjb3JuZXIgb2YgdGhpcyBxdWFkLgotICAgIGJvb2wgY29udGFpbnNQ
b2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0KLSAgICAvLyBUZXN0cyB3aGV0aGVyIHRo
ZSBmb3VyIGNvcm5lcnMgb2Ygb3RoZXIgYXJlIGluc2lkZSwgb3IgY29pbmNpZGVudCB3aXRoIHRo
ZSBzaWRlcyBvZiB0aGlzIHF1YWQuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBm
b3IgY29udmV4IHF1YWRzLCBidXQgdGhhdCBpbmNsdWRlcyBhbGwgcXVhZHMgdGhhdCBvcmlnaW5h
dGUKLSAgICAvLyBmcm9tIHRyYW5zZm9ybWVkIHJlY3RzLgotICAgIGJvb2wgY29udGFpbnNRdWFk
KGNvbnN0IEZsb2F0UXVhZCYpIGNvbnN0OwotCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkg
Y29uc3Q7Ci0gICAgSW50UmVjdCBlbmNsb3NpbmdCb3VuZGluZ0JveCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgewotICAgICAgICBt
X3AxICs9IG9mZnNldDsKLSAgICAgICAgbV9wMiArPSBvZmZzZXQ7Ci0gICAgICAgIG1fcDMgKz0g
b2Zmc2V0OwotICAgICAgICBtX3A0ICs9IG9mZnNldDsKLSAgICB9Ci0KLSAgICB2b2lkIG1vdmUo
ZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIHsKLSAgICAgICAgbV9wMS5tb3ZlKGR4LCBkeSk7Ci0g
ICAgICAgIG1fcDIubW92ZShkeCwgZHkpOwotICAgICAgICBtX3AzLm1vdmUoZHgsIGR5KTsKLSAg
ICAgICAgbV9wNC5tb3ZlKGR4LCBkeSk7Ci0gICAgfQotCi0gICAgdm9pZCBzY2FsZShmbG9hdCBk
eCwgZmxvYXQgZHkpCi0gICAgewotICAgICAgICBtX3AxLnNjYWxlKGR4LCBkeSk7Ci0gICAgICAg
IG1fcDIuc2NhbGUoZHgsIGR5KTsKLSAgICAgICAgbV9wMy5zY2FsZShkeCwgZHkpOwotICAgICAg
ICBtX3A0LnNjYWxlKGR4LCBkeSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZsb2F0UG9pbnQg
bV9wMTsKLSAgICBGbG9hdFBvaW50IG1fcDI7Ci0gICAgRmxvYXRQb2ludCBtX3AzOwotICAgIEZs
b2F0UG9pbnQgbV9wNDsKLX07Ci0KLWlubGluZSBGbG9hdFF1YWQmIG9wZXJhdG9yKz0oRmxvYXRR
dWFkJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgYS5tb3ZlKGIpOwotICAgIHJldHVy
biBhOwotfQotCi1pbmxpbmUgRmxvYXRRdWFkJiBvcGVyYXRvci09KEZsb2F0UXVhZCYgYSwgY29u
c3QgRmxvYXRTaXplJiBiKQotewotICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7
Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRmxvYXRR
dWFkJiBhLCBjb25zdCBGbG9hdFF1YWQmIGIpCi17Ci0gICAgcmV0dXJuIGEucDEoKSA9PSBiLnAx
KCkgJiYKLSAgICAgICAgICAgYS5wMigpID09IGIucDIoKSAmJiAKLSAgICAgICAgICAgYS5wMygp
ID09IGIucDMoKSAmJgotICAgICAgICAgICBhLnA0KCkgPT0gYi5wNCgpOwotfQotCi1pbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQot
ewotICAgIHJldHVybiBhLnAxKCkgIT0gYi5wMSgpIHx8Ci0gICAgICAgICAgIGEucDIoKSAhPSBi
LnAyKCkgfHwgCi0gICAgICAgICAgIGEucDMoKSAhPSBiLnAzKCkgfHwKLSAgICAgICAgICAgYS5w
NCgpICE9IGIucDQoKTsKLX0KLQotfSAgIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLQotI2VuZGlm
IC8vIEZsb2F0UXVhZF9oCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLQotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3RkOjptaW47
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgSW50
UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1fc2l6ZShyLnNpemUoKSkKLXsK
LX0KLQotRmxvYXRSZWN0IEZsb2F0UmVjdDo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3Vi
bGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQotewotICAgIHJldHVybiBGbG9hdFJl
Y3QobmFycm93UHJlY2lzaW9uVG9GbG9hdCh4KSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh5KSwg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoaGVp
Z2h0KSk7Ci19Ci0KLWJvb2wgRmxvYXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYg
b3RoZXIpIGNvbnN0Ci17Ci0gICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRp
dmUgd2lkdGhzIGFzIHdlbGwgYXMgemVyby4KLSAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3Ro
ZXIuaXNFbXB0eSgpCi0gICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkg
PCBtYXhYKCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1h
eFkoKTsKLX0KLQotYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYgb3Ro
ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90
aGVyLm1heFgoKQotICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhl
ci5tYXhZKCk7Ci19Ci0KLXZvaWQgRmxvYXRSZWN0OjppbnRlcnNlY3QoY29uc3QgRmxvYXRSZWN0
JiBvdGhlcikKLXsKLSAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3RoZXIueCgpKTsKLSAgICBmbG9h
dCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBmbG9hdCByID0gbWluKG1heFgoKSwgb3Ro
ZXIubWF4WCgpKTsKLSAgICBmbG9hdCBiID0gbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKTsKLQot
ICAgIC8vIFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGlu
ZyBjYXNlcy4KLSAgICBpZiAobCA+PSByIHx8IHQgPj0gYikgewotICAgICAgICBsID0gMDsKLSAg
ICAgICAgdCA9IDA7Ci0gICAgICAgIHIgPSAwOwotICAgICAgICBiID0gMDsKLSAgICB9Ci0KLSAg
ICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobCwgdCwgciwgYik7Ci19Ci0KLXZvaWQgRmxv
YXRSZWN0Ojp1bml0ZShjb25zdCBGbG9hdFJlY3QmIG90aGVyKQotewotICAgIC8vIEhhbmRsZSBl
bXB0eSBzcGVjaWFsIGNhc2VzIGZpcnN0LgotICAgIGlmIChvdGhlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoaXNFbXB0eSgpKSB7Ci0gICAgICAgICp0aGlzID0gb3RoZXI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCBsID0gbWluKHgoKSwgb3RoZXIu
eCgpKTsKLSAgICBmbG9hdCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBmbG9hdCByID0g
bWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKLSAgICBmbG9hdCBiID0gbWF4KG1heFkoKSwgb3Ro
ZXIubWF4WSgpKTsKLQotICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBi
KTsKLX0KLQotdm9pZCBGbG9hdFJlY3Q6OnVuaXRlSWZOb25aZXJvKGNvbnN0IEZsb2F0UmVjdCYg
b3RoZXIpCi17Ci0gICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNpYWwgY2FzZXMgZmlyc3QuCi0gICAg
aWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpIHsKLSAgICAgICAgKnRoaXMgPSBvdGhlcjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZsb2F0IGxlZnQgPSBtaW4oeCgpLCBvdGhl
ci54KCkpOwotICAgIGZsb2F0IHRvcCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQg
cmlnaHQgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOwotICAgIGZsb2F0IGJvdHRvbSA9IG1h
eChtYXhZKCksIG90aGVyLm1heFkoKSk7Ci0KLSAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRn
ZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLX0KLQotdm9pZCBGbG9hdFJlY3Q6OnNjYWxl
KGZsb2F0IHN4LCBmbG9hdCBzeSkKLXsKLSAgICBtX2xvY2F0aW9uLnNldFgoeCgpICogc3gpOwot
ICAgIG1fbG9jYXRpb24uc2V0WSh5KCkgKiBzeSk7Ci0gICAgbV9zaXplLnNldFdpZHRoKHdpZHRo
KCkgKiBzeCk7Ci0gICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAqIHN5KTsKLX0KLQotdm9p
ZCBGbG9hdFJlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSkKLXsKLSAgICBmbG9hdCBsZWZ0ID0gbWluKHAwLngoKSwgcDEueCgpKTsKLSAg
ICBmbG9hdCB0b3AgPSBtaW4ocDAueSgpLCBwMS55KCkpOwotICAgIGZsb2F0IHJpZ2h0ID0gbWF4
KHAwLngoKSwgcDEueCgpKTsKLSAgICBmbG9hdCBib3R0b20gPSBtYXgocDAueSgpLCBwMS55KCkp
OwotCi0gICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJv
dHRvbSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0vLyBIZWxwZXJzIGZvciAzLSBhbmQgNC13YXkgbWF4
IGFuZCBtaW4uCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCBtaW4zKGNvbnN0IFQmIHYxLCBj
b25zdCBUJiB2MiwgY29uc3QgVCYgdjMpCi17Ci0gICAgcmV0dXJuIG1pbihtaW4odjEsIHYyKSwg
djMpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQgbWF4Myhjb25zdCBUJiB2MSwgY29u
c3QgVCYgdjIsIGNvbnN0IFQmIHYzKQotewotICAgIHJldHVybiBtYXgobWF4KHYxLCB2MiksIHYz
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UIG1pbjQoY29uc3QgVCYgdjEsIGNvbnN0
IFQmIHYyLCBjb25zdCBUJiB2MywgY29uc3QgVCYgdjQpCi17Ci0gICAgcmV0dXJuIG1pbihtaW4o
djEsIHYyKSwgbWluKHYzLCB2NCkpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQgbWF4
NChjb25zdCBUJiB2MSwgY29uc3QgVCYgdjIsIGNvbnN0IFQmIHYzLCBjb25zdCBUJiB2NCkKLXsK
LSAgICByZXR1cm4gbWF4KG1heCh2MSwgdjIpLCBtYXgodjMsIHY0KSk7Ci19Ci0KLX0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQotCi12b2lkIEZsb2F0UmVjdDo6Zml0VG9Qb2ludHMoY29uc3QgRmxv
YXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMikK
LXsKLSAgICBmbG9hdCBsZWZ0ID0gbWluMyhwMC54KCksIHAxLngoKSwgcDIueCgpKTsKLSAgICBm
bG9hdCB0b3AgPSBtaW4zKHAwLnkoKSwgcDEueSgpLCBwMi55KCkpOwotICAgIGZsb2F0IHJpZ2h0
ID0gbWF4MyhwMC54KCksIHAxLngoKSwgcDIueCgpKTsKLSAgICBmbG9hdCBib3R0b20gPSBtYXgz
KHAwLnkoKSwgcDEueSgpLCBwMi55KCkpOwotCi0gICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVk
Z2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci19Ci0KLXZvaWQgRmxvYXRSZWN0OjpmaXRU
b1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMykKLXsKLSAgICBmbG9hdCBsZWZ0
ID0gbWluNChwMC54KCksIHAxLngoKSwgcDIueCgpLCBwMy54KCkpOwotICAgIGZsb2F0IHRvcCA9
IG1pbjQocDAueSgpLCBwMS55KCksIHAyLnkoKSwgcDMueSgpKTsKLSAgICBmbG9hdCByaWdodCA9
IG1heDQocDAueCgpLCBwMS54KCksIHAyLngoKSwgcDMueCgpKTsKLSAgICBmbG9hdCBib3R0b20g
PSBtYXg0KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7Ci0KLSAgICBzZXRMb2NhdGlv
bkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLX0KLQotSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBmbG9hdCBs
ZWZ0ID0gZmxvb3JmKHJlY3QueCgpKTsKLSAgICBmbG9hdCB0b3AgPSBmbG9vcmYocmVjdC55KCkp
OwotICAgIGZsb2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkpIC0gbGVmdDsKLSAgICBmbG9h
dCBoZWlnaHQgPSBjZWlsZihyZWN0Lm1heFkoKSkgLSB0b3A7Ci0gICAgCi0gICAgcmV0dXJuIElu
dFJlY3QoY2xhbXBUb0ludGVnZXIobGVmdCksIGNsYW1wVG9JbnRlZ2VyKHRvcCksIAotICAgICAg
ICAgICAgICAgICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0
KSk7Ci19Ci0KLUZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIGlmIChz
cmNSZWN0LndpZHRoKCkgPT0gMCB8fCBzcmNSZWN0LmhlaWdodCgpID09IDApCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLQotICAgIGZsb2F0IHdpZHRoU2NhbGUgPSBkZXN0UmVjdC53aWR0
aCgpIC8gc3JjUmVjdC53aWR0aCgpOwotICAgIGZsb2F0IGhlaWdodFNjYWxlID0gZGVzdFJlY3Qu
aGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoZGVzdFJl
Y3QueCgpICsgKHIueCgpIC0gc3JjUmVjdC54KCkpICogd2lkdGhTY2FsZSwKLSAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSZWN0LnkoKSArIChyLnkoKSAtIHNyY1JlY3QueSgpKSAqIGhlaWdodFNj
YWxlLAotICAgICAgICAgICAgICAgICAgICAgci53aWR0aCgpICogd2lkdGhTY2FsZSwgci5oZWln
aHQoKSAqIGhlaWdodFNjYWxlKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
Mjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGbG9hdFJlY3RfaAotI2RlZmlu
ZSBGbG9hdFJlY3RfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaWYgVVNFKENHKSB8
fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCi10eXBlZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYg
T1MoREFSV0lOKSkKLSNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9U
WVBFUwotdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVj
dCBfTlNSZWN0IE5TUmVjdDsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLVFU
X0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVJlY3RGOwotUVRfRU5EX05BTUVTUEFDRQotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShXWCkgJiYgVVNFKFdYR0MpCi1jbGFzcyB3eFJlY3QyRERvdWJsZTsK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSEFJS1UpCi1jbGFzcyBCUmVjdDsKLSNlbmRpZgotCi0j
aWYgVVNFKFNLSUEpCi1zdHJ1Y3QgU2tSZWN0OwotI2VuZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi10
eXBlZGVmIHN0cnVjdCBfY2Fpcm9fcmVjdGFuZ2xlIGNhaXJvX3JlY3RhbmdsZV90OwotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKE9QRU5WRykKLWNsYXNzIFZH
UmVjdDsKLSNlbmRpZgotCi1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSW50UG9pbnQ7Ci0KLWNsYXNz
IEZsb2F0UmVjdCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRSZWN0KCkgeyB9Ci0gICAgRmxvYXRSZWN0
KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCi0gICAg
ICAgIDogbV9sb2NhdGlvbihsb2NhdGlvbiksIG1fc2l6ZShzaXplKSB7IH0KLSAgICBGbG9hdFJl
Y3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKLSAgICAgICAg
OiBtX2xvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpLCBtX3NpemUoRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpKSB7IH0KLSAgICBGbG9hdFJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgc3RhdGlj
IEZsb2F0UmVjdCBuYXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lk
dGgsIGRvdWJsZSBoZWlnaHQpOwotCi0gICAgRmxvYXRQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotCi0gICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBsb2Nh
dGlvbikgeyBtX2xvY2F0aW9uID0gbG9jYXRpb247IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KLQotICAgIGZsb2F0IHgoKSBjb25z
dCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVy
biBtX2xvY2F0aW9uLnkoKTsgfQotICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkg
KyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdo
dCgpOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsg
fQotICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQot
Ci0gICAgdm9pZCBzZXRYKGZsb2F0IHgpIHsgbV9sb2NhdGlvbi5zZXRYKHgpOyB9Ci0gICAgdm9p
ZCBzZXRZKGZsb2F0IHkpIHsgbV9sb2NhdGlvbi5zZXRZKHkpOyB9Ci0gICAgdm9pZCBzZXRXaWR0
aChmbG9hdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9Ci0gICAgdm9pZCBzZXRI
ZWlnaHQoZmxvYXQgaGVpZ2h0KSB7IG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsgfQotCi0gICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQotCi0gICAg
RmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KHgoKSArIHdpZHRo
KCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9Ci0KLSAgICB2b2lkIG1vdmUoY29uc3QgRmxv
YXRTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IAotICAgIHZvaWQgbW92ZUJ5
KGNvbnN0IEZsb2F0UG9pbnQmIGRlbHRhKSB7IG1fbG9jYXRpb24ubW92ZShkZWx0YS54KCksIGRl
bHRhLnkoKSk7IH0KLSAgICB2b2lkIG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5KSB7IG1fbG9jYXRp
b24ubW92ZShkeCwgZHkpOyB9Ci0KLSAgICB2b2lkIGV4cGFuZChjb25zdCBGbG9hdFNpemUmIHNp
emUpIHsgbV9zaXplICs9IHNpemU7IH0KLSAgICB2b2lkIGV4cGFuZChmbG9hdCBkdywgZmxvYXQg
ZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9Ci0gICAgdm9pZCBjb250cmFjdChjb25zdCBG
bG9hdFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KLSAgICB2b2lkIGNvbnRyYWN0KGZs
b2F0IGR3LCBmbG9hdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQotCi0gICAgdm9p
ZCBzaGlmdFhFZGdlVG8oZmxvYXQgZWRnZSkKLSAgICB7Ci0gICAgICAgIGZsb2F0IGRlbHRhID0g
ZWRnZSAtIHgoKTsKLSAgICAgICAgc2V0WChlZGdlKTsKLSAgICAgICAgc2V0V2lkdGgoc3RkOjpt
YXgoMC4wZiwgd2lkdGgoKSAtIGRlbHRhKSk7Ci0gICAgfQotICAgIHZvaWQgc2hpZnRNYXhYRWRn
ZVRvKGZsb2F0IGVkZ2UpCi0gICAgewotICAgICAgICBmbG9hdCBkZWx0YSA9IGVkZ2UgLSBtYXhY
KCk7Ci0gICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgKyBkZWx0YSkpOwot
ICAgIH0KLSAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhmbG9hdCBlZGdlKQotICAgIHsKLSAgICAgICAg
ZmxvYXQgZGVsdGEgPSBlZGdlIC0geSgpOwotICAgICAgICBzZXRZKGVkZ2UpOwotICAgICAgICBz
ZXRIZWlnaHQoc3RkOjptYXgoMC4wZiwgaGVpZ2h0KCkgLSBkZWx0YSkpOwotICAgIH0KLSAgICB2
b2lkIHNoaWZ0TWF4WUVkZ2VUbyhmbG9hdCBlZGdlKQotICAgIHsKLSAgICAgICAgZmxvYXQgZGVs
dGEgPSBlZGdlIC0gbWF4WSgpOwotICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXgoMC4wZiwgaGVp
Z2h0KCkgKyBkZWx0YSkpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgbWluWE1pbllDb3JuZXIo
KSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9IC8vIHR5cGljYWxseSB0b3BMZWZ0Ci0gICAg
RmxvYXRQb2ludCBtYXhYTWluWUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV9s
b2NhdGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkpOyB9IC8vIHR5cGlj
YWxseSB0b3BSaWdodAotICAgIEZsb2F0UG9pbnQgbWluWE1heFlDb3JuZXIoKSBjb25zdCB7IHJl
dHVybiBGbG9hdFBvaW50KG1fbG9jYXRpb24ueCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5o
ZWlnaHQoKSk7IH0gLy8gdHlwaWNhbGx5IGJvdHRvbUxlZnQKLSAgICBGbG9hdFBvaW50IG1heFhN
YXhZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2ludChtX2xvY2F0aW9uLngoKSArIG1f
c2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSArIG1fc2l6ZS5oZWlnaHQoKSk7IH0gLy8gdHlw
aWNhbGx5IGJvdHRvbVJpZ2h0Ci0KLSAgICBib29sIGludGVyc2VjdHMoY29uc3QgRmxvYXRSZWN0
JikgY29uc3Q7Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLQot
ICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgdW5pdGUoY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGbG9hdFJlY3Qm
KTsKLQotICAgIC8vIE5vdGUsIHRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IEludFJlY3Q6OmNvbnRh
aW5zKEludFBvaW50JikgZG9lczsgdGhlIGludCB2ZXJzaW9uCi0gICAgLy8gaXMgcmVhbGx5IGNo
ZWNraW5nIGZvciBjb250YWlubWVudCBvZiAxeDEgcmVjdCwgYnV0IHRoYXQgZG9lc24ndCBtYWtl
IHNlbnNlIHdpdGggZmxvYXRzLgotICAgIGJvb2wgY29udGFpbnMoZmxvYXQgcHgsIGZsb2F0IHB5
KSBjb25zdAotICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPD0gbWF4WCgpICYmIHB5
ID49IHkoKSAmJiBweSA8PSBtYXhZKCk7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50Lnko
KSk7IH0KLQotICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgpIHsKLSAgICAgICAgbV9sb2NhdGlv
bi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwotICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9z
aXplLndpZHRoKCkgKyBkeCArIGR4KTsKLSAgICB9Ci0gICAgdm9pZCBpbmZsYXRlWShmbG9hdCBk
eSkgewotICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkgLSBkeSk7Ci0gICAg
ICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBkeSk7Ci0gICAgfQot
ICAgIHZvaWQgaW5mbGF0ZShmbG9hdCBkKSB7IGluZmxhdGVYKGQpOyBpbmZsYXRlWShkKTsgfQot
ICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQotICAgIHZvaWQgc2NhbGUo
ZmxvYXQgc3gsIGZsb2F0IHN5KTsKLQotICAgIEZsb2F0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEZsb2F0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3Np
emUudHJhbnNwb3NlZFNpemUoKSk7IH0KLQotICAgIC8vIFJlLWluaXRpYWxpemVzIHRoaXMgcmVj
dGFuZ2xlIHRvIGZpdCB0aGUgc2V0cyBvZiBwYXNzZWQgcG9pbnRzLgotICAgIHZvaWQgZml0VG9Q
b2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKLSAgICB2
b2lkIGZpdFRvUG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBw
MSwgY29uc3QgRmxvYXRQb2ludCYgcDIpOwotICAgIHZvaWQgZml0VG9Qb2ludHMoY29uc3QgRmxv
YXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwg
Y29uc3QgRmxvYXRQb2ludCYgcDMpOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNf
Q0hST01JVU0pCi0gICAgRmxvYXRSZWN0KGNvbnN0IENHUmVjdCYpOwotICAgIG9wZXJhdG9yIENH
UmVjdCgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChO
U0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKLSAgICAgICAgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQotICAgIEZsb2F0UmVjdChjb25zdCBO
U1JlY3QmKTsKLSAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oUVQpCi0gICAgRmxvYXRSZWN0KGNvbnN0IFFSZWN0RiYpOwotICAgIG9wZXJhdG9yIFFS
ZWN0RigpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkKCkgY29uc3Q7Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKLSAgICBGbG9hdFJlY3QoY29uc3Qgd3hS
ZWN0MkREb3VibGUmKTsKLSAgICBvcGVyYXRvciB3eFJlY3QyRERvdWJsZSgpIGNvbnN0OwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShIQUlLVSkKLSAgICBGbG9hdFJlY3QoY29uc3QgQlJlY3QmKTsK
LSAgICBvcGVyYXRvciBCUmVjdCgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBVU0UoU0tJQSkKLSAg
ICBGbG9hdFJlY3QoY29uc3QgU2tSZWN0Jik7Ci0gICAgb3BlcmF0b3IgU2tSZWN0KCkgY29uc3Q7
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE9QRU5WRykKLSAgICBvcGVyYXRvciBWR1JlY3QoKSBj
b25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKENBSVJPKQotICAgIEZsb2F0UmVjdChjb25zdCBjYWly
b19yZWN0YW5nbGVfdCYpOwotICAgIG9wZXJhdG9yIGNhaXJvX3JlY3RhbmdsZV90KCkgY29uc3Q7
Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGbG9hdFBvaW50IG1fbG9jYXRpb247Ci0gICAgRmxv
YXRTaXplIG1fc2l6ZTsKLQotICAgIHZvaWQgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGZs
b2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSkKLSAgICB7Ci0g
ICAgICAgIG1fbG9jYXRpb24uc2V0KGxlZnQsIHRvcCk7Ci0gICAgICAgIG1fc2l6ZS5zZXRXaWR0
aChyaWdodCAtIGxlZnQpOwotICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KGJvdHRvbSAtIHRvcCk7
Ci0gICAgfQotfTsKLQotaW5saW5lIEZsb2F0UmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRS
ZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCi17Ci0gICAgRmxvYXRSZWN0IGMgPSBhOwotICAg
IGMuaW50ZXJzZWN0KGIpOwotICAgIHJldHVybiBjOwotfQotCi1pbmxpbmUgRmxvYXRSZWN0IHVu
aW9uUmVjdChjb25zdCBGbG9hdFJlY3QmIGEsIGNvbnN0IEZsb2F0UmVjdCYgYikKLXsKLSAgICBG
bG9hdFJlY3QgYyA9IGE7Ci0gICAgYy51bml0ZShiKTsKLSAgICByZXR1cm4gYzsKLX0KLQotaW5s
aW5lIEZsb2F0UmVjdCYgb3BlcmF0b3IrPShGbG9hdFJlY3QmIGEsIGNvbnN0IEZsb2F0UmVjdCYg
YikKLXsKLSAgICBhLm1vdmUoYi54KCksIGIueSgpKTsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgo
KSArIGIud2lkdGgoKSk7Ci0gICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkp
OwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRSZWN0IG9wZXJhdG9yKyhjb25zdCBG
bG9hdFJlY3QmIGEsIGNvbnN0IEZsb2F0UmVjdCYgYikKLXsKLSAgICBGbG9hdFJlY3QgYyA9IGE7
Ci0gICAgYyArPSBiOwotICAgIHJldHVybiBjOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRSZWN0JiBiKQotewotICAgIHJldHVybiBh
LmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigpICYmIGEuc2l6ZSgpID09IGIuc2l6ZSgpOwotfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRS
ZWN0JiBiKQotewotICAgIHJldHVybiBhLmxvY2F0aW9uKCkgIT0gYi5sb2NhdGlvbigpIHx8IGEu
c2l6ZSgpICE9IGIuc2l6ZSgpOwotfQotCi1JbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0KLS8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxl
bnQgcmVjdCBpbiBkZXN0UmVjdC4KLUZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ciwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RmxvYXRTaXplLmgiCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZs
b2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndp
ZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQotewotfQotCi1mbG9hdCBGbG9hdFNpemU6
OmRpYWdvbmFsTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3FydGYoZGlhZ29uYWxMZW5n
dGhTcXVhcmVkKCkpOwotfQotCi1GbG9hdFNpemUgRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24o
ZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQotewotICAgIHJldHVybiBGbG9hdFNpemUobmFy
cm93UHJlY2lzaW9uVG9GbG9hdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoaGVpZ2h0
KSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0U2l6ZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqICAgICAgICAgICAgICAgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRmxvYXRTaXplX2gKLSNkZWZpbmUgRmxvYXRTaXplX2gKLQot
I2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lm
IFVTRShDRykgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9PTl9N
QUNfQ0hST01JVU0pCi10eXBlZGVmIHN0cnVjdCBDR1NpemUgQ0dTaXplOwotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwg
KFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQotI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTCi10eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOwotI2Vs
c2UKLXR5cGVkZWYgc3RydWN0IF9OU1NpemUgTlNTaXplOwotI2VuZGlmCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBGbG9hdFNpemUgewot
cHVibGljOgotICAgIEZsb2F0U2l6ZSgpIDogbV93aWR0aCgwKSwgbV9oZWlnaHQoMCkgeyB9Ci0g
ICAgRmxvYXRTaXplKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCks
IG1faGVpZ2h0KGhlaWdodCkgeyB9Ci0gICAgRmxvYXRTaXplKGNvbnN0IEludFNpemUmKTsKLQot
ICAgIHN0YXRpYyBGbG9hdFNpemUgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91Ymxl
IGhlaWdodCk7Ci0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0K
LSAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotCi0gICAgdm9p
ZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KLSAgICB2b2lkIHNl
dEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KLQotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hlaWdodCA8PSAwOyB9
Ci0KLSAgICBmbG9hdCBhc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggLyBtX2hl
aWdodDsgfQotCi0gICAgdm9pZCBleHBhbmQoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIG1fd2lkdGggKz0gd2lkdGg7Ci0gICAgICAgIG1faGVpZ2h0ICs9IGhlaWdo
dDsKLSAgICB9Ci0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KLQot
ICAgIHZvaWQgc2NhbGUoZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpCi0gICAgewotICAgICAg
ICBtX3dpZHRoICo9IHNjYWxlWDsKLSAgICAgICAgbV9oZWlnaHQgKj0gc2NhbGVZOwotICAgIH0K
LQotICAgIEZsb2F0U2l6ZSBleHBhbmRlZFRvKGNvbnN0IEZsb2F0U2l6ZSYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRTaXplKG1fd2lkdGggPiBvdGhlci5tX3dpZHRo
ID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAgICAgICBtX2hlaWdodCA+IG90aGVy
Lm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7Ci0gICAgfQotCi0gICAgRmxv
YXRTaXplIHNocnVua1RvKGNvbnN0IEZsb2F0U2l6ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgIHJldHVybiBGbG9hdFNpemUobV93aWR0aCA8IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDog
b3RoZXIubV93aWR0aCwKLSAgICAgICAgICAgbV9oZWlnaHQgPCBvdGhlci5tX2hlaWdodCA/IG1f
aGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwotICAgIH0KLQotICAgIGZsb2F0IGRpYWdvbmFsTGVu
Z3RoKCkgY29uc3Q7Ci0gICAgZmxvYXQgZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3dpZHRoICogbV93aWR0aCArIG1faGVpZ2h0ICogbV9oZWln
aHQ7Ci0gICAgfQotCi0gICAgRmxvYXRTaXplIHRyYW5zcG9zZWRTaXplKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUobV9oZWlnaHQsIG1fd2lkdGgpOwotICAgIH0KLQot
I2lmIFVTRShDRykgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9P
Tl9NQUNfQ0hST01JVU0pCi0gICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IENHU2l6ZSYpOyAv
LyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQotICAgIG9wZXJhdG9y
IENHU2l6ZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKLSAgICAgICAg
fHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oUVQpICYm
IFVTRShRVEtJVCkpCi0gICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6ZSAmKTsgLy8g
ZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKLSAgICBvcGVyYXRvciBO
U1NpemUoKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fd2lkdGgsIG1f
aGVpZ2h0OwotfTsKLQotaW5saW5lIEZsb2F0U2l6ZSYgb3BlcmF0b3IrPShGbG9hdFNpemUmIGEs
IGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLnNldFdpZHRoKGEud2lkdGgoKSArIGIud2lk
dGgoKSk7Ci0gICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwotICAgIHJl
dHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRTaXplJiBvcGVyYXRvci09KEZsb2F0U2l6ZSYgYSwg
Y29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpIC0gYi53aWR0
aCgpKTsKLSAgICBhLnNldEhlaWdodChhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Ci0gICAgcmV0
dXJuIGE7Ci19Ci0KLWlubGluZSBGbG9hdFNpemUgb3BlcmF0b3IrKGNvbnN0IEZsb2F0U2l6ZSYg
YSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBGbG9hdFNpemUoYS53aWR0aCgp
ICsgYi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGbG9h
dFNpemUgb3BlcmF0b3ItKGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQot
ewotICAgIHJldHVybiBGbG9hdFNpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBhLmhlaWdodCgp
IC0gYi5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBGbG9hdFNpemUgb3BlcmF0b3ItKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKC1zaXplLndpZHRoKCksIC1z
aXplLmhlaWdodCgpKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFNp
emUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53aWR0aCgpID09IGIu
d2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0KCk7Ci19Ci0KLWlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAg
cmV0dXJuIGEud2lkdGgoKSAhPSBiLndpZHRoKCkgfHwgYS5oZWlnaHQoKSAhPSBiLmhlaWdodCgp
OwotfQotCi1pbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBGbG9hdFNpemUmIHAp
Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC53aWR0aCgp
KSksIHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAuaGVpZ2h0KCkpKSk7Ci19Ci0KLWlubGluZSBJ
bnRTaXplIGV4cGFuZGVkSW50U2l6ZShjb25zdCBGbG9hdFNpemUmIHApCi17Ci0gICAgcmV0dXJu
IEludFNpemUoY2xhbXBUb0ludGVnZXIoY2VpbGYocC53aWR0aCgpKSksIGNsYW1wVG9JbnRlZ2Vy
KGNlaWxmKHAuaGVpZ2h0KCkpKSk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9p
bnQoY29uc3QgRmxvYXRTaXplJiBwKQotewotICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2Fz
dDxpbnQ+KHAud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4ocC5oZWlnaHQoKSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBGbG9hdFNpemVfaApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250
LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250VHJhbnNjb2Rlci5oIgogI2lm
IFBMQVRGT1JNKFFUKSAmJiBIQVZFKFFSQVdGT05UKQpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQg
Rm9udDo6dXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG8KICAgICBtX2ZvbnRMaXN0LT5pbnZh
bGlkYXRlKGZvbnRTZWxlY3Rvcik7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3VGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gRG9uJ3QgZHJhdyBh
bnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBw
cm9jZXNzIG9mIGxvYWRpbmcuCiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb24KICAg
ICByZXR1cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsK
IH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygp
KQogICAgICAgICByZXR1cm47CkBAIC0yMDIsNyArMjAyLDcgQEAgZmxvYXQgRm9udDo6d2lkdGgo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbgogICAgIHJldHVybiBmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHQocnVuKTsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgp
IDogdG8pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1Bv
aW50OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgRm9udERhdGE7CiBjbGFzcyBGb250TWV0
cmljczsKIGNsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CkBAIC05MywxNCArOTMsMTQgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+KSBjb25zdDsKIAot
ICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8g
PSAtMSkgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBHcmFwaGlj
c1BvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CiAKICAgICBmbG9hdCB3
aWR0aChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aChjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0
IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgaCwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgR3JhcGhpY3NS
ZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1Bv
aW50JiwgaW50IGgsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwogCiAgICAgYm9v
bCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2Fw
cygpOyB9CiAKQEAgLTE2MSwxNCArMTYxLDE0IEBAIHByaXZhdGU6CiAKICAgICAvLyBSZXR1cm5z
IHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgogICAgIGZsb2F0IGdldEdseXBoc0FuZEFk
dmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29u
c3Q7Ci0gICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdHbHlwaEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25z
dCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNv
bnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25zdCBH
cmFwaGljc1BvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRX
aWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEdseXBoQnVmZmVyKiwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyog
PSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owor
ICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
IAogICAgIGJvb2wgZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYs
IEdseXBoRGF0YSYpIGNvbnN0OwogCkBAIC0xNzksMTEgKzE3OSwxMSBAQCBwcml2YXRlOgogCiAg
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KICAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJv
bSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4
dEVtcGhhc2lzKSBjb25zdDsKLSAgICB2b2lkIGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaCwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBoLCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdDsKIAogICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKICAg
ICBmcmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQ
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZvbnQuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZv
bnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAtMzUxLDcgKzM1
MSw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGwKICAgICByZXR1
cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhp
cyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZhbmNlcytmb250IGRhdGEgZm9yIGVh
Y2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC0zNjEsMTEgKzM2MSwx
MSBAQCB2b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4CiAgICAgaWYgKGds
eXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBz
dGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9p
bnQoc3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4s
IGdseXBoQnVmZmVyLCBzdGFydFBvaW50KTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAg
ICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4
dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTM3Mywx
NSArMzczLDE1IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXgKICAg
ICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3
RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50
KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1waGFz
aXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50KHBv
aW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAotdm9pZCBGb250Ojpk
cmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsgICAKICAgICAvLyBEcmF3IGVh
Y2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRoYXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4K
ICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0
YUF0KDApOwotICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsK
LSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQpOworICAgIEdyYXBoaWNzU2l6ZSBvZmZz
ZXQgPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdCgwKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9p
bnQocG9pbnQpOwogICAgIGZsb2F0IG5leHRYID0gc3RhcnRQb2ludC54KCk7CiAgICAgaW50IGxh
c3RGcm9tID0gMDsKICAgICBpbnQgbmV4dEdseXBoID0gMDsKQEAgLTM5MCw3ICszOTAsNyBAQCB2
b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRlCiAjZW5kaWYKICAgICB3aGls
ZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAgICAgICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlw
aCk7Ci0gICAgICAgIEZsb2F0U2l6ZSBuZXh0T2Zmc2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQo
bmV4dEdseXBoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIG5leHRPZmZzZXQgPSBnbHlwaEJ1ZmZl
ci5vZmZzZXRBdChuZXh0R2x5cGgpOwogCiAgICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gZm9u
dERhdGEgfHwgbmV4dE9mZnNldCAhPSBvZmZzZXQpIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpA
QCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29u
dGUKIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCiB7CiAgICAgaWYgKGZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwpIHsKLSAgICAgICAgRmxv
YXRSZWN0IGJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CisgICAgICAg
IEdyYXBoaWNzUmVjdCBib3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwog
ICAgICAgICByZXR1cm4gYm91bmRzLngoKSArIGJvdW5kcy53aWR0aCgpIC8gMjsKICAgICB9CiAg
ICAgLy8gRklYTUU6IFVzZSBnbHlwaCBib3VuZHMgb25jZSB0aGV5IG1ha2Ugc2Vuc2UgZm9yIHZl
cnRpY2FsIGZvbnRzLgpAQCAtNDMyLDcgKzQzMiw3IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zm
c2V0VG9NaWRkbGVPZkdseXAKICAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBo
QnVmZmVyLmZvbnREYXRhQXQoaSksIGdseXBoQnVmZmVyLmdseXBoQXQoaSkpOwogfQogCi12b2lk
IEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIEZvbnQ6
OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgR2x5cGhE
YXRhIG1hcmtHbHlwaERhdGE7CiAgICAgaWYgKCFnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEobWFy
aywgbWFya0dseXBoRGF0YSkpCkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbgogICAgIEdseXBoIHNwYWNlR2x5cGggPSBtYXJrRm9udERh
dGEtPnNwYWNlR2x5cGgoKTsKIAogICAgIGZsb2F0IG1pZGRsZU9mTGFzdEdseXBoID0gb2Zmc2V0
VG9NaWRkbGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgMCk7Ci0gICAgRmxvYXRQb2ludCBz
dGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0gb2Zmc2V0VG9NaWRkbGVP
ZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgpKTsKKyAgICBHcmFwaGlj
c1BvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpICsgbWlkZGxlT2ZMYXN0R2x5cGggLSBvZmZzZXRU
b01pZGRsZU9mR2x5cGgobWFya0ZvbnREYXRhLCBtYXJrR2x5cGgpLCBwb2ludC55KCkpOwogCiAg
ICAgR2x5cGhCdWZmZXIgbWFya0J1ZmZlcjsKICAgICBmb3IgKGludCBpID0gMDsgaSArIDEgPCBn
bHlwaEJ1ZmZlci5zaXplKCk7ICsraSkgewpAQCAtNDc2LDcgKzQ3Niw3IEBAIGZsb2F0IEZvbnQ6
OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnMKICAgICByZXR1cm4gaXQubV9ydW5XaWR0aFNv
RmFyOwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0CitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50
IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlz
LCBydW4pOwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBAIC00ODgsMTAgKzQ4OCwxMCBAQCBGbG9h
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRlCiAgICAgaWYgKHJ1bi5ydGwoKSkg
ewogICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CiAgICAgICAgIGZsb2F0IHRvdGFs
V2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoZmxv
b3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3Vu
ZGYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZihwb2ludC54
KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50
LnkoKSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9v
cmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCksIHBvaW50
LnkoKSwgcm91bmRmKHBvaW50LngoKSArIGFmdGVyV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSAr
IGJlZm9yZVdpZHRoKSwgaCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChmbG9vcmYocG9pbnQu
eCgpICsgYmVmb3JlV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyBhZnRlcldp
ZHRoKSAtIGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCksIGgpOwogfQogCiBpbnQgRm9u
dDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxv
YXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiR2VuZXJhdGVkSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKQEAgLTM0LDI0ICszNCwyNCBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR2VuZXJhdGVk
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7
CiAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wKTsKICAgICBj
b250ZXh0LT5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQtPnRyYW5zbGF0ZShkc3RSZWN0Lngo
KSwgZHN0UmVjdC55KCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUo
KSkKLSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGRzdFJlY3Qud2lkdGgoKSAvIHNy
Y1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKGRzdFJlY3Qud2lkdGgoKSAvIHNyY1Jl
Y3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKICAgICBj
b250ZXh0LT50cmFuc2xhdGUoLXNyY1JlY3QueCgpLCAtc3JjUmVjdC55KCkpOwotICAgIGNvbnRl
eHQtPmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSksICptX2dlbmVyYXRv
ci5nZXQoKSk7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9p
bnQoKSwgbV9zaXplKSwgKm1fZ2VuZXJhdG9yLmdldCgpKTsKIH0KIAotdm9pZCBHZW5lcmF0ZWRJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICAvLyBBbGxvdyB0aGUgZ2VuZXJhdG9yIHRv
IHByb3ZpZGUgdmlzdWFsbHktZXF1aXZhbGVudCB0aWxpbmcgcGFyYW1ldGVycyBmb3IgYmV0dGVy
IHBlcmZvcm1hbmNlLgogICAgIEludFNpemUgYWRqdXN0ZWRTaXplID0gbV9zaXplOwotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIEdyYXBoaWNzUmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogICAgIG1fZ2VuZXJhdG9yLT5hZGp1c3RQYXJhbWV0ZXJz
Rm9yVGlsZWREcmF3aW5nKGFkanVzdGVkU2l6ZSwgYWRqdXN0ZWRTcmNSZWN0KTsKIAogICAgIC8v
IENyZWF0ZSBhIEJpdG1hcEltYWdlIGFuZCBjYWxsIGRyYXdQYXR0ZXJuIG9uIGl0LgpAQCAtNjEs
NyArNjEsNyBAQCB2b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljCiAKICAg
ICAvLyBGaWxsIHdpdGggdGhlIGdyYWRpZW50LgogICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFkanVzdGVkU2l6ZSksICptX2dlbmVy
YXRvci5nZXQoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3Qo
R3JhcGhpY3NQb2ludCgpLCBhZGp1c3RlZFNpemUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOwogCiAg
ICAgLy8gVGlsZSB0aGUgaW1hZ2UgYnVmZmVyIGludG8gdGhlIGNvbnRleHQuCiAgICAgaW1hZ2VC
dWZmZXItPmRyYXdQYXR0ZXJuKGNvbnRleHQsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIGRlc3RSZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1h
Z2UuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HZW5lcmF0ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdmlydHVhbCB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJl
Y3QpOwogICAgIAogICAgIEdlbmVyYXRlZEltYWdlKFBhc3NSZWZQdHI8R2VuZXJhdG9yPiBnZW5l
cmF0b3IsIGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAgIDogbV9nZW5lcmF0b3IoZ2VuZXJh
dG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9y
LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKIAogY2xhc3MgR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50
ZWQ8R2VuZXJhdG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R2VuZXJhdG9yKCkge307CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3
aW5nKEludFNpemUmIC8qIHNpemUgKi8sIEZsb2F0UmVjdCYgLyogc3JjUmVjdCAqLykgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5n
KEludFNpemUmIC8qIHNpemUgKi8sIEdyYXBoaWNzUmVjdCYgLyogc3JjUmVjdCAqLykgeyB9CiB9
OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dseXBoQnVmZmVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogI2lmbmRlZiBHbHlwaEJ1ZmZlcl9oCiAjZGVmaW5lIEdseXBoQnVmZmVyX2gKIAot
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1
ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNjAsNyArNjAsNyBAQCB0eXBlZGVmIHdjaGFyX3QgR2x5cGhCdWZmZXJH
bHlwaDsKIHR5cGVkZWYgR2x5cGggR2x5cGhCdWZmZXJHbHlwaDsKICNlbmRpZgogCi0vLyBDRyB1
c2VzIENHU2l6ZSBpbnN0ZWFkIG9mIEZsb2F0U2l6ZSBzbyB0aGF0IHRoZSByZXN1bHQgb2YgYWR2
YW5jZXMoKQorLy8gQ0cgdXNlcyBDR1NpemUgaW5zdGVhZCBvZiBHcmFwaGljc1NpemUgc28gdGhh
dCB0aGUgcmVzdWx0IG9mIGFkdmFuY2VzKCkKIC8vIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgdG8g
Q0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyBpbiBGb250TWFjLm1tCiAjaWYgVVNFKENH
KSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikpIHx8IFVTRShTS0lBX09OX01BQ19DSFJP
TUlVTSkKIHR5cGVkZWYgQ0dTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsKQEAgLTY5LDcgKzY5LDcg
QEAgdHlwZWRlZiBDR1NpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogLy8gc28gd2UgY2FuIHNhdmUg
bWVtb3J5IHNwYWNlIG9uIGVtYmVkZGVkIGRldmljZXMgYnkgc3RvcmluZyBvbmx5IHRoZSB3aWR0
aAogdHlwZWRlZiBmbG9hdCBHbHlwaEJ1ZmZlckFkdmFuY2U7CiAjZWxzZQotdHlwZWRlZiBGbG9h
dFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwordHlwZWRlZiBHcmFwaGljc1NpemUgR2x5cGhCdWZm
ZXJBZHZhbmNlOwogI2VuZGlmCiAKIGNsYXNzIEdseXBoQnVmZmVyIHsKQEAgLTEwOSw3ICsxMDks
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWR2YW5jZXNbaW5kZXgyXSA9IHM7CiAKICNpZiBQTEFU
Rk9STShXSU4pCi0gICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBtX29mZnNldHNbaW5kZXgxXTsK
KyAgICAgICAgR3JhcGhpY3NTaXplIG9mZnNldCA9IG1fb2Zmc2V0c1tpbmRleDFdOwogICAgICAg
ICBtX29mZnNldHNbaW5kZXgxXSA9IG1fb2Zmc2V0c1tpbmRleDJdOwogICAgICAgICBtX29mZnNl
dHNbaW5kZXgyXSA9IG9mZnNldDsKICNlbmRpZgpAQCAtMTM1LDE3ICsxMzUsMTcgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCi0gICAgRmxvYXRTaXplIG9mZnNldEF0KGludCBpbmRleCkgY29u
c3QKKyAgICBHcmFwaGljc1NpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdAogICAgIHsKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgICAgIHJldHVybiBtX29mZnNldHNbaW5kZXhdOwogI2Vsc2UK
ICAgICAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgp
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NTaXplKCk7CiAjZW5kaWYKICAgICB9CiAKLSAgICB2
b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGZsb2F0IHdp
ZHRoLCBjb25zdCBGbG9hdFNpemUqIG9mZnNldCA9IDApCisgICAgdm9pZCBhZGQoR2x5cGggZ2x5
cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBmbG9hdCB3aWR0aCwgY29uc3QgR3JhcGhp
Y3NTaXplKiBvZmZzZXQgPSAwKQogICAgIHsKICAgICAgICAgbV9mb250RGF0YS5hcHBlbmQoZm9u
dCk7CiAKQEAgLTE2MywxNCArMTYzLDE0IEBAIHB1YmxpYzoKICNlbGlmIE9TKFdJTkNFKQogICAg
ICAgICBtX2FkdmFuY2VzLmFwcGVuZCh3aWR0aCk7CiAjZWxzZQotICAgICAgICBtX2FkdmFuY2Vz
LmFwcGVuZChGbG9hdFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgbV9hZHZhbmNlcy5hcHBlbmQo
R3JhcGhpY3NTaXplKHdpZHRoLCAwKSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICAgICAgaWYgKG9mZnNldCkKICAgICAgICAgICAgIG1fb2Zmc2V0cy5hcHBlbmQoKm9mZnNldCk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb2Zmc2V0cy5hcHBlbmQoRmxvYXRTaXplKCkp
OworICAgICAgICAgICAgbV9vZmZzZXRzLmFwcGVuZChHcmFwaGljc1NpemUoKSk7CiAjZWxzZQog
ICAgICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICNlbmRpZgpAQCAtMjAxLDcgKzIwMSw3IEBA
IHB1YmxpYzoKICNlbGlmIE9TKFdJTkNFKQogICAgICAgICBsYXN0QWR2YW5jZSArPSB3aWR0aDsK
ICNlbHNlCi0gICAgICAgIGxhc3RBZHZhbmNlICs9IEZsb2F0U2l6ZSh3aWR0aCwgMCk7CisgICAg
ICAgIGxhc3RBZHZhbmNlICs9IEdyYXBoaWNzU2l6ZSh3aWR0aCwgMCk7CiAjZW5kaWYKICAgICB9
CiAKQEAgLTIxMCw3ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckds
eXBoLCAyMDQ4PiBtX2dseXBoczsKICAgICBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAyMDQ4
PiBtX2FkdmFuY2VzOwogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBWZWN0b3I8RmxvYXRTaXplLCAy
MDQ4PiBtX29mZnNldHM7CisgICAgVmVjdG9yPEdyYXBoaWNzU2l6ZSwgMjA0OD4gbV9vZmZzZXRz
OwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaE1ldHJpY3NNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtOTYsOSArOTYsOSBAQCB0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBHbHlwaE1ldHJpY3NNYXA8
CiAgICAgcmV0dXJuIGNHbHlwaFNpemVVbmtub3duOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBG
bG9hdFJlY3QgR2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD46OnVua25vd25NZXRyaWNzKCkKK3Rl
bXBsYXRlPD4gaW5saW5lIEdyYXBoaWNzUmVjdCBHbHlwaE1ldHJpY3NNYXA8R3JhcGhpY3NSZWN0
Pjo6dW5rbm93bk1ldHJpY3MoKQogewotICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgY0dseXBo
U2l6ZVVua25vd24sIGNHbHlwaFNpemVVbmtub3duKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KDAsIDAsIGNHbHlwaFNpemVVbmtub3duLCBjR2x5cGhTaXplVW5rbm93bik7CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIFQ+IHR5cGVuYW1lIEdseXBoTWV0cmljc01hcDxUPjo6R2x5cGhNZXRyaWNzUGFn
ZSogR2x5cGhNZXRyaWNzTWFwPFQ+Ojpsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51
bWJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMiArMjgsMTIgQEAKICNpbmNs
dWRlICJHcmFkaWVudC5oIgogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFy
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFkaWVudDo6R3JhZGllbnQoY29uc3Qg
RmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorR3JhZGllbnQ6OkdyYWRpZW50
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSkKICAgICA6
IG1fcmFkaWFsKGZhbHNlKQogICAgICwgbV9wMChwMCkKICAgICAsIG1fcDEocDEpCkBAIC00Nyw3
ICs0Nyw3IEBAIEdyYWRpZW50OjpHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwKICAgICBw
bGF0Zm9ybUluaXQoKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQm
IHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3Bl
Y3RSYXRpbykKK0dyYWRpZW50OjpHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgZmxv
YXQgcjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0
aW8pCiAgICAgOiBtX3JhZGlhbCh0cnVlKQogICAgICwgbV9wMChwMCkKICAgICAsIG1fcDEocDEp
CkBAIC02Niw3ICs2Niw3IEBAIEdyYWRpZW50Ojp+R3JhZGllbnQoKQogICAgIHBsYXRmb3JtRGVz
dHJveSgpOwogfQogCi12b2lkIEdyYWRpZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3
aW5nKEludFNpemUmIHNpemUsIEZsb2F0UmVjdCYgc3JjUmVjdCkKK3ZvaWQgR3JhZGllbnQ6OmFk
anVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0KQogewogICAgIGlmIChtX3JhZGlhbCkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgR3JhZGllbnRfaAogCiAjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTc0LDExICs3
NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFkaWVudCA6IHB1Ymxp
YyBHZW5lcmF0b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R3Jh
ZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhp
Y3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCBwMSkpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2lu
dCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFz
cGVjdFJhdGlvID0gMSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhZGllbnQ+IGNyZWF0
ZShjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAxLCBmbG9hdCByMSwgZmxvYXQgYXNwZWN0UmF0aW8gPSAxKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBhc3BlY3RS
YXRpbykpOwogICAgICAgICB9CkBAIC05NCwxMSArOTQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIGlzUmFkaWFsKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpYWw7IH0KICAg
ICAgICAgYm9vbCBpc1plcm9TaXplKCkgY29uc3QgeyByZXR1cm4gbV9wMC54KCkgPT0gbV9wMS54
KCkgJiYgbV9wMC55KCkgPT0gbV9wMS55KCkgJiYgKCFtX3JhZGlhbCB8fCBtX3IwID09IG1fcjEp
OyB9CiAKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDAoKSBjb25zdCB7IHJldHVybiBtX3Aw
OyB9Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsg
fQorICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwMCgpIGNvbnN0IHsgcmV0dXJuIG1fcDA7
IH0KKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEoKSBjb25zdCB7IHJldHVybiBtX3Ax
OyB9CiAKLSAgICAgICAgdm9pZCBzZXRQMChjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDAgPSBw
OyB9Ci0gICAgICAgIHZvaWQgc2V0UDEoY29uc3QgRmxvYXRQb2ludCYgcCkgeyBtX3AxID0gcDsg
fQorICAgICAgICB2b2lkIHNldFAwKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIHsgbV9wMCA9IHA7
IH0KKyAgICAgICAgdm9pZCBzZXRQMShjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDEgPSBw
OyB9CiAKICAgICAgICAgZmxvYXQgc3RhcnRSYWRpdXMoKSBjb25zdCB7IHJldHVybiBtX3IwOyB9
CiAgICAgICAgIGZsb2F0IGVuZFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1fcjE7IH0KQEAgLTEz
Myw4ICsxMzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFF0IGFuZCBDRyB0
cmFuc2Zvcm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZQogICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQYXJhbWV0
ZXJzRm9yVGlsZWREcmF3aW5nKEludFNpemUmIHNpemUsIEZsb2F0UmVjdCYgc3JjUmVjdCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNz
UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJh
d2luZyhJbnRTaXplJiBzaXplLCBHcmFwaGljc1JlY3QmIHNyY1JlY3QpOwogCiAgICAgICAgIHZv
aWQgc2V0UGxhdGZvcm1HcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKIApAQCAtMTQ0LDggKzE0NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgR3JhZGll
bnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAg
R3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvKTsKKyAgICAgICAgR3JhZGllbnQoY29u
c3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxKTsKKyAgICAgICAg
R3JhZGllbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvKTsKIAogICAgICAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVudCA9IDA7IH0KICAgICAgICAgdm9pZCBwbGF0Zm9y
bURlc3Ryb3koKTsKQEAgLTE1NCw4ICsxNTQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKIAogICAgICAgICBib29sIG1fcmFkaWFs
OwotICAgICAgICBGbG9hdFBvaW50IG1fcDA7Ci0gICAgICAgIEZsb2F0UG9pbnQgbV9wMTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBtX3AwOworICAgICAgICBHcmFwaGljc1BvaW50IG1fcDE7CiAg
ICAgICAgIGZsb2F0IG1fcjA7CiAgICAgICAgIGZsb2F0IG1fcjE7CiAgICAgICAgIGZsb2F0IG1f
YXNwZWN0UmF0aW87IC8vIEZvciBlbGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyAr
MTM0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbgogICAgIHNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiBvZmZzZXQsIGZsb2F0IGJs
dXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIG1f
c3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJs
dXI7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhj
b25zdCBGbAogICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNldCwgYmx1ciwgY29sb3IsIGNvbG9y
U3BhY2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMZWdhY3lTaGFkb3co
Y29uc3QgR3JhcGhpY3NTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
b2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CkBAIC0xNTcsNyArMTU3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExlZ2FjeVNoYWRvdyhjbwogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
RmxvYXRTaXplKCk7CisgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUoKTsK
ICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBD
b2xvcigpOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSA9IENvbG9yU3BhY2VEZXZpY2VS
R0I7CkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6Omhhc1NoYWRvdygp
IGNvbnN0CiAgICAgICAgICAgICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiB9CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
JiBibHVyLCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIGNvbnN0Citib29s
IEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBmbG9hdCYg
Ymx1ciwgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlJiBjb2xvclNwYWNlKSBjb25zdAogewogICAg
IG9mZnNldCA9IG1fc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgIGJsdXIgPSBtX3N0YXRlLnNoYWRv
d0JsdXI7CkBAIC0zNjgsMTEgKzM2OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlKiBpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGlt
YWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQogewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBGbG9h
dFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgIGRyYXdJ
bWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBHcmFwaGljc1JlY3QoZGVzdCksIHNyY1JlY3Qs
IG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiAjaWYgIU9TKFdJTkNFKSB8fCAoUExBVEZP
Uk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4
dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dChjb25zdCBGb24KIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zODksNyArMzg5
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKAogICAgIGZvbnQu
ZHJhd0VtcGhhc2lzTWFya3ModGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA1LDcgKzQwNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QKICAgICBpZiAoIWJpZGlSdW5zLnJ1bkNvdW50KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgY3VyclBvaW50ID0gcG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBjdXJyUG9pbnQgPSBwb2ludDsKICAgICBCaWRpQ2hhcmFjdGVyUnVu
KiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsKICAgICB3aGlsZSAoYmlkaVJ1bikgewog
ICAgICAgICBUZXh0UnVuIHN1YnJ1biA9IHJ1bjsKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0CiAgICAgYmlkaVJ1bnMuZGVsZXRlUnVu
cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SGlnaGxp
Z2h0Rm9yVGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzMyw3ICs0MzMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRlCiAgICAgZmlsbFJlY3QoZm9udC5z
ZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byksIGJhY2tncm91bmRD
b2xvciwgY29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3Qm
IGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9v
bCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1NywxMCArNDU3LDEwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGkKICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBJbnRlcnBvbGF0aW9uTG93CiAgICAg
ICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwotICAg
ICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNp
emUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNo
KSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBHcmFw
aGljc1JlY3QoZGVzdC5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUodHcsIHRoKSksIEdyYXBoaWNz
UmVjdChzcmMubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JT
cGFjZSwgb3ApOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3Vz
SW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhdyh0
aGlzLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0
UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFj
ZSwgb3ApOworICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBHcmFwaGljc1JlY3QoZGVzdC5sb2Nh
dGlvbigpLCBHcmFwaGljc1NpemUodHcsIHRoKSksIEdyYXBoaWNzUmVjdChzcmMubG9jYXRpb24o
KSwgR3JhcGhpY3NTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9pbnQm
IHNyY1BvaW50LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQpAQCAtNTE0LDEwICs1MTQsMTAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1h
Z2VCdWZmZXIoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIHN0
eWxlQ29sb3JTcGFjZSwgR3JhcGhpY3NSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Ym9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZGVzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQxLDE2ICs1NDEs
MTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbQogICAgICAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpOwogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGJlIEludGVy
cG9sYXRpb25Mb3cKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uTm9uZSk7Ci0gICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwg
RmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qo
c3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBvcCwgdXNlTG93UXVhbGl0eVNj
YWxlKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNlLCBHcmFwaGlj
c1JlY3QoZGVzdC5sb2NhdGlvbigpLCBHcmFwaGljc1NpemUodHcsIHRoKSksIEdyYXBoaWNzUmVj
dChzcmMubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHRzdywgdHNoKSksIG9wLCB1c2VMb3dRdWFs
aXR5U2NhbGUpOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3Vz
SW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgIH0gZWxzZQotICAgICAgICBpbWFnZS0+ZHJhdyh0
aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6
ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gp
KSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0
eWxlQ29sb3JTcGFjZSwgR3JhcGhpY3NSZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXpl
KHR3LCB0aCkpLCBHcmFwaGljc1JlY3Qoc3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3cs
IHRzaCkpLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KIAogI2lmICFQTEFURk9STShRVCkK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAg
Y2xpcChGbG9hdFJlY3QocmVjdCkpOworICAgIGNsaXAoR3JhcGhpY3NSZWN0KHJlY3QpKTsKIH0K
ICNlbmRpZgogCkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXRSb3VuZGVkUmVjdAogICAgIGNsaXBPdXQocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIGJ1ZmZlciwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYwMiwxNCArNjAyLDE0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUKICAgICBzZXRQbGF0Zm9ybVRl
eHREcmF3aW5nTW9kZShtb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBHZW5lcmF0b3Im
IGdlbmVyYXRvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgZ2VuZXJhdG9yLmZpbGwodGhpcywgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGljc0Nv
bnRleHQKICNlbmRpZgogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhl
bEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VX
aWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0
TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEdyYXBoaWNzUG9pbnQmIHAxLCBHcmFwaGljc1BvaW50JiBw
MiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQogewogICAgIC8vIEZv
ciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3ByaWF0ZSB4L3kgc28gdGhh
dCB0aGUgZmxvYXQgYXJpdGhtZXRpYwogICAgIC8vIHdvcmtzIG91dC4gIEZvciBleGFtcGxlLCB3
aXRoIGEgYm9yZGVyIHdpZHRoIG9mIDMsIFdlYktpdCB3aWxsIHBhc3MgdXMgKHkxK3kyKS8yLCBl
LmcuLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpA
QCAtMTg0LDcgKzE4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPEdy
YWRpZW50PiBmaWxsR3JhZGllbnQ7CiAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVy
bjsKIAotICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgICAgICBHcmFwaGljc1Np
emUgc2hhZG93T2Zmc2V0OwogCiAgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzczsKICAgICAg
ICAgZmxvYXQgc2hhZG93Qmx1cjsKQEAgLTI4NSw3ICsyODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lk
IGRyYXdMaW5lKGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQgZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgc2hvdWxkQW50
aWFsaWFzID0gZmFsc2UpOworICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZh
bHNlKTsKIAogICAgICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAgICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKQEAgLTI5MywyMyArMjkzLDIzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQgYnkgYm9yZGVyLXJhZGl1
cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1vbWVudC4KICAgICAgICAg
dm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVT
cGFuKTsKIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFj
ZSk7Ci0gICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR2VuZXJhdG9yJik7
Ci0gICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0Jik7CisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKKyAgICAgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmLCBHZW5lcmF0b3ImKTsKKyAgICAgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKICAgICAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRT
aXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3Im
LCBDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgUm91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAgICAgICB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEludFJlY3QmLCBjb25zdCBSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogCi0gICAgICAgIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmKTsKIAotICAgICAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKTsKKyAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1h
Z2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmLCBDb21wb3Np
dGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAgICB2b2lkIGRyYXdJbWFn
ZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAg
ICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLAorICAgICAgICB2b2lkIGRyYXdJbWFn
ZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3Qm
IGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QgPSBHcmFwaGljc1JlY3QoMCwg
MCwgLTEsIC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBD
b21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKICAg
ICAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNyY1BvaW50LCBj
b25zdCBJbnRTaXplJiB0aWxlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9
IGZhbHNlKTsKQEAgLTMyMSw0NSArMzIxLDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291
cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgICAgIHZvaWQgZHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFs
c2UpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0
ID0gR3JhcGhpY3NSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAKICAgICAgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQg
Y2xpcChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgICAgICB2b2lk
IGFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBSb3VuZGVkUmVjdCYpOwogICAgICAgICB2b2lkIGFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmLCBpbnQgdGhpY2tuZXNzKTsKICAg
ICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBjbGlwT3V0
Um91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmKTsKICAgICAgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUpOwotICAgICAgICB2b2lkIGNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIGFudGlhbGlhcyA9IHRydWUp
OwotICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgR3JhcGhpY3NQb2ludCosIGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7CisgICAgICAg
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBHcmFwaGljc1JlY3Qm
KTsKICAgICAgICAgCiAgICAgICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OwogCiAgICAg
ICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0OwogICAgICAg
ICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7CiAKLSAgICAg
ICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKLSAgICAgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYgLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsK
LSAgICAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2UsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpOworICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOworICAg
ICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiAs
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9t
ID0gMCwgaW50IHRvID0gLTEpOworICAgICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBk
cmF3SGlnaGxpZ2h0Rm9yVGV4dChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBpbnQgaCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgQ29sb3JT
cGFjZSwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CiAKICAgICAgICAgZW51bSBSb3VuZGlu
Z01vZGUgewogICAgICAgICAgICAgUm91bmRBbGxTaWRlcywKICAgICAgICAgICAgIFJvdW5kT3Jp
Z2luQW5kRGltZW5zaW9ucwogICAgICAgICB9OwotICAgICAgICBGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVz
KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgR3JhcGhp
Y3NSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcyk7CiAKLSAgICAgICAgdm9pZCBk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29sIHByaW50
aW5nKTsKKyAgICAgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgR3JhcGhpY3NQb2ludCYs
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKTsKICAgICAgICAgZW51bSBUZXh0Q2hlY2tpbmdM
aW5lU3R5bGUgewogICAgICAgICAgICAgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGUsCiAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdHcmFtbWFyTGluZVN0eWxlLAogICAgICAgICAgICAgVGV4
dENoZWNraW5nUmVwbGFjZW1lbnRMaW5lU3R5bGUKICAgICAgICAgfTsKLSAgICAgICAgdm9pZCBk
cmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIFRl
eHRDaGVja2luZ0xpbmVTdHlsZSk7CisgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0Q2hlY2tp
bmcoY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5
bGUpOwogCiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0OwogICAgICAgICB2
b2lkIHNldFBhaW50aW5nRGlzYWJsZWQoYm9vbCk7CkBAIC0zNzEsMTIgKzM3MSwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAog
ICAgICAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFNoYWRvdyhj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwor
ICAgICAgICB2b2lkIHNldFNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmLCBmbG9hdCBibHVyLCBj
b25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAgICAgICAvLyBMZWdhY3kgc2hhZG93IGJsdXIg
cmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KICAgICAg
ICAgLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgICAg
IHZvaWQgc2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNvbnN0
IEdyYXBoaWNzU2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAK
LSAgICAgICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYsIENvbG9y
U3BhY2UmKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXRTaGFkb3coR3JhcGhpY3NTaXplJiwgZmxv
YXQmLCBDb2xvciYsIENvbG9yU3BhY2UmKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVhclNoYWRv
dygpOwogCiAgICAgICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4m
LCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CkBAIC00MDAsOSArNDAwLDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNhbnZhc0NsaXAoY29uc3QgUGF0
aCYpOwogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwogCi0gICAgICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgICAgIHZvaWQgc2NhbGUoY29uc3QgR3JhcGhp
Y3NTaXplJik7CiAgICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAg
ICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgICAgIHZvaWQgdHJhbnNsYXRlKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsgfQogICAgICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKIAog
ICAgICAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKTsK
QEAgLTQxNiwxMyArNDE2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgQWZmaW5l
VHJhbnNmb3JtJiBhZmZpbmVUcmFuc2Zvcm0oKTsKICAgICAgICAgdm9pZCByZXNldEFmZmluZVRy
YW5zZm9ybSgpOwotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEdyYWRpZW50Kik7Ci0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7CisgICAgICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhZGllbnQqKTsKKyAgICAgICAgdm9pZCBk
cmF3VGV4dChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KTsKICAgICAgICAgdm9pZCBkcmF3RnJhbWVDb250cm9sKGNvbnN0IEludFJlY3Qm
IHJlY3QsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIHN0YXRlKTsKICAgICAgICAgdm9pZCBkcmF3
Rm9jdXNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpOwogICAgICAgICB2b2lkIHBhaW50VGV4dEZp
ZWxkKGNvbnN0IEludFJlY3QmIHJlY3QsIHVuc2lnbmVkIHN0YXRlKTsKICAgICAgICAgdm9pZCBk
cmF3Qml0bWFwKFNoYXJlZEJpdG1hcCosIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHZvaWQgZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVk
Qml0bWFwKiwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKKyAgICAgICAgdm9pZCBk
cmF3Qml0bWFwUGF0dGVybihTaGFyZWRCaXRtYXAqLCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVS
ZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYg
b3JpZ1NvdXJjZVNpemUpOwogICAgICAgICB2b2lkIGRyYXdJY29uKEhJQ09OIGljb24sIGNvbnN0
IEludFJlY3QmIGRzdFJlY3QsIFVJTlQgZmxhZ3MpOwogICAgICAgICBib29sIGluVHJhbnNwYXJl
bmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICBIREMgZ2V0V2luZG93
c0NvbnRleHQoY29uc3QgSW50UmVjdCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQgPSBmYWxzZSwg
Ym9vbCBtYXlDcmVhdGVCaXRtYXAgPSB0cnVlKTsgLy8gVGhlIHBhc3NlZCBpbiByZWN0IGlzIHVz
ZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJhbnNwYXJlbmN5
IGxheWVycy4KQEAgLTQ3OSw3ICs0NzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgUExB
VEZPUk0oV1gpCiAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgYSBidWcgd2hl
cmVieSBnZXR0aW5nIGFuIEhEQyBmcm9tIGEgR0RJKyBjb250ZXh0CiAgICAgICAgIC8vIGxvc2Vz
IHRoZSBzY2FsZSBvcGVyYXRpb25zIGFwcGxpZWQgdG8gdGhlIGNvbnRleHQuCi0gICAgICAgIEZs
b2F0U2l6ZSBjdXJyZW50U2NhbGUoKTsgCisgICAgICAgIEdyYXBoaWNzU2l6ZSBjdXJyZW50U2Nh
bGUoKTsgCiAgICAgICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAjZW5kaWYKIApAQCAtNTEzLDcgKzUxMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2b2lkIHNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
KiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKIAotICAgICAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQm
IHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworICAgICAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoR3JhcGhpY3NQb2ludCYgcDEsIEdyYXBoaWNz
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsK
QEAgLTUzOCw3ICs1MzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0
UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCk7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1T
aG91bGRTbW9vdGhGb250cyhib29sKTsKIAotICAgICAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7
CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiwgZmxv
YXQgYmx1ciwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBjbGVhclBs
YXRmb3JtU2hhZG93KCk7CiAKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgog
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNp
bmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNDMwLDE3ICs0MzAsMTcgQEAg
dm9pZCBHcmFwaGljc0xheWVyOjpkdW1wTGF5ZXIoVGV4dFN0cmVhbQogCiB2b2lkIEdyYXBoaWNz
TGF5ZXI6OmR1bXBQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXllclRy
ZWVBc1RleHRCZWhhdmlvciBiZWhhdmlvcikgY29uc3QKIHsKLSAgICBpZiAobV9wb3NpdGlvbiAh
PSBGbG9hdFBvaW50KCkpIHsKKyAgICBpZiAobV9wb3NpdGlvbiAhPSBHcmFwaGljc1BvaW50KCkp
IHsKICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwogICAgICAgICB0cyA8PCAi
KHBvc2l0aW9uICIgPDwgbV9wb3NpdGlvbi54KCkgPDwgIiAiIDw8IG1fcG9zaXRpb24ueSgpIDw8
ICIpXG4iOwogICAgIH0KIAotICAgIGlmIChtX2JvdW5kc09yaWdpbiAhPSBGbG9hdFBvaW50KCkp
IHsKKyAgICBpZiAobV9ib3VuZHNPcmlnaW4gIT0gR3JhcGhpY3NQb2ludCgpKSB7CiAgICAgICAg
IHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICAgICAgdHMgPDwgIihib3VuZHMgb3Jp
Z2luICIgPDwgbV9ib3VuZHNPcmlnaW4ueCgpIDw8ICIgIiA8PCBtX2JvdW5kc09yaWdpbi55KCkg
PDwgIilcbiI7CiAgICAgfQogCi0gICAgaWYgKG1fYW5jaG9yUG9pbnQgIT0gRmxvYXRQb2ludDNE
KDAuNWYsIDAuNWYsIDApKSB7CisgICAgaWYgKG1fYW5jaG9yUG9pbnQgIT0gR3JhcGhpY3NQb2lu
dDNEKDAuNWYsIDAuNWYsIDApKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAx
KTsKICAgICAgICAgdHMgPDwgIihhbmNob3IgIiA8PCBtX2FuY2hvclBvaW50LngoKSA8PCAiICIg
PDwgbV9hbmNob3JQb2ludC55KCkgPDwgIilcbiI7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbi5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1NpemUuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC04MCw3ICs4
MCw3IEBAIHR5cGVkZWYgdW5zaWduZWQgTGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3IKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50M0Q7CitjbGFzcyBHcmFwaGljc1BvaW50
M0Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFRleHRTdHJl
YW07CkBAIC0yMjUsMjkgKzIyNSwyOSBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGxheWVyIHRoYXQg
cmVwbGljYXRlcyB0aGlzIGxheWVyIChpZiBhbnkpLgogICAgIEdyYXBoaWNzTGF5ZXIqIHJlcGxp
Y2FMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYUxheWVyOyB9CiAKLSAgICBjb25zdCBG
bG9hdFBvaW50JiByZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYXRlZExheWVyUG9zaXRpb247IH0KLSAgICB2b2lkIHNldFJlcGxpY2F0ZWRMYXllclBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgbV9yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbiA9IHA7
IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50JiByZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwbGljYXRlZExheWVyUG9zaXRpb247IH0KKyAgICB2b2lkIHNldFJl
cGxpY2F0ZWRMYXllclBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApIHsgbV9yZXBsaWNh
dGVkTGF5ZXJQb3NpdGlvbiA9IHA7IH0KIAogICAgIC8vIE9mZnNldCBpcyBvcmlnaW4gb2YgdGhl
IHJlbmRlcmVyIG1pbnVzIG9yaWdpbiBvZiB0aGUgZ3JhcGhpY3MgbGF5ZXIgKHNvIGVpdGhlciB6
ZXJvIG9yIG5lZ2F0aXZlKS4KICAgICBJbnRTaXplIG9mZnNldEZyb21SZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbVJlbmRlcmVyOyB9CiAgICAgdm9pZCBzZXRPZmZzZXRGcm9t
UmVuZGVyZXIoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KSB7IG1fb2Zmc2V0RnJvbVJlbmRlcmVyID0g
b2Zmc2V0OyB9CiAKICAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIGxheWVyICh0aGUgbG9jYXRp
b24gb2YgaXRzIHRvcC1sZWZ0IGNvcm5lciBpbiBpdHMgcGFyZW50KQotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcG9zaXRpb24gPSBw
OyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3Bvc2l0aW9uOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHApIHsgbV9wb3NpdGlvbiA9IHA7IH0KICAgICAKICAgICAvLyBBbmNob3IgcG9pbnQ6
ICgwLCAwKSBpcyB0b3AgbGVmdCwgKDEsIDEpIGlzIGJvdHRvbSByaWdodC4gVGhlIGFuY2hvciBw
b2ludAogICAgIC8vIGFmZmVjdHMgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3Jtcy4KLSAgICBj
b25zdCBGbG9hdFBvaW50M0QmIGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQ
b2ludDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHApIHsgbV9hbmNob3JQb2ludCA9IHA7IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0Qm
IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmIHApIHsgbV9hbmNo
b3JQb2ludCA9IHA7IH0KIAogICAgIC8vIFRoZSBzaXplIG9mIHRoZSBsYXllci4KLSAgICBjb25z
dCBGbG9hdFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQor
ICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgeyBtX3Np
emUgPSBzaXplOyB9CiAKICAgICAvLyBUaGUgYm91bmRPcmlnaW4gYWZmZWN0cyB0aGUgb2Zmc2V0
IGF0IHdoaWNoIGNvbnRlbnQgaXMgcmVuZGVyZWQsIGFuZCBzdWJsYXllcnMgYXJlIHBvc2l0aW9u
ZWQuCi0gICAgY29uc3QgRmxvYXRQb2ludCYgYm91bmRzT3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZHNPcmlnaW47IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0
IEZsb2F0UG9pbnQmIG9yaWdpbikgeyBtX2JvdW5kc09yaWdpbiA9IG9yaWdpbjsgfQorICAgIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGJvdW5kc09yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRz
T3JpZ2luOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kc09yaWdpbihjb25zdCBHcmFwaGlj
c1BvaW50JiBvcmlnaW4pIHsgbV9ib3VuZHNPcmlnaW4gPSBvcmlnaW47IH0KIAogICAgIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5z
Zm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHQpIHsgbV90cmFuc2Zvcm0gPSB0OyB9CkBAIC0yODksNyArMjg5LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKICAgICAvLyBt
YXJrIHRoZSBnaXZlbiByZWN0IChpbiBsYXllciBjb29yZHMpIGFzIG5lZWRpbmcgZGlzcGF5LiBO
ZXZlciBnb2VzIGRlZXAuCi0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgeyB9OwogCkBAIC0zOTgsMTAgKzM5OCwxMCBAQCBwcm90
ZWN0ZWQ6CiAgICAgSW50U2l6ZSBtX29mZnNldEZyb21SZW5kZXJlcjsKICAgICAKICAgICAvLyBQ
b3NpdGlvbiBpcyByZWxhdGl2ZSB0byB0aGUgcGFyZW50IEdyYXBoaWNzTGF5ZXIKLSAgICBGbG9h
dFBvaW50IG1fcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYW5jaG9yUG9pbnQ7Ci0gICAg
RmxvYXRTaXplIG1fc2l6ZTsKLSAgICBGbG9hdFBvaW50IG1fYm91bmRzT3JpZ2luOworICAgIEdy
YXBoaWNzUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9hbmNob3JQb2lu
dDsKKyAgICBHcmFwaGljc1NpemUgbV9zaXplOworICAgIEdyYXBoaWNzUG9pbnQgbV9ib3VuZHNP
cmlnaW47CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX2NoaWxkcmVuVHJhbnNmb3JtOwpAQCAtNDMwLDcgKzQzMCw3IEBA
IHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyKiBtX3JlcGxpY2FMYXllcjsgLy8gQSBsYXll
ciB0aGF0IHJlcGxpY2F0ZXMgdGhpcyBsYXllci4gV2Ugb25seSBhbGxvdyBvbmUsIGZvciBub3cu
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXBsaWNhIGlzIG5v
dCBwYXJlbnRlZDsgdGhpcyBpcyB0aGUgcHJpbWFyeSByZWZlcmVuY2UgdG8gaXQuCiAgICAgR3Jh
cGhpY3NMYXllciogbV9yZXBsaWNhdGVkTGF5ZXI7IC8vIEZvciBhIHJlcGxpY2EgbGF5ZXIsIGEg
cmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBsYXllci4KLSAgICBGbG9hdFBvaW50IG1fcmVwbGlj
YXRlZExheWVyUG9zaXRpb247IC8vIEZvciBhIHJlcGxpY2EgbGF5ZXIsIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgcmVwbGljYS4KKyAgICBHcmFwaGljc1BvaW50IG1fcmVwbGljYXRlZExheWVyUG9zaXRp
b247IC8vIEZvciBhIHJlcGxpY2EgbGF5ZXIsIHRoZSBwb3NpdGlvbiBvZiB0aGUgcmVwbGljYS4K
IAogICAgIEludFJlY3QgbV9jb250ZW50c1JlY3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNz
IEludFJlY3Q7Ci1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIAogZW51
bSBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSB7CiAgICAgR3JhcGhpY3NMYXllclBhaW50QmFj
a2dyb3VuZCA9ICgxIDw8IDApLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NQb2ludDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAy
MDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKKworI2luY2x1ZGUgPG1hdGguaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYXBoaWNzUG9pbnQzRDo6bm9ybWFsaXplKCkK
K3sKKyAgICBmbG9hdCB0ZW1wTGVuZ3RoID0gbGVuZ3RoKCk7CisKKyAgICBpZiAodGVtcExlbmd0
aCkgeworICAgICAgICBtX3ggLz0gdGVtcExlbmd0aDsKKyAgICAgICAgbV95IC89IHRlbXBMZW5n
dGg7CisgICAgICAgIG1feiAvPSB0ZW1wTGVuZ3RoOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1BvaW50M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1BvaW50M0QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQzRC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE4NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1
IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgICAgICAgICAgICAgICAgICAyMDEwIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBHcmFwaGljc1BvaW50M0RfaAor
I2RlZmluZSBHcmFwaGljc1BvaW50M0RfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzUG9pbnQzRCB7CitwdWJsaWM6
CisgICAgR3JhcGhpY3NQb2ludDNEKCkKKyAgICAgICAgOiBtX3goMCkKKyAgICAgICAgLCBtX3ko
MCkKKyAgICAgICAgLCBtX3ooMCkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NQb2ludDNE
KEdyYXBoaWNzVW5pdCB4LCBHcmFwaGljc1VuaXQgeSwgR3JhcGhpY3NVbml0IHopCisgICAgICAg
IDogbV94KHgpCisgICAgICAgICwgbV95KHkpCisgICAgICAgICwgbV96KHopCisgICAgeworICAg
IH0KKworICAgIEdyYXBoaWNzUG9pbnQzRChjb25zdCBHcmFwaGljc1BvaW50JiBwKQorICAgICAg
ICA6IG1feChwLngoKSkKKyAgICAgICAgLCBtX3kocC55KCkpCisgICAgICAgICwgbV96KDApCisg
ICAgeworICAgIH0KKworICAgIEdyYXBoaWNzUG9pbnQzRChjb25zdCBHcmFwaGljc1BvaW50M0Qm
IHApCisgICAgICAgIDogbV94KHAueCgpKQorICAgICAgICAsIG1feShwLnkoKSkKKyAgICAgICAg
LCBtX3oocC56KCkpCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzVW5pdCB4KCkgY29uc3Qg
eyByZXR1cm4gbV94OyB9CisgICAgdm9pZCBzZXRYKEdyYXBoaWNzVW5pdCB4KSB7IG1feCA9IHg7
IH0KKworICAgIEdyYXBoaWNzVW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisgICAgdm9p
ZCBzZXRZKEdyYXBoaWNzVW5pdCB5KSB7IG1feSA9IHk7IH0KKworICAgIEdyYXBoaWNzVW5pdCB6
KCkgY29uc3QgeyByZXR1cm4gbV96OyB9CisgICAgdm9pZCBzZXRaKEdyYXBoaWNzVW5pdCB6KSB7
IG1feiA9IHo7IH0KKyAgICB2b2lkIHNldChHcmFwaGljc1VuaXQgeCwgR3JhcGhpY3NVbml0IHks
IEdyYXBoaWNzVW5pdCB6KQorICAgIHsKKyAgICAgICAgbV94ID0geDsKKyAgICAgICAgbV95ID0g
eTsKKyAgICAgICAgbV96ID0gejsKKyAgICB9CisgICAgdm9pZCBtb3ZlKEdyYXBoaWNzVW5pdCBk
eCwgR3JhcGhpY3NVbml0IGR5LCBHcmFwaGljc1VuaXQgZHopCisgICAgeworICAgICAgICBtX3gg
Kz0gZHg7CisgICAgICAgIG1feSArPSBkeTsKKyAgICAgICAgbV96ICs9IGR6OworICAgIH0KKyAg
ICB2b2lkIHNjYWxlKEdyYXBoaWNzVW5pdCBzeCwgR3JhcGhpY3NVbml0IHN5LCBHcmFwaGljc1Vu
aXQgc3opCisgICAgeworICAgICAgICBtX3ggKj0gc3g7CisgICAgICAgIG1feSAqPSBzeTsKKyAg
ICAgICAgbV96ICo9IHN6OworICAgIH0KKworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhbV94ICYmICFtX3kgJiYgIW1fejsKKyAgICB9CisKKyAgICB2b2lk
IG5vcm1hbGl6ZSgpOworCisgICAgR3JhcGhpY3NVbml0IGRvdChjb25zdCBHcmFwaGljc1BvaW50
M0QmIGEpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogYS54KCkgKyBtX3kgKiBh
LnkoKSArIG1feiAqIGEueigpOworICAgIH0KKworICAgIC8vIFNldHMgdGhpcyBHcmFwaGljc1Bv
aW50M0QgdG8gdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdGhlIHBhc3NlZCB0d28uCisgICAgLy8gSXQg
aXMgc2FmZSBmb3IgInRoaXMiIHRvIGJlIHRoZSBzYW1lIGFzIGVpdGhlciBvciBib3RoIG9mIHRo
ZQorICAgIC8vIGFyZ3VtZW50cy4KKyAgICB2b2lkIGNyb3NzKGNvbnN0IEdyYXBoaWNzUG9pbnQz
RCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NV
bml0IHggPSBhLnkoKSAqIGIueigpIC0gYS56KCkgKiBiLnkoKTsKKyAgICAgICAgR3JhcGhpY3NV
bml0IHkgPSBhLnooKSAqIGIueCgpIC0gYS54KCkgKiBiLnooKTsKKyAgICAgICAgR3JhcGhpY3NV
bml0IHogPSBhLngoKSAqIGIueSgpIC0gYS55KCkgKiBiLngoKTsKKyAgICAgICAgbV94ID0geDsK
KyAgICAgICAgbV95ID0geTsKKyAgICAgICAgbV96ID0gejsKKyAgICB9CisKKyAgICAvLyBDb252
ZW5pZW5jZSBmdW5jdGlvbiByZXR1cm5pbmcgInRoaXMgY3Jvc3MgcG9pbnQiIGFzIGEKKyAgICAv
LyBzdGFjay1hbGxvY2F0ZWQgcmVzdWx0LgorICAgIEdyYXBoaWNzUG9pbnQzRCBjcm9zcyhjb25z
dCBHcmFwaGljc1BvaW50M0QmIHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludDNEIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmNyb3NzKCp0aGlzLCBwb2ludCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgR3JhcGhpY3NVbml0IGxlbmd0aFNxdWFy
ZWQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5kb3QoKnRoaXMpOyB9CisgICAgR3JhcGhpY3NVbml0
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7IH0KKyAgICAK
KyAgICBHcmFwaGljc1VuaXQgZGlzdGFuY2VUbyhjb25zdCBHcmFwaGljc1BvaW50M0QmKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc1VuaXQgbV94OworICAgIEdyYXBoaWNzVW5pdCBt
X3k7CisgICAgR3JhcGhpY3NVbml0IG1fejsKK307CisKK2lubGluZSBHcmFwaGljc1BvaW50M0Qm
IG9wZXJhdG9yICs9KEdyYXBoaWNzUG9pbnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBi
KQoreworICAgIGEubW92ZShiLngoKSwgYi55KCksIGIueigpKTsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEdyYXBoaWNzUG9pbnQzRCYgb3BlcmF0b3IgLT0oR3JhcGhpY3NQb2ludDNEJiBh
LCBjb25zdCBHcmFwaGljc1BvaW50M0QmIGIpCit7CisgICAgYS5tb3ZlKC1iLngoKSwgLWIueSgp
LCAtYi56KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludDNEIG9w
ZXJhdG9yKyhjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYg
YikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDNEKGEueCgpICsgYi54KCksIGEueSgpICsg
Yi55KCksIGEueigpICsgYi56KCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludDNEIG9wZXJh
dG9yLShjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikK
K3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDNEKGEueCgpIC0gYi54KCksIGEueSgpIC0gYi55
KCksIGEueigpIC0gYi56KCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQoreworICAgIHJldHVy
biBhLngoKSA9PSBiLngoKSAmJiBhLnkoKSA9PSBiLnkoKSAmJiBhLnooKSA9PSBiLnooKTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0
IEdyYXBoaWNzUG9pbnQzRCYgYikKK3sKKyAgICByZXR1cm4gYS54KCkgIT0gYi54KCkgfHwgYS55
KCkgIT0gYi55KCkgfHwgYS56KCkgIT0gYi56KCk7Cit9CisKK2lubGluZSBHcmFwaGljc1VuaXQg
b3BlcmF0b3IqKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNE
JiBiKQoreworICAgIC8vIGRvdCBwcm9kdWN0CisgICAgcmV0dXJuIGEuZG90KGIpOworfQorCitp
bmxpbmUgR3JhcGhpY3NQb2ludDNEIG9wZXJhdG9yKihHcmFwaGljc1VuaXQgaywgY29uc3QgR3Jh
cGhpY3NQb2ludDNEJiB2KQoreworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QoayAqIHYueCgp
LCBrICogdi55KCksIGsgKiB2LnooKSk7Cit9CisKK2lubGluZSBHcmFwaGljc1BvaW50M0Qgb3Bl
cmF0b3IqKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdiwgR3JhcGhpY3NVbml0IGspCit7CisgICAg
cmV0dXJuIEdyYXBoaWNzUG9pbnQzRChrICogdi54KCksIGsgKiB2LnkoKSwgayAqIHYueigpKTsK
K30KKworaW5saW5lIEdyYXBoaWNzVW5pdCBHcmFwaGljc1BvaW50M0Q6OmRpc3RhbmNlVG8oY29u
c3QgR3JhcGhpY3NQb2ludDNEJiBhKSBjb25zdAoreworICAgIHJldHVybiAoKnRoaXMgLSBhKS5s
ZW5ndGgoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3JhcGhp
Y3NQb2ludDNEX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzUG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzUG9pbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludC5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
KyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxtYXRo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NQb2ludDo6R3JhcGhpY3NQb2lu
dChjb25zdCBJbnRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCit7Cit9CisKK3Zv
aWQgR3JhcGhpY3NQb2ludDo6bm9ybWFsaXplKCkKK3sKKyAgICBHcmFwaGljc1VuaXQgdGVtcExl
bmd0aCA9IGxlbmd0aCgpOworCisgICAgaWYgKHRlbXBMZW5ndGgpIHsKKyAgICAgICAgbV94IC89
IHRlbXBMZW5ndGg7CisgICAgICAgIG1feSAvPSB0ZW1wTGVuZ3RoOworICAgIH0KK30KKworR3Jh
cGhpY3NVbml0IEdyYXBoaWNzUG9pbnQ6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNx
cnRmKGxlbmd0aFNxdWFyZWQoKSk7Cit9CisKK0dyYXBoaWNzUG9pbnQgR3JhcGhpY3NQb2ludDo6
bWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSBjb25zdAor
eworICAgIGRvdWJsZSBuZXdYLCBuZXdZOworICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOworICAg
IHJldHVybiBuYXJyb3dQcmVjaXNpb24obmV3WCwgbmV3WSk7Cit9CisKK0dyYXBoaWNzUG9pbnQg
R3JhcGhpY3NQb2ludDo6bWF0cml4VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pIGNvbnN0Cit7CisgICAgZG91YmxlIG5ld1gsIG5ld1k7CisgICAgdHJhbnNm
b3JtLm1hcChzdGF0aWNfY2FzdDxkb3VibGU+KG1feCksIHN0YXRpY19jYXN0PGRvdWJsZT4obV95
KSwgbmV3WCwgbmV3WSk7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvbihuZXdYLCBuZXdZKTsK
K30KKworR3JhcGhpY3NQb2ludCBHcmFwaGljc1BvaW50OjpuYXJyb3dQcmVjaXNpb24oZG91Ymxl
IHgsIGRvdWJsZSB5KQoreworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG5hcnJvd1ByZWNpc2lv
blRvR3JhcGhpY3NVbml0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh5KSk7Cit9
CisKK0dyYXBoaWNzVW5pdCBmaW5kU2xvcGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAyLCBHcmFwaGljc1VuaXQmIGMpCit7CisgICAgaWYgKHAyLngoKSA9
PSBwMS54KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdyYXBoaWNzVW5p
dD46OmluZmluaXR5KCk7CisKKyAgICAvLyB5ID0gbXggKyBjCisgICAgR3JhcGhpY3NVbml0IHNs
b3BlID0gKHAyLnkoKSAtIHAxLnkoKSkgLyAocDIueCgpIC0gcDEueCgpKTsKKyAgICBjID0gcDEu
eSgpIC0gc2xvcGUgKiBwMS54KCk7CisgICAgcmV0dXJuIHNsb3BlOworfQorCitib29sIGZpbmRJ
bnRlcnNlY3Rpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHAyLCBjb25zdCBHcmFwaGljc1BvaW50JiBkMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDIsIEdy
YXBoaWNzUG9pbnQmIGludGVyc2VjdGlvbikgCit7CisgICAgR3JhcGhpY3NVbml0IHBPZmZzZXQg
PSAwOworICAgIEdyYXBoaWNzVW5pdCBwU2xvcGUgPSBmaW5kU2xvcGUocDEsIHAyLCBwT2Zmc2V0
KTsKKworICAgIEdyYXBoaWNzVW5pdCBkT2Zmc2V0ID0gMDsKKyAgICBHcmFwaGljc1VuaXQgZFNs
b3BlID0gZmluZFNsb3BlKGQxLCBkMiwgZE9mZnNldCk7CisKKyAgICBpZiAoZFNsb3BlID09IHBT
bG9wZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChwU2xvcGUgPT0gc3Rk
OjpudW1lcmljX2xpbWl0czxHcmFwaGljc1VuaXQ+OjppbmZpbml0eSgpKSB7CisgICAgICAgIGlu
dGVyc2VjdGlvbi5zZXRYKHAxLngoKSk7CisgICAgICAgIGludGVyc2VjdGlvbi5zZXRZKGRTbG9w
ZSAqIGludGVyc2VjdGlvbi54KCkgKyBkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChkU2xvcGUgPT0gc3RkOjpudW1lcmljX2xpbWl0czxHcmFwaGljc1VuaXQ+
OjppbmZpbml0eSgpKSB7CisgICAgICAgIGludGVyc2VjdGlvbi5zZXRYKGQxLngoKSk7CisgICAg
ICAgIGludGVyc2VjdGlvbi5zZXRZKHBTbG9wZSAqIGludGVyc2VjdGlvbi54KCkgKyBwT2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgeCBhdCBp
bnRlcnNlY3Rpb24sIHdoZXJlIHlzIG92ZXJsYXA7IHggPSAoYycgLSBjKSAvIChtIC0gbScpCisg
ICAgaW50ZXJzZWN0aW9uLnNldFgoKGRPZmZzZXQgLSBwT2Zmc2V0KSAvIChwU2xvcGUgLSBkU2xv
cGUpKTsKKyAgICBpbnRlcnNlY3Rpb24uc2V0WShwU2xvcGUgKiBpbnRlcnNlY3Rpb24ueCgpICsg
cE9mZnNldCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR3JhcGhp
Y3NQb2ludF9oCisjZGVmaW5lIEdyYXBoaWNzUG9pbnRfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NT
aXplLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCit0eXBlZGVmIHN0
cnVjdCBDR1BvaW50IENHUG9pbnQ7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBM
QVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQorI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNf
U0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7
CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKKyNlbmRpZgorI2VuZGlm
CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJxZ2xvYmFsLmgiCitRVF9CRUdJTl9OQU1F
U1BBQ0UKK2NsYXNzIFFQb2ludEY7CitRVF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKEhBSUtVKQorY2xhc3MgQlBvaW50OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkKK3N0
cnVjdCBTa1BvaW50OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBJbnRQb2lu
dDsKK2NsYXNzIEludFNpemU7CisKK2NsYXNzIEdyYXBoaWNzUG9pbnQgeworcHVibGljOgorICAg
IEdyYXBoaWNzUG9pbnQoKSA6IG1feCgwKSwgbV95KDApIHsgfQorICAgIEdyYXBoaWNzUG9pbnQo
R3JhcGhpY3NVbml0IHgsIEdyYXBoaWNzVW5pdCB5KSA6IG1feCh4KSwgbV95KHkpIHsgfQorICAg
IEdyYXBoaWNzUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworCisgICAgc3RhdGljIEdyYXBoaWNz
UG9pbnQgemVybygpIHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsgfQorCisgICAgc3RhdGljIEdy
YXBoaWNzUG9pbnQgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSk7CisKKyAgICBH
cmFwaGljc1VuaXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIEdyYXBoaWNzVW5pdCB5
KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CisKKyAgICB2b2lkIHNldFgoR3JhcGhpY3NVbml0IHgp
IHsgbV94ID0geDsgfQorICAgIHZvaWQgc2V0WShHcmFwaGljc1VuaXQgeSkgeyBtX3kgPSB5OyB9
CisgICAgdm9pZCBzZXQoR3JhcGhpY3NVbml0IHgsIEdyYXBoaWNzVW5pdCB5KQorICAgIHsKKyAg
ICAgICAgbV94ID0geDsKKyAgICAgICAgbV95ID0geTsKKyAgICB9CisgICAgdm9pZCBtb3ZlKEdy
YXBoaWNzVW5pdCBkeCwgR3JhcGhpY3NVbml0IGR5KQorICAgIHsKKyAgICAgICAgbV94ICs9IGR4
OworICAgICAgICBtX3kgKz0gZHk7CisgICAgfQorICAgIHZvaWQgbW92ZShjb25zdCBJbnRTaXpl
JiBhKQorICAgIHsKKyAgICAgICAgbV94ICs9IGEud2lkdGgoKTsKKyAgICAgICAgbV95ICs9IGEu
aGVpZ2h0KCk7CisgICAgfQorICAgIHZvaWQgbW92ZShjb25zdCBHcmFwaGljc1NpemUmIGEpCisg
ICAgeworICAgICAgICBtX3ggKz0gYS53aWR0aCgpOworICAgICAgICBtX3kgKz0gYS5oZWlnaHQo
KTsKKyAgICB9CisgICAgdm9pZCBtb3ZlQnkoY29uc3QgSW50UG9pbnQmIGEpCisgICAgeworICAg
ICAgICBtX3ggKz0gYS54KCk7CisgICAgICAgIG1feSArPSBhLnkoKTsKKyAgICB9CisgICAgdm9p
ZCBtb3ZlQnkoY29uc3QgR3JhcGhpY3NQb2ludCYgYSkKKyAgICB7CisgICAgICAgIG1feCArPSBh
LngoKTsKKyAgICAgICAgbV95ICs9IGEueSgpOworICAgIH0KKyAgICB2b2lkIHNjYWxlKEdyYXBo
aWNzVW5pdCBzeCwgR3JhcGhpY3NVbml0IHN5KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4Owor
ICAgICAgICBtX3kgKj0gc3k7CisgICAgfQorCisgICAgdm9pZCBub3JtYWxpemUoKTsKKworICAg
IEdyYXBoaWNzVW5pdCBkb3QoY29uc3QgR3JhcGhpY3NQb2ludCYgYSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ggKiBhLngoKSArIG1feSAqIGEueSgpOworICAgIH0KKworICAgIEdy
YXBoaWNzVW5pdCBsZW5ndGgoKSBjb25zdDsKKyAgICBHcmFwaGljc1VuaXQgbGVuZ3RoU3F1YXJl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogbV94ICsgbV95ICogbV95Owor
ICAgIH0KKworICAgIEdyYXBoaWNzUG9pbnQgZXhwYW5kZWRUbyhjb25zdCBHcmFwaGljc1BvaW50
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KHN0ZDo6
bWF4KG1feCwgb3RoZXIubV94KSwgc3RkOjptYXgobV95LCBvdGhlci5tX3kpKTsKKyAgICB9CisK
KyAgICBHcmFwaGljc1BvaW50IHRyYW5zcG9zZWRQb2ludCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gR3JhcGhpY3NQb2ludChtX3ksIG1feCk7CisgICAgfQorCisjaWYgVVNFKENHKSB8
fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisgICAgR3JhcGhpY3NQb2ludChjb25zdCBDR1Bv
aW50Jik7CisgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiAoUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUykpIFwKKyAgICAgICAgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4p
KQorICAgIEdyYXBoaWNzUG9pbnQoY29uc3QgTlNQb2ludCYpOworICAgIG9wZXJhdG9yIE5TUG9p
bnQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisgICAgR3JhcGhpY3NQb2lu
dChjb25zdCBRUG9pbnRGJik7CisgICAgb3BlcmF0b3IgUVBvaW50RigpIGNvbnN0OworI2VuZGlm
CisKKyNpZiBQTEFURk9STShIQUlLVSkKKyAgICBHcmFwaGljc1BvaW50KGNvbnN0IEJQb2ludCYp
OworICAgIG9wZXJhdG9yIEJQb2ludCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkK
KyAgICBvcGVyYXRvciBTa1BvaW50KCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludChjb25zdCBT
a1BvaW50Jik7CisjZW5kaWYKKworICAgIEdyYXBoaWNzUG9pbnQgbWF0cml4VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBtYXRy
aXhUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgR3JhcGhpY3NVbml0IG1feCwgbV95OworfTsKKworCitpbmxpbmUgR3JhcGhpY3NQb2ludCYg
b3BlcmF0b3IrPShHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1NpemUmIGIpCit7Cisg
ICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBHcmFwaGljc1BvaW50JiBvcGVyYXRvcis9KEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGIpCit7CisgICAgYS5tb3ZlKGIueCgpLCBiLnkoKSk7CisgICAgcmV0dXJu
IGE7Cit9CisKK2lubGluZSBHcmFwaGljc1BvaW50JiBvcGVyYXRvci09KEdyYXBoaWNzUG9pbnQm
IGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIu
aGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCBvcGVy
YXRvcisoY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBiKQorewor
ICAgIHJldHVybiBHcmFwaGljc1BvaW50KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVp
Z2h0KCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCBvcGVyYXRvcisoY29uc3QgR3JhcGhp
Y3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpKTsKK30KKworaW5saW5lIEdyYXBo
aWNzU2l6ZSBvcGVyYXRvci0oY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXplKGEueCgpIC0gYi54KCksIGEueSgp
IC0gYi55KCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCBvcGVyYXRvci0oY29uc3QgR3Jh
cGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBiKQoreworICAgIHJldHVybiBHcmFw
aGljc1BvaW50KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVpZ2h0KCkpOworfQorCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIu
eSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8
IGEueSgpICE9IGIueSgpOworfQorCitpbmxpbmUgR3JhcGhpY3NVbml0IG9wZXJhdG9yKihjb25z
dCBHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIC8vIGRv
dCBwcm9kdWN0CisgICAgcmV0dXJuIGEuZG90KGIpOworfQorCitpbmxpbmUgSW50UG9pbnQgcm91
bmRlZEludFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCit7CisgICAgcmV0dXJuIEludFBv
aW50KHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAueCgpKSksIHN0YXRpY19jYXN0PGludD4ocm91
bmRmKHAueSgpKSkpOworfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHApCit7CisgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGlu
dD4ocC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7Cit9CisKK2lubGluZSBJbnRTaXpl
IGZsb29yZWRJbnRTaXplKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCit7CisgICAgcmV0dXJuIElu
dFNpemUoc3RhdGljX2Nhc3Q8aW50PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkpKTsK
K30KKworR3JhcGhpY3NVbml0IGZpbmRTbG9wZShjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcDIsIEdyYXBoaWNzVW5pdCYpOworCisvLyBGaW5kIHBvaW50IHdo
ZXJlIGxpbmVzIHRocm91Z2ggdGhlIHR3byBwYWlycyBvZiBwb2ludHMgaW50ZXJzZWN0LiBSZXR1
cm5zIGZhbHNlIGlmIHRoZSBsaW5lcyBkb24ndCBpbnRlcnNlY3QuCitib29sIGZpbmRJbnRlcnNl
Y3Rpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBj
b25zdCBHcmFwaGljc1BvaW50JiBkMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDIsIEdyYXBoaWNz
UG9pbnQmIGludGVyc2VjdGlvbik7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCit1c2luZyBz
dGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBpbmxpbmUgR3JhcGhpY3NVbml0IG1pbjQoR3JhcGhpY3NVbml0IGEsIEdyYXBoaWNzVW5pdCBi
LCBHcmFwaGljc1VuaXQgYywgR3JhcGhpY3NVbml0IGQpCit7CisgICAgcmV0dXJuIG1pbihtaW4o
YSwgYiksIG1pbihjLCBkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NVbml0IG1heDQo
R3JhcGhpY3NVbml0IGEsIEdyYXBoaWNzVW5pdCBiLCBHcmFwaGljc1VuaXQgYywgR3JhcGhpY3NV
bml0IGQpCit7CisgICAgcmV0dXJuIG1heChtYXgoYSwgYiksIG1heChjLCBkKSk7Cit9CisKK2lu
bGluZSBHcmFwaGljc1VuaXQgZG90KGNvbnN0IEdyYXBoaWNzU2l6ZSYgYSwgY29uc3QgR3JhcGhp
Y3NTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgKiBiLndpZHRoKCkgKyBhLmhlaWdo
dCgpICogYi5oZWlnaHQoKTsKK30KKworaW5saW5lIGJvb2wgaXNQb2ludEluVHJpYW5nbGUoY29u
c3QgR3JhcGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NQb2ludCYgdDEsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0MykKK3sKKyAgICAvLyBDb21wdXRl
IHZlY3RvcnMgICAgICAgIAorICAgIEdyYXBoaWNzU2l6ZSB2MCA9IHQzIC0gdDE7CisgICAgR3Jh
cGhpY3NTaXplIHYxID0gdDIgLSB0MTsKKyAgICBHcmFwaGljc1NpemUgdjIgPSBwIC0gdDE7Cisg
ICAgCisgICAgLy8gQ29tcHV0ZSBkb3QgcHJvZHVjdHMKKyAgICBHcmFwaGljc1VuaXQgZG90MDAg
PSBkb3QodjAsIHYwKTsKKyAgICBHcmFwaGljc1VuaXQgZG90MDEgPSBkb3QodjAsIHYxKTsKKyAg
ICBHcmFwaGljc1VuaXQgZG90MDIgPSBkb3QodjAsIHYyKTsKKyAgICBHcmFwaGljc1VuaXQgZG90
MTEgPSBkb3QodjEsIHYxKTsKKyAgICBHcmFwaGljc1VuaXQgZG90MTIgPSBkb3QodjEsIHYyKTsK
KworICAgIC8vIENvbXB1dGUgYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMKKyAgICBHcmFwaGljc1Vu
aXQgaW52RGVub20gPSAxLjBmIC8gKGRvdDAwICogZG90MTEgLSBkb3QwMSAqIGRvdDAxKTsKKyAg
ICBHcmFwaGljc1VuaXQgdSA9IChkb3QxMSAqIGRvdDAyIC0gZG90MDEgKiBkb3QxMikgKiBpbnZE
ZW5vbTsKKyAgICBHcmFwaGljc1VuaXQgdiA9IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3Qw
MikgKiBpbnZEZW5vbTsKKworICAgIC8vIENoZWNrIGlmIHBvaW50IGlzIGluIHRyaWFuZ2xlCisg
ICAgcmV0dXJuICh1ID49IDApICYmICh2ID49IDApICYmICh1ICsgdiA8PSAxKTsKK30KKworR3Jh
cGhpY3NSZWN0IEdyYXBoaWNzUXVhZDo6Ym91bmRpbmdCb3goKSBjb25zdAoreworICAgIEdyYXBo
aWNzVW5pdCBsZWZ0ICAgPSBtaW40KG1fcDEueCgpLCBtX3AyLngoKSwgbV9wMy54KCksIG1fcDQu
eCgpKTsKKyAgICBHcmFwaGljc1VuaXQgdG9wICAgID0gbWluNChtX3AxLnkoKSwgbV9wMi55KCks
IG1fcDMueSgpLCBtX3A0LnkoKSk7CisKKyAgICBHcmFwaGljc1VuaXQgcmlnaHQgID0gbWF4NCht
X3AxLngoKSwgbV9wMi54KCksIG1fcDMueCgpLCBtX3A0LngoKSk7CisgICAgR3JhcGhpY3NVbml0
IGJvdHRvbSA9IG1heDQobV9wMS55KCksIG1fcDIueSgpLCBtX3AzLnkoKSwgbV9wNC55KCkpOwor
ICAgIAorICAgIHJldHVybiBHcmFwaGljc1JlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJv
dHRvbSAtIHRvcCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NRdWFkOjppc1JlY3RpbGluZWFyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKG1fcDEueCgpID09IG1fcDIueCgpICYmIG1fcDIueSgpID09IG1f
cDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYmIG1fcDQueSgpID09IG1fcDEueSgpKQor
ICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkgJiYgbV9wMi54KCkgPT0gbV9wMy54KCkg
JiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54KCkgPT0gbV9wMS54KCkpOworfQorCiti
b29sIEdyYXBoaWNzUXVhZDo6Y29udGFpbnNQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKSBj
b25zdAoreworICAgIHJldHVybiBpc1BvaW50SW5UcmlhbmdsZShwLCBtX3AxLCBtX3AyLCBtX3Az
KSB8fCBpc1BvaW50SW5UcmlhbmdsZShwLCBtX3AxLCBtX3AzLCBtX3A0KTsKK30gCisKKy8vIE5v
dGUgdGhhdCB3ZSBvbmx5IGhhbmRsZSBjb252ZXggcXVhZHMgaGVyZS4KK2Jvb2wgR3JhcGhpY3NR
dWFkOjpjb250YWluc1F1YWQoY29uc3QgR3JhcGhpY3NRdWFkJiBvdGhlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29udGFpbnNQb2ludChvdGhlci5wMSgpKSAmJiBjb250YWluc1BvaW50KG90aGVy
LnAyKCkpICYmIGNvbnRhaW5zUG9pbnQob3RoZXIucDMoKSkgJiYgY29udGFpbnNQb2ludChvdGhl
ci5wNCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR3JhcGhpY3NRdWFkX2gKKyNkZWZp
bmUgR3JhcGhpY3NRdWFkX2gKKworI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gQSBHcmFwaGljc1F1YWQgaXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBv
ZnRlbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZgorLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0
aHJvdWdoIHRyYW5zZm9ybXMuIFdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQorLy8g
cG9pbnRzIGFyZSBpbiBjbG9ja3dpc2Ugb3JkZXIgZnJvbSB0b3AgbGVmdC4KK2NsYXNzIEdyYXBo
aWNzUXVhZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NRdWFkKCkKKyAgICB7CisgICAgfQorCisg
ICAgR3JhcGhpY3NRdWFkKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHA0
KQorICAgICAgICA6IG1fcDEocDEpCisgICAgICAgICwgbV9wMihwMikKKyAgICAgICAgLCBtX3Az
KHAzKQorICAgICAgICAsIG1fcDQocDQpCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzUXVh
ZChjb25zdCBHcmFwaGljc1JlY3QmIGluUmVjdCkKKyAgICAgICAgOiBtX3AxKGluUmVjdC5sb2Nh
dGlvbigpKQorICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0LnkoKSkKKyAgICAg
ICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCisgICAgICAgICwgbV9wNChp
blJlY3QueCgpLCBpblJlY3QubWF4WSgpKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1Bv
aW50IHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsgfQorICAgIEdyYXBoaWNzUG9pbnQgcDIoKSBj
b25zdCB7IHJldHVybiBtX3AyOyB9CisgICAgR3JhcGhpY3NQb2ludCBwMygpIGNvbnN0IHsgcmV0
dXJuIG1fcDM7IH0KKyAgICBHcmFwaGljc1BvaW50IHA0KCkgY29uc3QgeyByZXR1cm4gbV9wNDsg
fQorCisgICAgdm9pZCBzZXRQMShjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDEgPSBwOyB9
CisgICAgdm9pZCBzZXRQMihjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDIgPSBwOyB9Cisg
ICAgdm9pZCBzZXRQMyhjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDMgPSBwOyB9CisgICAg
dm9pZCBzZXRQNChjb25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcDQgPSBwOyB9CisKKyAgICAv
LyBpc0VtcHR5IHRlc3RzIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBpcyBlbXB0eS4gVGhpcyB3aWxs
IG5vdCBpZGVudGlmeQorICAgIC8vICJzbGFudGVkIiBlbXB0eSBxdWFkcy4KKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBib3VuZGluZ0JveCgpLmlzRW1wdHkoKTsgfQorCisgICAg
Ly8gVGVzdHMgd2hldGhlciB0aGlzIHF1YWQgY2FuIGJlIGxvc3NsZXNzbHkgcmVwcmVzZW50ZWQg
YnkgYSBHcmFwaGljc1JlY3QsCisgICAgLy8gdGhhdCBpcywgaWYgdHdvIGVkZ2VzIGFyZSBwYXJh
bGxlbCB0byB0aGUgeC1heGlzIGFuZCB0aGUgb3RoZXIgdHdvCisgICAgLy8gYXJlIHBhcmFsbGVs
IHRvIHRoZSB5LWF4aXMuIElmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlCisgICAgLy8g
Y29ycmVzcG9uZGluZyBHcmFwaGljc1JlY3QgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGJvdW5kaW5n
Qm94KCkuCisgICAgYm9vbCBpc1JlY3RpbGluZWFyKCkgY29uc3Q7CisKKyAgICAvLyBUZXN0cyB3
aGV0aGVyIHRoZSBnaXZlbiBwb2ludCBpcyBpbnNpZGUsIG9yIG9uIGFuIGVkZ2Ugb3IgY29ybmVy
IG9mIHRoaXMgcXVhZC4KKyAgICBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgR3JhcGhpY3NQb2lu
dCYpIGNvbnN0OworCisgICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZm91ciBjb3JuZXJzIG9mIG90
aGVyIGFyZSBpbnNpZGUsIG9yIGNvaW5jaWRlbnQgd2l0aCB0aGUgc2lkZXMgb2YgdGhpcyBxdWFk
LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgZm9yIGNvbnZleCBxdWFkcywgYnV0
IHRoYXQgaW5jbHVkZXMgYWxsIHF1YWRzIHRoYXQgb3JpZ2luYXRlCisgICAgLy8gZnJvbSB0cmFu
c2Zvcm1lZCByZWN0cy4KKyAgICBib29sIGNvbnRhaW5zUXVhZChjb25zdCBHcmFwaGljc1F1YWQm
KSBjb25zdDsKKworICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCgpIGNvbnN0OworICAgIElu
dFJlY3QgZW5jbG9zaW5nQm91bmRpbmdCb3goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgdm9pZCBtb3Zl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9wMSArPSBvZmZz
ZXQ7CisgICAgICAgIG1fcDIgKz0gb2Zmc2V0OworICAgICAgICBtX3AzICs9IG9mZnNldDsKKyAg
ICAgICAgbV9wNCArPSBvZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKEdyYXBoaWNzVW5p
dCBkeCwgR3JhcGhpY3NVbml0IGR5KQorICAgIHsKKyAgICAgICAgbV9wMS5tb3ZlKGR4LCBkeSk7
CisgICAgICAgIG1fcDIubW92ZShkeCwgZHkpOworICAgICAgICBtX3AzLm1vdmUoZHgsIGR5KTsK
KyAgICAgICAgbV9wNC5tb3ZlKGR4LCBkeSk7CisgICAgfQorCisgICAgdm9pZCBzY2FsZShHcmFw
aGljc1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fcDEuc2NhbGUo
ZHgsIGR5KTsKKyAgICAgICAgbV9wMi5zY2FsZShkeCwgZHkpOworICAgICAgICBtX3AzLnNjYWxl
KGR4LCBkeSk7CisgICAgICAgIG1fcDQuc2NhbGUoZHgsIGR5KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgR3JhcGhpY3NQb2ludCBtX3AxOworICAgIEdyYXBoaWNzUG9pbnQgbV9wMjsKKyAgICBH
cmFwaGljc1BvaW50IG1fcDM7CisgICAgR3JhcGhpY3NQb2ludCBtX3A0OworfTsKKworaW5saW5l
IEdyYXBoaWNzUXVhZCYgb3BlcmF0b3IrPShHcmFwaGljc1F1YWQmIGEsIGNvbnN0IEdyYXBoaWNz
U2l6ZSYgYikKK3sKKyAgICBhLm1vdmUoYik7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBH
cmFwaGljc1F1YWQmIG9wZXJhdG9yLT0oR3JhcGhpY3NRdWFkJiBhLCBjb25zdCBHcmFwaGljc1Np
emUmIGIpCit7CisgICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1
cm4gYTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHcmFwaGljc1F1YWQmIGEs
IGNvbnN0IEdyYXBoaWNzUXVhZCYgYikKK3sKKyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAm
JgorICAgICAgICAgICBhLnAyKCkgPT0gYi5wMigpICYmIAorICAgICAgICAgICBhLnAzKCkgPT0g
Yi5wMygpICYmCisgICAgICAgICAgIGEucDQoKSA9PSBiLnA0KCk7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NRdWFkJiBhLCBjb25zdCBHcmFwaGljc1F1YWQmIGIp
Cit7CisgICAgcmV0dXJuIGEucDEoKSAhPSBiLnAxKCkgfHwKKyAgICAgICAgICAgYS5wMigpICE9
IGIucDIoKSB8fCAKKyAgICAgICAgICAgYS5wMygpICE9IGIucDMoKSB8fAorICAgICAgICAgICBh
LnA0KCkgIT0gYi5wNCgpOworfQorCit9ICAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5k
aWYgLy8gR3JhcGhpY3NRdWFkX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tp
YS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgorCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxtYXRo
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc1JlY3Q6OkdyYXBoaWNzUmVjdChjb25z
dCBJbnRSZWN0JiByKSA6IG1fbG9jYXRpb24oci5sb2NhdGlvbigpKSwgbV9zaXplKHIuc2l6ZSgp
KQoreworfQorCitHcmFwaGljc1JlY3QgR3JhcGhpY3NSZWN0OjpuYXJyb3dQcmVjaXNpb24oZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpCit7CisgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdChuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh4KSwgbmFycm93
UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoeSksIG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0
KHdpZHRoKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoaGVpZ2h0KSk7Cit9CisKK2Jv
b2wgR3JhcGhpY3NSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIpIGNv
bnN0Cit7CisgICAgLy8gQ2hlY2tpbmcgZW1wdGluZXNzIGhhbmRsZXMgbmVnYXRpdmUgd2lkdGhz
IGFzIHdlbGwgYXMgemVyby4KKyAgICByZXR1cm4gIWlzRW1wdHkoKSAmJiAhb3RoZXIuaXNFbXB0
eSgpCisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkK
KyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsKK30K
KworYm9vbCBHcmFwaGljc1JlY3Q6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90aGVy
Lm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5t
YXhZKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NSZWN0OjppbnRlcnNlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiBvdGhlcikKK3sKKyAgICBHcmFwaGljc1VuaXQgbCA9IG1heCh4KCksIG90aGVyLngoKSk7
CisgICAgR3JhcGhpY3NVbml0IHQgPSBtYXgoeSgpLCBvdGhlci55KCkpOworICAgIEdyYXBoaWNz
VW5pdCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBHcmFwaGljc1VuaXQgYiA9
IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CisKKyAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCisgICAgaWYgKGwgPj0gciB8
fCB0ID49IGIpIHsKKyAgICAgICAgbCA9IDA7CisgICAgICAgIHQgPSAwOworICAgICAgICByID0g
MDsKKyAgICAgICAgYiA9IDA7CisgICAgfQorCisgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVk
Z2VzKGwsIHQsIHIsIGIpOworfQorCit2b2lkIEdyYXBoaWNzUmVjdDo6dW5pdGUoY29uc3QgR3Jh
cGhpY3NSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBm
aXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgR3JhcGhpY3NVbml0IGwgPSBtaW4oeCgpLCBvdGhlci54KCkpOworICAgIEdy
YXBoaWNzVW5pdCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBHcmFwaGljc1VuaXQgciA9
IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgR3JhcGhpY3NVbml0IGIgPSBtYXgobWF4
WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGws
IHQsIHIsIGIpOworfQorCit2b2lkIEdyYXBoaWNzUmVjdDo6dW5pdGVJZk5vblplcm8oY29uc3Qg
R3JhcGhpY3NSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNl
cyBmaXJzdC4KKyAgICBpZiAoIW90aGVyLndpZHRoKCkgJiYgIW90aGVyLmhlaWdodCgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCF3aWR0aCgpICYmICFoZWlnaHQoKSkgeworICAgICAgICAq
dGhpcyA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR3JhcGhpY3NVbml0
IGxlZnQgPSBtaW4oeCgpLCBvdGhlci54KCkpOworICAgIEdyYXBoaWNzVW5pdCB0b3AgPSBtaW4o
eSgpLCBvdGhlci55KCkpOworICAgIEdyYXBoaWNzVW5pdCByaWdodCA9IG1heChtYXhYKCksIG90
aGVyLm1heFgoKSk7CisgICAgR3JhcGhpY3NVbml0IGJvdHRvbSA9IG1heChtYXhZKCksIG90aGVy
Lm1heFkoKSk7CisKKyAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCBy
aWdodCwgYm90dG9tKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnNjYWxlKEdyYXBoaWNzVW5p
dCBzeCwgR3JhcGhpY3NVbml0IHN5KQoreworICAgIG1fbG9jYXRpb24uc2V0WCh4KCkgKiBzeCk7
CisgICAgbV9sb2NhdGlvbi5zZXRZKHkoKSAqIHN5KTsKKyAgICBtX3NpemUuc2V0V2lkdGgod2lk
dGgoKSAqIHN4KTsKKyAgICBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCgpICogc3kpOworfQorCit2
b2lkIEdyYXBoaWNzUmVjdDo6Zml0VG9Qb2ludHMoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHAxKQoreworICAgIEdyYXBoaWNzVW5pdCBsZWZ0ID0gbWluKHAw
LngoKSwgcDEueCgpKTsKKyAgICBHcmFwaGljc1VuaXQgdG9wID0gbWluKHAwLnkoKSwgcDEueSgp
KTsKKyAgICBHcmFwaGljc1VuaXQgcmlnaHQgPSBtYXgocDAueCgpLCBwMS54KCkpOworICAgIEdy
YXBoaWNzVW5pdCBib3R0b20gPSBtYXgocDAueSgpLCBwMS55KCkpOworCisgICAgc2V0TG9jYXRp
b25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Cit9CisKK25hbWVz
cGFjZSB7CisvLyBIZWxwZXJzIGZvciAzLSBhbmQgNC13YXkgbWF4IGFuZCBtaW4uCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorVCBtaW4zKGNvbnN0IFQmIHYxLCBjb25zdCBUJiB2MiwgY29uc3Qg
VCYgdjMpCit7CisgICAgcmV0dXJuIG1pbihtaW4odjEsIHYyKSwgdjMpOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK1QgbWF4Myhjb25zdCBUJiB2MSwgY29uc3QgVCYgdjIsIGNvbnN0IFQm
IHYzKQoreworICAgIHJldHVybiBtYXgobWF4KHYxLCB2MiksIHYzKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitUIG1pbjQoY29uc3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2
MywgY29uc3QgVCYgdjQpCit7CisgICAgcmV0dXJuIG1pbihtaW4odjEsIHYyKSwgbWluKHYzLCB2
NCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1QgbWF4NChjb25zdCBUJiB2MSwgY29u
c3QgVCYgdjIsIGNvbnN0IFQmIHYzLCBjb25zdCBUJiB2NCkKK3sKKyAgICByZXR1cm4gbWF4KG1h
eCh2MSwgdjIpLCBtYXgodjMsIHY0KSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Cit2b2lkIEdyYXBoaWNzUmVjdDo6Zml0VG9Qb2ludHMoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMikKK3sKKyAg
ICBHcmFwaGljc1VuaXQgbGVmdCA9IG1pbjMocDAueCgpLCBwMS54KCksIHAyLngoKSk7CisgICAg
R3JhcGhpY3NVbml0IHRvcCA9IG1pbjMocDAueSgpLCBwMS55KCksIHAyLnkoKSk7CisgICAgR3Jh
cGhpY3NVbml0IHJpZ2h0ID0gbWF4MyhwMC54KCksIHAxLngoKSwgcDIueCgpKTsKKyAgICBHcmFw
aGljc1VuaXQgYm90dG9tID0gbWF4MyhwMC55KCksIHAxLnkoKSwgcDIueSgpKTsKKworICAgIHNl
dExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQor
Cit2b2lkIEdyYXBoaWNzUmVjdDo6Zml0VG9Qb2ludHMoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcDMpCit7CisgICAgR3JhcGhpY3NVbml0IGxlZnQgPSBtaW40KHAwLngo
KSwgcDEueCgpLCBwMi54KCksIHAzLngoKSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCA9IG1pbjQo
cDAueSgpLCBwMS55KCksIHAyLnkoKSwgcDMueSgpKTsKKyAgICBHcmFwaGljc1VuaXQgcmlnaHQg
PSBtYXg0KHAwLngoKSwgcDEueCgpLCBwMi54KCksIHAzLngoKSk7CisgICAgR3JhcGhpY3NVbml0
IGJvdHRvbSA9IG1heDQocDAueSgpLCBwMS55KCksIHAyLnkoKSwgcDMueSgpKTsKKworICAgIHNl
dExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworfQor
CitJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQorewor
ICAgIEdyYXBoaWNzVW5pdCBsZWZ0ID0gZmxvb3IocmVjdC54KCkpOworICAgIEdyYXBoaWNzVW5p
dCB0b3AgPSBmbG9vcihyZWN0LnkoKSk7CisgICAgR3JhcGhpY3NVbml0IHdpZHRoID0gY2VpbChy
ZWN0Lm1heFgoKSkgLSBsZWZ0OworICAgIEdyYXBoaWNzVW5pdCBoZWlnaHQgPSBjZWlsKHJlY3Qu
bWF4WSgpKSAtIHRvcDsKKyAgICAKKyAgICByZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcihs
ZWZ0KSwgY2xhbXBUb0ludGVnZXIodG9wKSwgCisgICAgICAgICAgICAgICAgICAgY2xhbXBUb0lu
dGVnZXIod2lkdGgpLCBjbGFtcFRvSW50ZWdlcihoZWlnaHQpKTsKK30KKworR3JhcGhpY3NSZWN0
IG1hcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCit7CisgICAgaWYgKHNyY1JlY3Qud2lk
dGgoKSA9PSAwIHx8IHNyY1JlY3QuaGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOworCisgICAgR3JhcGhpY3NVbml0IHdpZHRoU2NhbGUgPSBkZXN0UmVjdC53aWR0
aCgpIC8gc3JjUmVjdC53aWR0aCgpOworICAgIEdyYXBoaWNzVW5pdCBoZWlnaHRTY2FsZSA9IGRl
c3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NS
ZWN0KGRlc3RSZWN0LngoKSArIChyLngoKSAtIHNyY1JlY3QueCgpKSAqIHdpZHRoU2NhbGUsCisg
ICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC55KCkgKyAoci55KCkgLSBzcmNSZWN0LnkoKSkg
KiBoZWlnaHRTY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSAqIHdpZHRoU2Nh
bGUsIHIuaGVpZ2h0KCkgKiBoZWlnaHRTY2FsZSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR3JhcGhp
Y3NSZWN0X2gKKyNkZWZpbmUgR3JhcGhpY3NSZWN0X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQordHlwZWRl
ZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAo
UExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCisjaWZkZWYgTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKK3R5cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7
CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7CisjZW5kaWYKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oUVQpCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFSZWN0RjsKK1FU
X0VORF9OQU1FU1BBQ0UKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQor
Y2xhc3Mgd3hSZWN0MkREb3VibGU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEhBSUtVKQorY2xh
c3MgQlJlY3Q7CisjZW5kaWYKKworI2lmIFVTRShTS0lBKQorc3RydWN0IFNrUmVjdDsKKyNlbmRp
ZgorCisjaWYgVVNFKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWly
b19yZWN0YW5nbGVfdDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFU
Rk9STShPUEVOVkcpCitjbGFzcyBWR1JlY3Q7CisjZW5kaWYKKworY2xhc3MgSW50UmVjdDsKK2Ns
YXNzIEludFBvaW50OworCitjbGFzcyBHcmFwaGljc1JlY3QgeworcHVibGljOgorICAgIEdyYXBo
aWNzUmVjdCgpIHsgfQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBHcmFwaGljc1BvaW50JiBsb2Nh
dGlvbiwgY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQorICAgICAgICA6IG1fbG9jYXRpb24obG9j
YXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9CisgICAgR3JhcGhpY3NSZWN0KEdyYXBoaWNzVW5pdCB4
LCBHcmFwaGljc1VuaXQgeSwgR3JhcGhpY3NVbml0IHdpZHRoLCBHcmFwaGljc1VuaXQgaGVpZ2h0
KQorICAgICAgICA6IG1fbG9jYXRpb24oR3JhcGhpY3NQb2ludCh4LCB5KSksIG1fc2l6ZShHcmFw
aGljc1NpemUod2lkdGgsIGhlaWdodCkpIHsgfQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICBzdGF0aWMgR3JhcGhpY3NSZWN0IG5hcnJvd1ByZWNpc2lvbihkb3VibGUg
eCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CisKKyAgICBHcmFwaGlj
c1BvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQorICAgIEdyYXBo
aWNzU2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB2b2lkIHNldExv
Y2F0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxvY2F0aW9uKSB7IG1fbG9jYXRpb24gPSBsb2Nh
dGlvbjsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpIHsgbV9z
aXplID0gc2l6ZTsgfQorCisgICAgR3JhcGhpY3NVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX2xv
Y2F0aW9uLngoKTsgfQorICAgIEdyYXBoaWNzVW5pdCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
dGlvbi55KCk7IH0KKyAgICBHcmFwaGljc1VuaXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSAr
IHdpZHRoKCk7IH0KKyAgICBHcmFwaGljc1VuaXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJuIHkoKSAr
IGhlaWdodCgpOyB9CisgICAgR3JhcGhpY3NVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KKyAgICBHcmFwaGljc1VuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9zaXplLmhlaWdodCgpOyB9CisKKyAgICB2b2lkIHNldFgoR3JhcGhpY3NVbml0IHgpIHsgbV9s
b2NhdGlvbi5zZXRYKHgpOyB9CisgICAgdm9pZCBzZXRZKEdyYXBoaWNzVW5pdCB5KSB7IG1fbG9j
YXRpb24uc2V0WSh5KTsgfQorICAgIHZvaWQgc2V0V2lkdGgoR3JhcGhpY3NVbml0IHdpZHRoKSB7
IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChHcmFwaGljc1Vu
aXQgaGVpZ2h0KSB7IG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsgfQorCisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQorCisgICAgR3JhcGhpY3NQ
b2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1BvaW50KHgoKSArIHdpZHRoKCkg
LyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CisKKyAgICB2b2lkIG1vdmUoY29uc3QgR3JhcGhp
Y3NTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IAorICAgIHZvaWQgbW92ZUJ5
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGRlbHRhKSB7IG1fbG9jYXRpb24ubW92ZShkZWx0YS54KCks
IGRlbHRhLnkoKSk7IH0KKyAgICB2b2lkIG1vdmUoR3JhcGhpY3NVbml0IGR4LCBHcmFwaGljc1Vu
aXQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0KKworICAgIHZvaWQgZXhwYW5kKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhw
YW5kKEdyYXBoaWNzVW5pdCBkdywgR3JhcGhpY3NVbml0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcs
IGRoKTsgfQorICAgIHZvaWQgY29udHJhY3QoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSB7IG1f
c2l6ZSAtPSBzaXplOyB9CisgICAgdm9pZCBjb250cmFjdChHcmFwaGljc1VuaXQgZHcsIEdyYXBo
aWNzVW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKC1kdywgLWRoKTsgfQorCisgICAgdm9pZCBzaGlm
dFhFZGdlVG8oR3JhcGhpY3NVbml0IGVkZ2UpCisgICAgeworICAgICAgICBHcmFwaGljc1VuaXQg
ZGVsdGEgPSBlZGdlIC0geCgpOworICAgICAgICBzZXRYKGVkZ2UpOworICAgICAgICBzZXRXaWR0
aChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIHdpZHRoKCkgLSBkZWx0YSkpOworICAgIH0K
KyAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhHcmFwaGljc1VuaXQgZWRnZSkKKyAgICB7CisgICAg
ICAgIEdyYXBoaWNzVW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhYKCk7CisgICAgICAgIHNldFdpZHRo
KHN0ZDo6bWF4PEdyYXBoaWNzVW5pdD4oMC4wZiwgd2lkdGgoKSArIGRlbHRhKSk7CisgICAgfQor
ICAgIHZvaWQgc2hpZnRZRWRnZVRvKEdyYXBoaWNzVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAg
R3JhcGhpY3NVbml0IGRlbHRhID0gZWRnZSAtIHkoKTsKKyAgICAgICAgc2V0WShlZGdlKTsKKyAg
ICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4PEdyYXBoaWNzVW5pdD4oMC4wZiwgaGVpZ2h0KCkgLSBk
ZWx0YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0TWF4WUVkZ2VUbyhHcmFwaGljc1VuaXQgZWRn
ZSkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzVW5pdCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7Cisg
ICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIGhlaWdodCgpICsg
ZGVsdGEpKTsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50IG1pblhNaW5ZQ29ybmVyKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2FsbHkgdG9wTGVmdAorICAgIEdyYXBo
aWNzUG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1BvaW50KG1f
bG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpKTsgfSAvLyB0eXBp
Y2FsbHkgdG9wUmlnaHQKKyAgICBHcmFwaGljc1BvaW50IG1pblhNYXhZQ29ybmVyKCkgY29uc3Qg
eyByZXR1cm4gR3JhcGhpY3NQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55KCkgKyBt
X3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0CisgICAgR3JhcGhpY3NQ
b2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV9sb2Nh
dGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0
KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAorCisgICAgYm9vbCBpbnRlcnNlY3RzKGNv
bnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgR3JhcGhp
Y3NSZWN0JikgY29uc3Q7CisKKyAgICB2b2lkIGludGVyc2VjdChjb25zdCBHcmFwaGljc1JlY3Qm
KTsKKyAgICB2b2lkIHVuaXRlKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgdW5pdGVJ
Zk5vblplcm8oY29uc3QgR3JhcGhpY3NSZWN0Jik7CisKKyAgICAvLyBOb3RlLCB0aGlzIGRvZXNu
J3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQg
dmVyc2lvbgorICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgx
IHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KKyAgICBib29s
IGNvbnRhaW5zKEdyYXBoaWNzVW5pdCBweCwgR3JhcGhpY3NVbml0IHB5KSBjb25zdAorICAgICAg
ICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPD0gbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8
PSBtYXhZKCk7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KKworICAg
IHZvaWQgaW5mbGF0ZVgoR3JhcGhpY3NVbml0IGR4KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlv
bi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOworICAgICAgICBtX3NpemUuc2V0V2lkdGgobV9z
aXplLndpZHRoKCkgKyBkeCArIGR4KTsKKyAgICB9CisgICAgdm9pZCBpbmZsYXRlWShHcmFwaGlj
c1VuaXQgZHkpCisgICAgeworICAgICAgICBtX2xvY2F0aW9uLnNldFkobV9sb2NhdGlvbi55KCkg
LSBkeSk7CisgICAgICAgIG1fc2l6ZS5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpICsgZHkgKyBk
eSk7CisgICAgfQorICAgIHZvaWQgaW5mbGF0ZShHcmFwaGljc1VuaXQgZCkgeyBpbmZsYXRlWChk
KTsgaW5mbGF0ZVkoZCk7IH0KKyAgICB2b2lkIHNjYWxlKEdyYXBoaWNzVW5pdCBzKSB7IHNjYWxl
KHMsIHMpOyB9CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBz
eSk7CisKKyAgICBHcmFwaGljc1JlY3QgdHJhbnNwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBH
cmFwaGljc1JlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSwgbV9zaXplLnRyYW5zcG9z
ZWRTaXplKCkpOyB9CisKKyAgICAvLyBSZS1pbml0aWFsaXplcyB0aGlzIHJlY3RhbmdsZSB0byBm
aXQgdGhlIHNldHMgb2YgcGFzc2VkIHBvaW50cy4KKyAgICB2b2lkIGZpdFRvUG9pbnRzKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSk7CisgICAgdm9pZCBm
aXRUb1BvaW50cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyKTsKKyAgICB2b2lkIGZpdFRvUG9pbnRzKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzKTsKKworI2lmIFVTRShDRykgfHwg
VVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBDR1JlY3Qm
KTsKKyAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQ
RVMpKSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyAg
ICBHcmFwaGljc1JlY3QoY29uc3QgTlNSZWN0Jik7CisgICAgb3BlcmF0b3IgTlNSZWN0KCkgY29u
c3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBR
UmVjdEYmKTsKKyAgICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qg
bm9ybWFsaXplZCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXWCkgJiYgVVNFKFdY
R0MpCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IHd4UmVjdDJERG91YmxlJik7CisgICAgb3BlcmF0
b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1Up
CisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IEJSZWN0Jik7CisgICAgb3BlcmF0b3IgQlJlY3QoKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IFNr
UmVjdCYpOworICAgIG9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShPUEVOVkcpCisgICAgb3BlcmF0b3IgVkdSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lm
IFVTRShDQUlSTykKKyAgICBHcmFwaGljc1JlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3QmKTsK
KyAgICBvcGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNvbnN0OworI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgR3JhcGhpY3NQb2ludCBtX2xvY2F0aW9uOworICAgIEdyYXBoaWNzU2l6ZSBtX3Np
emU7CisKKyAgICB2b2lkIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhHcmFwaGljc1VuaXQg
bGVmdCwgR3JhcGhpY3NVbml0IHRvcCwgR3JhcGhpY3NVbml0IHJpZ2h0LCBHcmFwaGljc1VuaXQg
Ym90dG9tKQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXQobGVmdCwgdG9wKTsKKyAgICAg
ICAgbV9zaXplLnNldFdpZHRoKHJpZ2h0IC0gbGVmdCk7CisgICAgICAgIG1fc2l6ZS5zZXRIZWln
aHQoYm90dG9tIC0gdG9wKTsKKyAgICB9Cit9OworCitpbmxpbmUgR3JhcGhpY3NSZWN0IGludGVy
c2VjdGlvbihjb25zdCBHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYikKK3sK
KyAgICBHcmFwaGljc1JlY3QgYyA9IGE7CisgICAgYy5pbnRlcnNlY3QoYik7CisgICAgcmV0dXJu
IGM7Cit9CisKK2lubGluZSBHcmFwaGljc1JlY3QgdW5pb25SZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIEdyYXBoaWNzUmVjdCBjID0gYTsK
KyAgICBjLnVuaXRlKGIpOworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgR3JhcGhpY3NSZWN0
JiBvcGVyYXRvcis9KEdyYXBoaWNzUmVjdCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQorewor
ICAgIGEubW92ZShiLngoKSwgYi55KCkpOworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpICsgYi53
aWR0aCgpKTsKKyAgICBhLnNldEhlaWdodChhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7CisgICAg
cmV0dXJuIGE7Cit9CisKK2lubGluZSBHcmFwaGljc1JlY3Qgb3BlcmF0b3IrKGNvbnN0IEdyYXBo
aWNzUmVjdCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIEdyYXBoaWNzUmVjdCBj
ID0gYTsKKyAgICBjICs9IGI7CisgICAgcmV0dXJuIGM7Cit9CisKK2lubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgR3JhcGhpY3NSZWN0JiBhLCBjb25zdCBHcmFwaGljc1JlY3QmIGIpCit7Cisg
ICAgcmV0dXJuIGEubG9jYXRpb24oKSA9PSBiLmxvY2F0aW9uKCkgJiYgYS5zaXplKCkgPT0gYi5z
aXplKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NSZWN0JiBh
LCBjb25zdCBHcmFwaGljc1JlY3QmIGIpCit7CisgICAgcmV0dXJuIGEubG9jYXRpb24oKSAhPSBi
LmxvY2F0aW9uKCkgfHwgYS5zaXplKCkgIT0gYi5zaXplKCk7Cit9CisKK0ludFJlY3QgZW5jbG9z
aW5nSW50UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKKworLy8gTWFwIHJlY3QgciBmcm9tIHNy
Y1JlY3QgdG8gYW4gZXF1aXZhbGVudCByZWN0IGluIGRlc3RSZWN0LgorR3JhcGhpY3NSZWN0IG1h
cFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3Qs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpOworCit9CisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NT
aXplLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKKworI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
IDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NTaXplOjpHcmFwaGlj
c1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgOiBtX3dpZHRoKHNpemUud2lkdGgoKSksIG1faGVp
Z2h0KHNpemUuaGVpZ2h0KCkpCit7Cit9CisKK0dyYXBoaWNzVW5pdCBHcmFwaGljc1NpemU6OmRp
YWdvbmFsTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3FydGYoZGlhZ29uYWxMZW5ndGhT
cXVhcmVkKCkpOworfQorCitHcmFwaGljc1NpemUgR3JhcGhpY3NTaXplOjpuYXJyb3dQcmVjaXNp
b24oZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQoreworICAgIHJldHVybiBHcmFwaGljc1Np
emUobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQod2lkdGgpLCBuYXJyb3dQcmVjaXNpb25U
b0dyYXBoaWNzVW5pdChoZWlnaHQpKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAyMDA4IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHcmFwaGljc1NpemVf
aAorI2RlZmluZSBHcmFwaGljc1NpemVfaAorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgVVNFKENHKSB8fCAoUExBVEZPUk0oV1gpICYm
IE9TKERBUldJTikpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKK3R5cGVkZWYgc3RydWN0
IENHU2l6ZSBDR1NpemU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkp
CisjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKK3R5cGVk
ZWYgc3RydWN0IENHU2l6ZSBOU1NpemU7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX05TU2l6ZSBO
U1NpemU7CisjZW5kaWYKKyNlbmRpZgorCisKKyNpZiBVU0UoQ0cpCit0eXBlZGVmIENHRmxvYXQg
R3JhcGhpY3NVbml0OworI2Vsc2UKK3R5cGVkZWYgZmxvYXQgR3JhcGhpY3NVbml0OworI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50U2l6ZTsKKworY2xhc3MgR3JhcGhp
Y3NTaXplIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc1NpemUoKSA6IG1fd2lkdGgoMCksIG1faGVp
Z2h0KDApIHsgfQorICAgIEdyYXBoaWNzU2l6ZShHcmFwaGljc1VuaXQgd2lkdGgsIEdyYXBoaWNz
VW5pdCBoZWlnaHQpIDogbV93aWR0aCh3aWR0aCksIG1faGVpZ2h0KGhlaWdodCkgeyB9CisgICAg
R3JhcGhpY3NTaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIHN0YXRpYyBHcmFwaGljc1NpemUg
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CisKKyAgICBHcmFw
aGljc1VuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgR3JhcGhpY3NV
bml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CisKKyAgICB2b2lkIHNldFdp
ZHRoKEdyYXBoaWNzVW5pdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICB2b2lkIHNl
dEhlaWdodChHcmFwaGljc1VuaXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9oZWlnaHQg
PD0gMDsgfQorCisgICAgR3JhcGhpY3NVbml0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aCAvIG1faGVpZ2h0OyB9CisKKyAgICB2b2lkIGV4cGFuZChHcmFwaGljc1VuaXQgd2lk
dGgsIEdyYXBoaWNzVW5pdCBoZWlnaHQpCisgICAgeworICAgICAgICBtX3dpZHRoICs9IHdpZHRo
OworICAgICAgICBtX2hlaWdodCArPSBoZWlnaHQ7CisgICAgfQorCisgICAgdm9pZCBzY2FsZShH
cmFwaGljc1VuaXQgcykgeyBzY2FsZShzLCBzKTsgfQorCisgICAgdm9pZCBzY2FsZShHcmFwaGlj
c1VuaXQgc2NhbGVYLCBHcmFwaGljc1VuaXQgc2NhbGVZKQorICAgIHsKKyAgICAgICAgbV93aWR0
aCAqPSBzY2FsZVg7CisgICAgICAgIG1faGVpZ2h0ICo9IHNjYWxlWTsKKyAgICB9CisKKyAgICBH
cmFwaGljc1NpemUgZXhwYW5kZWRUbyhjb25zdCBHcmFwaGljc1NpemUmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShtX3dpZHRoID4gb3RoZXIubV93aWR0
aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICAgbV9oZWlnaHQgPiBvdGhl
ci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOworICAgIH0KKworICAgIEdy
YXBoaWNzU2l6ZSBzaHJ1bmtUbyhjb25zdCBHcmFwaGljc1NpemUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICByZXR1cm4gR3JhcGhpY3NTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8g
bV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIubV9o
ZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAgICB9CisKKyAgICBHcmFwaGlj
c1VuaXQgZGlhZ29uYWxMZW5ndGgoKSBjb25zdDsKKyAgICBHcmFwaGljc1VuaXQgZGlhZ29uYWxM
ZW5ndGhTcXVhcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dpZHRoICogbV93
aWR0aCArIG1faGVpZ2h0ICogbV9oZWlnaHQ7CisgICAgfQorCisgICAgR3JhcGhpY3NTaXplIHRy
YW5zcG9zZWRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc1NpemUo
bV9oZWlnaHQsIG1fd2lkdGgpOworICAgIH0KKworI2lmIFVTRShDRykgfHwgKFBMQVRGT1JNKFdY
KSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisgICAgZXhwbGlj
aXQgR3JhcGhpY3NTaXplKGNvbnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0
bHkgc2luY2UgaXQncyBsb3NzeQorICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OworI2VuZGlm
CisKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgICAgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCisgICAgZXhwbGlj
aXQgR3JhcGhpY3NTaXplKGNvbnN0IE5TU2l6ZSAmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNp
dGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBvcGVyYXRvciBOU1NpemUoKSBjb25zdDsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzVW5pdCBtX3dpZHRoLCBtX2hlaWdodDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitHcmFwaGljc1VuaXQgbmFycm93UHJlY2lzaW9uVG9HcmFw
aGljc1VuaXQoVCk7CisgICAgCit0ZW1wbGF0ZTw+CitpbmxpbmUgR3JhcGhpY3NVbml0IG5hcnJv
d1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KGRvdWJsZSBudW1iZXIpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obnVtYmVyKTsKK30KKworaW5saW5lIEdyYXBoaWNzU2l6
ZSYgb3BlcmF0b3IrPShHcmFwaGljc1NpemUmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sK
KyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSArIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQo
YS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3Jh
cGhpY3NTaXplJiBvcGVyYXRvci09KEdyYXBoaWNzU2l6ZSYgYSwgY29uc3QgR3JhcGhpY3NTaXpl
JiBiKQoreworICAgIGEuc2V0V2lkdGgoYS53aWR0aCgpIC0gYi53aWR0aCgpKTsKKyAgICBhLnNl
dEhlaWdodChhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lu
bGluZSBHcmFwaGljc1NpemUgb3BlcmF0b3IrKGNvbnN0IEdyYXBoaWNzU2l6ZSYgYSwgY29uc3Qg
R3JhcGhpY3NTaXplJiBiKQoreworICAgIHJldHVybiBHcmFwaGljc1NpemUoYS53aWR0aCgpICsg
Yi53aWR0aCgpLCBhLmhlaWdodCgpICsgYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBHcmFwaGlj
c1NpemUgb3BlcmF0b3ItKGNvbnN0IEdyYXBoaWNzU2l6ZSYgYSwgY29uc3QgR3JhcGhpY3NTaXpl
JiBiKQoreworICAgIHJldHVybiBHcmFwaGljc1NpemUoYS53aWR0aCgpIC0gYi53aWR0aCgpLCBh
LmhlaWdodCgpIC0gYi5oZWlnaHQoKSk7Cit9CisKK2lubGluZSBHcmFwaGljc1NpemUgb3BlcmF0
b3ItKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXpl
KC1zaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBHcmFwaGljc1NpemUmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAg
ICByZXR1cm4gYS53aWR0aCgpID09IGIud2lkdGgoKSAmJiBhLmhlaWdodCgpID09IGIuaGVpZ2h0
KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NTaXplJiBhLCBj
b25zdCBHcmFwaGljc1NpemUmIGIpCit7CisgICAgcmV0dXJuIGEud2lkdGgoKSAhPSBiLndpZHRo
KCkgfHwgYS5oZWlnaHQoKSAhPSBiLmhlaWdodCgpOworfQorCitpbmxpbmUgSW50U2l6ZSByb3Vu
ZGVkSW50U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHApCit7CisgICAgcmV0dXJuIEludFNpemUo
c3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC53aWR0aCgpKSksIHN0YXRpY19jYXN0PGludD4ocm91
bmRmKHAuaGVpZ2h0KCkpKSk7Cit9CisKK2lubGluZSBJbnRTaXplIGV4cGFuZGVkSW50U2l6ZShj
b25zdCBHcmFwaGljc1NpemUmIHApCit7CisgICAgcmV0dXJuIEludFNpemUoY2xhbXBUb0ludGVn
ZXIoY2VpbGYocC53aWR0aCgpKSksIGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHAuaGVpZ2h0KCkpKSk7
Cit9CisKK2lubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3QgR3JhcGhpY3NTaXpl
JiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHAud2lkdGgoKSks
IHN0YXRpY19jYXN0PGludD4ocC5oZWlnaHQoKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBHcmFwaGljc1NpemVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDcgQEAgYm9vbCBJbWFnZTo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZgogICAgIHJl
dHVybiBkYXRhQ2hhbmdlZChhbGxEYXRhUmVjZWl2ZWQpOwogfQogCi12b2lkIEltYWdlOjpmaWxs
V2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBJbWFnZTo6ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsKICAgICBpZiAoY29sb3IuYWxwaGEoKSA8PSAwKQogICAgICAgICByZXR1cm47CkBAIC04
Nyw3ICs4Nyw3IEBAIHZvaWQgSW1hZ2U6OmZpbGxXaXRoU29saWRDb2xvcihHcmFwaGljc0MKICAg
ICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRmxvYXRTaXplIGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgSW1hZ2U6OlRpbGVSdWxlIGhS
dWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzU2l6ZSBj
YWxjdWxhdGVQYXR0ZXJuU2NhbGUoY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBH
cmFwaGljc1JlY3QmIHNyY1JlY3QsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVS
dWxlIHZSdWxlKQogewogICAgIGZsb2F0IHNjYWxlWCA9IDEuMGYsIHNjYWxlWSA9IDEuMGY7CiAg
ICAgCkBAIC0xMDEsMTEgKzEwMSwxMSBAQCBzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBjYWxjdWxh
dGVQYXR0ZXJuCiAgICAgaWYgKHZSdWxlID09IEltYWdlOjpSZXBlYXRUaWxlKQogICAgICAgICBz
Y2FsZVkgPSBzY2FsZVg7CiAgICAgCi0gICAgcmV0dXJuIEZsb2F0U2l6ZShzY2FsZVgsIHNjYWxl
WSk7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShzY2FsZVgsIHNjYWxlWSk7CiB9CiAKIAotdm9p
ZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYg
c2NhbGVkVGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHNyY1BvaW50
LCBjb25zdCBHcmFwaGljc1NpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7ICAgIAogICAgIGlmIChtYXlGaWxsV2l0
aFNvbGlkQ29sb3IoKSkgewogICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJl
Y3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CkBAIC0xMTcsMjMgKzExNywy
MyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgQVNTRVJU
KCFpc0JpdG1hcEltYWdlKCkgfHwgc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPih0aGlzKS0+bm90
U29saWRDb2xvcigpKTsKICNlbmRpZgogCi0gICAgRmxvYXRTaXplIGludHJpbnNpY1RpbGVTaXpl
ID0gc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBpbnRyaW5zaWNUaWxlU2l6ZSA9IHNpemUoKTsK
ICAgICBpZiAoaGFzUmVsYXRpdmVXaWR0aCgpKQogICAgICAgICBpbnRyaW5zaWNUaWxlU2l6ZS5z
ZXRXaWR0aChzY2FsZWRUaWxlU2l6ZS53aWR0aCgpKTsKICAgICBpZiAoaGFzUmVsYXRpdmVIZWln
aHQoKSkKICAgICAgICAgaW50cmluc2ljVGlsZVNpemUuc2V0SGVpZ2h0KHNjYWxlZFRpbGVTaXpl
LmhlaWdodCgpKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZShzY2FsZWRUaWxlU2l6ZS53aWR0aCgp
IC8gaW50cmluc2ljVGlsZVNpemUud2lkdGgoKSwKKyAgICBHcmFwaGljc1NpemUgc2NhbGUoc2Nh
bGVkVGlsZVNpemUud2lkdGgoKSAvIGludHJpbnNpY1RpbGVTaXplLndpZHRoKCksCiAgICAgICAg
ICAgICAgICAgICAgIHNjYWxlZFRpbGVTaXplLmhlaWdodCgpIC8gaW50cmluc2ljVGlsZVNpemUu
aGVpZ2h0KCkpOwogCi0gICAgRmxvYXRSZWN0IG9uZVRpbGVSZWN0OworICAgIEdyYXBoaWNzUmVj
dCBvbmVUaWxlUmVjdDsKICAgICBvbmVUaWxlUmVjdC5zZXRYKGRlc3RSZWN0LngoKSArIGZtb2Rm
KGZtb2RmKC1zcmNQb2ludC54KCksIHNjYWxlZFRpbGVTaXplLndpZHRoKCkpIC0gc2NhbGVkVGls
ZVNpemUud2lkdGgoKSwgc2NhbGVkVGlsZVNpemUud2lkdGgoKSkpOwogICAgIG9uZVRpbGVSZWN0
LnNldFkoZGVzdFJlY3QueSgpICsgZm1vZGYoZm1vZGYoLXNyY1BvaW50LnkoKSwgc2NhbGVkVGls
ZVNpemUuaGVpZ2h0KCkpIC0gc2NhbGVkVGlsZVNpemUuaGVpZ2h0KCksIHNjYWxlZFRpbGVTaXpl
LmhlaWdodCgpKSk7CiAgICAgb25lVGlsZVJlY3Quc2V0U2l6ZShzY2FsZWRUaWxlU2l6ZSk7CiAg
ICAgCiAgICAgLy8gQ2hlY2sgYW5kIHNlZSBpZiBhIHNpbmdsZSBkcmF3IG9mIHRoZSBpbWFnZSBj
YW4gY292ZXIgdGhlIGVudGlyZSBhcmVhIHdlIGFyZSBzdXBwb3NlZCB0byB0aWxlLiAgICAKICAg
ICBpZiAob25lVGlsZVJlY3QuY29udGFpbnMoZGVzdFJlY3QpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCB2aXNpYmxlU3JjUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHZpc2libGVTcmNSZWN0Owog
ICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRYKChkZXN0UmVjdC54KCkgLSBvbmVUaWxlUmVjdC54
KCkpIC8gc2NhbGUud2lkdGgoKSk7CiAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFkoKGRlc3RS
ZWN0LnkoKSAtIG9uZVRpbGVSZWN0LnkoKSkgLyBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHZp
c2libGVTcmNSZWN0LnNldFdpZHRoKGRlc3RSZWN0LndpZHRoKCkgLyBzY2FsZS53aWR0aCgpKTsK
QEAgLTE0MywxNCArMTQzLDE0IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRl
eHQqIGMKICAgICB9CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybSA9IEFm
ZmluZVRyYW5zZm9ybSgpLnNjYWxlTm9uVW5pZm9ybShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWln
aHQoKSk7Ci0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KEZsb2F0UG9pbnQoKSwgaW50cmluc2ljVGls
ZVNpemUpOyAgICAKKyAgICBHcmFwaGljc1JlY3QgdGlsZVJlY3QoR3JhcGhpY3NQb2ludCgpLCBp
bnRyaW5zaWNUaWxlU2l6ZSk7ICAgIAogICAgIGRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBvbmVUaWxlUmVjdC5sb2NhdGlvbigpLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkZXN0UmVjdCk7CiAgICAgCiAgICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAogLy8gRklY
TUU6IE1lcmdlIHdpdGggdGhlIG90aGVyIGRyYXdUaWxlZCBldmVudHVhbGx5LCBzaW5jZSB3ZSBu
ZWVkIGEgY29tYmluYXRpb24gb2YgYm90aCBmb3Igc29tZSB0aGluZ3MuCi12b2lkIEltYWdlOjpk
cmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lk
IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUs
IFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCiB7ICAgIAogICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgewogICAg
ICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZHN0UmVjdCwgc29saWRDb2xvcigpLCBzdHls
ZUNvbG9yU3BhY2UsIG9wKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGls
ZWQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgaWYgKHZSdWxlID09IFJvdW5kVGlsZSkKICAgICAg
ICAgdlJ1bGUgPSBSZXBlYXRUaWxlOwogCi0gICAgRmxvYXRTaXplIHNjYWxlID0gY2FsY3VsYXRl
UGF0dGVyblNjYWxlKGRzdFJlY3QsIHNyY1JlY3QsIGhSdWxlLCB2UnVsZSk7CisgICAgR3JhcGhp
Y3NTaXplIHNjYWxlID0gY2FsY3VsYXRlUGF0dGVyblNjYWxlKGRzdFJlY3QsIHNyY1JlY3QsIGhS
dWxlLCB2UnVsZSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm0gPSBBZmZp
bmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0
KCkpOwogCiAgICAgLy8gV2Ugd2FudCB0byBjb25zdHJ1Y3QgdGhlIHBoYXNlIHN1Y2ggdGhhdCB0
aGUgcGF0dGVybiBpcyBjZW50ZXJlZCAod2hlbiBzdHJldGNoIGlzIG5vdApAQCAtMTc0LDcgKzE3
NCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGMKICAgICAgICAg
aFBoYXNlIC09IGZtb2RmKGRzdFJlY3Qud2lkdGgoKSwgc2NhbGUud2lkdGgoKSAqIHNyY1JlY3Qu
d2lkdGgoKSkgLyAyLjBmOwogICAgIGlmICh2UnVsZSA9PSBJbWFnZTo6UmVwZWF0VGlsZSkKICAg
ICAgICAgdlBoYXNlIC09IGZtb2RmKGRzdFJlY3QuaGVpZ2h0KCksIHNjYWxlLmhlaWdodCgpICog
c3JjUmVjdC5oZWlnaHQoKSkgLyAyLjBmOwotICAgIEZsb2F0UG9pbnQgcGF0dGVyblBoYXNlKGRz
dFJlY3QueCgpIC0gaFBoYXNlLCBkc3RSZWN0LnkoKSAtIHZQaGFzZSk7CisgICAgR3JhcGhpY3NQ
b2ludCBwYXR0ZXJuUGhhc2UoZHN0UmVjdC54KCkgLSBoUGhhc2UsIGRzdFJlY3QueSgpIC0gdlBo
YXNlKTsKICAgICAKICAgICBkcmF3UGF0dGVybihjdHh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwYXR0ZXJuUGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRzdFJlY3QpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsOSArNjYsOSBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrUGl4YnVmIEdka1BpeGJ1
ZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxv
YXRSZWN0OwotY2xhc3MgRmxvYXRTaXplOworY2xhc3MgR3JhcGhpY3NQb2ludDsKK2NsYXNzIEdy
YXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBoaWNzU2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKQEAgLTE1MywyMSAr
MTUzLDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZT4gbG9hZFBsYXRm
b3JtVGhlbWVJY29uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzaXplKTsKICNlbmRpZgogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
SW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxXaXRoU29s
aWRDb2xvcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IENvbG9yJiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsK
KyAgICBzdGF0aWMgdm9pZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICAvLyBUaGUgQ29sb3JTcGFjZSBw
YXJhbWV0ZXIgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHVudGFnZ2VkIGltYWdlcy4KICNpZiBQTEFU
Rk9STShXSU4pCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUm
IHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNy
Y1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9
CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSA9IDA7Ci0gICAgdm9pZCBkcmF3VGls
ZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIGRyYXdUaWxlZChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpID0gMDsKKyAgICB2b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHNyY1BvaW50LCBj
b25zdCBHcmFwaGljc1NpemUmIHRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0
LCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUgdlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICAvLyBTdXBwb3J0aW5nIHRpbGVkIGRyYXdp
bmcKICAgICB2aXJ0dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkgeyByZXR1cm4gZmFs
c2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlckRhdGEuaCIKQEAgLTEwNCwxMyArMTA0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CiAKICAgICAgICAgLy8gVGhlIGRyYXcg
bWV0aG9kIGRyYXdzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHdpdGhvdXQgY29weWluZyBp
dC4KLSAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QgPSBHcmFwaGljc1JlY3Qo
MCwgMCwgLTEsIC0xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3Bl
cmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZh
bHNlKTsKLSAgICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlubGlu
ZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiB1c2luZyBzdGQ6Om1heDsKQEAgLTM0LDcg
KzM0LDcgQEAgdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW50UmVj
dDo6SW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCitJbnRSZWN0OjpJbnRSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgcikKICAgICA6IG1fbG9jYXRpb24oSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50
PihyLngoKSksIHN0YXRpY19jYXN0PGludD4oci55KCkpKSkKICAgICAsIG1fc2l6ZShJbnRTaXpl
KHN0YXRpY19jYXN0PGludD4oci53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihyLmhlaWdodCgp
KSkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5o
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdHJ1Y3QgU2tJUmVjdDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CiAKIGNsYXNzIEludFJlY3QgewogcHVibGljOgpAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgSW50UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAg
ICAgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHgsIHkpKSwgbV9zaXplKEludFNpemUod2lkdGgs
IGhlaWdodCkpIHsgfQogCi0gICAgZXhwbGljaXQgSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQorICAgIGV4
cGxpY2l0IEludFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KTsgLy8gZG9uJ3QgZG8gdGhp
cyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICAgICAgCiAgICAgSW50UG9pbnQgbG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9CiAgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUGF0aFRyYXZlcnNhbFN0
YXRlLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBA
IC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBhdGhMZW5ndGhBcHBsaWVyRnVuY3Rpb24odm8K
ICAgICBQYXRoVHJhdmVyc2FsU3RhdGUmIHRyYXZlcnNhbFN0YXRlID0gKnN0YXRpY19jYXN0PFBh
dGhUcmF2ZXJzYWxTdGF0ZSo+KGluZm8pOwogICAgIGlmICh0cmF2ZXJzYWxTdGF0ZS5tX3N1Y2Nl
c3MpCiAgICAgICAgIHJldHVybjsKLSAgICBGbG9hdFBvaW50KiBwb2ludHMgPSBlbGVtZW50LT5w
b2ludHM7CisgICAgR3JhcGhpY3NQb2ludCogcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwogICAg
IGZsb2F0IHNlZ21lbnRMZW5ndGggPSAwOwogICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewog
ICAgICAgICBjYXNlIFBhdGhFbGVtZW50TW92ZVRvUG9pbnQ6CkBAIC03Myw3ICs3Myw3IEBAIGZs
b2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIHRyYXZlcnNhbFN0YXRlLm1fdG90
YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5n
dGgsIGJvb2wmIG9rKSBjb25zdAorR3JhcGhpY3NQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3RoKGZs
b2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CiB7CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlIHRy
YXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZTo6VHJhdmVyc2FsUG9pbnRBdExlbmd0aCk7
CiAgICAgdHJhdmVyc2FsU3RhdGUubV9kZXNpcmVkTGVuZ3RoID0gbGVuZ3RoOwpAQCAtOTcsMTMg
Kzk3LDEzIEBAIHZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFIKICAgICBh
ZGRSb3VuZGVkUmVjdChyLnJlY3QoKSwgci5yYWRpaSgpLnRvcExlZnQoKSwgci5yYWRpaSgpLnRv
cFJpZ2h0KCksIHIucmFkaWkoKS5ib3R0b21MZWZ0KCksIHIucmFkaWkoKS5ib3R0b21SaWdodCgp
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0U2l6ZSYgcm91bmRpbmdSYWRpaSkKK3ZvaWQgUGF0aDo6YWRkUm91bmRlZFJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBHcmFwaGljc1NpemUmIHJvdW5kaW5n
UmFkaWkpCiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBGbG9hdFNpemUgcmFkaXVzKHJvdW5kaW5nUmFkaWkpOwotICAgIEZsb2F0U2l6ZSBoYWxmU2l6
ZShyZWN0LndpZHRoKCkgLyAyLCByZWN0LmhlaWdodCgpIC8gMik7CisgICAgR3JhcGhpY3NTaXpl
IHJhZGl1cyhyb3VuZGluZ1JhZGlpKTsKKyAgICBHcmFwaGljc1NpemUgaGFsZlNpemUocmVjdC53
aWR0aCgpIC8gMiwgcmVjdC5oZWlnaHQoKSAvIDIpOwogCiAgICAgLy8gSWYgcnggaXMgZ3JlYXRl
ciB0aGFuIGhhbGYgb2YgdGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUKICAgICAvLyB0aGVuIHNl
dCByeCB0byBoYWxmIG9mIHRoZSB3aWR0aCAocmVxdWlyZWQgaW4gU1ZHIHNwZWMpCkBAIC0xMTgs
NyArMTE4LDcgQEAgdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlYwogICAg
IGFkZEJlemllcnNGb3JSb3VuZGVkUmVjdChyZWN0LCByYWRpdXMsIHJhZGl1cywgcmFkaXVzLCBy
YWRpdXMpOwogfQogCi12b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZs
b2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCit2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBHcmFwaGljc1NpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUm
IGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMp
CiB7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzksMjYg
KzEzOSwyNiBAQCB2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjCiAvLyBU
aGlzIGlzIDEta2FwcGEsIHdoZXJlIGthcHBhID0gNCAqIChzcXJ0KDIpIC0gMSkgLyAzCiBzdGF0
aWMgY29uc3QgZmxvYXQgZ0NpcmNsZUNvbnRyb2xQb2ludCA9IDAuNDQ3NzE1ZjsKIAotdm9pZCBQ
YXRoOjphZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21SaWdodFJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BMZWZ0UmFkaXVz
LCBjb25zdCBHcmFwaGljc1NpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUm
IGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMp
CiB7Ci0gICAgbW92ZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRo
KCksIHJlY3QueSgpKSk7CisgICAgbW92ZVRvKEdyYXBoaWNzUG9pbnQocmVjdC54KCkgKyB0b3BM
ZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CiAKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2lu
dChyZWN0Lm1heFgoKSAtIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7Ci0gICAg
YWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QubWF4WCgpIC0gdG9wUmlnaHRSYWRpdXMu
d2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QueSgpKSwKLSAgICAgICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QueSgpICsgdG9wUmlnaHRSYWRpdXMu
aGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QueSgpICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCkp
KTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgLSBi
b3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSkpOwotICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQ
b2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQo
KSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLAotICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2lu
dChyZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJv
bFBvaW50LCByZWN0Lm1heFkoKSksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJl
Y3QubWF4WCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSwgcmVjdC5tYXhZKCkpKTsKLSAg
ICBhZGRMaW5lVG8oRmxvYXRQb2ludChyZWN0LngoKSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgo
KSwgcmVjdC5tYXhZKCkpKTsKLSAgICBhZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54
KCkgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0
Lm1heFkoKSksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0
Lm1heFkoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50
KSwKLSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgp
IC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSkpOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50
KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRC
ZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdFJhZGl1
cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQpLAotICAgICAgICAgICAgICAgICAgICAg
RmxvYXRQb2ludChyZWN0LngoKSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250
cm9sUG9pbnQsIHJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVj
dC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgYWRkTGluZVRv
KEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByZWN0
LnkoKSkpOworICAgIGFkZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSAt
IHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSks
CisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0Lnko
KSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAg
ICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRv
cFJpZ2h0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQocmVj
dC5tYXhYKCksIHJlY3QubWF4WSgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAg
ICBhZGRCZXppZXJDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgp
IC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAg
ICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCkgLSBib3R0b21SaWdo
dFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC5tYXhZKCkpLAorICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCksIHJlY3QubWF4WSgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9p
bnQocmVjdC54KCkgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHJlY3QubWF4WSgpKSk7Cisg
ICAgYWRkQmV6aWVyQ3VydmVUbyhHcmFwaGljc1BvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdFJh
ZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC5tYXhZKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSBib3R0
b21MZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAg
ICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIGJvdHRvbUxl
ZnRSYWRpdXMuaGVpZ2h0KCkpKTsKKyAgICBhZGRMaW5lVG8oR3JhcGhpY3NQb2ludChyZWN0Lngo
KSwgcmVjdC55KCkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkQmV6aWVyQ3Vy
dmVUbyhHcmFwaGljc1BvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExlZnRSYWRpdXMuaGVp
Z2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYXBo
aWNzUG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJv
bFBvaW50LCByZWN0LnkoKSksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJl
Y3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOwogCiAgICAgY2xvc2VT
dWJwYXRoKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5o
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaAkod29ya2luZyBjb3B5KQpAQCAtNzYsOSArNzYsOSBAQCB0eXBlZGVmIFBsYXRmb3JtUGF0
aCogUGxhdGZvcm1QYXRoUHRyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwotICAgIGNsYXNzIEZsb2F0UG9pbnQ7Ci0gICAgY2xhc3MgRmxvYXRSZWN0
OwotICAgIGNsYXNzIEZsb2F0U2l6ZTsKKyAgICBjbGFzcyBHcmFwaGljc1BvaW50OworICAgIGNs
YXNzIEdyYXBoaWNzUmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1NpemU7CiAgICAgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwogICAgIGNsYXNzIFN0cm9rZVN0eWxlQXBwbGllcjsKIApAQCAtOTIsNyAr
OTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBzdHJ1Y3QgUGF0aEVsZW1lbnQgewog
ICAgICAgICBQYXRoRWxlbWVudFR5cGUgdHlwZTsKLSAgICAgICAgRmxvYXRQb2ludCogcG9pbnRz
OworICAgICAgICBHcmFwaGljc1BvaW50KiBwb2ludHM7CiAgICAgfTsKIAogICAgIHR5cGVkZWYg
dm9pZCAoKlBhdGhBcHBsaWVyRnVuY3Rpb24pKHZvaWQqIGluZm8sIGNvbnN0IFBhdGhFbGVtZW50
Kik7CkBAIC0xMDYsMTMgKzEwNiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBh
dGgoY29uc3QgUGF0aCYpOwogICAgICAgICBQYXRoJiBvcGVyYXRvcj0oY29uc3QgUGF0aCYpOwog
Ci0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIFdpbmRSdWxlIHJ1bGUg
PSBSVUxFX05PTlpFUk8pIGNvbnN0OwotICAgICAgICBib29sIHN0cm9rZUNvbnRhaW5zKFN0cm9r
ZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OwotICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKKyAgICAgICAgYm9vbCBjb250
YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiwgV2luZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykg
Y29uc3Q7CisgICAgICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRp
bmdSZWN0KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ1JlY3Qo
U3Ryb2tlU3R5bGVBcHBsaWVyKiA9IDApIGNvbnN0OwogICAgICAgICAKICAgICAgICAgZmxvYXQg
bGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnRBdExlbmd0aChmbG9hdCBs
ZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludEF0TGVu
Z3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OwogICAgICAgICBmbG9hdCBub3JtYWxB
bmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0OwogCiAgICAgICAgIHZv
aWQgY2xlYXIoKTsKQEAgLTEyMCwyMyArMTIwLDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgLy8gR2V0cyB0aGUgY3VycmVudCBwb2ludCBvZiB0aGUgY3VycmVudCBwYXRoLCB3aGlj
aCBpcyBjb25jZXB0dWFsbHkgdGhlIGZpbmFsIHBvaW50IHJlYWNoZWQgYnkgdGhlIHBhdGggc28g
ZmFyLgogICAgICAgICAvLyBOb3RlIHRoZSBQYXRoIGNhbiBiZSBlbXB0eSAoaXNFbXB0eSgpID09
IHRydWUpIGFuZCBzdGlsbCBoYXZlIGEgY3VycmVudCBwb2ludC4KICAgICAgICAgYm9vbCBoYXND
dXJyZW50UG9pbnQoKSBjb25zdDsKLSAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQoKSBj
b25zdDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9pbnQoKSBjb25zdDsKIAotICAg
ICAgICB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkTGlu
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZFBvaW50KTsK
LSAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQ
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQm
IGVuZFBvaW50KTsKLSAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cyk7CisgICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYpOworICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGNvbnRyb2xQb2ludCwgY29uc3QgR3JhcGhpY3NQb2ludCYgZW5kUG9pbnQpOworICAgICAgICB2
b2lkIGFkZEJlemllckN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbFBvaW50MSwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYg
ZW5kUG9pbnQpOworICAgICAgICB2b2lkIGFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBj
b25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgcmFkaXVzKTsKICAgICAgICAgdm9pZCBjbG9zZVN1
YnBhdGgoKTsKIAotICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQg
cmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3
aXNlKTsKLSAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2
b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgICAgIHZvaWQgYWRkUm91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiByb3VuZGluZ1JhZGlpKTsK
LSAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21S
aWdodFJhZGl1cyk7CisgICAgICAgIHZvaWQgYWRkQXJjKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBm
bG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGlj
bG9ja3dpc2UpOworICAgICAgICB2b2lkIGFkZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7Cisg
ICAgICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICAgICAgdm9p
ZCBhZGRSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1NpemUm
IHJvdW5kaW5nUmFkaWkpOworICAgICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgR3JhcGhp
Y3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21MZWZ0UmFk
aXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKICAgICAgICAgdm9p
ZCBhZGRSb3VuZGVkUmVjdChjb25zdCBSb3VuZGVkUmVjdCYpOwogCi0gICAgICAgIHZvaWQgdHJh
bnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBH
cmFwaGljc1NpemUmKTsKIAogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRp
dXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICB2b2lkIGFk
ZEJlemllcnNGb3JSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGlj
c1NpemUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wUmlnaHRSYWRpdXMs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgYm90dG9tTGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXpl
JiBib3R0b21SaWdodFJhZGl1cyk7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIG1fcGF0aDsK
ICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZl
cnNhbFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDE5ICsyNywxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBj
b25zdCBmbG9hdCBrUGF0aFNlZ21lbnRMZW5ndGhUb2xlcmFuY2UgPSAwLjAwMDAxZjsKIAotc3Rh
dGljIGlubGluZSBGbG9hdFBvaW50IG1pZFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGZpcnN0LCBj
b25zdCBGbG9hdFBvaW50JiBzZWNvbmQpCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUG9pbnQgbWlk
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgZmlyc3QsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHNl
Y29uZCkKIHsKLSAgICByZXR1cm4gRmxvYXRQb2ludCgoZmlyc3QueCgpICsgc2Vjb25kLngoKSkg
LyAyLjBmLCAoZmlyc3QueSgpICsgc2Vjb25kLnkoKSkgLyAyLjBmKTsKKyAgICByZXR1cm4gR3Jh
cGhpY3NQb2ludCgoZmlyc3QueCgpICsgc2Vjb25kLngoKSkgLyAyLjBmLCAoZmlyc3QueSgpICsg
c2Vjb25kLnkoKSkgLyAyLjBmKTsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZUxp
bmUoY29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkKK3N0YXRp
YyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VMaW5lKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHN0YXJ0LCBj
b25zdCBHcmFwaGljc1BvaW50JiBlbmQpCiB7CiAgICAgcmV0dXJuIHNxcnRmKChlbmQueCgpIC0g
c3RhcnQueCgpKSAqIChlbmQueCgpIC0gc3RhcnQueCgpKSArIChlbmQueSgpIC0gc3RhcnQueSgp
KSAqIChlbmQueSgpIC0gc3RhcnQueSgpKSk7CiB9CiAKIHN0cnVjdCBRdWFkcmF0aWNCZXppZXIg
ewogICAgIFF1YWRyYXRpY0JlemllcigpIHsgfQotICAgIFF1YWRyYXRpY0Jlemllcihjb25zdCBG
bG9hdFBvaW50JiBzLCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBGbG9hdFBvaW50JiBlKQor
ICAgIFF1YWRyYXRpY0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBjLCBjb25zdCBHcmFwaGljc1BvaW50JiBlKQogICAgICAgICA6IHN0YXJ0KHMpCiAg
ICAgICAgICwgY29udHJvbChjKQogICAgICAgICAsIGVuZChlKQpAQCAtNTYsNyArNTYsNyBAQCBz
dHJ1Y3QgUXVhZHJhdGljQmV6aWVyIHsKICAgICAgICAgbGVmdC5jb250cm9sID0gbWlkUG9pbnQo
c3RhcnQsIGNvbnRyb2wpOwogICAgICAgICByaWdodC5jb250cm9sID0gbWlkUG9pbnQoY29udHJv
bCwgZW5kKTsKICAgICAgICAgCi0gICAgICAgIEZsb2F0UG9pbnQgbGVmdENvbnRyb2xUb1JpZ2h0
Q29udHJvbCA9IG1pZFBvaW50KGxlZnQuY29udHJvbCwgcmlnaHQuY29udHJvbCk7CisgICAgICAg
IEdyYXBoaWNzUG9pbnQgbGVmdENvbnRyb2xUb1JpZ2h0Q29udHJvbCA9IG1pZFBvaW50KGxlZnQu
Y29udHJvbCwgcmlnaHQuY29udHJvbCk7CiAgICAgICAgIGxlZnQuZW5kID0gbGVmdENvbnRyb2xU
b1JpZ2h0Q29udHJvbDsKICAgICAgICAgcmlnaHQuc3RhcnQgPSBsZWZ0Q29udHJvbFRvUmlnaHRD
b250cm9sOwogCkBAIC02NCwxNCArNjQsMTQgQEAgc3RydWN0IFF1YWRyYXRpY0JlemllciB7CiAg
ICAgICAgIHJpZ2h0LmVuZCA9IGVuZDsKICAgICB9CiAgICAgCi0gICAgRmxvYXRQb2ludCBzdGFy
dDsKLSAgICBGbG9hdFBvaW50IGNvbnRyb2w7Ci0gICAgRmxvYXRQb2ludCBlbmQ7CisgICAgR3Jh
cGhpY3NQb2ludCBzdGFydDsKKyAgICBHcmFwaGljc1BvaW50IGNvbnRyb2w7CisgICAgR3JhcGhp
Y3NQb2ludCBlbmQ7CiB9OwogCiBzdHJ1Y3QgQ3ViaWNCZXppZXIgewogICAgIEN1YmljQmV6aWVy
KCkgeyB9Ci0gICAgQ3ViaWNCZXppZXIoY29uc3QgRmxvYXRQb2ludCYgcywgY29uc3QgRmxvYXRQ
b2ludCYgYzEsIGNvbnN0IEZsb2F0UG9pbnQmIGMyLCBjb25zdCBGbG9hdFBvaW50JiBlKQorICAg
IEN1YmljQmV6aWVyKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGMxLCBjb25zdCBHcmFwaGljc1BvaW50JiBjMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgZSkKICAg
ICAgICAgOiBzdGFydChzKQogICAgICAgICAsIGNvbnRyb2wxKGMxKQogICAgICAgICAsIGNvbnRy
b2wyKGMyKQpAQCAtODYsNyArODYsNyBAQCBzdHJ1Y3QgQ3ViaWNCZXppZXIgewogICAgICAgICAK
ICAgICB2b2lkIHNwbGl0KEN1YmljQmV6aWVyJiBsZWZ0LCBDdWJpY0JlemllciYgcmlnaHQpIGNv
bnN0CiAgICAgeyAgICAKLSAgICAgICAgRmxvYXRQb2ludCBzdGFydFRvQ29udHJvbDEgPSBtaWRQ
b2ludChjb250cm9sMSwgY29udHJvbDIpOworICAgICAgICBHcmFwaGljc1BvaW50IHN0YXJ0VG9D
b250cm9sMSA9IG1pZFBvaW50KGNvbnRyb2wxLCBjb250cm9sMik7CiAgICAgICAgIAogICAgICAg
ICBsZWZ0LnN0YXJ0ID0gc3RhcnQ7CiAgICAgICAgIGxlZnQuY29udHJvbDEgPSBtaWRQb2ludChz
dGFydCwgY29udHJvbDEpOwpAQCAtOTYsMTUgKzk2LDE1IEBAIHN0cnVjdCBDdWJpY0JlemllciB7
CiAgICAgICAgIHJpZ2h0LmNvbnRyb2wxID0gbWlkUG9pbnQocmlnaHQuY29udHJvbDIsIHN0YXJ0
VG9Db250cm9sMSk7CiAgICAgICAgIHJpZ2h0LmVuZCA9IGVuZDsKICAgICAgICAgCi0gICAgICAg
IEZsb2F0UG9pbnQgbGVmdENvbnRyb2wyVG9SaWdodENvbnRyb2wxID0gbWlkUG9pbnQobGVmdC5j
b250cm9sMiwgcmlnaHQuY29udHJvbDEpOworICAgICAgICBHcmFwaGljc1BvaW50IGxlZnRDb250
cm9sMlRvUmlnaHRDb250cm9sMSA9IG1pZFBvaW50KGxlZnQuY29udHJvbDIsIHJpZ2h0LmNvbnRy
b2wxKTsKICAgICAgICAgbGVmdC5lbmQgPSBsZWZ0Q29udHJvbDJUb1JpZ2h0Q29udHJvbDE7CiAg
ICAgICAgIHJpZ2h0LnN0YXJ0ID0gbGVmdENvbnRyb2wyVG9SaWdodENvbnRyb2wxOwogICAgIH0K
ICAgICAKLSAgICBGbG9hdFBvaW50IHN0YXJ0OwotICAgIEZsb2F0UG9pbnQgY29udHJvbDE7Ci0g
ICAgRmxvYXRQb2ludCBjb250cm9sMjsKLSAgICBGbG9hdFBvaW50IGVuZDsKKyAgICBHcmFwaGlj
c1BvaW50IHN0YXJ0OworICAgIEdyYXBoaWNzUG9pbnQgY29udHJvbDE7CisgICAgR3JhcGhpY3NQ
b2ludCBjb250cm9sMjsKKyAgICBHcmFwaGljc1BvaW50IGVuZDsKIH07CiAKIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGlzIHBvc3NpYmx5IHZlcnkgc2xvdyBkdWUgdG8gdGhlIGlmcyByZXF1aXJl
ZCBmb3IgcHJvcGVyIHBhdGggbWVhc3VyaW5nCkBAIC0xNjQsMjAgKzE2NCwyMCBAQCBmbG9hdCBQ
YXRoVHJhdmVyc2FsU3RhdGU6OmNsb3NlU3VicGF0aCgpCiAgICAgcmV0dXJuIGRpc3RhbmNlOwog
fQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK2Zsb2F0IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogewogICAgIG1fY3VycmVudCA9IG1fc3RhcnQgPSBtX2NvbnRyb2wxID0gbV9j
b250cm9sMiA9IHBvaW50OwogICAgIHJldHVybiAwOwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2Fs
U3RhdGU6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK2Zsb2F0IFBhdGhUcmF2ZXJz
YWxTdGF0ZTo6bGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGZsb2F0
IGRpc3RhbmNlID0gZGlzdGFuY2VMaW5lKG1fY3VycmVudCwgcG9pbnQpOwogICAgIG1fY3VycmVu
dCA9IG1fY29udHJvbDEgPSBtX2NvbnRyb2wyID0gcG9pbnQ7CiAgICAgcmV0dXJuIGRpc3RhbmNl
OwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNvbnN0
IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCkKK2Zsb2F0
IFBhdGhUcmF2ZXJzYWxTdGF0ZTo6cXVhZHJhdGljQmV6aWVyVG8oY29uc3QgR3JhcGhpY3NQb2lu
dCYgbmV3Q29udHJvbCwgY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3RW5kKQogewogICAgIGZsb2F0
IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8UXVhZHJhdGljQmV6aWVyPigqdGhpcywgUXVhZHJhdGlj
QmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbCwgbmV3RW5kKSk7CiAKQEAgLTE5MCw3ICsxOTAs
NyBAQCBmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllCiAgICAgcmV0dXJu
IGRpc3RhbmNlOwogfQogCi1mbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OmN1YmljQmV6aWVyVG8o
Y29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRy
b2wyLCBjb25zdCBGbG9hdFBvaW50JiBuZXdFbmQpCitmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6
OmN1YmljQmV6aWVyVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3Q29udHJvbDEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIG5ld0NvbnRyb2wyLCBjb25zdCBHcmFwaGljc1BvaW50JiBuZXdFbmQpCiB7
CiAgICAgZmxvYXQgZGlzdGFuY2UgPSBjdXJ2ZUxlbmd0aDxDdWJpY0Jlemllcj4oKnRoaXMsIEN1
YmljQmV6aWVyKG1fY3VycmVudCwgbmV3Q29udHJvbDEsIG5ld0NvbnRyb2wyLCBuZXdFbmQpKTsK
IApAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgUGF0aFRyYXZlcnNhbFN0YXRlOjpwcm9jZXNzU2Vn
bWVudCgKICAgICAgICAgbV9zdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgCiAgICAgaWYgKChtX2Fj
dGlvbiA9PSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoIHx8IG1fYWN0aW9uID09IFRyYXZlcnNhbE5v
cm1hbEFuZ2xlQXRMZW5ndGgpICYmIG1fdG90YWxMZW5ndGggPj0gbV9kZXNpcmVkTGVuZ3RoKSB7
Ci0gICAgICAgIEZsb2F0U2l6ZSBjaGFuZ2UgPSBtX2N1cnJlbnQgLSBtX3ByZXZpb3VzOworICAg
ICAgICBHcmFwaGljc1NpemUgY2hhbmdlID0gbV9jdXJyZW50IC0gbV9wcmV2aW91czsKICAgICAg
ICAgZmxvYXQgc2xvcGUgPSBhdGFuMmYoY2hhbmdlLmhlaWdodCgpLCBjaGFuZ2Uud2lkdGgoKSk7
CiAgICAgICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJzYWxQb2ludEF0TGVuZ3RoKSB7CiAgICAg
ICAgICAgICBmbG9hdCBvZmZzZXQgPSBtX2Rlc2lyZWRMZW5ndGggLSBtX3RvdGFsTGVuZ3RoOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRy
YXZlcnNhbFN0YXRlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgUGF0aFRyYXZlcnNhbFN0YXRlX2gKICNkZWZpbmUgUGF0aFRyYXZl
cnNhbFN0YXRlX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsMTAgKzQyLDEwIEBAIHB1
YmxpYzoKICAgICBQYXRoVHJhdmVyc2FsU3RhdGUoUGF0aFRyYXZlcnNhbEFjdGlvbik7CiAKICAg
ICBmbG9hdCBjbG9zZVN1YnBhdGgoKTsKLSAgICBmbG9hdCBtb3ZlVG8oY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgIGZsb2F0IGxpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgZmxvYXQgcXVh
ZHJhdGljQmV6aWVyVG8oY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgRmxvYXRQ
b2ludCYgbmV3RW5kKTsKLSAgICBmbG9hdCBjdWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQm
IG5ld0NvbnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQ
b2ludCYgbmV3RW5kKTsKKyAgICBmbG9hdCBtb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOwor
ICAgIGZsb2F0IGxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgZmxvYXQgcXVhZHJh
dGljQmV6aWVyVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3Q29udHJvbCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgbmV3RW5kKTsKKyAgICBmbG9hdCBjdWJpY0JlemllclRvKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9sMiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgbmV3RW5kKTsKICAgICAKICAgICB2b2lkIHByb2Nlc3NTZWdtZW50
KCk7CiAKQEAgLTUzLDE3ICs1MywxNyBAQCBwdWJsaWM6CiAgICAgUGF0aFRyYXZlcnNhbEFjdGlv
biBtX2FjdGlvbjsKICAgICBib29sIG1fc3VjY2VzczsKIAotICAgIEZsb2F0UG9pbnQgbV9jdXJy
ZW50OwotICAgIEZsb2F0UG9pbnQgbV9zdGFydDsKLSAgICBGbG9hdFBvaW50IG1fY29udHJvbDE7
Ci0gICAgRmxvYXRQb2ludCBtX2NvbnRyb2wyOworICAgIEdyYXBoaWNzUG9pbnQgbV9jdXJyZW50
OworICAgIEdyYXBoaWNzUG9pbnQgbV9zdGFydDsKKyAgICBHcmFwaGljc1BvaW50IG1fY29udHJv
bDE7CisgICAgR3JhcGhpY3NQb2ludCBtX2NvbnRyb2wyOwogCiAgICAgZmxvYXQgbV90b3RhbExl
bmd0aDsKICAgICB1bnNpZ25lZCBtX3NlZ21lbnRJbmRleDsKICAgICBmbG9hdCBtX2Rlc2lyZWRM
ZW5ndGg7CiAKICAgICAvLyBGb3Igbm9ybWFsIGNhbGN1bGF0aW9ucwotICAgIEZsb2F0UG9pbnQg
bV9wcmV2aW91czsKKyAgICBHcmFwaGljc1BvaW50IG1fcHJldmlvdXM7CiAgICAgZmxvYXQgbV9u
b3JtYWxBbmdsZTsgLy8gZGVncmVlcwogfTsgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKIAogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTgzLDcgKzgzLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldExhc3RTaGFkb3dWYWx1ZXMoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIHNo
YWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkpCisgICAgdm9pZCBzZXRM
YXN0U2hhZG93VmFsdWVzKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYg
Y29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dS
ZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQogICAgIHsKICAgICAgICAgbV9s
YXN0V2FzSW5zZXQgPSBmYWxzZTsKICAgICAgICAgbV9sYXN0UmFkaXVzID0gcmFkaXVzOwpAQCAt
OTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGFzdFJhZGlpID0gcmFkaWk7CiAgICAg
fQogCi0gICAgdm9pZCBzZXRMYXN0SW5zZXRTaGFkb3dWYWx1ZXMoY29uc3QgRmxvYXRTaXplJiBy
YWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3Vu
ZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQorICAgIHZvaWQgc2V0TGFzdEluc2V0U2hhZG93VmFsdWVz
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZHMsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKICAgICB7
CiAgICAgICAgIG1fbGFzdFdhc0luc2V0ID0gdHJ1ZTsKICAgICAgICAgbV9sYXN0SW5zZXRCb3Vu
ZHMgPSBib3VuZHM7CkBAIC0xMDQsMTQgKzEwNCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGFz
dFJhZGlpID0gcmFkaWk7CiAgICAgfQogICAgIAotICAgIGJvb2wgbWF0Y2hlc0xhc3RTaGFkb3co
Y29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0
OjpSYWRpaSYgcmFkaWkpIGNvbnN0CisgICAgYm9vbCBtYXRjaGVzTGFzdFNoYWRvdyhjb25zdCBH
cmFwaGljc1NpemUmIHJhZGl1cywgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6
OlJhZGlpJiByYWRpaSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2xhc3RXYXNJbnNldCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIG1fbGFzdFJhZGl1cyA9
PSByYWRpdXMgJiYgbV9sYXN0Q29sb3IgPT0gY29sb3IgJiYgbV9sYXN0Q29sb3JTcGFjZSA9PSBj
b2xvclNwYWNlICYmIHNoYWRvd1JlY3QgPT0gbV9sYXN0U2hhZG93UmVjdCAmJiByYWRpaSA9PSBt
X2xhc3RSYWRpaTsKICAgICB9CiAKLSAgICBib29sIG1hdGNoZXNMYXN0SW5zZXRTaGFkb3coY29u
c3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kcywgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dS
ZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAorICAgIGJvb2wgbWF0
Y2hlc0xhc3RJbnNldFNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91
bmRzLCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpS
YWRpaSYgcmFkaWkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIW1fbGFzdFdhc0luc2V0KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQxLDE4ICsxNDEsMTggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNsZWFyU2NyYXRjaEJ1ZmZlcigpCiAgICAgewogICAgICAgICBtX2ltYWdlQnVm
ZmVyID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0UmFkaXVzID0gRmxvYXRTaXplKCk7CisgICAg
ICAgIG1fbGFzdFJhZGl1cyA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIH0KIAogICAgIE93blB0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBUaW1lcjxTY3JhdGNoQnVmZmVyPiBtX3B1
cmdlVGltZXI7CiAgICAgCi0gICAgRmxvYXRSZWN0IG1fbGFzdEluc2V0Qm91bmRzOwotICAgIEZs
b2F0UmVjdCBtX2xhc3RTaGFkb3dSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX2xhc3RJbnNldEJv
dW5kczsKKyAgICBHcmFwaGljc1JlY3QgbV9sYXN0U2hhZG93UmVjdDsKICAgICBSb3VuZGVkUmVj
dDo6UmFkaWkgbV9sYXN0UmFkaWk7CiAgICAgQ29sb3IgbV9sYXN0Q29sb3I7CiAgICAgQ29sb3JT
cGFjZSBtX2xhc3RDb2xvclNwYWNlOwotICAgIEZsb2F0U2l6ZSBtX2xhc3RSYWRpdXM7CisgICAg
R3JhcGhpY3NTaXplIG1fbGFzdFJhZGl1czsKICAgICBib29sIG1fbGFzdFdhc0luc2V0OwogICAg
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTE2OCw3ICsxNjgsNyBAQCBTY3JhdGNoQnVmZmVy
JiBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKQogCiBzdGF0aWMgY29uc3QgaW50IHRlbXBsYXRlU2lk
ZUxlbmd0aCA9IDE7CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiBy
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NT
aXplJiByYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICA6IG1fY29sb3IoY29sb3IpCiAgICAgLCBt
X2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKICAgICAsIG1fYmx1clJhZGl1cyhyYWRpdXMpCkBAIC0x
ODYsNyArMTg2LDcgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cigpCiB7CiB9CiAKLXZvaWQgU2hh
ZG93Qmx1cjo6c2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGJvb2wgaWdub3JlVHJhbnNmb3JtcykKK3ZvaWQgU2hhZG93Qmx1cjo6c2V0U2hhZG93VmFs
dWVzKGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wgaWdub3Jl
VHJhbnNmb3JtcykKIHsKICAgICBtX2JsdXJSYWRpdXMgPSByYWRpdXM7CiAgICAgbV9vZmZzZXQg
PSBvZmZzZXQ7CkBAIC0yMDAsNyArMjAwLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpzZXRTaGFkb3dW
YWx1ZXMoY29uc3QgRgogdm9pZCBTaGFkb3dCbHVyOjp1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCkK
IHsKICAgICAvLyBMaW1pdCBibHVyIHJhZGl1cyB0byAxMjggdG8gYXZvaWQgbG90cyBvZiB2ZXJ5
IGV4cGVuc2l2ZSBibHVycmluZy4KLSAgICBtX2JsdXJSYWRpdXMgPSBtX2JsdXJSYWRpdXMuc2hy
dW5rVG8oRmxvYXRTaXplKDEyOCwgMTI4KSk7CisgICAgbV9ibHVyUmFkaXVzID0gbV9ibHVyUmFk
aXVzLnNocnVua1RvKEdyYXBoaWNzU2l6ZSgxMjgsIDEyOCkpOwogCiAgICAgLy8gVGhlIHR5cGUg
b2Ygc2hhZG93IGlzIGRlY2lkZWQgYnkgdGhlIGJsdXIgcmFkaXVzLCBzaGFkb3cgb2Zmc2V0LCBh
bmQgc2hhZG93IGNvbG9yLgogICAgIGlmICghbV9jb2xvci5pc1ZhbGlkKCkgfHwgIW1fY29sb3Iu
YWxwaGEoKSkgewpAQCAtMjY0LDggKzI2NCw4IEBAIHZvaWQgU2hhZG93Qmx1cjo6Y2xlYXIoKQog
ewogICAgIG1fdHlwZSA9IE5vU2hhZG93OwogICAgIG1fY29sb3IgPSBDb2xvcigpOwotICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZSgpOwotICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7Cisg
ICAgbV9ibHVyUmFkaXVzID0gR3JhcGhpY3NTaXplKCk7CisgICAgbV9vZmZzZXQgPSBHcmFwaGlj
c1NpemUoKTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBj
aGFyKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGludCByb3dTdHJpZGUpCkBAIC0z
NjMsMTcgKzM2MywxNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmFkanVzdEJsdXJSYWRpdXMoR3JhcGhp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENhbGN1bGF0ZSB0cmFuc2Zvcm1lZCB1bml0IHZl
Y3RvcnMuCi0gICAgY29uc3QgRmxvYXRRdWFkIHVuaXRRdWFkKEZsb2F0UG9pbnQoMCwgMCksIEZs
b2F0UG9pbnQoMSwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQo
MCwgMSksIEZsb2F0UG9pbnQoMSwgMSkpOwotICAgIGNvbnN0IEZsb2F0UXVhZCB0cmFuc2Zvcm1l
ZFVuaXRRdWFkID0gdHJhbnNmb3JtLm1hcFF1YWQodW5pdFF1YWQpOworICAgIGNvbnN0IEdyYXBo
aWNzUXVhZCB1bml0UXVhZChHcmFwaGljc1BvaW50KDAsIDApLCBHcmFwaGljc1BvaW50KDEsIDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KDAsIDEpLCBHcmFw
aGljc1BvaW50KDEsIDEpKTsKKyAgICBjb25zdCBHcmFwaGljc1F1YWQgdHJhbnNmb3JtZWRVbml0
UXVhZCA9IHRyYW5zZm9ybS5tYXBRdWFkKHVuaXRRdWFkKTsKIAogICAgIC8vIENhbGN1bGF0ZSBY
IGF4aXMgc2NhbGUgZmFjdG9yLgotICAgIGNvbnN0IEZsb2F0U2l6ZSB4VW5pdENoYW5nZSA9IHRy
YW5zZm9ybWVkVW5pdFF1YWQucDIoKSAtIHRyYW5zZm9ybWVkVW5pdFF1YWQucDEoKTsKKyAgICBj
b25zdCBHcmFwaGljc1NpemUgeFVuaXRDaGFuZ2UgPSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAyKCkg
LSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAxKCk7CiAgICAgY29uc3QgZmxvYXQgeEF4aXNTY2FsZSA9
IHNxcnRmKHhVbml0Q2hhbmdlLndpZHRoKCkgKiB4VW5pdENoYW5nZS53aWR0aCgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgeFVuaXRDaGFuZ2UuaGVpZ2h0KCkgKiB4VW5p
dENoYW5nZS5oZWlnaHQoKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgWSBheGlzIHNjYWxlIGZhY3Rv
ci4KLSAgICBjb25zdCBGbG9hdFNpemUgeVVuaXRDaGFuZ2UgPSB0cmFuc2Zvcm1lZFVuaXRRdWFk
LnAzKCkgLSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAxKCk7CisgICAgY29uc3QgR3JhcGhpY3NTaXpl
IHlVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMygpIC0gdHJhbnNmb3JtZWRVbml0
UXVhZC5wMSgpOwogICAgIGNvbnN0IGZsb2F0IHlBeGlzU2NhbGUgPSBzcXJ0Zih5VW5pdENoYW5n
ZS53aWR0aCgpICogeVVuaXRDaGFuZ2Uud2lkdGgoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArIHlVbml0Q2hhbmdlLmhlaWdodCgpICogeVVuaXRDaGFuZ2UuaGVpZ2h0KCkp
OwogCkBAIC0zOTUsMTcgKzM5NSwxNyBAQCBJbnRTaXplIFNoYWRvd0JsdXI6OmJsdXJyZWRFZGdl
U2l6ZSgpIGNvCiAgICAgcmV0dXJuIGVkZ2VTaXplOwogfQogCi1JbnRSZWN0IFNoYWRvd0JsdXI6
OmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQorSW50
UmVjdCBTaGFkb3dCbHVyOjpjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBJbnRS
ZWN0JiBjbGlwUmVjdCkKIHsKICAgICBJbnRTaXplIGVkZ2VTaXplID0gYmx1cnJlZEVkZ2VTaXpl
KCk7CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBibHVycmVkIGFu
ZC9vciB0cmFuc2Zvcm1lZCBsYXllci4KLSAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0OworICAgIEdy
YXBoaWNzUmVjdCBsYXllclJlY3Q7CiAgICAgSW50U2l6ZSBpbmZsYXRpb247CiAKICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgaWYg
KG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgJiYgIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkpIHsK
LSAgICAgICAgRmxvYXRRdWFkIHRyYW5zZm9ybWVkUG9seWdvbiA9IHRyYW5zZm9ybS5tYXBRdWFk
KEZsb2F0UXVhZChzaGFkb3dlZFJlY3QpKTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIHRyYW5zZm9y
bWVkUG9seWdvbiA9IHRyYW5zZm9ybS5tYXBRdWFkKEdyYXBoaWNzUXVhZChzaGFkb3dlZFJlY3Qp
KTsKICAgICAgICAgdHJhbnNmb3JtZWRQb2x5Z29uLm1vdmUobV9vZmZzZXQpOwogICAgICAgICBs
YXllclJlY3QgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFF1YWQodHJhbnNmb3JtZWRQb2x5Z29u
KS5ib3VuZGluZ0JveCgpOwogICAgIH0gZWxzZSB7CkBAIC00MjAsNyArNDIwLDcgQEAgSW50UmVj
dCBTaGFkb3dCbHVyOjpjYWxjdWxhdGVMYXllckJvdW5kaQogICAgICAgICBpbmZsYXRpb24gPSBl
ZGdlU2l6ZTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgdW5jbGlwcGVkTGF5ZXJSZWN0ID0gbGF5
ZXJSZWN0OworICAgIEdyYXBoaWNzUmVjdCB1bmNsaXBwZWRMYXllclJlY3QgPSBsYXllclJlY3Q7
CiAKICAgICBpZiAoIWNsaXBSZWN0LmNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3QobGF5ZXJSZWN0
KSkpIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIHRvdGFsbHkgb3V0c2lkZSB0aGUgY2xpcCByZWdp
b24sIHdlIGFyZW4ndCBwYWludGluZyBhdCBhbGwuCkBAIC00NDAsMTggKzQ0MCwxOCBAQCBJbnRS
ZWN0IFNoYWRvd0JsdXI6OmNhbGN1bGF0ZUxheWVyQm91bmRpCiAKICAgICBJbnRTaXplIGZyYW1l
U2l6ZSA9IGluZmxhdGlvbjsKICAgICBmcmFtZVNpemUuc2NhbGUoMik7Ci0gICAgbV9zb3VyY2VS
ZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHNoYWRvd2VkUmVjdC53aWR0aCgpICsgZnJhbWVTaXplLndp
ZHRoKCksIHNoYWRvd2VkUmVjdC5oZWlnaHQoKSArIGZyYW1lU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
bV9sYXllck9yaWdpbiA9IEZsb2F0UG9pbnQobGF5ZXJSZWN0LngoKSwgbGF5ZXJSZWN0LnkoKSk7
CisgICAgbV9zb3VyY2VSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIHNoYWRvd2VkUmVjdC53aWR0
aCgpICsgZnJhbWVTaXplLndpZHRoKCksIHNoYWRvd2VkUmVjdC5oZWlnaHQoKSArIGZyYW1lU2l6
ZS5oZWlnaHQoKSk7CisgICAgbV9sYXllck9yaWdpbiA9IEdyYXBoaWNzUG9pbnQobGF5ZXJSZWN0
LngoKSwgbGF5ZXJSZWN0LnkoKSk7CiAgICAgbV9sYXllclNpemUgPSBsYXllclJlY3Quc2l6ZSgp
OwogCi0gICAgY29uc3QgRmxvYXRQb2ludCB1bmNsaXBwZWRMYXllck9yaWdpbiA9IEZsb2F0UG9p
bnQodW5jbGlwcGVkTGF5ZXJSZWN0LngoKSwgdW5jbGlwcGVkTGF5ZXJSZWN0LnkoKSk7Ci0gICAg
Y29uc3QgRmxvYXRTaXplIGNsaXBwZWRPdXQgPSB1bmNsaXBwZWRMYXllck9yaWdpbiAtIG1fbGF5
ZXJPcmlnaW47CisgICAgY29uc3QgR3JhcGhpY3NQb2ludCB1bmNsaXBwZWRMYXllck9yaWdpbiA9
IEdyYXBoaWNzUG9pbnQodW5jbGlwcGVkTGF5ZXJSZWN0LngoKSwgdW5jbGlwcGVkTGF5ZXJSZWN0
LnkoKSk7CisgICAgY29uc3QgR3JhcGhpY3NTaXplIGNsaXBwZWRPdXQgPSB1bmNsaXBwZWRMYXll
ck9yaWdpbiAtIG1fbGF5ZXJPcmlnaW47CiAKICAgICAvLyBTZXQgdGhlIG9yaWdpbiBhcyB0aGUg
dG9wIGxlZnQgY29ybmVyIG9mIHRoZSBzY3JhdGNoIGltYWdlLCBvciwgaW4gY2FzZSB0aGVyZSdz
IGEgY2xpcHBlZAogICAgIC8vIG91dCByZWdpb24sIHNldCB0aGUgb3JpZ2luIGFjY29yZGluZ2x5
IHRvIHRoZSBmdWxsIGJvdW5kaW5nIHJlY3QncyB0b3AtbGVmdCBjb3JuZXIuCiAgICAgZmxvYXQg
dHJhbnNsYXRpb25YID0gLXNoYWRvd2VkUmVjdC54KCkgKyBpbmZsYXRpb24ud2lkdGgoKSAtIGZh
YnNmKGNsaXBwZWRPdXQud2lkdGgoKSk7CiAgICAgZmxvYXQgdHJhbnNsYXRpb25ZID0gLXNoYWRv
d2VkUmVjdC55KCkgKyBpbmZsYXRpb24uaGVpZ2h0KCkgLSBmYWJzZihjbGlwcGVkT3V0LmhlaWdo
dCgpKTsKLSAgICBtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uID0gRmxvYXRTaXplKHRyYW5zbGF0
aW9uWCwgdHJhbnNsYXRpb25ZKTsKKyAgICBtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uID0gR3Jh
cGhpY3NTaXplKHRyYW5zbGF0aW9uWCwgdHJhbnNsYXRpb25ZKTsKIAogICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGxheWVyUmVjdCk7CiB9CkBAIC00NjcsMTMgKzQ2NywxMyBAQCB2b2lkIFNo
YWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhpCiAgICAgaWYgKGJ1ZmZlclNpemUgIT0g
bV9sYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFzc2VkIHRvIGNsaXBUb0ltYWdl
QnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgYnVmZmVyLAogICAgICAg
ICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxsLCBzbyBjbGlwIHRvIHRoZSBm
aWxsZWQgcGFydCBmaXJzdC4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKEZsb2F0UmVj
dChtX2xheWVyT3JpZ2luLCBtX2xheWVyU2l6ZSkpOworICAgICAgICBncmFwaGljc0NvbnRleHQt
PmNsaXAoR3JhcGhpY3NSZWN0KG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJTaXplKSk7CiAgICAgfQot
ICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBGbG9h
dFJlY3QobV9sYXllck9yaWdpbiwgYnVmZmVyU2l6ZSkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+
Y2xpcFRvSW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBHcmFwaGljc1JlY3QobV9sYXllck9yaWdp
biwgYnVmZmVyU2l6ZSkpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fY29s
b3IsIG1fY29sb3JTcGFjZSk7CiAKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QobV9sYXllck9yaWdpbiwg
bV9zb3VyY2VSZWN0LnNpemUoKSkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoR3Jh
cGhpY3NSZWN0KG1fbGF5ZXJPcmlnaW4sIG1fc291cmNlUmVjdC5zaXplKCkpKTsKIH0KIAogc3Rh
dGljIHZvaWQgY29tcHV0ZVNsaWNlU2l6ZXNGcm9tUmFkaWkoY29uc3QgSW50U2l6ZSYgdHdpY2VS
YWRpdXMsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGludCYgbGVmdFNsaWNlLCBp
bnQmIHJpZ2h0U2xpY2UsIGludCYgdG9wU2xpY2UsIGludCYgYm90dG9tU2xpY2UpCkBAIC01MDMs
NyArNTAzLDcgQEAgSW50U2l6ZSBTaGFkb3dCbHVyOjp0ZW1wbGF0ZVNpemUoY29uc3QgSQogICAg
ICAgICAgICAgICAgICAgIHRlbXBsYXRlU2lkZUxlbmd0aCArIHRvcFNsaWNlICsgYm90dG9tU2xp
Y2UpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3Qg
Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFk
b3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
c2hhZG93ZWRSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQogewogICAgIElu
dFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoZ3JhcGhpY3NDb250
ZXh0LCBzaGFkb3dlZFJlY3QsIGdyYXBoaWNzQ29udGV4dC0+Y2xpcEJvdW5kcygpKTsKICAgICBp
ZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93KEdyYXBoaWNzCiAgICAgZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5n
KGdyYXBoaWNzQ29udGV4dCwgc2hhZG93ZWRSZWN0LCByYWRpaSwgdGVtcGxhdGVTaXplLCBlZGdl
U2l6ZSk7CiB9CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKQordm9p
ZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBob2xl
UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkpCiB7CiAgICAgSW50UmVj
dCBsYXllclJlY3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChncmFwaGljc0NvbnRleHQs
IHJlY3QsIGdyYXBoaWNzQ29udGV4dC0+Y2xpcEJvdW5kcygpKTsKICAgICBpZiAobGF5ZXJSZWN0
LmlzRW1wdHkoKSkKQEAgLTU1NywyMCArNTU3LDIwIEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0lu
c2V0U2hhZG93KEdyYXBoaWMKICAgICBkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKGdyYXBoaWNz
Q29udGV4dCwgcmVjdCwgaG9sZVJlY3QsIGhvbGVSYWRpaSwgdGVtcGxhdGVTaXplLCBlZGdlU2l6
ZSk7CiB9CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2Vk
UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50UmVjdCYgbGF5
ZXJSZWN0KQordm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93
ZWRSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRSZWN0JiBs
YXllclJlY3QpCiB7CiAgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCku
Z2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIW1fbGF5ZXJJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJ1ZmZlclJlbGF0aXZlU2hhZG93
ZWRSZWN0ID0gc2hhZG93ZWRSZWN0OworICAgIEdyYXBoaWNzUmVjdCBidWZmZXJSZWxhdGl2ZVNo
YWRvd2VkUmVjdCA9IHNoYWRvd2VkUmVjdDsKICAgICBidWZmZXJSZWxhdGl2ZVNoYWRvd2VkUmVj
dC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogICAgIGlmICghU2NyYXRjaEJ1ZmZl
cjo6c2hhcmVkKCkubWF0Y2hlc0xhc3RTaGFkb3cobV9ibHVyUmFkaXVzLCBDb2xvcjo6YmxhY2ss
IENvbG9yU3BhY2VEZXZpY2VSR0IsIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0LCByYWRpaSkp
IHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdl
LT5jb250ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqc2hhZG93Q29udGV4dCk7CiAKICAgICAgICAgLy8gQWRkIGEgcGl4ZWwgdG8gYXZvaWQgbGF0
ZXIgZWRnZSBhbGlhc2luZyB3aGVuIHJvdGF0ZWQuCi0gICAgICAgIHNoYWRvd0NvbnRleHQtPmNs
ZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSArIDEsIG1fbGF5ZXJT
aXplLmhlaWdodCgpICsgMSkpOworICAgICAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3QoR3Jh
cGhpY3NSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgKyAxLCBtX2xheWVyU2l6ZS5oZWln
aHQoKSArIDEpKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250
ZXh0VHJhbnNsYXRpb24pOwogICAgICAgICBzaGFkb3dDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29s
b3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgaWYgKHJhZGlpLmlzWmVy
bygpKQpAQCAtNTkxLDE2ICs1OTEsMTYgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRv
d1dpdGhvdXRUaQogICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1
ZmZlclB1cmdlKCk7CiB9CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91
dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFk
aWkmIGhvbGVSYWRpaSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQordm9pZCBTaGFkb3dCbHVy
OjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9s
ZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpLCBjb25zdCBJbnRSZWN0
JiBsYXllclJlY3QpCiB7CiAgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVk
KCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIW1fbGF5ZXJJ
bWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJ1ZmZlclJlbGF0aXZlUmVj
dCA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGJ1ZmZlclJlbGF0aXZlUmVjdCA9IHJlY3Q7CiAg
ICAgYnVmZmVyUmVsYXRpdmVSZWN0Lm1vdmUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7CiAK
LSAgICBGbG9hdFJlY3QgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCA9IGhvbGVSZWN0OworICAgIEdy
YXBoaWNzUmVjdCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0ID0gaG9sZVJlY3Q7CiAgICAgYnVmZmVy
UmVsYXRpdmVIb2xlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAgICAg
aWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5tYXRjaGVzTGFzdEluc2V0U2hhZG93KG1fYmx1
clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2
ZVJlY3QsIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QsIGhvbGVSYWRpaSkpIHsKQEAgLTYwOCw3ICs2
MDgsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUCiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CiAK
ICAgICAgICAgLy8gQWRkIGEgcGl4ZWwgdG8gYXZvaWQgbGF0ZXIgZWRnZSBhbGlhc2luZyB3aGVu
IHJvdGF0ZWQuCi0gICAgICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoMCwg
MCwgbV9sYXllclNpemUud2lkdGgoKSArIDEsIG1fbGF5ZXJTaXplLmhlaWdodCgpICsgMSkpOwor
ICAgICAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIG1fbGF5
ZXJTaXplLndpZHRoKCkgKyAxLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSArIDEpKTsKICAgICAgICAg
c2hhZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAg
ICAgICAgIFBhdGggcGF0aDsKQEAgLTY2NCw3ICs2NjQsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRy
YXdJbnNldFNoYWRvd1dpdGhvdXRUCiAgICAgIHRoZSBzaGFkb3cuCiAgKi8KIAotdm9pZCBTaGFk
b3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgaG9sZVJl
Y3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCit2b2lkIFNoYWRvd0JsdXI6OmRyYXdJ
bnNldFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBob2xlUmVjdCwgY29u
c3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXpl
LCBjb25zdCBJbnRTaXplJiBlZGdlU2l6ZSkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGVhclNoYWRvdygpOwpAQCAtNjc0LDggKzY3NCw4IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0lu
c2V0U2hhZG93V2l0aFRpbGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRHJhdyB0aGUgcmVj
dGFuZ2xlIHdpdGggaG9sZS4KLSAgICBGbG9hdFJlY3QgdGVtcGxhdGVCb3VuZHMoMCwgMCwgdGVt
cGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0
IHRlbXBsYXRlSG9sZSA9IEZsb2F0UmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWln
aHQoKSwgdGVtcGxhdGVTaXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxh
dGVTaXplLmhlaWdodCgpIC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1Jl
Y3QgdGVtcGxhdGVCb3VuZHMoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6
ZS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlSG9sZSA9IEdyYXBoaWNzUmVj
dChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwgdGVtcGxhdGVTaXplLndpZHRo
KCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpIC0gMiAqIGVk
Z2VTaXplLmhlaWdodCgpKTsKIAogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkubWF0
Y2hlc0xhc3RJbnNldFNoYWRvdyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwg
dGVtcGxhdGVCb3VuZHMsIHRlbXBsYXRlSG9sZSwgcmFkaWkpKSB7CiAgICAgICAgIC8vIERyYXcg
c2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCkBAIC02OTksMTIgKzY5OSwxMiBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpCiAgICAgICAgIFNjcmF0Y2hCdWZm
ZXI6OnNoYXJlZCgpLnNldExhc3RJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIG1fY29s
b3IsIG1fY29sb3JTcGFjZSwgdGVtcGxhdGVCb3VuZHMsIHRlbXBsYXRlSG9sZSwgcmFkaWkpOwog
ICAgIH0KIAotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OworICAgIEdyYXBoaWNz
UmVjdCBib3VuZGluZ1JlY3QgPSByZWN0OwogICAgIGJvdW5kaW5nUmVjdC5tb3ZlKG1fb2Zmc2V0
KTsKIAotICAgIEZsb2F0UmVjdCBkZXN0SG9sZVJlY3QgPSBob2xlUmVjdDsKKyAgICBHcmFwaGlj
c1JlY3QgZGVzdEhvbGVSZWN0ID0gaG9sZVJlY3Q7CiAgICAgZGVzdEhvbGVSZWN0Lm1vdmUobV9v
ZmZzZXQpOwotICAgIEZsb2F0UmVjdCBkZXN0SG9sZUJvdW5kcyA9IGRlc3RIb2xlUmVjdDsKKyAg
ICBHcmFwaGljc1JlY3QgZGVzdEhvbGVCb3VuZHMgPSBkZXN0SG9sZVJlY3Q7CiAgICAgZGVzdEhv
bGVCb3VuZHMuaW5mbGF0ZVgoZWRnZVNpemUud2lkdGgoKSk7CiAgICAgZGVzdEhvbGVCb3VuZHMu
aW5mbGF0ZVkoZWRnZVNpemUuaGVpZ2h0KCkpOwogCkBAIC03MjYsNyArNzI2LDcgQEAgdm9pZCBT
aGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaQogICAgIFNjcmF0Y2hCdWZmZXI6OnNo
YXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKLXZvaWQgU2hhZG93Qmx1
cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJh
ZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBl
ZGdlU2l6ZSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd2Vk
UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgdGVt
cGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBlZGdlU2l6ZSkKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CiAgICAgZ3JhcGhpY3ND
b250ZXh0LT5jbGVhclNoYWRvdygpOwpAQCAtNzM1LDE0ICs3MzUsMTQgQEAgdm9pZCBTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbgogICAgIGlmICghbV9sYXllckltYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgdGVtcGxhdGVTaGFkb3cgPSBGbG9hdFJlY3Qo
ZWRnZVNpemUud2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53aWR0aCgp
IC0gMiAqIGVkZ2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIgKiBlZGdl
U2l6ZS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlU2hhZG93ID0gR3JhcGhp
Y3NSZWN0KGVkZ2VTaXplLndpZHRoKCksIGVkZ2VTaXplLmhlaWdodCgpLCB0ZW1wbGF0ZVNpemUu
d2lkdGgoKSAtIDIgKiBlZGdlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSAy
ICogZWRnZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFyZWQo
KS5tYXRjaGVzTGFzdFNoYWRvdyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwg
dGVtcGxhdGVTaGFkb3csIHJhZGlpKSkgewogICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIHRo
ZSBJbWFnZUJ1ZmZlci4KICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0g
bV9sYXllckltYWdlLT5jb250ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc2hhZG93U3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CiAKLSAgICAgICAgc2hhZG93Q29u
dGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVt
cGxhdGVTaXplLmhlaWdodCgpKSk7CisgICAgICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChH
cmFwaGljc1JlY3QoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWln
aHQoKSkpOwogICAgICAgICBzaGFkb3dDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNr
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyYWRpaS5pc1pl
cm8oKSkKQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93
V2l0aFRpbGluCiAgICAgICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldExhc3RTaGFkb3dW
YWx1ZXMobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlU2hhZG93
LCByYWRpaSk7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHNoYWRvd0JvdW5kcyA9IHNoYWRvd2Vk
UmVjdDsKKyAgICBHcmFwaGljc1JlY3Qgc2hhZG93Qm91bmRzID0gc2hhZG93ZWRSZWN0OwogICAg
IHNoYWRvd0JvdW5kcy5tb3ZlKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zmc2V0LmhlaWdodCgpKTsK
ICAgICBzaGFkb3dCb3VuZHMuaW5mbGF0ZVgoZWRnZVNpemUud2lkdGgoKSk7CiAgICAgc2hhZG93
Qm91bmRzLmluZmxhdGVZKGVkZ2VTaXplLmhlaWdodCgpKTsKQEAgLTc2OSw3ICs3NjksNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluCiAgICAgU2NyYXRjaEJ1ZmZl
cjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAotdm9pZCBTaGFk
b3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93Qm91bmRzLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkm
IHJhZGlpLCBjb25zdCBJbnRTaXplJiBidWZmZXJQYWRkaW5nLCBjb25zdCBJbnRTaXplJiB0ZW1w
bGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlvbiBkaXJlY3Rpb24pCit2b2lkIFNoYWRvd0JsdXI6OmRy
YXdMYXllclBpZWNlcyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzaGFkb3dCb3VuZHMsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWks
IGNvbnN0IEludFNpemUmIGJ1ZmZlclBhZGRpbmcsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6
ZSwgU2hhZG93RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBjb25zdCBJbnRTaXplIHR3aWNl
UmFkaXVzID0gSW50U2l6ZShidWZmZXJQYWRkaW5nLndpZHRoKCkgKiAyLCBidWZmZXJQYWRkaW5n
LmhlaWdodCgpICogMik7CiAKQEAgLTc4Myw3ICs3ODMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRy
YXdMYXllclBpZWNlcyhHcmFwaGljCiAgICAgaW50IGNlbnRlckhlaWdodCA9IHNoYWRvd0JvdW5k
cy5oZWlnaHQoKSAtIHRvcFNsaWNlIC0gYm90dG9tU2xpY2U7CiAKICAgICBpZiAoZGlyZWN0aW9u
ID09IE91dGVyU2hhZG93KSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dJbnRlcmlvcihzaGFk
b3dCb3VuZHMueCgpICsgbGVmdFNsaWNlLCBzaGFkb3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNl
bnRlcldpZHRoLCBjZW50ZXJIZWlnaHQpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2hhZG93SW50
ZXJpb3Ioc2hhZG93Qm91bmRzLngoKSArIGxlZnRTbGljZSwgc2hhZG93Qm91bmRzLnkoKSArIHRv
cFNsaWNlLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKICAgICAgICAgaWYgKCFzaGFkb3dJ
bnRlcmlvci5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0RmlsbENvbG9yKG1fY29sb3IsIG1fY29sb3JTcGFjZSk7CkBAIC03OTMsMTIgKzc5
MywxMiBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdMYXllclBpZWNlcyhHcmFwaGljCiAKICAgICAv
LyBOb3RlIHRoYXQgZHJhd2luZyB0aGUgSW1hZ2VCdWZmZXIgaXMgZmFzdGVyIHRoYW4gY3JlYXRp
bmcgYSBJbWFnZSBhbmQgZHJhd2luZyB0aGF0LAogICAgIC8vIGJlY2F1c2UgSW1hZ2VCdWZmZXI6
OmRyYXcoKSBrbm93cyB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBiaXRz
LgotICAgIEZsb2F0UmVjdCBjZW50ZXJSZWN0KHNoYWRvd0JvdW5kcy54KCkgKyBsZWZ0U2xpY2Us
IHNoYWRvd0JvdW5kcy55KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCk7
CisgICAgR3JhcGhpY3NSZWN0IGNlbnRlclJlY3Qoc2hhZG93Qm91bmRzLngoKSArIGxlZnRTbGlj
ZSwgc2hhZG93Qm91bmRzLnkoKSArIHRvcFNsaWNlLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0
KTsKICAgICBjZW50ZXJSZWN0ID0gZ3JhcGhpY3NDb250ZXh0LT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KGNlbnRlclJlY3QpOwogICAgIAogICAgIC8vIFRvcCBzaWRlLgotICAgIEZsb2F0UmVjdCB0aWxl
UmVjdCA9IEZsb2F0UmVjdChsZWZ0U2xpY2UsIDAsIHRlbXBsYXRlU2lkZUxlbmd0aCwgdG9wU2xp
Y2UpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChjZW50ZXJSZWN0LngoKSwg
Y2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgY2VudGVyUmVjdC53aWR0aCgpLCB0b3BTbGljZSk7
CisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KGxlZnRTbGljZSwgMCwg
dGVtcGxhdGVTaWRlTGVuZ3RoLCB0b3BTbGljZSk7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0
ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJlY3QueCgpLCBjZW50ZXJSZWN0LnkoKSAtIHRvcFNsaWNl
LCBjZW50ZXJSZWN0LndpZHRoKCksIHRvcFNsaWNlKTsKICAgICBncmFwaGljc0NvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0
LCB0aWxlUmVjdCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gc2lkZS4KQEAgLTgwOSw4ICs4
MDksOCBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdMYXllclBpZWNlcyhHcmFwaGljCiAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gTGVmdCBzaWRlLgotICAgIHRp
bGVSZWN0ID0gRmxvYXRSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIHRlbXBsYXRlU2lkZUxl
bmd0aCk7Ci0gICAgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC54KCkgLSBsZWZ0U2xp
Y2UsIGNlbnRlclJlY3QueSgpLCBsZWZ0U2xpY2UsIGNlbnRlclJlY3QuaGVpZ2h0KCkpOworICAg
IHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIHRlbXBsYXRl
U2lkZUxlbmd0aCk7CisgICAgZGVzdFJlY3QgPSBHcmFwaGljc1JlY3QoY2VudGVyUmVjdC54KCkg
LSBsZWZ0U2xpY2UsIGNlbnRlclJlY3QueSgpLCBsZWZ0U2xpY2UsIGNlbnRlclJlY3QuaGVpZ2h0
KCkpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIFJpZ2h0
IHNpZGUuCkBAIC04MjEsMjMgKzgyMSwyMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdMYXllclBp
ZWNlcyhHcmFwaGljCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXll
ckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAg
Ly8gVG9wIGxlZnQgY29ybmVyLgotICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIGxlZnRT
bGljZSwgdG9wU2xpY2UpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3QueCgp
IC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0LnkoKSAtIHRvcFNsaWNlLCBsZWZ0U2xpY2UsIHRvcFNs
aWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNs
aWNlKTsKKyAgICBkZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0LngoKSAtIGxlZnRT
bGljZSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgbGVmdFNsaWNlLCB0b3BTbGljZSk7CiAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gVG9wIHJpZ2h0IGNv
cm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCh0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJp
Z2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0
UmVjdChjZW50ZXJSZWN0Lm1heFgoKSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgcmlnaHRT
bGljZSwgdG9wU2xpY2UpOworICAgIHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KHRlbXBsYXRlU2l6
ZS53aWR0aCgpIC0gcmlnaHRTbGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpOworICAgIGRl
c3RSZWN0ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJlY3QubWF4WCgpLCBjZW50ZXJSZWN0LnkoKSAt
IHRvcFNsaWNlLCByaWdodFNsaWNlLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVj
dCwgdGlsZVJlY3QpOwogCiAgICAgLy8gQm90dG9tIHJpZ2h0IGNvcm5lci4KLSAgICB0aWxlUmVj
dCA9IEZsb2F0UmVjdCh0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJpZ2h0U2xpY2UsIHRlbXBsYXRl
U2l6ZS5oZWlnaHQoKSAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBib3R0b21TbGljZSk7Ci0g
ICAgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC5tYXhYKCksIGNlbnRlclJlY3QubWF4
WSgpLCByaWdodFNsaWNlLCBib3R0b21TbGljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1Jl
Y3QodGVtcGxhdGVTaXplLndpZHRoKCkgLSByaWdodFNsaWNlLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0
KCkgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpOworICAgIGRlc3RSZWN0
ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJlY3QubWF4WCgpLCBjZW50ZXJSZWN0Lm1heFkoKSwgcmln
aHRTbGljZSwgYm90dG9tU2xpY2UpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVm
ZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0
KTsKIAogICAgIC8vIEJvdHRvbSBsZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVj
dCgwLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgbGVmdFNsaWNlLCBib3R0
b21TbGljZSk7Ci0gICAgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC54KCkgLSBsZWZ0
U2xpY2UsIGNlbnRlclJlY3QubWF4WSgpLCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNlKTsKKyAgICB0
aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21T
bGljZSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSk7CisgICAgZGVzdFJlY3QgPSBHcmFwaGljc1Jl
Y3QoY2VudGVyUmVjdC54KCkgLSBsZWZ0U2xpY2UsIGNlbnRlclJlY3QubWF4WSgpLCBsZWZ0U2xp
Y2UsIGJvdHRvbVNsaWNlKTsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlciht
X2xheWVySW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0aWxlUmVjdCk7CiB9
CiAKQEAgLTg2MiwxMCArODYyLDEwIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hh
ZG93QnVmZmUKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNoYWRv
d0NvbnRleHQpOwogICAgIHNoYWRvd0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VJbik7CiAgICAgc2hhZG93Q29udGV4dC0+c2V0RmlsbENvbG9yKG1fY29sb3Is
IG1fY29sb3JTcGFjZSk7Ci0gICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KDAs
IDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpKTsKKyAgICBz
aGFkb3dDb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QoMCwgMCwgdGVtcGxhdGVTaXplLndp
ZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSkpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFNo
YWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKK0dyYXBoaWNzQ29udGV4dCogU2hhZG93Qmx1cjo6YmVn
aW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgbGF5ZXJBcmVhKQogewogICAgIGFkanVzdEJsdXJSYWRpdXMoY29udGV4dCk7CiAKQEAgLTg3
OCw3ICs4NzgsNyBAQCBHcmFwaGljc0NvbnRleHQqIFNoYWRvd0JsdXI6OmJlZ2luU2hhZG93CiAK
ICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRl
eHQoKTsKICAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7Ci0gICAgc2hhZG93Q29udGV4dC0+Y2xl
YXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5o
ZWlnaHQoKSkpOworICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChHcmFwaGljc1JlY3QoMCwg
MCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNpemUuaGVpZ2h0KCkpKTsKIAogICAgIHNo
YWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKICAgICBy
ZXR1cm4gc2hhZG93Q29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC01MCwx
OSArNTAsMTkgQEAgcHVibGljOgogICAgICAgICBCbHVyU2hhZG93CiAgICAgfTsKIAotICAgIFNo
YWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgIFNoYWRvd0JsdXIoY29uc3QgR3JhcGhp
Y3NTaXplJiByYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYs
IENvbG9yU3BhY2UpOwogICAgIFNoYWRvd0JsdXIoKTsKIAotICAgIHZvaWQgc2V0U2hhZG93VmFs
dWVzKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIENv
bG9yU3BhY2UsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKKyAgICB2b2lkIHNldFNo
YWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmLCBjb25zdCBHcmFwaGljc1NpemUmICwgY29u
c3QgQ29sb3ImLCBDb2xvclNwYWNlLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAK
ICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgaWdub3JlVHJhbnNmb3Jt
cykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdub3JlVHJhbnNmb3JtczsgfQogICAg
IGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luU2hhZG93TGF5
ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpOworICAgIEdy
YXBoaWNzQ29udGV4dCogYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBH
cmFwaGljc1JlY3QmIGxheWVyQXJlYSk7CiAgICAgdm9pZCBlbmRTaGFkb3dMYXllcihHcmFwaGlj
c0NvbnRleHQqKTsKIAotICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJik7Ci0gICAgdm9pZCBk
cmF3SW5zZXRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkp
OworICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJik7CisgICAgdm9pZCBkcmF3SW5zZXRT
aGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkpOwog
CiAgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYs
IGludCBzdHJpZGUpOwogCkBAIC04MSwxNiArODEsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgSW5u
ZXJTaGFkb3cKICAgICB9OwogICAgIAotICAgIEludFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZGlu
Z1JlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KTsKKyAgICBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdS
ZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGF5ZXJBcmVhLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgSW50U2l6ZSB0ZW1wbGF0ZVNpemUoY29uc3QgSW50
U2l6ZSYgYmx1cnJlZEVkZ2VTaXplLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmKSBjb25zdDsK
IAotICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFJl
Y3QmIGxheWVyUmVjdCk7Ci0gICAgdm9pZCBkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwg
Y29uc3QgSW50U2l6ZSYgc2hhZG93VGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBibHVycmVk
RWRnZVNpemUpOworICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYs
IGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7CisgICAgdm9pZCBkcmF3UmVjdFNoYWRvd1dpdGhU
aWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgUm91bmRl
ZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50U2l6ZSYgc2hhZG93VGVtcGxhdGVTaXplLCBjb25zdCBJ
bnRTaXplJiBibHVycmVkRWRnZVNpemUpOwogCi0gICAgdm9pZCBkcmF3SW5zZXRTaGFkb3dXaXRo
b3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFJlY3Qm
IGxheWVyUmVjdCk7Ci0gICAgdm9pZCBkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYgaG9sZVJlY3QsIGNv
bnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6
ZSwgY29uc3QgSW50U2l6ZSYgYmx1cnJlZEVkZ2VTaXplKTsKKyAgICB2b2lkIGRyYXdJbnNldFNo
YWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0Jiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwg
Y29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KTsKKyAgICB2b2lkIGRyYXdJbnNldFNoYWRvd1dpdGhU
aWxpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiwgY29uc3QgSW50U2l6
ZSYgc2hhZG93VGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBibHVycmVkRWRnZVNpemUpOwog
ICAgIAotICAgIHZvaWQgZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgc2hhZG93Qm91bmRzLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJ
bnRTaXplJiByb3VuZGVkUmFkaXVzLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIFNoYWRv
d0RpcmVjdGlvbik7CisgICAgdm9pZCBkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dCb3VuZHMsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRp
aSYsIGNvbnN0IEludFNpemUmIHJvdW5kZWRSYWRpdXMsIGNvbnN0IEludFNpemUmIHRlbXBsYXRl
U2l6ZSwgU2hhZG93RGlyZWN0aW9uKTsKICAgICAKICAgICB2b2lkIGJsdXJTaGFkb3dCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKTsKICAgICB2b2lkIGJsdXJBbmRDb2xvclNoYWRv
d0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpOwpAQCAtMTAyLDE1ICsxMDIsMTUg
QEAgcHJpdmF0ZToKIAogICAgIENvbG9yIG1fY29sb3I7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9y
U3BhY2U7Ci0gICAgRmxvYXRTaXplIG1fYmx1clJhZGl1czsKLSAgICBGbG9hdFNpemUgbV9vZmZz
ZXQ7CisgICAgR3JhcGhpY3NTaXplIG1fYmx1clJhZGl1czsKKyAgICBHcmFwaGljc1NpemUgbV9v
ZmZzZXQ7CiAKICAgICBJbWFnZUJ1ZmZlciogbV9sYXllckltYWdlOyAvLyBCdWZmZXIgdG8gd2hl
cmUgdGhlIHRlbXBvcmFyeSBzaGFkb3cgd2lsbCBiZSBkcmF3biB0by4KIAotICAgIEZsb2F0UmVj
dCBtX3NvdXJjZVJlY3Q7IC8vIFN1Yi1yZWN0IG9mIG1fbGF5ZXJJbWFnZSB0aGF0IGNvbnRhaW5z
IHRoZSBzaGFkb3cgcGl4ZWxzLgotICAgIEZsb2F0UG9pbnQgbV9sYXllck9yaWdpbjsgLy8gVG9w
LWxlZnQgY29ybmVyIG9mIHRoZSAocG9zc2libHkgY2xpcHBlZCkgYm91bmRpbmcgcmVjdCB0byBk
cmF3IHRoZSBzaGFkb3cgdG8uCi0gICAgRmxvYXRTaXplIG1fbGF5ZXJTaXplOyAvLyBTaXplIG9m
IG1fbGF5ZXJJbWFnZSBwaXhlbHMgdGhhdCBuZWVkIGJsdXJyaW5nLgotICAgIEZsb2F0U2l6ZSBt
X2xheWVyQ29udGV4dFRyYW5zbGF0aW9uOyAvLyBUcmFuc2xhdGlvbiB0byBhcHBseSB0byBtX2xh
eWVyQ29udGV4dCBmb3IgdGhlIHNoYWRvdyB0byBiZSBjb3JyZWN0bHkgY2xpcHBlZC4KKyAgICBH
cmFwaGljc1JlY3QgbV9zb3VyY2VSZWN0OyAvLyBTdWItcmVjdCBvZiBtX2xheWVySW1hZ2UgdGhh
dCBjb250YWlucyB0aGUgc2hhZG93IHBpeGVscy4KKyAgICBHcmFwaGljc1BvaW50IG1fbGF5ZXJP
cmlnaW47IC8vIFRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgKHBvc3NpYmx5IGNsaXBwZWQpIGJvdW5k
aW5nIHJlY3QgdG8gZHJhdyB0aGUgc2hhZG93IHRvLgorICAgIEdyYXBoaWNzU2l6ZSBtX2xheWVy
U2l6ZTsgLy8gU2l6ZSBvZiBtX2xheWVySW1hZ2UgcGl4ZWxzIHRoYXQgbmVlZCBibHVycmluZy4K
KyAgICBHcmFwaGljc1NpemUgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbjsgLy8gVHJhbnNsYXRp
b24gdG8gYXBwbHkgdG8gbV9sYXllckNvbnRleHQgZm9yIHRoZSBzaGFkb3cgdG8gYmUgY29ycmVj
dGx5IGNsaXBwZWQuCiAKICAgICBib29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgIkZvbnRNZXRyaWNzLmgiCiAjaW5jbHVkZSAi
Rm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdseXBoTWV0cmljc01hcC5oIgogI2luY2x1ZGUgIkds
eXBoUGFnZVRyZWVOb2RlLmgiCiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgpAQCAt
MTI4LDkgKzEyOCw5IEBAIHB1YmxpYzoKICAgICBmbG9hdCBhdmdDaGFyV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2F2Z0NoYXJXaWR0aDsgfQogICAgIHZvaWQgc2V0QXZnQ2hhcldpZHRoKGZsb2F0
IGF2Z0NoYXJXaWR0aCkgeyBtX2F2Z0NoYXJXaWR0aCA9IGF2Z0NoYXJXaWR0aDsgfQogCi0gICAg
RmxvYXRSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qg
Ym91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3Q7CiAgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsK
IAogICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0K
QEAgLTIyMCw3ICsyMjAsNyBAQCBwcml2YXRlOgogICAgIHx8IChPUyhXSU5ET1dTKSAmJiBQTEFU
Rk9STShXWCkpCiAgICAgdm9pZCBpbml0R0RJRm9udCgpOwogICAgIHZvaWQgcGxhdGZvcm1Db21t
b25EZXN0cm95KCk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBo
KSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0OwogICAgIGZsb2F0IHdpZHRoRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Owog
I2VuZGlmCiAKQEAgLTIzMSw3ICsyMzEsNyBAQCBwcml2YXRlOgogICAgIEZvbnRQbGF0Zm9ybURh
dGEgbV9wbGF0Zm9ybURhdGE7CiAgICAgT3duUHRyPEFkZGl0aW9uYWxGb250RGF0YT4gbV9mb250
RGF0YTsKIAotICAgIG11dGFibGUgT3duUHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+ID4g
bV9nbHlwaFRvQm91bmRzTWFwOworICAgIG11dGFibGUgT3duUHRyPEdseXBoTWV0cmljc01hcDxH
cmFwaGljc1JlY3Q+ID4gbV9nbHlwaFRvQm91bmRzTWFwOwogICAgIG11dGFibGUgR2x5cGhNZXRy
aWNzTWFwPGZsb2F0PiBtX2dseXBoVG9XaWR0aE1hcDsKIAogICAgIGJvb2wgbV90cmVhdEFzRml4
ZWRQaXRjaDsKQEAgLTI5OSwxMiArMjk5LDEyIEBAIHByaXZhdGU6CiB9OwogCiAjaWYgIShQTEFU
Rk9STShRVCkgJiYgIUhBVkUoUVJBV0ZPTlQpKQotQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2lt
cGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorQUxXQVlTX0lO
TElORSBHcmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OmJvdW5kc0ZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAogewogICAgIGlmIChpc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsK
IAotICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kczsKICAgICBp
ZiAobV9nbHlwaFRvQm91bmRzTWFwKSB7CiAgICAgICAgIGJvdW5kcyA9IG1fZ2x5cGhUb0JvdW5k
c01hcC0+bWV0cmljc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgaWYgKGJvdW5kcy53aWR0aCgp
ICE9IGNHbHlwaFNpemVVbmtub3duKQpAQCAtMzEzLDcgKzMxMyw3IEBAIEFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjoKIAogICAgIGJvdW5kcyA9IHBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoZ2x5cGgpOwogICAgIGlmICghbV9nbHlwaFRvQm91bmRzTWFwKQotICAgICAgICBt
X2dseXBoVG9Cb3VuZHNNYXAgPSBhZG9wdFB0cihuZXcgR2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVj
dD4pOworICAgICAgICBtX2dseXBoVG9Cb3VuZHNNYXAgPSBhZG9wdFB0cihuZXcgR2x5cGhNZXRy
aWNzTWFwPEdyYXBoaWNzUmVjdD4pOwogICAgIG1fZ2x5cGhUb0JvdW5kc01hcC0+c2V0TWV0cmlj
c0ZvckdseXBoKGdseXBoLCBib3VuZHMpOwogICAgIHJldHVybiBib3VuZHM7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xh
c3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgRm9udDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNs
YXNzIEdseXBoQnVmZmVyOwpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJh
Y3Rlcihjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMy
IGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYg
YWR2YW5jZUxlbmd0aCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBo
QnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0ID0g
MDsKICAgICAgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZv
bnQmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFt
ZSkgY29uc3QgPSAwOwogI2VuZGlmCiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBUaWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb29yZGluYXRlOyB9CiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIHBhaW50Q2hlY2tlclBhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQg
cGFpbnRDaGVja2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3Qm
KTsKIAogcHJpdmF0ZToKICAgICBUaWxlKFRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRp
bmF0ZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0VGlsZUNyZWF0
aW9uRAogICAgIG1fdGlsZUNyZWF0aW9uRGVsYXkgPSBkZWxheTsKIH0KIAotdm9pZCBUaWxlZEJh
Y2tpbmdTdG9yZTo6c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGNvbnN0IEZsb2F0U2l6
ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQordm9p
ZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGNvbnN0
IEdyYXBoaWNzU2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgY292ZXJN
dWx0aXBsaWVyKQogewogICAgIG1fa2VlcEFyZWFNdWx0aXBsaWVyID0ga2VlcE11bHRpcGxpZXI7
CiAgICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyID0gY292ZXJNdWx0aXBsaWVyOwpAQCAtMTM1LDcg
KzEzNSw3IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnBhaW50KEdyYXBoaWNzQ28KICAgICAK
ICAgICAvLyBBc3N1bWVzIHRoZSBiYWNraW5nIHN0b3JlIGlzIHBhaW50ZWQgd2l0aCB0aGUgc2Nh
bGUgdHJhbnNmb3JtIGFwcGxpZWQuCiAgICAgLy8gU2luY2UgdGlsZSBjb250ZW50IGlzIGFscmVh
ZHkgc2NhbGVkLCBmaXJzdCByZXZlcnQgdGhlIHNjYWxpbmcgZnJvbSB0aGUgcGFpbnRlci4KLSAg
ICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMS5mIC8gbV9jb250ZW50c1NjYWxlLCAxLmYgLyBt
X2NvbnRlbnRzU2NhbGUpKTsKKyAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS5mIC8g
bV9jb250ZW50c1NjYWxlLCAxLmYgLyBtX2NvbnRlbnRzU2NhbGUpKTsKICAgICAKICAgICBJbnRS
ZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21Db250ZW50cyhyZWN0KTsKICAgICAKQEAgLTE1Myw3ICsx
NTMsNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpwYWludChHcmFwaGljc0NvCiAgICAgICAg
ICAgICAgICAgSW50UmVjdCB0YXJnZXQgPSBpbnRlcnNlY3Rpb24odGlsZVJlY3QsIGRpcnR5UmVj
dCk7CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIFRpbGU6OnBhaW50Q2hlY2tlclBhdHRl
cm4oY29udGV4dCwgRmxvYXRSZWN0KHRhcmdldCkpOworICAgICAgICAgICAgICAgIFRpbGU6OnBh
aW50Q2hlY2tlclBhdHRlcm4oY29udGV4dCwgR3JhcGhpY3NSZWN0KHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjkzLDEzICsyOTMsMTMgQEAgdm9pZCBUaWxl
ZEJhY2tpbmdTdG9yZTo6ZHJvcE92ZXJoYW5naW5nVAogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3Jl
Ojpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKIHsKLSAgICBG
bG9hdFJlY3Qga2VlcFJlY3RGID0ga2VlcFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGtlZXBSZWN0
RiA9IGtlZXBSZWN0OwogCiAgICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwog
ICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5h
dGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgdGlsZVJlY3QgPSBpdC0+c2Vjb25kLT5yZWN0KCk7CiAgICAg
ICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYpKQogICAgICAgICAgICAgdG9S
ZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lk
IFRpbGVkQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGNvbnN0CiAKIEludFJlY3QgVGlsZWRCYWNr
aW5nU3RvcmU6Om1hcFRvQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgLyBtX2NvbnRlbnRz
U2NhbGUsCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QueCgp
IC8gbV9jb250ZW50c1NjYWxlLAogICAgICAgICByZWN0LnkoKSAvIG1fY29udGVudHNTY2FsZSwK
ICAgICAgICAgcmVjdC53aWR0aCgpIC8gbV9jb250ZW50c1NjYWxlLAogICAgICAgICByZWN0Lmhl
aWdodCgpIC8gbV9jb250ZW50c1NjYWxlKSk7CkBAIC0zMzMsNyArMzMzLDcgQEAgSW50UmVjdCBU
aWxlZEJhY2tpbmdTdG9yZTo6bWFwVG9Db250ZW50cwogCiBJbnRSZWN0IFRpbGVkQmFja2luZ1N0
b3JlOjptYXBGcm9tQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkgKiBtX2NvbnRlbnRzU2Nh
bGUsCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QueCgpICog
bV9jb250ZW50c1NjYWxlLAogICAgICAgICByZWN0LnkoKSAqIG1fY29udGVudHNTY2FsZSwKICAg
ICAgICAgcmVjdC53aWR0aCgpICogbV9jb250ZW50c1NjYWxlLAogICAgICAgICByZWN0LmhlaWdo
dCgpICogbV9jb250ZW50c1NjYWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCiAKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Np
emUuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJUaWxlLmgiCkBAIC02MCwxMiArNjAsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGls
ZUNyZWF0aW9uRGVsYXkoZG91YmxlIGRlbGF5KTsKICAgICAKICAgICAvLyBUaWxlZCBhcmUgZHJv
cHBlZCBvdXRzaWRlIHRoZSBrZWVwIGFyZWEsIGFuZCBjcmVhdGVkIGZvciBjb3ZlciBhcmVhLiBU
aGUgdmFsdWVzIGEgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IHNpemUuCi0gICAgdm9pZCBnZXRL
ZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoRmxvYXRTaXplJiBrZWVwTXVsdGlwbGllciwgRmxv
YXRTaXplJiBjb3Zlck11bHRpcGxpZXIpCisgICAgdm9pZCBnZXRLZWVwQW5kQ292ZXJBcmVhTXVs
dGlwbGllcnMoR3JhcGhpY3NTaXplJiBrZWVwTXVsdGlwbGllciwgR3JhcGhpY3NTaXplJiBjb3Zl
ck11bHRpcGxpZXIpCiAgICAgewogICAgICAgICBrZWVwTXVsdGlwbGllciA9IG1fa2VlcEFyZWFN
dWx0aXBsaWVyOwogICAgICAgICBjb3Zlck11bHRpcGxpZXIgPSBtX2NvdmVyQXJlYU11bHRpcGxp
ZXI7CiAgICAgfQotICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGNvbnN0
IEZsb2F0U2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBs
aWVyKTsgICAgCisgICAgdm9pZCBzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3Qg
R3JhcGhpY3NTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgR3JhcGhpY3NTaXplJiBjb3Zlck11
bHRpcGxpZXIpOyAgICAKIAogcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0
ZVRpbWVyKCk7CkBAIC0xMTAsOCArMTEwLDggQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV90
aWxlU2l6ZTsKICAgICBkb3VibGUgbV90aWxlQ3JlYXRpb25EZWxheTsKLSAgICBGbG9hdFNpemUg
bV9rZWVwQXJlYU11bHRpcGxpZXI7Ci0gICAgRmxvYXRTaXplIG1fY292ZXJBcmVhTXVsdGlwbGll
cjsKKyAgICBHcmFwaGljc1NpemUgbV9rZWVwQXJlYU11bHRpcGxpZXI7CisgICAgR3JhcGhpY3NT
aXplIG1fY292ZXJBcmVhTXVsdGlwbGllcjsKICAgICAKICAgICBJbnRSZWN0IG1fcHJldmlvdXNW
aXNpYmxlUmVjdDsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCB1bnNpZ25lZCBXaWR0aEl0
ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzCiAgICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyAtPSBt
X3J1bldpZHRoU29GYXI7CiAKICAgICBmbG9hdCBsYXN0Um91bmRpbmdXaWR0aCA9IG1fZmluYWxS
b3VuZGluZ1dpZHRoOwotICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgR3JhcGhpY3NSZWN0IGJv
dW5kczsKIAogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+
cHJpbWFyeUZvbnQoKTsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbGFzdEZvbnREYXRhID0g
cHJpbWFyeUZvbnQ7CkBAIC0yMzgsOSArMjM4LDkgQEAgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZShpbnQgb2ZmcwogICAgICAgICBsYXN0Um91bmRpbmdXaWR0aCA9IHdpZHRoIC0gb2xk
V2lkdGg7CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRzKSB7Ci0gICAgICAg
ICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFks
IGJvdW5kcy5tYXhZKCkpOwotICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1p
bihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBib3VuZHMueSgpKTsKLSAgICAgICAgICAgIG1fbGFz
dEdseXBoT3ZlcmZsb3cgPSBtYXg8ZmxvYXQ+KDAsIGJvdW5kcy5tYXhYKCkgLSB3aWR0aCk7Cisg
ICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGlu
Z0JveFksIHN0YXRpY19jYXN0PGZsb2F0Pihib3VuZHMubWF4WSgpKSk7CisgICAgICAgICAgICBt
X21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIHN0YXRp
Y19jYXN0PGZsb2F0Pihib3VuZHMueSgpKSk7CisgICAgICAgICAgICBtX2xhc3RHbHlwaE92ZXJm
bG93ID0gbWF4PGZsb2F0PigwLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLm1heFgoKSkgLSB3
aWR0aCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKLSNpbmNsdWRlICJGbG9h
dFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJNZWRpYVBsYXll
clByaXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KQEAgLTI1MSw3ICsyNTEsNyBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIG1fYXNzZXRVUkw7
CiAgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQgbV9wcmVsb2FkOwotICAgIEZsb2F0U2l6ZSBtX3Nj
YWxlRmFjdG9yOworICAgIEdyYXBoaWNzU2l6ZSBtX3NjYWxlRmFjdG9yOwogCiAgICAgSW50U2l6
ZSBtX2NhY2hlZE5hdHVyYWxTaXplOwogICAgIG11dGFibGUgZmxvYXQgbV9jYWNoZWRNYXhUaW1l
TG9hZGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKGltYWdlKSB7CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAg
ICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEuMGYsIC0xLjBmKSk7Cisg
ICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSgxLjBmLCAtMS4wZikpOwogICAgICAg
ICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Mb3cp
OwogICAgICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZShyZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKICAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RNYWtlKDAsIDAsIHBhaW50UmVjdC53aWR0
aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
CiAjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKQEAgLTc5LDcgKzc5LDcg
QEAgc3RhdGljIGJvb2wgaXNUcmFuc2Zvcm1UeXBlVHJhbnNmb3JtYXRpbwogICAgIH0KIH0KIAot
c3RhdGljIGJvb2wgaXNUcmFuc2Zvcm1UeXBlRmxvYXRQb2ludDNEKFRyYW5zZm9ybU9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlKQorc3RhdGljIGJvb2wgaXNUcmFuc2Zvcm1U
eXBlR3JhcGhpY3NQb2ludDNEKFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFu
c2Zvcm1UeXBlKQogewogICAgIHN3aXRjaCAodHJhbnNmb3JtVHlwZSkgewogICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIGJvb2wgaXNU
cmFuc2Zvcm1UeXBlRmxvYXRQb2ludDNEKAogCiBzdGF0aWMgYm9vbCBpc1RyYW5zZm9ybVR5cGVO
dW1iZXIoVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHRyYW5zZm9ybVR5cGUpCiB7
Ci0gICAgcmV0dXJuICFpc1RyYW5zZm9ybVR5cGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0cmFuc2Zv
cm1UeXBlKSAmJiAhaXNUcmFuc2Zvcm1UeXBlRmxvYXRQb2ludDNEKHRyYW5zZm9ybVR5cGUpOwor
ICAgIHJldHVybiAhaXNUcmFuc2Zvcm1UeXBlVHJhbnNmb3JtYXRpb25NYXRyaXgodHJhbnNmb3Jt
VHlwZSkgJiYgIWlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQzRCh0cmFuc2Zvcm1UeXBlKTsK
IH0KIAogc3RhdGljIHZvaWQgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZShjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wLCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgdHJhbnNmb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQmIHZhbHVlKQpAQCAt
MTI4LDcgKzEyOCw3IEBAIHN0YXRpYyB2b2lkIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoY28K
ICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIHRyYW5zZm9ybVR5cGUsIGNvbnN0IEludFNpemUmIHNpemUsIEZsb2F0UG9pbnQz
RCYgdmFsdWUpCitzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlvblZhbHVlKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXplLCBHcmFwaGljc1BvaW50
M0QmIHZhbHVlKQogewogICAgIHN3aXRjaCAodHJhbnNmb3JtVHlwZSkgewogICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDQTo6c2V0UmVwbGljYXRlZEJ5TGF5CiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2Vk
KFJlcGxpY2F0ZWRMYXllckNoYW5nZWQpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
c2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBvaW50
ID09IG1fcG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0UG9zaXRpb24oY29uc3QgCiAgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQordm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9pbnQpCiB7CiAg
ICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTM5Myw3
ICszOTMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5jaG9yUG9pbnQoY29uCiAgICAg
bm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhp
Y3NMYXllckNBOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAo
c2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6c2V0U2l6ZShjb25zdCBGbG9hCiAgICAgbm90ZUxheWVyUHJvcGVy
dHlDaGFuZ2VkKEdlb21ldHJ5Q2hhbmdlZCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpz
ZXRCb3VuZHNPcmlnaW4oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luKQordm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnNldEJvdW5kc09yaWdpbihjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4pCiB7CiAg
ICAgaWYgKG9yaWdpbiA9PSBtX2JvdW5kc09yaWdpbikKICAgICAgICAgcmV0dXJuOwpAQCAtNTYx
LDE5ICs1NjEsMTkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE9wYWNpdHkoZmxvYXQgbwog
CiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBGbG9hdFJl
Y3QgaHVnZVJlY3QoLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkgLyAyLCAtbnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsCisgICAgR3JhcGhpY3NSZWN0IGh1Z2VSZWN0KC1udW1l
cmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8gMiwgLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCkgLyAyLAogICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpLCBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKIAogICAgIHNldE5lZWRzRGlzcGxh
eUluUmVjdChodWdlUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBHcmFwaGljc0xheWVyQ0E6OnNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgaWYgKCFk
cmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHJlY3Qocik7
Ci0gICAgRmxvYXRSZWN0IGxheWVyQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKKyAgICBH
cmFwaGljc1JlY3QgcmVjdChyKTsKKyAgICBHcmFwaGljc1JlY3QgbGF5ZXJCb3VuZHMoR3JhcGhp
Y3NQb2ludCgpLCBtX3NpemUpOwogICAgIHJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRzKTsKICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk3NiwxOCArOTc2LDE4
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVHZW9tZXRyeSgpCiAgICAgaWYgKG5lZWRU
aWxlZExheWVyICE9IG1fdXNpbmdUaWxlZExheWVyKQogICAgICAgICBzd2FwRnJvbU9yVG9UaWxl
ZExheWVyKG5lZWRUaWxlZExheWVyKTsKIAotICAgIEZsb2F0U2l6ZSB1c2VkU2l6ZSA9IG1fdXNp
bmdUaWxlZExheWVyID8gY29uc3RyYWluZWRTaXplKCkgOiBtX3NpemU7Ci0gICAgRmxvYXRSZWN0
IGJvdW5kc1JlY3QobV9ib3VuZHNPcmlnaW4sIHVzZWRTaXplKTsKKyAgICBHcmFwaGljc1NpemUg
dXNlZFNpemUgPSBtX3VzaW5nVGlsZWRMYXllciA/IGNvbnN0cmFpbmVkU2l6ZSgpIDogbV9zaXpl
OworICAgIEdyYXBoaWNzUmVjdCBib3VuZHNSZWN0KG1fYm91bmRzT3JpZ2luLCB1c2VkU2l6ZSk7
CiAKICAgICAvLyBVcGRhdGUgcG9zaXRpb24uCiAgICAgLy8gUG9zaXRpb24gaXMgb2Zmc2V0IG9u
IHRoZSBsYXllciBieSB0aGUgbGF5ZXIgYW5jaG9yIHBvaW50LgotICAgIEZsb2F0UG9pbnQgcG9z
UG9pbnQobV9wb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIHVzZWRTaXplLndpZHRo
KCksIG1fcG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiB1c2VkU2l6ZS5oZWlnaHQo
KSk7CisgICAgR3JhcGhpY3NQb2ludCBwb3NQb2ludChtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9y
UG9pbnQueCgpICogdXNlZFNpemUud2lkdGgoKSwgbV9wb3NpdGlvbi55KCkgKyBtX2FuY2hvclBv
aW50LnkoKSAqIHVzZWRTaXplLmhlaWdodCgpKTsKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0UG9z
aXRpb24ocG9zUG9pbnQpOwogCiAgICAgaWYgKExheWVyTWFwKiBsYXllckNsb25lTWFwID0gcHJp
bWFyeUxheWVyQ2xvbmVzKCkpIHsKICAgICAgICAgTGF5ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGxheWVyQ2xvbmVNYXAtPmVuZCgpOwogICAgICAgICBmb3IgKExheWVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGxheWVyQ2xvbmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgRmxvYXRQb2ludCBjbG9uZVBvc2l0aW9uID0gcG9zUG9pbnQ7CisgICAgICAg
ICAgICBHcmFwaGljc1BvaW50IGNsb25lUG9zaXRpb24gPSBwb3NQb2ludDsKICAgICAgICAgICAg
IGlmIChtX3JlcGxpY2FMYXllciAmJiBpc1JlcGxpY2F0ZWRSb290Q2xvbmUoaXQtPmZpcnN0KSkg
ewogICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBzcGVjaWFsLWNhc2UgcG9zaXRpb24g
Zm9yIHRoZSByb290IG9mIGEgY2xvbmUgc3VidHJlZSwKICAgICAgICAgICAgICAgICAvLyB3aGlj
aCB3ZSBzZXQgdXAgaW4gcmVwbGljYXRlZExheWVyUm9vdCgpLgpAQCAtMTE4MSw4ICsxMTgxLDgg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OmVuc3VyZVN0cnVjdHVyYWxMYQogICAgIHVwZGF0ZUJh
Y2tmYWNlVmlzaWJpbGl0eSgpOwogICAgIAogICAgIC8vIFNldCBwcm9wZXJ0aWVzIG9mIG1fbGF5
ZXIgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMsIHNpbmNlIHRoZXNlIGFyZSBleHByZXNzZWQgb24g
b24gdGhlIHN0cnVjdHVyYWwgbGF5ZXIuCi0gICAgRmxvYXRQb2ludCBwb2ludChtX3NpemUud2lk
dGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpOwotICAgIEZsb2F0UG9pbnQzRCBh
bmNob3JQb2ludCgwLjVmLCAwLjVmLCAwKTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50KG1fc2l6
ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdodCgpIC8gMi4wZik7CisgICAgR3JhcGhpY3NQ
b2ludDNEIGFuY2hvclBvaW50KDAuNWYsIDAuNWYsIDApOwogICAgIG1fbGF5ZXItPnNldFBvc2l0
aW9uKHBvaW50KTsKICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChhbmNob3JQb2ludCk7CiAg
ICAgbV9sYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwpAQCAtMTMx
MSw4ICsxMzExLDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdAog
ICAgIGlmICghbV9jb250ZW50c0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBv
aW50IHBvaW50KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKTsKLSAgICBG
bG9hdFJlY3QgcmVjdCgwLCAwLCBtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2NvbnRlbnRzUmVj
dC5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludChtX2NvbnRlbnRzUmVjdC54KCks
IG1fY29udGVudHNSZWN0LnkoKSk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoMCwgMCwgbV9jb250
ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOwogCiAgICAgbV9jb250
ZW50c0xheWVyLT5zZXRQb3NpdGlvbihwb2ludCk7CiAgICAgbV9jb250ZW50c0xheWVyLT5zZXRC
b3VuZHMocmVjdCk7CkBAIC0xMzg3LDcgKzEzODcsNyBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gR3JhcGhpY3NMYXllCiAgICAgR3JhcGhpY3NMYXllckNBKiByZXBsaWNhdGVkTGF5ZXIg
PSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ0EqPihtX3JlcGxpY2F0ZWRMYXllcik7CiAgICAg
CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY2xvbmVkTGF5ZXJSb290ID0gcmVwbGljYXRl
ZExheWVyLT5mZXRjaENsb25lTGF5ZXJzKHRoaXMsIHJlcGxpY2FTdGF0ZSwgUm9vdENsb25lTGV2
ZWwpOwotICAgIEZsb2F0UG9pbnQgY2xvbmVSb290UG9zaXRpb24gPSByZXBsaWNhdGVkTGF5ZXIt
PnBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKTsKKyAgICBHcmFwaGljc1BvaW50IGNsb25lUm9v
dFBvc2l0aW9uID0gcmVwbGljYXRlZExheWVyLT5wb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7
CiAKICAgICAvLyBSZXBsaWNhIHJvb3QgaGFzIG5vIG9mZnNldCBvciB0cmFuc2Zvcm0KICAgICBj
bG9uZWRMYXllclJvb3QtPnNldFBvc2l0aW9uKGNsb25lUm9vdFBvc2l0aW9uKTsKQEAgLTE3ODks
MTIgKzE3ODksMTIgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdAog
ICAgICAgICAgICAgZmxvYXQgdG9WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0
aW9uVmFsdWUoZW5kVmFsdWUtPnZhbHVlKCktPmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zvcm1P
cFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRUb1Zh
bHVlKHRvVmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9p
bnQzRCh0cmFuc2Zvcm1PcFR5cGUpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgZnJvbVZh
bHVlOworICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQzRCh0
cmFuc2Zvcm1PcFR5cGUpKSB7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50M0QgZnJvbVZhbHVl
OwogICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZShzdGFydFZhbHVlLT52YWx1
ZSgpLT5hdChmdW5jdGlvbkluZGV4KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCBmcm9tVmFs
dWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRGcm9tVmFsdWUoZnJvbVZhbHVlKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHRvVmFsdWU7CisgICAgICAgICAg
ICBHcmFwaGljc1BvaW50M0QgdG9WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0
aW9uVmFsdWUoZW5kVmFsdWUtPnZhbHVlKCktPmF0KGZ1bmN0aW9uSW5kZXgpLCB0cmFuc2Zvcm1P
cFR5cGUsIGJveFNpemUsIHRvVmFsdWUpOwogICAgICAgICAgICAgYmFzaWNBbmltLT5zZXRUb1Zh
bHVlKHRvVmFsdWUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTgyNiw3ICsxODI2LDcgQEAgYm9v
bCBHcmFwaGljc0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdAogewogICAgIFZlY3RvcjxmbG9h
dD4ga2V5VGltZXM7CiAgICAgVmVjdG9yPGZsb2F0PiBmbG9hdFZhbHVlczsKLSAgICBWZWN0b3I8
RmxvYXRQb2ludDNEPiBmbG9hdFBvaW50M0RWYWx1ZXM7CisgICAgVmVjdG9yPEdyYXBoaWNzUG9p
bnQzRD4gZmxvYXRQb2ludDNEVmFsdWVzOwogICAgIFZlY3RvcjxUcmFuc2Zvcm1hdGlvbk1hdHJp
eD4gdHJhbnNmb3JtYXRpb25NYXRyaXhWYWx1ZXM7CiAgICAgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1
bmN0aW9uKj4gdGltaW5nRnVuY3Rpb25zOwogCkBAIC0xODQ5LDggKzE4NDksOCBAQCBib29sIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0VHJhbnNmb3JtQW5pbWF0CiAgICAgICAgICAgICAgICAgZmxvYXQg
dmFsdWU7CiAgICAgICAgICAgICAgICAgZ2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZSh0cmFuc2Zv
cm1PcCwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
ZmxvYXRWYWx1ZXMuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNUcmFu
c2Zvcm1UeXBlRmxvYXRQb2ludDNEKHRyYW5zZm9ybU9wVHlwZSkpIHsKLSAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50M0QgdmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNmb3Jt
VHlwZUdyYXBoaWNzUG9pbnQzRCh0cmFuc2Zvcm1PcFR5cGUpKSB7CisgICAgICAgICAgICAgICAg
R3JhcGhpY3NQb2ludDNEIHZhbHVlOwogICAgICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0
aW9uVmFsdWUodHJhbnNmb3JtT3AsIHRyYW5zZm9ybU9wVHlwZSwgYm94U2l6ZSwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgIGZsb2F0UG9pbnQzRFZhbHVlcy5hcHBlbmQodmFsdWUpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTE4NzEsNyArMTg3MSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjpzZXRUcmFuc2Zvcm1BbmltYXQKICAgICAKICAgICBpZiAoaXNUcmFuc2Zvcm1UeXBlTnVtYmVy
KHRyYW5zZm9ybU9wVHlwZSkpCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVzKGZsb2F0
VmFsdWVzKTsKLSAgICBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVGbG9hdFBvaW50M0QodHJhbnNm
b3JtT3BUeXBlKSkKKyAgICBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0Qo
dHJhbnNmb3JtT3BUeXBlKSkKICAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRWYWx1ZXMoZmxvYXRQ
b2ludDNEVmFsdWVzKTsKICAgICBlbHNlCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0VmFsdWVz
KHRyYW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzKTsKQEAgLTE5OTQsOSArMTk5NCw5IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JvcmRlcihjb24KICAgICB9CiB9CiAKLUZsb2F0U2l6
ZSBHcmFwaGljc0xheWVyQ0E6OmNvbnN0cmFpbmVkU2l6ZSgpIGNvbnN0CitHcmFwaGljc1NpemUg
R3JhcGhpY3NMYXllckNBOjpjb25zdHJhaW5lZFNpemUoKSBjb25zdAogewotICAgIEZsb2F0U2l6
ZSBjb25zdHJhaW5lZFNpemUgPSBtX3NpemU7CisgICAgR3JhcGhpY3NTaXplIGNvbnN0cmFpbmVk
U2l6ZSA9IG1fc2l6ZTsKICNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGZsb2F0IHRpbGVDb2x1bW5zID0gY2Vp
bGYobV9zaXplLndpZHRoKCkgLyBrVGlsZWRMYXllclRpbGVTaXplKTsKICAgICBmbG9hdCB0aWxl
Um93cyA9IGNlaWxmKG1fc2l6ZS5oZWlnaHQoKSAvIGtUaWxlZExheWVyVGlsZVNpemUpOwpAQCAt
MjAxOCw3ICsyMDE4LDcgQEAgRmxvYXRTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRT
aQogICAgIHJldHVybiBjb25zdHJhaW5lZFNpemU7CiB9CiAKLWJvb2wgR3JhcGhpY3NMYXllckNB
OjpyZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAorYm9vbCBH
cmFwaGljc0xheWVyQ0E6OnJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBHcmFwaGljc1NpemUmIHNp
emUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2RyYXdzQ29udGVudCB8fCAhbV9hbGxvd1RpbGVkTGF5
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxMTksOSArMjExOSw5IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXR1cENvbnRlbnRzTGF5ZXIKICAgICAgICAgICAgIDAuMGYsIDAuMGYs
IDEuMGYsIDAuMGYsCiAgICAgICAgICAgICAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKICAgICAg
ICAgY29udGVudHNMYXllci0+c2V0VHJhbnNmb3JtKGZsaXBwZXIpOwotICAgICAgICBjb250ZW50
c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMSwgMCkpOworICAgICAgICBj
b250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50M0QoMCwgMSwgMCkpOwog
ICAgIH0gZWxzZQotICAgICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoKSk7CisgICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KEdyYXBoaWNz
UG9pbnQzRCgpKTsKIAogICAgIGlmIChzaG93RGVidWdCb3JkZXJzKCkpIHsKICAgICAgICAgY29u
dGVudHNMYXllci0+c2V0Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMCwgMTI4LCAxODApKTsKQEAgLTIx
ODAsMTQgKzIxODAsMTQgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlbW92ZUNsb25lTGF5ZXJz
KAogICAgIG1fY29udGVudHNMYXllckNsb25lcyA9IG51bGxwdHI7CiB9CiAKLUZsb2F0UG9pbnQg
R3JhcGhpY3NMYXllckNBOjpwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCkgY29uc3QKK0dyYXBo
aWNzUG9pbnQgR3JhcGhpY3NMYXllckNBOjpwb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCkgY29u
c3QKIHsKICAgICAvLyBUaGlzIGNhbiBnZXQgY2FsbGVkIGR1cmluZyBhIHN5bmMgd2hlbiB3ZSd2
ZSBqdXN0IHJlbW92ZWQgdGhlIG1fcmVwbGljYUxheWVyLgogICAgIGlmICghbV9yZXBsaWNhTGF5
ZXIpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1BvaW50KCk7CiAKLSAgICBGbG9hdFBvaW50IHJlcGxpY2FQb3NpdGlvbiA9IG1fcmVwbGljYUxh
eWVyLT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHJl
cGxpY2FQb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAor
ICAgIEdyYXBoaWNzUG9pbnQgcmVwbGljYVBvc2l0aW9uID0gbV9yZXBsaWNhTGF5ZXItPnJlcGxp
Y2F0ZWRMYXllclBvc2l0aW9uKCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQocmVwbGljYVBv
c2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgcmVwbGljYVBvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICog
bV9zaXplLmhlaWdodCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDEwICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHNldFJl
cGxpY2F0ZWRMYXllcihHcmFwaGljc0xheWVyKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50M0QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IEZsb2F0
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2lu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50
M0QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRzT3JpZ2luKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKIApAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE9wYWNp
dHkoZmxvYXQpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKQEAgLTE4NCw5ICsx
ODQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5
ZXJzKCk7CiAgICAgdm9pZCBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpOwogCi0g
ICAgRmxvYXRTaXplIGNvbnN0cmFpbmVkU2l6ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzU2l6ZSBj
b25zdHJhaW5lZFNpemUoKSBjb25zdDsKIAotICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0
IEdyYXBoaWNzU2l6ZSYpIGNvbnN0OwogICAgIHZvaWQgc3dhcEZyb21PclRvVGlsZWRMYXllcihi
b29sIHVzZVRpbGVkTGF5ZXIpOwogCiAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0
aW9uIGRlZmF1bHRDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3Q7CkBAIC0yNTcsNyArMjU3LDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzQ2xvbmVMYXllcnMoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyQ2xvbmVzOyB9CiAgICAgdm9pZCByZW1vdmVDbG9uZUxheWVycygpOwotICAgIEZsb2F0
UG9pbnQgcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNvbnN0OworICAgIEdyYXBoaWNzUG9p
bnQgcG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigpIGNvbnN0OwogICAgIAogICAgIHZvaWQgcHJv
cGFnYXRlTGF5ZXJDaGFuZ2VUb1JlcGxpY2FzKCk7CiAgICAgCkBAIC0zOTUsNyArMzk1LDcgQEAg
cHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8TGF5ZXJQcm9wZXJ0
eUFuaW1hdGlvbj4gPiBBbmltYXRpb25zTWFwOwogICAgIEFuaW1hdGlvbnNNYXAgbV9ydW5uaW5n
QW5pbWF0aW9uczsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGlydHlSZWN0czsKKyAgICBW
ZWN0b3I8R3JhcGhpY3NSZWN0PiBtX2RpcnR5UmVjdHM7CiAgICAgCiAgICAgTGF5ZXJDaGFuZ2VG
bGFncyBtX3VuY29tbWl0dGVkQ2hhbmdlczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBQW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OSw3ICs0OSw3IEBAIHR5cGVkZWYgQ0FD
RkFuaW1hdGlvblJlZiBQbGF0Zm9ybUFuaW1hdGkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBQbGF0Zm9ybUNBQW5p
bWF0aW9uOwogY2xhc3MgVGltaW5nRnVuY3Rpb247CiAKQEAgLTExMSwyMCArMTExLDIwIEBAIHB1
YmxpYzoKICAgICAvLyBCYXNpYy1hbmltYXRpb24gcHJvcGVydGllcy4KICAgICB2b2lkIHNldEZy
b21WYWx1ZShmbG9hdCk7CiAgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBGbG9hdFBv
aW50M0QmKTsKKyAgICB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBHcmFwaGljc1BvaW50M0QmKTsK
ICAgICB2b2lkIHNldEZyb21WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQg
Y29weUZyb21WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiopOwogCiAgICAgdm9p
ZCBzZXRUb1ZhbHVlKGZsb2F0KTsKICAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgRmxvYXRQ
b2ludDNEJik7CisgICAgdm9pZCBzZXRUb1ZhbHVlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOwog
ICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgY29w
eVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24qKTsKIAogICAgIC8vIEtleWZy
YW1lLWFuaW1hdGlvbiBwcm9wZXJ0aWVzLgogICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3Rv
cjxmbG9hdD4mKTsKICAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXg+Jik7Ci0gICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEZs
b2F0UG9pbnQzRD4mKTsKKyAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8R3JhcGhpY3NQ
b2ludDNEPiYpOwogICAgIHZvaWQgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb2xv
cj4mKTsKICAgICB2b2lkIGNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24q
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoKTsKIAogCi0g
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3QgPSAwKTsK
KyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqIGRpcnR5UmVjdCA9
IDApOwogICAgIAogICAgIC8vIFRoaXMgdGVsbHMgdGhlIGxheWVyIHRyZWUgdG8gY29tbWl0IGNo
YW5nZXMgYW5kIHBlcmZvcm0gYSByZW5kZXIsIHdpdGhvdXQgZG8gYSBzZXROZWVkc0Rpc3BsYXkg
b24gYW55IGxheWVyLgogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKQEAgLTExNywxNSArMTE3
LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRP
cGFxdWUoYm9vbCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kcygpIGNv
bnN0OworICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCi0gICAgRmxv
YXRQb2ludDNEIHBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50M0QmKTsKLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBv
cykgeyBzZXRQb3NpdGlvbihGbG9hdFBvaW50M0QocG9zLngoKSwgcG9zLnkoKSwgMCkpOyB9Cisg
ICAgR3JhcGhpY3NQb2ludDNEIHBvc2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBHcmFwaGljc1BvaW50M0QmKTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvcykgeyBzZXRQb3NpdGlvbihHcmFwaGljc1BvaW50M0QocG9zLngoKSwg
cG9zLnkoKSwgMCkpOyB9CiAKLSAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25zdDsK
LSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpOworICAgIEdyYXBo
aWNzUG9pbnQzRCBhbmNob3JQb2ludCgpIGNvbnN0OworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQo
Y29uc3QgR3JhcGhpY3NQb2ludDNEJik7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm0oKSBjb25zdDsKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwpAQCAtMTU0LDggKzE1NCw4IEBAIHB1YmxpYzoKICAgICBDRlR5cGVSZWYgY29u
dGVudHMoKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRlbnRzKENGVHlwZVJlZik7CiAKLSAgICBG
bG9hdFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50c1JlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0
OworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCiAgICAg
dm9pZCBzZXRNaW5pZmljYXRpb25GaWx0ZXIoRmlsdGVyVHlwZSk7CiAgICAgdm9pZCBzZXRNYWdu
aWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpOwpAQCAtMTc1LDggKzE3NSw4IEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcm
KTsKIAotICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RnJhbWUoY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IGZyYW1lKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRGcmFtZShjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgIGZsb2F0IHNwZWVkKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRTcGVlZChmbG9hdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFu
aW1hdGlvbk1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUFuaW1hdGlvbk1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZh
bHVlKGMKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdl
dCgpKSBzZXRGcm9tVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDp2YWx1ZV1d
OwogfQogCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1ZShjb25zdCBGbG9h
dFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFsdWUo
Y29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ICE9IEJhc2ljKQogICAgICAgICByZXR1cm47CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbgogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6W05TVmFsdWUgdmFsdWVX
aXRoQ0FUcmFuc2Zvcm0zRDp2YWx1ZV1dOwogfQogCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246
OnNldFRvVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAg
IGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4Miw3
ICs0ODIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zCiAgICAg
W3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0
VmFsdWVzOmFycmF5XTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1ZXMo
Y29uc3QgVmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0
aW9uOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPEdyYXBoaWNzUG9pbnQzRD4mIHZhbHVlKQogewog
ICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OmFu
aW1hdGlvblN0YXJ0ZWQoQwogICAgICAgICBtX293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25TdGFydGVkKGJlZ2luVGltZSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEdyYXBoaWNzUmVjdCogZGlydHlSZWN0KQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIGlmIChkaXJ0eVJlY3QpCkBAIC00MDQs
MjUgKzQwNCwyNSBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0T3BhcXVlKGJvb2wgdmFsCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1GbG9hdFJlY3QgUGxhdGZvcm1DQUxh
eWVyOjpib3VuZHMoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRz
KCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgYm91bmRzXTsKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9p
ZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhjb25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNl
dEJvdW5kczp2YWx1ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1GbG9h
dFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CitHcmFwaGljc1BvaW50
M0QgUGxhdGZvcm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2lu
dCA9IFttX2xheWVyLmdldCgpIHBvc2l0aW9uXTsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBv
aW50LngsIHBvaW50LnksIFttX2xheWVyLmdldCgpIHpQb3NpdGlvbl0pOworICAgIHJldHVybiBH
cmFwaGljc1BvaW50M0QocG9pbnQueCwgcG9pbnQueSwgW21fbGF5ZXIuZ2V0KCkgelBvc2l0aW9u
XSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UodmFsdWUueCgpLCB2
YWx1ZS55KCkpXTsKQEAgLTQzMCwxNyArNDMwLDE3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpz
ZXRQb3NpdGlvbihjb25zdCAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLUZs
b2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKK0dyYXBoaWNz
UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50KCkgY29uc3QKIHsKICAgICBDR1Bv
aW50IHBvaW50ID0gW21fbGF5ZXIuZ2V0KCkgYW5jaG9yUG9pbnRdOwogICAgIGZsb2F0IHogPSAw
OwogI2lmIEhBVkVfTU9ERVJOX1FVQVJUWkNPUkUKICAgICB6ID0gW21fbGF5ZXIuZ2V0KCkgYW5j
aG9yUG9pbnRaXTsKICNlbmRpZgotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQueCwgcG9p
bnQueSwgeik7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChwb2ludC54LCBwb2ludC55LCB6
KTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29u
c3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKICAgICBbbV9sYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50TWFrZSh2YWx1
ZS54KCksIHZhbHVlLnkoKSldOwpAQCAtNTg4LDEyICs1ODgsMTIgQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldENvbnRlbnRzKENGVHlwZQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
IH0KIAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Y29udGVudHNSZWN0KCkgY29uc3QKK0dy
YXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzUmVjdCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFttX2xheWVyLmdldCgpIGNvbnRlbnRzUmVjdF07CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUxheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxh
dGZvcm1DQUxheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiB2YWx1ZSkK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9sYXllci5nZXQoKSBz
ZXRDb250ZW50c1JlY3Q6dmFsdWVdOwpAQCAtNjk0LDEyICs2OTQsMTIgQEAgdm9pZCBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5hbWUoY29uc3QgU3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAotRmxvYXRSZWN0IFBsYXRmb3JtQ0FMYXllcjo6ZnJhbWUoKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFBsYXRmb3JtQ0FMYXllcjo6ZnJhbWUoKSBjb25zdAogewogICAgIHJldHVybiBbbV9s
YXllci5nZXQoKSBmcmFtZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRGcmFtZShj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZyYW1lKGNv
bnN0IEdyYXBoaWNzUmVjdCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dmFsdWVdOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxh
eWVyVHJlZUhvc3QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkK
ICAgICAvLyBTY3JvbGxpbmcgd2lsbCBhZmZlY3Qgb25seSB0aGUgcG9zaXRpb24gb2YgdGhlIHNj
cm9sbCBsYXllciB3aXRob3V0IGFmZmVjdGluZyB0aGUgYm91bmRzLgogCiAgICAgbV9yb290TGF5
ZXItPnNldE5hbWUoIkNBQ0ZMYXllclRyZWVIb3N0IHJvb3RMYXllciIpOwotICAgIG1fcm9vdExh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworICAgIG1fcm9vdExh
eWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50M0QoMCwgMCwgMCkpOwogICAgIG1fcm9v
dExheWVyLT5zZXRHZW9tZXRyeUZsaXBwZWQodHJ1ZSk7CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1h
dGlvbldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0
aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGMKICAgICBDQUNGQW5pbWF0aW9uU2V0RnJvbVZh
bHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpzZXRGcm9tVmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFs
dWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJu
OwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1
ZShjb24KICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5n
ZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb25zdCBG
bG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVl
KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ5LDcgKzQ0OSw3IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnMKICAgICBDQUNGQW5pbWF0aW9uU2V0VmFs
dWVzKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkK
K3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxHcmFwaGlj
c1BvaW50M0Q+JiB2YWx1ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1l
KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjplbnN1cmVBbmltYXRpb25zU3UKICAgICAgICAgY2hpbGRy
ZW5baV0tPmVuc3VyZUFuaW1hdGlvbnNTdWJtaXR0ZWQoKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNB
TGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKK3ZvaWQg
UGxhdGZvcm1DQUxheWVyOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgR3JhcGhpY3NSZWN0KiBkaXJ0
eVJlY3QpCiB7CiAgICAgaW50ZXJuKHRoaXMpLT5zZXROZWVkc0Rpc3BsYXkoZGlydHlSZWN0KTsK
IH0KQEAgLTM1MywzOCArMzUzLDM4IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRPcGFxdWUo
Ym9vbCB2YWwKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1GbG9hdFJlY3QgUGxhdGZvcm1D
QUxheWVyOjpib3VuZHMoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91
bmRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVyR2V0Qm91bmRzKG1fbGF5ZXIuZ2V0
KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVj
dCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Qm91bmRzKGNvbnN0IEdyYXBoaWNz
UmVjdCYgdmFsdWUpCiB7CiAgICAgaW50ZXJuKHRoaXMpLT5zZXRCb3VuZHModmFsdWUpOwogICAg
IHNldE5lZWRzTGF5b3V0KCk7CiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBv
c2l0aW9uKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OnBvc2l0aW9u
KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gQ0FDRkxheWVyR2V0UG9zaXRpb24obV9s
YXllci5nZXQoKSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwb2ludC54LCBwb2ludC55LCBD
QUNGTGF5ZXJHZXRaUG9zaXRpb24obV9sYXllci5nZXQoKSkpOworICAgIHJldHVybiBHcmFwaGlj
c1BvaW50M0QocG9pbnQueCwgcG9pbnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1fbGF5ZXIu
Z2V0KCkpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb24oY29u
c3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBDQUNGTGF5ZXJTZXRQb3NpdGlvbiht
X2xheWVyLmdldCgpLCBDR1BvaW50TWFrZSh2YWx1ZS54KCksIHZhbHVlLnkoKSkpOwogICAgIENB
Q0ZMYXllclNldFpQb3NpdGlvbihtX2xheWVyLmdldCgpLCB2YWx1ZS56KCkpOwogICAgIHNldE5l
ZWRzQ29tbWl0KCk7CiB9CiAKLUZsb2F0UG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBv
aW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBQbGF0Zm9ybUNBTGF5ZXI6OmFuY2hvclBvaW50
KCkgY29uc3QKIHsKICAgICBDR1BvaW50IHBvaW50ID0gQ0FDRkxheWVyR2V0QW5jaG9yUG9pbnQo
bV9sYXllci5nZXQoKSk7CiAgICAgZmxvYXQgeiA9IENBQ0ZMYXllckdldEFuY2hvclBvaW50Wiht
X2xheWVyLmdldCgpKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKHBvaW50LngsIHBvaW50Lnks
IHopOworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QocG9pbnQueCwgcG9pbnQueSwgeik7CiB9
CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnQobV9s
YXllci5nZXQoKSwgQ0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpKTsKICAgICBDQUNG
TGF5ZXJTZXRBbmNob3JQb2ludFoobV9sYXllci5nZXQoKSwgdmFsdWUueigpKTsKQEAgLTQ4OCwx
MiArNDg4LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRDb250ZW50cyhDRlR5cGUKICAg
ICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1GbG9hdFJlY3QgUGxhdGZvcm1DQUxheWVyOjpjb250
ZW50c1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBsYXRmb3JtQ0FMYXllcjo6Y29udGVudHNS
ZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVyR2V0Q29udGVudHNSZWN0KG1fbGF5
ZXIuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNS
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVyU2V0Q29udGVu
dHNSZWN0KG1fbGF5ZXIuZ2V0KCksIHZhbHVlKTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwpAQCAt
NTc4LDEyICs1NzgsMTIgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE5hbWUoY29uc3QgU3Ry
aQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6
OmZyYW1lKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmZyYW1lKCkgY29u
c3QKIHsKICAgICByZXR1cm4gQ0FDRkxheWVyR2V0RnJhbWUobV9sYXllci5nZXQoKSk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQor
dm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEZyYW1lKGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFsdWUp
CiB7CiAgICAgaW50ZXJuKHRoaXMpLT5zZXRGcmFtZSh2YWx1ZSk7CiAgICAgc2V0TmVlZHNMYXlv
dXQoKTsKQEAgLTYzOCw5ICs2MzgsOSBAQCBzdGF0aWMgdm9pZCBwcmludFRyYW5zZm9ybShjb25z
dCBDQVRyYW5zCiAKIHN0YXRpYyB2b2lkIHByaW50TGF5ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVy
KiBsYXllciwgaW50IGluZGVudCkKIHsKLSAgICBGbG9hdFBvaW50M0QgbGF5ZXJQb3NpdGlvbiA9
IGxheWVyLT5wb3NpdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBsYXllckFuY2hvclBvaW50ID0g
bGF5ZXItPmFuY2hvclBvaW50KCk7Ci0gICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gbGF5ZXIt
PmJvdW5kcygpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsYXllclBvc2l0aW9uID0gbGF5ZXItPnBv
c2l0aW9uKCk7CisgICAgR3JhcGhpY3NQb2ludDNEIGxheWVyQW5jaG9yUG9pbnQgPSBsYXllci0+
YW5jaG9yUG9pbnQoKTsKKyAgICBHcmFwaGljc1JlY3QgbGF5ZXJCb3VuZHMgPSBsYXllci0+Ym91
bmRzKCk7CiAgICAgcHJpbnRJbmRlbnQoaW5kZW50KTsKIAogICAgIGNoYXIqIGxheWVyVHlwZU5h
bWUgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5CiAg
ICAgb3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KGNhTGF5
ZXIpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5l
ZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKK3ZvaWQgUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWw6OmludGVybmFsU2V0TmVlZHNEaXNwbGF5KGNvbnN0IEdyYXBoaWNzUmVj
dCogZGlydHlSZWN0KQogewogICAgIGlmIChkaXJ0eVJlY3QpIHsKICAgICAgICAgQ0dSZWN0IHJl
Y3QgPSAqZGlydHlSZWN0OwpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OmludGVybmEKICAgICAgICAgQ0FDRkxheWVyU2V0TmVlZHNEaXNwbGF5KG93
bmVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgMCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqIGRpcnR5UmVjdCkKK3Zv
aWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNldE5lZWRzRGlzcGxheShjb25zdCBHcmFw
aGljc1JlY3QqIGRpcnR5UmVjdCkKIHsKICAgICBpZiAob3duZXIoKS0+bGF5ZXJUeXBlKCkgPT0g
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJUaWxlZExheWVyKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBPbmx5IHNldE5lZWRzRGlzcGxheSBmb3IgdGlsZXMgdGhhdCBhcmUgY3VycmVudGx5IHZp
c2libGUKQEAgLTE3MCw4ICsxNzAsOCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpzZXROZWVkCiAgICAgfSBlbHNlIGlmIChvd25lcigpLT5sYXllclR5cGUoKSA9PSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVdlYkxheWVyKSB7CiAgICAgICAgIGlmIChvd25lcigpICYmIG93
bmVyKCktPm93bmVyKCkpIHsKICAgICAgICAgICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoKSkgewotICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCBsYXllckJvdW5kcyA9IG93bmVyKCktPmJvdW5kcygpOwotICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCByZXBhaW50Q291bnRlclJlY3QgPSBsYXllckJvdW5kczsKKyAgICAgICAgICAgICAg
ICBHcmFwaGljc1JlY3QgbGF5ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKKyAgICAgICAg
ICAgICAgICBHcmFwaGljc1JlY3QgcmVwYWludENvdW50ZXJSZWN0ID0gbGF5ZXJCb3VuZHM7CiAK
ICAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgYSBtYXhpbXVtIG9mIDQgZGlnaXRzIGFuZCBh
IGZvbnQgc2l6ZSBvZiAxOC4KICAgICAgICAgICAgICAgICByZXBhaW50Q291bnRlclJlY3Quc2V0
V2lkdGgoODApOwpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldE5lZWQKICAgICAgICAgICAgICAgICBpbnRlcm5hbFNldE5lZWRzRGlzcGxheSgm
cmVwYWludENvdW50ZXJSZWN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChkaXJ0
eVJlY3QgJiYgb3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNU
b3BEb3duKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGZsaXBwZWREaXJ0eVJlY3QgPSAq
ZGlydHlSZWN0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBmbGlwcGVkRGlydHlSZWN0
ID0gKmRpcnR5UmVjdDsKICAgICAgICAgICAgICAgICBmbGlwcGVkRGlydHlSZWN0LnNldFkob3du
ZXIoKS0+Ym91bmRzKCkuaGVpZ2h0KCkgLSAoZmxpcHBlZERpcnR5UmVjdC55KCkgKyBmbGlwcGVk
RGlydHlSZWN0LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgaW50ZXJuYWxTZXROZWVkc0Rp
c3BsYXkoJmZsaXBwZWREaXJ0eVJlY3QpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMx
NCw3ICszMTQsNyBAQCBQbGF0Zm9ybUNBTGF5ZXIqIFBsYXRmb3JtQ0FMYXllcldpbkludGVyCiAg
ICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHN0YXRpY19jYXN0PENB
Q0ZMYXllclJlZj4oY29uc3RfY2FzdDx2b2lkKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzdWJs
YXllcnMsIGluZGV4KSkpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
c2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWw6OnNldEJvdW5kcyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KENHUmVjdEVxdWFsVG9SZWN0KHJlY3QsIG93bmVyKCktPmJvdW5kcygpKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzI4LDcgKzMyOCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6
OnNldEJvdW4KICAgICB9CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OnNl
dEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50
ZXJuYWw6OnNldEZyYW1lKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBDR1JlY3Qg
b2xkRnJhbWUgPSBvd25lcigpLT5mcmFtZSgpOwogICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChy
ZWN0LCBvbGRGcmFtZSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNyBAQCB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgKkNHQ29udGV4dFJlZjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1Jl
Y3Q7CiBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+ID4gUGxhdGZvcm1DQUxheWVyTGlzdDsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVi
bGljOgogICAgIH5QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbCgpOwogCiAgICAgdm9pZCBkaXNw
bGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmLCBDR0NvbnRleHRSZWYpOwotICAgIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEdyYXBoaWNzUmVjdCopOwogICAgIFBsYXRmb3JtQ0FMYXllciogb3duZXIoKSBjb25zdCB7
IHJldHVybiBtX293bmVyOyB9CiAKICAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9y
bUNBTGF5ZXJMaXN0Jik7CkBAIC01OCwxMSArNTgsMTEgQEAgcHVibGljOgogICAgIHNpemVfdCBz
dWJsYXllckNvdW50KCkgY29uc3Q7CiAgICAgaW50IGluZGV4T2ZTdWJsYXllcihjb25zdCBQbGF0
Zm9ybUNBTGF5ZXIqIHJlZmVyZW5jZSk7CiAKLSAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBGbG9h
dFJlY3QmKTsKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQg
c2V0Qm91bmRzKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgc2V0RnJhbWUoY29uc3Qg
R3JhcGhpY3NSZWN0Jik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbnRlcm5hbFNldE5lZWRzRGlz
cGxheShjb25zdCBGbG9hdFJlY3QqKTsKKyAgICB2b2lkIGludGVybmFsU2V0TmVlZHNEaXNwbGF5
KGNvbnN0IEdyYXBoaWNzUmVjdCopOwogICAgIFBsYXRmb3JtQ0FMYXllciogc3VibGF5ZXJBdElu
ZGV4KGludCkgY29uc3Q7CiAKICAgICBzdGF0aWMgdm9pZCB0aWxlRGlzcGxheUNhbGxiYWNrKENB
Q0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtMTE4LDggKzEx
OCw4IEBAIGNhaXJvX29wZXJhdG9yX3QgdG9DYWlyb09wZXJhdG9yKENvbXBvc2kKICAgICB9CiB9
CiAKLXZvaWQgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjYWlyb190KiBjciwgY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNhaXJv
X29wZXJhdG9yX3Qgb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIGRyYXdQYXR0
ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNv
bnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBjYWlyb19vcGVyYXRvcl90
IG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIC8vIEF2b2lkIE5hTgog
ICAgIGlmICghaXNmaW5pdGUocGhhc2UueCgpKSB8fCAhaXNmaW5pdGUocGhhc2UueSgpKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw4ICszMiw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CiBjbGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFz
cyBHcmFwaGljc1JlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OwogY2xhc3MgSW50U2l6ZTsKIGNs
YXNzIEludFJlY3Q7CiBjbGFzcyBQYXRoOwpAQCAtNDQsOCArNDQsOCBAQCB2b2lkIGFwcGVuZFBh
dGhUb0NhaXJvQ29udGV4dChjYWlyb190KiB0CiB2b2lkIHNldFBhdGhPbkNhaXJvQ29udGV4dChj
YWlyb190KiB0bywgY2Fpcm9fdCogZnJvbSk7CiB2b2lkIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWly
b0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCk7CiBjYWlyb19vcGVy
YXRvcl90IHRvQ2Fpcm9PcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvciBvcCk7Ci12b2lkIGRyYXdQ
YXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2Us
IGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjYWlyb19vcGVyYXRvcl90IG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKK3ZvaWQgZHJhd1BhdHRlcm5Ub0NhaXJvQ29u
dGV4dChjYWlyb190KiBjciwgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIGNhaXJvX29wZXJhdG9yX3Qgb3AsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZGVzdFJlY3QpOwogUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlD
YWlyb0ltYWdlU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqKTsKIHZvaWQgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihjYWlyb19zdXJmYWNlX3QqIGZyb20sIGNhaXJvX3N1cmZhY2VfdCog
dG8sIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNo
YWRvd0NhaXJvLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Myw3ICs4Myw3IEBAIHN0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGdldFNjcmF0Y2hCdWZmZXIK
ICAgICByZXR1cm4gZ1NjcmF0Y2hCdWZmZXIuZ2V0KCk7CiB9CiAKLVBsYXRmb3JtQ29udGV4dCBD
b250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCitQbGF0Zm9ybUNvbnRleHQgQ29udGV4dFNoYWRv
dzo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgbGF5ZXJBcmVhKQogewogICAgIGFkanVzdEJsdXJEaXN0YW5jZShjb250ZXh0KTsK
IApAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3dX
aXRob3UKICAgICBlbmRTaGFkb3dMYXllcihjb250ZXh0KTsKIH0KIAotc3RhdGljIGlubGluZSBG
bG9hdFBvaW50IGdldFBoYXNlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlKQorc3RhdGljIGlubGluZSBHcmFwaGljc1BvaW50IGdldFBoYXNlKGNvbnN0IEdyYXBo
aWNzUmVjdCYgZGVzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlKQogewotICAgIEZsb2F0UG9p
bnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgR3JhcGhpY3NQb2ludCBwaGFzZSA9IGRl
c3QubG9jYXRpb24oKTsKICAgICBwaGFzZS5tb3ZlKC10aWxlLngoKSwgLXRpbGUueSgpKTsKIAog
ICAgIHJldHVybiBwaGFzZTsKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIENvbnRleHRTaGFkb3c6
OmRyYXdSZWN0U2hhZG93KEdyYXBoCiAgICAgSW50U2l6ZSBzaGFkb3dCdWZmZXJTaXplID0gSW50
U2l6ZShyZWN0LndpZHRoKCkgKyByYWRpdXNUd2ljZSwgcmVjdC5oZWlnaHQoKSArIHJhZGl1c1R3
aWNlKTsKIAogICAgIC8vIERldGVybWluZSBkaW1lbnNpb25zIG9mIHNoYWRvdyByZWN0LgotICAg
IEZsb2F0UmVjdCBzaGFkb3dSZWN0ID0gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgc2hhZG93
QnVmZmVyU2l6ZSk7CisgICAgR3JhcGhpY3NSZWN0IHNoYWRvd1JlY3QgPSBHcmFwaGljc1JlY3Qo
cmVjdC5sb2NhdGlvbigpLCBzaGFkb3dCdWZmZXJTaXplKTsKICAgICBzaGFkb3dSZWN0Lm1vdmUo
LSBtX2JsdXJEaXN0YW5jZSwgLSBtX2JsdXJEaXN0YW5jZSk7CiAKICAgICAvLyBTaXplIG9mIHRo
ZSB0aWxpbmcgc2lkZS4KQEAgLTI4MiwxNyArMjgyLDE3IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6
ZHJhd1JlY3RTaGFkb3coR3JhcGgKICAgICBzaGFkb3dSZWN0LmluZmxhdGUocmFkaXVzVHdpY2Up
OwogCiAgICAgLy8gRHJhdyB0b3Agc2lkZS4KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBGbG9h
dFJlY3QocmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCksIDAsIHNpZGVUaWxlV2lk
dGgsIHJhZGl1c1R3aWNlKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSB0aWxlUmVjdDsKKyAg
ICBHcmFwaGljc1JlY3QgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QocmFkaXVzVHdpY2UgKyB0b3BM
ZWZ0UmFkaXVzLndpZHRoKCksIDAsIHNpZGVUaWxlV2lkdGgsIHJhZGl1c1R3aWNlKTsKKyAgICBH
cmFwaGljc1JlY3QgZGVzdFJlY3QgPSB0aWxlUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKHNoYWRv
d1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CiAgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93
UmVjdC53aWR0aCgpIC0gdG9wTGVmdFJhZGl1cy53aWR0aCgpIC0gdG9wUmlnaHRSYWRpdXMud2lk
dGgoKSAtIG1fYmx1ckRpc3RhbmNlICogNCk7Ci0gICAgRmxvYXRQb2ludCBwaGFzZSA9IGdldFBo
YXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CisgICAgR3JhcGhpY3NQb2ludCBwaGFzZSA9IGdldFBo
YXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFu
c2Zvcm07CiAgICAgcGF0dGVyblRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKICAgICBkcmF3UGF0
dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBk
ZXN0UmVjdCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gc2lkZS4KLSAgICB0aWxlUmVjdCA9
IEZsb2F0UmVjdChyYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgc2hhZG93
VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UsIHNpZGVUaWxlV2lkdGgsIHJhZGl1
c1R3aWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdChyYWRpdXNUd2ljZSArIGJvdHRv
bUxlZnRSYWRpdXMud2lkdGgoKSwgc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVz
VHdpY2UsIHNpZGVUaWxlV2lkdGgsIHJhZGl1c1R3aWNlKTsKICAgICBkZXN0UmVjdCA9IHRpbGVS
ZWN0OwogICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpICsg
cmFkaXVzVHdpY2UgKyByZWN0LmhlaWdodCgpIC0gc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgp
KTsKICAgICBkZXN0UmVjdC5zZXRXaWR0aChzaGFkb3dSZWN0LndpZHRoKCkgLSBib3R0b21MZWZ0
UmFkaXVzLndpZHRoKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpIC0gbV9ibHVyRGlzdGFu
Y2UgKiA0KTsKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRyYXdSZWN0
U2hhZG93KEdyYXBoCiAgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjciwgbV9sYXllcklt
YWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJlY3QpOwogCiAgICAgLy8gRHJhdyB0aGUgcmln
aHQgc2lkZS4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdChzaGFkb3dUZW1wbGF0ZVNpemUud2lk
dGgoKSAtIHJhZGl1c1R3aWNlLCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
LCByYWRpdXNUd2ljZSwgc2lkZVRpbGVXaWR0aCk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1Jl
Y3Qoc2hhZG93VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2Ug
KyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHNpZGVUaWxlV2lkdGgpOwog
ICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CiAgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0Lngo
KSArIHJhZGl1c1R3aWNlICsgcmVjdC53aWR0aCgpIC0gc2hhZG93VGVtcGxhdGVTaXplLndpZHRo
KCksIHNoYWRvd1JlY3QueSgpKTsKICAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hhZG93UmVjdC5o
ZWlnaHQoKSAtIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVp
Z2h0KCkgLSBtX2JsdXJEaXN0YW5jZSAqIDQpOwpAQCAtMzA4LDIyICszMDgsMjIgQEAgdm9pZCBD
b250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIGRyYXdQYXR0ZXJuVG9DYWly
b0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsK
IAogICAgIC8vIERyYXcgdGhlIGxlZnQgc2lkZS4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgw
LCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlLCBzaWRl
VGlsZVdpZHRoKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCByYWRpdXNUd2ljZSAr
IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRoKTsKICAg
ICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCks
IHNoYWRvd1JlY3QueSgpKTsKICAgICBkZXN0UmVjdC5zZXRIZWlnaHQoc2hhZG93UmVjdC5oZWln
aHQoKSAtIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgp
IC0gbV9ibHVyRGlzdGFuY2UgKiA0KTsKLSAgICBwaGFzZSA9IEZsb2F0UG9pbnQoZGVzdFJlY3Qu
eCgpIC0gdGlsZVJlY3QueCgpLCBkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOworICAgIHBo
YXNlID0gR3JhcGhpY3NQb2ludChkZXN0UmVjdC54KCkgLSB0aWxlUmVjdC54KCksIGRlc3RSZWN0
LnkoKSAtIHRpbGVSZWN0LnkoKSk7CiAgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjciwg
bV9sYXllckltYWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJlY3QpOwogCiAgICAgLy8gRHJh
dyB0aGUgdG9wIGxlZnQgY29ybmVyLgotICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHJh
ZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRS
YWRpdXMuaGVpZ2h0KCkpOworICAgIHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIHJhZGl1
c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRp
dXMuaGVpZ2h0KCkpOwogICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CiAgICAgZGVzdFJlY3QubW92
ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOwogICAgIHBoYXNlID0gZ2V0UGhhc2Uo
ZGVzdFJlY3QsIHRpbGVSZWN0KTsKICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBt
X2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVjdCk7CiAKICAgICAvLyBEcmF3
IHRoZSB0b3AgcmlnaHQgY29ybmVyLgotICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNoYWRvd1Rl
bXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2UgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgp
LCAwLCByYWRpdXNUd2ljZSArIHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksCisgICAgdGlsZVJlY3Qg
PSBHcmFwaGljc1JlY3Qoc2hhZG93VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAt
IHRvcFJpZ2h0UmFkaXVzLndpZHRoKCksIDAsIHJhZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMu
d2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNUd2ljZSArIHRvcFJpZ2h0
UmFkaXVzLmhlaWdodCgpKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RSZWN0
Lm1vdmUoc2hhZG93UmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSBzaGFkb3dUZW1wbGF0ZVNpemUu
d2lkdGgoKSArIHJhZGl1c1R3aWNlLCBzaGFkb3dSZWN0LnkoKSk7CkBAIC0zMzEsNyArMzMxLDcg
QEAgdm9pZCBDb250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIGRyYXdQYXR0
ZXJuVG9DYWlyb0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRl
c3RSZWN0KTsKIAogICAgIC8vIERyYXcgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIuCi0gICAgdGls
ZVJlY3QgPSBGbG9hdFJlY3Qoc2hhZG93VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2lj
ZSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksCisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1Jl
Y3Qoc2hhZG93VGVtcGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbVJpZ2h0
UmFkaXVzLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VGVtcGxhdGVT
aXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVz
LndpZHRoKCksIHJhZGl1c1R3aWNlICsgYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpOwogICAg
IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBDb250ZXh0U2hh
ZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQo
Y3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsKIAogICAgIC8v
IERyYXcgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgw
LCBzaGFkb3dUZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSByYWRpdXNUd2ljZSAtIGJvdHRvbUxlZnRS
YWRpdXMuaGVpZ2h0KCksCisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgc2hhZG93VGVt
cGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2UgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdo
dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1c1R3aWNlICsgYm90dG9tTGVmdFJh
ZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpOwog
ICAgIGRlc3RSZWN0ID0gdGlsZVJlY3Q7CiAgICAgZGVzdFJlY3QubW92ZShzaGFkb3dSZWN0Lngo
KSwgc2hhZG93UmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0gc2hhZG93VGVtcGxhdGVTaXplLmhl
aWdodCgpICsgcmFkaXVzVHdpY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJl
Y3RDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3Qm
IHIpCi0gICAgOiBtX2xvY2F0aW9uKHIueCwgci55KQotICAgICwgbV9zaXplKHIud2lkdGgsIHIu
aGVpZ2h0KQotewotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIGNhaXJvX3JlY3RhbmdsZV90KCkg
Y29uc3QKLXsKLSAgICBjYWlyb19yZWN0YW5nbGVfdCByID0geyB4KCksIHkoKSwgd2lkdGgoKSwg
aGVpZ2h0KCkgfTsKLSAgICByZXR1cm4gcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0
LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KgogICAgICAgICBj
YWlyb19zZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRp
YyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQgZHJhd0ds
eXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCiB7CiAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93
ID0gZ3JhcGhpY3NDb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7
CkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3ND
b24KIAogICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7CiAgICAgY2Fpcm9fc2NhbGVk
X2ZvbnRfZ2x5cGhfZXh0ZW50cyhmb250LT5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCksIGds
eXBocywgbnVtR2x5cGhzLCAmZXh0ZW50cyk7Ci0gICAgRmxvYXRSZWN0IGZvbnRFeHRlbnRzUmVj
dChwb2ludC54KCksIHBvaW50LnkoKSAtIGV4dGVudHMuaGVpZ2h0LCBleHRlbnRzLndpZHRoLCBl
eHRlbnRzLmhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IGZvbnRFeHRlbnRzUmVjdChwb2ludC54
KCksIHBvaW50LnkoKSAtIGV4dGVudHMuaGVpZ2h0LCBleHRlbnRzLndpZHRoLCBleHRlbnRzLmhl
aWdodCk7CiAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dM
YXllcihncmFwaGljc0NvbnRleHQsIGZvbnRFeHRlbnRzUmVjdCk7CiAgICAgaWYgKHNoYWRvd0Nv
bnRleHQpIHsKICAgICAgICAgZHJhd0dseXBoc1RvQ29udGV4dChzaGFkb3dDb250ZXh0LCBmb250
LCBnbHlwaHMsIG51bUdseXBocyk7CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIHZvaWQgZHJh
d0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbgogfQogCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKyAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFmb250LT5wbGF0Zm9ybURhdGEoKS5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgR3JhZGllbnQ6OnNldFBs
YXRmb3JtR3JhZGllbnRTcGFjZVQKICAgICB9CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYWRp
ZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBy
ZWN0KQogewogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNy
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAi
Q2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiT3duUHRyQ2Fpcm8uaCIKQEAgLTcx
LDcgKzcxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gQSBoZWxwZXIgd2hpY2ggcXVpY2tseSBmaWxscyBhIHJlY3RhbmdsZSB3aXRoIGEgc2ltcGxl
IGNvbG9yIGZpbGwuCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3IoY2Fpcm9f
dCogY3IsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGlj
IGlubGluZSB2b2lkIGZpbGxSZWN0V2l0aENvbG9yKGNhaXJvX3QqIGNyLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yLmFscGhh
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGZpbGxSZWN0V2l0aENvbG9yKGNhaQogICAgIGNhaXJvX2ZpbGwoY3IpOwogfQogCi1zdGF0aWMg
dm9pZCBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3N0YXRpYyB2b2lkIGFkZENvbnZl
eFBvbHlnb25Ub0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgc2l6ZV90IG51bVBvaW50cywgY29u
c3QgR3JhcGhpY3NQb2ludCogcG9pbnRzKQogewogICAgIGNhaXJvX21vdmVfdG8oY29udGV4dCwg
cG9pbnRzWzBdLngoKSwgcG9pbnRzWzBdLnkoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBudW1Qb2ludHM7IGkrKykKQEAgLTEwNiwxOCArMTA2LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGkKICAgICBjYWlyb190KiBjYWlyb0NvbnRleHQgPSBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBPd25QdHI8Y2Fpcm9fcGF0aF90PiBw
YXRoID0gYWRvcHRQdHIoY2Fpcm9fY29weV9wYXRoKGNhaXJvQ29udGV4dCkpOwogCi0gICAgRmxv
YXRSZWN0IHNvbGlkRmlndXJlRXh0ZW50czsKKyAgICBHcmFwaGljc1JlY3Qgc29saWRGaWd1cmVF
eHRlbnRzOwogICAgIGRvdWJsZSB4MCA9IDA7CiAgICAgZG91YmxlIHgxID0gMDsKICAgICBkb3Vi
bGUgeTAgPSAwOwogICAgIGRvdWJsZSB5MSA9IDA7CiAgICAgaWYgKGRyYXdpbmdTdHlsZSAmIFN0
cm9rZSkgewogICAgICAgICBjYWlyb19zdHJva2VfZXh0ZW50cyhjYWlyb0NvbnRleHQsICZ4MCwg
JnkwLCAmeDEsICZ5MSk7Ci0gICAgICAgIHNvbGlkRmlndXJlRXh0ZW50cyA9IEZsb2F0UmVjdCh4
MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOworICAgICAgICBzb2xpZEZpZ3VyZUV4dGVudHMgPSBH
cmFwaGljc1JlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKICAgICB9CiAgICAgaWYgKGRy
YXdpbmdTdHlsZSAmIEZpbGwpIHsKICAgICAgICAgY2Fpcm9fZmlsbF9leHRlbnRzKGNhaXJvQ29u
dGV4dCwgJngwLCAmeTAsICZ4MSwgJnkxKTsKLSAgICAgICAgRmxvYXRSZWN0IGZpbGxFeHRlbnRz
KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBmaWxsRXh0
ZW50cyh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwogICAgICAgICBzb2xpZEZpZ3VyZUV4dGVu
dHMudW5pdGUoZmlsbEV4dGVudHMpOwogICAgIH0KIApAQCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKIAogICAgIGlmIChzdHJva2VTdHls
ZSgpICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY3IsIHN0
cm9rZUNvbG9yKCkpOwotICAgICAgICBGbG9hdFJlY3QgcihyZWN0KTsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IHIocmVjdCk7CiAgICAgICAgIHIuaW5mbGF0ZSgtLjVmKTsKICAgICAgICAgY2Fpcm9f
cmVjdGFuZ2xlKGNyLCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiAgICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCAxLjApOwpAQCAtMjcwLDcgKzI3MCw3IEBAIHN0
YXRpYyBkb3VibGUgY2FsY3VsYXRlU3Ryb2tlUGF0dGVybk9mZnMKICAgICByZXR1cm4gMDsKIH0K
IAotc3RhdGljIHZvaWQgZHJhd0xpbmVPbkNhaXJvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCitzdGF0aWMgdm9pZCBkcmF3TGluZU9uQ2Fpcm9D
b250ZXh0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjYWlyb190KiBjb250ZXh0
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
MikKIHsKICAgICBTdHJva2VTdHlsZSBzdHlsZSA9IGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlU3R5
bGUoKTsKICAgICBpZiAoc3R5bGUgPT0gTm9TdHJva2UpCkBAIC0yODgsMTYgKzI4OCwxNiBAQCBz
dGF0aWMgdm9pZCBkcmF3TGluZU9uQ2Fpcm9Db250ZXh0KEdyYXBoCiAgICAgICAgIHBhdHRlcm5X
aWR0aCA9IDMgKiBzdHJva2VUaGlja25lc3M7CiAKICAgICBib29sIGlzVmVydGljYWxMaW5lID0g
cG9pbnQxLngoKSA9PSBwb2ludDIueCgpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQxT25QaXhlbEJv
dW5kYXJpZXMgPSBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCBwb2ludDJPblBpeGVsQm91bmRhcmll
cyA9IHBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50MU9uUGl4ZWxCb3VuZGFyaWVzID0g
cG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQyT25QaXhlbEJvdW5kYXJpZXMgPSBwb2lu
dDI7CiAgICAgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocG9p
bnQxT25QaXhlbEJvdW5kYXJpZXMsIHBvaW50Mk9uUGl4ZWxCb3VuZGFyaWVzLCBzdHJva2VUaGlj
a25lc3MsIHN0eWxlKTsKIAogICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY29udGV4dCwgQ0FJUk9f
QU5USUFMSUFTX05PTkUpOwogICAgIGlmIChwYXR0ZXJuV2lkdGgpIHsKICAgICAgICAgLy8gRG8g
YSByZWN0IGZpbGwgb2Ygb3VyIGVuZHBvaW50cy4gIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2
ZSB0aGUKICAgICAgICAgLy8gYXBwZWFyYW5jZSBvZiBiZWluZyBhIGJvcmRlci4gIFdlIHRoZW4g
ZHJhdyB0aGUgYWN0dWFsIGRvdHRlZC9kYXNoZWQgbGluZS4KLSAgICAgICAgRmxvYXRSZWN0IGZp
cnN0UmVjdChwb2ludDFPblBpeGVsQm91bmRhcmllcywgRmxvYXRTaXplKHN0cm9rZVRoaWNrbmVz
cywgc3Ryb2tlVGhpY2tuZXNzKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBzZWNvbmRSZWN0KHBvaW50
Mk9uUGl4ZWxCb3VuZGFyaWVzLCBGbG9hdFNpemUoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlj
a25lc3MpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGZpcnN0UmVjdChwb2ludDFPblBpeGVsQm91
bmRhcmllcywgR3JhcGhpY3NTaXplKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKSk7
CisgICAgICAgIEdyYXBoaWNzUmVjdCBzZWNvbmRSZWN0KHBvaW50Mk9uUGl4ZWxCb3VuZGFyaWVz
LCBHcmFwaGljc1NpemUoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpKTsKICAgICAg
ICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgICBmaXJzdFJlY3QubW92ZSgtc3Ry
b2tlVGhpY2tuZXNzIC8gMiwgLXN0cm9rZVRoaWNrbmVzcyk7CiAgICAgICAgICAgICBzZWNvbmRS
ZWN0Lm1vdmUoLXN0cm9rZVRoaWNrbmVzcyAvIDIsIDApOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW4KICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVf
dCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFz
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRz
LCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0OCw3ICs0
NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgY2Fp
cm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9s
eWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50
aWFsaWFzZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90
IG51bVBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2Vk
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5
MSw3ICs0OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAg
ICAgc2hhZG93QW5kU3Ryb2tlQ3VycmVudENhaXJvUGF0aCh0aGlzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTAxLDcgKzUwMSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICBzaGFkb3dBbmRG
aWxsQ3VycmVudENhaXJvUGF0aCh0aGlzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNw
YWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgZmlsbFJlY3RXaXRoQ29sb3Io
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYxOSw3ICs2MTksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlY3RDb3VudDsgKytpKSB7CiAgICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgIHBh
dGguY2xlYXIoKTsKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0c1tpXSwgRmxvYXRT
aXplKHJhZGl1cywgcmFkaXVzKSk7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdHNb
aV0sIEdyYXBoaWNzU2l6ZShyYWRpdXMsIHJhZGl1cykpOwogICAgICAgICBhcHBlbmRXZWJDb3Jl
UGF0aFRvQ2Fpcm9Db250ZXh0KGNyLCBwYXRoKTsKICAgICB9CiAjZW5kaWYKQEAgLTY0Myw3ICs2
NDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAgICAgY2Fp
cm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgR3JhcGhpY3NQb2lu
dCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02NTIsOCArNjUyLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgIGNhaXJvX3NhdmUoY2Fpcm9D
b250ZXh0KTsKIAogICAgIC8vIFRoaXMgYnVtcGluZyBvZiA8MSBzdHJva2UgdGhpY2tuZXNzZXMg
bWF0Y2hlcyB0aGUgb25lIGluIGRyYXdMaW5lT25DYWlyb0NvbnRleHQuCi0gICAgRmxvYXRQb2lu
dCBlbmRQb2ludChvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7Ci0gICAgRmxvYXRSZWN0IGxp
bmVFeHRlbnRzKG9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCBzdHJva2VUaGlja25lc3MoKSkpOwor
ICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9pbnQob3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCkpOwor
ICAgIEdyYXBoaWNzUmVjdCBsaW5lRXh0ZW50cyhvcmlnaW4sIEdyYXBoaWNzU2l6ZSh3aWR0aCwg
c3Ryb2tlVGhpY2tuZXNzKCkpKTsKIAogICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRl
eHRTaGFkb3coKTsKICAgICBBU1NFUlQoc2hhZG93KTsKQEAgLTY3MSw3ICs2NzEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvCiAjaW5jbHVkZSAiRHJhd0Vycm9y
VW5kZXJsaW5lLmgiCiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIFRleHRD
aGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHRDaGVja2luZyhjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBU
ZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzAxLDkgKzcwMSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvclRleHRDaGUKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCitHcmFwaGljc1JlY3QgR3JhcGhpY3NDb250ZXh0Ojpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJlY3QsIFJvdW5kaW5nTW9k
ZSkKIHsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAg
ICAgZG91YmxlIHggPSBmcmVjdC54KCk7CiAgICAgZG91YmxlIHkgPSBmcmVjdC55KCk7CiAgICAg
Y2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKQEAgLTgyOSw3ICs4MjksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgY2xpcChyZWN0
KTsKIAogICAgIFBhdGggcDsKLSAgICBGbG9hdFJlY3QgcihyZWN0KTsKKyAgICBHcmFwaGljc1Jl
Y3QgcihyZWN0KTsKICAgICAvLyBBZGQgb3V0ZXIgZWxsaXBzZQogICAgIHAuYWRkRWxsaXBzZShy
KTsKICAgICAvLyBBZGQgaW5uZXIgZWxsaXBzZQpAQCAtODQzLDE2ICs4NDMsMTYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIGNhaXJvX3NldF9maWxsX3J1
bGUoY3IsIHNhdmVkRmlsbFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiBzaXplLCBmbG9hdCBibHVyLCBDb2xvciBjb25z
dCYgY29sb3IsIENvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3coR3JhcGhpY3NTaXplIGNvbnN0JiBzaXplLCBmbG9hdCBibHVyLCBDb2xvciBjb25zdCYg
Y29sb3IsIENvbG9yU3BhY2UpCiB7CiAgICAgLy8gQ2Fpcm8gZG9lc24ndCBzdXBwb3J0IHNoYWRv
d3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KiBmdW5jdGlv
bnMKICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAv
LyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBh
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwg
RmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwg
R3JhcGhpY3NTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKICAgICB9IGVsc2UK
LSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9h
dFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgIG1fZGF0YS0+c2hh
ZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgR3JhcGhpY3NTaXplKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSkpOwogCiAgICAgbV9kYXRhLT5zaGFkb3cuc2V0U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CkBAIC04OTEs
NyArODkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQogICAg
IG1fZGF0YS0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC05MDUsNyArOTA1LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDMwLDcgKzEwMzAsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhCiAgICAgbV9kYXRhLT5yb3RhdGUocmFk
aWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBz
aXplKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTEwNTUsOSArMTA1NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IElu
dFIKICAgICBjYWlyb19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsKIH0KIAotc3Rh
dGljIGlubGluZSBGbG9hdFBvaW50IGdldFBoYXNlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlKQorc3RhdGljIGlubGluZSBHcmFwaGljc1BvaW50IGdldFBoYXNl
KGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlKQogewot
ICAgIEZsb2F0UG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CisgICAgR3JhcGhpY3NQb2lu
dCBwaGFzZSA9IGRlc3QubG9jYXRpb24oKTsKICAgICBwaGFzZS5tb3ZlKC10aWxlLngoKSwgLXRp
bGUueSgpKTsKIAogICAgIHJldHVybiBwaGFzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDYWlyby5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKICAgICB2b2lkIGZsdXNo
KCk7Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xpcChjb25z
dCBHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIGNsaXAoY29uc3QgUGF0aCYpOwotICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBzY2FsZShjb25zdCBHcmFwaGljc1Np
emUmKTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCk7CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKQEAg
LTg2LDkgKzg2LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2F2ZSgpIHt9CiAgICAgdm9pZCByZXN0
b3JlKCkge30KICAgICB2b2lkIGZsdXNoKCkge30KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0Jikge30KKyAgICB2b2lkIGNsaXAoY29uc3QgR3JhcGhpY3NSZWN0Jikge30KICAgICB2b2lk
IGNsaXAoY29uc3QgUGF0aCYpIHt9Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7
fQorICAgIHZvaWQgc2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJikge30KICAgICB2b2lkIHJvdGF0
ZShmbG9hdCkge30KICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIHt9CiAgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikge30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzUmVjdENhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc1Jl
Y3RDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHA6OTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc1JlY3RDYWlyby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRS
ZWN0OjpGbG9hdFJlY3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3QmIHIpCisgICAgOiBtX2xvY2F0
aW9uKHIueCwgci55KQorICAgICwgbV9zaXplKHIud2lkdGgsIHIuaGVpZ2h0KQoreworfQorCitG
bG9hdFJlY3Q6Om9wZXJhdG9yIGNhaXJvX3JlY3RhbmdsZV90KCkgY29uc3QKK3sKKyAgICBjYWly
b19yZWN0YW5nbGVfdCByID0geyB4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkgfTsKKyAgICBy
ZXR1cm4gcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NSZWN0Q2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzUmVj
dENhaXJvLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc1JlY3RDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDE5ICsyNCwxOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKIAogI2luY2x1ZGUgPGNhaXJvLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgY2Fp
cm9fcmVjdGFuZ2xlX3QmIHIpCitHcmFwaGljc1JlY3Q6OkdyYXBoaWNzUmVjdChjb25zdCBjYWly
b19yZWN0YW5nbGVfdCYgcikKICAgICA6IG1fbG9jYXRpb24oci54LCByLnkpCiAgICAgLCBtX3Np
emUoci53aWR0aCwgci5oZWlnaHQpCiB7CiB9CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3IgY2Fpcm9f
cmVjdGFuZ2xlX3QoKSBjb25zdAorR3JhcGhpY3NSZWN0OjpvcGVyYXRvciBjYWlyb19yZWN0YW5n
bGVfdCgpIGNvbnN0CiB7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlX3QgciA9IHsgeCgpLCB5KCksIHdp
ZHRoKCksIGhlaWdodCgpIH07CiAgICAgcmV0dXJuIHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTIgKzk3
LDEyIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UKICAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3Vy
ZmFjZSkubGVha1JlZigpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QpIGNvbnN0Cit2b2lkIElt
YWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBtYXNrUmVjdCkgY29uc3QKIHsKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
cHVzaEltYWdlTWFzayhtX2RhdGEubV9zdXJmYWNlLCBtYXNrUmVjdCk7CiB9CiAKLXZvaWQgSW1h
Z2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIENv
bXBvc2l0ZU9wZXJhdG9yIG9wICwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgLy8g
Qml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVj
dGlvbgpAQCAtMTEwLDggKzExMCw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JT
cGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRl
c3RSZWN0KQogewogICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGlu
IHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX2RhdGEubV9zdXJmYWNlKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgpAQCAtOTMsMTAgKzkzLDEwIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjYWlyb19zdXJm
YWNlX3QKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIEZs
b2F0UmVjdCBzcmNSZWN0KHNyYyk7Ci0gICAgRmxvYXRSZWN0IGRzdFJlY3QoZHN0KTsKKyAgICBH
cmFwaGljc1JlY3Qgc3JjUmVjdChzcmMpOworICAgIEdyYXBoaWNzUmVjdCBkc3RSZWN0KGRzdCk7
CiAKICAgICBpZiAoZHN0UmVjdC53aWR0aCgpID09IDAuMGYgfHwgZHN0UmVjdC5oZWlnaHQoKSA9
PSAwLjBmIHx8CiAgICAgICAgIHNyY1JlY3Qud2lkdGgoKSA9PSAwLjBmIHx8IHNyY1JlY3QuaGVp
Z2h0KCkgPT0gMC4wZikKQEAgLTEyOCw4ICsxMjgsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlz
KTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgY2Fpcm9f
c3VyZmFjZV90KiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYg
KCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BhdGhDYWlyby5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk93blB0ckNhaXJvLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1QYXRoQ2Fpcm8uaCIKQEAgLTg1LDM0ICs4NSwzNCBAQCBib29sIFBhdGg6
Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CiAgICAgcmV0dXJuICFpc0VtcHR5KCk7CiB9CiAKLUZs
b2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCitHcmFwaGljc1BvaW50IFBhdGg6
OmN1cnJlbnRQb2ludCgpIGNvbnN0IAogewogICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSBjb3Jy
ZWN0IHdheT8KICAgICBkb3VibGUgeDsKICAgICBkb3VibGUgeTsKICAgICBjYWlyb19nZXRfY3Vy
cmVudF9wb2ludChwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpLCAmeCwgJnkpOwotICAgIHJldHVy
biBGbG9hdFBvaW50KHgsIHkpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHgsIHkpOwogfQog
Ci12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHApCit2b2lkIFBhdGg6OnRy
YW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHApCiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0
Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwogICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgLXAud2lkdGgo
KSwgLXAuaGVpZ2h0KCkpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwKQordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBj
YWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCk7CiAgICAgY2Fpcm9fbW92ZV90
byhjciwgcC54KCksIHAueSgpKTsKIH0KIAotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxv
YXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAp
CiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwogICAgIGNh
aXJvX2xpbmVfdG8oY3IsIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQo
KTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIFBhdGg6OmFkZFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAvKgogICogaW5zcGlyZWQgYnkgbGlic3ZnLWNhaXJv
CiAgKi8KLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJv
bFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZl
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkKIHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCk7
CiAgICAgZG91YmxlIHgsIHk7CkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBQYXRoOjphZGRRdWFk
Q3VydmVUbyhjb25zdCBGbG9hdFBvaQogICAgICAgICAgICAgICAgICAgIHgyLCB5Mik7CiB9CiAK
LXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiBj
b250cm9sUG9pbnQzKQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDIs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDMpCiB7CiAgICAgY2Fpcm9fdCogY3Ig
PSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwogICAgIGNhaXJvX2N1cnZlX3RvKGNyLCBjb250
cm9sUG9pbnQxLngoKSwgY29udHJvbFBvaW50MS55KCksCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9p
ZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UAogICAgICAgICAgICAgICAgICAg
IGNvbnRyb2xQb2ludDMueCgpLCBjb250cm9sUG9pbnQzLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6
YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHN0YXJ0QW5nbGUsIGZs
b2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhjb25z
dCBHcmFwaGljc1BvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRB
bmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQogewogICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDQ5CiAgICAgLy8gY2Fpcm9fYXJjKCkgZnVuY3Rpb25zIGhh
bmcgb3IgY3Jhc2ggd2hlbiBwYXNzZWQgaW5mIGFzIHJhZGl1cyBvciBzdGFydC9lbmQgYW5nbGUK
QEAgLTE3MCwxMiArMTcwLDEyIEBAIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQm
IHAsIGYKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgYXJlYU9mVHJpYW5nbGVGb3Jt
ZWRCeVBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGNv
bnN0IEZsb2F0UG9pbnQmIHAzKQorc3RhdGljIGlubGluZSBmbG9hdCBhcmVhT2ZUcmlhbmdsZUZv
cm1lZEJ5UG9pbnRzKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDMpCiB7CiAgICAgcmV0dXJuIHAxLngoKSAqIChw
Mi55KCkgLSBwMy55KCkpICsgcDIueCgpICogKHAzLnkoKSAtIHAxLnkoKSkgKyBwMy54KCkgKiAo
cDEueSgpIC0gcDIueSgpKTsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBv
aW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3ZvaWQgUGF0aDo6
YWRkQXJjVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAy
LCBmbG9hdCByYWRpdXMpCiB7CiAgICAgaWYgKGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYg
cDEKIAogICAgIGRvdWJsZSB4MCwgeTA7CiAgICAgY2Fpcm9fZ2V0X2N1cnJlbnRfcG9pbnQoY3Is
ICZ4MCwgJnkwKTsKLSAgICBGbG9hdFBvaW50IHAwKHgwLCB5MCk7CisgICAgR3JhcGhpY3NQb2lu
dCBwMCh4MCwgeTApOwogCiAgICAgLy8gRHJhdyBvbmx5IGEgc3RyYWlnaHQgbGluZSB0byBwMSBp
ZiBhbnkgb2YgdGhlIHBvaW50cyBhcmUgZXF1YWwgb3IgdGhlIHJhZGl1cyBpcyB6ZXJvCiAgICAg
Ly8gb3IgdGhlIHBvaW50cyBhcmUgY29sbGluZWFyICh0cmlhbmdsZSB0aGF0IHRoZSBwb2ludHMg
Zm9ybSBoYXMgYXJlYSBvZiB6ZXJvIHZhbHVlKS4KQEAgLTE5NCw4ICsxOTQsOCBAQCB2b2lkIFBh
dGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBGbG9hdFBvaW50IHAxcDAoKHAwLngoKSAtIHAxLngoKSksKHAwLnkoKSAtIHAxLnko
KSkpOwotICAgIEZsb2F0UG9pbnQgcDFwMigocDIueCgpIC0gcDEueCgpKSwocDIueSgpIC0gcDEu
eSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwMXAwKChwMC54KCkgLSBwMS54KCkpLChwMC55KCkg
LSBwMS55KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IHAxcDIoKHAyLngoKSAtIHAxLngoKSksKHAy
LnkoKSAtIHAxLnkoKSkpOwogICAgIGZsb2F0IHAxcDBfbGVuZ3RoID0gc3FydGYocDFwMC54KCkg
KiBwMXAwLngoKSArIHAxcDAueSgpICogcDFwMC55KCkpOwogICAgIGZsb2F0IHAxcDJfbGVuZ3Ro
ID0gc3FydGYocDFwMi54KCkgKiBwMXAyLngoKSArIHAxcDIueSgpICogcDFwMi55KCkpOwogCkBA
IC0yMDksMjggKzIwOSwyOCBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQm
IHAxCiAgICAgICAgIC8vIGFkZCBpbmZpbml0ZSBmYXIgYXdheSBwb2ludAogICAgICAgICB1bnNp
Z25lZCBpbnQgbWF4X2xlbmd0aCA9IDY1NTM1OwogICAgICAgICBkb3VibGUgZmFjdG9yX21heCA9
IG1heF9sZW5ndGggLyBwMXAwX2xlbmd0aDsKLSAgICAgICAgRmxvYXRQb2ludCBlcCgocDAueCgp
ICsgZmFjdG9yX21heCAqIHAxcDAueCgpKSwgKHAwLnkoKSArIGZhY3Rvcl9tYXggKiBwMXAwLnko
KSkpOworICAgICAgICBHcmFwaGljc1BvaW50IGVwKChwMC54KCkgKyBmYWN0b3JfbWF4ICogcDFw
MC54KCkpLCAocDAueSgpICsgZmFjdG9yX21heCAqIHAxcDAueSgpKSk7CiAgICAgICAgIGNhaXJv
X2xpbmVfdG8oY3IsIGVwLngoKSwgZXAueSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGZsb2F0IHRhbmdlbnQgPSByYWRpdXMgLyB0YW4oYWNvcyhjb3NfcGhpKSAvIDIpOwogICAg
IGZsb2F0IGZhY3Rvcl9wMXAwID0gdGFuZ2VudCAvIHAxcDBfbGVuZ3RoOwotICAgIEZsb2F0UG9p
bnQgdF9wMXAwKChwMS54KCkgKyBmYWN0b3JfcDFwMCAqIHAxcDAueCgpKSwgKHAxLnkoKSArIGZh
Y3Rvcl9wMXAwICogcDFwMC55KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IHRfcDFwMCgocDEueCgp
ICsgZmFjdG9yX3AxcDAgKiBwMXAwLngoKSksIChwMS55KCkgKyBmYWN0b3JfcDFwMCAqIHAxcDAu
eSgpKSk7CiAKLSAgICBGbG9hdFBvaW50IG9ydGhfcDFwMChwMXAwLnkoKSwgLXAxcDAueCgpKTsK
KyAgICBHcmFwaGljc1BvaW50IG9ydGhfcDFwMChwMXAwLnkoKSwgLXAxcDAueCgpKTsKICAgICBm
bG9hdCBvcnRoX3AxcDBfbGVuZ3RoID0gc3FydChvcnRoX3AxcDAueCgpICogb3J0aF9wMXAwLngo
KSArIG9ydGhfcDFwMC55KCkgKiBvcnRoX3AxcDAueSgpKTsKICAgICBmbG9hdCBmYWN0b3JfcmEg
PSByYWRpdXMgLyBvcnRoX3AxcDBfbGVuZ3RoOwogCiAgICAgLy8gYW5nbGUgYmV0d2VlbiBvcnRo
X3AxcDAgYW5kIHAxcDIgdG8gZ2V0IHRoZSByaWdodCB2ZWN0b3Igb3J0aG9ncmFwaGljIHRvIHAx
cDAKICAgICBkb3VibGUgY29zX2FscGhhID0gKG9ydGhfcDFwMC54KCkgKiBwMXAyLngoKSArIG9y
dGhfcDFwMC55KCkgKiBwMXAyLnkoKSkgLyAob3J0aF9wMXAwX2xlbmd0aCAqIHAxcDJfbGVuZ3Ro
KTsKICAgICBpZiAoY29zX2FscGhhIDwgMC5mKQotICAgICAgICBvcnRoX3AxcDAgPSBGbG9hdFBv
aW50KC1vcnRoX3AxcDAueCgpLCAtb3J0aF9wMXAwLnkoKSk7CisgICAgICAgIG9ydGhfcDFwMCA9
IEdyYXBoaWNzUG9pbnQoLW9ydGhfcDFwMC54KCksIC1vcnRoX3AxcDAueSgpKTsKIAotICAgIEZs
b2F0UG9pbnQgcCgodF9wMXAwLngoKSArIGZhY3Rvcl9yYSAqIG9ydGhfcDFwMC54KCkpLCAodF9w
MXAwLnkoKSArIGZhY3Rvcl9yYSAqIG9ydGhfcDFwMC55KCkpKTsKKyAgICBHcmFwaGljc1BvaW50
IHAoKHRfcDFwMC54KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueCgpKSwgKHRfcDFwMC55KCkg
KyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueSgpKSk7CiAKICAgICAvLyBjYWxjdWxhdGUgYW5nbGVz
IGZvciBhZGRBcmMKLSAgICBvcnRoX3AxcDAgPSBGbG9hdFBvaW50KC1vcnRoX3AxcDAueCgpLCAt
b3J0aF9wMXAwLnkoKSk7CisgICAgb3J0aF9wMXAwID0gR3JhcGhpY3NQb2ludCgtb3J0aF9wMXAw
LngoKSwgLW9ydGhfcDFwMC55KCkpOwogICAgIGZsb2F0IHNhID0gYWNvcyhvcnRoX3AxcDAueCgp
IC8gb3J0aF9wMXAwX2xlbmd0aCk7CiAgICAgaWYgKG9ydGhfcDFwMC55KCkgPCAwLmYpCiAgICAg
ICAgIHNhID0gMiAqIHBpRG91YmxlIC0gc2E7CkBAIC0yMzksOCArMjM5LDggQEAgdm9pZCBQYXRo
OjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMQogICAgIGJvb2wgYW50aWNsb2Nrd2lzZSA9
IGZhbHNlOwogCiAgICAgZmxvYXQgZmFjdG9yX3AxcDIgPSB0YW5nZW50IC8gcDFwMl9sZW5ndGg7
Ci0gICAgRmxvYXRQb2ludCB0X3AxcDIoKHAxLngoKSArIGZhY3Rvcl9wMXAyICogcDFwMi54KCkp
LCAocDEueSgpICsgZmFjdG9yX3AxcDIgKiBwMXAyLnkoKSkpOwotICAgIEZsb2F0UG9pbnQgb3J0
aF9wMXAyKCh0X3AxcDIueCgpIC0gcC54KCkpLCh0X3AxcDIueSgpIC0gcC55KCkpKTsKKyAgICBH
cmFwaGljc1BvaW50IHRfcDFwMigocDEueCgpICsgZmFjdG9yX3AxcDIgKiBwMXAyLngoKSksIChw
MS55KCkgKyBmYWN0b3JfcDFwMiAqIHAxcDIueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBvcnRo
X3AxcDIoKHRfcDFwMi54KCkgLSBwLngoKSksKHRfcDFwMi55KCkgLSBwLnkoKSkpOwogICAgIGZs
b2F0IG9ydGhfcDFwMl9sZW5ndGggPSBzcXJ0ZihvcnRoX3AxcDIueCgpICogb3J0aF9wMXAyLngo
KSArIG9ydGhfcDFwMi55KCkgKiBvcnRoX3AxcDIueSgpKTsKICAgICBmbG9hdCBlYSA9IGFjb3Mo
b3J0aF9wMXAyLngoKSAvIG9ydGhfcDFwMl9sZW5ndGgpOwogICAgIGlmIChvcnRoX3AxcDIueSgp
IDwgMCkKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0
UG9pbnQmIHAxCiAgICAgYWRkQXJjKHAsIHJhZGl1cywgc2EsIGVhLCBhbnRpY2xvY2t3aXNlKTsK
IH0KIAotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
UGF0aDo6YWRkRWxsaXBzZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgY2Fpcm9f
dCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwogICAgIGNhaXJvX3NhdmUoY3IpOwpA
QCAtMjczLDE1ICsyNzMsMTUgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQogICAgIGNhaXJv
X2Nsb3NlX3BhdGgoY3IpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29u
c3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewogICAgIGNhaXJv
X3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBkb3VibGUgeDAsIHgxLCB5
MCwgeTE7CiAgICAgY2Fpcm9fcGF0aF9leHRlbnRzKGNyLCAmeDAsICZ5MCwgJngxLCAmeTEpOwot
ICAgIHJldHVybiBGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CiB9CiAKLUZsb2F0UmVj
dCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBj
b25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFw
cGxpZXIqIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgo
KS0+Y29udGV4dCgpOwogICAgIGlmIChhcHBsaWVyKSB7CkBAIC0yOTEsMTAgKzI5MSwxMCBAQCBG
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiAKICAgICBkb3VibGUgeDAs
IHgxLCB5MCwgeTE7CiAgICAgY2Fpcm9fc3Ryb2tlX2V4dGVudHMoY3IsICZ4MCwgJnkwLCAmeDEs
ICZ5MSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKIH0KIAot
Ym9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVs
ZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc2Zpbml0ZShwb2ludC54KCkpIHx8
ICFpc2Zpbml0ZShwb2ludC55KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDYsNyAr
MzA2LDcgQEAgYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwbwogICAgIHJl
dHVybiBjb250YWluczsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHls
ZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBQ
YXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEFTU0VSVChhcHBsaWVyKTsKICAgICBj
YWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCk7CkBAIC0zMjIsNyArMzIyLDcg
QEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBwbGllcgogICAgIE93blB0cjxj
YWlyb19wYXRoX3Q+IHBhdGhDb3B5ID0gYWRvcHRQdHIoY2Fpcm9fY29weV9wYXRoKGNyKSk7CiAg
ICAgY2Fpcm9fcGF0aF9kYXRhX3QqIGRhdGE7CiAgICAgUGF0aEVsZW1lbnQgcGVsZW1lbnQ7Ci0g
ICAgRmxvYXRQb2ludCBwb2ludHNbM107CisgICAgR3JhcGhpY3NQb2ludCBwb2ludHNbM107CiAg
ICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBw
YXRoQ29weS0+bnVtX2RhdGE7IGkgKz0gcGF0aENvcHktPmRhdGFbaV0uaGVhZGVyLmxlbmd0aCkg
ewpAQCAtMzMwLDE5ICszMzAsMTkgQEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRo
QXBwbGllcgogICAgICAgICBzd2l0Y2ggKGRhdGEtPmhlYWRlci50eXBlKSB7CiAgICAgICAgIGNh
c2UgQ0FJUk9fUEFUSF9NT1ZFX1RPOgogICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhF
bGVtZW50TW92ZVRvUG9pbnQ7Ci0gICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9h
dFBvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgcGVs
ZW1lbnQucG9pbnRzWzBdID0gR3JhcGhpY3NQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5w
b2ludC55KTsKICAgICAgICAgICAgIGZ1bmN0aW9uKGluZm8sICZwZWxlbWVudCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDQUlST19QQVRIX0xJTkVfVE86CiAgICAgICAgICAg
ICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDsKLSAgICAgICAgICAg
IHBlbGVtZW50LnBvaW50c1swXSA9IEZsb2F0UG9pbnQoZGF0YVsxXS5wb2ludC54LGRhdGFbMV0u
cG9pbnQueSk7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBHcmFwaGljc1BvaW50
KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOwogICAgICAgICAgICAgZnVuY3Rpb24o
aW5mbywgJnBlbGVtZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENBSVJP
X1BBVEhfQ1VSVkVfVE86CiAgICAgICAgICAgICBwZWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRB
ZGRDdXJ2ZVRvUG9pbnQ7Ci0gICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9hdFBv
aW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOwotICAgICAgICAgICAgcGVsZW1l
bnQucG9pbnRzWzFdID0gRmxvYXRQb2ludChkYXRhWzJdLnBvaW50LngsZGF0YVsyXS5wb2ludC55
KTsKLSAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1syXSA9IEZsb2F0UG9pbnQoZGF0YVszXS5w
b2ludC54LGRhdGFbM10ucG9pbnQueSk7CisgICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0g
PSBHcmFwaGljc1BvaW50KGRhdGFbMV0ucG9pbnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAg
ICAgICAgcGVsZW1lbnQucG9pbnRzWzFdID0gR3JhcGhpY3NQb2ludChkYXRhWzJdLnBvaW50Lngs
ZGF0YVsyXS5wb2ludC55KTsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1syXSA9IEdyYXBo
aWNzUG9pbnQoZGF0YVszXS5wb2ludC54LGRhdGFbM10ucG9pbnQueSk7CiAgICAgICAgICAgICBm
dW5jdGlvbihpbmZvLCAmcGVsZW1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ0FJUk9fUEFUSF9DTE9TRV9QQVRIOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJv
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gZGV0YWlscyBhcyBwYXJ0IG9mIHRoZSBj
b250ZXh0IHN0YXRlIGFuZCBhcHBseSB0aGVtIGR1cmluZyBwbGF0Zm9ybSByZXN0b3JlLgogY2xh
c3MgSW1hZ2VNYXNrSW5mb3JtYXRpb24gewogcHVibGljOgotICAgIHZvaWQgdXBkYXRlKGNhaXJv
X3N1cmZhY2VfdCogbWFza1N1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QpCisgICAg
dm9pZCB1cGRhdGUoY2Fpcm9fc3VyZmFjZV90KiBtYXNrU3VyZmFjZSwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBtYXNrUmVjdCkKICAgICB7CiAgICAgICAgIG1fbWFza1N1cmZhY2UgPSBtYXNrU3VyZmFj
ZTsKICAgICAgICAgbV9tYXNrUmVjdCA9IG1hc2tSZWN0OwpAQCAtNDgsMTEgKzQ4LDExIEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1N1cmZhY2U7
IH0KICAgICBjYWlyb19zdXJmYWNlX3QqIG1hc2tTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9t
YXNrU3VyZmFjZS5nZXQoKTsgfQotICAgIGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QoKSBjb25z
dCB7IHJldHVybiBtX21hc2tSZWN0OyB9CisgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBtYXNrUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1JlY3Q7IH0KIAogcHJpdmF0ZToKICAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBtX21hc2tTdXJmYWNlOwotICAgIEZsb2F0UmVjdCBtX21hc2tSZWN0
OworICAgIEdyYXBoaWNzUmVjdCBtX21hc2tSZWN0OwogfTsKIAogCkBAIC04OCw3ICs4OCw3IEBA
IHZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewogICAgIGNvbnN0IEltYWdl
TWFza0luZm9ybWF0aW9uJiBtYXNrSW5mb3JtYXRpb24gPSBtX3N0YXRlLT5tX2ltYWdlTWFza0lu
Zm9ybWF0aW9uOwogICAgIGlmIChtYXNrSW5mb3JtYXRpb24uaXNWYWxpZCgpKSB7Ci0gICAgICAg
IGNvbnN0IEZsb2F0UmVjdCYgbWFza1JlY3QgPSBtYXNrSW5mb3JtYXRpb24ubWFza1JlY3QoKTsK
KyAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBtYXNrUmVjdCA9IG1hc2tJbmZvcm1hdGlvbi5t
YXNrUmVjdCgpOwogICAgICAgICBjYWlyb19wb3BfZ3JvdXBfdG9fc291cmNlKG1fY3IuZ2V0KCkp
OwogICAgICAgICBjYWlyb19tYXNrX3N1cmZhY2UobV9jci5nZXQoKSwgbWFza0luZm9ybWF0aW9u
Lm1hc2tTdXJmYWNlKCksIG1hc2tSZWN0LngoKSwgbWFza1JlY3QueSgpKTsKICAgICB9CkBAIC0x
MTIsNyArMTEyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRDYWlybzo6c2F2ZSgpCiAgICAgY2Fp
cm9fc2F2ZShtX2NyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRleHRDYWlybzo6cHVz
aEltYWdlTWFzayhjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fpcm86OnB1c2hJbWFnZU1hc2soY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgLy8gV2UgbXVz
dCBjYWxsIHNhdmVQbGF0Zm9ybVN0YXRlIGF0IGxlYXN0IG9uY2UgYmVmb3JlIHdlIGNhbiB1c2Ug
aW1hZ2UgbWFza2luZywKICAgICAvLyBzaW5jZSB3ZSBhY3R1YWxseSBhcHBseSB0aGUgbWFzayBp
biByZXN0b3JlUGxhdGZvcm1TdGF0ZS4KQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIFBsYXRmb3Jt
Q29udGV4dENhaXJvOjpwdXNoSW1hZ2VNYXNrCiAgICAgY2Fpcm9fZmlsbChtX2NyLmdldCgpKTsK
IH0KIAotc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjYWlyb190KiBjciwg
Y2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBmbG9h
dCBhbHBoYSkKK3N0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCog
Y3IsIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVj
dCwgZmxvYXQgYWxwaGEpCiB7CiAgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBkZXN0UmVjdC54KCks
IGRlc3RSZWN0LnkoKSk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgcGF0dGVybik7CkBAIC0x
NDcsNyArMTQ3LDcgQEAgc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjYQog
ICAgIGNhaXJvX3BhaW50X3dpdGhfYWxwaGEoY3IsIGFscGhhKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNvbnRleHRDYWlybzo6ZHJhd1N1cmZhY2VUb0NvbnRleHQoY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3ZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fpcm86OmRy
YXdTdXJmYWNlVG9Db250ZXh0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCiB7CiAgICAgLy8gSWYgd2UncmUgZHJhd2luZyBhIHN1YiBwb3J0aW9u
IG9mIHRoZSBpbWFnZSBvciBzY2FsaW5nIHRoZW4gY3JlYXRlCiAgICAgLy8gYSBwYXR0ZXJuIHRy
YW5zZm9ybWF0aW9uIG9uIHRoZSBpbWFnZSBhbmQgZHJhdyB0aGUgdHJhbnNmb3JtZWQgcGF0dGVy
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3Jt
Q29udGV4dENhaXJvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWly
by5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEdsb2JhbEFscGhhKGZsb2F0KTsKICAgICBmbG9hdCBnbG9iYWxBbHBoYSgpIGNvbnN0OwogCi0g
ICAgdm9pZCBwdXNoSW1hZ2VNYXNrKGNhaXJvX3N1cmZhY2VfdCosIGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgZHJhd1N1cmZhY2VUb0NvbnRleHQoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBHcmFwaGljc0Nv
bnRleHQqKTsKKyAgICB2b2lkIHB1c2hJbWFnZU1hc2soY2Fpcm9fc3VyZmFjZV90KiwgY29uc3Qg
R3JhcGhpY3NSZWN0Jik7CisgICAgdm9pZCBkcmF3U3VyZmFjZVRvQ29udGV4dChjYWlyb19zdXJm
YWNlX3QqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3Qm
IHNyY1JlY3QsIEdyYXBoaWNzQ29udGV4dCopOwogCiAgICAgdm9pZCBzZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgfQogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8u
Y3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiw4IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAogI2luY2x1ZGUgPGNhaXJv
Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9p
bnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRQb2ludENHLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9r
aWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNf
Q0hST01JVU0pCi0KLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50
KGNvbnN0IENHUG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCi17Ci19Ci0KLUZsb2F0UG9p
bnQ6Om9wZXJhdG9yIENHUG9pbnQoKSBjb25zdAotewotICAgIHJldHVybiBDR1BvaW50TWFrZSht
X3gsIG1feSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRS
ZWN0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotI2lm
IFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQotCi0jaW5jbHVkZSA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQ0dSZWN0JiByKSA6IG1fbG9jYXRpb24o
ci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQotewotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIENH
UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENHUmVjdE1ha2UoeCgpLCB5KCksIHdpZHRoKCks
IGhlaWdodCgpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9h
dFNpemVDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0gCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0K
LSNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkgfHwgKFBMQVRGT1JNKFFU
KSAmJiBVU0UoUVRLSVQpKQotCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRTaXplOjpGbG9h
dFNpemUoY29uc3QgQ0dTaXplJiBzKSA6IG1fd2lkdGgocy53aWR0aCksIG1faGVpZ2h0KHMuaGVp
Z2h0KQotewotfQotCi1GbG9hdFNpemU6Om9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIENHU2l6ZU1ha2UobV93aWR0aCwgbV9oZWlnaHQpOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFk
aWVudENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDcgKzEwMyw3IEBAIENHR3JhZGllbnRSZWYgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQKIH0K
ICNlbmRpZgogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb250ZXh0LT5j
bGlwKHJlY3QpOwogICAgIHBhaW50KGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMCArMTcwLDEwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKICAgICAgICAgaWYgKG9s
ZEZpbGxDb2xvciAhPSBzdHJva2VDb2xvcigpKQogICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3Io
Y29udGV4dCwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlQ29sb3JTcGFjZSgpKTsKICAgICAgICAgQ0dS
ZWN0IHJlY3RzWzRdID0gewotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCAxKSwKLSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LngoKSwgcmVj
dC5tYXhZKCkgLSAxLCByZWN0LndpZHRoKCksIDEpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJl
Y3QueCgpLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKSwKLSAgICAgICAgICAg
IEZsb2F0UmVjdChyZWN0Lm1heFgoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQo
KSAtIDIpCisgICAgICAgICAgICBHcmFwaGljc1JlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIDEpLAorICAgICAgICAgICAgR3JhcGhpY3NSZWN0KHJlY3QueCgpLCByZWN0Lm1h
eFkoKSAtIDEsIHJlY3Qud2lkdGgoKSwgMSksCisgICAgICAgICAgICBHcmFwaGljc1JlY3QocmVj
dC54KCksIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpLAorICAgICAgICAgICAg
R3JhcGhpY3NSZWN0KHJlY3QubWF4WCgpIC0gMSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdo
dCgpIC0gMikKICAgICAgICAgfTsKICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQs
IHJlY3RzLCA0KTsKICAgICAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBzdHJva2VDb2xvcigpKQpA
QCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJ
bnQKIAogICAgIGZsb2F0IHdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICBGbG9hdFBv
aW50IHAxID0gcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7CisgICAgR3JhcGhp
Y3NQb2ludCBwMSA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHAyID0gcG9pbnQyOwogICAg
IGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CiAgICAgCiAgICAgLy8g
Rm9yIG9kZCB3aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8gdGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0
aGF0IHRoZSBmbG9hdCBhcml0aG1ldGljCkBAIC0yNDcsMTEgKzI0NywxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgICAgIC8vIGFwcGVhcmFuY2Ugb2Yg
YmVpbmcgYSBib3JkZXIuICBXZSB0aGVuIGRyYXcgdGhlIGFjdHVhbCBkb3R0ZWQvZGFzaGVkIGxp
bmUuCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9r
ZUNvbG9yU3BhY2UoKSk7ICAvLyBUaGUgc2F2ZS9yZXN0b3JlIG1ha2UgaXQgc2FmZSB0byBtdXRh
dGUgdGhlIGZpbGwgY29sb3IgaGVyZSB3aXRob3V0IHNldHRpbmcgaXQgYmFjayB0byB0aGUgb2xk
IGNvbG9yLgogICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAgIENHQ29u
dGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChwMS54KCkgLSB3aWR0aCAvIDIsIHAxLnko
KSAtIHdpZHRoLCB3aWR0aCwgd2lkdGgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0
KGNvbnRleHQsIEZsb2F0UmVjdChwMi54KCkgLSB3aWR0aCAvIDIsIHAyLnkoKSwgd2lkdGgsIHdp
ZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBHcmFwaGljc1Jl
Y3QocDEueCgpIC0gd2lkdGggLyAyLCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7Cisg
ICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBHcmFwaGljc1JlY3QocDIueCgp
IC0gd2lkdGggLyAyLCBwMi55KCksIHdpZHRoLCB3aWR0aCkpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgRmxvYXRSZWN0KHAxLngoKSAt
IHdpZHRoLCBwMS55KCkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0aCkpOwotICAgICAgICAgICAg
Q0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgRmxvYXRSZWN0KHAyLngoKSwgcDIueSgpIC0gd2lk
dGggLyAyLCB3aWR0aCwgd2lkdGgpKTsKKyAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNv
bnRleHQsIEdyYXBoaWNzUmVjdChwMS54KCkgLSB3aWR0aCwgcDEueSgpIC0gd2lkdGggLyAyLCB3
aWR0aCwgd2lkdGgpKTsKKyAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEdy
YXBoaWNzUmVjdChwMi54KCksIHAyLnkoKSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBFeGFtcGxlOiA4MCBwaXhlbHMgd2l0aCBhIHdpZHRoIG9m
IDMwIHBpeGVscy4KQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKGNvbnN0IEluCiAgICAgZmxvYXQgcmV2ZXJzZVNjYWxlRmFjdG9yID0gdyAvIGg7CiAK
ICAgICBpZiAodyAhPSBoKQotICAgICAgICBzY2FsZShGbG9hdFNpemUoMSwgc2NhbGVGYWN0b3Ip
KTsKKyAgICAgICAgc2NhbGUoR3JhcGhpY3NTaXplKDEsIHNjYWxlRmFjdG9yKSk7CiAKICAgICBm
bG9hdCBoUmFkaXVzID0gdyAvIDI7CiAgICAgZmxvYXQgdlJhZGl1cyA9IGggLyAyOwpAQCAtMzQw
LDcgKzM0MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW4KICAg
ICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgeCArIGhSYWRpdXMsICh5ICsgdlJhZGl1cykgKiBy
ZXZlcnNlU2NhbGVGYWN0b3IsIGhSYWRpdXMsIHN0YXJ0LCBlbmQsIHRydWUpOwogCiAgICAgaWYg
KHcgIT0gaCkKLSAgICAgICAgc2NhbGUoRmxvYXRTaXplKDEsIHJldmVyc2VTY2FsZUZhY3Rvcikp
OworICAgICAgICBzY2FsZShHcmFwaGljc1NpemUoMSwgcmV2ZXJzZVNjYWxlRmFjdG9yKSk7CiAK
ICAgICBmbG9hdCB3aWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGludCBwYXRXaWR0aCA9
IDA7CkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhj
b25zdCBJbgogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGFkZENvbnZleFBvbHlnb25Ub1BhdGgoUGF0aCYgcGF0aCwgc2l6ZV90IG51bWJlck9m
UG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCitzdGF0aWMgdm9pZCBhZGRDb252ZXhQ
b2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgR3Jh
cGhpY3NQb2ludCogcG9pbnRzKQogewogICAgIEFTU0VSVChudW1iZXJPZlBvaW50cyA+IDApOwog
CkBAIC00MDksNyArNDA5LDcgQEAgc3RhdGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvUGF0aChQ
YXRoJgogICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQq
IHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxp
YXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFzKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBGbG9hdFBv
aW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCog
cG9pbnRzLCBib29sIGFudGlhbGlhcykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKGNvbnN0IFBhdAogCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CiAg
ICAgICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBw
YXRoLmJvdW5kaW5nUmVjdCgpOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlY3QgPSBwYXRo
LmJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgQ0dMYXllclJlZiBsYXllciA9IENHTGF5ZXJD
cmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBDR1NpemVNYWtlKHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSksIDApOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENH
TGF5ZXJHZXRDb250ZXh0KGxheWVyKTsKIApAQCAtNjA5LDcgKzYwOSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKIAogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50KSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICAgICAgRmxvYXRS
ZWN0IHJlY3QgPSBwYXRoLmJvdW5kaW5nUmVjdCgpOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0
IHJlY3QgPSBwYXRoLmJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgbGluZVdpZHRo
ID0gc3Ryb2tlVGhpY2tuZXNzKCk7CiAgICAgICAgICAgICBmbG9hdCBkb3VibGVMaW5lV2lkdGgg
PSBsaW5lV2lkdGggKiAyOwogICAgICAgICAgICAgZmxvYXQgbGF5ZXJXaWR0aCA9IGNlaWxmKHJl
Y3Qud2lkdGgoKSArIGRvdWJsZUxpbmVXaWR0aCk7CkBAIC02NjIsNyArNjYyLDcgQEAgc3RhdGlj
IGJvb2wgaGFzQmx1cnJlZFNoYWRvdyhjb25zdCBHcmFwaAogICAgIHJldHVybiBzdGF0ZS5zaGFk
b3dDb2xvci5pc1ZhbGlkKCkgJiYgc3RhdGUuc2hhZG93Q29sb3IuYWxwaGEoKSAmJiBzdGF0ZS5z
aGFkb3dCbHVyOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC03MDIsNyArNzAyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsbwogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAg
ICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVpl
cm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUo
c2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNo
YWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVy
IGNvbnRleHRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0
YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xv
clNwYWNlKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdyh0aGlzLCByZWN0
LCBSb3VuZGVkUmVjdDo6UmFkaWkoKSk7CiAgICAgfQogCkBAIC03MTIsNyArNzEyLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTczMSw3
ICs3MzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAg
ICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFk
b3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3Rh
dGUuc2hhZG93Q29sb3JTcGFjZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhH
cmFwaGljc1NpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0
LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOwogICAgICAg
ICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KHRoaXMsIHJlY3QsIFJvdW5kZWRSZWN0OjpS
YWRpaSgpKTsKICAgICB9CiAKQEAgLTc2NCw3ICs3NjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7CiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7CisgICAgICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93Qmx1ciwgc2hhZG93
Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRl
LnNoYWRvd0NvbG9yU3BhY2UpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93
KHRoaXMsIHJlY3QsIFJvdW5kZWRSZWN0OjpSYWRpaSh0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQpKTsKICAgICB9CiAKQEAgLTgxNyw3ICs4MTcsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlCiAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBj
b250ZXh0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKSwgbV9zdGF0ZS5z
aGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFj
ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93
Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0Nv
bG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRy
YXdJbnNldFNoYWRvdyh0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QucmVjdCgpLCByb3VuZGVk
SG9sZVJlY3QucmFkaWkoKSk7CiAgICAgfQogCkBAIC04MzAsNyArODMwLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZQogICAgIHNldEZpbGxDb2xvcihvbGRGaWxs
Q29sb3IsIG9sZEZpbGxDb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTkxNSw3ICs5MTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJs
dXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0
LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC05OTAs
MTQgKzk5MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwCiAg
ICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQ0dDb250ZXh0Q2xl
YXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMTI0LDcgKzExMjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBQYXRoCiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3NSw3ICsx
MTc1LDcgQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKAogICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0odC5hLCB0LmIsIHQuYywgdC5kLCB0LnR4LCB0LnR5KTsKIH0K
IAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitHcmFwaGljc1JlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKICNpZiBQTEFURk9STShDSFJPTUlV
TSkKICAgICByZXR1cm4gcmVjdDsKQEAgLTEyMTcsMTMgKzEyMTcsMTMgQEAgRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZQogICAgIGlmIChkZXZpY2VPcmlnaW4ueCA9PSBk
ZXZpY2VMb3dlclJpZ2h0LnggJiYgcmVjdC53aWR0aCgpKQogICAgICAgICBkZXZpY2VMb3dlclJp
Z2h0LnggKz0gMTsKIAotICAgIEZsb2F0UG9pbnQgcm91bmRlZE9yaWdpbiA9IEZsb2F0UG9pbnQo
ZGV2aWNlT3JpZ2luLnggLyBkZXZpY2VTY2FsZVgsIGRldmljZU9yaWdpbi55IC8gZGV2aWNlU2Nh
bGVZKTsKLSAgICBGbG9hdFBvaW50IHJvdW5kZWRMb3dlclJpZ2h0ID0gRmxvYXRQb2ludChkZXZp
Y2VMb3dlclJpZ2h0LnggLyBkZXZpY2VTY2FsZVgsIGRldmljZUxvd2VyUmlnaHQueSAvIGRldmlj
ZVNjYWxlWSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93
ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOworICAgIEdyYXBoaWNzUG9pbnQgcm91bmRlZE9yaWdp
biA9IEdyYXBoaWNzUG9pbnQoZGV2aWNlT3JpZ2luLnggLyBkZXZpY2VTY2FsZVgsIGRldmljZU9y
aWdpbi55IC8gZGV2aWNlU2NhbGVZKTsKKyAgICBHcmFwaGljc1BvaW50IHJvdW5kZWRMb3dlclJp
Z2h0ID0gR3JhcGhpY3NQb2ludChkZXZpY2VMb3dlclJpZ2h0LnggLyBkZXZpY2VTY2FsZVgsIGRl
dmljZUxvd2VyUmlnaHQueSAvIGRldmljZVNjYWxlWSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVj
dChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgZmxv
YXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI0OSw3ICsxMjQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogICAgICAgICAvLyBXZSB0cnkgdG8gcm91bmQgYWxsIHBh
cmFtZXRlcnMgdG8gaW50ZWdlciBib3VuZGFyaWVzIGluIGRldmljZSBzcGFjZS4gSWYgcm91bmRp
bmcgcGl4ZWxzIGluIGRldmljZSBzcGFjZQogICAgICAgICAvLyBtYWtlcyBvdXIgdGhpY2tuZXNz
IG1vcmUgdGhhbiBkb3VibGUsIHRoZW4gdGhlcmUgbXVzdCBiZSBhIHNocmlua2luZy1zY2FsZSBm
YWN0b3IgYW5kIHJvdW5kaW5nIHRvIHBpeGVscwogICAgICAgICAvLyBpbiBkZXZpY2Ugc3BhY2Ug
d2lsbCBtYWtlIHRoZSB1bmRlcmxpbmVzIHRvbyB0aGljay4KLSAgICAgICAgQ0dSZWN0IGxpbmVS
ZWN0ID0gcm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoeCwgeSwgbGluZUxlbmd0aCwgYWRq
dXN0ZWRUaGlja25lc3MpLCBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMpOworICAgICAgICBDR1Jl
Y3QgbGluZVJlY3QgPSByb3VuZFRvRGV2aWNlUGl4ZWxzKEdyYXBoaWNzUmVjdCh4LCB5LCBsaW5l
TGVuZ3RoLCBhZGp1c3RlZFRoaWNrbmVzcyksIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucyk7CiAg
ICAgICAgIGlmIChsaW5lUmVjdC5zaXplLmhlaWdodCA8IHRoaWNrbmVzcyAqIDIuMCkgewogICAg
ICAgICAgICAgeCA9IGxpbmVSZWN0Lm9yaWdpbi54OwogICAgICAgICAgICAgeSA9IGxpbmVSZWN0
Lm9yaWdpbi55OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVD
Ry5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDkgKzY0LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2F2ZSgpIHt9CiAgICAgdm9pZCByZXN0
b3JlKCkge30KICAgICB2b2lkIGZsdXNoKCkge30KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0Jikge30KKyAgICB2b2lkIGNsaXAoY29uc3QgR3JhcGhpY3NSZWN0Jikge30KICAgICB2b2lk
IGNsaXAoY29uc3QgUGF0aCYpIHt9Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSB7
fQorICAgIHZvaWQgc2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJikge30KICAgICB2b2lkIHJvdGF0
ZShmbG9hdCkge30KICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIHt9CiAgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikge30KQEAgLTc4LDkgKzc4LDkgQEAg
cHVibGljOgogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwogICAgIHZvaWQg
Zmx1c2goKTsKLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGlw
KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZvaWQgY2xpcChjb25zdCBQYXRoJik7Ci0gICAg
dm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBo
aWNzU2l6ZSYpOwogICAgIHZvaWQgcm90YXRlKGZsb2F0KTsKICAgICB2b2lkIHRyYW5zbGF0ZShm
bG9hdCwgZmxvYXQpOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NQb2lu
dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc1BvaW50Q0cuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcDo5MTAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUG9pbnRDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVT
RShTS0lBX09OX01BQ19DSFJPTUlVTSkKKworI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UG9p
bnQ6OkZsb2F0UG9pbnQoY29uc3QgQ0dQb2ludCYgcCkgOiBtX3gocC54KSwgbV95KHAueSkKK3sK
K30KKworRmxvYXRQb2ludDo6b3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENHUG9pbnRNYWtlKG1feCwgbV95KTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENHKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NQb2ludENHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc1BvaW50Q0cuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUG9pbnRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKIAogI2lmIFVTRShDRykgfHwgVVNF
KFNLSUFfT05fTUFDX0NIUk9NSVVNKQogCkBAIC0zMywxMSArMzMsMTEgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IENHUG9pbnQmIHApIDog
bV94KHAueCksIG1feShwLnkpCitHcmFwaGljc1BvaW50OjpHcmFwaGljc1BvaW50KGNvbnN0IENH
UG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9wZXJh
dG9yIENHUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludDo6b3BlcmF0b3IgQ0dQb2ludCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIENHUG9pbnRNYWtlKG1feCwgbV95KTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUmVjdENHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RD
Ry5jcHAJKHJldmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9GbG9hdFJlY3RDRy5jcHA6OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorCisjaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01J
VU0pCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBD
R1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCit7Cit9CisK
K0Zsb2F0UmVjdDo6b3BlcmF0b3IgQ0dSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0dSZWN0
TWFrZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCit9CisKKyNlbmRpZiAvLyBV
U0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c1JlY3RDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NSZWN0Q0cuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUmVjdENHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKIAogI2lmIFVTRShDRykg
fHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQogCkBAIC0zMywxMSArMzMsMTEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBDR1JlY3QmIHIp
IDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCitHcmFwaGljc1JlY3Q6Okdy
YXBoaWNzUmVjdChjb25zdCBDR1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6
ZShyLnNpemUpCiB7CiB9CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3IgQ0dSZWN0KCkgY29uc3QKK0dy
YXBoaWNzUmVjdDo6b3BlcmF0b3IgQ0dSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0dSZWN0
TWFrZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NTaXplQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzU2l6ZUNHLmNwcAko
cmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0U2l6ZUNHLmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzU2l6ZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
bG9hdFNpemUuaCIKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKSB8
fCAoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
bG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBDR1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwg
bV9oZWlnaHQocy5oZWlnaHQpCit7Cit9CisKK0Zsb2F0U2l6ZTo6b3BlcmF0b3IgQ0dTaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQ0dTaXplTWFrZShtX3dpZHRoLCBtX2hlaWdodCk7Cit9CisK
K30KKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzU2l6ZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NTaXplQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KICAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUu
aCIKIAogI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKSB8fCAoUExBVEZP
Uk0oUVQpICYmIFVTRShRVEtJVCkpCiAKQEAgLTMzLDExICszMywxMSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IENHU2l6ZSYgcykgOiBtX3dp
ZHRoKHMud2lkdGgpLCBtX2hlaWdodChzLmhlaWdodCkKK0dyYXBoaWNzU2l6ZTo6R3JhcGhpY3NT
aXplKGNvbnN0IENHU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBtX2hlaWdodChzLmhlaWdo
dCkKIHsKIH0KIAotRmxvYXRTaXplOjpvcGVyYXRvciBDR1NpemUoKSBjb25zdAorR3JhcGhpY3NT
aXplOjpvcGVyYXRvciBDR1NpemUoKSBjb25zdAogewogICAgIHJldHVybiBDR1NpemVNYWtlKG1f
d2lkdGgsIG1faGVpZ2h0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KGNvbnN0IEludFNpemUmIAogICAgICAgICByZXR1cm47CiAKICAgICBtX2NvbnRleHQ9IGFkb3B0
UHRyKG5ldyBHcmFwaGljc0NvbnRleHQoY2dDb250ZXh0LmdldCgpKSk7Ci0gICAgbV9jb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBtX2NvbnRleHQtPnNjYWxlKEdyYXBoaWNz
U2l6ZSgxLCAtMSkpOwogICAgIG1fY29udGV4dC0+dHJhbnNsYXRlKDAsIC1zaXplLmhlaWdodCgp
KTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQCBzdGF0aWMgQ0dJ
bWFnZVJlZiBjZ0ltYWdlKGNvbnN0IEludFNpemUmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS5tX2NvbG9yU3BhY2UsIGRhdGEubV9iaXRtYXBJbmZvLCBkYXRhLm1fZGF0YVByb3ZpZGVy
LmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKIH0KIAotdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRl
c3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0
JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7
CiAgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpIHsKQEAgLTIyMCw4ICsyMjAsOCBAQCB2
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgfQogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgZGVzdFJlY3QpCiB7CiAgICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpIHsKICAgICAg
ICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewpAQCAtMjM4LDcgKzIzOCw3IEBAIHZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ28KICAgICB9CiB9CiAKLXZvaWQg
SW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0VG9DbGlwLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dFRvQ2xpcCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KSBjb25zdAogewog
ICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHRUb0NsaXAgPSBjb250ZXh0VG9DbGlwLT5w
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CkBAIC0y
NTAsNyArMjUwLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIAog
I2VuZGlmCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwg
cmVjdC54KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVD
VE0ocGxhdGZvcm1Db250ZXh0VG9DbGlwLCAxLCAtMSk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvTWFz
ayhwbGF0Zm9ybUNvbnRleHRUb0NsaXAsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHJlY3Quc2l6
ZSgpKSwgaW1hZ2UuZ2V0KCkpOworICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250
ZXh0VG9DbGlwLCBHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCByZWN0LnNpemUoKSksIGlt
YWdlLmdldCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHRUb0NsaXAs
IDEsIC0xKTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlw
LCAtcmVjdC54KCksIC1yZWN0LnkoKSAtIHJlY3QuaGVpZ2h0KCkpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlBERkRvY3Vt
ZW50SW1hZ2UuaCIKQEAgLTE4Miw3ICsxODIsNyBAQCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0
bWFwSW1hZ2U6OmdldENHCiAgICAgcmV0dXJuIFJldGFpblB0cjxDRkFycmF5UmVmPihBZG9wdENG
LCBhcnJheSk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBH
cmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsK
ICAgICBzdGFydEFuaW1hdGlvbigpOwogCkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZmxvYXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOworICAg
IEdyYXBoaWNzVW5pdCBjdXJySGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSk7
CiAgICAgaWYgKGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55KCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjA2LDggKzIwNiw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiAKIAogICAgIC8vIElmIHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGlt
YWdlLCB0aGVuIHdlIGNvbXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdp
bGwgaG9sZCB0aGUgZW50aXJlIGltYWdlCiAgICAgLy8gYW5kIHRoZW4gc2V0IGEgY2xpcCB0byB0
aGUgcG9ydGlvbiB0aGF0IHdlIHdhbnQgdG8gZGlzcGxheS4KLSAgICBGbG9hdFJlY3QgYWRqdXN0
ZWREZXN0UmVjdCA9IGRlc3RSZWN0OwotICAgIEZsb2F0U2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRG
cmFtZVNpemUoKTsKKyAgICBHcmFwaGljc1JlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0
OworICAgIEdyYXBoaWNzU2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKICAgICBp
ZiAoc3JjUmVjdC5zaXplKCkgIT0gc2VsZlNpemUpIHsKICAgICAgICAgQ0dJbnRlcnBvbGF0aW9u
UXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSA9IENHQ29udGV4dEdldEludGVycG9sYXRpb25R
dWFsaXR5KGNvbnRleHQpOwogICAgICAgICAvLyBXaGVuIHRoZSBpbWFnZSBpcyBzY2FsZWQgdXNp
bmcgaGlnaC1xdWFsaXR5IGludGVycG9sYXRpb24sIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBDR0lt
YWdlCkBAIC0yMTUsMTIgKzIxNSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogCiAgICAgICAgIC8vIGludGVycG9sYXRpb24gc21vb3RoZXMgc2hhcnAgZWRnZXMs
IGNhdXNpbmcgcGl4ZWxzIGZyb20gb3V0c2lkZSB0aGUgc291cmNlIHJlY3QgdG8gYmxlZWQKICAg
ICAgICAgLy8gaW50byB0aGUgZGVzdGluYXRpb24gcmVjdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS82
MTEyOTA5Pi4KICAgICAgICAgc2hvdWxkVXNlU3ViaW1hZ2UgPSAoaW50ZXJwb2xhdGlvblF1YWxp
dHkgIT0ga0NHSW50ZXJwb2xhdGlvbk5vbmUpICYmIChzcmNSZWN0LnNpemUoKSAhPSBkZXN0UmVj
dC5zaXplKCkgfHwgIWN0eHQtPmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlw
cGVkKCkpOwotICAgICAgICBmbG9hdCB4U2NhbGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVj
dC53aWR0aCgpOwotICAgICAgICBmbG9hdCB5U2NhbGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVz
dFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIEdyYXBoaWNzVW5pdCB4U2NhbGUgPSBzcmNSZWN0Lndp
ZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOworICAgICAgICBHcmFwaGljc1VuaXQgeVNjYWxlID0g
c3JjUmVjdC5oZWlnaHQoKSAvIGRlc3RSZWN0LmhlaWdodCgpOwogICAgICAgICBpZiAoc2hvdWxk
VXNlU3ViaW1hZ2UpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNS
ZWN0OwotICAgICAgICAgICAgZmxvYXQgbGVmdFBhZGRpbmcgPSBzcmNSZWN0LngoKSAtIGZsb29y
ZihzcmNSZWN0LngoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55
KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHN1Ymlt
YWdlUmVjdCA9IHNyY1JlY3Q7CisgICAgICAgICAgICBHcmFwaGljc1VuaXQgbGVmdFBhZGRpbmcg
PSBzcmNSZWN0LngoKSAtIGZsb29yKHNyY1JlY3QueCgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNz
VW5pdCB0b3BQYWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcihzcmNSZWN0LnkoKSk7CiAKICAg
ICAgICAgICAgIHN1YmltYWdlUmVjdC5tb3ZlKC1sZWZ0UGFkZGluZywgLXRvcFBhZGRpbmcpOwog
ICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5tb3ZlKC1sZWZ0UGFkZGluZyAvIHhTY2FsZSwg
LXRvcFBhZGRpbmcgLyB5U2NhbGUpOwpAQCAtMjM3LDggKzIzNyw4IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0LnNldEhlaWdodChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSAvIHlTY2FsZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkgLyB4
U2NhbGUsIGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpIC8geVNjYWxlKSk7Ci0gICAgICAgICAg
ICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoRmxvYXRTaXplKHNlbGZTaXplLndpZHRoKCkgLyB4
U2NhbGUsIHNlbGZTaXplLmhlaWdodCgpIC8geVNjYWxlKSk7CisgICAgICAgICAgICBhZGp1c3Rl
ZERlc3RSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQoZGVzdFJlY3QueCgpIC0gc3JjUmVj
dC54KCkgLyB4U2NhbGUsIGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpIC8geVNjYWxlKSk7Cisg
ICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoR3JhcGhpY3NTaXplKHNlbGZTaXpl
LndpZHRoKCkgLyB4U2NhbGUsIHNlbGZTaXplLmhlaWdodCgpIC8geVNjYWxlKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIWRlc3RSZWN0LmNvbnRhaW5zKGFkanVzdGVkRGVzdFJlY3QpKQpA
QCAtMjcwLDExICsyNzAsMTEgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIAogc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRl
eHRSZWYgY29udGV4dCkKIHsKICAgICBDR0ltYWdlUmVmIGltYWdlID0gKENHSW1hZ2VSZWYpaW5m
bzsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChp
bWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSksIGltYWdlKTsKKyAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQ
aXhlbHMoR3JhcGhpY3NSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VH
ZXRIZWlnaHQoaW1hZ2UpKSksIGltYWdlKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDE1ICsyOTIsMTUgQEAgdm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KgogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEs
IC0xKTsKICAgICAKICAgICAvLyBDb21wdXRlIHRoZSBzY2FsZWQgdGlsZSBzaXplLgotICAgIGZs
b2F0IHNjYWxlZFRpbGVIZWlnaHQgPSB0aWxlUmVjdC5oZWlnaHQoKSAqIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpOworICAgIEdyYXBoaWNzVW5pdCBzY2FsZWRU
aWxlSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNz
VW5pdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSk7CiAgICAgCiAgICAgLy8gV2UgaGF2ZSB0byBhZGp1
c3QgdGhlIHBoYXNlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB3ZSdyZSBpbiBDYXJ0ZXNpYW4gc3Bh
Y2Ugbm93ICh3aXRoIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgZGVzdFJlY3QgYmVpbmcKICAg
ICAvLyB0aGUgb3JpZ2luKS4KLSAgICBmbG9hdCBhZGp1c3RlZFggPSBwaGFzZS54KCkgLSBkZXN0
UmVjdC54KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5U
cmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RS
ZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBvdXQuCi0gICAgZmxvYXQgYWRq
dXN0ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsg
dGlsZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQo
KSkgKyBzY2FsZWRUaWxlSGVpZ2h0KTsKKyAgICBHcmFwaGljc1VuaXQgYWRqdXN0ZWRYID0gcGhh
c2UueCgpIC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9H
cmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOyAvLyBXZSB0cmFuc2xhdGVkIHRoZSBj
b250ZXh0IHNvIHRoYXQgZGVzdFJlY3QueCgpIGlzIHRoZSBvcmlnaW4sIHNvIHN1YnRyYWN0IGl0
IG91dC4KKyAgICBHcmFwaGljc1VuaXQgYWRqdXN0ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAo
cGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9u
VG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7
CiAKICAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlKTsKKyAgICBHcmFw
aGljc1VuaXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlKTsKIAogICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKICAgICBpZiAodGlsZVJlY3Quc2l6ZSgpID09IHNpemUo
KSkKQEAgLTMxOSwxNCArMzE5LDE0IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCoKICAgICAvLyBpdHMgYnVmZmVyIGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIG92ZXJh
bGwgaW1hZ2UuICBCZWNhdXNlIGEgcGFydGlhbGx5IGRlY29kZWQgQ0dJbWFnZVJlZiB3aXRoIGEg
c21hbGxlciB3aWR0aCBvciBoZWlnaHQgdGhhbiB0aGUKICAgICAvLyBvdmVyYWxsIGltYWdlIGJ1
ZmZlciBuZWVkcyB0byB0aWxlIHdpdGggImdhcHMiLCB3ZSBjYW4ndCB1c2UgdGhlIG9wdGltaXpl
ZCB0aWxpbmcgY2FsbCBpbiB0aGF0IGNhc2UuCiAgICAgLy8gRklYTUU6IFdlIGNhbm5vdCB1c2Ug
Q0dDb250ZXh0RHJhd1RpbGVkSW1hZ2Ugd2l0aCBzY2FsZWQgdGlsZXMgb24gTGVvcGFyZCwgYmVj
YXVzZSBpdCBzdWZmZXJzIGZyb20gcm91bmRpbmcgZXJyb3JzLiAgU25vdyBMZW9wYXJkIGlzIG9r
LgotICAgIGZsb2F0IHNjYWxlZFRpbGVXaWR0aCA9IHRpbGVSZWN0LndpZHRoKCkgKiBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsKLSAgICBmbG9hdCB3ID0gQ0dJ
bWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7CisgICAgR3JhcGhpY3NVbml0IHNjYWxlZFRpbGVXaWR0
aCA9IHRpbGVSZWN0LndpZHRoKCkgKiBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChwYXR0
ZXJuVHJhbnNmb3JtLmEoKSk7CisgICAgR3JhcGhpY3NVbml0IHcgPSBDR0ltYWdlR2V0V2lkdGgo
dGlsZUltYWdlKTsKICNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECiAgICAgaWYgKHcgPT0gc2l6
ZSgpLndpZHRoKCkgJiYgaCA9PSBzaXplKCkuaGVpZ2h0KCkgJiYgc2NhbGVkVGlsZVdpZHRoID09
IHRpbGVSZWN0LndpZHRoKCkgJiYgc2NhbGVkVGlsZUhlaWdodCA9PSB0aWxlUmVjdC5oZWlnaHQo
KSkKICNlbHNlCiAgICAgaWYgKHcgPT0gc2l6ZSgpLndpZHRoKCkgJiYgaCA9PSBzaXplKCkuaGVp
Z2h0KCkpCiAjZW5kaWYKLSAgICAgICAgQ0dDb250ZXh0RHJhd1RpbGVkSW1hZ2UoY29udGV4dCwg
RmxvYXRSZWN0KGFkanVzdGVkWCwgYWRqdXN0ZWRZLCBzY2FsZWRUaWxlV2lkdGgsIHNjYWxlZFRp
bGVIZWlnaHQpLCBzdWJJbWFnZS5nZXQoKSk7CisgICAgICAgIENHQ29udGV4dERyYXdUaWxlZElt
YWdlKGNvbnRleHQsIEdyYXBoaWNzUmVjdChhZGp1c3RlZFgsIGFkanVzdGVkWSwgc2NhbGVkVGls
ZVdpZHRoLCBzY2FsZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0KCkpOwogICAgIGVsc2Ugewog
CiAgICAgLy8gT24gTGVvcGFyZCBhbmQgbmV3ZXIsIHRoaXMgY29kZSBub3cgb25seSBydW5zIGZv
ciBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMgd2hvc2UgYnVmZmVycyBkbyBub3QgeWV0IG1hdGNo
IHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBpbnQg
UERGRG9jdW1lbnRJbWFnZTo6cGFnZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kb2N1bWVu
dCA/IENHUERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKG1fZG9jdW1lbnQpIDogMDsKIH0KIAot
dm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25z
dCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
KQogewogICAgIGlmICghbV9kb2N1bWVudCB8fCBtX2N1cnJlbnRQYWdlID09IC0xKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBQREZEb2N1bWVudEltYWdlX2gKICNkZWZp
bmUgUERGRG9jdW1lbnRJbWFnZV9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKIApAQCAtNjIsMTUgKzYyLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKIAogICAgICAgICBQREZEb2N1bWVudElt
YWdlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0Q3VycmVudFBhZ2Uo
aW50KTsKICAgICAgICAgaW50IHBhZ2VDb3VudCgpIGNvbnN0OwogICAgICAgICB2b2lkIGFkanVz
dENUTShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKIAogICAgICAgICBDR1BERkRvY3VtZW50UmVm
IG1fZG9jdW1lbnQ7Ci0gICAgICAgIEZsb2F0UmVjdCBtX21lZGlhQm94OwotICAgICAgICBGbG9h
dFJlY3QgbV9jcm9wQm94OworICAgICAgICBHcmFwaGljc1JlY3QgbV9tZWRpYUJveDsKKyAgICAg
ICAgR3JhcGhpY3NSZWN0IG1fY3JvcEJveDsKICAgICAgICAgZmxvYXQgbV9yb3RhdGlvbjsKICAg
ICAgICAgaW50IG1fY3VycmVudFBhZ2U7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIENH
TXV0YWJsZVBhdGhSZWYgY29weUNHUGF0aENsb3NpbgogICAgIHJldHVybiBwYXRoOwogfQogCi1i
b29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQgJnBvaW50LCBXaW5kUnVsZSBydWxl
KSBjb25zdAorYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50ICZwb2ludCwg
V2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKICAgICBpZiAoIWJvdW5kaW5nUmVjdCgpLmNvbnRhaW5z
KHBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMzLDcgKzEzMyw3IEBAIGJvb2wg
UGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG8KICAgICByZXR1cm4gcmV0OwogfQog
Ci1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5z
KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGFwcGxpZXIpOwogCkBAIC0xNTIsNyArMTUyLDcgQEAgYm9v
bCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcAogICAgIHJldHVybiBoaXRTdWNj
ZXNzOwogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2
b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwg
MCwgMSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBDR011dGFibGVQYXRoUmVm
IG5ld1BhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CkBAIC0xNjEsMTIgKzE2MSwxMiBAQCB2
b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpCiAgICAgbV9wYXRoID0gbmV3
UGF0aDsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CitHcmFwaGlj
c1JlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gQ0dQYXRoR2V0
Qm91bmRpbmdCb3gobV9wYXRoKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5n
UmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CitHcmFwaGljc1JlY3QgUGF0
aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QK
IHsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHNjcmF0Y2hDb250ZXh0KCk7CiAKQEAgLTE4
NiwyNyArMTg2LDI3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2sK
ICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQog
ewogICAgIENHUGF0aE1vdmVUb1BvaW50KG1fcGF0aCwgMCwgcG9pbnQueCgpLCBwb2ludC55KCkp
OwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQ
YXRoOjphZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBDR1BhdGhBZGRM
aW5lVG9Qb2ludChtX3BhdGgsIDAsIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRk
UXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit2
b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwKQogewogICAgIENHUGF0aEFkZFF1YWRDdXJ2ZVRvUG9pbnQobV9wYXRo
LCAwLCBjcC54KCksIGNwLnkoKSwgcC54KCksIHAueSgpKTsKIH0KIAotdm9pZCBQYXRoOjphZGRC
ZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3Ay
LCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGNwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY3AyLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwKQogewogICAgIENHUGF0aEFkZEN1cnZlVG9Qb2ludChtX3BhdGgsIDAsIGNw
MS54KCksIGNwMS55KCksIGNwMi54KCksIGNwMi55KCksIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZv
aWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQogewogICAgIENH
UGF0aEFkZEFyY1RvUG9pbnQobV9wYXRoLCAwLCBwMS54KCksIHAxLnkoKSwgcDIueCgpLCBwMi55
KCksIHJhZGl1cyk7CiB9CkBAIC0yMTYsMTkgKzIxNiwxOSBAQCB2b2lkIFBhdGg6OmNsb3NlU3Vi
cGF0aCgpCiAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKG1fcGF0aCk7CiB9CiAKLXZvaWQgUGF0aDo6
YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwg
Ym9vbCBjbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiBw
LCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgY2xvY2t3aXNlKQogewogICAgIC8v
IFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MTg5MjMzPiBDR1BhdGhBZGRBcmMgaGFu
Z3Mgb3IgY3Jhc2hlcyB3aGVuIHBhc3NlZCBpbmYgYXMgc3RhcnQgb3IgZW5kIGFuZ2xlCiAgICAg
aWYgKGlzZmluaXRlKHNhKSAmJiBpc2Zpbml0ZShlYSkpCiAgICAgICAgIENHUGF0aEFkZEFyYyht
X3BhdGgsIDAsIHAueCgpLCBwLnkoKSwgciwgc2EsIGVhLCBjbG9ja3dpc2UpOwogfQogCi12b2lk
IFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBDR1BhdGhBZGRSZWN0KG1fcGF0aCwgMCwgcik7
CiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIFBh
dGg6OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAgIENHUGF0aEFkZEVs
bGlwc2VJblJlY3QobV9wYXRoLCAwLCByKTsKIH0KQEAgLTI0OSw3ICsyNDksNyBAQCBib29sIFBh
dGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CiAgICAgcmV0dXJuICFpc0VtcHR5KCk7CiB9CiAg
ICAgCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhpY3NQb2lu
dCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICByZXR1cm4gQ0dQYXRoR2V0Q3Vy
cmVudFBvaW50KG1fcGF0aCk7CiB9CkBAIC0yNjUsNyArMjY1LDcgQEAgc3RydWN0IFBhdGhBcHBs
aWVySW5mbyB7CiBzdGF0aWMgdm9pZCBDR1BhdGhBcHBsaWVyVG9QYXRoQXBwbGllcih2b2lkICpp
bmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbGVtZW50KQogewogICAgIFBhdGhBcHBsaWVySW5m
byogcGluZm8gPSAoUGF0aEFwcGxpZXJJbmZvKilpbmZvOwotICAgIEZsb2F0UG9pbnQgcG9pbnRz
WzNdOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnRzWzNdOwogICAgIFBhdGhFbGVtZW50IHBlbGVt
ZW50OwogICAgIHBlbGVtZW50LnR5cGUgPSAoUGF0aEVsZW1lbnRUeXBlKWVsZW1lbnQtPnR5cGU7
CiAgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNr
KHZvaWQqIGluZm8sIAogICAgICAgICByZXR1cm47CiAKICAgICBDR1JlY3QgcmVjdCA9IEdyYXBo
aWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAotICAgICAgICBGbG9hdFJl
Y3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0
KHBsYXRmb3JtSW1hZ2UpKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCgwLCAwLCBDR0ltYWdlR2V0
V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsK
ICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBs
ZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29tcGxleFRleHRD
b250cm9sbGVyTGludXguaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAK
QEAgLTQ1OSw3ICs0NTksNyBAQCBpbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQ
b3NpCiAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbjsKIH0KIAotRmxvYXRSZWN0IENvbXBsZXhUZXh0
Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhl
aWdodCwgaW50IGZyb20sIGludCB0bykKK0dyYXBoaWNzUmVjdCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoZWlnaHQs
IGludCBmcm9tLCBpbnQgdG8pCiB7CiAgICAgaW50IGZyb21YID0gLTEsIHRvWCA9IC0xOwogICAg
IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NyaXB0IHJ1bnMgaW4gbG9naWNhbCBvcmRlciwgc2Vh
cmNoaW5nIGZvciB0aGUgcnVuIGNvdmVyaW5nIHRoZSBwb3NpdGlvbnMgb2YgaW50ZXJlc3QuCkBA
IC00OTMsOSArNDkzLDkgQEAgRmxvYXRSZWN0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2VsZWN0
aQogICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOwogCiAgICAgaWYgKGZyb21Y
IDwgdG9YKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZyb21YLCBwb2lu
dC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KHBvaW50LngoKSArIGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOwogCi0g
ICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0
b1gsIGhlaWdodCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChwb2ludC54KCkgKyB0b1gsIHBv
aW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBs
ZXhUZXh0Q29udHJvbGxlckxpbnV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyAr
MTEwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9y
bURhdGFGb3JTY3JpcHRSdW4oKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9y
bURhdGEqPihtX2l0ZW0uZm9udC0+dXNlckRhdGEpOyB9CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb24oaW50KTsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50
JiwgaW50IGhlaWdodCwgaW50IGZyb20gLCBpbnQgdG8pOworICAgIEdyYXBoaWNzUmVjdCBzZWxl
Y3Rpb25SZWN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSAsIGlu
dCB0byk7CiAKIHByaXZhdGU6CiAgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4gcHgpIG9mIHRo
ZSBjdXJyZW50IHNjcmlwdCBydW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDcgKzEwNCw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV90aWxlci0+cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVj
dCwgdGV4dHVyZVVwZGF0ZXIoKSk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAg
ICBtX2RpcnR5UmVjdCA9IEdyYXBoaWNzUmVjdCgpOwogfQogCiBib29sIENvbnRlbnRMYXllckNo
cm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0NhbgogCiBjbGFzcyBU
cmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKIHB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdy
YXBoaWNzUG9pbnQmKTsKICAgICB+VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcigpOwogCiBw
cm90ZWN0ZWQ6CkBAIC03Nyw3ICs3Nyw3IEBAIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0NvbnRl
eHQqIG1fZ3JhcGhpY3NDb250ZXh0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX3Bs
YXRmb3JtQ29udGV4dDsKIAotICAgIEZsb2F0UG9pbnQgbV9wb2ludDsKKyAgICBHcmFwaGljc1Bv
aW50IG1fcG9pbnQ7CiAKICAgICAvLyBTZXQgd2hlbiBXaW5kb3dzIGNhbiBoYW5kbGUgdGhlIHR5
cGUgb2YgZHJhd2luZyB3ZSdyZSBkb2luZy4KICAgICBib29sIG1fdXNlR0RJOwpAQCAtOTUsNyAr
OTUsNyBAQCBwcml2YXRlOgogfTsKIAogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJh
bnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKICAg
ICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3BsYXRmb3JtQ29udGV4dChj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKICAgICAsIG1fcG9pbnQocG9pbnQpCkBAIC0xOTAs
NyArMTkwLDcgQEAgY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgOiBwdQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAg
ICB+VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIoKTsKIAogICAgIC8vIERyYXdzIHRoZSBw
YXJ0aWFsIHN0cmluZyBvZiBnbHlwaHMsIHN0YXJ0aW5nIGF0IHxzdGFydEFkdmFuY2V8IHRvIHRo
ZQpAQCAtMjE3LDcgKzIxNyw3IEBAIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpUcmFu
c3BhcmUKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKICAgICBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsCiAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiAg
ICAgOiBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKGNvbnRleHQsIHBvaW50KQogICAgICwg
bV9mb250KGZvbnQpCiAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQpAQCAtMjc2LDcg
KzI3Niw3IEBAIGJvb2wgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OmRyYXcKIAogICAg
IC8vIElmIHRoZXJlIGlzIGEgbm9uLWJsdXIgc2hhZG93IGFuZCBib3RoIHRoZSBmaWxsIGNvbG9y
IGFuZCBzaGFkb3cgY29sb3IgCiAgICAgLy8gYXJlIG9wYXF1ZSwgaGFuZGxlIHdpdGhvdXQgc2tp
YS4gCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93
T2Zmc2V0OwogICAgIGZsb2F0IHNoYWRvd0JsdXI7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAg
ICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOwpAQCAtMzAyLDcgKzMwMiw3IEBAIGNsYXNz
IFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlciAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRm9udCosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRleHRSdW4mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAgICB+VHJhbnNwYXJlbmN5QXdh
cmVVbmlzY3JpYmVQYWludGVyKCk7CiAKICAgICAvLyBVbmlzY2liZSB3aWxsIGRyYXcgZGlyZWN0
bHkgaW50byBvdXIgYnVmZmVyLCBzbyB3ZSBuZWVkIHRvIGV4cG9zZSBvdXIgREMuCkBAIC0zMjIs
NyArMzIyLDcgQEAgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjpUcmFucwogICAg
IGNvbnN0IEZvbnQqIGZvbnQsCiAgICAgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIGludCBmcm9t
LCBpbnQgdG8sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQpCiAgICAgOiBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKGNvbnRl
eHQsIHBvaW50KQogICAgICwgbV9mb250KGZvbnQpCiAgICAgLCBtX3J1bihydW4pCkBAIC0zODAs
NyArMzgwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1dpbihHcmFwaGljc0NvbnRleAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbnVtR2x5cGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCkgewogICAgIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyIHBhaW50
ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBw
b2ludCk7CiAKICAgICAvLyBXZSBkcmF3IHRoZSBnbHlwaHMgaW4gY2h1bmtzIHRvIGF2b2lkIGhh
dmluZyB0byBkbyBhIGhlYXAgYWxsb2NhdGlvbiBmb3IKQEAgLTQ0Niw3ICs0NDYsNyBAQCB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLAogICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgU2tD
b2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2
ZUZpbGxDb2xvcigpOwogICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xv
cik7CkBAIC00NTcsOCArNDU3LDggQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogZwogICAgIGRyYXdHbHlwaHNXaW4oZ3JhcGhpY3NDb250ZXh0LCBmb250LCBnbHlwaEJ1
ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwK
K0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdG8pIGNvbnN0CkBAIC00NjksMTYgKzQ2OSwxNiBAQCBGbG9hdFJlY3QgRm9u
dDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAKICAgICAvLyBJZiB0aGUgdGV4dCBpcyBSVEws
IGxlZnQgd2lsbCBhY3R1YWxseSBiZSBhZnRlciByaWdodC4KICAgICBpZiAobGVmdCA8IHJpZ2h0
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGxlZnQsIHBvaW50LnkoKSwKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdChsZWZ0LCBwb2ludC55KCksCiAgICAgICAgICAgICAgICAgICAgICAg
IHJpZ2h0IC0gbGVmdCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKIAotICAgIHJldHVybiBGbG9h
dFJlY3QocmlnaHQsIHBvaW50LnkoKSwKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHJpZ2h0LCBw
b2ludC55KCksCiAgICAgICAgICAgICAgICAgICAgICBsZWZ0IC0gcmlnaHQsIHN0YXRpY19jYXN0
PGZsb2F0PihoKSk7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VGV4dFJ1biYgcnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHRvKSBjb25zdAogewpAQCAtNTA3LDcgKzUwNyw3IEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKIAogICAgIC8vIElmIHRoZXJl
IGlzIGEgbm9uLWJsdXIgc2hhZG93IGFuZCBib3RoIHRoZSBmaWxsIGNvbG9yIGFuZCBzaGFkb3cg
Y29sb3IgCiAgICAgLy8gYXJlIG9wYXF1ZSwgaGFuZGxlIHdpdGhvdXQgc2tpYS4gCi0gICAgRmxv
YXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zmc2V0OwogICAg
IGZsb2F0IHNoYWRvd0JsdXI7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JTcGFj
ZSBzaGFkb3dDb2xvclNwYWNlOwpAQCAtNTI1LDcgKzUyNSw3IEBAIHZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICBzdGF0ZS5kcmF3KGdyYXBoaWNzQ29udGV4dCwg
aGRjLCBscm91bmRmKHBvaW50LngoKSksIGxyb3VuZGYocG9pbnQueSgpIC0gZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSksIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
c0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4
dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZs
b2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25z
dAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9t
aWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIC8qIHBvaW50ICovLCBp
bnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250TGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKIAogI2luY2x1ZGUgIkNv
bXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIYXJmYnV6elNraWEuaCIKQEAgLTc5LDcg
Kzc5LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0VGV4dFJlbmRlck1vZGUoU2tQYWludAogCiB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QgewogICAgIFNrQVNTRVJUKHNpemVvZihH
bHlwaEJ1ZmZlckdseXBoKSA9PSBzaXplb2YodWludDE2X3QpKTsgLy8gY29tcGlsZS10aW1lIGFz
c2VydAogCiAgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHN0YXRpYyB2b2lkIHNldHVwRm9yVGV4
dFBhaW50aW5nKFNrUGFpbnQKIH0KIAogdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAoIXJ1bi5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGUKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBv
aW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3Zv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3Ry
aW5nJiAvKiBtYXJrICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQpAQCAtMjQ1LDggKzI0NSw4IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXgKIH0KIAogLy8gUmV0dXJuIHRoZSByZWN0YW5nbGUgZm9yIHNlbGVjdGluZyB0aGUgZ2l2
ZW4gcmFuZ2Ugb2YgY29kZS1wb2ludHMgaW4gdGhlIFRleHRSdW4uCi1GbG9hdFJlY3QgRm9udDo6
c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoZWlnaHQsCitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAw
LCAwLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhp
cyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAog
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZl
ci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgpAQCAt
MTgwLDEzICsxODAsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUZyb21Q
YQogICAgIGxheWVyRm9yUGFyZW50KCktPnJlbW92ZUZyb21QYXJlbnQoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHBvaW50KTsK
ICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHBvaW50KQordm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYg
cG9pbnQpCiB7CiAgICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QW5j
aG9yUG9pCiAgICAgdXBkYXRlQW5jaG9yUG9pbnQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIGlm
IChzaXplID09IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3AKICAgICAgICAgbV9sYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAgICBtX2xheWVyLT5zZXROZWVk
c0Rpc3BsYXkocmVjdCk7CkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNoaWxkTAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyUG9zaXRpb24oKQogewogICAgIC8vIFBvc2l0aW9uIGlzIG9mZnNldCBvbiB0aGUgbGF5ZXIg
YnkgdGhlIGxheWVyIGFuY2hvciBwb2ludC4KLSAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24o
bV9wb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAorICAg
IEdyYXBoaWNzUG9pbnQgbGF5ZXJQb3NpdGlvbihtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9p
bnQueCgpICogbV9zaXplLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cG9zaXRpb24ueSgpICsgbV9hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCkpOwogCiAg
ICAgcHJpbWFyeUxheWVyKCktPnNldFBvc2l0aW9uKGxheWVyUG9zaXRpb24pOwpAQCAtNTE0LDcg
KzUxNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclMKICAgICBp
ZiAobV90cmFuc2Zvcm1MYXllcikgewogICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRCb3Vu
ZHMobGF5ZXJTaXplKTsKICAgICAgICAgLy8gVGhlIGFuY2hvciBvZiB0aGUgY29udGVudHMgbGF5
ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9zaXRpb24gaXMgY2VudGVyLXJlbGF0
aXZlLgotICAgICAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwg
bV9zaXplLmhlaWdodCgpIC8gMik7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgY2VudGVyUG9pbnQo
bV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyKTsKICAgICAgICAgbV9sYXll
ci0+c2V0UG9zaXRpb24oY2VudGVyUG9pbnQpOwogICAgIH0KIApAQCAtNTI5LDcgKzUyOSw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclMKIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnVwZGF0ZUFuY2hvclBvaW50KCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQ
b2ludC55KCkpKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQ
b2ludChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsKICAgICBwcmltYXJ5
TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKIAogICAgIHVwZGF0
ZUxheWVyUG9zaXRpb24oKTsKQEAgLTU3NCw5ICs1NzQsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJQCiAgICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwogICAgICAg
ICB1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpOwogCi0gICAgICAgIG1fbGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAy
LjBmKSk7CisgICAgICAgIG1fbGF5ZXItPnNldFBvc2l0aW9uKEdyYXBoaWNzUG9pbnQobV9zaXpl
LndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKSk7CiAKLSAgICAgICAgbV9s
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLjVmLCAwLjVmKSk7CisgICAgICAgIG1f
bGF5ZXItPnNldEFuY2hvclBvaW50KEdyYXBoaWNzUG9pbnQoMC41ZiwgMC41ZikpOwogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eTsKICAgICAgICAgbV9sYXllci0+c2V0VHJh
bnNmb3JtKGlkZW50aXR5KTsKICAgICAgICAgCkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbgogICAgIGlmICghbV9jb250ZW50c0xheWVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQobV9jb250ZW50c1JlY3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpKTsKKyAgICBt
X2NvbnRlbnRzTGF5ZXItPnNldFBvc2l0aW9uKEdyYXBoaWNzUG9pbnQobV9jb250ZW50c1JlY3Qu
eCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpKTsKICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKG1fY29udGVudHNSZWN0LndpZHRoKCksIG1fY29udGVudHNSZWN0LmhlaWdodCgp
KSk7CiB9CiAKQEAgLTY1OCw3ICs2NTgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0dXBDb250ZW50CiAgICAgaWYgKGNvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgbV9jb250ZW50
c0xheWVyID0gY29udGVudHNMYXllcjsKIAotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOworICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNl
dEFuY2hvclBvaW50KEdyYXBoaWNzUG9pbnQoMCwgMCkpOwogCiAgICAgICAgIC8vIEluc2VydCB0
aGUgY29udGVudCBsYXllciBmaXJzdC4gVmlkZW8gZWxlbWVudHMgcmVxdWlyZSB0aGlzLCBiZWNh
dXNlIHRoZXkgaGF2ZQogICAgICAgICAvLyBzaGFkb3cgY29udGVudCB0aGF0IG11c3QgZGlzcGxh
eSBpbiBmcm9udCBvZiB0aGUgdmlkZW8uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hy
b21pdW0uaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsOSArNTYsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVu
dCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdmlydHVhbCB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJik7CisgICAgdmlydHVhbCB2b2lk
IHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKQEAgLTgwLDcgKzgwLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzTmVlZHNEaXNwbGF5KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0
KGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMTggKzE5MCwxOCBAQCB2b2lkIExh
eWVyQ2hyb21pdW06OnNldEJvdW5kcyhjb25zdCBJbnRTCiAgICAgbV9ib3VuZHMgPSBzaXplOwog
CiAgICAgaWYgKGZpcnN0UmVzaXplKQotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0
KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CisgICAgICAgIHNl
dE5lZWRzRGlzcGxheShHcmFwaGljc1JlY3QoMCwgMCwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRz
KCkuaGVpZ2h0KCkpKTsKICAgICBlbHNlCiAgICAgICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBMYXllckNocm9taXVtOjpzZXRGcmFtZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKHJlY3QgPT0gbV9mcmFtZSkKICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUgPSBy
ZWN0OwotICAgIHNldE5lZWRzRGlzcGxheShGbG9hdFJlY3QoMCwgMCwgYm91bmRzKCkud2lkdGgo
KSwgYm91bmRzKCkuaGVpZ2h0KCkpKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoR3JhcGhpY3NSZWN0
KDAsIDAsIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CiB9CiAKIGNvbnN0
IExheWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnJvb3RMYXllcigpIGNvbnN0CkBAIC0yNDEs
NyArMjQxLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROYW1lKGNvbnN0IFN0cmluZwogICAg
IG1fbmFtZSA9IG5hbWU7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5
KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQordm9pZCBMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoY29uc3QgR3JhcGhpY3NSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgLy8gU2ltcGx5
IG1hcmsgdGhlIGNvbnRlbnRzIGFzIGRpcnR5LiBGb3Igbm9uLXJvb3QgbGF5ZXJzLCB0aGUgY2Fs
bCB0bwogICAgIC8vIHNldE5lZWRzQ29tbWl0IHdpbGwgc2NoZWR1bGUgYSBmcmVzaCBjb21wb3Np
dGluZyBwYXNzLgpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5KGNvbnMKIAogdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewotICAgIG1fZGlydHlSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgbV9kaXJ0
eVJlY3Quc2V0TG9jYXRpb24oR3JhcGhpY3NQb2ludCgpKTsKICAgICBtX2RpcnR5UmVjdC5zZXRT
aXplKGJvdW5kcygpKTsKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOwogICAgIHNldE5lZWRz
Q29tbWl0KCk7CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVk
c0Rpc3BsYXkoKQogCiB2b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKIHsK
LSAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOworICAgIG1fZGlydHlSZWN0ID0gR3JhcGhp
Y3NSZWN0KCk7CiAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC03NSw4ICs3NSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYpOwog
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CiAKLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsg
c2V0TmVlZHNDb21taXQoKTsgfQotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7
IHJldHVybiBtX2FuY2hvclBvaW50OyB9CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBH
cmFwaGljc1BvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7
IHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBHcmFwaGljc1BvaW50IGFuY2hvclBvaW50KCkgY29u
c3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQogCiAgICAgdm9pZCBzZXRBbmNob3JQb2ludFoo
ZmxvYXQgYW5jaG9yUG9pbnRaKSB7IG1fYW5jaG9yUG9pbnRaID0gYW5jaG9yUG9pbnRaOyBzZXRO
ZWVkc0NvbW1pdCgpOyB9CiAgICAgZmxvYXQgYW5jaG9yUG9pbnRaKCkgY29uc3QgeyByZXR1cm4g
bV9hbmNob3JQb2ludFo7IH0KQEAgLTkxLDggKzkxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBtX2NsZWFyc0NvbnRleHQgPSBjbGVhcnM7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGNsZWFyc0NvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX2NsZWFyc0NvbnRleHQ7IH0KIAotICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgRmxvYXRSZWN0IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAg
IHZvaWQgc2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCiAgICAgdm9pZCBzZXRIaWRkZW4oYm9v
bCBoaWRkZW4pIHsgbV9oaWRkZW4gPSBoaWRkZW47IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBi
b29sIGlzSGlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW47IH0KQEAgLTEwNywxMCArMTA3
LDEwIEBAIHB1YmxpYzoKICAgICBDQ0xheWVySW1wbCogbWFza0RyYXdMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fbWFza0xheWVyID8gbV9tYXNrTGF5ZXItPmNjTGF5ZXJJbXBsKCkgOiAwOyB9CiAg
ICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIu
Z2V0KCk7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGly
dHlSZWN0KTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QmIGRp
cnR5UmVjdCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpIHt9Ci0gICAgY29uc3Qg
RmxvYXRSZWN0JiBkaXJ0eVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RpcnR5UmVjdDsgfQorICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIGRpcnR5UmVj
dCkge30KKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIGRpcnR5UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlydHlSZWN0OyB9CiAgICAgdm9pZCByZXNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShib29sIG5lZWRzRGlzcGxheSkgeyBtX25l
ZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlID0gbmVlZHNEaXNwbGF5OyB9CkBAIC0xMjEsOCArMTIx
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVl
ID0gb3BhcXVlOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7
IHJldHVybiBtX29wYXF1ZTsgfQogCi0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247ICBzZXROZWVkc0NvbW1pdCgp
OyB9Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSB7
IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0KCk7IH0KKyAgICBHcmFwaGlj
c1BvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCiAgICAgdm9p
ZCBzZXRaUG9zaXRpb24oZmxvYXQgelBvc2l0aW9uKSB7IG1felBvc2l0aW9uID0gelBvc2l0aW9u
OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgZmxvYXQgelBvc2l0aW9uKCkgY29uc3QgeyAgcmV0
dXJuIG1felBvc2l0aW9uOyB9CkBAIC0yMDUsNyArMjA1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiTGF5
ZXJDaHJvbWl1bSI7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0
U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7
CisgICAgR3JhcGhpY3NSZWN0IG1fZGlydHlSZWN0OwogICAgIGJvb2wgbV9jb250ZW50c0RpcnR5
OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fbWFza0xheWVyOwpAQCAtMjUyLDggKzI1
Miw4IEBAIHByaXZhdGU6CiAgICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1f
Ym91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwotICAgIEZsb2F0UG9pbnQg
bV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBD
b2xvciBtX2JhY2tncm91bmRDb2xvcjsKICAgICBDb2xvciBtX2RlYnVnQm9yZGVyQ29sb3I7CiAg
ICAgZmxvYXQgbV9kZWJ1Z0JvcmRlcldpZHRoOwpAQCAtMjcxLDcgKzI3MSw3IEBAIHByaXZhdGU6
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKIAotICAgIEZsb2F0UmVjdCBtX2ZyYW1lOwor
ICAgIEdyYXBoaWNzUmVjdCBtX2ZyYW1lOwogCiAgICAgLy8gUmVwbGljYSBsYXllciB1c2VkIGZv
ciByZWZsZWN0aW9ucy4KICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yZXBsaWNhTGF5ZXI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw3IEBAIHN0
YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnMKICAgICAvLyBheGlzLWFsaWdu
ZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBvbiB0aGUgc3BhY2UgdG8gY29uc2lkZXIu
CiAgICAgLy8gTm9uLWludmVydGlibGUgdHJhbnNmb3JtcyB3aWxsIGNyZWF0ZSBhbiBlbXB0eSBy
ZWN0IGhlcmUuCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVRvTGF5ZXIg
PSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gc3VyZmFjZVRv
TGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtaW5pbWFsU3VyZmFjZVJlY3Qp
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IHN1cmZh
Y2VUb0xheWVyLnByb2plY3RRdWFkKEZsb2F0UXVhZChHcmFwaGljc1JlY3QobWluaW1hbFN1cmZh
Y2VSZWN0KSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgbGF5ZXJSZWN0LmludGVyc2Vj
dChsYXllckJvdW5kUmVjdCk7CiAgICAgcmV0dXJuIGxheWVyUmVjdDsKIH0KQEAgLTY2NywxMiAr
NjY3LDEyIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWIKICAgICBy
ZW5kZXJNYXRyaXguc2NhbGUzZChsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5k
cygpLmhlaWdodCgpLCAxKTsKICAgICByZW5kZXJNYXRyaXggPSBtX3Byb2plY3Rpb25NYXRyaXgg
KiByZW5kZXJNYXRyaXg7CiAKLSAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUsIC0wLjUsIDEs
IDEpOwotICAgIEZsb2F0UmVjdCBtYXBwZWRSZWN0ID0gcmVuZGVyTWF0cml4Lm1hcFJlY3QobGF5
ZXJSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgbGF5ZXJSZWN0KC0wLjUsIC0wLjUsIDEsIDEpOwor
ICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0ID0gcmVuZGVyTWF0cml4Lm1hcFJlY3QobGF5ZXJS
ZWN0KTsKIAogICAgIC8vIFRoZSBsYXllciBpcyB2aXNpYmxlIGlmIGl0IGludGVyc2VjdHMgYW55
IHBhcnQgb2YgYSByZWN0YW5nbGUgd2hvc2Ugb3JpZ2luCiAgICAgLy8gaXMgYXQgKC0xLCAtMSkg
YW5kIHNpemUgaXMgMngyLgotICAgIHJldHVybiBtYXBwZWRSZWN0LmludGVyc2VjdHMoRmxvYXRS
ZWN0KC0xLCAtMSwgMiwgMikpOworICAgIHJldHVybiBtYXBwZWRSZWN0LmludGVyc2VjdHMoR3Jh
cGhpY3NSZWN0KC0xLCAtMSwgMiwgMikpOwogfQogCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUg
bGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRo
ZQpAQCAtNjk4LDggKzY5OCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQ
cm9wZXIKICAgICAvLyAgICAgICAgTSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0ZWQgYWJv
dmUKICAgICAvLyAgICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAg
dG8gdGhlIGxheWVyIHNpemUpCiAgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7
Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAg
IEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKKyAgICBHcmFwaGljc1Bv
aW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgR3JhcGhpY3NQb2lu
dCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpOwogCiAgICAgLy8gT2Zmc2V0IGJldHdlZW4g
YW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgogICAgIGZsb2F0IGNlbnRl
ck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0aCgpOwpAQCAt
NzE2LDcgKzcxNiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXIK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJp
eDsKICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxh
eWVyTG9jYWxUcmFuc2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41ICogbGF5
ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGxh
eWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworICAgIEdy
YXBoaWNzUmVjdCBsYXllclJlY3QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41
ICogbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5
ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkTGF5ZXJSZWN0
OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgbGlrZSB0aGUgd3JvbmcgcGxhY2UgdG8gc2V0
IHRoaXMKQEAgLTg3NiwxMCArODc2LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVQcm9wZXIKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBt
X3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkgewogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAg
ICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJl
Y3RDZW50ZXIoKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBzdXJmYWNlQ2VudGVyID0gcmVuZGVy
U3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKIAogICAgICAgICAvLyBSZXN0cmljdCB0aGUg
UmVuZGVyU3VyZmFjZSBzaXplIHRvIHRoZSBwb3J0aW9uIHRoYXQncyB2aXNpYmxlLgotICAgICAg
ICBGbG9hdFNpemUgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZzsKKyAgICAgICAgR3JhcGhpY3NT
aXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7CiAKICAgICAgICAgLy8gRG9uJ3QgY2xpcCBp
ZiB0aGUgbGF5ZXIgaXMgcmVmbGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4ndCBiZQog
ICAgICAgICAvLyBjbGlwcGVkLgpAQCAtODg4LDcgKzg4OCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVQcm9wZXIKICAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VT
Y2lzc29yUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPm1fc2Npc3Nv
clJlY3QsIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QsIHJlbmRlclN1cmZhY2UtPm1fb3Jp
Z2luVHJhbnNmb3JtKTsKICAgICAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRS
ZWN0LmludGVyc2VjdChzdXJmYWNlU2Npc3NvclJlY3QpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgRmxvYXRQb2ludCBjbGlwcGVkU3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNv
bnRlbnRSZWN0Q2VudGVyKCk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGNsaXBwZWRTdXJm
YWNlQ2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKICAgICAgICAg
ICAgIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1
cmZhY2VDZW50ZXI7CiAgICAgICAgIH0KIApAQCAtMTA2NSwxMyArMTA2NSwxMyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggY29tYmluZWREcmF3TWF0cml4ID0gKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPyBs
YXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCkubXVsdGlwbHkobGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSkgOiBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKICAgICAKICAg
ICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBsYXllclJl
Y3QoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMoKSkpOworICAgICAg
ICBHcmFwaGljc1JlY3QgbGF5ZXJSZWN0KEdyYXBoaWNzUG9pbnQoMCwgMCksIEdyYXBoaWNzU2l6
ZShsYXllci0+Ym91bmRzKCkpKTsKICAgICAgICAgRmxvYXRRdWFkIG1hcHBlZExheWVyID0gY29t
YmluZWREcmF3TWF0cml4Lm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwotICAgICAgICBG
bG9hdFNpemUgaG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5w
MSgpOwotICAgICAgICBGbG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0g
bWFwcGVkTGF5ZXIucDEoKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxE
aXIud2lkdGgoKSwgaG9yaXpvbnRhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9p
bnQzRCB5QXhpcyh2ZXJ0aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7
Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKKyAgICAg
ICAgR3JhcGhpY3NTaXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVk
TGF5ZXIucDEoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5
ZXIucDQoKSAtIG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCB4QXhp
cyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOworICAg
ICAgICBHcmFwaGljc1BvaW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxE
aXIuaGVpZ2h0KCksIDApOworICAgICAgICBHcmFwaGljc1BvaW50M0QgekF4aXMgPSB4QXhpcy5j
cm9zcyh5QXhpcyk7CiAgICAgICAgIGlmICh6QXhpcy56KCkgPCAwKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBGbG9h
dFBvaW50M0QgRWRnZTsKK3R5cGVkZWYgR3JhcGhpY3NQb2ludDNEIEVkZ2U7CiAKIFBhc3NPd25Q
dHI8TGF5ZXJUaWxlckNocm9taXVtPiBMYXllclRpbGVyQ2hyb21pdW06OmNyZWF0ZShMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBC
b3JkZXJUZXhlbE9wdGlvbiBib3JkZXIpCiB7CkBAIC00MjksMTggKzQyOSwxOCBAQCB2b2lkIExh
eWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250CiAKIHN0YXRpYyBib29sIGlzQ0NXKGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsKLSAgICBGbG9hdFBvaW50IHYxID0gRmxvYXRQb2ludChx
dWFkLnAyKCkueCgpIC0gcXVhZC5wMSgpLngoKSwKKyAgICBHcmFwaGljc1BvaW50IHYxID0gR3Jh
cGhpY3NQb2ludChxdWFkLnAyKCkueCgpIC0gcXVhZC5wMSgpLngoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWFkLnAyKCkueSgpIC0gcXVhZC5wMSgpLnkoKSk7Ci0gICAgRmxv
YXRQb2ludCB2MiA9IEZsb2F0UG9pbnQocXVhZC5wMygpLngoKSAtIHF1YWQucDIoKS54KCksCisg
ICAgR3JhcGhpY3NQb2ludCB2MiA9IEdyYXBoaWNzUG9pbnQocXVhZC5wMygpLngoKSAtIHF1YWQu
cDIoKS54KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMygpLnkoKSAt
IHF1YWQucDIoKS55KCkpOwogICAgIHJldHVybiAodjEueCgpICogdjIueSgpIC0gdjEueSgpICog
djIueCgpKSA8IDA7CiB9CiAKLXN0YXRpYyBFZGdlIGNvbXB1dGVFZGdlKGNvbnN0IEZsb2F0UG9p
bnQmIHAsIGNvbnN0IEZsb2F0UG9pbnQmIHEsIGZsb2F0IHNpZ24pCitzdGF0aWMgRWRnZSBjb21w
dXRlRWRnZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1BvaW50JiBxLCBm
bG9hdCBzaWduKQogewogICAgIEFTU0VSVChwICE9IHEpOwogCi0gICAgRmxvYXRQb2ludCB0YW5n
ZW50KHAueSgpIC0gcS55KCksIHEueCgpIC0gcC54KCkpOworICAgIEdyYXBoaWNzUG9pbnQgdGFu
Z2VudChwLnkoKSAtIHEueSgpLCBxLngoKSAtIHAueCgpKTsKICAgICBmbG9hdCBzY2FsZSA9IHNp
Z24gLyB0YW5nZW50Lmxlbmd0aCgpOwogICAgIGZsb2F0IGNyb3NzMiA9IHAueCgpICogcS55KCkg
LSBxLngoKSAqIHAueSgpOwogCkBAIC00NDksOSArNDQ5LDkgQEAgc3RhdGljIEVkZ2UgY29tcHV0
ZUVkZ2UoY29uc3QgRmxvYXRQb2ludAogICAgICAgICAgICAgICAgIGNyb3NzMiAqIHNjYWxlKTsK
IH0KIAotc3RhdGljIEZsb2F0UG9pbnQgaW50ZXJzZWN0KGNvbnN0IEVkZ2UmIGEsIGNvbnN0IEVk
Z2UmIGIpCitzdGF0aWMgR3JhcGhpY3NQb2ludCBpbnRlcnNlY3QoY29uc3QgRWRnZSYgYSwgY29u
c3QgRWRnZSYgYikKIHsKLSAgICByZXR1cm4gRmxvYXRQb2ludCgKKyAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludCgKICAgICAgICAgKGEueSgpICogYi56KCkgLSBiLnkoKSAqIGEueigpKSAvIChhLngo
KSAqIGIueSgpIC0gYi54KCkgKiBhLnkoKSksCiAgICAgICAgIChhLngoKSAqIGIueigpIC0gYi54
KCkgKiBhLnooKSkgLyAoYi54KCkgKiBhLnkoKSAtIGEueCgpICogYi55KCkpKTsKIH0KQEAgLTUx
OCw4ICs1MTgsOCBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVzKGNvbnN0CiAg
ICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gbV90aWxpbmdEYXRhLnRpbGVCb3VuZHMobV90
aWxpbmdEYXRhLnRpbGVJbmRleCgwLCBqKSk7CiAgICAgICAgICAgICB0aWxlUmVjdC5tb3ZlKG1f
bGF5ZXJQb3NpdGlvbi54KCksIG1fbGF5ZXJQb3NpdGlvbi55KCkpOwogCi0gICAgICAgICAgICBG
bG9hdFBvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgcDIodGlsZVJlY3QueCgpLCB0aWxlUmVjdC5tYXhZKCkpOworICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7
CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHAyKHRpbGVSZWN0LngoKSwgdGlsZVJlY3QubWF4
WSgpKTsKIAogICAgICAgICAgICAgLy8gTWFwIHBvaW50cyB0byBkZXZpY2Ugc3BhY2UuCiAgICAg
ICAgICAgICBwMSA9IG1hdHJpeC5tYXBQb2ludChwMSk7CkBAIC01NjIsOCArNTYyLDggQEAgdm9p
ZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXdUaWxlcyhjb25zdAogCiAgICAgICAgICAgICBFZGdl
IGVkZ2VYID0gcmlnaHRFZGdlOwogICAgICAgICAgICAgaWYgKGkgPCAobV90aWxpbmdEYXRhLm51
bVRpbGVzWCgpIC0gMSkpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAxKHRpbGVSZWN0
Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHAyKHRp
bGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGlj
c1BvaW50IHAxKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QueSgpKTsKKyAgICAgICAgICAgICAg
ICBHcmFwaGljc1BvaW50IHAyKHRpbGVSZWN0Lm1heFgoKSwgdGlsZVJlY3QubWF4WSgpKTsKIAog
ICAgICAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNlIHNwYWNlLgogICAgICAgICAg
ICAgICAgIHAxID0gbWF0cml4Lm1hcFBvaW50KHAxKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVy
U3VyZmFjZUNocm9taXVtLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMTEgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBSZW5k
ZXJTdXJmYWNlQ2hybwogICAgIHJldHVybiBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCk7
CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdhYmxlQ29udGVudFJl
Y3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd2FibGVD
b250ZW50UmVjdCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGxvY2FsQ29udGVudFJlY3QoLTAu
NSAqIG1fY29udGVudFJlY3Qud2lkdGgoKSwgLTAuNSAqIG1fY29udGVudFJlY3QuaGVpZ2h0KCks
CisgICAgR3JhcGhpY3NSZWN0IGxvY2FsQ29udGVudFJlY3QoLTAuNSAqIG1fY29udGVudFJlY3Qu
d2lkdGgoKSwgLTAuNSAqIG1fY29udGVudFJlY3QuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdo
dCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IG1fZHJhd1RyYW5zZm9y
bS5tYXBSZWN0KGxvY2FsQ29udGVudFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCBkcmF3YWJsZUNv
bnRlbnRSZWN0ID0gbV9kcmF3VHJhbnNmb3JtLm1hcFJlY3QobG9jYWxDb250ZW50UmVjdCk7CiAg
ICAgaWYgKG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQogICAgICAgICBkcmF3YWJsZUNv
bnRlbnRSZWN0LnVuaXRlKG1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubWFwUmVjdChsb2NhbENvbnRl
bnRSZWN0KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgpA
QCAtNTgsMTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAg
IHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCi0gICAg
RmxvYXRQb2ludCBjb250ZW50UmVjdENlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCht
X2NvbnRlbnRSZWN0KS5jZW50ZXIoKTsgfQorICAgIEdyYXBoaWNzUG9pbnQgY29udGVudFJlY3RD
ZW50ZXIoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1JlY3QobV9jb250ZW50UmVjdCkuY2VudGVy
KCk7IH0KICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
UmVjdDsgfQogCiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSBSZW5k
ZXJTdXJmYWNlIGluY2x1ZGluZyBhbnkgcmVmbGVjdGlvbi4KLSAgICBGbG9hdFJlY3QgZHJhd2Fi
bGVDb250ZW50UmVjdCgpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBkcmF3YWJsZUNvbnRlbnRS
ZWN0KCkgY29uc3Q7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21p
dW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNs
dWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKQEAgLTE2OSw5
ICsxNjksOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgUmVs
ZWFzZURDKDAsIGRjKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJv
dW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAorR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIGZsb2F0IFNpbXBsZUZvbnRE
YXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJWRE1YUGFyc2VyLmgiCkBAIC0yMTIsOSArMjEyLDkgQEAg
dm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSBwbGF0Zm9ybURhdGEoKS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotRmxvYXRSZWN0IFNp
bXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAorR3JhcGhp
Y3NSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25z
dAogewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7
CiB9CiAgICAgCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjks
NyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgaWYgKGZy
YW1lLT5zdXJmYWNlVHlwZSgpID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6VHlwZVRleHR1cmUpIHsK
ICAgICAgICAgcmVsZWFzZUN1cnJlbnRGcmFtZSgpOwogICAgICAgICBzYXZlQ3VycmVudEZyYW1l
KGZyYW1lKTsKLSAgICAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CisgICAg
ICAgIG1fZGlydHlSZWN0LnNldFNpemUoR3JhcGhpY3NTaXplKCkpOwogICAgICAgICBtX2NvbnRl
bnRzRGlydHkgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1MSw3ICsxNTEs
NyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvCiAgICAgICAgIHVw
ZGF0ZVRleHR1cmUoY29udGV4dCwgdGV4dHVyZS5pZCwgdGV4dHVyZS5zaXplLCB0ZXh0dXJlRm9y
bWF0LCBmcmFtZS0+ZGF0YShwbGFuZSkpOwogICAgIH0KIAotICAgIG1fZGlydHlSZWN0LnNldFNp
emUoRmxvYXRTaXplKCkpOworICAgIG1fZGlydHlSZWN0LnNldFNpemUoR3JhcGhpY3NTaXplKCkp
OwogICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogCiAgICAgbV9wcm92aWRlci0+cHV0Q3Vy
cmVudEZyYW1lKGZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyAr
MTUwLDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoRwogCiAgICAg
aWYgKG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKSB7CiAgICAgICAgIGN0eC0+c2V0RmlsbENvbG9y
KENvbG9yKDAsIDAsIDAsIDE5MiksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBjdHgt
PmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBodWRTaXplLndpZHRoKCksIGh1ZFNpemUuaGVpZ2h0
KCkpKTsKKyAgICAgICAgY3R4LT5maWxsUmVjdChHcmFwaGljc1JlY3QoMCwgMCwgaHVkU2l6ZS53
aWR0aCgpLCBodWRTaXplLmhlaWdodCgpKSk7CiAgICAgfQogCiAgICAgaW50IGZwc0NvdW50ZXJI
ZWlnaHQgPSBtX21lZGl1bUZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKSArIDI7CkBA
IC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3RlBTQ291bnRlcihH
cgogCiAgICAgLy8gRHJhdyBiYWNrZ3JvdW5kLgogICAgIGN0eC0+c2V0RmlsbENvbG9yKENvbG9y
KDAsIDAsIDAsIDI1NSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGN0eC0+ZmlsbFJlY3Qo
RmxvYXRSZWN0KDIsIHRvcCwgdGV4dFdpZHRoICsgZ3JhcGhXaWR0aCwgaGVpZ2h0KSk7CisgICAg
Y3R4LT5maWxsUmVjdChHcmFwaGljc1JlY3QoMiwgdG9wLCB0ZXh0V2lkdGggKyBncmFwaFdpZHRo
LCBoZWlnaHQpKTsKIAogICAgIC8vIERyYXcgRlBTIHRleHQuCiAgICAgaWYgKG1fZmlsdGVyZWRG
cmFtZVRpbWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAgY29uc3QgSW50UmVj
dCBDQ0xheWVySW1wbDo6Z2V0RHJhd1JlY3QoKQogewogICAgIC8vIEZvcm0gdGhlIG1hdHJpeCB1
c2VkIGJ5IHRoZSBzaGFkZXIgdG8gbWFwIHRoZSBjb3JuZXJzIG9mIHRoZSBsYXllcidzCiAgICAg
Ly8gYm91bmRzIGludG8gdGhlIHZpZXcgc3BhY2UuCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgt
MC41ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyUmVj
dCgtMC41ICogYm91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGJvdW5kcygpLmhlaWdodCgpLCBib3Vu
ZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSk7CiAgICAgSW50UmVjdCBtYXBwZWRSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChkcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsK
ICAgICByZXR1cm4gbWFwcGVkUmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVm
aW5lIENDTGF5ZXJJbXBsX2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMo
KTsKIAotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyB9Ci0gICAgY29uc3QgRmxvYXRQb2lu
dCYgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CisgICAgdm9p
ZCBzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBhbmNob3JQb2ludCkgeyBtX2Fu
Y2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50JiBhbmNo
b3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnQ7IH0KIAogICAgIHZvaWQgc2V0
QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hv
clBvaW50WjsgfQogICAgIGZsb2F0IGFuY2hvclBvaW50WigpIGNvbnN0IHsgcmV0dXJuIG1fYW5j
aG9yUG9pbnRaOyB9CkBAIC05NSw4ICs5NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYWNp
dHkoZmxvYXQgb3BhY2l0eSkgeyBtX29wYWNpdHkgPSBvcGFjaXR5OyB9CiAgICAgZmxvYXQgb3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogCi0gICAgdm9pZCBzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0K
LSAgICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9u
KSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCiAgICAgdm9pZCBzZXRQcmVz
ZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKSB7IG1fcHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRDsg
fQogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlczNEOyB9
CkBAIC0xODUsNyArMTg1LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXllcklkOwogCiAgICAg
Ly8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2NpYXRlZCBMYXllckNocm9t
aXVtLgotICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1f
YW5jaG9yUG9pbnQ7CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CiAgICAgSW50U2l6ZSBtX2Jv
dW5kczsKICAgICBJbnRTaXplIG1fY29udGVudEJvdW5kczsKQEAgLTE5Niw3ICsxOTYsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBtX21hc2tzVG9Cb3VuZHM7CiAgICAgZmxvYXQgbV9vcGFjaXR5
OwotICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IG1fcG9zaXRp
b247CiAgICAgYm9vbCBtX3ByZXNlcnZlczNEOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
c3VibGF5ZXJUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyU29ydGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIHN0YXRpYyBXVEZMb2dDaGFu
bmVsIExvZ0NDTGF5ZXJTb3J0ZXIgPSAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
Ym9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMpCitzdGF0aWMgYm9vbCBwb2ludEluVHJpYW5nbGUoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBH
cmFwaGljc1BvaW50JiBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGMpCiB7CiAgICAgLy8gQWxnb3JpdGhtIGZyb20gaHR0cDovL3d3dy5ibGFja3Bh
d24uY29tL3RleHRzL3BvaW50aW5wb2x5L2RlZmF1bHQuaHRtbAogICAgIGZsb2F0IHgwID0gYy54
KCkgLSBhLngoKTsKQEAgLTc1LDE4ICs3NSwxOCBAQCBzdGF0aWMgYm9vbCBwb2ludEluVHJpYW5n
bGUoY29uc3QgRmxvYXRQCiAgICAgcmV0dXJuICh1ID4gMC4wZikgJiYgKHYgPiAwLjBmKSAmJiAo
dSArIHYgPCAxLjBmKTsKIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBwZXJwUHJvZHVjdChjb25z
dCBGbG9hdFNpemUmIHUsIGNvbnN0IEZsb2F0U2l6ZSYgdikKK2lubGluZSBzdGF0aWMgZmxvYXQg
cGVycFByb2R1Y3QoY29uc3QgR3JhcGhpY3NTaXplJiB1LCBjb25zdCBHcmFwaGljc1NpemUmIHYp
CiB7CiAgICAgcmV0dXJuIHUud2lkdGgoKSAqIHYuaGVpZ2h0KCkgLSB1LmhlaWdodCgpICogdi53
aWR0aCgpOwogfQogCi1pbmxpbmUgc3RhdGljIGZsb2F0IGlubmVyUHJvZHVjdChjb25zdCBGbG9h
dFNpemUmIHUsIGNvbnN0IEZsb2F0U2l6ZSYgdikKK2lubGluZSBzdGF0aWMgZmxvYXQgaW5uZXJQ
cm9kdWN0KGNvbnN0IEdyYXBoaWNzU2l6ZSYgdSwgY29uc3QgR3JhcGhpY3NTaXplJiB2KQogewog
ICAgIHJldHVybiB1LndpZHRoKCkgKiB2LndpZHRoKCkgKyB1LmhlaWdodCgpICogdi5oZWlnaHQo
KTsKIH0KIAogCi1pbmxpbmUgc3RhdGljIGJvb2wgcG9pbnRJbkNvbGluZWFyRWRnZShjb25zdCBG
bG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiKQor
aW5saW5lIHN0YXRpYyBib29sIHBvaW50SW5Db2xpbmVhckVkZ2UoY29uc3QgR3JhcGhpY3NQb2lu
dCYgcCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYikKIHsK
ICAgICAvLyBpZiBhYiBpcyBub3QgdmVydGljYWwuCiAgICAgaWYgKGEueCgpICE9IGIueCgpKQpA
QCAtOTcsMTEgKzk3LDExIEBAIGlubGluZSBzdGF0aWMgYm9vbCBwb2ludEluQ29saW5lYXJFZGdl
KGMKIAogLy8gVGVzdHMgaWYgdHdvIGVkZ2VzIGRlZmluZWQgYnkgdGhlaXIgZW5kcG9pbnRzIChh
LGIpIGFuZCAoYyxkKSBpbnRlcnNlY3QuIFJldHVybnMgdHJ1ZSBhbmQgdGhlCiAvLyBwb2ludCBv
ZiBpbnRlcnNlY3Rpb24gaWYgdGhleSBkbyBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgotc3RhdGljIGJv
b2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQmIGIs
IGNvbnN0IEZsb2F0UG9pbnQmIGMsIGNvbnN0IEZsb2F0UG9pbnQmIGQsIEZsb2F0UG9pbnQmIHIp
CitzdGF0aWMgYm9vbCBlZGdlRWRnZVRlc3QoY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYywgY29uc3QgR3JhcGhpY3NQ
b2ludCYgZCwgR3JhcGhpY3NQb2ludCYgcikKIHsKLSAgICBGbG9hdFNpemUgdSA9IGIgLSBhOwot
ICAgIEZsb2F0U2l6ZSB2ID0gZCAtIGM7Ci0gICAgRmxvYXRTaXplIHcgPSBhIC0gYzsKKyAgICBH
cmFwaGljc1NpemUgdSA9IGIgLSBhOworICAgIEdyYXBoaWNzU2l6ZSB2ID0gZCAtIGM7CisgICAg
R3JhcGhpY3NTaXplIHcgPSBhIC0gYzsKIAogICAgIGZsb2F0IGRlbm9tID0gcGVycFByb2R1Y3Qo
dSwgdik7CiAKQEAgLTE2MSw5ICsxNjEsOSBAQCB2b2lkIENDTGF5ZXJTb3J0ZXI6OkxheWVySW50
ZXJzZWN0b3I6OmdvCiAKIAogLy8gQ2hlY2tzIGlmIHNlZ21lbnQgcHEgaW50ZXJzZWN0cyBhbnkg
b2YgdGhlIHNpZGVzIG9mIHRyaWFuZ2xlIGFiYy4KLWJvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJ
bnRlcnNlY3Rvcjo6ZWRnZVRyaWFuZ2xlVGVzdChjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBG
bG9hdFBvaW50JiBxLCBjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiLCBj
b25zdCBGbG9hdFBvaW50JiBjKQorYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9y
OjplZGdlVHJpYW5nbGVUZXN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMpCiB7Ci0gICAgRmxvYXRQb2ludCByOworICAgIEdyYXBo
aWNzUG9pbnQgcjsKICAgICBpZiAoKGVkZ2VFZGdlVGVzdChwLCBxLCBhLCBiLCByKSAmJiBjaGVj
a1pEaWZmKHIpKQogICAgICAgICB8fCAoZWRnZUVkZ2VUZXN0KHAsIHEsIGEsIGMsIHIpICYmIGNo
ZWNrWkRpZmYocikpCiAgICAgICAgIHx8IChlZGdlRWRnZVRlc3QocCwgcSwgYiwgYywgcikgJiYg
Y2hlY2taRGlmZihyKSkpCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBDQ0xheWVyU29ydGVyOjpM
YXllckludGVyc2VjdG9yOjplZAogfQogCiAvLyBDaGVja3MgaWYgdHdvIGNvLXBsYW5hciB0cmlh
bmdsZXMgaW50ZXJzZWN0LgotYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjp0
cmlhbmdsZVRyaWFuZ2xlVGVzdChjb25zdCBGbG9hdFBvaW50JiBhMSwgY29uc3QgRmxvYXRQb2lu
dCYgYjEsIGNvbnN0IEZsb2F0UG9pbnQmIGMxLCBjb25zdCBGbG9hdFBvaW50JiBhMiwgY29uc3Qg
RmxvYXRQb2ludCYgYjIsIGNvbnN0IEZsb2F0UG9pbnQmIGMyKQorYm9vbCBDQ0xheWVyU29ydGVy
OjpMYXllckludGVyc2VjdG9yOjp0cmlhbmdsZVRyaWFuZ2xlVGVzdChjb25zdCBHcmFwaGljc1Bv
aW50JiBhMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYjEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMx
LCBjb25zdCBHcmFwaGljc1BvaW50JiBhMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYjIsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGMyKQogewogICAgIC8vIENoZWNrIGFsbCBlZGdlcyBvZiBmaXJzdCB0
cmlhbmdsZSB3aXRoIGVkZ2VzIG9mIHRoZSBzZWNvbmQgb25lLgogICAgIGlmIChlZGdlVHJpYW5n
bGVUZXN0KGExLCBiMSwgYTIsIGIyLCBjMikKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29sIENDTGF5
ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OnRyCiAvLyBsYXllcnMuIElmIHRoZSB2YWx1ZSBv
ZiBkaWZmZXJlbmNlIGlzIGhpZ2hlciB0aGFuIG91ciBlYXJseSBleGl0IHRocmVzaG9sZCB0aGVu
CiAvLyBpdCBtZWFucyB0aGF0IHRoZSB6IGRpZmZlcmVuY2UgaXMgY29uY2x1c2l2ZSBlbm91Z2gg
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrCiAvLyBvdGhlciBpbnRlcnNlY3Rpb24gcG9pbnRz
LgotYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpjaGVja1pEaWZmKGNvbnN0
IEZsb2F0UG9pbnQmIHApCitib29sIENDTGF5ZXJTb3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OmNo
ZWNrWkRpZmYoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBmbG9hdCB6YSA9IGxheWVy
WkZyb21Qcm9qZWN0ZWRQb2ludChub2RlQSwgcCk7CiAgICAgZmxvYXQgemIgPSBsYXllclpGcm9t
UHJvamVjdGVkUG9pbnQobm9kZUIsIHApOwpAQCAtMjI1LDEwICsyMjUsMTAgQEAgYm9vbCBDQ0xh
eWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjpjaAogLy8gdG8gcG9pbnQgcCB3aGljaCBsaWVz
IG9uIHRoZSB6ID0gMCBwbGFuZS4gSXQgZG9lcyBpdCBieSBjb21wdXRpbmcgdGhlCiAvLyBpbnRl
cnNlY3Rpb24gb2YgYSBsaW5lIHN0YXJ0aW5nIGZyb20gcCBhbG9uZyB0aGUgWiBheGlzIGFuZCB0
aGUgcGxhbmUKIC8vIG9mIHRoZSBsYXllci4KLWZsb2F0IENDTGF5ZXJTb3J0ZXI6OkxheWVySW50
ZXJzZWN0b3I6OmxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChHcmFwaE5vZGUqIGxheWVyLCBjb25z
dCBGbG9hdFBvaW50JiBwKQorZmxvYXQgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6
bGF5ZXJaRnJvbVByb2plY3RlZFBvaW50KEdyYXBoTm9kZSogbGF5ZXIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHApCiB7Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEIHpBeGlzKDAsIDAsIDEpOwotICAg
IEZsb2F0UG9pbnQzRCB3ID0gRmxvYXRQb2ludDNEKHAueCgpLCBwLnkoKSwgMCkgLSBsYXllci0+
b3JpZ2luOworICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCB6QXhpcygwLCAwLCAxKTsKKyAgICBH
cmFwaGljc1BvaW50M0QgdyA9IEdyYXBoaWNzUG9pbnQzRChwLngoKSwgcC55KCksIDApIC0gbGF5
ZXItPm9yaWdpbjsKIAogICAgIGZsb2F0IGQgPSBsYXllci0+bm9ybWFsLmRvdCh6QXhpcyk7CiAg
ICAgZmxvYXQgbiA9IC1sYXllci0+bm9ybWFsLmRvdCh3KTsKQEAgLTI5OCwxNSArMjk4LDE1IEBA
IHZvaWQgQ0NMYXllclNvcnRlcjo6Y3JlYXRlR3JhcGhOb2RlcyhMYXkKICAgICAgICAgICAgIGxh
eWVySGVpZ2h0ID0gMC41ICogbm9kZS5sYXllci0+Ym91bmRzKCkuaGVpZ2h0KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBGbG9hdFBvaW50M0QgYzEgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEZs
b2F0UG9pbnQzRCgtbGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQsIDApKTsKLSAgICAgICAgRmxvYXRQ
b2ludDNEIGMyID0gZHJhd1RyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50M0QobGF5ZXJXaWR0
aCwgbGF5ZXJIZWlnaHQsIDApKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIGMzID0gZHJhd1RyYW5z
Zm9ybS5tYXBQb2ludChGbG9hdFBvaW50M0QobGF5ZXJXaWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7
Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBjNCA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQ
b2ludDNEKC1sYXllcldpZHRoLCAtbGF5ZXJIZWlnaHQsIDApKTsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludDNEIGMxID0gZHJhd1RyYW5zZm9ybS5tYXBQb2ludChHcmFwaGljc1BvaW50M0QoLWxheWVy
V2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBjMiA9IGRy
YXdUcmFuc2Zvcm0ubWFwUG9pbnQoR3JhcGhpY3NQb2ludDNEKGxheWVyV2lkdGgsIGxheWVySGVp
Z2h0LCAwKSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBjMyA9IGRyYXdUcmFuc2Zvcm0ubWFw
UG9pbnQoR3JhcGhpY3NQb2ludDNEKGxheWVyV2lkdGgsIC1sYXllckhlaWdodCwgMCkpOworICAg
ICAgICBHcmFwaGljc1BvaW50M0QgYzQgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEdyYXBoaWNz
UG9pbnQzRCgtbGF5ZXJXaWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7CiAgICAgICAgIG5vZGUubm9y
bWFsID0gKGMyIC0gYzEpLmNyb3NzKGMzIC0gYzEpOwotICAgICAgICBub2RlLmMxID0gRmxvYXRQ
b2ludChjMS54KCksIGMxLnkoKSk7Ci0gICAgICAgIG5vZGUuYzIgPSBGbG9hdFBvaW50KGMyLngo
KSwgYzIueSgpKTsKLSAgICAgICAgbm9kZS5jMyA9IEZsb2F0UG9pbnQoYzMueCgpLCBjMy55KCkp
OwotICAgICAgICBub2RlLmM0ID0gRmxvYXRQb2ludChjNC54KCksIGM0LnkoKSk7CisgICAgICAg
IG5vZGUuYzEgPSBHcmFwaGljc1BvaW50KGMxLngoKSwgYzEueSgpKTsKKyAgICAgICAgbm9kZS5j
MiA9IEdyYXBoaWNzUG9pbnQoYzIueCgpLCBjMi55KCkpOworICAgICAgICBub2RlLmMzID0gR3Jh
cGhpY3NQb2ludChjMy54KCksIGMzLnkoKSk7CisgICAgICAgIG5vZGUuYzQgPSBHcmFwaGljc1Bv
aW50KGM0LngoKSwgYzQueSgpKTsKICAgICAgICAgbm9kZS5vcmlnaW4gPSBjMTsKICAgICAgICAg
bm9kZS5ib3VuZGluZ0JveC5maXRUb1BvaW50cyhub2RlLmMxLCBub2RlLmMyLCBub2RlLmMzLCBu
b2RlLmM0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclNvcnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaWZuZGVmIEND
TGF5ZXJTb3J0ZXJfaAogI2RlZmluZSBDQ0xheWVyU29ydGVyX2gKIAotI2luY2x1ZGUgIkZsb2F0
UG9pbnQzRC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KQEAgLTQ4LDEwICs0OCwxMCBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBHcmFwaE5vZGUg
ewogICAgICAgICBHcmFwaE5vZGUoQ0NMYXllckltcGwqIGNjbGF5ZXIpIDogbGF5ZXIoY2NsYXll
cikgeyB9OwogICAgICAgICBDQ0xheWVySW1wbCogbGF5ZXI7Ci0gICAgICAgIEZsb2F0UG9pbnQg
YzEsIGMyLCBjMywgYzQ7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWw7Ci0gICAgICAgIEZs
b2F0UG9pbnQzRCBvcmlnaW47Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICAg
ICAgR3JhcGhpY3NQb2ludCBjMSwgYzIsIGMzLCBjNDsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNE
IG5vcm1hbDsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIG9yaWdpbjsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kaW5nQm94OwogICAgICAgICBWZWN0b3I8R3JhcGhFZGdlKj4gaW5jb21pbmc7
CiAgICAgICAgIFZlY3RvcjxHcmFwaEVkZ2UqPiBvdXRnb2luZzsKICAgICB9OwpAQCAtNjgsMTIg
KzY4LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgdm9pZCBnbygpOwogCi0gICAgICAgIGZsb2F0
IGxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChHcmFwaE5vZGUqLCBjb25zdCBGbG9hdFBvaW50Jik7
Ci0gICAgICAgIGJvb2wgdHJpYW5nbGVUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIGJvb2wgZWRnZVRy
aWFuZ2xlVGVzdChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAg
ICBib29sIGNoZWNrWkRpZmYoY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICBmbG9hdCBsYXll
clpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOwor
ICAgICAgICBib29sIHRyaWFuZ2xlVHJpYW5nbGVUZXN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBj
b25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAg
ICAgICBib29sIGVkZ2VUcmlhbmdsZVRlc3QoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICAgICAgYm9vbCBjaGVja1pEaWZmKGNvbnN0IEdy
YXBoaWNzUG9pbnQmKTsKIAotICAgICAgICBGbG9hdFBvaW50IGludGVyc2VjdGlvblBvaW50Owor
ICAgICAgICBHcmFwaGljc1BvaW50IGludGVyc2VjdGlvblBvaW50OwogICAgICAgICBHcmFwaE5v
ZGUqIG5vZGVBOwogICAgICAgICBHcmFwaE5vZGUqIG5vZGVCOwogICAgICAgICBmbG9hdCB6RGlm
ZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckNsdXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NM
YXllckNsdXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnNldE5lZWRzRGlzcGwKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNz
TGF5ZXJDbHV0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNs
dXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+R3JhcGhpY3NMYXllckNsdXR0ZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRm9udEVmbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9G
b250RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDEyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRl
eHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBG
bG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29u
c3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRv
bWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywg
aW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQpAQCAtNjcsMTAgKzY3LDEwIEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXgKICAgICByZXR1cm4gMDsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCwgaW50LCBpbnQpIGNvbnN0CitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50LCBpbnQs
IGludCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0xheWVyRWZsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NMYXll
ckVmbC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzTGF5ZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckVmbDo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJFZmw6OnNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFwaGljc0xheWVyRWZsOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBo
aWNzTGF5ZXJFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9lZmwvR3JhcGhpY3NMYXllckVmbC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0xheWVyRWZsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5
ZXJFZmwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkZFQmxlbmQuaCIK
IAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcs
NyArMjI3LDcgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQogICAgICAgICByZXR1cm47CiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KTsKIAotICAgIEZsb2F0UmVjdCBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSk7Cisg
ICAgR3JhcGhpY3NSZWN0IHNyY1JlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgLTEsIC0xKTsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoK
ICAgICAgICAgZmlsdGVyQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKGluMi0+YXNJbWFnZUJ1ZmZl
cigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4
KEZpbHRlciogZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBi
b29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxw
aGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKICAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIpCiAgICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNv
cihkaXZpc29yKQpAQCAtNTIsNyArNTIsNyBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KEZpbHRlCiAKIFBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1h
dHJpeDo6Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAog
ICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxV
bml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5l
bE1hdHJpeCkKKyAgICBjb25zdCBHcmFwaGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29s
IHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBrZXJuZWxTaXpl
LCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3Ro
LAogICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKQEAgLTEzMSwxMiArMTMx
LDEyIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0RWRnZU1vZGUoRWRnZU0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotRmxvYXRQb2ludCBGRUNvbnZvbHZlTWF0cml4OjprZXJuZWxVbml0TGVu
Z3RoKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6a2VybmVsVW5pdExl
bmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aDsgCiB9CiAKLWJv
b2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9hdFBvaW50
JiBrZXJuZWxVbml0TGVuZ3RoKQorYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRLZXJuZWxVbml0
TGVuZ3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgpCiB7CiAgICAgaWYg
KG1fa2VybmVsVW5pdExlbmd0aCA9PSBrZXJuZWxVbml0TGVuZ3RoKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29udm9sdmVNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogCiAjaWYgRU5BQkxFKEZJTFRFUlMp
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvQWx3
YXlzSW5saW5lLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBDYW52YXNQaXhlbEFycmF5OwogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29udm9sdmVN
YXRyaXg+IGNyZWF0ZShGaWx0ZXIqLCBjb25zdCBJbnRTaXplJiwKLSAgICAgICAgICAgIGZsb2F0
LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQm
LAorICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlw
ZSwgY29uc3QgR3JhcGhpY3NQb2ludCYsCiAgICAgICAgICAgICBib29sLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+Jik7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdDsKQEAgLTY2LDggKzY2
LDggQEAgcHVibGljOgogICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0OwogICAgIGJv
b2wgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKIAotICAgIEZsb2F0UG9pbnQga2VybmVsVW5p
dExlbmd0aCgpIGNvbnN0OwotICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgR3JhcGhpY3NQb2ludCBrZXJuZWxVbml0TGVuZ3RoKCkgY29uc3Q7Cisg
ICAgYm9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKIAogICAg
IGJvb2wgcHJlc2VydmVBbHBoYSgpIGNvbnN0OwogICAgIGJvb2wgc2V0UHJlc2VydmVBbHBoYShi
b29sKTsKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgRkVDb252b2x2
ZU1hdHJpeChGaWx0ZXIqLCBjb25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LAotICAgICAgICAg
ICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29s
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mKTsKIAogICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBj
bGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CkBAIC0xMjgs
NyArMTI4LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2JpYXM7CiAgICAgSW50UG9pbnQgbV90
YXJnZXRPZmZzZXQ7CiAgICAgRWRnZU1vZGVUeXBlIG1fZWRnZU1vZGU7Ci0gICAgRmxvYXRQb2lu
dCBtX2tlcm5lbFVuaXRMZW5ndGg7CisgICAgR3JhcGhpY3NQb2ludCBtX2tlcm5lbFVuaXRMZW5n
dGg7CiAgICAgYm9vbCBtX3ByZXNlcnZlQWxwaGE7CiAgICAgVmVjdG9yPGZsb2F0PiBtX2tlcm5l
bE1hdHJpeDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWluCiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsK
ICAgICBBU1NFUlQoZmlsdGVyKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9
IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0
IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7
CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRS
ZWN0KTsKICAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jp
em9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKICAg
ICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVjdCk7CiAgICAg
YWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CkBAIC04OCwxMSAr
ODgsMTEgQEAgdm9pZCBGRURyb3BTaGFkb3c6OmFwcGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFNpemUgYmx1clJh
ZGl1cyhmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fc3RkWCksIGZpbHRlci0+YXBwbHlW
ZXJ0aWNhbFNjYWxlKG1fc3RkWSkpOwotICAgIEZsb2F0U2l6ZSBvZmZzZXQoZmlsdGVyLT5hcHBs
eUhvcml6b250YWxTY2FsZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkp
OworICAgIEdyYXBoaWNzU2l6ZSBibHVyUmFkaXVzKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2Nh
bGUobV9zdGRYKSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9zdGRZKSk7CisgICAgR3Jh
cGhpY3NTaXplIG9mZnNldChmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0
ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1Jl
Z2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsK
KyAgICBHcmFwaGljc1JlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEdyYXBoaWNzUmVjdCBkcmF3aW5nUmVn
aW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNl
dC5tb3ZlKG9mZnNldCk7CiAKICAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBpbi0+YXNJ
bWFnZUJ1ZmZlcigpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgRkVEcm9wU2hhZG93OjphcHBs
eSgpCiAgICAgcmVzdWx0SW1hZ2UtPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoc3JjUGl4ZWxB
cnJheS5nZXQoKSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCkpOwog
CiAgICAgcmVzdWx0Q29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJj
ZUluKTsKLSAgICByZXN1bHRDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgIHJlc3VsdENvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFw
aGljc1BvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcmVzdWx0Q29udGV4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZURlc3RpbmF0aW9uT3Zlcik7CiAKICAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGRyYXdpbmdSZWdpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBGRUZsb29kOjphcHBseSgpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENvbG9yIGNvbG9yID0gY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShmbG9vZENv
bG9yKCkucmdiKCksIGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSksIGNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLT5maWxsUmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSksIGNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAogdm9p
ZCBGRUZsb29kOjpkdW1wKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBGRUdh
dXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZQogCiB2b2lkIEZFR2F1c3NpYW5CbHVyOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFp
bnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRS
ZWN0KCk7CiAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7
CiAKICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIGlubGlu
ZSB2b2lkIEZFTGlnaHRpbmc6OmlubGluZVNldFBpeGVsKGkKICAgICAgICAgaWYgKG1fbGlnaHRp
bmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56
KCkgLyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3I7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50
aW5nRGF0YS5saWdodFZlY3RvcjsKICAgICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxm
d2F5VmVjdG9yLnooKSArIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAg
ICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsK
ICAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKQEAgLTE5MywxNiArMTkz
LDE2IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OmlubGluZVNldFBpeGVsKGkKICAgICAgICAg
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5
VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9y
OwotICAgICAgICBub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vcm1hbDJEVmVjdG9yLngoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7Ci0gICAgICAgIG5vcm1h
bFZlY3Rvci5zZXRZKGZhY3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0b3Iu
eSgpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIG5vcm1h
bFZlY3RvcjsKKyAgICAgICAgbm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRpY19jYXN0
PEdyYXBoaWNzVW5pdD4obm9ybWFsMkRWZWN0b3IueCgpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsK
KyAgICAgICAgbm9ybWFsVmVjdG9yLnNldFkoZmFjdG9yWSAqIHN0YXRpY19jYXN0PEdyYXBoaWNz
VW5pdD4obm9ybWFsMkRWZWN0b3IueSgpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKICAgICAgICAg
bm9ybWFsVmVjdG9yLnNldFooMSk7CiAgICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9
IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKIAogICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0g
RkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQogICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZl
Y3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZl
Y3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvcjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9p
bnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yOwogICAgICAgICAg
ICAgaGFsZndheVZlY3Rvci5zZXRaKGhhbGZ3YXlWZWN0b3IueigpICsgcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGgg
PSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwogICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBv
bmVudCA9PSAxKQpAQCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0
aW5nKEJ5dGVBcnJheSoKICAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lk
dGggKiBjUGl4ZWxTaXplOwogICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0g
MTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAgICBwYWlu
dGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobV9saWdodGluZ0NvbG9yLnJlZCgp
LCBtX2xpZ2h0aW5nQ29sb3IuZ3JlZW4oKSwgbV9saWdodGluZ0NvbG9yLmJsdWUoKSk7CisgICAg
cGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gR3JhcGhpY3NQb2ludDNEKG1fbGlnaHRpbmdDb2xv
ci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5ibHVlKCkp
OwogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEocGFpbnRpbmdEYXRhKTsKIAog
ICAgIC8vIFRvcC9MZWZ0IGNvcm5lci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIGZsb2F0IEZFTW9y
cGhvbG9neTo6cmFkaXVzWSgpIGNvbnN0CiAKIHZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBwYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBGaWx0ZXIqIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwogICAgIHBhaW50UmVjdC5pbmZsYXRlWChmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fcmFkaXVzWCkpOwogICAgIHBhaW50UmVjdC5pbmZsYXRlWShmaWx0
ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3JhZGl1c1kpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgRkVPZmZz
ZXQ6OnNldER5KGZsb2F0IGR5KQogCiB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5h
YnNvbHV0ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBwYWludFJlY3QgPSBpbnB1dEVm
ZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwogICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2Nh
bGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKICAgICBwYWludFJl
Y3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgRkVP
ZmZzZXQ6OmFwcGx5KCkKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkp
OwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1JlY3QgZHJhd2luZ1Jl
Z2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CiAgICAgZHJhd2luZ1JlZ2lv
bi5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlW
ZXJ0aWNhbFNjYWxlKG1fZHkpKTsKICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1h
Z2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2lu
Z1JlZ2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsOSArNjIsOSBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogCiAgICAgLy8gU291cmNlIGlucHV0
IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lv
biBidXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJh
Y2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgot
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQ
b2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9h
dFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Cisg
ICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKKyAgICBHcmFw
aGljc1BvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOworICAg
IEdyYXBoaWNzUG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRp
b24oKTsKICAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBl
U291cmNlSW5wdXQpIHsKICAgICAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsK
ICAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOwpAQCAtODYsNyArODYs
NyBAQCB2b2lkIEZFVGlsZTo6YXBwbHkoKQogICAgIHBhdHRlcm4tPnNldFBhdHRlcm5TcGFjZVRy
YW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQtPnNldEZp
bGxQYXR0ZXJuKHBhdHRlcm4pOwotICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgZmlsdGVy
Q29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw3IEBA
IGlubGluZSB2b2lkIGNoZWNrTm9pc2UoaW50JiBub2lzZVZhbHVlLCAKICAgICAgICAgbm9pc2VW
YWx1ZSAtPSBuZXdWYWx1ZSAtIDE7CiB9CiAKLWZsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChp
bnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
IG5vaXNlVmVjdG9yKQorZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJEKGludCBjaGFubmVsLCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbm9pc2VWZWN0
b3IpCiB7CiAgICAgc3RydWN0IE5vaXNlIHsKICAgICAgICAgaW50IG5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWU7CkBAIC0yNzYsNyArMjc2LDcgQEAgZmxvYXQgRkVUdXJidWxlbmNlOjpub2lzZTJE
KGludCBjaGFubmVsLAogICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5LCBhLCBiKTsK
IH0KIAotdW5zaWduZWQgY2hhciBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1
ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCit1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRl
VHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBmbG9hdCB0aWxlV2lk
dGggPSBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpOwogICAgIEFTU0VSVCh0aWxlV2lk
dGggPiAwKTsKQEAgLTMxMCw3ICszMTAsNyBAQCB1bnNpZ25lZCBjaGFyIEZFVHVyYnVsZW5jZTo6
Y2FsY3VsYXRlVHVyCiAgICAgICAgIHBhaW50aW5nRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2Ug
KyBwYWludGluZ0RhdGEuaGVpZ2h0OwogICAgIH0KICAgICBmbG9hdCB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgPSAwOwotICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogbV9i
YXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogbV9iYXNlRnJlcXVlbmN5WSk7CisgICAgR3JhcGhp
Y3NQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBtX2Jhc2VGcmVxdWVuY3lYLCBwb2ludC55
KCkgKiBtX2Jhc2VGcmVxdWVuY3lZKTsKICAgICBmbG9hdCByYXRpbyA9IDE7CiAgICAgZm9yIChp
bnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewogICAgICAg
ICBpZiAobV90eXBlID09IEZFVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCAr
MTA4LDggQEAgcHJpdmF0ZToKICAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyKiwgVHVyYnVsZW5jZVR5
cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CiAKICAgICBpbmxpbmUgdm9pZCBp
bml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgZmxvYXQgbm9pc2UyRChpbnQgY2hhbm5lbCwg
UGFpbnRpbmdEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHVuc2lnbmVkIGNoYXIgY2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYs
IGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICBmbG9hdCBub2lzZTJEKGludCBjaGFubmVsLCBQYWlu
dGluZ0RhdGEmLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgdW5zaWduZWQgY2hhciBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYpOwogICAgIGlubGluZSB2b2lkIGZpbGxSZWdpb24oQnl0ZUFy
cmF5KiwgUGFpbnRpbmdEYXRhJiwgaW50LCBpbnQpOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90
eXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDgg
QEAKICNkZWZpbmUgRmlsdGVyX2gKIAogI2lmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNDEsMjQgKzQxLDI0IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTb3VyY2VJbWFnZShQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gc291cmNlSW1hZ2U7IH0K
ICAgICAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFn
ZS5nZXQoKTsgfQogCi0gICAgICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0RmlsdGVyUmVz
b2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0ZXJSZXNv
bHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQorICAgICAgICBHcmFwaGljc1NpemUgZmlsdGVy
UmVzb2x1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQorICAgICAg
ICB2b2lkIHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgR3JhcGhpY3NTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KIAogICAg
ICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5SG9yaXpvbnRhbFNjYWxlKGZsb2F0IHZhbHVlKSBjb25z
dCB7IHJldHVybiB2YWx1ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpOyB9CiAgICAgICAg
IHZpcnR1YWwgZmxvYXQgYXBwbHlWZXJ0aWNhbFNjYWxlKGZsb2F0IHZhbHVlKSBjb25zdCB7IHJl
dHVybiB2YWx1ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbi5oZWlnaHQoKTsgfQogICAgICAgICAKLSAg
ICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAg
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgR3JhcGhpY3NSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKKyAgICAg
ICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwogICAgICAg
ICAKLSAgICAgICAgdmlydHVhbCBGbG9hdFBvaW50IG1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQoKTsgfQorICAg
ICAgICB2aXJ0dWFsIEdyYXBoaWNzUG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChj
b25zdCBHcmFwaGljc1BvaW50JikgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NQb2ludCgpOyB9CiAK
LSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25z
dCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBm
aWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9
CiAKICAgICAgICAgdmlydHVhbCBib29sIGVmZmVjdEJvdW5kaW5nQm94TW9kZSgpIGNvbnN0ID0g
MDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJ
bWFnZTsKLSAgICAgICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKKyAgICAgICAgR3Jh
cGhpY3NTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBGaWx0ZXJFZmZlY3RfaAogCiAjaWYgRU5B
QkxFKEZJTFRFUlMpCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5o
PgpAQCAtNzYsOCArNzYsOCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KICAgICB2b2lkIHNldEFi
c29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJz
b2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IG1h
eEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lk
IHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4
RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0gCisgICAgR3JhcGhpY3NSZWN0IG1heEVmZmVj
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KKyAgICB2b2lkIHNldE1h
eEVmZmVjdFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZm
ZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0gCiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKSA9IDA7CkBAIC0xMDMsMTEgKzEwMywxMSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hhc0hlaWdodDsg
fQogICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9oYXNIZWlnaHQgPSB2YWx1
ZTsgfQogCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b247IH0KKyAgICBHcmFwaGljc1JlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICB2b2lkIHNldEZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBHcmFwaGljc1JlY3QmIGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbjsgfQogCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25zdCB7IHJl
dHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMo
Y29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9
IGVmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICBHcmFwaGljc1JlY3QgZWZmZWN0Qm91bmRhcmllcygp
IGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQorICAgIHZvaWQgc2V0RWZmZWN0
Qm91bmRhcmllcyhjb25zdCBHcmFwaGljc1JlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZl
Y3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQogCiAgICAgRmlsdGVyKiBmaWx0ZXIo
KSB7IHJldHVybiBtX2ZpbHRlcjsgfQogCkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZH
IHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBz
cGFjZS4KICAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmln
Z2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7
CisgICAgR3JhcGhpY3NSZWN0IG1fbWF4RWZmZWN0UmVjdDsKICAgICBGaWx0ZXIqIG1fZmlsdGVy
OwogCiBwcml2YXRlOgpAQCAtMTQxLDExICsxNDEsMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRo
ZSBzdWJyZWdpb24gb2YgYSBmaWx0ZXIgcHJpbWl0aXZlIGFjY29yZGluZyB0byB0aGUgU1ZHIEZp
bHRlciBzcGVjaWZpY2F0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIC8vIFRoaXMgaXMg
U1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0byBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlLgotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAg
ICBHcmFwaGljc1JlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CiAKICAgICAvLyB4LCB5
LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBhY3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVk
IHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9uIG9mIHRoZQogICAgIC8vIGZpbHRlciBwcmltaXRp
dmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7Cisg
ICAgR3JhcGhpY3NSZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKICAgICBib29sIG1faGFzWDsKICAg
ICBib29sIG1faGFzWTsKICAgICBib29sIG1faGFzV2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2RlZmlu
ZSBMaWdodFNvdXJjZV9oCiAKICNpZiBFTkFCTEUoRklMVEVSUykKLSNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTQ5LDEyICs0OSwx
MiBAQCBwdWJsaWM6CiAgICAgLy8gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGxvd2luZyBzdHJ1Y3R1
cmUKICAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKICAgICAgICAgLy8gU1ZHRkVMaWdodGluZyBh
bHNvIHVzZSB0aGVtCi0gICAgICAgIEZsb2F0UG9pbnQzRCBsaWdodFZlY3RvcjsKLSAgICAgICAg
RmxvYXRQb2ludDNEIGNvbG9yVmVjdG9yOworICAgICAgICBHcmFwaGljc1BvaW50M0QgbGlnaHRW
ZWN0b3I7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBjb2xvclZlY3RvcjsKICAgICAgICAgZmxv
YXQgbGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIC8vIFByaXZhdGUgbWVtYmVycwotICAgICAg
ICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uVmVjdG9yOwotICAgICAgICBGbG9hdFBvaW50M0QgcHJp
dmF0ZUNvbG9yVmVjdG9yOworICAgICAgICBHcmFwaGljc1BvaW50M0QgZGlyZWN0aW9uVmVjdG9y
OworICAgICAgICBHcmFwaGljc1BvaW50M0QgcHJpdmF0ZUNvbG9yVmVjdG9yOwogICAgICAgICBm
bG9hdCBjb25lQ3V0T2ZmTGltaXQ7CiAgICAgICAgIGZsb2F0IGNvbmVGdWxsTGlnaHQ7CiAgICAg
ICAgIGludCBzcGVjdWxhckV4cG9uZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgYm9vbCBQb2ludExpZ2h0U291cmNlOjpzZXRaKGZsb2F0IHopCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGbG9hdFBvaW50M0QmIHApCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKQogewogICAgIHRzIDw8ICJ4PSIgPDwg
cC54KCkgPDwgIiB5PSIgPDwgcC55KCkgPDwgIiB6PSIgPDwgcC56KCk7CiAgICAgcmV0dXJuIHRz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFBvaW50TGlnaHRTb3VyY2UgOiBwdWJsaWMgTGlnaHRTb3VyY2UgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBvaW50TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBv
aW50M0QmIHBvc2l0aW9uKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvaW50TGlnaHRTb3VyY2U+
IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQb2ludExpZ2h0U291cmNlKHBvc2l0aW9uKSk7CiAgICAgfQog
Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIGJvb2wgc2V0WChmbG9hdCk7CiAgICAgYm9vbCBzZXRZ
KGZsb2F0KTsKICAgICBib29sIHNldFooZmxvYXQpOwpAQCAtNDYsMTMgKzQ2LDEzIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFBvaW50TGlnaHRTb3VyY2UoY29uc3QgRmxv
YXRQb2ludDNEJiBwb3NpdGlvbikKKyAgICBQb2ludExpZ2h0U291cmNlKGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgcG9zaXRpb24pCiAgICAgICAgIDogTGlnaHRTb3VyY2UoTFNfUE9JTlQpCiAgICAg
ICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAgICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2lu
dDNEIG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1fcG9zaXRpb247CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBjb25zdCBBdG9taWNTdHJp
bmcmIFNvdXJjZUFscGhhOjplZmZlY3ROCiB2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsK
LSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKKyAg
ICBHcmFwaGljc1JlY3QgcGFpbnRSZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKICAg
ICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmls
dGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CkBAIC02Myw3ICs2Myw3IEBAIHZv
aWQgU291cmNlQWxwaGE6OmFwcGx5KCkKIAogICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKIAot
ICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSk7CisgICAgR3JhcGhpY3NSZWN0IGltYWdlUmVjdChHcmFwaGljc1BvaW50KCksIGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqZmlsdGVyQ29udGV4dCk7CiAgICAgZmlsdGVyQ29udGV4dC0+Y2xp
cFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBpbWFnZVJlY3QpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTb3VyY2VHcmFwaGljOjplZmZl
Ywogdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAg
ICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRS
ZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgcGFpbnRS
ZWN0ID0gZmlsdGVyLT5zb3VyY2VJbWFnZVJlY3QoKTsKICAgICBwYWludFJlY3Quc2NhbGUoZmls
dGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9u
KCkuaGVpZ2h0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRSZWN0KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIGJvb2wgU3Bv
dExpZ2h0U291cmNlOjpzZXRMaW1pdGluZ0NvbmVBbmcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0
UG9pbnQzRCYgcCkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBHcmFwaGljc1BvaW50M0QmIHApCiB7CiAgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8
PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9IiA8PCBwLnooKTsKICAgICByZXR1cm4gdHM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTcgKzMwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3BvdExp
Z2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTcG90TGlnaHRTb3VyY2U+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0
aW9uLAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwgZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCwgZmxvYXQgbGltaXRpbmdDb25lQW5nbGUpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3BvdExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlv
biwKKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBkaXJlY3Rpb24sIGZsb2F0IHNwZWN1
bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTcG90TGlnaHRTb3VyY2UocG9zaXRpb24sIGRpcmVjdGlvbiwgc3Bl
Y3VsYXJFeHBvbmVudCwgbGltaXRpbmdDb25lQW5nbGUpKTsKICAgICB9CiAKLSAgICBjb25zdCBG
bG9hdFBvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CiAgICAgYm9vbCBzZXRYKGZsb2F0KTsKICAgICBib29sIHNldFkoZmxvYXQpOwogICAg
IGJvb2wgc2V0WihmbG9hdCk7Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYg
ZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KICAgICBib29sIHNldFBv
aW50c0F0WChmbG9hdCk7CiAgICAgYm9vbCBzZXRQb2ludHNBdFkoZmxvYXQpOwogICAgIGJvb2wg
c2V0UG9pbnRzQXRaKGZsb2F0KTsKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgU3BvdExpZ2h0U291cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9z
aXRpb24sIGNvbnN0IEZsb2F0UG9pbnQzRCYgZGlyZWN0aW9uLAorICAgIFNwb3RMaWdodFNvdXJj
ZShjb25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uLCBjb25zdCBHcmFwaGljc1BvaW50M0Qm
IGRpcmVjdGlvbiwKICAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQgbGltaXRp
bmdDb25lQW5nbGUpCiAgICAgICAgIDogTGlnaHRTb3VyY2UoTFNfU1BPVCkKICAgICAgICAgLCBt
X3Bvc2l0aW9uKHBvc2l0aW9uKQpAQCAtNjYsOCArNjYsOCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICB9CiAKLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9k
aXJlY3Rpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQ
b2ludDNEIG1fZGlyZWN0aW9uOwogCiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAg
IGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0xNDQsOSArMTQ0LDkgQEAgdm9pZCBT
aW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2gg
PSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZv
bnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAorR3JhcGhpY3NSZWN0
IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAogewot
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAK
IGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uQ2xhc3NpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTkgKzM2LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHVzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6YXBwcm94RXF1YWw7CiB1c2luZyBMb29wQmxp
bm5NYXRoVXRpbHM6OnJvdW5kVG9aZXJvOwogCi1Mb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQg
TG9vcEJsaW5uQ2xhc3NpZmllcjo6Y2xhc3NpZnkoY29uc3QgRmxvYXRQb2ludCYgYzAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgYzMpCitMb29wQmxpbm5DbGFzc2lmaWVyOjpSZXN1bHQgTG9vcEJsaW5uQ2xhc3NpZmll
cjo6Y2xhc3NpZnkoY29uc3QgR3JhcGhpY3NQb2ludCYgYzAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYg
YzMpCiB7CiAgICAgLy8gQ29uc3VsdCB0aGUgY2hhcHRlciBmb3IgdGhlIGRlZmluaXRpb25zIG9m
IHRoZSBmb2xsb3dpbmcKICAgICAvLyAodGVyc2UpIHZhcmlhYmxlIG5hbWVzLiBOb3RlIHRoYXQg
dGhlIGIwLi5iMyBjb29yZGluYXRlcyBhcmUKICAgICAvLyBob21vZ2VuZW91cywgc28gdGhlICJ6
IiB2YWx1ZSAoYWN0dWFsbHkgdGhlIHcgY29vcmRpbmF0ZSkgbXVzdAogICAgIC8vIGJlIDEuMC4K
LSAgICBGbG9hdFBvaW50M0QgYjAoYzAueCgpLCBjMC55KCksIDEuMGYpOwotICAgIEZsb2F0UG9p
bnQzRCBiMShjMS54KCksIGMxLnkoKSwgMS4wZik7Ci0gICAgRmxvYXRQb2ludDNEIGIyKGMyLngo
KSwgYzIueSgpLCAxLjBmKTsKLSAgICBGbG9hdFBvaW50M0QgYjMoYzMueCgpLCBjMy55KCksIDEu
MGYpOworICAgIEdyYXBoaWNzUG9pbnQzRCBiMChjMC54KCksIGMwLnkoKSwgMS4wZik7CisgICAg
R3JhcGhpY3NQb2ludDNEIGIxKGMxLngoKSwgYzEueSgpLCAxLjBmKTsKKyAgICBHcmFwaGljc1Bv
aW50M0QgYjIoYzIueCgpLCBjMi55KCksIDEuMGYpOworICAgIEdyYXBoaWNzUG9pbnQzRCBiMyhj
My54KCksIGMzLnkoKSwgMS4wZik7CiAKICAgICAvLyBDb21wdXRlIGExLi5hMy4KICAgICBmbG9h
dCBhMSA9IGIwICogYjMuY3Jvc3MoYjIpOwpAQCAtNjYsNyArNjYsNyBAQCBMb29wQmxpbm5DbGFz
c2lmaWVyOjpSZXN1bHQgTG9vcEJsaW5uQ2xhCiAgICAgLy8gdGhlIHZlY3RvciBkZWZpbmVkIGJ5
IChkMSwgZDIsIGQzKSwgdGhpcyBmaXhlcyB0aGUgcHJvYmxlbSBvZiB0aGUKICAgICAvLyB0ZXh0
dXJlIGNvb3JkaW5hdGVzIGdldHRpbmcgdG9vIGxhcmdlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZQog
ICAgIC8vIGNsYXNzaWZpY2F0aW9uIHJlc3VsdHMuCi0gICAgRmxvYXRQb2ludDNEIG5kKGQxLCBk
MiwgZDMpOworICAgIEdyYXBoaWNzUG9pbnQzRCBuZChkMSwgZDIsIGQzKTsKICAgICBuZC5ub3Jt
YWxpemUoKTsKICAgICBkMSA9IG5kLngoKTsKICAgICBkMiA9IG5kLnkoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlu
bkNsYXNzaWZpZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsK
K2NsYXNzIEdyYXBoaWNzUG9pbnQ7CiAKIC8vIENsYXNzaWZpZXMgY3ViaWMgY3VydmVzIGludG8g
c3BlY2lmaWMgdHlwZXMuCiBjbGFzcyBMb29wQmxpbm5DbGFzc2lmaWVyIHsKQEAgLTcwLDEwICs3
MCwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBDbGFzc2lmaWVzIHRoZSBnaXZlbiBjdWJpYyBiZXpp
ZXIgY3VydmUgc3RhcnRpbmcgYXQgYzAsIGVuZGluZwogICAgIC8vIGF0IGMzLCBhbmQgYWZmZWN0
ZWQgYnkgY29udHJvbCBwb2ludHMgYzEgYW5kIGMyLgotICAgIHN0YXRpYyBSZXN1bHQgY2xhc3Np
ZnkoY29uc3QgRmxvYXRQb2ludCYgYzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBjMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
YzMpOworICAgIHN0YXRpYyBSZXN1bHQgY2xhc3NpZnkoY29uc3QgR3JhcGhpY3NQb2ludCYgYzAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBjMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYzMpOwogCiBwcml2YXRl
OgogICAgIC8vIFRoaXMgY2xhc3MgZG9lcyBub3QgbmVlZCB0byBiZSBpbnN0YW50aWF0ZWQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxU
cmlhbmd1bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2Fs
VHJpYW5ndWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDEwIEBAIHZvaWQg
TG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OlRyaWFuZ2wKICAgICAvLyBhbHdheXMgc3BlY2lm
aWVkIGluIGNvdW50ZXJjbG9ja3dpc2Ugb3JkZXIuIFRoaXMgb3JkZXJzIHRoZQogICAgIC8vIHZl
cnRpY2VzIGNhbm9uaWNhbGx5IHdoZW4gd2Fsa2luZyB0aGUgaW50ZXJpb3IgZWRnZXMgZnJvbSB0
aGUKICAgICAvLyBzdGFydCB0byB0aGUgZW5kIHZlcnRleC4KLSAgICBGbG9hdFBvaW50M0QgcG9p
bnQwKG1fdmVydGljZXNbMF0tPnh5Q29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRQb2ludDNEIHBv
aW50MShtX3ZlcnRpY2VzWzFdLT54eUNvb3JkaW5hdGVzKCkpOwotICAgIEZsb2F0UG9pbnQzRCBw
b2ludDIobV92ZXJ0aWNlc1syXS0+eHlDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFBvaW50M0Qg
Y3Jvc3NQcm9kdWN0ID0gKHBvaW50MSAtIHBvaW50MCkuY3Jvc3MocG9pbnQyIC0gcG9pbnQwKTsK
KyAgICBHcmFwaGljc1BvaW50M0QgcG9pbnQwKG1fdmVydGljZXNbMF0tPnh5Q29vcmRpbmF0ZXMo
KSk7CisgICAgR3JhcGhpY3NQb2ludDNEIHBvaW50MShtX3ZlcnRpY2VzWzFdLT54eUNvb3JkaW5h
dGVzKCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBwb2ludDIobV92ZXJ0aWNlc1syXS0+eHlDb29y
ZGluYXRlcygpKTsKKyAgICBHcmFwaGljc1BvaW50M0QgY3Jvc3NQcm9kdWN0ID0gKHBvaW50MSAt
IHBvaW50MCkuY3Jvc3MocG9pbnQyIC0gcG9pbnQwKTsKICAgICBpZiAoY3Jvc3NQcm9kdWN0Lnoo
KSA8IDApCiAgICAgICAgIHN0ZDo6c3dhcChtX3ZlcnRpY2VzWzFdLCBtX3ZlcnRpY2VzWzJdKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5M
b2NhbFRyaWFuZ3VsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Mb2Nh
bFRyaWFuZ3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVm
IExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yX2gKICNkZWZpbmUgTG9vcEJsaW5uTG9jYWxUcmlh
bmd1bGF0b3JfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50M0QuaCIKICNpbmNsdWRlICJMb29wQmxpbm5Db25zdGFudHMuaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTEsMTIgKzUx
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJlc2V0RmxhZ3MoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHh5Q29vcmRpbmF0ZXMoKSBjb25zdAorICAgICAgICBj
b25zdCBHcmFwaGljc1BvaW50JiB4eUNvb3JkaW5hdGVzKCkgY29uc3QKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIG1feHlDb29yZGluYXRlczsKICAgICAgICAgfQogCi0gICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQzRCYga2xtQ29vcmRpbmF0ZXMoKSBjb25zdAorICAgICAgICBjb25zdCBH
cmFwaGljc1BvaW50M0QmIGtsbUNvb3JkaW5hdGVzKCkgY29uc3QKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIG1fa2xtQ29vcmRpbmF0ZXM7CiAgICAgICAgIH0KQEAgLTEwOSw5ICsxMDks
OSBAQCBwdWJsaWM6CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyAyRCBjb29yZGluYXRlcyBv
ZiB0aGUgdmVydGV4IGluIHRoZSBwbGFuZS4KLSAgICAgICAgRmxvYXRQb2ludCBtX3h5Q29vcmRp
bmF0ZXM7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgbV94eUNvb3JkaW5hdGVzOwogICAgICAgICAv
LyBDdWJpYyB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciByZW5kZXJpbmcgdGhlIGN1cnZlLgotICAg
ICAgICBGbG9hdFBvaW50M0QgbV9rbG1Db29yZGluYXRlczsKKyAgICAgICAgR3JhcGhpY3NQb2lu
dDNEIG1fa2xtQ29vcmRpbmF0ZXM7CiAKICAgICAgICAgLy8gRmxhZ3MgZm9yIHdhbGtpbmcgZnJv
bSB0aGUgc3RhcnQgdmVydGV4IHRvIHRoZSBlbmQgdmVydGV4LgogICAgICAgICBib29sIG1fZW5k
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1h
dGhVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkxvb3BCbGlubk1hdGhV
dGlscy5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IApAQCAtMzksMTggKzM5LDE4IEBAIG5hbWVzcGFjZSBMb29wQmxpbm5NYXRoVXRpbHMgewogbmFt
ZXNwYWNlIHsKIAogLy8gVXRpbGl0eSBmdW5jdGlvbnMgbG9jYWwgdG8gdGhpcyBmaWxlLgotaW50
IG9yaWVudGF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAxLAotICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLAotICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAzKQor
aW50IG9yaWVudGF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLAorICAgICAgICAgICAgICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLAorICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAzKQogewogICAgIGZsb2F0IGNyb3NzUHJvZHVjdCA9IChwMi55KCkgLSBwMS55KCkp
ICogKHAzLngoKSAtIHAyLngoKSkgLSAocDMueSgpIC0gcDIueSgpKSAqIChwMi54KCkgLSBwMS54
KCkpOwogICAgIHJldHVybiAoY3Jvc3NQcm9kdWN0IDwgMC4wZikgPyAtMSA6ICgoY3Jvc3NQcm9k
dWN0ID4gMC4wZikgPyAxIDogMCk7CiB9CiAKLWJvb2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEZsb2F0
U2l6ZSYgdjBEZWx0YSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHYwLAot
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdTAsCi0gICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiB1MSkKK2Jvb2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEdyYXBoaWNz
U2l6ZSYgdjBEZWx0YSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHYw
LAorICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgdTAsCisgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiB1MSkKIHsKICAgICAvLyBUaGlzIGVkZ2UgdG8g
ZWRnZSB0ZXN0IGlzIGJhc2VkIG9uIEZyYW5saW4gQW50b25pbydzIGdlbTogIkZhc3RlcgogICAg
IC8vIExpbmUgU2VnbWVudCBJbnRlcnNlY3Rpb24iLCBpbiBHcmFwaGljcyBHZW1zIElJSSwgcHAu
IDE5OS0yMDIuCkBAIC03OCwxMyArNzgsMTMgQEAgYm9vbCBlZGdlRWRnZVRlc3QoY29uc3QgRmxv
YXRTaXplJiB2MERlbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBlZGdlQWdhaW5zdFRy
aWFuZ2xlRWRnZXMoY29uc3QgRmxvYXRQb2ludCYgdjAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgdTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiB1MikKK2Jvb2wgZWRnZUFnYWluc3RUcmlhbmdsZUVkZ2VzKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFw
aGljc1BvaW50JiB1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHUxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhp
Y3NQb2ludCYgdTIpCiB7Ci0gICAgRmxvYXRTaXplIGRlbHRhID0gdjEgLSB2MDsKKyAgICBHcmFw
aGljc1NpemUgZGVsdGEgPSB2MSAtIHYwOwogICAgIC8vIFRlc3QgZWRnZSB1MCwgdTEgYWdhaW5z
dCB2MCwgdjEuCiAgICAgaWYgKGVkZ2VFZGdlVGVzdChkZWx0YSwgdjAsIHUwLCB1MSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTE4LDEyICsxMTgsMTIgQEAgZmxvYXQgcm91bmRUb1plcm8o
ZmxvYXQgdmFsKQogICAgIHJldHVybiB2YWw7CiB9CiAKLWJvb2wgYXBwcm94RXF1YWwoY29uc3Qg
RmxvYXRQb2ludCYgdjAsIGNvbnN0IEZsb2F0UG9pbnQmIHYxKQorYm9vbCBhcHByb3hFcXVhbChj
b25zdCBHcmFwaGljc1BvaW50JiB2MCwgY29uc3QgR3JhcGhpY3NQb2ludCYgdjEpCiB7CiAgICAg
cmV0dXJuICh2MCAtIHYxKS5kaWFnb25hbExlbmd0aFNxdWFyZWQoKSA8IEVwc2lsb24gKiBFcHNp
bG9uOwogfQogCi1ib29sIGFwcHJveEVxdWFsKGNvbnN0IEZsb2F0UG9pbnQzRCYgdjAsIGNvbnN0
IEZsb2F0UG9pbnQzRCYgdjEpCitib29sIGFwcHJveEVxdWFsKGNvbnN0IEdyYXBoaWNzUG9pbnQz
RCYgdjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdjEpCiB7CiAgICAgcmV0dXJuICh2MCAtIHYx
KS5sZW5ndGhTcXVhcmVkKCkgPCBFcHNpbG9uICogRXBzaWxvbjsKIH0KQEAgLTEzMywxOSArMTMz
LDE5IEBAIGJvb2wgYXBwcm94RXF1YWwoZmxvYXQgZjAsIGZsb2F0IGYxKQogICAgIHJldHVybiBm
YWJzZihmMCAtIGYxKSA8IEVwc2lsb247CiB9CiAKLWJvb2wgbGluZXNJbnRlcnNlY3QoY29uc3Qg
RmxvYXRQb2ludCYgcDEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHEx
LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTIpCitib29sIGxpbmVzSW50ZXJzZWN0KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAxLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiBxMSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHEyKQogewogICAgIHJldHVy
biAob3JpZW50YXRpb24ocDEsIHExLCBwMikgIT0gb3JpZW50YXRpb24ocDEsIHExLCBxMikKICAg
ICAgICAgICAgICYmIG9yaWVudGF0aW9uKHAyLCBxMiwgcDEpICE9IG9yaWVudGF0aW9uKHAyLCBx
MiwgcTEpKTsKIH0KIAotYm9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBhLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYiwKLSAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGMpCitib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBiLAorICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYykKIHsKICAgICAvLyBBbGdvcml0aG0g
ZnJvbSBodHRwOi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvZGVmYXVsdC5o
dG1sCiAgICAgZmxvYXQgeDAgPSBjLngoKSAtIGEueCgpOwpAQCAtMTcyLDEyICsxNzIsMTIgQEAg
Ym9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcAogICAgIHJldHVybiAodSA+
IDAuMGYpICYmICh2ID4gMC4wZikgJiYgKHUgKyB2IDwgMS4wZik7CiB9CiAKLWJvb2wgdHJpYW5n
bGVzT3ZlcmxhcChjb25zdCBGbG9hdFBvaW50JiBhMSwKLSAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBiMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBjMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBhMiwKLSAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMiwKLSAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMikKK2Jvb2wgdHJpYW5nbGVzT3ZlcmxhcChjb25z
dCBHcmFwaGljc1BvaW50JiBhMSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGlj
c1BvaW50JiBiMSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBj
MSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBhMiwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBiMiwKKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBjMikKIHsKICAgICAvLyBEZXJpdmVkIGZyb20g
Y29wbGFuYXJfdHJpX3RyaSgpIGF0CiAgICAgLy8gaHR0cDovL2pndC5ha3BldGVycy5jb20vcGFw
ZXJzL1NoZW5IZW5nVGFuZzAzL3RyaV90cmkuaHRtbCAsCkBAIC0yNDMsMTMgKzI0MywxMyBAQCBm
bG9hdCBldmFsdWF0ZUN1YmljKGZsb2F0IGNvbnRyb2xQb2ludDAsCiB9CiAKIC8vIEV2YWx1YXRl
cyB0aGUgcG9pbnQgb24gdGhlIHNvdXJjZSBjdWJpYyBzcGVjaWZpZWQgYnkgdCwgMCA8PSB0IDw9
IDEuMC4KLUZsb2F0UG9pbnQgZXZhbHVhdGVDdWJpY0F0KGNvbnN0IEZsb2F0UG9pbnQgY3ViaWNb
NF0sIGZsb2F0IHQpCitHcmFwaGljc1BvaW50IGV2YWx1YXRlQ3ViaWNBdChjb25zdCBHcmFwaGlj
c1BvaW50IGN1YmljWzRdLCBmbG9hdCB0KQogewotICAgIHJldHVybiBGbG9hdFBvaW50KGV2YWx1
YXRlQ3ViaWMoY3ViaWNbMF0ueCgpLCBjdWJpY1sxXS54KCksIGN1YmljWzJdLngoKSwgY3ViaWNb
M10ueCgpLCB0KSwKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChldmFsdWF0ZUN1YmljKGN1Ymlj
WzBdLngoKSwgY3ViaWNbMV0ueCgpLCBjdWJpY1syXS54KCksIGN1YmljWzNdLngoKSwgdCksCiAg
ICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVDdWJpYyhjdWJpY1swXS55KCksIGN1YmljWzFd
LnkoKSwgY3ViaWNbMl0ueSgpLCBjdWJpY1szXS55KCksIHQpKTsKIH0KIAotYm9vbCB4UmF5Q3Jv
c3Nlc01vbm90b25pY0N1YmljKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZsb2F0UG9pbnQgY3Vi
aWNbNF0sIGJvb2wmIGFtYmlndW91cykKK2Jvb2wgeFJheUNyb3NzZXNNb25vdG9uaWNDdWJpYyhj
b25zdCBYUmF5JiB4UmF5LCBjb25zdCBHcmFwaGljc1BvaW50IGN1YmljWzRdLCBib29sJiBhbWJp
Z3VvdXMpCiB7CiAgICAgYW1iaWd1b3VzID0gZmFsc2U7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQCBi
b29sIHhSYXlDcm9zc2VzTW9ub3RvbmljQ3ViaWMoY29uc3QgWFJhCiAgICAgLy8gc2luY2UgdGhl
cmUncyBubyB3YXkgd2UgYXJlIGdvaW5nIHRvIGdldCBtb3JlIHByZWNpc2lvbiBieQogICAgIC8v
IGl0ZXJhdGluZyBtb3JlIHRpbWVzIHRoYW4gdGhhdC4KICAgICBjb25zdCBpbnQgTWF4SXRlcmF0
aW9ucyA9IDIzOwotICAgIEZsb2F0UG9pbnQgZXZhbHVhdGVkUG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBldmFsdWF0ZWRQb2ludDsKICAgICBpbnQgaXRlciA9IDA7CiAgICAgZmxvYXQgdXBwZXJU
OwogICAgIGZsb2F0IGxvd2VyVDsKQEAgLTQxOSw3ICs0MTksNyBAQCBib29sIGlzVW5pdEludGVy
dmFsKGZsb2F0IHgpCiB9CiAjZW5kaWYKIAotdm9pZCBjaG9wQ3ViaWNBdFRWYWx1ZXMoY29uc3Qg
RmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0W10sIGNvbnN0IGZsb2F0IHRWYWx1ZXNb
XSwgaW50IHJvb3RzKQordm9pZCBjaG9wQ3ViaWNBdFRWYWx1ZXMoY29uc3QgR3JhcGhpY3NQb2lu
dCBzcmNbNF0sIEdyYXBoaWNzUG9pbnQgZHN0W10sIGNvbnN0IGZsb2F0IHRWYWx1ZXNbXSwgaW50
IHJvb3RzKQogewogI2lmbmRlZiBOREVCVUcKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvb3Rz
IC0gMTsgKytpKSB7CkBAIC00MzcsNyArNDM3LDcgQEAgdm9pZCBjaG9wQ3ViaWNBdFRWYWx1ZXMo
Y29uc3QgRmxvYXRQb2ludAogICAgIH0KIAogICAgIGZsb2F0IHQgPSB0VmFsdWVzWzBdOwotICAg
IEZsb2F0UG9pbnQgdG1wWzRdOworICAgIEdyYXBoaWNzUG9pbnQgdG1wWzRdOwogICAgIGZvciAo
aW50IGogPSAwOyBqIDwgNDsgKytqKQogICAgICAgICB0bXBbal0gPSBzcmNbal07CiAKQEAgLTQ2
MCwxMyArNDYwLDEzIEBAIHZvaWQgY2hvcEN1YmljQXRUVmFsdWVzKGNvbnN0IEZsb2F0UG9pbnQK
ICAgICB9CiB9CiAKLXZvaWQgZmxhdHRlbkRvdWJsZUN1YmljWUV4dHJlbWEoRmxvYXRQb2ludCBj
b29yZHNbN10pCit2b2lkIGZsYXR0ZW5Eb3VibGVDdWJpY1lFeHRyZW1hKEdyYXBoaWNzUG9pbnQg
Y29vcmRzWzddKQogewogICAgIGNvb3Jkc1syXS5zZXRZKGNvb3Jkc1szXS55KCkpOwogICAgIGNv
b3Jkc1s0XS5zZXRZKGNvb3Jkc1szXS55KCkpOwogfQogCi1pbnQgY2hvcEN1YmljQXRZRXh0cmVt
YShjb25zdCBGbG9hdFBvaW50IHNyY1s0XSwgRmxvYXRQb2ludCBkc3RbMTBdKQoraW50IGNob3BD
dWJpY0F0WUV4dHJlbWEoY29uc3QgR3JhcGhpY3NQb2ludCBzcmNbNF0sIEdyYXBoaWNzUG9pbnQg
ZHN0WzEwXSkKIHsKICAgICBmbG9hdCB0VmFsdWVzWzJdOwogICAgIGludCByb290cyA9IGZpbmRD
dWJpY0V4dHJlbWEoc3JjWzBdLnkoKSwgc3JjWzFdLnkoKSwgc3JjWzJdLnkoKSwgc3JjWzNdLnko
KSwgdFZhbHVlcyk7CkBAIC00ODUsNyArNDg1LDcgQEAgaW50IGNob3BDdWJpY0F0WUV4dHJlbWEo
Y29uc3QgRmxvYXRQb2ludAogCiAvLyBQdWJsaWMgY3ViaWMgb3BlcmF0aW9ucy4KIAotdm9pZCBj
aG9wQ3ViaWNBdChjb25zdCBGbG9hdFBvaW50IHNyY1s0XSwgRmxvYXRQb2ludCBkc3RbN10sIGZs
b2F0IHQpCit2b2lkIGNob3BDdWJpY0F0KGNvbnN0IEdyYXBoaWNzUG9pbnQgc3JjWzRdLCBHcmFw
aGljc1BvaW50IGRzdFs3XSwgZmxvYXQgdCkKIHsKICAgICBBU1NFUlQodCA+PSAwICYmIHQgPD0g
MSk7CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIGNob3BDdWJpY0F0KGNvbnN0IEZsb2F0UG9p
bnQgc3JjWzRdCiAKIC8vIFB1YmxpYyBYUmF5IHF1ZXJpZXMuCiAKLWJvb2wgeFJheUNyb3NzZXNM
aW5lKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZsb2F0UG9pbnQgcHRzWzJdLCBib29sJiBhbWJp
Z3VvdXMpCitib29sIHhSYXlDcm9zc2VzTGluZShjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBHcmFw
aGljc1BvaW50IHB0c1syXSwgYm9vbCYgYW1iaWd1b3VzKQogewogICAgIGFtYmlndW91cyA9IGZh
bHNlOwogCkBAIC01NDUsMTMgKzU0NSwxMyBAQCBib29sIHhSYXlDcm9zc2VzTGluZShjb25zdCBY
UmF5JiB4UmF5LCBjCiAgICAgcmV0dXJuIHhSYXkueCgpIDw9IHg7CiB9CiAKLWludCBudW1YUmF5
Q3Jvc3NpbmdzRm9yQ3ViaWMoY29uc3QgWFJheSYgeFJheSwgY29uc3QgRmxvYXRQb2ludCBjdWJp
Y1s0XSwgYm9vbCYgYW1iaWd1b3VzKQoraW50IG51bVhSYXlDcm9zc2luZ3NGb3JDdWJpYyhjb25z
dCBYUmF5JiB4UmF5LCBjb25zdCBHcmFwaGljc1BvaW50IGN1YmljWzRdLCBib29sJiBhbWJpZ3Vv
dXMpCiB7CiAgICAgaW50IG51bUNyb3NzaW5ncyA9IDA7Ci0gICAgRmxvYXRQb2ludCBtb25vdG9u
aWNDdWJpY3NbMTBdOworICAgIEdyYXBoaWNzUG9pbnQgbW9ub3RvbmljQ3ViaWNzWzEwXTsKICAg
ICBpbnQgbnVtTW9ub3RvbmljQ3ViaWNzID0gMSArIGNob3BDdWJpY0F0WUV4dHJlbWEoY3ViaWMs
IG1vbm90b25pY0N1Ymljcyk7CiAgICAgYW1iaWd1b3VzID0gZmFsc2U7Ci0gICAgRmxvYXRQb2lu
dCogbW9ub3RvbmljQ3ViaWNzUG9pbnRlciA9ICZtb25vdG9uaWNDdWJpY3NbMF07CisgICAgR3Jh
cGhpY3NQb2ludCogbW9ub3RvbmljQ3ViaWNzUG9pbnRlciA9ICZtb25vdG9uaWNDdWJpY3NbMF07
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Nb25vdG9uaWNDdWJpY3M7ICsraSkgewogICAg
ICAgICBpZiAoeFJheUNyb3NzZXNNb25vdG9uaWNDdWJpYyh4UmF5LCBtb25vdG9uaWNDdWJpY3NQ
b2ludGVyLCBhbWJpZ3VvdXMpKQogICAgICAgICAgICAgKytudW1Dcm9zc2luZ3M7CkBAIC01NzAs
NyArNTcwLDcgQEAgaW50IG51bVhSYXlDcm9zc2luZ3NGb3JDdWJpYyhjb25zdCBYUmF5JgogICog
aW4gIkdyYXBoaWNzIEdlbXMgSVYiLCBBY2FkZW1pYyBQcmVzcywgMTk5NAogICovCiAKLXN0YXRp
YyBpbmxpbmUgaW50IGNvbnZleENvbXBhcmUoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKK3N0YXRp
YyBpbmxpbmUgaW50IGNvbnZleENvbXBhcmUoY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0YSkKIHsK
ICAgICByZXR1cm4gKGRlbHRhLndpZHRoKCkgPiAwKSA/IC0xIDogLyogeCBjb29yZCBkaWZmLCBz
ZWNvbmQgcHQgPiBmaXJzdCBwdCAqLwogICAgICAgICAgICAoZGVsdGEud2lkdGgoKSA8IDApID8g
IDEgOiAvKiB4IGNvb3JkIGRpZmYsIHNlY29uZCBwdCA8IGZpcnN0IHB0ICovCkBAIC01NzksMTIg
KzU3OSwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21wYXJlKGNvbnN0IEZsCiAgICAg
ICAgICAgIDA7IC8qIHNlY29uZCBwdCBlcXVhbHMgZmlyc3QgcG9pbnQgKi8KIH0KIAotc3RhdGlj
IGlubGluZSBmbG9hdCBjb252ZXhDcm9zcyhjb25zdCBGbG9hdFNpemUmIHAsIGNvbnN0IEZsb2F0
U2l6ZSYgcSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY29udmV4Q3Jvc3MoY29uc3QgR3JhcGhpY3NT
aXplJiBwLCBjb25zdCBHcmFwaGljc1NpemUmIHEpCiB7CiAgICAgcmV0dXJuIHAud2lkdGgoKSAq
IHEuaGVpZ2h0KCkgLSBwLmhlaWdodCgpICogcS53aWR0aCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgY29udmV4Q2hlY2tUcmlwbGUoY29uc3QgRmxvYXRTaXplJiBkY3VyLCBjb25zdCBGbG9h
dFNpemUmIGRwcmV2LCBpbnQqIGN1ckRpciwgaW50KiBkaXJDaGFuZ2VzLCBpbnQqIGFuZ2xlU2ln
bikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb252ZXhDaGVja1RyaXBsZShjb25zdCBHcmFwaGljc1Np
emUmIGRjdXIsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZHByZXYsIGludCogY3VyRGlyLCBpbnQqIGRp
ckNoYW5nZXMsIGludCogYW5nbGVTaWduKQogewogICAgIGludCB0aGlzRGlyID0gY29udmV4Q29t
cGFyZShkY3VyKTsKICAgICBpZiAodGhpc0RpciA9PSAtKmN1ckRpcikKQEAgLTYwMywxMSArNjAz
LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb252ZXhDaGVja1RyaXBsZShjb24KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0aWNlcywg
aW50IG5WZXJ0aWNlcykKK2Jvb2wgaXNDb252ZXgoY29uc3QgR3JhcGhpY3NQb2ludCogdmVydGlj
ZXMsIGludCBuVmVydGljZXMpCiB7CiAgICAgaW50IGRpckNoYW5nZXMgPSAwLCBhbmdsZVNpZ24g
PSAwOwotICAgIEZsb2F0UG9pbnQgc2Vjb25kLCB0aGlyZDsKLSAgICBGbG9hdFNpemUgZHByZXYs
IGRjdXI7CisgICAgR3JhcGhpY3NQb2ludCBzZWNvbmQsIHRoaXJkOworICAgIEdyYXBoaWNzU2l6
ZSBkcHJldiwgZGN1cjsKIAogICAgIC8qIEdldCBkaWZmZXJlbnQgcG9pbnQsIHJldHVybiBpZiBs
ZXNzIHRoYW4gMyBkaWZmIHBvaW50cy4gKi8KICAgICBpZiAoblZlcnRpY2VzIDwgMykKQEAgLTYy
NCw3ICs2MjQsNyBAQCBib29sIGlzQ29udmV4KGNvbnN0IEZsb2F0UG9pbnQqIHZlcnRpY2VzCiAg
ICAgICAgIGlmIChpID49IG5WZXJ0aWNlcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgRmxvYXRQb2ludCBzYXZlU2Vjb25kID0gc2Vjb25kOworICAgIEdyYXBoaWNzUG9p
bnQgc2F2ZVNlY29uZCA9IHNlY29uZDsKICAgICBpbnQgY3VyRGlyID0gY29udmV4Q29tcGFyZShk
cHJldik7ICAgICAgICAvKiBGaW5kIGluaXRpYWwgZGlyZWN0aW9uICovCiAgICAgd2hpbGUgKGkg
PCBuVmVydGljZXMpIHsKICAgICAgICAgLyogR2V0IGRpZmZlcmVudCBwb2ludCwgYnJlYWsgaWYg
bm8gbW9yZSBwb2ludHMgKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0aFV0aWxzLmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhV
dGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIExvb3BCbGlu
bk1hdGhVdGlsc19oCiAjZGVmaW5lIExvb3BCbGlubk1hdGhVdGlsc19oCiAKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1ZGUgPG1hdGgu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsNDQgKzM2LDQ0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMb29wQmxpbm5NYXRoVXRpbHMgewogCiBmbG9hdCByb3VuZFRv
WmVybyhmbG9hdCB2YWwpOwotYm9vbCBhcHByb3hFcXVhbChjb25zdCBGbG9hdFBvaW50JiB2MCwg
Y29uc3QgRmxvYXRQb2ludCYgdjEpOwotYm9vbCBhcHByb3hFcXVhbChjb25zdCBGbG9hdFBvaW50
M0QmIHYwLCBjb25zdCBGbG9hdFBvaW50M0QmIHYxKTsKK2Jvb2wgYXBwcm94RXF1YWwoY29uc3Qg
R3JhcGhpY3NQb2ludCYgdjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHYxKTsKK2Jvb2wgYXBwcm94
RXF1YWwoY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2MCwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2
MSk7CiBib29sIGFwcHJveEVxdWFsKGZsb2F0IGYwLCBmbG9hdCBmMSk7CiAKIC8vIERldGVybWlu
ZXMgd2hldGhlciB0aGUgbGluZSBzZWdtZW50IGJldHdlZW4gKHAxLCBxMSkgaW50ZXJzZWN0cwog
Ly8gdGhhdCBiZXR3ZWVuIChwMiwgcTIpLgotYm9vbCBsaW5lc0ludGVyc2VjdChjb25zdCBGbG9h
dFBvaW50JiBwMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTEsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAyLAotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBxMik7Citib29sIGxpbmVzSW50ZXJzZWN0KGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHAxLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50
JiBxMSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHEyKTsKIAogLy8gRGV0ZXJtaW5l
cyB3aGV0aGVyICJwb2ludCIgaXMgaW5zaWRlIHRoZSAyRCB0cmlhbmdsZSBkZWZpbmVkIGJ5CiAv
LyB2ZXJ0aWNlcyBhLCBiLCBhbmQgYy4gVGhpcyB0ZXN0IGRlZmluZXMgdGhhdCBwb2ludHMgZXhh
Y3RseSBvbiBhbgogLy8gZWRnZSBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUgaW5zaWRlIHRoZSB0
cmlhbmdsZS4KLWJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAot
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYSwKLSAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBjKTsKK2Jvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYSwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIsCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBjKTsKIAogLy8gRGV0ZXJtaW5lcyB3aGV0aGVy
IHRoZSB0cmlhbmdsZXMgZGVmaW5lZCBieSB0aGUgcG9pbnRzIChhMSwgYjEsIGMxKQogLy8gYW5k
IChhMiwgYjIsIGMyKSBvdmVybGFwLiBUaGUgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlz
IHRoYXQKIC8vIGlmIHRoZSB0d28gdHJpYW5nbGVzIG9ubHkgc2hhcmUgYW4gYWRqYWNlbnQgZWRn
ZSBvciB2ZXJ0ZXgsIHRoZXkKIC8vIGFyZSBub3QgY29uc2lkZXJlZCB0byBvdmVybGFwLgotYm9v
bCB0cmlhbmdsZXNPdmVybGFwKGNvbnN0IEZsb2F0UG9pbnQmIGExLAotICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIxLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGMxLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IGEyLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIyLAotICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyKTsKK2Jvb2wgdHJpYW5nbGVzT3Zl
cmxhcChjb25zdCBHcmFwaGljc1BvaW50JiBhMSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBiMSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGlj
c1BvaW50JiBjMSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBh
MiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBiMiwKKyAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBjMik7CiAKIC8vIEdpdmVuIGEg
c3JjIGN1YmljIGJlemllciwgY2hvcHMgaXQgYXQgdGhlIHNwZWNpZmllZCB0IHZhbHVlLAogLy8g
d2hlcmUgMCA8IHQgPCAxLCBhbmQgcmV0dXJucyB0aGUgdHdvIG5ldyBjdWJpY3MgaW4gZHN0WzAu
LjNdCiAvLyBhbmQgZHN0WzMuLjZdLgotdm9pZCBjaG9wQ3ViaWNBdChjb25zdCBGbG9hdFBvaW50
IHNyY1s0XSwgRmxvYXRQb2ludCBkc3RbN10sIGZsb2F0IHQpOwordm9pZCBjaG9wQ3ViaWNBdChj
b25zdCBHcmFwaGljc1BvaW50IHNyY1s0XSwgR3JhcGhpY3NQb2ludCBkc3RbN10sIGZsb2F0IHQp
OwogCiAvLyAiWC1SYXkiIHF1ZXJpZXMuIEFuIFhSYXkgaXMgYSBoYWxmLWxpbmUgb3JpZ2luYXRp
bmcgYXQgdGhlIGdpdmVuCiAvLyBwb2ludCBhbmQgZXh0ZW5kaW5nIHRvIHg9K2luZmluaXR5Lgot
dHlwZWRlZiBGbG9hdFBvaW50IFhSYXk7Cit0eXBlZGVmIEdyYXBoaWNzUG9pbnQgWFJheTsKIAog
Ly8gR2l2ZW4gYW4gYXJiaXRyYXJ5IGN1YmljIGJlemllciwgcmV0dXJuIHRoZSBudW1iZXIgb2Yg
dGltZXMgYW4gWFJheQogLy8gY3Jvc3NlcyB0aGUgY3ViaWMuIFZhbGlkIHJldHVybiB2YWx1ZXMg
YXJlIFswLi4zXS4KQEAgLTg5LDcgKzg5LDcgQEAgdHlwZWRlZiBGbG9hdFBvaW50IFhSYXk7CiAv
LyBjb29yZGluYXRlcyBvciBhdCBhIHRhbmdlbnQgcG9pbnQsIGluZGljYXRpbmcgdGhhdCBhbm90
aGVyIHF1ZXJ5IHkKIC8vIGNvb3JkaW5hdGUgaXMgcHJlZmVycmVkIGZvciByb2J1c3RuZXNzLgog
aW50IG51bVhSYXlDcm9zc2luZ3NGb3JDdWJpYyhjb25zdCBYUmF5JiB4UmF5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50IGN1YmljWzRdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50IGN1YmljWzRdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sJiBhbWJpZ3VvdXMpOwogCiAvLyBHaXZlbiBhIGxp
bmUgc2VnbWVudCBmcm9tIGxpbmVFbmRwb2ludHNbMF0gdG8gbGluZUVuZHBvaW50c1sxXSwgYW5k
IGFuCkBAIC05OCwxMSArOTgsMTEgQEAgaW50IG51bVhSYXlDcm9zc2luZ3NGb3JDdWJpYyhjb25z
dCBYUmF5JgogLy8gZXhhY3RseSBhdCBvbmUgb2YgdGhlIGVuZHBvaW50cycgeSBjb29yZGluYXRl
cywgaW5kaWNhdGluZyB0aGF0IGFub3RoZXIKIC8vIHF1ZXJ5IHkgY29vcmRpbmF0ZSBpcyBwcmVm
ZXJyZWQgZm9yIHJvYnVzdG5lc3MuCiBib29sIHhSYXlDcm9zc2VzTGluZShjb25zdCBYUmF5JiB4
UmF5LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCBsaW5lRW5kcG9pbnRz
WzJdLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCBsaW5lRW5kcG9p
bnRzWzJdLAogICAgICAgICAgICAgICAgICAgICAgYm9vbCYgYW1iaWd1b3VzKTsKIAogCi1ib29s
IGlzQ29udmV4KGNvbnN0IEZsb2F0UG9pbnQqIHZlcnRpY2VzLCBpbnQgblZlcnRpY2VzKTsKK2Jv
b2wgaXNDb252ZXgoY29uc3QgR3JhcGhpY3NQb2ludCogdmVydGljZXMsIGludCBuVmVydGljZXMp
OwogCiB9IC8vIG5hbWVzcGFjZSBMb29wQmxpbm5NYXRoVXRpbHMKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxp
bm5QYXRoUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDggKzI3LDggQEAKIAogI2luY2x1ZGUgIkxvb3BCbGlublBhdGhQcm9jZXNz
b3IuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiTG9vcEJsaW5uQ2xhc3NpZmllci5oIgogI2luY2x1ZGUgIkxvb3BCbGlubkNvbnN0
YW50cy5oIgogI2luY2x1ZGUgIkxvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmgiCkBAIC02Niwx
MCArNjYsMTAgQEAgdXNpbmcgTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0aQogbmFt
ZXNwYWNlIHsKIAogI2lmbmRlZiBOREVCVUcKLVN0cmluZyB2YWx1ZVRvU3RyaW5nKGNvbnN0IEZs
b2F0UmVjdCYgYXJnKQorU3RyaW5nIHZhbHVlVG9TdHJpbmcoY29uc3QgR3JhcGhpY3NSZWN0JiBh
cmcpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJb
RmxvYXRSZWN0IHg9Iik7CisgICAgYnVpbGRlci5hcHBlbmQoIltHcmFwaGljc1JlY3QgeD0iKTsK
ICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihhcmcueCgpKSk7CiAgICAgYnVpbGRl
ci5hcHBlbmQoIiB5PSIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGFyZy55
KCkpKTsKQEAgLTE1MSwxMCArMTUxLDEwIEBAIHB1YmxpYzoKICAgICAvLyBJbml0aWFsaXplciBm
b3IgY3ViaWMgY3VydmUgc2VnbWVudHMuCiAgICAgdm9pZCBzZXR1cChQT0RBcmVuYSogYXJlbmEs
CiAgICAgICAgICAgICAgICBDb250b3VyKiBjb250b3VyLAotICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBjcDAsCi0gICAgICAgICAgICAgICBGbG9hdFBvaW50IGNwMSwKLSAgICAgICAgICAgICAg
IEZsb2F0UG9pbnQgY3AyLAotICAgICAgICAgICAgICAgRmxvYXRQb2ludCBjcDMpCisgICAgICAg
ICAgICAgICBHcmFwaGljc1BvaW50IGNwMCwKKyAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQg
Y3AxLAorICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjcDIsCisgICAgICAgICAgICAgICBH
cmFwaGljc1BvaW50IGNwMykKICAgICB7CiAgICAgICAgIG1fYXJlbmEgPSBhcmVuYTsKICAgICAg
ICAgbV9jb250b3VyID0gY29udG91cjsKQEAgLTE2OSw4ICsxNjksOCBAQCBwdWJsaWM6CiAgICAg
Ly8gSW5pdGlhbGl6ZXIgZm9yIGxpbmUgc2VnbWVudHMuCiAgICAgdm9pZCBzZXR1cChQT0RBcmVu
YSogYXJlbmEsCiAgICAgICAgICAgICAgICBDb250b3VyKiBjb250b3VyLAotICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBwMCwKLSAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDEpCisgICAgICAg
ICAgICAgICBHcmFwaGljc1BvaW50IHAwLAorICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBw
MSkKICAgICB7CiAgICAgICAgIG1fYXJlbmEgPSBhcmVuYTsKICAgICAgICAgbV9jb250b3VyID0g
Y29udG91cjsKQEAgLTE4Myw3ICsxODMsNyBAQCBwdWJsaWM6CiAgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpJ3RoIGNvbnRyb2wg
cG9pbnQsIDAgPD0gaSA8IDQuCi0gICAgY29uc3QgRmxvYXRQb2ludCYgZ2V0UG9pbnQoaW50IGkp
CisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgZ2V0UG9pbnQoaW50IGkpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaSA+PSAwICYmIGkgPCA0KTsKICAgICAgICAgcmV0dXJuIG1fcG9pbnRzW2ldOwpA
QCAtMjA0LDcgKzIwNCw3IEBAIHB1YmxpYzoKICAgICAvLyBTZWdtZW50LgogICAgIFNlZ21lbnQq
IHN1YmRpdmlkZShmbG9hdCBwYXJhbSkKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgZHN0Wzdd
OworICAgICAgICBHcmFwaGljc1BvaW50IGRzdFs3XTsKICAgICAgICAgY2hvcEN1YmljQXQobV9w
b2ludHMsIGRzdCwgcGFyYW0pOwogICAgICAgICBTZWdtZW50KiBsZWZ0ID0gbV9hcmVuYS0+YWxs
b2NhdGVPYmplY3Q8U2VnbWVudD4oKTsKICAgICAgICAgU2VnbWVudCogcmlnaHQgPSBtX2FyZW5h
LT5hbGxvY2F0ZU9iamVjdDxTZWdtZW50PigpOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHB1YmxpYzoK
ICAgICAvLyBwb3NzaWJsZS4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxlZnRtb3N0IFNlZ21l
bnQuCiAgICAgU2VnbWVudCogc3ViZGl2aWRlKCkgeyByZXR1cm4gc3ViZGl2aWRlKDAuNWYpOyB9
CiAKLSAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZGluZ0JveDsgfQorICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kaW5nQm94OyB9CiAKICAgICAvLyBDb21wdXRlcyB0aGUgbnVtYmVy
IG9mIHRpbWVzIGEgcXVlcnkgbGluZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4KICAgICAvLyBwb2lu
dCBhbmQgZXh0ZW5kaW5nIHRvIHg9K2luZmluaXR5IGNyb3NzZXMgdGhpcyBzZWdtZW50LiBPdXRn
b2luZwpAQCAtMjg4LDExICsyODgsMTEgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFJldHVy
bnMgdGhlIGdpdmVuIGludGVyaW9yIHZlcnRleCwgMCA8PSBpbmRleCA8IG51bWJlck9mSW50ZXJp
b3JWZXJ0aWNlcygpLgotICAgIEZsb2F0UG9pbnQgZ2V0SW50ZXJpb3JWZXJ0ZXgoaW50IGluZGV4
KSBjb25zdAorICAgIEdyYXBoaWNzUG9pbnQgZ2V0SW50ZXJpb3JWZXJ0ZXgoaW50IGluZGV4KSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1iZXJP
ZkludGVyaW9yVmVydGljZXMoKSk7CiAgICAgICAgIGlmIChtX2tpbmQgPT0gQ3ViaWMpIHsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcmVzOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCByZXM7
CiAgICAgICAgICAgICBpZiAobV90cmlhbmd1bGF0b3IpIHsKICAgICAgICAgICAgICAgICBMb29w
Qmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VmVydGV4KiB2ZXJ0ZXggPSBtX3RyaWFuZ3VsYXRvci0+
Z2V0SW50ZXJpb3JWZXJ0ZXgoaW5kZXgpOwogICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXgpCkBA
IC0zNDMsMTEgKzM0MywxMSBAQCBwdWJsaWM6CiAKICAgICBQT0RBcmVuYSogbV9hcmVuYTsKICAg
ICBLaW5kIG1fa2luZDsKLSAgICBGbG9hdFBvaW50IG1fcG9pbnRzWzRdOworICAgIEdyYXBoaWNz
UG9pbnQgbV9wb2ludHNbNF07CiAgICAgU2VnbWVudCogbV9wcmV2OwogICAgIFNlZ21lbnQqIG1f
bmV4dDsKICAgICBDb250b3VyKiBtX2NvbnRvdXI7Ci0gICAgRmxvYXRSZWN0IG1fYm91bmRpbmdC
b3g7CisgICAgR3JhcGhpY3NSZWN0IG1fYm91bmRpbmdCb3g7CiAgICAgTG9vcEJsaW5uTG9jYWxU
cmlhbmd1bGF0b3IqIG1fdHJpYW5ndWxhdG9yOwogICAgIGJvb2wgbV9tYXJrZWRGb3JTdWJkaXZp
c2lvbjsKIH07CkBAIC00MzMsNyArNDMzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNPcmllbnRl
ZENvdW50ZXJDbG9ja3dpc2UoKSBjb25zdCB7IHJldHVybiBtX2lzT3JpZW50ZWRDb3VudGVyQ2xv
Y2t3aXNlOyB9CiAgICAgdm9pZCBzZXRJc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZShib29sIGlz
T3JpZW50ZWRDb3VudGVyQ2xvY2t3aXNlKSB7IG1faXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2Ug
PSBpc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZTsgfQogCi0gICAgY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveCgpCisgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveCgpCiAgICAg
ewogICAgICAgICBpZiAobV9ib3VuZGluZ0JveERpcnR5KSB7CiAgICAgICAgICAgICBib29sIGZp
cnN0ID0gdHJ1ZTsKQEAgLTQ3Myw3ICs0NzMsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lz
T3JpZW50ZWRDb3VudGVyQ2xvY2t3aXNlOwogCi0gICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7
CisgICAgR3JhcGhpY3NSZWN0IG1fYm91bmRpbmdCb3g7CiAgICAgYm9vbCBtX2JvdW5kaW5nQm94
RGlydHk7CiAKICAgICAvLyBXaGljaCBzaWRlIG9mIHRoaXMgY29udG91ciBzaG91bGQgYmUgZmls
bGVkLgpAQCAtNTkyLDkgKzU5Miw5IEBAIHZvaWQgTG9vcEJsaW5uUGF0aFByb2Nlc3Nvcjo6cHJv
Y2Vzcyhjb24KICNpZmRlZiBMT09QX0JMSU5OX1BBVEhfQ0FDSEVfREVCVUdfSU5URVJJT1JfRURH
RVMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3cgdGhlIGVuZCB1c2VyIHRoZSBpbnRl
cmlvciBlZGdlcyBhcyB3ZWxsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IHNlZy0+bnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCk7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdmVydCA9IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0
ZXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCB2ZXJ0ID0g
c2VnLT5nZXRJbnRlcmlvclZlcnRleChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBEdXBsaWNhdGUgcHJldmlvdXMgdmVydGV4IHRvIGJlIGFibGUgdG8gZHJhdyBHTF9MSU5FUwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldiA9IHNlZy0+Z2V0SW50
ZXJpb3JWZXJ0ZXgoaSAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgcHJldiA9IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaSAtIDEpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhY2hlLmFkZEludGVyaW9yRWRnZVZlcnRleChwcmV2LngoKSwgcHJl
di55KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmFkZEludGVyaW9yRWRn
ZVZlcnRleCh2ZXJ0LngoKSwgdmVydC55KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtNzE2LDcgKzcxNiw3IEBAIFZlY3RvcjxTZWdtZW50Kj4gTG9vcEJsaW5uUGF0aFByb2Nlc3Nv
cjoKICAgICBmb3IgKFZlY3RvcjxDb250b3VyKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NvbnRvdXJz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9jb250b3Vycy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIENv
bnRvdXIqIGN1ciA9ICppdGVyOwogICAgICAgICBmb3IgKFNlZ21lbnQqIHNlZyA9IGN1ci0+YmVn
aW4oKTsgc2VnICE9IGN1ci0+ZW5kKCk7IHNlZyA9IHNlZy0+bmV4dCgpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gc2VnLT5ib3VuZGluZ0JveCgpOworICAg
ICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveCA9IHNlZy0+Ym91bmRpbmdC
b3goKTsKICAgICAgICAgICAgIGlmIChib3VuZGluZ0JveC55KCkgPD0geSAmJiB5IDw9IGJvdW5k
aW5nQm94Lm1heFkoKSkKICAgICAgICAgICAgICAgICByZXMuYXBwZW5kKHNlZyk7CiAgICAgICAg
IH0KQEAgLTc0Niw3ICs3NDYsNyBAQCB2b2lkIExvb3BCbGlublBhdGhQcm9jZXNzb3I6OmRldGVy
bWluZVNpCiAgICAgICAgIENvbnRvdXIqIGN1ciA9ICppdGVyOwogICAgICAgICBkZXRlcm1pbmVP
cmllbnRhdGlvbihjdXIpOwogICAgICAgICBmb3IgKFNlZ21lbnQqIHNlZyA9IGN1ci0+YmVnaW4o
KTsgc2VnICE9IGN1ci0+ZW5kKCk7IHNlZyA9IHNlZy0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBj
b25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gc2VnLT5ib3VuZGluZ0JveCgpOworICAgICAg
ICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveCA9IHNlZy0+Ym91bmRpbmdCb3go
KTsKICAgICAgICAgICAgIHRyZWUuYWRkKHRyZWUuY3JlYXRlSW50ZXJ2YWwoYm91bmRpbmdCb3gu
eSgpLCBib3VuZGluZ0JveC5tYXhZKCksIHNlZykpOwogICAgICAgICB9CiAgICAgfQpAQCAtODAy
LDcgKzgwMiw3IEBAIHZvaWQgTG9vcEJsaW5uUGF0aFByb2Nlc3Nvcjo6ZGV0ZXJtaW5lU2kKICAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgc2VnbWVudHMgY29taW5nIGZyb20gdGhlIHNhbWUgY29u
dG91ci4KICAgICAgICAgICAgICAgICBpZiAocXVlcnlTZWdtZW50LT5jb250b3VyKCkgIT0gY3Vy
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcGVyZm9ybSBxdWVyaWVzIHRoYXQgY2Fu
IGFmZmVjdCB0aGUgY29tcHV0YXRpb24uCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3ggPSBxdWVyeVNlZ21lbnQtPmNvbnRvdXIoKS0+Ym91bmRpbmdCb3go
KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveCA9
IHF1ZXJ5U2VnbWVudC0+Y29udG91cigpLT5ib3VuZGluZ0JveCgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoc2VnLT5nZXRQb2ludCgwKS54KCkgPj0gYm91bmRpbmdCb3gueCgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBzZWctPmdldFBvaW50KDApLngoKSA8PSBib3VuZGluZ0JveC5t
YXhYKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG51bUNyb3NzaW5ncyArPSBxdWVyeVNl
Z21lbnQtPm51bUNyb3NzaW5nc0ZvclhSYXkoc2VnLT5nZXRQb2ludCgwKSwKQEAgLTg0MCw4ICs4
NDAsOCBAQCB2b2lkIExvb3BCbGlublBhdGhQcm9jZXNzb3I6OmRldGVybWluZU9yCiAgICAgICAg
ICBzZWcgPSBzZWctPm5leHQoKSkgewogICAgICAgICBpbnQgbGltaXQgPSAoc2VnLT5raW5kKCkg
PT0gU2VnbWVudDo6Q3ViaWMpID8gNCA6IDI7CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwg
bGltaXQ7IGkrKykgewotICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcHJldlBvaW50ID0g
c2VnLT5nZXRQb2ludChpIC0gMSk7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCA9IHNlZy0+Z2V0UG9pbnQoaSk7CisgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBw
cmV2UG9pbnQgPSBzZWctPmdldFBvaW50KGkgLSAxKTsKKyAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50ID0gc2VnLT5nZXRQb2ludChpKTsKICAgICAgICAgICAgIGZsb2F0IGN1
ckFyZWEgPSBwcmV2UG9pbnQueCgpICogcG9pbnQueSgpIC0gcHJldlBvaW50LnkoKSAqIHBvaW50
LngoKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBpZiAobV92ZXJib3NlTG9nZ2luZykK
QEAgLTk4Myw3ICs5ODMsNyBAQCB2b2lkIExvb3BCbGlublBhdGhQcm9jZXNzb3I6OnN1YmRpdmlk
ZUN1CiAgICAgICAgICAgICBBU1NFUlQoc2VnLT5raW5kKCkgPT0gU2VnbWVudDo6Q3ViaWMpOwog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWctPm51bWJlck9mVHJpYW5nbGVzKCk7
IGkrKykgewogICAgICAgICAgICAgICAgIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpUcmlh
bmdsZSogdHJpYW5nbGUgPSBzZWctPmdldFRyaWFuZ2xlKGkpOwotICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRp
bmdCb3g7CiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3guZml0VG9Qb2ludHModHJpYW5nbGUt
PmdldFZlcnRleCgwKS0+eHlDb29yZGluYXRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyaWFuZ2xlLT5nZXRWZXJ0ZXgoMSktPnh5Q29vcmRpbmF0ZXMoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZS0+Z2V0VmVy
dGV4KDIpLT54eUNvb3JkaW5hdGVzKCkpOwpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgdm9pZCBMb29w
Qmxpbm5QYXRoUHJvY2Vzc29yOjp0ZXNzZWxsYXRlSQogICAgICAgICBmb3IgKFNlZ21lbnQqIHNl
ZyA9IGN1ci0+YmVnaW4oKTsgc2VnICE9IGN1ci0+ZW5kKCk7IHNlZyA9IHNlZy0+bmV4dCgpKSB7
CiAgICAgICAgICAgICBpbnQgbnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzID0gc2VnLT5udW1iZXJP
ZkludGVyaW9yVmVydGljZXMoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
YmVyT2ZJbnRlcmlvclZlcnRpY2VzIC0gMTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBwb2ludCA9IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaSk7CisgICAgICAgICAgICAgICAg
R3JhcGhpY3NQb2ludCBwb2ludCA9IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIHZlcnRleERhdGEuYXBwZW5kKHBvaW50LngoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNv
b3Jkcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksMTYgKzU5LDE2IEBAIExvb3BCbGlublRleHR1cmVDb29y
ZHM6OlJlc3VsdCBMb29wQmxpbm4KICAgICAgICAgZmxvYXQgbXQgPSBsdDsKICAgICAgICAgZmxv
YXQgbHRNaW51c0xzID0gbHQgLSBsczsKICAgICAgICAgZmxvYXQgbXRNaW51c01zID0gbXQgLSBt
czsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKGxzICog
bXMsCisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEdyYXBoaWNzUG9pbnQzRChs
cyAqIG1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bHMgKiBscyAqIGxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXMgKiBtcyAqIG1zKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0g
RmxvYXRQb2ludDNEKE9uZVRoaXJkICogKDMuMGYgKiBscyAqIG1zIC0gbHMgKiBtdCAtIGx0ICog
bXMpLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBHcmFwaGljc1BvaW50M0Qo
T25lVGhpcmQgKiAoMy4wZiAqIGxzICogbXMgLSBscyAqIG10IC0gbHQgKiBtcyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscyAqIGxzICogKGxzIC0g
bHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXMg
KiBtcyAqIChtcyAtIG10KSk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9IEZs
b2F0UG9pbnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYgKiBtcykgKyBscyAqICgzLjBm
ICogbXMgLSAyLjBmICogbXQpKSwKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0g
R3JhcGhpY3NQb2ludDNEKE9uZVRoaXJkICogKGx0ICogKG10IC0gMi4wZiAqIG1zKSArIGxzICog
KDMuMGYgKiBtcyAtIDIuMGYgKiBtdCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbHRNaW51c0xzICogbHRNaW51c0xzICogbHMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdE1pbnVzTXMgKiBtdE1pbnVz
TXMgKiBtcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQz
RChsdE1pbnVzTHMgKiBtdE1pbnVzTXMsCisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sz
XSA9IEdyYXBoaWNzUG9pbnQzRChsdE1pbnVzTHMgKiBtdE1pbnVzTXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKGx0TWludXNMcyAqIGx0TWludXNM
cyAqIGx0TWludXNMcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtKG10TWludXNNcyAqIG10TWludXNNcyAqIG10TWludXNNcykpOwogICAgICAgICBp
ZiAoY2xhc3NpZmljYXRpb24uZDEgPCAwLjBmKQpAQCAtMTAxLDE2ICsxMDEsMTYgQEAgTG9vcEJs
aW5uVGV4dHVyZUNvb3Jkczo6UmVzdWx0IExvb3BCbGlubgogCiAgICAgICAgIGZsb2F0IGx0TWlu
dXNMcyA9IGx0IC0gbHM7CiAgICAgICAgIGZsb2F0IG10TWludXNNcyA9IG10IC0gbXM7Ci0gICAg
ICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0UG9pbnQzRChscyAqIG1zLAorICAg
ICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBHcmFwaGljc1BvaW50M0QobHMgKiBtcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMg
KiBtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxz
ICogbXMgKiBtcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sxXSA9IEZsb2F0UG9p
bnQzRChPbmVUaGlyZCAqICgtbHMgKiBtdCAtIGx0ICogbXMgKyAzLjBmICogbHMgKiBtcyksCisg
ICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1sxXSA9IEdyYXBoaWNzUG9pbnQzRChPbmVUaGly
ZCAqICgtbHMgKiBtdCAtIGx0ICogbXMgKyAzLjBmICogbHMgKiBtcyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtT25lVGhpcmQgKiBscyAqIChscyAq
IChtdCAtIDMuMGYgKiBtcykgKyAyLjBmICogbHQgKiBtcyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtT25lVGhpcmQgKiBtcyAqIChscyAqICgyLjBm
ICogbXQgLSAzLjBmICogbXMpICsgbHQgKiBtcykpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRp
bmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAobHQgKiAobXQgLSAyLjBmICogbXMp
ICsgbHMgKiAoMy4wZiAqIG1zIC0gMi4wZiAqIG10KSksCisgICAgICAgIHJlc3VsdC5rbG1Db29y
ZGluYXRlc1syXSA9IEdyYXBoaWNzUG9pbnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYg
KiBtcykgKyBscyAqICgzLjBmICogbXMgLSAyLjBmICogbXQpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZVRoaXJkICogKGx0IC0gbHMpICogKGxz
ICogKDIuMGYgKiBtdCAtIDMuMGYgKiBtcykgKyBsdCAqIG1zKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZVRoaXJkICogKG10IC0gbXMpICogKGxz
ICogKG10IC0gMy4wZiAqIG1zKSArIDIuMGYgKiBsdCAqIG1zKSk7Ci0gICAgICAgIHJlc3VsdC5r
bG1Db29yZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRChsdE1pbnVzTHMgKiBtdE1pbnVzTXMsCisg
ICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1szXSA9IEdyYXBoaWNzUG9pbnQzRChsdE1pbnVz
THMgKiBtdE1pbnVzTXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtKGx0TWludXNMcyAqIGx0TWludXNMcykgKiBtdE1pbnVzTXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbHRNaW51c0xzICogbXRNaW51
c01zICogbXRNaW51c01zKTsKICAgICAgICAgcmV2ZXJzZU9yaWVudGF0aW9uID0gKChjbGFzc2lm
aWNhdGlvbi5kMSA+IDAuMGYgJiYgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdLngoKSA8IDAuMGYp
CkBAIC0xMjIsMjYgKzEyMiwyNiBAQCBMb29wQmxpbm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQgTG9v
cEJsaW5uCiAgICAgICAgIGZsb2F0IGxzID0gY2xhc3NpZmljYXRpb24uZDM7CiAgICAgICAgIGZs
b2F0IGx0ID0gMy4wZiAqIGNsYXNzaWZpY2F0aW9uLmQyOwogICAgICAgICBmbG9hdCBsc01pbnVz
THQgPSBscyAtIGx0OwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBGbG9hdFBv
aW50M0QobHMsCisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEdyYXBoaWNzUG9p
bnQzRChscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxzICogbHMgKiBscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuMGYpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBv
aW50M0QobHMgLSBPbmVUaGlyZCAqIGx0LAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNb
MV0gPSBHcmFwaGljc1BvaW50M0QobHMgLSBPbmVUaGlyZCAqIGx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMgKiBscyAqIGxzTWludXNMdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwotICAg
ICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QobHMgLSBUd29UaGly
ZHMgKiBsdCwKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gR3JhcGhpY3NQb2lu
dDNEKGxzIC0gVHdvVGhpcmRzICogbHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsc01pbnVzTHQgKiBsc01pbnVzTHQgKiBscywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwotICAgICAgICByZXN1
bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QobHNNaW51c0x0LAorICAgICAgICBy
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBHcmFwaGljc1BvaW50M0QobHNNaW51c0x0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNNaW51c0x0ICog
bHNNaW51c0x0ICogbHNNaW51c0x0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMS4wZik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2Ug
TG9vcEJsaW5uQ2xhc3NpZmllcjo6a1F1YWRyYXRpYzogewotICAgICAgICByZXN1bHQua2xtQ29v
cmRpbmF0ZXNbMF0gPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7Ci0gICAgICAgIHJlc3VsdC5rbG1D
b29yZGluYXRlc1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCwgMCwgT25lVGhpcmQpOwotICAg
ICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QoVHdvVGhpcmRzLCBP
bmVUaGlyZCwgVHdvVGhpcmRzKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0g
RmxvYXRQb2ludDNEKDEsIDEsIDEpOworICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0g
PSBHcmFwaGljc1BvaW50M0QoMCwgMCwgMCk7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRl
c1sxXSA9IEdyYXBoaWNzUG9pbnQzRChPbmVUaGlyZCwgMCwgT25lVGhpcmQpOworICAgICAgICBy
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBHcmFwaGljc1BvaW50M0QoVHdvVGhpcmRzLCBPbmVU
aGlyZCwgVHdvVGhpcmRzKTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0gR3Jh
cGhpY3NQb2ludDNEKDEsIDEsIDEpOwogICAgICAgICBpZiAoY2xhc3NpZmljYXRpb24uZDMgPCAw
KQogICAgICAgICAgICAgcmV2ZXJzZU9yaWVudGF0aW9uID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4
dHVyZUNvb3Jkcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBMb29wQmxpbm5UZXh0
dXJlQ29vcmRzX2gKICNkZWZpbmUgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCiAKLSNpbmNsdWRl
ICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRl
ICJMb29wQmxpbm5DbGFzc2lmaWVyLmgiCiAjaW5jbHVkZSAiTG9vcEJsaW5uQ29uc3RhbnRzLmgi
CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFRoZSAoaywgbCwgbSkg
dGV4dHVyZSBjb29yZGluYXRlcyB0aGF0IGFyZSB0byBiZSBhc3NvY2lhdGVkCiAgICAgICAgIC8v
IHdpdGggdGhlIGZvdXIgY29udHJvbCBwb2ludHMgb2YgdGhlIGN1YmljIGN1cnZlLgotICAgICAg
ICBGbG9hdFBvaW50M0Qga2xtQ29vcmRpbmF0ZXNbNF07CisgICAgICAgIEdyYXBoaWNzUG9pbnQz
RCBrbG1Db29yZGluYXRlc1s0XTsKIAogICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUg
Y3VydmUgaXMgYSBsaW5lIG9yIGEgcG9pbnQsIGluIHdoaWNoIGNhc2UKICAgICAgICAgLy8gd2Ug
ZG8gbm90IG5lZWQgdG8gYWRkIGl0cyB0cmlhbmdsZXMgdG8gdGhlIG1lc2guCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIlRleHR1
cmUuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiVGlsaW5nRGF0YS5o
IgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtMTQ0LDEwICsx
NDQsMTAgQEAgSW50UmVjdCBUaWxpbmdEYXRhOjp0aWxlQm91bmRzV2l0aE91dGVyQgogICAgIHJl
dHVybiBib3VuZHM7CiB9CiAKLUZsb2F0UmVjdCBUaWxpbmdEYXRhOjp0aWxlQm91bmRzTm9ybWFs
aXplZChpbnQgdGlsZSkgY29uc3QKK0dyYXBoaWNzUmVjdCBUaWxpbmdEYXRhOjp0aWxlQm91bmRz
Tm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3QKIHsKICAgICBhc3NlcnRUaWxlKHRpbGUpOwotICAg
IEZsb2F0UmVjdCBib3VuZHModGlsZUJvdW5kcyh0aWxlKSk7CisgICAgR3JhcGhpY3NSZWN0IGJv
dW5kcyh0aWxlQm91bmRzKHRpbGUpKTsKICAgICBib3VuZHMuc2NhbGUoMS4wZiAvIG1fdG90YWxT
aXplWCwgMS4wZiAvIG1fdG90YWxTaXplWSk7CiAgICAgcmV0dXJuIGJvdW5kczsKIH0KQEAgLTIx
MywyMSArMjEzLDIxIEBAIEludFJlY3QgVGlsaW5nRGF0YTo6b3ZlcmxhcHBlZFRpbGVJbmRpY2UK
ICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCByIC0geCwgYiAtIHkpOwogfQogCi1JbnRSZWN0IFRp
bGluZ0RhdGE6Om92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qg
JnNyY1JlY3QpIGNvbnN0CitJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBwZWRUaWxlSW5kaWNl
cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgJnNyY1JlY3QpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpKTsKIH0K
IAotdm9pZCBUaWxpbmdEYXRhOjppbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCogbmV3U3JjLCBGbG9hdFJlY3QqIG5ld0Rz
dCkgY29uc3QKK3ZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQoY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGludCB0aWxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QqIG5ld1NyYywg
R3JhcGhpY3NSZWN0KiBuZXdEc3QpIGNvbnN0CiB7CiAgICAgLy8gSW50ZXJzZWN0IHdpdGggdGls
ZQotICAgIEZsb2F0UmVjdCB0aWxlQm91bmRzID0gdGhpcy0+dGlsZUJvdW5kcyh0aWxlKTsKLSAg
ICBGbG9hdFJlY3Qgc3JjUmVjdEludGVyc2VjdGVkID0gc3JjUmVjdDsKKyAgICBHcmFwaGljc1Jl
Y3QgdGlsZUJvdW5kcyA9IHRoaXMtPnRpbGVCb3VuZHModGlsZSk7CisgICAgR3JhcGhpY3NSZWN0
IHNyY1JlY3RJbnRlcnNlY3RlZCA9IHNyY1JlY3Q7CiAgICAgc3JjUmVjdEludGVyc2VjdGVkLmlu
dGVyc2VjdCh0aWxlQm91bmRzKTsKIAogICAgIGlmIChzcmNSZWN0SW50ZXJzZWN0ZWQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICpuZXdTcmMgPSAqbmV3RHN0ID0gRmxvYXRSZWN0KDAsIDAsIDAsIDAp
OworICAgICAgICAqbmV3U3JjID0gKm5ld0RzdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCAwLCAwKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgVGlsaW5n
RGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQoY29uc3QKICAgICAgICAgLXRpbGVCb3VuZHMueCgpICsg
bV9ib3JkZXJUZXhlbHMsCiAgICAgICAgIC10aWxlQm91bmRzLnkoKSArIG1fYm9yZGVyVGV4ZWxz
KTsKIAotICAgICpuZXdEc3QgPSBGbG9hdFJlY3QoCisgICAgKm5ld0RzdCA9IEdyYXBoaWNzUmVj
dCgKICAgICAgICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVggKiBkc3RSZWN0LndpZHRoKCkgKyBk
c3RSZWN0LngoKSwKICAgICAgICAgc3JjUmVjdEludGVyc2VjdGVkTm9ybVkgKiBkc3RSZWN0Lmhl
aWdodCgpICsgZHN0UmVjdC55KCksCiAgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1XICog
ZHN0UmVjdC53aWR0aCgpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1RpbGluZ0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7
CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiAK
QEAgLTYyLDE3ICs2MiwxNyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCB0aWxlQm91bmRzKGludCB0
aWxlKSBjb25zdDsKICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyKGludCB0aWxlKSBj
b25zdDsKICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoT3V0ZXJCb3JkZXIoaW50IHRpbGUpIGNv
bnN0OwotICAgIEZsb2F0UmVjdCB0aWxlQm91bmRzTm9ybWFsaXplZChpbnQgdGlsZSkgY29uc3Q7
CisgICAgR3JhcGhpY3NSZWN0IHRpbGVCb3VuZHNOb3JtYWxpemVkKGludCB0aWxlKSBjb25zdDsK
ICAgICBpbnQgdGlsZVBvc2l0aW9uWChpbnQgeEluZGV4KSBjb25zdDsKICAgICBpbnQgdGlsZVBv
c2l0aW9uWShpbnQgeUluZGV4KSBjb25zdDsKICAgICBpbnQgdGlsZVNpemVYKGludCB4SW5kZXgp
IGNvbnN0OwogICAgIGludCB0aWxlU2l6ZVkoaW50IHlJbmRleCkgY29uc3Q7CiAgICAgSW50UmVj
dCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Q7Ci0g
ICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
KSBjb25zdDsKKyAgICBJbnRSZWN0IG92ZXJsYXBwZWRUaWxlSW5kaWNlcyhjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QpIGNvbnN0OwogCiAgICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc291cmNlIGFu
ZCBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgYSBkcmF3aW5nIHF1YWQKICAgICAvLyBpbiB0
ZXhlbCB1bml0cywgcmV0dXJucyBhZGp1c3RlZCBkYXRhIHRvIHJlbmRlciBqdXN0IHRoZSBvbmUg
dGlsZS4KLSAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBpbnQgdGlsZSwgRmxvYXRSZWN0KiBuZXdTcmMs
IEZsb2F0UmVjdCogbmV3RHN0KSBjb25zdDsKKyAgICB2b2lkIGludGVyc2VjdERyYXdRdWFkKGNv
bnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBp
bnQgdGlsZSwgR3JhcGhpY3NSZWN0KiBuZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25z
dDsKIAogICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiB0aWxlQm91bmQncyBhbmQgdGlsZUJvdW5k
V2l0aEJvcmRlcidzIGxvY2F0aW9uKCkuCiAgICAgSW50UG9pbnQgdGV4dHVyZU9mZnNldCgpIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250R3RrLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCw3ICsyMTgsNyBA
QCBib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgUGFuZ29MYXlvdXRMaW5l
KiBsYXlvdXRMaW5lLCBQYW5nb1JlZ2lvblR5cGUgcmVuZGVyUmVnaW9uKQorc3RhdGljIHZvaWQg
ZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQsIFBhbmdvTGF5b3V0TGluZSogbGF5b3V0TGluZSwgUGFuZ29S
ZWdpb25UeXBlIHJlbmRlclJlZ2lvbikKIHsKICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBn
cmFwaGljc0NvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKICAgICBBU1NFUlQoc2hhZG93KTsKQEAg
LTIyNiw3ICsyMjYsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29u
CiAgICAgaWYgKCEoZ3JhcGhpY3NDb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2Rl
RmlsbCkgfHwgc2hhZG93LT5tX3R5cGUgPT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgdG90YWxPZmZzZXQocG9pbnQgKyBzaGFkb3ct
Pm1fb2Zmc2V0KTsKKyAgICBHcmFwaGljc1BvaW50IHRvdGFsT2Zmc2V0KHBvaW50ICsgc2hhZG93
LT5tX29mZnNldCk7CiAKICAgICAvLyBPcHRpbWl6ZSBub24tYmx1cnJ5IHNoYWRvd3MsIGJ5IGp1
c3QgZHJhd2luZyB0ZXh0IHdpdGhvdXQgdGhlIENvbnRleHRTaGFkb3cuCiAgICAgaWYgKCFzaGFk
b3ctPm11c3RVc2VDb250ZXh0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkpIHsKQEAgLTI0Myw4ICsy
NDMsOCBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29uCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4
dGVudHMocmVuZGVyUmVnaW9uKSk7Ci0gICAgZXh0ZW50cy5zZXRMb2NhdGlvbihGbG9hdFBvaW50
KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOworICAgIEdyYXBoaWNz
UmVjdCBleHRlbnRzKGdldFBhbmdvUmVnaW9uRXh0ZW50cyhyZW5kZXJSZWdpb24pKTsKKyAgICBl
eHRlbnRzLnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBl
eHRlbnRzLmhlaWdodCgpKSk7CiAgICAgY2Fpcm9fdCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+
YmVnaW5TaGFkb3dMYXllcihncmFwaGljc0NvbnRleHQsIGV4dGVudHMpOwogICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShzaGFkb3dDb250ZXh0LCBwb2lu
dC54KCksIHBvaW50LnkoKSk7CkBAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIHZvaWQgZHJhd0ds
eXBoc1NoYWRvdyhHcmFwaGljc0NvbgogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
ewogI2lmIFVTRShGUkVFVFlQRSkKICAgICBpZiAoIXByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0
YSgpLm1fcGF0dGVybikgewpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyog
Y29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcm
IC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAq
LywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYg
LyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0zOTksNyArMzk5LDcgQEAgaW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAK
LUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewogI2lmIFVTRShGUkVFVFlQRSkKICAgICBpZiAoIXByaW1h
cnlGb250KCktPnBsYXRmb3JtRGF0YSgpLm1fcGF0dGVybikKQEAgLTQzOSw3ICs0MzksNyBAQCBG
bG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAgICAgZ19mcmVlKHV0Zjgp
OwogICAgIGdfb2JqZWN0X3VucmVmKGxheW91dCk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KHBv
aW50LngoKSArIGJlZm9yZVdpZHRoLCBwb2ludC55KCksIGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCwgaCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChwb2ludC54KCkgKyBiZWZvcmVXaWR0aCwg
cG9pbnQueSgpLCBhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgsIGgpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zs
b2F0UG9pbnRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQb2ludEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaW5j
bHVkZSA8UG9pbnQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UG9pbnQ6OkZs
b2F0UG9pbnQoY29uc3QgQlBvaW50JiBwb2ludCkKLSAgICA6IG1feChwb2ludC54KQotICAgICwg
bV95KHBvaW50LnkpCi17Ci19Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEJQb2ludChtX3gsIG1feSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxv
YXRSZWN0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+Ci0gKgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0KLSNpbmNsdWRlIDxSZWN0Lmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
bG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBCUmVjdCYgcmVjdCkKLSAgICA6IG1fbG9jYXRpb24o
cmVjdC5MZWZ0VG9wKCkpCi0gICAgLCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5IZWln
aHQoKSArIDEpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAotewot
ICAgIHJldHVybiBCUmVjdChCUG9pbnQoeCgpLCB5KCkpLCBCU2l6ZSh3aWR0aCgpIC0gMSwgaGVp
Z2h0KCkgLSAxKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRm9udEhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ZvbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBG
b250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogfQogCiB2b2lkIEZvbnQ6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
KSBjb25zdAogewogICAgIENvbG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3Io
KTsKICAgICBCVmlldyogdmlldyA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CkBAIC05MiwxMyArOTIsMTMgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogZwogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsCit2
b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25z
dCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICov
LCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywg
Y29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8s
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8q
IHRvICovKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0xMDksMTAgKzEw
OSwxMCBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uCiAgICAgcmV0
dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAor
R3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCwgaW50LCBpbnQpIGNvbnN0CiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdCgpOwogfQogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQsIGJvb2wpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBQbGF0Zm9ybUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpCiAgICAgcmV0dXJuIG1f
Z3JhZGllbnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5GaWxsUmVjdChyZWN0LCAqcGxhdGZvcm1HcmFkaWVudCgp
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250
ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgcG9pbnRz
TGVuZ3RoLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBwb2ludHNMZW5n
dGgsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ5LDcg
KzE0OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICAg
ICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0
cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBib29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9v
bCBhbnRpYWxpYXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252
ZXhQb2x5Z29uKAogICAgIC8vIEZJWE1FOiBJTVBMRU1FTlQhIQogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvCiAgICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5
Myw3ICsxOTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0Q2hlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitH
cmFwaGljc1JlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBy
ZWN0OwpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWEKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC01MzQsNyArNTM0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkbwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhGbG9h
dFNpemUgY29uc3QmLCBmbG9hdCwgQ29sb3IgY29uc3QmLCBDb2xvclNwYWNlKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KEdyYXBoaWNzU2l6ZSBjb25zdCYsIGZsb2F0
LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUG9p
bnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhcGhpY3NQb2ludEhhaWt1LmNwcAkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHA6
OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGlj
c1BvaW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxQb2ludC5oPgorCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBCUG9pbnQmIHBv
aW50KQorICAgIDogbV94KHBvaW50LngpCisgICAgLCBtX3kocG9pbnQueSkKK3sKK30KKworRmxv
YXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlBvaW50KG1f
eCwgbV95KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc1BvaW50SGFpa3UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNz
UG9pbnRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NQb2ludEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMjAgKzI2LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKICNpbmNsdWRlIDxQ
b2ludC5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRQb2ludDo6RmxvYXRQb2lu
dChjb25zdCBCUG9pbnQmIHBvaW50KQorR3JhcGhpY3NQb2ludDo6R3JhcGhpY3NQb2ludChjb25z
dCBCUG9pbnQmIHBvaW50KQogICAgIDogbV94KHBvaW50LngpCiAgICAgLCBtX3kocG9pbnQueSkK
IHsKIH0KIAotRmxvYXRQb2ludDo6b3BlcmF0b3IgQlBvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9p
bnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEJQb2ludChtX3gsIG1f
eSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc1JlY3RIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NSZWN0SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3Uu
Y3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
cGhpY3NSZWN0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214
LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCisjaW5jbHVkZSA8UmVjdC5oPgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQlJlY3QmIHJl
Y3QpCisgICAgOiBtX2xvY2F0aW9uKHJlY3QuTGVmdFRvcCgpKQorICAgICwgbV9zaXplKHJlY3Qu
V2lkdGgoKSArIDEsIHJlY3QuSGVpZ2h0KCkgKyAxKQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJh
dG9yIEJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwg
QlNpemUod2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YXBoaWNzUmVjdEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc1JlY3RIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NSZWN0SGFp
a3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMjAgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAKICNpbmNsdWRlIDxSZWN0Lmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
bG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBCUmVjdCYgcmVjdCkKK0dyYXBoaWNzUmVjdDo6R3Jh
cGhpY3NSZWN0KGNvbnN0IEJSZWN0JiByZWN0KQogICAgIDogbV9sb2NhdGlvbihyZWN0LkxlZnRU
b3AoKSkKICAgICAsIG1fc2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0LkhlaWdodCgpICsgMSkK
IHsKIH0KIAotRmxvYXRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3Q6
Om9wZXJhdG9yIEJSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwg
eSgpKSwgQlNpemUod2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSkpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJJbWFnZS5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0
ZVBsYXRmb3JtRGF0YQogfQogCiAvLyBEcmF3aW5nIFJvdXRpbmVzCi12b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFt
X3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjEsNyArMTIxLDcg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBpbWFn
ZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCkKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCkKIHsKICAg
ICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYg
KCFpbWFnZSB8fCAhaW1hZ2UtPklzVmFsaWQoKSkgLy8gSWYgdGhlIGltYWdlIGhhc24ndCBmdWxs
eSBsb2FkZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9Q
YXRoSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDxSZWdpb24uaD4KQEAgLTY1LDUxICs2NSw1MSBAQCBib29sIFBhdGg6
Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CiAgICAgcmV0dXJuICFpc0VtcHR5KCk7CiB9CiAKLUZs
b2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCitHcmFwaGljc1BvaW50IFBhdGg6
OmN1cnJlbnRQb2ludCgpIGNvbnN0IAogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgc2FmZSB3
YXkgdG8gcmV0dXJuIGN1cnJlbnQgcG9pbnQgb2Ygc3VicGF0aC4KICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIGZsb2F0IHF1aWV0TmFOID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHF1aWV0TmFOLCBxdWlldE5hTik7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQocXVpZXROYU4sIHF1aWV0TmFOKTsKIH0KIAotYm9vbCBQ
YXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29u
c3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIFdpbmRS
dWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9pbnQpOwog
fQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFBh
dGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CitHcmFw
aGljc1JlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYXRo
LT5GcmFtZSgpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAg
IC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkTGlu
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3Qg
RmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYgY3AsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNw
MSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRo
OjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMSwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgY3AyLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgcmFk
aXVzKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0xMTksMTcgKzExOSwxNyBAQCB2
b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBm
bG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGlj
bG9ja3dpc2UpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBQYXRoOjphZGRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGlj
c1JlY3QmIHIpCiB7CiAgICAgbV9wYXRoLT5JbmNsdWRlKHIpOwogfQogCi12b2lkIFBhdGg6OmFk
ZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0
IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTU0LDEw
ICsxNTQsMTAgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1Jl
Y3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKQorR3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9r
ZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250
RGF0YUhhaWt1LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9TaW1wbGVGb250RGF0YUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L1N0aWxsSW1hZ2VIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDggQEAg
TmF0aXZlSW1hZ2VQdHIgU3RpbGxJbWFnZTo6bmF0aXZlSW1hZ2VGbwogICAgIHJldHVybiAmbV9i
aXRtYXA7CiB9CiAKLXZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKK3ZvaWQgU3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzb3VyY2VSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
IHsKICAgICBpZiAoIW1fYml0bWFwLklzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3Rp
bGxJbWFnZUhhaWt1LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJbWFnZUhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKIHByaXZhdGU6CiAgICAgU3RpbGxJbWFnZShjb25zdCBCQml0bWFwJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgogCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAtNDg5LDcgKzQ4OSw3
IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAgICAg
ICAgICBpZiAodHJlYXRBc1NwYWNlIHx8IEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woY2gp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgdGhlIHJ1bidzIHRvdGFsIGV4
cGFuc2lvbiBldmVubHkgb3ZlciBhbGwgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMgaW4gdGhlIHJ1
bi4KICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZXhwYW5zaW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBwcmV2aW91c0V4cGFuc2lvbiA9IG1fZXhwYW5zaW9uOworICAgICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NVbml0IHByZXZpb3VzRXhwYW5zaW9uID0gbV9leHBh
bnNpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRyZWF0QXNTcGFjZSAmJiAhbV9h
ZnRlckV4cGFuc2lvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRha2UgdGhl
IGV4cGFuc2lvbiBvcHBvcnR1bml0eSBiZWZvcmUgdGhpcyBpZGVvZ3JhcGguCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9leHBhbnNpb24gLT0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eTsKQEAgLTU1MSw3ICs1NTEsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0
R2x5cGhzCiAgICAgICAgICAgICBtX2FkanVzdGVkQWR2YW5jZXMuYXBwZW5kKGFkdmFuY2UpOwog
ICAgICAgICAgICAgbV9hZGp1c3RlZEdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9y
R2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IGdseXBoQm91bmRzID0gZm9u
dERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRzLm1v
dmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhPcmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkdseXBo
Qm91bmRpbmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngo
KSk7CiAgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5cGhC
b3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJv
bGxlci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDE4
ICsxODUsMTggQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jdXJyZW50UnVuOwogICAgIHVuc2ln
bmVkIG1fZ2x5cGhJbkN1cnJlbnRSdW47CiAgICAgdW5zaWduZWQgbV9jaGFyYWN0ZXJJbkN1cnJl
bnRHbHlwaDsKLSAgICBmbG9hdCBtX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICBmbG9hdCBtX2V4
cGFuc2lvbjsKLSAgICBmbG9hdCBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OwotICAgIGZsb2F0
IG1fbGVhZGluZ0V4cGFuc2lvbjsKKyAgICBHcmFwaGljc1VuaXQgbV9maW5hbFJvdW5kaW5nV2lk
dGg7CisgICAgR3JhcGhpY3NVbml0IG1fZXhwYW5zaW9uOworICAgIEdyYXBoaWNzVW5pdCBtX2V4
cGFuc2lvblBlck9wcG9ydHVuaXR5OworICAgIEdyYXBoaWNzVW5pdCBtX2xlYWRpbmdFeHBhbnNp
b247CiAgICAgYm9vbCBtX2FmdGVyRXhwYW5zaW9uOwogCiAgICAgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiBtX2ZhbGxiYWNrRm9udHM7CiAKLSAgICBmbG9hdCBtX21pbkdseXBoQm91
bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFg7Ci0gICAgZmxvYXQg
bV9taW5HbHlwaEJvdW5kaW5nQm94WTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hZ
OworICAgIEdyYXBoaWNzVW5pdCBtX21pbkdseXBoQm91bmRpbmdCb3hYOworICAgIEdyYXBoaWNz
VW5pdCBtX21heEdseXBoQm91bmRpbmdCb3hYOworICAgIEdyYXBoaWNzVW5pdCBtX21pbkdseXBo
Qm91bmRpbmdCb3hZOworICAgIEdyYXBoaWNzVW5pdCBtX21heEdseXBoQm91bmRpbmdCb3hZOwog
CiAgICAgdW5zaWduZWQgbV9sYXN0Um91bmRpbmdHbHlwaDsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
RmxvYXRQb2ludE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTCi0KLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgTlNQ
b2ludCYgcCkgOiBtX3gocC54KSwgbV95KHAueSkKLXsKLX0KLQotRmxvYXRQb2ludDo6b3BlcmF0
b3IgTlNQb2ludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE5TTWFrZVBvaW50KG1feCwgbV95KTsK
LX0KLQotI2VuZGlmCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9GbG9hdFJlY3RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0jaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCi0KLUZs
b2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYgcikgOiBtX2xvY2F0aW9uKHIub3JpZ2lu
KSwgbV9zaXplKHIuc2l6ZSkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBOU1JlY3QoKSBj
b25zdAotewotICAgIHJldHVybiBOU01ha2VSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQo
KSk7Ci19Ci0KLSNlbmRpZgotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0JKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSAKLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0jaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
Ci0KLUZsb2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lk
dGgpLCBtX2hlaWdodChzLmhlaWdodCkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRvciBOU1Np
emUoKSBjb25zdAotewotICAgIHJldHVybiBOU01ha2VTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsK
LX0KLQotI2VuZGlmCi0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxl
eFRleHRNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgaCwKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwg
aW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIodGhpcywgcnVuKTsKQEAgLTUwLDEwICs1MCwxMCBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUCiAgICAgLy8gVXNpbmcgcm91bmRmKCkgcmF0aGVyIHRoYW4gY2Vp
bGYoKSBmb3IgdGhlIHJpZ2h0IGVkZ2UgYXMgYSBjb21wcm9taXNlIHRvIGVuc3VyZSBjb3JyZWN0
IGNhcmV0IHBvc2l0aW9uaW5nCiAgICAgaWYgKHJ1bi5ydGwoKSkgewogICAgICAgICBmbG9hdCB0
b3RhbFdpZHRoID0gY29udHJvbGxlci50b3RhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QoZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQu
eSgpLCByb3VuZGYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29y
Zihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0
aCksIHBvaW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0
aCkgLSBmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKICAg
ICB9IAogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lk
dGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyBhZnRlcldpZHRoKSAtIGZsb29yZihw
b2ludC54KCkgKyBiZWZvcmVXaWR0aCksIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoZmxv
b3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgp
ICsgYWZ0ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsKIH0K
IAogZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
Rm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdApAQCAtODAsNyArODAs
NyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0dXJu
IGluaXRpYWxBZHZhbmNlOwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhp
cyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZv
ciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtOTIsMTEgKzky
LDExIEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRHJhdyB0aGUgZ2x5cGggYnVmZmVyIG5vdyBhdCB0aGUgc3RhcnRp
bmcgcG9pbnQgcmV0dXJuZWQgaW4gc3RhcnRYLgotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChz
dGFydFgsIHBvaW50LnkoKSk7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwg
cG9pbnQueSgpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZl
ciwgc3RhcnRQb2ludCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBp
bml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBm
cm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZQogICAgIGlmIChnbHlw
aEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRyYXdFbXBoYXNpc01h
cmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgp
ICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOworICAgIGRyYXdFbXBoYXNpc01hcmtzKGNv
bnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIG1hcmssIEdyYXBoaWNzUG9pbnQocG9pbnQueCgpICsg
aW5pdGlhbEFkdmFuY2UsIHBvaW50LnkoKSkpOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dE1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0
aWMgYm9vbCBoYXNCcm9rZW5DVEZvbnRHZXRWZXJ0aWNhbFRyCiAjZW5kaWYKIH0KIAotc3RhdGlj
IHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0ds
eXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBjb3VudCkKK3N0YXRp
YyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3Qg
Q0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQpCiB7
CiAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIHBvaW50LngoKSwgcG9pbnQu
eSgpKTsKIApAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoY29uc3QKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJp
eChjb250ZXh0KSk7CiAKLSAgICAgICAgICAgIENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBvaW50
KHBvaW50LngoKSwgcG9pbnQueSgpICsgZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJ
ZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7
CisgICAgICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gR3JhcGhpY3NQb2ludChwb2ludC54KCks
IHBvaW50LnkoKSArIGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNC
YXNlbGluZSkgLSBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpOwogICAgICAgICAg
ICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIENHU2l6
ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKHRyYW5zbGF0aW9uc1tp
XSwgdHJhbnNsYXRpb25zVHJhbnNmb3JtKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgdm9p
ZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0CiAjZW5kaWYKIH0KIAotdm9pZCBGb250Ojpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtMjE1LDcgKzIxNSw3
IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGMKICAgICAgICAgQ0dD
b250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEubV9zaXplKTsKIAogCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zmc2V0
OwogICAgIGZsb2F0IHNoYWRvd0JsdXI7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29s
b3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOwpAQCAtMjMyLDE1ICsyMzIsMTUgQEAgdm9pZCBGb250
OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICBmbG9hdCBzaGFkb3dUZXh0
WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFk
b3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUg
WSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgogICAgICAgICBmbG9h
dCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250
ZXh0LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZv
bnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhH
cmFwaGljc1BvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzKTsKICAgICAgICAgaWYgKGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKLSAgICAg
ICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIGZv
bnQtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51
bUdseXBocyk7CisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEdyYXBoaWNzUG9p
bnQoc2hhZG93VGV4dFggKyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZ
KSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwogICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IoZmlsbENvbG9yLCBmaWxsQ29sb3JTcGFjZSk7CiAgICAgfQogCiAgICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwogICAgIGlmIChmb250
LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMo
RmxvYXRQb2ludChwb2ludC54KCkgKyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50
LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhHcmFwaGljc1BvaW50KHBvaW50LngoKSArIGZvbnQtPnN5bnRoZXRpY0JvbGRPZmZz
ZXQoKSwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwogCiAgICAgaWYgKGhh
c1NpbXBsZVNoYWRvdykKICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0TWFjLm1tCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1
LDcgKzk1LDcgQEAgc3RhdGljIE5TQ29sb3IqIGNyZWF0ZVBhdHRlcm5Db2xvcihOU1N0cgogfQog
CiAvLyBXZWJLaXQgb24gTWFjIGlzIGEgc3RhbmRhcmQgcGxhdGZvcm0gY29tcG9uZW50LCBzbyBp
dCBtdXN0IHVzZSB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gYXJ0d29yayBmb3IgdW5kZXJsaW5lLgot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxl
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1BvaW50TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc1BvaW50TWFjLm1tCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW06OTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NQb2ludE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCisKK0Zs
b2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgTlNQb2ludCYgcCkgOiBtX3gocC54KSwgbV95KHAu
eSkKK3sKK30KKworRmxvYXRQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIE5TTWFrZVBvaW50KG1feCwgbV95KTsKK30KKworI2VuZGlmCisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1BvaW50TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c1BvaW50TWFjLm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc1BvaW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
NyArMjUsMTcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAjaWZuZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAK
LUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgTlNQb2ludCYgcCkgOiBtX3gocC54KSwgbV95
KHAueSkKK0dyYXBoaWNzUG9pbnQ6OkdyYXBoaWNzUG9pbnQoY29uc3QgTlNQb2ludCYgcCkgOiBt
X3gocC54KSwgbV95KHAueSkKIHsKIH0KIAotRmxvYXRQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgp
IGNvbnN0CitHcmFwaGljc1BvaW50OjpvcGVyYXRvciBOU1BvaW50KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gTlNNYWtlUG9pbnQobV94LCBtX3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUmVjdE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NSZWN0TWFjLm1tCShyZXZp
c2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zs
b2F0UmVjdE1hYy5tbTo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc1JlY3RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKKworRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qg
TlNSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQoreworfQor
CitGbG9hdFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5TTWFr
ZVJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworI2VuZGlmCisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1JlY3RNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzUmVjdE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NSZWN0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxNyArMjUsMTcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwog
Ci1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9y
aWdpbiksIG1fc2l6ZShyLnNpemUpCitHcmFwaGljc1JlY3Q6OkdyYXBoaWNzUmVjdChjb25zdCBO
U1JlY3QmIHIpIDogbV9sb2NhdGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCiB7CiB9CiAK
LUZsb2F0UmVjdDo6b3BlcmF0b3IgTlNSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdDo6b3BlcmF0
b3IgTlNSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gTlNNYWtlUmVjdCh4KCksIHkoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NTaXplTWFjLm1tCShyZXZpc2lvbiA5MTAxMSkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5t
bTo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c1NpemVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUworCitGbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBOU1NpemUmIHMp
IDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCit7Cit9CisKK0Zsb2F0U2l6
ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlNNYWtlU2l6ZShtX3dp
ZHRoLCBtX2hlaWdodCk7Cit9CisKKyNlbmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NTaXplTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1NpemVNYWMubW0JKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzU2l6ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcgKzI1LDE3IEBACiAgKi8K
ICAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1NpemUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWZuZGVmIE5TR0VP
TUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiAKLUZsb2F0U2l6ZTo6RmxvYXRT
aXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBtX2hlaWdodChzLmhlaWdo
dCkKK0dyYXBoaWNzU2l6ZTo6R3JhcGhpY3NTaXplKGNvbnN0IE5TU2l6ZSYgcykgOiBtX3dpZHRo
KHMud2lkdGgpLCBtX2hlaWdodChzLmhlaWdodCkKIHsKIH0KIAotRmxvYXRTaXplOjpvcGVyYXRv
ciBOU1NpemUoKSBjb25zdAorR3JhcGhpY3NTaXplOjpvcGVyYXRvciBOU1NpemUoKSBjb25zdAog
ewogICAgIHJldHVybiBOU01ha2VTaXplKG1fd2lkdGgsIG1faGVpZ2h0KTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgor
I2ltcG9ydCAiR3JhcGhpY3NSZWN0LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bXBvcnQgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVR
VEtpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGUuaCIKICNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lm
ZGVmIF9fT0JKQ19fCkBAIC0yMDAsNyArMjAwLDcgQEAgcHJpdmF0ZToKICAgICBNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBJbnRSZWN0IG1fcmVjdDsKLSAgICBGbG9hdFNpemUgbV9z
Y2FsZUZhY3RvcjsKKyAgICBHcmFwaGljc1NpemUgbV9zY2FsZUZhY3RvcjsKICAgICB1bnNpZ25l
ZCBtX2VuYWJsZWRUcmFja0NvdW50OwogICAgIHVuc2lnbmVkIG1fdG90YWxUcmFja0NvdW50Owog
ICAgIGZsb2F0IG1fcmVwb3J0ZWREdXJhdGlvbjsKQEAgLTIyMCw3ICsyMjAsNyBAQCBwcml2YXRl
OgogICAgIGRvdWJsZSBtX3RpbWVTdGFydGVkUGxheWluZzsKICAgICBkb3VibGUgbV90aW1lU3Rv
cHBlZFBsYXlpbmc7CiAjZW5kaWYKLSAgICBtdXRhYmxlIEZsb2F0U2l6ZSBtX2NhY2hlZE5hdHVy
YWxTaXplOworICAgIG11dGFibGUgR3JhcGhpY3NTaXplIG1fY2FjaGVkTmF0dXJhbFNpemU7CiB9
OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclBy
aXZhdGVRVEtpdC5tbQkod29ya2luZyBjb3B5KQpAQCAtODI2LDcgKzgyNiw3IEBAIEludFNpemUg
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6Om5hdHVyYWwKICAgICAvLyAgICBkaW1lbnNpb25zLCBh
c3BlY3QgcmF0aW8sIGNsZWFuIGFwZXJ0dXJlLCByZXNvbHV0aW9uLCBhbmQgc28gZm9ydGgsIGFz
IGRlZmluZWQgZm9yIHRoZSAKICAgICAvLyAgICBmb3JtYXQgdXNlZCBieSB0aGUgcmVzb3VyY2UK
ICAgICAKLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoW1ttX3F0TW92aWUuZ2V0KCkgYXR0cmli
dXRlRm9yS2V5OlFUTW92aWVOYXR1cmFsU2l6ZUF0dHJpYnV0ZV0gc2l6ZVZhbHVlXSk7CisgICAg
R3JhcGhpY3NTaXplIG5hdHVyYWxTaXplKFtbbV9xdE1vdmllLmdldCgpIGF0dHJpYnV0ZUZvcktl
eTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVWYWx1ZV0pOwogICAgIGlmIChuYXR1
cmFsU2l6ZS5pc0VtcHR5KCkgJiYgbV9pc1N0cmVhbWluZykgewogICAgICAgICAvLyBIVFRQIExp
dmUgU3RyZWFtcyB3aWxsIG9jY2FzaW9uYWxseSByZXR1cm4gezAsMH0gbmF0dXJhbCBzaXplcyB3
aGlsZSBzY3J1YmJpbmcuCiAgICAgICAgIC8vIFdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSAoPHJk
YXI6Ly9wcm9ibGVtLzkwNzg1NjM+KSBieSByZXR1cm5pbmcgdGhlIGxhc3QgdmFsaWQgCkBAIC0x
MzA2LDcgKzEzMDYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYWludChHcmFw
CiAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIHNldERlbGF5Q2FsbGJhY2tzOllFU107CiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuZXdD
b250ZXh0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigxLjBmLCAtMS4wZik7CisgICAgR3Jh
cGhpY3NTaXplIHNjYWxlRmFjdG9yKDEuMGYsIC0xLjBmKTsKICAgICBJbnRSZWN0IHBhaW50UmVj
dChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZShyLndpZHRoKCksIHIuaGVpZ2h0KCkpKTsKIAogI2lm
IFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpCkBAIC0xMzcxLDcgKzEzNzEsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYWludChHcmFwCiAgICAgICAgICAgICBTdHJpbmcgdGV4
dCA9IFN0cmluZzo6Zm9ybWF0KCIlMS4yZiIsIGZyYW1lUmF0ZSk7CiAgICAgICAgICAgICBUZXh0
UnVuIHRleHRSdW4odGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOwogICAgICAgICAg
ICAgY29uc3QgQ29sb3IgY29sb3IoMjU1LCAwLCAwKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNj
YWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOyAgICAKKyAgICAgICAgICAgIGNvbnRleHQtPnNj
YWxlKEdyYXBoaWNzU2l6ZSgxLjBmLCAtMS4wZikpOyAgICAKICAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKGNvbG9yLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5t
bQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
IAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb2xvci5oIgotI2ltcG9y
dCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJHcmFwaGljc1JlY3QuaCIKICNpbXBvcnQgIkZvbnQu
aCIKICNpbXBvcnQgIkZvbnRDYWNoZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCkBA
IC0zODYsOSArMzg2LDkgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQog
ICAgICAgICAgICBbbmFtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiTW9ub3R5cGVDb3JzaXZh
Il0gIT0gTlNPcmRlcmVkU2FtZTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0
Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorR3JhcGhpY3NSZWN0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewot
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3g7
CiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250SG9yaXpvbnRhbE9yaWVu
dGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwogICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94
Lm1heFkoKSk7CiAgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJl
TWFwcGVyR0wuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzMsNyArMjMzLDcgQEAgcHVibGljOgogICAgIH5CaXRtYXBUZXh0dXJlR0woKSB7IGRlc3Ryb3ko
KTsgfQogICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAg
ICAgaW5saW5lIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQotICAg
IGlubGluZSBGbG9hdFNpemUgcmVsYXRpdmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGl2
ZVNpemU7IH0KKyAgICBpbmxpbmUgR3JhcGhpY3NTaXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVsYXRpdmVTaXplOyB9CiAgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXJHTCogdGV4bWFwKSB7IG1fdGV4dHVyZU1hcHBlciA9IHRleG1hcDsgfQogCiAgICAg
dm9pZCBwYWNrKCkKQEAgLTI2MCw3ICsyNjAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdM
dWludCBtX2lkOwogICAgIEltYWdlVUlEIG1faW1hZ2VVSUQ7Ci0gICAgRmxvYXRTaXplIG1fcmVs
YXRpdmVTaXplOworICAgIEdyYXBoaWNzU2l6ZSBtX3JlbGF0aXZlU2l6ZTsKICAgICBib29sIG1f
b3BhcXVlOwogICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKICAgICBSZWZQdHI8UkdCQTMyUHJl
bXVsdGltcGxpZWRCdWZmZXI+IG1fYnVmZmVyOwpAQCAtNDEyLDcgKzQxMiw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiB9CiAKIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFzaykKK3ZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2spCiB7CiAgICAgaWYgKCF0ZXh0
dXJlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCAKICAgICBkcmF3VGV4dHVyZSh0ZXh0
dXJlR0wuaWQoKSwgdGV4dHVyZUdMLmlzT3BhcXVlKCksIHRleHR1cmVHTC5yZWxhdGl2ZVNpemUo
KSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCBmYWxzZSk7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1
ZSwgY29uc3QgRmxvYXRTaXplJiByZWxhdGl2ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxpcCkKK3Zv
aWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9w
YXF1ZSwgY29uc3QgR3JhcGhpY3NTaXplJiByZWxhdGl2ZVNpemUsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wg
ZmxpcCkKIHsKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhOjpHbG9iYWxHTERhdGE6OlNoYWRlclBy
b2dyYW1JbmRleCBwcm9ncmFtOwogICAgIGlmIChtYXNrVGV4dHVyZSkKQEAgLTUxMSw3ICs1MTEs
NyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6cmVzZXQoY29uc3QgSW50U2l6CiAgICAgICAgIEdM
X0NNRChnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgbV90ZXh0dXJlU2l6
ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKSkKICAgICB9CiAgICAgbV9hY3R1YWxTaXplID0gbmV3U2l6ZTsKLSAgICBtX3Jl
bGF0aXZlU2l6ZSA9IEZsb2F0U2l6ZShmbG9hdChuZXdTaXplLndpZHRoKCkpIC8gbV90ZXh0dXJl
U2l6ZS53aWR0aCgpLCBmbG9hdChuZXdTaXplLmhlaWdodCgpKSAvIG1fdGV4dHVyZVNpemUuaGVp
Z2h0KCkpOworICAgIG1fcmVsYXRpdmVTaXplID0gR3JhcGhpY3NTaXplKGZsb2F0KG5ld1NpemUu
d2lkdGgoKSkgLyBtX3RleHR1cmVTaXplLndpZHRoKCksIGZsb2F0KG5ld1NpemUuaGVpZ2h0KCkp
IC8gbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CiAgICAgbV9vcGFxdWUgPSBvcGFxdWU7CiAgICAg
bV9zdXJmYWNlTmVlZHNSZXNldCA9IHRydWU7CiB9CkBAIC02MjAsNyArNjIwLDcgQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OmRlc3Ryb3koKQogICAgIG1fZmJvID0gMDsKICAgICBtX2lkID0gMDsK
ICAgICBtX3RleHR1cmVTaXplID0gSW50U2l6ZSgpOwotICAgIG1fcmVsYXRpdmVTaXplID0gRmxv
YXRTaXplKDEsIDEpOworICAgIG1fcmVsYXRpdmVTaXplID0gR3JhcGhpY3NTaXplKDEsIDEpOwog
fQogCiBib29sIEJpdG1hcFRleHR1cmVHTDo6aXNWYWxpZCgpIGNvbnN0CkBAIC02NTQsNyArNjU0
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKEJpdG1hcAogICAgIHN1cmZh
Y2UtPmJpbmQoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QpCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0
UmVjdCkKIHsKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhOjpHbG9iYWxHTERhdGE6OlNoYWRlclBy
b2dyYW1JbmRleCBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xEYXRhOjpD
bGlwUHJvZ3JhbTsKICAgICBjb25zdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpHbG9iYWxHTERhdGE6
OlByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9IGRhdGEoKS5nbG9iYWxHTERhdGEucHJvZ3JhbXNb
cHJvZ3JhbV07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyR0woKTsKIAogICAgIC8vIHJlaW1wcyBmcm9tIFRleHR1cmVNYXBwZXIKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4
dHVyZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEdyYXBoaWNz
UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVy
ZSh1aW50MzJfdCB0ZXh0dXJlLCBib29sIG9wYXF1ZSwgY29uc3QgR3JhcGhpY3NTaXplJiwgY29u
c3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFj
aXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSwgYm9vbCBmbGlwKTsKICAgICB2
aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xp
cCgpOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRl
VGV4dHVyZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZn
L0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dyYXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0dy
YXBoaWNzQ29udGV4dE9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAgICAgbV9kYXRhLT5k
cmF3QXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3BhbiwgVkdfU1RST0tFX1BBVEgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25z
dCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1Miw3ICsxNTIsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgbV9kYXRhLT5k
cmF3UGF0aChwYXRoLCBWR19TVFJPS0VfUEFUSCwgbV9zdGF0ZS5maWxsUnVsZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw3ICsx
NjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgbV9k
YXRhLT5kcmF3UmVjdChyZWN0LCBWR19GSUxMX1BBVEgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KGNvCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOyAvLyBGSVhNRQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjI1LDcgKzIyNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAgICBDb2xvciBvbGRTdHJv
a2VDb2xvciA9IG1fZGF0YS0+c3Ryb2tlQ29sb3IoKTsKICAgICBtX2RhdGEtPnNldFN0cm9rZVN0
eWxlKERhc2hlZFN0cm9rZSk7CiAgICAgbV9kYXRhLT5zZXRTdHJva2VDb2xvcihjb2xvcik7Ci0g
ICAgc3Ryb2tlUmVjdChGbG9hdFJlY3QoZmluYWxGb2N1c1JlY3QpLCAxLmYpOworICAgIHN0cm9r
ZVJlY3QoR3JhcGhpY3NSZWN0KGZpbmFsRm9jdXNSZWN0KSwgMS5mKTsKICAgICBtX2RhdGEtPnNl
dFN0cm9rZVN0eWxlKG9sZFN0eWxlKTsKICAgICBtX2RhdGEtPnNldFN0cm9rZUNvbG9yKG9sZFN0
cm9rZUNvbG9yKTsKIH0KQEAgLTI1NywxNSArMjU3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGUKICAgICBVTlVTRURfUEFSQU0oc3R5bGUpOwogfQogCi1GbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNb2RlKQorR3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAotICAgIHJldHVybiBGbG9hdFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtX2RhdGEtPnRyYW5zZm9ybWF0aW9uKCkubWFwUmVjdChyZWN0
KSkpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoZW5jbG9zaW5nSW50UmVjdChtX2RhdGEtPnRy
YW5zZm9ybWF0aW9uKCkubWFwUmVjdChyZWN0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBibHVyLCBj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmIHNpemUsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMwMiw3ICszMDIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0zMTMsNyArMzEzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbAogICAgIG1fZGF0YS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aAogICAgIG1fZGF0YS0+Y2xpcFBhdGgo
cGF0aCwgUGFpbnRlck9wZW5WRzo6U3VidHJhY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVGYWN0
b3JzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2Nh
bGVGYWN0b3JzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQyNyw3ICs0MjcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25z
dCBJbnRSCiAgICAgbV9kYXRhLT5jbGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpTdWJ0cmFj
dENsaXAsIG1fc3RhdGUuZmlsbFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29u
c3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ0LDcg
KzQ0NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKIAogICAg
IFBhdGggcGF0aDsKICAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAgcGF0aC5hZGRFbGxp
cHNlKEZsb2F0UmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25lc3Ms
CisgICAgcGF0aC5hZGRFbGxpcHNlKEdyYXBoaWNzUmVjdChyZWN0LngoKSArIHRoaWNrbmVzcywg
cmVjdC55KCkgKyB0aGlja25lc3MsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAtICh0aGlja25lc3Mg
KiAyKSwgcmVjdC5oZWlnaHQoKSAtICh0aGlja25lc3MgKiAyKSkpOwogCiAgICAgbV9kYXRhLT5j
bGlwUGF0aChwYXRoLCBQYWludGVyT3BlblZHOjpJbnRlcnNlY3RDbGlwLCBtX3N0YXRlLmZpbGxS
dWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFn
ZU9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKQEAgLTExMiw3ICsx
MTIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB9CiAKICNp
ZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotc3RhdGljIHZvaWQgYWRqdXN0
U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNp
emUmIG9yaWdTaXplLCBjb25zdCBJbnRTaXplJiBzY2FsZWRTaXplKQorc3RhdGljIHZvaWQgYWRq
dXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFNpemUmIG9yaWdTaXplLCBjb25zdCBJbnRTaXplJiBzY2FsZWRTaXplKQogewogICAgIC8v
IFdlIGFzc3VtZSBkb3duLXNhbXBsaW5nIHpvb20gcmF0ZXMgaW4gWCBkaXJlY3Rpb24gYW5kIGlu
IFkgZGlyZWN0aW9uIGFyZSBzYW1lLgogICAgIGlmIChvcmlnU2l6ZS53aWR0aCgpID09IHNjYWxl
ZFNpemUud2lkdGgoKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTb3Vy
Y2VSZWN0Rm9yRG93blNhbXBsCiB9CiAjZW5kaWYKIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZHN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChkc3Qu
aXNFbXB0eSgpIHx8IHNyYy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1Myw3ICsx
NTMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgZWxz
ZQogICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwogCi0gICAgRmxv
YXRSZWN0IHNyY1JlY3RMb2NhbChzcmMpOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0TG9jYWwo
c3JjKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgIGFkanVz
dFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3JjUmVjdExvY2FsLCBzaXplKCksIGltYWdlLT5z
aXplKCkpOwogI2VuZGlmCkBAIC0xNjUsMTAgKzE2NSwxMCBAQCB2b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0
aGlzKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1hdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBH
cmFwaGljc1JlY3QmIGRzdCkKIHsKICAgICBpZiAoZHN0LmlzRW1wdHkoKSB8fCBzcmMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVy
T3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsOSBAQAogI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRGFzaEFycmF5
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0xMDcsNyArMTA3LDcgQEAgc3Ry
dWN0IFBsYXRmb3JtUGFpbnRlclN0YXRlIHsKICAgICBmbG9hdCBvcGFjaXR5OwogCiAgICAgYm9v
bCBzY2lzc29yaW5nRW5hYmxlZDsKLSAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3Q7CisgICAgR3Jh
cGhpY3NSZWN0IHNjaXNzb3JSZWN0OwogI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFfMQogICAgIGJv
b2wgbWFza2luZ0NoYW5nZWRBbmRFbmFibGVkOwogICAgIFZHTWFza0xheWVyIG1hc2s7CkBAIC02
ODEsNyArNjgxLDcgQEAgdm9pZCBQYWludGVyT3BlblZHOjpzZXRBbnRpYWxpYXNpbmdFbmFibAog
ICAgICAgICB2Z1NldGkoVkdfUkVOREVSSU5HX1FVQUxJVFksIFZHX1JFTkRFUklOR19RVUFMSVRZ
X05PTkFOVElBTElBU0VEKTsKIH0KIAotdm9pZCBQYWludGVyT3BlblZHOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNjYWxlRmFjdG9ycykKK3ZvaWQgUGFpbnRlck9wZW5WRzo6c2NhbGUoY29uc3Qg
R3JhcGhpY3NTaXplJiBzY2FsZUZhY3RvcnMpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUpOwogICAg
IG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKQEAgLTczMyw3ICs3MzMsNyBAQCB2b2lkIFBhaW50
ZXJPcGVuVkc6OmRyYXdQYXRoKGNvbnN0IFBhdGgmCiAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7
CiB9CiAKLXZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0U2Npc3NvclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBQYWludGVyT3BlblZHOjppbnRlcnNlY3RTY2lzc29yUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgLy8gU2Npc3NvciByZWN0YW5nbGVzIGFy
ZSBkZWZpbmVkIGJ5IGZsb2F0IHZhbHVlcywgYnV0IGUuZy4gcGFpbnRpbmcKICAgICAvLyBzb21l
dGhpbmcgcmVkIHRvIGEgZmxvYXQtY2xpcHBlZCByZWN0YW5nbGUgYW5kIHRoZW4gcGFpbnRpbmcg
c29tZXRoaW5nCkBAIC03NDQsMTYgKzc0NCwxNiBAQCB2b2lkIFBhaW50ZXJPcGVuVkc6OmludGVy
c2VjdFNjaXNzb3JSZWN0CiAgICAgLy8gdmlzdWFsIHJlc3VsdCBpcyBiZXR0ZXIgaWYgd2UgY2xp
cCB0byB0aGUgZW5jbG9zaW5nIGludGVnZXIgcmVjdGFuZ2xlCiAgICAgLy8gcmF0aGVyIHRoYW4g
dGhlIGV4YWN0IGZsb2F0IHJlY3RhbmdsZSBmb3Igc2Npc3NvcmluZy4KICAgICBpZiAobV9zdGF0
ZS0+c2Npc3NvcmluZ0VuYWJsZWQpCi0gICAgICAgIG1fc3RhdGUtPnNjaXNzb3JSZWN0LmludGVy
c2VjdChGbG9hdFJlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSkpOworICAgICAgICBtX3N0YXRl
LT5zY2lzc29yUmVjdC5pbnRlcnNlY3QoR3JhcGhpY3NSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVj
dCkpKTsKICAgICBlbHNlIHsKICAgICAgICAgbV9zdGF0ZS0+c2Npc3NvcmluZ0VuYWJsZWQgPSB0
cnVlOwotICAgICAgICBtX3N0YXRlLT5zY2lzc29yUmVjdCA9IEZsb2F0UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHJlY3QpKTsKKyAgICAgICAgbV9zdGF0ZS0+c2Npc3NvclJlY3QgPSBHcmFwaGljc1Jl
Y3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CiAgICAgfQogCiAgICAgbV9zdGF0ZS0+YXBwbHlT
Y2lzc29yUmVjdCgpOwogfQogCi12b2lkIFBhaW50ZXJPcGVuVkc6OmludGVyc2VjdENsaXBSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0Q2xp
cFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChtX3N0YXRlKTsK
ICAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7CkBAIC03NjUsNyArNzY1LDcgQEAgdm9pZCBQ
YWludGVyT3BlblZHOjppbnRlcnNlY3RDbGlwUmVjdChjbwogICAgIH0KIAogICAgIC8vIENoZWNr
IGlmIHRoZSBhY3R1YWwgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGlzIHN0aWxsIHJlY3RpbGluZWFy
IChjYW4gYmUKLSAgICAvLyByZXByZXNlbnRlZCBhcyBGbG9hdFJlY3QpIHNvIHdlIGNvdWxkIGFw
cGx5IHNjaXNzb3JpbmcgaW5zdGVhZCBvZgorICAgIC8vIHJlcHJlc2VudGVkIGFzIEdyYXBoaWNz
UmVjdCkgc28gd2UgY291bGQgYXBwbHkgc2Npc3NvcmluZyBpbnN0ZWFkIG9mCiAgICAgLy8gKHBv
dGVudGlhbGx5IG1vcmUgZXhwZW5zaXZlKSBwYXRoIGNsaXBwaW5nLiBOb3RlIHRoYXQgc2Npc3Nv
cmluZyBpcyBub3QKICAgICAvLyBzdWJqZWN0IHRvIHRyYW5zZm9ybWF0aW9ucywgc28gd2UgbmVl
ZCB0byBkbyB0aGUgdHJhbnNmb3JtYXRpb24gdG8KICAgICAvLyBzdXJmYWNlIGNvb3JkaW5hdGVz
IGJ5IG91cnNlbHZlcy4KQEAgLTc3NCw3ICs3NzQsNyBAQCB2b2lkIFBhaW50ZXJPcGVuVkc6Omlu
dGVyc2VjdENsaXBSZWN0KGNvCiAgICAgaWYgKGVmZmVjdGl2ZVNjaXNzb3JRdWFkLmlzUmVjdGls
aW5lYXIoKSkKICAgICAgICAgaW50ZXJzZWN0U2Npc3NvclJlY3QoZWZmZWN0aXZlU2Npc3NvclF1
YWQuYm91bmRpbmdCb3goKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIFRoZSB0cmFuc2Zvcm1l
ZCBzY2lzc29yUmVjdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgRmxvYXRSZWN0CisgICAgICAg
IC8vIFRoZSB0cmFuc2Zvcm1lZCBzY2lzc29yUmVjdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMg
R3JhcGhpY3NSZWN0CiAgICAgICAgIC8vIGFueW1vcmUsIHNvIHdlIG5lZWQgdG8gcGVyZm9ybSBt
YXNraW5nIGluc3RlYWQuCiAgICAgICAgIFBhdGggc2Npc3NvclJlY3RQYXRoOwogICAgICAgICBz
Y2lzc29yUmVjdFBhdGguYWRkUmVjdChyZWN0KTsKQEAgLTgxNCw3ICs4MTQsNyBAQCB2b2lkIFBh
aW50ZXJPcGVuVkc6OmNsaXBQYXRoKGNvbnN0IFBhdGgmCiAjZW5kaWYKIH0KIAotdm9pZCBQYWlu
dGVyT3BlblZHOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFZHYml0ZmllbGQgc3Bl
Y2lmaWVkUGFpbnRNb2RlcykKK3ZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1JlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0LCBWR2JpdGZpZWxkIHNwZWNpZmllZFBhaW50TW9kZXMpCiB7CiAgICAg
QVNTRVJUKG1fc3RhdGUpOwogCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBQYWludGVyT3BlblZH
OjpkcmF3UmVjdChjb25zdCBGbG9hdAogICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwogfQogCi12
b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgVkdiaXRmaWVs
ZCBzcGVjaWZpZWRQYWludE1vZGVzKQordm9pZCBQYWludGVyT3BlblZHOjpkcmF3Um91bmRlZFJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25z
dCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50
U2l6ZSYgYm90dG9tUmlnaHQsIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKIHsKICAg
ICBBU1NFUlQobV9zdGF0ZSk7CiAKQEAgLTg3NCwxMCArODc0LDEwIEBAIHZvaWQgUGFpbnRlck9w
ZW5WRzo6ZHJhd1JvdW5kZWRSZWN0KGNvbnMKICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKIAog
ICAgIC8vIGNsYW1wIGNvcm5lciBhcmMgc2l6ZXMKLSAgICBGbG9hdFNpemUgY2xhbXBlZFRvcExl
ZnQgPSBGbG9hdFNpemUodG9wTGVmdCkuc2hydW5rVG8ocmVjdC5zaXplKCkpLmV4cGFuZGVkVG8o
RmxvYXRTaXplKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkVG9wUmlnaHQgPSBGbG9hdFNpemUo
dG9wUmlnaHQpLnNocnVua1RvKHJlY3Quc2l6ZSgpKS5leHBhbmRlZFRvKEZsb2F0U2l6ZSgpKTsK
LSAgICBGbG9hdFNpemUgY2xhbXBlZEJvdHRvbUxlZnQgPSBGbG9hdFNpemUoYm90dG9tTGVmdCku
c2hydW5rVG8ocmVjdC5zaXplKCkpLmV4cGFuZGVkVG8oRmxvYXRTaXplKCkpOwotICAgIEZsb2F0
U2l6ZSBjbGFtcGVkQm90dG9tUmlnaHQgPSBGbG9hdFNpemUoYm90dG9tUmlnaHQpLnNocnVua1Rv
KHJlY3Quc2l6ZSgpKS5leHBhbmRlZFRvKEZsb2F0U2l6ZSgpKTsKKyAgICBHcmFwaGljc1NpemUg
Y2xhbXBlZFRvcExlZnQgPSBHcmFwaGljc1NpemUodG9wTGVmdCkuc2hydW5rVG8ocmVjdC5zaXpl
KCkpLmV4cGFuZGVkVG8oR3JhcGhpY3NTaXplKCkpOworICAgIEdyYXBoaWNzU2l6ZSBjbGFtcGVk
VG9wUmlnaHQgPSBHcmFwaGljc1NpemUodG9wUmlnaHQpLnNocnVua1RvKHJlY3Quc2l6ZSgpKS5l
eHBhbmRlZFRvKEdyYXBoaWNzU2l6ZSgpKTsKKyAgICBHcmFwaGljc1NpemUgY2xhbXBlZEJvdHRv
bUxlZnQgPSBHcmFwaGljc1NpemUoYm90dG9tTGVmdCkuc2hydW5rVG8ocmVjdC5zaXplKCkpLmV4
cGFuZGVkVG8oR3JhcGhpY3NTaXplKCkpOworICAgIEdyYXBoaWNzU2l6ZSBjbGFtcGVkQm90dG9t
UmlnaHQgPSBHcmFwaGljc1NpemUoYm90dG9tUmlnaHQpLnNocnVua1RvKHJlY3Quc2l6ZSgpKS5l
eHBhbmRlZFRvKEdyYXBoaWNzU2l6ZSgpKTsKIAogICAgIC8vIEFzIE9wZW5WRydzIGNvb3JkaW5h
dGUgc3lzdGVtIGlzIGZsaXBwZWQgaW4gY29tcGFyaXNvbiB0byBXZWJLaXQncywKICAgICAvLyB3
ZSBoYXZlIHRvIHNwZWNpZnkgdGhlIG9wcG9zaXRlIHZhbHVlIGZvciB0aGUgImNsb2Nrd2lzZSIg
dmFsdWUuCkBAIC0xMDE3LDcgKzEwMTcsNyBAQCB2b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdFbGxp
cHNlKGNvbnN0IEluCiAgICAgQVNTRVJUX1ZHX05PX0VSUk9SKCk7CiB9CiAKLXZvaWQgUGFpbnRl
ck9wZW5WRzo6ZHJhd1BvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCog
cG9pbnRzLCBWR2JpdGZpZWxkIHNwZWNpZmllZFBhaW50TW9kZXMpCit2b2lkIFBhaW50ZXJPcGVu
Vkc6OmRyYXdQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBv
aW50cywgVkdiaXRmaWVsZCBzcGVjaWZpZWRQYWludE1vZGVzKQogewogICAgIEFTU0VSVChtX3N0
YXRlKTsKIApAQCAtMTA2MSw3ICsxMDYxLDcgQEAgdm9pZCBQYWludGVyT3BlblZHOjpkcmF3UG9s
eWdvbihzaXplX3QgbgogICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwogfQogCi12b2lkIFBhaW50
ZXJPcGVuVkc6OmRyYXdJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxlZEltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMpCit2b2lkIFBhaW50ZXJPcGVuVkc6
OmRyYXdJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxlZEltYWdlLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUp
OwogICAgIG1fc3VyZmFjZS0+bWFrZUN1cnJlbnQoKTsKQEAgLTEwNzAsMTQgKzEwNzAsMTQgQEAg
dm9pZCBQYWludGVyT3BlblZHOjpkcmF3SW1hZ2UoVGlsZWRJbWFnZQogICAgIC8vIHdlIHNwbGl0
IHRoZW0gaW50byB0aWxlcy4KICAgICBJbnRSZWN0IGRyYXduVGlsZXMgPSB0aWxlZEltYWdlLT50
aWxlc0luUmVjdChzcmMpOwogICAgIEFmZmluZVRyYW5zZm9ybSBzcmNUb0RzdFRyYW5zZm9ybWF0
aW9uID0gbWFrZU1hcEJldHdlZW5SZWN0cygKLSAgICAgICAgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
MC4wLCAwLjApLCBzcmMuc2l6ZSgpKSwgZHN0KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0KEdyYXBo
aWNzUG9pbnQoMC4wLCAwLjApLCBzcmMuc2l6ZSgpKSwgZHN0KTsKICAgICBzcmNUb0RzdFRyYW5z
Zm9ybWF0aW9uLnRyYW5zbGF0ZSgtc3JjLngoKSwgLXNyYy55KCkpOwogCiAgICAgZm9yIChpbnQg
eUluZGV4ID0gZHJhd25UaWxlcy55KCk7IHlJbmRleCA8IGRyYXduVGlsZXMuYm90dG9tKCk7ICsr
eUluZGV4KSB7CiAgICAgICAgIGZvciAoaW50IHhJbmRleCA9IGRyYXduVGlsZXMueCgpOyB4SW5k
ZXggPCBkcmF3blRpbGVzLnJpZ2h0KCk7ICsreEluZGV4KSB7CiAgICAgICAgICAgICAvLyBUaGUg
c3JjVGlsZSByZWN0YW5nbGUgaXMgYW4gYWxpZ25lZCB0aWxlIGNyb3BwZWQgYnkgdGhlIHNyYyBy
ZWN0YW5nbGUuCi0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh0aWxlZEltYWdlLT50aWxlUmVj
dCh4SW5kZXgsIHlJbmRleCkpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHNyY1RpbGUgPSBpbnRl
cnNlY3Rpb24oc3JjLCB0aWxlKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB0aWxlKHRpbGVk
SW1hZ2UtPnRpbGVSZWN0KHhJbmRleCwgeUluZGV4KSk7CisgICAgICAgICAgICBHcmFwaGljc1Jl
Y3Qgc3JjVGlsZSA9IGludGVyc2VjdGlvbihzcmMsIHRpbGUpOwogCiAgICAgICAgICAgICBzYXZl
KCk7CiAKQEAgLTExMDUsNyArMTEwNSw3IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd0ltYWdl
KFRpbGVkSW1hZ2UKIH0KIAogI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFfMQotdm9pZCBQYWludGVy
T3BlblZHOjpkcmF3VGV4dChWR0ZvbnQgdmdGb250LCBWZWN0b3I8Vkd1aW50PiYgY2hhcmFjdGVy
cywgVkdmbG9hdCogYWRqdXN0bWVudHNYLCBWR2Zsb2F0KiBhZGp1c3RtZW50c1ksIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQordm9pZCBQYWludGVyT3BlblZHOjpkcmF3VGV4dChWR0ZvbnQgdmdG
b250LCBWZWN0b3I8Vkd1aW50PiYgY2hhcmFjdGVycywgVkdmbG9hdCogYWRqdXN0bWVudHNYLCBW
R2Zsb2F0KiBhZGp1c3RtZW50c1ksIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAg
IEFTU0VSVChtX3N0YXRlKTsKIApAQCAtMTEyMCw4ICsxMTIwLDggQEAgdm9pZCBQYWludGVyT3Bl
blZHOjpkcmF3VGV4dChWR0ZvbnQgdmdGbwogCiAgICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgp
OwogCi0gICAgRmxvYXRQb2ludCBlZmZlY3RpdmVQb2ludCA9IG1fc3RhdGUtPnN1cmZhY2VUcmFu
c2Zvcm1hdGlvbi5tYXBQb2ludChwb2ludCk7Ci0gICAgRmxvYXRQb2ludCBwID0gcG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBlZmZlY3RpdmVQb2ludCA9IG1fc3RhdGUtPnN1cmZhY2VUcmFuc2Zv
cm1hdGlvbi5tYXBQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCBwID0gcG9pbnQ7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtKiBvcmlnaW5hbFRyYW5zZm9ybWF0aW9uID0gMDsKIAogICAgIC8v
IEluIGNhc2UgdGhlIGZvbnQgaXNuJ3QgZHJhd24gYXQgYSBwaXhlbC1leGFjdCBiYXNlbGluZSBh
bmQgd2UgY2FuIGVhc2lseQpAQCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9pZCBQYWludGVyT3BlblZH
OjpkcmF3VGV4dChWR0ZvbnQgdmdGbwogICAgICAgICAgICAgbV9zdGF0ZS0+c3VyZmFjZVRyYW5z
Zm9ybWF0aW9uLmEoKSwgMCwKICAgICAgICAgICAgIDAsIG1fc3RhdGUtPnN1cmZhY2VUcmFuc2Zv
cm1hdGlvbi5kKCksCiAgICAgICAgICAgICByb3VuZGYoZWZmZWN0aXZlUG9pbnQueCgpKSwgcm91
bmRmKGVmZmVjdGl2ZVBvaW50LnkoKSkpKTsKLSAgICAgICAgcCA9IEZsb2F0UG9pbnQoKTsKKyAg
ICAgICAgcCA9IEdyYXBoaWNzUG9pbnQoKTsKICAgICB9CiAKICAgICBjb25zdCBWR2Zsb2F0IHZn
UG9pbnRbMl0gPSB7IHAueCgpLCBwLnkoKSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGFpbnRlck9wZW5WRy5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWlu
dGVyT3BlblZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgRmxvYXRQb2ludDsKLWNs
YXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1JlY3Q7
CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFBhdGg7CkBAIC05NywyNCAr
OTcsMjQgQEAgcHVibGljOgogICAgIGJvb2wgYW50aWFsaWFzaW5nRW5hYmxlZCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0QW50aWFsaWFzaW5nRW5hYmxlZChib29sKTsKIAotICAgIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgVkdiaXRmaWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9Q
QVRIIHwgVkdfRklMTF9QQVRIKSk7Ci0gICAgdm9pZCBkcmF3Um91bmRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQs
IGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBW
R2JpdGZpZWxkIHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsK
KyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFZHYml0ZmllbGQgcGFpbnRN
b2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOworICAgIHZvaWQgZHJhd1Jv
dW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCwgVkdiaXRmaWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9Q
QVRIIHwgVkdfRklMTF9QQVRIKSk7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBJbnRQb2ludCYg
ZnJvbSwgY29uc3QgSW50UG9pbnQmIHRvKTsKICAgICB2b2lkIGRyYXdBcmMoY29uc3QgSW50UmVj
dCYgZWxsaXBzZUJvdW5kcywgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4sIFZHYml0Zmll
bGQgcGFpbnRNb2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwogICAgIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgYm91bmRzLCBWR2JpdGZpZWxkIHBhaW50TW9k
ZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKLSAgICB2b2lkIGRyYXdQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgVkdiaXRmaWVs
ZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSk7Ci0gICAgdm9p
ZCBkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyosIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyYyk7CisgICAgdm9pZCBkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRz
LCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IChW
R19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOworICAgIHZvaWQgZHJhd0ltYWdlKFRpbGVk
SW1hZ2VPcGVuVkcqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdCwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmMpOwogI2lmZGVmIE9QRU5WR19WRVJTSU9OXzFfMQotICAgIHZvaWQgZHJhd1RleHQoVkdG
b250LCBWZWN0b3I8Vkd1aW50PiYgY2hhcmFjdGVycywgVkdmbG9hdCogYWRqdXN0bWVudHNYLCBW
R2Zsb2F0KiBhZGp1c3RtZW50c1ksIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGRyYXdU
ZXh0KFZHRm9udCwgVmVjdG9yPFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFkanVzdG1l
bnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAjZW5k
aWYKIAotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcnMpOworICAg
IHZvaWQgc2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBzY2FsZUZhY3RvcnMpOwogICAgIHZvaWQg
cm90YXRlKGZsb2F0IHJhZGlhbnMpOwogICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IGR4LCBmbG9h
dCBkeSk7CiAKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmLCBWR2JpdGZpZWxkIHBhaW50
TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpLCBXaW5kUnVsZSBmaWxsUnVs
ZSA9IFJVTEVfTk9OWkVSTyk7CiAKLSAgICB2b2lkIGludGVyc2VjdENsaXBSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZvaWQgaW50ZXJzZWN0Q2xpcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0
Jik7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgUGFpbnRlck9wZW5WRzo6Q2xpcE9w
ZXJhdGlvbiwgV2luZFJ1bGUgY2xpcFJ1bGUgPSBSVUxFX05PTlpFUk8pOwogCiAgICAgVGlsZWRJ
bWFnZU9wZW5WRyogYXNOZXdOYXRpdmVJbWFnZShjb25zdCBJbnRSZWN0JiBzcmMsIFZHSW1hZ2VG
b3JtYXQpOwpAQCAtMTI5LDcgKzEyOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95UGFp
bnRlclN0YXRlcygpOwogICAgIHZvaWQgYXBwbHlTdGF0ZSgpOwogCi0gICAgdm9pZCBpbnRlcnNl
Y3RTY2lzc29yUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGludGVyc2VjdFNjaXNz
b3JSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxQbGF0
Zm9ybVBhaW50ZXJTdGF0ZSo+IG1fc3RhdGVTdGFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYXRoT3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGF0aE9wZW5WRy5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1Bh
dGhPcGVuVkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAi
UGF0aC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWludGVyT3Bl
blZHLmgiCkBAIC0xMjMsMTQgKzEyMywxNCBAQCBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3Qg
UGF0aCYgb3RoZXIpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1
cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhpY3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBj
b25zdCAKIHsKICAgICAvLyBGSVhNRTogaXMgdGhpcyB0aGUgd2F5IHRvIHJldHVybiB0aGUgY3Vy
cmVudCBwb2ludCBvZiB0aGUgc3VicGF0aD8KICAgICByZXR1cm4gbV9jdXJyZW50UG9pbnQ7CiB9
CiAKIAotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1
bGUgcnVsZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIApA
QCAtMTM5LDcgKzEzOSw3IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG8KICAgICByZXR1cm4gYm91bmRpbmdSZWN0KCkuY29udGFpbnMocG9pbnQpOwogfQogCi1ib29s
IFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9r
ZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIApAQCAtMTQ4LDE0ICsxNDgsMTQgQEAgYm9vbCBQ
YXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcAogICAgIHJldHVybiAoY29uc3RfY2Fz
dDxQYXRoKj4odGhpcykpLT5zdHJva2VCb3VuZGluZ1JlY3QoKS5jb250YWlucyhwb2ludCk7CiB9
CiAKLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUGF0
aDo6dHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtYXRpb247CiAgICAgdHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgdHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uKTsK
IH0KIAotRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3Qg
UGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIHsKICAgICBWR2Zsb2F0IG1pblg7CiAgICAgVkdm
bG9hdCBtaW5ZOwpAQCAtMTY2LDEwICsxNjYsMTAgQEAgRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5n
UmVjdCgpIGNvbnN0CiAgICAgdmdQYXRoQm91bmRzKG1fcGF0aC0+dmdQYXRoKCksICZtaW5YLCAm
bWluWSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKIAotICAg
IHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludChtaW5YLCBtaW5ZKSwgRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQobWluWCwg
bWluWSksIEdyYXBoaWNzU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKLUZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAor
R3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIq
IGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIApAQCAtMTc4LDcgKzE3
OCw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2sKICAgICByZXR1
cm4gYm91bmRpbmdSZWN0KCk7CiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQp
CiB7CiAgICAgc3RhdGljIGNvbnN0IFZHdWJ5dGUgcGF0aFNlZ21lbnRzW10gPSB7IFZHX01PVkVf
VE9fQUJTIH07CiAgICAgY29uc3QgVkdmbG9hdCBwYXRoRGF0YVtdID0geyBwb2ludC54KCksIHBv
aW50LnkoKSB9OwpAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW4KICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0gbV9wYXRoLT5tX3N1
YnBhdGhTdGFydFBvaW50ID0gcG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQpCiB7CiAgICAgc3RhdGljIGNvbnN0IFZHdWJ5dGUgcGF0aFNlZ21lbnRzW10g
PSB7IFZHX0xJTkVfVE9fQUJTIH07CiAgICAgY29uc3QgVkdmbG9hdCBwYXRoRGF0YVtdID0geyBw
b2ludC54KCksIHBvaW50LnkoKSB9OwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgUGF0aDo6YWRk
TGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHAKICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0g
cG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYg
Y29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCkKK3ZvaWQgUGF0aDo6YWRk
UXVhZEN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBHcmFw
aGljc1BvaW50JiBlbmRQb2ludCkKIHsKICAgICBzdGF0aWMgY29uc3QgVkd1Ynl0ZSBwYXRoU2Vn
bWVudHNbXSA9IHsgVkdfUVVBRF9UT19BQlMgfTsKICAgICBjb25zdCBWR2Zsb2F0IHBhdGhEYXRh
W10gPSB7IGNvbnRyb2xQb2ludC54KCksIGNvbnRyb2xQb2ludC55KCksIGVuZFBvaW50LngoKSwg
ZW5kUG9pbnQueSgpIH07CkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBQYXRoOjphZGRRdWFkQ3Vy
dmVUbyhjb25zdCBGbG9hdFBvaQogICAgIG1fcGF0aC0+bV9jdXJyZW50UG9pbnQgPSBlbmRQb2lu
dDsKIH0KIAotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNv
bnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0
UG9pbnQmIGVuZFBvaW50KQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2lu
dDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGVuZFBvaW50KQogewogICAgIHN0YXRpYyBjb25zdCBW
R3VieXRlIHBhdGhTZWdtZW50c1tdID0geyBWR19DVUJJQ19UT19BQlMgfTsKICAgICBjb25zdCBW
R2Zsb2F0IHBhdGhEYXRhW10gPSB7IGNvbnRyb2xQb2ludDEueCgpLCBjb250cm9sUG9pbnQxLnko
KSwgY29udHJvbFBvaW50Mi54KCksIGNvbnRyb2xQb2ludDIueSgpLCBlbmRQb2ludC54KCksIGVu
ZFBvaW50LnkoKSB9OwpAQCAtMjI2LDE4ICsyMjYsMTggQEAgdm9pZCBQYXRoOjphZGRCZXppZXJD
dXJ2ZVRvKGNvbnN0IEZsb2F0UAogICAgIG1fcGF0aC0+bV9jdXJyZW50UG9pbnQgPSBlbmRQb2lu
dDsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
MiwgZmxvYXQgcmFkaXVzKQogewogICAgIC8vIFNlZSBodHRwOi8vcGhpbGlwLmh0bWw1Lm9yZy90
ZXN0cy9jYW52YXMvc3VpdGUvdGVzdHMvc3BlYy5odG1sI2FyY3RvLgogCi0gICAgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQwID0gbV9wYXRoLT5tX2N1cnJlbnRQb2ludDsKKyAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludDAgPSBtX3BhdGgtPm1fY3VycmVudFBvaW50OwogICAgIGlmICghcmFk
aXVzIHx8IHBvaW50MCA9PSBwb2ludDEgfHwgcG9pbnQxID09IHBvaW50MikgewogICAgICAgICBh
ZGRMaW5lVG8ocG9pbnQxKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZsb2F0U2l6
ZSB2MDEgPSBwb2ludDAgLSBwb2ludDE7Ci0gICAgRmxvYXRTaXplIHYyMSA9IHBvaW50MiAtIHBv
aW50MTsKKyAgICBHcmFwaGljc1NpemUgdjAxID0gcG9pbnQwIC0gcG9pbnQxOworICAgIEdyYXBo
aWNzU2l6ZSB2MjEgPSBwb2ludDIgLSBwb2ludDE7CiAKICAgICAvLyBzaW4oQSAtIEIpID0gc2lu
KEEpICogY29zKEIpIC0gc2luKEIpICogY29zKEEpCiAgICAgZG91YmxlIGNyb3NzID0gdjAxLndp
ZHRoKCkgKiB2MjEuaGVpZ2h0KCkgLSB2MDEuaGVpZ2h0KCkgKiB2MjEud2lkdGgoKTsKQEAgLTI1
MywxMCArMjUzLDEwIEBAIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcG8K
ICAgICBkb3VibGUgYW5nbGUgPSAocGlEb3VibGUgLSBmYWJzKGFzaW4oY3Jvc3MgLyAoZDAxICog
ZDIxKSkpKSAqIDAuNTsKICAgICBkb3VibGUgc3BhbiA9IHJhZGl1cyAqIHRhbihhbmdsZSk7CiAg
ICAgZG91YmxlIHJhdGUgPSBzcGFuIC8gZDAxOwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9
IEZsb2F0UG9pbnQocG9pbnQxLngoKSArIHYwMS53aWR0aCgpICogcmF0ZSwKKyAgICBHcmFwaGlj
c1BvaW50IHN0YXJ0UG9pbnQgPSBHcmFwaGljc1BvaW50KHBvaW50MS54KCkgKyB2MDEud2lkdGgo
KSAqIHJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDEu
eSgpICsgdjAxLmhlaWdodCgpICogcmF0ZSk7CiAgICAgcmF0ZSA9IHNwYW4gLyBkMjE7Ci0gICAg
RmxvYXRQb2ludCBlbmRQb2ludCA9IEZsb2F0UG9pbnQocG9pbnQxLngoKSArIHYyMS53aWR0aCgp
ICogcmF0ZSwKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvaW50ID0gR3JhcGhpY3NQb2ludChwb2lu
dDEueCgpICsgdjIxLndpZHRoKCkgKiByYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvaW50MS55KCkgKyB2MjEuaGVpZ2h0KCkgKiByYXRlKTsKIAogICAgIC8vIEZh
OiBsYXJnZSBhcmMgZmxhZywgbWFrZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBTQ1dBUkNfVE8g
YW5kIExDV0FSQ19UTwpAQCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRo
KCkKICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0gbV9wYXRoLT5tX3N1YnBhdGhTdGFydFBv
aW50OwogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZs
b2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNs
b2Nrd2lzZSkKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNlbnRlciwg
ZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRp
Y2xvY2t3aXNlKQogewogICAgIC8vIFRoZSBPcGVuVkcgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQg
aW5mIGFzIHJhZGl1cyBvciBzdGFydC9lbmQgYW5nbGUuCiAgICAgLy8gV2ViS2l0IHNlZW1zIHRv
IHBhc3MgdGhvc2UgKGUuZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDQ5KSwKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9h
dFBvaW50JiBjZW50CiAgICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludC5zZXRZKGVuZFkpOwogfQog
Ci12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjph
ZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgY29uc3QgVkd1
Ynl0ZSBwYXRoU2VnbWVudHNbXSA9IHsKICAgICAgICAgVkdfTU9WRV9UT19BQlMsCkBAIC00MDAs
NyArNDAwLDcgQEAgdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogICAg
IG1fcGF0aC0+bV9jdXJyZW50UG9pbnQgPSBtX3BhdGgtPm1fc3VicGF0aFN0YXJ0UG9pbnQgPSBy
ZWN0LmxvY2F0aW9uKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBhdGhTZWdtZW50c1tdID0gewogICAgICAg
ICBWR19NT1ZFX1RPX0FCUywKQEAgLTQ3Miw3ICs0NzIsNyBAQCBmbG9hdCBQYXRoOjpsZW5ndGgo
KSBjb25zdAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgUGF0aDo6cG9pbnRB
dExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAorR3JhcGhpY3NQb2ludCBQYXRo
Ojpwb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CiB7CiAgICAgVkdm
bG9hdCB4ID0gMCwgeSA9IDA7CiAgICAgbV9wYXRoLT5tYWtlQ29tcGF0aWJsZUNvbnRleHRDdXJy
ZW50KCk7CkBAIC00ODAsNyArNDgwLDcgQEAgRmxvYXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3Ro
KGZsb2F0IGxlbgogICAgIHZnUG9pbnRBbG9uZ1BhdGgobV9wYXRoLT52Z1BhdGgoKSwgMCwgdmdH
ZXRQYXJhbWV0ZXJpKG1fcGF0aC0+dmdQYXRoKCksIFZHX1BBVEhfTlVNX1NFR01FTlRTKSwKICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgJngsICZ5LCAwLCAwKTsKICAgICBvayA9ICh2Z0dl
dEVycm9yKCkgPT0gVkdfTk9fRVJST1IpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHgsIHkpOwor
ICAgIHJldHVybiBHcmFwaGljc1BvaW50KHgsIHkpOwogfQogCiBmbG9hdCBQYXRoOjpub3JtYWxB
bmdsZUF0TGVuZ3RoKGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGxhdGZvcm1QYXRoT3BlblZHLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BsYXRm
b3JtUGF0aE9wZW5WRy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW52Zy9QbGF0Zm9ybVBhdGhPcGVuVkcuaAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBQbGF0Zm9ybVBhdGhPcGVuVkdfaAogI2RlZmluZSBQ
bGF0Zm9ybVBhdGhPcGVuVkdfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJTaGFyZWRSZXNvdXJjZU9wZW5WRy5oIgogCiAj
aW5jbHVkZSA8b3BlbnZnLmg+CkBAIC0zOSw4ICszOSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyKCk7CiAKIHB1YmxpYzoKLSAgICBGbG9hdFBvaW50IG1fY3VycmVudFBvaW50OwotICAgIEZs
b2F0UG9pbnQgbV9zdWJwYXRoU3RhcnRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fY3VycmVu
dFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9zdWJwYXRoU3RhcnRQb2ludDsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGNyZWF0ZVBhdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5WRy5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnZnL1RpbGVkSW1hZ2VPcGVuVkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGlsZWRJbWFnZU9wZW5WRy5oIgogCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlZHVXRpbHMuaCIKIApAQCAtODgsNyArODgsNyBAQCB2
b2lkIFRpbGVkSW1hZ2VPcGVuVkc6OnNldFRpbGUoaW50IHhJbmRlCiAgICAgbV90aWxlcy5hdChp
KSA9IGltYWdlOwogfQogCi1JbnRSZWN0IFRpbGVkSW1hZ2VPcGVuVkc6OnRpbGVzSW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK0ludFJlY3QgVGlsZWRJbWFnZU9wZW5WRzo6dGls
ZXNJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KSBjb25zdAogewogICAgIGludCBsZWZ0
SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJlY3QueCgpKSAvIG1fbWF4VGlsZVNpemUud2lkdGgo
KTsKICAgICBpbnQgdG9wSW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHJlY3QueSgpKSAvIG1fbWF4
VGlsZVNpemUuaGVpZ2h0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvVGlsZWRJbWFnZU9wZW5WRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmgJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1h
Z2VPcGVuVkcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIAogY2xh
c3MgVGlsZWRJbWFnZU9wZW5WRyA6IHB1YmxpYyBTaGFyZWRSZXNvdXJjZU9wZW5WRyB7CiBwdWJs
aWM6CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ29sdW1ucygpIGNvbnN0
OwogICAgIGludCBudW1Sb3dzKCkgY29uc3Q7CiAKLSAgICBJbnRSZWN0IHRpbGVzSW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEludFJlY3QgdGlsZXNJblJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIHNldFRpbGUoaW50IHhJbmRleCwgaW50IHlJ
bmRleCwgVkdJbWFnZSk7CiAgICAgVkdJbWFnZSB0aWxlKGludCB4SW5kZXgsIGludCB5SW5kZXgp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZH
VXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW52Zy9WR1V0aWxzLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDcgQEAKICNpbmNsdWRlICJWR1V0aWxzLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMDIsNyArMTAyLDcgQEAgVkdSZWN0OjpWR1JlY3QoY29uc3QgVkdmbG9hdCBkYXRh
WzRdKQogICAgIG1fZGF0YVszXSA9IGRhdGFbM107CiB9CiAKLVZHUmVjdDo6VkdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK1ZHUmVjdDo6VkdSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKIHsKICAgICBtX2RhdGFbMF0gPSByZWN0LngoKTsKICAgICBtX2RhdGFbMV0gPSByZWN0Lnko
KTsKQEAgLTExMCwxMiArMTEwLDEyIEBAIFZHUmVjdDo6VkdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICBtX2RhdGFbM10gPSByZWN0LmhlaWdodCgpOwogfQogCi1WR1JlY3Q6Om9wZXJh
dG9yIEZsb2F0UmVjdCgpIGNvbnN0CitWR1JlY3Q6Om9wZXJhdG9yIEdyYXBoaWNzUmVjdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtX2RhdGFbMF0sIG1fZGF0YVsxXSwgbV9kYXRh
WzJdLCBtX2RhdGFbM10pOworICAgIHJldHVybiBHcmFwaGljc1JlY3QobV9kYXRhWzBdLCBtX2Rh
dGFbMV0sIG1fZGF0YVsyXSwgbV9kYXRhWzNdKTsKIH0KIAotRmxvYXRSZWN0OjpvcGVyYXRvciBW
R1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0OjpvcGVyYXRvciBWR1JlY3QoKSBjb25zdAogewog
ICAgIHJldHVybiBWR1JlY3QoKnRoaXMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0aWxzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiB0b1ZH
RXJyb3JDb25zdAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKIAogY2xhc3MgVkdNYXRyaXggewpAQCAtNzgsOSArNzgsOSBAQCBwcml2YXRl
OgogY2xhc3MgVkdSZWN0IHsKIHB1YmxpYzoKICAgICBWR1JlY3QoY29uc3QgVkdmbG9hdCBkYXRh
WzRdKTsKLSAgICBWR1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgVkdSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYpOwogICAgIGNvbnN0IFZHZmxvYXQqIHRvVkdmbG9hdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YTsgfQotICAgIG9wZXJhdG9yIEZsb2F0UmVjdCgpIGNvbnN0OworICAgIG9wZXJh
dG9yIEdyYXBoaWNzUmVjdCgpIGNvbnN0OwogcHJpdmF0ZToKICAgICBWR2Zsb2F0IG1fZGF0YVs0
XTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1w
bGVGb250RGF0YVBhbmdvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAkocmV2aXNpb24gOTEwMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9TaW1wbGVGb250RGF0
YVBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0xNDAs
OSArMTQwLDkgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX3BsYXRmb3JtRGF0YS5pc0ZpeGVkUGl0Y2goKTsKIH0KIAot
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBj
b25zdAorR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KEdseXBoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KCk7CiB9CiAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0KLSNp
bmNsdWRlIDxRUG9pbnRGPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UG9pbnQ6OkZs
b2F0UG9pbnQoY29uc3QgUVBvaW50RiYgcCkKLSAgICA6IG1feChwLngoKSkKLSAgICAsIG1feShw
LnkoKSkKLXsKLX0KLQotRmxvYXRQb2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00
IGV0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
RmxvYXRSZWN0UXQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0Zsb2F0UmVjdFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotI2luY2x1ZGUgPFFSZWN0Rj4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBRUmVjdEYmIHIpCi0g
ICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQotICAgICwgbV9zaXplKHIud2lkdGgoKQotICAg
ICwgci5oZWlnaHQoKSkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBRUmVjdEYoKSBjb25z
dAotewotICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKLX0K
LQotRmxvYXRSZWN0IEZsb2F0UmVjdDo6bm9ybWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgRmxvYXRS
ZWN0IG5vcm1hbGl6ZWRSZWN0ID0gKnRoaXM7Ci0KLSAgICBpZiAod2lkdGgoKSA8IDApIHsKLSAg
ICAgICAgbm9ybWFsaXplZFJlY3Quc2V0WCh4KCkgKyB3aWR0aCgpKTsKLSAgICAgICAgbm9ybWFs
aXplZFJlY3Quc2V0V2lkdGgoLXdpZHRoKCkpOwotICAgIH0KLSAgICBpZiAoaGVpZ2h0KCkgPCAw
KSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFkoeSgpICsgaGVpZ2h0KCkpOwotICAgICAg
ICBub3JtYWxpemVkUmVjdC5zZXRIZWlnaHQoLWhlaWdodCgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG5vcm1hbGl6ZWRSZWN0OwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBRUGVuIHN0cm9r
ZVBlbkZvckNvbnRleHQoR3JhcGhpY3MKICAgICByZXR1cm4gUVBlbihRQ29sb3IoY3R4LT5zdHJv
a2VDb2xvcigpKSwgY3R4LT5zdHJva2VUaGlja25lc3MoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRy
YXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9u
dCwgYm9vbCBpc0NvbXBsZXhUZXh0KQorc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhp
Y3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IFFGb250JiBmb250LCBib29sIGlzQ29tcGxl
eFRleHQpCiB7CiAgICAgaWYgKHRvIDwgMCkKICAgICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7CkBA
IC0yNjEsNyArMjYxLDcgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250
ZQogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBkcmF3VGV4dENvbW1vbihjdHgsIHJ1
biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQgPSAqL3RydWUpOwog
fQpAQCAtMjk4LDcgKzI5OCw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXgKICAgICByZXR1cm4gbGluZS54VG9DdXJzb3IocG9zaXRpb24pOwogfQogCi1GbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcHQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorR3Jh
cGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKIHsKICAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1
bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CiAgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9t
UmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKQEAgLTMxMSw3ICszMTEsNyBAQCBGbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAgICAgaWYgKHgyIDwgeDEpCiAgICAg
ICAgIHFTd2FwKHgxLCB4Mik7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBw
dC55KCksIHgyIC0geDEsIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocHQueCgpICsgeDEs
IHB0LnkoKSwgeDIgLSB4MSwgaCk7CiB9CiAKIGJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tG
b250c0ZvckNvbXBsZXhUZXh0KCkKQEAgLTMxOSwxMyArMzE5LDEzIEBAIGJvb2wgRm9udDo6Y2Fu
UmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8q
IGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5n
JiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20g
Ki8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBHcmFwaGlj
c1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiAjaWYgSEFWRShRUkFXRk9OVCkKLXZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIEZv
bnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAg
IGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQx
MCw3ICs0MTAsNyBAQCBib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvCiAK
ICNlbHNlIC8vICFIQVZFKFFSQVdGT05UKQogCi12b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3U2ltcGxlVGV4
dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBkcmF3VGV4dENv
bW1vbihjdHgsIHJ1biwgcG9pbnQsIGZyb20sIHRvLCBmb250KCksIC8qIGlzQ29tcGxleFRleHQg
PSAqL2ZhbHNlKTsKIH0KQEAgLTQ2MCw3ICs0NjAsNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRo
Rm9yU2ltcGxlVGV4dChjb25zCiB9CiAKIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsIGlu
dCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcHQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIFN0cmluZyBzYW5p
dGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0
aCgpKTsKICAgICBRU3RyaW5nIHdob2xlVGV4dCA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5p
dGl6ZWQpOwpAQCAtNDY5LDcgKzQ2OSw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0
Rm9yU2ltcGxlVGUKICAgICBpbnQgc3RhcnRYID0gUUZvbnRNZXRyaWNzKGZvbnQoKSkud2lkdGgo
d2hvbGVUZXh0LCBmcm9tLCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwogICAgIGludCB3aWR0aCA9
IFFGb250TWV0cmljcyhmb250KCkpLndpZHRoKHNlbGVjdGVkVGV4dCwgLTEsIFF0OjpUZXh0Qnlw
YXNzU2hhcGluZyk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHN0YXJ0WCwgcHQu
eSgpLCB3aWR0aCwgaCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChwdC54KCkgKyBzdGFydFgs
IHB0LnkoKSwgd2lkdGgsIGgpOwogfQogCiBib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCkKQEAgLTUwMSw3ICs1MDEsNyBAQCBpbnQgRm9udDo6ZW1waGFz
aXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4
dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1h
cmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50
IC8qIHRvICovKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4g
Ki8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgR3JhcGhpY3NQb2ludCYg
LyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYWRpZW50UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNyArMTExLDcgQEAgUUdyYWRpZW50KiBHcmFkaWVudDo6cGxhdGZvcm1HcmFk
aWVudCgpCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0
JiByZWN0KQogewogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5maWxsUmVjdChyZWN0
LCAqcGxhdGZvcm1HcmFkaWVudCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAg
cHVibGljOgogICAgIFFHTFdpZGdldCogZ2V0Vmlld3BvcnRHTFdpZGdldCgpOwogICAgIHZvaWQg
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSog
bWFzaykgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXIqLCBjb25zdCBHcmFwaGljc1JlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdDsKICNl
bmRpZgogCiAgICAgdm9pZCBwYWludChRUGFpbnRlciosIGNvbnN0IFFTdHlsZU9wdGlvbkdyYXBo
aWNzSXRlbSosIFFXaWRnZXQqKTsKQEAgLTU1NSwxMSArNTU1LDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSgKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4
dHVyZSogbWFzaykgY29uc3QKIHsKICAgICBpZiAodGV4dHVyZU1hcHBlci0+aXNPcGVuR0xCYWNr
ZWQoKSkgewogICAgICAgICBUZXh0dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8
VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlcik7Ci0gICAgICAgIHRleG1hcEdMLT5kcmF3
VGV4dHVyZShtX3RleHR1cmUsICFtX2F0dHJzLmFscGhhLCBGbG9hdFNpemUoMSwgMSksIHRhcmdl
dFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgdHJ1ZSAvKiBmbGlwICovKTsKKyAgICAgICAg
dGV4bWFwR0wtPmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgIW1fYXR0cnMuYWxwaGEsIEdyYXBoaWNz
U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBtYXNrLCB0cnVlIC8qIGZs
aXAgKi8pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDcgKzMyNSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGEKIAogICAgIG1fZGF0YS0+
cCgpLT5yZXN0b3JlKCk7CiAKLSAgICBtX2RhdGEtPnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEZs
b2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3Bh
Y2UsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1fZGF0YS0+c2hhZG93
LT5zZXRTaGFkb3dWYWx1ZXMoR3JhcGhpY3NTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0
ZS5zaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3Is
IG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSwgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCkBAIC0zNTksOCArMzU5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNv
bnN0IEludAogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKIAotICAgIEZs
b2F0UG9pbnQgcDEgPSBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCBwMiA9IHBvaW50MjsKKyAgICBH
cmFwaGljc1BvaW50IHAxID0gcG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgcDIgPSBwb2ludDI7
CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54KCkgPT0gcDIueCgpKTsKIAogICAgIFFQ
YWludGVyKiBwID0gbV9kYXRhLT5wKCk7CkBAIC0zODcsMTEgKzM4NywxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgICAgIC8vIERvIGEgcmVjdCBmaWxs
IG9mIG91ciBlbmRwb2ludHMuICBUaGlzIGVuc3VyZXMgd2UgYWx3YXlzIGhhdmUgdGhlCiAgICAg
ICAgIC8vIGFwcGVhcmFuY2Ugb2YgYmVpbmcgYSBib3JkZXIuICBXZSB0aGVuIGRyYXcgdGhlIGFj
dHVhbCBkb3R0ZWQvZGFzaGVkIGxpbmUuCiAgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewot
ICAgICAgICAgICAgcC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHAxLngoKSAtIHdpZHRoIC8gMiwgcDEu
eSgpIC0gd2lkdGgsIHdpZHRoLCB3aWR0aCksIFFDb2xvcihjb2xvcikpOwotICAgICAgICAgICAg
cC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHAyLngoKSAtIHdpZHRoIC8gMiwgcDIueSgpLCB3aWR0aCwg
d2lkdGgpLCBRQ29sb3IoY29sb3IpKTsKKyAgICAgICAgICAgIHAtPmZpbGxSZWN0KEdyYXBoaWNz
UmVjdChwMS54KCkgLSB3aWR0aCAvIDIsIHAxLnkoKSAtIHdpZHRoLCB3aWR0aCwgd2lkdGgpLCBR
Q29sb3IoY29sb3IpKTsKKyAgICAgICAgICAgIHAtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChwMi54
KCkgLSB3aWR0aCAvIDIsIHAyLnkoKSwgd2lkdGgsIHdpZHRoKSwgUUNvbG9yKGNvbG9yKSk7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwLT5maWxsUmVjdChGbG9hdFJlY3QocDEueCgp
IC0gd2lkdGgsIHAxLnkoKSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSwgUUNvbG9yKGNvbG9y
KSk7Ci0gICAgICAgICAgICBwLT5maWxsUmVjdChGbG9hdFJlY3QocDIueCgpLCBwMi55KCkgLSB3
aWR0aCAvIDIsIHdpZHRoLCB3aWR0aCksIFFDb2xvcihjb2xvcikpOworICAgICAgICAgICAgcC0+
ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KHAxLngoKSAtIHdpZHRoLCBwMS55KCkgLSB3aWR0aCAvIDIs
IHdpZHRoLCB3aWR0aCksIFFDb2xvcihjb2xvcikpOworICAgICAgICAgICAgcC0+ZmlsbFJlY3Qo
R3JhcGhpY3NSZWN0KHAyLngoKSwgcDIueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpLCBR
Q29sb3IoY29sb3IpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEV4YW1wbGU6IDgwIHBpeGVs
cyB3aXRoIGEgd2lkdGggb2YgMzAgcGl4ZWxzLgpAQCAtNDUwLDcgKzQ1MCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCAKICAgICBtX2RhdGEtPnAoKS0+ZHJhd0Vs
bGlwc2UocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdv
bihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFu
dGlhbGlhcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3Qg
bnBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlh
cykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00
NzMsNyArNDczLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAog
ICAgIHAtPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgYW50aUFsaWFzKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Q
b2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25z
dCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTYxLDcgKzU2MSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgU2hhZG93Qmx1
ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOwogICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hh
ZG93Qmx1cigpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGxh
dGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBi
b3VuZGluZ1JlY3QgPSBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpOwogICAgICAgICAg
ICAgYm91bmRpbmdSZWN0LmluZmxhdGUocGVuLm1pdGVyTGltaXQoKSArIHBlbi53aWR0aEYoKSk7
CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJl
Z2luU2hhZG93TGF5ZXIodGhpcywgYm91bmRpbmdSZWN0KTsKICAgICAgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CkBAIC02MDQsNyArNjA0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVBhdGgoY29uc3QgUAogICAgICAgICBwLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVu
KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRyYXdSZXBlYXRQYXR0ZXJuKFFQYWludGVyKiBw
LCBRUGl4bWFwKiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBib29sIHJlcGVh
dFgsIGNvbnN0IGJvb2wgcmVwZWF0WSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVwZWF0UGF0
dGVybihRUGFpbnRlciogcCwgUVBpeG1hcCogaW1hZ2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCwgY29uc3QgYm9vbCByZXBlYXRYLCBjb25zdCBib29sIHJlcGVhdFkpCiB7CiAgICAgLy8gUGF0
dGVybnMgbXVzdCBiZSBwYWludGVkIHNvIHRoYXQgdGhlIHRvcCBsZWZ0IG9mIHRoZSBmaXJzdCBp
bWFnZSBpcyBhbmNob3JlZCBhdAogICAgIC8vIHRoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUg
c3BhY2UKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlcGVhdFBh
dHRlcm4oUVBhCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC03MjIsNyArNzIyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsbwogfQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3IuaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC03OTcsNyArNzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgSW50UmVjdAogICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJz
ZWN0Q2xpcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC04ODYsMTMgKzg4NiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhj
b25zCiAgICAgZHJhd0ZvY3VzUmluZ0ZvclBhdGgobV9kYXRhLT5wKCksIHBhdGgsIGNvbG9yLCBt
X2RhdGEtPmFudGlBbGlhc2luZ0ZvclJlY3RzQW5kTGluZXMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQg
d2lkdGgsIGJvb2wpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBzdGFy
dFBvaW50ID0gb3JpZ2luOwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBGbG9h
dFNpemUod2lkdGgsIDApOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludCA9IG9yaWdpbjsK
KyAgICBHcmFwaGljc1BvaW50IGVuZFBvaW50ID0gb3JpZ2luICsgR3JhcGhpY3NTaXplKHdpZHRo
LCAwKTsKIAogICAgIC8vIElmIHBhaW50ZW5naW5lIHR5cGUgaXMgWDExIHRvIGF2b2lkIGFydGlm
YWN0cwogICAgIC8vIGxpa2UgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MjI0OApAQCAtOTE2LDcgKzkxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHQoY28KICAgICBkcmF3TGluZShJbnRQb2ludChzdGFydFBvaW50LngoKSwgc3Rh
cnRQb2ludC55KCkpLCBJbnRQb2ludChlbmRQb2ludC54KCksIGVuZFBvaW50LnkoKSkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0
LCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGUKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
ZnJlY3QsIFJvdW5kaW5nTW9kZSkKK0dyYXBoaWNzUmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgR3JhcGhpY3NSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQog
ewogICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2
aWNlIHNwYWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKICAgICAvLyBhZmZpbmUgdHJhbnNm
b3JtIG1hdHJpeCB0byBkZXZpY2Ugc3BhY2UgY2FuIG1lc3Mgd2l0aCB0aGlzIGNvbnZlcnNpb24g
aWYgd2UgaGF2ZSBhCkBAIC05NDcsMTIgKzk0NywxMiBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250
ZXh0Ojpyb3VuZFRvRGV2aWNlCiAgICAgaWYgKGRldmljZU9yaWdpbi54KCkgPT0gZGV2aWNlTG93
ZXJSaWdodC54KCkgJiYgZnJlY3Qud2lkdGgoKSkKICAgICAgICAgZGV2aWNlTG93ZXJSaWdodC5z
ZXRYKGRldmljZUxvd2VyUmlnaHQueCgpICsgMSk7CiAKLSAgICBGbG9hdFBvaW50IHJvdW5kZWRP
cmlnaW4gPSBGbG9hdFBvaW50KGRldmljZU9yaWdpbi54KCkgLyBkZXZpY2VTY2FsZVgsIGRldmlj
ZU9yaWdpbi55KCkgLyBkZXZpY2VTY2FsZVkpOwotICAgIEZsb2F0UG9pbnQgcm91bmRlZExvd2Vy
UmlnaHQgPSBGbG9hdFBvaW50KGRldmljZUxvd2VyUmlnaHQueCgpIC8gZGV2aWNlU2NhbGVYLCBk
ZXZpY2VMb3dlclJpZ2h0LnkoKSAvIGRldmljZVNjYWxlWSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOworICAg
IEdyYXBoaWNzUG9pbnQgcm91bmRlZE9yaWdpbiA9IEdyYXBoaWNzUG9pbnQoZGV2aWNlT3JpZ2lu
LngoKSAvIGRldmljZVNjYWxlWCwgZGV2aWNlT3JpZ2luLnkoKSAvIGRldmljZVNjYWxlWSk7Cisg
ICAgR3JhcGhpY3NQb2ludCByb3VuZGVkTG93ZXJSaWdodCA9IEdyYXBoaWNzUG9pbnQoZGV2aWNl
TG93ZXJSaWdodC54KCkgLyBkZXZpY2VTY2FsZVgsIGRldmljZUxvd2VyUmlnaHQueSgpIC8gZGV2
aWNlU2NhbGVZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5k
ZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAg
Ly8gUXQgZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1h
bnVhbGx5IGluIHRoZSBkcmF3KgogICAgIC8vIGZ1bmN0aW9ucwpAQCAtOTYwLDEwICs5NjAsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAogICAgIGlmIChtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0
aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1
IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWln
aHQoKSk7CiAgICAgfQogCi0gICAgbV9kYXRhLT5zaGFkb3ctPnNldFNoYWRvd1ZhbHVlcyhGbG9h
dFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0JsdXIpLCBtX3N0YXRlLnNo
YWRvd09mZnNldCwgY29sb3IsIGNvbG9yU3BhY2UsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpOworICAgIG1fZGF0YS0+c2hhZG93LT5zZXRTaGFkb3dWYWx1ZXMoR3JhcGhpY3NTaXpl
KG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dP
ZmZzZXQsIGNvbG9yLCBjb2xvclNwYWNlLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQpAQCAt
MTAzMCw3ICsxMDMwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eQogICAgIGRlbGV0ZSBsYXllcjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0
KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMDQyLDcgKzEwNDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgcC0+c2V0Q29tcG9zaXRpb25Nb2RlKGN1cnJl
bnRDb21wb3NpdGlvbk1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTExODQsNyArMTE4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFk
aWEKICAgICBtX2RhdGEtPnAoKS0+cm90YXRlKHJhZDJkZWcocXJlYWwocmFkaWFucykpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgcykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUmIHMpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNp
ZiAhZGVmaW5lZChRVF9OT19HUkFQSElDU1ZJRVcpCiAKICNpbmNsdWRlICJDdXJyZW50VGltZS5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
UmVmQ291bnRlZC5oIgpAQCAtMjc4LDkgKzI3OCw5IEBAIHB1YmxpYzoKIAogICAgIHN0cnVjdCBT
dGF0ZSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tMYXllcjsKLSAgICAgICAgRmxvYXRQ
b2ludCBwb3M7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKLSAgICAgICAgRmxv
YXRTaXplIHNpemU7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zOworICAgICAgICBHcmFwaGlj
c1BvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBzaXplOwogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOwogICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7
CkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE5lZWRzRGlzcGxh
eSgpCiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXll
clF0OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBH
cmFwaGljc0xheWVyUXQ6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QpCiB7CiAgICAgbV9pbXBsLT5tX3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBkYXRlIHw9
IFFSZWN0RihyZWN0KS50b0FsaWduZWRSZWN0KCk7CiAgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2Uo
R3JhcGhpY3NMYXllclF0SW1wbDo6RGlzcGxheUNoYW5nZSk7CkBAIC0xMDc4LDcgKzEwNzgsNyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0TWFza0xheWVyKEdyYXBoCiAKIC8qIFxyZWltcCAo
R3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50JiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRQb3NpdGlv
bihjb25zdCBHcmFwaGljc1BvaW50JiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gcG9zaXRp
b24oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgdm9pZCBHcmFwaGlj
c0xheWVyUXQ6OnNldFBvc2l0aW9uKGNvbnN0IAogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIu
aCkKICovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQ
b2ludDNEJiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRBbmNob3JQb2ludChjb25z
dCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBhbmNob3JQb2lu
dCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJRdDo6c2V0QW5jaG9yUG9pbnQoY29uCiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgdmFs
dWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHZh
bHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBzaXplKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3
IEBAIHB1YmxpYzoKICAgICAvLyByZWltcHMgZnJvbSBHcmFwaGljc0xheWVyLmgKICAgICB2aXJ0
dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQo
R3JhcGhpY3NMYXllciogbGF5ZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxH
cmFwaGljc0xheWVyKj4mKTsKQEAgLTUwLDkgKzUwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIq
IG5ld0NoaWxkKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
b3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5j
aG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wgYik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1BvaW50UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAJ
KHJldmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9GbG9hdFBvaW50UXQuY3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKKyNpbmNsdWRlIDxRUG9pbnRGPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgUVBvaW50RiYgcCkK
KyAgICA6IG1feChwLngoKSkKKyAgICAsIG1feShwLnkoKSkKK3sKK30KKworRmxvYXRQb2ludDo6
b3BlcmF0b3IgUVBvaW50RigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kp
OworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1BvaW50UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NQb2ludFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTkgKzI2LDE5IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCiAKICNpbmNsdWRlIDxRUG9pbnRGPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgUVBvaW50RiYgcCkKK0dyYXBo
aWNzUG9pbnQ6OkdyYXBoaWNzUG9pbnQoY29uc3QgUVBvaW50RiYgcCkKICAgICA6IG1feChwLngo
KSkKICAgICAsIG1feShwLnkoKSkKIHsKIH0KIAotRmxvYXRQb2ludDo6b3BlcmF0b3IgUVBvaW50
RigpIGNvbnN0CitHcmFwaGljc1BvaW50OjpvcGVyYXRvciBRUG9pbnRGKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gUVBvaW50RihtX3gsIG1feSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1JlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwCShyZXZpc2lv
biA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRS
ZWN0UXQuY3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NSZWN0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorCisjaW5jbHVkZSA8UVJlY3RGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IFFSZWN0RiYgcikKKyAgICA6IG1fbG9jYXRp
b24oci50b3BMZWZ0KCkpCisgICAgLCBtX3NpemUoci53aWR0aCgpCisgICAgLCByLmhlaWdodCgp
KQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFFSZWN0Rih4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworfQorCitGbG9hdFJlY3Qg
RmxvYXRSZWN0Ojpub3JtYWxpemVkKCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3Qgbm9ybWFsaXpl
ZFJlY3QgPSAqdGhpczsKKworICAgIGlmICh3aWR0aCgpIDwgMCkgeworICAgICAgICBub3JtYWxp
emVkUmVjdC5zZXRYKHgoKSArIHdpZHRoKCkpOworICAgICAgICBub3JtYWxpemVkUmVjdC5zZXRX
aWR0aCgtd2lkdGgoKSk7CisgICAgfQorICAgIGlmIChoZWlnaHQoKSA8IDApIHsKKyAgICAgICAg
bm9ybWFsaXplZFJlY3Quc2V0WSh5KCkgKyBoZWlnaHQoKSk7CisgICAgICAgIG5vcm1hbGl6ZWRS
ZWN0LnNldEhlaWdodCgtaGVpZ2h0KCkpOworICAgIH0KKyAgICByZXR1cm4gbm9ybWFsaXplZFJl
Y3Q7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1JlY3RRdC5jcHAJKHJl
dmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NSZWN0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNyArMjYsMjcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAKICNpbmNsdWRlIDxRUmVjdEY+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgUVJlY3RGJiByKQorR3JhcGhpY3NSZWN0
OjpHcmFwaGljc1JlY3QoY29uc3QgUVJlY3RGJiByKQogICAgIDogbV9sb2NhdGlvbihyLnRvcExl
ZnQoKSkKICAgICAsIG1fc2l6ZShyLndpZHRoKCkKICAgICAsIHIuaGVpZ2h0KCkpCiB7CiB9CiAK
LUZsb2F0UmVjdDo6b3BlcmF0b3IgUVJlY3RGKCkgY29uc3QKK0dyYXBoaWNzUmVjdDo6b3BlcmF0
b3IgUVJlY3RGKCkgY29uc3QKIHsKICAgICByZXR1cm4gUVJlY3RGKHgoKSwgeSgpLCB3aWR0aCgp
LCBoZWlnaHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5vcm1hbGl6ZWQoKSBjb25z
dAorR3JhcGhpY3NSZWN0IEdyYXBoaWNzUmVjdDo6bm9ybWFsaXplZCgpIGNvbnN0CiB7Ci0gICAg
RmxvYXRSZWN0IG5vcm1hbGl6ZWRSZWN0ID0gKnRoaXM7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1h
bGl6ZWRSZWN0ID0gKnRoaXM7CiAKICAgICBpZiAod2lkdGgoKSA8IDApIHsKICAgICAgICAgbm9y
bWFsaXplZFJlY3Quc2V0WCh4KCkgKyB3aWR0aCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZQogICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVh
dGUobV9kYXRhLm1fcGl4bWFwKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAordm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKGRlc3RDb250ZXh0ID09
IGNvbnRleHQoKSkgewpAQCAtMTQyLDggKzE0Miw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShtX2RhdGEu
bV9pbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRl
eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoZGVz
dENvbnRleHQgPT0gY29udGV4dCgpKSB7CiAgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBv
dXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29w
eSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvCiAgICAgICAgIG1fZGF0YS5tX2ltYWdlLT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6
Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRSZWN0
KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZmxvYXRSZWN0KSBjb25zdAogewogICAgIFFQaXhtYXAqIG5h
dGl2ZUltYWdlID0gbV9kYXRhLm1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CiAgICAgaWYgKCFuYXRpdmVJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
T2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTAxLDggKzEwMSw4
IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXMKICAgICByZXR1cm4g
U3RpbGxJbWFnZTo6Y3JlYXRlKGxvYWRSZXNvdXJjZVBpeG1hcChuYW1lKSk7CiB9CiAKLXZvaWQg
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3Qp
CiB7CiAgICAgUVBpeG1hcCogZnJhbWVQaXhtYXAgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwogICAgIGlmICghZnJhbWVQaXhtYXApIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0
IGhhdmUgYW4gaW1hZ2UgeWV0LgpAQCAtMjAxLDggKzIwMSw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIH0KIAogLy8gRHJhd2luZyBSb3V0aW5lcwotdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIFFSZWN0
RiBub3JtYWxpemVkRHN0ID0gZHN0Lm5vcm1hbGl6ZWQoKTsKICAgICBRUmVjdEYgbm9ybWFsaXpl
ZFNyYyA9IHNyYy5ub3JtYWxpemVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01l
ZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDcgKzYwOSw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnJlcGFpbnQoKQogfQogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZVF0OjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqKSBjb25zdAordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlciwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJl
KikgY29uc3QKIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gdGV4dHVyZU1h
cHBlci0+Z3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQ
bGF5ZXJQcml2YXRlUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSB7
IH0KICAgICAvLyBDb25zdC1jYXN0aW5nIGhlcmUgaXMgc2FmZSwgc2luY2UgYWxsIG9mIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyJ3MgZnVuY3Rpb25zIGFyZSBjb25zdC5nCiAgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0
IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0
YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJp
dG1hcFRleHR1cmUqIG1hc2spIGNvbnN0OwogI2Vsc2UKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRoUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIlBhdGguaCIK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgaXNQb2ludE9uUGF0aEJvcmRlcihjb25zdCBRUAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgUXQ6
OkZpbGxSdWxlIHNhdmVkUnVsZSA9IG1fcGF0aC5maWxsUnVsZSgpOwogICAgIGNvbnN0X2Nhc3Q8
UVBhaW50ZXJQYXRoKj4oJm1fcGF0aCktPnNldEZpbGxSdWxlKHJ1bGUgPT0gUlVMRV9FVkVOT0RE
ID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKQEAgLTEyMyw3ICsxMjMsNyBA
QCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoQ29udGV4dCgpCiAgICAgcmV0dXJuIGNv
bnRleHQ7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVy
KiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgUGF0aDo6c3Ry
b2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQoYXBwbGllcik7CiAKQEAgLTE0MiwxOSAr
MTQyLDE5IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAKICAgICBy
ZXR1cm4gc3Ryb2tlLmNyZWF0ZVN0cm9rZShtX3BhdGgpLmNvbnRhaW5zKHBvaW50KTsKIH0KIAot
dm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBQYXRoOjp0
cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIFFUcmFuc2Zvcm0gbWF0
cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
ICAgICBtX3BhdGggPSBtX3BhdGggKiBtYXRyaXg7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3Vu
ZGluZ1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcGF0aC5ib3VuZGluZ1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0
CitHcmFwaGljc1JlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGll
ciogYXBwbGllcikgY29uc3QKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBzY3Jh
dGNoQ29udGV4dCgpOwogICAgIFFQYWludGVyUGF0aFN0cm9rZXIgc3Ryb2tlOwpAQCAtMTcyLDMy
ICsxNzIsMzIgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJvawogICAg
IHJldHVybiBzdHJva2UuY3JlYXRlU3Ryb2tlKG1fcGF0aCkuYm91bmRpbmdSZWN0KCk7CiB9CiAK
LXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoOjpt
b3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9wYXRoLm1vdmVUbyhw
b2ludCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit2
b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIG1fcGF0
aC5saW5lVG8ocCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRv
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAg
IG1fcGF0aC5xdWFkVG8oY3AsIHApOwogfQogCi12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0
UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2lu
dCYgY3AxLCBjb25zdCBHcmFwaGljc1BvaW50JiBjcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAp
CiB7CiAgICAgbV9wYXRoLmN1YmljVG8oY3AxLCBjcDIsIHApOwogfQogCi12b2lkIFBhdGg6OmFk
ZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQg
cmFkaXVzKQordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKIHsKLSAgICBGbG9hdFBvaW50IHAw
KG1fcGF0aC5jdXJyZW50UG9zaXRpb24oKSk7CisgICAgR3JhcGhpY3NQb2ludCBwMChtX3BhdGgu
Y3VycmVudFBvc2l0aW9uKCkpOwogCi0gICAgRmxvYXRQb2ludCBwMXAwKChwMC54KCkgLSBwMS54
KCkpLCAocDAueSgpIC0gcDEueSgpKSk7Ci0gICAgRmxvYXRQb2ludCBwMXAyKChwMi54KCkgLSBw
MS54KCkpLCAocDIueSgpIC0gcDEueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwMXAwKChwMC54
KCkgLSBwMS54KCkpLCAocDAueSgpIC0gcDEueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwMXAy
KChwMi54KCkgLSBwMS54KCkpLCAocDIueSgpIC0gcDEueSgpKSk7CiAgICAgZmxvYXQgcDFwMF9s
ZW5ndGggPSBzcXJ0ZihwMXAwLngoKSAqIHAxcDAueCgpICsgcDFwMC55KCkgKiBwMXAwLnkoKSk7
CiAgICAgZmxvYXQgcDFwMl9sZW5ndGggPSBzcXJ0ZihwMXAyLngoKSAqIHAxcDIueCgpICsgcDFw
Mi55KCkgKiBwMXAyLnkoKSk7CiAKQEAgLTIxMywyMSArMjEzLDIxIEBAIHZvaWQgUGF0aDo6YWRk
QXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEKIAogICAgIGZsb2F0IHRhbmdlbnQgPSByYWRpdXMg
LyB0YW4oYWNvcyhjb3NfcGhpKSAvIDIpOwogICAgIGZsb2F0IGZhY3Rvcl9wMXAwID0gdGFuZ2Vu
dCAvIHAxcDBfbGVuZ3RoOwotICAgIEZsb2F0UG9pbnQgdF9wMXAwKChwMS54KCkgKyBmYWN0b3Jf
cDFwMCAqIHAxcDAueCgpKSwgKHAxLnkoKSArIGZhY3Rvcl9wMXAwICogcDFwMC55KCkpKTsKKyAg
ICBHcmFwaGljc1BvaW50IHRfcDFwMCgocDEueCgpICsgZmFjdG9yX3AxcDAgKiBwMXAwLngoKSks
IChwMS55KCkgKyBmYWN0b3JfcDFwMCAqIHAxcDAueSgpKSk7CiAKLSAgICBGbG9hdFBvaW50IG9y
dGhfcDFwMChwMXAwLnkoKSwgLXAxcDAueCgpKTsKKyAgICBHcmFwaGljc1BvaW50IG9ydGhfcDFw
MChwMXAwLnkoKSwgLXAxcDAueCgpKTsKICAgICBmbG9hdCBvcnRoX3AxcDBfbGVuZ3RoID0gc3Fy
dChvcnRoX3AxcDAueCgpICogb3J0aF9wMXAwLngoKSArIG9ydGhfcDFwMC55KCkgKiBvcnRoX3Ax
cDAueSgpKTsKICAgICBmbG9hdCBmYWN0b3JfcmEgPSByYWRpdXMgLyBvcnRoX3AxcDBfbGVuZ3Ro
OwogCiAgICAgLy8gYW5nbGUgYmV0d2VlbiBvcnRoX3AxcDAgYW5kIHAxcDIgdG8gZ2V0IHRoZSBy
aWdodCB2ZWN0b3Igb3J0aG9ncmFwaGljIHRvIHAxcDAKICAgICBkb3VibGUgY29zX2FscGhhID0g
KG9ydGhfcDFwMC54KCkgKiBwMXAyLngoKSArIG9ydGhfcDFwMC55KCkgKiBwMXAyLnkoKSkgLyAo
b3J0aF9wMXAwX2xlbmd0aCAqIHAxcDJfbGVuZ3RoKTsKICAgICBpZiAoY29zX2FscGhhIDwgMC5m
KQotICAgICAgICBvcnRoX3AxcDAgPSBGbG9hdFBvaW50KC1vcnRoX3AxcDAueCgpLCAtb3J0aF9w
MXAwLnkoKSk7CisgICAgICAgIG9ydGhfcDFwMCA9IEdyYXBoaWNzUG9pbnQoLW9ydGhfcDFwMC54
KCksIC1vcnRoX3AxcDAueSgpKTsKIAotICAgIEZsb2F0UG9pbnQgcCgodF9wMXAwLngoKSArIGZh
Y3Rvcl9yYSAqIG9ydGhfcDFwMC54KCkpLCAodF9wMXAwLnkoKSArIGZhY3Rvcl9yYSAqIG9ydGhf
cDFwMC55KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IHAoKHRfcDFwMC54KCkgKyBmYWN0b3JfcmEg
KiBvcnRoX3AxcDAueCgpKSwgKHRfcDFwMC55KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueSgp
KSk7CiAKICAgICAvLyBjYWxjdWxhdGUgYW5nbGVzIGZvciBhZGRBcmMKLSAgICBvcnRoX3AxcDAg
PSBGbG9hdFBvaW50KC1vcnRoX3AxcDAueCgpLCAtb3J0aF9wMXAwLnkoKSk7CisgICAgb3J0aF9w
MXAwID0gR3JhcGhpY3NQb2ludCgtb3J0aF9wMXAwLngoKSwgLW9ydGhfcDFwMC55KCkpOwogICAg
IGZsb2F0IHNhID0gYWNvcyhvcnRoX3AxcDAueCgpIC8gb3J0aF9wMXAwX2xlbmd0aCk7CiAgICAg
aWYgKG9ydGhfcDFwMC55KCkgPCAwLmYpCiAgICAgICAgIHNhID0gMiAqIHBpRG91YmxlIC0gc2E7
CkBAIC0yMzYsOCArMjM2LDggQEAgdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50
JiBwMQogICAgIGJvb2wgYW50aWNsb2Nrd2lzZSA9IGZhbHNlOwogCiAgICAgZmxvYXQgZmFjdG9y
X3AxcDIgPSB0YW5nZW50IC8gcDFwMl9sZW5ndGg7Ci0gICAgRmxvYXRQb2ludCB0X3AxcDIoKHAx
LngoKSArIGZhY3Rvcl9wMXAyICogcDFwMi54KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDIgKiBw
MXAyLnkoKSkpOwotICAgIEZsb2F0UG9pbnQgb3J0aF9wMXAyKCh0X3AxcDIueCgpIC0gcC54KCkp
LCAodF9wMXAyLnkoKSAtIHAueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCB0X3AxcDIoKHAxLngo
KSArIGZhY3Rvcl9wMXAyICogcDFwMi54KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDIgKiBwMXAy
LnkoKSkpOworICAgIEdyYXBoaWNzUG9pbnQgb3J0aF9wMXAyKCh0X3AxcDIueCgpIC0gcC54KCkp
LCAodF9wMXAyLnkoKSAtIHAueSgpKSk7CiAgICAgZmxvYXQgb3J0aF9wMXAyX2xlbmd0aCA9IHNx
cnRmKG9ydGhfcDFwMi54KCkgKiBvcnRoX3AxcDIueCgpICsgb3J0aF9wMXAyLnkoKSAqIG9ydGhf
cDFwMi55KCkpOwogICAgIGZsb2F0IGVhID0gYWNvcyhvcnRoX3AxcDIueCgpIC8gb3J0aF9wMXAy
X2xlbmd0aCk7CiAgICAgaWYgKG9ydGhfcDFwMi55KCkgPCAwKQpAQCAtMjU3LDcgKzI1Nyw3IEBA
IHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKICAgICBtX3BhdGguY2xvc2VTdWJwYXRoKCk7CiB9
CiAKLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0
IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhj
b25zdCBHcmFwaGljc1BvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9v
bCBhbnRpY2xvY2t3aXNlKQogewogICAgIHFyZWFsIHhjID0gcC54KCk7CiAgICAgcXJlYWwgeWMg
PSBwLnkoKTsKQEAgLTMxOSwxMiArMzE5LDEyIEBAIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZs
b2F0UG9pbnQmIHAsIGYKIAogfQogCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByKQordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBt
X3BhdGguYWRkUmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CiAK
LXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIFBhdGg6OmFk
ZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAgIG1fcGF0aC5hZGRFbGxpcHNl
KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKIH0KQEAgLTM0OCw3ICszNDgs
NyBAQCBib29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CiAgICAgcmV0dXJuICFpc0Vt
cHR5KCk7CiB9CiAKLUZsb2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCitHcmFw
aGljc1BvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAogewogICAgIHJldHVybiBtX3Bh
dGguY3VycmVudFBvc2l0aW9uKCk7CiB9CkBAIC0zNTYsNyArMzU2LDcgQEAgRmxvYXRQb2ludCBQ
YXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywg
UGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBQYXRoRWxlbWVudCBw
ZWxlbWVudDsKLSAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAgICBHcmFwaGljc1BvaW50IHBv
aW50c1szXTsKICAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX3BhdGguZWxlbWVudENvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBRUGFp
bnRlclBhdGg6OkVsZW1lbnQmIGN1ciA9IG1fcGF0aC5lbGVtZW50QXQoaSk7CkBAIC00MDYsNyAr
NDA2LDcgQEAgZmxvYXQgUGF0aDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9wYXRoLmxl
bmd0aCgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3Ro
LCBib29sJiBvaykgY29uc3QKK0dyYXBoaWNzUG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9h
dCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAogewogICAgIG9rID0gKGxlbmd0aCA+PSAwICYmIGxl
bmd0aCA8PSBtX3BhdGgubGVuZ3RoKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TaW1wbGVG
b250RGF0YVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTAgKzk3LDEwIEBAIFNpbXBsZUZv
bnREYXRhKiBTaW1wbGVGb250RGF0YTo6ZW1waGFzaXMKICAgICByZXR1cm4gbV9kZXJpdmVkRm9u
dERhdGEtPmVtcGhhc2lzTWFyay5nZXQoKTsKIH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAorR3JhcGhpY3NSZWN0IFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdAogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFw
aGljc1JlY3QoKTsKIH0KICNlbHNlCiBib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJh
Y3RlcnMoY29uc3QgVUNoYXIqLCBpbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTQgKzYyLDE0IEBAIE5hdGl2ZUltYWdlUHRyIFN0
aWxsSW1hZ2U6Om5hdGl2ZUltYWdlRm8KICAgICByZXR1cm4gY29uc3RfY2FzdDxOYXRpdmVJbWFn
ZVB0cj4obV9waXhtYXApOwogfQogCi12b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKLSAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit2
b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHNy
YywgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKG1fcGl4bWFw
LT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IG5vcm1hbGl6ZWRT
cmMgPSBzcmMubm9ybWFsaXplZCgpOwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkRHN0ID0gZHN0
Lm5vcm1hbGl6ZWQoKTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybWFsaXplZFNyYyA9IHNyYy5ub3Jt
YWxpemVkKCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWREc3QgPSBkc3Qubm9ybWFsaXpl
ZCgpOwogCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNv
bXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTdGlsbEltYWdl
KGNvbnN0IFFQaXhtYXAmIHBpeG1hcCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBl
clF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEJpdG1hcFRleHR1
cmVRdDo6dW5wYWNrKCkKICAgICBtX2ltYWdlID0gUUltYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVy
ZU1hcHBlclF0OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luQ2xpcChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgIFFQYWludGVyKiBwYWludGVyID0gY3VycmVudFBhaW50ZXIoKTsKICAgICAg
cGFpbnRlci0+c2F2ZSgpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0
OjpiaW5kU3VyZmFjZShCaXRtYXAKIH0KIAogCi12b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1Rl
eHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSkKK3ZvaWQgVGV4dHVyZU1hcHBlclF0
OjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZs
b2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQogewogICAgIGNv
bnN0IEJpdG1hcFRleHR1cmVRdCYgdGV4dHVyZVF0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFw
VGV4dHVyZVF0Jj4odGV4dHVyZSk7CiAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX3BhaW50ZXI7
CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmRyYXdUZXh0dXJlKGNv
bnN0IAogICAgIGNvbnN0IFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXItPnRyYW5z
Zm9ybSgpOwogICAgIHBhaW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CiAgICAgcGFpbnRlci0+
c2V0VHJhbnNmb3JtKG1hdHJpeCwgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJn
ZXRSZWN0LCBwaXhtYXAsIEZsb2F0UmVjdCh0ZXh0dXJlUXQuc291cmNlUmVjdCgpKSk7CisgICAg
cGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAsIEdyYXBoaWNzUmVjdCh0ZXh0
dXJlUXQuc291cmNlUmVjdCgpKSk7CiAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKHByZXZUcmFu
c2Zvcm0pOwogICAgIHBhaW50ZXItPnNldE9wYWNpdHkocHJldk9wYWNpdHkpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1h
cHBlclF0LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkg
QEAgY2xhc3MgVGV4dHVyZU1hcHBlclF0IDogcHVibGljIFRleHR1cmVNYQogcHVibGljOgogICAg
IFRleHR1cmVNYXBwZXJRdCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0
IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0
dXJlJiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
KTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgZW5kQ2xpcCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0Kik7CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGlsZVF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UaWxl
UXQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1RpbGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsOCBAQCBWZWN0
b3I8SW50UmVjdD4gVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCiAgICAgICAgIGNvbnRleHQuc2F2
ZSgpOwogICAgICAgICBJbnRSZWN0IHJlY3QgPSBkaXJ0eVJlY3RzW25dOwogICAgICAgICB1cGRh
dGVkUmVjdHMuYXBwZW5kKHJlY3QpOwotICAgICAgICBjb250ZXh0LmNsaXAoRmxvYXRSZWN0KHJl
Y3QpKTsKLSAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUobV9iYWNraW5nU3RvcmUtPm1f
Y29udGVudHNTY2FsZSwgbV9iYWNraW5nU3RvcmUtPm1fY29udGVudHNTY2FsZSkpOworICAgICAg
ICBjb250ZXh0LmNsaXAoR3JhcGhpY3NSZWN0KHJlY3QpKTsKKyAgICAgICAgY29udGV4dC5zY2Fs
ZShHcmFwaGljc1NpemUobV9iYWNraW5nU3RvcmUtPm1fY29udGVudHNTY2FsZSwgbV9iYWNraW5n
U3RvcmUtPm1fY29udGVudHNTY2FsZSkpOwogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+bV9jbGll
bnQtPnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoJmNvbnRleHQsIG1fYmFja2luZ1N0b3JlLT5tYXBU
b0NvbnRlbnRzKHJlY3QpKTsKICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgfQpAQCAt
MTUzLDcgKzE1Myw3IEBAIHZvaWQgVGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXgK
ICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BpeG1hcCh0YXJnZXQsICptX2J1
ZmZlciwgc291cmNlKTsKIH0KICAgICAKLXZvaWQgVGlsZTo6cGFpbnRDaGVja2VyUGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0KQordm9pZCBU
aWxlOjpwYWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiB0YXJnZXQpCiB7CiAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBRVHJhbnNmb3JtIHdvcmxkVHJhbnNmb3JtID0gcGFp
bnRlci0+d29ybGRUcmFuc2Zvcm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3Bw
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKIHByaXZh
dGU6CiAgICAgTmF0aXZlSW1hZ2VTa2lhIG1fbmF0aXZlSW1hZ2U7CkBAIC04Miw3ICs4Miw3IEBA
IHByaXZhdGU6CiAgICAgZXhwbGljaXQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEoY29uc3Qg
U2tCaXRtYXAmKTsKIH07CiAKLUZsb2F0UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOworR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBvaW50U2tpYS5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFBv
aW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaW5jbHVkZSAiU2tQb2ludC5o
IgotI2luY2x1ZGUgIlNraWFVdGlscy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0
UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgU2tQb2ludCYgcCkKLSAgICA6IG1feChwLmZYKQotICAg
ICwgbV95KHAuZlkpCi17Ci19Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIFNrUG9pbnQoKSBjb25z
dAotewotICAgIFNrUG9pbnQgcCA9IHsgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3gpLCBXZWJD
b3JlRmxvYXRUb1NrU2NhbGFyKG1feSkgfTsKLSAgICByZXR1cm4gcDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9GbG9hdFJlY3RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0Zsb2F0UmVjdFNraWEuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlICJTa1JlY3QuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBTa1JlY3QmIHIpCi0gICAgOiBt
X2xvY2F0aW9uKHIuZkxlZnQsIHIuZlRvcCkKLSAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVp
Z2h0KCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3IgU2tSZWN0KCkgY29uc3QKLXsKLSAg
ICBTa1JlY3QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07Ci0gICAgcmV0dXJu
IHJlY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIHNldHVwUGFp
bnQoU2tQYWludCogcGFpbnQsIGMKIC8vIFRoaXMgaXNzdWUgaXMgdHJhY2tlZCBpbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5ODkKIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsICBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QgeworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50KSBjb25zdCB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEdseXBoQnVm
ZmVyR2x5cGgpID09IHNpemVvZih1aW50MTZfdCksIEdseXBoQnVmZmVyR2x5cGhTaXplX2VxdWFs
c191aW50MTZfdCk7CiAKICAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMgPSBnbHlw
aEJ1ZmZlci5nbHlwaHMoZnJvbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYWRpZW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIFNrU2hhZGVyKiBHcmFkaWVudDo6
cGxhdGZvcm1HcmFkaWVudCgpCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CiB9CiAKLXZvaWQgR3Jh
ZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudCh0aGlz
KTsKICAgICBjb250ZXh0LT5maWxsUmVjdChyZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUGxhdGZvcm1TaGFkbwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXREcmF3TG9vcGVyKDAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgR3JhcGhpY3NSZWN0
JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0
IEZsCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MjMsNyAr
NDIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbgogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+c2V0TWF0cml4KGFmZmluZSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHNldFBhdGhGcm9tQ29udmV4UG9pbnRzKFNrUGF0aCogcGF0aCwgc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIHZvaWQgc2V0UGF0aEZyb21D
b252ZXhQb2ludHMoU2tQYXRoKiBwYXRoLCBzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGlj
c1BvaW50KiBwb2ludHMpCiB7CiAgICAgcGF0aC0+aW5jUmVzZXJ2ZShudW1Qb2ludHMpOwogICAg
IHBhdGgtPm1vdmVUbyhXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHBvaW50c1swXS54KCkpLApAQCAt
NDM2LDcgKzQzNiw3IEBAIHN0YXRpYyB2b2lkIHNldFBhdGhGcm9tQ29udmV4UG9pbnRzKFNrUGEK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Q
b2ludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNob3VsZEFudGlhbGlhcykKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpAQCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29udmV4UG9seWdvbigKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29u
dmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJv
b2wgYW50aWFsaWFzZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24o
c2l6ZV90IG51bVBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlh
bGlhc2VkKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTU4MiwxNSArNTgyLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25z
dCBJbnQKIAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwog
Ci0gICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQy
OworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBwMiA9
IHBvaW50MjsKICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngoKSA9PSBwMi54KCkpOwog
ICAgIGludCB3aWR0aCA9IHJvdW5kZihzdHJva2VUaGlja25lc3MoKSk7CiAKICAgICAvLyBXZSBr
bm93IHRoZXNlIGFyZSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIGxpbmVzLCBzbyB0aGUgbGVuZ3Ro
IHdpbGwganVzdAogICAgIC8vIGJlIHRoZSBzdW0gb2YgdGhlIGRpc3BsYWNlbWVudCBjb21wb25l
bnQgdmVjdG9ycyBnaXZlIG9yIHRha2UgMSAtCiAgICAgLy8gcHJvYmFibHkgd29ydGggdGhlIHNw
ZWVkIHVwIG9mIG5vIHNxdWFyZSByb290LCB3aGljaCBhbHNvIHdvbid0IGJlIGV4YWN0LgotICAg
IEZsb2F0U2l6ZSBkaXNwID0gcDIgLSBwMTsKKyAgICBHcmFwaGljc1NpemUgZGlzcCA9IHAyIC0g
cDE7CiAgICAgaW50IGxlbmd0aCA9IFNrU2NhbGFyUm91bmQoZGlzcC53aWR0aCgpICsgZGlzcC5o
ZWlnaHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygm
cGFpbnQsIDAsIGxlbmd0aCk7CiAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBwdHMsIHBhaW50KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0
IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxl
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxl
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY5
OCw3ICs2OTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcHQsCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmlu
dGluZykKIHsKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoY29uc3QgUGF0CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChw
YXRoLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTc4NCw3ICs3ODQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC04NjQsMTIgKzg2NCwxMiBAQCBBZmZpbmVUcmFuc2Zvcm0gR3Jh
cGhpY3NDb250ZXh0OjpnZXRDVE0oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxh
clRvRG91YmxlKG0uZ2V0VHJhbnNsYXRlWSgpKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vZGUpCitHcmFwaGljc1JlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlKQogewogICAgIHJldHVybiBy
ZWN0OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6
ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC05
ODYsNyArOTg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IoY29sb3IucmdiKCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBz
aXplLAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdyYXBo
aWNzU2l6ZSYgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBibHVyRmxvYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ29sb3ImIGNvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTExNTIsNyArMTE1Miw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzUG9pbnRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzUG9pbnRTa2lhLmNwcAkocmV2aXNpb24gOTEwMTEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRQb2ludFNraWEu
Y3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc1BvaW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaW5jbHVkZSAiU2tQ
b2ludC5oIgorI2luY2x1ZGUgIlNraWFVdGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29uc3QgU2tQb2ludCYgcCkKKyAgICA6IG1feChwLmZY
KQorICAgICwgbV95KHAuZlkpCit7Cit9CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIFNrUG9pbnQo
KSBjb25zdAoreworICAgIFNrUG9pbnQgcCA9IHsgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3gp
LCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1feSkgfTsKKyAgICByZXR1cm4gcDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc1BvaW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1BvaW50U2tpYS5jcHAJKHJldmlzaW9u
IDkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c1BvaW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIwICsyOSwyMCBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludC5oIgogCiAjaW5jbHVkZSAiU2tQb2ludC5oIgogI2luY2x1ZGUgIlNraWFV
dGlscy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQo
Y29uc3QgU2tQb2ludCYgcCkKK0dyYXBoaWNzUG9pbnQ6OkdyYXBoaWNzUG9pbnQoY29uc3QgU2tQ
b2ludCYgcCkKICAgICA6IG1feChwLmZYKQogICAgICwgbV95KHAuZlkpCiB7CiB9CiAKLUZsb2F0
UG9pbnQ6Om9wZXJhdG9yIFNrUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludDo6b3BlcmF0b3Ig
U2tQb2ludCgpIGNvbnN0CiB7CiAgICAgU2tQb2ludCBwID0geyBXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKG1feCksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIobV95KSB9OwogICAgIHJldHVybiBwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1JlY3RT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzUmVjdFNraWEuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcDo5MTAxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NSZWN0U2tpYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlICJTa1JlY3QuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBTa1JlY3QmIHIpCisg
ICAgOiBtX2xvY2F0aW9uKHIuZkxlZnQsIHIuZlRvcCkKKyAgICAsIG1fc2l6ZShyLndpZHRoKCks
IHIuaGVpZ2h0KCkpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3IgU2tSZWN0KCkgY29uc3QK
K3sKKyAgICBTa1JlY3QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CisgICAg
cmV0dXJuIHJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NSZWN0U2tpYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1Jl
Y3RTa2lhLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzUmVjdFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
OSArMjksMTkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAKICNpbmNsdWRlICJTa1JlY3QuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBTa1Jl
Y3QmIHIpCitHcmFwaGljc1JlY3Q6OkdyYXBoaWNzUmVjdChjb25zdCBTa1JlY3QmIHIpCiAgICAg
OiBtX2xvY2F0aW9uKHIuZkxlZnQsIHIuZlRvcCkKICAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIu
aGVpZ2h0KCkpCiB7CiB9CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3IgU2tSZWN0KCkgY29uc3QKK0dy
YXBoaWNzUmVjdDo6b3BlcmF0b3IgU2tSZWN0KCkgY29uc3QKIHsKICAgICBTa1JlY3QgcmVjdCA9
IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CiAgICAgcmV0dXJuIHJlY3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDEyICsxMDgsMTIgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZQogICAgIHJldHVybiBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEu
bV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIHRydWUpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
OjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBj
b25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKHJlY3QsIHRoaXMpOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAg
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CkBAIC0x
MjEsOCArMTIxLDggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAog
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7
CiAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7
CiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpj
cmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAoKSwgY29udGV4dCA9PSBtX2Nv
bnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcElt
YWdlU2luZ2xlRnJhbWVTa2lhLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5hdGl2
ZUltYWdlU2tpYS5oIgpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgUmVzYW1wbGluZ01vZGUgY29t
cHV0ZVJlc2FtcGxpbmdNCiB7CiAgICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+aGFzSW1hZ2VSZXNh
bXBsaW5nSGludCgpKSB7CiAgICAgICAgIEludFNpemUgc3JjU2l6ZTsKLSAgICAgICAgRmxvYXRT
aXplIGRzdFNpemU7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBkc3RTaXplOwogICAgICAgICBwbGF0
Zm9ybUNvbnRleHQtPmdldEltYWdlUmVzYW1wbGluZ0hpbnQoJnNyY1NpemUsICZkc3RTaXplKTsK
ICAgICAgICAgc3JjV2lkdGggPSBzcmNTaXplLndpZHRoKCk7CiAgICAgICAgIHNyY0hlaWdodCA9
IHNyY1NpemUuaGVpZ2h0KCk7CkBAIC0zMDAsOSArMzAwLDkgQEAgc3RhdGljIHZvaWQgVHJhbnNm
b3JtRGltZW5zaW9ucyhjb25zdCBTawogfQogCiAvLyBBIGhlbHBlciBtZXRob2QgZm9yIHRyYW5z
bGF0aW5nIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzLgotRmxvYXRSZWN0IG5vcm1h
bGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZVJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewotICAgIEZsb2F0UmVjdCBub3JtID0gcmVj
dDsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybSA9IHJlY3Q7CiAgICAgaWYgKG5vcm0ud2lkdGgoKSA8
IDApIHsKICAgICAgICAgbm9ybS5zZXRYKG5vcm0ueCgpICsgbm9ybS53aWR0aCgpKTsKICAgICAg
ICAgbm9ybS5zZXRXaWR0aCgtbm9ybS53aWR0aCgpKTsKQEAgLTMzMCwxNCArMzMwLDE0IEBAIGJv
b2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEKIH0KIAogdm9pZCBJbWFnZTo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGZsb2F0U3JjUmVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAg
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgRmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0g
bm9ybWFsaXplUmVjdChmbG9hdFNyY1JlY3QpOworICAgIEdyYXBoaWNzUmVjdCBub3JtU3JjUmVj
dCA9IG5vcm1hbGl6ZVJlY3QoZmxvYXRTcmNSZWN0KTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0
eSgpIHx8IG5vcm1TcmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8gbm90aGlu
ZyB0byBkcmF3CiAKQEAgLTQ2MSw4ICs0NjEsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0Zv
clNvbGlkQ29sb3IoKQogICAgIH0KIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIGlmICgh
bV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDc2LDggKzQ3Niw4
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBpZiAoIWJt
KQogICAgICAgICByZXR1cm47ICAvLyBJdCdzIHRvbyBlYXJseSBhbmQgd2UgZG9uJ3QgaGF2ZSBh
biBpbWFnZSB5ZXQuCiAKLSAgICBGbG9hdFJlY3Qgbm9ybURzdFJlY3QgPSBub3JtYWxpemVSZWN0
KGRzdFJlY3QpOwotICAgIEZsb2F0UmVjdCBub3JtU3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qoc3Jj
UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1Ec3RSZWN0ID0gbm9ybWFsaXplUmVjdChkc3RS
ZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KHNyY1Jl
Y3QpOwogCiAgICAgaWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3JtRHN0UmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4KQEAgLTQ5NCwxMyAr
NDk0LDEzIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKIC8vIEZJ
WE1FOiBUaGVzZSBzaG91bGQgZ28gaW50byBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5jcHAK
IAogdm9pZCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGN0eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKQogewotICAgIEZsb2F0UmVjdCBub3JtRHN0UmVjdCA9IG5vcm1hbGl6ZVJlY3Qo
ZHN0UmVjdCk7Ci0gICAgRmxvYXRSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFsaXplUmVjdChzcmNS
ZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybURzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJl
Y3QpOworICAgIEdyYXBoaWNzUmVjdCBub3JtU3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3Qoc3JjUmVj
dCk7CiAKICAgICBpZiAobm9ybVNyY1JlY3QuaXNFbXB0eSgpIHx8IG5vcm1Ec3RSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8gTm90aGluZyB0byBkcmF3LgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QYXRoU2tpYS5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
YXRoU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJQ
YXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgogCkBAIC03NCw1MCArNzQsNTAgQEAg
Ym9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiBtX3BhdGgtPmdl
dFBvaW50cyhOVUxMLCAwKSAhPSAwOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2lu
dCgpIGNvbnN0IAorR3JhcGhpY3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsK
ICAgICAvLyBGSVhNRTogcmV0dXJuIGN1cnJlbnQgcG9pbnQgb2Ygc3VicGF0aC4KICAgICBmbG9h
dCBxdWlldE5hTiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludChxdWlldE5hTiwgcXVpZXROYU4pOworICAgIHJldHVybiBHcmFw
aGljc1BvaW50KHF1aWV0TmFOLCBxdWlldE5hTik7CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6
OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25z
dAogewogICAgIHJldHVybiBTa1BhdGhDb250YWluc1BvaW50KG1fcGF0aCwgcG9pbnQsCiAgICAg
ICBydWxlID09IFJVTEVfTk9OWkVSTyA/IFNrUGF0aDo6a1dpbmRpbmdfRmlsbFR5cGUgOiBTa1Bh
dGg6OmtFdmVuT2RkX0ZpbGxUeXBlKTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXpl
JiBzaXplKQogewogICAgIG1fcGF0aC0+b2Zmc2V0KFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6
ZS53aWR0aCgpKSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXplLmhlaWdodCgpKSk7CiB9CiAK
LUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6
OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0aC0+Z2V0Qm91bmRzKCk7
CiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQ
YXRoOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9wYXRoLT5t
b3ZlVG8ocG9pbnQpOwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
KQogewogICAgIG1fcGF0aC0+bGluZVRvKHBvaW50KTsKIH0KIAotdm9pZCBQYXRoOjphZGRRdWFk
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgZXApCit2b2lk
IFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwLCBjb25zdCBHcmFw
aGljc1BvaW50JiBlcCkKIHsKICAgICBtX3BhdGgtPnF1YWRUbyhjcCwgZXApOwogfQogCi12b2lk
IFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBlcCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3Vy
dmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGVwKQogewogICAgIG1fcGF0aC0+Y3ViaWNUbyhwMSwgcDIsIGVw
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3Qg
RmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3Qg
R3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBmbG9hdCByYWRpdXMp
CiB7CiAgICAgbV9wYXRoLT5hcmNUbyhwMSwgcDIsIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIocmFk
aXVzKSk7CiB9CkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQog
ICAgIG1fcGF0aC0+Y2xvc2UoKTsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQ
b2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2EsIGZsb2F0IGVhLCBib29sIGFudGljbG9ja3dpc2Up
IHsKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGZsb2F0IHIsIGZs
b2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBhbnRpY2xvY2t3aXNlKSB7CiAgICAgU2tTY2FsYXIgY3gg
PSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHAueCgpKTsKICAgICBTa1NjYWxhciBjeSA9IFdlYkNv
cmVGbG9hdFRvU2tTY2FsYXIocC55KCkpOwogICAgIFNrU2NhbGFyIHJhZGl1cyA9IFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIocik7CkBAIC0xNjMsMTIgKzE2MywxMiBAQCB2b2lkIFBhdGg6OmFkZEFy
Yyhjb25zdCBGbG9hdFBvaW50JiBwLCBmCiAgICAgfQogfQogCi12b2lkIFBhdGg6OmFkZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkKIHsKICAgICBtX3BhdGgtPmFkZFJlY3QocmVjdCk7CiB9CiAKLXZvaWQgUGF0
aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBhdGg6OmFkZEVsbGlw
c2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fcGF0aC0+YWRkT3ZhbChyZWN0
KTsKIH0KQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFBhdGg6OmNsZWFyKCkKICAgICBtX3BhdGgt
PnJlc2V0KCk7CiB9CiAKLXN0YXRpYyBGbG9hdFBvaW50KiBjb252ZXJ0UGF0aFBvaW50cyhGbG9h
dFBvaW50IGRzdFtdLCBjb25zdCBTa1BvaW50IHNyY1tdLCBpbnQgY291bnQpCitzdGF0aWMgR3Jh
cGhpY3NQb2ludCogY29udmVydFBhdGhQb2ludHMoR3JhcGhpY3NQb2ludCBkc3RbXSwgY29uc3Qg
U2tQb2ludCBzcmNbXSwgaW50IGNvdW50KQogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykgewogICAgICAgICBkc3RbaV0uc2V0WChTa1NjYWxhclRvRmxvYXQoc3JjW2ldLmZY
KSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBQYXRoOjphcHBseSh2b2lkKiBpbmZvLCBQYXRo
QXBwbGllcgogICAgIFNrUGF0aDo6SXRlciBpdGVyKCptX3BhdGgsIGZhbHNlKTsKICAgICBTa1Bv
aW50IHB0c1s0XTsKICAgICBQYXRoRWxlbWVudCBwYXRoRWxlbWVudDsKLSAgICBGbG9hdFBvaW50
IHBhdGhQb2ludHNbM107CisgICAgR3JhcGhpY3NQb2ludCBwYXRoUG9pbnRzWzNdOwogCiAgICAg
Zm9yICg7OykgewogICAgICAgICBzd2l0Y2ggKGl0ZXIubmV4dChwdHMpKSB7CkBAIC0yMjgsNyAr
MjI4LDcgQEAgdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogICAgIG1f
cGF0aC0+dHJhbnNmb3JtKHhmb3JtKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5k
aW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CitHcmFwaGljc1JlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29u
c3QKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIHNjcmF0Y2ggPSBzY3JhdGNoQ29udGV4dCgpOwog
ICAgIHNjcmF0Y2gtPnNhdmUoKTsKQEAgLTI0MSwxMiArMjQxLDEyIEBAIEZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2sKICAgICBTa1BhdGggYm91bmRpbmdQYXRoOwogICAg
IHBhaW50LmdldEZpbGxQYXRoKCpwbGF0Zm9ybVBhdGgoKSwgJmJvdW5kaW5nUGF0aCk7CiAKLSAg
ICBGbG9hdFJlY3QgciA9IGJvdW5kaW5nUGF0aC5nZXRCb3VuZHMoKTsKKyAgICBHcmFwaGljc1Jl
Y3QgciA9IGJvdW5kaW5nUGF0aC5nZXRCb3VuZHMoKTsKICAgICBzY3JhdGNoLT5yZXN0b3JlKCk7
CiAgICAgcmV0dXJuIHI7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5
bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wg
UGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQoYXBwbGllcik7CiAgICAg
R3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoID0gc2NyYXRjaENvbnRleHQoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0cnVjdCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZSB7
CiAgICAgLy8gSWYgbm9uLWVtcHR5LCB0aGUgY3VycmVudCBTdGF0ZSBpcyBjbGlwcGVkIHRvIHRo
aXMgaW1hZ2UuCiAgICAgU2tCaXRtYXAgbV9pbWFnZUJ1ZmZlckNsaXA7CiAgICAgLy8gSWYgbV9p
bWFnZUJ1ZmZlckNsaXAgaXMgbm9uLWVtcHR5LCB0aGlzIGlzIHRoZSByZWdpb24gdGhlIGltYWdl
IGlzIGNsaXBwZWQgdG8uCi0gICAgRmxvYXRSZWN0IG1fY2xpcDsKKyAgICBHcmFwaGljc1JlY3Qg
bV9jbGlwOwogCiAgICAgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgY2xpcHBpbmcgcGF0aHMgd2hpY2gg
YXJlIGN1cnJlbnRseSBhY3RpdmUsIGluIHRoZQogICAgIC8vIG9yZGVyIGluIHdoaWNoIHRoZXkg
d2VyZSBwdXNoZWQuCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpzYXZlKCkKICAgICBjYW52YXMoKS0+c2F2ZSgpOwogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCit2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCiB7CiAgICAgLy8g
U2tpYSBkb2Vzbid0IHN1cHBvcnQgY2xpcHBpbmcgdG8gYW4gaW1hZ2UsIHNvIHdlIGNyZWF0ZSBh
IGxheWVyLiBUaGUgbmV4dApAQCAtNTgwLDEzICs1ODAsMTMgQEAgYm9vbCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjppc05hdGl2ZUZvbnRSZQogI2VuZGlmCiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6Z2V0SW1hZ2VSZXNhbXBsaW5nSGludChJbnRTaXplKiBzcmNTaXplLCBGbG9hdFNpemUq
IGRzdFNpemUpIGNvbnN0Cit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmdldEltYWdlUmVzYW1w
bGluZ0hpbnQoSW50U2l6ZSogc3JjU2l6ZSwgR3JhcGhpY3NTaXplKiBkc3RTaXplKSBjb25zdAog
ewogICAgICpzcmNTaXplID0gbV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsKICAgICAqZHN0
U2l6ZSA9IG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemU7CiB9CiAKLXZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6c2V0SW1hZ2VSZXNhbXBsaW5nSGludChjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBGbG9hdFNpemUmIGRzdFNpemUpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNl
dEltYWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgR3JhcGhp
Y3NTaXplJiBkc3RTaXplKQogewogICAgIG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemUgPSBz
cmNTaXplOwogICAgIG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemUgPSBkc3RTaXplOwpAQCAt
NTk1LDcgKzU5NSw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0SW1hZ2VSZXNhbXAK
IHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xlYXJJbWFnZVJlc2FtcGxpbmdIaW50KCkKIHsK
ICAgICBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNTaXplID0gSW50U2l6ZSgpOwotICAgIG1faW1h
Z2VSZXNhbXBsaW5nSGludERzdFNpemUgPSBGbG9hdFNpemUoKTsKKyAgICBtX2ltYWdlUmVzYW1w
bGluZ0hpbnREc3RTaXplID0gR3JhcGhpY3NTaXplKCk7CiB9CiAKIGJvb2wgUGxhdGZvcm1Db250
ZXh0U2tpYTo6aGFzSW1hZ2VSZXNhbXBsaW5nSGludCgpIGNvbnN0CkBAIC02MDMsNyArNjAzLDcg
QEAgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpoYXNJbWFnZVJlc2FtcAogICAgIHJldHVybiAh
bV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZS5pc0VtcHR5KCkgJiYgIW1faW1hZ2VSZXNhbXBs
aW5nSGludERzdFNpemUuaXNFbXB0eSgpOwogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OmFwcGx5Q2xpcEZyb21JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFNrQml0bWFw
JiBpbWFnZUJ1ZmZlcikKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YXBwbHlDbGlwRnJvbUlt
YWdlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgU2tCaXRtYXAmIGltYWdlQnVmZmVy
KQogewogICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGUgaW1hZ2UgbWFzayBjb250YWlucyBv
cGFxdWUgYmxhY2sgZm9yIHRoZSBwb3J0aW9ucyB0aGF0IGFyZSB0byBiZSBzaG93biwgYXMgc3Vj
aCB3ZQogICAgIC8vIG9ubHkgbG9vayBhdCB0aGUgYWxwaGEgd2hlbiBjb21wb3NpdGluZy4gSSdt
IG5vdCAxMDAlIHN1cmUgdGhpcyBpcyB3aGF0IFdlYktpdCBleHBlY3RzIGZvciBpbWFnZSBjbGlw
cGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAvLyB8cmVjdHwu
IFRoaXMgbGF5ZXIgaXMgaW1wbGljaXRseSByZXN0b3JlZCB3aGVuIHRoZSBuZXh0IHJlc3RvcmUg
aXMKICAgICAvLyBpbnZva2VkLgogICAgIC8vIE5PVEU6IHxpbWFnZUJ1ZmZlcnwgbWF5IGJlIGRl
bGV0ZWQgYmVmb3JlIHRoZSB8cmVzdG9yZXwgaXMgaW52b2tlZC4KLSAgICB2b2lkIGJlZ2luTGF5
ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwor
ICAgIHZvaWQgYmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNv
bnN0IEltYWdlQnVmZmVyKik7CiAgICAgdm9pZCBjbGlwUGF0aEFudGlBbGlhc2VkKGNvbnN0IFNr
UGF0aCYpOwogCiAgICAgLy8gU2V0cyB1cCB0aGUgY29tbW9uIGZsYWdzIG9uIGEgcGFpbnQgZm9y
IGFudGlhbGlhc2luZywgZWZmZWN0cywgZXRjLgpAQCAtMTcyLDggKzE3Miw4IEBAIHB1YmxpYzoK
ICAgICAvLyB0ZXh0IGRyYXdpbmcgQVBJcy4KICAgICBib29sIGlzTmF0aXZlRm9udFJlbmRlcmlu
Z0FsbG93ZWQoKTsKIAotICAgIHZvaWQgZ2V0SW1hZ2VSZXNhbXBsaW5nSGludChJbnRTaXplKiBz
cmNTaXplLCBGbG9hdFNpemUqIGRzdFNpemUpIGNvbnN0OwotICAgIHZvaWQgc2V0SW1hZ2VSZXNh
bXBsaW5nSGludChjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBGbG9hdFNpemUmIGRzdFNp
emUpOworICAgIHZvaWQgZ2V0SW1hZ2VSZXNhbXBsaW5nSGludChJbnRTaXplKiBzcmNTaXplLCBH
cmFwaGljc1NpemUqIGRzdFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0SW1hZ2VSZXNhbXBsaW5n
SGludChjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBHcmFwaGljc1NpemUmIGRzdFNpemUp
OwogICAgIHZvaWQgY2xlYXJJbWFnZVJlc2FtcGxpbmdIaW50KCk7CiAgICAgYm9vbCBoYXNJbWFn
ZVJlc2FtcGxpbmdIaW50KCkgY29uc3Q7CiAKQEAgLTE4NCw3ICsxODQsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIC8vIFVzZWQgd2hlbiByZXN0b3JpbmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4g
aW1hZ2UgY2xpcC4gT25seSBzaG93cyB0aGUgcGl4ZWxzIGluCiAgICAgLy8gbV9jYW52YXMgdGhh
dCBhcmUgYWxzbyBpbiBpbWFnZUJ1ZmZlci4KLSAgICB2b2lkIGFwcGx5Q2xpcEZyb21JbWFnZShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBTa0JpdG1hcCYpOworICAgIHZvaWQgYXBwbHlDbGlwRnJv
bUltYWdlKGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFNrQml0bWFwJik7CiAgICAgdm9pZCBh
cHBseUFudGlBbGlhc2VkQ2xpcFBhdGhzKFdURjo6VmVjdG9yPFNrUGF0aD4mIHBhdGhzKTsKIAog
ICAgIC8vIGNvbW1vbiBjb2RlIGJldHdlZW4gc2V0dXBQYWludEZvcltGaWxsaW5nLFN0cm9raW5n
XQpAQCAtMjA3LDcgKzIwNyw3IEBAIHByaXZhdGU6CiAgICAgLy8gU3RvcmVzIGltYWdlIHNpemVz
IGZvciBhIGhpbnQgdG8gY29tcHV0ZSBpbWFnZSByZXNhbXBsaW5nIG1vZGVzLgogICAgIC8vIFZh
bHVlcyBhcmUgdXNlZCBpbiBJbWFnZVNraWEuY3BwCiAgICAgSW50U2l6ZSBtX2ltYWdlUmVzYW1w
bGluZ0hpbnRTcmNTaXplOwotICAgIEZsb2F0U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RT
aXplOworICAgIEdyYXBoaWNzU2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplOwogICAg
IGJvb2wgbV9wcmludGluZzsKICAgICBib29sIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7CiAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIG1fZ3B1Q29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZv
bnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBTa2lhV2lu
T3V0bGluZUNhY2hlOjpyZW1vdmVQYXRoc0ZvcgogCiBib29sIHdpbmRvd3NDYW5IYW5kbGVEcmF3
VGV4dFNoYWRvdyhHcmFwaGljc0NvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgRmxvYXRTaXplIHNo
YWRvd09mZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zmc2V0OwogICAgIGZsb2F0IHNo
YWRvd0JsdXI7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JTcGFjZSBzaGFkb3dD
b2xvclNwYWNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9T
a2lhVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvU2tpYVV0aWxzLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIENsaXBSZWN0VG9DYW52YXMoY29uc3QgU2tDYW52YXMmIGNh
CiAgICAgaW52ZXJzZVRyYW5zZm9ybS5tYXBSZWN0KGRlc3RSZWN0LCB0cmFuc2Zvcm1lZERlc3Qp
OwogfQogCi1ib29sIFNrUGF0aENvbnRhaW5zUG9pbnQoU2tQYXRoKiBvcmlnaW5hbFBhdGgsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBTa1BhdGg6OkZpbGxUeXBlIGZ0KQorYm9vbCBTa1BhdGhD
b250YWluc1BvaW50KFNrUGF0aCogb3JpZ2luYWxQYXRoLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCwgU2tQYXRoOjpGaWxsVHlwZSBmdCkKIHsKICAgICBTa1JlZ2lvbiByZ247CiAgICAgU2tS
ZWdpb24gY2xpcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
U2tpYVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Ta2lhVXRpbHMuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3
ICs3MCw3IEBAIGlubGluZSBTa1NjYWxhciBXZWJDb3JlRG91YmxlVG9Ta1NjYWxhcigKIHZvaWQg
Q2xpcFJlY3RUb0NhbnZhcyhjb25zdCBTa0NhbnZhcyYsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwg
U2tSZWN0KiBkZXN0UmVjdCk7CiAKIC8vIERldGVybWluZSBpZiBhIGdpdmVuIFdlYktpdCBwb2lu
dCBpcyBjb250YWluZWQgaW4gYSBwYXRoCi1ib29sIFNrUGF0aENvbnRhaW5zUG9pbnQoU2tQYXRo
KiwgY29uc3QgRmxvYXRQb2ludCYsIFNrUGF0aDo6RmlsbFR5cGUpOworYm9vbCBTa1BhdGhDb250
YWluc1BvaW50KFNrUGF0aCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBTa1BhdGg6OkZpbGxUeXBl
KTsKIAogLy8gUmV0dXJucyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIDF4MSBHcmFwaGljc0NvbnRl
eHQgaW50ZW5kZWQgZm9yIHRlbXBvcmFyeQogLy8gb3BlcmF0aW9ucy4gUGxlYXNlIHNhdmUoKSB0
aGUgc3RhdGUgYW5kIHJlc3RvcmUoKSBpdCB3aGVuIHlvdSdyZSBkb25lIHdpdGgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAkocmV2aXNpb24gOTEwMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWQKIAogLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCiAqLwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgaWYgKG1fcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5KQogICAgICAgICBy
ZXR1cm47CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0UmVwbAogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCi12b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiB2YWx1
ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBvc2l0aW9uKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlvbigpKQogICAg
ICAgICByZXR1cm47CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6c2V0UG9zaQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCi12b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBv
aW50M0QmIHZhbHVlKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5jaG9y
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0g
YW5jaG9yUG9pbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2gKIAogLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCiAqLwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmIHZhbHVlKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBz
aXplKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAvLyByZWltcHMgZnJvbSBHcmFwaGlj
c0xheWVyLmgKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkgeyBzZXROZWVkc0Rpc3BsYXkoKTsgfTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXllcik7
CiAgICAgdmlydHVhbCBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVy
Kj4mKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOwpAQCAtNTYs
OSArNTYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChHcmFwaGlj
c0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1hc2tMYXllcihH
cmFwaGljc0xheWVyKiBsYXllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIHApOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBG
bG9hdFBvaW50M0QmIHApOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1Bv
aW50M0QmIHApOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYg
c2l6ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVz
M0QoYm9vbCBiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCwxMyArOTQsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3du
UHRyPFRleHR1cmVNYXBwZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCA9IDApOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXIoKSB7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUgPSAwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJl
KGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBHcmFwaGljc1JlY3QmIHRhcmdldCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSA9IDApID0gMDsKIAogICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0
aGUgZm9sbG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3Vy
ZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEdy
YXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqKSA9IDA7CiAgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5D
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBj
b25zdCBHcmFwaGljc1JlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGFsbG93U3VyZmFjZUZvclJvb3QoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSA9IDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpj
b21wdXRlUGVyc3BlY3RpCiAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpIHx8IG1fc3RhdGUu
Y2hpbGRyZW5UcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
b25zdCBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChtX3NpemUud2lkdGgoKSAv
IDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOworICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQgY2VudGVy
UG9pbnQgPSBHcmFwaGljc1BvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgp
IC8gMik7CiAgICAgbV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKQogICAgICAgICAgICAgLnRyYW5zbGF0ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50
LnkoKSkKICAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKQpA
QCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVBbGxUcmFu
c2YKICAgICBjb21wdXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm1JZk5lZWRlZCgpOwogCiAgICAgbV90
cmFuc2Zvcm1zLnRhcmdldCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcGFyZW50ID8gbV9wYXJl
bnQtPm1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cyA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkp
Lm11bHRpcGx5KG1fdHJhbnNmb3Jtcy5sb2NhbCk7Ci0gICAgbV90cmFuc2Zvcm1zLnRhcmdldEJv
dW5kaW5nUmVjdCA9IEZsb2F0UmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGFyZ2V0
UmVjdCgpKSk7CisgICAgbV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCA9IEdyYXBoaWNz
UmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGFyZ2V0UmVjdCgpKSk7CiAKICAgICBt
X3N0YXRlLnZpc2libGUgPSBtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSB8fCBtX3RyYW5zZm9y
bXMudGFyZ2V0LmludmVyc2UoKS5tMzMoKSA+PSAwOwogICAgIGlmICghbV9zdGF0ZS52aXNpYmxl
KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVBbGxU
cmFuc2YKIAogICAgIC8vIFRoaXMgdHJhbnNmb3JtIGlzIG9ubHkgYXBwbGllZCBpZiB1c2luZyBh
IHR3by1wYXNzIGZvciB0aGUgcmVwbGljYSwgYmVjYXVzZSB0aGUgdHJhbnNmb3JtIG5lZWRzIHRv
IGJlIGFkanVzdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBpbnRlcm1lZGlhdGUgc3VyZmFjZSwgaW5z
dGVhZiBvZiB0aGUgc2l6ZSBvZiB0aGUgY29udGVudCBsYXllci4KICAgICBpZiAobV9wYXJlbnQg
JiYgbV9wYXJlbnQtPm1fc3RhdGUucHJlc2VydmVzM0QpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5j
ZW50ZXJaID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBQb2ludChGbG9hdFBvaW50M0QobV9zaXpl
LndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyLCAwKSkueigpOworICAgICAgICBtX3Ry
YW5zZm9ybXMuY2VudGVyWiA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoR3JhcGhpY3NQ
b2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsK
IAogICAgIGlmICghbV9jaGlsZHJlbi5zaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5NSw5
ICsxOTUsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlQm91bmRpbmdSCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFJlY3QgdGFyZ2V0UmVjdEluUm9v
dENvb3JkaW5hdGVzID0gbV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRhcmdldFJlY3QoKSk7
CisgICAgY29uc3QgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3RJblJvb3RDb29yZGluYXRlcyA9IG1f
dHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0YXJnZXRSZWN0KCkpOwogCi0gICAgY29uc3QgRmxv
YXRSZWN0IHBhcmVudEJvdW5kaW5nUmVjdCA9IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuYm91bmRp
bmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50czsKKyAgICBjb25zdCBHcmFwaGljc1JlY3QgcGFy
ZW50Qm91bmRpbmdSZWN0ID0gbV9wYXJlbnQtPm1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9t
Um9vdEZvckRlc2NlbmRhbnRzOwogICAgIGlmIChwYXJlbnRCb3VuZGluZ1JlY3Qud2lkdGgoKSA8
IDApCiAgICAgICAgIG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCA9IHRhcmdldFJl
Y3RJblJvb3RDb29yZGluYXRlczsKICAgICBlbHNlIHsKQEAgLTIxNCwxNyArMjE0LDE3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUaWxlcygpCiAgICAgICAgIG1fdGlsZXMuY2xl
YXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxl
c1RvQWRkOworICAgIFZlY3RvcjxHcmFwaGljc1JlY3Q+IHRpbGVzVG9BZGQ7CiAgICAgVmVjdG9y
PGludD4gdGlsZXNUb1JlbW92ZTsKICAgICBjb25zdCBpbnQgVGlsZUVyYXNlVGhyZXNob2xkID0g
NjsKLSAgICBGbG9hdFNpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7Ci0gICAgRmxvYXRSZWN0IGNv
bnRlbnRSZWN0KDAsIDAsIHNpemUud2lkdGgoKSAqIG1fc3RhdGUuY29udGVudFNjYWxlLCBzaXpl
LmhlaWdodCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUpOworICAgIEdyYXBoaWNzU2l6ZSBzaXpl
ID0gY29udGVudFNpemUoKTsKKyAgICBHcmFwaGljc1JlY3QgY29udGVudFJlY3QoMCwgMCwgc2l6
ZS53aWR0aCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUsIHNpemUuaGVpZ2h0KCkgKiBtX3N0YXRl
LmNvbnRlbnRTY2FsZSk7CiAKICAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgY29udGVudFJlY3Qu
aGVpZ2h0KCk7IHkgKz0gZ1RpbGVEaW1lbnNpb24pIHsKICAgICAgICAgZm9yIChmbG9hdCB4ID0g
MDsgeCA8IGNvbnRlbnRSZWN0LndpZHRoKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKLSAgICAg
ICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCh4LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1l
bnNpb24pOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0KHgsIHksIGdUaWxlRGlt
ZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7CiAgICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3Qo
Y29udGVudFJlY3QpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0SW5Sb290Q29vcmRp
bmF0ZXMgPSB0aWxlUmVjdDsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdEluUm9v
dENvb3JkaW5hdGVzID0gdGlsZVJlY3Q7CiAgICAgICAgICAgICB0aWxlUmVjdEluUm9vdENvb3Jk
aW5hdGVzLnNjYWxlKDEuMCAvIG1fc3RhdGUuY29udGVudFNjYWxlKTsKICAgICAgICAgICAgIHRp
bGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGls
ZVJlY3RJblJvb3RDb29yZGluYXRlcyk7CiAgICAgICAgICAgICBzdGF0aWMgYm9vbCBzRGlzY2Fy
ZEhpZGRlblRpbGVzID0gZmFsc2U7CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpjb21wdXRlVGlsZXMoKQogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSBtX3Rp
bGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UmVjdCBv
bGRUaWxlID0gbV90aWxlc1tpXS5yZWN0OworICAgICAgICBjb25zdCBHcmFwaGljc1JlY3Qgb2xk
VGlsZSA9IG1fdGlsZXNbaV0ucmVjdDsKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAg
ICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRkLnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7
Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QgbmV3VGlsZSA9IHRpbGVzVG9BZGRbal07Cisg
ICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QgbmV3VGlsZSA9IHRpbGVzVG9BZGRbal07CiAg
ICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdUaWxlKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0
ZVZpc2libGVSZQogewogICAgIGlmICghbmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVjdCByb290VmlzaWJsZVJlY3Q7CisgICAgR3JhcGhp
Y3NSZWN0IHJvb3RWaXNpYmxlUmVjdDsKICAgICBpZiAoIW1fcGFyZW50KQogICAgICAgICByb290
VmlzaWJsZVJlY3QgPSBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdDsKICAgICBlbHNlIGlmIChtX3Bh
cmVudCkKQEAgLTMwMCwxMiArMzAwLDEyIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRl
ckNvbnRlbnQoVGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEFkZCBkaXJlY3Rs
eSBjb21wb3NpdGVkIGltYWdlcy4KLSAgICBGbG9hdFJlY3QgZGlydHlSZWN0ID0gbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXkgPyBlbnRpcmVSZWN0KCkgOiBtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGRpcnR5UmVjdCA9IG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJyZW50Q29udGVudC5uZWVk
c0Rpc3BsYXlSZWN0OwogICAgIGRpcnR5UmVjdC5zY2FsZShtX3N0YXRlLmNvbnRlbnRTY2FsZSk7
CiAKICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCBtX3RpbGVzLnNp
emUoKTsgKyt0aWxlSW5kZXgpIHsKICAgICAgICAgVGlsZSYgdGlsZSA9IG1fdGlsZXNbdGlsZUlu
ZGV4XTsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIEdyYXBo
aWNzUmVjdCByZWN0ID0gZGlydHlSZWN0OwogICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSkKICAg
ICAgICAgICAgIHRpbGUudGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsK
ICAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+JiB0ZXh0dXJlID0gdGlsZS50ZXh0dXJlOwpA
QCAtMzIyLDggKzMyMiw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQo
VGUKICAgICAgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzID0g
Y29udGVudFJlY3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJlY3QueCgpLCAt
dGlsZS5yZWN0LnkoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBjb250ZW50UmVjdEluVGlsZUNv
b3JkaW5hdGVzID0gY29udGVudFJlY3Q7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgb2Zmc2V0KC10
aWxlLnJlY3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CiAgICAgICAgIGNvbnRlbnRSZWN0SW5UaWxl
Q29vcmRpbmF0ZXMubW92ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKIAogICAgICAgICB7CkBA
IC0zMzEsOCArMzMxLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cmVuZGVyQ29udGVudChU
ZQogICAgICAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1
cmVNYXBwZXItPmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgICAgICAgICBjb250
ZXh0LnNldFRleHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsK
LSAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fc3RhdGUuY29udGVudFNjYWxl
LCBtX3N0YXRlLmNvbnRlbnRTY2FsZSkpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZENv
bnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2NhbGUoR3JhcGhp
Y3NTaXplKG1fc3RhdGUuY29udGVudFNjYWxlLCBtX3N0YXRlLmNvbnRlbnRTY2FsZSkpOworICAg
ICAgICAgICAgR3JhcGhpY3NSZWN0IHNjYWxlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0KTsKICAg
ICAgICAgICAgIHNjYWxlZENvbnRlbnRSZWN0LnNjYWxlKDEuMCAvIG1fc3RhdGUuY29udGVudFNj
YWxlKTsKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERp
cmVjdEltYWdlQ29udGVudFR5cGUpCiAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
bV9jdXJyZW50Q29udGVudC5pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9p
bnQoMCwgMCkpOwpAQCAtMzYxLDkgKzM2MSw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBh
aW50KCkKICAgICBwYWludFJlY3Vyc2l2ZShvcHQpOwogfQogCi1GbG9hdFJlY3QgVGV4dHVyZU1h
cHBlck5vZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0CitHcmFwaGljc1JlY3QgVGV4dHVy
ZU1hcHBlck5vZGU6OnRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIEZsb2F0UmVjdCgKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KAogICAgICAgICAgICAgICAg
IHRhcmdldFJlY3QueCgpICsgKHRpbGVSZWN0LngoKSAtIHRhcmdldFJlY3QueCgpKSAvIG1fc3Rh
dGUuY29udGVudFNjYWxlLAogICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueSgpICsgKHRpbGVS
ZWN0LnkoKSAtIHRhcmdldFJlY3QueSgpKSAvIG1fc3RhdGUuY29udGVudFNjYWxlLAogICAgICAg
ICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwKQEAgLTM4
NSw3ICszODUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoY29uc3QgCiAK
ICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5pc1N1cmZhY2UgPyAxIDogb3B0aW9u
cy5vcGFjaXR5OwogCi0gICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJn
ZXRSZWN0KCk7CisgICAgY29uc3QgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJn
ZXRSZWN0KCk7CiAKICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRp
YUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENvbnRlbnQubWVkaWEpIHsKICAgICAgICAgaWYgKG1f
c3RhdGUucmVwbGljYUxheWVyICYmICFvcHRpb25zLmlzU3VyZmFjZSkKQEAgLTQwNiw3ICs0MDYs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoY29uc3QgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA/IHJlcGxpY2FNYXNrVGV4dHVy
ZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0
IEZsb2F0UmVjdCByZWN0ID0gdGFyZ2V0UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fdGls
ZXNbaV0ucmVjdCk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCByZWN0ID0gdGFyZ2V0UmVj
dEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fdGlsZXNbaV0ucmVjdCk7CiAgICAgICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnRleHR1cmUsIHJlY3QsIG1fdHJhbnNmb3Jt
cy50YXJnZXQsIG9wYWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdl
dCgpKTsKICAgICB9CiB9CkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cGFpbnRTZWxmQW5kQ2hpbAogewogICAgIGJvb2wgaGFzQ2xpcCA9IG1fc3RhdGUubWFza3NU
b0JvdW5kcyAmJiAhbV9jaGlsZHJlbi5pc0VtcHR5KCk7CiAgICAgaWYgKGhhc0NsaXApCi0gICAg
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cywgRmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobV90cmFuc2Zvcm1z
LmZvckRlc2NlbmRhbnRzLCBHcmFwaGljc1JlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSkpOwogCiAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOwogCkBAIC00NTgsNyArNDU4
LDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWZsZWN0aW9uKAogICAgIGNvbnN0
IEludFNpemUgdmlld3BvcnRTaXplID0gb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT52aWV3cG9ydFNp
emUoKTsKICAgICBjb25zdCBib29sIHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvclJlcGxpY2EgPSBt
X3N0YXRlLnJlcGxpY2FMYXllciAmJiBvcHRpb25zLm9wYWNpdHkgPCAwLjk5OwogICAgIGNvbnN0
IGJvb2wgdXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yTWFzayA9IG1hc2tUZXh0dXJlICYmIHJlcGxp
Y2FNYXNrVGV4dHVyZTsKLSAgICBjb25zdCBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0KDAsIDAsIHZp
ZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnN0IEdy
YXBoaWNzUmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSk7CiAKICAgICAvLyBUaGUgbWFzayBoYXMgdG8gYmUgYWRqdXN0ZWQg
dG8gdGFyZ2V0IGNvb3JkaW5hdGVzLgogICAgIGlmIChtYXNrVGV4dHVyZSkgewpAQCAtNTMwLDcg
KzUzMCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKFQKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmll
d3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NS
ZWN0IHZpZXdwb3J0UmVjdCgwLCAwLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXpl
LmhlaWdodCgpKTsKIAogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrU3VyZmFjZTsKIApA
QCAtNjA1LDkgKzYwNSw5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGlu
Z1MKICAgICB9CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIChTaXplQ2hhbmdlIHwgQ29udGVudHNS
ZWN0Q2hhbmdlKSkgewotICAgICAgICBGbG9hdFNpemUgd2FudGVkU2l6ZShncmFwaGljc0xheWVy
LT5zaXplKCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAg
ICAgR3JhcGhpY3NTaXplIHdhbnRlZFNpemUoZ3JhcGhpY3NMYXllci0+c2l6ZSgpLndpZHRoKCks
IGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CiAgICAgICAgIGlmICh3YW50ZWRTaXpl
LmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5
cGUpCi0gICAgICAgICAgICB3YW50ZWRTaXplID0gRmxvYXRTaXplKGdyYXBoaWNzTGF5ZXItPmNv
bnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIHdhbnRlZFNpemUgPSBHcmFwaGljc1NpemUoZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCku
aGVpZ2h0KCkpOwogCiAgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkKICAgICAgICAg
ICAgIG1fdGlsZXMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaWZuZGVm
IFRleHR1cmVNYXBwZXJOb2RlX2gKICNkZWZpbmUgVGV4dHVyZU1hcHBlck5vZGVfaAogCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUg
IkltYWdlLmgiCkBAIC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgIC8vIFRoZSBjb21wb3Np
dG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8g
ZG8gc28uCiAgICAgZW51bSBDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgRGlyZWN0SW1h
Z2VDb250ZW50VHlwZSwgQ29sb3JDb250ZW50VHlwZSwgTWVkaWFDb250ZW50VHlwZSwgQ2FudmFz
M0RDb250ZW50VHlwZX07CiAgICAgc3RydWN0IENvbnRlbnREYXRhIHsKLSAgICAgICAgRmxvYXRS
ZWN0IG5lZWRzRGlzcGxheVJlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBuZWVkc0Rpc3BsYXlS
ZWN0OwogICAgICAgICBib29sIG5lZWRzRGlzcGxheTsKICAgICAgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yOwogCkBAIC0xNTYsOCArMTU2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVC
b3VuZGluZ1JlY3RGcm9tUm9vdElmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlVGlsZXMoKTsK
ICAgICBpbnQgY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3Q7Ci0gICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3RGb3JUaWxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHRvdGFsVGFyZ2V0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3Q7Ci0gICAgdm9pZCBpbnZhbGlkYXRl
Vmlld3BvcnQoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3RG
b3JUaWxlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHRvdGFsVGFyZ2V0UmVjdCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiB0aWxlUmVjdCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlVmlld3BvcnQo
Y29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hhbmdlTWFzayk7
CiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpOwogCkBA
IC0xODcsMzEgKzE4NywzMSBAQCBwcml2YXRlOgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBsb2NhbDsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYmFzZTsKICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmU7Ci0gICAgICAgIEZsb2F0UmVjdCB0YXJnZXRC
b3VuZGluZ1JlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCB0YXJnZXRCb3VuZGluZ1JlY3Q7CiAg
ICAgICAgIGZsb2F0IGNlbnRlclo7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9t
Um9vdDsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFu
dHM7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdDsKKyAgICAgICAg
R3JhcGhpY3NSZWN0IGJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHM7CiAgICAgICAg
IFRyYW5zZm9ybURhdGEoKSB7IH0KICAgICB9OwogCiAgICAgVHJhbnNmb3JtRGF0YSBtX3RyYW5z
Zm9ybXM7CiAKLSAgICBpbmxpbmUgRmxvYXRSZWN0IHRhcmdldFJlY3QoKSBjb25zdAorICAgIGlu
bGluZSBHcmFwaGljc1JlY3QgdGFyZ2V0UmVjdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgPyBlbnRp
cmVSZWN0KCkgOiBtX3N0YXRlLmNvbnRlbnRzUmVjdDsKICAgICB9CiAKLSAgICBpbmxpbmUgRmxv
YXRSZWN0IGVudGlyZVJlY3QoKSBjb25zdAorICAgIGlubGluZSBHcmFwaGljc1JlY3QgZW50aXJl
UmVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIEZs
b2F0U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0CisgICAgR3JhcGhpY3NTaXplIGNvbnRlbnRTaXpl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRU
eXBlID09IERpcmVjdEltYWdlQ29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5pbWFnZSA/
IG1fY3VycmVudENvbnRlbnQuaW1hZ2UtPnNpemUoKSA6IG1fc2l6ZTsKICAgICB9CiAgICAgc3Ry
dWN0IFRpbGUgewotICAgICAgICBGbG9hdFJlY3QgcmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IHJlY3Q7CiAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOwogICAgICAgICBi
b29sIG5lZWRzUmVzZXQ7CiAgICAgfTsKQEAgLTIyMywxOCArMjIzLDE4IEBAIHByaXZhdGU6CiAg
ICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogbV9wYXJlbnQ7CiAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZmZWN0VGFyZ2V0
OwotICAgIEZsb2F0U2l6ZSBtX3NpemU7CisgICAgR3JhcGhpY3NTaXplIG1fc2l6ZTsKICAgICBm
bG9hdCBtX29wYWNpdHk7CiAgICAgU3RyaW5nIG1fbmFtZTsKIAogICAgIHN0cnVjdCBTdGF0ZSB7
Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9zOwotICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9p
bnQ7Ci0gICAgICAgIEZsb2F0U2l6ZSBzaXplOworICAgICAgICBHcmFwaGljc1BvaW50IHBvczsK
KyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50OworICAgICAgICBHcmFwaGljc1Np
emUgc2l6ZTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICAgICAgZmxvYXQg
b3BhY2l0eTsKLSAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IGNvbnRlbnRzUmVjdDsKICAgICAgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7
CiAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtYXNrTGF5ZXI7CiAgICAgICAgIFRleHR1cmVN
YXBwZXJOb2RlKiByZXBsaWNhTGF5ZXI7CkBAIC0yNDcsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgYm9vbCBuZWVkc1Jlc2V0OiAxOwogICAgICAgICBib29sIG1pZ2h0SGF2ZU92ZXJsYXBz
IDogMTsKICAgICAgICAgYm9vbCBuZWVkc1JlcGFpbnQ7Ci0gICAgICAgIEZsb2F0UmVjdCB2aXNp
YmxlUmVjdDsKLSAgICAgICAgRmxvYXRSZWN0IHJvb3RWaXNpYmxlUmVjdDsKKyAgICAgICAgR3Jh
cGhpY3NSZWN0IHZpc2libGVSZWN0OworICAgICAgICBHcmFwaGljc1JlY3Qgcm9vdFZpc2libGVS
ZWN0OwogICAgICAgICBmbG9hdCBjb250ZW50U2NhbGU7CiAKICAgICAgICAgU3RhdGUoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5k
ZWYgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogI2RlZmluZSBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllcl9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zMCw3ICszMCw3IEBAIGNsYXNzIEJpdG1hcFRleHR1cmU7CiAKIGNsYXNz
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0gMCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyKiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1vZGVsVmlld01hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGZsb2F0IG9wYWNpdHkg
PSAxLjAsIEJpdG1hcFRleHR1cmUqIG1hc2sgPSAwKSBjb25zdCA9IDA7CiB9OwogCiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0yNzAsNyArMjcwLDcgQEAgQWZmaW5lVHJhbnNm
b3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNrZXdZKAogICAgIHJldHVybiBzaGVhcigwLCB0YW4oZGVn
MnJhZChhbmdsZSkpKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMo
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCkKK0FmZmluZVRy
YW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEdyYXBoaWNzUmVjdCYgc291cmNlLCBj
b25zdCBHcmFwaGljc1JlY3QmIGRlc3QpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGRlc3QueCgpIC0gc291cmNlLngoKSwgZGVzdC55
KCkgLSBzb3VyY2UueSgpKTsKQEAgLTI5Myw0NCArMjkzLDQ0IEBAIEludFBvaW50IEFmZmluZVRy
YW5zZm9ybTo6bWFwUG9pbnQoY29uc3QKICAgICByZXR1cm4gSW50UG9pbnQobHJvdW5kKHgyKSwg
bHJvdW5kKHkyKSk7CiB9CiAKLUZsb2F0UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgQWZmaW5lVHJhbnNm
b3JtOjptYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBk
b3VibGUgeDIsIHkyOwogICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwgeDIsIHkyKTsKIAot
ICAgIHJldHVybiBGbG9hdFBvaW50KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeDIpLCBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHkyKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobmFycm93UHJl
Y2lzaW9uVG9HcmFwaGljc1VuaXQoeDIpLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh5
MikpOwogfQogCiBJbnRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBJbnRSZWN0
ICZyZWN0KSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoRmxv
YXRSZWN0KHJlY3QpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdChHcmFw
aGljc1JlY3QocmVjdCkpKTsKIH0KIAotRmxvYXRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CitHcmFwaGljc1JlY3QgQWZmaW5lVHJhbnNm
b3JtOjptYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAo
aXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAgICBGbG9hdFJlY3QgbWFwcGVkUmVj
dChyZWN0KTsKLSAgICAgICAgbWFwcGVkUmVjdC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
bV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzVdKSk7
CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0KHJlY3QpOworICAgICAgICBtYXBwZWRS
ZWN0Lm1vdmUobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFuc2Zvcm1bNF0pLCBu
YXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChtX3RyYW5zZm9ybVs1XSkpOwogICAgICAgICBy
ZXR1cm4gbWFwcGVkUmVjdDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVzdWx0OworICAgIEdy
YXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50KHJlY3QubG9jYXRp
b24oKSkpOwotICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChGbG9hdFBvaW50KHJlY3QubWF4WCgp
LCByZWN0LnkoKSkpKTsKLSAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0
Lm1heFgoKSwgcmVjdC5tYXhZKCkpKSk7Ci0gICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KEZsb2F0
UG9pbnQocmVjdC54KCksIHJlY3QubWF4WSgpKSkpOworICAgIHJlc3VsdC5zZXRQMihtYXBQb2lu
dChHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSkpKTsKKyAgICByZXN1bHQuc2V0
UDMobWFwUG9pbnQoR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkpKSk7Cisg
ICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KEdyYXBoaWNzUG9pbnQocmVjdC54KCksIHJlY3QubWF4
WSgpKSkpOwogICAgIHJldHVybiByZXN1bHQuYm91bmRpbmdCb3goKTsKIH0KIAotRmxvYXRRdWFk
IEFmZmluZVRyYW5zZm9ybTo6bWFwUXVhZChjb25zdCBGbG9hdFF1YWQmIHEpIGNvbnN0CitHcmFw
aGljc1F1YWQgQWZmaW5lVHJhbnNmb3JtOjptYXBRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgcSkg
Y29uc3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAgICBG
bG9hdFF1YWQgbWFwcGVkUXVhZChxKTsKLSAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1f
dHJhbnNmb3JtWzVdKSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCBtYXBwZWRRdWFkKHEpOworICAg
ICAgICBtYXBwZWRRdWFkLm1vdmUobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFu
c2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChtX3RyYW5zZm9ybVs1XSkp
OwogICAgICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVz
dWx0OworICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50
KHEucDEoKSkpOwogICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKICAgICByZXN1
bHQuc2V0UDMobWFwUG9pbnQocS5wMygpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3Jt
LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBG
bG9hdFF1YWQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3Mg
R3JhcGhpY3NRdWFkOworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFz
cyBJbnRSZWN0OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CkBAIC03MCwxNCArNzAsMTQg
QEAgcHVibGljOgogICAgIC8vIFJvdW5kcyB0aGUgbWFwcGVkIHBvaW50IHRvIHRoZSBuZWFyZXN0
IGludGVnZXIgdmFsdWUuCiAgICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKIAotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OworICAgIEdyYXBoaWNzUG9pbnQgbWFwUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0
OwogCiAgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRo
aXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBt
YXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgogICAgIEludFJlY3Qg
bWFwUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgbWFwUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBGbG9h
dFF1YWQmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgbWFwUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmKSBjb25zdDsKKyAgICBHcmFwaGljc1F1YWQgbWFwUXVhZChjb25zdCBHcmFwaGljc1F1YWQm
KSBjb25zdDsKIAogICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0OwogCkBAIC0xOTEsNyArMTkx
LDcgQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiB9OwogCi1BZmZpbmVU
cmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0KTsKK0FmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3Rz
KGNvbnN0IEdyYXBoaWNzUmVjdCYgc291cmNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QpOwog
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5
IEBACiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBA
IC01MjgsNyArNTI4LDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0
cgogICAgIHJldHVybiBzY2FsZU5vblVuaWZvcm0oMS4wZiwgLTEuMGYpOwogfQogCi1GbG9hdFBv
aW50IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2lu
dChjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIC8vIFRoaXMgaXMgYmFzaWNh
bGx5IHJheXRyYWNpbmcuIFdlIGhhdmUgYSBwb2ludCBpbiB0aGUgZGVzdGluYXRpb24KICAgICAv
LyBwbGFuZSB3aXRoIHo9MCwgYW5kIHdlIGNhc3QgYSByYXkgcGFyYWxsZWwgdG8gdGhlIHotYXhp
cyBmcm9tIHRoYXQKQEAgLTU1NiwxMiArNTU2LDEyIEBAIEZsb2F0UG9pbnQgVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnByb2plY3QKICAgICAgICAgb3V0WSAvPSB3OwogICAgIH0KIAotICAgIHJldHVy
biBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0PihvdXRYKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG91dFkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChzdGF0aWNfY2FzdDxHcmFwaGljc1Vu
aXQ+KG91dFgpLCBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG91dFkpKTsKIH0KIAotRmxvYXRR
dWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UXVhZChjb25zdCBGbG9hdFF1YWQmIHEp
IGNvbnN0CitHcmFwaGljc1F1YWQgVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RRdWFkKGNv
bnN0IEdyYXBoaWNzUXVhZCYgcSkgY29uc3QKIHsKLSAgICBGbG9hdFF1YWQgcHJvamVjdGVkUXVh
ZDsKKyAgICBHcmFwaGljc1F1YWQgcHJvamVjdGVkUXVhZDsKICAgICBwcm9qZWN0ZWRRdWFkLnNl
dFAxKHByb2plY3RQb2ludChxLnAxKCkpKTsKICAgICBwcm9qZWN0ZWRRdWFkLnNldFAyKHByb2pl
Y3RQb2ludChxLnAyKCkpKTsKICAgICBwcm9qZWN0ZWRRdWFkLnNldFAzKHByb2plY3RQb2ludChx
LnAzKCkpKTsKQEAgLTU2OSw1NCArNTY5LDU0IEBAIEZsb2F0UXVhZCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cHJvamVjdFEKICAgICByZXR1cm4gcHJvamVjdGVkUXVhZDsKIH0KIAotRmxvYXRQb2lu
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29u
c3QKK0dyYXBoaWNzUG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHApIGNvbnN0CiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KHAueCgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fbWF0cml4WzNdWzBdKSwgcC55KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11b
MV0pKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQocC54KCkgKyBzdGF0aWNfY2FzdDxH
cmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzBdKSwgcC55KCkgKyBzdGF0aWNfY2FzdDxHcmFwaGlj
c1VuaXQ+KG1fbWF0cml4WzNdWzFdKSk7CiAKICAgICBkb3VibGUgeCwgeTsKICAgICBtdWx0VmVj
TWF0cml4KHAueCgpLCBwLnkoKSwgeCwgeSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOworICAgIHJldHVybiBHcmFw
aGljc1BvaW50KHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4oeCksIHN0YXRpY19jYXN0PEdyYXBo
aWNzVW5pdD4oeSkpOwogfQogCi1GbG9hdFBvaW50M0QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1h
cFBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKSBjb25z
dAogewogICAgIGlmIChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKQotICAgICAgICByZXR1cm4g
RmxvYXRQb2ludDNEKHAueCgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzBdKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkoKSArIHN0YXRpY19jYXN0PGZsb2F0Piht
X21hdHJpeFszXVsxXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC56KCkgKyBzdGF0
aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMl0pKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
UG9pbnQzRChwLngoKSArIHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMF0p
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueSgpICsgc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NVbml0PihtX21hdHJpeFszXVsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC56
KCkgKyBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzJdKSk7CiAKICAgICBk
b3VibGUgeCwgeSwgejsKICAgICBtdWx0VmVjTWF0cml4KHAueCgpLCBwLnkoKSwgcC56KCksIHgs
IHksIHopOwotICAgIHJldHVybiBGbG9hdFBvaW50M0Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oeSksIHN0YXRpY19jYXN0PGZsb2F0Pih6KSk7CisgICAgcmV0dXJu
IEdyYXBoaWNzUG9pbnQzRChzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHgpLCBzdGF0aWNfY2Fz
dDxHcmFwaGljc1VuaXQ+KHkpLCBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHopKTsKIH0KIAog
SW50UmVjdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0
KSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoRmxvYXRSZWN0
KHJlY3QpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdChHcmFwaGljc1Jl
Y3QocmVjdCkpKTsKIH0KIAotRmxvYXRSZWN0IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKK0dyYXBoaWNzUmVjdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bWFwUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpIGNvbnN0CiB7CiAgICAgaWYgKGlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IG1hcHBlZFJlY3Qo
cik7Ci0gICAgICAgIG1hcHBlZFJlY3QubW92ZShzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhb
M11bMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pKTsKKyAgICAgICAgR3Jh
cGhpY3NSZWN0IG1hcHBlZFJlY3Qocik7CisgICAgICAgIG1hcHBlZFJlY3QubW92ZShzdGF0aWNf
Y2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NV
bml0PihtX21hdHJpeFszXVsxXSkpOwogICAgICAgICByZXR1cm4gbWFwcGVkUmVjdDsKICAgICB9
CiAKLSAgICBGbG9hdFF1YWQgcmVzdWx0UXVhZCA9IG1hcFF1YWQoRmxvYXRRdWFkKHIpKTsKKyAg
ICBHcmFwaGljc1F1YWQgcmVzdWx0UXVhZCA9IG1hcFF1YWQoR3JhcGhpY3NRdWFkKHIpKTsKICAg
ICByZXR1cm4gcmVzdWx0UXVhZC5ib3VuZGluZ0JveCgpOwogfQogCi1GbG9hdFF1YWQgVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxKSBjb25zdAorR3JhcGhp
Y3NRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYg
cSkgY29uc3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewotICAgICAg
ICBGbG9hdFF1YWQgbWFwcGVkUXVhZChxKTsKLSAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKHN0YXRp
Y19jYXN0PGZsb2F0PihtX21hdHJpeFszXVswXSksIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJp
eFszXVsxXSkpOworICAgICAgICBHcmFwaGljc1F1YWQgbWFwcGVkUXVhZChxKTsKKyAgICAgICAg
bWFwcGVkUXVhZC5tb3ZlKHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMF0p
LCBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1fbWF0cml4WzNdWzFdKSk7CiAgICAgICAgIHJl
dHVybiBtYXBwZWRRdWFkOwogICAgIH0KIAotICAgIEZsb2F0UXVhZCByZXN1bHQ7CisgICAgR3Jh
cGhpY3NRdWFkIHJlc3VsdDsKICAgICByZXN1bHQuc2V0UDEobWFwUG9pbnQocS5wMSgpKSk7CiAg
ICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KHEucDIoKSkpOwogICAgIHJlc3VsdC5zZXRQMyhtYXBQ
b2ludChxLnAzKCkpKTsKQEAgLTg3OSw3ICs4NzksNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
VHJhbnNmb3JtYXRpb25NYXRyCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1UcmFuc2Zvcm1hdGlv
bk1hdHJpeCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChjb25zdCBGbG9hdFJlY3Qm
IGZyb20sIGNvbnN0IEZsb2F0UmVjdCYgdG8pCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIGZyb20sIGNvbnN0
IEdyYXBoaWNzUmVjdCYgdG8pCiB7CiAgICAgQVNTRVJUKCFmcm9tLmlzRW1wdHkoKSk7CiAgICAg
cmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KHRvLndpZHRoKCkgLyBmcm9tLndpZHRoKCksCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bWF0aW9uTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3Jt
YXRpb25NYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeF9oCiAjZGVmaW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4X2gKIAot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5j
bHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4gLy9mb3IgbWVtY3B5CiAjaW5j
bHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KQEAgLTYwLDkgKzYwLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBJbnRSZWN0OwotY2xhc3Mg
RmxvYXRQb2ludDNEOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRRdWFkOworY2xhc3Mg
R3JhcGhpY3NQb2ludDNEOworY2xhc3MgR3JhcGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NRdWFk
OwogCiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CkBAIC0xMjMsMjEgKzEyMywyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXAoZG91Ymxl
IHgsIGRvdWJsZSB5LCBkb3VibGUmIHgyLCBkb3VibGUmIHkyKSBjb25zdCB7IG11bHRWZWNNYXRy
aXgoeCwgeSwgeDIsIHkyKTsgfQogCiAgICAgLy8gTWFwIGEgM0QgcG9pbnQgdGhyb3VnaCB0aGUg
dHJhbnNmb3JtLCByZXR1cm5pbmcgYSAzRCBwb2ludC4KLSAgICBGbG9hdFBvaW50M0QgbWFwUG9p
bnQoY29uc3QgRmxvYXRQb2ludDNEJikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludDNEIG1hcFBv
aW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpIGNvbnN0OwogCiAgICAgLy8gTWFwIGEgMkQgcG9p
bnQgdGhyb3VnaCB0aGUgdHJhbnNmb3JtLCByZXR1cm5pbmcgYSAyRCBwb2ludC4KICAgICAvLyBO
b3RlIHRoYXQgdGhpcyBpZ25vcmVzIHRoZSB6IGNvbXBvbmVudCwgZWZmZWN0aXZlbHkgcHJvamVj
dGluZyB0aGUgcG9pbnQgaW50byB0aGUgej0wIHBsYW5lLgotICAgIEZsb2F0UG9pbnQgbWFwUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgbWFwUG9pbnQo
Y29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gTGlrZSB0aGUgdmVyc2lvbiBh
Ym92ZSwgZXhjZXB0IHRoYXQgaXQgcm91bmRzIHRoZSBtYXBwZWQgcG9pbnQgdG8gdGhlIG5lYXJl
c3QgaW50ZWdlciB2YWx1ZS4KICAgICBJbnRQb2ludCBtYXBQb2ludChjb25zdCBJbnRQb2ludCYg
cCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQobWFwUG9pbnQo
RmxvYXRQb2ludChwKSkpOworICAgICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KG1hcFBvaW50
KEdyYXBoaWNzUG9pbnQocCkpKTsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgbWF0cml4IGhhcyAz
RCBjb21wb25lbnRzLCB0aGUgeiBjb21wb25lbnQgb2YgdGhlIHJlc3VsdCBpcwogICAgIC8vIGRy
b3BwZWQsIGVmZmVjdGl2ZWx5IHByb2plY3RpbmcgdGhlIHJlY3QgaW50byB0aGUgej0wIHBsYW5l
Ci0gICAgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgR3Jh
cGhpY3NSZWN0IG1hcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CiAKICAgICAvLyBS
b3VuZHMgdGhlIHJlc3VsdGluZyBtYXBwZWQgcmVjdGFuZ2xlIG91dC4gVGhpcyBpcyBoZWxwZnVs
IGZvciBib3VuZGluZwogICAgIC8vIGJveCBjb21wdXRhdGlvbnMgYnV0IG1heSBub3QgYmUgd2hh
dCBpcyB3YW50ZWQgaW4gb3RoZXIgY29udGV4dHMuCkBAIC0xNDUsMTYgKzE0NSwxNiBAQCBwdWJs
aWM6CiAKICAgICAvLyBJZiB0aGUgbWF0cml4IGhhcyAzRCBjb21wb25lbnRzLCB0aGUgeiBjb21w
b25lbnQgb2YgdGhlIHJlc3VsdCBpcwogICAgIC8vIGRyb3BwZWQsIGVmZmVjdGl2ZWx5IHByb2pl
Y3RpbmcgdGhlIHF1YWQgaW50byB0aGUgej0wIHBsYW5lCi0gICAgRmxvYXRRdWFkIG1hcFF1YWQo
Y29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcFF1YWQoY29uc3Qg
R3JhcGhpY3NRdWFkJikgY29uc3Q7CiAKICAgICAvLyBNYXAgYSBwb2ludCBvbiB0aGUgej0wIHBs
YW5lIGludG8gYSBwb2ludCBvbgogICAgIC8vIHRoZSBwbGFuZSB3aXRoIHdpdGggdGhlIHRyYW5z
Zm9ybSBhcHBsaWVkLCBieSBleHRlbmRpbmcKICAgICAvLyBhIHJheSBwZXJwZW5kaWN1bGFyIHRv
IHRoZSBzb3VyY2UgcGxhbmUgYW5kIGNvbXB1dGluZwogICAgIC8vIHRoZSBsb2NhbCB4LHkgcG9z
aXRpb24gb2YgdGhlIHBvaW50IHdoZXJlIHRoYXQgcmF5IGludGVyc2VjdHMKICAgICAvLyB3aXRo
IHRoZSBkZXN0aW5hdGlvbiBwbGFuZS4KLSAgICBGbG9hdFBvaW50IHByb2plY3RQb2ludChjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBwcm9qZWN0UG9pbnQoY29u
c3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAgIC8vIFByb2plY3RzIHRoZSBmb3VyIGNvcm5l
cnMgb2YgdGhlIHF1YWQKLSAgICBGbG9hdFF1YWQgcHJvamVjdFF1YWQoY29uc3QgRmxvYXRRdWFk
JikgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIHByb2plY3RRdWFkKGNvbnN0IEdyYXBoaWNzUXVh
ZCYpIGNvbnN0OwogCiAgICAgZG91YmxlIG0xMSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4WzBd
WzBdOyB9CiAgICAgdm9pZCBzZXRNMTEoZG91YmxlIGYpIHsgbV9tYXRyaXhbMF1bMF0gPSBmOyB9
CkBAIC0yMzksNyArMjM5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGVyc3BlY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeFsyXVszXSAhPSAwLjBmOyB9CiAKICAgICAvLyByZXR1cm5z
IGEgdHJhbnNmb3JtYXRpb24gdGhhdCBtYXBzIGEgcmVjdCB0byBhIHJlY3QKLSAgICBzdGF0aWMg
VHJhbnNmb3JtYXRpb25NYXRyaXggcmVjdFRvUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVjdFRvUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgIGJvb2wgaXNJ
bnZlcnRpYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIENHUGF0aFJlZiBjcmVhdGVQYXRoRm9yR2x5
cGgoSERDIAogfQogCiBzdGF0aWMgdm9pZCBkcmF3R0RJR2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgICAgICAgICAgICAgICAg
ICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQog
ewogICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CiAK
QEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R0RJR2x5cGhzKEdyYXBoaWNzQ29u
dGV4CiAKICAgICAgICAgZHJhd0ludG9CaXRtYXAgPSBmaWxsQ29sb3IuYWxwaGEoKSAhPSAyNTUg
fHwgZ3JhcGhpY3NDb250ZXh0LT5pblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgICAgIGlmICgh
ZHJhd0ludG9CaXRtYXApIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7CisgICAgICAg
ICAgICBHcmFwaGljc1NpemUgb2Zmc2V0OwogICAgICAgICAgICAgZmxvYXQgYmx1cjsKICAgICAg
ICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNw
YWNlOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHRElHbHlwaHMoR3JhcGhp
Y3NDb250ZXgKICAgICBTZXRUZXh0QWxpZ24oaGRjLCBUQV9MRUZUIHwgVEFfQkFTRUxJTkUpOwog
CiAgICAgLy8gVW5pc2NyaWJlIGdpdmVzIHVzIG9mZnNldHMgdG8gaGVscCByZWZpbmUgdGhlIHBv
c2l0aW9uaW5nIG9mIGNvbWJpbmluZyBnbHlwaHMuCi0gICAgRmxvYXRTaXplIHRyYW5zbGF0aW9u
ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQoZnJvbSk7CisgICAgR3JhcGhpY3NTaXplIHRyYW5zbGF0
aW9uID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQoZnJvbSk7CiAgICAgaWYgKHRyYW5zbGF0aW9uLndp
ZHRoKCkgfHwgdHJhbnNsYXRpb24uaGVpZ2h0KCkpIHsKICAgICAgICAgWEZPUk0geGZvcm07CiAg
ICAgICAgIHhmb3JtLmVNMTEgPSAxLjA7CkBAIC0yOTgsNyArMjk4LDcgQEAgc3RhdGljIHZvaWQg
ZHJhd0dESUdseXBocyhHcmFwaGljc0NvbnRleAogfQogCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIAotICAgICAgICAgICAgICAgICAg
ICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29u
c3QKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgYm9vbCBzaG91bGRV
c2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhpbmcoKTsKQEAgLTM1
MCwxMiArMzUwLDEyIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcK
ICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgbWF0cml4KTsKIAogICAgIC8v
IFVuaXNjcmliZSBnaXZlcyB1cyBvZmZzZXRzIHRvIGhlbHAgcmVmaW5lIHRoZSBwb3NpdGlvbmlu
ZyBvZiBjb21iaW5pbmcgZ2x5cGhzLgotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbiA9IGdseXBo
QnVmZmVyLm9mZnNldEF0KGZyb20pOworICAgIEdyYXBoaWNzU2l6ZSB0cmFuc2xhdGlvbiA9IGds
eXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOwogCiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dD
b250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKICAgICB3a1NldENHQ29udGV4dEZvbnRSZW5k
ZXJpbmdTdHlsZShjZ0NvbnRleHQsIGZvbnQtPmlzU3lzdGVtRm9udCgpLCBmYWxzZSwgZm9udC0+
cGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsK
KyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zmc2V0OwogICAgIGZsb2F0IHNoYWRvd0JsdXI7CiAg
ICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBG
b250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaCwKK0dyYXBoaWNzUmVjdCBG
b250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgVW5pc2Ny
aWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwpAQCAtNjMsMTAgKzYzLDEwIEBAIEZsb2F0UmVj
dCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFQKICAgICBpZiAocnVuLnJ0bCgpKSB7CiAg
ICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKICAgICAgICAgZmxvYXQgdG90YWxXaWR0
aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54
KCkgKyBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZih0
b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRo
KSwgaCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsgZmxvb3JmKHRv
dGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYodG90YWxXaWR0aCAtIGJl
Zm9yZVdpZHRoKSAtIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOwogICAgIH0g
CiAgICAgCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9vcmYoYmVmb3JlV2lk
dGgpLCBwb2ludC55KCksIHJvdW5kZihhZnRlcldpZHRoKSAtIGZsb29yZihiZWZvcmVXaWR0aCks
IGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsgZmxvb3JmKGJlZm9yZVdp
ZHRoKSwgcG9pbnQueSgpLCByb3VuZGYoYWZ0ZXJXaWR0aCkgLSBmbG9vcmYoYmVmb3JlV2lkdGgp
LCBoKTsKIH0KIAogZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdApAQCAt
OTQsNyArOTQsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAg
ICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQogCi12b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsCit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZv
bnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KQEAgLTEwNywxMSArMTA3LDExIEBAIHZvaWQgRm9udDo6
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RHJhdyB0aGUgZ2x5cGggYnVmZmVyIG5vdyBhdCB0aGUgc3RhcnRpbmcgcG9pbnQgcmV0dXJuZWQg
aW4gc3RhcnRYLgotICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7
CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKICAgICBk
cmF3R2x5cGhCdWZmZXIoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CiB9
CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3Zv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZQogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwg
Z2x5cGhCdWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2Us
IHBvaW50LnkoKSkpOworICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhC
dWZmZXIsIG1hcmssIEdyYXBoaWNzUG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBv
aW50LnkoKSkpOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNr
Rm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBjb25zdCBDb2xvciYgZ3JhbW1hclBhdHRlcm5D
b2xvcigKICAgICByZXR1cm4gZ3JhbW1hckNvbG9yOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGZs
b2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cmVzCiAgICAgUmVzdG9y
ZURDKG1faGRjLCAtMSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBHcmFwaGljc1JlY3QmIGNsaXBSZWN0KQogewogICAg
IGlmICghbV9oZGMpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzY2Fs
ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgaWYgKCFtX2hkYykKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzTGF5ZXJDQUNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q0FDRi5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0yMDMsMTMgKzIw
MywxMyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpyZW1vdmVGcm9tUGFyZW50CiAgICAgbGF5
ZXJGb3JTdXBlcmxheWVyKCktPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7ICAgICAgICAgICAgCiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQordm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0UG9zaXRpb24oY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocG9pbnQp
OwogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0FD
Rjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3ZvaWQgR3JhcGhp
Y3NMYXllckNBQ0Y6OnNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcG9pbnQp
CiB7CiAgICAgaWYgKHBvaW50ID09IG1fYW5jaG9yUG9pbnQpCiAgICAgICAgIHJldHVybjsKQEAg
LTIxOCw3ICsyMTgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpzZXRBbmNob3JQb2ludChj
CiAgICAgdXBkYXRlQW5jaG9yUG9pbnQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6
c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpz
ZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA9PSBtX3Np
emUpCiAgICAgICAgIHJldHVybjsKQEAgLTMyNyw3ICszMjcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQUNGOjpzZXROZWVkc0Rpc3BsYXkoCiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoZHJhd3ND
b250ZW50KCkpIHsKICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJlY3Q7CkBAIC00MTUsNyArNDE1
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0RGVidWdCb3JkZXIoYwogICAgIH0KIH0K
IAotYm9vbCBHcmFwaGljc0xheWVyQ0FDRjo6cmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkgY29uc3QKK2Jvb2wgR3JhcGhpY3NMYXllckNBQ0Y6OnJlcXVpcmVzVGlsZWRM
YXllcihjb25zdCBHcmFwaGljc1NpemUmIHNpemUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2RyYXdz
Q29udGVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDcgKzU0NCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllckNBQ0Y6OnVwZGF0ZUxheWVyU2l6ZSgKIAogdm9pZCBHcmFwaGljc0xheWVy
Q0FDRjo6dXBkYXRlQW5jaG9yUG9pbnQoKQogewotICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNo
b3JQb2ludChGbG9hdFBvaW50KG1fYW5jaG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50LnkoKSkp
OworICAgIHByaW1hcnlMYXllcigpLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50KG1fYW5j
aG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50LnkoKSkpOwogICAgIHByaW1hcnlMYXllcigpLT5z
ZXRBbmNob3JQb2ludFoobV9hbmNob3JQb2ludC56KCkpOwogICAgIHVwZGF0ZUxheWVyUG9zaXRp
b24oKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyQ0FDRi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw5ICs1Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVGcm9tUGFyZW50KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgaW5Qb2ludCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNv
bnN0IEZsb2F0UG9pbnQzRCYgaW5Qb2ludCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29u
c3QgRmxvYXRTaXplJiBpblNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBHcmFwaGljc1BvaW50JiBpblBvaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9p
bnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBpblBvaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIGluU2l6ZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOwog
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwogCkBAIC05Myw3ICs5Myw3
IEBAIHByaXZhdGU6CiAgICAgV0tDQUNGTGF5ZXIqIGhvc3RMYXllckZvclN1YmxheWVycygpIGNv
bnN0OwogICAgIFdLQ0FDRkxheWVyKiBsYXllckZvclN1cGVybGF5ZXIoKSBjb25zdDsKIAotICAg
IGJvb2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIGJv
b2wgcmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIGNvbnN0OwogICAgIHZv
aWQgc3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIpOwogCiAgICAgQ29t
cG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGRlZmF1bHRDb250ZW50c09yaWVudGF0aW9u
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ0dXaW4uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzYsOSArNzYsOSBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAK
ICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CiAgICAgaWYgKHNp
emUpCi0gICAgICAgIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgw
LjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpz
aXplKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGRyYXdG
cmFtZU1hdGNoaW5nU291cmNlU2l6ZSgmZ2MsIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBibXBJ
bmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAgICAgZWxzZQotICAgICAgICBkcmF3KCZnYywg
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCks
IEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdo
dCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGRyYXco
JmdjLCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJt
SGVpZ2h0KSwgR3JhcGhpY3NSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFn
ZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKIAog
ICAgIC8vIERvIGNsZWFudXAKICAgICBDR0NvbnRleHRSZWxlYXNlKGNnQ29udGV4dCk7CkBAIC04
Niw3ICs4Niw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVN
YXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBzaXplX3QgZnJh
bWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyAr
K2kpIHsKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyYwogICAgICAgICBpZiAoQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09
IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS53aWR0aCgpKSkgewogICAgICAgICAgICAgc2l6
ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAgICAgICAgICAgbV9jdXJyZW50
RnJhbWUgPSBpOwotICAgICAgICAgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNw
YWNlLCBjb21wb3NpdGVPcCk7CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEdyYXBo
aWNzUmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBz
dHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1l
ID0gY3VycmVudEZyYW1lOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDIs
NyArMTAyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogCiAg
ICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRv
IGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJhbWUKICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1h
cEltYWdlOjpzaXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwg
MC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JT
cGFjZSwgY29tcG9zaXRlT3ApOworICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgR3JhcGhpY3NSZWN0
KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHls
ZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUNhaXJvV2luLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDkgKzgyLDkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQogCiAg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXpl
KQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMC4w
ZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6
ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3RnJh
bWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwgYm1wSW5m
by5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAgICAgZHJhdygmZ2MsIEZs
b2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBG
bG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQo
KSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICBkcmF3KCZn
YywgR3JhcGhpY3NSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhl
aWdodCksIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VT
aXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7CiAKICAg
ICAvLyBEbyBjbGVhbnVwCiAgICAgY2Fpcm9fZGVzdHJveSh0YXJnZXRSZWYpOwpAQCAtOTIsNyAr
OTIsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmNl
U2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hp
bmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBk
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgc2l6ZV90IGZyYW1lcyA9
IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7
CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyYwogICAgICAgICBpZiAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlKSA9
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUuaGVpZ2h0KCkpICYmIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUud2lk
dGgoKSkpIHsKICAgICAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFt
ZTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4
dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6
ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAg
ICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgR3JhcGhpY3NSZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUu
d2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbXBvc2l0
ZU9wKTsKICAgICAgICAgICAgIG1fY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogCiAgICAgLy8gTm8gaW1hZ2Ugb2YgdGhlIGNv
cnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQgZnJh
bWUKICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7Ci0gICAgZHJh
dyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCks
IGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsK
KyAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgY29t
cG9zaXRlT3ApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDIwICsxMTYsMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDbwogICAgIEFTU0VSVChtX3BhcmVudCk7CiAgICAgQVNTRVJUKG1fcGFyZW50LT5tX3Ry
YW5zZm9ybUxheWVyID09IGxheWVyKTsKIAotICAgIEZsb2F0U2l6ZSBwYXJlbnRTaXplID0gbGF5
ZXItPmJvdW5kcygpLnNpemUoKTsKLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUgPSBtX3BhcmVu
dC0+bmF0dXJhbFNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgcGFyZW50U2l6ZSA9IGxheWVyLT5i
b3VuZHMoKS5zaXplKCk7CisgICAgR3JhcGhpY3NTaXplIG5hdHVyYWxTaXplID0gbV9wYXJlbnQt
Pm5hdHVyYWxTaXplKCk7CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIHJhdGlvIG9mIHRoZXNlIHR3
byBzaXplcyBhbmQgdXNlIHRoYXQgcmF0aW8gdG8gc2NhbGUgdGhlIHF0VmlkZW9MYXllcjoKLSAg
ICBGbG9hdFNpemUgcmF0aW8ocGFyZW50U2l6ZS53aWR0aCgpIC8gbmF0dXJhbFNpemUud2lkdGgo
KSwgcGFyZW50U2l6ZS5oZWlnaHQoKSAvIG5hdHVyYWxTaXplLmhlaWdodCgpKTsKKyAgICBHcmFw
aGljc1NpemUgcmF0aW8ocGFyZW50U2l6ZS53aWR0aCgpIC8gbmF0dXJhbFNpemUud2lkdGgoKSwg
cGFyZW50U2l6ZS5oZWlnaHQoKSAvIG5hdHVyYWxTaXplLmhlaWdodCgpKTsKIAogICAgIGludCB2
aWRlb1dpZHRoID0gMDsKICAgICBpbnQgdmlkZW9IZWlnaHQgPSAwOwogICAgIG1fcGFyZW50LT5t
X21vdmllLT5nZXROYXR1cmFsU2l6ZSh2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCk7Ci0gICAgRmxv
YXRSZWN0IHZpZGVvQm91bmRzKDAsIDAsIHZpZGVvV2lkdGggKiByYXRpby53aWR0aCgpLCB2aWRl
b0hlaWdodCAqIHJhdGlvLmhlaWdodCgpKTsKLSAgICBGbG9hdFBvaW50M0QgdmlkZW9BbmNob3Ig
PSBtX3BhcmVudC0+bV9xdFZpZGVvTGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgR3JhcGhpY3NS
ZWN0IHZpZGVvQm91bmRzKDAsIDAsIHZpZGVvV2lkdGggKiByYXRpby53aWR0aCgpLCB2aWRlb0hl
aWdodCAqIHJhdGlvLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1BvaW50M0QgdmlkZW9BbmNob3Ig
PSBtX3BhcmVudC0+bV9xdFZpZGVvTGF5ZXItPmFuY2hvclBvaW50KCk7CiAKICAgICAvLyBDYWxj
dWxhdGUgdGhlIG5ldyBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgcGFyZW50J3Mgc2l6ZToKLSAgICBG
bG9hdFBvaW50IHBvc2l0aW9uKHBhcmVudFNpemUud2lkdGgoKSAqIDAuNSAtIHZpZGVvQm91bmRz
LndpZHRoKCkgKiAoMC41IC0gdmlkZW9BbmNob3IueCgpKSwKKyAgICBHcmFwaGljc1BvaW50IHBv
c2l0aW9uKHBhcmVudFNpemUud2lkdGgoKSAqIDAuNSAtIHZpZGVvQm91bmRzLndpZHRoKCkgKiAo
MC41IC0gdmlkZW9BbmNob3IueCgpKSwKICAgICAgICAgcGFyZW50U2l6ZS5oZWlnaHQoKSAqIDAu
NSAtIHZpZGVvQm91bmRzLmhlaWdodCgpICogKDAuNSAtIHZpZGVvQW5jaG9yLnkoKSkpOyAKIAog
ICAgIG1fcGFyZW50LT5tX3F0VmlkZW9MYXllci0+c2V0Qm91bmRzKHZpZGVvQm91bmRzKTsKQEAg
LTExOTEsNyArMTE5MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q28KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgYW5jaG9yZWQg
aW4gdGhlIHRvcCBsZWZ0LgotICAgIG1fdHJhbnNmb3JtTGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKKyAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRBbmNob3JQb2ludChHcmFw
aGljc1BvaW50M0QoKSk7CiAKICAgICBtX3F0VmlkZW9MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6
Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIDApOwogICAgIGlmICghbV9x
dFZpZGVvTGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1l
V2luLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODk5LDcgKzg5OSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGVMYXll
ckZvck0KIAogICAgIC8vIE1hcmsgdGhlIGxheWVyIGFzIGRyYXdpbmcgaXRzZWxmLCBhbmNob3Jl
ZCBpbiB0aGUgdG9wIGxlZnQsIGFuZCBib3R0b20tdXAuCiAgICAgbV9xdFZpZGVvTGF5ZXItPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3F0VmlkZW9MYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDNEKCkpOworICAgIG1fcXRWaWRlb0xheWVyLT5zZXRBbmNob3JQb2ludChHcmFw
aGljc1BvaW50M0QoKSk7CiAgICAgbV9xdFZpZGVvTGF5ZXItPnNldENvbnRlbnRzT3JpZW50YXRp
b24oR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVwKTsKICNpZm5k
ZWYgTkRFQlVHCiAgICAgbV9xdFZpZGVvTGF5ZXItPnNldE5hbWUoIlZpZGVvIGxheWVyIik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFD
R1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1DaGFyV2lkdGhJbgogICAgICAgICBpbml0Q2hhcldpZHRocygpOwogICAgIH0KIH0KLUZsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkp
CiAgICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChnbHlwaCk7CkBAIC0xMjksNyArMTI5
LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kcwogICAgIENHRm9u
dEdldEdseXBoQkJveGVzKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCAmZ2x5cGgsIDEsICZib3gp
OwogICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKICAgICBDR0Zs
b2F0IHNjYWxlID0gcG9pbnRTaXplIC8gZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCk7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm94LCBD
R0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZSwgLXNjYWxlKSk7CisgICAgR3JhcGhpY3NS
ZWN0IGJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm94LCBDR0FmZmlu
ZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZSwgLXNjYWxlKSk7CiAgICAgaWYgKG1fc3ludGhldGlj
Qm9sZE9mZnNldCkKICAgICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lk
dGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFD
YWlyb1dpbi5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSwxMiArOTksMTIgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJ
bgogICAgIC8vIGNoYXJ3aWR0aHMgYXJlIHNldCBpbiBwbGF0Zm9ybUluaXQuCiB9CiAKLUZsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkp
CiAgICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChnbHlwaCk7CiAgICAgLy9GSVhNRTog
SW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOwogfQogICAgIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSA8bWxhbmcuaD4KICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CkBA
IC0yMDIsNyArMjAyLDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQog
ICAgIFJlbGVhc2VEQygwLCBkYyk7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6Ym91
bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CitHcmFwaGljc1JlY3QgU2ltcGxlRm9u
dERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAogewogICAgIEhEQyBo
ZGMgPSBHZXREQygwKTsKICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7CkBA
IC0yMTUsNyArMjE1LDcgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHRElH
bAogICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwogICAgIFJlbGVhc2VEQygwLCBoZGMp
OwogICAgIAotICAgIHJldHVybiBGbG9hdFJlY3QoZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmlnaW4u
eCwgLWdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLnksCisgICAgcmV0dXJuIEdyYXBoaWNzUmVj
dChnZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi54LCAtZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmln
aW4ueSwKICAgICAgICAgZ2RpTWV0cmljcy5nbUJsYWNrQm94WCArIG1fc3ludGhldGljQm9sZE9m
ZnNldCwgZ2RpTWV0cmljcy5nbUJsYWNrQm94WSk7IAogfQogICAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzOSwxMSArMzM5LDExIEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFj
ZUkKICAgICAgICAgLy8gYXMgd2VsbCwgc28gdGhhdCB3aGVuIHRoZSB0aW1lIGNvbWVzIHRvIGRy
YXcgdGhvc2UgZ2x5cGhzLCB3ZSBjYW4gYXBwbHkgdGhlIGFwcHJvcHJpYXRlCiAgICAgICAgIC8v
IHRyYW5zbGF0aW9uLgogICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgIEZs
b2F0U2l6ZSBzaXplKG9mZnNldFgsIC1vZmZzZXRZKTsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6
ZSBzaXplKG9mZnNldFgsIC1vZmZzZXRZKTsKICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQo
Z2x5cGgsIGZvbnREYXRhLCBhZHZhbmNlLCAmc2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5
cGgoZ2x5cGgpOwogICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBt
X2dseXBoT3JpZ2luLnkoKSk7CiAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4o
bV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKICAgICAgICAgbV9tYXhH
bHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5k
cy5tYXhYKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZTogICAgCiAgICAgY29u
c3QgRm9udCYgbV9mb250OwogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwogICAgIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwotICAgIEZsb2F0UG9pbnQg
bV9nbHlwaE9yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IG1fZ2x5cGhPcmlnaW47CiAgICAgZmxv
YXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsKICAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdC
b3hYOwogICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
IkZvbnQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAjaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgpA
QCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiBTY3JlZW5EY1JlbGVhc2VyIHJlbGVhc2VTY3JlZW5E
YzsKIAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25z
dAogewogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RleHQoZm9udERhdGEsIGdseXBoQnVmZmVy
LCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKIH0KQEAgLTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMg
aW50IGdlbmVyYXRlQ29tcG9uZW50cyhUZXh0UnVuQ29tCiAgICAgcmV0dXJuIG9mZnNldDsKIH0K
IAotdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAordm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpZiAodG8gPCAwKQpAQCAtMjIyLDcg
KzIyMiw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICAg
ICAgaW50IGxlbiA9IGNvbXAudGV4dExlbmd0aCgpOwogICAgICAgICBpbnQgY3VyRW5kID0gY3Vy
UG9zICsgbGVuOwogICAgICAgICBpZiAoY3VyUG9zIDwgdG8gJiYgZnJvbSA8IGN1ckVuZCAmJiAh
Y29tcC5pc1NwYWNlKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcHQgPSBwb2ludDsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcHQgPSBwb2ludDsKICAgICAgICAgICAgIGlmIChydW4u
cnRsKCkpCiAgICAgICAgICAgICAgICAgcHQuc2V0WChwb2ludC54KCkgKyB3IC0gY29tcC5tX29m
ZnNldCAtIGNvbXAubV93aWR0aCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0yMzUsNyArMjM1LDcg
QEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogICAgIH0KIH0KIAot
dm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNT
dHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyog
ZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJr
c0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4
dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBj
b25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0zMTcsMjEgKzMxNywyMSBAQCBz
dGF0aWMgZmxvYXQgY3Vyc29yVG9YKGNvbnN0IEZvbnQqIGZvbnQsCiAgICAgcmV0dXJuIHdpZHRo
OwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsCitHcmFwaGljc1JlY3QgRm9udDo6
c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgVGV4dFJ1bkNvbXBvbmVudHMgY29t
cG9uZW50czsKICAgICBpbnQgdyA9IGdlbmVyYXRlQ29tcG9uZW50cygmY29tcG9uZW50cywgKnRo
aXMsIHJ1bik7CiAKICAgICBpZiAoIWZyb20gJiYgdG8gPT0gcnVuLmxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSwgcHQueSgpLCB3LCBoKTsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdChwdC54KCksIHB0LnkoKSwgdywgaCk7CiAKICAgICBmbG9hdCB4MSA9IGN1
cnNvclRvWCh0aGlzLCBjb21wb25lbnRzLCB3LCBydW4ucnRsKCksIGZyb20pOwogICAgIGZsb2F0
IHgyID0gY3Vyc29yVG9YKHRoaXMsIGNvbXBvbmVudHMsIHcsIHJ1bi5ydGwoKSwgdG8pOwogICAg
IGlmICh4MiA8IHgxKQogICAgICAgICBzdGQ6OnN3YXAoeDEsIHgyKTsKIAotICAgIHJldHVybiBG
bG9hdFJlY3QocHQueCgpICsgeDEsIHB0LnkoKSwgeDIgLSB4MSwgaCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdChwdC54KCkgKyB4MSwgcHQueSgpLCB4MiAtIHgxLCBoKTsKIH0KIAogYm9vbCBG
b250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRXaW5DRS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhZGllbnRX
aW5DRS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvR3JhZGllbnRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgY29uc3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3AsIDI+JiBHcgogICAgIHJldHVy
biBtX3N0b3BzOwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogYywg
Y29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQq
IGMsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBjLT5maWxsUmVjdChyLCB0aGlzKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0
V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbmxpbmUg
aW50IHN0YWJsZVJvdW5kKGRvdWJsZSBkKQogfQogCiAvLyBVbmxpa2UgZW5jbG9zaW5nSW50UmVj
dCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgc3RyaWN0IHJvdW5kaW5nLgotc3RhdGljIGlubGluZSBJ
bnRSZWN0IHJvdW5kUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCitzdGF0aWMgaW5saW5lIEludFJl
Y3Qgcm91bmRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICByZXR1cm4gSW50UmVj
dChzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIueSgpKSwgc3RhYmxlUm91bmQoci5t
YXhYKCkpIC0gc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLm1heFkoKSkgLSBzdGFi
bGVSb3VuZChyLnkoKSkpOwogfQpAQCAtMTE3LDExICsxMTcsMTEgQEAgdGVtcGxhdGU8Y2xhc3Mg
VD4gc3RhdGljIGlubGluZSBJbnRQb2ludAogICAgIHJldHVybiBJbnRQb2ludCh4LCB5KTsKIH0K
IAotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBGbG9hdFBvaW50IG1hcFBvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IFQmIHQpCit0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMg
aW5saW5lIEdyYXBoaWNzUG9pbnQgbWFwUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgY29u
c3QgVCYgdCkKIHsKICAgICBkb3VibGUgeCwgeTsKICAgICB0Lm1hcChwLngoKSwgcC55KCksICZ4
LCAmeSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oeSkpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHN0YXRpY19jYXN0
PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
VHJhbnNmb3JtLCBjbGFzcyBSZWN0LCBjbGFzcyBWYWx1ZT4gc3RhdGljIGlubGluZSBSZWN0IG1h
cFJlY3QoY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCkBAIC0x
NTYsOSArMTU2LDkgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBJbnRSZWN0IAog
ICAgIHJldHVybiBtYXBSZWN0PFQsIEludFJlY3QsIGludD4ocmVjdCwgdHJhbnNmb3JtKTsKIH0K
IAotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIGlubGluZSBGbG9hdFJlY3QgbWFwUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFQmIHRyYW5zZm9ybSkKK3RlbXBsYXRlPGNsYXNzIFQ+
IHN0YXRpYyBpbmxpbmUgR3JhcGhpY3NSZWN0IG1hcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBy
ZWN0LCBjb25zdCBUJiB0cmFuc2Zvcm0pCiB7Ci0gICAgcmV0dXJuIG1hcFJlY3Q8VCwgRmxvYXRS
ZWN0LCBkb3VibGU+KHJlY3QsIHRyYW5zZm9ybSk7CisgICAgcmV0dXJuIG1hcFJlY3Q8VCwgR3Jh
cGhpY3NSZWN0LCBkb3VibGU+KHJlY3QsIHRyYW5zZm9ybSk7CiB9CiAKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZURhdGEgewpAQCAtMTk2LDcgKzE5Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHgsIHkpOwogICAgIH0KIAotICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIHZvaWQgc2NhbGUoY29uc3QgR3JhcGhp
Y3NTaXplJiBzaXplKQogICAgIHsKICAgICAgICAgbV90cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3Jt
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7CiAgICAg
fQogCi0gICAgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAor
ICAgIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOwogICAgIH0K
QEAgLTIzMSwxNiArMjMxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdHJhbnNmb3Jt
Lm1hcFBvaW50KHBvaW50KTsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorICAgIEdyYXBoaWNzUG9pbnQgbWFwUG9pbnQoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90
cmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBtYXBTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKKyAgICBHcmFwaGljc1NpemUgbWFwU2l6ZShj
b25zdCBHcmFwaGljc1NpemUmIHNpemUpIGNvbnN0CiAgICAgewogICAgICAgICBkb3VibGUgdywg
aDsKICAgICAgICAgbV90cmFuc2Zvcm0ubWFwKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
dywgaCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHcpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oaCkpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NTaXplKHN0YXRp
Y19jYXN0PGZsb2F0Pih3KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKICAgICB9CiAKICAgICB2
b2lkIHNhdmUoKQpAQCAtNTA3LDEzICs1MDcsMTMgQEAgVHJhbnNwYXJlbnRMYXllckRDOjpUcmFu
c3BhcmVudExheWVyREMoRwogICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bvc3RTaGlmdFggLT0g
bV9vcmlnUmVjdC54KCk7CiAgICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WSAtPSBt
X29yaWdSZWN0LnkoKTsKIAotICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BMZWZ0ID0gbV9kYXRh
LT5tX3RyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPmxv
Y2F0aW9uKCkpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQocmVjdEJlZm9yZVRy
YW5zZm9ybS0+bWF4WCgpIC0gMSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+eSgpKTsKKyAgICAgICAg
ICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQo
R3JhcGhpY3NQb2ludChyZWN0QmVmb3JlVHJhbnNmb3JtLT5sb2NhdGlvbigpKSk7CisgICAgICAg
ICAgICBHcmFwaGljc1BvaW50IHRvcFJpZ2h0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAt
IDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7CiAgICAgICAgICAgICB0b3BSaWdodCA9IG1f
ZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQodG9wUmlnaHQpOwotICAgICAgICAgICAgRmxvYXRQ
b2ludCBib3R0b21MZWZ0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5z
Zm9ybS0+bWF4WSgpIC0gMSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGJvdHRvbUxlZnQo
cmVjdEJlZm9yZVRyYW5zZm9ybS0+eCgpLCByZWN0QmVmb3JlVHJhbnNmb3JtLT5tYXhZKCkgLSAx
KTsKICAgICAgICAgICAgIGJvdHRvbUxlZnQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50
KGJvdHRvbUxlZnQpOwotICAgICAgICAgICAgRmxvYXRTaXplIHNpZGVUb3AgPSB0b3BSaWdodCAt
IHRvcExlZnQ7Ci0gICAgICAgICAgICBGbG9hdFNpemUgc2lkZUxlZnQgPSBib3R0b21MZWZ0IC0g
dG9wTGVmdDsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBzaWRlVG9wID0gdG9wUmlnaHQgLSB0
b3BMZWZ0OworICAgICAgICAgICAgR3JhcGhpY3NTaXplIHNpZGVMZWZ0ID0gYm90dG9tTGVmdCAt
IHRvcExlZnQ7CiAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9IF9oeXBvdChzaWRlVG9wLndpZHRo
KCkgKyAxLCBzaWRlVG9wLmhlaWdodCgpICsgMSk7CiAgICAgICAgICAgICBmbG9hdCBoZWlnaHQg
PSBfaHlwb3Qoc2lkZUxlZnQud2lkdGgoKSArIDEsIHNpZGVMZWZ0LmhlaWdodCgpICsgMSk7CiAK
QEAgLTg1NCw3ICs4NTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0
IEluCiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQq
IHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50
cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCiB7CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8
fCBwYWludGluZ0Rpc2FibGVkKCkgfHwgbnBvaW50cyA8PSAxIHx8ICFwb2ludHMpCiAgICAgICAg
IHJldHVybjsKQEAgLTg2NCw3ICs4NjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Nv
bnZleFBvbHlnb24oCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxQT0lOVCwgMjA+IHdp
blBvaW50cyhucG9pbnRzKTsKLSAgICBGbG9hdFBvaW50IHRyUG9pbnQgPSBtX2RhdGEtPm1hcFBv
aW50KHBvaW50c1swXSk7CisgICAgR3JhcGhpY3NQb2ludCB0clBvaW50ID0gbV9kYXRhLT5tYXBQ
b2ludChwb2ludHNbMF0pOwogICAgIHdpblBvaW50c1swXS54ID0gc3RhYmxlUm91bmQodHJQb2lu
dC54KCkpOwogICAgIHdpblBvaW50c1swXS55ID0gc3RhYmxlUm91bmQodHJQb2ludC55KCkpOwog
ICAgIFJFQ1QgcmVjdCA9IHsgd2luUG9pbnRzWzBdLngsIHdpblBvaW50c1swXS55LCB3aW5Qb2lu
dHNbMF0ueCwgd2luUG9pbnRzWzBdLnkgfTsKQEAgLTkxOCw3ICs5MTgsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRC
cnVzaCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXpl
X3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkyOSw3ICs5Mjks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oCiAgICAgLy8gRklY
TUU6IElNUExFTUVOVCEhCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhbV9kYXRhLT5tX29wYWNpdHkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvCiAgICAgRmlsbFJlY3QodHJhbnNwYXJlbnREQy5oZGMoKSwgJnRyYW5zcGFyZW50
REMucmVjdCgpLCBoYnJ1c2guZ2V0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTAyMSwxOCArMTAyMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAgICAgRHJhd0ZvY3VzUmVjdChkYywgJnJlY3QpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lk
dGgsIGJvb2wgcHJpbnRpbmcpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgU3Ryb2tlU3R5bGUgb2xkU3R5bGUgPSBzdHJva2VTdHlsZSgpOwog
ICAgIHNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBkcmF3TGluZShyb3VuZGVkSW50
UG9pbnQob3JpZ2luKSwgcm91bmRlZEludFBvaW50KG9yaWdpbiArIEZsb2F0U2l6ZSh3aWR0aCwg
MCkpKTsKKyAgICBkcmF3TGluZShyb3VuZGVkSW50UG9pbnQob3JpZ2luKSwgcm91bmRlZEludFBv
aW50KG9yaWdpbiArIEdyYXBoaWNzU2l6ZSh3aWR0aCwgMCkpKTsKICAgICBzZXRTdHJva2VTdHls
ZShvbGRTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRD
aGVja2luZyhjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVT
dHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyhjb25zdCBHcmFwaGljc1BvaW50JiwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHls
ZSBzdHlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTA2Myw3ICsxMDYzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAgIGNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbAogICAgIGZpbGxSZWN0KHJlY3QsIENvbG9yKENvbG9yOjp3aGl0ZSksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKIHsKICAgICBp
ZiAoIW1fZGF0YS0+bV9vcGFjaXR5IHx8IHBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CkBAIC0xMTU5LDcgKzExNTksNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhCiAgICAgbV9kYXRhLT5yb3Rh
dGUocmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgR3JhcGhpY3NT
aXplJiBzaXplKQogewogICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7CiB9CkBAIC0xMjE0LDcgKzEy
MTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAgICAgaWYg
KCFtX2RhdGEtPm1fZGMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dC
bHVyID0gMDsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKICAgICBDb2xvclNwYWNlIHNoYWRvd0Nv
bG9yU3BhY2U7CkBAIC0xMjI3LDEwICsxMjI3LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY28KICAgICBkc3RSZWN0LmluZmxhdGUoc3RhYmxlUm91bmQoc2hhZG93
Qmx1cikpOwogICAgIGRzdFJlY3QgPSBtX2RhdGEtPm1hcFJlY3QoZHN0UmVjdCk7CiAgIAotICAg
IEZsb2F0U2l6ZSBuZXdUb3BMZWZ0KG1fZGF0YS0+bWFwU2l6ZSh0b3BMZWZ0KSk7Ci0gICAgRmxv
YXRTaXplIG5ld1RvcFJpZ2h0KG1fZGF0YS0+bWFwU2l6ZSh0b3BSaWdodCkpOwotICAgIEZsb2F0
U2l6ZSBuZXdCb3R0b21MZWZ0KG1fZGF0YS0+bWFwU2l6ZShib3R0b21MZWZ0KSk7Ci0gICAgRmxv
YXRTaXplIG5ld0JvdHRvbVJpZ2h0KG1fZGF0YS0+bWFwU2l6ZShib3R0b21SaWdodCkpOworICAg
IEdyYXBoaWNzU2l6ZSBuZXdUb3BMZWZ0KG1fZGF0YS0+bWFwU2l6ZSh0b3BMZWZ0KSk7CisgICAg
R3JhcGhpY3NTaXplIG5ld1RvcFJpZ2h0KG1fZGF0YS0+bWFwU2l6ZSh0b3BSaWdodCkpOworICAg
IEdyYXBoaWNzU2l6ZSBuZXdCb3R0b21MZWZ0KG1fZGF0YS0+bWFwU2l6ZShib3R0b21MZWZ0KSk7
CisgICAgR3JhcGhpY3NTaXplIG5ld0JvdHRvbVJpZ2h0KG1fZGF0YS0+bWFwU2l6ZShib3R0b21S
aWdodCkpOwogCiAgICAgVHJhbnNwYXJlbnRMYXllckRDIHRyYW5zcGFyZW50RGMobV9kYXRhLCBk
c3RSZWN0LCAmZmlsbFJlY3QpOwogICAgIEhEQyBkYyA9IHRyYW5zcGFyZW50RGMuaGRjKCk7CkBA
IC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JvdW5kQ29ybmVy
KGJvCiB9CiAKIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCitHcmFwaGljc1JlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJl
Y3QsIFJvdW5kaW5nTW9kZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBm
cmVjdDsKQEAgLTEzOTYsNyArMTM5Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKGNvbnN0IFAKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEdyYWRpZW50KiBncmFkaWVudCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIsIGNvbnN0IEdyYWRpZW50
KiBncmFkaWVudCkKIHsKICAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQogICAgICAgICByZXR1
cm47CkBAIC0xNDI1LDggKzE0MjUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlY3QubW92ZSh0cmFuc3BhcmVudERD
LnRvU2hpZnQoKSk7Ci0gICAgRmxvYXRQb2ludCBmcDAgPSBtX2RhdGEtPm1hcFBvaW50KGdyYWRp
ZW50LT5wMCgpKTsKLSAgICBGbG9hdFBvaW50IGZwMSA9IG1fZGF0YS0+bWFwUG9pbnQoZ3JhZGll
bnQtPnAxKCkpOworICAgIEdyYXBoaWNzUG9pbnQgZnAwID0gbV9kYXRhLT5tYXBQb2ludChncmFk
aWVudC0+cDAoKSk7CisgICAgR3JhcGhpY3NQb2ludCBmcDEgPSBtX2RhdGEtPm1hcFBvaW50KGdy
YWRpZW50LT5wMSgpKTsKICAgICBJbnRQb2ludCBwMChzdGFibGVSb3VuZChmcDAueCgpKSwgc3Rh
YmxlUm91bmQoZnAwLnkoKSkpOwogICAgIEludFBvaW50IHAxKHN0YWJsZVJvdW5kKGZwMS54KCkp
LCBzdGFibGVSb3VuZChmcDEueSgpKSk7CiAgICAgcDAgKz0gdHJhbnNwYXJlbnREQy50b1NoaWZ0
KCk7CkBAIC0xNDU2LDcgKzE0NTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvCiAgICAgaW50IHkgPSByZWN0LnkoKTsKICAgICBpbnQgd2lkdGggPSByZWN0Lndp
ZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgRmxvYXRTaXplIGQg
PSBncmFkaWVudC0+cDEoKSAtIGdyYWRpZW50LT5wMCgpOworICAgIEdyYXBoaWNzU2l6ZSBkID0g
Z3JhZGllbnQtPnAxKCkgLSBncmFkaWVudC0+cDAoKTsKICAgICBib29sIHZlcnRpY2FsID0gZmFi
cyhkLmhlaWdodCgpKSA+IGZhYnMoZC53aWR0aCgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYg
c3RvcCA9IHN0b3BzW2ldOwpAQCAtMTQ5Miw3ICsxNDkyLDcgQEAgQWZmaW5lVHJhbnNmb3JtIEdy
YXBoaWNzQ29udGV4dDo6Z2V0Q1RNKAogICAgIHJldHVybiBtX2RhdGEtPm1fdHJhbnNmb3JtOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKIHsKICAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogCkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAgICAgcmVzdG9yZVBsYXRm
b3JtU3RhdGUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiwg
ZmxvYXQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQpAQCAtMTUzMCw3ICsxNTMwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ2hhclZpc2li
bGUoVUNoYXIgYwogICAgIHJldHVybiBjICYmIGMgIT0gemVyb1dpZHRoU3BhY2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZmlsbENvbG9yKCkuYWxwaGEoKSB8fCAh
bV9kYXRhLT5tX29wYWNpdHkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NDUsNyArMTU0NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb24KICAgICBmbG9hdCBvbGRP
cGFjaXR5ID0gbV9kYXRhLT5tX29wYWNpdHk7CiAgICAgbV9kYXRhLT5tX29wYWNpdHkgKj0gZmls
bENvbG9yKCkuYWxwaGEoKSAvIDI1NS4wOwogCi0gICAgRmxvYXRSZWN0IHRleHRSZWN0ID0gZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBmb250LmZvbnRNZXRyaWNzKCkuaGVp
Z2h0KCksIGZyb20sIHRvKTsKKyAgICBHcmFwaGljc1JlY3QgdGV4dFJlY3QgPSBmb250LnNlbGVj
dGlvblJlY3RGb3JUZXh0KHJ1biwgcG9pbnQsIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwg
ZnJvbSwgdG8pOwogICAgIHRleHRSZWN0LnNldFkodGV4dFJlY3QueSgpIC0gZm9udC5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKICAgICBJbnRSZWN0IHRyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
bV9kYXRhLT5tYXBSZWN0KHRleHRSZWN0KSk7CiAgICAgUkVDVCBibXBSZWN0OwpAQCAtMTU1NCw3
ICsxNTU0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbgogICAg
ICAgICB7CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoMCk7CiAgICAgICAgICAgICBn
Yy5zZXRCaXRtYXAoYm1wKTsKLSAgICAgICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZShtX2RhdGEt
Pm1fdHJhbnNmb3JtLmEoKSwgbV9kYXRhLT5tX3RyYW5zZm9ybS5kKCkpKTsKKyAgICAgICAgICAg
IGdjLnNjYWxlKEdyYXBoaWNzU2l6ZShtX2RhdGEtPm1fdHJhbnNmb3JtLmEoKSwgbV9kYXRhLT5t
X3RyYW5zZm9ybS5kKCkpKTsKICAgICAgICAgICAgIGZvbnQuZHJhd1RleHQoJmdjLCBydW4sIElu
dFBvaW50KDAsIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSksIGZyb20sIHRvKTsKICAgICAg
ICAgfQogICAgICAgICB1bnNpZ25lZCBrZXkxOwpAQCAtMTU2OSw3ICsxNTY5LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbgogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RleHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGlu
dCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgICAgICAgICAgICAgICAg
ICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkK
IHsKICAgICBpZiAoIW1fZGF0YS0+bV9vcGFjaXR5KQogICAgICAgICByZXR1cm47CkBAIC0xNjAw
LDggKzE2MDAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgU2ltCiAg
ICAgICAgID8gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmdldFNjYWxlZEZvbnRIYW5kbGUoaGVp
Z2h0LCBzY2FsZVggPT0gc2NhbGVZID8gMCA6IHdpZHRoKQogICAgICAgICA6IDA7CiAKLSAgICBG
bG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBmb250RGF0YS0+Zm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgRmxvYXRQb2ludCB0clBvaW50ID0gbV9kYXRhLT5t
YXBQb2ludChzdGFydFBvaW50KTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQocG9pbnQu
eCgpLCBwb2ludC55KCkgLSBmb250RGF0YS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisgICAg
R3JhcGhpY3NQb2ludCB0clBvaW50ID0gbV9kYXRhLT5tYXBQb2ludChzdGFydFBvaW50KTsKICAg
ICBpbnQgeSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKIAogICAgIENvbG9yIGNvbG9yID0g
ZmlsbENvbG9yKCk7CkBAIC0xNjMyLDcgKzE2MzIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RleHQoY29uc3QgU2ltCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGbG9hdFNp
emUgc2hhZG93T2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAgZmxv
YXQgc2hhZG93Qmx1ciA9IDA7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JTcGFj
ZSBzaGFkb3dDb2xvclNwYWNlOwpAQCAtMTY0MCw3ICsxNjQwLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0KGNvbnN0IFNpbQogICAgICAgICAmJiBnZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSkKICAgICAgICAg
JiYgc2hhZG93Q29sb3IuYWxwaGEoKTsKICAgICBDT0xPUlJFRiBzaGFkb3dSR0JDb2xvcjsKLSAg
ICBGbG9hdFBvaW50IHRyU2hhZG93UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0clNoYWRvd1Bv
aW50OwogICAgIGlmIChoYXNTaGFkb3cpIHsKICAgICAgICAgc2hhZG93UkdCQ29sb3IgPSBSR0Io
c2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUo
KSk7CiAgICAgICAgIHRyU2hhZG93UG9pbnQgPSBtX2RhdGEtPm1hcFBvaW50KHN0YXJ0UG9pbnQg
KyBzaGFkb3dPZmZzZXQpOwpAQCAtMTgzNiw4ICsxODM2LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdCaXRtYXAoU2hhcmVkQgogICAgICAgICB0cmFuc3BhcmVudERDLmZpbGxBbHBoYUNo
YW5uZWwoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKFNo
YXJlZEJpdG1hcCogYm1wLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0SW4sIGNvbnN0IEludFNpemUmIG9yaWdT
b3VyY2VTaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaXRtYXBQYXR0ZXJuKFNoYXJl
ZEJpdG1hcCogYm1wLCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0SW4sIGNvbnN0IEludFNpemUm
IG9yaWdTb3VyY2VTaXplKQogewogICAgIGlmICghbV9kYXRhLT5tX29wYWNpdHkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE4NTMsOCArMTg1Myw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Qml0bWFwUGF0dGVybigKICAgICBpZiAoIWRjKQogICAgICAgICByZXR1cm47CiAgICAgdHJSZWN0
Lm1vdmUodHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotICAgIEZsb2F0UmVjdCBtb3ZlZERzdFJl
Y3QgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEZsb2F0UmVjdCh0clJl
Y3QpKTsKLSAgICBGbG9hdFNpemUgbW92ZWQobW92ZWREc3RSZWN0LmxvY2F0aW9uKCkgLSBkZXN0
UmVjdEluLmxvY2F0aW9uKCkpOworICAgIEdyYXBoaWNzUmVjdCBtb3ZlZERzdFJlY3QgPSBtX2Rh
dGEtPm1fdHJhbnNmb3JtLmludmVyc2UoKS5tYXBSZWN0KEdyYXBoaWNzUmVjdCh0clJlY3QpKTsK
KyAgICBHcmFwaGljc1NpemUgbW92ZWQobW92ZWREc3RSZWN0LmxvY2F0aW9uKCkgLSBkZXN0UmVj
dEluLmxvY2F0aW9uKCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX2RhdGEt
Pm1fdHJhbnNmb3JtOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobW92ZWQud2lkdGgoKSwgbW92
ZWQuaGVpZ2h0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZl
cldpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjIgKzQzLDIyIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9kYXRhLT5t
X2JpdG1hcC0+d2lkdGgoKSwgbV9kYXRhLT5tX2JpdG1hcC0+aGVpZ2h0KCkpOyB9CiAgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7fQog
ICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpOwogCiAgICAgY29uc3Qg
SW1hZ2VCdWZmZXJEYXRhKiBtX2RhdGE7CiB9OwogCi12b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCdWZmZXJlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKIHsKICAgICBJbnRSZWN0IGludERzdFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGRzdFJlY3QpOwogICAgIEludFJlY3QgaW50U3JjUmVjdChzcmNSZWN0KTsKICAgICBtX2Rh
dGEtPm1fYml0bWFwLT5kcmF3KGN0eHQsIGludERzdFJlY3QsIGludFNyY1JlY3QsIHN0eWxlQ29s
b3JTcGFjZSwgY29tcG9zaXRlT3ApOwogfQogCi12b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
Cit2b2lkIEJ1ZmZlcmVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgbV9kYXRhLT5t
X2JpdG1hcC0+ZHJhd1BhdHRlcm4oY3R4dCwgdGlsZVJlY3RJbiwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBzaXplKCkpOwogfQpAQCAtMTA4
LDIwICsxMDgsMjAgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZQog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWRJbWFnZSgmbV9kYXRhKSk7CiB9CiAKLXZv
aWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3Jh
cGhpY3NSZWN0JikgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVj
dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBD
b21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CiAgICAgY29udGV4dC0+ZHJhd0lt
YWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUmVmUHRyPElt
YWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoKTsKICAgICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJu
KGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3Bh
Y2UsIG9wLCBkZXN0UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9JbWFnZVdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOSBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQ
T2ZTaXplKEhCSVRNCiAKICAgICAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6
c2l6ZSgpOwogICAgICAgICBpZiAoc2l6ZSkKLSAgICAgICAgICAgIGRyYXdGcmFtZU1hdGNoaW5n
U291cmNlU2l6ZSgmZ2MsIEZsb2F0UmVjdCgwLCAwLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8u
Ym1IZWlnaHQpLCBJbnRTaXplKCpzaXplKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRl
Q29weSk7CisgICAgICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBHcmFw
aGljc1JlY3QoMCwgMCwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6
ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBkcmF3KCZnYywgRmxvYXRSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0
aCwgYm1wSW5mby5ibUhlaWdodCksIEZsb2F0UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwg
aW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSk7
CisgICAgICAgICAgICBkcmF3KCZnYywgR3JhcGhpY3NSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0
aCwgYm1wSW5mby5ibUhlaWdodCksIEdyYXBoaWNzUmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgo
KSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29w
eSk7CiAgICAgfQogCiAgICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaE9sZEJtcCk7CkBAIC04
OCw3ICs4OCw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdT
b3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVN
YXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpbnQgZnJhbWVz
ID0gZnJhbWVDb3VudCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsK
QEAgLTk4LDE3ICs5OCwxNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1Nv
dXJjCiAKICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lOwogICAg
ICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxv
YXRSZWN0KDAsIDAsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29s
b3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEdyYXBo
aWNzUmVjdCgwLCAwLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBzdHlsZUNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50
RnJhbWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBObyBpbWFnZSBvZiB0aGUg
Y29ycmVjdCBzaXplIHdhcyBmb3VuZCwgZmFsbGJhY2sgdG8gZHJhd2luZyB0aGUgY3VycmVudCBm
cmFtZQogICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAgICBk
cmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1h
Z2VTaXplLmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CisgICAgZHJh
dyhjdHh0LCBkc3RSZWN0LCBHcmFwaGljc1JlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGlt
YWdlU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwogfQogCi12
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3RJbiwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0SW4sIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fc291
cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMywxNCArMTMzLDE0IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBzdGFydEFuaW1h
dGlvbigpOwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0
eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEJp
dG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBSZWZQdHI8U2hhcmVkQml0bWFwPiBibXAg
PSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghYm1wKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGF0aFdpbkNFLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luQ0Uu
Y3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL1BhdGhXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNp
bmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdpbkNFLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKQEAgLTUzLDQyICs1Myw0MiBAQCBQYXRoJiBQYXRoOjpvcGVyYXRv
cj0oY29uc3QgUGF0aCYgb3RoZXIpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIFBhdGg6
OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAor
Ym9vbCBQYXRoOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgV2luZFJ1bGUg
cnVsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCwgcnVsZSk7
CiB9CiAKLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQg
UGF0aDo6dHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBtX3BhdGgt
PnRyYW5zbGF0ZShzaXplKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNv
bnN0CitHcmFwaGljc1JlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3QoKTsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkKIHsKICAgICBtX3BhdGgtPm1vdmVUbyhwb2ludCk7CiB9CiAKLXZvaWQgUGF0aDo6
YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoOjphZGRMaW5lVG8o
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9wYXRoLT5hZGRMaW5lVG8ocG9p
bnQpOwogfQogCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNw
LCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBH
cmFwaGljc1BvaW50JiBjcCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBtX3BhdGgt
PmFkZFF1YWRDdXJ2ZVRvKGNwLCBwKTsKIH0KIAotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3AyLCBjb25zdCBGbG9h
dFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGNwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY3AyLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
KQogewogICAgIG1fcGF0aC0+YWRkQmV6aWVyQ3VydmVUbyhjcDEsIGNwMiwgcCk7CiB9CiAKLXZv
aWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQogewogICAgIG1f
cGF0aC0+YWRkQXJjVG8ocDEsIHAyLCByYWRpdXMpOwogfQpAQCAtOTgsMTcgKzk4LDE3IEBAIHZv
aWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKICAgICBtX3BhdGgtPmNsb3NlU3VicGF0aCgpOwogfQog
Ci12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBz
YXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQordm9pZCBQYXRoOjphZGRBcmMoY29u
c3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wg
YW50aWNsb2Nrd2lzZSkKIHsKICAgICBtX3BhdGgtPmFkZEVsbGlwc2UocCwgciwgciwgc2FyLCBl
YXIsIGFudGljbG9ja3dpc2UpOwogfQogCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByKQordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAg
ICBtX3BhdGgtPmFkZFJlY3Qocik7CiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHIpCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiBy
KQogewogICAgIG1fcGF0aC0+YWRkRWxsaXBzZShyKTsKIH0KQEAgLTEzMywxMyArMTMzLDEzIEBA
IHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KICAgICBtX3BhdGgtPnRy
YW5zZm9ybSh0KTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJv
a2VTdHlsZUFwcGxpZXIqKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5n
UmVjdChTdHJva2VTdHlsZUFwcGxpZXIqKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0K
IAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqLCBjb25zdCBG
bG9hdFBvaW50JikgY29uc3QKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVB
cHBsaWVyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBQYXRoOjpo
YXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0eSgpOwogfQogCi1GbG9h
dFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0CitHcmFwaGljc1BvaW50IFBhdGg6OmN1
cnJlbnRQb2ludCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0aC0+bGFzdFBvaW50KCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBh
dGhXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aFdp
bkNFLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYmV6aWVyKGludCBzZWdtZW50cywg
CiAgICAgcHRzW29mZnNldCArIHNlZ21lbnRzIC0gMV0gPSBwcDsKIH0KIAotc3RhdGljIGJvb2wg
Y29udGFpbnNQb2ludChjb25zdCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCitz
dGF0aWMgYm9vbCBjb250YWluc1BvaW50KGNvbnN0IEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCkKIHsKICAgICByZXR1cm4gcC54KCkgPj0gci54KCkgJiYgcC55KCkgPj0g
ci55KCkgJiYgcC54KCkgPCByLm1heFgoKSAmJiBwLnkoKSA8IHIubWF4WSgpOwogfQpAQCAtMTMx
LDE4ICsxMzEsMTggQEAgc3RhdGljIHZvaWQgbm9ybWFsaXplQW5nbGUoZmxvYXQmIGFuZ2xlKQog
ICAgICAgICBhbmdsZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYW5zZm9ybUFyY1BvaW50KGZs
b2F0JiB4LCBmbG9hdCYgeSwgY29uc3QgRmxvYXRQb2ludCYgYykKK3N0YXRpYyB2b2lkIHRyYW5z
Zm9ybUFyY1BvaW50KGZsb2F0JiB4LCBmbG9hdCYgeSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYykK
IHsKICAgICB4ICs9IGMueCgpOwogICAgIHkgKz0gYy55KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlu
ZmxhdGVSZWN0VG9Db250YWluUG9pbnQoRmxvYXRSZWN0JiByLCBmbG9hdCB4LCBmbG9hdCB5KQor
c3RhdGljIHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRhaW5Qb2ludChHcmFwaGljc1JlY3QmIHIsIGZs
b2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgpKSB7CiAgICAgICAgIHIuc2V0
WCh4KTsKICAgICAgICAgci5zZXRZKHkpOwotICAgICAgICByLnNldFNpemUoRmxvYXRTaXplKDEs
IDEpKTsKKyAgICAgICAgci5zZXRTaXplKEdyYXBoaWNzU2l6ZSgxLCAxKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKHggPCByLngoKSkgewpAQCAtMjQ5LDcgKzI0OSw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdQb2x5Z29ucyhIREMgZGMsIGNvbnN0IFYKICAgICAgICAgaWYgKHdpblBv
aW50cykgewogICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWF0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaTIgPSAwOyBpMiA8IG5wb2ludHM7ICsraTIpIHsKLSAgICAgICAgICAgICAg
ICAgICAgRmxvYXRQb2ludCB0clBvaW50ID0gdHJhbnNmb3JtYXRpb24tPm1hcFBvaW50KGktPmF0
KGkyKSk7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgdHJQb2ludCA9IHRyYW5z
Zm9ybWF0aW9uLT5tYXBQb2ludChpLT5hdChpMikpOwogICAgICAgICAgICAgICAgICAgICB3aW5Q
b2ludHNbaTJdLnggPSBzdGFibGVSb3VuZCh0clBvaW50LngoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHdpblBvaW50c1tpMl0ueSA9IHN0YWJsZVJvdW5kKHRyUG9pbnQueSgpKTsKICAgICAgICAg
ICAgICAgICB9CkBAIC0zMTAsNyArMzEwLDcgQEAgaW50IFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om51
bVBvaW50cygpIGNvbgogICAgIH0KIH0KIAotdm9pZCBQYXRoUG9seWdvbjo6bW92ZShjb25zdCBG
bG9hdFNpemUmIG9mZnNldCkKK3ZvaWQgUGF0aFBvbHlnb246Om1vdmUoY29uc3QgR3JhcGhpY3NT
aXplJiBvZmZzZXQpCiB7CiAgICAgZm9yIChWZWN0b3I8UGF0aFBvaW50Pjo6aXRlcmF0b3IgaSA9
IGJlZ2luKCk7IGkgPCBlbmQoKTsgKytpKQogICAgICAgICBpLT5tb3ZlKG9mZnNldCk7CkBAIC0z
MjIsNyArMzIyLDcgQEAgdm9pZCBQYXRoUG9seWdvbjo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZQog
ICAgICAgICAqaSA9IHQubWFwUG9pbnQoKmkpOwogfQogCi1ib29sIFBhdGhQb2x5Z29uOjpjb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgUGF0aFBvbHlnb246OmNv
bnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGlmIChzaXpl
KCkgPCAzKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTUsNyArMzk1LDcgQEAgYm9vbCBQ
YXRoUG9seWdvbjo6Y29udGFpbnMoY29uc3QgRmxvYXRQbwogICAgIHJldHVybiBpbnRlcnNlY3Rl
ZCAmIDE7CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXRoRWxlbWVudDo6bW92ZShjb25zdCBGbG9hdFNp
emUmIG9mZnNldCkKK3ZvaWQgUGxhdGZvcm1QYXRoRWxlbWVudDo6bW92ZShjb25zdCBHcmFwaGlj
c1NpemUmIG9mZnNldCkKIHsKICAgICBpbnQgbiA9IG51bUNvbnRyb2xQb2ludHMoKTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKQEAgLTQwNiwxMiArNDA2LDEyIEBAIHZvaWQgUGxh
dGZvcm1QYXRoRWxlbWVudDo6dHJhbnNmb3JtKGNvbnMKIHsKICAgICBpbnQgbiA9IG51bUNvbnRy
b2xQb2ludHMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICBG
bG9hdFBvaW50IHAgPSB0Lm1hcFBvaW50KG1fZGF0YS5tX3BvaW50c1tpXSk7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQgcCA9IHQubWFwUG9pbnQobV9kYXRhLm1fcG9pbnRzW2ldKTsKICAgICAgICAg
bV9kYXRhLm1fcG9pbnRzW2ldLnNldChwLngoKSwgcC55KCkpOwogICAgIH0KIH0KIAotdm9pZCBQ
bGF0Zm9ybVBhdGhFbGVtZW50OjppbmZsYXRlUmVjdFRvQ29udGFpbk1lKEZsb2F0UmVjdCYgciwg
Y29uc3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBjb25zdAordm9pZCBQbGF0Zm9ybVBhdGhFbGVt
ZW50OjppbmZsYXRlUmVjdFRvQ29udGFpbk1lKEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgbGFzdFBvaW50KSBjb25zdAogewogICAgIGlmIChtX3R5cGUgPT0gUGF0aEFyY1Rv
KSB7CiAgICAgICAgIGNvbnN0IEFyY1RvJiBkYXRhID0gbV9kYXRhLm1fYXJjVG9EYXRhOwpAQCAt
NTY0LDcgKzU2NCw3IEBAIHZvaWQgUGxhdGZvcm1QYXRoOjphcHBlbmQoY29uc3QgUGxhdGZvcm0K
IHZvaWQgUGxhdGZvcm1QYXRoOjpjbGVhcigpCiB7CiAgICAgbV9lbGVtZW50cy5jbGVhcigpOwot
ICAgIG1fYm91bmRpbmdSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9ib3VuZGluZ1JlY3QgPSBH
cmFwaGljc1JlY3QoKTsKICAgICBtX3N1YnBhdGhzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50UG9p
bnQuY2xlYXIoKTsKICAgICBtX3BlbkxpZnRlZCA9IHRydWU7CkBAIC01ODIsNyArNTgyLDcgQEAg
dm9pZCBQbGF0Zm9ybVBhdGg6OmZpbGxQYXRoKEhEQyBkYywgY29ucwogICAgIFNlbGVjdE9iamVj
dChkYywgb2xkUGVuKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6OnRyYW5zbGF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCit2b2lkIFBsYXRmb3JtUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEdyYXBo
aWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBmb3IgKFBsYXRmb3JtUGF0aEVsZW1lbnRzOjppdGVyYXRv
ciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBpdCAhPSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0KQog
ICAgICAgICBpdC0+bW92ZShzaXplKTsKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIFBsYXRmb3Jt
UGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluCiAgICAgICAgIGl0LT50cmFuc2Zvcm0odCk7CiB9
CiAKLWJvb2wgUGxhdGZvcm1QYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
V2luZFJ1bGUgcnVsZSkgY29uc3QKK2Jvb2wgUGxhdGZvcm1QYXRoOjpjb250YWlucyhjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKICAgICAvLyBvcHRp
bWl6YXRpb246IGNoZWNrIHRoZSBib3VuZGluZyByZWN0IGZpcnN0CiAgICAgaWYgKCFjb250YWlu
c1BvaW50KG1fYm91bmRpbmdSZWN0LCBwb2ludCkpCkBAIC02MTYsMzUgKzYxNiwzNSBAQCBib29s
IFBsYXRmb3JtUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFBsYXRmb3JtUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQor
dm9pZCBQbGF0Zm9ybVBhdGg6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsK
ICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpNb3ZlVG8gZGF0YSA9IHsgeyBwb2ludC54KCksIHBv
aW50LnkoKSB9IH07CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKICAgICBhcHBl
bmQocGUpOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQordm9pZCBQbGF0Zm9ybVBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkKIHsKICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpMaW5lVG8gZGF0YSA9IHsg
eyBwb2ludC54KCksIHBvaW50LnkoKSB9IH07CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudCBwZShk
YXRhKTsKICAgICBhcHBlbmQocGUpOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aDo6YWRkUXVhZEN1
cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBs
YXRmb3JtUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY3AsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6UXVhZEN1cnZl
VG8gZGF0YSA9IHsgeyBjcC54KCksIGNwLnkoKSB9LCB7IHAueCgpLCBwLnkoKSB9IH07CiAgICAg
UGxhdGZvcm1QYXRoRWxlbWVudCBwZShkYXRhKTsKICAgICBhcHBlbmQocGUpOwogfQogCi12b2lk
IFBsYXRmb3JtUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGxhdGZvcm1Q
YXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMSwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgY3AyLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIFBsYXRmb3Jt
UGF0aEVsZW1lbnQ6OkJlemllckN1cnZlVG8gZGF0YSA9IHsgeyBjcDEueCgpLCBjcDEueSgpIH0s
IHsgY3AyLngoKSwgY3AyLnkoKSB9LCB7IHAueCgpLCBwLnkoKSB9IH07CiAgICAgUGxhdGZvcm1Q
YXRoRWxlbWVudCBwZShkYXRhKTsKICAgICBhcHBlbmQocGUpOwogfQogCi12b2lkIFBsYXRmb3Jt
UGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgZnAxLCBjb25zdCBGbG9hdFBvaW50JiBm
cDIsIGZsb2F0IHJhZGl1cykKK3ZvaWQgUGxhdGZvcm1QYXRoOjphZGRBcmNUbyhjb25zdCBHcmFw
aGljc1BvaW50JiBmcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZwMiwgZmxvYXQgcmFkaXVzKQog
ewogICAgIGNvbnN0IFBhdGhQb2ludCYgcDAgPSBtX2N1cnJlbnRQb2ludDsKICAgICBQYXRoUG9p
bnQgcDE7CkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmNsb3NlU3VicGF0
aCgpCiB9CiAKIC8vIGFkZCBhIGNpcmN1bGFyIGFyYyBjZW50cmVkIGF0IHAgd2l0aCByYWRpdXMg
ciBmcm9tIHN0YXJ0IGFuZ2xlIHNhciAocmFkaWFucykgdG8gZW5kIGFuZ2xlIGVhcgotdm9pZCBQ
bGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgYSwgZmxv
YXQgYiwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3ZvaWQgUGxh
dGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGZsb2F0IGEsIGZs
b2F0IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCiB7CiAgICAg
ZmxvYXQgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFk7CiAKQEAgLTcyNyw3ICs3MjcsNyBAQCB2
b2lkIFBsYXRmb3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hCiAgICAgdHJhbnNmb3JtQXJj
UG9pbnQoc3RhcnRYLCBzdGFydFksIHApOwogICAgIHRyYW5zZm9ybUFyY1BvaW50KGVuZFgsIGVu
ZFksIHApOwogCi0gICAgRmxvYXRQb2ludCBzdGFydChzdGFydFgsIHN0YXJ0WSk7CisgICAgR3Jh
cGhpY3NQb2ludCBzdGFydChzdGFydFgsIHN0YXJ0WSk7CiAgICAgbW92ZVRvKHN0YXJ0KTsKIAog
ICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OkFyY1RvIGRhdGEgPSB7IHsgZW5kWCwgZW5kWSB9LCB7
IHAueCgpLCBwLnkoKSB9LCAgeyBhLCBiIH0sICFhbnRpY2xvY2t3aXNlIH07CkBAIC03MzYsMjgg
KzczNiwyOCBAQCB2b2lkIFBsYXRmb3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hCiB9CiAK
IAotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQ
bGF0Zm9ybVBhdGg6OmFkZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAgIG1vdmVU
byhyLmxvY2F0aW9uKCkpOwogCiAgICAgZmxvYXQgcmlnaHQgPSByLm1heFgoKSAtIDE7CiAgICAg
ZmxvYXQgYm90dG9tID0gci5tYXhZKCkgLSAxOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJp
Z2h0LCByLnkoKSkpOwotICAgIGFkZExpbmVUbyhGbG9hdFBvaW50KHJpZ2h0LCBib3R0b20pKTsK
LSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyLngoKSwgYm90dG9tKSk7CisgICAgYWRkTGluZVRv
KEdyYXBoaWNzUG9pbnQocmlnaHQsIHIueSgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNzUG9p
bnQocmlnaHQsIGJvdHRvbSkpOworICAgIGFkZExpbmVUbyhHcmFwaGljc1BvaW50KHIueCgpLCBi
b3R0b20pKTsKICAgICBhZGRMaW5lVG8oci5sb2NhdGlvbigpKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bVBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQbGF0Zm9ybVBhdGg6
OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByKQogewotICAgIEZsb2F0U2l6ZSByYWRp
dXMoci53aWR0aCgpICogMC41LCByLmhlaWdodCgpICogMC41KTsKKyAgICBHcmFwaGljc1NpemUg
cmFkaXVzKHIud2lkdGgoKSAqIDAuNSwgci5oZWlnaHQoKSAqIDAuNSk7CiAgICAgYWRkRWxsaXBz
ZShyLmxvY2F0aW9uKCkgKyByYWRpdXMsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCks
IDAsIDAsIHRydWUpOwogfQogCiB2b2lkIFBsYXRmb3JtUGF0aDo6YXBwbHkodm9pZCogaW5mbywg
UGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBQYXRoRWxlbWVudCBw
ZWxlbWVudDsKLSAgICBGbG9hdFBvaW50IHBvaW50c1szXTsKKyAgICBHcmFwaGljc1BvaW50IHBv
aW50c1szXTsKICAgICBwZWxlbWVudC5wb2ludHMgPSBwb2ludHM7CiAKICAgICBmb3IgKFBsYXRm
b3JtUGF0aEVsZW1lbnRzOjpjb25zdF9pdGVyYXRvciBpdChtX2VsZW1lbnRzLmJlZ2luKCkpOyBp
dCAhPSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBhdGhXaW5DRS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmgJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvUGxhdGZvcm1QYXRoV2luQ0UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAog
I2lmbmRlZiBQbGF0Zm9ybVBhdGhXaW5DRV9oCiAjZGVmaW5lIFBsYXRmb3JtUGF0aFdpbkNFX2gK
IAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiUGF0aC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzksMTMgKzM5LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1feCA9IHg7CiAgICAgICAgICAgICBt
X3kgPSB5OwogICAgICAgICB9OwotICAgICAgICBvcGVyYXRvciBGbG9hdFBvaW50KCkgY29uc3Qg
eyByZXR1cm4gRmxvYXRQb2ludChtX3gsIG1feSk7IH0KLSAgICAgICAgdm9pZCBtb3ZlKGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0KQorICAgICAgICBvcGVyYXRvciBHcmFwaGljc1BvaW50KCkgY29u
c3QgeyByZXR1cm4gR3JhcGhpY3NQb2ludChtX3gsIG1feSk7IH0KKyAgICAgICAgdm9pZCBtb3Zl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBtX3gg
Kz0gb2Zmc2V0LndpZHRoKCk7CiAgICAgICAgICAgICBtX3kgKz0gb2Zmc2V0LmhlaWdodCgpOwog
ICAgICAgICB9Ci0gICAgICAgIFBhdGhQb2ludCYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0UG9pbnQm
IHApCisgICAgICAgIFBhdGhQb2ludCYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1feCA9IHAueCgpOwogICAgICAgICAgICAgbV95ID0g
cC55KCk7CkBAIC01NSw5ICs1NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9OwogCiAg
ICAgc3RydWN0IFBhdGhQb2x5Z29uOiBwdWJsaWMgVmVjdG9yPFBhdGhQb2ludD4gewotICAgICAg
ICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpOworICAgICAgICB2b2lkIG1vdmUo
Y29uc3QgR3JhcGhpY3NTaXplJiBvZmZzZXQpOwogICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdDsKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCkgY29uc3Q7CiAgICAgfTsKIAogICAgIGNsYXNzIFBsYXRmb3JtUGF0aEVs
ZW1lbnQgewpAQCAtMTE3LDExICsxMTcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBjb25zdCBQYXRoUG9pbnQmIHBvaW50QXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Rh
dGEubV9wb2ludHNbaW5kZXhdOyB9CiAgICAgICAgIGludCBudW1Qb2ludHMoKSBjb25zdDsKICAg
ICAgICAgaW50IG51bUNvbnRyb2xQb2ludHMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBtb3ZlKGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEdyYXBoaWNz
U2l6ZSYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0KTsKICAgICAgICAgUGF0aEVsZW1lbnRUeXBlIHR5cGUoKSBjb25zdDsKICAgICAgICAg
UGxhZm9ybVBhdGhFbGVtZW50VHlwZSBwbGF0Zm9ybVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICAgICAgdm9pZCBpbmZsYXRlUmVjdFRvQ29udGFpbk1lKEZsb2F0UmVjdCYgciwg
Y29uc3QgRmxvYXRQb2ludCYgbGFzdFBvaW50KSBjb25zdDsKKyAgICAgICAgdm9pZCBpbmZsYXRl
UmVjdFRvQ29udGFpbk1lKEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhpY3NQb2ludCYgbGFz
dFBvaW50KSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBsYWZvcm1QYXRoRWxlbWVu
dFR5cGUgbV90eXBlOwpAQCAtMTQ4LDIyICsxNDgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZvaWQgc3Ryb2tlUGF0aChIREMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSogdHIp
IGNvbnN0OwogICAgICAgICB2b2lkIGZpbGxQYXRoKEhEQywgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
KiB0cikgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgbGFzdFBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50cy5pc0VtcHR5KCkgPyBGbG9hdFBvaW50KDAsIDApIDogbV9lbGVtZW50cy5s
YXN0KCkubGFzdFBvaW50KCk7IH0KKyAgICAgICAgR3JhcGhpY3NQb2ludCBsYXN0UG9pbnQoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmlzRW1wdHkoKSA/IEdyYXBoaWNzUG9pbnQoMCwgMCkg
OiBtX2VsZW1lbnRzLmxhc3QoKS5sYXN0UG9pbnQoKTsgfQogCi0gICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ1JlY3Q7IH0KLSAg
ICAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVs
ZSkgY29uc3Q7Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSk7
CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9ib3VuZGluZ1JlY3Q7IH0KKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3Q7CisgICAgICAgIHZvaWQgdHJhbnNs
YXRlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSk7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdCk7CiAKLSAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0g
ICAgICAgIHZvaWQgYWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVU
byhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250
cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkQXJjVG8oY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMpOworICAgICAg
ICB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkTGlu
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhj
b25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50KTsKKyAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGNvbnRyb2xQb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHJhZGl1cyk7CiAgICAgICAgIHZvaWQg
Y2xvc2VTdWJwYXRoKCk7Ci0gICAgICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBGbG9hdFBvaW50
JiBwLCBmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xv
Y2t3aXNlKTsKLSAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcik7Ci0gICAg
ICAgIHZvaWQgYWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpOworICAgICAgICB2b2lkIGFk
ZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQg
c2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSk7CisgICAgICAgIHZvaWQgYWRkUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHIpOworICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3Qg
R3JhcGhpY3NSZWN0JiByKTsKICAgICAgICAgdm9pZCBhcHBseSh2b2lkKiBpbmZvLCBQYXRoQXBw
bGllckZ1bmN0aW9uIGZ1bmN0aW9uKSBjb25zdDsKIAogICAgIHByaXZhdGU6CkBAIC0xNzEsNyAr
MTcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFkZFRvU3VicGF0aChj
b25zdCBQbGF0Zm9ybVBhdGhFbGVtZW50JiBlKTsKIAogICAgICAgICBQbGF0Zm9ybVBhdGhFbGVt
ZW50cyBtX2VsZW1lbnRzOwotICAgICAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ1JlY3Q7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCBtX2JvdW5kaW5nUmVjdDsKICAgICAgICAgVmVjdG9yPFBhdGhQb2x5
Z29uPiBtX3N1YnBhdGhzOwogICAgICAgICBQYXRoUG9pbnQgbV9jdXJyZW50UG9pbnQ7CiAgICAg
ICAgIGJvb2wgbV9wZW5MaWZ0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5jcHAJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDE2ICszOTgsMTYgQEAgc3RhdGljIExPTkcgbm9y
bWFsaXplUGhhc2UoTE9ORyBwaGFzZSwgaQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxMT05HPihz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocGhhc2UpICUgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbWl0
KSk7CiB9CiAKLXZvaWQgU2hhcmVkQml0bWFwOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJj
ZVNpemUpCit2b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBj
dHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9y
aWdTb3VyY2VTaXplKQogewogICAgIGlmICghbV9waXhlbHMpCiAgICAgICAgIHJldHVybjsKICAg
ICBjdHh0LT5kcmF3Qml0bWFwUGF0dGVybih0aGlzLCB0aWxlUmVjdEluLCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QsIG9yaWdTb3VyY2VTaXpl
KTsKIH0KIAotdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEhEQyBoZGMsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEludFNpemUmIG9yaWdTb3VyY2VTaXplKQordm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJu
KEhEQyBoZGMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKQogewog
ICAgIGlmICghbV9waXhlbHMpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMCw3ICs0MjAsNyBAQCB2
b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oSERDIGhkYywgCiAgICAgaW50IGJtcFdpZHRo
ID0gd2lkdGgoKTsKICAgICBpbnQgYm1wSGVpZ2h0ID0gaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFJl
Y3QgdGlsZVJlY3QodGlsZVJlY3RJbik7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0KHRpbGVS
ZWN0SW4pOwogICAgIGlmIChibXBXaWR0aCAhPSBvcmlnU291cmNlU2l6ZS53aWR0aCgpKSB7CiAg
ICAgICAgIGRvdWJsZSByYXRlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihibXBXaWR0aCkgLyBvcmln
U291cmNlU2l6ZS53aWR0aCgpOwogICAgICAgICBkb3VibGUgdGVtcCA9IHRpbGVSZWN0LndpZHRo
KCkgKiByYXRlOwpAQCAtNDQ2LDEyICs0NDYsMTIgQEAgdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQ
YXR0ZXJuKEhEQyBoZGMsIAogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRmID0gcGF0dGVyblRyYW5z
Zm9ybSAqIHRyYW5zZm9ybTsKIAotICAgIEZsb2F0UmVjdCB0clJlY3QgPSB0Zi5tYXBSZWN0KGRl
c3RSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgdHJSZWN0ID0gdGYubWFwUmVjdChkZXN0UmVjdCk7
CiAKICAgICBSRUNUIGNsaXBCb3g7CiAgICAgaW50IGNsaXBUeXBlID0gR2V0Q2xpcEJveChoZGMs
ICZjbGlwQm94KTsKICAgICBpZiAoY2xpcFR5cGUgPT0gU0lNUExFUkVHSU9OKQotICAgICAgICB0
clJlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdChjbGlwQm94LmxlZnQsIGNsaXBCb3gudG9wLCBjbGlw
Qm94LnJpZ2h0IC0gY2xpcEJveC5sZWZ0LCBjbGlwQm94LmJvdHRvbSAtIGNsaXBCb3gudG9wKSk7
CisgICAgICAgIHRyUmVjdC5pbnRlcnNlY3QoR3JhcGhpY3NSZWN0KGNsaXBCb3gubGVmdCwgY2xp
cEJveC50b3AsIGNsaXBCb3gucmlnaHQgLSBjbGlwQm94LmxlZnQsIGNsaXBCb3guYm90dG9tIC0g
Y2xpcEJveC50b3ApKTsKICAgICBlbHNlIGlmIChjbGlwVHlwZSA9PSBDT01QTEVYUkVHSU9OKSB7
CiAgICAgICAgIE93blB0cjxIUkdOPiBjbGlwUmduID0gYWRvcHRQdHIoQ3JlYXRlUmVjdFJnbigw
LCAwLCAwLCAwKSk7CiAgICAgICAgIGlmIChHZXRDbGlwUmduKGhkYywgY2xpcFJnbi5nZXQoKSkg
PiAwKSB7CkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJu
KEhEQyBoZGMsIAogICAgICAgICAgICAgICAgIEdldFJlZ2lvbkRhdGEoY2xpcFJnbi5nZXQoKSwg
cmVnaW9uRGF0YVNpemUsIHJlZ2lvbkRhdGEuZGF0YSgpKTsKICAgICAgICAgICAgICAgICBSRUNU
KiByZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxSRUNUKj4ocmVnaW9uRGF0YVswXS5CdWZmZXIpOwog
ICAgICAgICAgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCByZWdpb25EYXRhWzBdLnJkaC5u
Q291bnQ7ICsraSwgKytyZWN0KQotICAgICAgICAgICAgICAgICAgICB0clJlY3QuaW50ZXJzZWN0
KEZsb2F0UmVjdChyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7CisgICAgICAgICAgICAgICAgICAgIHRyUmVj
dC5pbnRlcnNlY3QoR3JhcGhpY3NSZWN0KHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmln
aHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NoYXJlZEJpdG1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQ7
CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnRS
ZWN0OwogY2xhc3MgSW50U2l6ZTsKQEAgLTgyLDExICs4MiwxMSBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxTaGFyZWRCaXRtYXA+IGNsaXBCaXRtYXAoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9v
bCB1c2VBbHBoYSk7CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApOwotICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgSW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0SW4sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
SW50U2l6ZSYgb3JpZ1NvdXJjZVNpemUpOwogICAgIHZvaWQgZHJhdyhIREMsIGNvbnN0IEludFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wKTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEhEQywgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXpl
KTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEhEQywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXpl
KTsKIAogICAgIGNsYXNzIERDUHJvdmlkZXIgewogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBs
ZUZvbnREYXRhV2luQ0UuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL1NpbXBsZUZvbnREYXRhV2luQ0UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2lt
cGxlRm9udERhdGEuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9ICEo
dG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfRklYRURfUElUQ0gpOwogfQogCi1GbG9hdFJlY3Qg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0CitHcmFw
aGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
KTsKIH0KICAgICAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9GbG9hdFJlY3RXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvRmxvYXRSZWN0V3guY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVjdFd4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmluIE9s
bGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi0jaW5jbHVkZSA8d3gvZGVmcy5oPgotI2luY2x1
ZGUgPHd4L2dyYXBoaWNzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShXWEdD
KQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qgd3hSZWN0MkREb3VibGUmIHIpCi0gICAgOiBt
X2xvY2F0aW9uKEZsb2F0UG9pbnQoci5tX3gsIHIubV95KSkKLSAgICAsIG1fc2l6ZShGbG9hdFNp
emUoci5tX3dpZHRoLCByLm1faGVpZ2h0KSkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciB3
eFJlY3QyRERvdWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHd4UmVjdDJERG91YmxlKHgoKSwg
eSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFd4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250V3guY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJ
ZGVvZ3JhcGhzSW5DbwogfQogCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKyAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQpIGNvbnN0CiB7CiAgICAgLy8gcHJlcGFyZSBEQwogICAgIENvbG9yIGNvbG9yID0gZ3Jh
cGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBGb250Ojpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZwogICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9y
ZSgpOwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBp
bnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICNpZiBPUyhXSU5ET1dTKSB8fCBPUyhE
QVJXSU4pCiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7CkBAIC05Niwx
NyArOTYsMTcgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogI2lm
IE9TKFdJTkRPV1MpCiAgICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpKTsKICAgICAgICAg
ZmxvYXQgdG90YWxXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdChwb2ludC54KCkgKyBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBwb2lu
dC55KCksIHJvdW5kZih0b3RhbFdpZHRoIC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHRvdGFsV2lk
dGggLSBhZnRlcldpZHRoKSwgaCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQu
eCgpICsgZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYo
dG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0
aCksIGgpOwogI2Vsc2UKICAgICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGl0LnRvdGFsV2lkdGgo
KTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9vcmYodG90YWxXaWR0
aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZih0b3RhbFdpZHRoIC0gYmVmb3JlV2lk
dGgpIC0gZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgaCk7CisgICAgICAgIHJldHVy
biBHcmFwaGljc1JlY3QocG9pbnQueCgpICsgZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRo
KSwgcG9pbnQueSgpLCByb3VuZGYodG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZih0
b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOwogI2VuZGlmCiAgICAgfSAKICAgICAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZsb29yZihiZWZvcmVXaWR0aCksIHBvaW50Lnko
KSwgcm91bmRmKGFmdGVyV2lkdGgpIC0gZmxvb3JmKGJlZm9yZVdpZHRoKSwgaCk7CisgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdChwb2ludC54KCkgKyBmbG9vcmYoYmVmb3JlV2lkdGgpLCBwb2ludC55
KCksIHJvdW5kZihhZnRlcldpZHRoKSAtIGZsb29yZihiZWZvcmVXaWR0aCksIGgpOwogI2Vsc2UK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiAjZW5kaWYKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIGZsb2F0
IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGwKICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAogewogI2lmIE9TKFdJTkRPV1MpIHx8IE9TKERBUldJTikKICAg
ICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250
IGRhdGEgZm9yIGVhY2ggZ2x5cGguCkBAIC0xNDksMTQgKzE0OSwxNCBAQCB2b2lkIEZvbnQ6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgICAgIHN0YXJ0WCArPSBiZWZvcmVXaWR0
aDsKIAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBv
aW50IHJldHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRY
LCBwb2ludC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50
LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0
YXJ0UG9pbnQpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2VuZGlmCiB9CiAKLXZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9u
dDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZv
clRleHRFbXBoYXNpcyk7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBGb250OjpkcmF3RW1waGFz
aXNNYXJrc0ZvckNvbXBsZXhUZQogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhC
dWZmZXIsIG1hcmssIEZsb2F0UG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50
LnkoKSkpOworICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIs
IG1hcmssIEdyYXBoaWNzUG9pbnQocG9pbnQueCgpICsgaW5pdGlhbEFkdmFuY2UsIHBvaW50Lnko
KSkpOwogfQogCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMs
IEdseXBoT3ZlcmZsb3cqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvR3JhZGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvR3JhZGllbnRXeC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhZGllbnRXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVudDo6cGxhdGZv
cm1HcmFkaQogICAgIHJldHVybiAwOwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC0xMTIsNyArMTEyLDcgQEAg
cHVibGljOgogICAgIHd4V2luZG93REMqIGNvbnRleHQ7CiAjZW5kaWYKICAgICBpbnQgbXN3RENT
dGF0ZUlEOwotICAgIEZsb2F0U2l6ZSBjdXJyZW50U2NhbGU7CisgICAgR3JhcGhpY3NTaXplIGN1
cnJlbnRTY2FsZTsKICAgICB3eFJlZ2lvbiBndGtDdXJyZW50Q2xpcFJnbjsKICAgICB3eFJlZ2lv
biBndGtQYWludENsaXBSZ247CiB9OwpAQCAtMjMwLDggKzIzMCw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZShjb25zdCBJbnQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwotICAgIEZsb2F0
UG9pbnQgcDIgPSBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCBwMSA9IHBvaW50MTsKKyAgICBH
cmFwaGljc1BvaW50IHAyID0gcG9pbnQyOwogICAgIAogICAgIHNhdmUoKTsKICAgICBtX2RhdGEt
PmNvbnRleHQtPlNldFBlbih3eFBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwg
c3Ryb2tlU3R5bGVUb1d4UGVuU3R5bGUoc3Ryb2tlU3R5bGUoKSkpKTsKQEAgLTI2Miw3ICsyNjIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAgICAgcmVzdG9y
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90
IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMs
IGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgwLDcgKzI4
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICByZXN0
b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXpl
X3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50
cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQogewogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5MSw3ICsyOTEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMzMsNyArMzMzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsK
ICAgICBtX2RhdGEtPmNvbnRleHQtPlNldENsaXBwaW5nUmVnaW9uKHIueCgpLCByLnkoKSwgci53
aWR0aCgpLCByLmhlaWdodCgpKTsKIH0KQEAgLTQwNywxOSArNDA3LDE5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXQKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQg
d2lkdGgsIGJvb2wgcHJpbnRpbmcpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRp
bmcpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2F2ZSgpOwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBGbG9hdFNpemUo
d2lkdGgsIDApOworICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBHcmFwaGlj
c1NpemUod2lkdGgsIDApOwogICAgIG1fZGF0YS0+Y29udGV4dC0+U2V0UGVuKHd4UGVuKHN0cm9r
ZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCB3eFNPTElEKSk7CiAgICAgbV9kYXRhLT5jb250
ZXh0LT5EcmF3TGluZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpLCBlbmRQb2ludC54KCksIGVuZFBv
aW50LnkoKSk7CiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0
aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQg
d2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKIHsKICAgICBzd2l0Y2ggKHN0eWxl
KSB7CiAgICAgY2FzZSBUZXh0Q2hlY2tpbmdTcGVsbGluZ0xpbmVTdHlsZToKQEAgLTQ4Niw3ICs0
ODYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlCiAjZW5kaWYK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUp
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2NhbGUp
IAogewogI2lmIFVTRShXWEdDKQogICAgIGlmIChtX2RhdGEtPmNvbnRleHQpIHsKQEAgLTQ5Nywx
MyArNDk3LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFMKICNl
bmRpZgogfQogCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50U2NhbGUoKQorR3Jh
cGhpY3NTaXplIEdyYXBoaWNzQ29udGV4dDo6Y3VycmVudFNjYWxlKCkKIHsKICAgICByZXR1cm4g
bV9kYXRhLT5jdXJyZW50U2NhbGU7CiB9Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJlY3QsIFJvdW5kaW5nTW9kZSkKK0dy
YXBoaWNzUmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgR3Jh
cGhpY3NSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQogewotICAgIEZsb2F0UmVjdCByZXN1bHQ7
CisgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKIAogICAgIHd4Q29vcmQgeCA9ICh3eENvb3JkKWZy
ZWN0LngoKTsKICAgICB3eENvb3JkIHkgPSAod3hDb29yZClmcmVjdC55KCk7CkBAIC02MjYsMTMg
KzYyNiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAjZW5k
aWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coRmxvYXRTaXplIGNv
bnN0JiwgZmxvYXQsIENvbG9yIGNvbnN0JiwgQ29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhHcmFwaGljc1NpemUgY29uc3QmLCBmbG9hdCwgQ29sb3Ig
Y29uc3QmLCBDb2xvclNwYWNlKQogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOyAKIH0KQEAgLTY1
MiwxMiArNjUyLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXkK
ICAgICBub3RJbXBsZW1lbnRlZCgpOyAKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKSAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qo
Y29uc3QgR3JhcGhpY3NSZWN0JikgCiB7IAogICAgIG5vdEltcGxlbWVudGVkKCk7IAogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGZs
b2F0KQogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOyAKIH0KQEAgLTY5Miw3ICs2OTIsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHJlY3Qocik7Cisg
ICAgR3JhcGhpY3NSZWN0IHJlY3Qocik7CiAgICAgY2xpcChyZWN0KTsKICAgICBQYXRoIHBhdGg7
CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NSZWN0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzUmVjdFd4LmNwcAkocmV2aXNpb24g
OTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVj
dFd4LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dy
YXBoaWNzUmVjdFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEtldmluIE9sbGl2aWVyLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCisj
aW5jbHVkZSA8d3gvZGVmcy5oPgorI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIFVTRShXWEdDKQorRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qg
d3hSZWN0MkREb3VibGUmIHIpCisgICAgOiBtX2xvY2F0aW9uKEZsb2F0UG9pbnQoci5tX3gsIHIu
bV95KSkKKyAgICAsIG1fc2l6ZShGbG9hdFNpemUoci5tX3dpZHRoLCByLm1faGVpZ2h0KSkKK3sK
K30KKworRmxvYXRSZWN0OjpvcGVyYXRvciB3eFJlY3QyRERvdWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHd4UmVjdDJERG91YmxlKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9Cisj
ZW5kaWYKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3Jh
cGhpY3NSZWN0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0dyYXBoaWNzUmVjdFd4LmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc1JlY3RXeC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAKICNpbmNsdWRl
IDx3eC9kZWZzLmg+CiAjaW5jbHVkZSA8d3gvZ3JhcGhpY3MuaD4KQEAgLTMyLDEzICszMiwxMyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKFdYR0MpCi1GbG9hdFJlY3Q6OkZsb2F0
UmVjdChjb25zdCB3eFJlY3QyRERvdWJsZSYgcikKLSAgICA6IG1fbG9jYXRpb24oRmxvYXRQb2lu
dChyLm1feCwgci5tX3kpKQotICAgICwgbV9zaXplKEZsb2F0U2l6ZShyLm1fd2lkdGgsIHIubV9o
ZWlnaHQpKQorR3JhcGhpY3NSZWN0OjpHcmFwaGljc1JlY3QoY29uc3Qgd3hSZWN0MkREb3VibGUm
IHIpCisgICAgOiBtX2xvY2F0aW9uKEdyYXBoaWNzUG9pbnQoci5tX3gsIHIubV95KSkKKyAgICAs
IG1fc2l6ZShHcmFwaGljc1NpemUoci5tX3dpZHRoLCByLm1faGVpZ2h0KSkKIHsKIH0KIAotRmxv
YXRSZWN0OjpvcGVyYXRvciB3eFJlY3QyRERvdWJsZSgpIGNvbnN0CitHcmFwaGljc1JlY3Q6Om9w
ZXJhdG9yIHd4UmVjdDJERG91YmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gd3hSZWN0MkREb3Vi
bGUoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdl
QnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwyMCArOTksMjAgQEAgUGFzc1JlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZQogICAgIHJldHVybiAwOwogfQogCi12b2lk
IEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0Cit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBo
aWNzUmVjdCYpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdl
KGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3As
IHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQor
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoKTsKICAgICBpbWFnZUNvcHktPmRyYXdQYXR0ZXJuKGNv
bnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkZXN0UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbWFnZVd4LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEo
KQogCiAvLyBEcmF3aW5nIFJvdXRpbmVzCiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3Zv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fc291cmNlLmluaXRp
YWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNCwxMiArMTI0LDEyIEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBmbG9hdCBzY2FsZVggPSBzcmMu
d2lkdGgoKSAvIGRzdC53aWR0aCgpOwogICAgIGZsb2F0IHNjYWxlWSA9IHNyYy5oZWlnaHQoKSAv
IGRzdC5oZWlnaHQoKTsKIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZHN0Owot
ICAgIEZsb2F0U2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKKyAgICBHcmFwaGlj
c1JlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRzdDsKKyAgICBHcmFwaGljc1NpemUgc2VsZlNpemUg
PSBjdXJyZW50RnJhbWVTaXplKCk7CiAgICAgCiAgICAgaWYgKHNyYy5zaXplKCkgIT0gc2VsZlNp
emUpIHsKLSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGRz
dC54KCkgLSBzcmMueCgpIC8gc2NhbGVYLCBkc3QueSgpIC0gc3JjLnkoKSAvIHNjYWxlWSkpOwot
ICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoRmxvYXRTaXplKHNlbGZTaXplLndpZHRo
KCkgLyBzY2FsZVgsIHNlbGZTaXplLmhlaWdodCgpIC8gc2NhbGVZKSk7CisgICAgICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oR3JhcGhpY3NQb2ludChkc3QueCgpIC0gc3JjLngoKSAv
IHNjYWxlWCwgZHN0LnkoKSAtIHNyYy55KCkgLyBzY2FsZVkpKTsKKyAgICAgICAgYWRqdXN0ZWRE
ZXN0UmVjdC5zZXRTaXplKEdyYXBoaWNzU2l6ZShzZWxmU2l6ZS53aWR0aCgpIC8gc2NhbGVYLCBz
ZWxmU2l6ZS5oZWlnaHQoKSAvIHNjYWxlWSkpOwogICAgIH0KIAogICAgIGdjLT5DbGlwKGRzdC54
KCksIGRzdC55KCksIGRzdC53aWR0aCgpLCBkc3QuaGVpZ2h0KCkpOwpAQCAtMTc3LDcgKzE3Nyw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgb2Jz
ZXJ2ZXItPmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQordm9p
ZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QpCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgd3hH
Q0RDKiBjb250ZXh0ID0gKHd4R0NEQyopY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRoV3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1BhdGhXeC5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIlBhdGguaCIK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIiAK
QEAgLTc1LDcgKzc1LDcgQEAgUGF0aDo6UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIG1fcGF0
aCA9IG5ldyB3eEdyYXBoaWNzUGF0aCgqcGF0aC5tX3BhdGgpOwogfQogCi1ib29sIFBhdGg6OmNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBXaW5kUnVsZSBydWxlKSBjb25z
dAorYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgY29uc3Qg
V2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKSB7
CkBAIC04OSwxMiArODksMTIgQEAgYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwbwogICAgIHJldHVybiBmYWxzZTsgCiB9CiAKLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0
IEZsb2F0U2l6ZSYpCit2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmKQog
eyAKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdS
ZWN0KCkgY29uc3QgCitHcmFwaGljc1JlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QgCiB7
IAogI2lmIFVTRShXWEdDKQogICAgIGlmIChtX3BhdGgpIHsKQEAgLTEwMiwxNiArMTAyLDE2IEBA
IEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdCAKICAgICB9CiAjZW5kaWYKIAot
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAK
LUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBh
cHBsaWVyKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJv
a2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQog
Ci1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdAorYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFw
cGxpZXIqLCBjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFBhdGg6OmNs
ZWFyKCkgCiAjZW5kaWYKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIAordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIAog
ewogI2lmIFVTRShXWEdDKQogICAgIGlmIChtX3BhdGgpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9p
ZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbgogI2VuZGlmCiB9CiAKLXZvaWQg
UGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSAKK3ZvaWQgUGF0aDo6YWRk
TGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSAKIHsKICNpZiBVU0UoV1hHQykKICAg
ICBpZiAobV9wYXRoKQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIHAKICNlbmRpZgogfQogCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2wsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkgCit2b2lk
IFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2wsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGVuZCkgCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0aCkK
QEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0
UG9pCiAjZW5kaWYKIH0KIAotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIGNvbnRyb2wxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sMiwgY29uc3QgRmxvYXRQ
b2ludCYgZW5kKSAKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiBjb250cm9sMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbDIsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGVuZCkgCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0aCkKQEAgLTE2
OSw3ICsxNjksNyBAQCB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQCiAj
ZW5kaWYKIH0KIAotdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgZmxvYXQgcmFkaXVzKSAKK3ZvaWQgUGF0aDo6YWRk
QXJjVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludDIsIGZsb2F0IHJhZGl1cykgCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0aCkK
QEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpIAogI2VuZGlmCiB9
CiAKLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCByYWRp
dXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGNsb2Nrd2lzZSkgCit2
b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgZmxvYXQgcmFkaXVz
LCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBjbG9ja3dpc2UpIAogewog
I2lmIFVTRShXWEdDKQogICAgIGlmIChtX3BhdGgpCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBQ
YXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcG9pbgogI2VuZGlmCiB9CiAKLXZvaWQgUGF0
aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIAordm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0
aCkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0CiAjZW5kaWYKIH0KIAotdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKQpAQCAtMjM5LDExICsyMzksMTEg
QEAgYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0
eSgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhp
Y3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICAvLyBGSVhNRTogcmV0
dXJuIGN1cnJlbnQgcG9pbnQgb2Ygc3VicGF0aC4KICAgICBmbG9hdCBxdWlldE5hTiA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gRmxvYXRQb2lu
dChxdWlldE5hTiwgcXVpZXROYU4pOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHF1aWV0TmFO
LCBxdWlldE5hTik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRh
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiU2ltcGxl
Rm9udERhdGEuaCIKIAogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y2hh
ci5oPgpAQCAtMTM3LDkgKzEzNyw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKICAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwogfQogCi1GbG9hdFJl
Y3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0CitH
cmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsKIH0KIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4V3guY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5z
Zm9ybWF0aW9uTWF0cml4V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgIkFzc2VydGlvbnMu
aCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAKICNpbmNsdWRlIDxzdGRpby5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVm
IGltYWdlKQogICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwogfQogCi1EcmFn
SW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUgc2Nh
bGUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBHcmFw
aGljc1NpemUgc2NhbGUpCiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0
ay5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtU2NyZWVuR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDEwIEBAIHN0
YXRpYyBHZGtTY3JlZW4qIGdldFNjcmVlbihHdGtXaWRnZXQqIHcKICAgICByZXR1cm4gZ3RrX3dp
ZGdldF9oYXNfc2NyZWVuKHdpZGdldCkgPyBndGtfd2lkZ2V0X2dldF9zY3JlZW4od2lkZ2V0KSA6
IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lk
Z2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9IEdUS19X
SURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkp
OwogICAgIGlmIChjb250YWluZXIpCkBAIC0xMDYsMjUgKzEwNiwyNSBAQCBGbG9hdFJlY3Qgc2Ny
ZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIAogICAgIEdka1NjcmVlbiogc2NyZWVuID0gY29udGFp
bmVyID8gZ2V0U2NyZWVuKGNvbnRhaW5lcikgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CiAg
ICAgaWYgKCFzY3JlZW4pCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgZ2ludCBtb25pdG9yID0gY29udGFpbmVyID8gZ2Rr
X3NjcmVlbl9nZXRfbW9uaXRvcl9hdF93aW5kb3coc2NyZWVuLCBndGtfd2lkZ2V0X2dldF93aW5k
b3coY29udGFpbmVyKSkgOiAwOwogCiAgICAgR2RrUmVjdGFuZ2xlIGdlb21ldHJ5OwogICAgIGdk
a19zY3JlZW5fZ2V0X21vbml0b3JfZ2VvbWV0cnkoc2NyZWVuLCBtb25pdG9yLCAmZ2VvbWV0cnkp
OwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRy
eS53aWR0aCwgZ2VvbWV0cnkuaGVpZ2h0KTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGdlb21l
dHJ5LngsIGdlb21ldHJ5LnksIGdlb21ldHJ5LndpZHRoLCBnZW9tZXRyeS5oZWlnaHQpOwogfQog
Ci1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK0dyYXBoaWNz
UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIGlmICghd2lk
Z2V0KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIAogI2lmIFBMQVRGT1JNKFgxMSkKICAgICBHdGtXaWRnZXQqIGNvbnRhaW5lciA9
IEdUS19XSURHRVQod2lkZ2V0LT5yb290KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xp
ZW50KCkpOwogICAgIGlmICghY29udGFpbmVyKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIGlmICghZ3RrX3dpZGdldF9n
ZXRfcmVhbGl6ZWQoY29udGFpbmVyKSkKICAgICAgICAgcmV0dXJuIHNjcmVlblJlY3Qod2lkZ2V0
KTsKQEAgLTE0MSw5ICsxNDEsOSBAQCBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRn
ZXQqIHdpCiAgICAgaW50IHhSZXMgPSBYR2V0V2luZG93UHJvcGVydHkoR0RLX0RJU1BMQVlfWERJ
U1BMQVkoZGlzcGxheSksIEdES19XSU5ET1dfWFdJTkRPVyhyb290V2luZG93KSwgeHByb3BlcnR5
LAogICAgICAgICAwLCA0LCBGQUxTRSwgWEFfQ0FSRElOQUwsICZyZXRUeXBlLCAmcmV0Rm9ybWF0
LCAmcmV0Tkl0ZW1zLCAmcmV0QWZ0ZXIsIChndWNoYXIqKikmd29ya0FyZWFQb3MpOwogCi0gICAg
RmxvYXRSZWN0IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHJlY3Q7CiAgICAgaWYgKHhSZXMgPT0g
U3VjY2VzcyAmJiB3b3JrQXJlYVBvcyAhPSBOVUxMICYmIHJldFR5cGUgPT0gWEFfQ0FSRElOQUwg
JiYgcmV0Tkl0ZW1zID09IDQgJiYgcmV0Rm9ybWF0ID09IDMyKSB7Ci0gICAgICAgIHJlY3QgPSBG
bG9hdFJlY3Qod29ya0FyZWFQb3NbMF0sIHdvcmtBcmVhUG9zWzFdLCB3b3JrQXJlYVBvc1syXSwg
d29ya0FyZWFQb3NbM10pOworICAgICAgICByZWN0ID0gR3JhcGhpY3NSZWN0KHdvcmtBcmVhUG9z
WzBdLCB3b3JrQXJlYVBvc1sxXSwgd29ya0FyZWFQb3NbMl0sIHdvcmtBcmVhUG9zWzNdKTsKICAg
ICAgICAgLy8gcmVjdCBjb250YWlucyB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSB3aG9sZSBz
Y3JlZW4gbm90IGp1c3QgaW4gdGhlIG1vbml0b3IKICAgICAgICAgLy8gY29udGFpbmluZyB0aGUg
d2lkZ2V0LCBzbyB3ZSBpbnRlcnNlY3QgaXQgd2l0aCB0aGUgbW9uaXRvciByZWN0YW5nbGUuCiAg
ICAgICAgIHJlY3QuaW50ZXJzZWN0KHNjcmVlblJlY3Qod2lkZ2V0KSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVudUxpc3QoUmVuZGUKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYXJy
b3dTdHlsZUNvbnRleHQsICJhcnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgTlVMTCk7CiAK
ICAgICBJbnRTaXplIGFycm93U2l6ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWlnaHQoKSk7
Ci0gICAgRmxvYXRQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigpKTsKKyAg
ICBHcmFwaGljc1BvaW50IGFycm93UG9zaXRpb24oaW5uZXJSZWN0LmxvY2F0aW9uKCkpOwogICAg
IGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKICAgICAgICAgYXJyb3dQb3NpdGlv
bi5tb3ZlKGlubmVyUmVjdC53aWR0aCgpIC0gYXJyb3dTaXplLndpZHRoKCksIDApOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDcgKzQ5NCw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmUKICAgICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgp
ICsgKHJlY3Qud2lkdGgoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAogICAgICAgICAgICAgICAg
ICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAog
ICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUljb25TaXplLCBtX21lZGlhSWNvblNpemUpOwot
ICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9wYW5lbENvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QocmVj
dCksIG1fcGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRHZGtQaXhi
dWYoY29udGV4dCwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTUzNyw4ICs1MzcsOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVy
VHJhCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
CiAKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QociksIG1fcGFuZWxDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KEludFJl
Y3Qoci54KCksIHIueSgpICsgKHIuaGVpZ2h0KCkgLSBtX21lZGlhU2xpZGVySGVpZ2h0KSAvIDIs
CisgICAgY29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KHIpLCBtX3BhbmVsQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChJ
bnRSZWN0KHIueCgpLCByLnkoKSArIChyLmhlaWdodCgpIC0gbV9tZWRpYVNsaWRlckhlaWdodCkg
LyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSwg
bV9tZWRpYVNsaWRlckhlaWdodCkpLCBtX3NsaWRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG8tPnN0eWxlKCk7CkBAIC02MDMsNyArNjAz
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodQogYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICBjb250
ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIG1fcGFuZWxDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpLCBtX3Bh
bmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtNjI2LDcgKzYyNiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50
VGkKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsK
IAotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9wYW5lbENvbG9yLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3Qo
cmVjdCksIG1fcGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
YmFyVGhlbWVHdGszLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGszLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50QnV0dG9uKEdy
YXAKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUobV9jb250ZXh0LCAiYXJyb3ctc2Nh
bGluZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOwogCiAgICAgZG91YmxlIGFycm93U2l6ZSA9IHN0
ZDo6bWluKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkgKiBhcnJvd1NjYWxpbmc7Ci0gICAg
RmxvYXRQb2ludCBhcnJvd1BvaW50KHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGFycm93U2l6
ZSkgLyAyLAorICAgIEdyYXBoaWNzUG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSArIChyZWN0Lndp
ZHRoKCkgLSBhcnJvd1NpemUpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55
KCkgKyAocmVjdC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyKTsKIAogICAgIGlmIChmbGFncyAm
IEdUS19TVEFURV9GTEFHX0FDVElWRSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShE
cmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFn
ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSkKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiBpbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L1NjcmVlbkhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgiCiAKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
QEAgLTQxLDE0ICs0MSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCopCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKQogewog
ICAgIEJTY3JlZW4gc2NyZWVuOwogICAgIC8vIEZJWE1FOiBXZSBhc3N1bWUgdGhpcyBzY3JlZW4g
aXMgdmFsaWQKLSAgICByZXR1cm4gRmxvYXRSZWN0KHNjcmVlbi5GcmFtZSgpKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KHNjcmVlbi5GcmFtZSgpKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2
YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxl
UmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICAvLyBGSVhNRTogV2UgY291bGQgdXNlIHRoZSBn
ZXRfZGVza2Jhcl9mcmFtZSgpIGZ1bmN0aW9uCiAgICAgLy8gZnJvbSBJbnRlcmZhY2VEZWZzLmgg
dG8gbWFrZSB0aGlzIHNtYWxsZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9E
cmFnSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0RyYWdJbWFnZU1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBA
IHZvaWQgZGVsZXRlRHJhZ0ltYWdlKFJldGFpblB0cjxOU0ltYWdlPikKICAgICAvLyBkZWxldGUg
aXQuIEl0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiBpdCBmYWxscyBvdXQgb2Ygc2NvcGUuCiB9CiAK
LVJldGFpblB0cjxOU0ltYWdlPiBzY2FsZURyYWdJbWFnZShSZXRhaW5QdHI8TlNJbWFnZT4gaW1h
Z2UsIEZsb2F0U2l6ZSBzY2FsZSkKK1JldGFpblB0cjxOU0ltYWdlPiBzY2FsZURyYWdJbWFnZShS
ZXRhaW5QdHI8TlNJbWFnZT4gaW1hZ2UsIEdyYXBoaWNzU2l6ZSBzY2FsZSkKIHsKICAgICBOU1Np
emUgb3JpZ2luYWxTaXplID0gW2ltYWdlLmdldCgpIHNpemVdOwogICAgIE5TU2l6ZSBuZXdTaXpl
ID0gTlNNYWtlU2l6ZSgob3JpZ2luYWxTaXplLndpZHRoICogc2NhbGUud2lkdGgoKSksIChvcmln
aW5hbFNpemUuaGVpZ2h0ICogc2NhbGUuaGVpZ2h0KCkpKTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3QXRQb2ludChOU1N0cmluZyAqc3RyaW5nCiAgICAgICAgIFtbdGV4dENv
bG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdIGdldFJl
ZDomcmVkIGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZhbHBoYV07CiAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVJHQkEocmVkICogMjU1LCBncmVlbiAqIDI1
NSwgYmx1ZSAqIDI1NSwgYWxwaGEgKiAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAg
ICAgCi0gICAgICAgIHdlYkNvcmVGb250LmRyYXdUZXh0KCZncmFwaGljc0NvbnRleHQsIHJ1biwg
RmxvYXRQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50LnkgOiAoLTEgKiBwb2ludC55KSkp
KTsKKyAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQoJmdyYXBoaWNzQ29udGV4dCwgcnVuLCBH
cmFwaGljc1BvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9pbnQueSA6ICgtMSAqIHBvaW50Lnkp
KSkpOwogICAgICAgICAKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAgICAgICAgICAgQ0dDb250
ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQ
bGF0Zm9ybVNjcmVlbi5oIgogCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkdyYXBo
aWNzUmVjdC5oIgogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2lt
cG9ydCAiUGFnZS5oIgpAQCAtNTEsMTMgKzUxLDEzIEBAIGJvb2wgc2NyZWVuSXNNb25vY2hyb21l
KFdpZGdldCopCiAvLyBUaGVzZSBmdW5jdGlvbnMgc2NhbGUgYmV0d2VlbiBzY3JlZW4gYW5kIHBh
Z2UgY29vcmRpbmF0ZXMgYmVjYXVzZSBKYXZhU2NyaXB0L0RPTSBvcGVyYXRpb25zIAogLy8gYXNz
dW1lIHRoYXQgdGhlIHNjcmVlbiBhbmQgdGhlIHBhZ2Ugc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0
ZSBzeXN0ZW0uCiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhp
Y3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgTlNXaW5kb3cgKndpbmRv
dyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSA6IG5pbDsKICAg
ICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbkZvcldpbmRvdyh3aW5kb3cpIGZyYW1lXSwgd2lu
ZG93KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQp
CitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAg
ICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSB3
aW5kb3ddIDogbmlsOwogICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVuRm9yV2luZG93KHdp
bmRvdykgdmlzaWJsZUZyYW1lXSwgd2luZG93KTsKQEAgLTg1LDE4ICs4NSwxOCBAQCBzdGF0aWMg
Q0dGbG9hdCB3aW5kb3dTY2FsZUZhY3RvcihOU1dpbmRvCiAjZW5kaWYKIH0KIAotRmxvYXRSZWN0
IHRvVXNlclNwYWNlKGNvbnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKQor
R3JhcGhpY3NSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRl
c3RpbmF0aW9uKQogewotICAgIEZsb2F0UmVjdCB1c2VyUmVjdCA9IHJlY3Q7CisgICAgR3JhcGhp
Y3NSZWN0IHVzZXJSZWN0ID0gcmVjdDsKICAgICB1c2VyUmVjdC5zZXRZKE5TTWF4WShbc2NyZWVu
Rm9yV2luZG93KGRlc3RpbmF0aW9uKSBmcmFtZV0pIC0gKHVzZXJSZWN0LnkoKSArIHVzZXJSZWN0
LmhlaWdodCgpKSk7IC8vIGZsaXAKICAgICBpZiAoZGVzdGluYXRpb24pCiAgICAgICAgIHVzZXJS
ZWN0LnNjYWxlKDEgLyB3aW5kb3dTY2FsZUZhY3RvcihkZXN0aW5hdGlvbikpOyAvLyBzY2FsZSBk
b3duCiAgICAgcmV0dXJuIHVzZXJSZWN0OwogfQogCi1OU1JlY3QgdG9EZXZpY2VTcGFjZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCitOU1JlY3QgdG9EZXZpY2VTcGFj
ZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCiB7Ci0gICAgRmxv
YXRSZWN0IGRldmljZVJlY3QgPSByZWN0OworICAgIEdyYXBoaWNzUmVjdCBkZXZpY2VSZWN0ID0g
cmVjdDsKICAgICBpZiAoc291cmNlKQogICAgICAgICBkZXZpY2VSZWN0LnNjYWxlKHdpbmRvd1Nj
YWxlRmFjdG9yKHNvdXJjZSkpOyAvLyBzY2FsZSB1cAogICAgIGRldmljZVJlY3Quc2V0WShOU01h
eFkoW3NjcmVlbkZvcldpbmRvdyhzb3VyY2UpIGZyYW1lXSkgLSAoZGV2aWNlUmVjdC55KCkgKyBk
ZXZpY2VSZWN0LmhlaWdodCgpKSk7IC8vIGZsaXAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKICNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1NpemUuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBm
bG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKIAogI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmKTsKQEAgLTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwogCi0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxU
b1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKKyAgICB2b2lkIGltbWVkaWF0
ZVNjcm9sbFRvUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pOwogICAgIHZv
aWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsKICAgICB2b2lkIGltbWVk
aWF0ZVNjcm9sbEJ5RGVsdGFZKGZsb2F0IGRlbHRhWSk7CiAKLSAgICB2b2lkIGltbWVkaWF0ZVNj
cm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRp
b24pOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihj
b25zdCBHcmFwaGljc1BvaW50JiBuZXdQb3NpdGlvbik7CiAKICAgICB2b2lkIHNldElzRHJhd2lu
Z0ludG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQogICAgIGJvb2wg
aXNEcmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xheWVyOyB9
CkBAIC0xMzEsNyArMTMxLDcgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0IGFkanVzdFNjcm9sbFhQ
b3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0KSBjb25zdDsKICAgICBmbG9hdCBhZGp1c3RTY3JvbGxZ
UG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBhZGp1c3RT
Y3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBH
cmFwaGljc1BvaW50IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgR3JhcGhp
Y3NQb2ludCYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGJvb2wg
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkgY29uc3Q7CkBAIC0xNTIsMTUgKzE1MiwxNSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJTd2l0
Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW47CiAgICAgCiAgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9s
YXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YTsKLSAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRT
aXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKyAgICBHcmFwaGljc1NpemUgbV9vdmVyZmxvd1Njcm9s
bERlbHRhOworICAgIEdyYXBoaWNzU2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKKyAgICBHcmFw
aGljc1NpemUgbV9tb21lbnR1bVZlbG9jaXR5OwogCiAgICAgLy8gUnViYmVyIGJhbmQgc3RhdGUu
CiAgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7Ci0gICAgRmxvYXRTaXplIG1fc3RhcnRT
dHJldGNoOwotICAgIEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOwotICAgIEZsb2F0U2l6ZSBtX29y
aWdWZWxvY2l0eTsKKyAgICBHcmFwaGljc1NpemUgbV9zdGFydFN0cmV0Y2g7CisgICAgR3JhcGhp
Y3NQb2ludCBtX29yaWdPcmlnaW47CisgICAgR3JhcGhpY3NTaXplIG1fb3JpZ1ZlbG9jaXR5Owog
ICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yTWFjPiBtX3NuYXBSdWJiZXJCYW5kVGltZXI7CiAjZW5k
aWYKICAgICBib29sIG1fZHJhd2luZ0ludG9MYXllcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvck1h
Yy5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKQEAgLTkwLDcgKzkwLDcgQEAg
LSAoTlNSZWN0KWJvdW5kcwogICAgIGlmICghX2FuaW1hdG9yKQogICAgICAgICByZXR1cm4gTlNa
ZXJvUmVjdDsKIAotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uID0gX2Fu
aW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1BvaW50IGN1
cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7CiAgICAgcmV0dXJu
IE5TTWFrZVJlY3QoY3VycmVudFBvc2l0aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwg
MCk7CiB9CiAKQEAgLTUxNiw3ICs1MTYsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3Jv
bGwoU2Nyb2xsYmFyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZz
ZXQpCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oY29uc3QgR3JhcGhpY3NQb2ludCYgb2Zmc2V0KQogewogICAgIFttX3Njcm9sbEFuaW1hdGlv
bkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07CiAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChvZmZz
ZXQpOwpAQCAtNTM4LDcgKzUzOCw3IEBAIGZsb2F0IFNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RT
Y3JvbGxZUG8KICAgICByZXR1cm4gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLCBtX3Nj
cm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEt
PnZpc2libGVIZWlnaHQoKSksIDApOwogfQogCi1GbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yTWFj
OjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uKSBjb25zdAorR3JhcGhpY3NQb2ludCBTY3JvbGxBbmltYXRvck1hYzo6YWRqdXN0U2Nyb2xs
UG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBHcmFwaGljc1BvaW50JiBwb3NpdGlvbikgY29uc3QK
IHsKICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKQEAgLTU0NiwxMiArNTQ2LDEyIEBA
IEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmFkanVzdFNjcm8KICAgICBmbG9hdCBuZXdY
ID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJlYS0+
Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgp
KSwgMCk7CiAgICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi55
KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxh
YmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKLSAgICByZXR1cm4gRmxvYXRQb2ludChu
ZXdYLCBuZXdZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChuZXdYLCBuZXdZKTsKIH0KIAot
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9h
dFBvaW50JiBuZXdQb3NpdGlvbikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pCiB7Ci0gICAgRmxv
YXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2Fy
eShuZXdQb3NpdGlvbik7CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRq
dXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CiAgCiAgICAgaWYgKGFk
anVzdGVkUG9zaXRpb24ueCgpID09IG1fY3VycmVudFBvc1ggJiYgYWRqdXN0ZWRQb3NpdGlvbi55
KCkgPT0gbV9jdXJyZW50UG9zWSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTgzLDcgKzU4Myw3IEBA
IHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEIKICAgICBub3RpdHlQb3Np
dGlvbkNoYW5nZWQoKTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Ny
b2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlv
bikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3Jv
bGxBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pCiB7CiAgICAgQVNT
RVJUKG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyKTsKICAgICBDR0Zsb2F0IHByb2dyZXNzID0gW21f
c2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9wcm9ncmVzc107CkBAIC04NjUsNyArODY1LDcg
QEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aGFuZGxlR2VzdHVyZUV2ZQogCiBib29sIFNjcm9s
bEFuaW1hdG9yTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRh
WSkKIHsKLSAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKKyAgICBHcmFwaGljc1NpemUgbGltaXRE
ZWx0YTsKICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CiAgICAgICAg
IGlmIChkZWx0YVkgPCAwKSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9s
bCB1cC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgdG9wCkBAIC05MzMsNyAr
OTMzLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c21vb3RoU2Nyb2xsV2l0aAogICAgIGZs
b2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsKIAogICAgIC8vIFJl
c2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRh
IGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4KLSAgICBtX292ZXJm
bG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEg
PSBHcmFwaGljc1NpemUoKTsKIAogICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdo
ZWVsRXZlbnQuZGVsdGFYKCk7CiAgICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hl
ZWxFdmVudC5kZWx0YVkoKTsKQEAgLTk3MCw3ICs5NzAsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpzbW9vdGhTY3JvbGxXaXRoCiAgICAgICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRp
bWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0
YW1wKCk7Ci0gICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAg
ICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgewpAQCAtMTA2MCw5ICsxMDYw
LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c21vb3RoU2Nyb2xsV2l0aAogICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lk
dGgoKSArIGRlbHRhWCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWln
aHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOwogCi0gICAgICAgICAg
ICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRh
KG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVi
b3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOwotICAgICAgICAgICAg
RmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50
UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBz
dHJldGNoQW1vdW50OwotICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3Jp
Z2luICsgZGFtcGVkRGVsdGE7CisgICAgICAgICAgICBHcmFwaGljc1NpemUgZGFtcGVkRGVsdGEo
Y2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndp
ZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9s
bEZvcmNlLmhlaWdodCgpKSkpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBvcmlnT3JpZ2lu
ID0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBt
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OworICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7
CiAKICAgICAgICAgICAgIGlmIChvcmlnT3JpZ2luICE9IG5ld09yaWdpbikgewogICAgICAgICAg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlKGZhbHNlKTsKQEAgLTEwODgsNyArMTA4OCw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OmJlZ2luU2Nyb2xsR2VzdHUKICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNl
OwogICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CiAgICAgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwotICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6
ZSgpOworICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIG1fc2Ny
b2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250
YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCk7CiAgICAgbV9zY3JvbGxlckluaXRp
YWxseVBpbm5lZE9uUmlnaHQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250YWxTY3JvbGxl
clBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCk7CiAgICAgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNj
cm9sbCA9IDA7CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpi
ZWdpblNjcm9sbEdlc3R1CiAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3Vu
ZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOwogICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3Ry
ZXRjaEFtb3VudC5oZWlnaHQoKSkpOwogCi0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxv
YXRTaXplKCk7CisgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gR3JhcGhpY3NTaXplKCk7CiAg
ICAgCiAgICAgaWYgKG1fc25hcFJ1YmJlckJhbmRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBt
X3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwpAQCAtMTExNSw3ICsxMTE1LDcgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmQoKQogewogICAgIENGVGltZUludGVydmFs
IHRpbWVEZWx0YSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gc3lzdGVtVXB0aW1lXSAt
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwogICAgIGlmIChtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91
dCkKLSAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogCiAgICAgbV9pblNjcm9sbEdlc3R1
cmUgPSBmYWxzZTsKIApAQCAtMTEyMyw5ICsxMTIzLDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c25hcFJ1YmJlckJhbmQoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3N0YXJ0VGltZSA9
IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICBtX3N0YXJ0U3Ry
ZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAg
ICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgIG1fc3RhcnRTdHJldGNoID0gR3Jh
cGhpY3NTaXplKCk7CisgICAgbV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1f
b3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICBtX3NuYXBSdWJiZXJCYW5kVGlt
ZXIuc3RhcnRSZXBlYXRpbmcoMS4wLzYwLjApOwogfQpAQCAtMTE0OSwxNSArMTE0OSwxNSBAQCB2
b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRpCiAgICAgaWYgKCFtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgewogICAgICAg
ICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKIAotICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2gg
PT0gRmxvYXRTaXplKCkpIHsKKyAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEdyYXBoaWNz
U2l6ZSgpKSB7CiAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEt
Pm92ZXJoYW5nQW1vdW50KCk7Ci0gICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxv
YXRTaXplKCkpIHsgICAgCisgICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gR3JhcGhp
Y3NTaXplKCkpIHsgICAgCiAgICAgICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0
b3AoKTsKLSAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgp
OworICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gR3JhcGhpY3NTaXplKCk7
CiAgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwotICAgICAgICAgICAgICAgIG1fc3Rh
cnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0g
RmxvYXRQb2ludCgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7CisgICAgICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKKyAg
ICAgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBHcmFwaGljc1BvaW50KCk7CisgICAgICAgICAg
ICAgICAgbV9vcmlnVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKIAogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTExODIsMTcgKzExODIsMTcgQEAgdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmRUaQogICAgICAgICAgICAgICAgIG1fb3JpZ1Zl
bG9jaXR5LnNldEhlaWdodCgwKTsKICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0UG9pbnQgZGVs
dGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEo
bV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0
aW1lRGVsdGEpKSwKKyAgICAgICAgR3JhcGhpY3NQb2ludCBkZWx0YShyb3VuZFRvRGV2aWNlUGl4
ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC53aWR0
aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgKGZsb2F0KXRpbWVEZWx0YSkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0Rl
bHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLmhlaWdodCgpLCAtbV9vcmlnVmVsb2NpdHku
aGVpZ2h0KCksIChmbG9hdCl0aW1lRGVsdGEpKSk7CiAKICAgICAgICAgaWYgKGZhYnMoZGVsdGEu
eCgpKSA+PSAxIHx8IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IG5ld09yaWdpbiA9IG1fb3JpZ09yaWdpbiArIGRlbHRhOworICAgICAgICAgICAgR3JhcGhp
Y3NQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKIAogICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFs
c2UpOwogICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChuZXdPcmlnaW4pOwogICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UodHJ1ZSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJldGNoID0gbV9zY3Jv
bGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBu
ZXdTdHJldGNoID0gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERl
bHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOwogICAgICAgICAgICAgbV9z
dHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShu
ZXdTdHJldGNoLmhlaWdodCgpKSk7CkBAIC0xMjAyLDE2ICsxMjAyLDE2IEBAIHZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kVGkKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPmRpZENvbXBsZXRlUnViYmVyQmFuZChyb3VuZGVkSW50U2l6ZShtX3N0YXJ0U3RyZXRjaCkp
OwogCiAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGltZXIuc3RvcCgpOwotICAgICAgICAg
ICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlID0gR3JhcGhpY3NTaXplKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRT
aXplKCk7Ci0gICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgICAg
ICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgbV9zdGFydFN0
cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBo
aWNzUG9pbnQoKTsKKyAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUg
dGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2gg
PSBGbG9hdFNpemUoKTsKKyAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBHcmFwaGljc1NpemUoKTsK
ICAgICB9CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxWaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxWaWV3TWFjLm1tCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgot
I2ltcG9ydCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJHcmFwaGljc1JlY3QuaCIKICNpbXBvcnQg
IkludFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5vdEltcGxlbWVudGVk
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjcyLDcgKzI3Miw3IEBAIHN0YXRpYyB2b2lkIHBhaW50Q2hlY2tib3go
Q29udHJvbFN0YXRlcyAKICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVj
dC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQo
aW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGNvbnRleHQtPnRy
YW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAg
Y29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKICAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0
LnkoKSk7CiAgICAgfQogICAgIApAQCAtMzQ4LDcgKzM0OCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50
UmFkaW8oQ29udHJvbFN0YXRlcyBzdGEKICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGlu
ZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGluZmxhdGVkUmVjdC5z
ZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIGNv
bnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKLSAg
ICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsK
KyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0
b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5m
bGF0ZWRSZWN0LnkoKSk7CiAgICAgfQogICAgIApAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyB2
b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQKICAgICAgICAgICAgIGluZmxhdGVkUmVj
dC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICAg
ICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6b29tRmFj
dG9yKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBp
bmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6
b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFw
aGljc1NpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOwogICAgICAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CiAgICAgICAg
IH0KICAgICB9IApAQCAtNTMzLDcgKzUzMyw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U3RlcHBlcihD
b250cm9sU3RhdGVzIHMKICAgICAgICAgcmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgLyB6b29t
RmFjdG9yKTsKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0
b3IpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKLSAg
ICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsK
KyAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0
b3IpKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1yZWN0LngoKSwgLXJlY3QueSgpKTsK
ICAgICB9CiAgICAgQ0dSZWN0IGJvdW5kcyhyZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSkKICAgICBk
ZWxldGUgaW1hZ2U7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VS
ZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShE
cmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSBzY2FsZSkKIHsKICAgICBpZiAoIWltYWdl
KQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bs
YXRmb3JtU2NyZWVuUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3Jl
ZW4uaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
SG9zdFdpbmRvdy5oIgpAQCAtODksMTYgKzg5LDE2IEBAIGJvb2wgc2NyZWVuSXNNb25vY2hyb21l
KFdpZGdldCogdykKICAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbihz
Y3JlZW5OdW1iZXIodykpLT5jb2xvckNvdW50KCkgPT0gMjsKIH0KIAotRmxvYXRSZWN0IHNjcmVl
blJlY3QoV2lkZ2V0KiB3KQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3KQogewog
ICAgIFFSZWN0IHIgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+c2NyZWVuR2VvbWV0cnkoc2Ny
ZWVuTnVtYmVyKHcpKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHIueCgpLCByLnkoKSwgci53aWR0
aCgpLCByLmhlaWdodCgpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHIueCgpLCByLnkoKSwg
ci53aWR0aCgpLCByLmhlaWdodCgpKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJl
Y3QoV2lkZ2V0KiB3KQorR3JhcGhpY3NSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3
KQogewogICAgIFFSZWN0IHIgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+YXZhaWxhYmxlR2Vv
bWV0cnkoc2NyZWVuTnVtYmVyKHcpKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHIueCgpLCByLnko
KSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHIueCgp
LCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2NyZWVuUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1NjcmVlblF0LmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JlZW5RdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTY3JlZW4uaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTIsMTYgKzUyLDE2IEBAIHN0YXRpYyBRV2lkZ2V0KiBx
d2lkZ2V0Rm9yUGFnZShjb25zdCBQYWcKICAgICByZXR1cm4gZnJhbWVWaWV3LT5xd2lkZ2V0KCk7
CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KGNvbnN0IFBhZ2UqIHBhZ2UpCitHcmFwaGljc1Jl
Y3Qgc2NyZWVuUmVjdChjb25zdCBQYWdlKiBwYWdlKQogewogICAgIFFXaWRnZXQqIHF3ID0gcXdp
ZGdldEZvclBhZ2UocGFnZSk7CiAgICAgaWYgKCFxdykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICAvLyBUYWtlbiBmcm9t
IEtHbG9iYWxTZXR0aW5nczo6ZGVza3RvcEdlb21ldHJ5CiAgICAgUURlc2t0b3BXaWRnZXQqIGR3
ID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCk7CiAgICAgaWYgKCFkdykKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICByZXR1
cm4gSW50UmVjdChkdy0+c2NyZWVuR2VvbWV0cnkocXcpKTsKIH0KQEAgLTc1LDE2ICs3NSwxNiBA
QCBpbnQgc2NyZWVuRGVwdGgoY29uc3QgUGFnZSogcGFnZSkKICAgICByZXR1cm4gcXctPmRlcHRo
KCk7CiB9CiAKLUZsb2F0UmVjdCB1c2FibGVTY3JlZW5SZWN0KGNvbnN0IFBhZ2UqIHBhZ2UpCitH
cmFwaGljc1JlY3QgdXNhYmxlU2NyZWVuUmVjdChjb25zdCBQYWdlKiBwYWdlKQogewogICAgIFFX
aWRnZXQqIHF3ID0gcXdpZGdldEZvclBhZ2UocGFnZSk7CiAgICAgaWYgKCFxdykKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAg
ICAvLyBUYWtlbiBmcm9tIEtHbG9iYWxTZXR0aW5nczo6ZGVza3RvcEdlb21ldHJ5CiAgICAgUURl
c2t0b3BXaWRnZXQqIGR3ID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCk7CiAgICAgaWYgKCFkdykK
LSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7CiAKICAgICByZXR1cm4gSW50UmVjdChkdy0+YXZhaWxhYmxlR2VvbWV0cnkocXcpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBDR0Nv
bnRleHRSZWYgY3JlYXRlQ2dDb250ZXh0RnJvbUIKICAgICByZXR1cm4gYml0bWFwQ29udGV4dDsK
IH0KIAotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxv
YXRTaXplIHNjYWxlKQorRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBp
bWFnZSwgR3JhcGhpY3NTaXplIHNjYWxlKQogewogICAgIC8vIEZJWE1FOiBkdWUgdG8gdGhlIHdh
eSBkcmFnIGltYWdlcyBhcmUgZG9uZSBvbiB3aW5kb3dzIHdlIG5lZWQgCiAgICAgLy8gdG8gcHJl
cHJvY2VzcyB0aGUgYWxwaGEgY2hhbm5lbCA8cmRhcjovL3Byb2JsZW0vNTAxNTk0Nj4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDYWlyb1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ2Fpcm9XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGlj
IGNhaXJvX3N1cmZhY2VfdCogY3JlYXRlQ2Fpcm9Db250ZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJtV2lkdGhCeXRlcyk7CiB9CiAKLURyYWdJ
bWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2Fs
ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBo
aWNzU2l6ZSBzY2FsZSkKIHsKICAgICAvLyBGSVhNRTogZHVlIHRvIHRoZSB3YXkgZHJhZyBpbWFn
ZXMgYXJlIGRvbmUgb24gd2luZG93cyB3ZSBuZWVkIAogICAgIC8vIHRvIHByZXByb2Nlc3MgdGhl
IGFscGhhIGNoYW5uZWwgPHJkYXI6Ly9wcm9ibGVtLzUwMTU5NDY+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcmVlbldpbi5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKIAotI2luY2x1ZGUgIkhvc3RXaW5kb3cu
aCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKQEAgLTkzLDEzICs5MywxMyBA
QCBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKICNlbmRpZgogfQogCi1G
bG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5S
ZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIE1PTklUT1JJTkZPRVggbW9uaXRvckluZm8gPSBt
b25pdG9ySW5mb0ZvcldpZGdldCh3aWRnZXQpOwogICAgIHJldHVybiBtb25pdG9ySW5mby5yY01v
bml0b3I7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0
KQorR3JhcGhpY3NSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAg
ICAgTU9OSVRPUklORk9FWCBtb25pdG9ySW5mbyA9IG1vbml0b3JJbmZvRm9yV2lkZ2V0KHdpZGdl
dCk7CiAgICAgcmV0dXJuIG1vbml0b3JJbmZvLnJjV29yazsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgUG9wdXBNZW51V2lu
OjpjYWxjdWxhdGVQb3NpdGlvbkFuZFMKICAgICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJT
Y3JlZW5Db29yZHMubWF4WSgpLCBwb3B1cFdpZHRoLCBwb3B1cEhlaWdodCk7CiAKICAgICAvLyBU
aGUgcG9wdXAgbmVlZHMgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2NyZWVuIGFu
ZCBub3Qgb3ZlcmxhcCBhbnkgdG9vbGJhcnMKLSAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVu
QXZhaWxhYmxlUmVjdCh2KTsKKyAgICBHcmFwaGljc1JlY3Qgc2NyZWVuID0gc2NyZWVuQXZhaWxh
YmxlUmVjdCh2KTsKIAogICAgIC8vIENoZWNrIHRoYXQgd2UgZG9uJ3QgZ28gb2ZmIHRoZSBzY3Jl
ZW4gdmVydGljYWxseQogICAgIGlmIChwb3B1cFJlY3QubWF4WSgpID4gc2NyZWVuLmhlaWdodCgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVsRXZlbnRXaW4u
Y3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaGVl
bEV2ZW50V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+
CiAjaW5jbHVkZSA8d2luZG93c3guaD4KIApAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgaW50IHZl
cnRpY2FsU2Nyb2xsTGluZXMoKQogICAgIHJldHVybiBzY3JvbGxMaW5lczsKIH0KIAotUGxhdGZv
cm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCBoV25kLCBjb25zdCBGbG9hdFNp
emUmIGRlbHRhLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbikKK1BsYXRmb3JtV2hlZWxFdmVu
dDo6UGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQgaFduZCwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0
YSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbG9jYXRpb24pCiAgICAgOiBtX2lzQWNjZXB0ZWQoZmFs
c2UpCiAgICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQogICAgICwgbV9jdHJsS2V5KGZhbHNlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvRHJhZ0ltYWdlV2luQ0UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0RyYWdJbWFnZVdpbkNFLmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9EcmFn
SW1hZ2VXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgdm9pZCBkZWxl
dGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlKQogICAgICAgICA6OkRlbGV0ZU9iamVjdChp
bWFnZSk7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYsIEZs
b2F0U2l6ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYsIEdyYXBo
aWNzU2l6ZSkKIHsKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3d4L0RyYWdJbWFnZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC9EcmFnSW1hZ2VXeC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvRHJhZ0ltYWdlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZikKIHsK
IH0KIAotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxv
YXRTaXplKQorRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwg
R3JhcGhpY3NTaXplKQogewogICAgIHJldHVybiBpbWFnZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L1NjcmVlbld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9TY3JlZW5XeC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3gvU2NyZWVuV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsy
Niw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJTY3JlZW4uaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKICNpbmNsdWRlIDx3eC9kZWZzLmg+CkBA
IC0zNiwxNyArMzYsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFJlY3Qgc2Nh
bGVTY3JlZW5SZWN0VG9XaWRnZXQoRmxvYXRSZWN0IHJlY3QsIFdpZGdldCopCitHcmFwaGljc1Jl
Y3Qgc2NhbGVTY3JlZW5SZWN0VG9XaWRnZXQoR3JhcGhpY3NSZWN0IHJlY3QsIFdpZGdldCopCiB7
CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUZsb2F0UmVjdCBzY2FsZVdpZGdldFJlY3RUb1NjcmVl
bihGbG9hdFJlY3QgcmVjdCwgV2lkZ2V0KikKK0dyYXBoaWNzUmVjdCBzY2FsZVdpZGdldFJlY3RU
b1NjcmVlbihHcmFwaGljc1JlY3QgcmVjdCwgV2lkZ2V0KikKIHsKICAgICByZXR1cm4gcmVjdDsK
IH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qg
c2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKIC8qCiAgICAgaW50IGRpc3BsYXlOdW07CkBA
IC01Nyw3ICs1Nyw3IEBAIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogICAg
ICAgICByZXR1cm4gdGhpc0Rpc3BsYXkuR2V0R2VvbWV0cnkoKTsKICAgICB9CiAqLwotICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIGludCBz
Y3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBzY3JlZW5J
c01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAgICAgcmV0dXJuIHd4Q29sb3VyRGlzcGxheSgp
OwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK0dy
YXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewogLyoKICAg
ICBXaWRnZXQqIHdpZGdldCA9IHdpZGdldC0+d2lkZ2V0KCk7CkBAIC04Niw3ICs4Niw3IEBAIEZs
b2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2kKICAgICAgICAgLy9yZXR1cm4g
dGhpc0Rpc3BsYXkuR2V0Q2xpZW50QXJlYSgpOwogICAgIH0KICovICAgIAotICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIGZsb2F0IHNjYWxl
RmFjdG9yKFdpZGdldCopCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxW
aWV3V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9s
bFZpZXdXeC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3gvU2Nyb2xsVmlld1d4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKIAotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL25vbi1rZXJu
ZWQtZHJhd2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4
Y29kZS9ub24ta2VybmVkLWRyYXdpbmcuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbm9uLWtlcm5lZC1kcmF3aW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDIzICsyMSwyMyBAQAogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8NCi0NCi0jaW5jbHVkZSAiRm9udC5oIg0KLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIg0KLQ0KLSNpbmNsdWRlIDx3eC9kZWZzLmg+DQorICovCisKKyNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd4L2RlZnMuaD4KICNpbmNs
dWRlIDx3eC9kY2NsaWVudC5oPgogCiAjaWYgX19XWEdUS19fICYmIFVTRShXWEdDKQogI2luY2x1
ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KICNpbmNsdWRlIDxwYW5nby9w
YW5nb2NhaXJvLmg+Ci0jZW5kaWYNCi0NCi1uYW1lc3BhY2UgV2ViQ29yZSB7DQotDQotZXh0ZXJu
IHZvaWQgZHJhd1RleHRXaXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpOw0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2V4dGVybiB2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29s
b3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KTsKIAogI2lmIF9fV1hHVEtfXyAmJiBVU0Uo
V1hHQykKIFBhbmdvRm9udE1hcCogcGFuZ29Gb250TWFwKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC93eGNvZGUvZ3RrL25vbi1rZXJuZWQtZHJhd2luZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRy
YXdpbmcuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L3d4Y29kZS9ndGsvbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgz
LDcgKzE4Myw3IEBAIFBhbmdvR2x5cGggcGFuZ29fZm9udF9nZXRfZ2x5cGgoUGFuZ29Gb24KICNl
bmRpZiAvLyBVU0UoV1hHQykKIAogCi12b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25z
dCB3eENvbG91ciYgY29sb3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBkcmF3VGV4
dFdpdGhTcGFjaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udCwgY29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkKIHsKICNpZiBVU0UoV1hHQykKICAgICB3eEdDREMqIGRjID0gc3RhdGljX2Nh
c3Q8d3hHQ0RDKj4oZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9ub24ta2VybmVkLWRy
YXdpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29k
ZS9tYWMvY2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vbm9uLWtlcm5lZC1k
cmF3aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1NpemUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCkBAIC00MSw3ICs0MSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29u
c3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgZHJhd1Rl
eHRXaXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQpCiB7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJhd2lu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dp
bi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBSYWRUb0RlZyhk
b3VibGUgZGVnCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBkcmF3VGV4dFdpdGhTcGFj
aW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwgY29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
K3ZvaWQgZHJhd1RleHRXaXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgd3hHQ0RDKiBk
YyA9IHN0YXRpY19jYXN0PHd4R0NEQyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCkpOwpAQCAtMTA2LDggKzEwNiw4IEBAIHZvaWQgZHJhd1RleHRXaXRoU3BhY2luZyhHcmFwaGlj
c0NvbnRleHQKIAogICAgIC8vIGlmIHRoZSBjb250ZXh0IGhhcyBiZWVuIHNjYWxlZCwgd2UgbXVz
dCBtYW51YWxseSByZS1hcHBseSB0aGF0IHNjYWxlCiAgICAgLy8gdG8gdGhlIEhEQy4KLSAgICBG
bG9hdFNpemUgc2NhbGUgPSBncmFwaGljc0NvbnRleHQtPmN1cnJlbnRTY2FsZSgpOwotICAgIGlm
IChzY2FsZSAhPSBGbG9hdFNpemUoMS4wLCAxLjApKSB7CisgICAgR3JhcGhpY3NTaXplIHNjYWxl
ID0gZ3JhcGhpY3NDb250ZXh0LT5jdXJyZW50U2NhbGUoKTsKKyAgICBpZiAoc2NhbGUgIT0gR3Jh
cGhpY3NTaXplKDEuMCwgMS4wKSkgewogICAgICAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9B
RFZBTkNFRCk7CiAgICAgICAgIFhGT1JNIHhGb3JtOwogICAgICAgICB4Rm9ybS5lTTExID0gc2Nh
bGUud2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luVmlld1F0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdR
dC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVn
aW5WaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgRWxs
aXBzaXNCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBFbGxpcHNpc0JveChS
ZW5kZXJPYmplY3QqIG9iaiwgY29uc3QgQXRvbWljU3RyaW5nJiBlbGxpcHNpc1N0ciwgSW5saW5l
Rmxvd0JveCogcGFyZW50LAogICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IHksIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzVmVydGljYWwsIElubGluZUJveCogbWFya3Vw
Qm94KQotICAgICAgICA6IElubGluZUJveChvYmosIEZsb2F0UG9pbnQoMCwgeSksIHdpZHRoLCBm
aXJzdExpbmUsIHRydWUsIGZhbHNlLCBmYWxzZSwgaXNWZXJ0aWNhbCwgMCwgMCwgcGFyZW50KQor
ICAgICAgICA6IElubGluZUJveChvYmosIEdyYXBoaWNzUG9pbnQoMCwgeSksIHdpZHRoLCBmaXJz
dExpbmUsIHRydWUsIGZhbHNlLCBmYWxzZSwgaXNWZXJ0aWNhbCwgMCwgMCwgcGFyZW50KQogICAg
ICAgICAsIG1faGVpZ2h0KGhlaWdodCkKICAgICAgICAgLCBtX3N0cihlbGxpcHNpc1N0cikKICAg
ICAgICAgLCBtX21hcmt1cEJveChtYXJrdXBCb3gpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDcg
KzUzOSw3IEBAIGJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGUKICAgICBy
ZXR1cm4gIXJlY3QuY29udGFpbnMocmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKTsKIH0K
IAotYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUq
IG5vZGUsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCitib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQoTm9kZSogbm9kZSwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICAvLyBJZiBpdCBpcyBub3QgYSByZWN0LWJhc2Vk
IGhpdCB0ZXN0LCB0aGlzIG1ldGhvZCBoYXMgdG8gYmUgbm8tb3AuCiAgICAgLy8gUmV0dXJuIGZh
bHNlLCBzbyB0aGUgaGl0IHRlc3Qgc3RvcHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAog
I2lmbmRlZiBIaXRUZXN0UmVzdWx0X2gKICNkZWZpbmUgSGl0VGVzdFJlc3VsdF9oCiAKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJM
YXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaXQgaXMgcmVjdC1iYXNlZCBoaXQgdGVzdCBhbmQgbmVlZHMgdG8gY29udGludWUgdW50
aWwgdGhlIHJlY3QgaXMgZnVsbHkKICAgICAvLyBlbmNsb3NlZCBieSB0aGUgYm91bmRhcmllcyBv
ZiBhIG5vZGUuCiAgICAgYm9vbCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KE5vZGUqLCBj
b25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgPSBJbnRS
ZWN0KCkpOwotICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChOb2RlKiwgY29uc3QgTGF5b3V0UG9p
bnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IEhpdFRlc3RSZXN1bHQmKTsKIAogICAgIC8vIElmIG1fcmVjdEJhc2VkVGVzdFJl
c3VsdCBpcyAwIHRoZW4gc2V0IGl0IHRvIGEgbmV3IE5vZGVTZXQuIFJldHVybiAqbV9yZWN0QmFz
ZWRUZXN0UmVzdWx0LiBMYXp5IGFsbG9jYXRpb24gbWFrZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsMjUgKzMyNywy
NSBAQCB2b2lkIElubGluZUJveDo6Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsCiAgICAgICAgIHBh
cmVudCgpLT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxvdygpOwogfQogCi1GbG9hdFBvaW50IElu
bGluZUJveDo6bG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpCitHcmFwaGljc1BvaW50IElubGlu
ZUJveDo6bG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigp
LT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4g
RmxvYXRQb2ludCh4KCksIHkoKSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KHgoKSwg
eSgpKTsKICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSByb290KCktPmJsb2NrKCk7CiAgICAgaWYg
KGJsb2NrLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1
cm4gRmxvYXRQb2ludCh4KCksIGJsb2NrLT5oZWlnaHQoKSAtIGhlaWdodCgpIC0geSgpKTsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoeCgpLCBibG9jay0+aGVpZ2h0KCkgLSBoZWlnaHQo
KSAtIHkoKSk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChibG9jay0+d2lk
dGgoKSAtIHdpZHRoKCkgLSB4KCksIHkoKSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50
KGJsb2NrLT53aWR0aCgpIC0gd2lkdGgoKSAtIHgoKSwgeSgpKTsKIH0KIAotdm9pZCBJbmxpbmVC
b3g6OmZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3QmIHJlY3QpCit2b2lkIElubGluZUJveDo6
ZmxpcEZvcldyaXRpbmdNb2RlKEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoIXJlbmRl
cmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICByb290KCktPmJsb2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsKIH0K
IAotRmxvYXRQb2ludCBJbmxpbmVCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkKK0dyYXBoaWNzUG9pbnQgSW5saW5lQm94OjpmbGlwRm9yV3JpdGluZ01vZGUo
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5zdHls
ZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcG9pbnQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIElubGluZUJveChS
ZW5kZXJPYmplY3QqIG9iaiwgRmxvYXRQb2ludCB0b3BMZWZ0LCBmbG9hdCBsb2dpY2FsV2lkdGgs
IGJvb2wgZmlyc3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAorICAgIElubGluZUJveChSZW5kZXJP
YmplY3QqIG9iaiwgR3JhcGhpY3NQb2ludCB0b3BMZWZ0LCBmbG9hdCBsb2dpY2FsV2lkdGgsIGJv
b2wgZmlyc3RMaW5lLCBib29sIGNvbnN0cnVjdGVkLAogICAgICAgICAgICAgICBib29sIGRpcnR5
LCBib29sIGV4dHJhY3RlZCwgYm9vbCBpc0hvcml6b250YWwsIElubGluZUJveCogbmV4dCwgSW5s
aW5lQm94KiBwcmV2LCBJbmxpbmVGbG93Qm94KiBwYXJlbnQpCiAgICAgICAgIDogbV9uZXh0KG5l
eHQpCiAgICAgICAgICwgbV9wcmV2KHByZXYpCkBAIC0yMzIsMTEgKzIzMiwxMSBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdC55KCk7IH0KICAgICBmbG9h
dCB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgpOyB9CiAKLSAgICBjb25zdCBGbG9h
dFBvaW50JiB0b3BMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV90b3BMZWZ0OyB9CisgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgdG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsgfQogCiAg
ICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IGxvZ2ljYWxX
aWR0aCgpIDogbG9naWNhbEhlaWdodCgpOyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBsb2dpY2FsSGVpZ2h0KCkgOiBsb2dpY2FsV2lkdGgoKTsg
fQotICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZSh3aWR0aCgpLCBo
ZWlnaHQoKSk7IH0KKyAgICBHcmFwaGljc1NpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNp
emUod2lkdGgoKSwgaGVpZ2h0KCkpOyB9CiAgICAgZmxvYXQgcmlnaHQoKSBjb25zdCB7IHJldHVy
biBsZWZ0KCkgKyB3aWR0aCgpOyB9CiAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4g
dG9wKCkgKyBoZWlnaHQoKTsgfQogCkBAIC0yNzEsNyArMjcxLDcgQEAgcHVibGljOgogICAgIC8v
IFRoZSBsb2dpY2FsIGhlaWdodCBpcyBvdXIgZXh0ZW50IGluIHRoZSBibG9jayBmbG93IGRpcmVj
dGlvbiwgaS5lLiwgaGVpZ2h0IGZvciBob3Jpem9udGFsIHRleHQgYW5kIHdpZHRoIGZvciB2ZXJ0
aWNhbCB0ZXh0LgogICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0gICAg
RmxvYXRSZWN0IGxvZ2ljYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwo
KSA/IEludFJlY3QobV90b3BMZWZ0LngoKSwgbV90b3BMZWZ0LnkoKSwgbV9sb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQoKSkgOiBJbnRSZWN0KG1fdG9wTGVmdC55KCksIG1fdG9wTGVmdC54KCks
IG1fbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkpOyB9CisgICAgR3JhcGhpY3NSZWN0IGxv
Z2ljYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWwoKSA/IEludFJlY3Qo
bV90b3BMZWZ0LngoKSwgbV90b3BMZWZ0LnkoKSwgbV9sb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWln
aHQoKSkgOiBJbnRSZWN0KG1fdG9wTGVmdC55KCksIG1fdG9wTGVmdC54KCksIG1fbG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KCkpOyB9CiAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0
aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUpIGNvbnN0IHsgcmV0dXJuIGJveE1vZGVsT2Jq
ZWN0KCktPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlLCBtX2ZpcnN0TGluZSwgaXNIb3Jp
em9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PbkNvbnRh
aW5pbmdMaW5lKTsgfQogICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBib3hNb2RlbE9iamVjdCgpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwo
KSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpOyB9CkBAIC0zMTYsOSArMzE2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICBGbG9hdFBvaW50IGxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKLSAgICB2
b2lkIGZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3QmKTsKLSAgICBGbG9hdFBvaW50IGZsaXBG
b3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgR3JhcGhpY3NQb2ludCBsb2Nh
dGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CisgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoR3Jh
cGhpY3NSZWN0Jik7CisgICAgR3JhcGhpY3NQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3Qg
R3JhcGhpY3NQb2ludCYpOwogICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKEludFJlY3QmKTsK
ICAgICBJbnRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgSW50UG9pbnQmKTsKIApAQCAt
MzM0LDcgKzMzNCw3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiBtX3Jl
bmRlcmVyOwogCi0gICAgRmxvYXRQb2ludCBtX3RvcExlZnQ7CisgICAgR3JhcGhpY3NQb2ludCBt
X3RvcExlZnQ7CiAgICAgZmxvYXQgbV9sb2dpY2FsV2lkdGg7CiAgICAgCiAgICAgLy8gU29tZSBv
ZiB0aGVzZSBiaXRzIGFyZSBhY3R1YWxseSBmb3Igc3ViY2xhc3NlcyBhbmQgbW92ZWQgaGVyZSB0
byBjb21wYWN0IHRoZSBzdHJ1Y3R1cmVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MiwxNiArMjUyLDE2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldExheW91dE92ZXJmbG93KGNvbnN0IExheW91dFJlY3QmLCBM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7CiAgICAgdm9pZCBzZXRW
aXN1YWxPdmVyZmxvdyhjb25zdCBMYXlvdXRSZWN0JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVCb3R0b20pOwogCi0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdEluY2x1ZGluZ0xp
bmVIZWlnaHQoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIGNvbnN0
CisgICAgR3JhcGhpY3NSZWN0IGZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQoTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIGNvbnN0CiAgICAgewogICAgICAgICBp
ZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG1fdG9wTGVm
dC54KCksIGxpbmVUb3AsIHdpZHRoKCksIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdChsaW5lVG9wLCBtX3RvcExlZnQueSgpLCBsaW5lQm90dG9tIC0gbGlu
ZVRvcCwgaGVpZ2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChtX3RvcExl
ZnQueCgpLCBsaW5lVG9wLCB3aWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7CisgICAgICAg
IHJldHVybiBHcmFwaGljc1JlY3QobGluZVRvcCwgbV90b3BMZWZ0LnkoKSwgbGluZUJvdHRvbSAt
IGxpbmVUb3AsIGhlaWdodCgpKTsKICAgICB9CiAgICAgCi0gICAgRmxvYXRSZWN0IGxvZ2ljYWxG
cmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tKSBjb25zdAorICAgIEdyYXBoaWNzUmVjdCBsb2dpY2FsRnJhbWVSZWN0SW5j
bHVkaW5nTGluZUhlaWdodChMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QobG9naWNhbExlZnQoKSwg
bGluZVRvcCwgbG9naWNhbFdpZHRoKCksIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKKyAgICAgICAg
cmV0dXJuIEdyYXBoaWNzUmVjdChsb2dpY2FsTGVmdCgpLCBsaW5lVG9wLCBsb2dpY2FsV2lkdGgo
KSwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwogICAgIH0KICAgICAKICAgICBib29sIGRlc2NlbmRh
bnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX2Rlc2Nl
bmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmU7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTUsNyArMTk1LDcgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGlu
dAogICAgIGlmIChyZXNwZWN0SHlwaGVuKQogICAgICAgICBlbmRQb3MgPSB0ZXh0UnVuLmxlbmd0
aCgpOwogCi0gICAgSW50UmVjdCByID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJl
Y3RGb3JUZXh0KHRleHRSdW4sIEZsb2F0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsVG9wKSwgc2Vs
SGVpZ2h0LCBzUG9zLCBlUG9zKSk7CisgICAgSW50UmVjdCByID0gZW5jbG9zaW5nSW50UmVjdChm
b250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEdyYXBoaWNzUG9pbnQobG9naWNhbExl
ZnQoKSwgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CiAKICAgICBpbnQgbG9naWNh
bFdpZHRoID0gci53aWR0aCgpOwogICAgIGlmIChyLngoKSA+IGxvZ2ljYWxSaWdodCgpKQpAQCAt
MzUwLDkgKzM1MCw5IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkK
ICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxv
YXRQb2ludCBib3hPcmlnaW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CisgICAgR3Jh
cGhpY3NQb2ludCBib3hPcmlnaW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7CiAgICAg
Ym94T3JpZ2luLm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7Ci0gICAgRmxvYXRSZWN0IHJlY3Qo
Ym94T3JpZ2luLCBzaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KGJveE9yaWdpbiwgc2l6
ZSgpKTsKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNhdGlvbiAmJiB2aXNpYmxl
VG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9p
bnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRvTGF5b3V0
U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIs
IHJlY3QpKQpAQCAtMzYxLDI2ICszNjEsMjYgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRmxvYXRTaXplIElubGluZVRl
eHRCb3g6OmFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3Qs
IGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRhbCkKK0dyYXBoaWNzU2l6
ZSBJbmxpbmVUZXh0Qm94OjphcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHRleHRSZWN0LCBib29sIHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwp
CiB7CiAgICAgaWYgKCFzaGFkb3cpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIGV4dHJhT2Zmc2V0Owor
ICAgIEdyYXBoaWNzU2l6ZSBleHRyYU9mZnNldDsKICAgICBpbnQgc2hhZG93WCA9IGhvcml6b250
YWwgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOwogICAgIGludCBzaGFkb3dZID0gaG9yaXpv
bnRhbCA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgpOwotICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQoc2hhZG93WCwgc2hhZG93WSk7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldChz
aGFkb3dYLCBzaGFkb3dZKTsKICAgICBpbnQgc2hhZG93Qmx1ciA9IHNoYWRvdy0+Ymx1cigpOwog
ICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciA9IHNoYWRvdy0+Y29sb3IoKTsKIAogICAgIGlm
IChzaGFkb3ctPm5leHQoKSB8fCBzdHJva2VkIHx8ICFvcGFxdWUpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IHNoYWRvd1JlY3QodGV4dFJlY3QpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2hhZG93UmVj
dCh0ZXh0UmVjdCk7CiAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzaGFkb3dCbHVyKTsKICAg
ICAgICAgc2hhZG93UmVjdC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIGNvbnRleHQtPnNh
dmUoKTsKICAgICAgICAgY29udGV4dC0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICBleHRy
YU9mZnNldCA9IEZsb2F0U2l6ZSgwLCAyICogdGV4dFJlY3QuaGVpZ2h0KCkgKyBtYXgoMC4wZiwg
c2hhZG93T2Zmc2V0LmhlaWdodCgpKSArIHNoYWRvd0JsdXIpOworICAgICAgICBleHRyYU9mZnNl
dCA9IEdyYXBoaWNzU2l6ZSgwLCAyICogdGV4dFJlY3QuaGVpZ2h0KCkgKyBtYXg8R3JhcGhpY3NV
bml0PigwLjBmLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpICsgc2hhZG93Qmx1cik7CiAgICAgICAg
IHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKICAgICB9CiAKQEAgLTM4OCw4ICszODgsOCBA
QCBGbG9hdFNpemUgSW5saW5lVGV4dEJveDo6YXBwbHlTaGFkb3dUb0dyCiAgICAgcmV0dXJuIGV4
dHJhT2Zmc2V0OwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRS
dW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNNYXJrT2Zm
c2V0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludCB0cnVuY2F0aW9uUG9pbnQs
IGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRv
dywgYm9vbCBzdHJva2VkLCBib29sIGhvcml6b250YWwpCitzdGF0aWMgdm9pZCBwYWludFRleHRX
aXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBp
bnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGlu
dCB0cnVuY2F0aW9uUG9pbnQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRleHRPcmlnaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGJveFJlY3Qs
IGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgYm9vbCBzdHJva2VkLCBib29sIGhvcml6b250YWwp
CiB7CiAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC0+ZmlsbENvbG9yKCk7CiAgICAgQ29s
b3JTcGFjZSBmaWxsQ29sb3JTcGFjZSA9IGNvbnRleHQtPmZpbGxDb2xvclNwYWNlKCk7CkBAIC00
NjAsNyArNDYwLDcgQEAgYm9vbCBJbmxpbmVUZXh0Qm94OjpnZXRFbXBoYXNpc01hcmtQb3NpdAog
CiBlbnVtIFJvdGF0aW9uRGlyZWN0aW9uIHsgQ291bnRlcmNsb2Nrd2lzZSwgQ2xvY2t3aXNlIH07
CiAKLXN0YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGNvbnN0IEZsb2F0UmVj
dCYgYm94UmVjdCwgUm90YXRpb25EaXJlY3Rpb24gY2xvY2t3aXNlKQorc3RhdGljIGlubGluZSBB
ZmZpbmVUcmFuc2Zvcm0gcm90YXRpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBib3hSZWN0LCBSb3Rh
dGlvbkRpcmVjdGlvbiBjbG9ja3dpc2UpCiB7CiAgICAgcmV0dXJuIGNsb2Nrd2lzZSA/IEFmZmlu
ZVRyYW5zZm9ybSgwLCAxLCAtMSwgMCwgYm94UmVjdC54KCkgKyBib3hSZWN0Lm1heFkoKSwgYm94
UmVjdC5tYXhZKCkgLSBib3hSZWN0LngoKSkKICAgICAgICAgOiBBZmZpbmVUcmFuc2Zvcm0oMCwg
LTEsIDEsIDAsIGJveFJlY3QueCgpIC0gYm94UmVjdC5tYXhZKCksIGJveFJlY3QueCgpICsgYm94
UmVjdC5tYXhZKCkpOwpAQCAtNTE5LDkgKzUxOSw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWkKICAgICAKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0Lm1vdmUoMCwg
c3R5bGVUb1VzZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAtbG9naWNhbEhlaWdo
dCgpKTsKIAotICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlw
cGluZygpOworICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdG
bGlwcGluZygpOwogICAgIGJveE9yaWdpbi5tb3ZlKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7Ci0gICAgRmxvYXRSZWN0IGJveFJlY3QoYm94T3JpZ2lu
LCBMYXlvdXRTaXplKGxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICBHcmFw
aGljc1JlY3QgYm94UmVjdChib3hPcmlnaW4sIExheW91dFNpemUobG9naWNhbFdpZHRoKCksIGxv
Z2ljYWxIZWlnaHQoKSkpOwogCiAgICAgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCA9
IHN0eWxlVG9Vc2UtPmhhc1RleHRDb21iaW5lKCkgJiYgdGV4dFJlbmRlcmVyKCktPmlzQ29tYmlu
ZVRleHQoKSAmJiB0b1JlbmRlckNvbWJpbmVUZXh0KHRleHRSZW5kZXJlcigpKS0+aXNDb21iaW5l
ZCgpID8gdG9SZW5kZXJDb21iaW5lVGV4dCh0ZXh0UmVuZGVyZXIoKSkgOiAwOwogCkBAIC01MzYs
NyArNTM2LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAg
IC8vIFNldCBvdXIgZm9udC4KICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGVUb1VzZS0+Zm9u
dCgpOwogCi0gICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luID0gRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKyAgICBH
cmFwaGljc1BvaW50IHRleHRPcmlnaW4gPSBHcmFwaGljc1BvaW50KGJveE9yaWdpbi54KCksIGJv
eE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogCiAgICAgaWYgKGNv
bWJpbmVkVGV4dCkKICAgICAgICAgY29tYmluZWRUZXh0LT5hZGp1c3RUZXh0T3JpZ2luKHRleHRP
cmlnaW4sIGJveFJlY3QpOwpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChU
ZXh0UnVuLCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4sICgmb2JqZWN0UmVwbGFj
ZW1lbnRDaGFyYWN0ZXIsIDEpKTsKICAgICAgICAgICAgIFRleHRSdW4mIGVtcGhhc2lzTWFya1Rl
eHRSdW4gPSBjb21iaW5lZFRleHQgPyBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4g
OiB0ZXh0UnVuOwotICAgICAgICAgICAgRmxvYXRQb2ludCBlbXBoYXNpc01hcmtUZXh0T3JpZ2lu
ID0gY29tYmluZWRUZXh0ID8gRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgYm94UmVjdC53aWR0
aCgpIC8gMiwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkgOiB0
ZXh0T3JpZ2luOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBlbXBoYXNpc01hcmtUZXh0T3Jp
Z2luID0gY29tYmluZWRUZXh0ID8gR3JhcGhpY3NQb2ludChib3hPcmlnaW4ueCgpICsgYm94UmVj
dC53aWR0aCgpIC8gMiwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSkgOiB0ZXh0T3JpZ2luOwogICAgICAgICAgICAgaWYgKGNvbWJpbmVkVGV4dCkKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwgQ2xvY2t3aXNlKSk7
CiAKQEAgLTcxNyw3ICs3MTcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpCiAKICAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4dFJ1biwgb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoJm9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVy
LCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNpc01hcmtUZXh0UnVuID0gY29tYmlu
ZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuIDogdGV4dFJ1bjsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4
dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9y
aWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpIDogdGV4dE9yaWdpbjsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiA9IGNvbWJpbmVk
VGV4dCA/IEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSArIGJveFJlY3Qud2lkdGgoKSAvIDIs
IGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpIDogdGV4dE9yaWdp
bjsKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRleHQpCiAgICAgICAgICAgICAgICAgY29udGV4
dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENsb2Nrd2lzZSkpOwogCkBAIC03ODYsNyAr
Nzg2LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbgogICAgIGVQ
b3MgPSBtaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CiB9CiAKLXZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgRm9udCYgZm9udCkKIHsKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC04MjMsOSArODIzLDkgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAogCiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkt
PnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgp
IC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAg
aW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgbG9jYWxP
cmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7CisgICAgR3JhcGhp
Y3NQb2ludCBsb2NhbE9yaWdpbihib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZ
KTsKIAotICAgIEZsb2F0UmVjdCBjbGlwUmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fbG9n
aWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKKyAgICBHcmFwaGljc1JlY3QgY2xpcFJlY3QobG9jYWxP
cmlnaW4sIEdyYXBoaWNzU2l6ZShtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0KSk7CiAgICAgZmxv
YXQgbWF4WCA9IGZsb29yZihjbGlwUmVjdC5tYXhYKCkpOwogICAgIGNsaXBSZWN0LnNldFgoZmxv
b3JmKGNsaXBSZWN0LngoKSkpOwogICAgIGNsaXBSZWN0LnNldFdpZHRoKG1heFggLSBjbGlwUmVj
dC54KCkpOwpAQCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxl
Y3Rpb24oR3JhcGgKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCB0ZXh0
UnVuLCBsb2NhbE9yaWdpbiwgc2VsSGVpZ2h0LCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9z
LCBlUG9zKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2lu
LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGludCBzdGFydFBvcywgaW50
IGVuZFBvcykKIHsKICAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKICAgICBpbnQgc1BvcyA9IG1h
eChzdGFydFBvcyAtIG9mZnNldCwgMCk7CkBAIC04NTEsNyArODUxLDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFjawogCiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVy
KCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRv
bSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAg
ICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgbG9j
YWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7CisgICAgR3Jh
cGhpY3NQb2ludCBsb2NhbE9yaWdpbihib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVs
dGFZKTsKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlLCBmb250KSwgbG9jYWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNv
bG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiB9CiAKQEAgLTg2NywyMCArODY3LDIwIEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUm9vdElubGluZUJveCogciA9IHJvb3QoKTsKLSAgICBGbG9hdFJlY3Qgcm9vdFJlY3QocGFp
bnRPZmZzZXQueCgpICsgci0+eCgpLCBwYWludE9mZnNldC55KCkgKyBzZWxlY3Rpb25Ub3AoKSwg
ci0+bG9naWNhbFdpZHRoKCksIHNlbGVjdGlvbkhlaWdodCgpKTsKLSAgICBGbG9hdFJlY3QgdGV4
dFJlY3QocGFpbnRPZmZzZXQueCgpICsgeCgpLCByb290UmVjdC55KCksIGxvZ2ljYWxXaWR0aCgp
LCByb290UmVjdC5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHJvb3RSZWN0KHBhaW50T2Zm
c2V0LngoKSArIHItPngoKSwgcGFpbnRPZmZzZXQueSgpICsgc2VsZWN0aW9uVG9wKCksIHItPmxv
Z2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgR3JhcGhpY3NSZWN0IHRleHRS
ZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCBsb2dpY2FsV2lkdGgoKSwg
cm9vdFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWlu
dEN1c3RvbUhpZ2hsaWdodChyZW5kZXJlcigpLT5ub2RlKCksIHR5cGUsIHRleHRSZWN0LCByb290
UmVjdCwgdHJ1ZSwgZmFsc2UpOwogfQogCiAjZW5kaWYKIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBib3hPcmlnaW4sIGludCBkZWNvLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCit2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgaW50IGRlY28sIGNvbnN0IFNoYWRvd0RhdGEq
IHNoYWRvdykKIHsKICAgICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBsb2NhbE9yaWdpbiA9IGJveE9yaWdpbjsK
KyAgICBHcmFwaGljc1BvaW50IGxvY2FsT3JpZ2luID0gYm94T3JpZ2luOwogCiAgICAgZmxvYXQg
d2lkdGggPSBtX2xvZ2ljYWxXaWR0aDsKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5j
YXRpb24pIHsKQEAgLTkwNSw5ICs5MDUsOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVj
b3JhdGlvbihHcmFwCiAgICAgYm9vbCBzZXRDbGlwID0gZmFsc2U7CiAgICAgaW50IGV4dHJhT2Zm
c2V0ID0gMDsKICAgICBpZiAoIWxpbmVzQXJlT3BhcXVlICYmIHNoYWRvdyAmJiBzaGFkb3ctPm5l
eHQoKSkgewotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6
ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBjbGlwUmVjdChs
b2NhbE9yaWdpbiwgR3JhcGhpY3NTaXplKHdpZHRoLCBiYXNlbGluZSArIDIpKTsKICAgICAgICAg
Zm9yIChjb25zdCBTaGFkb3dEYXRhKiBzID0gc2hhZG93OyBzOyBzID0gcy0+bmV4dCgpKSB7Ci0g
ICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKHdp
ZHRoLCBiYXNlbGluZSArIDIpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0
KGxvY2FsT3JpZ2luLCBHcmFwaGljc1NpemUod2lkdGgsIGJhc2VsaW5lICsgMikpOwogICAgICAg
ICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHMtPmJsdXIoKSk7CiAgICAgICAgICAgICBpbnQgc2hh
ZG93WCA9IGlzSG9yaXpvbnRhbCgpID8gcy0+eCgpIDogcy0+eSgpOwogICAgICAgICAgICAgaW50
IHNoYWRvd1kgPSBpc0hvcml6b250YWwoKSA/IHMtPnkoKSA6IC1zLT54KCk7CkBAIC05MzQsNyAr
OTM0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcAogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaW50IHNoYWRvd1ggPSBpc0hvcml6b250YWwoKSA/IHNoYWRv
dy0+eCgpIDogc2hhZG93LT55KCk7CiAgICAgICAgICAgICBpbnQgc2hhZG93WSA9IGlzSG9yaXpv
bnRhbCgpID8gc2hhZG93LT55KCkgOiAtc2hhZG93LT54KCk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNo
YWRvdy0+Ymx1cigpLCBzaGFkb3ctPmNvbG9yKCksIGNvbG9yU3BhY2UpOworICAgICAgICAgICAg
Y29udGV4dC0+c2V0U2hhZG93KEdyYXBoaWNzU2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFP
ZmZzZXQpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xvcigpLCBjb2xvclNwYWNlKTsKICAg
ICAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgICAgICAgICBzaGFkb3cgPSBzaGFkb3ct
Pm5leHQoKTsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnREZWNvcmF0aW9uKEdyYXAKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKHVuZGVybGluZSwgY29sb3JTcGFjZSk7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgICAgICAgICAvLyBMZWF2ZSBvbmUgcGl4ZWwgb2Yg
d2hpdGUgYmV0d2VlbiB0aGUgYmFzZWxpbmUgYW5kIHRoZSB1bmRlcmxpbmUuCi0gICAgICAgICAg
ICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxv
Y2FsT3JpZ2luLnkoKSArIGJhc2VsaW5lICsgMSksIHdpZHRoLCBpc1ByaW50aW5nKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdMaW5lRm9yVGV4dChHcmFwaGljc1BvaW50KGxvY2FsT3JpZ2lu
LngoKSwgbG9jYWxPcmlnaW4ueSgpICsgYmFzZWxpbmUgKyAxKSwgd2lkdGgsIGlzUHJpbnRpbmcp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChkZWNvICYgT1ZFUkxJTkUpIHsKICAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG92ZXJsaW5lLCBjb2xvclNwYWNlKTsKQEAgLTk1Myw3
ICs5NTMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAg
ICAgIGlmIChkZWNvICYgTElORV9USFJPVUdIKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VDb2xvcihsaW5ldGhyb3VnaCwgY29sb3JTcGFjZSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3
TGluZUZvclRleHQoRmxvYXRQb2ludChsb2NhbE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSAr
IDIgKiBiYXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmludGluZyk7CisgICAgICAgICAgICBjb250
ZXh0LT5kcmF3TGluZUZvclRleHQoR3JhcGhpY3NQb2ludChsb2NhbE9yaWdpbi54KCksIGxvY2Fs
T3JpZ2luLnkoKSArIDIgKiBiYXNlbGluZSAvIDMpLCB3aWR0aCwgaXNQcmludGluZyk7CiAgICAg
ICAgIH0KICAgICB9IHdoaWxlIChzaGFkb3cpOwogCkBAIC05NzgsNyArOTc4LDcgQEAgc3RhdGlj
IEdyYXBoaWNzQ29udGV4dDo6VGV4dENoZWNraW5nTGluZQogICAgIH0KIH0KIAotdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCog
cHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCit2b2lk
IElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIoR3JhcGhpY3NDb250
ZXh0KiBwdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciog
bWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgZ3JhbW1h
cikKIHsKICAgICAvLyBOZXZlciBwcmludCBzcGVsbGluZy9ncmFtbWFyIG1hcmtlcnMgKDUzMjc4
ODcpCiAgICAgaWYgKHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmludGluZygpKQpAQCAt
MTAwOSw3ICsxMDA5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFt
bQogICAgICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgJiB3aWR0aAogICAgICAgICBpbnQgZGVsdGFZ
ID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2Vs
ZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rp
b25Ub3AoKTsKICAgICAgICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAg
ICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAt
IGRlbHRhWSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludChib3hPcmlnaW4ueCgp
LCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKICAgICAgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1
Y3RUZXh0UnVuKHN0eWxlLCBmb250KTsKIAogICAgICAgICAvLyBGSVhNRTogQ29udmVydCB0aGUg
ZG9jdW1lbnQgbWFya2VycyB0byBmbG9hdCByZWN0cy4KQEAgLTEwMjEsNyArMTAyMSw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KICAgICAgICAgLy8gZGlzcGxh
eSBhIHRvb2xUaXAuIFdlIGRvbid0IGRvIHRoaXMgZm9yIG1pc3NwZWxsaW5nIG1hcmtlcnMuCiAg
ICAgICAgIGlmIChncmFtbWFyKSB7CiAgICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmUoLWJveE9y
aWdpbi54KCksIC1ib3hPcmlnaW4ueSgpKTsKLSAgICAgICAgICAgIG1hcmtlclJlY3QgPSByZW5k
ZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSkuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKICAgICAgICAgICAgIHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIp
LT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDQz
LDEwICsxMDQzLDEwIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0K
ICAgICAgICAgLy8gSW4gbGFyZ2VyIGZvbnRzLCB0aG91Z2gsIHBsYWNlIHRoZSB1bmRlcmxpbmUg
dXAgbmVhciB0aGUgYmFzZWxpbmUgdG8gcHJldmVudCBhIGJpZyBnYXAuCiAgICAgICAgIHVuZGVy
bGluZU9mZnNldCA9IGJhc2VsaW5lICsgMjsKICAgICB9Ci0gICAgcHQtPmRyYXdMaW5lRm9yVGV4
dENoZWNraW5nKEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgp
ICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZvck1hcmtl
clR5cGUobWFya2VyLT50eXBlKCkpKTsKKyAgICBwdC0+ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmco
R3JhcGhpY3NQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyB1bmRl
cmxpbmVPZmZzZXQpLCB3aWR0aCwgdGV4dENoZWNraW5nTGluZVN0eWxlRm9yTWFya2VyVHlwZSht
YXJrZXItPnR5cGUoKSkpOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNo
TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
RG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBm
b250KQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0Nv
bnRleHQqIHB0LCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2Vy
KiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKIHsKICAgICAv
LyBVc2Ugc2FtZSB5IHBvc2l0aW9uaW5nIGFuZCBoZWlnaHQgYXMgZm9yIHNlbGVjdGlvbiwgc28g
dGhhdCB3aGVuIHRoZSBzZWxlY3Rpb24gYW5kIHRoaXMgaGlnaGxpZ2h0IGFyZSBvbgogICAgIC8v
IHRoZSBzYW1lIHdvcmQgdGhlcmUgYXJlIG5vIHBpZWNlcyBzdGlja2luZyBvdXQuCkBAIC0xMDU5
LDcgKzEwNTksNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAK
ICAgICAvLyBBbHdheXMgY29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgbWFya2VyLiBUaGUgY29tcHV0ZWQgcmVjdCBpcyBpbiBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBJbnRQb2ludCh4KCksIHNlbGVjdGlvblRvcCgpKSwgc2VsSGVp
Z2h0LCBzUG9zLCBlUG9zKSk7Ci0gICAgbWFya2VyUmVjdCA9IHJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OworICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBo
aWNzUmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICB0b1JlbmRl
cmVkRG9jdW1lbnRNYXJrZXIobWFya2VyKS0+c2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwog
ICAgIAogICAgIC8vIE9wdGlvbmFsbHkgaGlnaGxpZ2h0IHRoZSB0ZXh0CkBAIC0xMDY5LDggKzEw
NjksOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAgICAg
ICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yKCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqcHQpOwogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwg
MCwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotICAg
ICAgICBwdC0+Y2xpcChGbG9hdFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRl
bHRhWSwgbV9sb2dpY2FsV2lkdGgsIHNlbEhlaWdodCkpOwotICAgICAgICBwdC0+ZHJhd0hpZ2hs
aWdodEZvclRleHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdp
bi55KCkgLSBkZWx0YVkpLCBzZWxIZWlnaHQsIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBz
UG9zLCBlUG9zKTsKKyAgICAgICAgcHQtPmNsaXAoR3JhcGhpY3NSZWN0KGJveE9yaWdpbi54KCks
IGJveE9yaWdpbi55KCkgLSBkZWx0YVksIG1fbG9naWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKKyAg
ICAgICAgcHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHJ1biwgR3JhcGhpY3NQb2ludChi
b3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKSwgc2VsSGVpZ2h0LCBjb2xvciwg
c3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiAgICAgfQogfQogCkBAIC0xMDg3LDEx
ICsxMDg3LDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWMKICAg
ICAKICAgICAvLyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhp
cyBtYXJrZXIuCiAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250
LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc3RhcnRQb2ludCwgaCwgc1BvcywgZVBvcykpOwot
ICAgIG1hcmtlclJlY3QgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChtYXJrZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBtYXJrZXJSZWN0ID0g
cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobWFya2VyUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1h
cmtlciktPnNldFJlbmRlcmVkUmVjdChtYXJrZXJSZWN0KTsKIH0KICAgICAKLXZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQsIGJvb2wgYmFja2dyb3VuZCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1h
cmtlcnMoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2lu
LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGJvb2wgYmFja2dyb3VuZCkK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCktPm5vZGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1
NCw3ICsxMTU0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2Vycwog
ICAgIH0KIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5l
KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0
IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcmxpbmUpCit2b2lkIElubGluZVRleHRCb3g6OnBh
aW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGlu
ZSkKIHsKICAgICBpZiAobV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKICAgICAgICAg
cmV0dXJuOwpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENv
bXBvc2l0aW9uVW5kZQogCiAgICAgY3R4LT5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmUuY29sb3Is
IHJlbmRlcmVyKCktPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgY3R4LT5zZXRTdHJva2VU
aGlja25lc3MobGluZVRoaWNrbmVzcyk7Ci0gICAgY3R4LT5kcmF3TGluZUZvclRleHQoRmxvYXRQ
b2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0
KCkgLSBsaW5lVGhpY2tuZXNzKSwgd2lkdGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5w
cmludGluZygpKTsKKyAgICBjdHgtPmRyYXdMaW5lRm9yVGV4dChHcmFwaGljc1BvaW50KGJveE9y
aWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVU
aGlja25lc3MpLCB3aWR0aCwgdGV4dFJlbmRlcmVyKCktPmRvY3VtZW50KCktPnByaW50aW5nKCkp
OwogfQogCiBpbnQgSW5saW5lVGV4dEJveDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc0NhcmV0T2Zm
c2V0KGludCBvZmZzZXQpIGNvbnN0OyAvLyBmYWxzZSBmb3Igb2Zmc2V0IGFmdGVyIGxpbmUgYnJl
YWsKIAogICAgIC8vIE5lZWRzIHRvIGJlIHB1YmxpYywgc28gdGhlIHN0YXRpYyBwYWludFRleHRX
aXRoU2hhZG93cygpIGZ1bmN0aW9uIGNhbiB1c2UgaXQuCi0gICAgc3RhdGljIEZsb2F0U2l6ZSBh
cHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNoYWRv
d0RhdGEqLCBjb25zdCBGbG9hdFJlY3QmIHRleHRSZWN0LCBib29sIHN0cm9rZWQsIGJvb2wgb3Bh
cXVlLCBib29sIGhvcml6b250YWwpOworICAgIHN0YXRpYyBHcmFwaGljc1NpemUgYXBwbHlTaGFk
b3dUb0dyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaGFkb3dEYXRhKiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiB0ZXh0UmVjdCwgYm9vbCBzdHJva2VkLCBib29sIG9wYXF1ZSwg
Ym9vbCBob3Jpem9udGFsKTsKIAogcHJpdmF0ZToKICAgICBJbmxpbmVUZXh0Qm94KiBtX3ByZXZU
ZXh0Qm94OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmpl
Y3QKQEAgLTE2NSwxOCArMTY1LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZGVub3RlIG5vIHRydW5jYXRpb24gKHRoZSB3aG9sZSBydW4gcGFpbnRzKSBhbmQgZnVsbCB0
cnVuY2F0aW9uIChub3RoaW5nIHBhaW50cyBhdCBhbGwpLgogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGludCBzdGFydFBv
cywgaW50IGVuZFBvcyk7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3Qg
Rm9udCYsIGJvb2wgYmFja2dyb3VuZCk7Ci0gICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3Qg
Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3Jv
dW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgUmVu
ZGVyU3R5bGUqLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2
b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3Jv
dW5kKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVuZGVy
bGluZSYpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0
KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgaW50IGRlY29yYXRpb24sIGNvbnN0IFNoYWRvd0Rh
dGEqKTsKLSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250Jik7Ci0gICAgdm9p
ZCBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0
IEZvbnQmLCBib29sIGdyYW1tYXIpOwotICAgIHZvaWQgcGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtl
ciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnREZWNvcmF0aW9u
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgaW50IGRl
Y29yYXRpb24sIGNvbnN0IFNoYWRvd0RhdGEqKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5
bGUqLCBjb25zdCBGb250Jik7CisgICAgdm9pZCBwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2Vy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgRG9jdW1l
bnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOworICAg
IHZvaWQgcGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgYm94T3JpZ2luLCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3Qg
Rm9udCYpOwogICAgIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVu
dE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwogCiAgICAgVGV4dFJ1bjo6RXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBwcgogICAg
IGJvb2wgZml4ZWQgPSByZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXItPnN0eWxl
KCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbjsKICAgICBpZiAoZml4ZWQpIHsKICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMu
Ci0gICAgICAgIEZsb2F0UG9pbnQgZml4ZWRPZmZzZXQgPSByZW5kZXJlci0+dmlldygpLT5sb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCB0cnVlKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBm
aXhlZE9mZnNldCA9IHJlbmRlcmVyLT52aWV3KCktPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1Bv
aW50KCksIHRydWUpOwogICAgICAgICBtX3BhaW50T2Zmc2V0ID0gTGF5b3V0U2l6ZShmaXhlZE9m
ZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CiAgICAgfSBlbHNlCiAgICAgICAg
IG1fcGFpbnRPZmZzZXQgPSBwcmV2LT5tX3BhaW50T2Zmc2V0ICsgb2Zmc2V0OwpAQCAtMTE3LDcg
KzExNyw3IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHIKICNlbmRp
ZgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVyKCk7Ci0g
ICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICBHcmFwaGljc1BvaW50IGFic0NvbnRl
bnRQb2ludCA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSwgZmFs
c2UsIHRydWUpOwogICAgIG1fcGFpbnRPZmZzZXQgPSBMYXlvdXRTaXplKGFic0NvbnRlbnRQb2lu
dC54KCksIGFic0NvbnRlbnRQb2ludC55KCkpOwogCiAgICAgaWYgKGNvbnRhaW5lci0+aGFzT3Zl
cmZsb3dDbGlwKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5o
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAjaWZuZGVmIExheW91dFR5cGVz
X2gKICNkZWZpbmUgTGF5b3V0VHlwZXNfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00NiwyMiArNDYsMjIgQEAgdHlwZWRlZiBJbnRQb2ludCBMYXlvdXRQb2lu
dDsKIHR5cGVkZWYgSW50U2l6ZSBMYXlvdXRTaXplOwogdHlwZWRlZiBJbnRSZWN0IExheW91dFJl
Y3Q7CiAKLWlubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoraW5saW5lIExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7
CiB9CiAKLWlubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcCkKK2lubGluZSBMYXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCkKIHsKICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOwogfQogCi1p
bmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHAp
CitpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHApCiB7CiAgICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChwKTsKIH0KIAotaW5saW5lIExh
eW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCitpbmxpbmUg
TGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcykKIHsK
ICAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KHMpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbmNsdWRlICJDb2x1bW5JbmZvLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMjc0Nyw3ICsyNzQ3LDcgQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcFJlY3RzRgogICAgICAgICByZXR1cm4gR2FwUmVj
dHMoKTsKIAogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKLSAg
ICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFu
c2Zvcm1EaXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7CisgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNm
b3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBHcmFwaGlj
c1BvaW50KCkpOwogICAgIG1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgZmFs
c2UsIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSk7CiAgICAgSW50UG9pbnQgb2Zmc2V0RnJvbVJlcGFp
bnRDb250YWluZXIgPSByb3VuZGVkSW50UG9pbnQodHJhbnNmb3JtU3RhdGUubWFwcGVkUG9pbnQo
KSk7CiAKQEAgLTI3NzYsNyArMjc3Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0
aW9uKFBhaW50SW4KICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAg
ICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRS
ZWN0KGxvY2FsQm91bmRzKSwgbGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CisgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5l
clF1YWQoR3JhcGhpY3NSZWN0KGxvY2FsQm91bmRzKSwgbGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1v
dmUobGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBSZWN0
c0JvdW5kcyk7CkBAIC01NzMzLDcgKzU3MzMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphYnNvbHV0
ZVJlY3RzKFZlY3RvcjxMCiAgICAgICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlckJsb2NrOjphYnNvbHV0ZVF1
YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsKICAgICAvLyBGb3IgYmxvY2tzIGlu
c2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2Ug
cnVuIHJpZ2h0IHVwIHRvIHRoZQogICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cg
dXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1
bGFyCkBAIC01NzQxLDEyICs1NzQxLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFic29sdXRlUXVh
ZHMoVmVjdG9yPEYKICAgICBpZiAoaXNBbm9ueW1vdXNCbG9ja0NvbnRpbnVhdGlvbigpKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciBibG9jay1mbG93cyB0aGF0IGFyZSBo
b3Jpem9udGFsLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDY3ODEKLSAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdCgwLCAtY29sbGFwc2VkTWFy
Z2luQmVmb3JlKCksCisgICAgICAgIEdyYXBoaWNzUmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxhcHNl
ZE1hcmdpbkJlZm9yZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCksIGhl
aWdodCgpICsgY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgKyBjb2xsYXBzZWRNYXJnaW5BZnRlcigp
KTsKICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7
CiAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKICAgICB9IGVs
c2UKLSAgICAgICAgcXVhZHMuYXBwZW5kKFJlbmRlckJveDo6bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKSk7CisgICAgICAgIHF1YWRzLmFwcGVu
ZChSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KDAsIDAsIHdpZHRo
KCksIGhlaWdodCgpKSkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJsb2NrOjpyZWN0V2l0aE91dGxp
bmVGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBpbnQg
b3V0bGluZVdpZHRoKQpAQCAtNTg3NCwxMCArNTg3NCwxMCBAQCBJbnRSZWN0IFJlbmRlckJsb2Nr
Ojpsb2NhbENhcmV0UmVjdChJbmxpCiAKICAgICAgICAgICAgIGludCBteVJpZ2h0ID0geCArIGNh
cmV0V2lkdGg7CiAgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGNhbGwgbG9jYWxUb0Fic29sdXRl
Rm9yQ29udGVudCgpIHR3aWNlIGhlcmUsIHRvbz8KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJz
UmlnaHRQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG15UmlnaHQsIDApKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUmlnaHRQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShH
cmFwaGljc1BvaW50KG15UmlnaHQsIDApKTsKIAogICAgICAgICAgICAgaW50IGNvbnRhaW5lclJp
Z2h0ID0gY29udGFpbmluZ0Jsb2NrKCktPngoKSArIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvckNvbnRlbnQoKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzQ29udGFpbmVyUG9pbnQg
PSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChjb250YWluZXJSaWdodCwgMCkpOworICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShH
cmFwaGljc1BvaW50KGNvbnRhaW5lclJpZ2h0LCAwKSk7CiAKICAgICAgICAgICAgICpleHRyYVdp
ZHRoVG9FbmRPZkxpbmUgPSBhYnNDb250YWluZXJQb2ludC54KCkgLSBhYnNSaWdodFBvaW50Lngo
KTsKICAgICAgICAgfQpAQCAtNTkyMCwxMiArNTkyMCwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0g
Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkgJiYgY3Vy
ci0+aXNCb3goKSkgewogICAgICAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJC
b3goY3Vycik7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3M7CisgICAgICAgICAgICAg
ICAgR3JhcGhpY3NQb2ludCBwb3M7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCiAgICAgICAgICAgICAgICAgaWYg
KGJveC0+bGF5ZXIoKSkgCiAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9B
YnNvbHV0ZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcG9z
ID0gRmxvYXRQb2ludChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJveC0+eCgpLCBhZGRpdGlvbmFs
T2Zmc2V0LnkoKSArIGJveC0+eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gR3JhcGhp
Y3NQb2ludChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGJveC0+eCgpLCBhZGRpdGlvbmFsT2Zmc2V0
LnkoKSArIGJveC0+eSgpKTsKICAgICAgICAgICAgICAgICBib3gtPmFkZEZvY3VzUmluZ1JlY3Rz
KHJlY3RzLCBmbG9vcmVkSW50UG9pbnQocG9zKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MzIsNyArNjMyLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBv
c2l0aW9uKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5
b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogICAgIExheW91
dFVuaXQgZGVzaXJlZENvbHVtbldpZHRoKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZGVzaXJlZENv
bHVtbkNvdW50KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8u
aCIKQEAgLTQ2MSw5ICs0NjEsOSBAQCB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0
b3I8TGF5CiAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIHNp
emUoKSkpOwogfQogCi12b2lkIFJlbmRlckJveDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhp
Y3NRdWFkPiYgcXVhZHMpCiB7Ci0gICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpOworICAgIHF1YWRzLmFwcGVuZChs
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkp
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUxheWVyVHJhbnNmb3JtKCkKQEAgLTQ3Niwx
NSArNDc2LDE1IEBAIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMYXllclRyYW5zZm9ybSgpCiBJbnRS
ZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKIHsKICAgICBJbnRSZWN0
IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBsb2Nh
bFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludCgpKTsKICAgICByZWN0Lm1vdmUoYWJzUG9zLngoKSwg
YWJzUG9zLnkoKSk7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUZsb2F0UXVhZCBSZW5kZXJCb3g6
OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAorR3JhcGhpY3NRdWFkIFJlbmRlckJveDo6YWJz
b2x1dGVDb250ZW50UXVhZCgpIGNvbnN0CiB7CiAgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJv
eFJlY3QoKTsKLSAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocmVjdCkp
OworICAgIHJldHVybiBsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSk7CiB9
CiAKIEludFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVw
YWludENvbnRhaW5lcikgY29uc3QKQEAgLTQ5Miw3ICs0OTIsNyBAQCBJbnRSZWN0IFJlbmRlckJv
eDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpCiAgICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3VuZGlu
Z0JveCgpOwogICAgIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KGJveCk7CiAKLSAgICBG
bG9hdFF1YWQgY29udGFpbmVyUmVsYXRpdmVRdWFkID0gRmxvYXRSZWN0KGJveCk7CisgICAgR3Jh
cGhpY3NRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IEdyYXBoaWNzUmVjdChib3gpOwogICAg
IGlmIChjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpCiAgICAgICAgIGNvbnRhaW5lclJl
bGF0aXZlUXVhZC5tb3ZlKGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lci0+eCgpLCBjYWNo
ZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXItPnkoKSk7CiAgICAgZWxzZQpAQCAtODE3LDcgKzgx
Nyw3IEBAIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBSZW5kZXJCb3g6OmRldGUKICAgICAgICAg
cmV0dXJuIEJhY2tncm91bmRCbGVlZE5vbmU7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0g
Y29udGV4dC0+Z2V0Q1RNKCk7Ci0gICAgRmxvYXRTaXplIGNvbnRleHRTY2FsaW5nKHN0YXRpY19j
YXN0PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgp
KSk7CisgICAgR3JhcGhpY3NTaXplIGNvbnRleHRTY2FsaW5nKHN0YXRpY19jYXN0PGZsb2F0Pihj
dG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgpKSk7CiAgICAgaWYg
KGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29udGV4dFNjYWxpbmcpKQogICAgICAgICBy
ZXR1cm4gQmFja2dyb3VuZEJsZWVkU2hyaW5rQmFja2dyb3VuZDsKICAgICAKQEAgLTEwODUsMTEg
KzEwODUsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbgogICAg
IElubGluZUJveCogYm94V3JhcCA9IGlubGluZUJveFdyYXBwZXIoKTsKICAgICBSb290SW5saW5l
Qm94KiByID0gYm94V3JhcCA/IGJveFdyYXAtPnJvb3QoKSA6IDA7CiAgICAgaWYgKHIpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IHJvb3RSZWN0KHBhaW50T2Zmc2V0LngoKSArIHItPngoKSwgcGFpbnRP
ZmZzZXQueSgpICsgci0+c2VsZWN0aW9uVG9wKCksIHItPmxvZ2ljYWxXaWR0aCgpLCByLT5zZWxl
Y3Rpb25IZWlnaHQoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QocGFpbnRPZmZzZXQu
eCgpICsgeCgpLCByb290UmVjdC55KCksIHdpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgR3JhcGhpY3NSZWN0IHJvb3RSZWN0KHBhaW50T2Zmc2V0LngoKSArIHItPngoKSwgcGFp
bnRPZmZzZXQueSgpICsgci0+c2VsZWN0aW9uVG9wKCksIHItPmxvZ2ljYWxXaWR0aCgpLCByLT5z
ZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBpbWFnZVJlY3QocGFpbnRP
ZmZzZXQueCgpICsgeCgpLCByb290UmVjdC55KCksIHdpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgp
KTsKICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbUhpZ2hsaWdo
dChub2RlKCksIHR5cGUsIGltYWdlUmVjdCwgcm9vdFJlY3QsIGJlaGluZFRleHQsIGZhbHNlKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0Lngo
KSArIHgoKSwgcGFpbnRPZmZzZXQueSgpICsgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCBpbWFnZVJlY3QocGFpbnRPZmZzZXQueCgpICsgeCgpLCBwYWludE9m
ZnNldC55KCkgKyB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpLT5wYWludEN1c3RvbUhpZ2hsaWdodChub2RlKCksIHR5cGUsIGltYWdlUmVj
dCwgaW1hZ2VSZWN0LCBiZWhpbmRUZXh0LCBmYWxzZSk7CiAgICAgfQogfQpAQCAtMTM1NSw3ICsx
MzU1LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBvc2l0aW9uTGluZUJveChJbmxpbmVCbwogICAgICAg
ICBib3gtPnJlbW92ZSgpOwogICAgICAgICBib3gtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7CiAg
ICAgfSBlbHNlIGlmIChpc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgc2V0TG9jYXRpb24ocm91bmRl
ZEludFBvaW50KEZsb2F0UG9pbnQoYm94LT54KCksIGJveC0+eSgpKSkpOworICAgICAgICBzZXRM
b2NhdGlvbihyb3VuZGVkSW50UG9pbnQoR3JhcGhpY3NQb2ludChib3gtPngoKSwgYm94LT55KCkp
KSk7CiAgICAgICAgIG1faW5saW5lQm94V3JhcHBlciA9IGJveDsKICAgICB9CiB9CkBAIC0zNDQw
LDE0ICszNDQwLDE0IEBAIEludFNpemUgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoY28K
ICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEludFNpemUob2Zmc2V0Lndp
ZHRoKCksIGhlaWdodCgpIC0gb2Zmc2V0LmhlaWdodCgpKSA6IEludFNpemUod2lkdGgoKSAtIG9m
ZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCkpOwogfQogCi1GbG9hdFBvaW50IFJlbmRlckJv
eDo6ZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAor
R3JhcGhpY3NQb2ludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBHcmFwaGlj
c1BvaW50JiBwb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLSAgICByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEZsb2F0UG9pbnQocG9zaXRpb24ueCgpLCBoZWln
aHQoKSAtIHBvc2l0aW9uLnkoKSkgOiBGbG9hdFBvaW50KHdpZHRoKCkgLSBwb3NpdGlvbi54KCks
IHBvc2l0aW9uLnkoKSk7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBH
cmFwaGljc1BvaW50KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55KCkpIDogR3Jh
cGhpY3NQb2ludCh3aWR0aCgpIC0gcG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOwogfQogCi12
b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYgcmVjdCkgY29uc3QK
K3ZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0JiByZWN0KSBj
b25zdAogewogICAgIGlmICghc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkK
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGNv
bnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgogICAgIExh
eW91dFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CiAgICAgLy8gVGhlIGNvbnRlbnQg
Ym94IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBjb29yZHMgKHRha2luZyB0cmFuc2Zvcm1zIGludG8g
YWNjb3VudCkuCi0gICAgRmxvYXRRdWFkIGFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdDsKKyAg
ICBHcmFwaGljc1F1YWQgYWJzb2x1dGVDb250ZW50UXVhZCgpIGNvbnN0OwogCiAgICAgLy8gQm91
bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIFJlc3BlY3RzIHRyYW5z
Zm9ybXMKICAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBJbnRQb2ludCogY2FjaGVkT2Zm
c2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdDsKQEAgLTIyOCw3ICsyMjgsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbWFyZ2luQWZ0ZXIoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAg
IHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAgICAg
CiAgICAgSW50UmVjdCByZWZsZWN0aW9uQm94KCkgY29uc3Q7CiAgICAgaW50IHJlZmxlY3Rpb25P
ZmZzZXQoKSBjb25zdDsKQEAgLTM5NCw4ICszOTQsOCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UG9p
bnQgZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhjb25zdCBMYXlvdXRQb2ludCYp
IGNvbnN0OwogICAgIEludFNpemUgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEludFNpemUmKSBj
b25zdDsKICAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShJbnRSZWN0JikgY29uc3Q7Ci0gICAg
RmxvYXRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlKEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEdyYXBo
aWNzUG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsK
KyAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShHcmFwaGljc1JlY3QmKSBjb25zdDsKICAgICBJ
bnRTaXplIGxvY2F0aW9uT2Zmc2V0SW5jbHVkaW5nRmxpcHBpbmcoKSBjb25zdDsKIAogICAgIElu
dFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxl
KikgY29uc3Q7CkBAIC00MDYsNyArNDA2LDcgQEAgcHVibGljOgogICAgIFJlbmRlck92ZXJmbG93
KiBoYXNSZW5kZXJPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cuZ2V0KCk7IH0K
IAogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlvSW5mb3JtYXRpb24o
RmxvYXRTaXplJiAvKiBpbnRyaW5zaWNSYXRpbyAqLywgYm9vbCYgLyogaXNQZXJjZW50YWdlSW50
cmluc2ljU2l6ZSAqLykgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5z
aWNSYXRpb0luZm9ybWF0aW9uKEdyYXBoaWNzU2l6ZSYgLyogaW50cmluc2ljUmF0aW8gKi8sIGJv
b2wmIC8qIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUgKi8pIGNvbnN0IHsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw3ICs1ODMsNyBAQCBzdGF0aWMgSW50UmVjdCBi
YWNrZ3JvdW5kUmVjdEFkanVzdGVkRm9yCiAgICAgSW50UmVjdCBhZGp1c3RlZFJlY3QgPSBib3Jk
ZXJSZWN0OwogICAgIC8vIFdlIG5lZWQgdG8gc2hyaW5rIHRoZSBib3JkZXIgYnkgb25lIGRldmlj
ZSBwaXhlbCBvbiBlYWNoIHNpZGUuCiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQt
PmdldENUTSgpOwotICAgIEZsb2F0U2l6ZSBjb250ZXh0U2NhbGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGN0bS54U2NhbGUoKSksIHN0YXRpY19jYXN0PGZsb2F0PihjdG0ueVNjYWxlKCkpKTsKKyAgICBH
cmFwaGljc1NpemUgY29udGV4dFNjYWxlKHN0YXRpY19jYXN0PGZsb2F0PihjdG0ueFNjYWxlKCkp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2FsZSgpKSk7CiAgICAgYWRqdXN0ZWRSZWN0Lmlu
ZmxhdGVYKC1jZWlsZigxIC8gY29udGV4dFNjYWxlLndpZHRoKCkpKTsKICAgICBhZGp1c3RlZFJl
Y3QuaW5mbGF0ZVkoLWNlaWxmKDEgLyBjb250ZXh0U2NhbGUuaGVpZ2h0KCkpKTsKICAgICByZXR1
cm4gYWRqdXN0ZWRSZWN0OwpAQCAtMTkzNiwyNiArMTkzNiwyNiBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEJvcmRlcihHCiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgZmluZElu
bmVyVmVydGV4KGNvbnN0IEZsb2F0UG9pbnQmIG91dGVyQ29ybmVyLCBjb25zdCBGbG9hdFBvaW50
JiBpbm5lckNvcm5lciwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyUG9pbnQsIEZsb2F0UG9pbnQm
IHJlc3VsdCkKK3N0YXRpYyB2b2lkIGZpbmRJbm5lclZlcnRleChjb25zdCBHcmFwaGljc1BvaW50
JiBvdXRlckNvcm5lciwgY29uc3QgR3JhcGhpY3NQb2ludCYgaW5uZXJDb3JuZXIsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGNlbnRlclBvaW50LCBHcmFwaGljc1BvaW50JiByZXN1bHQpCiB7CiAgICAg
Ly8gSWYgdGhlIGxpbmUgYmV0d2VlbiBvdXRlciBhbmQgaW5uZXIgY29ybmVyIGlzIHRvd2FyZHMg
dGhlIGhvcml6b250YWwsIGludGVyc2VjdCB3aXRoIGEgdmVydGljYWwgbGluZSB0aHJvdWdoIHRo
ZSBjZW50ZXIsCiAgICAgLy8gb3RoZXJ3aXNlIHdpdGggYSBob3Jpem9udGFsIGxpbmUgdGhyb3Vn
aCB0aGUgY2VudGVyLiBUaGUgcG9pbnRzIHRoYXQgZm9ybSB0aGlzIGxpbmUgYXJlIGFyYml0cmFy
eSAod2UgdXNlIDAsIDEwMCkuCiAgICAgLy8gTm90ZSB0aGF0IGlmIGZpbmRJbnRlcnNlY3Rpb24g
ZmFpbHMsIGl0IHdpbGwgbGVhdmUgcmVzdWx0IHVudG91Y2hlZC4KICAgICBpZiAoZmFicyhvdXRl
ckNvcm5lci54KCkgLSBpbm5lckNvcm5lci54KCkpID4gZmFicyhvdXRlckNvcm5lci55KCkgLSBp
bm5lckNvcm5lci55KCkpKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyQ29ybmVyLCBp
bm5lckNvcm5lciwgRmxvYXRQb2ludChjZW50ZXJQb2ludC54KCksIDApLCBGbG9hdFBvaW50KGNl
bnRlclBvaW50LngoKSwgMTAwKSwgcmVzdWx0KTsKKyAgICAgICAgZmluZEludGVyc2VjdGlvbihv
dXRlckNvcm5lciwgaW5uZXJDb3JuZXIsIEdyYXBoaWNzUG9pbnQoY2VudGVyUG9pbnQueCgpLCAw
KSwgR3JhcGhpY3NQb2ludChjZW50ZXJQb2ludC54KCksIDEwMCksIHJlc3VsdCk7CiAgICAgZWxz
ZQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uKG91dGVyQ29ybmVyLCBpbm5lckNvcm5lciwgRmxv
YXRQb2ludCgwLCBjZW50ZXJQb2ludC55KCkpLCBGbG9hdFBvaW50KDEwMCwgY2VudGVyUG9pbnQu
eSgpKSwgcmVzdWx0KTsKKyAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlckNvcm5lciwgaW5u
ZXJDb3JuZXIsIEdyYXBoaWNzUG9pbnQoMCwgY2VudGVyUG9pbnQueSgpKSwgR3JhcGhpY3NQb2lu
dCgxMDAsIGNlbnRlclBvaW50LnkoKSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgUm91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBSb3VuZGVkUmVj
dCYgaW5uZXJCb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQm94U2lkZSBzaWRlLCBib29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25k
RWRnZU1hdGNoZXMpCiB7Ci0gICAgRmxvYXRQb2ludCBxdWFkWzRdOworICAgIEdyYXBoaWNzUG9p
bnQgcXVhZFs0XTsKIAogICAgIGNvbnN0IEludFJlY3QmIG91dGVyUmVjdCA9IG91dGVyQm9yZGVy
LnJlY3QoKTsKICAgICBjb25zdCBJbnRSZWN0JiBpbm5lclJlY3QgPSBpbm5lckJvcmRlci5yZWN0
KCk7CiAKLSAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50KGlubmVyUmVjdC5sb2NhdGlvbigpLngo
KSArIHN0YXRpY19jYXN0PGZsb2F0Pihpbm5lclJlY3Qud2lkdGgoKSkgLyAyLCBpbm5lclJlY3Qu
bG9jYXRpb24oKS55KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJSZWN0LmhlaWdodCgpKSAv
IDIpOworICAgIEdyYXBoaWNzUG9pbnQgY2VudGVyUG9pbnQoaW5uZXJSZWN0LmxvY2F0aW9uKCku
eCgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlubmVyUmVjdC53aWR0aCgpKSAvIDIsIGlubmVyUmVj
dC5sb2NhdGlvbigpLnkoKSArIHN0YXRpY19jYXN0PGZsb2F0Pihpbm5lclJlY3QuaGVpZ2h0KCkp
IC8gMik7CiAKICAgICAvLyBGb3IgZWFjaCBzaWRlLCBjcmVhdGUgYSBxdWFkIHRoYXQgZW5jb21w
YXNzZXMgYWxsIHBhcnRzIG9mIHRoYXQgc2lkZSB0aGF0IG1heSBkcmF3LAogICAgIC8vIGluY2x1
ZGluZyBhcmVhcyBpbnNpZGUgdGhlIGlubmVyQm9yZGVyLgpAQCAtMjAzMywxOCArMjAzMywxOCBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkCiAgICAgfQogCiAgICAg
Ly8gU3F1YXJlIG9mZiB0aGUgZW5kIHdoaWNoIHNob3VsZG4ndCBiZSBhZmZlY3RlZCBieSBhbnRp
YWxpYXNpbmcsIGFuZCBjbGlwLgotICAgIEZsb2F0UG9pbnQgZmlyc3RRdWFkWzRdOworICAgIEdy
YXBoaWNzUG9pbnQgZmlyc3RRdWFkWzRdOwogICAgIGZpcnN0UXVhZFswXSA9IHF1YWRbMF07CiAg
ICAgZmlyc3RRdWFkWzFdID0gcXVhZFsxXTsKLSAgICBmaXJzdFF1YWRbMl0gPSBzaWRlID09IEJT
VG9wIHx8IHNpZGUgPT0gQlNCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFkWzJd
LnkoKSkKLSAgICAgICAgOiBGbG9hdFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSk7Cisg
ICAgZmlyc3RRdWFkWzJdID0gc2lkZSA9PSBCU1RvcCB8fCBzaWRlID09IEJTQm90dG9tID8gR3Jh
cGhpY3NQb2ludChxdWFkWzNdLngoKSwgcXVhZFsyXS55KCkpCisgICAgICAgIDogR3JhcGhpY3NQ
b2ludChxdWFkWzJdLngoKSwgcXVhZFszXS55KCkpOwogICAgIGZpcnN0UXVhZFszXSA9IHF1YWRb
M107CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwQ29udmV4UG9seWdvbig0LCBmaXJzdFF1YWQs
ICFmaXJzdEVkZ2VNYXRjaGVzKTsKIAotICAgIEZsb2F0UG9pbnQgc2Vjb25kUXVhZFs0XTsKKyAg
ICBHcmFwaGljc1BvaW50IHNlY29uZFF1YWRbNF07CiAgICAgc2Vjb25kUXVhZFswXSA9IHF1YWRb
MF07Ci0gICAgc2Vjb25kUXVhZFsxXSA9IHNpZGUgPT0gQlNUb3AgfHwgc2lkZSA9PSBCU0JvdHRv
bSA/IEZsb2F0UG9pbnQocXVhZFswXS54KCksIHF1YWRbMV0ueSgpKQotICAgICAgICA6IEZsb2F0
UG9pbnQocXVhZFsxXS54KCksIHF1YWRbMF0ueSgpKTsKKyAgICBzZWNvbmRRdWFkWzFdID0gc2lk
ZSA9PSBCU1RvcCB8fCBzaWRlID09IEJTQm90dG9tID8gR3JhcGhpY3NQb2ludChxdWFkWzBdLngo
KSwgcXVhZFsxXS55KCkpCisgICAgICAgIDogR3JhcGhpY3NQb2ludChxdWFkWzFdLngoKSwgcXVh
ZFswXS55KCkpOwogICAgIHNlY29uZFF1YWRbMl0gPSBxdWFkWzJdOwogICAgIHNlY29uZFF1YWRb
M10gPSBxdWFkWzNdOwogICAgIC8vIEFudGlhbGlhc2luZyBhZmZlY3RzIHRoZSBzZWNvbmQgc2lk
ZS4KQEAgLTIwODEsNyArMjA4MSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmdldEJv
cmRlckVkZ2UKICAgICAgICAgIWhvcml6b250YWwgfHwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSk7
CiB9CiAKLWJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmJvcmRlck9ic2N1cmVzQmFja2dyb3Vu
ZEVkZ2UoY29uc3QgRmxvYXRTaXplJiBjb250ZXh0U2NhbGUpIGNvbnN0Citib29sIFJlbmRlckJv
eE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlKGNvbnN0IEdyYXBoaWNz
U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAogewogICAgIEJvcmRlckVkZ2UgZWRnZXNbNF07CiAg
ICAgZ2V0Qm9yZGVyRWRnZUluZm8oZWRnZXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Miw3ICsxODIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNhbGN1bGF0ZUJh
Y2tncm91bmRJbWFnZUdlb21ldHJ5KGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEludFJlY3QmIHBh
aW50UmVjdCwgQmFja2dyb3VuZEltYWdlR2VvbWV0cnkmKTsKICAgICB2b2lkIGdldEJvcmRlckVk
Z2VJbmZvKGNsYXNzIEJvcmRlckVkZ2VbXSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlID0g
dHJ1ZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSA9IHRydWUpIGNvbnN0OwotICAgIGJv
b2wgYm9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShjb25zdCBGbG9hdFNpemUmIGNvbnRleHRT
Y2FsZSkgY29uc3Q7CisgICAgYm9vbCBib3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlKGNvbnN0
IEdyYXBoaWNzU2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdDsKIAogICAgIGJvb2wgc2hvdWxkUGFp
bnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiwgSW1hZ2UqLCBjb25zdCB2b2lkKiwgY29u
c3QgSW50U2l6ZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29t
YmluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCBmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgCiAgICAgcmV0dXJu
IFJlbmRlclRleHQ6OndpZHRoKGZyb20sIGxlbmd0aCwgZm9udCwgeFBvc2l0aW9uLCBmYWxsYmFj
a0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIH0KIAotdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6YWRq
dXN0VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJv
eFJlY3QpIGNvbnN0Cit2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjphZGp1c3RUZXh0T3JpZ2luKEdy
YXBoaWNzUG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCkgY29u
c3QKIHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQogICAgICAgICB0ZXh0T3JpZ2luLm1vdmUoYm94
UmVjdC5oZWlnaHQoKSAvIDIgLSBjZWlsZihtX2NvbWJpbmVkVGV4dFdpZHRoKSAvIDIsIHN0eWxl
KCktPmZvbnQoKS5waXhlbFNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ29tYmluZVRleHQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyQ29tYmluZVRleHQoTm9kZSosIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4pOwogCiAgICAgdm9pZCBjb21iaW5lVGV4dCgpOwotICAgIHZvaWQgYWRqdXN0
VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihHcmFwaGljc1BvaW50JiB0ZXh0
T3JpZ2luLCBjb25zdCBHcmFwaGljc1JlY3QmIGJveFJlY3QpIGNvbnN0OwogICAgIHZvaWQgY2hh
cmFjdGVyc1RvUmVuZGVyKGludCBzdGFydCwgY29uc3QgVUNoYXIqJiBjaGFyYWN0ZXJzLCBpbnQm
IGxlbmd0aCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbWJpbmVkOyB9CiAgICAgZmxvYXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9u
dCkgY29uc3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwzNiArNDQsMzYgQEAgYm9vbCBSZW5kZXJEZXRhaWxzTWFya2VyOjpp
c09wZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIFBhdGggY3JlYXRl
UGF0aChjb25zdCBGbG9hdFBvaW50KiBwYXRoKQorc3RhdGljIFBhdGggY3JlYXRlUGF0aChjb25z
dCBHcmFwaGljc1BvaW50KiBwYXRoKQogewogICAgIFBhdGggcmVzdWx0OwotICAgIHJlc3VsdC5t
b3ZlVG8oRmxvYXRQb2ludChwYXRoWzBdLngoKSwgcGF0aFswXS55KCkpKTsKKyAgICByZXN1bHQu
bW92ZVRvKEdyYXBoaWNzUG9pbnQocGF0aFswXS54KCksIHBhdGhbMF0ueSgpKSk7CiAgICAgZm9y
IChpbnQgaSA9IDE7IGkgPCA0OyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGRMaW5lVG8oRmxvYXRQ
b2ludChwYXRoW2ldLngoKSwgcGF0aFtpXS55KCkpKTsKKyAgICAgICAgcmVzdWx0LmFkZExpbmVU
byhHcmFwaGljc1BvaW50KHBhdGhbaV0ueCgpLCBwYXRoW2ldLnkoKSkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIHN0YXRpYyBQYXRoIGNyZWF0ZURvd25BcnJvd1BhdGgoKQogewotICAgIEZs
b2F0UG9pbnQgcG9pbnRzWzRdID0geyBGbG9hdFBvaW50KDAuMGYsIDAuMDdmKSwgRmxvYXRQb2lu
dCgwLjVmLCAwLjkzZiksIEZsb2F0UG9pbnQoMS4wZiwgMC4wN2YpLCBGbG9hdFBvaW50KDAuMGYs
IDAuMDdmKSB9OworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnRzWzRdID0geyBHcmFwaGljc1BvaW50
KDAuMGYsIDAuMDdmKSwgR3JhcGhpY3NQb2ludCgwLjVmLCAwLjkzZiksIEdyYXBoaWNzUG9pbnQo
MS4wZiwgMC4wN2YpLCBHcmFwaGljc1BvaW50KDAuMGYsIDAuMDdmKSB9OwogICAgIHJldHVybiBj
cmVhdGVQYXRoKHBvaW50cyk7CiB9CiAKIHN0YXRpYyBQYXRoIGNyZWF0ZVVwQXJyb3dQYXRoKCkK
IHsKLSAgICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgRmxvYXRQb2ludCgwLjBmLCAwLjkzZiks
IEZsb2F0UG9pbnQoMC41ZiwgMC4wN2YpLCBGbG9hdFBvaW50KDEuMGYsIDAuOTNmKSwgRmxvYXRQ
b2ludCgwLjBmLCAwLjkzZikgfTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1s0XSA9IHsgR3Jh
cGhpY3NQb2ludCgwLjBmLCAwLjkzZiksIEdyYXBoaWNzUG9pbnQoMC41ZiwgMC4wN2YpLCBHcmFw
aGljc1BvaW50KDEuMGYsIDAuOTNmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAwLjkzZikgfTsKICAg
ICByZXR1cm4gY3JlYXRlUGF0aChwb2ludHMpOwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVMZWZ0
QXJyb3dQYXRoKCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgRmxvYXRQb2ludCgx
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjE0ZiwgMC41ZiksIEZsb2F0UG9pbnQoMS4wZiwgMS4w
ZiksIEZsb2F0UG9pbnQoMS4wZiwgMC4wZikgfTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1s0
XSA9IHsgR3JhcGhpY3NQb2ludCgxLjBmLCAwLjBmKSwgR3JhcGhpY3NQb2ludCgwLjE0ZiwgMC41
ZiksIEdyYXBoaWNzUG9pbnQoMS4wZiwgMS4wZiksIEdyYXBoaWNzUG9pbnQoMS4wZiwgMC4wZikg
fTsKICAgICByZXR1cm4gY3JlYXRlUGF0aChwb2ludHMpOwogfQogCiBzdGF0aWMgUGF0aCBjcmVh
dGVSaWdodEFycm93UGF0aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC44NmYsIDAuNWYpLCBGbG9hdFBvaW50KDAu
MGYsIDEuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpIH07CisgICAgR3JhcGhpY3NQb2ludCBw
b2ludHNbNF0gPSB7IEdyYXBoaWNzUG9pbnQoMC4wZiwgMC4wZiksIEdyYXBoaWNzUG9pbnQoMC44
NmYsIDAuNWYpLCBHcmFwaGljc1BvaW50KDAuMGYsIDEuMGYpLCBHcmFwaGljc1BvaW50KDAuMGYs
IDAuMGYpIH07CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIApAQCAtMTE2LDcg
KzExNiw3IEBAIFBhdGggUmVuZGVyRGV0YWlsc01hcmtlcjo6Z2V0UGF0aChjb25zdCAKIHsKICAg
ICBQYXRoIHJlc3VsdCA9IGdldENhbm9uaWNhbFBhdGgoKTsKICAgICByZXN1bHQudHJhbnNmb3Jt
KEFmZmluZVRyYW5zZm9ybSgpLnNjYWxlKGxvZ2ljYWxIZWlnaHQoKSkpOwotICAgIHJlc3VsdC50
cmFuc2xhdGUoRmxvYXRTaXplKG9yaWdpbi54KCksIG9yaWdpbi55KCkpKTsKKyAgICByZXN1bHQu
dHJhbnNsYXRlKEdyYXBoaWNzU2l6ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1Nyw5ICsxNTcsOSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2Vk
CiAgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIEZsb2F0UmVjdCBjb250ZW50UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgY29udGVu
dFJlY3Q7CiAgICAgUGF0aCBwYXRoOwotICAgIEZsb2F0UmVjdCByZXBsYWNlbWVudFRleHRSZWN0
OworICAgIEdyYXBoaWNzUmVjdCByZXBsYWNlbWVudFRleHRSZWN0OwogICAgIEZvbnQgZm9udDsK
ICAgICBUZXh0UnVuIHJ1bigiIik7CiAgICAgZmxvYXQgdGV4dFdpZHRoOwpAQCAtMTc3LDEwICsx
NzcsMTAgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIGZs
b2F0IGxhYmVsWSA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueSgpICsg
KHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0
KCkpIC8gMiArIGZvbnRNZXRyaWNzLmFzY2VudCgpKTsKICAgICBjb250ZXh0LT5zZXRBbHBoYSht
X21pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRQcmVzc2Vk
VGV4dE9wYWNpdHkgOiByZXBsYWNlbWVudFRleHRUZXh0T3BhY2l0eSk7CiAgICAgY29udGV4dC0+
c2V0RmlsbENvbG9yKENvbG9yOjpibGFjaywgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKLSAgICBj
b250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGxhYmVsWCwgbGFiZWxZ
KSk7CisgICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgR3JhcGhpY3NQb2ludChs
YWJlbFgsIGxhYmVsWSkpOwogfQogCi1ib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpnZXRSZXBs
YWNlbWVudFRleHRHZW9tZXRyeShjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEZsb2F0UmVjdCYgY29udGVudFJlY3QsIFBhdGgmIHBhdGgsIEZsb2F0UmVjdCYgcmVwbGFjZW1l
bnRUZXh0UmVjdCwgRm9udCYgZm9udCwgVGV4dFJ1biYgcnVuLCBmbG9hdCYgdGV4dFdpZHRoKQor
Ym9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBHcmFwaGljc1JlY3QmIGNvbnRlbnRS
ZWN0LCBQYXRoJiBwYXRoLCBHcmFwaGljc1JlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQm
IGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkKIHsKICAgICBjb250ZW50UmVj
dCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29udGVudFJlY3QubW92ZUJ5KGFjY3VtdWxhdGVk
T2Zmc2V0KTsKQEAgLTIwMCwxMiArMjAwLDEyIEBAIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6
OmdldFJlcGxhY2VtZW4KICAgICBydW4gPSBUZXh0UnVuKG1fcmVwbGFjZW1lbnRUZXh0KTsKICAg
ICB0ZXh0V2lkdGggPSBmb250LndpZHRoKHJ1bik7CiAgICAgCi0gICAgcmVwbGFjZW1lbnRUZXh0
UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSh0ZXh0V2lkdGggKyByZXBsYWNlbWVudFRleHRSb3VuZGVk
UmVjdExlZnRSaWdodFRleHRNYXJnaW4gKiAyLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdEhl
aWdodCkpOworICAgIHJlcGxhY2VtZW50VGV4dFJlY3Quc2V0U2l6ZShHcmFwaGljc1NpemUodGV4
dFdpZHRoICsgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luICog
MiwgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RIZWlnaHQpKTsKICAgICBmbG9hdCB4ID0gKGNv
bnRlbnRSZWN0LnNpemUoKS53aWR0aCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgp
LndpZHRoKCkgLyAyKSArIGNvbnRlbnRSZWN0LmxvY2F0aW9uKCkueCgpOwogICAgIGZsb2F0IHkg
PSAoY29udGVudFJlY3Quc2l6ZSgpLmhlaWdodCgpIC8gMiAtIHJlcGxhY2VtZW50VGV4dFJlY3Qu
c2l6ZSgpLmhlaWdodCgpIC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICBy
ZXBsYWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoeCwgeSkpOworICAgIHJl
cGxhY2VtZW50VGV4dFJlY3Quc2V0TG9jYXRpb24oR3JhcGhpY3NQb2ludCh4LCB5KSk7CiAgICAg
Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZXBsYWNlbWVudFRleHRSZWN0LCBGbG9hdFNpemUo
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRS
ZWN0UmFkaXVzKSk7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZXBsYWNlbWVudFRleHRSZWN0
LCBHcmFwaGljc1NpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMsIHJlcGxhY2Vt
ZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI1
MSw5ICsyNTEsOSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojp2aWV3Q2xlYXJlZCgpCiAg
CiBib29sIFJlbmRlckVtYmVkZGVkT2JqZWN0Ojppc0luTWlzc2luZ1BsdWdpbkluZGljYXRvcihN
b3VzZUV2ZW50KiBldmVudCkKIHsKLSAgICBGbG9hdFJlY3QgY29udGVudFJlY3Q7CisgICAgR3Jh
cGhpY3NSZWN0IGNvbnRlbnRSZWN0OwogICAgIFBhdGggcGF0aDsKLSAgICBGbG9hdFJlY3QgcmVw
bGFjZW1lbnRUZXh0UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsK
ICAgICBGb250IGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0
aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBzZXRNaXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkKGJv
b2wpOwogICAgIGJvb2wgaXNJbk1pc3NpbmdQbHVnaW5JbmRpY2F0b3IoTW91c2VFdmVudCopOwot
ICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiwgRmxvYXRSZWN0
JiByZXBsYWNlbWVudFRleHRSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0ZXh0V2lkdGgp
OworICAgIGJvb2wgZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBHcmFwaGljc1JlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiwgR3Jh
cGhpY3NSZWN0JiByZXBsYWNlbWVudFRleHRSZWN0LCBGb250JiwgVGV4dFJ1biYsIGZsb2F0JiB0
ZXh0V2lkdGgpOwogCiAgICAgU3RyaW5nIG1fcmVwbGFjZW1lbnRUZXh0OwogICAgIGJvb2wgbV9o
YXNGYWxsYmFja0NvbnRlbnQ7IC8vIEZJWE1FOiBUaGlzIGJlbG9uZ3Mgb24gSFRNTE9iamVjdEVs
ZW1lbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkyLDcgKzY5Miw3IEBAIGJvb2wgUmVuZGVy
RnJhbWVTZXQ6OnVzZXJSZXNpemUoTW91c2VFdmUKICAgICAgICAgaWYgKG5lZWRzTGF5b3V0KCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOworICAg
ICAgICAgICAgR3JhcGhpY3NQb2ludCBwb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAg
ICAgIHN0YXJ0UmVzaXppbmcobV9jb2xzLCBldnQtPmFic29sdXRlTG9jYXRpb24oKS54KCkgLSBw
b3MueCgpKTsKICAgICAgICAgICAgIHN0YXJ0UmVzaXppbmcobV9yb3dzLCBldnQtPmFic29sdXRl
TG9jYXRpb24oKS55KCkgLSBwb3MueSgpKTsKICAgICAgICAgICAgIGlmIChtX2NvbHMubV9zcGxp
dEJlaW5nUmVzaXplZCAhPSBub1NwbGl0IHx8IG1fcm93cy5tX3NwbGl0QmVpbmdSZXNpemVkICE9
IG5vU3BsaXQpIHsKQEAgLTcwMiw3ICs3MDIsNyBAQCBib29sIFJlbmRlckZyYW1lU2V0Ojp1c2Vy
UmVzaXplKE1vdXNlRXZlCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXZ0
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50IHx8IChldnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zID0gbG9jYWxUb0Fic29sdXRlKCk7Cisg
ICAgICAgICAgICBHcmFwaGljc1BvaW50IHBvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAg
ICAgICAgY29udGludWVSZXNpemluZyhtX2NvbHMsIGV2dC0+YWJzb2x1dGVMb2NhdGlvbigpLngo
KSAtIHBvcy54KCkpOwogICAgICAgICAgICAgY29udGludWVSZXNpemluZyhtX3Jvd3MsIGV2dC0+
YWJzb2x1dGVMb2NhdGlvbigpLnkoKSAtIHBvcy55KCkpOwogICAgICAgICAgICAgaWYgKGV2dC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZ0LT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgUmVuZGVySW1h
Z2U6OmltYWdlRGltZW5zaW9uc0NoYW5nZWQKICAgICAgICAgaWYgKHJlY3QpIHsKICAgICAgICAg
ICAgIC8vIFRoZSBpbWFnZSBjaGFuZ2VkIHJlY3QgaXMgaW4gc291cmNlIGltYWdlIGNvb3JkaW5h
dGVzIChwcmUtem9vbWluZyksCiAgICAgICAgICAgICAvLyBzbyBtYXAgZnJvbSB0aGUgYm91bmRz
IG9mIHRoZSBpbWFnZSB0byB0aGUgY29udGVudHNCb3guCi0gICAgICAgICAgICByZXBhaW50UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdCgqcmVjdCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgbV9pbWFnZVJlc291cmNlLT5pbWFnZVNpemUoMS4wZikpLCBjb250ZW50Qm94UmVjdCgpKSk7
CisgICAgICAgICAgICByZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobWFwUmVjdCgqcmVj
dCwgR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgbV9pbWFnZVJlc291cmNlLT5pbWFnZVNp
emUoMS4wZikpLCBjb250ZW50Qm94UmVjdCgpKSk7CiAgICAgICAgICAgICAvLyBHdWFyZCBhZ2Fp
bnN0IHRvby1sYXJnZSBjaGFuZ2VkIHJlY3RzLgogICAgICAgICAgICAgcmVwYWludFJlY3QuaW50
ZXJzZWN0KGNvbnRlbnRCb3hSZWN0KCkpOwogICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAKICNpbmNsdWRlICJD
aHJvbWUuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgpAQCAtNDcxLDcgKzQ3MSw3IEBAIHZvaWQg
UmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICAgICAgY3VsbGVkSW5saW5l
QWJzb2x1dGVSZWN0cyh0aGlzLCByZWN0cywgdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSk7CiAgICAgZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpKSB7
CiAgICAgICAgIGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEZsb2F0UmVjdChhY2N1bXVs
YXRlZE9mZnNldCArIGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSkpOworICAgICAgICAg
ICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoR3JhcGhpY3NSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0ICsgY3Vyci0+dG9wTGVmdCgpLCBjdXJyLT5zaXplKCkpKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlv
dXRTaXplKCkpKTsKIApAQCAtNDk5LDExICs0OTksMTEgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmN1
bGxlZElubGluZUFic29sdXRlUgogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RC
b3ggPSBjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKICAgICAgICAgICAgICAg
ICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5k
ZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgY3VyckJveC0+aW5saW5lQm94V3Jh
cHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIG9mZnNldC5oZWlnaHQoKSArIGxv
Z2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBjdXJy
Qm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gR3JhcGhpY3NSZWN0KG9mZnNldC53aWR0aCgpICsgY3VyckJveC0+aW5saW5lQm94
V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIG9mZnNldC5oZWlnaHQoKSAr
IGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBj
dXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgo
KSArIGxvZ2ljYWxUb3AsIG9mZnNldC5oZWlnaHQoKSArIGN1cnJCb3gtPmlubGluZUJveFdyYXBw
ZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gt
PmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0b20o
KSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lk
dGgoKSArIGxvZ2ljYWxUb3AsIG9mZnNldC5oZWlnaHQoKSArIGN1cnJCb3gtPmlubGluZUJveFdy
YXBwZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJC
b3gtPmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0
b20oKSk7CiAgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QocmVz
dWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJ
bmxpbmUoKSkgewpAQCAtNTE2LDE0ICs1MTYsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxl
ZElubGluZUFic29sdXRlUgogICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290
Qm94ID0gY2hpbGRMaW5lLT5yb290KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2Fs
VG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxl
KHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2Vu
dCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkp
LT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgRmxv
YXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGNoaWxkTGluZS0+eCgp
IC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KG9mZnNldC53aWR0aCgpICsgY2hpbGRMaW5lLT54KCkg
LSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dp
Y2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0
aCgpICsgbG9naWNhbFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBo
aWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0LmhlaWdodCgpICsgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1h
cmdpbkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0
aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5M
b2dpY2FsUmlnaHQoKSk7CkBAIC01MzYsMzcgKzUzNiwzNyBAQCB2b2lkIFJlbmRlcklubGluZTo6
Y3VsbGVkSW5saW5lQWJzb2x1dGVSCiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9v
dEJveCA9IGNoaWxkVGV4dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9w
ID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJv
b3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgp
IC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWln
aHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQo
KS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1
bHQ7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJl
Y3Qob2Zmc2V0LndpZHRoKCkgKyBjaGlsZFRleHQtPngoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9n
aWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGNo
aWxkVGV4dC0+eCgpLCBvZmZzZXQuaGVpZ2h0KCkgKyBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxv
Z2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2lj
YWxUb3AsIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBj
aGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
R3JhcGhpY3NSZWN0KG9mZnNldC53aWR0aCgpICsgbG9naWNhbFRvcCwgb2Zmc2V0LmhlaWdodCgp
ICsgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRo
KCkpOwogICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlc3Vs
dCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlcklu
bGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRl
cklubGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAg
ICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKICAgICAgICAgY3VsbGVkSW5saW5lQWJz
b2x1dGVRdWFkcyh0aGlzLCBxdWFkcyk7CiAgICAgZWxzZSBpZiAoSW5saW5lRmxvd0JveCogY3Vy
ciA9IGZpcnN0TGluZUJveCgpKSB7CiAgICAgICAgIGZvciAoOyBjdXJyOyBjdXJyID0gY3Vyci0+
bmV4dExpbmVCb3goKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdChjdXJyLT54
KCksIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICAg
ICAgR3JhcGhpY3NSZWN0IGxvY2FsUmVjdChjdXJyLT54KCksIGN1cnItPnkoKSwgY3Vyci0+d2lk
dGgoKSwgY3Vyci0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9B
YnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAg
cXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KCkpKTsKKyAgICAgICAg
cXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KCkpKTsKIAogICAg
IGlmIChjb250aW51YXRpb24oKSkKICAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUXVh
ZHMocXVhZHMpOwogfQogCi12b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVR
dWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1
YWRzKQordm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUXVhZHMoY29uc3Qg
UmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsK
ICAgICBpZiAoIWN1bGxlZElubGluZUZpcnN0TGluZUJveCgpKSB7Ci0gICAgICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgpKSk7CisgICAgICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCgpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTU4MywxMSArNTgzLDExIEBAIHZvaWQgUmVuZGVySW5saW5lOjpjdWxs
ZWRJbmxpbmVBYnNvbHV0ZVEKICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94
ID0gY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CiAgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVy
ZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAg
RmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgcmVzdWx0Owog
ICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IEZsb2F0UmVjdChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJC
b3gtPm1hcmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gt
Pm1hcmdpbkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpOwor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3QoY3VyckJveC0+aW5saW5l
Qm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1
cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5S
aWdodCgpLCBsb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjdXJyQm94LT5pbmxpbmVC
b3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVpZ2h0LCBj
dXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+bWFyZ2lu
Qm90dG9tKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3QobG9n
aWNhbFRvcCwgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJn
aW5Ub3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJn
aW5Ub3AoKSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICBxdWFk
cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChjdXJyLT5pc1JlbmRlcklubGluZSgpKSB7CkBAIC02MDAsMTQgKzYw
MCwxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRCiAgICAgICAg
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZExpbmUtPnJvb3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9w
KCkgKyAocm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJv
b3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgp
KTsKICAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0
eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhl
aWdodCgpOwotICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgICAgICAg
ICAgICAgICAgICBHcmFwaGljc1JlY3QgcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0
KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGNoaWxkTGluZS0+eCgpIC0g
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5s
b2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGxvZ2ljYWxUb3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2ljYWxXaWR0aCgpICsgY2hpbGRMaW5l
LT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsUmlnaHQoKSk7
CkBAIC02MjAsMTEgKzYyMCwxMSBAQCB2b2lkIFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQWJz
b2x1dGVRCiAgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGNoaWxkVGV4
dC0+cm9vdCgpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9n
aWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RM
aW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5z
dHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXIt
PnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygp
LmhlaWdodCgpOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QoY2hpbGRUZXh0LT54
KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3QoY2hpbGRUZXh0LT54
KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQp
OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxv
YXRSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRl
eHQtPmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhp
Y3NSZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRl
eHQtPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxU
b0Fic29sdXRlUXVhZChyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzY4
LDE1ICs3NjgsMTUgQEAgTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCbwog
ICAgICAgICBmbG9hdCB5ID0gaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lQm94KCktPnkoKSA6IGxv
Z2ljYWxMZWZ0U2lkZTsKICAgICAgICAgZmxvYXQgd2lkdGggPSBpc0hvcml6b250YWwgPyBsb2dp
Y2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlIDogbGFzdExpbmVCb3goKS0+bG9naWNhbEJv
dHRvbSgpIC0geDsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gaXNIb3Jpem9udGFsID8gbGFzdExp
bmVCb3goKS0+bG9naWNhbEJvdHRvbSgpIC0geSA6IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2Fs
TGVmdFNpZGU7Ci0gICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0xheW91dFJlY3QoRmxvYXRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgcmVzdWx0ID0gZW5jbG9zaW5nTGF5b3V0
UmVjdChHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogICAgIH0KIAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJv
dW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdAorR3JhcGhpY3NS
ZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQm91bmRpbmdCb3goY29uc3QgUmVuZGVySW5s
aW5lKiBjb250YWluZXIpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBHcmFw
aGljc1JlY3QgcmVzdWx0OwogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0
Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKQEAgLTc5MSw5ICs3OTEsOSBAQCBGbG9h
dFJlY3QgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVCb3VuCiAgICAgICAgICAgICAgICAgaW50
IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVyZXIo
KS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUo
KSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBpbnQg
bG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJv
KEZsb2F0UmVjdChjdXJyQm94LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1h
cmdpbkxlZnQoKSwgbG9naWNhbFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdp
bkxlZnQoKSArIGN1cnJCb3gtPm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChjdXJyQm94
LT5pbmxpbmVCb3hXcmFwcGVyKCktPngoKSAtIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSwgbG9naWNh
bFRvcCwgY3VyckJveC0+d2lkdGgoKSArIGN1cnJCb3gtPm1hcmdpbkxlZnQoKSArIGN1cnJCb3gt
Pm1hcmdpblJpZ2h0KCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9naWNh
bFRvcCwgY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5U
b3AoKSwgbG9naWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5U
b3AoKSArIGN1cnJCb3gtPm1hcmdpbkJvdHRvbSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bml0ZUlmTm9uWmVybyhHcmFwaGljc1JlY3QobG9naWNhbFRvcCwgY3VyckJveC0+aW5s
aW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9naWNhbEhlaWdo
dCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1cnJCb3gtPm1h
cmdpbkJvdHRvbSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+
aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGRvZXNuJ3Qg
bmVlZCBsaW5lIGJveGVzIGVpdGhlciwgdGhlbiB3ZSBjYW4gcmVjdXIuCkBAIC04MDYsMTIgKzgw
NiwxMiBAQCBGbG9hdFJlY3QgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVCb3VuCiAgICAgICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJv
b3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZv
bnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY2hpbGRMaW5lLT54KCkgLSBj
aGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0KGNoaWxkTGluZS0+eCgpIC0gY2hpbGRM
aW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxUb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2Fs
V2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFy
Z2luTG9naWNhbFJpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhl
aWdodCkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGxvZ2ljYWxUb3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0KGxvZ2ljYWxU
b3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT55KCkgLSBjaGlsZExp
bmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9n
aWNhbEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExpbmUtPmxvZ2lj
YWxXaWR0aCgpICsgY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpICsgY2hpbGRMaW5lLT5t
YXJnaW5Mb2dpY2FsUmlnaHQoKSkpOwpAQCAtODI1LDkgKzgyNSw5IEBAIEZsb2F0UmVjdCBSZW5k
ZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW4KICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRv
cCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShy
b290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQo
KSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVp
Z2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250
KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0
KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVy
byhHcmFwaGljc1JlY3QoY2hpbGRUZXh0LT54KCksIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9n
aWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QobG9naWNhbFRv
cCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWlnaHQsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRo
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNz
UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhlaWdodCwgY2hpbGRUZXh0
LT5sb2dpY2FsV2lkdGgoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MTM0MCwxMiArMTM0MCwxMiBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMo
VmVjCiAgICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5
b3V0U2l6ZShhZGRpdGlvbmFsT2Zmc2V0KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoSW5s
aW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dExpbmVCb3goKSkKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0
KEZsb2F0UmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwgYWRkaXRpb25hbE9m
ZnNldC55KCkgKyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOwor
ICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoR3JhcGhpY3NSZWN0
KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgY3Vyci0+eCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSAr
IGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7CiAgICAgfQogCiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1
cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBvcyhhZGRpdGlv
bmFsT2Zmc2V0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zKGFkZGl0aW9uYWxPZmZz
ZXQpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3
aXRoIHRyYW5zZm9ybXMuCiAgICAgICAgICAgICBpZiAoY3Vyci0+aGFzTGF5ZXIoKSkgCiAgICAg
ICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CkBAIC0xNTM2LDcgKzE1
MzYsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkRGFzaGJvYXJkUmVnaW9ucyhWCiAgICAgICAg
ICAgICByZWdpb24uY2xpcC5zZXRXaWR0aCgwKTsKICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0
UG9pbnQgYWJzUG9zID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGUoKTsKKyAgICAgICAgR3Jh
cGhpY3NQb2ludCBhYnNQb3MgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAg
ICByZWdpb24uYm91bmRzLnNldFgoYWJzUG9zLngoKSArIHJlZ2lvbi5ib3VuZHMueCgpKTsKICAg
ICAgICAgcmVnaW9uLmJvdW5kcy5zZXRZKGFic1Bvcy55KCkgKyByZWdpb24uYm91bmRzLnkoKSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVu
aXQgbWFyZ2luRW5kKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhW
ZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
OwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAog
ICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCos
IGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKQEAgLTk4LDEyICs5OCwxMiBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVySW5saW5lKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgRmxvYXRSZWN0IGN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRl
cklubGluZSogY29udGFpbmVyKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgY3VsbGVkSW5saW5l
Qm91bmRpbmdCb3goY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogICAgIElu
dFJlY3QgY3VsbGVkSW5saW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0OwogICAg
IElubGluZUJveCogY3VsbGVkSW5saW5lRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAgICAgSW5saW5l
Qm94KiBjdWxsZWRJbmxpbmVMYXN0TGluZUJveCgpIGNvbnN0OwogICAgIHZvaWQgY3VsbGVkSW5s
aW5lQWJzb2x1dGVSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPElu
dFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgY3VsbGVkSW5saW5lQWJzb2x1dGVR
dWFkcyhjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVhZD4mKTsK
KyAgICB2b2lkIGN1bGxlZElubGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBj
b250YWluZXIsIFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICB2b2lkIGFkZENoaWxkVG9D
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVu
ZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDggKzUyLDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJGbG9h
dFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CkBAIC03NDIsMTUgKzc0MiwxNSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6
cGVyc3BlCiAgICAgcmV0dXJuIHQ7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyTGF5ZXI6OnBlcnNw
ZWN0aXZlT3JpZ2luKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyTGF5ZXI6OnBlcnNwZWN0
aXZlT3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCktPmhhc1RyYW5zZm9ybSgp
KQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NQ
b2ludCgpOwogCiAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5k
ZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRl
cmVyKCktPnN0eWxlKCk7CiAKLSAgICByZXR1cm4gRmxvYXRQb2ludChzdHlsZS0+cGVyc3BlY3Rp
dmVPcmlnaW5YKCkuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94LndpZHRoKCkpLAorICAgIHJldHVy
biBHcmFwaGljc1BvaW50KHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKS5jYWxjRmxvYXRWYWx1
ZShib3JkZXJCb3gud2lkdGgoKSksCiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnBlcnNw
ZWN0aXZlT3JpZ2luWSgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC5oZWlnaHQoKSkpOwogfQog
CkBAIC0xMTI0LDcgKzExMjQsNyBAQCBSZW5kZXJMYXllcjo6Y29udmVydFRvTGF5ZXJDb29yZHMo
Y29uc3QgCiAgICAgaWYgKHBvc2l0aW9uID09IEZpeGVkUG9zaXRpb24gJiYgKCFhbmNlc3Rvckxh
eWVyIHx8IGFuY2VzdG9yTGF5ZXIgPT0gcmVuZGVyZXIoKS0+dmlldygpLT5sYXllcigpKSkgewog
ICAgICAgICAvLyBJZiB0aGUgZml4ZWQgbGF5ZXIncyBjb250YWluZXIgaXMgdGhlIHJvb3QsIGp1
c3QgYWRkIGluIHRoZSBvZmZzZXQgb2YgdGhlIHZpZXcuIFdlIGNhbiBvYnRhaW4gdGhpcyBieSBj
YWxsaW5nCiAgICAgICAgIC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9uIHRoZSBSZW5kZXJWaWV3Lgot
ICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCksIHRydWUpOworICAgICAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IHJlbmRl
cmVyKCktPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIHRydWUpOwogICAgICAgICBs
b2NhdGlvbiArPSBmbG9vcmVkSW50U2l6ZShhYnNQb3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTM2NSw3ICsxMzY1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgs
IGludCB5KQogICAgICAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRl
ZCBhZnRlciBzY3JvbGxpbmcKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRDYXJldFJl
Y3ROZWVkc1VwZGF0ZSgpOwogCi0gICAgICAgIEZsb2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92
ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKKyAgICAgICAgR3JhcGhpY3NRdWFk
IHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBHcmFwaGljc1F1YWQocmVjdEZvclJlcGFpbnQp
OwogICAgICAgICBpZiAocmVwYWludENvbnRhaW5lcikKICAgICAgICAgICAgIHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwogICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92
ZUV2ZW50KTsKQEAgLTE0MDEsNyArMTQwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUoY28KICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZl
YWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgICAgICBBU1NFUlQoYm94KTsKLSAgICAg
ICAgRmxvYXRQb2ludCBhYnNQb3MgPSBib3gtPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgICAgICBH
cmFwaGljc1BvaW50IGFic1BvcyA9IGJveC0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAgIGFi
c1Bvcy5tb3ZlKGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKTsKIAogICAgICAg
ICBJbnRSZWN0IGxheWVyQm91bmRzID0gSW50UmVjdChhYnNQb3MueCgpICsgc2Nyb2xsWE9mZnNl
dCgpLCBhYnNQb3MueSgpICsgc2Nyb2xsWU9mZnNldCgpLCBib3gtPmNsaWVudFdpZHRoKCksIGJv
eC0+Y2xpZW50SGVpZ2h0KCkpOwpAQCAtMjkwNCwxMCArMjkwNCwxMCBAQCBzdGF0aWMgZG91Ymxl
IGNvbXB1dGVaT2Zmc2V0KGNvbnN0IEhpdFRlCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8g
RmxhdHRlbiB0aGUgcG9pbnQgaW50byB0aGUgdGFyZ2V0IHBsYW5lCi0gICAgRmxvYXRQb2ludCB0
YXJnZXRQb2ludCA9IHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCk7CisgICAgR3JhcGhpY3NQ
b2ludCB0YXJnZXRQb2ludCA9IHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCk7CiAgICAgCiAg
ICAgLy8gTm93IG1hcCB0aGUgcG9pbnQgYmFjayB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0sIHdoaWNo
IGNvbXB1dGVzIFouCi0gICAgRmxvYXRQb2ludDNEIGJhY2ttYXBwZWRQb2ludCA9IHRyYW5zZm9y
bVN0YXRlLm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKHRhcmdl
dFBvaW50KSk7CisgICAgR3JhcGhpY3NQb2ludDNEIGJhY2ttYXBwZWRQb2ludCA9IHRyYW5zZm9y
bVN0YXRlLm1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0ubWFwUG9pbnQoR3JhcGhpY3NQb2ludDNEKHRh
cmdldFBvaW50KSk7CiAgICAgcmV0dXJuIGJhY2ttYXBwZWRQb2ludC56KCk7CiB9CiAKQEAgLTI5
MjQsNyArMjkyNCw3IEBAIFBhc3NSZWZQdHI8SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBSZW4K
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIG5l
ZWQgdG8gbWFrZSB0cmFuc2Zvcm0gc3RhdGUsIHRoZW4gYmFzZSBpdCBvZmYgb2YgaGl0VGVzdFBv
aW50LAogICAgICAgICAvLyB3aGljaCBpcyByZWxhdGl2ZSB0byByb290TGF5ZXIuCi0gICAgICAg
IHRyYW5zZm9ybVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVz
dFBvaW50LCBGbG9hdFF1YWQoaGl0VGVzdFJlY3QpKTsKKyAgICAgICAgdHJhbnNmb3JtU3RhdGUg
PSBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmNyZWF0ZShoaXRUZXN0UG9pbnQsIEdyYXBoaWNz
UXVhZChoaXRUZXN0UmVjdCkpOwogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5
ZXIsIG9mZnNldCk7CiAgICAgfQogICAgIApAQCAtMzQ5MSw3ICszNDkxLDcgQEAgSW50UmVjdCBS
ZW5kZXJMYXllcjo6Y2hpbGRyZW5DbGlwUmVjdCgpIAogICAgIFJlbmRlckxheWVyKiBjbGlwcGlu
Z1Jvb3RMYXllciA9IGNsaXBwaW5nUm9vdCgpOwogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMsIGJh
Y2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAgICAgY2FsY3VsYXRl
UmVjdHMoY2xpcHBpbmdSb290TGF5ZXIsIHJlbmRlclZpZXctPmRvY3VtZW50UmVjdCgpLCBsYXll
ckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCk7Ci0g
ICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UXVhZChmb3JlZ3JvdW5kUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cisg
ICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEdyYXBoaWNzUXVhZChmb3JlZ3JvdW5kUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
CiB9CiAKIEludFJlY3QgUmVuZGVyTGF5ZXI6OnNlbGZDbGlwUmVjdCgpIGNvbnN0CkBAIC0zNTAw
LDcgKzM1MDAsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpzZWxmQ2xpcFJlY3QoKSBjb25zCiAg
ICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdExheWVyID0gY2xpcHBpbmdSb290KCk7CiAgICAg
SW50UmVjdCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRs
aW5lUmVjdDsKICAgICBjYWxjdWxhdGVSZWN0cyhjbGlwcGluZ1Jvb3RMYXllciwgcmVuZGVyVmll
dy0+ZG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3Vu
ZFJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRl
cmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGJhY2tncm91bmRSZWN0KSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXItPnJlbmRl
cmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKGJhY2tncm91bmRSZWN0KSku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6YWRkQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IEludFJlY3QmIGJvdW5kcykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNyAr
NDI1LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGF5ZXIgaGFzIGEg
LXdlYmtpdC1wZXJzcGVjdGl2ZS4KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFz
IHRoZSBwZXJzcGVjdGl2ZS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGVyc3BlY3RpdmVUcmFuc2Zvcm0oKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IHBlcnNwZWN0
aXZlT3JpZ2luKCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBwZXJzcGVjdGl2ZU9yaWdpbigp
IGNvbnN0OwogICAgIGJvb2wgcHJlc2VydmVzM0QoKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
LT5zdHlsZSgpLT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZl
M0Q7IH0KICAgICBib29sIGhhczNEVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm0gJiYgIW1fdHJhbnNmb3JtLT5pc0FmZmluZSgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUdyYXBoaWNzTAogICAgICAgICAvLyBmb3IgYSBjb21wb3NpdGluZyBsYXllciwgcm9vdExh
eWVyIGlzIHRoZSBsYXllciBpdHNlbGYuCiAgICAgICAgIEludFJlY3QgcGFyZW50Q2xpcFJlY3Qg
PSBtX293bmluZ0xheWVyLT5iYWNrZ3JvdW5kQ2xpcFJlY3QoY29tcEFuY2VzdG9yLCB0cnVlKTsK
ICAgICAgICAgQVNTRVJUKHBhcmVudENsaXBSZWN0ICE9IFBhaW50SW5mbzo6aW5maW5pdGVSZWN0
KCkpOwotICAgICAgICBtX2FuY2VzdG9yQ2xpcHBpbmdMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgpICsgKHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCkgLSBncmFwaGljc0xheWVyUGFyZW50
TG9jYXRpb24pKTsKKyAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9u
KEdyYXBoaWNzUG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhpY3NM
YXllclBhcmVudExvY2F0aW9uKSk7CiAgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVyLT5z
ZXRTaXplKHBhcmVudENsaXBSZWN0LnNpemUoKSk7CiAKICAgICAgICAgLy8gYmFja2dyb3VuZFJl
Y3QgaXMgcmVsYXRpdmUgdG8gY29tcEFuY2VzdG9yLCBzbyBzdWJ0cmFjdCBkZWx0YVgvZGVsdGFZ
IHRvIGdldCBiYWNrIHRvIGxvY2FsIGNvb3Jkcy4KQEAgLTQwNSw3ICs0MDUsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJQ
YXJlbnRMb2NhdGlvbiA9IHBhcmVudENsaXBSZWN0LmxvY2F0aW9uKCk7CiAgICAgfQogCi0gICAg
bV9ncmFwaGljc0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KCkgKyAocmVsYXRpdmVDb21w
b3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVudExvY2F0aW9uKSk7
CisgICAgbV9ncmFwaGljc0xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAocmVs
YXRpdmVDb21wb3NpdGluZ0JvdW5kcy5sb2NhdGlvbigpIC0gZ3JhcGhpY3NMYXllclBhcmVudExv
Y2F0aW9uKSk7CiAgICAgCiAgICAgSW50U2l6ZSBvbGRPZmZzZXRGcm9tUmVuZGVyZXIgPSBtX2dy
YXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+
c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAt
IEludFBvaW50KCkpOwpAQCAtNDE0LDggKzQxNCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHcmFwaGljc0wKICAgICBpZiAob2xkT2Zmc2V0RnJvbVJlbmRlcmVyICE9IG1fZ3Jh
cGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpCiAgICAgICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgCi0gICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX2dy
YXBoaWNzTGF5ZXItPnNpemUoKTsKLSAgICBGbG9hdFNpemUgbmV3U2l6ZSA9IHJlbGF0aXZlQ29t
cG9zaXRpbmdCb3VuZHMuc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBvbGRTaXplID0gbV9ncmFw
aGljc0xheWVyLT5zaXplKCk7CisgICAgR3JhcGhpY3NTaXplIG5ld1NpemUgPSByZWxhdGl2ZUNv
bXBvc2l0aW5nQm91bmRzLnNpemUoKTsKICAgICBpZiAob2xkU2l6ZSAhPSBuZXdTaXplKSB7CiAg
ICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKICAgICAgICAgLy8gQSBi
b3VuZHMgY2hhbmdlIHdpbGwgYWxtb3N0IGFsd2F5cyByZXF1aXJlIHJlZGlzcGxheS4gVXN1YWxs
eSB0aGF0IHJlZGlzcGxheQpAQCAtNDI4LDcgKzQyOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICBJbnRSZWN0IGNsaXBwaW5nQm94OwogICAgIGlmICht
X2NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgY2xpcHBpbmdCb3ggPSBjbGlwQm94KHRvUmVuZGVy
Qm94KHJlbmRlcmVyKCkpKTsKLSAgICAgICAgbV9jbGlwcGluZ0xheWVyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KCkgKyAoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIGxvY2FsQ29tcG9zaXRpbmdC
b3VuZHMubG9jYXRpb24oKSkpOworICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNldFBvc2l0aW9u
KEdyYXBoaWNzUG9pbnQoKSArIChjbGlwcGluZ0JveC5sb2NhdGlvbigpIC0gbG9jYWxDb21wb3Np
dGluZ0JvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgICAgIG1fY2xpcHBpbmdMYXllci0+c2V0U2l6
ZShjbGlwcGluZ0JveC5zaXplKCkpOwogICAgICAgICBtX2NsaXBwaW5nTGF5ZXItPnNldE9mZnNl
dEZyb21SZW5kZXJlcihjbGlwcGluZ0JveC5sb2NhdGlvbigpIC0gSW50UG9pbnQoKSk7CiAgICAg
fQpAQCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFw
aGljc0wKICAgICAgICAgICAgIG1fbWFza0xheWVyLT5zZXRTaXplKG1fZ3JhcGhpY3NMYXllci0+
c2l6ZSgpKTsKICAgICAgICAgICAgIG1fbWFza0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAg
ICAgICAgfQotICAgICAgICBtX21hc2tMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpKTsK
KyAgICAgICAgbV9tYXNrTGF5ZXItPnNldFBvc2l0aW9uKEdyYXBoaWNzUG9pbnQoKSk7CiAgICAg
ICAgIG1fbWFza0xheWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIobV9ncmFwaGljc0xheWVyLT5v
ZmZzZXRGcm9tUmVuZGVyZXIoKSk7CiAgICAgfQogICAgIApAQCAtNDQ5LDkgKzQ0OSw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICAgICAgSW50UmVjdCBs
YXllckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5zaXplKCkpOwogCiAgICAgICAg
IC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgZGVwZW5kIG9uIGxheWVyIGRpbWVuc2lvbnMKLSAg
ICAgICAgRmxvYXRQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9IGNvbXB1dGVUcmFuc2Zvcm1Pcmln
aW4oYm9yZGVyQm94KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHRyYW5zZm9ybU9yaWdpbiA9
IGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oYm9yZGVyQm94KTsKICAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgYW5jaG9yIHBvaW50LCB3aGljaCBpcyBpbiB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXJlciBi
b3ggdW5sZXNzIHRyYW5zZm9ybS1vcmlnaW4gaXMgc2V0LgotICAgICAgICBGbG9hdFBvaW50M0Qg
YW5jaG9yKHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMud2lkdGgoKSAgIT0gMC4wZiA/ICgobGF5
ZXJCb3VuZHMueCgpIC0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy54KCkpICsgdHJhbnNmb3Jt
T3JpZ2luLngoKSkgLyByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLndpZHRoKCkgIDogMC41ZiwK
KyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvcihyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRz
LndpZHRoKCkgICE9IDAuMGYgPyAoKGxheWVyQm91bmRzLngoKSAtIHJlbGF0aXZlQ29tcG9zaXRp
bmdCb3VuZHMueCgpKSArIHRyYW5zZm9ybU9yaWdpbi54KCkpIC8gcmVsYXRpdmVDb21wb3NpdGlu
Z0JvdW5kcy53aWR0aCgpICA6IDAuNWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVs
YXRpdmVDb21wb3NpdGluZ0JvdW5kcy5oZWlnaHQoKSAhPSAwLjBmID8gKChsYXllckJvdW5kcy55
KCkgLSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnkoKSkgKyB0cmFuc2Zvcm1PcmlnaW4ueSgp
KSAvIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuaGVpZ2h0KCkgOiAwLjVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbi56KCkpOwogICAgICAgICBtX2dyYXBo
aWNzTGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hvcik7CkBAIC00NzMsMTcgKzQ3MywxNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAgICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZ3JhcGhpY3NMYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAuNWYsIDAuNWYsIDApKTsKKyAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50M0QoMC41ZiwgMC41Ziwg
MCkpOwogICAgIH0KIAogICAgIGlmIChtX2ZvcmVncm91bmRMYXllcikgewotICAgICAgICBGbG9h
dFBvaW50IGZvcmVncm91bmRQb3NpdGlvbjsKLSAgICAgICAgRmxvYXRTaXplIGZvcmVncm91bmRT
aXplID0gbmV3U2l6ZTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBmb3JlZ3JvdW5kUG9zaXRpb247
CisgICAgICAgIEdyYXBoaWNzU2l6ZSBmb3JlZ3JvdW5kU2l6ZSA9IG5ld1NpemU7CiAgICAgICAg
IEludFNpemUgZm9yZWdyb3VuZE9mZnNldCA9IG1fZ3JhcGhpY3NMYXllci0+b2Zmc2V0RnJvbVJl
bmRlcmVyKCk7CiAgICAgICAgIGlmIChtX2NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgICAgIC8v
IElmIHdlIGhhdmUgYSBjbGlwcGluZyBsYXllciAod2hpY2ggY2xpcHMgZGVzY2VuZGFudHMpLCB0
aGVuIHRoZSBmb3JlZ3JvdW5kIGxheWVyIGlzIGEgY2hpbGQgb2YgaXQsCiAgICAgICAgICAgICAv
LyBzbyB0aGF0IGl0IGdldHMgY29ycmVjdGx5IHNvcnRlZCB3aXRoIGNoaWxkcmVuLiBJbiB0aGF0
IGNhc2UsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBjbGlwcGluZyBsYXllci4KLSAgICAgICAg
ICAgIGZvcmVncm91bmRTaXplID0gRmxvYXRTaXplKGNsaXBwaW5nQm94LnNpemUoKSk7CisgICAg
ICAgICAgICBmb3JlZ3JvdW5kU2l6ZSA9IEdyYXBoaWNzU2l6ZShjbGlwcGluZ0JveC5zaXplKCkp
OwogICAgICAgICAgICAgZm9yZWdyb3VuZE9mZnNldCA9IGNsaXBwaW5nQm94LmxvY2F0aW9uKCkg
LSBJbnRQb2ludCgpOwogICAgICAgICB9CiAKQEAgLTQ5OCw5ICs0OTgsOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAgIAogICAgICAgICAvLyBUaGUg
cmVmbGVjdGlvbiBsYXllciBoYXMgdGhlIGJvdW5kcyBvZiBtX293bmluZ0xheWVyLT5yZWZsZWN0
aW9uTGF5ZXIoKSwKICAgICAgICAgLy8gYnV0IHRoZSByZWZsZWN0ZWQgbGF5ZXIgaXMgdGhlIGJv
dW5kcyBvZiB0aGlzIGxheWVyLCBzbyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFwcHJvcHJpYXRl
bHkuCi0gICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IGNvbXBvc2l0ZWRCb3VuZHMoKTsK
LSAgICAgICAgRmxvYXRSZWN0IHJlZmxlY3Rpb25MYXllckJvdW5kcyA9IHJlZmxlY3Rpb25CYWNr
aW5nLT5jb21wb3NpdGVkQm91bmRzKCk7Ci0gICAgICAgIHJlZmxlY3Rpb25CYWNraW5nLT5ncmFw
aGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKEZsb2F0UG9pbnQoKSArIChs
YXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVmbGVjdGlvbkxheWVyQm91bmRzLmxvY2F0aW9uKCkp
KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGxheWVyQm91bmRzID0gY29tcG9zaXRlZEJvdW5kcygp
OworICAgICAgICBHcmFwaGljc1JlY3QgcmVmbGVjdGlvbkxheWVyQm91bmRzID0gcmVmbGVjdGlv
bkJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKTsKKyAgICAgICAgcmVmbGVjdGlvbkJhY2tpbmct
PmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVwbGljYXRlZExheWVyUG9zaXRpb24oR3JhcGhpY3NQb2lu
dCgpICsgKGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZWZsZWN0aW9uTGF5ZXJCb3VuZHMubG9j
YXRpb24oKSkpOwogICAgIH0KIAogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNSZWN0
KGNvbnRlbnRzQm94KCkpOwpAQCAtOTg1LDExICs5ODUsMTEgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUltYWdlQ29udAogICAgIGltYWdlLT5zdGFydEFuaW1hdGlvbigpOwogfQog
Ci1GbG9hdFBvaW50M0QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlVHJhbnNmb3JtT3JpZ2lu
KGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3QKK0dyYXBoaWNzUG9pbnQzRCBSZW5kZXJM
YXllckJhY2tpbmc6OmNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVy
Qm94KSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxl
KCk7CiAKLSAgICBGbG9hdFBvaW50M0Qgb3JpZ2luOworICAgIEdyYXBoaWNzUG9pbnQzRCBvcmln
aW47CiAgICAgb3JpZ2luLnNldFgoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgoKS5jYWxjRmxvYXRW
YWx1ZShib3JkZXJCb3gud2lkdGgoKSkpOwogICAgIG9yaWdpbi5zZXRZKHN0eWxlLT50cmFuc2Zv
cm1PcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94LmhlaWdodCgpKSk7CiAgICAgb3Jp
Z2luLnNldFooc3R5bGUtPnRyYW5zZm9ybU9yaWdpblooKSk7CkBAIC05OTcsMTQgKzk5NywxNCBA
QCBGbG9hdFBvaW50M0QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlCiAgICAgcmV0dXJuIG9y
aWdpbjsKIH0KIAotRmxvYXRQb2ludCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQZXJzcGVj
dGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CitHcmFwaGljc1BvaW50
IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBlcnNwZWN0aXZlT3JpZ2luKGNvbnN0IEludFJl
Y3QmIGJvcmRlckJveCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJl
cigpLT5zdHlsZSgpOwogCiAgICAgZmxvYXQgYm94V2lkdGggPSBib3JkZXJCb3gud2lkdGgoKTsK
ICAgICBmbG9hdCBib3hIZWlnaHQgPSBib3JkZXJCb3guaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFBv
aW50IG9yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IG9yaWdpbjsKICAgICBvcmlnaW4uc2V0WChz
dHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCkuY2FsY0Zsb2F0VmFsdWUoYm94V2lkdGgpKTsKICAg
ICBvcmlnaW4uc2V0WShzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUo
Ym94SGVpZ2h0KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBA
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2lu
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKQEAgLTE2NCw5ICsxNjQsOSBAQCBwcml2YXRlOgogICAgIAogICAgIEludFNpemUg
Y29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CiAgICAgLy8gUmVzdWx0IGlz
IHRyYW5zZm9ybSBvcmlnaW4gaW4gcGl4ZWxzLgotICAgIEZsb2F0UG9pbnQzRCBjb21wdXRlVHJh
bnNmb3JtT3JpZ2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CisgICAgR3JhcGhp
Y3NQb2ludDNEIGNvbXB1dGVUcmFuc2Zvcm1PcmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94
KSBjb25zdDsKICAgICAvLyBSZXN1bHQgaXMgcGVyc3BlY3RpdmUgb3JpZ2luIGluIHBpeGVscy4K
LSAgICBGbG9hdFBvaW50IGNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBi
b3JkZXJCb3gpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgY29tcHV0ZVBlcnNwZWN0aXZlT3Jp
Z2luKGNvbnN0IEludFJlY3QmIGJvcmRlckJveCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUxh
eWVyT3BhY2l0eShjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmFu
c2Zvcm0oY29uc3QgUmVuZGVyU3R5bGUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmFkZFRvT3ZlcmxhcAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWJvdW5kc0NvbXB1dGVk
KSB7Ci0gICAgICAgIGxheWVyQm91bmRzID0gbGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5nQm94KCkpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOworICAgICAgICBsYXllckJvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgp
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAgICAgLy8gRW1wdHkgcmVjdHMgbmV2ZXIg
aW50ZXJzZWN0LCBidXQgd2UgbmVlZCB0aGVtIHRvIGZvciB0aGUgcHVycG9zZXMgb2Ygb3Zlcmxh
cCB0ZXN0aW5nLgogICAgICAgICBpZiAobGF5ZXJCb3VuZHMuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgbGF5ZXJCb3VuZHMuc2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKQEAgLTY0NCw3ICs2NDQsNyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvCiAgICAgSW50UmVjdCBh
YnNCb3VuZHM7CiAgICAgaWYgKG92ZXJsYXBNYXAgJiYgIW92ZXJsYXBNYXAtPmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBJZiB3ZSdyZSB0ZXN0aW5nIGZvciBvdmVybGFwLCB3ZSBvbmx5IG5lZWQg
dG8gY29tcG9zaXRlIGlmIHdlIG92ZXJsYXAgc29tZXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBjb21w
b3NpdGVkLgotICAgICAgICBhYnNCb3VuZHMgPSBsYXllci0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QobGF5ZXItPmxvY2FsQm91bmRpbmdCb3goKSkpLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7CisgICAgICAgIGFic0JvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgp
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAgICAgLy8gRW1wdHkgcmVjdHMgbmV2ZXIg
aW50ZXJzZWN0LCBidXQgd2UgbmVlZCB0aGVtIHRvIGZvciB0aGUgcHVycG9zZXMgb2Ygb3Zlcmxh
cCB0ZXN0aW5nLgogICAgICAgICBpZiAoYWJzQm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGFic0JvdW5kcy5zZXRTaXplKEludFNpemUoMSwgMSkpOwpAQCAtOTQ1LDcgKzk0NSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWQKICAgICAgICAgbV9jbGlwTGF5
ZXItPnNldFNpemUoZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UgLyogZXhjbHVk
ZSBzY3JvbGxiYXJzICovKS5zaXplKCkpOwogCiAgICAgICAgIEludFBvaW50IHNjcm9sbFBvc2l0
aW9uID0gZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBtX3Njcm9sbExheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQb3Np
dGlvbi55KCkpKTsKKyAgICAgICAgbV9zY3JvbGxMYXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQ
b2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7CiAgICAgICAg
IHVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoKTsKICAgICB9CiB9CkBAIC05NTMsNyArOTUz
LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZAogdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZFNjcm9sbChjb25zdCBJbnRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pCiB7CiAgICAgaWYgKG1fc2Nyb2xsTGF5ZXIpCi0gICAgICAgIG1fc2Nyb2xs
TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLXNjcm9sbFBvc2l0aW9uLngoKSwgLXNjcm9s
bFBvc2l0aW9uLnkoKSkpOworICAgICAgICBtX3Njcm9sbExheWVyLT5zZXRQb3NpdGlvbihHcmFw
aGljc1BvaW50KC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkpKTsKIH0K
IAogU3RyaW5nIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJUcmVlQXNUZXh0KGJvb2wgc2hv
d0RlYnVnSW5mbykKQEAgLTE2MTcsOCArMTYxNyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjplbnN1cmVSb290TGEKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIG1fcm9vdENvbnRlbnRM
YXllci0+c2V0TmFtZSgiUm9vdCBwbGF0Zm9ybSIpOwogI2VuZGlmCi0gICAgICAgIG1fcm9vdENv
bnRlbnRMYXllci0+c2V0U2l6ZShGbG9hdFNpemUobV9yZW5kZXJWaWV3LT5tYXhYTGF5b3V0T3Zl
cmZsb3coKSwgbV9yZW5kZXJWaWV3LT5tYXhZTGF5b3V0T3ZlcmZsb3coKSkpOwotICAgICAgICBt
X3Jvb3RDb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIG1f
cm9vdENvbnRlbnRMYXllci0+c2V0U2l6ZShHcmFwaGljc1NpemUobV9yZW5kZXJWaWV3LT5tYXhY
TGF5b3V0T3ZlcmZsb3coKSwgbV9yZW5kZXJWaWV3LT5tYXhZTGF5b3V0T3ZlcmZsb3coKSkpOwor
ICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFBvc2l0aW9uKEdyYXBoaWNzUG9pbnQoKSk7
CiAKICAgICAgICAgLy8gTmVlZCB0byBjbGlwIHRvIHByZXZlbnQgdHJhbnNmb3JtZWQgY29udGVu
dCBzaG93aW5nIG91dHNpZGUgdGhpcyBmcmFtZQogICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXIt
PnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3
IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFAKICAgICBjb25zdCBp
bnQgc3BlZWRSZWR1Y2VyID0gNDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBj
b3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJzT2Zmc2V0ID0gbG9j
YWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNPZmZzZXQgPSBsb2NhbFRvQWJz
b2x1dGUoKTsKIAogICAgIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uID0gZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CiAgICAgLy8gV2UgbmVlZCB0
byBjaGVjayBpZiB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRv
dy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBp
bmNvaGVyZW50CkBAIC01MjEsNyArNTIxLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYW5TY3Jv
bGwoY29uc3QgSW50UAogaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvd2FyZChjb25zdCBJbnRQ
b2ludCYgZGVzdGluYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNv
cnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRv
QWJzb2x1dGUoKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgp
OwogICAgIGludCBvZmZzZXRYID0gZGVzdGluYXRpb24ueCgpIC0gYWJzUG9zLngoKTsKICAgICBp
bnQgb2Zmc2V0WSA9IGRlc3RpbmF0aW9uLnkoKSAtIGFic1Bvcy55KCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzExLDcgKzE3MTEsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxpc3RN
YXJrZXI6OnNlbGVjdGlvblJlCiAgICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAg
ICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcmVjdCk7CiAgICAgZWxz
ZQotICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KHJlY3QpLCBy
ZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICByZWN0ID0g
bG9jYWxUb0NvbnRhaW5lclF1YWQoR3JhcGhpY3NSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVy
KS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIAogICAgIHJldHVybiByZWN0OwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDE1ICs3MSwxNSBAQCBzdGF0aWMg
V0tNZWRpYUNvbnRyb2xsZXJUaGVtZVN0YXRlIGRldGVyCiB9CiAKIC8vIFV0aWxpdHkgdG8gc2Nh
bGUgd2hlbiB0aGUgVUkgcGFydCBhcmUgbm90IHNjYWxlZCBieSB3a0RyYXdNZWRpYVVJUGFydAot
c3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
ICZvcmlnaW5hbFJlY3QpCitzdGF0aWMgR3JhcGhpY3NSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFk
anVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKIHsKICAgICBmbG9hdCB6b29tTGV2
ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgRmxvYXRSZWN0IHVuem9vbWVk
UmVjdChvcmlnaW5hbFJlY3QpOworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3Qob3JpZ2lu
YWxSZWN0KTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRS
ZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAg
dW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwp
OwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCks
IHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVj
dC55KCkpOwogICAgIH0KICAgICByZXR1cm4gdW56b29tZWRSZWN0OwpAQCAtMTQ2LDcgKzE0Niw3
IEBAIGJvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnQKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIE1lZGlhU2xpZGVyOiB7CiAgICAgICAgICAgICBpZiAoSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobykpIHsK
LSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0
QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICAgICAgICAgICAg
ICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3Vy
cmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgICAgICAgICB3a0RyYXdNZWRp
YVNsaWRlclRyYWNrKHRoZW1lU3R5bGUsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgdW56b29tZWRSZWN0LCBtZWRpYUVsZW1lbnQtPnBlcmNlbnRMb2FkZWQoKSAqIG1lZGlh
RWxlbWVudC0+ZHVyYXRpb24oKSwgbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgpLCBtZWRpYUVs
ZW1lbnQtPmR1cmF0aW9uKCksIGRldGVybWluZVN0YXRlKG8pKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTg5LDcgKzE4OSw3IEBAIEludFBvaW50IFJlbmRlck1lZGlh
Q29udHJvbHM6OnZvbHVtZVNsaWQKIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IG11dGVCdXR0b25C
b3gtPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICBpbnQgeSA9IHlPZmZzZXQgKiB6b29t
TGV2ZWwgKyBtdXRlQnV0dG9uQm94LT5vZmZzZXRIZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCk7Ci0g
ICAgRmxvYXRQb2ludCBhYnNQb2ludCA9IG11dGVCdXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KG11dGVCdXR0b25Cb3gtPm9mZnNldExlZnQoKSwgeSksIHRydWUsIHRydWUpOwor
ICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1
dGUoR3JhcGhpY3NQb2ludChtdXRlQnV0dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0
cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgpIDwgMCkKICAgICAgICAgeSA9IG11dGVCdXR0b25C
b3gtPmhlaWdodCgpOwogICAgIHJldHVybiBJbnRQb2ludCh4T2Zmc2V0ICogem9vbUxldmVsLCB5
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBSZW5kZXJNZW51
TGlzdDo6c2hvd1BvcHVwKCkKIAogICAgIC8vIENvbXB1dGUgdGhlIHRvcCBsZWZ0IHRha2luZyB0
cmFuc2Zvcm1zIGludG8gYWNjb3VudCwgYnV0IHVzZQogICAgIC8vIHRoZSBhY3R1YWwgd2lkdGgg
b2YgdGhlIGVsZW1lbnQgdG8gc2l6ZSB0aGUgcG9wdXAuCi0gICAgRmxvYXRQb2ludCBhYnNUb3BM
ZWZ0ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOworICAgIEdy
YXBoaWNzUG9pbnQgYWJzVG9wTGVmdCA9IGxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCks
IGZhbHNlLCB0cnVlKTsKICAgICBJbnRSZWN0IGFic0JvdW5kcyA9IGFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCk7CiAgICAgYWJzQm91bmRzLnNldExvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChhYnNU
b3BMZWZ0KSk7CiAgICAgbV9wb3B1cC0+c2hvdyhhYnNCb3VuZHMsIGRvY3VtZW50KCktPnZpZXco
KSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5o
IgogI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkVkaXRpbmdCb3VuZGFyeS5oIgot
I2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCkBAIC04NjksMzEgKzg2OSwzMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0xp
bmVGb3JCb3hTaWRlKEdyCiAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShvbGRTdHJva2VTdHlsZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgRmxvYXRQb2ludCBxdWFkWzRdOworICAgICAgICAgICAgR3Jh
cGhpY3NQb2ludCBxdWFkWzRdOwogICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBCU1RvcDoKLSAgICAgICAgICAgICAgICAgICAgcXVhZFswXSA9IEZsb2F0
UG9pbnQoeDEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSwgeTEpOwotICAgICAgICAgICAgICAg
ICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCh4MSArIG1heChhZGphY2VudFdpZHRoMSwgMCksIHky
KTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoeDIgLSBtYXgoYWRq
YWNlbnRXaWR0aDIsIDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbM10gPSBGbG9h
dFBvaW50KHgyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCksIHkxKTsKKyAgICAgICAgICAgICAg
ICAgICAgcXVhZFswXSA9IEdyYXBoaWNzUG9pbnQoeDEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAw
KSwgeTEpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhpY3NQb2ludCh4MSAr
IG1heChhZGphY2VudFdpZHRoMSwgMCksIHkyKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsy
XSA9IEdyYXBoaWNzUG9pbnQoeDIgLSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApLCB5Mik7CisgICAg
ICAgICAgICAgICAgICAgIHF1YWRbM10gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KC1hZGphY2Vu
dFdpZHRoMiwgMCksIHkxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBCU0JvdHRvbToKLSAgICAgICAgICAgICAgICAgICAgcXVhZFswXSA9IEZsb2F0
UG9pbnQoeDEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApLCB5MSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHF1YWRbMV0gPSBGbG9hdFBvaW50KHgxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCksIHky
KTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoeDIgLSBtYXgoLWFk
amFjZW50V2lkdGgyLCAwKSwgeTIpOwotICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gRmxv
YXRQb2ludCh4MiAtIG1heChhZGphY2VudFdpZHRoMiwgMCksIHkxKTsKKyAgICAgICAgICAgICAg
ICAgICAgcXVhZFswXSA9IEdyYXBoaWNzUG9pbnQoeDEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDAp
LCB5MSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBHcmFwaGljc1BvaW50KHgxICsg
bWF4KC1hZGphY2VudFdpZHRoMSwgMCksIHkyKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsy
XSA9IEdyYXBoaWNzUG9pbnQoeDIgLSBtYXgoLWFkamFjZW50V2lkdGgyLCAwKSwgeTIpOworICAg
ICAgICAgICAgICAgICAgICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiAtIG1heChhZGphY2Vu
dFdpZHRoMiwgMCksIHkxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBCU0xlZnQ6Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMF0gPSBGbG9hdFBv
aW50KHgxLCB5MSArIG1heCgtYWRqYWNlbnRXaWR0aDEsIDApKTsKLSAgICAgICAgICAgICAgICAg
ICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoeDEsIHkyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCkp
OwotICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCh4MiwgeTIgLSBtYXgo
YWRqYWNlbnRXaWR0aDIsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEZsb2F0
UG9pbnQoeDIsIHkxICsgbWF4KGFkamFjZW50V2lkdGgxLCAwKSk7CisgICAgICAgICAgICAgICAg
ICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxLCB5MSArIG1heCgtYWRqYWNlbnRXaWR0aDEs
IDApKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBoaWNzUG9pbnQoeDEsIHky
IC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzJd
ID0gR3JhcGhpY3NQb2ludCh4MiwgeTIgLSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAgICAg
ICAgICAgICAgICAgICAgcXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkxICsgbWF4KGFkamFj
ZW50V2lkdGgxLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgQlNSaWdodDoKLSAgICAgICAgICAgICAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9p
bnQoeDEsIHkxICsgbWF4KGFkamFjZW50V2lkdGgxLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHF1YWRbMV0gPSBGbG9hdFBvaW50KHgxLCB5MiAtIG1heChhZGphY2VudFdpZHRoMiwgMCkpOwot
ICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCh4MiwgeTIgLSBtYXgoLWFk
amFjZW50V2lkdGgyLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbM10gPSBGbG9hdFBv
aW50KHgyLCB5MSArIG1heCgtYWRqYWNlbnRXaWR0aDEsIDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgcXVhZFswXSA9IEdyYXBoaWNzUG9pbnQoeDEsIHkxICsgbWF4KGFkamFjZW50V2lkdGgxLCAw
KSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBHcmFwaGljc1BvaW50KHgxLCB5MiAt
IG1heChhZGphY2VudFdpZHRoMiwgMCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzJdID0g
R3JhcGhpY3NQb2ludCh4MiwgeTIgLSBtYXgoLWFkamFjZW50V2lkdGgyLCAwKSk7CisgICAgICAg
ICAgICAgICAgICAgIHF1YWRbM10gPSBHcmFwaGljc1BvaW50KHgyLCB5MSArIG1heCgtYWRqYWNl
bnRXaWR0aDEsIDApKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAKQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUo
R3JhcGhpY3MKIEludFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChi
b29sIHVzZVRyYW5zZm9ybXMpCiB7CiAgICAgaWYgKHVzZVRyYW5zZm9ybXMpIHsKLSAgICAgICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1
YWRzOwogICAgICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsKIAogICAgICAgICBzaXplX3QgbiA9
IHF1YWRzLnNpemUoKTsKQEAgLTEwOTgsNyArMTA5OCw3IEBAIEludFJlY3QgUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZUJvdW5kaW5nQm8KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9p
bnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3Rz
OwogICAgIGFic29sdXRlUmVjdHMocmVjdHMsIGZsb29yZWRMYXlvdXRQb2ludChhYnNQb3MpKTsK
IApAQCAtMTExMiwyMCArMTExMiwyMCBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVC
b3VuZGluZ0JvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OmFi
c29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5k
ZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1
YWRzKQogewogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKICAgICAvLyBGSVhNRTogYWRkRm9j
dXNSaW5nUmVjdHMoKSBuZWVkcyB0byBiZSBwYXNzZWQgdGhpcyB0cmFuc2Zvcm0tdW5hd2FyZQog
ICAgIC8vIGxvY2FsVG9BYnNvbHV0ZSgpIG9mZnNldCBoZXJlIGJlY2F1c2UgUmVuZGVySW5saW5l
OjphZGRGb2N1c1JpbmdSZWN0cygpCiAgICAgLy8gaW1wbGljaXRseSBhc3N1bWVzIHRoYXQuIFRo
aXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybWVkCiAgICAgLy8gZGVzY2Vu
ZGFudHMuCi0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbG9jYWxUb0Fic29sdXRlKCk7
CisgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50ID0gbG9jYWxUb0Fic29sdXRlKCk7CiAg
ICAgYWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChhYnNvbHV0ZVBvaW50
KSk7CiAgICAgc2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOyAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgSW50UmVjdCByZWN0ID0gcmVjdHNbaV07
CiAgICAgICAgIHJlY3QubW92ZSgtYWJzb2x1dGVQb2ludC54KCksIC1hYnNvbHV0ZVBvaW50Lnko
KSk7Ci0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChy
ZWN0KSkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGlj
c1F1YWQocmVjdCkpKTsKICAgICB9CiB9CiAKQEAgLTE4MjMsNyArMTgyMyw3IEBAIEludFJlY3Qg
UmVuZGVyT2JqZWN0Ojp2aWV3UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIHZpZXcoKS0+dmlld1Jl
Y3QoKTsKIH0KIAotRmxvYXRQb2ludCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZShjb25z
dCBGbG9hdFBvaW50JiBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMp
IGNvbnN0CitHcmFwaGljc1BvaW50IFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGxvY2FsUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3Jt
cykgY29uc3QKIHsKICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1T
dGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIGxvY2FsUG9pbnQpOwogICAgIG1hcExvY2Fs
VG9Db250YWluZXIoMCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKQEAg
LTE4MzIsNyArMTgzMiw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1
dGUKICAgICByZXR1cm4gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCk7CiB9CiAKLUZs
b2F0UG9pbnQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYg
Y29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29uc3QKK0dy
YXBoaWNzUG9pbnQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRvTG9jYWwoY29uc3QgR3JhcGhpY3NQ
b2ludCYgY29udGFpbmVyUG9pbnQsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcykgY29u
c3QKIHsKICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6
VW5hcHBseUludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24sIGNvbnRhaW5lclBvaW50KTsKICAgICBt
YXBBYnNvbHV0ZVRvTG9jYWxQb2ludChmaXhlZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3Rh
dGUpOwpAQCAtMTg5OSw3ICsxODk5LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRyYW5zZm9y
bUZyb21Db250YQogICAgIGlmIChjb250YWluZXJPYmplY3QgJiYgY29udGFpbmVyT2JqZWN0LT5o
YXNMYXllcigpICYmIGNvbnRhaW5lck9iamVjdC0+c3R5bGUoKS0+aGFzUGVyc3BlY3RpdmUoKSkg
ewogICAgICAgICAvLyBQZXJwc2VjdGl2ZSBvbiB0aGUgY29udGFpbmVyIGFmZmVjdHMgdXMsIHNv
IHdlIGhhdmUgdG8gZmFjdG9yIGl0IGluIGhlcmUuCiAgICAgICAgIEFTU0VSVChjb250YWluZXJP
YmplY3QtPmhhc0xheWVyKCkpOwotICAgICAgICBGbG9hdFBvaW50IHBlcnNwZWN0aXZlT3JpZ2lu
ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXJPYmplY3QpLT5sYXllcigpLT5wZXJz
cGVjdGl2ZU9yaWdpbigpOworICAgICAgICBHcmFwaGljc1BvaW50IHBlcnNwZWN0aXZlT3JpZ2lu
ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXJPYmplY3QpLT5sYXllcigpLT5wZXJz
cGVjdGl2ZU9yaWdpbigpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0
aXZlTWF0cml4OwogICAgICAgICBwZXJzcGVjdGl2ZU1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKGNv
bnRhaW5lck9iamVjdC0+c3R5bGUoKS0+cGVyc3BlY3RpdmUoKSk7CkBAIC0xOTEzLDcgKzE5MTMs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VHJhbnNmb3JtRnJvbUNvbnRhCiAjZW5kaWYKIH0K
IAotRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxv
YXRRdWFkJiBsb2NhbFF1YWQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBib29sIGZpeGVkKSBjb25zdAorR3JhcGhpY3NRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0Nv
bnRhaW5lclF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJiBsb2NhbFF1YWQsIFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkKSBjb25zdAogewogICAgIC8vIFRy
YWNrIHRoZSBwb2ludCBhdCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkJ3MgYm91bmRpbmcgYm94LiBB
cyBtYXBMb2NhbFRvQ29udGFpbmVyKCkgY2FsbHMgb2Zmc2V0RnJvbUNvbnRhaW5lcigpLAogICAg
IC8vIGl0IHdpbGwgdXNlIHRoYXQgcG9pbnQgYXMgdGhlIHJlZmVyZW5jZSBwb2ludCB0byBkZWNp
ZGUgd2hpY2ggY29sdW1uJ3MgdHJhbnNmb3JtIHRvIGFwcGx5IGluIG11bHRpcGxlLWNvbHVtbiBi
bG9ja3MuCkBAIC0yMzcxLDcgKzIzNzEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkRGFzaGJv
YXJkUmVnaW9ucyhWCiAgICAgICAgICAgICByZWdpb24uY2xpcC5zZXRXaWR0aCgwKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7Cisg
ICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CiAgICAgICAg
IHJlZ2lvbi5ib3VuZHMuc2V0WChhYnNQb3MueCgpICsgc3R5bGVSZWdpb24ub2Zmc2V0LmxlZnQo
KS52YWx1ZSgpKTsKICAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRZKGFic1Bvcy55KCkgKyBzdHls
ZVJlZ2lvbi5vZmZzZXQudG9wKCkudmFsdWUoKSk7CiAKQEAgLTI1ODcsMjQgKzI1ODcsMjQgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OnNldE5lZWRzQm91bmRhcmllc1VwZAogICAgICAgICByZW5kZXJl
ci0+c2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJPYmpl
Y3Q6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJPYmplY3Q6
Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQog
Ci1GbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFw
aGljc1JlY3QgUmVuZGVyT2JqZWN0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVy
biBHcmFwaGljc1JlY3QoKTsKIH0KIAogLy8gUmV0dXJucyB0aGUgc21hbGxlc3QgcmVjdGFuZ2xl
IGVuY2xvc2luZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29udGVudAogLy8gcmVzcGVjdGluZyBjbGlw
cGluZywgbWFza2luZywgZmlsdGVycywgb3BhY2l0eSwgc3Ryb2tlLXdpZHRoIGFuZCBtYXJrZXJz
Ci1GbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
IGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyT2JqZWN0OjpyZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAogQWZmaW5lVHJh
bnNmb3JtIFJlbmRlck9iamVjdDo6bG9jYWxUcmFuc2Zvcm0oKSBjb25zdApAQCAtMjYxOSw3ICsy
NjE5LDcgQEAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZW5kZXJPYmplY3Q6OmxvYwogICAgIHJl
dHVybiBpZGVudGl0eTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYs
IEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlck9iamVjdDo6bm9kZUF0R3JhcGhpY3NQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgSGl0VGVzdEFjdGlvbikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5j
bHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgiCkBAIC0zNzIsMTIgKzM3MiwxMiBAQCBwdWJsaWM6CiAg
ICAgLy8gc2luY2Ugc3Ryb2tlLXdpZHRoIGlzIGlnbm9yZWQgKGFuZCBtYXJrZXIgc2l6ZSBjYW4g
ZGVwZW5kIG9uIHN0cm9rZS13aWR0aCkuCiAgICAgLy8gb2JqZWN0Qm91bmRpbmdCb3ggaXMgcmV0
dXJuZWQgbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgLy8gVGhlIG5hbWUgb2JqZWN0Qm91bmRpbmdC
b3ggaXMgdGFrZW4gZnJvbSB0aGUgU1ZHIDEuMSBzcGVjLgotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tl
Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5n
Qm94KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBzbWFsbGVzdCByZWN0YW5nbGUgZW5j
bG9zaW5nIGFsbCBvZiB0aGUgcGFpbnRlZCBjb250ZW50CiAgICAgLy8gcmVzcGVjdGluZyBjbGlw
cGluZywgbWFza2luZywgZmlsdGVycywgb3BhY2l0eSwgc3Ryb2tlLXdpZHRoIGFuZCBtYXJrZXJz
Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBvbmx5IHJldHVybnMgdGhlIHRyYW5zZm9ybT0i
IiB2YWx1ZSBmcm9tIHRoZSBlbGVtZW50CiAgICAgLy8gbW9zdCBjYWxsc2l0ZXMgd2FudCBsb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkgaW5zdGVhZC4KQEAgLTM4NywxMCArMzg3LDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIGluY2x1ZGVzIGFueSB2aWV3cG9ydCB0cmFuc2Zvcm1zIGFuZCB4L3kg
b2Zmc2V0cyBhcyB3ZWxsIGFzIHRoZSB0cmFuc2Zvcm09IiIgdmFsdWUgb2ZmIHRoZSBlbGVtZW50
LgogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3Q7CiAKLSAgICAvLyBTVkcgdXNlcyBGbG9hdFBvaW50IHByZWNpc2UgaGl0IHRl
c3RpbmcsIGFuZCBwYXNzZXMgdGhlIHBvaW50IGluIHBhcmVudAorICAgIC8vIFNWRyB1c2VzIEdy
YXBoaWNzUG9pbnQgcHJlY2lzZSBoaXQgdGVzdGluZywgYW5kIHBhc3NlcyB0aGUgcG9pbnQgaW4g
cGFyZW50CiAgICAgLy8gY29vcmRpbmF0ZXMgaW5zdGVhZCBvZiBpbiByZXBhaW50IGNvbnRhaW5l
ciBjb29yZGluYXRlcy4gIEV2ZW50dWFsbHkgdGhlCiAgICAgLy8gcmVzdCBvZiB0aGUgcmVuZGVy
aW5nIHRyZWUgd2lsbCBtb3ZlIHRvIGEgc2ltaWxhciBtb2RlbC4KLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0
aW9uKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0Fub255bW91cygpIGNvbnN0IHsgcmV0dXJuIG1f
aXNBbm9ueW1vdXM7IH0KQEAgLTU3NSwxNiArNTc1LDE2IEBAIHB1YmxpYzoKIAogICAgIC8vIENv
bnZlcnQgdGhlIGdpdmVuIGxvY2FsIHBvaW50IHRvIGFic29sdXRlIGNvb3JkaW5hdGVzCiAgICAg
Ly8gRklYTUU6IFRlbXBvcmFyeS4gSWYgdXNlVHJhbnNmb3JtcyBpcyB0cnVlLCB0YWtlIHRyYW5z
Zm9ybXMgaW50byBhY2NvdW50LiBFdmVudHVhbGx5IGxvY2FsVG9BYnNvbHV0ZSgpIHdpbGwgYWx3
YXlzIGJlIHRyYW5zZm9ybS1hd2FyZS4KLSAgICBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShj
b25zdCBGbG9hdFBvaW50JiBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0g
ZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsKLSAgICBGbG9hdFBvaW50
IGFic29sdXRlVG9Mb2NhbChjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBmaXhlZCA9IGZhbHNlLCBi
b29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBsb2Nh
bFRvQWJzb2x1dGUoY29uc3QgR3JhcGhpY3NQb2ludCYgbG9jYWxQb2ludCA9IEdyYXBoaWNzUG9p
bnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29u
c3Q7CisgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVRvTG9jYWwoY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0
OwogCiAgICAgLy8gQ29udmVydCBhIGxvY2FsIHF1YWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMs
IHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICBGbG9hdFF1YWQgbG9jYWxUb0Fi
c29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29u
c3QKKyAgICBHcmFwaGljc1F1YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBHcmFwaGljc1F1
YWQmIHF1YWQsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBsb2NhbFRvQ29udGFpbmVyUXVhZChxdWFkLCAwLCBmaXhlZCk7CiAgICAgfQogICAgIC8vIENv
bnZlcnQgYSBsb2NhbCBxdWFkIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIGNvbnRhaW5l
ciwgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgotICAgIEZsb2F0UXVhZCBsb2NhbFRv
Q29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKKyAgICBHcmFwaGljc1F1
YWQgbG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgR3JhcGhpY3NRdWFkJiwgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAK
ICAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIHRoZSBjb250YWluZXIoKSByZW5kZXJlciAo
ZXhjbHVkaW5nIHRyYW5zZm9ybXMpLiBJbiBtdWx0aS1jb2x1bW4gbGF5b3V0LAogICAgIC8vIGRp
ZmZlcmVudCBvZmZzZXRzIGFwcGx5IGF0IGRpZmZlcmVudCBwb2ludHMsIHNvIHJldHVybiB0aGUg
b2Zmc2V0IHRoYXQgYXBwbGllcyB0byB0aGUgZ2l2ZW4gcG9pbnQuCkBAIC01OTcsOSArNTk3LDkg
QEAgcHVibGljOgogICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VU
cmFuc2Zvcm1zID0gZmFsc2UpOwogCiAgICAgLy8gQnVpbGQgYW4gYXJyYXkgb2YgcXVhZHMgaW4g
YWJzb2x1dGUgY29vcmRzIGZvciBsaW5lIGJveGVzCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVR
dWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpIHsgfQogCi0gICAgdm9pZCBhYnNvbHV0ZUZvY3Vz
UmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdm9pZCBhYnNvbHV0ZUZvY3VzUmlu
Z1F1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdp
bGwgYmUgcGFpbnRlZCBpZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9v
dAogICAgIExheW91dFJlY3QgcGFpbnRpbmdSb290UmVjdChMYXlvdXRSZWN0JiB0b3BMZXZlbFJl
Y3QpOwpAQCAtMTA3NiwyNyArMTA3NiwyNyBAQCBpbmxpbmUgaW50IGFkanVzdEZvckFic29sdXRl
Wm9vbShpbnQgdmFsCiAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbSh2YWx1ZSwgcmVu
ZGVyZXItPnN0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFF1YWRGb3JBYnNv
bHV0ZVpvb20oRmxvYXRRdWFkJiBxdWFkLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5l
IHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkRm9yQWJzb2x1dGVab29tKEdyYXBoaWNzUXVhZCYgcXVh
ZCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBmbG9hdCB6b29tID0gcmVuZGVyZXIt
PnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICBpZiAoem9vbSAhPSAxKQogICAgICAgICBx
dWFkLnNjYWxlKDEgLyB6b29tLCAxIC8gem9vbSk7CiB9CiAKLWlubGluZSB2b2lkIGFkanVzdEZs
b2F0UmVjdEZvckFic29sdXRlWm9vbShGbG9hdFJlY3QmIHJlY3QsIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCitpbmxpbmUgdm9pZCBhZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNvbHV0ZVpvb20oR3Jh
cGhpY3NSZWN0JiByZWN0LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIGZsb2F0IHpv
b20gPSByZW5kZXJlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmICh6b29tICE9
IDEpCiAgICAgICAgIHJlY3Quc2NhbGUoMSAvIHpvb20sIDEgLyB6b29tKTsKIH0KIAotaW5saW5l
IHZvaWQgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQg
cGFnZVNjYWxlKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkRm9yUGFnZVNjYWxlKEdy
YXBoaWNzUXVhZCYgcXVhZCwgZmxvYXQgcGFnZVNjYWxlKQogewogICAgIGlmIChwYWdlU2NhbGUg
IT0gMSkKICAgICAgICAgcXVhZC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAxIC8gcGFnZVNjYWxlKTsK
IH0KIAotaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxlKEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgcGFnZVNjYWxlKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NSZWN0Rm9y
UGFnZVNjYWxlKEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxlKQogewogICAgIGlm
IChwYWdlU2NhbGUgIT0gMSkKICAgICAgICAgcmVjdC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAxIC8g
cGFnZVNjYWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhYwogCiAgICAgLy8gMTAuMy4yIElubGlu
ZSwgcmVwbGFjZWQgZWxlbWVudHM6IGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VkZXQu
aHRtbCNpbmxpbmUtcmVwbGFjZWQtd2lkdGgKICAgICBib29sIGlzUGVyY2VudGFnZUludHJpbnNp
Y1NpemUgPSBmYWxzZTsKLSAgICBGbG9hdFNpemUgaW50cmluc2ljUmF0aW87CisgICAgR3JhcGhp
Y3NTaXplIGludHJpbnNpY1JhdGlvOwogICAgIGlmIChjb250ZW50UmVuZGVyZXIpIHsKICAgICAg
ICAgY29udGVudFJlbmRlcmVyLT5jb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihpbnRy
aW5zaWNSYXRpbywgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSk7CiAgICAgICAgIGNvbnRlbnRS
ZW5kZXJTdHlsZSA9IGNvbnRlbnRSZW5kZXJlci0+c3R5bGUoKTsKQEAgLTMyNiw3ICszMjYsNyBA
QCBMYXlvdXRVbml0IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjCiAKICAgICAvLyAxMC42
LjIgSW5saW5lLCByZXBsYWNlZCBlbGVtZW50czogaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEv
dmlzdWRldC5odG1sI2lubGluZS1yZXBsYWNlZC1oZWlnaHQKICAgICBib29sIGlzUGVyY2VudGFn
ZUludHJpbnNpY1NpemUgPSBmYWxzZTsKLSAgICBGbG9hdFNpemUgaW50cmluc2ljUmF0aW87Cisg
ICAgR3JhcGhpY3NTaXplIGludHJpbnNpY1JhdGlvOwogICAgIGlmIChjb250ZW50UmVuZGVyZXIp
IHsKICAgICAgICAgY29udGVudFJlbmRlcmVyLT5jb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1h
dGlvbihpbnRyaW5zaWNSYXRpbywgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSk7CiAgICAgICAg
IGNvbnRlbnRSZW5kZXJTdHlsZSA9IGNvbnRlbnRSZW5kZXJlci0+c3R5bGUoKTsKQEAgLTQ0Miw3
ICs0NDIsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclJlcGxhY2VkOjpzZWxlY3Rpb25SZWN0CiAgICAg
aWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lciwgcmVjdCk7CiAgICAgZWxzZQotICAgICAgICByZWN0ID0gbG9jYWxU
b0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoR3Jh
cGhpY3NSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwogICAgIAogICAgIHJldHVybiByZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKIAogI2luY2x1ZGUgIkNv
bGxhcHNlZEJvcmRlclZhbHVlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAi
RWxsaXBzaXNCb3guaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1F1YWQuaCIKICNpbmNsdWRlICJGb250VHJhbnNjb2Rlci5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTI2OSw3ICsyNjksNyBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdpCiB2b2lkIFJlbmRlclRleHQ6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0KQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmly
c3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9hdFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQg
KyBib3gtPnRvcExlZnQoKSwgYm94LT5zaXplKCkpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChl
bmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBoaWNzUmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGJveC0+
dG9wTGVmdCgpLCBib3gtPnNpemUoKSkpKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0
ZVJlY3RzRm9yUmFuZ2UoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpCkBAIC0yOTgsNyArMjk4LDcgQEAg
dm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoVgogICAgICAgICAgICAgICAg
ICAgICByLnNldFgoc2VsZWN0aW9uUmVjdC54KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UXVhZChyKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICByZWN0cy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1F1YWQocikpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgcmVhbEVu
ZCA9IG1pbihib3gtPmVuZCgpICsgMSwgZW5kKTsKICAgICAgICAgICAgIEludFJlY3QgciA9IGJv
eC0+c2VsZWN0aW9uUmVjdChzdGFydCwgcmVhbEVuZCk7CkBAIC0zMTMsNyArMzEzLDcgQEAgdm9p
ZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoVgogICAgICAgICAgICAgICAgICAg
ICAgICAgci5zZXRYKGJveC0+eCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFF1YWQocikpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgICAg
IHJlY3RzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChyKSkuZW5jbG9z
aW5nQm91bmRpbmdCb3goKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
NDMsNyArMzQzLDcgQEAgc3RhdGljIEludFJlY3QgZWxsaXBzaXNSZWN0Rm9yQm94KElubGluZQog
ICAgIHJldHVybiBJbnRSZWN0KCk7CiB9CiAgICAgCi12b2lkIFJlbmRlclRleHQ6OmFic29sdXRl
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBDbGlwcGluZ09wdGlvbiBvcHRpb24pCit2
b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRz
LCBDbGlwcGluZ09wdGlvbiBvcHRpb24pCiB7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3gg
PSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAg
ICAgSW50UmVjdCBib3VuZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7CkBAIC0z
NTYsMTYgKzM1NiwxNiBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZs
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQo
ZWxsaXBzaXNSZWN0Lm1heFkoKSAtIGJvdW5kYXJpZXMueSgpKTsKICAgICAgICAgfQotICAgICAg
ICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm91bmRhcmllcykp
KTsKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0
KGJvdW5kYXJpZXMpKSk7CiAgICAgfQogfQogICAgIAotdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgYWJzb2x1dGVRdWFk
cyhxdWFkcywgTm9DbGlwcGluZyk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFk
c0ZvclJhbmdlKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgdW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQpCit2b2lkIFJlbmRlclRleHQ6OmFic29s
dXRlUXVhZHNGb3JSYW5nZShWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQogewogICAgIC8vIFdv
cmsgYXJvdW5kIHNpZ25lZC91bnNpZ25lZCBpc3N1ZXMuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdW5z
aWduZWRzLCBhbmQgaXMgb2Z0ZW4gcGFzc2VkIFVJTlRfTUFYCiAgICAgLy8gdG8gbWVhbiAiYWxs
IHRoZSB3YXkgdG8gdGhlIGVuZCIuIElubGluZVRleHRCb3ggY29vcmRpbmF0ZXMgYXJlIHVuc2ln
bmVkcywgc28gY2hhbmdpbmcgdGhpcyAKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFJlbmRlclRl
eHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAgICAgICAgICAgICAgICAgIHIuc2V0WChz
ZWxlY3Rpb25SZWN0LngoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHIpKSk7
CisgICAgICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1Jl
Y3QocikpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlYWxFbmQg
PSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7CiAgICAgICAgICAgICBJbnRSZWN0IHIgPSBib3gt
PnNlbGVjdGlvblJlY3Qoc3RhcnQsIHJlYWxFbmQpOwpAQCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQg
UmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0ZvclJhbmdlKFYKICAgICAgICAgICAgICAgICAgICAg
ICAgIHIuc2V0WChib3gtPngoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KHIpKSk7CisgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQoR3JhcGhpY3NSZWN0KHIpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC05NzYsNyArOTc2LDcgQEAgYm9vbCBSZW5kZXJUZXh0Ojpjb250YWluc09ubHlXaGl0
ZXNwYWNlKAogICAgIHJldHVybiBjdXJyUG9zID49IChmcm9tICsgbGVuKTsKIH0KIAotRmxvYXRQ
b2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1bk9yaWdpbigpIGNvbnN0CitHcmFwaGljc1BvaW50IFJl
bmRlclRleHQ6OmZpcnN0UnVuT3JpZ2luKCkgY29uc3QKIHsKICAgICByZXR1cm4gSW50UG9pbnQo
Zmlyc3RSdW5YKCksIGZpcnN0UnVuWSgpKTsKIH0KQEAgLTEzMzMsNyArMTMzMyw3IEBAIEludFJl
Y3QgUmVuZGVyVGV4dDo6bGluZXNCb3VuZGluZ0JveCgpIGMKICAgICAgICAgZmxvYXQgeSA9IGlz
SG9yaXpvbnRhbCA/IGZpcnN0VGV4dEJveCgpLT55KCkgOiBsb2dpY2FsTGVmdFNpZGU7CiAgICAg
ICAgIGZsb2F0IHdpZHRoID0gaXNIb3Jpem9udGFsID8gbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2lj
YWxMZWZ0U2lkZSA6IGxhc3RUZXh0Qm94KCktPmxvZ2ljYWxCb3R0b20oKSAtIHg7CiAgICAgICAg
IGZsb2F0IGhlaWdodCA9IGlzSG9yaXpvbnRhbCA/IGxhc3RUZXh0Qm94KCktPmxvZ2ljYWxCb3R0
b20oKSAtIHkgOiBsb2dpY2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlOwotICAgICAgICBy
ZXN1bHQgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
CisgICAgICAgIHJlc3VsdCA9IGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQxOCw3ICsx
NDE4LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0Rm9yUgogICAgICAg
ICBpZiAoY2ItPmhhc0NvbHVtbnMoKSkKICAgICAgICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29s
dW1ucyhyZWN0KTsKIAotICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRS
ZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAg
ICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoR3JhcGhpY3NSZWN0KHJlY3QpLCByZXBh
aW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIH0KIAogICAgIHJldHVy
biByZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDExICs1NywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0KTsKICAgICB2b2lkIGFic29sdXRlUmVjdHNGb3JSYW5nZShWZWN0b3I8SW50
UmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJ
TlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7Ci0gICAgdm9pZCBhYnNvbHV0
ZVF1YWRzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UXVhZD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJTlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhp
Y3NRdWFkPiYpOworICAgIHZvaWQgYWJzb2x1dGVRdWFkc0ZvclJhbmdlKFZlY3RvcjxHcmFwaGlj
c1F1YWQ+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBV
SU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAKICAgICBlbnVtIENs
aXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKLSAgICB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBDbGlwcGluZ09wdGlvbiBvcHRpb24gPSBO
b0NsaXBwaW5nKTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4m
LCBDbGlwcGluZ09wdGlvbiBvcHRpb24gPSBOb0NsaXBwaW5nKTsKIAogICAgIHZpcnR1YWwgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKIApAQCAt
ODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IGxpbmVzQm91bmRpbmdC
b3goKSBjb25zdDsKICAgICBJbnRSZWN0IGxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgp
IGNvbnN0OwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFJ1bk9yaWdpbigpIGNvbnN0OworICAgIEdy
YXBoaWNzUG9pbnQgZmlyc3RSdW5PcmlnaW4oKSBjb25zdDsKICAgICBmbG9hdCBmaXJzdFJ1blgo
KSBjb25zdDsKICAgICBmbG9hdCBmaXJzdFJ1blkoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
Myw3ICs1MDMsNyBAQCBTdHJpbmcgUmVuZGVyVGhlbWU6OmZvcm1hdE1lZGlhQ29udHJvbHNSCiBJ
bnRQb2ludCBSZW5kZXJUaGVtZTo6dm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVu
ZGVyQm94KiBtdXRlQnV0dG9uQm94LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogewogICAg
IGludCB5ID0gLXNpemUuaGVpZ2h0KCk7Ci0gICAgRmxvYXRQb2ludCBhYnNQb2ludCA9IG11dGVC
dXR0b25Cb3gtPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG11dGVCdXR0b25Cb3gtPm9mZnNl
dExlZnQoKSwgeSksIHRydWUsIHRydWUpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9pbnQgPSBt
dXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludChtdXRlQnV0dG9uQm94
LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsKICAgICBpZiAoYWJzUG9pbnQueSgpIDwg
MCkKICAgICAgICAgeSA9IG11dGVCdXR0b25Cb3gtPmhlaWdodCgpOwogICAgIHJldHVybiBJbnRQ
b2ludCgwLCB5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgcHJpdmF0ZToKIAog
ICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBj
b25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OwogCi0gICAg
RmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0
UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0
IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIs
IGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGlu
cHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3Q7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBj
b250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250
cm9scyAobGlrZSBidXR0b25zKS4KICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9u
dChSZW5kZXJTdHlsZSopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0NSwxMiArNTQ1LDEy
IEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0KGNvbnMKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1GbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50aW5n
UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVj
dCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVj
dCYgcikgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRp
bmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJ
bnRSZWN0JiByKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYXJ0UmVjdChpbnB1dFJlY3QpOwor
ICAgIEdyYXBoaWNzUmVjdCBwYXJ0UmVjdChpbnB1dFJlY3QpOwogICAgIAogICAgIC8vIENvbXB1
dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5k
ZXJlcgotICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKKyAgICBHcmFwaGlj
c1NpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXI7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHBhcnRSZW5kZXJlcjsKICAgICB3aGlsZSAocmVuZGVyZXIgJiYgcmVuZGVyZXIg
IT0gaW5wdXRSZW5kZXJlcikgewogICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdSZW5k
ZXJlciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKQEAgLTc5Myw3ICs3OTMsNyBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlCiAgICAgICAgIGluZmxhdGVkUmVjdC5z
ZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIGluZmxh
dGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZs
YXRlZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2Nh
bGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgp
KTsKICAgICB9CiAKQEAgLTk1NCw3ICs5NTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFByb2dyZXNzQmFyKFJlCiAKICAgICBpZiAoIXJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSgyICogcmVjdC54KCkgKyByZWN0LndpZHRoKCksIDApOwotICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKC0xLCAxKSk7CisgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoLTEsIDEpKTsKICAgICB9CiAgICAgCiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgcmVjdC5sb2NhdGlvbigpKTsKQEAgLTEwMjksMTIgKzEwMjksMTIgQEAgdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogCiAgICAgQ0dDb2xvclNwYWNl
UmVmIGNzcGFjZSA9IGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKIAotICAgIEZsb2F0UmVjdCB0
b3BHcmFkaWVudChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSAvIDIuMGYpOwor
ICAgIEdyYXBoaWNzUmVjdCB0b3BHcmFkaWVudChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5o
ZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENhbGxi
YWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0
cjxDR0Z1bmN0aW9uUmVmPiB0b3BGdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5V
TEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpKTsKICAgICBSZXRhaW5QdHI8Q0dT
aGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFj
ZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55KCkpLCBDR1BvaW50
TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lm1heFkoKSksIHRvcEZ1bmN0aW9uLmdl
dCgpLCBmYWxzZSwgZmFsc2UpKTsKIAotICAgIEZsb2F0UmVjdCBib3R0b21HcmFkaWVudChyLngo
KSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0aCgpIC0gMi4wZiAq
IHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOworICAgIEdyYXBoaWNzUmVjdCBib3R0b21HcmFk
aWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0aCgp
IC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0
aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBv
bGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBib3R0b21GdW5jdGlv
bihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZib3R0
b21DYWxsYmFja3MpKTsKICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21TaGFkaW5n
KEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm90dG9t
R3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90dG9tR3Jh
ZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5tYXhZKCkpLCBib3R0b21GdW5jdGlvbi5nZXQoKSwg
ZmFsc2UsIGZhbHNlKSk7CkBAIC0xMTA2LDE4ICsxMTA2LDE4IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENv
bG9yKG8tPnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
by0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlU3R5bGUoTm9TdHJva2UpOwogCi0gICAgRmxvYXRQb2ludCBhcnJvdzFbM107Ci0gICAgYXJy
b3cxWzBdID0gRmxvYXRQb2ludChsZWZ0RWRnZSwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93
cyAvIDIuMGYpOwotICAgIGFycm93MVsxXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dp
ZHRoLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cxWzJd
ID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZIC0gc3Bh
Y2VCZXR3ZWVuQXJyb3dzIC8gMi4wZiAtIGFycm93SGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50
IGFycm93MVszXTsKKyAgICBhcnJvdzFbMF0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlLCBjZW50
ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzFdID0gR3JhcGhp
Y3NQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJv
d3MgLyAyLjBmKTsKKyAgICBhcnJvdzFbMl0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJy
b3dXaWR0aCAvIDIuMGYsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmIC0gYXJy
b3dIZWlnaHQpOwogCiAgICAgLy8gRHJhdyB0aGUgdG9wIGFycm93CiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIGFycm93MSwgdHJ1ZSk7CiAKLSAgICBGbG9hdFBv
aW50IGFycm93MlszXTsKLSAgICBhcnJvdzJbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBjZW50
ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cyWzFdID0gRmxvYXRQ
b2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3Mg
LyAyLjBmKTsKLSAgICBhcnJvdzJbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0
aCAvIDIuMGYsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmICsgYXJyb3dIZWln
aHQpOworICAgIEdyYXBoaWNzUG9pbnQgYXJyb3cyWzNdOworICAgIGFycm93MlswXSA9IEdyYXBo
aWNzUG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsK
KyAgICBhcnJvdzJbMV0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwgY2Vu
dGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93MlsyXSA9IEdyYXBo
aWNzUG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIHNwYWNlQmV0
d2VlbkFycm93cyAvIDIuMGYgKyBhcnJvd0hlaWdodCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0
b20gYXJyb3cKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgYXJy
b3cyLCB0cnVlKTsKQEAgLTEzNDEsNyArMTM0MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2xpZGVyVGh1bWIoUmUKICAgICAgICAgICAgIFtzbGlkZXJUaHVtYkNlbGwgc3RvcFRyYWNr
aW5nOk5TUG9pbnQoKSBhdDpOU1BvaW50KCkgaW5WaWV3Om5pbCBtb3VzZUlzVXA6WUVTXTsKICAg
ICB9CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gcjsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRz
ID0gcjsKICAgICAvLyBNYWtlIHRoZSBoZWlnaHQgb2YgdGhlIHZlcnRpY2FsIHNsaWRlciBzbGln
aHRseSBsYXJnZXIgc28gTlNTbGlkZXJDZWxsIHdpbGwgZHJhdyBhIHZlcnRpY2FsIHNsaWRlci4K
ICAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQogICAgICAgICBib3VuZHMuc2V0SGVpZ2h0KGJvdW5kcy5oZWlnaHQoKSArIHZlcnRpY2Fs
U2xpZGVySGVpZ2h0UGFkZGluZyAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CkBAIC0x
MzQ5LDEyICsxMzQ5LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIo
UmUKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5j
b250ZXh0KTsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7CiAgICAgCi0gICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGJvdW5kczsKKyAgICBHcmFw
aGljc1JlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOwogICAgIGlmICh6b29tTGV2ZWwgIT0gMS4w
ZikgewogICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0LndpZHRoKCkg
LyB6b29tTGV2ZWwpOwogICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0KHVuem9vbWVkUmVj
dC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFu
c2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tTGV2ZWwsIHpv
b21MZXZlbCkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21l
ZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogICAgIApAQCAtMTM2MiwxMiAr
MTM2MiwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlCiAgICAg
Ly8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzk0MjE3ODE+LgogICAgIGlmICghby0+
dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCkpIHsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnRyYW5zbGF0ZSgwLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoMCwgLSh1bnpvb21lZFJlY3QueSgpICsgdW56b29tZWRSZWN0Lmhl
aWdodCgpKSk7CiAgICAgfQogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnRyYW5zbGF0ZSgwLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFu
c2xhdGUoMCwgLSh1bnpvb21lZFJlY3QueSgpICsgdW56b29tZWRSZWN0LmhlaWdodCgpKSk7CiAj
ZW5kaWYKICAgICAKQEAgLTEzOTQsNyArMTM5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGQoUmUKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVk
UmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdo
dCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwot
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9v
bUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUo
em9vbUxldmVsLCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIApAQCAt
MTQ4Niw3ICsxNDg2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENh
bgogCiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwog
Ci0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBjYW5jZWxCdXR0b25SZWN0Rm9y
Qm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAg
IEdyYXBoaWNzUmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2VsQnV0dG9uUmVjdEZvckJv
dW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKIAogI2lm
IEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgLy8gVGFrZSBjYXJlIG9mIGNhc2VzIHdoZXJlIHRo
ZSBjYW5jZWwgYnV0dG9uIHdhcyBub3QgYWxpZ25lZCB3aXRoIHRoZSByaWdodCBib3JkZXIgb2Yg
dGhlIGlucHV0IGVsZW1lbnQgKGZvciBlLmcuCkBAIC0xNDk5LDEyICsxNDk5LDEyIEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW4KIAogICAgIGxvY2FsQm91bmRzID0g
Y29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywg
cik7CiAKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKKyAgICBHcmFw
aGljc1JlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9
IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0
aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21l
ZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+
dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7
CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxldmVs
LCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56
b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIApAQCAtMTU3MSw3ICsx
NTcxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogCiAgICAg
dXBkYXRlQWN0aXZlU3RhdGUoW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSwgbyk7CiAKLSAgICBG
bG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6
TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CisgICAgR3JhcGhp
Y3NSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5T
UmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOwogICAgIGxvY2FsQm91
bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJv
dW5kcywgcik7CiAKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1l
OmxvY2FsQm91bmRzIGluVmlldzpkb2N1bWVudFZpZXdGb3IobyldOwpAQCAtMTYwNyw3ICsxNjA3
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogICAg
IGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAotICAgIEZs
b2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpO
U1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKKyAgICBHcmFwaGlj
c1JlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNS
ZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxCb3Vu
ZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91
bmRzLCByKTsKICAgICAKICAgICBJbnRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CkBA
IC0xNjE1LDcgKzE2MTUsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxk
UmVzCiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAv
IHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0
LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9v
bUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVk
UmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAKQEAgLTE3MTEsMTUgKzE3MTEs
MTUgQEAgc3RhdGljIHVuc2lnbmVkIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncwogfQogCiAvLyBV
dGlsaXR5IHRvIHNjYWxlIHdoZW4gdGhlIFVJIHBhcnQgYXJlIG5vdCBzY2FsZWQgYnkgd2tEcmF3
TWVkaWFVSVBhcnQKLXN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3Vy
cmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQorc3RhdGljIEdyYXBoaWNzUmVjdCBnZXRVbnpv
b21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCiB7CiAgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIEZsb2F0
UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29t
ZWRSZWN0KG9yaWdpbmFsUmVjdCk7CiAgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmICYmIG1lZGlh
Q29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhlbWVRdWlja1RpbWUpIHsKICAg
ICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxl
dmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0
KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVu
em9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUxldmVsLCB6b29tTGV2ZWwp
KTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0Lngo
KSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KICAgICByZXR1cm4gdW56b29tZWRSZWN0OwpA
QCAtMTgxMCw3ICsxODEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRl
clRyYQogICAgIENvbnRleHRDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5j
b250ZXh0KTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGNnQ29udGV4dENvbnRhaW5lci5j
b250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWlu
dEluZm8uY29udGV4dCk7Ci0gICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVk
UmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CisgICAgR3JhcGhp
Y3NSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250
ZXh0KG8sIHBhaW50SW5mbywgcik7CiAgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhtZWRpYUNv
bnRyb2xsZXJUaGVtZSgpLCBjb250ZXh0LCB1bnpvb21lZFJlY3QsIAogICAgICAgICB0aW1lTG9h
ZGVkLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2Rl
KSk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg4NCw3ICsxODg0LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZWRpYUN1cnJlbnRUaQogCiAgICAgQ29udGV4dENvbnRhaW5lciBjZ0Nv
bnRleHRDb250YWluZXIocGFpbnRJbmZvLmNvbnRleHQpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIEZsb2F0UmVjdCB1
bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBw
YWludEluZm8sIHIpOworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21l
ZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOwogICAgIHdrRHJh
d01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVt
ZSgpLCBjZ0NvbnRleHRDb250YWluZXIuY29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlh
VUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTg5Nyw3
ICsxODk3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haQogCiAg
ICAgQ29udGV4dENvbnRhaW5lciBjZ0NvbnRleHRDb250YWluZXIocGFpbnRJbmZvLmNvbnRleHQp
OwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQpOwotICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRB
ZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOworICAgIEdyYXBoaWNzUmVjdCB1
bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBw
YWludEluZm8sIHIpOwogICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVGltZVJlbWFpbmluZ0Rp
c3BsYXksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIGNnQ29udGV4dENvbnRhaW5lci5jb250ZXh0
KCksIHVuem9vbWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVTYWZhcmkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVNhZmFyaS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU4LDEyICs3
NTgsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dAogCiAgICAg
Q0dDb2xvclNwYWNlUmVmIGNzcGFjZSA9IGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKTsKIAotICAg
IEZsb2F0UmVjdCB0b3BHcmFkaWVudChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo
KSAvIDIuMGYpOworICAgIEdyYXBoaWNzUmVjdCB0b3BHcmFkaWVudChyLngoKSwgci55KCksIHIu
d2lkdGgoKSwgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJh
Y2tzIHRvcENhbGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9Owog
ICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiB0b3BGdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0
aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpKTsKICAgICBS
ZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0
ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55
KCkpLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lm1heFkoKSksIHRv
cEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAotICAgIEZsb2F0UmVjdCBib3R0b21H
cmFkaWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0
aCgpIC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOworICAgIEdyYXBoaWNzUmVj
dCBib3R0b21HcmFkaWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4w
Ziwgci53aWR0aCgpIC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0
cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3Jh
ZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBi
b3R0b21GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQs
IE5VTEwsICZib3R0b21DYWxsYmFja3MpKTsKICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBi
b3R0b21TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2lu
dE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1h
a2UoYm90dG9tR3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5tYXhZKCkpLCBib3R0b21GdW5j
dGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CkBAIC04MjksMTAgKzgyOSwxMCBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0QnV0CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvciksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihOb1N0cm9rZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKLSAgICBGbG9h
dFBvaW50IGFycm93WzNdOwotICAgIGFycm93WzBdID0gRmxvYXRQb2ludChsZWZ0RWRnZSwgY2Vu
dGVyWSAtIGFycm93SGVpZ2h0IC8gMi4wZik7Ci0gICAgYXJyb3dbMV0gPSBGbG9hdFBvaW50KGxl
ZnRFZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSAtIGFycm93SGVpZ2h0IC8gMi4wZik7Ci0gICAg
YXJyb3dbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRl
clkgKyBhcnJvd0hlaWdodCAvIDIuMGYpOworICAgIEdyYXBoaWNzUG9pbnQgYXJyb3dbM107Cisg
ICAgYXJyb3dbMF0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlLCBjZW50ZXJZIC0gYXJyb3dIZWln
aHQgLyAyLjBmKTsKKyAgICBhcnJvd1sxXSA9IEdyYXBoaWNzUG9pbnQobGVmdEVkZ2UgKyBhcnJv
d1dpZHRoLCBjZW50ZXJZIC0gYXJyb3dIZWlnaHQgLyAyLjBmKTsKKyAgICBhcnJvd1syXSA9IEdy
YXBoaWNzUG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIGFycm93
SGVpZ2h0IC8gMi4wZik7CiAKICAgICAvLyBEcmF3IHRoZSBhcnJvdwogICAgIHBhaW50SW5mby5j
b250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBhcnJvdywgdHJ1ZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE5LDcgKzUxOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFp
bnRTbGlkZXJUaHVtYigKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRp
YUVsZW1lbnRQYXJlbnQoby0+bm9kZSgpKTsKICAgICBpZiAobWVkaWFFbGVtZW50KSB7CiAgICAg
ICAgIGZsb2F0IHB0ID0gKG1lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKSAtIG1lZGlhRWxlbWVu
dC0+c3RhcnRUaW1lKCkpIC8gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwotICAgICAgICBGbG9h
dFJlY3QgaW50UmVjdCA9IHI7CisgICAgICAgIEdyYXBoaWNzUmVjdCBpbnRSZWN0ID0gcjsKICAg
ICAgICAgaW50UmVjdC5zZXRYKGludFJlY3QueCgpICsgaW50UmVjdC53aWR0aCgpICogcHQgLSAy
KTsKICAgICAgICAgaW50UmVjdC5zZXRXaWR0aCg1KTsKICAgICAgICAgaS5jb250ZXh0LT5maWxs
UmVjdChpbnRSZWN0KTsKQEAgLTU0Myw3ICs1NDMsNyBAQCB2b2lkIFJlbmRlclRoZW1lV2luQ0U6
OmFkanVzdFNlYXJjaEZpZWxkCiBib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50
SW5mbywgcik7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7CisgICAgR3JhcGhpY3NSZWN0IGlt
UmVjdCA9IHI7CiAgICAgaW1SZWN0LmluZmxhdGUoLTIpOwogICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpi
bGFjayk7CkBAIC01NTgsMTggKzU1OCwxOCBAQCBib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50
TWVkaWFNdXRlQnV0CiAgICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7
CiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50
KG8tPm5vZGUoKSk7CiAgICAgYm9vbCBtdXRlZCA9ICFtZWRpYUVsZW1lbnQgfHwgbWVkaWFFbGVt
ZW50LT5tdXRlZCgpOwotICAgIEZsb2F0UmVjdCBpbVJlY3QgPSByOworICAgIEdyYXBoaWNzUmVj
dCBpbVJlY3QgPSByOwogICAgIGltUmVjdC5pbmZsYXRlKC0yKTsKICAgICBwYWludEluZm8uY29u
dGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xv
cjo6YmxhY2spOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJs
YWNrKTsKLSAgICBGbG9hdFBvaW50IHB0c1s2XSA9IHsKLSAgICAgICAgRmxvYXRQb2ludChpbVJl
Y3QueCgpICsgMSwgaW1SZWN0LnkoKSArIGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCi0gICAgICAg
IEZsb2F0UG9pbnQoaW1SZWN0LngoKSArIDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0
LnkoKSArIGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0
Lm1heFgoKSAtIDEsIGltUmVjdC55KCkpLAotICAgICAgICBGbG9hdFBvaW50KGltUmVjdC5tYXhY
KCkgLSAxLCBpbVJlY3QubWF4WSgpKSwKLSAgICAgICAgRmxvYXRQb2ludChpbVJlY3QueCgpICsg
MSArIGltUmVjdC53aWR0aCgpIC8gMi4wLCBpbVJlY3QueSgpICsgMi4wICogaW1SZWN0LmhlaWdo
dCgpIC8gMy4wKSwKLSAgICAgICAgRmxvYXRQb2ludChpbVJlY3QueCgpICsgMSwgaW1SZWN0Lnko
KSArIDIuMCAqIGltUmVjdC5oZWlnaHQoKSAvIDMuMCkKKyAgICBHcmFwaGljc1BvaW50IHB0c1s2
XSA9IHsKKyAgICAgICAgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpICsgMSwgaW1SZWN0LnkoKSAr
IGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0Lngo
KSArIDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSArIGltUmVjdC5oZWlnaHQo
KSAvIDMuMCksCisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0Lm1heFgoKSAtIDEsIGltUmVj
dC55KCkpLAorICAgICAgICBHcmFwaGljc1BvaW50KGltUmVjdC5tYXhYKCkgLSAxLCBpbVJlY3Qu
bWF4WSgpKSwKKyAgICAgICAgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpICsgMSArIGltUmVjdC53
aWR0aCgpIC8gMi4wLCBpbVJlY3QueSgpICsgMi4wICogaW1SZWN0LmhlaWdodCgpIC8gMy4wKSwK
KyAgICAgICAgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpICsgMSwgaW1SZWN0LnkoKSArIDIuMCAq
IGltUmVjdC5oZWlnaHQoKSAvIDMuMCkKICAgICB9OwogICAgIHBhaW50SW5mby5jb250ZXh0LT5k
cmF3Q29udmV4UG9seWdvbig2LCBwdHMpOwogICAgIGlmIChtdXRlZCkKQEAgLTU4MSw3ICs1ODEs
NyBAQCBib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFNdXRlQnV0CiBib29sIFJlbmRl
clRoZW1lV2luQ0U6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgYm9vbCByYyA9
IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7
CisgICAgR3JhcGhpY3NSZWN0IGltUmVjdCA9IHI7CiAgICAgaW1SZWN0LmluZmxhdGUoLTMpOwog
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CkBAIC01OTUsNyArNTk1LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhUGxheUJ1dAogICAgICAgICBpbVJlY3QubW92ZSgyLjAg
KiB3aWR0aCAvIDMuMCwgMCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChp
bVJlY3QpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcHRzWzNdID0geyBGbG9h
dFBvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCks
IChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC54
KCksIGltUmVjdC5tYXhZKCkpIH07CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcHRzWzNdID0geyBH
cmFwaGljc1BvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBHcmFwaGljc1BvaW50KGltUmVj
dC5tYXhYKCksIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBHcmFwaGljc1Bv
aW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpIH07CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBwdHMpOwogICAgIH0KICAgICBwYWludEluZm8uY29u
dGV4dC0+cmVzdG9yZSgpOwpAQCAtNjA1LDEwICs2MDUsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVdp
bkNFOjpwYWludE1lZGlhUGxheUJ1dAogYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlh
U2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFp
bnRJbmZvLCByKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKKyAgICBHcmFwaGljc1JlY3Qg
aW1SZWN0ID0gcjsKICAgICBpbVJlY3QuaW5mbGF0ZSgtMyk7Ci0gICAgRmxvYXRQb2ludCBwdHNb
M10gPSB7IEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1S
ZWN0LnkoKSksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4
WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIu
MCwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9p
bnQoaW1SZWN0Lm1heFgoKSwgaW1SZWN0LnkoKSksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBp
bVJlY3QubWF4WCgpKSAvIDIuMCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCks
IEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSwgaW1SZWN0Lm1heFkoKSkgfTsKKyAgICBHcmFwaGlj
c1BvaW50IHB0c1szXSA9IHsgR3JhcGhpY3NQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhY
KCkpIC8gMi4wLCBpbVJlY3QueSgpKSwgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpLCAoaW1SZWN0
LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgR3JhcGhpY3NQb2ludCgoaW1SZWN0LngoKSAr
IGltUmVjdC5tYXhYKCkpIC8gMi4wLCBpbVJlY3QubWF4WSgpKSB9OworICAgIEdyYXBoaWNzUG9p
bnQgcHRzMlszXSA9IHsgR3JhcGhpY3NQb2ludChpbVJlY3QubWF4WCgpLCBpbVJlY3QueSgpKSwg
R3JhcGhpY3NQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhYKCkpIC8gMi4wLCAoaW1SZWN0
LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgR3JhcGhpY3NQb2ludChpbVJlY3QubWF4WCgp
LCBpbVJlY3QubWF4WSgpKSB9OwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CiAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwpAQCAtNjIxLDEwICs2
MjEsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2Vla0JhYwogYm9vbCBS
ZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAg
ICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFpbnRJbmZvLCByKTsKLSAgICBGbG9hdFJlY3Qg
aW1SZWN0ID0gcjsKKyAgICBHcmFwaGljc1JlY3QgaW1SZWN0ID0gcjsKICAgICBpbVJlY3QuaW5m
bGF0ZSgtMyk7Ci0gICAgRmxvYXRQb2ludCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0Lngo
KSwgaW1SZWN0LnkoKSksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAv
IDIuMCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoaW1S
ZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkgfTsKLSAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZs
b2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSks
IEZsb2F0UG9pbnQoaW1SZWN0Lm1heFgoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAv
IDIuMCksIEZsb2F0UG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1S
ZWN0Lm1heFkoKSkgfTsKKyAgICBHcmFwaGljc1BvaW50IHB0c1szXSA9IHsgR3JhcGhpY3NQb2lu
dChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgR3JhcGhpY3NQb2ludCgoaW1SZWN0LngoKSArIGlt
UmVjdC5tYXhYKCkpIC8gMi4wLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwg
R3JhcGhpY3NQb2ludChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OworICAgIEdyYXBoaWNz
UG9pbnQgcHRzMlszXSA9IHsgR3JhcGhpY3NQb2ludCgoaW1SZWN0LngoKSArIGltUmVjdC5tYXhY
KCkpIC8gMi4wLCBpbVJlY3QueSgpKSwgR3JhcGhpY3NQb2ludChpbVJlY3QubWF4WCgpLCAoaW1S
ZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgR3JhcGhpY3NQb2ludCgoaW1SZWN0Lngo
KSArIGltUmVjdC5tYXhYKCkpIC8gMi4wLCBpbVJlY3QubWF4WSgpKSB9OwogICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KENvbG9yOjpibGFjayk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgYwogICAgIHJldHVybiB0cyA8PCAi
KCIgPDwgcC54KCkgPDwgIiwiIDw8IHAueSgpIDw8ICIpIjsKIH0KIAotVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCYgcCkKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAg
ICAgdHMgPDwgIigiOyAgICAKICAgICBpZiAoaGFzRnJhY3Rpb25zKHAueCgpKSkKQEAgLTEwOSw3
ICsxMDksNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjCiAgICAg
cmV0dXJuIHRzIDw8ICIpIjsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmxvYXRTaXplJiBzKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgR3JhcGhpY3NTaXplJiBzKQogewogICAgIHRzIDw8ICJ3aWR0aD0iOwog
ICAgIGlmIChoYXNGcmFjdGlvbnMocy53aWR0aCgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw4ICszMyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFz
cyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRTaXplOworY2xhc3MgR3JhcGhpY3NQb2ludDsKK2Ns
YXNzIEdyYXBoaWNzU2l6ZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJ
bnRSZWN0OwpAQCAtNzAsOCArNzAsOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlck9iamVjdChU
ZXh0U3RyZWFtCiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IElu
dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRS
ZWN0Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBv
aW50Jik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNp
emUmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVtPgogVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVmVjdG9yPEl0ZW0+JiB2ZWN0b3IpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKQEAgLTMzMSw5ICszMzEsOSBAQCB2b2lkIFJlbmRlclZpZXc6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPExhCiAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3QoYWNjdW11
bGF0ZWRPZmZzZXQsIG1fbGF5ZXItPnNpemUoKSkpOwogfQogCi12b2lkIFJlbmRlclZpZXc6OmFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJWaWV3Ojph
YnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+JiBxdWFkcykKIHsKLSAgICBxdWFkcy5h
cHBlbmQoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9sYXllci0+c2l6ZSgpKSk7CisgICAgcXVh
ZHMuYXBwZW5kKEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1fbGF5ZXItPnNpemUoKSkp
OwogfQogCiBzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyUG9zaXRpb24oUmVuZGVy
T2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTM3OSw3ICszNzksNyBAQCBJbnRS
ZWN0IFJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sCiAgICAgICAgIC8vIFJlbmRlclNl
bGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRD
b250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgogICAgICAgICBJbnRSZWN0IGN1
cnJSZWN0ID0gaW5mby0+cmVjdCgpOwogICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKLSAgICAgICAg
ICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QoY3VyclJlY3QpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUXVhZCBhYnNR
dWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3Qo
Y3VyclJlY3QpKTsKICAgICAgICAgICAgIGN1cnJSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOyAKICAgICAgICAgfQogICAgICAgICBzZWxSZWN0LnVuaXRlKGN1cnJSZWN0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gOTEwMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICB2b2lkIHNldE1heGltYWxPdXRsaW5lU2l6ZShpbnQgbyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gOTEwMjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRXaWRnZXQoUGFz
c1JlZlB0cjwKICAgICAgICAgLy8gc3R5bGUgcG9pbnRlcikuCiAgICAgICAgIGlmIChzdHlsZSgp
KSB7CiAgICAgICAgICAgICBpZiAoIW5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgc2V0
V2lkZ2V0R2VvbWV0cnkoSW50UmVjdChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChjb250
ZW50Qm94UmVjdCgpKSkuYm91bmRpbmdCb3goKSksIGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICBzZXRXaWRnZXRHZW9tZXRyeShJbnRSZWN0KGxvY2FsVG9BYnNvbHV0
ZVF1YWQoR3JhcGhpY3NRdWFkKGNvbnRlbnRCb3hSZWN0KCkpKS5ib3VuZGluZ0JveCgpKSwgY29u
dGVudEJveFJlY3QoKS5zaXplKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgICAgIG1fd2lkZ2V0LT5oaWRlKCk7CiAgICAg
ICAgICAgICBlbHNlIHsKQEAgLTMyNyw3ICszMjcsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6dXBk
YXRlV2lkZ2V0UG9zaXRpb24oCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgY29udGVu
dEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3gg
PSBJbnRSZWN0KGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGNvbnRlbnRCb3gpKS5ib3Vu
ZGluZ0JveCgpKTsKKyAgICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJveCA9IEludFJlY3QobG9j
YWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1F1YWQoY29udGVudEJveCkpLmJvdW5kaW5nQm94KCkp
OwogICAgIGJvb2wgYm91bmRzQ2hhbmdlZCA9IHNldFdpZGdldEdlb21ldHJ5KGFic29sdXRlQ29u
dGVudEJveCwgY29udGVudEJveC5zaXplKCkpOwogCiAgICAgLy8gaWYgdGhlIGZyYW1lIGJvdW5k
cyBnb3QgY2hhbmdlZCwgb3IgaWYgdmlldyBuZWVkcyBsYXlvdXQgKHBvc3NpYmx5IGluZGljYXRp
bmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBSb290SW5saW5lQm94
OjphZGRIaWdobGlnaHRPdmVyZmxvdwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBIaWdobGln
aHQgYWN0cyBhcyBhIHNlbGVjdGlvbiBpbmZsYXRpb24uCi0gICAgRmxvYXRSZWN0IHJvb3RSZWN0
KDAsIHNlbGVjdGlvblRvcCgpLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwor
ICAgIEdyYXBoaWNzUmVjdCByb290UmVjdCgwLCBzZWxlY3Rpb25Ub3AoKSwgbG9naWNhbFdpZHRo
KCksIHNlbGVjdGlvbkhlaWdodCgpKTsKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0
KHJlbmRlcmVyKCktPm5vZGUoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGlnaGxpZ2h0KCksIHJv
b3RSZWN0KSk7CiAgICAgc2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJlY3RzKGluZmxhdGVkUmVjdCwg
aW5mbGF0ZWRSZWN0LCBsaW5lVG9wKCksIGxpbmVCb3R0b20oKSk7CiB9CkBAIC0xNzAsOCArMTcw
LDggQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodAogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBHZXQgdGhlIGluZmxhdGVkIHJlY3Qgc28gdGhhdCB3ZSBjYW4gcHJv
cGVybHkgaGl0IHRlc3QuCi0gICAgRmxvYXRSZWN0IHJvb3RSZWN0KHBhaW50T2Zmc2V0LngoKSAr
IHgoKSwgcGFpbnRPZmZzZXQueSgpICsgc2VsZWN0aW9uVG9wKCksIGxvZ2ljYWxXaWR0aCgpLCBz
ZWxlY3Rpb25IZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+Y3VzdG9tSGlnaGxpZ2h0UmVjdChyZW5kZXJlcigpLT5ub2RlKCks
IGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgcm9vdFJlY3QocGFp
bnRPZmZzZXQueCgpICsgeCgpLCBwYWludE9mZnNldC55KCkgKyBzZWxlY3Rpb25Ub3AoKSwgbG9n
aWNhbFdpZHRoKCksIHNlbGVjdGlvbkhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3QgaW5mbGF0
ZWRSZWN0ID0gcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5jdXN0b21IaWdobGlnaHRSZWN0KHJl
bmRlcmVyKCktPm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QpOwogICAgIGlmIChpbmZs
YXRlZFJlY3QuaW50ZXJzZWN0cyhwYWludEluZm8ucmVjdCkpCiAgICAgICAgIHBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQocmVuZGVyZXIoKS0+bm9kZSgpLCBo
aWdobGlnaHRUeXBlLCByb290UmVjdCwgcm9vdFJlY3QsIGZhbHNlLCB0cnVlKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgVHJhbnNmb3JtU3RhdGU6OmZsYXR0
ZW4oKQogICAgIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKCptX2FjY3VtdWxhdGVkVHJhbnNmb3JtKTsK
IH0KIAotRmxvYXRQb2ludCBUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUG9pbnQoKSBjb25zdAorR3Jh
cGhpY3NQb2ludCBUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUG9pbnQoKSBjb25zdAogewogICAgIGlm
ICghbV9hY2N1bXVsYXRlZFRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuIG1fbGFzdFBsYW5hclBv
aW50OwpAQCAtOTgsNyArOTgsNyBAQCBGbG9hdFBvaW50IFRyYW5zZm9ybVN0YXRlOjptYXBwZWRQ
b2ludCgpCiAgICAgcmV0dXJuIG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0tPmludmVyc2UoKS5wcm9q
ZWN0UG9pbnQobV9sYXN0UGxhbmFyUG9pbnQpOwogfQogCi1GbG9hdFF1YWQgVHJhbnNmb3JtU3Rh
dGU6Om1hcHBlZFF1YWQoKSBjb25zdAorR3JhcGhpY3NRdWFkIFRyYW5zZm9ybVN0YXRlOjptYXBw
ZWRRdWFkKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pCiAgICAg
ICAgIHJldHVybiBtX2xhc3RQbGFuYXJRdWFkOwpAQCAtMTY0LDEyICsxNjQsMTIgQEAgdm9pZCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmZsYXR0ZW5XaQogICAgIG1fYWNjdW11bGF0aW5nVHJh
bnNmb3JtID0gZmFsc2U7CiB9CiAKLUZsb2F0UG9pbnQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
OjptYXBwZWRQb2ludCgpIGNvbnN0CitHcmFwaGljc1BvaW50IEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZTo6bWFwcGVkUG9pbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJh
bnNmb3JtLmludmVyc2UoKS5wcm9qZWN0UG9pbnQobV9sYXN0UGxhbmFyUG9pbnQpOwogfQogCi1G
bG9hdFF1YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFkKCkgY29uc3QKK0dy
YXBoaWNzUXVhZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFF1YWQoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmludmVyc2UoKS5wcm9qZWN0UXVh
ZChtX2xhc3RQbGFuYXJRdWFkKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
cmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
cmFuc2Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAj
ZGVmaW5lIFRyYW5zZm9ybVN0YXRlX2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIGVudW0gVHJh
bnNmb3JtQWNjdW11bGF0aW9uIHsgRmxhdHRlblRyYW5zZm9ybSwgQWNjdW11bGF0ZVRyYW5zZm9y
bSB9OwogCiAgICAgLy8gSWYgcXVhZCBpcyBub24tbnVsbCwgaXQgd2lsbCBiZSBtYXBwZWQKLSAg
ICBUcmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1EaXJlY3Rpb24gbWFwcGluZ0RpcmVjdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRRdWFkKiBxdWFkID0gMCkKKyAgICBUcmFuc2Zv
cm1TdGF0ZShUcmFuc2Zvcm1EaXJlY3Rpb24gbWFwcGluZ0RpcmVjdGlvbiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NRdWFkKiBxdWFkID0gMCkKICAgICAgICAgOiBtX2xh
c3RQbGFuYXJQb2ludChwKQogICAgICAgICAsIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKGZhbHNl
KQogICAgICAgICAsIG1fbWFwUXVhZChxdWFkICE9IDApCkBAIC02NSwxOCArNjUsMTggQEAgcHVi
bGljOgogICAgIHZvaWQgZmxhdHRlbigpOwogCiAgICAgLy8gUmV0dXJuIHRoZSBjb29yZHMgb2Yg
dGhlIHBvaW50IG9yIHF1YWQgaW4gdGhlIGxhc3QgZmxhdHRlbmVkIGxheWVyCi0gICAgRmxvYXRQ
b2ludCBsYXN0UGxhbmFyUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJQb2ludDsg
fQotICAgIEZsb2F0UXVhZCBsYXN0UGxhbmFyUXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBs
YW5hclF1YWQ7IH0KKyAgICBHcmFwaGljc1BvaW50IGxhc3RQbGFuYXJQb2ludCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdFBsYW5hclBvaW50OyB9CisgICAgR3JhcGhpY3NRdWFkIGxhc3RQbGFuYXJR
dWFkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGxhbmFyUXVhZDsgfQogCiAgICAgLy8gUmV0dXJu
IHRoZSBwb2ludCBvciBxdWFkIG1hcHBlZCB0aHJvdWdoIHRoZSBjdXJyZW50IHRyYW5zZm9ybQot
ICAgIEZsb2F0UG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKLSAgICBGbG9hdFF1YWQgbWFwcGVk
UXVhZCgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgbWFwcGVkUG9pbnQoKSBjb25zdDsKKyAg
ICBHcmFwaGljc1F1YWQgbWFwcGVkUXVhZCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQg
ZmxhdHRlbldpdGhUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICAK
LSAgICBGbG9hdFBvaW50IG1fbGFzdFBsYW5hclBvaW50OwotICAgIEZsb2F0UXVhZCBtX2xhc3RQ
bGFuYXJRdWFkOworICAgIEdyYXBoaWNzUG9pbnQgbV9sYXN0UGxhbmFyUG9pbnQ7CisgICAgR3Jh
cGhpY3NRdWFkIG1fbGFzdFBsYW5hclF1YWQ7CiAKICAgICAvLyBXZSBvbmx5IGFsbG9jYXRlIHRo
ZSB0cmFuc2Zvcm0gaWYgd2UgbmVlZCB0bwogICAgIE93blB0cjxUcmFuc2Zvcm1hdGlvbk1hdHJp
eD4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybTsKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKIAog
Y2xhc3MgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8SGl0VGVz
dGluZ1RyYW5zZm9ybVN0YXRlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3Qg
RmxvYXRRdWFkJiBxdWFkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUXVh
ZCYgcXVhZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlKHAsIHF1YWQpKTsKICAgICB9CkBAIC0xMDEsMTcgKzEwMSwxNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCB0cmFuc2xhdGUoaW50IHgsIGludCB5LCBUcmFuc2Zvcm1BY2N1bXVsYXRp
b24pOwogICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybUZyb21Db250YWluZXIsIFRyYW5zZm9ybUFjY3VtdWxhdGlvbik7CiAKLSAgICBG
bG9hdFBvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQo
KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7CisgICAgR3Jh
cGhpY3NRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKICAgICB2b2lkIGZsYXR0ZW4oKTsKIAotICAg
IEZsb2F0UG9pbnQgbV9sYXN0UGxhbmFyUG9pbnQ7Ci0gICAgRmxvYXRRdWFkIG1fbGFzdFBsYW5h
clF1YWQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKKyAgICBHcmFwaGlj
c1F1YWQgbV9sYXN0UGxhbmFyUXVhZDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2FjY3Vt
dWxhdGVkVHJhbnNmb3JtOwogICAgIGJvb2wgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm07CiAKIHBy
aXZhdGU6Ci0gICAgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAs
IGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKKyAgICBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUoY29u
c3QgR3JhcGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhpY3NRdWFkJiBxdWFkKQogICAgICAgICA6
IG1fbGFzdFBsYW5hclBvaW50KHApCiAgICAgICAgICwgbV9sYXN0UGxhbmFyUXVhZChxdWFkKQog
ICAgICAgICAsIG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKGZhbHNlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMCArMTQyLDEwIEBAIHZvaWQg
UmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBMYXlvdXRVbml0IHN0YXJ0
ID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBpbmRleFdpZHRoICsgZ1JhZGljYWxMZWZ0TWFy
Z2luICsgc3R5bGUoKS0+cGFkZGluZ0xlZnQoKS52YWx1ZSgpIC0gcm9vdFBhZDsKICAgICBhZGp1
c3RlZFBhaW50T2Zmc2V0LnNldFkoYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBzdHlsZSgpLT5w
YWRkaW5nVG9wKCkudmFsdWUoKSAtIHJvb3RQYWQpOwogICAgIAotICAgIEZsb2F0UG9pbnQgdG9w
U3RhcnQoc3RhcnQgLSB0b3BTdGFydFNoaWZ0LCBwYWludE9mZnNldC55KCkpOwotICAgIEZsb2F0
UG9pbnQgYm90dG9tTGVmdChzdGFydCAtIGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJvbnRX
aWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsgZ1JhZGljYWxCYXNl
UGFkKTsKLSAgICBGbG9hdFBvaW50IHRvcExlZnQoc3RhcnQgLSBnUmFkaWNhbFRvcExlZnRQb2lu
dFhQb3MgKiBmcm9udFdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBnUmFkaWNhbFRv
cExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOwotICAgIEZsb2F0UG9pbnQgbGVmdEVuZChzdGFy
dCAtIGZyb250V2lkdGggLCB0b3BMZWZ0LnkoKSArIGdSYWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0
eWxlKCktPmZvbnRTaXplKCkpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wU3RhcnQoc3RhcnQgLSB0
b3BTdGFydFNoaWZ0LCBwYWludE9mZnNldC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgYm90dG9t
TGVmdChzdGFydCAtIGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsgZ1JhZGljYWxCYXNlUGFkKTsKKyAgICBH
cmFwaGljc1BvaW50IHRvcExlZnQoc3RhcnQgLSBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgKiBm
cm9udFdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBnUmFkaWNhbFRvcExlZnRQb2lu
dFlQb3MgKiBtYXhIZWlnaHQpOworICAgIEdyYXBoaWNzUG9pbnQgbGVmdEVuZChzdGFydCAtIGZy
b250V2lkdGggLCB0b3BMZWZ0LnkoKSArIGdSYWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCkt
PmZvbnRTaXplKCkpOwogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqaW5mby5jb250ZXh0KTsKICAgICAKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgCiAgICAgUGF0aCByb290OwogICAg
IAotICAgIHJvb3QubW92ZVRvKEZsb2F0UG9pbnQodG9wU3RhcnQueCgpICsgd2lkdGgsIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpKSk7CisgICAgcm9vdC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh0b3BT
dGFydC54KCkgKyB3aWR0aCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3
IHRvcAogICAgIHJvb3QuYWRkTGluZVRvKHRvcFN0YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9w
IGxlZnQgY29ybmVyIHRvIGJvdHRvbSBwb2ludCBvZiByYWRpY2FsCkBAIC0xNzcsNyArMTc3LDcg
QEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIG1hc2subW92
ZVRvKHRvcFN0YXJ0KTsKICAgICBtYXNrLmFkZExpbmVUbyhib3R0b21MZWZ0KTsKICAgICBtYXNr
LmFkZExpbmVUbyh0b3BMZWZ0KTsKLSAgICBtYXNrLmFkZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0
b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkp
OworICAgIG1hc2suYWRkTGluZVRvKEdyYXBoaWNzUG9pbnQoMiAqIHRvcExlZnQueCgpIC0gbGVm
dEVuZC54KCksIDIgKiB0b3BMZWZ0LnkoKSAtIGxlZnRFbmQueSgpKSk7CiAgICAgCiAgICAgaW5m
by5jb250ZXh0LT5jbGlwKG1hc2spOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMCArMTA4LDEwIEBA
IHZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICAKICAgICB3aWR0
aCArPSB0b3BTdGFydFNoaWZ0OwogICAgIAotICAgIEZsb2F0UG9pbnQgdG9wU3RhcnQoYWRqdXN0
ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoIC0gdG9wU3RhcnRTaGlmdCwgYWRqdXN0ZWRQ
YWludE9mZnNldC55KCkpOwotICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChhZGp1c3RlZFBhaW50
T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAsIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsgZ1JhZGljYWxCYXNlUGFkKTsKLSAgICBG
bG9hdFBvaW50IHRvcExlZnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoICog
Z1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBnUmFk
aWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOwotICAgIEZsb2F0UG9pbnQgbGVmdEVu
ZChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAsIHRvcExlZnQueSgpICsgZ1JhZGljYWxMZWZ0RW5k
WVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BTdGFy
dChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggLSB0b3BTdGFydFNoaWZ0LCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7CisgICAgR3JhcGhpY3NQb2ludCBib3R0b21MZWZ0KGFk
anVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAqIGdSYWRpY2FsQm90dG9tUG9pbnRY
UG9zICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhIZWlnaHQgKyBnUmFkaWNhbEJhc2VQ
YWQpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IGZyb250V2lkdGggKiBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSArIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7CisgICAgR3Jh
cGhpY3NQb2ludCBsZWZ0RW5kKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICwgdG9wTGVmdC55KCkg
KyBnUmFkaWNhbExlZnRFbmRZU2hpZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKICAgICAKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAg
ICAgCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWlu
dChQYWludAogICAgIAogICAgIFBhdGggcm9vdDsKICAgICAKLSAgICByb290Lm1vdmVUbyhGbG9h
dFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRoICwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsK
KyAgICByb290Lm1vdmVUbyhHcmFwaGljc1BvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRoICwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAgICAvLyBkcmF3IHRvcAogICAgIHJvb3QuYWRkTGlu
ZVRvKHRvcFN0YXJ0KTsKICAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29ybmVyIHRvIGJvdHRv
bSBwb2ludCBvZiByYWRpY2FsCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxT
cXVhcmVSb290OjpwYWludChQYWludAogICAgIG1hc2subW92ZVRvKHRvcFN0YXJ0KTsKICAgICBt
YXNrLmFkZExpbmVUbyhib3R0b21MZWZ0KTsKICAgICBtYXNrLmFkZExpbmVUbyh0b3BMZWZ0KTsK
LSAgICBtYXNrLmFkZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQu
eCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOworICAgIG1hc2suYWRkTGluZVRv
KEdyYXBoaWNzUG9pbnQoMiAqIHRvcExlZnQueCgpIC0gbGVmdEVuZC54KCksIDIgKiB0b3BMZWZ0
LnkoKSAtIGxlZnRFbmQueSgpKSk7CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5jbGlwKG1hc2sp
OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0
eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1Jl
bmRlclN0eWxlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIFNoYWRvd0RhdGE6OmFkanVzdFJl
Y3RGb3JTaGFkb3coSW50CiAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIHNoYWRv
d1RvcCArIHNoYWRvd0JvdHRvbSk7CiB9CiAKLXZvaWQgU2hhZG93RGF0YTo6YWRqdXN0UmVjdEZv
clNoYWRvdyhGbG9hdFJlY3QmIHJlY3QsIGludCBhZGRpdGlvbmFsT3V0bGluZVNpemUpIGNvbnN0
Cit2b2lkIFNoYWRvd0RhdGE6OmFkanVzdFJlY3RGb3JTaGFkb3coR3JhcGhpY3NSZWN0JiByZWN0
LCBpbnQgYWRkaXRpb25hbE91dGxpbmVTaXplKSBjb25zdAogewogICAgIExheW91dFVuaXQgc2hh
ZG93TGVmdCA9IDA7CiAgICAgTGF5b3V0VW5pdCBzaGFkb3dSaWdodCA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXh0KFBhc3NP
d25QdHI8U2hhZG93RGF0YT4gc2hhZG93KSB7IG1fbmV4dCA9IHNoYWRvdzsgfQogCiAgICAgdm9p
ZCBhZGp1c3RSZWN0Rm9yU2hhZG93KEludFJlY3QmLCBpbnQgYWRkaXRpb25hbE91dGxpbmVTaXpl
ID0gMCkgY29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RSZWN0Rm9yU2hhZG93KEZsb2F0UmVjdCYsIGlu
dCBhZGRpdGlvbmFsT3V0bGluZVNpemUgPSAwKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFJlY3RG
b3JTaGFkb3coR3JhcGhpY3NSZWN0JiwgaW50IGFkZGl0aW9uYWxPdXRsaW5lU2l6ZSA9IDApIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIExheW91dFVuaXQgbV94OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRh
aW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIXNl
bGZXaWxsUGFpbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHJlcGFpbnRS
ZWN0ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBHcmFwaGljc1JlY3Qg
cmVwYWludFJlY3QgPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlmICgh
U1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KHJlcGFpbnRS
ZWN0LCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCksIHBhaW50SW5mbykpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTQ4LDI3ICsxNDgsMjcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFkZEZv
Y3VzUmluZ1JlYwogCiB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6dXBkYXRlQ2FjaGVkQm91bmRh
cmllcygpCiB7Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1f
c3Ryb2tlQm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0Jv
eCA9IEZsb2F0UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3Qo
KTsKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CisgICAgbV9yZXBh
aW50Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6
OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRpbmdCb3gs
IG1fc3Ryb2tlQm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKICAgICBTVkdSZW5k
ZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBh
aW50Qm91bmRpbmdCb3gpOwogfQogCi1ib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRl
c3RBY3Rpb24pCitib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0R3JhcGhpY3NQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCiB7CiAgICAgLy8gR2l2ZSBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lciBhIGNoYW5jZSB0
byBhcHBseSBpdHMgdmlld3BvcnQgY2xpcAogICAgIGlmICghcG9pbnRJc0luc2lkZVZpZXdwb3J0
Q2xpcChwb2ludEluUGFyZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRQ
b2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQ
b2ludChwb2ludEluUGFyZW50KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2Nh
bFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwog
CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKHRoaXMsIGxv
Y2FsUG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCiAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAg
ICAgICBpZiAoY2hpbGQtPm5vZGVBdEdyYXBoaWNzUG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2Nh
bFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIHJvdW5kZWRMYXlvdXRQb2ludChsb2NhbFBvaW50KSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDI4ICs1MywyOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
IAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0K
KyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5k
aW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFy
ZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0R3JhcGhpY3NQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIC8vIEFsbG93IFJlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZSBp
biBsYXlvdXQoKQogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpIHsg
cmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBBbGxvdyBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5l
ciB0byBob29rIGluIGF0IHRoZSByaWdodCB0aW1lcyBpbiBsYXlvdXQoKSwgcGFpbnQoKSBhbmQg
bm9kZUF0RmxvYXRQb2ludCgpCisgICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCksIHBhaW50KCkgYW5k
IG5vZGVBdEdyYXBoaWNzUG9pbnQoKQogICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJbmZvJikgeyB9Ci0g
ICAgdmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2lu
dCYgLypwb2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBHcmFwaGljc1BvaW50JiAvKnBvaW50SW5Q
YXJlbnQqLykgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBzZWxmV2lsbFBhaW50KCk7CiAg
ICAgdm9pZCB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCk7CiAKIHByaXZhdGU6CiAgICAgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47Ci0gICAgRmxvYXRSZWN0IG1fb2JqZWN0Qm91bmRp
bmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0
IG1fcmVwYWludEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX29iamVjdEJvdW5kaW5n
Qm94OworICAgIEdyYXBoaWNzUmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OworICAgIEdyYXBoaWNz
UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlIDogMTsKIH07CiAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIHZvaWQgUmVuZGVyU1ZHRm9yZWln
bk9iamVjdDo6bGF5b3V0KCkKICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50
cyA9IHRydWU7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9y
dDsKKyAgICBHcmFwaGljc1JlY3Qgb2xkVmlld3BvcnQgPSBtX3ZpZXdwb3J0OwogCiAgICAgLy8g
Q2FjaGUgdmlld3BvcnQgYm91bmRhcmllcwotICAgIEZsb2F0UG9pbnQgdmlld3BvcnRMb2NhdGlv
bihmb3JlaWduLT54KCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPnkoKS52YWx1ZShmb3JlaWdu
KSk7Ci0gICAgbV92aWV3cG9ydCA9IEZsb2F0UmVjdCh2aWV3cG9ydExvY2F0aW9uLCBGbG9hdFNp
emUoZm9yZWlnbi0+d2lkdGgoKS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+aGVpZ2h0KCkudmFs
dWUoZm9yZWlnbikpKTsKKyAgICBHcmFwaGljc1BvaW50IHZpZXdwb3J0TG9jYXRpb24oZm9yZWln
bi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCkudmFsdWUoZm9yZWlnbikpOworICAg
IG1fdmlld3BvcnQgPSBHcmFwaGljc1JlY3Qodmlld3BvcnRMb2NhdGlvbiwgR3JhcGhpY3NTaXpl
KGZvcmVpZ24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24tPmhlaWdodCgpLnZhbHVl
KGZvcmVpZ24pKSk7CiAgICAgaWYgKCF1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzKQog
ICAgICAgICB1cGRhdGVDYWNoZWRCb3VuZGFyaWVzSW5QYXJlbnRzID0gb2xkVmlld3BvcnQgIT0g
bV92aWV3cG9ydDsKIApAQCAtMTQyLDkgKzE0Miw5IEBAIHZvaWQgUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdDo6bGF5b3V0KCkKICAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiB9CiAK
LWJvb2wgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCitib29sIFJl
bmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50SW5QYXJlbnQpOworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVHJh
bnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgLy8gRWFy
bHkgZXhpdCBpZiBsb2NhbCBwb2ludCBpcyBub3QgY29udGFpbmVkIGluIGNsaXBwZWQgdmlld3Bv
cnQgYXJlYQogICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0Ojppc092ZXJmbG93SGlkZGVuKHRoaXMp
ICYmICFtX3ZpZXdwb3J0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmgJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UG9pbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00NSwxMSArNDUsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlld3BvcnQ7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnQ7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VC
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnQ7IH0KKyAgICB2aXJ0dWFsIEdy
YXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmlld3BvcnQ7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRHcmFwaGlj
c1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb3Jl
aWduT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC02NCw3ICs2NCw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICBib29sIG1fbmVlZHNUcmFuc2Zv
cm1VcGRhdGUgOiAxOwotICAgIEZsb2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVj
dCBtX3ZpZXdwb3J0OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwogICAg
IG11dGFibGUgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3Jh
ZGllbnRTdG9wLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQs
OSBAQCBwdWJsaWM6CiAgICAgLy8gUmVuZGVyT2JqZWN0J3MgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
bnMgQVNTRVJUX05PVF9SRUFDSEVEKCkKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA0MDAKICAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqKSB7IHJldHVybiBJbnRSZWN0KCk7
IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0
KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZp
cnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Qg
eyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRl
bkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjpwYWludChQYWkKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCiB9CiAK
LXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+JikKK3ZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVF1YWRzKFZl
Y3RvcjxHcmFwaGljc1F1YWQ+JikKIHsKICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgdGFr
ZSB1cCBzcGFjZSBvciBwYWludAogfQogCi1ib29sIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6
bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBGbG9hdFBvaW50JiwgSGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyOjpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBIaXRUZXN0QWN0aW9uKQogewogICAgIHJl
dHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgCiAgICAgdmlydHVh
bCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2Jq
ZWN0KikgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhW
ZWN0b3I8R3JhcGhpY3NRdWFkPiYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiB9OwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdl
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIgogI2luY2x1ZGUg
IlJlbmRlckltYWdlUmVzb3VyY2UuaCIKQEAgLTk0LDggKzk0LDggQEAgdm9pZCBSZW5kZXJTVkdJ
bWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihub2RlKCkpOwogCi0gICAgRmxvYXRSZWN0
IG9sZEJvdW5kYXJpZXMgPSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIG1fb2JqZWN0Qm91bmRp
bmdCb3ggPSBGbG9hdFJlY3QoaW1hZ2UtPngoKS52YWx1ZShpbWFnZSksIGltYWdlLT55KCkudmFs
dWUoaW1hZ2UpLCBpbWFnZS0+d2lkdGgoKS52YWx1ZShpbWFnZSksIGltYWdlLT5oZWlnaHQoKS52
YWx1ZShpbWFnZSkpOworICAgIEdyYXBoaWNzUmVjdCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RC
b3VuZGluZ0JveDsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KGltYWdl
LT54KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+eSgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPndpZHRo
KCkudmFsdWUoaW1hZ2UpLCBpbWFnZS0+aGVpZ2h0KCkudmFsdWUoaW1hZ2UpKTsKICAgICBpZiAo
bV9vYmplY3RCb3VuZGluZ0JveCAhPSBvbGRCb3VuZGFyaWVzKSB7CiAgICAgICAgIG1fdXBkYXRl
Q2FjaGVkUmVwYWludFJlY3QgPSB0cnVlOwogICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsK
QEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8m
IHBhCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCAhbV9pbWFnZVJlc291cmNlLT5oYXNJbWFn
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0Jv
eCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFTVkdSZW5kZXJT
dXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9j
YWxUcmFuc2Zvcm0sIHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIzLDggKzEy
Myw4IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKIAogICAgICAg
ICAgICAgaWYgKFNWR1JlbmRlclN1cHBvcnQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQodGhp
cywgY2hpbGRQYWludEluZm8pKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QgPSBtX29iamVjdEJvdW5kaW5nQm94OwotICAgICAgICAgICAgICAgIEZsb2F0UmVj
dCBzcmNSZWN0KDAsIDAsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzUmVjdCBkZXN0UmVjdCA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3QoMCwgMCwgaW1hZ2UtPndpZHRoKCks
IGltYWdlLT5oZWlnaHQoKSk7CiAKICAgICAgICAgICAgICAgICBTVkdJbWFnZUVsZW1lbnQqIGlt
YWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLmFsaWdu
KCkgIT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9O
RSkKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludElu
Zm8mIHBhCiAgICAgfQogfQogCi1ib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRGbG9hdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKK2Jvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAg
IC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10
ZXN0IHRoZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCkBA
IC0xNTAsNyArMTUwLDcgQEAgYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0RmxvYXRQb2ludChj
bwogICAgIFBvaW50ZXJFdmVudHNIaXRSdWxlcyBoaXRSdWxlcyhQb2ludGVyRXZlbnRzSGl0UnVs
ZXM6OlNWR19JTUFHRV9ISVRURVNUSU5HLCByZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRz
KCkpOwogICAgIGJvb2wgaXNWaXNpYmxlID0gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFKTsKICAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewot
ICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCku
aW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgICAgICBHcmFwaGljc1BvaW50
IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50SW5QYXJlbnQpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmICghU1ZHUmVuZGVyU3Vw
cG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5o
IgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKQEAgLTUzLDkgKzUzLDkgQEAgcHJpdmF0
ZToKIAogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJv
dW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJl
Y3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFp
bnRCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RC
b3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogCkBAIC02NCwxNSArNjQsMTUgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZp
cnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbFRyYW5zZm9ybTsgfQogCiAgICAgYm9vbCBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0IDog
MTsKICAgICBib29sIG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwogICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2xvY2FsVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94
OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3Qg
bV9vYmplY3RCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50Qm91bmRpbmdC
b3g7CiAgICAgT3duUHRyPFJlbmRlckltYWdlUmVzb3VyY2U+IG1faW1hZ2VSZXNvdXJjZTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyOCArNDMsMjggQEAg
SW5saW5lRmxvd0JveCogUmVuZGVyU1ZHSW5saW5lOjpjcmVhdGVJbgogICAgIHJldHVybiBib3g7
CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6Om9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdJbmxpbmU6Om9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3QKIHsKICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0
Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhpcykpCiAgICAgICAgIHJldHVybiBvYmpl
Y3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAg
cmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHSW5saW5lOjpz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHSW5saW5lOjpz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMp
KQogICAgICAgICByZXR1cm4gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgpOwogCi0gICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAotRmxvYXRS
ZWN0IFJlbmRlclNWR0lubGluZTo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25z
dAorR3JhcGhpY3NSZWN0IFJlbmRlclNWR0lubGluZTo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSBjb25zdAogewogICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCA9IFJl
bmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcih0aGlzKSkKICAgICAgICAg
cmV0dXJuIG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKIAotICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIEludFJl
Y3QgUmVuZGVyU1ZHSW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKQEAgLTgyLDE1ICs4MiwxNSBAQCB2b2lk
IFJlbmRlclNWR0lubGluZTo6bWFwTG9jYWxUb0NvbnRhaW5lCiAgICAgU1ZHUmVuZGVyU3VwcG9y
dDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29udGFpbmVyLCB1c2VUcmFuc2Zv
cm1zLCBmaXhlZCwgdHJhbnNmb3JtU3RhdGUpOwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZTo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRlclNWR0lu
bGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAg
UmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0
QW5jZXN0b3IodGhpcyk7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdCb3ggPSBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94KCk7
CisgICAgR3JhcGhpY3NSZWN0IHRleHRCb3VuZGluZ0JveCA9IG9iamVjdC0+c3Ryb2tlQm91bmRp
bmdCb3goKTsKICAgICBmb3IgKElubGluZUZsb3dCb3gqIGJveCA9IGZpcnN0TGluZUJveCgpOyBi
b3g7IGJveCA9IGJveC0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHRleHRCb3VuZGluZ0JveC54KCkgKyBib3gtPngoKSwg
dGV4dEJvdW5kaW5nQm94LnkoKSArIGJveC0+eSgpLCBib3gtPmxvZ2ljYWxXaWR0aCgpLCBib3gt
PmxvZ2ljYWxIZWlnaHQoKSkpKTsKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0
ZVF1YWQoR3JhcGhpY3NSZWN0KHRleHRCb3VuZGluZ0JveC54KCkgKyBib3gtPngoKSwgdGV4dEJv
dW5kaW5nQm94LnkoKSArIGJveC0+eSgpLCBib3gtPmxvZ2ljYWxXaWR0aCgpLCBib3gtPmxvZ2lj
YWxIZWlnaHQoKSkpKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdJbmxpbmU6OndpbGxCZURlc3Ryb3ll
ZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTQgKzQxLDE0IEBAIHB1Ymxp
YzoKICAgICAvLyBXZSBzZWFyY2ggZm9yIHRoZSByb290IHRleHQgZWxlbWVudCBhbmQgdGFrZSBp
dHMgYm91bmRpbmcgYm94LgogICAgIC8vIEl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIHRha2UgdGhl
IHN0cm9rZSBhbmQgcmVwYWludCByZWN0IG9mCiAgICAgLy8gdGhpcyBlbGVtZW50LCBzaW5jZSB3
ZSBuZWVkIGl0IGZvciBmaWx0ZXJzLgotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5k
aW5nQm94KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0
dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0
ZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVh
ZD4mKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIElubGluZUZsb3dCb3gqIGNyZWF0ZUlubGlu
ZUZsb3dCb3goKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1RleHQuaCIKQEAgLTE4MCw3ICsxODAsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVy
U1ZHSW5saW5lVGV4dDo6cG9zCiAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7CiAKICAgICAv
LyBNYXAgbG9jYWwgcG9pbnQgdG8gYWJzb2x1dGUgcG9pbnQsIGFzIHRoZSBjaGFyYWN0ZXIgb3Jp
Z2lucyBzdG9yZWQgaW4gdGhlIHRleHQgZnJhZ21lbnRzIHVzZSBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQocG9pbnQpOworICAgIEdyYXBoaWNzUG9p
bnQgYWJzb2x1dGVQb2ludChwb2ludCk7CiAgICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoY29udGFp
bmluZ0Jsb2NrLT5sb2NhdGlvbigpKTsKIAogICAgIGZsb2F0IGNsb3Nlc3REaXN0YW5jZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKQEAgLTE5OSw3ICsxOTksNyBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyU1ZHSW5saW5lVGV4dDo6cG9zCiAgICAgICAgIHVuc2lnbmVkIHRl
eHRGcmFnbWVudHNTaXplID0gZnJhZ21lbnRzLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgZnJhZ21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGlu
ZSwgZnJhZ21lbnQud2lkdGgsIGZyYWdtZW50LmhlaWdodCk7CisgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgZnJhZ21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJh
Z21lbnQud2lkdGgsIGZyYWdtZW50LmhlaWdodCk7CiAgICAgICAgICAgICBmcmFnbWVudC5idWls
ZEZyYWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAgICAgICAgIGlmICgh
ZnJhZ21lbnRUcmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAgICAgIGZyYWdtZW50
UmVjdCA9IGZyYWdtZW50VHJhbnNmb3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5o
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6
CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCBvYmplY3RCb3VuZGluZ0JveCBmb3IgRFJUIHJlc3Vs
dHMgYW5kIGZpbHRlcnMgYXQgdGhlIG1vbWVudC4KICAgICAvLyBUaGlzIHNob3VsZCBiZSBmaXhl
ZCB0byBnaXZlIGJhY2sgdGhlIG9iamVjdEJvdW5kaW5nQm94IG9mIHRoZSB0ZXh0IHJvb3QuCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBG
bG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94
KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdJbmxpbmVUZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSW50UmVj
dCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6b3V0bGluZUJvdQogICAgIEludFJlY3QgYm94ID0gZW5j
bG9zaW5nSW50UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBhZGp1
c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhib3gpOwogCi0gICAgRmxvYXRRdWFkIGNvbnRhaW5l
clJlbGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChib3gpLCByZXBh
aW50Q29udGFpbmVyKTsKKyAgICBHcmFwaGljc1F1YWQgY29udGFpbmVyUmVsYXRpdmVRdWFkID0g
bG9jYWxUb0NvbnRhaW5lclF1YWQoR3JhcGhpY3NSZWN0KGJveCksIHJlcGFpbnRDb250YWluZXIp
OwogICAgIHJldHVybiBjb250YWluZXJSZWxhdGl2ZVF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKIH0KIApAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNv
bHV0ZVJlY3RzCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZH
TW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9p
ZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFk
PiYgcXVhZHMpCiB7CiAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tl
Qm91bmRpbmdCb3goKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBvdXRs
aW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgSW50UG9pbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7
Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpOwogCiAg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNm
b3JtU3RhdGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRl
ICJSZW5kZXJTVkdQYXRoLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCkBAIC03OCw3
ICs3OCw3IEBAIFJlbmRlclNWR1BhdGg6On5SZW5kZXJTVkdQYXRoKCkKIHsKIH0KIAotYm9vbCBS
ZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wg
cmVxdWlyZXNGaWxsLCBXaW5kUnVsZSBmaWxsUnVsZSkKK2Jvb2wgUmVuZGVyU1ZHUGF0aDo6Zmls
bENvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwg
V2luZFJ1bGUgZmlsbFJ1bGUpCiB7CiAgICAgaWYgKCFtX2ZpbGxCb3VuZGluZ0JveC5jb250YWlu
cyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBS
ZW5kZXJTVkdQYXRoOjpmaWxsQ29udGFpbnMoY29uc3QgRgogICAgIHJldHVybiBtX3BhdGguY29u
dGFpbnMocG9pbnQsIGZpbGxSdWxlKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdQYXRoOjpzdHJva2VD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgYm9vbCByZXF1aXJlc1N0cm9rZSkKK2Jv
b2wgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCiB7CiAgICAgaWYgKCFtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjAy
LDcgKzIwMiw3IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAg
ICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IG1fcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCk7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0lu
dGVyc2VjdHNSZXBhaW50UmVjdChib3VuZGluZ0JveCwgbV9sb2NhbFRyYW5zZm9ybSwgcGFpbnRJ
bmZvKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDMsMTMgKzI0MywxMyBAQCB2b2lkIFJlbmRl
clNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlCiAgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0
KTsKIH0KIAotYm9vbCBSZW5kZXJTVkdQYXRoOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jvb2wgUmVu
ZGVyU1ZHUGF0aDo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludElu
UGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgLy8gV2Ugb25seSBk
cmF3IGluIHRoZSBmb3Jncm91bmQgcGhhc2UsIHNvIHdlIG9ubHkgaGl0LXRlc3QgdGhlbi4KICAg
ICBpZiAoaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5p
bnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisgICAgR3JhcGhpY3NQb2ludCBsb2Nh
bFBvaW50ID0gbV9sb2NhbFRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVu
dCk7CiAKICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhp
cywgbG9jYWxQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI3MCwyOSArMjcwLDI5
IEBAIGJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2ludChjb24KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVNYXJrZXJCb3Vu
ZHNJZk5lZWRlZCgpCitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlTWFya2Vy
Qm91bmRzSWZOZWVkZWQoKQogewogICAgIFNWR0VsZW1lbnQqIHN2Z0VsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4obm9kZSgpKTsKICAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdF
bGVtZW50LT5kb2N1bWVudCgpKTsKICAgICBpZiAoIXN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogCiAgICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KTsKICAgICBpZiAoIXN0eWxlZEVsZW1lbnQtPnN1
cHBvcnRzTWFya2VycygpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJl
dHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHls
ZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7CiAgICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNNYXJrZXJz
KCkpOwogCiAgICAgU1ZHUmVzb3VyY2VzKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6
Y2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyT2JqZWN0KHRoaXMpOwogICAgIGlmICghcmVzb3VyY2Vz
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsKIAogICAgIFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJrZXJTdGFydCA9IHJlc291
cmNlcy0+bWFya2VyU3RhcnQoKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
TWlkID0gcmVzb3VyY2VzLT5tYXJrZXJNaWQoKTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbWFya2VyRW5kID0gcmVzb3VyY2VzLT5tYXJrZXJFbmQoKTsKICAgICBpZiAoIW1hcmtlclN0
YXJ0ICYmICFtYXJrZXJNaWQgJiYgIW1hcmtlckVuZCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICByZXR1cm4gbV9tYXJr
ZXJMYXlvdXRJbmZvLmNhbGN1bGF0ZUJvdW5kYXJpZXMobWFya2VyU3RhcnQsIG1hcmtlck1pZCwg
bWFya2VyRW5kLCBzdmdTdHlsZS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShzdmdFbGVtZW50KSwgbV9w
YXRoKTsKIH0KQEAgLTMwMCw5ICszMDAsOSBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2Fs
Y3VsYXRlTWFya2VyCiB2b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMo
KQogewogICAgIGlmIChtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZmlsbEJvdW5kaW5n
Qm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gg
PSBGbG9hdFJlY3QoKTsKLSAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3Qo
KTsKKyAgICAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICAgICAg
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgpOworICAgICAgICBt
X3JlcGFpbnRCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRhdGVDYWNo
ZWRCb3VuZGFyaQogICAgIH0KIAogICAgIGlmIChzdmdTdHlsZS0+aGFzTWFya2VycygpKSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCBtYXJrZXJCb3VuZHMgPSBjYWxjdWxhdGVNYXJrZXJCb3VuZHNJZk5l
ZWRlZCgpOworICAgICAgICBHcmFwaGljc1JlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFy
a2VyQm91bmRzSWZOZWVkZWQoKTsKICAgICAgICAgaWYgKCFtYXJrZXJCb3VuZHMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveC51bml0ZShtYXJrZXJC
b3VuZHMpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTMgQEAK
IAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHTW9kZWxPYmplY3QuaCIKICNpbmNsdWRlICJTVkdNYXJrZXJMYXlvdXRJbmZvLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNz
UG9pbnQ7CiBjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CiBjbGFzcyBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDsKIApAQCAtNDgsMTIgKzQ4LDEyIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGVyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJv
a2UKLSAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJl
c0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJVTEVfTk9OWkVSTyk7Ci0gICAgYm9v
bCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9
IHRydWUpOworICAgIGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29s
IHJlcXVpcmVzRmlsbCA9IHRydWUsIFdpbmRSdWxlIGZpbGxSdWxlID0gUlVMRV9OT05aRVJPKTsK
KyAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIHJlcXVp
cmVzU3Ryb2tlID0gdHJ1ZSk7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBG
bG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1h
cmtlckJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VC
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7
IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CiAgICAgdmlydHVhbCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjMsOSArNjMsOSBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZp
cnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBM
YXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJ
blBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNz
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICBHcmFwaGljc1JlY3QgY2FsY3Vs
YXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJp
ZXMoKTsKIAogcHJpdmF0ZToKQEAgLTc3LDkgKzc3LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
bmVlZHNUcmFuc2Zvcm1VcGRhdGUgOiAxOwogCiAgICAgbXV0YWJsZSBQYXRoIG1fcGF0aDsKLSAg
ICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fc3Ryb2tlQW5k
TWFya2VyQm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94Owor
ICAgIEdyYXBoaWNzUmVjdCBtX2ZpbGxCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9z
dHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50Qm91
bmRpbmdCb3g7CiAgICAgU1ZHTWFya2VyTGF5b3V0SW5mbyBtX21hcmtlckxheW91dEluZm87CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zvcm07CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgZW51bSBSZW5kZXJTVkdSZXNvdXJj
ZU1vZGUgewogfTsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFw
aGljc1JlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBQYXRoOwogY2xhc3MgUmVu
ZGVyT2JqZWN0OwpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
YXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4
dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0LCBjb25zdCBQYXRoKikgeyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CisgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSA9IDA7CiAKICAgICB2aXJ0dWFs
IFJlbmRlclNWR1Jlc291cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCA9IDA7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAg
LTcwLDcgKzcwLDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlbW92ZUFsbAog
ICAgIGlmIChtX2ludmFsaWRhdGlvbkJsb2NrZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
Y2xpcEJvdW5kYXJpZXMgPSBGbG9hdFJlY3QoKTsKKyAgICBtX2NsaXBCb3VuZGFyaWVzID0gR3Jh
cGhpY3NSZWN0KCk7CiAgICAgaWYgKCFtX2NsaXBwZXIuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX2NsaXBwZXIpOwogICAgICAgICBtX2NsaXBwZXIuY2xlYXIoKTsKQEAg
LTEwNCw3ICsxMDQsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlSZXNv
CiAgICAgcmV0dXJuIGFwcGx5Q2xpcHBpbmdUb0NvbnRleHQob2JqZWN0LCBvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCksIG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSwg
Y29udGV4dCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNs
aXBwaW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RC
b3VuZGluZ0JveCkKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpwYXRoT25seUNsaXBw
aW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBvYmplY3RC
b3VuZGluZ0JveCkKIHsKICAgICAvLyBJZiB0aGUgY3VycmVudCBjbGlwLXBhdGggZ2V0cyBjbGlw
cGVkIGl0c2VsZiwgd2UgaGF2ZSB0byBmYWxsYmFjayB0byBtYXNraW5nLgogICAgIGlmICghc3R5
bGUoKS0+c3ZnU3R5bGUoKS0+Y2xpcHBlclJlc291cmNlKCkuaXNFbXB0eSgpKQpAQCAtMTUwLDEz
ICsxNTAsMTMgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnBhdGhPbmx5QwogICAg
IH0KICAgICAvLyBUaGUgU1ZHIHNwZWNpZmljYXRpb24gd2FudHMgdXMgdG8gY2xpcCBldmVyeXRo
aW5nLCBpZiBjbGlwLXBhdGggZG9lc24ndCBoYXZlIGEgY2hpbGQuCiAgICAgaWYgKGNsaXBQYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgY2xpcFBhdGguYWRkUmVjdChGbG9hdFJlY3QoKSk7CisgICAg
ICAgIGNsaXBQYXRoLmFkZFJlY3QoR3JhcGhpY3NSZWN0KCkpOwogICAgIGNvbnRleHQtPmNsaXBQ
YXRoKGNsaXBQYXRoLCBjbGlwUnVsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRS
ZWN0JiByZXBhaW50UmVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGlj
c1JlY3QmIHJlcGFpbnRSZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgaWYg
KCFtX2NsaXBwZXIuY29udGFpbnMob2JqZWN0KSkKICAgICAgICAgbV9jbGlwcGVyLnNldChvYmpl
Y3QsIG5ldyBDbGlwcGVyRGF0YSk7CkBAIC0xNzIsOCArMTcyLDggQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRy
YW5zZm9ybTsKICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlv
blRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJhbnNmb3Jt
KTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9y
bS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFy
Z2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RG
b3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0
IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QocmVwYWludFJl
Y3QpOworICAgIEdyYXBoaWNzUmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKG9iamVj
dCwgYWJzb2x1dGVUYXJnZXRSZWN0KTsKIAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwRGF0YSAm
JiAhY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFT
VkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihhYnNvbHV0ZVRhcmdldFJlY3Qs
IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlLCBD
b2xvclNwYWNlRGV2aWNlUkdCKSkKQEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRh
dGEqIGNsaXBwZXJEYXRhLCBjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KQorYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlw
cGVyRGF0YSogY2xpcHBlckRhdGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gpCiB7CiAgICAgQVNTRVJUKGNsaXBwZXJEYXRhKTsKICAgICBBU1NFUlQoY2xpcHBlckRhdGEt
PmNsaXBNYXNrSW1hZ2UpOwpAQCAtMjkzLDkgKzI5Myw5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyOjpjYWxjdWxhdGUKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyOjpoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGlu
Z0JveCwgY29uc3QgRmxvYXRQb2ludCYgbm9kZUF0UG9pbnQpCitib29sIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0
Qm91bmRpbmdCb3gsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5vZGVBdFBvaW50KQogewotICAgIEZs
b2F0UG9pbnQgcG9pbnQgPSBub2RlQXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50ID0g
bm9kZUF0UG9pbnQ7CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xpcHBpbmdB
cmVhKHRoaXMsIHBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMTQsMTQgKzMx
NCwxNCBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgSW50UG9pbnQgaGl0UG9pbnQ7CiAgICAgICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0KGhpdFBvaW50KTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5ub2RlQXRG
bG9hdFBvaW50KEhpdFRlc3RSZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpTVkdDbGlwQ29udGVudCks
IHJlc3VsdCwgcG9pbnQsIEhpdFRlc3RGb3JlZ3JvdW5kKSkKKyAgICAgICAgaWYgKHJlbmRlcmVy
LT5ub2RlQXRHcmFwaGljc1BvaW50KEhpdFRlc3RSZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpTVkdD
bGlwQ29udGVudCksIHJlc3VsdCwgcG9pbnQsIEhpdFRlc3RGb3JlZ3JvdW5kKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRmxvYXRS
ZWN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJP
YmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJl
c291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgLy8gUmVzb3Vy
Y2Ugd2FzIG5vdCBsYXlvdXRlZCB5ZXQuIEdpdmUgYmFjayB0aGUgYm91bmRpbmdCb3ggb2YgdGhl
IG9iamVjdC4KICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkpCkBAIC0zMzEsNyArMzMxLDcgQEAg
RmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6cmVzbwogICAgICAgICBjYWxjdWxh
dGVDbGlwQ29udGVudFJlcGFpbnRSZWN0KCk7CiAKICAgICBpZiAoc3RhdGljX2Nhc3Q8U1ZHQ2xp
cFBhdGhFbGVtZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAgICAgICBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgICAgIEdy
YXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3go
KTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKICAgICAgICAgdHJhbnNmb3Jt
LnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7
CiAgICAgICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lk
dGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZp
bmUgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRT
aXplLmgiCkBAIC01MiwxMSArNTIsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9u
ID0gdHJ1ZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3Qq
LCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJj
ZU1vZGUpOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVy
T2JqZWN0Kik7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChS
ZW5kZXJPYmplY3QqKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291
cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENsaXBwZXJSZXNvdXJjZVR5cGU7IH0KICAgICAKLSAg
ICBib29sIGhpdFRlc3RDbGlwQ29udGVudChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBv
aW50Jik7CisgICAgYm9vbCBoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgR3JhcGhpY3NSZWN0Jiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBj
bGlwUGF0aFVuaXRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVt
ZW50Kj4obm9kZSgpKS0+Y2xpcFBhdGhVbml0cygpOyB9CiAKQEAgLTY0LDEzICs2NCwxMyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIC8vIGNsaXBQYXRoIGNhbiBiZSBjbGlwcGVkIHRvbywgYnV0
IGRvbid0IGhhdmUgYSBib3VuZGluZ0JveCBvciByZXBhaW50UmVjdC4gU28gd2UgY2FuJ3QgY2Fs
bAogICAgIC8vIGFwcGx5UmVzb3VyY2UgZGlyZWN0bHkgYW5kIHVzZSB0aGUgcmVjdHMgZnJvbSB0
aGUgb2JqZWN0LCBzaW5jZSB0aGV5IGFyZSBlbXB0eSBmb3IgUmVuZGVyU1ZHUmVzb3VyY2VzCi0g
ICAgYm9vbCBhcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dCopOwotICAgIGJvb2wgcGF0
aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBi
b29sIGRyYXdDb250ZW50SW50b01hc2tJbWFnZShDbGlwcGVyRGF0YSosIGNvbnN0IEZsb2F0UmVj
dCYgb2JqZWN0Qm91bmRpbmdCb3gpOworICAgIGJvb2wgYXBwbHlDbGlwcGluZ1RvQ29udGV4dChS
ZW5kZXJPYmplY3QqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBH
cmFwaGljc0NvbnRleHQqKTsKKyAgICBib29sIHBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgYm9vbCBkcmF3Q29udGVudEludG9NYXNr
SW1hZ2UoQ2xpcHBlckRhdGEqLCBjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94
KTsKICAgICB2b2lkIGNhbGN1bGF0ZUNsaXBDb250ZW50UmVwYWludFJlY3QoKTsKIAogICAgIGJv
b2wgbV9pbnZhbGlkYXRpb25CbG9ja2VkOwotICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZGFyaWVz
OworICAgIEdyYXBoaWNzUmVjdCBtX2NsaXBCb3VuZGFyaWVzOwogICAgIEhhc2hNYXA8UmVuZGVy
T2JqZWN0KiwgQ2xpcHBlckRhdGEqPiBtX2NsaXBwZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBA
QAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCkBAIC0xMjEsNyArMTIxLDcgQEAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBSZW5kZXJTVkdSZQogICAgIHJldHVybiBidWlsZGVyLnJlbGVhc2UoKTsKIH0KIAotYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6Zml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCitib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSwg
R3JhcGhpY3NTaXplJiBzY2FsZSkKIHsKICAgICBib29sIG1hdGNoZXNGaWx0ZXJTaXplID0gdHJ1
ZTsKICAgICBpZiAoc2l6ZS53aWR0aCgpID4ga01heEZpbHRlclNpemUpIHsKQEAgLTE1Nyw3ICsx
NTcsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgfQog
CiAgICAgT3duUHRyPEZpbHRlckRhdGE+IGZpbHRlckRhdGEoYWRvcHRQdHIobmV3IEZpbHRlckRh
dGEpKTsKLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJv
dW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gb2JqZWN0
LT5vYmplY3RCb3VuZGluZ0JveCgpOwogCiAgICAgU1ZHRmlsdGVyRWxlbWVudCogZmlsdGVyRWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpOwogICAgIGZpbHRl
ckRhdGEtPmJvdW5kYXJpZXMgPSBmaWx0ZXJFbGVtZW50LT5maWx0ZXJCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7CkBAIC0xNzQsMTAgKzE3NCwxMCBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAs
IDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5lKCksIGFi
c29sdXRlVHJhbnNmb3JtLmYoKSk7CiAKICAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgYm91bmRh
cmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24uCi0gICAgRmxvYXRSZWN0
IGFic29sdXRlRmlsdGVyQm91bmRhcmllcyA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0
IGRyYXdpbmdSZWdpb24gPSBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhp
Y3NSZWN0IGFic29sdXRlRmlsdGVyQm91bmRhcmllcyA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7CisgICAgR3Jh
cGhpY3NSZWN0IGRyYXdpbmdSZWdpb24gPSBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94KCk7CiAg
ICAgZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZHJhd2luZ1JlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0
IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJh
bnNmb3JtLm1hcFJlY3QoZHJhd2luZ1JlZ2lvbik7CiAKICAgICAvLyBDcmVhdGUgdGhlIFNWR0Zp
bHRlciBvYmplY3QuCiAgICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJF
bGVtZW50LT5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWDsKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3Rv
ciBmb3IgdGhlIHVzZSBvZiBmaWx0ZXJSZXMuCiAgICAgLy8gQWxzbyBzZWUgaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNGaWx0ZXJFZmZlY3RzUmVnaW9uCi0gICAgRmxvYXRT
aXplIHNjYWxlKDEsIDEpOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZSgxLCAxKTsKICAgICBpZiAo
ZmlsdGVyRWxlbWVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpmaWx0ZXJSZXNBdHRyKSkgewog
ICAgICAgICBzY2FsZS5zZXRXaWR0aChmaWx0ZXJFbGVtZW50LT5maWx0ZXJSZXNYKCkgLyBhYnNv
bHV0ZUZpbHRlckJvdW5kYXJpZXMud2lkdGgoKSk7CiAgICAgICAgIHNjYWxlLnNldEhlaWdodChm
aWx0ZXJFbGVtZW50LT5maWx0ZXJSZXNZKCkgLyBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMuaGVp
Z2h0KCkpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmFwcGx5UmVzb3UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRGV0ZXJtaW5lIHNj
YWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZm
ZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJl
Y3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247CisgICAgR3JhcGhpY3NS
ZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOwogICAgIHRlbXBTb3Vy
Y2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBmaXRzSW5N
YXhpbXVtSW1hZ2VTaXplKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwogCkBAIC0yMTIs
NyArMjEyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGxhc3RFZmZlY3QpOwotICAgIEZs
b2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CisgICAgR3Jh
cGhpY3NSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKICAgICAv
LyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAg
ICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMu
CiAgICAgaWYgKCFmaXRzSW5NYXhpbXVtSW1hZ2VTaXplKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxl
KSkgewpAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3UKICAgICAgICAgc291cmNlR3JhcGhpY0NvbnRleHQtPnNjYWxlKHNjYWxlKTsKIAog
ICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS0+c2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0pOwotICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5jbGVhclJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSkpOwor
ICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5jbGVhclJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNz
UG9pbnQoKSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSkpOwogICAgIGZpbHRlckRhdGEt
PnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBzb3VyY2VHcmFwaGljLnJlbGVhc2UoKTsKICAgICBmaWx0
ZXJEYXRhLT5zYXZlZENvbnRleHQgPSBjb250ZXh0OwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UgogICAgICAgICBpZiAocmVzdWx0
SW1hZ2UpIHsKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkpOwogCi0gICAgICAgICAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5o
ZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKDEgLyBm
aWx0ZXJEYXRhLT5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVy
RGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmNsaXAobGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihyZXN1bHRJbWFnZSwgb2JqZWN0LT5zdHlsZSgpLT5j
b2xvclNwYWNlKCksIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkp
OwpAQCAtMzI3LDEyICszMjcsMTIgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9z
dEFwcGx5UgogICAgIGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIuY2xlYXIoKTsKIH0K
IAotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94
KFJlbmRlck9iamVjdCogb2JqZWN0KQorR3JhcGhpY3NSZWN0IFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIGlm
IChTVkdGaWx0ZXJFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVu
dCo+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybiBlbGVtZW50LT5maWx0ZXJCb3VuZGluZ0JveChv
YmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCkpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJfaAogCiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKEZJTFRFUlMp
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgpAQCAtNTIsOCArNTIsOCBAQCBzdHJ1Y3QgRmls
dGVyRGF0YSB7CiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwog
ICAgIEdyYXBoaWNzQ29udGV4dCogc2F2ZWRDb250ZXh0OwogICAgIEFmZmluZVRyYW5zZm9ybSBz
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKLSAg
ICBGbG9hdFNpemUgc2NhbGU7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kYXJpZXM7CisgICAgR3Jh
cGhpY3NTaXplIHNjYWxlOwogICAgIGJvb2wgYnVpbGRlZCA6IDE7CiAgICAgYm9vbCBtYXJrZWRG
b3JSZW1vdmFsIDogMTsKIH07CkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNz
Q29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9p
ZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5z
aWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7CiAKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKICAgICBQ
YXNzUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkUHJpbWl0aXZlcyhGaWx0ZXIqKTsKIApA
QCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlw
ZSBzX3Jlc291cmNlVHlwZTsKIAogcHJpdmF0ZToKLSAgICBib29sIGZpdHNJbk1heGltdW1JbWFn
ZVNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJik7CisgICAgYm9vbCBmaXRzSW5NYXhp
bXVtSW1hZ2VTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYsIEdyYXBoaWNzU2l6ZSYpOwogCiAgICAg
SGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGaWx0ZXJEYXRhKj4gbV9maWx0ZXI7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2MiwxMSBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlOjpzCiAgICAgfQogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZTo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVm
ZmVjdCogZWZmZWN0KQogewotICAgIEZsb2F0UmVjdCB1bml0ZVJlY3Q7Ci0gICAgRmxvYXRSZWN0
IHN1YnJlZ2lvbkJvdW5kaW5nQm94ID0gZWZmZWN0LT5lZmZlY3RCb3VuZGFyaWVzKCk7Ci0gICAg
RmxvYXRSZWN0IHN1YnJlZ2lvbiA9IHN1YnJlZ2lvbkJvdW5kaW5nQm94OworICAgIEdyYXBoaWNz
UmVjdCB1bml0ZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHN1YnJlZ2lvbkJvdW5kaW5nQm94ID0g
ZWZmZWN0LT5lZmZlY3RCb3VuZGFyaWVzKCk7CisgICAgR3JhcGhpY3NSZWN0IHN1YnJlZ2lvbiA9
IHN1YnJlZ2lvbkJvdW5kaW5nQm94OwogICAgIFNWR0ZpbHRlciogZmlsdGVyID0gc3RhdGljX2Nh
c3Q8U1ZHRmlsdGVyKj4oZWZmZWN0LT5maWx0ZXIoKSk7CiAgICAgQVNTRVJUKGZpbHRlcik7CiAK
QEAgLTg1LDcgKzg1LDcgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aQogICAgIGlmIChmaWx0ZXItPmVmZmVjdEJvdW5kaW5nQm94TW9kZSgpKSB7CiAgICAgICAgIHN1
YnJlZ2lvbiA9IHVuaXRlUmVjdDsKICAgICAgICAgLy8gQXZvaWQgdGhlIGNhbGxpbmcgb2YgYSB2
aXJ0dWFsIG1ldGhvZCBzZXZlcmFsIHRpbWVzLgotICAgICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91
bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5kaW5nQm94KCk7CisgICAgICAgIEdyYXBoaWNz
UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci0+dGFyZ2V0Qm91bmRpbmdCb3goKTsKIAog
ICAgICAgICBpZiAoZWZmZWN0LT5oYXNYKCkpCiAgICAgICAgICAgICBzdWJyZWdpb24uc2V0WCh0
YXJnZXRCb3VuZGluZ0JveC54KCkgKyBzdWJyZWdpb25Cb3VuZGluZ0JveC54KCkgKiB0YXJnZXRC
b3VuZGluZ0JveC53aWR0aCgpKTsKQEAgLTExNCw4ICsxMTQsOCBAQCBGbG9hdFJlY3QgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpCiAKICAgICBlZmZlY3QtPnNldEZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlU3VicmVnaW9u
ID0gZmlsdGVyLT5tYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChzdWJyZWdpb24pOwotICAgIEZs
b2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uID0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCk7Cisg
ICAgR3JhcGhpY3NSZWN0IGFic29sdXRlU3VicmVnaW9uID0gZmlsdGVyLT5tYXBMb2NhbFJlY3RU
b0Fic29sdXRlUmVjdChzdWJyZWdpb24pOworICAgIEdyYXBoaWNzU2l6ZSBmaWx0ZXJSZXNvbHV0
aW9uID0gZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24u
c2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgpLCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgp
KTsKIAogICAgIC8vIEZFSW1hZ2UgbmVlZHMgdGhlIHVuY2xpcHBlZCBzdWJyZWdpb24gaW4gYWJz
b2x1dGUgY29vcmRpbmF0ZXMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0CkBAIC0xMjQsNyArMTI0
LDcgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aQogICAgICAgICBz
dGF0aWNfY2FzdDxGRUltYWdlKj4oZWZmZWN0KS0+c2V0QWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1
dGVTdWJyZWdpb24pOwogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBm
aWx0ZXIgcmVnaW9uLgotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9
IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlU2NhbGVk
RmlsdGVyUmVnaW9uID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsKICAgICBhYnNvbHV0ZVNjYWxl
ZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uLndpZHRoKCksIGZpbHRlclJlc29s
dXRpb24uaGVpZ2h0KCkpOwogICAgIGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0
ZVNjYWxlZEZpbHRlclJlZ2lvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZl
LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIFRoZXkgZGVwZW5kIG9uIHRo
ZSBSZW5kZXJPYmplY3QgYXJndW1lbnQgb2YgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5
UmVzb3VyY2UuCi0gICAgc3RhdGljIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oRmlsdGVyRWZmZWN0Kik7CisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0Kik7CiAKICAgICBpbmxpbmUg
dm9pZCBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsOCArODUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
Y3JlYXRlTWFza0FuZFN3YXBDb250CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNm
b3JtOwogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9P
dXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290QmxvY2ssIGFic29sdXRlVHJhbnNm
b3JtKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCkpOwotICAgIEZsb2F0UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VC
dWZmZXJUb29sczo6Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290
QmxvY2ssIGFic29sdXRlVGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGFy
Z2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGV4dFJvb3RCbG9jay0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0KTsKICAg
ICBpZiAoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVN
YXNrQW5kU3dhcENvbnQKIAogc3RhdGljIGlubGluZSBBZmZpbmVUcmFuc2Zvcm0gY2xpcFRvVGV4
dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
cmFwaGljc1JlY3QmIHRhcmdldFJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBncmFkaWVudFRyYW5zZm9ybSkKQEAgLTEyMiwxNCArMTIyLDE0IEBAIHN0YXRpYyBpbmxpbmUg
QWZmaW5lVHJhbnNmb3JtIGNsaXBUb1RleHQKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVU
cmFuc2Zvcm07CiAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRp
b25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0odGV4dFJvb3RCbG9jaywgYWJzb2x1dGVU
cmFuc2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRl
VHJhbnNmb3JtLm1hcFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNv
bHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0KTsKKyAg
ICBHcmFwaGljc1JlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFw
UmVjdCh0YXJnZXRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JS
ZW5kZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOwogCiAgICAgU1ZHSW1h
Z2VCdWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dCwgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIGltYWdlQnVmZmVyKTsKIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXRyaXg7CiAgICAgaWYgKGJvdW5kaW5nQm94TW9kZSkgewotICAgICAgICBG
bG9hdFJlY3QgbWFza0JvdW5kaW5nQm94ID0gdGV4dFJvb3RCbG9jay0+b2JqZWN0Qm91bmRpbmdC
b3goKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG1hc2tCb3VuZGluZ0JveCA9IHRleHRSb290Qmxv
Y2stPm9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgICAgIG1hdHJpeC50cmFuc2xhdGUobWFza0Jv
dW5kaW5nQm94LngoKSwgbWFza0JvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgIG1hdHJpeC5zY2Fs
ZU5vblVuaWZvcm0obWFza0JvdW5kaW5nQm94LndpZHRoKCksIG1hc2tCb3VuZGluZ0JveC5oZWln
aHQoKSk7CiAgICAgfQpAQCAtMTYzLDcgKzE2Myw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudDo6YXBwbHlSZXMKIAogICAgIC8vIFNwZWM6IFdoZW4gdGhlIGdlb21ldHJ5IG9mIHRo
ZSBhcHBsaWNhYmxlIGVsZW1lbnQgaGFzIG5vIHdpZHRoIG9yIGhlaWdodCBhbmQgb2JqZWN0Qm91
bmRpbmdCb3ggaXMgc3BlY2lmaWVkLAogICAgIC8vIHRoZW4gdGhlIGdpdmVuIGVmZmVjdCAoZS5n
LiBhIGdyYWRpZW50IG9yIGEgZmlsdGVyKSB3aWxsIGJlIGlnbm9yZWQuCi0gICAgRmxvYXRSZWN0
IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdy
YXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3go
KTsKICAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkgJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBsCiAgICAgICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gZ3JhZGllbnRUcmFuc2Zvcm07CiAgICAgICAgICAgICBjYWxjdWxhdGVHcmFkaWVudFRy
YW5zZm9ybShncmFkaWVudFRyYW5zZm9ybSk7CiAKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0YXJn
ZXRSZWN0OworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3Q7CiAgICAgICAgICAg
ICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNsaXBU
b1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VCdWZmZXIsIHRhcmdldFJlY3QsIG9iamVjdCwgYm91
bmRpbmdCb3hNb2RlKCksIGdyYWRpZW50VHJhbnNmb3JtKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnREYXRhLT5ncmFkaWVudCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsy
NCw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1
ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZp
cnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRl
eHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVy
biBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogcHJvdGVj
dGVkOgogICAgIHZvaWQgYWRkU3RvcHMoR3JhZGllbnREYXRhKiwgY29uc3QgVmVjdG9yPEdyYWRp
ZW50OjpDb2xvclN0b3A+JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVu
dC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
OCArNTAsOCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1CiAgICAg
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KiBsaW5lYXJHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQqPihncmFkaWVudEVsZW1lbnQpOwogCiAgICAg
Ly8gRGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKLSAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBlbmRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHN0
YXJ0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludDsKICAgICBsaW5lYXJHcmFkaWVu
dEVsZW1lbnQtPmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKG1fYXR0cmlidXRlcywgc3RhcnRQb2lu
dCwgZW5kUG9pbnQpOwogCiAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudCA9IEdyYWRpZW50Ojpj
cmVhdGUoc3RhcnRQb2ludCwgZW5kUG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDkgKzc0LDkgQEAgdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcjo6YXBwbHlWaWV3cAogICAgICAgICBwYWludEluZm8uY29udGV4
dC0+Y2xpcChtX3ZpZXdwb3J0KTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyOjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2VyVHJhbnNm
b3JtYXRpb24pIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6Om1h
cmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlv
bikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgY29vcmRpbmF0ZXMgPSBSZW5kZXJTVkdDb250YWlu
ZXI6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAgR3JhcGhpY3NSZWN0IGNv
b3JkaW5hdGVzID0gUmVuZGVyU1ZHQ29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwogCiAgICAgLy8gTWFwIHJlcGFpbnQgcmVjdCBpbnRvIHBhcmVudCBjb29yZGluYXRl
IHNwYWNlLCBpbiB3aGljaCB0aGUgbWFya2VyIGJvdW5kYXJpZXMgaGF2ZSB0byBiZSBldmFsdWF0
ZWQKICAgICBjb29yZGluYXRlcyA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KGNv
b3JkaW5hdGVzKTsKQEAgLTkyLDEyICs5MiwxMiBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJl
bmRlclNWR1Jlc291cmNlCiAgICAgLy8gcmV0dXJuIHZpZXdwb3J0VHJhbnNsYXRpb24gKiBsb2Nh
bFRyYW5zZm9ybSgpICogdmlld3BvcnRUcmFuc2Zvcm0oKTsKIH0KIAotRmxvYXRQb2ludCBSZW5k
ZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVmZXJlbmNlUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2lu
dCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6cmVmZXJlbmNlUG9pbnQoKSBjb25zdAogewogICAg
IFNWR01hcmtlckVsZW1lbnQqIG1hcmtlciA9IHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQq
Pihub2RlKCkpOwogICAgIEFTU0VSVChtYXJrZXIpOwogCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQo
bWFya2VyLT5yZWZYKCkudmFsdWUobWFya2VyKSwgbWFya2VyLT5yZWZZKCkudmFsdWUobWFya2Vy
KSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobWFya2VyLT5yZWZYKCkudmFsdWUobWFya2Vy
KSwgbWFya2VyLT5yZWZZKCkudmFsdWUobWFya2VyKSk7CiB9CiAKIGZsb2F0IFJlbmRlclNWR1Jl
c291cmNlTWFya2VyOjphbmdsZSgpIGNvbnN0CkBAIC0xMTIsNyArMTEyLDcgQEAgZmxvYXQgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmFuZ2xlKCkgYwogICAgIHJldHVybiBhbmdsZTsKIH0KIAot
QWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJUcmFuc2Zvcm1h
dGlvbihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGF1dG9BbmdsZSwgZmxvYXQgc3Ry
b2tlV2lkdGgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6
Om1hcmtlclRyYW5zZm9ybWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQg
YXV0b0FuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBTVkdNYXJrZXJFbGVt
ZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKICAg
ICBBU1NFUlQobWFya2VyKTsKQEAgLTEzNSwxMCArMTM1LDEwIEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXI6OmRyYXcoUGFpbnQKICAgICBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KGlu
Zm8sIEludFBvaW50KCkpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBz
dHJva2VXaWR0aCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
cjo6bWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY29u
dGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHN0
cm9rZVdpZHRoKSBjb25zdAogewogICAgIC8vIFRoZSAnb3JpZ2luJyBjb29yZGluYXRlIG1hcHMg
dG8gU1ZHcyByZWZYL3JlZlksIGdpdmVuIGluIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2
aWV3cG9ydCBlc3RhYmxpc2hlZCBieSB0aGUgbWFya2VyCi0gICAgRmxvYXRQb2ludCBtYXBwZWRP
cmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBvaW50KG9yaWdpbik7CisgICAgR3JhcGhp
Y3NQb2ludCBtYXBwZWRPcmlnaW4gPSB2aWV3cG9ydFRyYW5zZm9ybSgpLm1hcFBvaW50KG9yaWdp
bik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtYXRpb24gPSBjb250ZW50VHJhbnNm
b3JtYXRpb247CiAgICAgaWYgKHN0cm9rZVdpZHRoICE9IC0xKQpAQCAtMTY2LDcgKzE2Niw3IEBA
IHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmNhbGNWaWV3cG8KIAogICAgIGZsb2F0IHcg
PSBtYXJrZXItPm1hcmtlcldpZHRoKCkudmFsdWUobWFya2VyKTsKICAgICBmbG9hdCBoID0gbWFy
a2VyLT5tYXJrZXJIZWlnaHQoKS52YWx1ZShtYXJrZXIpOwotICAgIG1fdmlld3BvcnQgPSBGbG9h
dFJlY3QoMCwgMCwgdywgaCk7CisgICAgbV92aWV3cG9ydCA9IEdyYXBoaWNzUmVjdCgwLCAwLCB3
LCBoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZU1hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlNWR01hcmtlckVsZW1lbnQu
aCIKQEAgLTQ2LDE5ICs0NiwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3KFBhaW50SW5mbyYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgLy8gQ2FsY3VsYXRlcyBtYXJrZXIgYm91
bmRhcmllcywgbWFwcGVkIHRvIHRoZSB0YXJnZXQgZWxlbWVudCdzIGNvb3JkaW5hdGUgc3BhY2UK
LSAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1h
cmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgbWFya2VyQm91bmRh
cmllcyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hcmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mKTsKICAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpOwog
CiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSBjb25zdDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWFya2VyVHJhbnNmb3JtYXRpb24oY29u
c3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNv
bnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBtYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBHcmFw
aGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCkgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsg
fQogCi0gICAgRmxvYXRQb2ludCByZWZlcmVuY2VQb2ludCgpIGNvbnN0OworICAgIEdyYXBoaWNz
UG9pbnQgcmVmZXJlbmNlUG9pbnQoKSBjb25zdDsKICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0Owog
ICAgIFNWR01hcmtlclVuaXRzVHlwZSBtYXJrZXJVbml0cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFNWR01hcmtlckVsZW1lbnQqPihub2RlKCkpLT5tYXJrZXJVbml0cygpOyB9CiAKQEAg
LTY4LDEyICs2OCwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIEdlbmVyYXRlcyBhIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCB1c2FibGUgdG8gcmVuZGVyIG1hcmtlciBjb250ZW50LiBIYW5k
bGVzIHNjYWxpbmcgdGhlIG1hcmtlciBjb250ZW50CiAgICAgLy8gYWNvcmRpbmcgdG8gU1ZHcyBt
YXJrZXJVbml0cz0ic3Ryb2tlV2lkdGgiIGNvbmNlcHQsIHdoZW4gYSBzdHJva2VXaWR0aCB2YWx1
ZSAhPSAtMSBpcyBwYXNzZWQgaW4uCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRU
cmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlv
biwgY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25z
dDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWFya2VyQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgY29udGVudFRyYW5zZm9ybWF0aW9uLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBvcmlnaW4sIGZsb2F0IHN0cm9rZVdpZHRoID0gLTEpIGNvbnN0OwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIHZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBtdXRhYmxlIEFmZmlu
ZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07Ci0gICAgRmxvYXRSZWN0IG1fdmll
d3BvcnQ7CisgICAgR3JhcGhpY3NSZWN0IG1fdmlld3BvcnQ7CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCAr
MjQsOCBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgpAQCAtNjEsNyArNjEsNyBAQCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6
flJlbmRlclNWR1Jlc291CiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlbW92ZUFs
bENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uKQogewotICAgIG1fbWFz
a0NvbnRlbnRCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9tYXNrQ29udGVudEJvdW5k
YXJpZXMgPSBHcmFwaGljc1JlY3QoKTsKICAgICBpZiAoIW1fbWFza2VyLmlzRW1wdHkoKSkgewog
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9tYXNrZXIpOwogICAgICAgICBtX21hc2tlci5jbGVh
cigpOwpAQCAtOTgsOCArOTgsOCBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBs
eVJlc291CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwogICAgIFNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29y
ZGluYXRlU3lzdGVtKG9iamVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0
IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qob2JqZWN0LT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFi
c29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7CisgICAgR3Jh
cGhpY3NSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
b2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKKyAgICBHcmFwaGljc1Jl
Y3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVj
dCk7CiAKICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSAmJiAhY2xhbXBlZEFic29sdXRl
VGFyZ2V0UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwpAQCAtMTM1LDcgKzEz
NSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmRyYXdDb250ZW4KICAgICAvLyBF
dmVudHVhbGx5IGFkanVzdCB0aGUgbWFzayBpbWFnZSBjb250ZXh0IGFjY29yZGluZyB0byB0aGUg
dGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94LgogICAgIEFmZmluZVRyYW5zZm9ybSBtYXNrQ29udGVu
dFRyYW5zZm9ybWF0aW9uOwogICAgIGlmIChtYXNrRWxlbWVudC0+bWFza0NvbnRlbnRVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkgewotICAg
ICAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5n
Qm94KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+
b2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICAgICAgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbi50
cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3VuZGluZ0JveC55KCkpOwog
ICAgICAgICBtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uLnNjYWxlTm9uVW5pZm9ybShvYmplY3RC
b3VuZGluZ0JveC53aWR0aCgpLCBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7CiAgICAgICAg
IG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENUTShtYXNrQ29udGVudFRyYW5zZm9ybWF0aW9uKTsK
QEAgLTE3NSwxMyArMTc1LDEzIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmNhbGN1
bGF0ZU0KICAgICB9CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVz
b3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVjdCBSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9i
amVjdCkKIHsKICAgICBTVkdNYXNrRWxlbWVudCogbWFza0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxT
VkdNYXNrRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgQVNTRVJUKG1hc2tFbGVtZW50KTsKIAotICAg
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3go
KTsKLSAgICBGbG9hdFJlY3QgbWFza0JvdW5kYXJpZXMgPSBtYXNrRWxlbWVudC0+bWFza0JvdW5k
aW5nQm94KG9iamVjdEJvdW5kaW5nQm94KTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRp
bmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NSZWN0IG1h
c2tCb3VuZGFyaWVzID0gbWFza0VsZW1lbnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGlu
Z0JveCk7CiAKICAgICAvLyBSZXNvdXJjZSB3YXMgbm90IGxheW91dGVkIHlldC4gR2l2ZSBiYWNr
IGNsaXBwaW5nIHJlY3Qgb2YgdGhlIG1hc2suCiAgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQpA
QCAtMTkwLDcgKzE5MCw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6cmVz
b3UKICAgICBpZiAobV9tYXNrQ29udGVudEJvdW5kYXJpZXMuaXNFbXB0eSgpKQogICAgICAgICBj
YWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgbWFza1Jl
Y3QgPSBtX21hc2tDb250ZW50Qm91bmRhcmllczsKKyAgICBHcmFwaGljc1JlY3QgbWFza1JlY3Qg
PSBtX21hc2tDb250ZW50Qm91bmRhcmllczsKICAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tDb250
ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKICAgICAgICAgdHJhbnNm
b3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94Lnko
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TWFza2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcl9oCiAKICNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGUoYm9vbCBtYXJrRm9ySW52
YWxpZGF0aW9uID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJPYmplY3QqLCBib29sIG1hcmtGb3JJbnZhbGlkYXRpb24gPSB0cnVlKTsKICAgICB2
aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdy
YXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CisgICAgdmly
dHVhbCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsKIAog
ICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbWFza1VuaXRzKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpLT5tYXNrVW5pdHMoKTsgfQogICAg
IFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbWFza0NvbnRlbnRVbml0cygpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKS0+bWFza0NvbnRlbnRVbml0
cygpOyB9CkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Q29udGVudElu
dG9NYXNrSW1hZ2UoTWFza2VyRGF0YSosIGNvbnN0IFNWR01hc2tFbGVtZW50KiwgUmVuZGVyT2Jq
ZWN0Kik7CiAgICAgdm9pZCBjYWxjdWxhdGVNYXNrQ29udGVudFJlcGFpbnRSZWN0KCk7CiAKLSAg
ICBGbG9hdFJlY3QgbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAgR3JhcGhpY3NSZWN0IG1f
bWFza0NvbnRlbnRCb3VuZGFyaWVzOwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgTWFza2Vy
RGF0YSo+IG1fbWFza2VyOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzbwogCiAgICAgLy8gU3BlYzogV2hlbiB0aGUgZ2Vv
bWV0cnkgb2YgdGhlIGFwcGxpY2FibGUgZWxlbWVudCBoYXMgbm8gd2lkdGggb3IgaGVpZ2h0IGFu
ZCBvYmplY3RCb3VuZGluZ0JveCBpcyBzcGVjaWZpZWQsCiAgICAgLy8gdGhlbiB0aGUgZ2l2ZW4g
ZWZmZWN0IChlLmcuIGEgZ3JhZGllbnQgb3IgYSBmaWx0ZXIpIHdpbGwgYmUgaWdub3JlZC4KLSAg
ICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94
KCk7CisgICAgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RC
b3VuZGluZ0JveCgpOwogICAgIGlmIChtX2F0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkgJiYg
b2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTEwOSw3ICsxMDksNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNv
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gQ29tcHV0ZSBhbGwgbmVj
ZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucyB0byBidWlsZCB0aGUgdGlsZSBpbWFnZSAmIHRoZSBwYXR0
ZXJuLgotICAgICAgICBGbG9hdFJlY3QgdGlsZUJvdW5kYXJpZXM7CisgICAgICAgIEdyYXBoaWNz
UmVjdCB0aWxlQm91bmRhcmllczsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRpbGVJbWFnZVRy
YW5zZm9ybTsKICAgICAgICAgaWYgKCFidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShvYmplY3QsIG1f
YXR0cmlidXRlcywgcGF0dGVybkVsZW1lbnQsIHRpbGVCb3VuZGFyaWVzLCB0aWxlSW1hZ2VUcmFu
c2Zvcm0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE3LDcgKzExNyw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc28KICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGFic29sdXRlVHJhbnNmb3JtOwogICAgICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpj
YWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmpl
Y3QsIGFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgICAgICBGbG9hdFJlY3QgYWJzb2x1dGVUaWxl
Qm91bmRhcmllcyA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QodGlsZUJvdW5kYXJpZXMpOwor
ICAgICAgICBHcmFwaGljc1JlY3QgYWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVHJh
bnNmb3JtLm1hcFJlY3QodGlsZUJvdW5kYXJpZXMpOwogCiAgICAgICAgIC8vIEJ1aWxkIHRpbGUg
aW1hZ2UuCiAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGlsZUltYWdlID0gY3JlYXRlVGls
ZUltYWdlKG9iamVjdCwgbV9hdHRyaWJ1dGVzLCB0aWxlQm91bmRhcmllcywgYWJzb2x1dGVUaWxl
Qm91bmRhcmllcywgdGlsZUltYWdlVHJhbnNmb3JtKTsKQEAgLTE5NiwxOSArMTk2LDE5IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpwb3N0QXBwbHkKICAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGNhbGN1bGF0ZVBhdHRlcm5Cb3Vu
ZGFyaWVzKGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBv
YmplY3RCb3VuZGluZ0JveCwKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NSZWN0IGNhbGN1bGF0ZVBh
dHRlcm5Cb3VuZGFyaWVzKGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiBwYXR0ZXJu
RWxlbWVudCkKIHsKICAgICBBU1NFUlQocGF0dGVybkVsZW1lbnQpOwogCiAgICAgaWYgKGF0dHJp
YnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoYXR0cmli
dXRlcy54KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCkg
KyBvYmplY3RCb3VuZGluZ0JveC54KCksCisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoYXR0
cmlidXRlcy54KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LndpZHRo
KCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlcy55KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdo
dCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZXMud2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gu
d2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmhlaWdodCgpLnZh
bHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7CiAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSwKKyAg
ICByZXR1cm4gR3JhcGhpY3NSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50
KSwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlKHBhdHRlcm5FbGVt
ZW50KSwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZShwYXR0
ZXJuRWxlbWVudCksCiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmhlaWdodCgpLnZh
bHVlKHBhdHRlcm5FbGVtZW50KSk7CkBAIC0yMTcsMTMgKzIxNywxMyBAQCBzdGF0aWMgaW5saW5l
IEZsb2F0UmVjdCBjYWxjdWxhdGVQYXR0ZXJuCiBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVy
bjo6YnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
YXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogcGF0
dGVybkVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmxvYXRSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QmIHBh
dHRlcm5Cb3VuZGFyaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25z
dAogewogICAgIEFTU0VSVChyZW5kZXJlcik7CiAgICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsK
IAotICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IHJlbmRlcmVyLT5vYmplY3RCb3Vu
ZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IHJlbmRlcmVy
LT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgIHBhdHRlcm5Cb3VuZGFyaWVzID0gY2FsY3VsYXRl
UGF0dGVybkJvdW5kYXJpZXMoYXR0cmlidXRlcywgb2JqZWN0Qm91bmRpbmdCb3gsIHBhdHRlcm5F
bGVtZW50KTsgCiAgICAgaWYgKHBhdHRlcm5Cb3VuZGFyaWVzLndpZHRoKCkgPD0gMCB8fCBwYXR0
ZXJuQm91bmRhcmllcy5oZWlnaHQoKSA8PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
NDEsMTYgKzI0MSwxNiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YnVpbGRUaWxl
CiAKIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3Jl
YXRlVGlsZUltYWdlKFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGF0dGVy
bkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHRpbGVC
b3VuZGFyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFy
aWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlQm91bmRhcmllcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1dGVUaWxlQm91bmRhcmllcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdAogewogICAg
IEFTU0VSVChvYmplY3QpOwogCiAgICAgLy8gQ2xhbXAgdGlsZSBpbWFnZSBzaXplIGFnYWluc3Qg
U1ZHIHZpZXdwb3J0IHNpemUsIGFzIGxhc3QgcmVzb3J0LCB0byBhdm9pZCBhbGxvY2F0aW5nIGh1
Z2UgaW1hZ2UgYnVmZmVycy4KLSAgICBGbG9hdFJlY3QgY29udGVudEJveFJlY3QgPSBTVkdSZW5k
ZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3Qob2JqZWN0KS0+Y29udGVudEJveFJlY3QoKTsK
KyAgICBHcmFwaGljc1JlY3QgY29udGVudEJveFJlY3QgPSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5k
VHJlZVJvb3RPYmplY3Qob2JqZWN0KS0+Y29udGVudEJveFJlY3QoKTsKIAotICAgIEZsb2F0UmVj
dCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcyA9IGFic29sdXRlVGlsZUJvdW5kYXJpZXM7
CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gYWJzb2x1
dGVUaWxlQm91bmRhcmllczsKICAgICBpZiAoY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMu
d2lkdGgoKSA+IGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpCiAgICAgICAgIGNsYW1wZWRBYnNvbHV0
ZVRpbGVCb3VuZGFyaWVzLnNldFdpZHRoKGNvbnRlbnRCb3hSZWN0LndpZHRoKCkpOwogCkBAIC0y
NjYsNyArMjY2LDcgQEAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyU1ZHUmVzb3VyYwog
ICAgIEFTU0VSVCh0aWxlSW1hZ2VDb250ZXh0KTsKIAogICAgIC8vIFRoZSBpbWFnZSBidWZmZXIg
cmVwcmVzZW50cyB0aGUgZmluYWwgcmVuZGVyZWQgc2l6ZSwgc28gdGhlIGNvbnRlbnQgaGFzIHRv
IGJlIHNjYWxlZCAodG8gYXZvaWQgcGl4ZWxhdGlvbikuCi0gICAgdGlsZUltYWdlQ29udGV4dC0+
c2NhbGUoRmxvYXRTaXplKGFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSAvIHRpbGVCb3Vu
ZGFyaWVzLndpZHRoKCksCisgICAgdGlsZUltYWdlQ29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXpl
KGFic29sdXRlVGlsZUJvdW5kYXJpZXMud2lkdGgoKSAvIHRpbGVCb3VuZGFyaWVzLndpZHRoKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlVGlsZUJvdW5k
YXJpZXMuaGVpZ2h0KCkgLyB0aWxlQm91bmRhcmllcy5oZWlnaHQoKSkpOwogCiAgICAgLy8gQXBw
bHkgdGlsZSBpbWFnZSB0cmFuc2Zvcm1hdGlvbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogCiAjaWYgRU5B
QkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJQYXR0ZXJuQXR0cmlidXRlcy5oIgpA
QCAtNTMsMTYgKzUzLDE2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2ln
bmVkIHNob3J0IHJlc291cmNlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291
cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNv
dXJjZU1vZGUsIGNvbnN0IFBhdGgqKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJv
dW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmly
dHVhbCBHcmFwaGljc1JlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJl
dHVybiBHcmFwaGljc1JlY3QoKTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5
cGUgcmVzb3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KICAgICBz
dGF0aWMgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOwogCiBwcml2YXRlOgot
ICAgIGJvb2wgYnVpbGRUaWxlSW1hZ2VUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0
dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCosIEZsb2F0UmVjdCYgcGF0
dGVybkJvdW5kYXJpZXMsIEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25z
dDsKKyAgICBib29sIGJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBHcmFwaGljc1Jl
Y3QmIHBhdHRlcm5Cb3VuZGFyaWVzLCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9y
bSkgY29uc3Q7CiAKLSAgICBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2Uo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmLCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVCb3VuZGFyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJhbnNmb3JtKSBjb25zdDsKKyAgICBQYXNzT3duUHRyPElt
YWdlQnVmZmVyPiBjcmVhdGVUaWxlSW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGF0dGVybkF0
dHJpYnV0ZXMmLCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVCb3VuZGFyaWVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGFi
c29sdXRlVGlsZUJvdW5kYXJpZXMsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGlsZUltYWdlVHJh
bnNmb3JtKSBjb25zdDsKIAogICAgIGJvb2wgbV9zaG91bGRDb2xsZWN0UGF0dGVybkF0dHJpYnV0
ZXMgOiAxOwogICAgIFBhdHRlcm5BdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VSYWRp
YWxHcmFkaWVudDo6YnUKICAgICBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQqIHJhZGlhbEdyYWRp
ZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCo+KGdyYWRp
ZW50RWxlbWVudCk7CiAKICAgICAvLyBEZXRlcm1pbmUgZ3JhZGllbnQgZm9jYWwvY2VudGVyIHBv
aW50cyBhbmQgcmFkaXVzCi0gICAgRmxvYXRQb2ludCBmb2NhbFBvaW50OwotICAgIEZsb2F0UG9p
bnQgY2VudGVyUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBmb2NhbFBvaW50OworICAgIEdyYXBo
aWNzUG9pbnQgY2VudGVyUG9pbnQ7CiAgICAgZmxvYXQgcmFkaXVzOwogICAgIHJhZGlhbEdyYWRp
ZW50RWxlbWVudC0+Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMobV9hdHRyaWJ1
dGVzLCBmb2NhbFBvaW50LCBjZW50ZXJQb2ludCwgcmFkaXVzKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29s
aWRDb2xvci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg
KzIyLDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSZXNvdXJjZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszNyw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNl
TW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUsIGNvbnN0IFBh
dGgqKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9i
amVjdCopIHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qg
cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBHcmFwaGljc1JlY3Qo
KTsgfQogCiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkg
Y29uc3QgeyByZXR1cm4gc19yZXNvdXJjZVR5cGU7IH0KICAgICBzdGF0aWMgUmVuZGVyU1ZHUmVz
b3VyY2VUeXBlIHNfcmVzb3VyY2VUeXBlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDcgKzYyLDcgQEAgUmVuZGVyU1ZHUm9vdDo6flJlbmRlclNWR1Jvb3QoKQogewogfQogCi12
b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEZsb2F0
U2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpIGNv
bnN0Cit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpb0luZm9ybWF0aW9u
KEdyYXBoaWNzU2l6ZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNp
Y1NpemUpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogaHR0cDovL2Rldi53My5vcmcvU1ZHL3Byb2Zp
bGVzLzEuMUYyL3B1Ymxpc2gvY29vcmRzLmh0bWwjSW50cmluc2ljU2l6aW5nCiAgICAgLy8gVGhl
IGludHJpbnNpYyBhc3BlY3QgcmF0aW8gb2YgdGhlIHZpZXdwb3J0IG9mIFNWRyBjb250ZW50IGlz
IG5lY2Vzc2FyeSBmb3IgZXhhbXBsZSwgd2hlbiBpbmNsdWRpbmcKQEAgLTc2LDcgKzc2LDcgQEAg
dm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0aQogICAgIC8vIOKAmHdpZHRo
4oCZIGFuZCDigJhoZWlnaHTigJkgYXR0cmlidXRlcyBhZnRlciByZXNvbHZpbmcgYm90aCB2YWx1
ZXMgdG8gdXNlciB1bml0cy4KICAgICBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplID0gZmFsc2U7
CiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPmhlaWdodCgp
LmlzRml4ZWQoKSkgewotICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEZsb2F0U2l6ZSh3aWR0aCgp
LCBoZWlnaHQoKSk7CisgICAgICAgIGludHJpbnNpY1JhdGlvID0gR3JhcGhpY3NTaXplKHdpZHRo
KCksIGhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTAsNyArOTAsNyBA
QCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVJbnRyaW5zaWNSYXRpCiAgICAgLy8gYWNjb3Vu
dCBmb3IgY2VydGFpbiBjYXNlcyBvZiB0aGUgaW50cmluc2ljIHdpZHRoL2hlaWdodCBjYWxjdWxh
dGlvbiBpbiBSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgvSGVpZ2h0Lgog
ICAgIGlmIChpbnRyaW5zaWNSYXRpby5pc0VtcHR5KCkgJiYgc3R5bGUoKS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkgewogICAgICAgICBpc1Bl
cmNlbnRhZ2VJbnRyaW5zaWNTaXplID0gdHJ1ZTsKLSAgICAgICAgaW50cmluc2ljUmF0aW8gPSBG
bG9hdFNpemUoc3R5bGUoKS0+d2lkdGgoKS5wZXJjZW50KCksIHN0eWxlKCktPmhlaWdodCgpLnBl
cmNlbnQoKSk7CisgICAgICAgIGludHJpbnNpY1JhdGlvID0gR3JhcGhpY3NTaXplKHN0eWxlKCkt
PndpZHRoKCkucGVyY2VudCgpLCBzdHlsZSgpLT5oZWlnaHQoKS5wZXJjZW50KCkpOwogICAgIH0K
IH0KIApAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y2FsY1ZpZXdwb3J0
KCkKICAgICBpZiAoIXN2Zy0+aGFzU2V0Q29udGFpbmVyU2l6ZSgpKSB7CiAgICAgICAgIC8vIElu
IHRoZSBub3JtYWwgY2FzZSBvZiA8c3ZnPiBiZWluZyBzdGFuZC1hbG9uZSBvciBpbiBhIENTU0Jv
eE1vZGVsIG9iamVjdCB3ZSB1c2UKICAgICAgICAgLy8gUmVuZGVyQm94Ojp3aWR0aCgpL2hlaWdo
dCgpICh3aGljaCBwdWxscyBkYXRhIGZyb20gUmVuZGVyU3R5bGUpCi0gICAgICAgIG1fdmlld3Bv
cnRTaXplID0gRmxvYXRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAgICAgbV92aWV3cG9y
dFNpemUgPSBHcmFwaGljc1NpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0zNTQsNyArMzU0LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpjYWxjVmll
d3BvcnQoKQogICAgIC8vIEZJWE1FOiBDaGVjayBob3cgU1ZHSW1hZ2UgKyB6b29taW5nIGlzIHN1
cHBvc2VkIHRvIGJlIGhhbmRsZWQ/CiAgICAgU1ZHTGVuZ3RoIHdpZHRoID0gc3ZnLT53aWR0aCgp
OwogICAgIFNWR0xlbmd0aCBoZWlnaHQgPSBzdmctPmhlaWdodCgpOwotICAgIG1fdmlld3BvcnRT
aXplID0gRmxvYXRTaXplKHdpZHRoLnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2Ug
PyBzdmctPnJlbGF0aXZlV2lkdGhWYWx1ZSgpIDogd2lkdGgudmFsdWUoc3ZnKSwKKyAgICBtX3Zp
ZXdwb3J0U2l6ZSA9IEdyYXBoaWNzU2l6ZSh3aWR0aC51bml0VHlwZSgpID09IExlbmd0aFR5cGVQ
ZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZVdpZHRoVmFsdWUoKSA6IHdpZHRoLnZhbHVlKHN2Zyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LnVuaXRUeXBlKCkgPT0gTGVu
Z3RoVHlwZVBlcmNlbnRhZ2UgPyBzdmctPnJlbGF0aXZlSGVpZ2h0VmFsdWUoKSA6IGhlaWdodC52
YWx1ZShzdmcpKTsKIH0KIApAQCAtMzY1LDcgKzM2NSw3IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5k
ZXJTVkdSb290Ojpsb2NhbFRvQm8KICAgICBJbnRTaXplIGJvcmRlckFuZFBhZGRpbmcgPSBib3Jk
ZXJPcmlnaW5Ub0NvbnRlbnRCb3goKTsKICAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNf
Y2FzdDxTVkdTVkdFbGVtZW50Kj4obm9kZSgpKTsKICAgICBmbG9hdCBzY2FsZSA9IHN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKTsKLSAgICBGbG9hdFBvaW50IHRyYW5zbGF0ZSA9IHN2Zy0+Y3VycmVu
dFRyYW5zbGF0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgdHJhbnNsYXRlID0gc3ZnLT5jdXJyZW50
VHJhbnNsYXRlKCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bShzY2FsZSwgMCwgMCwgc2NhbGUs
IGJvcmRlckFuZFBhZGRpbmcud2lkdGgoKSArIHRyYW5zbGF0ZS54KCksIGJvcmRlckFuZFBhZGRp
bmcuaGVpZ2h0KCkgKyB0cmFuc2xhdGUueSgpKTsKICAgICByZXR1cm4gY3RtICogc3ZnLT52aWV3
Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkgLyBzY2FsZSwgaGVpZ2h0KCkgLyBzY2FsZSk7CiB9
CkBAIC00MDYsNyArNDA2LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVjdEZvclJl
cGFpbgogICAgIHJlcGFpbnRSZWN0ID0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpLm1hcFJl
Y3QocmVwYWludFJlY3QpOwogCiAgICAgLy8gQXBwbHkgaW5pdGlhbCB2aWV3cG9ydCBjbGlwIC0g
bm90IGFmZmVjdGVkIGJ5IG92ZXJmbG93IHNldHRpbmdzICAgIAotICAgIHJlcGFpbnRSZWN0Lmlu
dGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fdmlld3Bv
cnRTaXplKSkpOworICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KEdy
YXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1fdmlld3BvcnRTaXplKSkpOwogCiAgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBp
ZiAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gc3ZnU3R5bGUtPnNoYWRvdygpKQpAQCAtNDI3
LDkgKzQyNyw5IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bWFwTG9jYWxUb0NvbnRhaW5lcigKIAog
dm9pZCBSZW5kZXJTVkdSb290Ojp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKCkKIHsKLSAgICBtX29i
amVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgbV9zdHJva2VCb3VuZGluZ0JveCA9
IEZsb2F0UmVjdCgpOwotICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Cisg
ICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgpOworICAgIG1fc3Ryb2tlQm91
bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEdy
YXBoaWNzUmVjdCgpOwogCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJv
dW5kaW5nQm94ZXModGhpcywgbV9vYmplY3RCb3VuZGluZ0JveCwgbV9zdHJva2VCb3VuZGluZ0Jv
eCwgbV9yZXBhaW50Qm91bmRpbmdCb3gpOwogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2Vj
dFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyh0aGlzLCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7CkBA
IC00NDksMTAgKzQ0OSwxMCBAQCBib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0
IEhpCiAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0o
KS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CiAKICAgICBmb3IgKFJlbmRlck9i
amVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3Vz
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+bm9kZUF0RmxvYXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRlc3RBY3Rpb24pKSB7CisgICAgICAgIGlmIChjaGls
ZC0+bm9kZUF0R3JhcGhpY3NQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2FsUG9pbnQsIGhpdFRl
c3RBY3Rpb24pKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQ1NTL0hUTUwgYXNzdW1lcyB0aGUg
bG9jYWwgcG9pbnQgaXMgcmVsYXRpdmUgdG8gdGhlIGJvcmRlciBib3gsIHJpZ2h0PwogICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwotICAg
ICAgICAgICAgLy8gRklYTUU6IG5vZGVBdEZsb2F0UG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0
LWJhc2VkIGhpdCB0ZXN0cyB5ZXQuCisgICAgICAgICAgICAvLyBGSVhNRTogbm9kZUF0R3JhcGhp
Y3NQb2ludCgpIGRvZXNuJ3QgaGFuZGxlIHJlY3QtYmFzZWQgaGl0IHRlc3RzIHlldC4KICAgICAg
ICAgICAgIHJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KGNoaWxkLT5ub2RlKCks
IHBvaW50SW5Db250YWluZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIFJlbmRlclNW
R1Jvb3RfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKIAogI2luY2x1ZGUg
IlNWR1JlbmRlclN1cHBvcnQuaCIKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGV4cGxp
Y2l0IFJlbmRlclNWR1Jvb3QoU1ZHU3R5bGVkRWxlbWVudCopOwogICAgIHZpcnR1YWwgflJlbmRl
clNWR1Jvb3QoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljUmF0aW9JbmZv
cm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvLCBib29sJiBpc1BlcmNlbnRhZ2VJbnRy
aW5zaWNTaXplKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1JhdGlv
SW5mb3JtYXRpb24oR3JhcGhpY3NTaXplJiBpbnRyaW5zaWNSYXRpbywgYm9vbCYgaXNQZXJjZW50
YWdlSW50cmluc2ljU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAKQEAgLTcx
LDEyICs3MSwxMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdDsKIAotICAgIGJvb2wgZmlsbENvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBib29sIHN0cm9rZUNvbnRhaW5zKGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBHcmFw
aGljc1BvaW50JikgY29uc3Q7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBHcmFwaGlj
c1BvaW50JikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRp
bmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVh
bCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVj
dEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVy
biBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24pOwogCkBAIC05NiwxMCArOTYsMTAgQEAgcHJpdmF0ZToKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47Ci0gICAgRmxvYXRTaXplIG1fdmlld3BvcnRT
aXplOwotICAgIEZsb2F0UmVjdCBtX29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBt
X3N0cm9rZUJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsK
KyAgICBHcmFwaGljc1NpemUgbV92aWV3cG9ydFNpemU7CisgICAgR3JhcGhpY3NSZWN0IG1fb2Jq
ZWN0Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1fc3Ryb2tlQm91bmRpbmdCb3g7Cisg
ICAgR3JhcGhpY3NSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwogICAgIG11dGFibGUgQWZmaW5l
VHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKICAgICBib29sIG1faXNMYXlvdXRT
aXplQ2hhbmdlZCA6IDE7CiAgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBk
YXRlIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdUZXh0LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNp
bmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lk
IFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUp
OwogCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBvbmx5IGxheW91dCB0
aGUgY2hpbGQgYm94ZXMsIGlmIG5lZWRlZC4KLSAgICBGbG9hdFJlY3Qgb2xkQm91bmRhcmllcyA9
IG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgR3JhcGhpY3NSZWN0IG9sZEJvdW5kYXJpZXMgPSBv
YmplY3RCb3VuZGluZ0JveCgpOwogICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKICAgICBm
b3JjZUxheW91dElubGluZUNoaWxkcmVuKCk7CiAKQEAgLTE4MiwxNCArMTgyLDE0IEBAIFJvb3RJ
bmxpbmVCb3gqIFJlbmRlclNWR1RleHQ6OmNyZWF0ZVJvb3QKICAgICByZXR1cm4gYm94OwogfQog
Ci1ib29sIFJlbmRlclNWR1RleHQ6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdU
ZXh0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKICAgICBQb2ludGVyRXZlbnRzSGl0UnVs
ZXMgaGl0UnVsZXMoUG9pbnRlckV2ZW50c0hpdFJ1bGVzOjpTVkdfVEVYVF9ISVRURVNUSU5HLCBy
ZXF1ZXN0LCBzdHlsZSgpLT5wb2ludGVyRXZlbnRzKCkpOwogICAgIGJvb2wgaXNWaXNpYmxlID0g
KHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKTsKICAgICBpZiAoaXNWaXNpYmxlIHx8
ICFoaXRSdWxlcy5yZXF1aXJlVmlzaWJsZSkgewogICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhp
dFN0cm9rZSAmJiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVz
LnJlcXVpcmVTdHJva2UpKQogICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYg
KHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMucmVxdWlyZUZpbGwp
KSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZl
cnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CiAKICAgICAgICAgICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgIApAQCAtMjI0LDcgKzIyNCw3IEBAIFZpc2li
bGVQb3NpdGlvbiBSZW5kZXJTVkdUZXh0Ojpwb3NpdGlvbkYKICAgICByZXR1cm4gY2xvc2VzdEJv
eC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChMYXlvdXRQb2ludChwb2ludEluQ29udGVu
dHMueCgpLCBjbG9zZXN0Qm94LT55KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNv
bHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgcXVhZHMu
YXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSkpOwogfQpAQCAt
MjQ1LDkgKzI0NSw5IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkK
ICAgICBSZW5kZXJCbG9jazo6cGFpbnQoYmxvY2tJbmZvLCBJbnRQb2ludCgpKTsKIH0KIAotRmxv
YXRSZWN0IFJlbmRlclNWR1RleHQ6OnN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK0dyYXBoaWNz
UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kYXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBo
aWNzUmVjdCBzdHJva2VCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgIGlm
ICghc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKQogICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRhcmll
czsKQEAgLTI1OCw5ICsyNTgsOSBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tlQm91
bmRpbmdCCiAgICAgcmV0dXJuIHN0cm9rZUJvdW5kYXJpZXM7CiB9CiAKLUZsb2F0UmVjdCBSZW5k
ZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0CitHcmFwaGlj
c1JlY3QgUmVuZGVyU1ZHVGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25z
dAogewotICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHN0cm9rZUJvdW5kaW5nQm94KCk7Cisg
ICAgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0ID0gc3Ryb2tlQm91bmRpbmdCb3goKTsKICAgICBT
VkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywg
cmVwYWludFJlY3QpOwogCiAgICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3cgPSBz
dHlsZSgpLT50ZXh0U2hhZG93KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE5lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUo
KSB7IG1fbmVlZHNQb3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSA9IHRydWU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUg
PSB0cnVlOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRp
bmF0ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0OwogCiAgICAgc3RhdGljIFJlbmRlclNWR1RleHQqIGxvY2F0
ZVJlbmRlclNWR1RleHRBbmNlc3RvcihSZW5kZXJPYmplY3QqKTsKICAgICBzdGF0aWMgY29uc3Qg
UmVuZGVyU1ZHVGV4dCogbG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKGNvbnN0IFJlbmRlck9i
amVjdCopOwpAQCAtNTQsMjEgKzU0LDIxIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAgICAg
dmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2lu
dCYpOwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lcik7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQg
PSBmYWxzZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29s
IGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBmcmFtZVJlY3QoKTsgfQotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBmcmFtZVJlY3Qo
KTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFu
c2Zvcm07IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3
ICsyMiw3IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0UGF0aC5o
IgogCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIGJvb2wgUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lcjo6Y2EKICAgICBpZiAo
IWVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmdUYWcpIHx8ICFzdGF0aWNfY2FzdDxTVkdH
RWxlbWVudCo+KGVsZW1lbnQpLT5pc1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybiBuZWVkc1VwZGF0ZTsKIAotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbiA9IHN0
YXRpY19jYXN0PFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVudCktPmNvbnRh
aW5lclRyYW5zbGF0aW9uKCk7CisgICAgR3JhcGhpY3NTaXplIHRyYW5zbGF0aW9uID0gc3RhdGlj
X2Nhc3Q8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQqPihlbGVtZW50KS0+Y29udGFpbmVy
VHJhbnNsYXRpb24oKTsKICAgICBpZiAoIXRyYW5zbGF0aW9uLndpZHRoKCkgJiYgIXRyYW5zbGF0
aW9uLmhlaWdodCgpKQogICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw4ICs0OSw4IEBAIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmNhbGNWaWUK
ICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpIHsKICAgICAg
ICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQqPihlbGVt
ZW50KTsKIAotICAgICAgICAgRmxvYXRSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKLSAg
ICAgICAgIG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qoc3ZnLT54KCkudmFsdWUoc3ZnKQorICAgICAg
ICAgR3JhcGhpY3NSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9ydDsKKyAgICAgICAgIG1fdmll
d3BvcnQgPSBHcmFwaGljc1JlY3Qoc3ZnLT54KCkudmFsdWUoc3ZnKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHN2Zy0+eSgpLnZhbHVlKHN2ZykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCBzdmctPndpZHRoKCkudmFsdWUoc3ZnKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHN2Zy0+aGVpZ2h0KCkudmFsdWUoc3ZnKSk7CkBAIC03OCw3ICs3
OCw3IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyU1ZHVmlld3BvcnQKICAgICAvLyBy
ZXR1cm4gdmlld3BvcnRUcmFuc2xhdGlvbiAqIGxvY2FsVHJhbnNmb3JtKCkgKiB2aWV3cG9ydFRy
YW5zZm9ybSgpCiB9CiAKLWJvb2wgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJ
bnNpZGVWaWV3cG9ydENsaXAoY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCkKK2Jvb2wg
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OnBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCkKIHsKICAgICAvLyBSZXNwZWN0IHRoZSB2
aWV3cG9ydCBjbGlwICh3aGljaCBpcyBpbiBwYXJlbnQgY29vcmRzKQogICAgIGlmICghU1ZHUmVu
ZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbih0aGlzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSw5IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNhbGNWaWV3cG9ydCgpOwogCiAgICAgdmlydHVh
bCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50SW5mbyYpOwotICAgIHZpcnR1YWwgYm9vbCBw
b2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQp
OworICAgIHZpcnR1YWwgYm9vbCBwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50SW5QYXJlbnQpOwogCi0gICAgRmxvYXRSZWN0IG1fdmlld3BvcnQ7Cisg
ICAgR3JhcGhpY3NSZWN0IG1fdmlld3BvcnQ7CiAgICAgbXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0g
bV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwogfTsKICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW1hZ2VCdWZmZXJUb29scy5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRv
b2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFNWR0ltYWdlQnVm
ZmVyVG9vbHM6OmNhbGN1bGF0ZVRyYW5zCiAgICAgfQogfQogCi1ib29sIFNWR0ltYWdlQnVmZmVy
VG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJ
bWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitib29sIFNW
R0ltYWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEdyYXBoaWNzUmVjdCYg
YWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRBYnNvbHV0ZVRh
cmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCiB7CiAgICAgSW50U2l6ZSBpbWFnZVNpemUocm91bmRlZEltYWdlQnVmZmVyU2l6
ZShjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKSkpOwogICAgIEludFNpemUgdW5jbGFt
cGVkSW1hZ2VTaXplKFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUo
YWJzb2x1dGVUYXJnZXRSZWN0LnNpemUoKSkpOwpAQCAtNjcsNyArNjcsNyBAQCBib29sIFNWR0lt
YWdlQnVmZmVyVG9vbHM6OmNyZWF0ZUltYWdlQnVmCiAgICAgQVNTRVJUKGltYWdlQ29udGV4dCk7
CiAKICAgICAvLyBDb21wZW5zYXRlIHJvdW5kaW5nIGVmZmVjdHMsIGFzIHRoZSBhYnNvbHV0ZSB0
YXJnZXQgcmVjdCBpcyB1c2luZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCB0aGUgaW1hZ2Ug
YnVmZmVyIHNpemUgaXMgaW50ZWdlci4KLSAgICBpbWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSh1bmNsYW1wZWRJbWFnZVNpemUud2lkdGgoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC53aWR0aCgp
LCB1bmNsYW1wZWRJbWFnZVNpemUuaGVpZ2h0KCkgLyBhYnNvbHV0ZVRhcmdldFJlY3QuaGVpZ2h0
KCkpKTsKKyAgICBpbWFnZUNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh1bmNsYW1wZWRJbWFn
ZVNpemUud2lkdGgoKSAvIGFic29sdXRlVGFyZ2V0UmVjdC53aWR0aCgpLCB1bmNsYW1wZWRJbWFn
ZVNpemUuaGVpZ2h0KCkgLyBhYnNvbHV0ZVRhcmdldFJlY3QuaGVpZ2h0KCkpKTsKIAogICAgIGlt
YWdlQnVmZmVyID0gaW1hZ2UucmVsZWFzZSgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtOTEsNyAr
OTEsNyBAQCB2b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUCiAgICAgY29u
dGVudFRyYW5zZm9ybWF0aW9uID0gc2F2ZWRDb250ZW50VHJhbnNmb3JtYXRpb247CiB9CiAKLXZv
aWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZl
cj4mIGltYWdlQnVmZmVyKQordm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1
ZmZlcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpCiB7CiAgICAgQVNTRVJUKGNv
bnRleHQpOwogICAgIEFTU0VSVChpbWFnZUJ1ZmZlcik7CkBAIC0xMDgsMTcgKzEwOCwxNyBAQCB2
b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmCiAgICAgICAgIGltYWdlQnVm
ZmVyLmNsZWFyKCk7CiB9CiAKLUludFNpemUgU1ZHSW1hZ2VCdWZmZXJUb29sczo6cm91bmRlZElt
YWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCitJbnRTaXplIFNWR0ltYWdlQnVm
ZmVyVG9vbHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXpl
KQogewogICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4obHJvdW5kZihzaXplLndp
ZHRoKCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKHNpemUuaGVpZ2h0KCkpKSk7CiB9CiAK
LUZsb2F0UmVjdCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0
Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0
JiBhYnNvbHV0ZVRhcmdldFJlY3QpCitHcmFwaGljc1JlY3QgU1ZHSW1hZ2VCdWZmZXJUb29sczo6
Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQogewogICAg
IEFTU0VSVChyZW5kZXJlcik7CiAKICAgICBjb25zdCBSZW5kZXJTVkdSb290KiBzdmdSb290ID0g
U1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KHJlbmRlcmVyKTsKLSAgICBGbG9h
dFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVGFyZ2V0UmVjdDsKKyAg
ICBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRlVGFyZ2V0
UmVjdDsKICAgICBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LmludGVyc2VjdChzdmdSb290LT5m
cmFtZVJlY3QoKSk7CiAgICAgcmV0dXJuIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3Q7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVy
VG9vbHMuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0ltYWdlQnVmZmVyVG9vbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjEgKzI3LDIxIEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNzIEdy
YXBoaWNzU2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJlbmRlck9iamVjdDsK
IAogY2xhc3MgU1ZHSW1hZ2VCdWZmZXJUb29scyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U1ZHSW1hZ2VCdWZmZXJUb29scyk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgY3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYsIENv
bG9yU3BhY2UpOworICAgIHN0YXRpYyBib29sIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEdyYXBo
aWNzUmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mLCBDb2xvclNwYWNlKTsKICAg
ICBzdGF0aWMgdm9pZCByZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIFJl
bmRlck9iamVjdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHN0YXRpYyB2b2lkIGNs
aXBUb0ltYWdlQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdCwgT3duUHRyPEltYWdlQnVmZmVyPiYpOworICAgIHN0YXRpYyB2b2lkIGNsaXBUb0ltYWdl
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVjdCYgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdCwg
T3duUHRyPEltYWdlQnVmZmVyPiYpOwogCiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVHJhbnNm
b3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3QgUmVuZGVyT2JqZWN0
KiwgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSk7Ci0gICAgc3RhdGljIEZsb2F0
UmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3QpOwotICAgIHN0YXRpYyBJ
bnRTaXplIHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3Rh
dGljIEdyYXBoaWNzUmVjdCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBhYnNvbHV0ZVRhcmdldFJlY3Qp
OworICAgIHN0YXRpYyBJbnRTaXplIHJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgR3JhcGhp
Y3NTaXplJik7CiAKIHByaXZhdGU6CiAgICAgU1ZHSW1hZ2VCdWZmZXJUb29scygpIHsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3gu
Y3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lk
IFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNCiAgICAgICAgIGlmIChtYXJrZXIt
PnR5cGUoKSAhPSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVj
dCBtYXJrZXJSZWN0OwogICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5k
ZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CiAg
ICAgICAgICAgICBpZiAoIWJveC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpj
b21wdXRlVGV4dE1hdGNoTQogICAgICAgICAgICAgICAgIGlmICghdGV4dEJveC0+bWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgZnJhZ21lbnRTdGFy
dFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZnJhZ21lbnRSZWN0ID0gdGV4dEJv
eC0+c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBv
c2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uLCBzdHlsZSk7CisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NSZWN0IGZyYWdtZW50UmVjdCA9IHRleHRCb3gtPnNlbGVjdGlvblJlY3RGb3JUZXh0RnJh
Z21lbnQoZnJhZ21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlv
biwgc3R5bGUpOwogICAgICAgICAgICAgICAgIGZyYWdtZW50LmJ1aWxkRnJhZ21lbnRUcmFuc2Zv
cm0oZnJhZ21lbnRUcmFuc2Zvcm0pOwogICAgICAgICAgICAgICAgIGlmICghZnJhZ21lbnRUcmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFJlY3QgPSBm
cmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBmbG9hdCBTVkdJbmxpbmVUZXh0
Qm94Ojpwb3NpdGlvbkZvck9mZnNlCiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBTVkdJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRG
cmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIFJl
bmRlclN0eWxlKiBzdHlsZSkKK0dyYXBoaWNzUmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rp
b25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGlu
dCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsK
ICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKTsKICAgICBBU1NFUlQoc3R5
bGUpOwpAQCAtMTAzLDEzICsxMDMsMTMgQEAgRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNl
bGVjdGlvblJlYwogCiAgICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHRleHRSZW5kZXJlci0+
c2NhbGVkRm9udCgpOwogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBzY2FsZWRGb250TWV0cmljcyA9
IHNjYWxlZEZvbnQuZm9udE1ldHJpY3MoKTsKLSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4oZnJh
Z21lbnQueCwgZnJhZ21lbnQueSk7CisgICAgR3JhcGhpY3NQb2ludCB0ZXh0T3JpZ2luKGZyYWdt
ZW50LngsIGZyYWdtZW50LnkpOwogICAgIGlmIChzY2FsaW5nRmFjdG9yICE9IDEpCiAgICAgICAg
IHRleHRPcmlnaW4uc2NhbGUoc2NhbGluZ0ZhY3Rvciwgc2NhbGluZ0ZhY3Rvcik7CiAKICAgICB0
ZXh0T3JpZ2luLm1vdmUoMCwgLXNjYWxlZEZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOwogCi0g
ICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QgPSBzY2FsZWRGb250LnNlbGVjdGlvblJlY3RGb3JU
ZXh0KGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50KSwgdGV4dE9yaWdpbiwgZnJhZ21l
bnQuaGVpZ2h0ICogc2NhbGluZ0ZhY3Rvciwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0ID0gc2NhbGVkRm9udC5zZWxlY3Rpb25SZWN0
Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCksIHRleHRPcmlnaW4sIGZy
YWdtZW50LmhlaWdodCAqIHNjYWxpbmdGYWN0b3IsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciA9PSAxKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9u
UmVjdDsKIApAQCAtMTMyLDcgKzEzMiw3IEBAIEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uUmVjdCgKICAgICBBU1NFUlQoc3R5bGUpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZy
YWdtZW50VHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OworICAgIEdyYXBo
aWNzUmVjdCBzZWxlY3Rpb25SZWN0OwogICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAw
OwogICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKIApAQCAtMTQ1LDcgKzE0NSw3IEBA
IEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdCgKICAgICAgICAgaWYgKCFt
YXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBmcmFn
bWVudFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24pKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdCA9IHNlbGVjdGlvblJlY3RG
b3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRF
bmRQb3NpdGlvbiwgc3R5bGUpOworICAgICAgICBHcmFwaGljc1JlY3QgZnJhZ21lbnRSZWN0ID0g
c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0
aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uLCBzdHlsZSk7CiAgICAgICAgIGZyYWdtZW50LmJ1aWxk
RnJhZ21lbnRUcmFuc2Zvcm0oZnJhZ21lbnRUcmFuc2Zvcm0pOwogICAgICAgICBpZiAoIWZyYWdt
ZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZy
YWdtZW50VHJhbnNmb3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKQEAgLTU3OSw3ICs1NzksNyBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAgICAgaWYgKGZyYWdt
ZW50LndpZHRoIDw9IDAgJiYgdGhpY2tuZXNzIDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAg
IEZsb2F0UG9pbnQgZGVjb3JhdGlvbk9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKyAg
ICBHcmFwaGljc1BvaW50IGRlY29yYXRpb25PcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7
CiAgICAgZmxvYXQgd2lkdGggPSBmcmFnbWVudC53aWR0aDsKICAgICBjb25zdCBGb250TWV0cmlj
cyYgc2NhbGVkRm9udE1ldHJpY3MgPSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCk7CiAKQEAgLTU5
OCw3ICs1OTgsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpCiAg
ICAgZGVjb3JhdGlvbk9yaWdpbi5tb3ZlKDAsIC1zY2FsZWRGb250TWV0cmljcy5mbG9hdEFzY2Vu
dCgpICsgcG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0aW9uKGRlY29yYXRpb24sIHNjYWxlZEZvbnRN
ZXRyaWNzLCB0aGlja25lc3MpKTsKIAogICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJlY3Qo
RmxvYXRSZWN0KGRlY29yYXRpb25PcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgdGhpY2tuZXNzKSkp
OworICAgIHBhdGguYWRkUmVjdChHcmFwaGljc1JlY3QoZGVjb3JhdGlvbk9yaWdpbiwgR3JhcGhp
Y3NTaXplKHdpZHRoLCB0aGlja25lc3MpKSk7CiAKICAgICBpZiAoYWNxdWlyZVBhaW50aW5nUmVz
b3VyY2UoY29udGV4dCwgc2NhbGluZ0ZhY3RvciwgZGVjb3JhdGlvblJlbmRlcmVyLCBkZWNvcmF0
aW9uU3R5bGUpKQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCAmcGF0
aCk7CkBAIC02MTUsMjEgKzYxNSwyMSBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4
dFdpdGhTaGFkCiAgICAgY29uc3QgRm9udCYgc2NhbGVkRm9udCA9IHRleHRSZW5kZXJlci0+c2Nh
bGVkRm9udCgpOwogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN0eWxlLT50ZXh0U2hh
ZG93KCk7CiAKLSAgICBGbG9hdFBvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQueCwgZnJhZ21lbnQu
eSk7Ci0gICAgRmxvYXRTaXplIHRleHRTaXplKGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWln
aHQpOworICAgIEdyYXBoaWNzUG9pbnQgdGV4dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55
KTsKKyAgICBHcmFwaGljc1NpemUgdGV4dFNpemUoZnJhZ21lbnQud2lkdGgsIGZyYWdtZW50Lmhl
aWdodCk7CiAKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKSB7CiAgICAgICAgIHRleHRPcmln
aW4uc2NhbGUoc2NhbGluZ0ZhY3Rvciwgc2NhbGluZ0ZhY3Rvcik7CiAgICAgICAgIHRleHRTaXpl
LnNjYWxlKHNjYWxpbmdGYWN0b3IpOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0
KEZsb2F0UG9pbnQodGV4dE9yaWdpbi54KCksIHRleHRPcmlnaW4ueSgpIC0gc2NhbGVkRm9udC5m
b250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpLCB0ZXh0U2l6ZSk7CisgICAgR3JhcGhpY3NSZWN0
IHNoYWRvd1JlY3QoR3JhcGhpY3NQb2ludCh0ZXh0T3JpZ2luLngoKSwgdGV4dE9yaWdpbi55KCkg
LSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSksIHRleHRTaXplKTsKIAog
ICAgIGRvIHsKICAgICAgICAgaWYgKCFwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50
aW5nKGNvbnRleHQsIHNjYWxpbmdGYWN0b3IsIHRleHRSdW4sIHN0eWxlKSkKICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgIEZsb2F0U2l6ZSBleHRyYU9mZnNldDsKKyAgICAgICAgR3JhcGhp
Y3NTaXplIGV4dHJhT2Zmc2V0OwogICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICAgZXh0
cmFPZmZzZXQgPSBhcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHNoYWRvdywg
c2hhZG93UmVjdCwgZmFsc2UgLyogc3Ryb2tlZCAqLywgdHJ1ZSAvKiBvcGFxdWUgKi8sIHRydWUg
LyogaG9yaXpvbnRhbCAqLyk7CiAKQEAgLTcwMyw3ICs3MDMsNyBAQCB2b2lkIFNWR0lubGluZVRl
eHRCb3g6OnBhaW50VGV4dChHcmFwaGljCiAKIEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2Fs
Y3VsYXRlQm91bmRhcmllcygpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHRleHRSZWN0OworICAg
IEdyYXBoaWNzUmVjdCB0ZXh0UmVjdDsKIAogICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHRS
ZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dCh0aGlzLT50ZXh0UmVuZGVyZXIoKSk7CiAg
ICAgQVNTRVJUKHRleHRSZW5kZXJlcik7CkBAIC03MTcsNyArNzE3LDcgQEAgSW50UmVjdCBTVkdJ
bmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3VuZAogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNT
aXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewogICAgICAgICBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50ID0gbV90ZXh0RnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBGbG9hdFJlY3Qg
ZnJhZ21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21lbnQu
d2lkdGgsIGZyYWdtZW50LmhlaWdodCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBmcmFnbWVudFJl
Y3QoZnJhZ21lbnQueCwgZnJhZ21lbnQueSAtIGJhc2VsaW5lLCBmcmFnbWVudC53aWR0aCwgZnJh
Z21lbnQuaGVpZ2h0KTsKICAgICAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShm
cmFnbWVudFRyYW5zZm9ybSk7CiAgICAgICAgIGlmICghZnJhZ21lbnRUcmFuc2Zvcm0uaXNJZGVu
dGl0eSgpKQogICAgICAgICAgICAgZnJhZ21lbnRSZWN0ID0gZnJhZ21lbnRUcmFuc2Zvcm0ubWFw
UmVjdChmcmFnbWVudFJlY3QpOwpAQCAtNzM4LDkgKzczOCw5IEBAIGJvb2wgU1ZHSW5saW5lVGV4
dEJveDo6bm9kZUF0UG9pbnQoY29uc3QKICAgICBpZiAoaXNWaXNpYmxlIHx8ICFoaXRSdWxlcy5y
ZXF1aXJlVmlzaWJsZSkgewogICAgICAgICBpZiAoKGhpdFJ1bGVzLmNhbkhpdFN0cm9rZSAmJiAo
cmVuZGVyZXIoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgfHwgIWhpdFJ1bGVz
LnJlcXVpcmVTdHJva2UpKQogICAgICAgICAgICAgfHwgKGhpdFJ1bGVzLmNhbkhpdEZpbGwgJiYg
KHJlbmRlcmVyKCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSB8fCAhaGl0UnVsZXMu
cmVxdWlyZUZpbGwpKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBib3hPcmlnaW4oeCgpLCB5
KCkpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBib3hPcmlnaW4oeCgpLCB5KCkpOwogICAg
ICAgICAgICAgYm94T3JpZ2luLm1vdmVCeShhY2N1bXVsYXRlZE9mZnNldCk7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7CisgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgcmVjdChib3hPcmlnaW4sIHNpemUoKSk7CiAgICAgICAgICAgICBpZiAocmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5D
b250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCkt
Pm5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgcmVjdCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydHNOZXdU
ZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdU
ZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNv
bnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFn
bWVudEVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopOworICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rp
b25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVu
dFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSopOwog
CiBwcml2YXRlOgogICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNv
bnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDEzICs0NCwxMyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIEZsb2F0UG9pbnQgb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBHcmFwaGljc1BvaW50IG9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIqIG1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2VyOyB9CiAKICAgICBmbG9hdCBjdXJy
ZW50QW5nbGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgRmxvYXRTaXplIGluc2xvcGVDaGFuZ2Ug
PSBtX2luc2xvcGVQb2ludHNbMV0gLSBtX2luc2xvcGVQb2ludHNbMF07Ci0gICAgICAgIEZsb2F0
U2l6ZSBvdXRzbG9wZUNoYW5nZSA9IG1fb3V0c2xvcGVQb2ludHNbMV0gLSBtX291dHNsb3BlUG9p
bnRzWzBdOworICAgICAgICBHcmFwaGljc1NpemUgaW5zbG9wZUNoYW5nZSA9IG1faW5zbG9wZVBv
aW50c1sxXSAtIG1faW5zbG9wZVBvaW50c1swXTsKKyAgICAgICAgR3JhcGhpY3NTaXplIG91dHNs
b3BlQ2hhbmdlID0gbV9vdXRzbG9wZVBvaW50c1sxXSAtIG1fb3V0c2xvcGVQb2ludHNbMF07CiAK
ICAgICAgICAgZG91YmxlIGluc2xvcGUgPSByYWQyZGVnKGF0YW4yKGluc2xvcGVDaGFuZ2UuaGVp
Z2h0KCksIGluc2xvcGVDaGFuZ2Uud2lkdGgoKSkpOwogICAgICAgICBkb3VibGUgb3V0c2xvcGUg
PSByYWQyZGVnKGF0YW4yKG91dHNsb3BlQ2hhbmdlLmhlaWdodCgpLCBvdXRzbG9wZUNoYW5nZS53
aWR0aCgpKSk7CkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9tYXJrZXIgPSBt
YXJrZXI7CiAgICAgfQogCi0gICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKKyAgICB2b2lkIHVwZGF0ZU91dHNsb3BlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50KQogICAgIHsKICAgICAgICAgbV9vdXRzbG9wZVBvaW50c1swXSA9IG1fb3JpZ2luOwogICAg
ICAgICBtX291dHNsb3BlUG9pbnRzWzFdID0gcG9pbnQ7CkBAIC04OCw3ICs4OCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgdXBkYXRlTWFya2VyRGF0YUZvclBhdGhFbGVtZW50KGNvbnN0IFBhdGhF
bGVtZW50KiBlbGVtZW50KQogICAgIHsKLSAgICAgICAgRmxvYXRQb2ludCogcG9pbnRzID0gZWxl
bWVudC0+cG9pbnRzOworICAgICAgICBHcmFwaGljc1BvaW50KiBwb2ludHMgPSBlbGVtZW50LT5w
b2ludHM7CiAKICAgICAgICAgc3dpdGNoIChlbGVtZW50LT50eXBlKSB7CiAgICAgICAgIGNhc2Ug
UGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgpAQCAtMTA5LDEyICsxMDksMTIgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFBhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgogICAgICAgICAgICAg
dXBkYXRlSW5zbG9wZShwb2ludHNbMF0pOwogICAgICAgICAgICAgbV9vcmlnaW4gPSBtX3N1YnBh
dGhTdGFydDsKLSAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gRmxvYXRQb2ludCgpOworICAg
ICAgICAgICAgbV9zdWJwYXRoU3RhcnQgPSBHcmFwaGljc1BvaW50KCk7CiAgICAgICAgIH0KICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVJbnNsb3BlKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQorICAgIHZvaWQgdXBkYXRlSW5zbG9wZShjb25zdCBHcmFwaGljc1BvaW50JiBwb2lu
dCkKICAgICB7CiAgICAgICAgIG1faW5zbG9wZVBvaW50c1swXSA9IG1fb3JpZ2luOwogICAgICAg
ICBtX2luc2xvcGVQb2ludHNbMV0gPSBwb2ludDsKQEAgLTEyMiwxMCArMTIyLDEwIEBAIHByaXZh
dGU6CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbV9t
YXJrZXI7Ci0gICAgRmxvYXRQb2ludCBtX29yaWdpbjsKLSAgICBGbG9hdFBvaW50IG1fc3VicGF0
aFN0YXJ0OwotICAgIEZsb2F0UG9pbnQgbV9pbnNsb3BlUG9pbnRzWzJdOwotICAgIEZsb2F0UG9p
bnQgbV9vdXRzbG9wZVBvaW50c1syXTsKKyAgICBHcmFwaGljc1BvaW50IG1fb3JpZ2luOworICAg
IEdyYXBoaWNzUG9pbnQgbV9zdWJwYXRoU3RhcnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2luc2xv
cGVQb2ludHNbMl07CisgICAgR3JhcGhpY3NQb2ludCBtX291dHNsb3BlUG9pbnRzWzJdOwogfTsK
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01h
cmtlckxheW91dEluZm8uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDcgKzY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NTdGFydEFuZE1pZE1hcgogICAg
ICsrZWxlbWVudEluZGV4OwogfQogCi1GbG9hdFJlY3QgU1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2Fs
Y3VsYXRlQm91bmRhcmllcyhSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIsIFJl
bmRlclNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFya2Vy
KiBlbmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBQYXRoJiBwYXRoKQorR3JhcGhp
Y3NSZWN0IFNWR01hcmtlckxheW91dEluZm86OmNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlk
TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJva2VX
aWR0aCwgY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBtX2xheW91dC5jbGVhcigpOwogICAgIG1f
bWlkTWFya2VyID0gbWlkTWFya2VyOwpAQCAtODAsMTIgKzgwLDEyIEBAIEZsb2F0UmVjdCBTVkdN
YXJrZXJMYXlvdXRJbmZvOjpjYWxjdWxhdGUKICAgICB9CiAKICAgICBpZiAobV9sYXlvdXQuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFw
aGljc1JlY3QoKTsKIAogICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+OjppdGVyYXRvciBpdCA9IG1f
bGF5b3V0LmJlZ2luKCk7CiAgICAgVmVjdG9yPE1hcmtlckxheW91dD46Oml0ZXJhdG9yIGVuZCA9
IG1fbGF5b3V0LmVuZCgpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICBHcmFwaGljc1Jl
Y3QgYm91bmRzOwogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgTWFya2Vy
TGF5b3V0JiBsYXlvdXQgPSAqaXQ7CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIFNWR01hcmtl
ckxheW91dEluZm86OmRyYXdNYXJrZXJzKFBhCiAgICAgfQogfQogCi12b2lkIFNWR01hcmtlckxh
eW91dEluZm86OmFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtYXJr
ZXIsIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUpCit2b2lkIFNWR01hcmtl
ckxheW91dEluZm86OmFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBt
YXJrZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUpCiB7CiAgICAg
QVNTRVJUKG1hcmtlcik7CiAgICAgbV9sYXlvdXQuYXBwZW5kKE1hcmtlckxheW91dChtYXJrZXIs
IG1hcmtlci0+bWFya2VyVHJhbnNmb3JtYXRpb24ob3JpZ2luLCBhbmdsZSwgbV9zdHJva2VXaWR0
aCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFy
a2VyTGF5b3V0SW5mby5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHTWFya2VyTGF5b3V0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCAr
NDksMTQgQEAgcHVibGljOgogICAgIFNWR01hcmtlckxheW91dEluZm8oKTsKICAgICB+U1ZHTWFy
a2VyTGF5b3V0SW5mbygpOwogCi0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVu
ZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtl
ciogbWlkTWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBz
dHJva2VXaWR0aCwgY29uc3QgUGF0aCYpOworICAgIEdyYXBoaWNzUmVjdCBjYWxjdWxhdGVCb3Vu
ZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtl
ciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIGRyYXdNYXJrZXJz
KFBhaW50SW5mbyYpOwogCiAgICAgLy8gVXNlZCBieSBzdGF0aWMgaW5saW5lIGhlbHBlciBmdW5j
dGlvbnMgaW4gU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAKICAgICBTVkdNYXJrZXJEYXRhJiBtYXJr
ZXJEYXRhKCkgeyByZXR1cm4gbV9tYXJrZXJEYXRhOyB9CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIG1pZE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWlkTWFya2VyOyB9CiAgICAgaW50
JiBlbGVtZW50SW5kZXgoKSB7IHJldHVybiBtX2VsZW1lbnRJbmRleDsgfQotICAgIHZvaWQgYWRk
TGF5b3V0ZWRNYXJrZXIoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqLCBjb25zdCBGbG9hdFBvaW50
JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFkZExheW91dGVkTWFya2VyKFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBh
bmdsZSk7CiAgICAgdm9pZCBjbGVhcigpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBTVkdSZW5kZXJTdXBwb3J0
OjpwcmVwYXJlVG9SZW5kZXJTVgogICAgIGZsb2F0IG9wYWNpdHkgPSBzdHlsZS0+b3BhY2l0eSgp
OwogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFkb3coKTsKICAg
ICBpZiAob3BhY2l0eSA8IDEgfHwgc2hhZG93KSB7Ci0gICAgICAgIEZsb2F0UmVjdCByZXBhaW50
UmVjdCA9IG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAg
R3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0ID0gb2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpOwogCiAgICAgICAgIGlmIChvcGFjaXR5IDwgMSkgewogICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmNsaXAocmVwYWludFJlY3QpOwpAQCAtMTY2LDcgKzE2Niw3IEBAIHZv
aWQgU1ZHUmVuZGVyU3VwcG9ydDo6ZmluaXNoUmVuZGVyU1ZHQ28KICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBj
b250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgc3Ryb2tl
Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KQordm9pZCBTVkdSZW5k
ZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmpl
Y3QqIGNvbnRhaW5lciwgR3JhcGhpY3NSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgR3JhcGhpY3NS
ZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgR3JhcGhpY3NSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gp
CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKGN1cnJlbnQtPmlzU1ZHSGlkZGVuQ29udGFpbmVyKCkpCkBAIC0xODUsNyArMTg1LDcg
QEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQgogICAgIH0KIH0KIAot
Ym9vbCBTVkdSZW5kZXJTdXBwb3J0OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxv
Y2FsVHJhbnNmb3JtLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKK2Jvb2wgU1ZHUmVuZGVy
U3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRyYW5zZm9y
bSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCiB7CiAgICAgaWYgKGxvY2FsVHJhbnNmb3Jt
LmlzSWRlbnRpdHkoKSkKICAgICAgICAgcmV0dXJuIGxvY2FsUmVwYWludFJlY3QuaW50ZXJzZWN0
cyhwYWludEluZm8ucmVjdCk7CkBAIC0yNzIsNyArMjcyLDcgQEAgYm9vbCBTVkdSZW5kZXJTdXBw
b3J0Ojppc092ZXJmbG93SGlkZGVuKAogICAgIHJldHVybiBvYmplY3QtPnN0eWxlKCktPm92ZXJm
bG93WCgpID09IE9ISURERU47CiB9CiAKLXZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0
UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBGbG9h
dFJlY3QmIHJlcGFpbnRSZWN0KQordm9pZCBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBh
aW50UmVjdFdpdGhSZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIEdyYXBoaWNz
UmVjdCYgcmVwYWludFJlY3QpCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CiAKQEAgLTMwNSw3ICsz
MDUsNyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmludGVyc2VjdFJlcGFpbnRSCiAgICAgICAg
IHNoYWRvdy0+YWRqdXN0UmVjdEZvclNoYWRvdyhyZXBhaW50UmVjdCk7CiB9CiAKLWJvb2wgU1ZH
UmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCitib29sIFNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5D
bGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBv
aW50KQogewogICAgIEFTU0VSVChvYmplY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOCArMjksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZs
b2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3Mg
R3JhcGhpY3NSZWN0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBSZW5kZXJCb3hNb2RlbE9i
amVjdDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTUyLDEzICs1MiwxMyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgaXNPdmVyZmxvd0hpZGRlbihjb25zdCBSZW5kZXJPYmplY3QqKTsKIAog
ICAgIC8vIENhbGN1bGF0ZXMgdGhlIHJlcGFpbnRSZWN0IGluIGNvbWJpbmF0aW9uIHdpdGggZmls
dGVyLCBjbGlwcGVyIGFuZCBtYXNrZXIgaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgc3RhdGlj
IHZvaWQgaW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVj
dCosIEZsb2F0UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIGludGVyc2VjdFJlcGFpbnRSZWN0V2l0
aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3QqLCBHcmFwaGljc1JlY3QmKTsKIAogICAgIC8v
IERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc2VkIHBvaW50IGxpZXMgaW4gYSBjbGlwcGluZyBh
cmVhCi0gICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJlYShSZW5kZXJPYmplY3QqLCBj
b25zdCBGbG9hdFBvaW50Jik7CisgICAgc3RhdGljIGJvb2wgcG9pbnRJbkNsaXBwaW5nQXJlYShS
ZW5kZXJPYmplY3QqLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBj
b21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5l
ciwgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCwgRmxvYXRSZWN0JiBzdHJva2VCb3VuZGlu
Z0JveCwgRmxvYXRSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOwotICAgIHN0YXRpYyBib29sIHBh
aW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIGxvY2FsUmVwYWlu
dFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50
SW5mbyYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNv
bnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5n
Qm94LCBHcmFwaGljc1JlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBHcmFwaGljc1JlY3QmIHJlcGFp
bnRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIGJvb2wgcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFp
bnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJik7CiAKICAgICAvLyBJ
bXBvcnRhbnQgZnVuY3Rpb25zIHVzZWQgYnkgbmVhcmx5IGFsbCBTVkcgcmVuZGVyZXJzIGNlbnRy
YWxpemluZyBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9ucyAvIHJlcGFpbnQgcmVjdCBjYWxjdWxh
dGlvbnMKICAgICBzdGF0aWMgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJPYmplY3QqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEz
MSw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlSWZOb3REZWZhdWx0KFRleHRTdHJlYW0KICAgICAgICAg
d3JpdGVOYW1lVmFsdWVQYWlyKHRzLCBuYW1lLCB2YWx1ZSk7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UmVjdCAmcikKK1RleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzUmVjdCAmcikKIHsKICAg
ICB0cyA8PCAiYXQgKCI7IAogICAgIGlmIChoYXNGcmFjdGlvbnMoci54KCkpKSAKQEAgLTUzNCw3
ICs1MzQsNyBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhCiAgICAg
ICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgInByaW1pdGl2ZVVuaXRzIiwgZmlsdGVyLT5wcmlt
aXRpdmVVbml0cygpKTsKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcg
YSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgotICAg
ICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgZHVtbXlSZWN0
OwogICAgICAgICBSZWZQdHI8U1ZHRmlsdGVyPiBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3Jl
YXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCB0
cnVlKTsKICAgICAgICAgaWYgKFJlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyID0gZmls
dGVyLT5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CiAgICAgICAgICAgICBp
ZiAoRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQpAQCAt
NTgwLDggKzU4MCw4IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWEK
ICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpOwogICAgICAgICB3cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyh0cywg
YXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmlidXRlcy5ncmFkaWVudFRyYW5zZm9ybSgp
LCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKIAotICAgICAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQ7Ci0gICAgICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQgc3RhcnRQb2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludDsKICAgICAg
ICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhhdHRyaWJ1
dGVzLCBzdGFydFBvaW50LCBlbmRQb2ludCk7CiAKICAgICAgICAgdHMgPDwgIiBbc3RhcnQ9IiA8
PCBzdGFydFBvaW50IDw8ICJdIFtlbmQ9IiA8PCBlbmRQb2ludCA8PCAiXVxuIjsKQEAgLTU5Niw4
ICs1OTYsOCBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhCiAgICAg
ICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhhdHRy
aWJ1dGVzKTsKICAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXModHMsIGF0dHJp
YnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBmb2NhbFBv
aW50OwotICAgICAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50OworICAgICAgICBHcmFwaGljc1Bv
aW50IGZvY2FsUG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgY2VudGVyUG9pbnQ7CiAgICAg
ICAgIGZsb2F0IHJhZGl1czsKICAgICAgICAgcmFkaWFsR3JhZGllbnRFbGVtZW50LT5jYWxjdWxh
dGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhhdHRyaWJ1dGVzLCBmb2NhbFBvaW50LCBjZW50
ZXJQb2ludCwgcmFkaXVzKTsKIApAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgd3JpdGVTVkdJbmxp
bmVUZXh0KFRleHRTdHJlYW0mIHRzLCAKICAgICB3cml0ZVN0YW5kYXJkUHJlZml4KHRzLCB0ZXh0
LCBpbmRlbnQpOwogCiAgICAgLy8gV2h5IG5vdCBqdXN0IGxpbmVzQm91bmRpbmdCb3goKT8KLSAg
ICB0cyA8PCAiICIgPDwgRmxvYXRSZWN0KHRleHQuZmlyc3RSdW5PcmlnaW4oKSwgdGV4dC5saW5l
c0JvdW5kaW5nQm94KCkuc2l6ZSgpKSA8PCAiXG4iOworICAgIHRzIDw8ICIgIiA8PCBHcmFwaGlj
c1JlY3QodGV4dC5maXJzdFJ1bk9yaWdpbigpLCB0ZXh0LmxpbmVzQm91bmRpbmdCb3goKS5zaXpl
KCkpIDw8ICJcbiI7CiAgICAgd3JpdGVSZXNvdXJjZXModHMsIHRleHQsIGluZGVudCk7CiAgICAg
d3JpdGVTVkdJbmxpbmVUZXh0Qm94ZXModHMsIHRleHQsIGluZGVudCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuaAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0
U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNzIEdyYXBoaWNzU2l6ZTsKIGNsYXNzIE5v
ZGU7CiBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFJlbmRlckltYWdlOwpAQCAtNjEsNyArNjEs
NyBAQCB2b2lkIHdyaXRlUmVzb3VyY2VzKFRleHRTdHJlYW0mLCBjb25zdCBSCiAvLyBoZWxwZXIg
b3BlcmF0b3JzIGRlZmluZWQgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0aGUgcmVu
ZGVyIHRyZWUuCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0
IENvbG9yJik7Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9h
dFJlY3QmKTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBo
aWNzUmVjdCYpOwogCiAvLyBoZWxwZXIgb3BlcmF0b3JzIHNwZWNpZmljIHRvIGR1bXBpbmcgdGhl
IHJlbmRlciB0cmVlLiB0aGVzZSBhcmUgdXNlZCBpbiB2YXJpb3VzIGNsYXNzZXMgdG8gZHVtcCB0
aGUgcmVuZGVyIHRyZWUKIC8vIHRoZXNlIGNvdWxkIGJlIGRlZmluZWQgaW4gc2VwYXJhdGUgbmFt
ZXNwYWNlIHRvIGF2b2lkIG1hdGNoaW5nIHRoZXNlIGdlbmVyaWMgc2lnbmF0dXJlcyB1bmludGVu
dGlvbmFsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxp
bmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jv
b3RJbmxpbmVCb3guaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbXB1dGVQZXJDaGFyYWN0ZXJMYXlvdXRJbmZvcm1hdGlv
bigpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEdy
YXBoaWNzUmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQogCiAgICAg
SW5saW5lQm94KiBjbG9zZXN0TGVhZkNoaWxkRm9yUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCIKIAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCkBAIC00Miw5ICs0Miw5IEBAIFBhc3NS
ZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50KGRvY3VtZW50KSk7CiB9CiAKLUZsb2F0
U2l6ZSBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudDo6Y29udGFpbmVyVHJhbnNsYXRpb24o
KSBjb25zdAorR3JhcGhpY3NTaXplIFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Ojpjb250
YWluZXJUcmFuc2xhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShtX3hPZmZz
ZXQudmFsdWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CisgICAgcmV0dXJuIEdyYXBo
aWNzU2l6ZShtX3hPZmZzZXQudmFsdWUodGhpcyksIG1feU9mZnNldC52YWx1ZSh0aGlzKSk7CiB9
CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNs
b25lRWxlbWVudFdpdGhvdXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50
cy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
U2hhZG93VHJlZUVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNz
U2l6ZTsKIGNsYXNzIFNWR1VzZUVsZW1lbnQ7CiAKIGNsYXNzIFNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50IDogcHVibGljIFNWR0dFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7
CiAKLSAgICBGbG9hdFNpemUgY29udGFpbmVyVHJhbnNsYXRpb24oKSBjb25zdDsKKyAgICBHcmFw
aGljc1NpemUgY29udGFpbmVyVHJhbnNsYXRpb24oKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRh
aW5lck9mZnNldChjb25zdCBTVkdMZW5ndGgmIHgsIGNvbnN0IFNWR0xlbmd0aCYgeSkKICAgICB7
CiAgICAgICAgIG1feE9mZnNldCA9IHg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTY1LDcgKzU2NSw3IEBAIHZvaWQgU1ZHVGV4dExheW91dEVuZ2lu
ZTo6bGF5b3V0VGV4dE9uTGkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Ym9vbCBvayA9IGZhbHNlOwotICAgICAgICAgICAgRmxvYXRQb2ludCBwb2ludCA9IG1fdGV4dFBh
dGgucG9pbnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwgb2spOworICAgICAgICAgICAgR3JhcGhp
Y3NQb2ludCBwb2ludCA9IG1fdGV4dFBhdGgucG9pbnRBdExlbmd0aCh0ZXh0UGF0aE9mZnNldCwg
b2spOwogICAgICAgICAgICAgQVNTRVJUKG9rKTsKIAogICAgICAgICAgICAgeCA9IHBvaW50Lngo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNyArMzIzLDcgQEAgc3RydWN0IFN0
YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEgOiBTVgogICAgIH0KIAogICAgIHVuc2lnbmVkIHBv
c2l0aW9uOwotICAgIEZsb2F0UG9pbnQgc3RhcnRQb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50
IHN0YXJ0UG9zaXRpb247CiB9OwogCiBib29sIFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9m
Q2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50KSBjb25zdApAQCAtMzM1LDcgKzMzNSw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpz
dGFydFBvc2l0aW9uT2ZDaGFyYWMKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBkYXRhLT5zdGFydFBvc2l0
aW9uID0gRmxvYXRQb2ludChmcmFnbWVudC54LCBmcmFnbWVudC55KTsKKyAgICBkYXRhLT5zdGFy
dFBvc2l0aW9uID0gR3JhcGhpY3NQb2ludChmcmFnbWVudC54LCBmcmFnbWVudC55KTsKIAogICAg
IGlmIChzdGFydFBvc2l0aW9uKSB7CiAgICAgICAgIFNWR1RleHRNZXRyaWNzIG1ldHJpY3MgPSBT
VkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHF1ZXJ5RGF0YS0+dGV4dFJlbmRl
cmVyLCBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQsIHN0YXJ0UG9zaXRpb24pOwpAQCAtMzU0LDEw
ICszNTQsMTAgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhYwogICAg
IHJldHVybiB0cnVlOwogfQogCi1GbG9hdFBvaW50IFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlv
bk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdU
ZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29u
c3QKIHsKICAgICBpZiAobV90ZXh0Qm94ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxv
YXRQb2ludCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2ludCgpOwogCiAgICAgU3RhcnRQ
b3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSBkYXRhKHBvc2l0aW9uKTsKICAgICBleGVjdXRlUXVlcnko
JmRhdGEsICZTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKTsK
QEAgLTM3Miw3ICszNzIsNyBAQCBzdHJ1Y3QgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEgOiBT
VkdUCiAgICAgfQogCiAgICAgdW5zaWduZWQgcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludCBlbmRQ
b3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvc2l0aW9uOwogfTsKIAogYm9vbCBTVkdU
ZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEs
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CkBAIC0zODQsNyArMzg0LDcg
QEAgYm9vbCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZQogICAgIGlmICghbWFw
U3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdt
ZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGRhdGEtPmVuZFBvc2l0aW9uID0gRmxvYXRQb2ludChmcmFnbWVudC54LCBmcmFnbWVu
dC55KTsKKyAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQoZnJhZ21lbnQueCwg
ZnJhZ21lbnQueSk7CiAKICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJp
Y3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21l
bnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0aW9uICsgMSk7CiAgICAgaWYgKHF1ZXJ5RGF0
YS0+aXNWZXJ0aWNhbFRleHQpCkBAIC00MDEsMTAgKzQwMSwxMCBAQCBib29sIFNWR1RleHRRdWVy
eTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0UG9p
bnQgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9u
KSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0
ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzUG9pbnQoKTsKIAogICAgIEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhIGRhdGEocG9zaXRp
b24pOwogICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25P
ZkNoYXJhY3RlckNhbGxiYWNrKTsKQEAgLTQ2MiwxNSArNDYyLDE1IEBAIHN0cnVjdCBFeHRlbnRP
ZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0UXUKICAgICB9CiAKICAgICB1bnNpZ25lZCBwb3NpdGlv
bjsKLSAgICBGbG9hdFJlY3QgZXh0ZW50OworICAgIEdyYXBoaWNzUmVjdCBleHRlbnQ7CiB9Owog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVy
eTo6RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQg
c3RhcnRQb3NpdGlvbiwgRmxvYXRSZWN0JiBleHRlbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2Fs
Y3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBjb25z
dCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgR3JhcGhpY3NS
ZWN0JiBleHRlbnQpCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHF1ZXJ5RGF0YS0+dGV4
dFJlbmRlcmVyLT5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwog
Ci0gICAgZXh0ZW50LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQu
eSAtIHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5zY2FsZWRGb250KCkuZm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudCgpIC8gc2NhbGluZ0ZhY3RvcikpOworICAgIGV4dGVudC5zZXRMb2NhdGlvbihH
cmFwaGljc1BvaW50KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBxdWVyeURhdGEtPnRleHRSZW5k
ZXJlci0+c2NhbGVkRm9udCgpLmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSAvIHNjYWxpbmdG
YWN0b3IpKTsKIAogICAgIGlmIChzdGFydFBvc2l0aW9uKSB7CiAgICAgICAgIFNWR1RleHRNZXRy
aWNzIG1ldHJpY3MgPSBTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKHF1ZXJ5
RGF0YS0+dGV4dFJlbmRlcmVyLCBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQsIHN0YXJ0UG9zaXRp
b24pOwpAQCAtNDgxLDcgKzQ4MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlw
aEJvdW5kYXIKICAgICB9CiAKICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1l
dHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJh
Z21lbnQuY2hhcmFjdGVyT2Zmc2V0ICsgc3RhcnRQb3NpdGlvbiwgMSk7Ci0gICAgZXh0ZW50LnNl
dFNpemUoRmxvYXRTaXplKG1ldHJpY3Mud2lkdGgoKSwgbWV0cmljcy5oZWlnaHQoKSkpOworICAg
IGV4dGVudC5zZXRTaXplKEdyYXBoaWNzU2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3MuaGVp
Z2h0KCkpKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICBm
cmFnbWVudC5idWlsZEZyYWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtLCBTVkdUZXh0
RnJhZ21lbnQ6OlRyYW5zZm9ybUlnbm9yaW5nVGV4dExlbmd0aCk7CkBAIC01MDQsMTAgKzUwNCwx
MCBAQCBib29sIFNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLUZsb2F0UmVjdCBTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyKHVu
c2lnbmVkIHBvc2l0aW9uKSBjb25zdAorR3JhcGhpY3NSZWN0IFNWR1RleHRRdWVyeTo6ZXh0ZW50
T2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJv
eGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBFeHRlbnRPZkNoYXJhY3RlckRhdGEgZGF0YShwb3Np
dGlvbik7CiAgICAgZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNo
YXJhY3RlckNhbGxiYWNrKTsKQEAgLTUxNiwxOSArNTE2LDE5IEBAIEZsb2F0UmVjdCBTVkdUZXh0
UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGUKIAogLy8gY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbigp
IGltcGxlbWVudGF0aW9uCiBzdHJ1Y3QgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEgOiBT
VkdUZXh0UXVlcnk6OkRhdGEgewotICAgIENoYXJhY3Rlck51bWJlckF0UG9zaXRpb25EYXRhKGNv
bnN0IEZsb2F0UG9pbnQmIHF1ZXJ5UG9zaXRpb24pCisgICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3Np
dGlvbkRhdGEoY29uc3QgR3JhcGhpY3NQb2ludCYgcXVlcnlQb3NpdGlvbikKICAgICAgICAgOiBw
b3NpdGlvbihxdWVyeVBvc2l0aW9uKQogICAgIHsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IHBv
c2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQgcG9zaXRpb247CiB9OwogCiBib29sIFNWR1RleHRR
dWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKIHsKICAgICBDaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PENoYXJhY3Rlck51bWJlckF0
UG9zaXRpb25EYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIEZsb2F0UmVjdCBleHRlbnQ7CisgICAg
R3JhcGhpY3NSZWN0IGV4dGVudDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21l
bnQubGVuZ3RoOyArK2kpIHsKICAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9j
ZXNzZWRDaGFyYWN0ZXJzICsgaTsKICAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbiArIDE7CkBAIC01NDUsNyArNTQ1LDcgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rl
ck51bWJlckF0UG9zaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFNWR1RleHRRdWVyeTo6
Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikgY29u
c3QKK2ludCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24oY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIC0xOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRRdWVyeS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIx
LDcgQEAKICNkZWZpbmUgU1ZHVGV4dFF1ZXJ5X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZH
VGV4dEZyYWdtZW50LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOCwxMSArMzgs
MTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhcmFjdGVycygpIGNvbnN0Owog
ICAgIGZsb2F0IHRleHRMZW5ndGgoKSBjb25zdDsKICAgICBmbG9hdCBzdWJTdHJpbmdMZW5ndGgo
dW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKLSAgICBGbG9h
dFBvaW50IHN0YXJ0UG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7
Ci0gICAgRmxvYXRQb2ludCBlbmRQb3NpdGlvbk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9u
KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9zaXRpb25PZkNoYXJhY3Rlcih1bnNp
Z25lZCBwb3NpdGlvbikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb3NpdGlvbk9mQ2hh
cmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKICAgICBmbG9hdCByb3RhdGlvbk9mQ2hh
cmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgZXh0ZW50T2ZD
aGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIGludCBjaGFyYWN0ZXJOdW1i
ZXJBdFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qg
ZXh0ZW50T2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIGludCBjaGFy
YWN0ZXJOdW1iZXJBdFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAg
IC8vIFB1YmxpYyBoZWxwZXIgc3RydWN0LiBQcml2YXRlIGNsYXNzZXMgaW4gU1ZHVGV4dFF1ZXJ5
IGluaGVyaXQgZnJvbSBpdC4KICAgICBzdHJ1Y3QgRGF0YTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4
MSw3IEBAIGZsb2F0IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpmbG9hdFcKICAgICByZXR1
cm4gaXQucnVuV2lkdGhTb0ZhcigpOwogfQogIAotdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKK3ZvaWQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNv
bnN0CiB7CiAgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKICAgICBTVkdGb250
RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CkBAIC0xMTQsMTEgKzExNCwxMSBAQCB2
b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHCiAgICAgZmxvYXQgc2NhbGUg
PSBzY2FsZUVtVG9Vbml0cyhmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBmb250RmFj
ZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiAgICAgQVNTRVJUKGFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UpOwogCi0gICAgRmxvYXRQb2ludCBnbHlwaE9yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IGds
eXBoT3JpZ2luOwogICAgIGdseXBoT3JpZ2luLnNldFgoc3ZnRm9udERhdGEtPmhvcml6b250YWxP
cmlnaW5YKCkgKiBzY2FsZSk7CiAgICAgZ2x5cGhPcmlnaW4uc2V0WShzdmdGb250RGF0YS0+aG9y
aXpvbnRhbE9yaWdpblkoKSAqIHNjYWxlKTsKIAotICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50
ID0gcG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9pbnQgPSBwb2ludDsKICAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdN
b2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxs
TW9kZTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CiAgICAgICAg
IEdseXBoIGdseXBoID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChmcm9tICsgaSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJl
bmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2Jq
ZWN0OyB9CiAKICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29u
c3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0
ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VM
ZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVy
JiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0
bywgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnND
b25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0OwogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3
ICs1Niw3IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmlidXRlcyB7CiAgICAgU1ZHTGVuZ3RoIHkoKSBj
b25zdCB7IHJldHVybiBtX3k7IH0KICAgICBTVkdMZW5ndGggd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9CiAgICAgU1ZHTGVuZ3RoIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVp
Z2h0OyB9Ci0gICAgRmxvYXRSZWN0IHZpZXdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCb3g7
IH0KKyAgICBHcmFwaGljc1JlY3Qgdmlld0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld0JveDsg
fQogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gcHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsgfQogICAgIGJvb2wgYm91bmRpbmdCb3hN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGU7IH0KICAgICBib29sIGJvdW5k
aW5nQm94TW9kZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9kZUNvbnRl
bnQ7IH0KQEAgLTg3LDcgKzg3LDcgQEAgc3RydWN0IFBhdHRlcm5BdHRyaWJ1dGVzIHsKICAgICAg
ICAgbV9oZWlnaHRTZXQgPSB0cnVlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFZpZXdCb3go
Y29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKKyAgICB2b2lkIHNldFZpZXdCb3goY29uc3QgR3JhcGhp
Y3NSZWN0JiB2YWx1ZSkKICAgICB7CiAgICAgICAgIG1fdmlld0JveCA9IHZhbHVlOwogICAgICAg
ICBtX3ZpZXdCb3hTZXQgPSB0cnVlOwpAQCAtMTQwLDcgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAg
U1ZHTGVuZ3RoIG1feTsKICAgICBTVkdMZW5ndGggbV93aWR0aDsKICAgICBTVkdMZW5ndGggbV9o
ZWlnaHQ7Ci0gICAgRmxvYXRSZWN0IG1fdmlld0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV92aWV3
Qm94OwogICAgIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOwog
ICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7CiAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZUNv
bnRlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIFBh
dGggU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFuaW1hdGlvblAKICAgICByZXR1cm4gUGF0aCgp
OwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVBvaW50KGNvbnN0IFN0cmluZyYgcywgRmxvYXRQb2lu
dCYgcG9pbnQpCitzdGF0aWMgYm9vbCBwYXJzZVBvaW50KGNvbnN0IFN0cmluZyYgcywgR3JhcGhp
Y3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBT
dHJpbmcmIHMsIAogICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcG9pbnQgPSBGbG9hdFBvaW50KHgsIHkpOworICAgIHBv
aW50ID0gR3JhcGhpY3NQb2ludCh4LCB5KTsKICAgICAKICAgICAvLyBkaXNhbGxvdyBhbnl0aGlu
ZyBleGNlcHQgc3BhY2VzIGF0IHRoZSBlbmQKICAgICByZXR1cm4gIXNraXBPcHRpb25hbFNwYWNl
cyhjdXIsIGVuZCk7CkBAIC0xODcsOSArMTg3LDkgQEAgYm9vbCBTVkdBbmltYXRlTW90aW9uRWxl
bWVudDo6Y2FsY3VsYXRlRgogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBi
eVN0cmluZykKIHsKICAgICBwYXJzZVBvaW50KGZyb21TdHJpbmcsIG1fZnJvbVBvaW50KTsKLSAg
ICBGbG9hdFBvaW50IGJ5UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBieVBvaW50OwogICAgIHBh
cnNlUG9pbnQoYnlTdHJpbmcsIGJ5UG9pbnQpOwotICAgIG1fdG9Qb2ludCA9IEZsb2F0UG9pbnQo
bV9mcm9tUG9pbnQueCgpICsgYnlQb2ludC54KCksIG1fZnJvbVBvaW50LnkoKSArIGJ5UG9pbnQu
eSgpKTsKKyAgICBtX3RvUG9pbnQgPSBHcmFwaGljc1BvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5
UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55KCkgKyBieVBvaW50LnkoKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50
OjpjYWxjdWxhdGVBCiAgICAgICAgIFBhdGggcGF0aCA9IGFuaW1hdGlvblBhdGgoKTsKICAgICAg
ICAgZmxvYXQgcG9zaXRpb25PblBhdGggPSBwYXRoLmxlbmd0aCgpICogcGVyY2VudGFnZTsKICAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IHBhdGgucG9pbnRB
dExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2spOworICAgICAgICBHcmFwaGljc1BvaW50IHBvc2l0
aW9uID0gcGF0aC5wb2ludEF0TGVuZ3RoKHBvc2l0aW9uT25QYXRoLCBvayk7CiAgICAgICAgIGlm
IChvaykgewogICAgICAgICAgICAgdHJhbnNmb3JtLT50cmFuc2xhdGUocG9zaXRpb24ueCgpLCBw
b3NpdGlvbi55KCkpOwogICAgICAgICAgICAgUm90YXRlTW9kZSByb3RhdGVNb2RlID0gdGhpcy0+
cm90YXRlTW9kZSgpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6OmNhbGN1bGF0ZUEKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IEZsb2F0U2l6ZSBkaWZmID0gbV90b1BvaW50IC0gbV9mcm9tUG9pbnQ7CisgICAgR3JhcGhpY3NT
aXplIGRpZmYgPSBtX3RvUG9pbnQgLSBtX2Zyb21Qb2ludDsKICAgICB0cmFuc2Zvcm0tPnRyYW5z
bGF0ZShkaWZmLndpZHRoKCkgKiBwZXJjZW50YWdlICsgbV9mcm9tUG9pbnQueCgpLCBkaWZmLmhl
aWdodCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50LnkoKSk7CiB9CiAgICAgCkBAIC0yNjUs
MTMgKzI2NSwxMyBAQCB2b2lkIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBseVJlc3VsCiAK
IGZsb2F0IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVEaXN0YW5jZShjb25zdCBT
dHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCiB7Ci0gICAgRmxvYXRQ
b2ludCBmcm9tOwotICAgIEZsb2F0UG9pbnQgdG87CisgICAgR3JhcGhpY3NQb2ludCBmcm9tOwor
ICAgIEdyYXBoaWNzUG9pbnQgdG87CiAgICAgaWYgKCFwYXJzZVBvaW50KGZyb21TdHJpbmcsIGZy
b20pKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFwYXJzZVBvaW50KHRvU3RyaW5nLCB0
bykpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBGbG9hdFNpemUgZGlmZiA9IHRvIC0gZnJvbTsK
KyAgICBHcmFwaGljc1NpemUgZGlmZiA9IHRvIC0gZnJvbTsKICAgICByZXR1cm4gc3FydGYoZGlm
Zi53aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDEzIEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICBSb3RhdGVNb2RlIHJvdGF0ZU1vZGUoKSBjb25zdDsKIAotICAgIEZsb2F0
U2l6ZSBtX2FuaW1hdGVkVHJhbnNsYXRpb247CisgICAgR3JhcGhpY3NTaXplIG1fYW5pbWF0ZWRU
cmFuc2xhdGlvbjsKICAgICBmbG9hdCBtX2FuaW1hdGVkQW5nbGU7CiAKICAgICAvLyBOb3RlOiB3
ZSBkbyBub3Qgc3VwcG9ydCBwZXJjZW50YWdlIHZhbHVlcyBmb3IgdG8vZnJvbSBjb29yZHMgYXMg
dGhlIHNwZWMgaW1wbGllcyB3ZSBzaG91bGQgKG9wZXJhIGRvZXNuJ3QgZWl0aGVyKQotICAgIEZs
b2F0UG9pbnQgbV9mcm9tUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2Zyb21Qb2ludDsKICAg
ICBmbG9hdCBtX2Zyb21BbmdsZTsKLSAgICBGbG9hdFBvaW50IG1fdG9Qb2ludDsKKyAgICBHcmFw
aGljc1BvaW50IG1fdG9Qb2ludDsKICAgICBmbG9hdCBtX3RvQW5nbGU7CiAKICAgICB1bnNpZ25l
ZCBtX2Jhc2VJbmRleEluVHJhbnNmb3JtTGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTEsMTMgKzI1MSwxMyBAQCBmbG9hdCBTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6Y2FsY3VsCiAgICAgaWYgKCF0by5pc1ZhbGlkKCkgfHwgZnJvbS50eXBlKCkgIT0g
dG8udHlwZSgpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHRvLnR5cGUoKSA9PSBTVkdU
cmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJBTlNMQVRFKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBk
aWZmID0gdG8udHJhbnNsYXRlKCkgLSBmcm9tLnRyYW5zbGF0ZSgpOworICAgICAgICBHcmFwaGlj
c1NpemUgZGlmZiA9IHRvLnRyYW5zbGF0ZSgpIC0gZnJvbS50cmFuc2xhdGUoKTsKICAgICAgICAg
cmV0dXJuIHNxcnRmKGRpZmYud2lkdGgoKSAqIGRpZmYud2lkdGgoKSArIGRpZmYuaGVpZ2h0KCkg
KiBkaWZmLmhlaWdodCgpKTsKICAgICB9CiAgICAgaWYgKHRvLnR5cGUoKSA9PSBTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFKQogICAgICAgICByZXR1cm4gZmFic2YodG8uYW5nbGUo
KSAtIGZyb20uYW5nbGUoKSk7CiAgICAgaWYgKHRvLnR5cGUoKSA9PSBTVkdUcmFuc2Zvcm06OlNW
R19UUkFOU0ZPUk1fU0NBTEUpIHsKLSAgICAgICAgRmxvYXRTaXplIGRpZmYgPSB0by5zY2FsZSgp
IC0gZnJvbS5zY2FsZSgpOworICAgICAgICBHcmFwaGljc1NpemUgZGlmZiA9IHRvLnNjYWxlKCkg
LSBmcm9tLnNjYWxlKCk7CiAgICAgICAgIHJldHVybiBzcXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZm
LndpZHRoKCkgKyBkaWZmLmhlaWdodCgpICogZGlmZi5oZWlnaHQoKSk7CiAgICAgfQogICAgIHJl
dHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBvaW50TGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUG9pbnRMaXN0
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQ
b2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgU1ZHQW5p
bWF0ZWRQb2ludExpc3RBbmltYXRvcjo6Y2FsY3UKICAgICBpZiAoIWl0ZW1Db3VudCB8fCBpdGVt
Q291bnQgIT0gdG9Qb2ludExpc3Quc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yICh1
bnNpZ25lZCBuID0gMDsgbiA8IGl0ZW1Db3VudDsgKytuKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQm
IHRvID0gdG9Qb2ludExpc3QuYXQobik7CisgICAgICAgIEdyYXBoaWNzUG9pbnQmIHRvID0gdG9Q
b2ludExpc3QuYXQobik7CiAgICAgICAgIHRvICs9IGZyb21Qb2ludExpc3QuYXQobik7CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgU1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OlNWR0Fu
aW1hdGVkUmVjdAogCiBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRSZWN0
QW5pbWF0b3I6OmNvbnN0cnVjdEZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0g
ICAgT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gYW5pbWF0ZWRUeXBlID0gU1ZHQW5pbWF0ZWRUeXBl
OjpjcmVhdGVSZWN0KG5ldyBGbG9hdFJlY3QpOworICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+
IGFuaW1hdGVkVHlwZSA9IFNWR0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChuZXcgR3JhcGhpY3NS
ZWN0KTsKICAgICBwYXJzZVJlY3Qoc3RyaW5nLCBhbmltYXRlZFR5cGUtPnJlY3QoKSk7CiAgICAg
cmV0dXJuIGFuaW1hdGVkVHlwZS5yZWxlYXNlKCk7CiB9CkBAIC02NCwxNyArNjQsMTcgQEAgdm9p
ZCBTVkdBbmltYXRlZFJlY3RBbmltYXRvcjo6Y2FsY3VsYXRlQQogICAgIFNWR0FuaW1hdGVFbGVt
ZW50KiBhbmltYXRpb25FbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnQqPiht
X2FuaW1hdGlvbkVsZW1lbnQpOwogICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IGFu
aW1hdGlvbkVsZW1lbnQtPmFuaW1hdGlvbk1vZGUoKTsKICAgICAvLyBUbyBhbmltYXRpb24gdXNl
cyBjb250cmlidXRpb25zIGZyb20gdGhlIGxvd2VyIHByaW9yaXR5IGFuaW1hdGlvbnMgYXMgdGhl
IGJhc2UgdmFsdWUuCi0gICAgRmxvYXRSZWN0JiBhbmltYXRlZFJlY3QgPSBhbmltYXRlZC0+cmVj
dCgpOworICAgIEdyYXBoaWNzUmVjdCYgYW5pbWF0ZWRSZWN0ID0gYW5pbWF0ZWQtPnJlY3QoKTsK
ICAgICBpZiAoYW5pbWF0aW9uTW9kZSA9PSBUb0FuaW1hdGlvbikKICAgICAgICAgZnJvbS0+cmVj
dCgpID0gYW5pbWF0ZWRSZWN0OwogICAgIAotICAgIGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3Qg
PSBmcm9tLT5yZWN0KCk7Ci0gICAgY29uc3QgRmxvYXRSZWN0JiB0b1JlY3QgPSB0by0+cmVjdCgp
OwotICAgIEZsb2F0UmVjdCBuZXdSZWN0OyAgICAKKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIGZy
b21SZWN0ID0gZnJvbS0+cmVjdCgpOworICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgdG9SZWN0ID0g
dG8tPnJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgbmV3UmVjdDsgICAgCiAgICAgaWYgKGFuaW1h
dGlvbkVsZW1lbnQtPmNhbGNNb2RlKCkgPT0gQ2FsY01vZGVEaXNjcmV0ZSkKICAgICAgICAgbmV3
UmVjdCA9IHBlcmNlbnRhZ2UgPCAwLjUgPyBmcm9tUmVjdCA6IHRvUmVjdDsKICAgICBlbHNlCi0g
ICAgICAgIG5ld1JlY3QgPSBGbG9hdFJlY3QoKHRvUmVjdC54KCkgLSBmcm9tUmVjdC54KCkpICog
cGVyY2VudGFnZSArIGZyb21SZWN0LngoKSwKKyAgICAgICAgbmV3UmVjdCA9IEdyYXBoaWNzUmVj
dCgodG9SZWN0LngoKSAtIGZyb21SZWN0LngoKSkgKiBwZXJjZW50YWdlICsgZnJvbVJlY3QueCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b1JlY3QueSgpIC0gZnJvbVJlY3QueSgp
KSAqIHBlcmNlbnRhZ2UgKyBmcm9tUmVjdC55KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHRvUmVjdC53aWR0aCgpIC0gZnJvbVJlY3Qud2lkdGgoKSkgKiBwZXJjZW50YWdlICsgZnJv
bVJlY3Qud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9SZWN0LmhlaWdo
dCgpIC0gZnJvbVJlY3QuaGVpZ2h0KCkpICogcGVyY2VudGFnZSArIGZyb21SZWN0LmhlaWdodCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0LmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxMSArMjgsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFNW
R0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmPEZsb2F0UmVjdD4gU1ZHQW5pbWF0ZWRSZWN0OwordHlw
ZWRlZiBTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjxHcmFwaGljc1JlY3Q+IFNWR0FuaW1hdGVk
UmVjdDsKIAogLy8gSGVscGVyIG1hY3JvcyB0byBkZWNsYXJlL2RlZmluZSBhIFNWR0FuaW1hdGVk
UmVjdCBvYmplY3QKICNkZWZpbmUgREVDTEFSRV9BTklNQVRFRF9SRUNUKFVwcGVyUHJvcGVydHks
IExvd2VyUHJvcGVydHkpIFwKLURFQ0xBUkVfQU5JTUFURURfUFJPUEVSVFkoU1ZHQW5pbWF0ZWRS
ZWN0LCBGbG9hdFJlY3QsIFVwcGVyUHJvcGVydHksIExvd2VyUHJvcGVydHkpCitERUNMQVJFX0FO
SU1BVEVEX1BST1BFUlRZKFNWR0FuaW1hdGVkUmVjdCwgR3JhcGhpY3NSZWN0LCBVcHBlclByb3Bl
cnR5LCBMb3dlclByb3BlcnR5KQogCiAjZGVmaW5lIERFRklORV9BTklNQVRFRF9SRUNUKE93bmVy
VHlwZSwgRE9NQXR0cmlidXRlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCiBERUZJ
TkVfQU5JTUFURURfUFJPUEVSVFkoQW5pbWF0ZWRSZWN0LCBPd25lclR5cGUsIERPTUF0dHJpYnV0
ZSwgRE9NQXR0cmlidXRlLmxvY2FsTmFtZSgpLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5
KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4mIGZyb21WYWx1ZSwgT3duUHRyPFNW
R0FuaW1hdGVkVHlwZT4mIHRvVmFsdWUsIE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiBhbmltYXRl
ZFZhbHVlKTsKICAgICB2aXJ0dWFsIGZsb2F0IGNhbGN1bGF0ZURpc3RhbmNlKGNvbnN0IFN0cmlu
ZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7CiAKLSAgICBzdGF0aWMgYm9v
bCBwYXJzZVNWR1JlY3QoY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7CisgICAgc3RhdGljIGJv
b2wgcGFyc2VTVkdSZWN0KGNvbnN0IFN0cmluZyYsIEdyYXBoaWNzUmVjdCYpOwogfTsKICNlbmRp
ZiAvLyBFTkFCTEUoU1ZHX0FOSU1BVElPTikKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkVHlwZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpZiBF
TkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0FOSU1BVElPTikKICNpbmNsdWRlICJTVkdBbmltYXRl
ZFR5cGUuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCiAjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNs
dWRlICJTVkdMZW5ndGguaCIKQEAgLTE4OSw3ICsxODksNyBAQCBQYXNzT3duUHRyPFNWR0FuaW1h
dGVkVHlwZT4gU1ZHQW5pbWF0ZWRUCiAgICAgcmV0dXJuIGFuaW1hdGVkVHlwZS5yZWxlYXNlKCk7
CiB9CiAKLVBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0
ZVJlY3QoRmxvYXRSZWN0KiByZWN0KQorUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0Fu
aW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChHcmFwaGljc1JlY3QqIHJlY3QpCiB7CiAgICAgQVNTRVJU
KHJlY3QpOwogICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+IGFuaW1hdGVkVHlwZSA9IGFkb3B0
UHRyKG5ldyBTVkdBbmltYXRlZFR5cGUoQW5pbWF0ZWRSZWN0KSk7CkBAIC0yNzcsNyArMjc3LDcg
QEAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgU1ZHQW5pbWF0ZWRUeXBlOgogICAgIHJldHVybiAq
bV9kYXRhLnByZXNlcnZlQXNwZWN0UmF0aW87CiB9CiAKLUZsb2F0UmVjdCYgU1ZHQW5pbWF0ZWRU
eXBlOjpyZWN0KCkKK0dyYXBoaWNzUmVjdCYgU1ZHQW5pbWF0ZWRUeXBlOjpyZWN0KCkKIHsKICAg
ICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkUmVjdCk7CiAgICAgcmV0dXJuICptX2RhdGEucmVj
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlLmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwot
Y2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgU1ZHQW5nbGU7CiBj
bGFzcyBTVkdMZW5ndGg7CiBjbGFzcyBTVkdMZW5ndGhMaXN0OwpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQYXRo
KFBhc3NPd25QdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+KTsKICAgICBzdGF0aWMgUGFzc093blB0cjxT
VkdBbmltYXRlZFR5cGU+IGNyZWF0ZVBvaW50TGlzdChTVkdQb2ludExpc3QqKTsKICAgICBzdGF0
aWMgUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVByZXNlcnZlQXNwZWN0UmF0aW8o
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbyopOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1h
dGVkVHlwZT4gY3JlYXRlUmVjdChGbG9hdFJlY3QqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxT
VkdBbmltYXRlZFR5cGU+IGNyZWF0ZVJlY3QoR3JhcGhpY3NSZWN0Kik7CiAgICAgc3RhdGljIFBh
c3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVTdHJpbmcoU3RyaW5nKik7CiAKICAgICBB
bmltYXRlZFByb3BlcnR5VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aCgpOwogICAg
IFNWR1BvaW50TGlzdCYgcG9pbnRMaXN0KCk7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYg
cHJlc2VydmVBc3BlY3RSYXRpbygpOwotICAgIEZsb2F0UmVjdCYgcmVjdCgpOworICAgIEdyYXBo
aWNzUmVjdCYgcmVjdCgpOwogICAgIFN0cmluZyYgc3RyaW5nKCk7CiAKICAgICBTdHJpbmcgdmFs
dWVBc1N0cmluZygpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFNWR1Bh
dGhCeXRlU3RyZWFtKiBwYXRoOwogICAgICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvOwogICAgICAgICBTVkdQb2ludExpc3QqIHBvaW50TGlzdDsKLSAgICAg
ICAgRmxvYXRSZWN0KiByZWN0OworICAgICAgICBHcmFwaGljc1JlY3QqIHJlY3Q7CiAgICAgICAg
IFN0cmluZyogc3RyaW5nOwogICAgIH0gbV9kYXRhOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3
IEBACiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRl
LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2
b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgCiAgICAgaWYgKHJhZGl1cyA8
PSAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYXRoLmFkZEVsbGlwc2UoRmxvYXRSZWN0KGN4
KCkudmFsdWUodGhpcykgLSByYWRpdXMsIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXMsIHJhZGl1
cyAqIDIsIHJhZGl1cyAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoR3JhcGhpY3NSZWN0KGN4
KCkudmFsdWUodGhpcykgLSByYWRpdXMsIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXMsIHJhZGl1
cyAqIDIsIHJhZGl1cyAqIDIpKTsKIH0KIAogYm9vbCBTVkdDaXJjbGVFbGVtZW50OjpzZWxmSGFz
UmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MCwxNiArODAsMTYgQEAgYm9vbCBTVkdEb2N1bWVudDo6em9v
bUFuZFBhbkVuYWJsZWQoKSBjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTVkdEb2N1
bWVudDo6c3RhcnRQYW4oY29uc3QgRmxvYXRQb2ludCYgc3RhcnQpCit2b2lkIFNWR0RvY3VtZW50
OjpzdGFydFBhbihjb25zdCBHcmFwaGljc1BvaW50JiBzdGFydCkKIHsKICAgICBpZiAocm9vdEVs
ZW1lbnQoKSkKLSAgICAgICAgbV90cmFuc2xhdGUgPSBGbG9hdFBvaW50KHN0YXJ0LngoKSAtIHJv
b3RFbGVtZW50KCktPmN1cnJlbnRUcmFuc2xhdGUoKS54KCksIHJvb3RFbGVtZW50KCktPmN1cnJl
bnRUcmFuc2xhdGUoKS55KCkgKyBzdGFydC55KCkpOworICAgICAgICBtX3RyYW5zbGF0ZSA9IEdy
YXBoaWNzUG9pbnQoc3RhcnQueCgpIC0gcm9vdEVsZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgp
LngoKSwgcm9vdEVsZW1lbnQoKS0+Y3VycmVudFRyYW5zbGF0ZSgpLnkoKSArIHN0YXJ0LnkoKSk7
CiB9CiAKLXZvaWQgU1ZHRG9jdW1lbnQ6OnVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3Mp
IGNvbnN0Cit2b2lkIFNWR0RvY3VtZW50Ojp1cGRhdGVQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9zKSBjb25zdAogewogICAgIGlmIChyb290RWxlbWVudCgpKSB7Ci0gICAgICAgIHJvb3RFbGVt
ZW50KCktPnNldEN1cnJlbnRUcmFuc2xhdGUoRmxvYXRQb2ludChwb3MueCgpIC0gbV90cmFuc2xh
dGUueCgpLCBtX3RyYW5zbGF0ZS55KCkgLSBwb3MueSgpKSk7CisgICAgICAgIHJvb3RFbGVtZW50
KCktPnNldEN1cnJlbnRUcmFuc2xhdGUoR3JhcGhpY3NQb2ludChwb3MueCgpIC0gbV90cmFuc2xh
dGUueCgpLCBtX3RyYW5zbGF0ZS55KCkgLSBwb3MueSgpKSk7CiAgICAgICAgIGlmIChyZW5kZXJl
cigpKQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaWYg
RU5BQkxFKFNWRykKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00NSw4ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgem9vbUFuZFBhbkVuYWJsZWQo
KSBjb25zdDsKIAotICAgIHZvaWQgc3RhcnRQYW4oY29uc3QgRmxvYXRQb2ludCYgc3RhcnQpOwot
ICAgIHZvaWQgdXBkYXRlUGFuKGNvbnN0IEZsb2F0UG9pbnQmIHBvcykgY29uc3Q7CisgICAgdm9p
ZCBzdGFydFBhbihjb25zdCBHcmFwaGljc1BvaW50JiBzdGFydCk7CisgICAgdm9pZCB1cGRhdGVQ
YW4oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9zKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdE
b2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwmKTsKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25z
dDsKIAotICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGU7CisgICAgR3JhcGhpY3NQb2ludCBtX3Ry
YW5zbGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAgY29uc3QgSGFz
aFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgU1ZHRQogICAgIHJldHVybiByYXJlU1ZHRGF0YSgp
LT5lbGVtZW50SW5zdGFuY2VzKCk7CiB9CiAKLWJvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3go
RmxvYXRSZWN0JiByZWN0LCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVV
cGRhdGVTdHJhdGVneSkgY29uc3QKK2Jvb2wgU1ZHRWxlbWVudDo6Ym91bmRpbmdCb3goR3JhcGhp
Y3NSZWN0JiByZWN0LCBTVkdMb2NhdGFibGU6OlN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRh
dGVTdHJhdGVneSkgY29uc3QKIHsKICAgICBpZiAoaXNTdHlsZWRMb2NhdGFibGUoKSkgewogICAg
ICAgICByZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+
KHRoaXMpLT5nZXRCQm94KHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgY29u
c3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzRm9yRWxlbWVudCgpIGNv
bnN0OwogCi0gICAgYm9vbCBib3VuZGluZ0JveChGbG9hdFJlY3QmLCBTVkdMb2NhdGFibGU6OlN0
eWxlVXBkYXRlU3RyYXRlZ3kgPSBTVkdMb2NhdGFibGU6OkFsbG93U3R5bGVVcGRhdGUpIGNvbnN0
OworICAgIGJvb2wgYm91bmRpbmdCb3goR3JhcGhpY3NSZWN0JiwgU1ZHTG9jYXRhYmxlOjpTdHls
ZVVwZGF0ZVN0cmF0ZWd5ID0gU1ZHTG9jYXRhYmxlOjpBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0Q3Vyc29yRWxlbWVudChTVkdDdXJzb3JFbGVtZW50Kik7CiAgICAgdm9p
ZCBjdXJzb3JFbGVtZW50UmVtb3ZlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxs
aXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGxpcHNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNp
bmNsdWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFNW
R0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmCiAgICAgaWYgKHJhZGl1c1kgPD0gMCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChjeCgpLnZh
bHVlKHRoaXMpIC0gcmFkaXVzWCwgY3koKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1ksIHJhZGl1c1gg
KiAyLCByYWRpdXNZICogMikpOworICAgIHBhdGguYWRkRWxsaXBzZShHcmFwaGljc1JlY3QoY3go
KS52YWx1ZSh0aGlzKSAtIHJhZGl1c1gsIGN5KCkudmFsdWUodGhpcykgLSByYWRpdXNZLCByYWRp
dXNYICogMiwgcmFkaXVzWSAqIDIpKTsKIH0KICAKIGJvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OnNl
bGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgpAQCAtMjEwLDcgKzIxMCw3IEBAIGJv
b2wgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEZpbHQKICAgICBpZiAoYXR0ck5hbWUg
PT0gU1ZHTmFtZXM6OnRhcmdldFlBdHRyKQogICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+
c2V0VGFyZ2V0T2Zmc2V0KEludFBvaW50KHRhcmdldFgoKSwgdGFyZ2V0WSgpKSk7CiAgICAgaWYg
KGF0dHJOYW1lID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikKLSAgICAgICByZXR1
cm4gY29udm9sdmVNYXRyaXgtPnNldEtlcm5lbFVuaXRMZW5ndGgoRmxvYXRQb2ludChrZXJuZWxV
bml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpKSk7CisgICAgICAgcmV0dXJuIGNvbnZv
bHZlTWF0cml4LT5zZXRLZXJuZWxVbml0TGVuZ3RoKEdyYXBoaWNzUG9pbnQoa2VybmVsVW5pdExl
bmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdO
YW1lczo6cHJlc2VydmVBbHBoYUF0dHIpCiAgICAgICAgIHJldHVybiBjb252b2x2ZU1hdHJpeC0+
c2V0UHJlc2VydmVBbHBoYShwcmVzZXJ2ZUFscGhhKCkpOwogCkBAIC0zMDcsNyArMzA3LDcgQEAg
UGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYQogICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsCiAgICAg
ICAgICAgICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNv
clZhbHVlLAogICAgICAgICAgICAgICAgICAgICBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1
ZSwgdGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgRmxvYXRQ
b2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpKSwgcHJlc2VydmVB
bHBoYSgpLCBrZXJuZWxNYXRyaXgpOworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50
KGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhYKCkpLCBwcmVzZXJ2ZUFscGhh
KCksIGtlcm5lbE1hdHJpeCk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoaW5w
dXQxKTsKICAgICByZXR1cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFBhc3NSZWZQdHI8U1ZHRkVQb2ludExpZ2h0RWxlbWVu
dD4gU1ZHRkUKIAogUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIHJldHVybiBQb2ludExpZ2h0U291cmNlOjpj
cmVhdGUoRmxvYXRQb2ludDNEKHgoKSwgeSgpLCB6KCkpKTsKKyAgICByZXR1cm4gUG9pbnRMaWdo
dFNvdXJjZTo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQzRCh4KCksIHkoKSwgeigpKSk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIFBhc3NSZWZQdHI8U1ZHRkVT
cG90TGlnaHRFbGVtZW50PiBTVkdGRVMKIAogUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gU1ZHRkVT
cG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgRmxvYXRQb2ludDNE
IHBvcyh4KCksIHkoKSwgeigpKTsKLSAgICBGbG9hdFBvaW50M0QgZGlyZWN0aW9uKHBvaW50c0F0
WCgpLCBwb2ludHNBdFkoKSwgcG9pbnRzQXRaKCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBwb3Mo
eCgpLCB5KCksIHooKSk7CisgICAgR3JhcGhpY3NQb2ludDNEIGRpcmVjdGlvbihwb2ludHNBdFgo
KSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKIAogICAgIHJldHVybiBTcG90TGlnaHRTb3Vy
Y2U6OmNyZWF0ZShwb3MsIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudCgpLCBsaW1pdGluZ0Nv
bmVBbmdsZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsMTYgKzIxMSwxNiBAQCB2b2lkIFNWR0ZpbHRl
ckVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChiCiAgICAgICAgIG9iamVjdC0+c2V0TmVlZHNMYXlv
dXQodHJ1ZSk7CiB9CiAKLUZsb2F0UmVjdCBTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGlu
Z0JveChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAorR3JhcGhpY3NS
ZWN0IFNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRlckJvdW5kaW5nQm94KGNvbnN0IEdyYXBoaWNzUmVj
dCYgb2JqZWN0Qm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGZpbHRlckJCb3g7
CisgICAgR3JhcGhpY3NSZWN0IGZpbHRlckJCb3g7CiAgICAgaWYgKGZpbHRlclVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQotICAgICAgICBm
aWx0ZXJCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKKyAgICAgICAgZmlsdGVy
QkJveCA9IEdyYXBoaWNzUmVjdCh4KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5k
aW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0Jv
eC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0Jv
eC53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVl
QXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSk7CiAgICAgZWxzZQot
ICAgICAgICBmaWx0ZXJCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZSh0aGlzKSwKKyAgICAgICAg
ZmlsdGVyQkJveCA9IEdyYXBoaWNzUmVjdCh4KCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoKCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0KCkudmFsdWUodGhpcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpbHRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyRWxlbWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ZpbHRlckVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZvaWQgc2V0RmlsdGVyUmVzKHVuc2lnbmVk
IGxvbmcgZmlsdGVyUmVzWCwgdW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNZKTsKLSAgICBGbG9hdFJl
Y3QgZmlsdGVyQm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGZpbHRlckJvdW5kaW5nQm94KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIFNWR0ZpbHRlckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDE0ICsxNTQsMTQgQEAgdm9pZCBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZQogICAgIGlmICh0aGlzLT5oYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpKQogICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVl
KTsKIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCQm94OworICAgIEdyYXBoaWNzUmVjdCBlZmZlY3RC
Qm94OwogICAgIGlmIChwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpCi0gICAgICAgIGVmZmVjdEJC
b3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCksCisgICAgICAgIGVmZmVjdEJC
b3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQZXJjZW50YWdlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwogICAg
IGVsc2UKLSAgICAgICAgZWZmZWN0QkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWUodGhpcyksCisg
ICAgICAgIGVmZmVjdEJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKQEAgLTM1LDE0ICsz
NSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZVZpZXdCb3goRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5nJiBzLCBGbG9hdFJlY3QmIHZp
ZXdCb3gpCitib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KERvY3VtZW50KiBkb2Ms
IGNvbnN0IFN0cmluZyYgcywgR3JhcGhpY3NSZWN0JiB2aWV3Qm94KQogewogICAgIGNvbnN0IFVD
aGFyKiBjID0gcy5jaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGMgKyBzLmxl
bmd0aCgpOwogICAgIHJldHVybiBwYXJzZVZpZXdCb3goZG9jLCBjLCBlbmQsIHZpZXdCb3gsIHRy
dWUpOwogfQogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KERvY3VtZW50KiBk
b2MsIGNvbnN0IFVDaGFyKiYgYywgY29uc3QgVUNoYXIqIGVuZCwgRmxvYXRSZWN0JiB2aWV3Qm94
LCBib29sIHZhbGlkYXRlKQorYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChEb2N1
bWVudCogZG9jLCBjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIEdyYXBoaWNzUmVj
dCYgdmlld0JveCwgYm9vbCB2YWxpZGF0ZSkKIHsKICAgICBTdHJpbmcgc3RyKGMsIGVuZCAtIGMp
OwogCkBAIC01NCw3ICs1NCw3IEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3go
RG9jdW0KICAgICBmbG9hdCBoZWlnaHQgPSAwLjBmOwogICAgIGJvb2wgdmFsaWQgPSBwYXJzZU51
bWJlcihjLCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgeSkgJiYgcGFyc2VOdW1iZXIo
YywgZW5kLCB3aWR0aCkgJiYgcGFyc2VOdW1iZXIoYywgZW5kLCBoZWlnaHQsIGZhbHNlKTsKICAg
ICBpZiAoIXZhbGlkYXRlKSB7Ci0gICAgICAgIHZpZXdCb3ggPSBGbG9hdFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIHZpZXdCb3ggPSBHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoIXZhbGlkKSB7
CkBAIC03NiwxMSArNzYsMTEgQEAgYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChE
b2N1bQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgdmlld0JveCA9IEZsb2F0
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB2aWV3Qm94ID0gR3JhcGhpY3NSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEZsb2F0UmVj
dCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNw
ZWN0UmF0aW8sIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkKK0FmZmluZVRyYW5z
Zm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgR3JhcGhp
Y3NSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYgcHJlc2Vy
dmVBc3BlY3RSYXRpbywgZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KQogewogICAg
IGlmICghdmlld0JveFJlY3Qud2lkdGgoKSB8fCAhdmlld0JveFJlY3QuaGVpZ2h0KCkpCiAgICAg
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTkxLDcgKzkxLDcgQEAgQWZmaW5lVHJh
bnNmb3JtIFNWR0ZpdFRvVmlld0JveDo6dmlld0JveAogYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKERvY3VtZW50KiBkb2N1bWVudCwgQXR0cmlidXRlKiBhdHRyKQog
ewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCB2aWV3Qm94OworICAgICAgICBHcmFwaGljc1JlY3Qgdmlld0JveDsKICAg
ICAgICAgaWYgKCFhdHRyLT52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgcGFyc2VWaWV3
Qm94KGRvY3VtZW50LCBhdHRyLT52YWx1ZSgpLCB2aWV3Qm94KTsKICAgICAgICAgc2V0Vmlld0Jv
eEJhc2VWYWx1ZSh2aWV3Qm94KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94
LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpdFRvVmlld0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNSArMzAsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgQXR0cmlidXRlOwogY2xhc3MgRG9jdW1l
bnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvOwogCiBjbGFzcyBTVkdGaXRUb1ZpZXdCb3ggewogcHVibGljOgogICAg
IHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpIHsgfQogCi0gICAgYm9vbCBwYXJzZVZpZXdCb3go
RG9jdW1lbnQqLCBjb25zdCBVQ2hhciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBGbG9hdFJl
Y3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUgPSB0cnVlKTsKLSAgICBzdGF0aWMgQWZmaW5lVHJh
bnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94UmVj
dCwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYsIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQg
dmlld0hlaWdodCk7CisgICAgYm9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25zdCBVQ2hh
ciomIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBHcmFwaGljc1JlY3QmIHZpZXdCb3gsIGJvb2wg
dmFsaWRhdGUgPSB0cnVlKTsKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1Zp
ZXdUcmFuc2Zvcm0oY29uc3QgR3JhcGhpY3NSZWN0JiB2aWV3Qm94UmVjdCwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbyYsIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCk7CiAK
ICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKERvY3VtZW50KiwgQXR0cmlidXRlKik7CiAg
ICAgYm9vbCBpc0tub3duQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2b2lk
IGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWROYW1lPiYpOwogCi0gICAg
dmlydHVhbCB2b2lkIHNldFZpZXdCb3hCYXNlVmFsdWUoY29uc3QgRmxvYXRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3Qm94QmFzZVZhbHVlKGNvbnN0IEdyYXBoaWNzUmVjdCYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZShj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJikgPSAwOwogCiBwcml2YXRlOgotICAgIGJvb2wg
cGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7CisgICAg
Ym9vbCBwYXJzZVZpZXdCb3goRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBHcmFwaGljc1JlY3Qm
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5j
bHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNjAsOCArMTYwLDggQEAgdm9pZCBTVkdMaW5l
RWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYQogewogICAgIEFTU0VSVChwYXRoLmlzRW1wdHko
KSk7CiAKLSAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgxKCkudmFsdWUodGhpcyksIHkxKCku
dmFsdWUodGhpcykpKTsKLSAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgyKCkudmFsdWUo
dGhpcyksIHkyKCkudmFsdWUodGhpcykpKTsKKyAgICBwYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50
KHgxKCkudmFsdWUodGhpcyksIHkxKCkudmFsdWUodGhpcykpKTsKKyAgICBwYXRoLmFkZExpbmVU
byhHcmFwaGljc1BvaW50KHgyKCkudmFsdWUodGhpcyksIHkyKCkudmFsdWUodGhpcykpKTsKIH0K
IAogYm9vbCBTVkdMaW5lRWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkxpbmVhckdyYWRp
ZW50QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGll
bnQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTE5OSwxNSArMTk5LDE1
IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0YXJ0
RW5kUG9pbnRzKGNvbnN0IExpbmVhckdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRmxvYXRQb2ludCYgZW5kUG9pbnQpCit2b2lkIFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlU3RhcnRFbmRQb2ludHMoY29uc3QgTGluZWFyR3Jh
ZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBHcmFwaGljc1BvaW50JiBzdGFydFBvaW50LCBH
cmFwaGljc1BvaW50JiBlbmRQb2ludCkKIHsKICAgICAvLyBEZXRlcm1pbmUgZ3JhZGllbnQgc3Rh
cnQvZW5kIHBvaW50cwogICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKSB7Ci0g
ICAgICAgIHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMueDEoKS52YWx1ZUFzUGVy
Y2VudGFnZSgpLCBhdHRyaWJ1dGVzLnkxKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7Ci0gICAgICAg
IGVuZFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWVBc1BlcmNlbnRhZ2Uo
KSwgYXR0cmlidXRlcy55MigpLnZhbHVlQXNQZXJjZW50YWdlKCkpOworICAgICAgICBzdGFydFBv
aW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLngxKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwg
YXR0cmlidXRlcy55MSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOworICAgICAgICBlbmRQb2ludCA9
IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0dHJp
YnV0ZXMueTIoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBz
dGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngxKCkudmFsdWUodGhpcyksIGF0dHJp
YnV0ZXMueTEoKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIGVuZFBvaW50ID0gRmxvYXRQb2ludChh
dHRyaWJ1dGVzLngyKCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZSh0aGlzKSk7
CisgICAgICAgIHN0YXJ0UG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDEoKS52YWx1
ZSh0aGlzKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlKHRoaXMpKTsKKyAgICAgICAgZW5kUG9pbnQg
PSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDIoKS52YWx1ZSh0aGlzKSwgYXR0cmlidXRlcy55
MigpLnZhbHVlKHRoaXMpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAogICAgIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhMaW5lYXJHcmFkaWVudEF0dHJp
YnV0ZXMmKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKGNvbnN0IExpbmVhckdy
YWRpZW50QXR0cmlidXRlcyYsIEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZsb2F0UG9pbnQmIGVu
ZFBvaW50KTsKKyAgICB2b2lkIGNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKGNvbnN0IExpbmVhckdy
YWRpZW50QXR0cmlidXRlcyYsIEdyYXBoaWNzUG9pbnQmIHN0YXJ0UG9pbnQsIEdyYXBoaWNzUG9p
bnQmIGVuZFBvaW50KTsKIAogcHJpdmF0ZToKICAgICBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTG9jYXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TG9jYXRhYmxlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TG9jYXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBTVkdFbGVtZW50
KiBTVkdMb2NhdGFibGU6OmZhcnRoZXN0Vmlld3BvCiAgICAgcmV0dXJuIGZhcnRoZXN0OwogfQog
Ci1GbG9hdFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1l
bnQsIFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKK0dyYXBoaWNzUmVj
dCBTVkdMb2NhdGFibGU6OmdldEJCb3goY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgU3R5bGVV
cGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KQogewogICAgIEFTU0VSVChlbGVtZW50
KTsKICAgICBpZiAoc3R5bGVVcGRhdGVTdHJhdGVneSA9PSBBbGxvd1N0eWxlVXBkYXRlKQpAQCAt
NzIsNyArNzIsNyBAQCBGbG9hdFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWCiAK
ICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBnZXRCQm94IGZvciBk
ZXRhY2hlZCBlbGVtZW50cy4KICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAg
ICAgcmV0dXJuIGVsZW1lbnQtPnJlbmRlcmVyKCktPm9iamVjdEJvdW5kaW5nQm94KCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdy
YXBoaWNzUmVjdDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKIGNsYXNzIFNWR0xvY2F0YWJsZSB7CkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIGVudW0gU3R5bGVVcGRhdGVTdHJhdGVneSB7
IEFsbG93U3R5bGVVcGRhdGUsIERpc2FsbG93U3R5bGVVcGRhdGUgfTsKICAgICAKLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5bGVVcGRhdGVTdHJh
dGVneSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNU
TShTdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdCA9IDA7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGdl
dFRyYW5zZm9ybVRvRWxlbWVudChTVkdFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYsIFN0eWxlVXBk
YXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKQEAgLTU3LDcgKzU3LDcgQEAg
cHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29v
cmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IHsgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGdldEJCb3go
Y29uc3QgU1ZHRWxlbWVudCosIFN0eWxlVXBkYXRlU3RyYXRlZ3kpOworICAgIHN0YXRpYyBHcmFw
aGljc1JlY3QgZ2V0QkJveChjb25zdCBTVkdFbGVtZW50KiwgU3R5bGVVcGRhdGVTdHJhdGVneSk7
CiAgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjb21wdXRlQ1RNKGNvbnN0IFNWR0VsZW1lbnQq
LCBDVE1TY29wZSwgU3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDE2ICsxNzUs
MTYgQEAgdm9pZCBTVkdNYXNrRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvbwogICAgICAgICBv
YmplY3QtPnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCi1GbG9hdFJlY3QgU1ZHTWFza0VsZW1l
bnQ6Om1hc2tCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBj
b25zdAorR3JhcGhpY3NSZWN0IFNWR01hc2tFbGVtZW50OjptYXNrQm91bmRpbmdCb3goY29uc3Qg
R3JhcGhpY3NSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3Qg
bWFza0JCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1hc2tCQm94OwogICAgIGlmIChtYXNrVW5pdHMo
KSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCi0gICAg
ICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0
Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKKyAgICAgICAgbWFz
a0JCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3Vu
ZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94
LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aWR0aCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53
aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZUFzUGVy
Y2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIGVsc2UKLSAgICAg
ICAgbWFza0JCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVlKHRoaXMpLAorICAgICAgICBtYXNrQkJv
eCA9IEdyYXBoaWNzUmVjdCh4KCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGgoKS52YWx1ZSh0aGlzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCku
dmFsdWUodGhpcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBwdWJsaWMg
U1ZHU3R5bGVkTAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR01hc2tFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICBGbG9hdFJl
Y3QgbWFza0JvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIEdyYXBoaWNz
UmVjdCBtYXNrQm91bmRpbmdCb3goY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgU1ZHTWFza0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxp
dGllcy5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKIAog
I2luY2x1ZGUgPGxpbWl0cz4KQEAgLTE4OSw3ICsxODksNyBAQCBib29sIHBhcnNlTnVtYmVyT3B0
aW9uYWxOdW1iZXIoY29uc3QgU3RyCiAgICAgcmV0dXJuIGN1ciA9PSBlbmQ7CiB9CiAKLWJvb2wg
cGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG9hdFJlY3QmIHJlY3QpCitib29sIHBh
cnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZywgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBwdHIgKyBzdHJpbmcubGVuZ3RoKCk7CkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBw
YXJzZVJlY3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEZsbwogICAgIGZsb2F0IHdpZHRoID0gMDsK
ICAgICBmbG9hdCBoZWlnaHQgPSAwOwogICAgIGJvb2wgdmFsaWQgPSBwYXJzZU51bWJlcihwdHIs
IGVuZCwgeCkgJiYgcGFyc2VOdW1iZXIocHRyLCBlbmQsIHkpICYmIHBhcnNlTnVtYmVyKHB0ciwg
ZW5kLCB3aWR0aCkgJiYgcGFyc2VOdW1iZXIocHRyLCBlbmQsIGhlaWdodCwgZmFsc2UpOwotICAg
IHJlY3QgPSBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgcmVjdCA9IEdyYXBo
aWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gdmFsaWQ7CiB9CiAKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIHBvaW50c0xpc3RGcm9tU1ZHRGF0YShTVkdQb2ludExpc3Qm
CiAgICAgICAgIH0KICAgICAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGN1ciwgZW5kKTsKIAotICAg
ICAgICBwb2ludHNMaXN0LmFwcGVuZChGbG9hdFBvaW50KHhQb3MsIHlQb3MpKTsKKyAgICAgICAg
cG9pbnRzTGlzdC5hcHBlbmQoR3JhcGhpY3NQb2ludCh4UG9zLCB5UG9zKSk7CiAgICAgfQogICAg
IHJldHVybiBjdXIgPT0gZW5kICYmICFkZWxpbVBhcnNlZDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNCAr
MzAsMTQgQEAgdHlwZWRlZiBWZWN0b3I8VW5pY29kZVJhbmdlPiBVbmljb2RlUmFuZwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsK
IGNsYXNzIFNWR1BvaW50TGlzdDsKIAogYm9vbCBwYXJzZU51bWJlcihjb25zdCBVQ2hhciomIHB0
ciwgY29uc3QgVUNoYXIqIGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7CiBi
b29sIHBhcnNlTnVtYmVyRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmLCBmbG9hdCYgbnVtYmVyLCBi
b29sIHNraXAgPSB0cnVlKTsKIGJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihjb25zdCBT
dHJpbmcmIHMsIGZsb2F0JiBoLCBmbG9hdCYgdik7CiBib29sIHBhcnNlQXJjRmxhZyhjb25zdCBV
Q2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgYm9vbCYgZmxhZyk7Ci1ib29sIHBhcnNlUmVj
dChjb25zdCBTdHJpbmcmLCBGbG9hdFJlY3QmKTsKK2Jvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmlu
ZyYsIEdyYXBoaWNzUmVjdCYpOwogCiAvLyBTVkcgYWxsb3dzIHNldmVyYWwgZGlmZmVyZW50IHdo
aXRlc3BhY2UgY2hhcmFjdGVyczoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9wYXRocy5o
dG1sI1BhdGhEYXRhQk5GCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQCBTVkdQYXRoQmxlbmRlcjo6U1ZHUGF0
aEJsZW5kZXIoKQogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb25zCi1zdGF0aWMgaW5saW5lIEZsb2F0
UG9pbnQgYmxlbmRGbG9hdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9p
bnQmIGIsIGZsb2F0IHByb2dyZXNzKQorc3RhdGljIGlubGluZSBHcmFwaGljc1BvaW50IGJsZW5k
R3JhcGhpY3NQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1BvaW50
JiBiLCBmbG9hdCBwcm9ncmVzcykKIHsKLSAgICByZXR1cm4gRmxvYXRQb2ludCgoYi54KCkgLSBh
LngoKSkgKiBwcm9ncmVzcyArIGEueCgpLCAoYi55KCkgLSBhLnkoKSkgKiBwcm9ncmVzcyArIGEu
eSgpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludCgoYi54KCkgLSBhLngoKSkgKiBwcm9ncmVz
cyArIGEueCgpLCAoYi55KCkgLSBhLnkoKSkgKiBwcm9ncmVzcyArIGEueSgpKTsKIH0KIAogc3Rh
dGljIGlubGluZSBmbG9hdCBibGVuZEFuaW1hdGVkRmxvYXQoZmxvYXQgZnJvbSwgZmxvYXQgdG8s
IGZsb2F0IHByb2dyZXNzKQpAQCAtNjQsMjUgKzY0LDI1IEBAIGZsb2F0IFNWR1BhdGhCbGVuZGVy
OjpibGVuZEFuaW1hdGVkRGltZW4KICAgICByZXR1cm4gbV90b01vZGUgPT0gQWJzb2x1dGVDb29y
ZGluYXRlcyA/IGFuaW1WYWx1ZSArIGN1cnJlbnRWYWx1ZSA6IGFuaW1WYWx1ZSAtIGN1cnJlbnRW
YWx1ZTsKIH0KIAotRmxvYXRQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZEZsb2F0
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgZnJvbVBvaW50LCBjb25zdCBGbG9hdFBvaW50JiB0b1Bv
aW50KQorR3JhcGhpY3NQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZEdyYXBoaWNz
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgZnJvbVBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50
JiB0b1BvaW50KQogewogICAgIGlmIChtX2Zyb21Nb2RlID09IG1fdG9Nb2RlKQotICAgICAgICBy
ZXR1cm4gYmxlbmRGbG9hdFBvaW50KGZyb21Qb2ludCwgdG9Qb2ludCwgbV9wcm9ncmVzcyk7Cisg
ICAgICAgIHJldHVybiBibGVuZEdyYXBoaWNzUG9pbnQoZnJvbVBvaW50LCB0b1BvaW50LCBtX3By
b2dyZXNzKTsKIAogICAgIC8vIFRyYW5zZm9ybSB0b1BvaW50IHRvIHRoZSBjb29yZGluYXRlIG1v
ZGUgb2YgZnJvbVBvaW50Ci0gICAgRmxvYXRQb2ludCBhbmltYXRlZFBvaW50ID0gdG9Qb2ludDsK
KyAgICBHcmFwaGljc1BvaW50IGFuaW1hdGVkUG9pbnQgPSB0b1BvaW50OwogICAgIGlmIChtX2Zy
b21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIGFuaW1hdGVkUG9pbnQgKz0g
bV90b0N1cnJlbnRQb2ludDsKICAgICBlbHNlCiAgICAgICAgIGFuaW1hdGVkUG9pbnQubW92ZSgt
bV90b0N1cnJlbnRQb2ludC54KCksIC1tX3RvQ3VycmVudFBvaW50LnkoKSk7CiAKLSAgICBhbmlt
YXRlZFBvaW50ID0gYmxlbmRGbG9hdFBvaW50KGZyb21Qb2ludCwgYW5pbWF0ZWRQb2ludCwgbV9w
cm9ncmVzcyk7CisgICAgYW5pbWF0ZWRQb2ludCA9IGJsZW5kR3JhcGhpY3NQb2ludChmcm9tUG9p
bnQsIGFuaW1hdGVkUG9pbnQsIG1fcHJvZ3Jlc3MpOwogCiAgICAgaWYgKG1faXNJbkZpcnN0SGFs
Zk9mQW5pbWF0aW9uKQogICAgICAgICByZXR1cm4gYW5pbWF0ZWRQb2ludDsKIAogICAgIC8vIFRy
YW5zZm9ybSB0aGUgYW5pbWF0ZWQgcG9pbnQgdG8gdGhlIGNvb3JkaW5hdGUgbW9kZSwgbmVlZGVk
IGZvciB0aGUgY3VycmVudCBwcm9ncmVzcy4KLSAgICBGbG9hdFBvaW50IGN1cnJlbnRQb2ludCA9
IGJsZW5kRmxvYXRQb2ludChtX2Zyb21DdXJyZW50UG9pbnQsIG1fdG9DdXJyZW50UG9pbnQsIG1f
cHJvZ3Jlc3MpOworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50ID0gYmxlbmRHcmFwaGlj
c1BvaW50KG1fZnJvbUN1cnJlbnRQb2ludCwgbV90b0N1cnJlbnRQb2ludCwgbV9wcm9ncmVzcyk7
CiAgICAgaWYgKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIHJldHVy
biBhbmltYXRlZFBvaW50ICsgY3VycmVudFBvaW50OwogCkBAIC05MiwxMyArOTIsMTMgQEAgRmxv
YXRQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZAogCiBib29sIFNWR1BhdGhCbGVu
ZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBv
aW50OwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZy
b21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYg
KCFtX2Zyb21Tb3VyY2UtPnBhcnNlTW92ZVRvU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpCiAgICAg
ICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZU1vdmVUb1NlZ21lbnQodG9UYXJnZXRQb2ludCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPm1vdmVUbyhibGVuZEFuaW1h
dGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLCBmYWxzZSwgbV9p
c0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1f
Y29uc3VtZXItPm1vdmVUbyhibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tVGFyZ2V0UG9p
bnQsIHRvVGFyZ2V0UG9pbnQpLCBmYWxzZSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBt
X2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBv
aW50ICsgdG9UYXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwNiwxMyArMTA2LDEz
IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudCgKIAogYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IGZyb21U
YXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1RhcmdldFBvaW50Owog
ICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZUxpbmVUb1NlZ21lbnQoZnJvbVRhcmdldFBvaW50
KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFyc2VMaW5lVG9TZWdtZW50KHRvVGFyZ2V0UG9p
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLT5saW5lVG8oYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgbV9p
c0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOworICAgIG1f
Y29uc3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tVGFyZ2V0UG9p
bnQsIHRvVGFyZ2V0UG9pbnQpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1v
ZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50
ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBB
YnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0
b1RhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ4LDE5ICsxNDgsMTkgQEAgYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9WZXJ0aWNhbAogCiBib29sIFNWR1BhdGhCbGVu
ZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgZnJvbVRh
cmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgZnJvbVBvaW50MTsKLSAgICBGbG9hdFBvaW50IGZy
b21Qb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQg
dG9Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1BvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IGZy
b21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21Qb2ludDE7CisgICAgR3JhcGhp
Y3NQb2ludCBmcm9tUG9pbnQyOworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQb2ludDsKKyAg
ICBHcmFwaGljc1BvaW50IHRvUG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgdG9Qb2ludDI7CiAg
ICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChmcm9tUG9pbnQx
LCBmcm9tUG9pbnQyLCBmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5w
YXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQodG9Qb2ludDEsIHRvUG9pbnQyLCB0b1RhcmdldFBvaW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb0N1Ymlj
KGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50Miwg
dG9Qb2ludDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLAorICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tUG9pbnQxLCB0b1Bv
aW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGlj
c1BvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmlt
YXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9
IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1f
ZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50
ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3Rv
Q3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAgLTE2OSwxNiArMTY5LDE2IEBAIGJvb2wg
U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU2UKIAogYm9vbCBTVkdQYXRoQmxlbmRl
cjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IGZy
b21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDI7Ci0gICAgRmxvYXRQb2lu
dCB0b1RhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDI7CisgICAgR3JhcGhpY3NQ
b2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBmcm9tUG9pbnQyOworICAg
IEdyYXBoaWNzUG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRvUG9pbnQy
OwogICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQo
ZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHRvUG9pbnQyLCB0b1RhcmdldFBvaW50KSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb0N1YmljU21vb3Ro
KGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQyKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRh
cmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNT
bW9vdGgoYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFuaW1hdGVkR3JhcGhpY3NQ
b2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUg
OiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsg
ZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNv
bHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1Rh
cmdldFBvaW50OwpAQCAtMTg3LDE2ICsxODcsMTYgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvQ3ViaWNTbQogCiBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFk
cmF0aWNTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBG
bG9hdFBvaW50IGZyb21Qb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OwotICAg
IEZsb2F0UG9pbnQgdG9Qb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7
CisgICAgR3JhcGhpY3NQb2ludCBmcm9tUG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJn
ZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRvUG9pbnQxOwogICAgIGlmICghbV9mcm9tU291
cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KGZyb21Qb2ludDEsIGZyb21UYXJnZXRQ
b2ludCkKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UtPnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21l
bnQodG9Qb2ludDEsIHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZy
b21Qb2ludDEsIHRvUG9pbnQxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJs
ZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisg
ICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2lu
dChmcm9tUG9pbnQxLCB0b1BvaW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9p
bnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZB
bmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2lu
dCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6
IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBv
aW50ID0gbV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBt
X3RvQ3VycmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAgLTIwNSwxMyArMjA1LDEzIEBAIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXQKIAogYm9vbCBTVkdQYXRoQmxl
bmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQ
b2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OworICAg
IEdyYXBoaWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJn
ZXRQb2ludDsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudChmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGJs
ZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksIG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBt
X2NvbnN1bWVyLT5jdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1Bv
aW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksIG1faXNJbkZpcnN0SGFsZk9mQW5p
bWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQg
PSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBt
X2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2lu
dCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90
b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMjQs
MTMgKzIyNCwxMyBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEFyY1RvU2VnbWVudCgpCiAg
ICAgZmxvYXQgZnJvbUFuZ2xlOwogICAgIGJvb2wgZnJvbUxhcmdlQXJjOwogICAgIGJvb2wgZnJv
bVN3ZWVwOwotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9p
bnQgZnJvbVRhcmdldFBvaW50OwogICAgIGZsb2F0IHRvUng7CiAgICAgZmxvYXQgdG9SeTsKICAg
ICBmbG9hdCB0b0FuZ2xlOwogICAgIGJvb2wgdG9MYXJnZUFyYzsKICAgICBib29sIHRvU3dlZXA7
Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9UYXJn
ZXRQb2ludDsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VBcmNUb1NlZ21lbnQoZnJvbVJ4
LCBmcm9tUnksIGZyb21BbmdsZSwgZnJvbUxhcmdlQXJjLCBmcm9tU3dlZXAsIGZyb21UYXJnZXRQ
b2ludCkKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UtPnBhcnNlQXJjVG9TZWdtZW50KHRvUngsIHRv
UnksIHRvQW5nbGUsIHRvTGFyZ2VBcmMsIHRvU3dlZXAsIHRvVGFyZ2V0UG9pbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6
YmxlbmRBcmNUb1NlZ21lbnQoKQogICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRG
bG9hdChmcm9tQW5nbGUsIHRvQW5nbGUsIG1fcHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAg
ICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gZnJvbUxhcmdlQXJjIDogdG9MYXJnZUFy
YywKICAgICAgICAgICAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZy
b21Td2VlcCA6IHRvU3dlZXAsCi0gICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICBibGVuZEFuaW1hdGVkR3JhcGhpY3NQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFy
Z2V0UG9pbnQpLAogICAgICAgICAgICAgICAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0
aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBt
X2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zy
b21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2ludCA9
IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1
cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CkBAIC0zNjUsOCArMzY1LDggQEAgdm9pZCBTVkdQ
YXRoQmxlbmRlcjo6Y2xlYW51cCgpCiAgICAgbV90b1NvdXJjZSA9IDA7CiAgICAgbV9mcm9tU291
cmNlID0gMDsKICAgICBtX2NvbnN1bWVyID0gMDsKLSAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBG
bG9hdFBvaW50KCk7Ci0gICAgbV90b0N1cnJlbnRQb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICBt
X2Zyb21DdXJyZW50UG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CisgICAgbV90b0N1cnJlbnRQb2lu
dCA9IEdyYXBoaWNzUG9pbnQoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhCbGVuZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
bGVuZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxNCBAQCBwcml2YXRlOgogICAg
IGJvb2wgYmxlbmRBcmNUb1NlZ21lbnQoKTsKIAogICAgIGZsb2F0IGJsZW5kQW5pbWF0ZWREaW1l
bnNvbmFsRmxvYXQoZmxvYXQsIGZsb2F0LCBGbG9hdEJsZW5kTW9kZSk7Ci0gICAgRmxvYXRQb2lu
dCBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBmcm9tLCBjb25zdCBG
bG9hdFBvaW50JiB0byk7CisgICAgR3JhcGhpY3NQb2ludCBibGVuZEFuaW1hdGVkR3JhcGhpY3NQ
b2ludChjb25zdCBHcmFwaGljc1BvaW50JiBmcm9tLCBjb25zdCBHcmFwaGljc1BvaW50JiB0byk7
CiAKICAgICBTVkdQYXRoU291cmNlKiBtX2Zyb21Tb3VyY2U7CiAgICAgU1ZHUGF0aFNvdXJjZSog
bV90b1NvdXJjZTsKICAgICBTVkdQYXRoQ29uc3VtZXIqIG1fY29uc3VtZXI7CiAKLSAgICBGbG9h
dFBvaW50IG1fZnJvbUN1cnJlbnRQb2ludDsKLSAgICBGbG9hdFBvaW50IG1fdG9DdXJyZW50UG9p
bnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2Zyb21DdXJyZW50UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBtX3RvQ3VycmVudFBvaW50OwogICAgIAogICAgIFBhdGhDb29yZGluYXRlTW9kZSBtX2Zy
b21Nb2RlOwogICAgIFBhdGhDb29yZGluYXRlTW9kZSBtX3RvTW9kZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIFNWR1BhdGhCdWlsZGVyOjpTVkdQYXRoQnVpbGRlcigpCiB7CiB9CiAKLXZvaWQgU1ZHUGF0
aEJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCBjbG9z
ZWQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoQnVpbGRlcjo6bW92ZVRv
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBib29sIGNsb3NlZCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aCk7CiAgICAgbV9jdXJyZW50ID0g
bW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdGFyZ2V0UG9pbnQgOiBtX2N1cnJlbnQgKyB0
YXJnZXRQb2ludDsKQEAgLTQyLDE0ICs0MiwxNCBAQCB2b2lkIFNWR1BhdGhCdWlsZGVyOjptb3Zl
VG8oY29uc3QgRmxvYXRQCiAgICAgbV9wYXRoLT5tb3ZlVG8obV9jdXJyZW50KTsKIH0KIAotdm9p
ZCBTVkdQYXRoQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmxpbmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7
CiAgICAgQVNTRVJUKG1fcGF0aCk7CiAgICAgbV9jdXJyZW50ID0gbW9kZSA9PSBBYnNvbHV0ZUNv
b3JkaW5hdGVzID8gdGFyZ2V0UG9pbnQgOiBtX2N1cnJlbnQgKyB0YXJnZXRQb2ludDsKICAgICBt
X3BhdGgtPmFkZExpbmVUbyhtX2N1cnJlbnQpOwogfQogCi12b2lkIFNWR1BhdGhCdWlsZGVyOjpj
dXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VS
VChtX3BhdGgpOwogICAgIGlmIChtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAjZGVmaW5lIFNWR1BhdGhCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRl
ICJQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aENvbnN1bWVyLmgiCiAKQEAgLTQzLDIxICs0Mywy
MSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgeyBtX3BhdGggPSAwOyB9
CiAKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9k
ZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9z
ZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAg
dmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGlu
YXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUGF0aCgpOwogCiAgICAgLy8gT25seSB1
c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4KICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9y
aXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0
ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENv
b3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3Jk
aW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFy
Y1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFw
aGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25z
dCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2ws
IGJvb2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIAogICAgIFBhdGgqIG1fcGF0aDsKLSAgICBGbG9hdFBvaW50IG1f
Y3VycmVudDsKKyAgICBHcmFwaGljc1BvaW50IG1fY3VycmVudDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0
cmVhbUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxOCArMzQs
MTggQEAgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpTVkdQYXRoQnl0ZVN0cgogewogfQogCi12
b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5
dGVTdHJlYW1CdWlsZGVyOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQs
IGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJl
YW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8g
IFBhdGhTZWdNb3ZlVG9SZWwgOiBQYXRoU2VnTW92ZVRvQWJzKTsKLSAgICB3cml0ZUZsb2F0UG9p
bnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludCh0YXJnZXRQb2ludCk7CiB9
CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2lu
dCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZVN0cmVhbSk7CiAg
ICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2Vn
TGluZVRvUmVsIDogUGF0aFNlZ0xpbmVUb0Ficyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHRhcmdl
dFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwogfQogCiB2b2lk
IFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvSG9yaXpvbnRhbChmbG9hdCB4LCBQYXRo
Q29vcmRpbmF0ZU1vZGUgbW9kZSkKQEAgLTYyLDM5ICs2MiwzOSBAQCB2b2lkIFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlcjo6bGluZVRvVmVyCiAgICAgd3JpdGVGbG9hdCh5KTsKIH0KIAotdm9pZCBT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAg
IHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1
cnZlVG9DdWJpY1JlbCA6IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnMpOwotICAgIHdyaXRlRmxvYXRQ
b2ludChwb2ludDEpOwotICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDIpOwotICAgIHdyaXRlRmxv
YXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50MSk7Cisg
ICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50Mik7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRh
cmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9D
dWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQy
LCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0ZVN0cmVhbSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZSht
b2RlID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMgPyBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVs
IDogUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHBv
aW50Mik7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBo
aWNzUG9pbnQocG9pbnQyKTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwog
fQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRo
Q29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2
ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VS
VChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNv
b3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwgOiBQYXRoU2VnQ3VydmVUb1F1
YWRyYXRpY0Ficyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHBvaW50MSk7Ci0gICAgd3JpdGVGbG9h
dFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQocG9pbnQxKTsKKyAg
ICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwogfQogCi12b2lkIFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZVN0cmVhbSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMgPyBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aFJlbCA6IFBhdGhTZWdDdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoQWJzKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAg
IHdyaXRlR3JhcGhpY3NQb2ludCh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyOjphcmNUbyhmbG9hdCByMSwgZmxvYXQgcjIsIGZsb2F0IGFuZ2xlLCBib29s
IGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyOjphcmNUbyhmbG9hdCByMSwgZmxvYXQgcjIsIGZsb2F0IGFuZ2xlLCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKICAg
ICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdB
cmNSZWwgOiBQYXRoU2VnQXJjQWJzKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8oZmxvCiAgICAgd3JpdGVGbG9hdChhbmdsZSk7CiAgICAg
d3JpdGVGbGFnKGxhcmdlQXJjRmxhZyk7CiAgICAgd3JpdGVGbGFnKHN3ZWVwRmxhZyk7Ci0gICAg
d3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFy
Z2V0UG9pbnQpOwogfQogCiB2b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y2xvc2VQYXRo
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVy
LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw4IEBACiAjZGVmaW5lIFNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlcl9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTVkdQ
YXRoQnl0ZVN0cmVhbS5oIgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgpAQCAtNDEsMTgg
KzQyLDE4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7IG1fYnl0ZVN0
cmVhbSA9IDA7IH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVk
UGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
LCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGlu
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3Jh
cGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAg
ICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9p
ZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1
YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29u
c3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFy
Y1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxh
ZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9R
dWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
KGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBz
d2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZVR5cGU+CiAgICAgdm9pZCB3cml0ZVR5cGUoY29uc3Qg
Qnl0ZVR5cGUmIHR5cGUpCkBAIC03NiwxMCArNzcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgd3Jp
dGVUeXBlKGRhdGEpOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVGbG9hdFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQorICAgIHZvaWQgd3JpdGVHcmFwaGljc1BvaW50KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50KQogICAgIHsKLSAgICAgICAgd3JpdGVGbG9hdChwb2ludC54KCkpOwot
ICAgICAgICB3cml0ZUZsb2F0KHBvaW50LnkoKSk7CisgICAgICAgIHdyaXRlRmxvYXQobmFycm93
UHJlY2lzaW9uVG9GbG9hdChwb2ludC54KCkpKTsKKyAgICAgICAgd3JpdGVGbG9hdChuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHBvaW50LnkoKSkpOwogICAgIH0KIAogICAgIHZvaWQgd3JpdGVTZWdt
ZW50VHlwZSh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxNSArNDgsMTUgQEAgU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnVHlwZT4ocmVhZFNWR1NlZ21l
bnRUeXBlKCkpOwogfQogCi1ib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZU1vdmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7
Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2ludCgpOworICAgIHRhcmdldFBvaW50ID0g
cmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRo
Qnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEdy
YXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0
UG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTcyLDQyICs3Miw0MiBAQCBib29sIFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlOjpwYXJzZUxpbmVUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNW
R1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQ
b2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50KQogewotICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgcG9pbnQyID0g
cmVhZEZsb2F0UG9pbnQoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7Cisg
ICAgcG9pbnQxID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKKyAgICBwb2ludDIgPSByZWFkR3JhcGhp
Y3NQb2ludCgpOworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2
ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQpCitib29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJp
Y1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCkKIHsKLSAgICBwb2ludDIgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBv
aW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBwb2ludDIgPSByZWFkR3JhcGhpY3NQb2ludCgp
OworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQor
Ym9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVu
dChHcmFwaGljc1BvaW50JiBwb2ludDEsIEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewot
ICAgIHBvaW50MSA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHBvaW50MSA9IHJlYWRHcmFwaGljc1BvaW50KCk7CisgICAgdGFyZ2V0
UG9pbnQgPSByZWFkR3JhcGhpY3NQb2ludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdt
ZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCkKIHsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgdGFy
Z2V0UG9pbnQgPSByZWFkR3JhcGhpY3NQb2ludCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngs
IGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYg
bGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAg
ICByeCA9IHJlYWRGbG9hdCgpOwogICAgIHJ5ID0gcmVhZEZsb2F0KCk7CiAgICAgYW5nbGUgPSBy
ZWFkRmxvYXQoKTsKICAgICBsYXJnZUFyYyA9IHJlYWRGbGFnKCk7CiAgICAgc3dlZXAgPSByZWFk
RmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0YXJnZXRQ
b2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1BhdGhCeXRlU3Ry
ZWFtU291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5o
IgogI2luY2x1ZGUgIlNWR1BhdGhTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgpAQCAtNDMsMTUgKzQzLDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZH
U2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUmKTsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBl
IG5leHRDb21tYW5kKFNWR1BhdGhTZWdUeXBlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1v
dmVUb1NlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1Nl
Z21lbnQoRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQo
R3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1NlZ21lbnQoR3Jh
cGhpY3NQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb0hvcml6b250YWxTZWdt
ZW50KGZsb2F0Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50
KGZsb2F0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9h
dFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0g
ICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdt
ZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYsIGJvb2wmLCBib29sJiwgRmxvYXRQb2ludCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYs
IEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNz
UG9pbnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1
YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEdy
YXBoaWNzUG9pbnQmKTsKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDcwMSkKQEAgLTg2LDExICs4NiwxMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
cmVhZFR5cGU8dW5zaWduZWQgc2hvcnQsIFVuc2lnbmVkU2hvcnRCeXRlPigpOwogICAgIH0KIAot
ICAgIEZsb2F0UG9pbnQgcmVhZEZsb2F0UG9pbnQoKQorICAgIEdyYXBoaWNzUG9pbnQgcmVhZEdy
YXBoaWNzUG9pbnQoKQogICAgIHsKICAgICAgICAgZmxvYXQgeCA9IHJlYWRUeXBlPGZsb2F0LCBG
bG9hdEJ5dGU+KCk7CiAgICAgICAgIGZsb2F0IHkgPSByZWFkVHlwZTxmbG9hdCwgRmxvYXRCeXRl
PigpOwotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCh4LCB5KTsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgfQogCiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0qIG1fc3Ry
ZWFtOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQ29uc3VtZXIuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDcgQEAKICNkZWZpbmUgU1ZHUGF0aENvbnN1bWVyX2gKIAogI2lmIEVO
QUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9p
bnQuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogCkBAIC01MCwxOCArNTAsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhbnVwKCkgPSAwOwogCiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1h
bGl6ZWRQYXJzaW5nIG1vZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQ
b2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2Vk
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZVBhdGgoKSA9IDA7CiAKICAgICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRl
cmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvVmVydGlj
YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2
ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXJjVG8o
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2
ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0
aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJj
RmxhZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgflNWR1BhdGhDb25zdW1lcigp
IHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDkgKzkzLDkgQEAgZmxvYXQgU1ZHUGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVu
Z3RoKCkKICAgICByZXR1cm4gdG90YWxMZW5ndGg7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHUGF0aEVs
ZW1lbnQ6OmdldFBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQorR3JhcGhpY3NQb2ludCBTVkdQ
YXRoRWxlbWVudDo6Z2V0UG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgpCiB7Ci0gICAgRmxvYXRQ
b2ludCBwb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50OwogICAgIFNWR1BhdGhQYXJzZXJG
YWN0b3J5OjpzZWxmKCktPmdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKG1fcGF0
aEJ5dGVTdHJlYW0uZ2V0KCksIGxlbmd0aCwgcG9pbnQpOwogICAgIHJldHVybiBwb2ludDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQYXRoRWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIAogICAgIGZs
b2F0IGdldFRvdGFsTGVuZ3RoKCk7Ci0gICAgRmxvYXRQb2ludCBnZXRQb2ludEF0TGVuZ3RoKGZs
b2F0IGRpc3RhbmNlKTsKKyAgICBHcmFwaGljc1BvaW50IGdldFBvaW50QXRMZW5ndGgoZmxvYXQg
ZGlzdGFuY2UpOwogICAgIHVuc2lnbmVkIGxvbmcgZ2V0UGF0aFNlZ0F0TGVuZ3RoKGZsb2F0IGRp
c3RhbmNlKTsKIAogICAgIFBhc3NSZWZQdHI8U1ZHUGF0aFNlZ0Nsb3NlUGF0aD4gY3JlYXRlU1ZH
UGF0aFNlZ0Nsb3NlUGF0aChTVkdQYXRoU2VnUm9sZSByb2xlID0gUGF0aFNlZ1VuZGVmaW5lZFJv
bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBTVkdQYXRoUGFyc2VyOjpwYXJzZUNsb3NlUGF0aFNl
Z21lbgogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlTW92ZVRvU2VnbWVudCgpCiB7Ci0gICAg
RmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50Owog
ICAgIGlmICghbV9zb3VyY2UtPnBhcnNlTW92ZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjgsNyArNjgsNyBAQCBib29sIFNWR1BhdGhQYXJzZXI6
OnBhcnNlTW92ZVRvU2VnbWVudCgpCiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9T
ZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9p
bnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VMaW5lVG9TZWdtZW50KHRh
cmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMTksOSArMTE5LDkgQEAg
Ym9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsUwogCiBib29sIFNWR1BhdGhQ
YXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2lu
dDE7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsK
KyAgICBHcmFwaGljc1BvaW50IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50MjsKKyAg
ICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3VyY2UtPnBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudChwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9pbnQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTE0Miw4ICsxNDIsOCBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU2VnCiAKIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50MjsKLSAgICBGbG9hdFBv
aW50IHRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQyOworICAgIEdyYXBoaWNz
UG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNT
bW9vdGhTZWdtZW50KHBvaW50MiwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1
YmljU21vCiAgICAgICAgIG1fY29udHJvbFBvaW50ID0gbV9jdXJyZW50UG9pbnQ7CiAKICAgICBp
ZiAobV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKLSAgICAgICAgRmxv
YXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBw
b2ludDEgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgcG9pbnQxLnNjYWxlKDIsIDIpOwogICAg
ICAgICBwb2ludDEubW92ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9jb250cm9sUG9pbnQueSgp
KTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CkBAIC0xNzMs
MTYgKzE3MywxNiBAQCBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb0N1YmljU21vCiAK
IGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0g
ICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBH
cmFwaGljc1BvaW50IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAg
IGlmICghbV9zb3VyY2UtPnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQocG9pbnQxLCB0YXJn
ZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5n
TW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IHBv
aW50MTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKKyAgICAg
ICAgR3JhcGhpY3NQb2ludCBwb2ludDEgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgcG9pbnQx
Lm1vdmUoMiAqIG1fY29udHJvbFBvaW50LngoKSwgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBvaW50LngoKSArIDIgKiBtX2NvbnRyb2xQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOworICAg
ICAgICBHcmFwaGljc1BvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogbV9jb250cm9s
UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9pbnQueSgpKTsKICAg
ICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7CiAgICAgICAgICAgICBw
b2ludDEubW92ZSgyICogbV9jdXJyZW50UG9pbnQueCgpLCAyICogbV9jdXJyZW50UG9pbnQueSgp
KTsKICAgICAgICAgICAgIHBvaW50Mi5tb3ZlKDMgKiBtX2N1cnJlbnRQb2ludC54KCksIDMgKiBt
X2N1cnJlbnRQb2ludC55KCkpOwpAQCAtMjAzLDcgKzIwMyw3IEBAIGJvb2wgU1ZHUGF0aFBhcnNl
cjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50
OworICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3NvdXJjZS0+cGFy
c2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMjE0LDExICsyMTQsMTEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpw
YXJzZUN1cnZlVG9RdWFkcmF0aQogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBv
aW50OwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7
Ci0gICAgICAgIEZsb2F0UG9pbnQgY3ViaWNQb2ludCA9IG1fY3VycmVudFBvaW50OworICAgICAg
ICBHcmFwaGljc1BvaW50IGN1YmljUG9pbnQgPSBtX2N1cnJlbnRQb2ludDsKICAgICAgICAgY3Vi
aWNQb2ludC5zY2FsZSgyLCAyKTsKICAgICAgICAgY3ViaWNQb2ludC5tb3ZlKC1tX2NvbnRyb2xQ
b2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50
MShtX2N1cnJlbnRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50
LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRh
cmdldFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAq
IGN1YmljUG9pbnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDEobV9jdXJyZW50
UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCBtX2N1cnJlbnRQb2ludC55KCkgKyAyICog
Y3ViaWNQb2ludC55KCkpOworICAgICAgICBHcmFwaGljc1BvaW50IHBvaW50Mih0YXJnZXRQb2lu
dC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSArIDIgKiBjdWJpY1Bv
aW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewog
ICAgICAgICAgICAgcG9pbnQyICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICAgICAgdGFyZ2V0
UG9pbnQgKz0gbV9jdXJyZW50UG9pbnQ7CkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBTVkdQYXRo
UGFyc2VyOjpwYXJzZUFyY1RvU2VnbWVudCgpCiAgICAgZmxvYXQgYW5nbGU7CiAgICAgYm9vbCBs
YXJnZUFyYzsKICAgICBib29sIHN3ZWVwOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUFy
Y1RvU2VnbWVudChyeCwgcnksIGFuZ2xlLCBsYXJnZUFyYywgc3dlZXAsIHRhcmdldFBvaW50KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNjMsNyArMjYzLDcgQEAgYm9vbCBTVkdQYXRo
UGFyc2VyOjpwYXJzZUFyY1RvU2VnbWVudCgpCiAgICAgfQogCiAgICAgaWYgKG1fcGF0aFBhcnNp
bmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQx
ID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQxID0gbV9jdXJy
ZW50UG9pbnQ7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykKICAg
ICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICBtX2N1cnJl
bnRQb2ludCA9IHRhcmdldFBvaW50OwpAQCAtMjgwLDkgKzI4MCw5IEBAIGJvb2wgU1ZHUGF0aFBh
cnNlcjo6cGFyc2VQYXRoRGF0YUZyb21Tb3UKIAogICAgIG1fcGF0aFBhcnNpbmdNb2RlID0gcGF0
aFBhcnNpbmdNb2RlOwogCi0gICAgbV9jb250cm9sUG9pbnQgPSBGbG9hdFBvaW50KCk7Ci0gICAg
bV9jdXJyZW50UG9pbnQgPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9zdWJQYXRoUG9pbnQgPSBGbG9h
dFBvaW50KCk7CisgICAgbV9jb250cm9sUG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CisgICAgbV9j
dXJyZW50UG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CisgICAgbV9zdWJQYXRoUG9pbnQgPSBHcmFw
aGljc1BvaW50KCk7CiAgICAgbV9jbG9zZVBhdGggPSB0cnVlOwogCiAgICAgLy8gU2tpcCBhbnkg
bGVhZGluZyBzcGFjZXMuCkBAIC00MDEsMTUgKzQwMSwxNSBAQCB2b2lkIFNWR1BhdGhQYXJzZXI6
OmNsZWFudXAoKQogLy8gVGhpcyB3b3JrcyBieSBjb252ZXJ0aW5nIHRoZSBTVkcgYXJjIHRvICJz
aW1wbGUiIGJlemllcnMuCiAvLyBQYXJ0bHkgYWRhcHRlZCBmcm9tIE5pa28ncyBjb2RlIGluIGtk
ZWxpYnMva2RlY29yZS9zdmdpY29ucy4KIC8vIFNlZSBhbHNvIFNWRyBpbXBsZW1lbnRhdGlvbiBu
b3RlczogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ltcGxub3RlLmh0bWwjQXJjQ29udmVyc2lv
bkVuZHBvaW50VG9DZW50ZXIKLWJvb2wgU1ZHUGF0aFBhcnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJp
YyhmbG9hdCBhbmdsZSwgZmxvYXQgcngsIGZsb2F0IHJ5LCBGbG9hdFBvaW50JiBwb2ludDEsIEZs
b2F0UG9pbnQmIHBvaW50MiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKQorYm9v
bCBTVkdQYXRoUGFyc2VyOjpkZWNvbXBvc2VBcmNUb0N1YmljKGZsb2F0IGFuZ2xlLCBmbG9hdCBy
eCwgZmxvYXQgcnksIEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgcG9pbnQy
LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcpCiB7Ci0gICAgRmxvYXRTaXplIG1p
ZFBvaW50RGlzdGFuY2UgPSBwb2ludDEgLSBwb2ludDI7CisgICAgR3JhcGhpY3NTaXplIG1pZFBv
aW50RGlzdGFuY2UgPSBwb2ludDEgLSBwb2ludDI7CiAgICAgbWlkUG9pbnREaXN0YW5jZS5zY2Fs
ZSgwLjVmKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwb2ludFRyYW5zZm9ybTsKICAgICBwb2lu
dFRyYW5zZm9ybS5yb3RhdGUoLWFuZ2xlKTsKIAotICAgIEZsb2F0UG9pbnQgdHJhbnNmb3JtZWRN
aWRQb2ludCA9IHBvaW50VHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQobWlkUG9pbnREaXN0
YW5jZS53aWR0aCgpLCBtaWRQb2ludERpc3RhbmNlLmhlaWdodCgpKSk7CisgICAgR3JhcGhpY3NQ
b2ludCB0cmFuc2Zvcm1lZE1pZFBvaW50ID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQoR3JhcGhp
Y3NQb2ludChtaWRQb2ludERpc3RhbmNlLndpZHRoKCksIG1pZFBvaW50RGlzdGFuY2UuaGVpZ2h0
KCkpKTsKICAgICBmbG9hdCBzcXVhcmVSeCA9IHJ4ICogcng7CiAgICAgZmxvYXQgc3F1YXJlUnkg
PSByeSAqIHJ5OwogICAgIGZsb2F0IHNxdWFyZVggPSB0cmFuc2Zvcm1lZE1pZFBvaW50LngoKSAq
IHRyYW5zZm9ybWVkTWlkUG9pbnQueCgpOwpAQCAtNDI5LDcgKzQyOSw3IEBAIGJvb2wgU1ZHUGF0
aFBhcnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJpYygKIAogICAgIHBvaW50MSA9IHBvaW50VHJhbnNm
b3JtLm1hcFBvaW50KHBvaW50MSk7CiAgICAgcG9pbnQyID0gcG9pbnRUcmFuc2Zvcm0ubWFwUG9p
bnQocG9pbnQyKTsKLSAgICBGbG9hdFNpemUgZGVsdGEgPSBwb2ludDIgLSBwb2ludDE7CisgICAg
R3JhcGhpY3NTaXplIGRlbHRhID0gcG9pbnQyIC0gcG9pbnQxOwogCiAgICAgZmxvYXQgZCA9IGRl
bHRhLndpZHRoKCkgKiBkZWx0YS53aWR0aCgpICsgZGVsdGEuaGVpZ2h0KCkgKiBkZWx0YS5oZWln
aHQoKTsKICAgICBmbG9hdCBzY2FsZUZhY3RvclNxdWFyZWQgPSBzdGQ6Om1heCgxIC8gZCAtIDAu
MjVmLCAwLmYpOwpAQCAtNDM5LDcgKzQzOSw3IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6ZGVjb21w
b3NlQXJjVG9DdWJpYygKICAgICAgICAgc2NhbGVGYWN0b3IgPSAtc2NhbGVGYWN0b3I7CiAKICAg
ICBkZWx0YS5zY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9
IEZsb2F0UG9pbnQoMC41ZiAqIChwb2ludDEueCgpICsgcG9pbnQyLngoKSkgLSBkZWx0YS5oZWln
aHQoKSwKKyAgICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50ID0gR3JhcGhpY3NQb2ludCgwLjVm
ICogKHBvaW50MS54KCkgKyBwb2ludDIueCgpKSAtIGRlbHRhLmhlaWdodCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYgKiAocG9pbnQxLnkoKSArIHBvaW50
Mi55KCkpICsgZGVsdGEud2lkdGgoKSk7CiAKICAgICBmbG9hdCB0aGV0YTEgPSBhdGFuMmYocG9p
bnQxLnkoKSAtIGNlbnRlclBvaW50LnkoKSwgcG9pbnQxLngoKSAtIGNlbnRlclBvaW50LngoKSk7
CkBAIC00NzAsOSArNDcwLDkgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpkZWNvbXBvc2VBcmNUb0N1
YmljKAogICAgICAgICBmbG9hdCBzaW5FbmRUaGV0YSA9IHNpbmYoZW5kVGhldGEpOwogICAgICAg
ICBmbG9hdCBjb3NFbmRUaGV0YSA9IGNvc2YoZW5kVGhldGEpOwogCi0gICAgICAgIHBvaW50MSA9
IEZsb2F0UG9pbnQoY29zU3RhcnRUaGV0YSAtIHQgKiBzaW5TdGFydFRoZXRhLCBzaW5TdGFydFRo
ZXRhICsgdCAqIGNvc1N0YXJ0VGhldGEpOworICAgICAgICBwb2ludDEgPSBHcmFwaGljc1BvaW50
KGNvc1N0YXJ0VGhldGEgLSB0ICogc2luU3RhcnRUaGV0YSwgc2luU3RhcnRUaGV0YSArIHQgKiBj
b3NTdGFydFRoZXRhKTsKICAgICAgICAgcG9pbnQxLm1vdmUoY2VudGVyUG9pbnQueCgpLCBjZW50
ZXJQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHRhcmdldFBvaW50ID0gRmxvYXRQb2lu
dChjb3NFbmRUaGV0YSwgc2luRW5kVGhldGEpOworICAgICAgICBHcmFwaGljc1BvaW50IHRhcmdl
dFBvaW50ID0gR3JhcGhpY3NQb2ludChjb3NFbmRUaGV0YSwgc2luRW5kVGhldGEpOwogICAgICAg
ICB0YXJnZXRQb2ludC5tb3ZlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgpKTsKICAg
ICAgICAgcG9pbnQyID0gdGFyZ2V0UG9pbnQ7CiAgICAgICAgIHBvaW50Mi5tb3ZlKHQgKiBzaW5F
bmRUaGV0YSwgLXQgKiBjb3NFbmRUaGV0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFy
c2VyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhbnVwKCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBkZWNvbXBvc2VBcmNUb0N1YmljKGZsb2F0
LCBmbG9hdCwgZmxvYXQsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgYm9vbCBsYXJnZUFyY0Zs
YWcsIGJvb2wgc3dlZXBGbGFnKTsKKyAgICBib29sIGRlY29tcG9zZUFyY1RvQ3ViaWMoZmxvYXQs
IGZsb2F0LCBmbG9hdCwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmLCBib29sIGxhcmdl
QXJjRmxhZywgYm9vbCBzd2VlcEZsYWcpOwogICAgIHZvaWQgcGFyc2VDbG9zZVBhdGhTZWdtZW50
KCk7CiAgICAgYm9vbCBwYXJzZU1vdmVUb1NlZ21lbnQoKTsKICAgICBib29sIHBhcnNlTGluZVRv
U2VnbWVudCgpOwpAQCAtNjIsOSArNjIsOSBAQCBwcml2YXRlOgogICAgIFBhdGhQYXJzaW5nTW9k
ZSBtX3BhdGhQYXJzaW5nTW9kZTsKICAgICBTVkdQYXRoU2VnVHlwZSBtX2xhc3RDb21tYW5kOwog
ICAgIGJvb2wgbV9jbG9zZVBhdGg7Ci0gICAgRmxvYXRQb2ludCBtX2NvbnRyb2xQb2ludDsKLSAg
ICBGbG9hdFBvaW50IG1fY3VycmVudFBvaW50OwotICAgIEZsb2F0UG9pbnQgbV9zdWJQYXRoUG9p
bnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2NvbnRyb2xQb2ludDsKKyAgICBHcmFwaGljc1BvaW50
IG1fY3VycmVudFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9zdWJQYXRoUG9pbnQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aFBhcnNlckZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoUGFyc2VyRmFjdG9yeS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5
Niw3IEBAIGJvb2wgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmdldFRvdGFsTGVuZ3QKICAgICByZXR1
cm4gb2s7CiB9CiAKLWJvb2wgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmdldFBvaW50QXRMZW5ndGhP
ZlNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiBzdHJlYW0sIGZsb2F0IGxlbmd0
aCwgRmxvYXRQb2ludCYgcG9pbnQpCitib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRQb2lu
dEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFtLCBm
bG9hdCBsZW5ndGgsIEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIEFTU0VSVChzdHJlYW0p
OwogICAgIGlmIChzdHJlYW0tPmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoUGFyc2VyRmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoUGFyc2VyRmFjdG9yeS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIHB1YmxpYzoKICAgICBib29sIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbShTVkdQ
YXRoQnl0ZVN0cmVhbSosIFNWR1BhdGhCeXRlU3RyZWFtKiwgT3duUHRyPFNWR1BhdGhCeXRlU3Ry
ZWFtPiYsIGZsb2F0KTsKICAgICBib29sIGdldFNWR1BhdGhTZWdBdExlbmd0aEZyb21TVkdQYXRo
Qnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGZsb2F0IGxlbmd0aCwgdW5zaWduZWQgbG9u
ZyYgcGF0aFNlZyk7CiAgICAgYm9vbCBnZXRUb3RhbExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0o
U1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCYgdG90YWxMZW5ndGgpOwotICAgIGJvb2wgZ2V0UG9p
bnRBdExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCBs
ZW5ndGgsIEZsb2F0UG9pbnQmKTsKKyAgICBib29sIGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhC
eXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwgZmxvYXQgbGVuZ3RoLCBHcmFwaGljc1BvaW50
Jik7CiAKIHByaXZhdGU6CiAgICAgU1ZHUGF0aFBhcnNlckZhY3RvcnkoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6U1ZHUGF0
aFNlZ0xpc3RCdWkKIHsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVUbyhj
b25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBB
U1NFUlQobV9wYXRoRWxlbWVudCk7CiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3QpOwpAQCAtNTks
NyArNTksNyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bW92ZVRvKGNvbnN0CiAgICAg
ICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVTVkdQYXRoU2Vn
TW92ZXRvUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBtX3BhdGhTZWdSb2xl
KSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRo
U2VnTGlzdEJ1aWxkZXI6OmxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwog
ICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBTVkdQYXRo
U2VnTGlzdEJ1aWxkZXI6OmxpbmVUb1ZlcnRpYwogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBl
bmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKHksIG1f
cGF0aFNlZ1JvbGUpKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9D
dWJpYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50Miwg
Y29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQor
dm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VS
VChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC05OSw3ICs5
OSw3IEBAIHZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMKICAgICAgICAg
bV9wYXRoU2VnTGlzdC0+YXBwZW5kKG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNSZWwodGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50MS54KCks
IHBvaW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIG1fcGF0aFNlZ1JvbGUpKTsKIH0K
IAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29v
cmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3Vi
aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50
JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1f
cGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhTZWdMaXN0KTsKQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb0N1YmljCiAgICAgICAgIG1f
cGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpLCBwb2ludDIu
eCgpLCBwb2ludDIueSgpLCBtX3BhdGhTZWdSb2xlKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xp
c3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9p
ZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VS
VChtX3BhdGhTZWdMaXN0KTsKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0
QnVpbGRlcjo6Y3VydmVUb1F1YWRyCiAgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3Bh
dGhFbGVtZW50LT5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCh0YXJnZXRQb2lu
dC54KCksIHRhcmdldFBvaW50LnkoKSwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgbV9wYXRoU2Vn
Um9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRp
Y1Ntb290aChjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2Rl
IG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpY1Ntb290
aChjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhTZWdM
aXN0KTsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3Vy
dmVUb1F1YWRyCiAgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5j
cmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCks
IHRhcmdldFBvaW50LnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdM
aXN0QnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBs
YXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2lu
dCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6
YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcs
IGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFT
U0VSVChtX3BhdGhTZWdMaXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2Vn
TGlzdEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTZWdMaXN0QnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAj
ZGVmaW5lIFNWR1BhdGhTZWdMaXN0QnVpbGRlcl9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAi
U1ZHUGF0aENvbnN1bWVyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdQYXRoU2VnTGlzdC5oIgpAQCAtNTEsMTggKzUxLDE4IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVz
LgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgY2xvc2Vk
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgRmxv
YXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9D
dWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3Qg
R3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZp
cnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50Jiwg
Y29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKIAogICAgIC8vIE9ubHkgdXNl
ZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hvcml6
b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGxpbmVU
b1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBj
dXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZs
b2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1
YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0
aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25z
dCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9k
ZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhp
Y3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGFyY1RvKGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29u
c3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAKICAgICBTVkdQYXRoRWxl
bWVudCogbV9wYXRoRWxlbWVudDsKICAgICBTVkdQYXRoU2VnTGlzdCogbV9wYXRoU2VnTGlzdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0U291cmNlLmNwcAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwyMSArNTksMjEgQEAgU1ZHUGF0aFNlZ1R5cGUgU1ZH
UGF0aFNlZ0xpc3RTb3VyY2U6Om5leAogICAgIHJldHVybiBwYXRoU2VnVHlwZTsKIH0KIAotYm9v
bCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50
KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwog
ICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb0FicyB8
fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ01vdmVUb1JlbCk7CiAgICAgU1ZH
UGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIG1vdmVUbyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdT
aW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZs
b2F0UG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdy
YXBoaWNzUG9pbnQobW92ZVRvLT54KCksIG1vdmVUby0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VMaW5l
VG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3Nl
Z21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xp
bmVUb0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0xpbmVUb1JlbCk7
CiAgICAgU1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqIGxpbmVUbyA9IHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICB0YXJnZXRQ
b2ludCA9IEZsb2F0UG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICB0YXJnZXRQ
b2ludCA9IEdyYXBoaWNzUG9pbnQobGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtOTUsNDcgKzk1LDQ3IEBAIGJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvVmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU2Vn
TGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwg
RmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0
aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChHcmFwaGljc1BvaW50JiBw
b2ludDEsIEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQp
CiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNl
Z1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5
cGUoKSA9PSBQYXRoU2VnQ3VydmVUb0N1YmljUmVsKTsKICAgICBTVkdQYXRoU2VnQ3VydmV0b0N1
YmljKiBjdWJpYyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMqPihtX3NlZ21l
bnQuZ2V0KCkpOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoY3ViaWMtPngxKCksIGN1YmljLT55
MSgpKTsKLSAgICBwb2ludDIgPSBGbG9hdFBvaW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7
Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOwor
ICAgIHBvaW50MSA9IEdyYXBoaWNzUG9pbnQoY3ViaWMtPngxKCksIGN1YmljLT55MSgpKTsKKyAg
ICBwb2ludDIgPSBHcmFwaGljc1BvaW50KGN1YmljLT54MigpLCBjdWJpYy0+eTIoKSk7CisgICAg
dGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGN1YmljLT54KCksIGN1YmljLT55KCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZl
VG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChHcmFwaGljc1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQmIHRhcmdldFBv
aW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBh
dGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFicyB8fCBtX3NlZ21lbnQt
PnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aFJlbCk7CiAgICAgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aCogY3ViaWNTbW9vdGggPSBzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDIg
PSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55
KCkpOworICAgIHBvaW50MiA9IEdyYXBoaWNzUG9pbnQoY3ViaWNTbW9vdGgtPngyKCksIGN1Ymlj
U21vb3RoLT55MigpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQoY3ViaWNTbW9v
dGgtPngoKSwgY3ViaWNTbW9vdGgtPnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
U1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQ
b2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xp
c3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9p
bnQxLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50
KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljQWJzIHx8IG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVU
b1F1YWRyYXRpY1JlbCk7CiAgICAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMqIHF1YWRyYXRp
YyA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljKj4obV9zZWdtZW50Lmdl
dCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHF1YWRyYXRpYy0+eDEoKSwgcXVhZHJhdGlj
LT55MSgpKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQocXVhZHJhdGljLT54KCksIHF1
YWRyYXRpYy0+eSgpKTsKKyAgICBwb2ludDEgPSBHcmFwaGljc1BvaW50KHF1YWRyYXRpYy0+eDEo
KSwgcXVhZHJhdGljLT55MSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQocXVh
ZHJhdGljLT54KCksIHF1YWRyYXRpYy0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVu
dChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBh
cnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQpCiB7CiAgICAgQVNTRVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0
aFNlZ1R5cGUoKSA9PSBQYXRoU2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyB8fCBtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwpOwog
ICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBxdWFkcmF0aWNTbW9vdGggPSBzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRyYXRpY1Ntb290aC0+eCgpLCBxdWFkcmF0aWNT
bW9vdGgtPnkoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHF1YWRyYXRpY1Nt
b290aC0+eCgpLCBxdWFkcmF0aWNTbW9vdGgtPnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwg
ZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFy
Y1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJn
ZUFyYywgYm9vbCYgc3dlZXAsIEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIEFT
U0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ0FyY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0FyY1Jl
bCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJjZTo6cGFyc2VB
cmNUb1NlZwogICAgIGFuZ2xlID0gYXJjVG8tPmFuZ2xlKCk7CiAgICAgbGFyZ2VBcmMgPSBhcmNU
by0+bGFyZ2VBcmNGbGFnKCk7CiAgICAgc3dlZXAgPSBhcmNUby0+c3dlZXBGbGFnKCk7Ci0gICAg
dGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGFyY1RvLT54KCksIGFyY1RvLT55KCkpOworICAgIHRh
cmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChhcmNUby0+eCgpLCBhcmNUby0+eSgpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTZWdMaXN0
U291cmNlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdMaXN0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUg
U1ZHUGF0aFNlZ0xpc3RTb3VyY2VfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhdGhT
ZWcuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTGlzdC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTb3Vy
Y2UuaCIKQEAgLTQ1LDE1ICs0NSwxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBTVkdQYXRoU2Vn
VHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFy
c2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5l
VG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9TZWdt
ZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdtZW50
KEdyYXBoaWNzUG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9udGFs
U2VnbWVudChmbG9hdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2FsU2Vn
bWVudChmbG9hdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQo
RmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYp
OwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9p
bnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1Rv
U2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEdyYXBoaWNzUG9p
bnQmLCBHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9p
bnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChHcmFw
aGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wm
LCBHcmFwaGljc1BvaW50Jik7CiAKICAgICBjb25zdCBTVkdQYXRoU2VnTGlzdCYgbV9wYXRoU2Vn
TGlzdDsKICAgICBSZWZQdHI8U1ZHUGF0aFNlZz4gbV9zZWdtZW50OwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFNvdXJjZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwxNSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGUoU1ZHUGF0aFNlZ1R5cGUm
KSA9IDA7CiAgICAgdmlydHVhbCBTVkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2Vn
VHlwZSBwcmV2aW91c0NvbW1hbmQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZU1vdmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9T
ZWdtZW50KEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlTW92ZVRvU2Vn
bWVudChHcmFwaGljc1BvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1Nl
Z21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudChmbG9hdCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3Vy
dmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9h
dFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50Jikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0Jiwg
ZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYs
IEdyYXBoaWNzUG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1Ymlj
U21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChHcmFwaGljc1BvaW50Jiwg
R3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEdy
YXBoaWNzUG9pbnQmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDkx
MDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBTdHJpbmcgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6
OnJlc3VsdCgpCiAgICAgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi12
b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5n
QnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBib29sLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3Jk
aW5hdGVzKQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJN
ICUuNmxnICUuNmxnICIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CkBAIC00
Myw3ICs0Myw3IEBAIHZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6Om1vdmVUbyhjb25zdCAKICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgibSAlLjZsZyAlLjZs
ZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1Bh
dGhTdHJpbmdCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGluZVRv
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9k
ZSkKIHsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJMICUuNmxnICUuNmxnICIsIHRhcmdl
dFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgU1ZH
UGF0aFN0cmluZ0J1aWxkZXI6OmxpbmVUb1ZlcnRpY2EKICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChTdHJpbmc6OmZvcm1hdCgidiAlLjZsZyAiLCB5KSk7CiB9CiAKLXZvaWQgU1ZHUGF0
aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVU
b0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVN
b2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiQyAlLjZsZyAlLjZsZyAl
LjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2ludDIu
eCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwpAQCAt
NzUsNyArNzUsNyBAQCB2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoCiAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoImMgJS42bGcgJS42
bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgcG9p
bnQyLngoKSwgcG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsK
IH0KIAotdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhD
b29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb0N1
YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
U3RyaW5nOjpmb3JtYXQoIlMgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQyLngoKSwg
cG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb0N1YmljUwogICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJzICUuNmxnICUuNmxnICUu
NmxnICUuNmxnICIsIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFy
Z2V0UG9pbnQueSgpKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdCdWls
ZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewog
ICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlEgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwg
cG9pbnQxLngoKSwgcG9pbnQxLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkp
KTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb1F1
YWRyYQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJxICUu
NmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHRhcmdldFBv
aW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxk
ZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQs
IFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3Vy
dmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0
aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGlu
YXRlcykKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiVCAl
LjZsZyAlLjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwpAQCAtOTks
NyArOTksNyBAQCB2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhCiAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInQgJS42bGcgJS42bGcg
IiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKIH0KIAotdm9pZCBTVkdQYXRo
U3RyaW5nQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9v
bCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVy
OjphcmNUbyhmbG9hdCByMSwgZmxvYXQgcjIsIGZsb2F0IGFuZ2xlLCBib29sIGxhcmdlQXJjRmxh
ZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRo
Q29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5h
dGVzKQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJBICUu
NmxnICUuNmxnICUuNmxnICVkICVkICUuNmxnICUuNmxnICIsIHIxLCByMiwgYW5nbGUsIGxhcmdl
QXJjRmxhZywgc3dlZXBGbGFnLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmgJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZHUGF0aFN0cmluZ0J1aWxk
ZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMzcsMTggKzM3LDE4IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIGNvbnRpbnVlQ29uc3VtaW5nKCkgeyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nL05vcm1hbGl6ZWRQYXJzaW5nIG1v
ZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgY2xv
c2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29u
c3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAg
IHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRp
bmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKIAogICAgIC8vIE9ubHkg
dXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb0hv
cml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGxp
bmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9p
ZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGlj
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQs
IGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhj
b25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGFyY1Rv
KGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywg
Y29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAKICAgICBTdHJpbmdC
dWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDIzICsx
MjcsMjMgQEAgU1ZHUGF0aFNlZ1R5cGUgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dAogICAgIHJl
dHVybiBuZXh0Q29tbWFuZDsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1v
dmVUb1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTdHJpbmdT
b3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsK
ICAgICBmbG9hdCB0b1g7CiAgICAgZmxvYXQgdG9ZOwogICAgIGlmICghcGFyc2VOdW1iZXIobV9j
dXJyZW50LCBtX2VuZCwgdG9YKSB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9Z
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0
b1gsIHRvWSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVU
b1NlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlTGluZVRvU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAg
ICBmbG9hdCB0b1g7CiAgICAgZmxvYXQgdG9ZOwogICAgIGlmICghcGFyc2VOdW1iZXIobV9jdXJy
ZW50LCBtX2VuZCwgdG9YKSB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gs
IHRvWSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VMaW5lVG9WZXIKICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50LCBt
X2VuZCwgeSk7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3Vi
aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgcG9pbnQyLCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgcG9pbnQy
LCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBmbG9hdCB4MTsKICAgICBmbG9h
dCB5MTsKQEAgLTE3MiwxMyArMTcyLDEzIEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3UKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRv
WCkKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAg
cG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2lu
dCh0b1gsIHRvWSk7CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludCh4MSwgeTEpOworICAgIHBv
aW50MiA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNz
UG9pbnQodG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2lu
dDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpw
YXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFw
aGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBmbG9hdCB4MTsKICAgICBmbG9hdCB5MTsK
QEAgLTE4OSwxMiArMTg5LDEyIEBAIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2
ZVRvQ3UKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkKICAg
ICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KHgxLCB5MSk7Ci0gICAgdGFyZ2V0
UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICBwb2ludDEgPSBHcmFwaGljc1BvaW50
KHgxLCB5MSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0
UG9pbnQpCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkK
IHsKICAgICBmbG9hdCB4MjsKICAgICBmbG9hdCB5MjsKQEAgLTIwNSwyMyArMjA1LDIzIEBAIGJv
b2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXUKICAgICAgICAgfHwgIXBhcnNl
TnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkKICAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1f
Y3VycmVudCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludDIg
PSBGbG9hdFBvaW50KHgyLCB5Mik7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwg
dG9ZKTsKKyAgICBwb2ludDIgPSBHcmFwaGljc1BvaW50KHgyLCB5Mik7CisgICAgdGFyZ2V0UG9p
bnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50
KQogewogICAgIGZsb2F0IHRvWDsKICAgICBmbG9hdCB0b1k7CiAgICAgaWYgKCFwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJl
bnQsIG1fZW5kLCB0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQg
PSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQo
dG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUs
IGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCiti
b29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxv
YXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsK
QEAgLTIzMyw3ICsyMzMsNyBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQXJjVG9T
ZWdtCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAgICAg
ICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKKyAgICB0
YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQodG9YLCB0b1kpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBTVkdQYXRoU3RyaW5nU291
cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlNWR1BhdGhTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDMs
MTUgKzQzLDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBhcnNlU1ZHU2VnbWVudFR5
cGUoU1ZHUGF0aFNlZ1R5cGUmKTsKICAgICB2aXJ0dWFsIFNWR1BhdGhTZWdUeXBlIG5leHRDb21t
YW5kKFNWR1BhdGhTZWdUeXBlIHByZXZpb3VzQ29tbWFuZCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VM
aW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VNb3ZlVG9T
ZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9TZWdt
ZW50KEdyYXBoaWNzUG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9Ib3Jpem9u
dGFsU2VnbWVudChmbG9hdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudChmbG9hdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2lu
dCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0
UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRy
YXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUFy
Y1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEdyYXBoaWNz
UG9pbnQmLCBHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNz
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChH
cmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJv
b2wmLCBHcmFwaGljc1BvaW50Jik7CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5j
cHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJz
YWxTdGF0ZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOSArMzMsMTkgQEAgU1ZH
UGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6U1ZHUGF0aFRyYQogewogfQogCi12b2lkIFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlKQordm9pZCBTVkdQYXRoVHJhdmVyc2FsU3Rh
dGVCdWlsZGVyOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2ws
IFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJzYWxTdGF0ZSk7CiAg
ICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5t
b3ZlVG8odGFyZ2V0UG9pbnQpOwogfQogCi12b2lkIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxk
ZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVN
b2RlKQordm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpsaW5lVG8oY29uc3QgR3Jh
cGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NF
UlQobV90cmF2ZXJzYWxTdGF0ZSk7CiAgICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0
aCArPSBtX3RyYXZlcnNhbFN0YXRlLT5saW5lVG8odGFyZ2V0UG9pbnQpOwogfQogCi12b2lkIFNW
R1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKK3ZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRl
QnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwg
UGF0aENvb3JkaW5hdGVNb2RlKQogewogICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKICAg
ICBtX3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoICs9IG1fdHJhdmVyc2FsU3RhdGUtPmN1
YmljQmV6aWVyVG8ocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50KTsKQEAgLTg4LDcgKzg4LDcg
QEAgZmxvYXQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6dG90YQogICAgIHJldHVybiBt
X3RyYXZlcnNhbFN0YXRlLT5tX3RvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBvaW50IFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgpCitHcmFwaGljc1BvaW50IFNWR1Bh
dGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnJlbnRQb2ludCgpCiB7CiAgICAgQVNTRVJUKG1f
dHJhdmVyc2FsU3RhdGUpOwogICAgIHJldHVybiBtX3RyYXZlcnNhbFN0YXRlLT5tX2N1cnJlbnQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVC
dWlsZGVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAog
I2RlZmluZSBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcp
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNp
bmNsdWRlICJQYXRoVHJhdmVyc2FsU3RhdGUuaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIu
aCIKIApAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBsb25nIHBhdGhT
ZWdtZW50SW5kZXgoKTsKICAgICBmbG9hdCB0b3RhbExlbmd0aCgpOwotICAgIEZsb2F0UG9pbnQg
Y3VycmVudFBvaW50KCk7CisgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9pbnQoKTsKIAogICAg
IHZvaWQgc2V0Q3VycmVudFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxTdGF0ZSogdHJhdmVy
c2FsU3RhdGUpIHsgbV90cmF2ZXJzYWxTdGF0ZSA9IHRyYXZlcnNhbFN0YXRlOyB9CiAgICAgdm9p
ZCBzZXREZXNpcmVkTGVuZ3RoKGZsb2F0KTsKQEAgLTQ0LDE5ICs0NCwxOSBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6ZWRQYXJz
aW5nIG1vZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8o
Y29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lk
IGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBtb3Zl
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
OworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGlj
c1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKIAogcHJpdmF0
ZToKICAgICAvLyBOb3QgdXNlZCBmb3IgUGF0aFRyYXZlcnNhbFN0YXRlLgogICAgIHZpcnR1YWwg
dm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvVmVydGljYWwoZmxvYXQs
IFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCwgY29uc3Qg
RmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBH
cmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJh
dGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0
LCBmbG9hdCwgYm9vbCwgYm9vbCwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRl
TW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgUGF0aFRyYXZlcnNhbFN0YXRl
KiBtX3RyYXZlcnNhbFN0YXRlOwogICAgIGZsb2F0IG1fZGVzaXJlZExlbmd0aDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3
IEBACiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdQb2ludExpc3QuaCIKIAotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCkBAIC0zOCw3ICszOCw3IEBAIFN0cmluZyBTVkdQb2ludExpc3Q6OnZhbHVlQXNTdHJpbmco
KSBjb24KICAgICAgICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAi
KTsgLy8gRklYTUU6IFNob3VsZG4ndCB3ZSB1c2UgY29tbWFzIHRvIHNlcGVyYXRlPwogCi0gICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50ID0gYXQoaSk7CisgICAgICAgIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50ID0gYXQoaSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6
bnVtYmVyKHBvaW50LngoKSkgKyAnICcgKyBTdHJpbmc6Om51bWJlcihwb2ludC55KCkpKTsKICAg
ICB9CiAKQEAgLTU2LDkgKzU2LDkgQEAgYm9vbCBTVkdQb2ludExpc3Q6OmNyZWF0ZUFuaW1hdGVk
KGNvbnN0IAogICAgIGlmICghaXRlbUNvdW50IHx8IGl0ZW1Db3VudCAhPSB0b0xpc3Quc2l6ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGl0
ZW1Db3VudDsgKytuKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGZyb20gPSBmcm9tTGlz
dC5hdChuKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdG8gPSB0b0xpc3QuYXQobik7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgc2VnbWVudCA9IEZsb2F0UG9pbnQoYWRqdXN0QW5pbWF0ZWRWYWx1
ZShmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyksCisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGZyb20gPSBmcm9tTGlzdC5hdChuKTsKKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYg
dG8gPSB0b0xpc3QuYXQobik7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgc2VnbWVudCA9IEdyYXBo
aWNzUG9pbnQoYWRqdXN0QW5pbWF0ZWRWYWx1ZShmcm9tLngoKSwgdG8ueCgpLCBwcm9ncmVzcyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0QW5pbWF0ZWRW
YWx1ZShmcm9tLnkoKSwgdG8ueSgpLCBwcm9ncmVzcykpOwogICAgICAgICByZXN1bHRMaXN0LmFw
cGVuZChzZWdtZW50KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BvaW50TGlzdC5oCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2ludExpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOSArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc1BvaW50OwogCi1jbGFzcyBTVkdQb2ludExp
c3QgOiBwdWJsaWMgVmVjdG9yPEZsb2F0UG9pbnQ+IHsKK2NsYXNzIFNWR1BvaW50TGlzdCA6IHB1
YmxpYyBWZWN0b3I8R3JhcGhpY3NQb2ludD4gewogcHVibGljOgogICAgIFNWR1BvaW50TGlzdCgp
IHsgfQogCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKIHRlbXBsYXRlPD4KIHN0cnVjdCBTVkdQ
cm9wZXJ0eVRyYWl0czxTVkdQb2ludExpc3Q+IHsKICAgICBzdGF0aWMgU1ZHUG9pbnRMaXN0IGlu
aXRpYWxWYWx1ZSgpIHsgcmV0dXJuIFNWR1BvaW50TGlzdCgpOyB9Ci0gICAgdHlwZWRlZiBGbG9h
dFBvaW50IExpc3RJdGVtVHlwZTsKKyAgICB0eXBlZGVmIEdyYXBoaWNzUG9pbnQgTGlzdEl0ZW1U
eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAog
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50SW5zdGFuY2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE1Niw5ICsxNTYsOSBAQCBiYWlsT3V0OgogICAg
IHJldHVybiBhc3BlY3RSYXRpbzsKIH0KIAotdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjp0
cmFuc2Zvcm1SZWN0KEZsb2F0UmVjdCYgZGVzdFJlY3QsIEZsb2F0UmVjdCYgc3JjUmVjdCkKK3Zv
aWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6dHJhbnNmb3JtUmVjdChHcmFwaGljc1JlY3QmIGRl
c3RSZWN0LCBHcmFwaGljc1JlY3QmIHNyY1JlY3QpCiB7Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6
ZSA9IHNyY1JlY3Quc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBpbWFnZVNpemUgPSBzcmNSZWN0
LnNpemUoKTsKICAgICBmbG9hdCBvcmlnRGVzdFdpZHRoID0gZGVzdFJlY3Qud2lkdGgoKTsKICAg
ICBmbG9hdCBvcmlnRGVzdEhlaWdodCA9IGRlc3RSZWN0LmhlaWdodCgpOwogICAgIHN3aXRjaCAo
bV9tZWV0T3JTbGljZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUHJlc2VydmVB
c3BlY3RSYXRpby5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgRmxvYXRS
ZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogCiBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
IHsKIHB1YmxpYzoKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWVldE9y
U2xpY2UodW5zaWduZWQgc2hvcnQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB1bnNpZ25lZCBzaG9y
dCBtZWV0T3JTbGljZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVldE9yU2xpY2U7IH0KIAotICAgIHZv
aWQgdHJhbnNmb3JtUmVjdChGbG9hdFJlY3QmIGRlc3RSZWN0LCBGbG9hdFJlY3QmIHNyY1JlY3Qp
OworICAgIHZvaWQgdHJhbnNmb3JtUmVjdChHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShmbG9hdCBsb2dp
Y1gsIGZsb2F0IGxvZ2ljWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvZ2lj
V2lkdGgsIGZsb2F0IGxvZ2ljSGVpZ2h0LApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZs
b2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRJbnN0YW5jZS5oIgpAQCAtMjIwLDE2ICsyMjAsMTYgQEAgYm9vbCBTVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQ6OmNvbGxlY3RHcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMo
Y29uc3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLCBGbG9hdFBvaW50JiBm
b2NhbFBvaW50LCBGbG9hdFBvaW50JiBjZW50ZXJQb2ludCwgZmxvYXQmIHJhZGl1cykKK3ZvaWQg
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWxjdWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJh
ZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIEdyYXBoaWNz
UG9pbnQmIGZvY2FsUG9pbnQsIEdyYXBoaWNzUG9pbnQmIGNlbnRlclBvaW50LCBmbG9hdCYgcmFk
aXVzKQogewogICAgIC8vIERldGVybWluZSBncmFkaWVudCBmb2NhbC9jZW50ZXIgcG9pbnRzIGFu
ZCByYWRpdXMKICAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkgewotICAgICAg
ICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmZ4KCkudmFsdWVBc1BlcmNlbnRh
Z2UoKSwgYXR0cmlidXRlcy5meSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwotICAgICAgICBjZW50
ZXJQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVlQXNQZXJjZW50YWdlKCks
IGF0dHJpYnV0ZXMuY3koKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAgICAgZm9jYWxQb2lu
dCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0
dHJpYnV0ZXMuZnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAgICAgY2VudGVyUG9pbnQg
PSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZUFzUGVyY2VudGFnZSgpLCBhdHRy
aWJ1dGVzLmN5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CiAgICAgICAgIHJhZGl1cyA9IGF0dHJp
YnV0ZXMucigpLnZhbHVlQXNQZXJjZW50YWdlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9j
YWxQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5meCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1
dGVzLmZ5KCkudmFsdWUodGhpcykpOwotICAgICAgICBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQo
YXR0cmlidXRlcy5jeCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLmN5KCkudmFsdWUodGhpcykp
OworICAgICAgICBmb2NhbFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmZ4KCkudmFs
dWUodGhpcyksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZSh0aGlzKSk7CisgICAgICAgIGNlbnRlclBv
aW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWUodGhpcyksIGF0dHJpYnV0
ZXMuY3koKS52YWx1ZSh0aGlzKSk7CiAgICAgICAgIHJhZGl1cyA9IGF0dHJpYnV0ZXMucigpLnZh
bHVlKHRoaXMpOwogICAgIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50OjpjYWxjdWxhdGUKIAogICAgICAgICBkZWx0YVggPSBjb3NmKGFuZ2xlKSAq
IHJhZGl1c01heDsKICAgICAgICAgZGVsdGFZID0gc2luZihhbmdsZSkgKiByYWRpdXNNYXg7Ci0g
ICAgICAgIGZvY2FsUG9pbnQgPSBGbG9hdFBvaW50KGRlbHRhWCArIGNlbnRlclBvaW50LngoKSwg
ZGVsdGFZICsgY2VudGVyUG9pbnQueSgpKTsKKyAgICAgICAgZm9jYWxQb2ludCA9IEdyYXBoaWNz
UG9pbnQoZGVsdGFYICsgY2VudGVyUG9pbnQueCgpLCBkZWx0YVkgKyBjZW50ZXJQb2ludC55KCkp
OwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgYm9vbCBjb2xs
ZWN0R3JhZGllbnRBdHRyaWJ1dGVzKFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyYpOwotICAgIHZv
aWQgY2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMoY29uc3QgUmFkaWFsR3JhZGll
bnRBdHRyaWJ1dGVzJiwgRmxvYXRQb2ludCYgZm9jYWxQb2ludCwgRmxvYXRQb2ludCYgY2VudGVy
UG9pbnQsIGZsb2F0JiByYWRpdXMpOworICAgIHZvaWQgY2FsY3VsYXRlRm9jYWxDZW50ZXJQb2lu
dHNBbmRSYWRpdXMoY29uc3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJiwgR3JhcGhpY3NQb2lu
dCYgZm9jYWxQb2ludCwgR3JhcGhpY3NQb2ludCYgY2VudGVyUG9pbnQsIGZsb2F0JiByYWRpdXMp
OwogCiBwcml2YXRlOgogICAgIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxNiArMjEsMTYgQEAKICNkZWZpbmUgU1ZHUmVjdF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IlNWR1Byb3BlcnR5VHJhaXRzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4KLXN0cnVjdCBTVkdQcm9wZXJ0
eVRyYWl0czxGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGluaXRpYWxWYWx1ZSgp
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9Ci0gICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25z
dCBGbG9hdFJlY3QmIHR5cGUpCitzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8R3JhcGhpY3NSZWN0
PiB7CisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBHcmFw
aGljc1JlY3QoKTsgfQorICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgR3JhcGhpY3NS
ZWN0JiB0eXBlKQogICAgIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAg
ICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcih0eXBlLngoKSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsx
OTgsNyBAQCB2b2lkIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIHBhCiAgICAgZmxv
YXQgeFZhbHVlID0geCgpLnZhbHVlKHRoaXMpOwogICAgIGZsb2F0IHlWYWx1ZSA9IHkoKS52YWx1
ZSh0aGlzKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KHhWYWx1ZSwgeVZhbHVlLCB3aWR0aFZhbHVl
LCBoZWlnaHRWYWx1ZSk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoeFZhbHVlLCB5VmFsdWUsIHdp
ZHRoVmFsdWUsIGhlaWdodFZhbHVlKTsKIAogICAgIGJvb2wgaGFzUnggPSBoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnJ4QXR0cik7CiAgICAgYm9vbCBoYXNSeSA9IGhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6cnlBdHRyKTsKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFNWR1JlY3RFbGVtZW50Ojp0b1Bh
dGhEYXRhKFBhdGgmIHBhCiAgICAgICAgICAgICByeFZhbHVlID0gcnlWYWx1ZTsKICAgICAgICAg
ZWxzZSBpZiAoIWhhc1J5KQogICAgICAgICAgICAgcnlWYWx1ZSA9IHJ4VmFsdWU7Ci0gICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJ4VmFsdWUsIHJ5VmFsdWUpKTsK
KyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBHcmFwaGljc1NpemUocnhWYWx1ZSwg
cnlWYWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtMTQyLDEzICsxNDIsMTMgQEAgdm9p
ZCBTVkdTVkdFbGVtZW50OjpzZXRDb250ZW50U3R5bGVUeXBlKAogICAgIHNldEF0dHJpYnV0ZShT
VkdOYW1lczo6Y29udGVudFN0eWxlVHlwZUF0dHIsIHR5cGUpOwogfQogCi1GbG9hdFJlY3QgU1ZH
U1ZHRWxlbWVudDo6dmlld3BvcnQoKSBjb25zdAorR3JhcGhpY3NSZWN0IFNWR1NWR0VsZW1lbnQ6
OnZpZXdwb3J0KCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3Qgdmlld1JlY3RhbmdsZTsKKyAgICBH
cmFwaGljc1JlY3Qgdmlld1JlY3RhbmdsZTsKICAgICBpZiAoIWlzT3V0ZXJtb3N0U1ZHKCkpCi0g
ICAgICAgIHZpZXdSZWN0YW5nbGUuc2V0TG9jYXRpb24oRmxvYXRQb2ludCh4KCkudmFsdWUodGhp
cyksIHkoKS52YWx1ZSh0aGlzKSkpOworICAgICAgICB2aWV3UmVjdGFuZ2xlLnNldExvY2F0aW9u
KEdyYXBoaWNzUG9pbnQoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKIAotICAg
IHZpZXdSZWN0YW5nbGUuc2V0U2l6ZShGbG9hdFNpemUod2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVp
Z2h0KCkudmFsdWUodGhpcykpKTsgICAgCisgICAgdmlld1JlY3RhbmdsZS5zZXRTaXplKEdyYXBo
aWNzU2l6ZSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1ZSh0aGlzKSkpOyAgICAK
ICAgICByZXR1cm4gdmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3UmVjdGFuZ2xlLndpZHRoKCks
IHZpZXdSZWN0YW5nbGUuaGVpZ2h0KCkpLm1hcFJlY3Qodmlld1JlY3RhbmdsZSk7CiB9CiAKQEAg
LTI0OCw3ICsyNDgsNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldEN1cnJlbnRTY2FsZShmbG9h
CiAgICAgZnJhbWUtPnNldFBhZ2Vab29tRmFjdG9yKHNjYWxlKTsKIH0KIAotdm9pZCBTVkdTVkdF
bGVtZW50OjpzZXRDdXJyZW50VHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHRyYW5zbGF0aW9u
KQordm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDdXJyZW50VHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHRyYW5zbGF0aW9uKQogewogICAgIG1fdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbjsK
ICAgICB1cGRhdGVDdXJyZW50VHJhbnNsYXRlKCk7CkBAIC0zODksMTkgKzM4OSwxOSBAQCB2b2lk
IFNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KCkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1l
IChzZWUgYnVnIDExMjc1KQogfQogCi1Ob2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0SW50ZXJz
ZWN0aW9uTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KikKK05vZGVMaXN0KiBTVkdT
VkdFbGVtZW50OjpnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0Vs
ZW1lbnQqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzQpCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVMaXN0KiBTVkdTVkdFbGVtZW50OjpnZXRFbmNsb3N1cmVM
aXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqKQorTm9kZUxpc3QqIFNWR1NWR0VsZW1l
bnQ6OmdldEVuY2xvc3VyZUxpc3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgU1ZHRWxlbWVudCopCiB7
CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NCkKICAgICByZXR1cm4g
MDsKIH0KIAotYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0ludGVyc2VjdGlvbihTVkdFbGVtZW50
KiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0ludGVy
c2VjdGlvbihTVkdFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIC8v
IFRPRE8gOiB0YWtlIGludG8gYWNjb3VudCBwb2ludGVyLWV2ZW50cz8KICAgICAvLyBGSVhNRTog
V2h5IGlzIGVsZW1lbnQgaWdub3JlZD8/CkBAIC00MDksNyArNDA5LDcgQEAgYm9vbCBTVkdTVkdF
bGVtZW50OjpjaGVja0ludGVyc2VjdGlvbihTVgogICAgIHJldHVybiByZWN0LmludGVyc2VjdHMo
Z2V0QkJveCgpKTsKIH0KIAotYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVja0VuY2xvc3VyZShTVkdF
bGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBTVkdTVkdFbGVtZW50OjpjaGVj
a0VuY2xvc3VyZShTVkdFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IC8vIFRPRE8gOiB0YWtlIGludG8gYWNjb3VudCBwb2ludGVyLWV2ZW50cz8KICAgICAvLyBGSVhN
RTogV2h5IGlzIGVsZW1lbnQgaWdub3JlZD8/CkBAIC00MzgsOSArNDM4LDkgQEAgU1ZHQW5nbGUg
U1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHQW5nbGUoKQogICAgIHJldHVybiBTVkdBbmdsZSgpOwog
fQogCi1GbG9hdFBvaW50IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1BvaW50KCkKK0dyYXBoaWNz
UG9pbnQgU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHUG9pbnQoKQogewotICAgIHJldHVybiBGbG9h
dFBvaW50KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsKIH0KIAogU1ZHTWF0cml4IFNW
R1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpCkBAIC00NDgsOSArNDQ4LDkgQEAgU1ZHTWF0
cml4IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeAogICAgIHJldHVybiBTVkdNYXRyaXgo
KTsKIH0KIAotRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1JlY3QoKQorR3JhcGhp
Y3NSZWN0IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1JlY3QoKQogewotICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIFNWR1RyYW5zZm9ybSBT
VkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm0oKQpAQCAtNDc2LDcgKzQ3Niw3IEBAIEFm
ZmluZVRyYW5zZm9ybSBTVkdTVkdFbGVtZW50Ojpsb2NhbENvb3IKICAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAvLyBU
cmFuc2xhdGUgaW4gb3VyIENTUyBwYXJlbnQgY29vcmRpbmF0ZSBzcGFjZQogICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIENTUyB0cmFuc2Zvcm1z
LgotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhdGlvbiA9IHJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBHcmFwaGljc1Bv
aW50IGxvY2F0aW9uID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCks
IGZhbHNlLCB0cnVlKTsKIAogICAgICAgICAgICAgLy8gQmUgY2FyZWZ1bCBoZXJlISBsb2NhbFRv
QWJzb2x1dGUoKSBpbmNsdWRlcyB0aGUgeC95IG9mZnNldCBjb21pbmcgZnJvbSB0aGUgdmlld0Jv
eFRvVmlld1RyYW5zZm9ybSgpLCBiZWNhdXNlCiAgICAgICAgICAgICAvLyBSZW5kZXJTVkdSb290
Ojpsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCkgKGNhbGxlZCB0aHJvdWdoIG1hcExvY2FsVG9D
b250YWluZXIoKSwgY2FsbGVkIGZyb20gbG9jYWxUb0Fic29sdXRlKCkpCkBAIC01NjYsMTIgKzU2
NiwxMiBAQCBib29sIFNWR1NWR0VsZW1lbnQ6OmlzT3V0ZXJtb3N0U1ZHKCkgY29uCiAgICAgcmV0
dXJuICFwYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpOwogfQogCi1GbG9hdFJlY3QgU1ZHU1ZH
RWxlbWVudDo6Y3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTVkdF
bGVtZW50OjpjdXJyZW50Vmlld0JveFJlY3QoKSBjb25zdAogewogICAgIGlmICh1c2VDdXJyZW50
VmlldygpKSB7CiAgICAgICAgIGlmIChTVkdWaWV3U3BlYyogdmlldyA9IGN1cnJlbnRWaWV3KCkp
IC8vIHdoYXQgaWYgd2Ugc2hvdWxkIHVzZSBpdCBidXQgaXQgaXMgbm90IHNldD8KICAgICAgICAg
ICAgIHJldHVybiB2aWV3LT52aWV3Qm94KCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogICAgIH0KIAogICAgIHJldHVybiB2aWV3
Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb250ZW50
U3R5bGVUeXBlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250ZW50U3R5bGVUeXBlKGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSk7CiAKLSAgICBGbG9hdFJlY3Qgdmlld3BvcnQoKSBjb25zdDsKKyAg
ICBHcmFwaGljc1JlY3Qgdmlld3BvcnQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Q29udGFpbmVy
U2l6ZShjb25zdCBJbnRTaXplJiBjb250YWluZXJTaXplKSB7IG1fY29udGFpbmVyU2l6ZSA9IGNv
bnRhaW5lclNpemU7IG1faGFzU2V0Q29udGFpbmVyU2l6ZSA9IHRydWU7IH0KICAgICBJbnRTaXpl
IGNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5lclNpemU7IH0KQEAgLTc4
LDEzICs3OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VDdXJyZW50Vmlldyhib29sIGN1
cnJlbnRWaWV3KTsKIAogICAgIFNWR1ZpZXdTcGVjKiBjdXJyZW50VmlldygpIGNvbnN0OwotICAg
IEZsb2F0UmVjdCBjdXJyZW50Vmlld0JveFJlY3QoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qg
Y3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3Q7CiAKICAgICBmbG9hdCBjdXJyZW50U2NhbGUoKSBj
b25zdDsKICAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCBzY2FsZSk7CiAKLSAgICBGbG9h
dFBvaW50JiBjdXJyZW50VHJhbnNsYXRlKCkgeyByZXR1cm4gbV90cmFuc2xhdGlvbjsgfQotICAg
IHZvaWQgc2V0Q3VycmVudFRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50Jik7CisgICAgR3JhcGhp
Y3NQb2ludCYgY3VycmVudFRyYW5zbGF0ZSgpIHsgcmV0dXJuIG1fdHJhbnNsYXRpb247IH0KKyAg
ICB2b2lkIHNldEN1cnJlbnRUcmFuc2xhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCiAgICAg
Ly8gT25seSB1c2VkIGZyb20gdGhlIGJpbmRpbmdzLgogICAgIHZvaWQgdXBkYXRlQ3VycmVudFRy
YW5zbGF0ZSgpOwpAQCAtMTAzLDE4ICsxMDMsMTggQEAgcHVibGljOgogICAgIHZvaWQgdW5zdXNw
ZW5kUmVkcmF3QWxsKCk7CiAgICAgdm9pZCBmb3JjZVJlZHJhdygpOwogCi0gICAgTm9kZUxpc3Qq
IGdldEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJl
bmNlRWxlbWVudCk7Ci0gICAgTm9kZUxpc3QqIGdldEVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRS
ZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7Ci0gICAgYm9vbCBjaGVja0ludGVy
c2VjdGlvbihTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgYm9vbCBjaGVja0Vu
Y2xvc3VyZShTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgTm9kZUxpc3QqIGdl
dEludGVyc2VjdGlvbkxpc3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJl
bmNlRWxlbWVudCk7CisgICAgTm9kZUxpc3QqIGdldEVuY2xvc3VyZUxpc3QoY29uc3QgR3JhcGhp
Y3NSZWN0JiwgU1ZHRWxlbWVudCogcmVmZXJlbmNlRWxlbWVudCk7CisgICAgYm9vbCBjaGVja0lu
dGVyc2VjdGlvbihTVkdFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgYm9vbCBj
aGVja0VuY2xvc3VyZShTVkdFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdm9p
ZCBkZXNlbGVjdEFsbCgpOwogCiAgICAgc3RhdGljIGZsb2F0IGNyZWF0ZVNWR051bWJlcigpOwog
ICAgIHN0YXRpYyBTVkdMZW5ndGggY3JlYXRlU1ZHTGVuZ3RoKCk7CiAgICAgc3RhdGljIFNWR0Fu
Z2xlIGNyZWF0ZVNWR0FuZ2xlKCk7Ci0gICAgc3RhdGljIEZsb2F0UG9pbnQgY3JlYXRlU1ZHUG9p
bnQoKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NQb2ludCBjcmVhdGVTVkdQb2ludCgpOwogICAgIHN0
YXRpYyBTVkdNYXRyaXggY3JlYXRlU1ZHTWF0cml4KCk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBj
cmVhdGVTVkdSZWN0KCk7CisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBjcmVhdGVTVkdSZWN0KCk7
CiAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm0oKTsKICAgICBzdGF0
aWMgU1ZHVHJhbnNmb3JtIGNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgoY29uc3QgU1ZHTWF0
cml4Jik7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3VzZUN1
cnJlbnRWaWV3OwogICAgIFJlZlB0cjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1lQ29udGFpbmVy
OwotICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IG1fdHJh
bnNsYXRpb247CiAgICAgbXV0YWJsZSBPd25QdHI8U1ZHVmlld1NwZWM+IG1fdmlld1NwZWM7CiAg
ICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgYm9vbCBtX2hhc1NldENvbnRhaW5lclNp
emU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBT
VkdFbGVtZW50KiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpmCiAgICAgcmV0dXJuIFNWR0xv
Y2F0YWJsZTo6ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBT
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5
bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkg
Y29uc3QKIHsKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBk
YXRlU3RyYXRlZ3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxl
bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVs
ZW1lbnQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRh
dGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhp
Y3NSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNv
bnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0
ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gZ2V0U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBj
b25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNSw3ICsxMzUsNyBAQCBTVkdFbGVtZW50KiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KHRo
aXMpOwogfQogCi1GbG9hdFJlY3QgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmdldEJC
b3goU3R5bGVVcGRhdGVTdHJhdGVneSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAorR3JhcGhp
Y3NSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRl
U3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKIHsKICAgICByZXR1cm4gU1ZHVHJh
bnNmb3JtYWJsZTo6Z2V0QkJveCh0aGlzLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9y
bSgpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5
ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZ2V0
QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CiAKICAg
ICAvLyAiYmFzZSBjbGFzcyIgbWV0aG9kcyBmb3IgYWxsIHRoZSBlbGVtZW50cyB3aGljaCByZW5k
ZXIgYXMgcGF0aHMKICAgICB2aXJ0dWFsIHZvaWQgdG9QYXRoRGF0YShQYXRoJikgY29uc3QgeyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDM3ICsxMzAsMzcgQEAgZmxvYXQgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpnZXRTdWJTdHJpbgogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVu
ZGVyZXIoKSkuc3ViU3RyaW5nTGVuZ3RoKGNoYXJudW0sIG5jaGFycyk7CiB9CiAKLUZsb2F0UG9p
bnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVk
IGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmdldFN0YXJ0UG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBpZiAoY2hhcm51bSA+IGdldE51bWJl
ck9mQ2hhcnMoKSkgewogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1
cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NQb2ludCgpOwogICAgIH0K
IAogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuc3RhcnRQb3NpdGlvbk9mQ2hh
cmFjdGVyKGNoYXJudW0pOwogfQogCi1GbG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6
Z2V0RW5kUG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CitHcmFwaGljc1BvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RW5kUG9zaXRp
b25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7CiAg
ICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
ICAgICBpZiAoY2hhcm51bSA+IGdldE51bWJlck9mQ2hhcnMoKSkgewogICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICByZXR1
cm4gR3JhcGhpY3NQb2ludCgpOwogICAgIH0KIAogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVu
ZGVyZXIoKSkuZW5kUG9zaXRpb25PZkNoYXJhY3RlcihjaGFybnVtKTsKIH0KIAotRmxvYXRSZWN0
IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0s
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorR3JhcGhpY3NSZWN0IFNWR1RleHRDb250ZW50RWxl
bWVudDo6Z2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogCiAgICAgaWYgKGNoYXJudW0gPiBnZXROdW1iZXJPZkNoYXJzKCkpIHsKICAg
ICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNWR1Rl
eHRRdWVyeShyZW5kZXJlcigpKS5leHRlbnRPZkNoYXJhY3RlcihjaGFybnVtKTsKQEAgLTE3OCw3
ICsxNzgsNyBAQCBmbG9hdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFJvdGF0aW9uCiAgICAg
cmV0dXJuIFNWR1RleHRRdWVyeShyZW5kZXJlcigpKS5yb3RhdGlvbk9mQ2hhcmFjdGVyKGNoYXJu
dW0pOwogfQogCi1pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRDaGFyTnVtQXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2ludCBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OmdldENoYXJOdW1BdFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25z
dAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuY2hhcmFjdGVyTnVtYmVy
QXRQb3NpdGlvbihwb2ludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTEgKzgyLDExIEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBnZXROdW1iZXJPZkNoYXJzKCkgY29uc3Q7CiAgICAgZmxvYXQg
Z2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0U3ViU3RyaW5nTGVu
Z3RoKHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwotICAgIEZsb2F0UG9pbnQgZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFy
bnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgRmxvYXRQb2ludCBnZXRFbmRQb3NpdGlv
bk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgRmxv
YXRSZWN0IGdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVk
IGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGdldEVu
ZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICBHcmFwaGljc1JlY3QgZ2V0RXh0ZW50T2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdDsKICAgICBmbG9hdCBnZXRSb3RhdGlvbk9mQ2hhcih1bnNpZ25lZCBj
aGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgaW50IGdldENoYXJOdW1BdFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBpbnQgZ2V0Q2hhck51bUF0UG9zaXRp
b24oY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgc2VsZWN0U3ViU3RyaW5n
KHVuc2lnbmVkIGNoYXJudW0sIHVuc2lnbmVkIG5jaGFycywgRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogCiAgICAgc3RhdGljIFNWR1RleHRDb250ZW50RWxlbWVudCogZWxlbWVudEZyb21SZW5kZXJl
cihSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNw
cAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKQEAgLTkzLDcgKzkzLDcgQEAgU1ZHRWxlbWVudCogU1ZHVGV4dEVsZW1lbnQ6OmZh
cnRoZXN0VmlldwogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpmYXJ0aGVzdFZpZXdwb3J0
RWxlbWVudCh0aGlzKTsKIH0KIAotRmxvYXRSZWN0IFNWR1RleHRFbGVtZW50OjpnZXRCQm94KFN0
eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QKK0dyYXBoaWNzUmVj
dCBTVkdUZXh0RWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRl
U3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmdldEJCb3go
dGhpcywgc3R5bGVVcGRhdGVTdHJhdGVneSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dEVsZW1lbnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGV4
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dT
dHlsZVVwZGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZ2V0QkJveChTdHls
ZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBk
YXRlKSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oU3R5
bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4
IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2lu
Y2x1ZGUgIlNWR0FuZ2xlLmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC03OCwzMSArNzgsMzEgQEAgdm9pZCBTVkdUcmFuc2Zvcm06
OnNldFRyYW5zbGF0ZShmbG9hdCB0eAogICAgIG1fbWF0cml4LnRyYW5zbGF0ZSh0eCwgdHkpOwog
fQogCi1GbG9hdFBvaW50IFNWR1RyYW5zZm9ybTo6dHJhbnNsYXRlKCkgY29uc3QKK0dyYXBoaWNz
UG9pbnQgU1ZHVHJhbnNmb3JtOjp0cmFuc2xhdGUoKSBjb25zdAogewotICAgIHJldHVybiBGbG9h
dFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV9tYXRyaXguZSgpLCBtX21hdHJpeC5mKCkpOworICAg
IHJldHVybiBHcmFwaGljc1BvaW50OjpuYXJyb3dQcmVjaXNpb24obV9tYXRyaXguZSgpLCBtX21h
dHJpeC5mKCkpOwogfQogCiB2b2lkIFNWR1RyYW5zZm9ybTo6c2V0U2NhbGUoZmxvYXQgc3gsIGZs
b2F0IHN5KQogewogICAgIG1fdHlwZSA9IFNWR19UUkFOU0ZPUk1fU0NBTEU7CiAgICAgbV9hbmds
ZSA9IDA7Ci0gICAgbV9jZW50ZXIgPSBGbG9hdFBvaW50KCk7CisgICAgbV9jZW50ZXIgPSBHcmFw
aGljc1BvaW50KCk7CiAKICAgICBtX21hdHJpeC5tYWtlSWRlbnRpdHkoKTsKICAgICBtX21hdHJp
eC5zY2FsZU5vblVuaWZvcm0oc3gsIHN5KTsKIH0KIAotRmxvYXRTaXplIFNWR1RyYW5zZm9ybTo6
c2NhbGUoKSBjb25zdAorR3JhcGhpY3NTaXplIFNWR1RyYW5zZm9ybTo6c2NhbGUoKSBjb25zdAog
ewotICAgIHJldHVybiBGbG9hdFNpemU6Om5hcnJvd1ByZWNpc2lvbihtX21hdHJpeC5hKCksIG1f
bWF0cml4LmQoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZTo6bmFycm93UHJlY2lzaW9uKG1f
bWF0cml4LmEoKSwgbV9tYXRyaXguZCgpKTsKIH0KIAogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFJv
dGF0ZShmbG9hdCBhbmdsZSwgZmxvYXQgY3gsIGZsb2F0IGN5KQogewogICAgIG1fdHlwZSA9IFNW
R19UUkFOU0ZPUk1fUk9UQVRFOwogICAgIG1fYW5nbGUgPSBhbmdsZTsKLSAgICBtX2NlbnRlciA9
IEZsb2F0UG9pbnQoY3gsIGN5KTsKKyAgICBtX2NlbnRlciA9IEdyYXBoaWNzUG9pbnQoY3gsIGN5
KTsKIAogICAgIC8vIFRPRE86IHRvU3RyaW5nKCkgaW1wbGVtZW50YXRpb24sIHdoaWNoIGNhbiBz
aG93IGN4LCBjeSAobmVlZCB0byBiZSBzdG9yZWQ/KQogICAgIG1fbWF0cml4Lm1ha2VJZGVudGl0
eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDEyICsyMiwxMiBAQAogI2RlZmluZSBTVkdUcmFuc2Zvcm1faAogCiAjaWYgRU5BQkxFKFNWRykK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2lu
Y2x1ZGUgIlNWR01hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
U2l6ZTsKK2NsYXNzIEdyYXBoaWNzU2l6ZTsKIAogY2xhc3MgU1ZHVHJhbnNmb3JtIHsKIHB1Ymxp
YzoKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlTWF0cml4KCk7CiAK
ICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KLSAgICBGbG9hdFBv
aW50IHJvdGF0aW9uQ2VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9jZW50ZXI7IH0KKyAgICBHcmFw
aGljc1BvaW50IHJvdGF0aW9uQ2VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9jZW50ZXI7IH0KIAog
ICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgc2V0
VHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSk7CkBAIC02Miw4ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFNrZXdZKGZsb2F0IGFuZ2xlKTsKICAgICAKICAgICAvLyBJbnRlcm5hbCB1
c2Ugb25seSAoYW5pbWF0aW9uIHN5c3RlbSkKLSAgICBGbG9hdFBvaW50IHRyYW5zbGF0ZSgpIGNv
bnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZSgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgdHJh
bnNsYXRlKCkgY29uc3Q7CisgICAgR3JhcGhpY3NTaXplIHNjYWxlKCkgY29uc3Q7CiAKICAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gU1ZHX1RSQU5TRk9STV9VTktO
T1dOOyB9CiAgICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKSBjb25zdDsKQEAgLTczLDcgKzczLDcg
QEAgcHJpdmF0ZToKIAogICAgIFNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1f
YW5nbGU7Ci0gICAgRmxvYXRQb2ludCBtX2NlbnRlcjsKKyAgICBHcmFwaGljc1BvaW50IG1fY2Vu
dGVyOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX21hdHJpeDsKIH07CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNwcAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtRGlzdGFuY2UuaCIK
IAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAKICNpbmNs
dWRlIDxtYXRoLmg+CkBAIC02MiwxNCArNjIsMTQgQEAgU1ZHVHJhbnNmb3JtRGlzdGFuY2U6OlNW
R1RyYW5zZm9ybURpc3RhbgogICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBiZSBhYmxlIHRvIHN1
YnRyYWN0IHRvIG1hdHJpY2VzCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNWR1RyYW5zZm9y
bTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6IHsKLSAgICAgICAgRmxvYXRTaXplIGNlbnRlckRpc3Rh
bmNlID0gdG9TVkdUcmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKSAtIGZyb21TVkdUcmFuc2Zvcm0u
cm90YXRpb25DZW50ZXIoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNlbnRlckRpc3RhbmNlID0g
dG9TVkdUcmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKSAtIGZyb21TVkdUcmFuc2Zvcm0ucm90YXRp
b25DZW50ZXIoKTsKICAgICAgICAgbV9hbmdsZSA9IHRvU1ZHVHJhbnNmb3JtLmFuZ2xlKCkgLSBm
cm9tU1ZHVHJhbnNmb3JtLmFuZ2xlKCk7CiAgICAgICAgIG1fY3ggPSBjZW50ZXJEaXN0YW5jZS53
aWR0aCgpOwogICAgICAgICBtX2N5ID0gY2VudGVyRGlzdGFuY2UuaGVpZ2h0KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJB
TlNMQVRFOiB7Ci0gICAgICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbkRpc3RhbmNlID0gdG9TVkdU
cmFuc2Zvcm0udHJhbnNsYXRlKCkgLSBmcm9tU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpOworICAg
ICAgICBHcmFwaGljc1NpemUgdHJhbnNsYXRpb25EaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnRy
YW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFuc2xhdGUoKTsKICAgICAgICAgbV90cmFu
c2Zvcm0udHJhbnNsYXRlKHRyYW5zbGF0aW9uRGlzdGFuY2Uud2lkdGgoKSwgdHJhbnNsYXRpb25E
aXN0YW5jZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzUsNyArMTM1
LDcgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVgogICAgICAgICBy
ZXR1cm4gdHJhbnNmb3JtOwogICAgIH0KICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5T
Rk9STV9TQ0FMRTogewotICAgICAgICBGbG9hdFNpemUgc2NhbGUgPSBmaXJzdC5zY2FsZSgpICsg
c2Vjb25kLnNjYWxlKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBzY2FsZSA9IGZpcnN0LnNjYWxl
KCkgKyBzZWNvbmQuc2NhbGUoKTsKICAgICAgICAgdHJhbnNmb3JtLnNldFNjYWxlKHNjYWxlLndp
ZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKICAgICB9
CkBAIC0yMDQsMjAgKzIwNCwyMCBAQCBTVkdUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtRGlzdGFuY2U6
OmFkZFRvCiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fTUFUUklYOgogICAg
ICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKHRyYW5zZm9ybS5tYXRyaXgoKSAqIG1fdHJhbnNmb3Jt
KTsKICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9UUkFOU0xBVEU6IHsKLSAg
ICAgICAgRmxvYXRQb2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKLSAg
ICAgICAgdHJhbnNsYXRpb24gKz0gRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zv
cm0uZSgpLCBtX3RyYW5zZm9ybS5mKCkpOworICAgICAgICBHcmFwaGljc1BvaW50IHRyYW5zbGF0
aW9uID0gdHJhbnNmb3JtLnRyYW5zbGF0ZSgpOworICAgICAgICB0cmFuc2xhdGlvbiArPSBHcmFw
aGljc1NpemU6Om5hcnJvd1ByZWNpc2lvbihtX3RyYW5zZm9ybS5lKCksIG1fdHJhbnNmb3JtLmYo
KSk7CiAgICAgICAgIG5ld1RyYW5zZm9ybS5zZXRUcmFuc2xhdGUodHJhbnNsYXRpb24ueCgpLCB0
cmFuc2xhdGlvbi55KCkpOwogICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOwogICAgIH0KICAg
ICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9TQ0FMRTogewotICAgICAgICBGbG9h
dFNpemUgc2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUoKTsKLSAgICAgICAgc2NhbGUgKz0gRmxvYXRT
aXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zvcm0uYSgpLCBtX3RyYW5zZm9ybS5kKCkpOwor
ICAgICAgICBHcmFwaGljc1NpemUgc2NhbGUgPSB0cmFuc2Zvcm0uc2NhbGUoKTsKKyAgICAgICAg
c2NhbGUgKz0gR3JhcGhpY3NTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zvcm0uYSgpLCBt
X3RyYW5zZm9ybS5kKCkpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0U2NhbGUoc2NhbGUud2lk
dGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm4gbmV3VHJhbnNmb3JtOwogICAg
IH0KICAgICBjYXNlIFNWR1RyYW5zZm9ybTo6U1ZHX1RSQU5TRk9STV9ST1RBVEU6IHsKICAgICAg
ICAgLy8gRklYTUU6IEknbSBub3QgY2VydGFpbiB0aGUgdHJhbnNsYXRpb24gaXMgY2FsY3VsYXRl
ZCBjb3JyZWN0bHkgaGVyZQotICAgICAgICBGbG9hdFBvaW50IGNlbnRlciA9IHRyYW5zZm9ybS5y
b3RhdGlvbkNlbnRlcigpOworICAgICAgICBHcmFwaGljc1BvaW50IGNlbnRlciA9IHRyYW5zZm9y
bS5yb3RhdGlvbkNlbnRlcigpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0Um90YXRlKHRyYW5z
Zm9ybS5hbmdsZSgpICsgbV9hbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
ZW50ZXIueCgpICsgbV9jeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXIu
eSgpICsgbV9jeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlw
UGF0aChQYXRoJiBwYXQKICAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVwb3J0RXJyb3IoIk5vdCBhbGxvd2VkIHRvIHVzZSBpbmRpcmVjdCByZWZlcmVuY2Ug
aW4gPGNsaXAtcGF0aD4iKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG4pLT50b0NsaXBQYXRoKHBhdGgpOwot
ICAgICAgICAgICAgcGF0aC50cmFuc2xhdGUoRmxvYXRTaXplKHgoKS52YWx1ZSh0aGlzKSwgeSgp
LnZhbHVlKHRoaXMpKSk7CisgICAgICAgICAgICBwYXRoLnRyYW5zbGF0ZShHcmFwaGljc1NpemUo
eCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKICAgICAgICAgICAgIHBhdGgudHJh
bnNmb3JtKGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NyBAQCB2b2lkIFNWR1ZpZXdTcGVjOjpzZXRUcmFuc2Zvcm0oY29uc3QgU3RyCiAKIHZvaWQgU1ZH
Vmlld1NwZWM6OnNldFZpZXdCb3hTdHJpbmcoY29uc3QgU3RyaW5nJiB2aWV3Qm94U3RyKQogewot
ICAgIEZsb2F0UmVjdCB2aWV3Qm94OworICAgIEdyYXBoaWNzUmVjdCB2aWV3Qm94OwogICAgIGNv
bnN0IFVDaGFyKiBjID0gdmlld0JveFN0ci5jaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIq
IGVuZCA9IGMgKyB2aWV3Qm94U3RyLmxlbmd0aCgpOwogICAgIGlmICghcGFyc2VWaWV3Qm94KG1f
Y29udGV4dEVsZW1lbnQtPmRvY3VtZW50KCksIGMsIGVuZCwgdmlld0JveCwgZmFsc2UpKQpAQCAt
MTA0LDcgKzEwNCw3IEBAIGJvb2wgU1ZHVmlld1NwZWM6OnBhcnNlVmlld1NwZWMoY29uc3QgU3QK
ICAgICAgICAgICAgICAgICBpZiAoY3VyclZpZXdTcGVjID49IGVuZCB8fCAqY3VyclZpZXdTcGVj
ICE9ICcoJykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
ICAgIGN1cnJWaWV3U3BlYysrOwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCB2aWV3Qm94Owor
ICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB2aWV3Qm94OwogICAgICAgICAgICAgICAgIGlm
ICghcGFyc2VWaWV3Qm94KG1fY29udGV4dEVsZW1lbnQtPmRvY3VtZW50KCksIGN1cnJWaWV3U3Bl
YywgZW5kLCB2aWV3Qm94LCBmYWxzZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICBzZXRWaWV3Qm94QmFzZVZhbHVlKHZpZXdCb3gpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAgU1ZHWm9vbUV2ZW50OjpTVkdab29tRXZlbnQoKQogewogfQogCi1GbG9hdFJlY3QgU1ZH
Wm9vbUV2ZW50Ojp6b29tUmVjdFNjcmVlbigpIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZHWm9vbUV2
ZW50Ojp6b29tUmVjdFNjcmVlbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fem9vbVJlY3RTY3Jl
ZW47CiB9CkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgU1ZHWm9vbUV2ZW50OjpzZXRQcmV2aW91c1Nj
YWxlKGZsb2EKICAgICBtX3ByZXZpb3VzU2NhbGUgPSBzY2FsZTsKIH0KIAotRmxvYXRQb2ludCBT
Vkdab29tRXZlbnQ6OnByZXZpb3VzVHJhbnNsYXRlKCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgU1ZH
Wm9vbUV2ZW50OjpwcmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJl
dmlvdXNUcmFuc2xhdGU7CiB9CkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgU1ZHWm9vbUV2ZW50Ojpz
ZXROZXdTY2FsZShmbG9hdCBzY2EKICAgICBtX25ld1NjYWxlID0gc2NhbGU7CiB9CiAKLUZsb2F0
UG9pbnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSBjb25zdAorR3JhcGhpY3NQb2ludCBT
Vkdab29tRXZlbnQ6Om5ld1RyYW5zbGF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbmV3VHJh
bnNsYXRlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgU1ZHWm9vbUV2ZW50X2gKICNpZiBFTkFCTEUoU1ZH
KQogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiVUlFdmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMywxNyArMzMs
MTcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1pvb21FdmVudD4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR1pvb21FdmVudCk7IH0KIAogICAgIC8vICdTVkda
b29tRXZlbnQnIGZ1bmN0aW9ucwotICAgIEZsb2F0UmVjdCB6b29tUmVjdFNjcmVlbigpIGNvbnN0
OworICAgIEdyYXBoaWNzUmVjdCB6b29tUmVjdFNjcmVlbigpIGNvbnN0OwogCiAgICAgZmxvYXQg
cHJldmlvdXNTY2FsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJldmlvdXNTY2FsZShmbG9hdCk7
CiAKLSAgICBGbG9hdFBvaW50IHByZXZpb3VzVHJhbnNsYXRlKCkgY29uc3Q7CisgICAgR3JhcGhp
Y3NQb2ludCBwcmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0OwogCiAgICAgZmxvYXQgbmV3U2NhbGUo
KSBjb25zdDsKICAgICB2b2lkIHNldE5ld1NjYWxlKGZsb2F0KTsKIAotICAgIEZsb2F0UG9pbnQg
bmV3VHJhbnNsYXRlKCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBuZXdUcmFuc2xhdGUoKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdab29tRXZlbnQoKTsKQEAgLTUzLDEwICs1MywxMCBA
QCBwcml2YXRlOgogICAgIGZsb2F0IG1fbmV3U2NhbGU7CiAgICAgZmxvYXQgbV9wcmV2aW91c1Nj
YWxlOwogCi0gICAgRmxvYXRSZWN0IG1fem9vbVJlY3RTY3JlZW47CisgICAgR3JhcGhpY3NSZWN0
IG1fem9vbVJlY3RTY3JlZW47CiAKLSAgICBGbG9hdFBvaW50IG1fbmV3VHJhbnNsYXRlOwotICAg
IEZsb2F0UG9pbnQgbV9wcmV2aW91c1RyYW5zbGF0ZTsKKyAgICBHcmFwaGljc1BvaW50IG1fbmV3
VHJhbnNsYXRlOworICAgIEdyYXBoaWNzUG9pbnQgbV9wcmV2aW91c1RyYW5zbGF0ZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1
ZGUgIkZpbGVJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgU1ZH
SW1hZ2U6Omhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gcm9vdEVsZW1lbnQt
PmhlaWdodCgpLnVuaXRUeXBlKCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2U7CiB9CiAKLXZvaWQg
U1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCit2b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHNyY1JlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQog
ewogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CkBAIC0xODksMTIgKzE4OSwxMiBA
QCB2b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgaWYgKGNvbXBv
c2l0ZU9wICE9IENvbXBvc2l0ZVNvdXJjZU92ZXIpCiAgICAgICAgIGNvbnRleHQtPmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoMSk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGUoZHN0UmVjdC53aWR0aCgp
IC8gc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKSk7
CisgICAgR3JhcGhpY3NTaXplIHNjYWxlKGRzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgo
KSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpOwogICAgIAogICAgIC8vIFdl
IGNhbiBvbmx5IGRyYXcgdGhlIGVudGlyZSBmcmFtZSwgY2xpcHBlZCB0byB0aGUgcmVjdCB3ZSB3
YW50LiBTbyBjb21wdXRlIHdoZXJlIHRoZSB0b3AgbGVmdAogICAgIC8vIG9mIHRoZSBpbWFnZSB3
b3VsZCBiZSBpZiB3ZSB3ZXJlIGRyYXdpbmcgd2l0aG91dCBjbGlwcGluZywgYW5kIHRyYW5zbGF0
ZSBhY2NvcmRpbmdseS4KLSAgICBGbG9hdFNpemUgdG9wTGVmdE9mZnNldChzcmNSZWN0LmxvY2F0
aW9uKCkueCgpICogc2NhbGUud2lkdGgoKSwgc3JjUmVjdC5sb2NhdGlvbigpLnkoKSAqIHNjYWxl
LmhlaWdodCgpKTsKLSAgICBGbG9hdFBvaW50IGRlc3RPZmZzZXQgPSBkc3RSZWN0LmxvY2F0aW9u
KCkgLSB0b3BMZWZ0T2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSB0b3BMZWZ0T2Zmc2V0KHNyY1Jl
Y3QubG9jYXRpb24oKS54KCkgKiBzY2FsZS53aWR0aCgpLCBzcmNSZWN0LmxvY2F0aW9uKCkueSgp
ICogc2NhbGUuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9pbnQgZGVzdE9mZnNldCA9IGRzdFJl
Y3QubG9jYXRpb24oKSAtIHRvcExlZnRPZmZzZXQ7CiAKICAgICBjb250ZXh0LT50cmFuc2xhdGUo
ZGVzdE9mZnNldC54KCksIGRlc3RPZmZzZXQueSgpKTsKICAgICBjb250ZXh0LT5zY2FsZShzY2Fs
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQogCiAgICAgU1ZHSW1hZ2Uo
SW1hZ2VPYnNlcnZlciopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYgZnJvbVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdG9SZWN0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJvbVJlY3Qs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgdG9SZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBQYXNzUmVmUHRyPEZFSW1hZ2U+IEZFSW1hZ2U6OmNy
ZWF0ZShGaWx0CiB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKIHsK
ICAgICBBU1NFUlQobV9pbWFnZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgp
LCBtX2ltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBwYWludFJlY3QobV9hYnNvbHV0ZVN1
YnJlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX2lt
YWdlLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBwYWludFJlY3QobV9hYnNvbHV0ZVN1YnJl
Z2lvbik7CiAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0
LCBzcmNSZWN0KTsKICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CiAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKQEAg
LTY1LDggKzY1LDggQEAgdm9pZCBGRUltYWdlOjphcHBseSgpCiAgICAgaWYgKCFyZXN1bHRJbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgp
LCBtX2ltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX2Fic29sdXRlU3Vi
cmVnaW9uKTsKKyAgICBHcmFwaGljc1JlY3Qgc3JjUmVjdChHcmFwaGljc1BvaW50KCksIG1faW1h
Z2UtPnNpemUoKSk7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0KG1fYWJzb2x1dGVTdWJyZWdp
b24pOwogICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBz
cmNSZWN0KTsKIAogICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVj
dCgpLmxvY2F0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQCBjbGFzcyBGRUltYWdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVJbWFnZT4gY3JlYXRlKEZpbHRlciosIFBhc3NSZWZQ
dHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CiAKLSAgICB2b2lkIHNl
dEFic29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTdWJyZWdpb24pIHsg
bV9hYnNvbHV0ZVN1YnJlZ2lvbiA9IGFic29sdXRlU3VicmVnaW9uOyB9CisgICAgdm9pZCBzZXRB
YnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlU3VicmVnaW9uKSB7
IG1fYWJzb2x1dGVTdWJyZWdpb24gPSBhYnNvbHV0ZVN1YnJlZ2lvbjsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGFwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKQEAgLTUxLDcgKzUxLDcg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKLSAgICBGbG9hdFJlY3QgbV9hYnNv
bHV0ZVN1YnJlZ2lvbjsKKyAgICBHcmFwaGljc1JlY3QgbV9hYnNvbHV0ZVN1YnJlZ2lvbjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmls
dGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBi
b29sIGVmZmVjdEJCb3hNb2RlKQorU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgR3JhcGhpY3NSZWN0JiBhYnNvbHV0ZVNv
dXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQog
ICAgIDogRmlsdGVyKCkKICAgICAsIG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zv
cm0pCiAgICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURy
YXdpbmdSZWdpb24pCkBAIC01MCw3ICs1MCw3IEBAIGZsb2F0IFNWR0ZpbHRlcjo6YXBwbHlWZXJ0
aWNhbFNjYWxlKGZsb2EKICAgICByZXR1cm4gRmlsdGVyOjphcHBseVZlcnRpY2FsU2NhbGUodmFs
dWUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5oZWlnaHQoKSAvIG1fZmlsdGVyUmVnaW9uLmhl
aWdodCgpOwogfQogCi1QYXNzUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2Rl
KQorUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1dGVT
b3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBHcmFwaGljc1JlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBjb25zdCBHcmFwaGljc1JlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSwg
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyUmVn
aW9uLCBlZmZlY3RCQm94TW9kZSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDggKzI0LDggQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTM1LDMwICszNSwzMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0ZpbHRlciA6IHB1YmxpYyBGaWx0ZXIgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGJvb2wpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNz
UmVjdCYsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGJvb2wpOwogCiAgICAgdmlydHVhbCBib29sIGVm
ZmVjdEJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0QkJveE1vZGU7IH0K
IAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CisgICAgdmly
dHVhbCBHcmFwaGljc1JlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247IH0KIAotICAgIHZpcnR1
YWwgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbFBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS5t
YXBQb2ludChwb2ludCk7IH0KLSAgICBGbG9hdFJlY3QgbWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNm
b3JtLm1hcFJlY3QocmVjdCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUG9pbnQgbWFwQWJzb2x1
dGVQb2ludFRvTG9jYWxQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QgeyBy
ZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnQpOyB9Cisg
ICAgR3JhcGhpY3NSZWN0IG1hcExvY2FsUmVjdFRvQWJzb2x1dGVSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJl
Y3QpOyB9CiAKICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5SG9yaXpvbnRhbFNjYWxlKGZsb2F0IHZh
bHVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5VmVydGljYWxTY2FsZShmbG9hdCB2
YWx1ZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQotICAgIEZsb2F0
UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdC
b3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQorICAgIEdyYXBoaWNzUmVj
dCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7
IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdp
b24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAgICBTVkdGaWx0ZXIoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgR3JhcGhpY3NSZWN0JiBh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJC
b3hNb2RlKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAg
IEZsb2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisgICAgR3JhcGhpY3NSZWN0IG1fYWJz
b2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOworICAgIEdyYXBoaWNzUmVjdCBtX3RhcmdldEJvdW5k
aW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOworICAgIEdy
YXBoaWNzUmVjdCBtX2ZpbHRlclJlZ2lvbjsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xpc3RlbmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0ZW5lci5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmbmRlZiBBdWRpb0xpc3RlbmVyX2gKICNk
ZWZpbmUgQXVkaW9MaXN0ZW5lcl9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTQ1LDI3ICs0NSwyNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgLy8gUG9zaXRpb24KLSAgICB2b2lkIHNldFBvc2l0aW9uKGRvdWJsZSB4LCBk
b3VibGUgeSwgZG91YmxlIHopIHsgc2V0UG9zaXRpb24oRmxvYXRQb2ludDNEKHgsIHksIHopKTsg
fQotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludDNEICZwb3NpdGlvbikgeyBt
X3Bvc2l0aW9uID0gcG9zaXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgeyBzZXRQb3NpdGlvbihHcmFwaGljc1BvaW50M0Qo
eCwgeSwgeikpOyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50M0Qg
JnBvc2l0aW9uKSB7IG1fcG9zaXRpb24gPSBwb3NpdGlvbjsgfQorICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKICAgICAv
LyBPcmllbnRhdGlvbgogICAgIHZvaWQgc2V0T3JpZW50YXRpb24oZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeiwgZG91YmxlIHVwWCwgZG91YmxlIHVwWSwgZG91YmxlIHVwWikKICAgICB7Ci0g
ICAgICAgIHNldE9yaWVudGF0aW9uKEZsb2F0UG9pbnQzRCh4LCB5LCB6KSk7Ci0gICAgICAgIHNl
dFVwVmVjdG9yKEZsb2F0UG9pbnQzRCh1cFgsIHVwWSwgdXBaKSk7CisgICAgICAgIHNldE9yaWVu
dGF0aW9uKEdyYXBoaWNzUG9pbnQzRCh4LCB5LCB6KSk7CisgICAgICAgIHNldFVwVmVjdG9yKEdy
YXBoaWNzUG9pbnQzRCh1cFgsIHVwWSwgdXBaKSk7CiAgICAgfQotICAgIHZvaWQgc2V0T3JpZW50
YXRpb24oY29uc3QgRmxvYXRQb2ludDNEICZvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0g
b3JpZW50YXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIG9yaWVudGF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQorICAgIHZvaWQgc2V0T3JpZW50YXRpb24oY29u
c3QgR3JhcGhpY3NQb2ludDNEICZvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50
YXRpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIG9yaWVudGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQogCiAgICAgLy8gVXAtdmVjdG9yCi0gICAgdm9pZCBz
ZXRVcFZlY3Rvcihjb25zdCBGbG9hdFBvaW50M0QgJnVwVmVjdG9yKSB7IG1fdXBWZWN0b3IgPSB1
cFZlY3RvcjsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgdXBWZWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX3VwVmVjdG9yOyB9CisgICAgdm9pZCBzZXRVcFZlY3Rvcihjb25zdCBHcmFwaGljc1Bv
aW50M0QgJnVwVmVjdG9yKSB7IG1fdXBWZWN0b3IgPSB1cFZlY3RvcjsgfQorICAgIGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgdXBWZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3VwVmVjdG9yOyB9CiAK
ICAgICAvLyBWZWxvY2l0eQotICAgIHZvaWQgc2V0VmVsb2NpdHkoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeikgeyBzZXRWZWxvY2l0eShGbG9hdFBvaW50M0QoeCwgeSwgeikpOyB9Ci0gICAg
dm9pZCBzZXRWZWxvY2l0eShjb25zdCBGbG9hdFBvaW50M0QgJnZlbG9jaXR5KSB7IG1fdmVsb2Np
dHkgPSB2ZWxvY2l0eTsgfQotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgdmVsb2NpdHkoKSBjb25z
dCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShkb3VibGUgeCwg
ZG91YmxlIHksIGRvdWJsZSB6KSB7IHNldFZlbG9jaXR5KEdyYXBoaWNzUG9pbnQzRCh4LCB5LCB6
KSk7IH0KKyAgICB2b2lkIHNldFZlbG9jaXR5KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmdmVsb2Np
dHkpIHsgbV92ZWxvY2l0eSA9IHZlbG9jaXR5OyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNE
JiB2ZWxvY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVsb2NpdHk7IH0KIAogICAgIC8vIERvcHBs
ZXIgZmFjdG9yCiAgICAgdm9pZCBzZXREb3BwbGVyRmFjdG9yKGRvdWJsZSBkb3BwbGVyRmFjdG9y
KSB7IG1fZG9wcGxlckZhY3RvciA9IGRvcHBsZXJGYWN0b3I7IH0KQEAgLTc5LDExICs3OSwxMSBA
QCBwcml2YXRlOgogICAgIEF1ZGlvTGlzdGVuZXIoKTsKIAogICAgIC8vIFBvc2l0aW9uIC8gT3Jp
ZW50YXRpb24KLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0Qg
bV9vcmllbnRhdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV91cFZlY3RvcjsKKyAgICBHcmFwaGlj
c1BvaW50M0QgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9vcmllbnRhdGlvbjsK
KyAgICBHcmFwaGljc1BvaW50M0QgbV91cFZlY3RvcjsKIAotICAgIEZsb2F0UG9pbnQzRCBtX3Zl
bG9jaXR5OworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3ZlbG9jaXR5OwogCiAgICAgZG91YmxlIG1f
ZG9wcGxlckZhY3RvcjsKICAgICBkb3VibGUgbV9zcGVlZE9mU291bmQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5jcHAJKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgsOSArNTgsOSBAQCBBdWRpb1Bhbm5lck5vZGU6OkF1ZGlvUGFubmVyTm9kZShB
dWRpb0NvCiAgICAgbV9kaXN0YW5jZUdhaW4gPSBBdWRpb0dhaW46OmNyZWF0ZSgiZGlzdGFuY2VH
YWluIiwgMS4wLCAwLjAsIDEuMCk7CiAgICAgbV9jb25lR2FpbiA9IEF1ZGlvR2Fpbjo6Y3JlYXRl
KCJjb25lR2FpbiIsIDEuMCwgMC4wLCAxLjApOwogCi0gICAgbV9wb3NpdGlvbiA9IEZsb2F0UG9p
bnQzRCgwLCAwLCAwKTsKLSAgICBtX29yaWVudGF0aW9uID0gRmxvYXRQb2ludDNEKDEsIDAsIDAp
OwotICAgIG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7CisgICAgbV9wb3NpdGlv
biA9IEdyYXBoaWNzUG9pbnQzRCgwLCAwLCAwKTsKKyAgICBtX29yaWVudGF0aW9uID0gR3JhcGhp
Y3NQb2ludDNEKDEsIDAsIDApOworICAgIG1fdmVsb2NpdHkgPSBHcmFwaGljc1BvaW50M0QoMCwg
MCwgMCk7CiAgICAgCiAgICAgc2V0VHlwZShOb2RlVHlwZVBhbm5lcik7CiAKQEAgLTE2NSw4ICsx
NjUsOCBAQCB2b2lkIEF1ZGlvUGFubmVyTm9kZTo6Z2V0QXppbXV0aEVsZXZhdGlvCiAgICAgZG91
YmxlIGF6aW11dGggPSAwLjA7CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZS1saXN0ZW5l
ciB2ZWN0b3IKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCkt
PnBvc2l0aW9uKCk7Ci0gICAgRmxvYXRQb2ludDNEIHNvdXJjZUxpc3RlbmVyID0gbV9wb3NpdGlv
biAtIGxpc3RlbmVyUG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyUG9zaXRp
b24gPSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VM
aXN0ZW5lciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOwogCiAgICAgaWYgKHNvdXJj
ZUxpc3RlbmVyLmlzWmVybygpKSB7CiAgICAgICAgIC8vIGRlZ2VuZXJhdGUgY2FzZSBpZiBzb3Vy
Y2UgYW5kIGxpc3RlbmVyIGFyZSBhdCB0aGUgc2FtZSBwb2ludApAQCAtMTc4LDE5ICsxNzgsMTkg
QEAgdm9pZCBBdWRpb1Bhbm5lck5vZGU6OmdldEF6aW11dGhFbGV2YXRpbwogICAgIHNvdXJjZUxp
c3RlbmVyLm5vcm1hbGl6ZSgpOwogCiAgICAgLy8gQWxpZ24gYXhlcwotICAgIEZsb2F0UG9pbnQz
RCBsaXN0ZW5lckZyb250ID0gbGlzdGVuZXIoKS0+b3JpZW50YXRpb24oKTsKLSAgICBGbG9hdFBv
aW50M0QgbGlzdGVuZXJVcCA9IGxpc3RlbmVyKCktPnVwVmVjdG9yKCk7Ci0gICAgRmxvYXRQb2lu
dDNEIGxpc3RlbmVyUmlnaHQgPSBsaXN0ZW5lckZyb250LmNyb3NzKGxpc3RlbmVyVXApOworICAg
IEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lckZyb250ID0gbGlzdGVuZXIoKS0+b3JpZW50YXRpb24o
KTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJVcCA9IGxpc3RlbmVyKCktPnVwVmVjdG9y
KCk7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyUmlnaHQgPSBsaXN0ZW5lckZyb250LmNy
b3NzKGxpc3RlbmVyVXApOwogICAgIGxpc3RlbmVyUmlnaHQubm9ybWFsaXplKCk7CiAKLSAgICBG
bG9hdFBvaW50M0QgbGlzdGVuZXJGcm9udE5vcm0gPSBsaXN0ZW5lckZyb250OworICAgIEdyYXBo
aWNzUG9pbnQzRCBsaXN0ZW5lckZyb250Tm9ybSA9IGxpc3RlbmVyRnJvbnQ7CiAgICAgbGlzdGVu
ZXJGcm9udE5vcm0ubm9ybWFsaXplKCk7CiAKLSAgICBGbG9hdFBvaW50M0QgdXAgPSBsaXN0ZW5l
clJpZ2h0LmNyb3NzKGxpc3RlbmVyRnJvbnROb3JtKTsKKyAgICBHcmFwaGljc1BvaW50M0QgdXAg
PSBsaXN0ZW5lclJpZ2h0LmNyb3NzKGxpc3RlbmVyRnJvbnROb3JtKTsKIAogICAgIGRvdWJsZSB1
cFByb2plY3Rpb24gPSBzb3VyY2VMaXN0ZW5lci5kb3QodXApOwogCi0gICAgRmxvYXRQb2ludDNE
IHByb2plY3RlZFNvdXJjZSA9IHNvdXJjZUxpc3RlbmVyIC0gdXBQcm9qZWN0aW9uICogdXA7Cisg
ICAgR3JhcGhpY3NQb2ludDNEIHByb2plY3RlZFNvdXJjZSA9IHNvdXJjZUxpc3RlbmVyIC0gdXBQ
cm9qZWN0aW9uICogdXA7CiAgICAgcHJvamVjdGVkU291cmNlLm5vcm1hbGl6ZSgpOwogCiAgICAg
YXppbXV0aCA9IDE4MC4wICogYWNvcyhwcm9qZWN0ZWRTb3VyY2UuZG90KGxpc3RlbmVyUmlnaHQp
KSAvIHBpRG91YmxlOwpAQCAtMjMyLDggKzIzMiw4IEBAIGZsb2F0IEF1ZGlvUGFubmVyTm9kZTo6
ZG9wcGxlclJhdGUoKQogICAgIGlmIChkb3BwbGVyRmFjdG9yID4gMC4wKSB7CiAgICAgICAgIGRv
dWJsZSBzcGVlZE9mU291bmQgPSBsaXN0ZW5lcigpLT5zcGVlZE9mU291bmQoKTsKIAotICAgICAg
ICBjb25zdCBGbG9hdFBvaW50M0QgJnNvdXJjZVZlbG9jaXR5ID0gbV92ZWxvY2l0eTsKLSAgICAg
ICAgY29uc3QgRmxvYXRQb2ludDNEICZsaXN0ZW5lclZlbG9jaXR5ID0gbGlzdGVuZXIoKS0+dmVs
b2NpdHkoKTsKKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEICZzb3VyY2VWZWxvY2l0eSA9
IG1fdmVsb2NpdHk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmbGlzdGVuZXJWZWxv
Y2l0eSA9IGxpc3RlbmVyKCktPnZlbG9jaXR5KCk7CiAKICAgICAgICAgLy8gRG9uJ3QgYm90aGVy
IGlmIGJvdGggc291cmNlIGFuZCBsaXN0ZW5lciBoYXZlIG5vIHZlbG9jaXR5CiAgICAgICAgIGJv
b2wgc291cmNlSGFzVmVsb2NpdHkgPSAhc291cmNlVmVsb2NpdHkuaXNaZXJvKCk7CkBAIC0yNDEs
OCArMjQxLDggQEAgZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkb3BwbGVyUmF0ZSgpCiAKICAgICAg
ICAgaWYgKHNvdXJjZUhhc1ZlbG9jaXR5IHx8IGxpc3RlbmVySGFzVmVsb2NpdHkpIHsKICAgICAg
ICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlIHRvIGxpc3RlbmVyIHZlY3RvcgotICAgICAg
ICAgICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24gPSBsaXN0ZW5lcigpLT5wb3NpdGlv
bigpOwotICAgICAgICAgICAgRmxvYXRQb2ludDNEIHNvdXJjZVRvTGlzdGVuZXIgPSBtX3Bvc2l0
aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0
ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAgICAgICAgICAgIEdyYXBo
aWNzUG9pbnQzRCBzb3VyY2VUb0xpc3RlbmVyID0gbV9wb3NpdGlvbiAtIGxpc3RlbmVyUG9zaXRp
b247CiAKICAgICAgICAgICAgIGRvdWJsZSBzb3VyY2VMaXN0ZW5lck1hZ25pdHVkZSA9IHNvdXJj
ZVRvTGlzdGVuZXIubGVuZ3RoKCk7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQCBmbG9hdCBBdWRpb1Bh
bm5lck5vZGU6OmRvcHBsZXJSYXRlKCkKIAogZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkaXN0YW5j
ZUNvbmVHYWluKCkKIHsKLSAgICBGbG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3Rl
bmVyKCktPnBvc2l0aW9uKCk7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24g
PSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOwogCiAgICAgZG91YmxlIGxpc3RlbmVyRGlzdGFuY2Ug
PSBtX3Bvc2l0aW9uLmRpc3RhbmNlVG8obGlzdGVuZXJQb3NpdGlvbik7CiAgICAgZG91YmxlIGRp
c3RhbmNlR2FpbiA9IG1fZGlzdGFuY2VFZmZlY3QuZ2FpbihsaXN0ZW5lckRpc3RhbmNlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAjaW5j
bHVkZSAiQ29uZS5oIgogI2luY2x1ZGUgIkRpc3RhbmNlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSAiUGFubmVyLmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC03NSwxNiArNzUsMTYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0UGFubmluZ01vZGVsKHVuc2lnbmVkIHNob3J0KTsKIAogICAgIC8vIFBvc2l0
aW9uCi0gICAgRmxvYXRQb2ludDNEIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBt
X3Bvc2l0aW9uID0gRmxvYXRQb2ludDNEKHgsIHksIHopOyB9CisgICAgR3JhcGhpY3NQb2ludDNE
IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0UG9z
aXRpb24oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3Bvc2l0aW9uID0gR3JhcGhpY3NQ
b2ludDNEKHgsIHksIHopOyB9CiAKICAgICAvLyBPcmllbnRhdGlvbgotICAgIEZsb2F0UG9pbnQz
RCBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KLSAgICB2b2lkIHNl
dE9yaWVudGF0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9vcmllbnRhdGlvbiA9
IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQorICAgIEdyYXBoaWNzUG9pbnQzRCBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lkIHNldE9yaWVudGF0aW9u
KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9vcmllbnRhdGlvbiA9IEdyYXBoaWNzUG9p
bnQzRCh4LCB5LCB6KTsgfQogCiAgICAgLy8gVmVsb2NpdHkKLSAgICBGbG9hdFBvaW50M0QgdmVs
b2NpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9Ci0gICAgdm9pZCBzZXRWZWxvY2l0
eShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fdmVsb2NpdHkgPSBGbG9hdFBvaW50M0Qo
eCwgeSwgeik7IH0KKyAgICBHcmFwaGljc1BvaW50M0QgdmVsb2NpdHkoKSBjb25zdCB7IHJldHVy
biBtX3ZlbG9jaXR5OyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6KSB7IG1fdmVsb2NpdHkgPSBHcmFwaGljc1BvaW50M0QoeCwgeSwgeik7IH0KIAogICAg
IC8vIERpc3RhbmNlIHBhcmFtZXRlcnMKICAgICB1bnNpZ25lZCBzaG9ydCBkaXN0YW5jZU1vZGVs
KCkgeyByZXR1cm4gbV9kaXN0YW5jZUVmZmVjdC5tb2RlbCgpOyB9CkBAIC0xMjksOSArMTI5LDkg
QEAgcHJpdmF0ZToKICAgICBPd25QdHI8UGFubmVyPiBtX3Bhbm5lcjsKICAgICB1bnNpZ25lZCBt
X3Bhbm5pbmdNb2RlbDsKIAotICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0
UG9pbnQzRCBtX29yaWVudGF0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX3ZlbG9jaXR5OworICAg
IEdyYXBoaWNzUG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX29yaWVu
dGF0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3ZlbG9jaXR5OwogCiAgICAgLy8gR2Fpbgog
ICAgIFJlZlB0cjxBdWRpb0dhaW4+IG1fZGlzdGFuY2VHYWluOwpJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNjUgQEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92
ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1
c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhl
aXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9y
bXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmpl
Y3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL0FQ
SS9jL1dLU2hhcmVkQVBJQ2FzdC5oOgorICAgICAgICAoV2ViS2l0Ojp0b0dyYXBoaWNzUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OnRvQVBJKToKKyAgICAgICAgKiBTaGFyZWQvRGljdGlvbmFyeVBv
cHVwSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgor
ICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBT
aGFyZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6ZGVsdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJXaGVlbEV2ZW50Ojp3aGVlbFRpY2tzKToKKyAgICAgICAg
KiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9XZWJXaGVlbEV2
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6V2ViV2hlZWxFdmVudCk6
CisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpwYWludCk6CisgICAgICAgICogU2hhcmVkL2Vm
bC9XZWJFdmVudEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVl
bEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAg
ICAgKiBTaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC93
aW4vV2ViRXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdl
Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9Vc2VyU3BhY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBs
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
b252ZXJ0VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
b252ZXJ0VG9Vc2VyU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2hv
d0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
OgorICAgICAgICAoLVtXS1ZpZXcgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdEN1cnJlbnRNb3Vz
ZUxvY2F0aW9uXSk6CisgICAgICAgICogVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpG
aW5kSW5kaWNhdG9yOjpGaW5kSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYktpdDo6aW5mbGF0ZVJl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpmcmFtZVJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpwYXRoV2l0aFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RmluZElu
ZGljYXRvcjo6ZHJhdyk6CisgICAgICAgICogVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaDoKKyAg
ICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjp0ZXh0UmVjdHMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1RpbGVk
RHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJh
d2luZ0FyZWFQcm94eTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6Om1hcFRvQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6Om1hcEZyb21Db250ZW50cyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhUHJveHk6OmdldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRGaW5kSW5kaWNh
dG9yKToKKyAgICAgICAgKFdlYktpdDo6Y29hbGVzY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmRyYXdIZWFkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRy
YXdGb290ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dDb3JyZWN0aW9u
UGFuZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJVSUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50OjpzZXRXaW5kb3dG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50Ojp3aW5kb3dGcmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVUlDbGllbnQ6OmRyYXdGb290ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVu
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW06CisgICAgICAgIChXZWJLaXQ6OkNv
cnJlY3Rpb25QYW5lbDo6c2hvdyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZSk6
CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2lu
L1dlYlBvcHVwTWVudVByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51
UHJveHlXaW46OmNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVydFRvRGV2
aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwOgorICAgICAgICAoV0tCdW5kbGVQ
YWdlT3ZlcmxheVNldE5lZWRzRGlzcGxheSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlOjpudW1iZXJPZlBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OnBh
Z2VOdW1iZXJGb3JFbGVtZW50QnlJZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2Nh
cGVQbHVnaW46OmNvbnZlcnRQb2ludCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpblgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNldFhC
dXR0b25FdmVudEZpZWxkc0J5V2ViV2hlZWxFdmVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVD
bGllbnQ6OndpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnBh
Z2VSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGln
aHRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhp
Z2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21T
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9t
U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZUludG9UaWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9VSVByb2Nlc3MpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBh
bmVsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpG
aW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkZp
bmRDb250cm9sbGVyOjpoaWRlRmluZEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkZpbmRD
b250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzY2FsZWRTbmFwc2hvdEluRG9jdW1l
bnRDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmJlZ2luUHJpbnRpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYXdSZWN0VG9QREYpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BERik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdENBOjpzaXplRGlkQ2hhbmdlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxlZERyYXdpbmdBcmVhUXQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhOjpwYWludEludG9CaXRtYXApOgorICAg
ICAgICAqIG1hYy9XZWJLaXQyLm9yZGVyOgorCiAyMDExLTA3LTE0ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMg
Q2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2Vz
LnB5CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9t
ZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjU1LDcgKzI1NSw3IEBAIGRlZiBzdHJ1Y3Rf
b3JfY2xhc3MobmFtZXNwYWNlLCB0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OkFuaW1hdGlvbics
CiAgICAgICAgICdXZWJDb3JlOjpFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50JywKICAgICAgICAg
J1dlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lJywKLSAgICAgICAgJ1dlYkNvcmU6OkZsb2F0
UG9pbnQzRCcsCisgICAgICAgICdXZWJDb3JlOjpHcmFwaGljc1BvaW50M0QnLAogICAgICAgICAn
V2ViQ29yZTo6R3JhbW1hckRldGFpbCcsCiAgICAgICAgICdXZWJDb3JlOjpJZGVudGl0eVRyYW5z
Zm9ybU9wZXJhdGlvbicsCiAgICAgICAgICdXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQnLApJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25hcnlQb3B1cEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFyeVBvcHVwSW5mby5oCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRGljdGlvbmFyeVBvcHVw
SW5mb19oCiAKICNpbmNsdWRlICJGb250SW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQ
b2ludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NQb2ludC5oPgogCiAjaWYgUExBVEZP
Uk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ5LDcgKzQ5LDcgQEAgc3Ry
dWN0IERpY3Rpb25hcnlQb3B1cEluZm8gewogICAgICAgICBIb3RLZXkKICAgICB9OwogCi0gICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW47CisgICAgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCBv
cmlnaW47CiAgICAgRm9udEluZm8gZm9udEluZm87CiAgICAgVHlwZSB0eXBlOwogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQpJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogI2lmIFBMQVRGT1JNKFFU
KQogI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFBvaW50M0QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUG9pbnQzRC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uaD4KQEAgLTYyLDM2ICs2MiwzNiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxG
bG9hdFBvaW50Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRmxvYXRQ
b2ludCYgZmxvYXRQb2ludCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50Pjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgR3JhcGhpY3NQb2ludCYgZmxvYXRQ
b2ludCkKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjplbmNvZGUoZW5j
b2RlciwgZmxvYXRQb2ludCk7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50
Pjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQpOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8
RmxvYXRQb2ludD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEZsb2F0UG9pbnQm
IGZsb2F0UG9pbnQpCitib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2ludD46OmRlY29kZShB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdyYXBoaWNzUG9pbnQmIGZsb2F0UG9pbnQpCiB7Ci0g
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludD46OmRlY29kZShkZWNvZGVy
LCBmbG9hdFBvaW50KTsKKyAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1Bv
aW50Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQpOwogfQogCiAKLXZvaWQgQXJndW1lbnRD
b2RlcjxGbG9hdFJlY3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBG
bG9hdFJlY3QmIGZsb2F0UmVjdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc1JlY3Q+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGZsb2F0
UmVjdCkKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UmVjdD46OmVuY29kZShlbmNv
ZGVyLCBmbG9hdFJlY3QpOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NSZWN0Pjo6
ZW5jb2RlKGVuY29kZXIsIGZsb2F0UmVjdCk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxGbG9h
dFJlY3Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBGbG9hdFJlY3QmIGZsb2F0
UmVjdCkKK2Jvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc1JlY3Q+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc1JlY3QmIGZsb2F0UmVjdCkKIHsKLSAgICByZXR1cm4g
U2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRSZWN0
KTsKKyAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1JlY3Q+OjpkZWNvZGUo
ZGVjb2RlciwgZmxvYXRSZWN0KTsKIH0KIAogCi12b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRTaXpl
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRmxvYXRTaXplJiBmbG9h
dFNpemUpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NTaXplPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgR3JhcGhpY3NTaXplJiBmbG9hdFNpemUpCiB7Ci0gICAg
U2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFNpemU+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRTaXpl
KTsKKyAgICBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmVuY29kZShlbmNvZGVy
LCBmbG9hdFNpemUpOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRTaXplPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRTaXplJiBmbG9hdFNpemUpCitib29sIEFy
Z3VtZW50Q29kZXI8R3JhcGhpY3NTaXplPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgR3JhcGhpY3NTaXplJiBmbG9hdFNpemUpCiB7Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50
Q29kZXI8RmxvYXRTaXplPjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0U2l6ZSk7CisgICAgcmV0dXJu
IFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NTaXplPjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0
U2l6ZSk7CiB9CiAKIApAQCAtNTUyLDE0ICs1NTIsMTQgQEAgYm9vbCBBcmd1bWVudENvZGVyPFRl
eHRDaGVja2luZ1Jlc3VsdD46OgogCiAjaWYgUExBVEZPUk0oUVQpCiAKLXZvaWQgQXJndW1lbnRD
b2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25z
dCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGlj
c1BvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFwaGlj
c1BvaW50M0QmIGZsb2F0UG9pbnQzRCkKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0
UG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50M0QpOworICAgIFNpbXBsZUFyZ3Vt
ZW50Q29kZXI8R3JhcGhpY3NQb2ludDNEPjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQzRCk7
CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKK2Jvb2wgQXJndW1l
bnRDb2RlcjxHcmFwaGljc1BvaW50M0Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBHcmFwaGljc1BvaW50M0QmIGZsb2F0UG9pbnQzRCkKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJn
dW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludDNEKTsK
KyAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1BvaW50M0Q+OjpkZWNvZGUo
ZGVjb2RlciwgZmxvYXRQb2ludDNEKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ3JlZGVudGlh
bDsKICAgICBjbGFzcyBDdXJzb3I7CiAgICAgY2xhc3MgRGF0YWJhc2VEZXRhaWxzOwotICAgIGNs
YXNzIEZsb2F0UG9pbnQ7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIEZsb2F0U2l6
ZTsKKyAgICBjbGFzcyBHcmFwaGljc1BvaW50OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKKyAg
ICBjbGFzcyBHcmFwaGljc1NpemU7CiAgICAgY2xhc3MgSFRUUEhlYWRlck1hcDsKICAgICBjbGFz
cyBJbnRQb2ludDsKICAgICBjbGFzcyBJbnRSZWN0OwpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oUVQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQW5pbWF0aW9uOwotICAgIGNsYXNzIEZsb2F0UG9pbnQzRDsKKyAgICBjbGFzcyBHcmFw
aGljc1BvaW50M0Q7CiAgICAgY2xhc3MgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAg
Y2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOwogICAgIGNsYXNzIFBlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uOwpAQCAtODEsMTkgKzgxLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogbmFtZXNwYWNlIENvcmVJUEMgewogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkZsb2F0UG9pbnQ+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQ+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQ
b2ludCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc1BvaW50Jik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkZsb2F0UmVjdD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4geworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3Jh
cGhpY3NSZWN0Jik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OkZsb2F0U2l6ZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIq
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRTaXplJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU2l6ZT4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NT
aXplJik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Oklu
dFBvaW50PiB7CkBAIC0yMDMsOSArMjAzLDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOgogfTsKIAogI2lmIFBMQVRGT1JNKFFUKQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50M0Q+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7Ci0g
ICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UG9p
bnQzRCYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGlj
c1BvaW50M0Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludDNEJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQzRCYpOwogfTsKIAogdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5ndGg+IHsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJFdmVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAvLyBGSVhN
RTogV2Ugc2hvdWxkIHByb2JhYmx5IG1vdmUgdG8gbWFrZWluZyB0aGUgV2ViQ29yZS9QbGF0Zm9y
bUZvb0V2ZW50cyB0cml2aWFsIGNsYXNzZXMgc28gdGhhdAogLy8gd2UgY2FuIHVzZSB0aGVtIGFz
IHRoZSBldmVudCB0eXBlLgogCi0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzU2l6ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTc3LDE1ICsxNzcsMTUg
QEAgcHVibGljOgogCiAgICAgV2ViV2hlZWxFdmVudCgpIHsgfQogCi0gICAgV2ViV2hlZWxFdmVu
dChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBkZWx0
YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgTW9k
aWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyAgICBXZWJXaGVlbEV2ZW50KFR5cGUsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGds
b2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGRlbHRhLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1NpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBNb2RpZmllcnMs
IGRvdWJsZSB0aW1lc3RhbXApOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBXZWJXaGVlbEV2ZW50
KFR5cGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGRlbHRh
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHdoZWVsVGlja3MsIEdyYW51bGFyaXR5LCBQaGFz
ZSBwaGFzZSwgUGhhc2UgbW9tZW50dW1QaGFzZSxib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXMsIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisgICAgV2ViV2hlZWxFdmVudChUeXBl
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJiBkZWx0YSwg
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSwgUGhh
c2UgcGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsYm9vbCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVs
dGFzLCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOwogI2VuZGlmCiAKICAgICBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0K
ICAgICBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUgZGVs
dGEoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplIHdoZWVsVGlja3MoKSBjb25zdCB7IHJldHVybiBtX3doZWVsVGlja3M7IH0KKyAgICBjb25z
dCBXZWJDb3JlOjpHcmFwaGljc1NpemUgZGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2RlbHRhOyB9
CisgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplIHdoZWVsVGlja3MoKSBjb25zdCB7IHJl
dHVybiBtX3doZWVsVGlja3M7IH0KICAgICBHcmFudWxhcml0eSBncmFudWxhcml0eSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdyYW51bGFyaXR5PihtX2dyYW51bGFyaXR5KTsgfQogI2lm
IFBMQVRGT1JNKE1BQykKICAgICBQaGFzZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFBoYXNlPihtX3BoYXNlKTsgfQpAQCAtMjAxLDggKzIwMSw4IEBAIHByaXZhdGU6CiAKICAg
ICBXZWJDb3JlOjpJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgIFdlYkNvcmU6OkludFBvaW50IG1f
Z2xvYmFsUG9zaXRpb247Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fZGVsdGE7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRTaXplIG1fd2hlZWxUaWNrczsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1NpemUg
bV9kZWx0YTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1NpemUgbV93aGVlbFRpY2tzOwogICAgIHVp
bnQzMl90IG1fZ3JhbnVsYXJpdHk7IC8vIEdyYW51bGFyaXR5CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIHVpbnQzMl90IG1fcGhhc2U7IC8vIFBoYXNlCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViTGF5ZXJUcmVlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJMYXllclRyZWVJbmZvLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBA
QAogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNv
ZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogCkBA
IC01NSw5ICs1NSw5IEBAIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgIFdlYkxheWVySUQgcmVw
bGljYTsKICAgICBXZWJMYXllcklEIG1hc2s7CiAKLSAgICBGbG9hdFBvaW50IHBvczsKLSAgICBG
bG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7Ci0gICAgRmxvYXRTaXplIHNpemU7CisgICAgR3JhcGhp
Y3NQb2ludCBwb3M7CisgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50OworICAgIEdyYXBo
aWNzU2l6ZSBzaXplOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJXaGVlbEV2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hlZWxFdmVudC5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVsRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsgICAgCiAKLVdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZl
bnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBn
bG9iYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRTaXplJiB3
aGVlbFRpY2tzLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywg
ZG91YmxlIHRpbWVzdGFtcCkKK1dlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQoVHlwZSB0eXBl
LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlv
biwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0YSwgY29uc3QgR3JhcGhpY3NTaXplJiB3aGVlbFRp
Y2tzLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91Ymxl
IHRpbWVzdGFtcCkKICAgICA6IFdlYkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQog
ICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFs
UG9zaXRpb24pCkBAIC00OSw3ICs0OSw3IEBAIFdlYldoZWVsRXZlbnQ6OldlYldoZWVsRXZlbnQo
VHlwZSB0eXBlLCAKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLVdlYldoZWVsRXZlbnQ6OldlYldo
ZWVsRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBv
aW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRT
aXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgUGhhc2UgcGhhc2UsIFBo
YXNlIG1vbWVudHVtUGhhc2UsIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgTW9kaWZp
ZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKK1dlYldoZWVsRXZlbnQ6OldlYldoZWVs
RXZlbnQoVHlwZSB0eXBlLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0YSwgY29uc3QgR3JhcGhp
Y3NTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0eSBncmFudWxhcml0eSwgUGhhc2UgcGhhc2Us
IFBoYXNlIG1vbWVudHVtUGhhc2UsIGJvb2wgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgTW9k
aWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKICAgICA6IFdlYkV2ZW50KHR5cGUs
IG1vZGlmaWVycywgdGltZXN0YW1wKQogICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAs
IG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKICNpbmNsdWRl
ICJXZWJVUkxSZXNwb25zZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVJdGVtLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzUmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CkBAIC0x
ODgsOSArMTg4LDkgQEAgaW5saW5lIFByb3h5aW5nUmVmUHRyPFdlYlVSTFJlc3BvbnNlPiB0bwog
CiAvKiBHZW9tZXRyeSBjb252ZXJzaW9ucyAqLwogCi1pbmxpbmUgV2ViQ29yZTo6RmxvYXRSZWN0
IHRvRmxvYXRSZWN0KGNvbnN0IFdLUmVjdCYgd2tSZWN0KQoraW5saW5lIFdlYkNvcmU6OkdyYXBo
aWNzUmVjdCB0b0dyYXBoaWNzUmVjdChjb25zdCBXS1JlY3QmIHdrUmVjdCkKIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qub3JpZ2luLngp
LCBzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9yaWdpbi55KSwKKyAgICByZXR1cm4gV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0KHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qub3JpZ2luLngpLCBzdGF0
aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9yaWdpbi55KSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Quc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0
PGZsb2F0Pih3a1JlY3Quc2l6ZS5oZWlnaHQpKTsKIH0KIApAQCAtMjEwLDcgKzIxMCw3IEBAIGlu
bGluZSBXZWJDb3JlOjpJbnRSZWN0IHRvSW50UmVjdChjb25zdCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHdrUmVjdC5zaXplLndpZHRoKSwgc3RhdGljX2Nh
c3Q8aW50Pih3a1JlY3Quc2l6ZS5oZWlnaHQpKTsKIH0KIAotaW5saW5lIFdLUmVjdCB0b0FQSShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCitpbmxpbmUgV0tSZWN0IHRvQVBJKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBXS1JlY3Qgd2tSZWN0OwogICAg
IHdrUmVjdC5vcmlnaW4ueCA9IHJlY3QueCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6
OnBhaW50KEdyYXBoaWNzQ29udAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JN
QVRfQVJHQjMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NpemUud2lkdGgoKSAq
IDQpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoZHN0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKTsK
KyAgICBHcmFwaGljc1JlY3QgZGVzdFJlY3QoZHN0UG9pbnQsIHNyY1JlY3Quc2l6ZSgpKTsKICAg
ICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNl
LmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgJmNvbnRleHQpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9XZWJFdmVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDggKzE1MCw4IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0
b3J5OjpjcmVhdGVXZWIKICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoZXZlbnQtPmNhbnZhcy54IC0gcG9z
aXRpb24tPngsIGV2ZW50LT5jYW52YXMueSAtIHBvc2l0aW9uLT55KSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludChldmVudC0+Y2FudmFzLngsIGV2ZW50LT5jYW52YXMueSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUoZGVsdGFYLCBkZWx0YVkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxU
aWNrc1kpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldoZWVsRXZlbnQ6OlNjcm9sbEJ5
UGl4ZWxXaGVlbEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyc0ZvckV2
ZW50KGV2ZW50LT5tb2RpZmllcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LT50
aW1lc3RhbXApOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3Rv
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRG
YWN0b3J5LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1dlYkV2ZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNywxOSArMTM3LDE5IEBA
IFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWIKICAgICBnZGtfZXZlbnRf
Z2V0X2Nvb3JkcyhldmVudCwgJngsICZ5KTsKICAgICBnZGtfZXZlbnRfZ2V0X3Jvb3RfY29vcmRz
KGV2ZW50LCAmeFJvb3QsICZ5Um9vdCk7CiAKLSAgICBGbG9hdFNpemUgd2hlZWxUaWNrczsKKyAg
ICBHcmFwaGljc1NpemUgd2hlZWxUaWNrczsKICAgICBzd2l0Y2ggKGV2ZW50LT5zY3JvbGwuZGly
ZWN0aW9uKSB7CiAgICAgY2FzZSBHREtfU0NST0xMX1VQOgotICAgICAgICB3aGVlbFRpY2tzID0g
RmxvYXRTaXplKDAsIDEpOworICAgICAgICB3aGVlbFRpY2tzID0gR3JhcGhpY3NTaXplKDAsIDEp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdES19TQ1JPTExfRE9XTjoKLSAgICAgICAgd2hl
ZWxUaWNrcyA9IEZsb2F0U2l6ZSgwLCAtMSk7CisgICAgICAgIHdoZWVsVGlja3MgPSBHcmFwaGlj
c1NpemUoMCwgLTEpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdES19TQ1JPTExfTEVGVDoK
LSAgICAgICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgxLCAwKTsKKyAgICAgICAgd2hlZWxUaWNr
cyA9IEdyYXBoaWNzU2l6ZSgxLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHREtfU0NS
T0xMX1JJR0hUOgotICAgICAgICB3aGVlbFRpY2tzID0gRmxvYXRTaXplKC0xLCAwKTsKKyAgICAg
ICAgd2hlZWxUaWNrcyA9IEdyYXBoaWNzU2l6ZSgtMSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTU4LDcgKzE1OCw3
IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWIKICAgICAvLyBGSVhN
RTogW0dUS10gQWRkIGEgc2V0dGluZyB0byBjaGFuZ2UgdGhlIHBpeGVscyBwZXIgbGluZSB1c2Vk
IGZvciBzY3JvbGxpbmcKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTQ4MjYKICAgICBmbG9hdCBzdGVwID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSk7Ci0gICAgRmxvYXRTaXplIGRlbHRhKHdoZWVsVGlja3Mu
d2lkdGgoKSAqIHN0ZXAsIHdoZWVsVGlja3MuaGVpZ2h0KCkgKiBzdGVwKTsKKyAgICBHcmFwaGlj
c1NpemUgZGVsdGEod2hlZWxUaWNrcy53aWR0aCgpICogc3RlcCwgd2hlZWxUaWNrcy5oZWlnaHQo
KSAqIHN0ZXApOwogCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHgsIHkpLApJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0JKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEwOTcsNyArMTA5Nyw3IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5
OjpjcmVhdGVXZWIKICAgICBXZWJFdmVudDo6TW9kaWZpZXJzIG1vZGlmaWVycyAgICAgICAgICAg
PSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCAgICAgICAg
ICAgICAgICAgICAgICAgID0gW2V2ZW50IHRpbWVzdGFtcF07CiAgICAgCi0gICAgcmV0dXJuIFdl
YldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBJbnRQb2ludChwb3NpdGlvbiksIEludFBvaW50
KGdsb2JhbFBvc2l0aW9uKSwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdo
ZWVsVGlja3NYLCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBwaGFzZSwgbW9tZW50dW1QaGFz
ZSwgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworICAg
IHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgSW50UG9pbnQocG9zaXRpb24p
LCBJbnRQb2ludChnbG9iYWxQb3NpdGlvbiksIEdyYXBoaWNzU2l6ZShkZWx0YVgsIGRlbHRhWSks
IEdyYXBoaWNzU2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgcGhh
c2UsIG1vbWVudHVtUGhhc2UsIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIG1vZGlmaWVycywg
dGltZXN0YW1wKTsKIH0KIAogV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0
ZVdlYktleWJvYXJkRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqKQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+
CiAjaW5jbHVkZSA8UUtleUV2ZW50PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgogI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBA
IC05Niw3ICs5Niw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmkK
IAogV2ViTW91c2VFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoUUdy
YXBoaWNzU2NlbmVNb3VzZUV2ZW50KiBldmVudCwgaW50IGV2ZW50Q2xpY2tDb3VudCkKIHsKLSAg
ICBGbG9hdFBvaW50IGRlbHRhKGV2ZW50LT5wb3MoKS54KCkgLSBldmVudC0+bGFzdFBvcygpLngo
KSwgZXZlbnQtPnBvcygpLnkoKSAtIGV2ZW50LT5sYXN0UG9zKCkueSgpKTsKKyAgICBHcmFwaGlj
c1BvaW50IGRlbHRhKGV2ZW50LT5wb3MoKS54KCkgLSBldmVudC0+bGFzdFBvcygpLngoKSwgZXZl
bnQtPnBvcygpLnkoKSAtIGV2ZW50LT5sYXN0UG9zKCkueSgpKTsKIAogICAgIFdlYkV2ZW50OjpU
eXBlIHR5cGUgICAgICAgICAgICAgPSB3ZWJFdmVudFR5cGVGb3JFdmVudChldmVudCk7CiAgICAg
V2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvbiAgICA9IG1vdXNlQnV0dG9uRm9yRXZlbnQoZXZl
bnQpOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFdlYldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWIKICAgICBkZWx0YVggKj0gKGZ1bGxUaWNrKSA/IFFBcHBsaWNhdGlvbjo6d2hlZWxT
Y3JvbGxMaW5lcygpICogY0RlZmF1bHRRdFNjcm9sbFN0ZXAgOiAxOwogICAgIGRlbHRhWSAqPSAo
ZnVsbFRpY2spID8gUUFwcGxpY2F0aW9uOjp3aGVlbFNjcm9sbExpbmVzKCkgKiBjRGVmYXVsdFF0
U2Nyb2xsU3RlcCA6IDE7CiAKLSAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hl
ZWwsIGUtPnBvcygpLnRvUG9pbnQoKSwgZS0+c2NyZWVuUG9zKCksIEZsb2F0U2l6ZShkZWx0YVgs
IGRlbHRhWSksIEZsb2F0U2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0
eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOworICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2
ZW50OjpXaGVlbCwgZS0+cG9zKCkudG9Qb2ludCgpLCBlLT5zY3JlZW5Qb3MoKSwgR3JhcGhpY3NT
aXplKGRlbHRhWCwgZGVsdGFZKSwgR3JhcGhpY3NTaXplKHdoZWVsVGlja3NYLCB3aGVlbFRpY2tz
WSksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7CiB9CiAKIFdlYktleWJvYXJk
RXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KFFLZXlFdmVudCog
ZXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XZWJFdmVudEZhY3Rv
cnkuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4vV2Vi
RXZlbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIFdlYldo
ZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWIKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgcG9zaXRpb24sIGdsb2Jh
bFBvc2l0aW9uLCBGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpLCBGbG9hdFNpemUod2hlZWxUaWNr
c1gsIHdoZWVsVGlja3NZKSwgZ3JhbnVsYXJpdHksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKKyAg
ICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBvc2l0aW9uLCBnbG9iYWxQ
b3NpdGlvbiwgR3JhcGhpY3NTaXplKGRlbHRhWCwgZGVsdGFZKSwgR3JhcGhpY3NTaXplKHdoZWVs
VGlja3NYLCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7
CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2Fy
ZEV2ZW50KEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBMUEFSQU0gbHBh
cmFtKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RhdGljIGNvbnN0IGludCBn
cmFkaWVudExpZ2h0QWxwaGEgPSAyNQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0
cjxGaW5kSW5kaWNhdG9yPiBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBz
ZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKQorUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9y
PiBGaW5kSW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgR3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEdyYXBoaWNzUmVjdD4mIHRleHRSZWN0
c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYgY29udGVudEltYWdlSGFuZGxlKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNv
bnRlbnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRsZSk7
CiAgICAgaWYgKCFjb250ZW50SW1hZ2UpCkBAIC04Nyw3ICs4Nyw3IEBAIFBhc3NSZWZQdHI8Rmlu
ZEluZGljYXRvcj4gRmluZEluZGljYXRvcjoKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbmRJ
bmRpY2F0b3Ioc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb250ZW50SW1hZ2UucmVsZWFzZSgpKSk7CiB9CiAKLUZp
bmRJbmRpY2F0b3I6OkZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxl
Y3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlKQorRmluZEluZGljYXRvcjo6RmluZEluZGljYXRv
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250
ZW50SW1hZ2UpCiAgICAgOiBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKHNlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKQogICAgICwgbV90ZXh0UmVjdHNJblNlbGVjdGlv
blJlY3RDb29yZGluYXRlcyh0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcykKICAg
ICAsIG1fY29udGVudEltYWdlKGNvbnRlbnRJbWFnZSkKQEAgLTk4LDE4ICs5OCwxOCBAQCBGaW5k
SW5kaWNhdG9yOjp+RmluZEluZGljYXRvcigpCiB7CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgaW5m
bGF0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBpbmZsYXRlWCwgZmxvYXQgaW5m
bGF0ZVkpCitzdGF0aWMgR3JhcGhpY3NSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCwgZmxvYXQgaW5mbGF0ZVgsIGZsb2F0IGluZmxhdGVZKQogewotICAgIEZsb2F0UmVj
dCBpbmZsYXRlZFJlY3QgPSByZWN0OworICAgIEdyYXBoaWNzUmVjdCBpbmZsYXRlZFJlY3QgPSBy
ZWN0OwogICAgIGluZmxhdGVkUmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7CiAgICAgaW5mbGF0ZWRS
ZWN0LmluZmxhdGVZKGluZmxhdGVZKTsKICAgICAKICAgICByZXR1cm4gaW5mbGF0ZWRSZWN0Owog
fQogCi1GbG9hdFJlY3QgRmluZEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKK0dyYXBoaWNz
UmVjdCBGaW5kSW5kaWNhdG9yOjpmcmFtZVJlY3QoKSBjb25zdAogewotICAgIHJldHVybiBGbG9h
dFJlY3QobV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy54KCkgLSBsZWZ0Qm9yZGVy
VGhpY2tuZXNzLCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLnkoKSAtIHRvcEJv
cmRlclRoaWNrbmVzcywKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1fc2VsZWN0aW9uUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMueCgpIC0gbGVmdEJvcmRlclRoaWNrbmVzcywgbV9zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcy55KCkgLSB0b3BCb3JkZXJUaGlja25lc3MsCiAgICAgICAg
ICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLndpZHRoKCkg
KyByaWdodEJvcmRlclRoaWNrbmVzcyArIGxlZnRCb3JkZXJUaGlja25lc3MsCiAgICAgICAgICAg
ICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLmhlaWdodCgpICsg
dG9wQm9yZGVyVGhpY2tuZXNzICsgYm90dG9tQm9yZGVyVGhpY2tuZXNzKTsKIH0KQEAgLTEzNCwx
MCArMTM0LDEwIEBAIHN0YXRpYyBDb2xvciBncmFkaWVudERhcmtDb2xvcigpCiAgICAgcmV0dXJu
IENvbG9yKGdyYWRpZW50RGFya1JlZCwgZ3JhZGllbnREYXJrR3JlZW4sIGdyYWRpZW50RGFya0Js
dWUsIGdyYWRpZW50RGFya0FscGhhKTsKIH0KIAotc3RhdGljIFBhdGggcGF0aFdpdGhSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJlY3QmIHBhdGhSZWN0LCBmbG9hdCByYWRpdXMpCitzdGF0aWMgUGF0
aCBwYXRoV2l0aFJvdW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcGF0aFJlY3QsIGZsb2F0
IHJhZGl1cykKIHsKICAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChwYXRo
UmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVj
dChwYXRoUmVjdCwgR3JhcGhpY3NTaXplKHJhZGl1cywgcmFkaXVzKSk7CiAKICAgICByZXR1cm4g
cGF0aDsKIH0KQEAgLTE0NSwxNSArMTQ1LDE1IEBAIHN0YXRpYyBQYXRoIHBhdGhXaXRoUm91bmRl
ZFJlY3QoY29uc3QgRmwKIHZvaWQgRmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBtX3RleHRSZWN0c0lu
U2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzW2ldOworICAgICAgICBHcmFwaGljc1JlY3QgdGV4dFJl
Y3QgPSBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzW2ldOwogICAgICAgICB0
ZXh0UmVjdC5tb3ZlKGxlZnRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyk7CiAK
LSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwg
aG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciwgdmVydGljYWxPdXRzZXRUb0Nl
bnRlck9mTGlnaHRCb3JkZXIpOwotICAgICAgICBGbG9hdFJlY3QgaW5uZXJQYXRoUmVjdCA9IGlu
ZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyLCB2
ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlcik7CisgICAgICAgIEdyYXBoaWNzUmVjdCBv
dXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0Nl
bnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsK
KyAgICAgICAgR3JhcGhpY3NSZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVj
dCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5z
aWRlTGlnaHRCb3JkZXIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zm
c2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsK
KyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRv
d09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigp
LCBDb2xvclNwYWNlU1JHQik7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENv
bG9yKGxpZ2h0Qm9yZGVyQ29sb3IoKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgocGF0aFdpdGhSb3VuZGVkUmVjdChvdXRlclBhdGhS
ZWN0LCBjb3JuZXJSYWRpdXMpKTsKICAgICAgICAgfQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQg
RmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQKICAgICAgICAgewogICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChwYXRoV2l0aFJvdW5kZWRSZWN0KGlu
bmVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwotICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50
PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBhdGhSZWN0Lngo
KSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5l
clBhdGhSZWN0Lm1heFkoKSkpOworICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhcGhpY3NQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5u
ZXJQYXRoUmVjdC55KCkpLCBHcmFwaGljc1BvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBh
dGhSZWN0Lm1heFkoKSkpOwogICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLCBn
cmFkaWVudExpZ2h0Q29sb3IoKSk7CiAgICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9w
KDEsIGdyYWRpZW50RGFya0NvbG9yKCkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dEZpbGxHcmFkaWVudChncmFkaWVudCk7CkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBGaW5kSW5k
aWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dAogCiAgICAgICAgIHsKICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUocm91bmRmKGxlZnRC
b3JkZXJUaGlja25lc3MpLCByb3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkpOworICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShHcmFwaGljc1NpemUocm91bmRmKGxlZnRCb3Jk
ZXJUaGlja25lc3MpLCByb3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkpOwogICAgICAgICAgICAg
bV9jb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgSW50UG9pbnQoMCwgMCksIG1f
Y29udGVudEltYWdlLT5ib3VuZHMoKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogI2RlZmluZSBGaW5kSW5kaWNhdG9yX2gKIAogI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDAs
MjMgKzQwLDIzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBGaW5kSW5kaWNhdG9yIDog
cHVibGljIFJlZkNvdW50ZWQ8RmluZEluZGljYXRvcj4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnN0IFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1Jl
Y3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNv
bnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUpOwogICAgIH5G
aW5kSW5kaWNhdG9yKCk7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzOyB9Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0
OworICAgIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7
IH0KKyAgICBXZWJDb3JlOjpHcmFwaGljc1JlY3QgZnJhbWVSZWN0KCkgY29uc3Q7CiAKLSAgICBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsgfQorICAgIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+JiB0ZXh0UmVjdHMoKSBjb25zdCB7IHJldHVybiBt
X3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzOyB9CiAKICAgICBTaGFyZWFibGVC
aXRtYXAqIGNvbnRlbnRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEltYWdlLmdldCgp
OyB9CiAKICAgICB2b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKIAogcHJpdmF0ZToKLSAgICBGaW5kSW5kaWNhdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdCwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0cywgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGNvbnRlbnRJbWFnZSk7CisgICAgRmluZEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+
JiB0ZXh0UmVjdHMsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UpOwog
Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0
ZXM7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gbV90ZXh0UmVjdHNJblNlbGVjdGlv
blJlY3RDb29yZGluYXRlczsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1JlY3QgbV9zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlczsKKyAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0
PiBtX3RleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzOwogICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IG1fY29udGVudEltYWdlOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw4ICsxMzEsOCBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHZpcnR1YWwgdm9pZCBnZXRFZGl0b3JDb21t
YW5kc0ZvcktleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V1RG
OjpTdHJpbmc+JikgPSAwOwogI2VuZGlmCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qg
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qg
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25z
dCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQ
b2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKICAgICAKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBDR0NvbnRleHRSZWYgY29udGFpbmluZ1dpbmRvd0dyYXBoaWNzQ29udGV4dCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3RyaW5nJiwg
ZG91YmxlIHNjYWxlRmFjdG9yLCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkaXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxh
Y2VtZW50U3RyaW5ncykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21p
c3NpbmdDb3JyZWN0aW9uUGFuZWwpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBh
bmVsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
V2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykg
PSAwOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2lu
Z0FyZWFQcm94eS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsx
NjcsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VGlsZUNyZWF0CiAgICAgbV90
aWxlQ3JlYXRpb25EZWxheSA9IGRlbGF5OwogfQogCi12b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGNvbnN0IEZsb2F0U2l6ZSYga2VlcE11
bHRpcGxpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQordm9pZCBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBHcmFw
aGljc1NpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBHcmFwaGljc1NpemUmIGNvdmVyTXVsdGlw
bGllcikKIHsKICAgICBtX2tlZXBBcmVhTXVsdGlwbGllciA9IGtlZXBNdWx0aXBsaWVyOwogICAg
IG1fY292ZXJBcmVhTXVsdGlwbGllciA9IGNvdmVyTXVsdGlwbGllcjsKQEAgLTI3MCw3ICsyNzAs
NyBAQCBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFpbnQoY29uc3QgCiAKICAgICAvLyBB
c3N1bWVzIHRoZSBiYWNraW5nIHN0b3JlIGlzIHBhaW50ZWQgd2l0aCB0aGUgc2NhbGUgdHJhbnNm
b3JtIGFwcGxpZWQuCiAgICAgLy8gU2luY2UgdGlsZSBjb250ZW50IGlzIGFscmVhZHkgc2NhbGVk
LCBmaXJzdCByZXZlcnQgdGhlIHNjYWxpbmcgZnJvbSB0aGUgcGFpbnRlci4KLSAgICBnYy5zY2Fs
ZShGbG9hdFNpemUoMSAvIG1fY29udGVudHNTY2FsZSwgMSAvIG1fY29udGVudHNTY2FsZSkpOwor
ICAgIGdjLnNjYWxlKEdyYXBoaWNzU2l6ZSgxIC8gbV9jb250ZW50c1NjYWxlLCAxIC8gbV9jb250
ZW50c1NjYWxlKSk7CiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21Db250ZW50cyhy
ZWN0KTsKIApAQCAtNDM3LDEzICs0MzcsMTMgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnJlc2l6ZUVkZ2VUaQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZHJvcFRpbGVzT3V0
c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCiB7Ci0gICAgRmxvYXRSZWN0IGtlZXBS
ZWN0RiA9IGtlZXBSZWN0OworICAgIEdyYXBoaWNzUmVjdCBrZWVwUmVjdEYgPSBrZWVwUmVjdDsK
IAogICAgIFZlY3RvcjxUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZT4gdG9SZW1vdmU7
CiAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAgICBmb3IgKFRp
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0
LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAgICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQt
PnNlY29uZC0+cmVjdCgpOworICAgICAgICBHcmFwaGljc1JlY3QgdGlsZVJlY3QgPSBpdC0+c2Vj
b25kLT5yZWN0KCk7CiAgICAgICAgIGlmICghdGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdEYp
KQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvb3JkaW5hdGUpOwogICAgIH0KQEAgLTQ3
Nyw3ICs0NzcsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlVGlsZShjCiAK
IEludFJlY3QgVGlsZWREcmF3aW5nQXJlYVByb3h5OjptYXBUb0NvbnRlbnRzKGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0
KHJlY3QueCgpIC8gbV9jb250ZW50c1NjYWxlLAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KEdyYXBoaWNzUmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgLyBtX2NvbnRlbnRzU2NhbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAvIG1fY29udGVu
dHNTY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWln
aHQoKSAvIG1fY29udGVudHNTY2FsZSkpOwpAQCAtNDg1LDcgKzQ4NSw3IEBAIEludFJlY3QgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjptYXBUb0NvbnQKIAogSW50UmVjdCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6Om1hcEZyb21Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChyZWN0LngoKSAqIG1fY29udGVudHNT
Y2FsZSwKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChHcmFwaGljc1JlY3QocmVjdC54KCkg
KiBtX2NvbnRlbnRzU2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QueSgpICogbV9jb250ZW50c1NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWN0LndpZHRoKCkgKiBtX2NvbnRlbnRzU2NhbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgKiBtX2NvbnRlbnRzU2NhbGUp
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Rp
bGVkRHJhd2luZ0FyZWFQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMiArODUsMTIgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGlsZUNyZWF0aW9uRGVsYXkoZG91YmxlIGRlbGF5KTsKIAog
ICAgIC8vIFRpbGVkIGFyZSBkcm9wcGVkIG91dHNpZGUgdGhlIGtlZXAgYXJlYSwgYW5kIGNyZWF0
ZWQgZm9yIGNvdmVyIGFyZWEuIFRoZSB2YWx1ZXMgYSByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQg
c2l6ZS4KLSAgICB2b2lkIGdldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhXZWJDb3JlOjpG
bG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvdmVyTXVsdGlw
bGllcikKKyAgICB2b2lkIGdldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhXZWJDb3JlOjpH
cmFwaGljc1NpemUmIGtlZXBNdWx0aXBsaWVyLCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGNvdmVy
TXVsdGlwbGllcikKICAgICB7CiAgICAgICAgIGtlZXBNdWx0aXBsaWVyID0gbV9rZWVwQXJlYU11
bHRpcGxpZXI7CiAgICAgICAgIGNvdmVyTXVsdGlwbGllciA9IG1fY292ZXJBcmVhTXVsdGlwbGll
cjsKICAgICB9Ci0gICAgdm9pZCBzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBjb3Zlck11bHRpcGxpZXIpOworICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRp
cGxpZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYgY292ZXJNdWx0aXBsaWVyKTsKIAogICAgIHZvaWQgdGls
ZUJ1ZmZlclVwZGF0ZUNvbXBsZXRlKCk7CiAKQEAgLTE2Myw4ICsxNjMsOCBAQCBwcml2YXRlOgog
CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3RpbGVTaXplOwogICAgIGRvdWJsZSBtX3RpbGVDcmVh
dGlvbkRlbGF5OwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2tlZXBBcmVhTXVsdGlwbGllcjsK
LSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb3ZlckFyZWFNdWx0aXBsaWVyOworICAgIFdlYkNv
cmU6OkdyYXBoaWNzU2l6ZSBtX2tlZXBBcmVhTXVsdGlwbGllcjsKKyAgICBXZWJDb3JlOjpHcmFw
aGljc1NpemUgbV9jb3ZlckFyZWFNdWx0aXBsaWVyOwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Zpc2libGVBcmVhOwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3Qu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzRGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVu
dC5oPgpAQCAtMjExMCwxMiArMjExMCwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0SXNSZXNp
emFibGUoYm9vbCYgCiAgICAgaXNSZXNpemFibGUgPSBtX3VpQ2xpZW50LmlzUmVzaXphYmxlKHRo
aXMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0V2luZG93RnJhbWUoY29uc3QgRmxvYXRS
ZWN0JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRXaW5kb3dGcmFtZShj
b25zdCBHcmFwaGljc1JlY3QmIG5ld1dpbmRvd0ZyYW1lKQogewogICAgIG1fdWlDbGllbnQuc2V0
V2luZG93RnJhbWUodGhpcywgbV9wYWdlQ2xpZW50LT5jb252ZXJ0VG9EZXZpY2VTcGFjZShuZXdX
aW5kb3dGcmFtZSkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2luZG93RnJhbWUoRmxv
YXRSZWN0JiBuZXdXaW5kb3dGcmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFt
ZShHcmFwaGljc1JlY3QmIG5ld1dpbmRvd0ZyYW1lKQogewogICAgIG5ld1dpbmRvd0ZyYW1lID0g
bV9wYWdlQ2xpZW50LT5jb252ZXJ0VG9Vc2VyU3BhY2UobV91aUNsaWVudC53aW5kb3dGcmFtZSh0
aGlzKSk7CiB9CkBAIC0yMzM1LDcgKzIzMzUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ291
bnRTdHJpbmdNYXRjaGVzCiAgICAgbV9maW5kQ2xpZW50LmRpZENvdW50U3RyaW5nTWF0Y2hlcyh0
aGlzLCBzdHJpbmcsIG1hdGNoQ291bnQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rmlu
ZEluZGljYXRvcihjb25zdCBGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5h
dGVzLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5k
bGUsIGJvb2wgZmFkZU91dCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRGaW5kSW5kaWNhdG9yKGNv
bnN0IEdyYXBoaWNzUmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0
IFZlY3RvcjxHcmFwaGljc1JlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRl
cywgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9v
bCBmYWRlT3V0KQogewogICAgIFJlZlB0cjxGaW5kSW5kaWNhdG9yPiBmaW5kSW5kaWNhdG9yID0g
RmluZEluZGljYXRvcjo6Y3JlYXRlKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCB0
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29udGVudEltYWdlSGFuZGxlKTsK
ICAgICBtX3BhZ2VDbGllbnQtPnNldEZpbmRJbmRpY2F0b3IoZmluZEluZGljYXRvci5yZWxlYXNl
KCksIGZhZGVPdXQpOwpAQCAtMjY5MCw4ICsyNjkwLDggQEAgc3RhdGljIFdlYldoZWVsRXZlbnQg
Y29hbGVzY2UoY29uc3QgV2ViVwogewogICAgIEFTU0VSVChjYW5Db2FsZXNjZShhLCBiKSk7CiAK
LSAgICBGbG9hdFNpemUgbWVyZ2VkRGVsdGEgPSBhLmRlbHRhKCkgKyBiLmRlbHRhKCk7Ci0gICAg
RmxvYXRTaXplIG1lcmdlZFdoZWVsVGlja3MgPSBhLndoZWVsVGlja3MoKSArIGIud2hlZWxUaWNr
cygpOworICAgIEdyYXBoaWNzU2l6ZSBtZXJnZWREZWx0YSA9IGEuZGVsdGEoKSArIGIuZGVsdGEo
KTsKKyAgICBHcmFwaGljc1NpemUgbWVyZ2VkV2hlZWxUaWNrcyA9IGEud2hlZWxUaWNrcygpICsg
Yi53aGVlbFRpY2tzKCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgcmV0dXJuIFdlYldoZWVs
RXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBiLnBvc2l0aW9uKCksIGIuZ2xvYmFsUG9zaXRpb24oKSwg
bWVyZ2VkRGVsdGEsIG1lcmdlZFdoZWVsVGlja3MsIGIuZ3JhbnVsYXJpdHkoKSwgYi5waGFzZSgp
LCBiLm1vbWVudHVtUGhhc2UoKSwgYi5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCksIGIubW9k
aWZpZXJzKCksIGIudGltZXN0YW1wKCkpOwpAQCAtMzE1MiwxMiArMzE1MiwxMiBAQCBmbG9hdCBX
ZWJQYWdlUHJveHk6OmZvb3RlckhlaWdodChXZWJGcmFtCiAgICAgcmV0dXJuIG1fdWlDbGllbnQu
Zm9vdGVySGVpZ2h0KHRoaXMsIGZyYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdI
ZWFkZXIoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QpCiB7CiAgICAgbV91aUNsaWVudC5kcmF3SGVhZGVyKHRoaXMsIGZyYW1l
LCByZWN0KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdGb290ZXIoV2ViRnJhbWVQcm94
eSogZnJhbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3
Rm9vdGVyKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7
CiAgICAgbV91aUNsaWVudC5kcmF3Rm9vdGVyKHRoaXMsIGZyYW1lLCByZWN0KTsKIH0KQEAgLTMz
MzYsNyArMzMzNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdWJzdGl0dXRpb25zUGFuZWxJc1MK
IH0KIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViUGFn
ZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBGbG9h
dFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBXZWJQYWdlUHJveHk6
OnNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAgICAgbV9wYWdlQ2xpZW50LT5z
aG93Q29ycmVjdGlvblBhbmVsKChDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUpcGFuZWxU
eXBlLCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
bWVudFN0cmluZywgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIEN1cnNvcjsKICAgICBjbGFzcyBEcmFnRGF0YTsKLSAg
ICBjbGFzcyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0OwogICAgIGNsYXNzIElu
dFNpemU7CiAgICAgY2xhc3MgUHJvdGVjdGlvblNwYWNlOwogICAgIHN0cnVjdCBUZXh0Q2hlY2tp
bmdSZXN1bHQ7CkBAIC00MTYsNyArNDE2LDcgQEAgcHVibGljOgogICAgIHZvaWQgaGlkZUZpbmRV
SSgpOwogICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRp
b25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGRpZENvdW50U3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKLSAgICB2b2lkIHNldEZp
bmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0
c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpOworICAgIHZvaWQgc2V0RmluZElu
ZGljYXRvcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCk7CiAgICAgdm9pZCBkaWRGaW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwogICAgIHZvaWQgZGlk
RmFpbFRvRmluZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICNpZiBQTEFURk9STShXSU4pCkBAIC00
MzUsMTIgKzQzNSwxMiBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBoZWFkZXJIZWlnaHQoV2ViRnJh
bWVQcm94eSopOwogICAgIGZsb2F0IGZvb3RlckhlaWdodChXZWJGcmFtZVByb3h5Kik7Ci0gICAg
dm9pZCBkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKLSAgICB2b2lkIGRyYXdGb290ZXIoV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpOworICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkq
LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAvLyBEaWN0aW9uYXJ5LgotICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0
aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpHcmFwaGljc1BvaW50Jik7CiAjZW5k
aWYKIAogICAgIHZvaWQgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihXZWJDb3JlOjpQb2xpY3lBY3Rp
b24sIFdlYkZyYW1lUHJveHkqLCB1aW50NjRfdCBsaXN0ZW5lcklEKTsKQEAgLTYzMyw4ICs2MzMs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0U3RhdHVzQmFySXNWaXNpYmxlKGJvb2wmIHN0YXR1
c0JhcklzVmlzaWJsZSk7CiAgICAgdm9pZCBzZXRJc1Jlc2l6YWJsZShib29sIGlzUmVzaXphYmxl
KTsKICAgICB2b2lkIGdldElzUmVzaXphYmxlKGJvb2wmIGlzUmVzaXphYmxlKTsKLSAgICB2b2lk
IHNldFdpbmRvd0ZyYW1lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgZ2V0
V2luZG93RnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBzZXRXaW5kb3dGcmFt
ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lkIGdldFdpbmRvd0ZyYW1l
KFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZvaWQgc2NyZWVuVG9XaW5kb3coY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHNjcmVlblBvaW50LCBXZWJDb3JlOjpJbnRQb2ludCYgd2luZG93
UG9pbnQpOwogICAgIHZvaWQgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dmlld1JlY3QsIFdlYkNvcmU6OkludFJlY3QmIHJlc3VsdCk7CiAgICAgdm9pZCBydW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1aW50NjRfdCBmcmFtZUlE
LCBib29sJiBzaG91bGRDbG9zZSk7CkBAIC03NzAsNyArNzcwLDcgQEAgcHJpdmF0ZToKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgdm9pZCBzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoYm9vbCYp
OwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2b2lkIHNob3dD
b3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChpbnQzMl90IHBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgdm9pZCBkaXNtaXNzQ29ycmVjdGlv
blBhbmVsKGludDMyX3QgcmVhc29uKTsKICAgICB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxT
b29uKGludDMyX3QgcmVhc29uLCBTdHJpbmcmIHJlc3VsdCk7CiAgICAgdm9pZCByZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2VQcm94eSB7CiAgICAgR2V0U3RhdHVzQmFySXNWaXNpYmxlKCkgLT4gKGJvb2wgc3Rh
dHVzQmFySXNWaXNpYmxlKQogICAgIFNldElzUmVzaXphYmxlKGJvb2wgaXNSZXNpemFibGUpCiAg
ICAgR2V0SXNSZXNpemFibGUoKSAtPiAoYm9vbCBpc1Jlc2l6YWJsZSkKLSAgICBTZXRXaW5kb3dG
cmFtZShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpCi0gICAgR2V0V2luZG93RnJhbWUo
KSAtPiAoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQorICAgIFNldFdpbmRvd0ZyYW1l
KFdlYkNvcmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dGcmFtZSkKKyAgICBHZXRXaW5kb3dGcmFtZSgp
IC0+IChXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93RnJhbWUpCiAgICAgU2NyZWVuVG9XaW5k
b3coV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuUG9pbnQpIC0+IChXZWJDb3JlOjpJbnRQb2ludCB3
aW5kb3dQb2ludCkKICAgICBXaW5kb3dUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+
IChXZWJDb3JlOjpJbnRSZWN0IHNjcmVlbkZyYW1lKQogICAgIFJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbChXVEY6OlN0cmluZyBtZXNzYWdlLCB1aW50NjRfdCBmcmFtZUlEKSAtPiAoYm9vbCBz
aG91bGRDbG9zZSkKQEAgLTE2NCw3ICsxNjQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkg
ewogCiAgICAgIyBGaW5kIG1lc3NhZ2VzCiAgICAgRGlkQ291bnRTdHJpbmdNYXRjaGVzKFdURjo6
U3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKLSAgICBTZXRGaW5kSW5kaWNhdG9y
KFdlYkNvcmU6OkZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0LCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRS
ZWN0PiB0ZXh0UmVjdHMsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgY29udGVudElt
YWdlSGFuZGxlLCBib29sIGZhZGVPdXQpCisgICAgU2V0RmluZEluZGljYXRvcihXZWJDb3JlOjpH
cmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdCwgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4g
dGV4dFJlY3RzLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFnZUhh
bmRsZSwgYm9vbCBmYWRlT3V0KQogICAgIERpZEZpbmRTdHJpbmcoV1RGOjpTdHJpbmcgc3RyaW5n
LCB1aW50MzJfdCBtYXRjaENvdW50KQogICAgIERpZEZhaWxUb0ZpbmRTdHJpbmcoV1RGOjpTdHJp
bmcgc3RyaW5nKQogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTI0Niw3ICsyNDYsNyBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlUHJveHkgewogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCiAgICAgIyBBdXRvY29ycmVjdGlvbiBtZXNzYWdl
cwotICAgIFNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIFdlYkNvcmU6OkZs
b2F0UmVjdCBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlZFN0cmlu
ZywgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykKKyAgICBTaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxU
eXBlLCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBT
dHJpbmcgcmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0
cmluZz4gYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiAgICAgRGlzbWlzc0NvcnJlY3Rp
b25QYW5lbChpbnQzMl90IHJlYXNvbikKICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihp
bnQzMl90IHJlYXNvbikgLT4gKFN0cmluZyByZXN1bHQpCiAgICAgUmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBT
dHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlVJQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJVSUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNp
bmNsdWRlICJXZWJOdW1iZXIuaCIKICNpbmNsdWRlICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUmVjdC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIFdlYlVJQ2xpZW50
OjpzZXRJc1Jlc2l6YWJsZShXZWJQYWdlCiAgICAgbV9jbGllbnQuc2V0SXNSZXNpemFibGUodG9B
UEkocGFnZSksIHJlc2l6YWJsZSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQgV2Vi
VUlDbGllbnQ6OnNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBmcmFtZSkKK3ZvaWQgV2ViVUlDbGllbnQ6OnNldFdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94
eSogcGFnZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBmcmFtZSkKIHsKICAgICBpZiAoIW1fY2xpZW50
LnNldFdpbmRvd0ZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0yNTIsMTIgKzI1MiwxMiBAQCB2
b2lkIFdlYlVJQ2xpZW50OjpzZXRXaW5kb3dGcmFtZShXZWJQYWdlCiAgICAgbV9jbGllbnQuc2V0
V2luZG93RnJhbWUodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuY2xpZW50SW5m
byk7CiB9CiAKLUZsb2F0UmVjdCBXZWJVSUNsaWVudDo6d2luZG93RnJhbWUoV2ViUGFnZVByb3h5
KiBwYWdlKQorR3JhcGhpY3NSZWN0IFdlYlVJQ2xpZW50Ojp3aW5kb3dGcmFtZShXZWJQYWdlUHJv
eHkqIHBhZ2UpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5nZXRXaW5kb3dGcmFtZSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKLSAg
ICByZXR1cm4gdG9GbG9hdFJlY3QobV9jbGllbnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSks
IG1fY2xpZW50LmNsaWVudEluZm8pKTsKKyAgICByZXR1cm4gdG9HcmFwaGljc1JlY3QobV9jbGll
bnQuZ2V0V2luZG93RnJhbWUodG9BUEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pKTsKIH0K
IAogYm9vbCBXZWJVSUNsaWVudDo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29u
c3QKQEAgLTMzMiw3ICszMzIsNyBAQCBmbG9hdCBXZWJVSUNsaWVudDo6Zm9vdGVySGVpZ2h0KFdl
YlBhZ2VQCiAgICAgcmV0dXJuIG1fY2xpZW50LmZvb3RlckhlaWdodCh0b0FQSShwYWdlKSwgdG9B
UEkoZnJhbWUpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBXZWJVSUNsaWVudDo6
ZHJhd0hlYWRlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFdlYlVJQ2xpZW50OjpkcmF3SGVhZGVy
KFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoIW1fY2xpZW50LmRyYXdIZWFkZXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIFdlYlVJQ2xpZW50OjpkcmF3
SGVhZGVyKFdlYlBhZ2VQcm94CiAgICAgbV9jbGllbnQuZHJhd0hlYWRlcih0b0FQSShwYWdlKSwg
dG9BUEkoZnJhbWUpLCB0b0FQSShyZWN0KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZv
aWQgV2ViVUlDbGllbnQ6OmRyYXdGb290ZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVBy
b3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJVSUNs
aWVudDo6ZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1l
LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX2NsaWVu
dC5kcmF3Rm9vdGVyKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVUlDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViVUlDbGllbnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVUlDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFz
cyBGbG9hdFJlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NSZWN0OwogICAgIGNsYXNzIEludFNpemU7
CiAgICAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQpAQCAtODQsOCArODQsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqKTsKICAgICB2b2lkIHNldElzUmVz
aXphYmxlKFdlYlBhZ2VQcm94eSosIGJvb2wpOwogCi0gICAgdm9pZCBzZXRXaW5kb3dGcmFtZShX
ZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICBXZWJDb3JlOjpG
bG9hdFJlY3Qgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5Kik7CisgICAgdm9pZCBzZXRXaW5kb3dG
cmFtZShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICBX
ZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93RnJhbWUoV2ViUGFnZVByb3h5Kik7CiAKICAgICBi
b29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpIGNvbnN0OwogICAgIGJvb2wgcnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYsIFdl
YkZyYW1lUHJveHkqKTsKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJsaWM6CiAgICAgLy8gUHJpbnRp
bmcuCiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0KFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkq
KTsKICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSop
OwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYlBhZ2VQcm94
eSosIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lk
IGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkqLCBXZWJG
cmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAgICAgdm9pZCBwcmlu
dEZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqKTsKIAogICAgIGJvb2wgY2FuUnVu
TW9kYWwoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1Bh
Z2VDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTEsMTMgKzE1MSwxMyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1Jl
ZG8oV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJ
bXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQorR3Jh
cGhpY3NSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBHcmFw
aGljc1JlY3QmIHZpZXdSZWN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJu
IHZpZXdSZWN0OwogfQogCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJT
cGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VDbGllbnRJ
bXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiB2aWV3UmVjdCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB2aWV3UmVjdDsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xp
ZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmlydHVhbCBib29sIGNh
blVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFj
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBo
aWNzUmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2Uo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQ
b2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9Q
YWdlQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQs
MTMgKzE3NCwxMyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252
ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHZpZXdSZWN0KQorR3JhcGhpY3NSZWN0
IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3Qm
IHZpZXdSZWN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIHZpZXdSZWN0
OwogfQogCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25z
dCBGbG9hdFJlY3QmIHZpZXdSZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiB2aWV3UmVjdCkKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB2aWV3UmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmlydHVhbCBib29sIGNhblVuZG9SZWRv
KFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVVbmRv
UmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBj
b252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3Jl
ZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAg
dmlydHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gOTEwMjgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRleHRJbnB1dFN0YXRlKGJvb2wgdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSk7CiAgICAgdmlydHVh
bCB2b2lkIHJlc2V0VGV4dElucHV0U3RhdGUoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBj
b252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3Jl
ZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAg
CkBAIC0xMTQsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9y
bURpY3Rpb25hcnlMb29rdXAoY29uc3QgU3RyaW5nJiwgZG91YmxlIHNjYWxlRmFjdG9yLCBjb25z
dCBEaWN0aW9uYXJ5UG9wdXBJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NEaWN0aW9u
YXJ5TG9va3VwUGFuZWwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVs
KFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdmlydHVhbCB2
b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1l
bnRTdHJpbmdzKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIFN0
cmluZyBkaXNtaXNzQ29ycmVjdGlvblBhbmVsU29vbihXZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNz
aW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rp
b25SZXNwb25zZShXZWJDb3JlOjpFZGl0b3JDbGllbnQ6OkF1dG9jb3JyZWN0aW9uUmVzcG9uc2VU
eXBlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBACiAjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCiAjaW1wb3J0ICJX
ZWJQb3B1cE1lbnVQcm94eU1hYy5oIgogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzUmVjdC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CkBA
IC0yNjksMTIgKzI2OSwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXNldFRleHRJbnB1dFN0
YXRlCiAgICAgW21fd2tWaWV3IF9yZXNldFRleHRJbnB1dFN0YXRlXTsKIH0KIAotRmxvYXRSZWN0
IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCitHcmFwaGljc1JlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0
VG9EZXZpY2VTcGFjZTpyZWN0XTsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VD
bGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQog
ewogICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKIH0KQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNtaXNzRGljdGlvbmFyeUxv
CiAjZW5kaWYKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0NvcnJlY3Rpb25QYW5lbChD
b3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRl
cm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3Jy
ZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAjaWYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGlmICghaXNWaWV3VmlzaWJsZSgpIHx8
ICFpc1ZpZXdJbldpbmRvdygpKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0Rh
dGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KQEAgLTI0OTAsNyArMjQ5
MCw3IEBAIC0gKHZvaWQpcGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdEN1cnJlbnQKICAgICB0aGVQ
b2ludCA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6dGhlUG9pbnRdOwogICAg
IHRoZVBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnRoZVBvaW50IGZyb21WaWV3Om5pbF07CiAK
LSAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihGbG9h
dFBvaW50KHRoZVBvaW50LngsIHRoZVBvaW50LnkpKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihHcmFwaGljc1BvaW50KHRoZVBvaW50LngsIHRo
ZVBvaW50LnkpKTsKIH0KIAogLSAoTlNJbnRlZ2VyKXNwZWxsQ2hlY2tlckRvY3VtZW50VGFnCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5lbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0
aW9uUGFuZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBDb3JyZWN0
aW9uUGFuZWwgewogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3JyZWN0
aW9uUGFuZWwoKTsKLSAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6Q29ycmVjdGlvblBh
bmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lkIHNob3coV0tWaWV3KiwgV2ViQ29yZTo6Q29y
cmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qm
IGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICBTdHJpbmcgZGlzbWlzcyhXZWJD
b3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICBzdGF0aWMgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdLVmlldyosIE5TQ29ycmVjdGlvblJlc3Bv
bnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0
aW9uUGFuZWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9D
b3JyZWN0aW9uUGFuZWwubW0JKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVsKCkKICAgICBkaXNtaXNzSW50
ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbElnbm9yZWQsIGZhbHNlKTsK
IH0KIAotdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV0tWaWV3KiB2aWV3LCBDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmll
dywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAgICAgZGlzbWlzc0ludGVybmFs
KFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25vcmVkLCBmYWxzZSk7CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5o
PiAvLyBGb3IgU2V0U3lzdGVtVUlNb2RlKCkKICNpbXBvcnQgPElPS2l0L3B3cl9tZ3QvSU9QTUxp
Yi5oPiAvLyBGb3IgSU9QTUFzc2VydGlvbkNyZWF0ZSgpCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzUmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViTlNXaW5kb3dFeHRyYXMuaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RHJhZ0ltYWdlKGNvbnN0IFdlCiAgICAgbV9wYWdlQ2xp
ZW50LT5zZXREcmFnSW1hZ2UoY2xpZW50UG9zaXRpb24sIGRyYWdJbWFnZS5yZWxlYXNlKCksIGlz
TGlua0RyYWcpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UHJveHkuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICNp
bmNsdWRlIDxRdERlYnVnPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EcmFnRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViS2l0
Mi9XS1BhZ2VHcm91cC5oPgpAQCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6
OmV4ZWN1dGVVbmRvUmVkbyhXZWIKICAgICAgICAgbV91bmRvU3RhY2stPnJlZG8oKTsKIH0KIAot
RmxvYXRSZWN0IFF0V2ViUGFnZVByb3h5Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCitHcmFwaGljc1JlY3QgUXRXZWJQYWdlUHJveHk6OmNvbnZlcnRUb0Rldmlj
ZVNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcmVjdDsKIH0K
QEAgLTM3Niw3ICszNzYsNyBAQCBJbnRSZWN0IFF0V2ViUGFnZVByb3h5Ojp3aW5kb3dUb1NjcmVl
bihjCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUZsb2F0UmVjdCBRdFdlYlBhZ2VQcm94eTo6Y29u
dmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0dyYXBoaWNzUmVjdCBRdFdl
YlBhZ2VQcm94eTo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gcmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOCAr
MTE2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygp
OwogICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8p
OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JS
ZWRvKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFj
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0
UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1Jl
Y3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgV2ViUG9wdXBNZW51
UHJveHlXaW46OmNhbGN1bGF0ZVBvc2kKICAgICBNT05JVE9SSU5GT0VYIG1vbml0b3JJbmZvOwog
ICAgIG1vbml0b3JJbmZvLmNiU2l6ZSA9IHNpemVvZihNT05JVE9SSU5GT0VYKTsKICAgICA6Okdl
dE1vbml0b3JJbmZvKG1vbml0b3IsICZtb25pdG9ySW5mbyk7Ci0gICAgRmxvYXRSZWN0IHNjcmVl
biA9IG1vbml0b3JJbmZvLnJjV29yazsKKyAgICBHcmFwaGljc1JlY3Qgc2NyZWVuID0gbW9uaXRv
ckluZm8ucmNXb3JrOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkb24ndCBnbyBvZmYgdGhlIHNj
cmVlbiB2ZXJ0aWNhbGx5CiAgICAgaWYgKHBvcHVwUmVjdC5tYXhZKCkgPiBzY3JlZW4uaGVpZ2h0
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2
aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRt
YXBJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0VkaXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc1JlY3QuaD4KICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRDRy5oPgogI2VuZGlmCkBAIC0xMTI3LDcgKzExMjcsNyBAQCB2b2lkIFdlYlZp
ZXc6OnNldEN1c3RvbURyb3BUYXJnZXQoSURyb3BUCiAgICAgICAgIDo6UmVnaXN0ZXJEcmFnRHJv
cChtX3dpbmRvdywgdGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9EZXZp
Y2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitHcmFwaGljc1JlY3QgV2ViVmlldzo6Y29u
dmVydFRvRGV2aWNlU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIHJldHVy
biByZWN0OwogfQpAQCAtMTE0Miw3ICsxMTQyLDcgQEAgSW50UmVjdCBXZWJWaWV3Ojp3aW5kb3dU
b1NjcmVlbihjb25zdCBJbgogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFJlY3QgV2ViVmll
dzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0dyYXBoaWNzUmVj
dCBXZWJWaWV3Ojpjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQog
ewogICAgIHJldHVybiByZWN0OwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw4ICsxOTAsOCBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgYm9v
bCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNlclNw
YWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzkzOSw2ICszOTM5LDkgQEAKIC8qIEJlZ2luIFBCWFByb2pl
Y3Qgc2VjdGlvbiAqLwogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmpl
Y3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYXR0cmlidXRlcyA9IHsKKwkJCQlC
dWlsZEluZGVwZW5kZW50VGFyZ2V0c0luUGFyYWxsZWwgPSBOTzsKKwkJCX07CiAJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMURFQjkxQjEwODczM0RBNTAwMTBFOUNEIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViS2l0MiIgKi87CiAJCQljb21wYXRpYmls
aXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOwogCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNo
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBpbnQgSW5qZWN0ZWRCdW5kbGU6Om51bWJl
ck9mUGFnZXMoV2ViRnJhCiAgICAgaWYgKCFwYWdlSGVpZ2h0SW5QaXhlbHMpCiAgICAgICAgIHBh
Z2VIZWlnaHRJblBpeGVscyA9IGNvcmVGcmFtZS0+dmlldygpLT5oZWlnaHQoKTsKIAotICAgIHJl
dHVybiBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZyYW1lLCBGbG9hdFNpemUocGFn
ZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgIHJldHVybiBQcmludENv
bnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZyYW1lLCBHcmFwaGljc1NpemUocGFnZVdpZHRoSW5Q
aXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCiBpbnQgSW5qZWN0ZWRCdW5kbGU6OnBh
Z2VOdW1iZXJGb3JFbGVtZW50QnlJZChXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgaWQs
IGRvdWJsZSBwYWdlV2lkdGhJblBpeGVscywgZG91YmxlIHBhZ2VIZWlnaHRJblBpeGVscykKQEAg
LTIxMSw3ICsyMTEsNyBAQCBpbnQgSW5qZWN0ZWRCdW5kbGU6OnBhZ2VOdW1iZXJGb3JFbGVtZW50
CiAgICAgaWYgKCFwYWdlSGVpZ2h0SW5QaXhlbHMpCiAgICAgICAgIHBhZ2VIZWlnaHRJblBpeGVs
cyA9IGNvcmVGcmFtZS0+dmlldygpLT5oZWlnaHQoKTsKIAotICAgIHJldHVybiBQcmludENvbnRl
eHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBp
eGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFn
ZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4ZWxz
LCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIAogU3RyaW5nIEluamVjdGVkQnVuZGxlOjpwYWdl
U2l6ZUFuZE1hcmdpbnNJblBpeGVscyhXZWJGcmFtZSogZnJhbWUsIGludCBwYWdlSW5kZXgsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQg
bWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2VPdmVybGF5LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgV0tCdW5kbGVQYWdlT3ZlcmxheVJl
ZiBXS0J1bmRsZVBhZ2VPdmVybAogCiB2b2lkIFdLQnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rp
c3BsYXkoV0tCdW5kbGVQYWdlT3ZlcmxheVJlZiBidW5kbGVQYWdlT3ZlcmxheVJlZiwgV0tSZWN0
IHJlY3QpCiB7Ci0gICAgdG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+c2V0TmVlZHNEaXNw
bGF5KGVuY2xvc2luZ0ludFJlY3QodG9GbG9hdFJlY3QocmVjdCkpKTsKKyAgICB0b0ltcGwoYnVu
ZGxlUGFnZU92ZXJsYXlSZWYpLT5zZXROZWVkc0Rpc3BsYXkoZW5jbG9zaW5nSW50UmVjdCh0b0dy
YXBoaWNzUmVjdChyZWN0KSkpOwogfQogCiBmbG9hdCBXS0J1bmRsZVBhZ2VPdmVybGF5RnJhY3Rp
b25GYWRlZEluKFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJsYXlSZWYpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNj
YXBlUGx1Z2luTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMubW0JKHJldmlzaW9uIDkxMDI4
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRz
Y2FwZVBsdWdpbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIE5QQm9v
bCBOZXRzY2FwZVBsdWdpbjo6Y29udmVydFBvaW50KGRvdWIKICAgICBkb3VibGUgc291cmNlWElu
U2NyZWVuU3BhY2U7CiAgICAgZG91YmxlIHNvdXJjZVlJblNjcmVlblNwYWNlOwogCi0gICAgRmxv
YXRQb2ludCBzb3VyY2VJblNjcmVlblNwYWNlOworICAgIEdyYXBoaWNzUG9pbnQgc291cmNlSW5T
Y3JlZW5TcGFjZTsKICAgICBzd2l0Y2ggKHNvdXJjZVNwYWNlKSB7CiAgICAgY2FzZSBOUENvb3Jk
aW5hdGVTcGFjZVBsdWdpbjoKICAgICAgICAgc291cmNlWEluU2NyZWVuU3BhY2UgPSBzb3VyY2VY
ICsgbV93aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMueCgpICsgbV92aWV3RnJhbWVJbldp
bmRvd0Nvb3JkaW5hdGVzLngoKSArIG1fbnBXaW5kb3cueDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94
MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNl
dFhCdXR0b25FdmVudEZpZWxkcwogICAgIHNldENvbW1vbk1vdXNlRXZlbnRGaWVsZHMoeEJ1dHRv
biwgd2ViRXZlbnQsIHBsdWdpbkxvY2F0aW9uKTsKIAogICAgIHhCdXR0b24udHlwZSA9IEJ1dHRv
blByZXNzOwotICAgIEZsb2F0U2l6ZSB0aWNrcyA9IHdlYkV2ZW50LndoZWVsVGlja3MoKTsKKyAg
ICBHcmFwaGljc1NpemUgdGlja3MgPSB3ZWJFdmVudC53aGVlbFRpY2tzKCk7CiAgICAgaWYgKHRp
Y2tzLmhlaWdodCgpKSB7CiAgICAgICAgIGlmICh0aWNrcy5oZWlnaHQoKSA+IDApCiAgICAgICAg
ICAgICB4QnV0dG9uLmJ1dHRvbiA9IDQ7IC8vIHVwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMjQgKzk1
LDI0IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIGRlbGV0
ZSB0aGlzOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBG
bG9hdFJlY3QmIHdpbmRvd0ZyYW1lKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1Jl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0JiB3aW5kb3dGcmFtZSkKIHsKICAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0V2luZG93RnJhbWUod2luZG93RnJhbWUpKTsKIH0K
IAotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3Qg
V2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKIHsKLSAgICBGbG9hdFJlY3QgbmV3V2luZG93
RnJhbWU7CisgICAgR3JhcGhpY3NSZWN0IG5ld1dpbmRvd0ZyYW1lOwogCiAgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkdldFdpbmRvd0ZyYW1lKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRv
d0ZyYW1lOjpSZXBseShuZXdXaW5kb3dGcmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpKQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAog
ICAgIHJldHVybiBuZXdXaW5kb3dGcmFtZTsKIH0KIAotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVu
dDo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQog
ewotICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3BhZ2UtPnNpemUoKSk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1fcGFnZS0+c2l6ZSgpKTsK
IH0KIAogZmxvYXQgV2ViQ2hyb21lQ2xpZW50OjpzY2FsZUZhY3RvcigpCkBAIC01NTksMTMgKzU1
OSwxMyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cG9wdWxhdGVWaXNpdGVkTGluCiB7CiB9CiAK
LUZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QoTm9kZSosIGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCkKK0dyYXBo
aWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJlY3QoTm9kZSosIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBsaW5lUmVjdCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhp
Z2hsaWdodChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJlY3Qm
IGJveFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3QsCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBib3hSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9v
bCBlbnRpcmVMaW5lKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC01ODIsNyArNTgyLDcg
QEAgU3RyaW5nIFdlYkNocm9tZUNsaWVudDo6Z2VuZXJhdGVSZXBsYWNlbQogICAgIHJldHVybiBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlVUlDbGllbnQoKS5nZW5lcmF0ZUZpbGVGb3JVcGxvYWQobV9w
YWdlLCBwYXRoKTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xs
YmFyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRyb2xT
aXplLCAKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBTY3JvbGxiYXJDb250cm9sU2l6ZSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyQ29udHJv
bFN0YXRlLCBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0LCBib29sIHZlcnRpY2FsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBmbG9hdCBw
cm9wb3J0aW9uLCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2spCiB7CkBAIC01OTAsNyArNTkwLDcg
QEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsYgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVy
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCitib29sIFdlYkNocm9tZUNsaWVu
dDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhp
Y3NSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwxMCArNTIsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgY2hyb21lRGVzdHJveWVkKCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9h
dFJlY3Qgd2luZG93UmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0IHdpbmRvd1JlY3QoKTsKICAgICAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBw
YWdlUmVjdCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7
CiAgICAgCiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogICAgIApAQCAtMTQ5LDE3
ICsxNDksMTcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRM
aW5rcygpOwogICAgIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUhpZ2hs
aWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDdXN0b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5n
JiB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgbGluZVJlY3QsCisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qg
Y3VzdG9tSGlnaGxpZ2h0UmVjdChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJp
bmcmIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RG
OjpBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm94UmVj
dCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGlyZUxpbmUp
OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVG
b3JVcGxvYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBTdHJpbmcmIGdlbmVyYXRlZEZpbGVuYW1lKTsK
ICAgICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShjb25zdCBTdHJpbmcm
IHBhdGgpOwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbGJhcihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3Jl
OjpTY3JvbGxiYXJDb250cm9sU2l6ZSwgCisgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Ny
b2xsYmFyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYsIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFN0YXRlLCBXZWJD
b3JlOjpTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0LCBib29sIHZlcnRpY2FsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSwgZmxvYXQgcHJvcG9ydGlv
biwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xs
Q29ybmVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tT3ZlcmhhbmdBcmVhKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3Rh
dGUoYm9vbCBlbmFibGVkKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoV2ViQ29yZTo6U3BlbGxDaGVja2VyKiwgaW50LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBl
TWFzaywgY29uc3QgV1RGOjpTdHJpbmcmKTsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rp
b25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZp
cnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbElu
Zm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncyk7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmly
dHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJl
bW92ZUZyb21QYXJlbnQoCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBpZiAo
cG9zaXRpb24oKSA9PSBwKQogICAgICAgICByZXR1cm47CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdAogICAgIG5vdGlmeUNoYW5nZSgp
OwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYgcCkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
R3JhcGhpY3NQb2ludDNEJiBwKQogewogICAgIGlmIChhbmNob3JQb2ludCgpID09IHApCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dEFuY2hvclBvaW50KGNvCiAgICAgbm90aWZ5Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIGlmICh0aGlz
LT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA1LDcgKzMwNSw3IEBAIHZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKICAgICBub3RpZnlDaGFuZ2Uo
KTsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fbmVlZHNEaXNwbGF5
UmVjdC51bml0ZShyZWN0KTsKICAgICBub3RpZnlDaGFuZ2UoKTsKQEAgLTMyNSw3ICszMjUsNyBA
QCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXplKCkKIHsKICAgICBtX25lZWRz
RGlzcGxheSA9IGZhbHNlOwogICAgIG1fbW9kaWZpZWQgPSBmYWxzZTsKLSAgICBtX25lZWRzRGlz
cGxheVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBtX25lZWRzRGlzcGxheVJlY3QgPSBHcmFwaGlj
c1JlY3QoKTsKICAgICBpZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykKICAgICAgICAgbm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChXVEY6OmN1cnJlbnRUaW1lKCkpOwogICAgIG1faGFzUGVuZGluZ0Fu
aW1hdGlvbnMgPSBmYWxzZTsKQEAgLTM1Miw5ICszNTIsOSBAQCBXZWJHcmFwaGljc0xheWVyKiB0
b1dlYkdyYXBoaWNzTGF5ZXIoR3JhCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkdyYXBoaWNz
TGF5ZXIqPihsYXllcik7CiB9CiAKLUZsb2F0UmVjdCBXZWJHcmFwaGljc0xheWVyOjpuZWVkc0Rp
c3BsYXlSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBXZWJHcmFwaGljc0xheWVyOjpuZWVkc0Rp
c3BsYXlSZWN0KCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3QgcmVj
dCA9IEdyYXBoaWNzUmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsK
ICAgICBpZiAoIW1fbmVlZHNEaXNwbGF5KQogICAgICAgICByZWN0LmludGVyc2VjdChtX25lZWRz
RGlzcGxheVJlY3QpOwogICAgIHJldHVybiByZWN0OwpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QKICAgICBtX2xheWVySW5mby5wb3Mg
PSBwb3NpdGlvbigpOwogICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0Qo
KTsKICAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigp
KTsKLSAgICBtX2xheWVySW5mby5zaXplID0gRmxvYXRTaXplKHNpemUoKS53aWR0aCgpICogbV9j
b250ZW50U2NhbGUsIHNpemUoKS5oZWlnaHQoKSAqIG1fY29udGVudFNjYWxlKTsKKyAgICBtX2xh
eWVySW5mby5zaXplID0gR3JhcGhpY3NTaXplKHNpemUoKS53aWR0aCgpICogbV9jb250ZW50U2Nh
bGUsIHNpemUoKS5oZWlnaHQoKSAqIG1fY29udGVudFNjYWxlKTsKICAgICBtX2xheWVySW5mby50
cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKICAgICBtX2NvbnRlbnROZWVkc0Rpc3BsYXkgPSBmYWxz
ZTsKICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5jbGVhcigpOwpAQCAtMzkyLDEyICszOTIsMTIg
QEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdAogICAgICAgICBtX2xh
eWVySW5mby5jaGlsZHJlbi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKIH0K
IAotc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGRpdmlkZUludG9UaWxlcyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCitzdGF0aWMgVmVjdG9yPEdyYXBoaWNzUmVjdD4gZGl2aWRlSW50b1RpbGVzKGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsK
KyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0aWxlczsKICAgICBmb3IgKGZsb2F0IHkgPSByZWN0
LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7CiAgICAgICAgIGZv
ciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNp
b24pIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBn
VGlsZURpbWVuc2lvbik7CisgICAgICAgICAgICBHcmFwaGljc1JlY3QgdGlsZSh4LCB5LCBnVGls
ZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwogICAgICAgICAgICAgdGlsZS5pbnRlcnNlY3Qo
cmVjdCk7CiAgICAgICAgICAgICB0aWxlcy5hcHBlbmQodGlsZSk7CiAgICAgICAgIH0KQEAgLTQ1
Myw3ICs0NTMsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVycy5zaXplKCk7ICsraSkgewogICAgICAg
ICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyc1tpXTsKLSAgICAgICAgRmxvYXRSZWN0
IHVwZGF0ZVJlY3QgPSBsYXllci0+bmVlZHNEaXNwbGF5UmVjdCgpOworICAgICAgICBHcmFwaGlj
c1JlY3QgdXBkYXRlUmVjdCA9IGxheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCk7CiAKICAgICAgICAg
bGF5ZXItPmRpZFN5bmNocm9uaXplKCk7CiAKQEAgLTQ2Niw5ICs0NjYsOSBAQCB2b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvCiAgICAgICAgIGVsc2UgaWYgKCFsYXllci0+
ZHJhd3NDb250ZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBWZWN0b3I8
RmxvYXRSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJbnRvVGlsZXModXBkYXRlUmVjdCk7CisgICAg
ICAgIFZlY3RvcjxHcmFwaGljc1JlY3Q+IHRpbGVSZWN0cyA9IGRpdmlkZUludG9UaWxlcyh1cGRh
dGVSZWN0KTsKICAgICAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4IDwg
dGlsZVJlY3RzLnNpemUoKTsgKyt0aWxlSW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QgPSB0aWxlUmVjdHNbdGlsZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0
IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QgPSB0aWxlUmVjdHNbdGlsZUluZGV4XTsKICAgICAgICAg
ICAgIEludFJlY3QgZW5jbG9zaW5nVXBkYXRlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodGlsZVJl
Y3QpOwogCiAgICAgICAgICAgICBXZWJMYXllclVwZGF0ZUluZm8gY2h1bmsoZW5jbG9zaW5nVXBk
YXRlUmVjdCk7CkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZW5k
TGF5ZXJzVG9VSVBybwogICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNsYXRlKC10aWxlUmVj
dC54KCksIC10aWxlUmVjdC55KCkpOwogICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KCZwYWludGVyKTsKICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0UmVjdCgwLCAwLCBk
aXJlY3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEdyYXBoaWNzUmVjdCgwLCAwLCBkaXJl
Y3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7CiAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBXZWJHcmFwaGljc0xheWVyX2gKICNkZWZp
bmUgV2ViR3JhcGhpY3NMYXllcl9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC01Miw5ICs1Miw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5
ZXIqKTsKICAgICBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXll
ciopOwogICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQ
b2ludDNEJik7Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQg
c2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgIHZvaWQgc2V0QW5jaG9yUG9p
bnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJik7CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBo
aWNzU2l6ZSYpOwogICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CiAgICAgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwogICAgIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CkBAIC03MSwxNCArNzEs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAg
ICB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHNl
dE5lZWRzRGlzcGxheSgpOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICBXZWJLaXQ6OldlYkxheWVySUQg
aWQoKSBjb25zdDsKICAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVySW5mbyYgbGF5ZXJJbmZvKCkg
Y29uc3Q7Ci0gICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25zdDsKKyAgICBHcmFw
aGljc1JlY3QgbmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0OwogICAgIHN0YXRpYyBWZWN0b3I8V2Vi
S2l0OjpXZWJMYXllcklEPiB0YWtlTGF5ZXJzVG9EZWxldGUoKTsKICAgICBzdGF0aWMgV2ViR3Jh
cGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCk7CiAgICAgYm9vbCBpc01v
ZGlmaWVkKCkgY29uc3QgeyByZXR1cm4gbV9tb2RpZmllZDsgfQpAQCAtOTMsNyArOTMsNyBAQCBw
cml2YXRlOgogICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwogICAgIFJlZlB0
cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3RvcmU7CiAgICAgUmVmUHRyPElt
YWdlPiBtX2ltYWdlOwotICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7CisgICAgR3Jh
cGhpY3NSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKICAgICBib29sIG1fbmVlZHNEaXNwbGF5Owog
ICAgIGJvb2wgbV9tb2RpZmllZDsKICAgICBib29sIG1fY29udGVudE5lZWRzRGlzcGxheTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRv
ckNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9y
Q2xpZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYQogfQogCiAjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKQotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9u
UGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcs
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
bHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvcnJlY3Rpb25QYW5lbCh0eXBlLCBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJu
YXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsNyArNjQ0LDcgQEAgdm9pZCBEcmF3aW5nQXJl
YUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbwogICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZSgp
OwogCiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gY3JlYXRl
R3JhcGhpY3NDb250ZXh0KGJpdG1hcC5nZXQoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUobV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpLCBtX3dlYlBhZ2Ut
PnVzZXJTcGFjZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEdy
YXBoaWNzU2l6ZShtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCksIG1fd2ViUGFnZS0+
dXNlclNwYWNlU2NhbGVGYWN0b3IoKSkpOwogCiAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91
bmRzID0gYm91bmRzOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJ
bmRpY2F0b3IKICAgICAvLyBXZSB3YW50IHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29v
cmRpbmF0ZXMuCiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyA9
IHNlbGVjdGVkRnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhzZWxlY3Rpb25SZWN0KTsK
ICAgICAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7CisgICAgVmVjdG9yPEdyYXBo
aWNzUmVjdD4gdGV4dFJlY3RzOwogICAgIHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpLT5nZXRD
bGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKHRleHRSZWN0cyk7CiAKICAgICAvLyBDcmVhdGUg
YSBiYWNraW5nIHN0b3JlIGFuZCBwYWludCB0aGUgZmluZCBpbmRpY2F0b3IgdGV4dCBpbnRvIGl0
LgpAQCAtMTk4LDcgKzE5OCw3IEBAIGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRp
Y2F0b3IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgdGV4dCBy
ZWN0cyBpbiBzZWxlY3Rpb24gcmVjdCBjb29yZGluYXRlcy4KLSAgICBWZWN0b3I8RmxvYXRSZWN0
PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKKyAgICBWZWN0b3I8R3JhcGhp
Y3NSZWN0PiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKICAgICAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRleHRSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBJ
bnRSZWN0IHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMgPSBzZWxlY3RlZEZyYW1l
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdHNbaV0p
KTsKQEAgLTIxOSw3ICsyMTksNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRlRmluZEluZGlj
YXRvcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhh
bmRsZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Rmlu
ZEluZGljYXRvcihGbG9hdFJlY3QoKSwgVmVjdG9yPEZsb2F0UmVjdD4oKSwgaGFuZGxlLCBmYWxz
ZSkpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRGaW5k
SW5kaWNhdG9yKEdyYXBoaWNzUmVjdCgpLCBWZWN0b3I8R3JhcGhpY3NSZWN0PigpLCBoYW5kbGUs
IGZhbHNlKSk7CiAgICAgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yID0gZmFsc2U7CiB9CiAKQEAg
LTMwMiw3ICszMDIsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3Zlcmxh
CiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKIAotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0
U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgaG9s
ZVNoYWRvd0NvbG9yKGZyYWN0aW9uRmFkZWRJbiksIENvbG9yU3BhY2VTUkdCKTsKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93T2Zmc2V0WCwgc2hh
ZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIGhvbGVTaGFkb3dDb2xvcihmcmFjdGlvbkZh
ZGVkSW4pLCBDb2xvclNwYWNlU1JHQik7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxs
Q29sb3IoaG9sZUZpbGxDb2xvcihmcmFjdGlvbkZhZGVkSW4pLCBDb2xvclNwYWNlU1JHQik7CiAK
ICAgICAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMgYXJvdW5kIHRoZSBob2xlcy4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MTQsNyArOTE0LDcgQEAgUGFzc1JlZlB0cjxXZWJJbWFnZT4g
V2ViUGFnZTo6c2NhbGVkU25hcAogICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwogICAgIAog
ICAgIGlmIChzY2FsZSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUo
c2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yKSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoR3JhcGhpY3NTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOwogICAgIAogICAgIGdy
YXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1yZWN0LngoKSwgLXJlY3QueSgpKTsKICAgICBmcmFt
ZVZpZXctPnBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCByZWN0KTsKQEAgLTIy
OTEsNyArMjI5MSw3IEBAIHZvaWQgV2ViUGFnZTo6YmVnaW5QcmludGluZyh1aW50NjRfdCBmcmEK
ICAgICBtX3ByaW50Q29udGV4dC0+YmVnaW4ocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgs
IHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCk7CiAKICAgICBmbG9hdCBmdWxsUGFnZUhl
aWdodDsKLSAgICBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0cyhGbG9hdFJlY3QoMCwg
MCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBl
ckhlaWdodCksIDAsIDAsIHByaW50SW5mby5wYWdlU2V0dXBTY2FsZUZhY3RvciwgZnVsbFBhZ2VI
ZWlnaHQsIHRydWUpOworICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKEdyYXBo
aWNzUmVjdCgwLCAwLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2
YWlsYWJsZVBhcGVySGVpZ2h0KSwgMCwgMCwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9y
LCBmdWxsUGFnZUhlaWdodCwgdHJ1ZSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZW5kUHJpbnRpbmco
KQpAQCAtMjMwOCw3ICsyMzA4LDcgQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmlu
dGluZyh1aQogCiAgICAgaWYgKG1fcHJpbnRDb250ZXh0KSB7CiAgICAgICAgIHJlc3VsdFBhZ2VS
ZWN0cyA9IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdHMoKTsKLSAgICAgICAgcmVzdWx0VG90YWxT
Y2FsZUZhY3RvckZvclByaW50aW5nID0gbV9wcmludENvbnRleHQtPmNvbXB1dGVBdXRvbWF0aWNT
Y2FsZUZhY3RvcihGbG9hdFNpemUocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50
SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpICogcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFj
dG9yOworICAgICAgICByZXN1bHRUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcgPSBtX3ByaW50
Q29udGV4dC0+Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9yKEdyYXBoaWNzU2l6ZShwcmludElu
Zm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0KSkg
KiBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3I7CiAgICAgfQogCiAgICAgLy8gSWYgd2Un
cmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBhY3R1YWxseSBwcmludCBhdCBsZWFzdCBhIGJs
YW5rIHBhZ2UuCkBAIC0yMzM5LDcgKzIzMzksNyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9Q
REYodWludDY0X3QgZnJhCiAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0Lmdl
dCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGN0eChjb250
ZXh0LmdldCgpKTsKLSAgICAgICAgY3R4LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgICAg
ICBjdHguc2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAgICAgICAgIGN0eC50cmFuc2xhdGUo
MCwgLXJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xSZWN0KGN0
eCwgcmVjdCk7CiAKQEAgLTIzNzUsNyArMjM3NSw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2Vz
VG9QREYodWludDY0X3QgZnIKICAgICAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShjb250
ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBjdHgoY29udGV4dC5nZXQoKSk7Ci0gICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEs
IC0xKSk7CisgICAgICAgICAgICBjdHguc2NhbGUoR3JhcGhpY3NTaXplKDEsIC0xKSk7CiAgICAg
ICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1tX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSku
aGVpZ2h0KCkpOwogICAgICAgICAgICAgbV9wcmludENvbnRleHQtPnNwb29sUGFnZShjdHgsIHBh
Z2UsIG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdlKS53aWR0aCgpKTsKIApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA5MTAy
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyMiw3ICs1MjIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q3VzdG9t
VGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CisgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24o
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYpOwogICAgIHZvaWQgcGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JSYW5nZShEaWN0aW9uYXJ5UG9wdXBJbmZvOjpUeXBlLCBXZWJDb3JlOjpGcmFt
ZSosIFdlYkNvcmU6OlJhbmdlKiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zKTsKIAogICAgIHZvaWQg
c2V0V2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2UgewogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICMgRGljdGlvbmFyeSBz
dXBwb3J0LgotICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihXZWJDb3JlOjpG
bG9hdFBvaW50IHBvaW50KQorICAgIFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihX
ZWJDb3JlOjpHcmFwaGljc1BvaW50IHBvaW50KQogI2VuZGlmCiAKICAgICBQcmVmZXJlbmNlc0Rp
ZENoYW5nZShXZWJLaXQ6OldlYlByZWZlcmVuY2VzU3RvcmUgc3RvcmUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvY2EvTGF5ZXJUcmVlSG9z
dENBLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvY2EvTGF5ZXJUcmVlSG9zdENBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDE2ICsx
MzMsMTYgQEAgdm9pZCBMYXllclRyZWVIb3N0Q0E6OnNpemVEaWRDaGFuZ2UoY29ucwogCiAgICAg
Ly8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVk
IGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCiAgICAgLy8gZm9yIHRob3NlIG5l
d2x5IGV4cG9zZWQgYXJlYXMuCi0gICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgb2xkU2l6ZSA9IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKIAogICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBv
bGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0
aCgpLCBoZWlnaHQpKTsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nh
c3Q8R3JhcGhpY3NVbml0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KEdyYXBoaWNzUmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNp
emUud2lkdGgoKSwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkg
PiBvbGRTaXplLmhlaWdodCgpKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3
U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworICAg
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChH
cmFwaGljc1JlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXpl
LmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG1fcGFnZU92ZXJsYXlM
YXllcikKICAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNyBA
QCBzdGF0aWMgYm9vbCBzaG91bGRVc2VTZWxlY3Rpb24oY29uc3QgVmlzCiAgICAgcmV0dXJuIGlz
UG9zaXRpb25JblJhbmdlKHBvc2l0aW9uLCBzZWxlY3RlZFJhbmdlLmdldCgpKTsKIH0KIAotdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgZmxvYXRQb2ludCkKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBB
dExvY2F0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZsb2F0UG9pbnQpCiB7CiAgICAgRnJhbWUq
IGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNTI5LDcg
KzUyOSw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3IKICAgICBp
ZiAoIWZvbnREZXNjcmlwdG9yQXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAg
ICAgcmFuZ2UtPnRleHRRdWFkcyhxdWFkcyk7CiAgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3IKICAgICAKICAgICBEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25h
cnlQb3B1cEluZm87CiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby50eXBlID0gdHlwZTsKLSAgICBk
aWN0aW9uYXJ5UG9wdXBJbmZvLm9yaWdpbiA9IEZsb2F0UG9pbnQocmFuZ2VSZWN0LngoKSwgcmFu
Z2VSZWN0LnkoKSk7CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBHcmFwaGljc1Bv
aW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkpOwogICAgIGRpY3Rpb25hcnlQb3B1cElu
Zm8uZm9udEluZm8uZm9udEF0dHJpYnV0ZURpY3Rpb25hcnkgPSBmb250RGVzY3JpcHRvckF0dHJp
YnV0ZXM7CiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgIGRpY3Rp
b25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IChDRkRpY3Rpb25hcnlSZWYpb3B0aW9uczsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxlZERyYXdpbmdBcmVhUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9U
aWxlZERyYXdpbmdBcmVhUXQuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9UaWxlZERyYXdpbmdBcmVhUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cGFpbnRJbnRvQml0
bWFwKFMKIHsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQoYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFu
c2xhdGUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoc2NhbGUsIHNjYWxlKSk7Ci0gICAgSW50UmVjdCBjb250ZW50UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHRpbGVSZWN0LngoKSAvIHNjYWxlLAorICAg
IGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHNjYWxlLCBzY2FsZSkpOworICAg
IEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdCh0aWxl
UmVjdC54KCkgLyBzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGlsZVJlY3QueSgpIC8gc2NhbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBzY2Fs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGlsZVJlY3QuaGVpZ2h0KCkgLyBzY2FsZSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvbWFjL1dl
YktpdDIub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvbWFjL1dlYktpdDIub3Jk
ZXIJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdDIvbWFjL1dlYktpdDIub3JkZXIJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NzksNyArMTQ3OSw3IEBAIF9XS1BhZ2VIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyCiBfX1pONldlYktpdDE5TmF0aXZlV2ViV2hlZWxFdmVudEMxRVA3TlNFdmVudFA2
TlNWaWV3CiBfX1pONldlYktpdDE1V2ViRXZlbnRGYWN0b3J5MTljcmVhdGVXZWJXaGVlbEV2ZW50
RVA3TlNFdmVudFA2TlNWaWV3CiBfV0tHZXRXaGVlbEV2ZW50RGVsdGFzCi1fX1pONldlYktpdDEz
V2ViV2hlZWxFdmVudEMxRU5TXzhXZWJFdmVudDRUeXBlRVJLTjdXZWJDb3JlOEludFBvaW50RVM2
X1JLTlMzXzlGbG9hdFNpemVFUzlfTlMwXzExR3JhbnVsYXJpdHlFTlMwXzVQaGFzZUVTQl9iTlMx
XzlNb2RpZmllcnNFZAorX19aTjZXZWJLaXQxM1dlYldoZWVsRXZlbnRDMUVOU184V2ViRXZlbnQ0
VHlwZUVSS043V2ViQ29yZThJbnRQb2ludEVTNl9SS05TM18xMkdyYXBoaWNzU2l6ZUVTOV9OUzBf
MTFHcmFudWxhcml0eUVOUzBfNVBoYXNlRVNCX2JOUzFfOU1vZGlmaWVyc0VkCiBfX1pONldlYktp
dDEyV2ViUGFnZVByb3h5MTZoYW5kbGVXaGVlbEV2ZW50RVJLTlNfMTlOYXRpdmVXZWJXaGVlbEV2
ZW50RQogX19aTjNXVEY2VmVjdG9ySU42V2ViS2l0MTlOYXRpdmVXZWJXaGVlbEV2ZW50RUxtMEVF
MTRleHBhbmRDYXBhY2l0eUVtUEtTMl8KIF9fWk4zV1RGNlZlY3RvcklONldlYktpdDE5TmF0aXZl
V2ViV2hlZWxFdmVudEVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KQEAgLTIxODIsMTcgKzIxODIs
MTcgQEAgX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50MTlzZXRNZW51QmFySXNWaQogX19aTjdDb3Jl
SVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMxMldlYlBhZ2VQcm94eTE0U2V0SXNSZXNpemFi
bGVFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVfRnZiRUVFdlBOU18xNUFyZ3VtZW50RGVjb2Rl
ckVQVDBfVDFfCiBfX1pONldlYktpdDEyV2ViUGFnZVByb3h5MTRzZXRJc1Jlc2l6YWJsZUViCiBf
X1pONldlYktpdDExV2ViVUlDbGllbnQxNHNldElzUmVzaXphYmxlRVBOU18xMldlYlBhZ2VQcm94
eUViCi1fX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdlczEyV2ViUGFnZVByb3h5
MTRHZXRXaW5kb3dGcmFtZUVONldlYktpdDEyV2ViUGFnZVByb3h5RU1TNV9GdlJON1dlYkNvcmU5
RmxvYXRSZWN0RUVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUE5TXzE1QXJndW1lbnRFbmNvZGVy
RVBUMF9UMV8KLV9fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxNGdldFdpbmRvd0ZyYW1lRVJON1dl
YkNvcmU5RmxvYXRSZWN0RQorX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMx
MldlYlBhZ2VQcm94eTE0R2V0V2luZG93RnJhbWVFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVf
RnZSTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQTlNf
MTVBcmd1bWVudEVuY29kZXJFUFQwX1QxXworX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE0Z2V0
V2luZG93RnJhbWVFUk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RQogX19aTjZXZWJLaXQxMVdlYlVJ
Q2xpZW50MTF3aW5kb3dGcmFtZUVQTlNfMTJXZWJQYWdlUHJveHlFCi1fX1pONldlYktpdDE0UGFn
ZUNsaWVudEltcGwxOGNvbnZlcnRUb1VzZXJTcGFjZUVSS043V2ViQ29yZTlGbG9hdFJlY3RFCitf
X1pONldlYktpdDE0UGFnZUNsaWVudEltcGwxOGNvbnZlcnRUb1VzZXJTcGFjZUVSS043V2ViQ29y
ZTEyR3JhcGhpY3NSZWN0RQogLVtXS1ZpZXcoSW50ZXJuYWwpIF9jb252ZXJ0VG9Vc2VyU3BhY2U6
XQotX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMxMldlYlBhZ2VQcm94eTE0
U2V0V2luZG93RnJhbWVFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVfRnZSS043V2ViQ29yZTlG
bG9hdFJlY3RFRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCi1fX1pON0NvcmVJUEMx
OGNhbGxNZW1iZXJGdW5jdGlvbklONldlYktpdDEyV2ViUGFnZVByb3h5RU1TMl9GdlJLTjdXZWJD
b3JlOUZsb2F0UmVjdEVFUzRfRUV2UktOU18xMEFyZ3VtZW50czFJVDFfRUVQVF9UMF8KLV9fWk42
V2ViS2l0MTJXZWJQYWdlUHJveHkxNHNldFdpbmRvd0ZyYW1lRVJLTjdXZWJDb3JlOUZsb2F0UmVj
dEUKLV9fWk42V2ViS2l0MTRQYWdlQ2xpZW50SW1wbDIwY29udmVydFRvRGV2aWNlU3BhY2VFUktO
N1dlYkNvcmU5RmxvYXRSZWN0RQorX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2Fn
ZXMxMldlYlBhZ2VQcm94eTE0U2V0V2luZG93RnJhbWVFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVN
UzVfRnZSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJF
UFQwX1QxXworX19aTjdDb3JlSVBDMThjYWxsTWVtYmVyRnVuY3Rpb25JTjZXZWJLaXQxMldlYlBh
Z2VQcm94eUVNUzJfRnZSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUVTNF9FRXZSS05TXzEwQXJn
dW1lbnRzMUlUMV9FRVBUX1QwXworX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE0c2V0V2luZG93
RnJhbWVFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKK19fWk42V2ViS2l0MTRQYWdlQ2xpZW50
SW1wbDIwY29udmVydFRvRGV2aWNlU3BhY2VFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIC1b
V0tWaWV3KEludGVybmFsKSBfY29udmVydFRvRGV2aWNlU3BhY2U6XQotX19aTjZXZWJLaXQxMVdl
YlVJQ2xpZW50MTRzZXRXaW5kb3dGcmFtZUVQTlNfMTJXZWJQYWdlUHJveHlFUktON1dlYkNvcmU5
RmxvYXRSZWN0RQorX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50MTRzZXRXaW5kb3dGcmFtZUVQTlNf
MTJXZWJQYWdlUHJveHlFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIF9fWk42V2ViS2l0MTJX
ZWJQYWdlUHJveHk4c2hvd1BhZ2VFdgogX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50OHNob3dQYWdl
RVBOU18xMldlYlBhZ2VQcm94eUUKIF9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3Nh
Z2VzMTJXZWJQYWdlUHJveHkyMkRpc21pc3NDb3JyZWN0aW9uUGFuZWxFTjZXZWJLaXQxMldlYlBh
Z2VQcm94eUVNUzVfRnZpRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCkBAIC0yNjg4
LDIwICsyNjg4LDIwIEBAIF9fWk42V2ViS2l0MTFXZWJVSUNsaWVudDVmb2N1c0VQTlNfMTJXZWIK
IC1bV0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyIGludGVycHJldEtleUV2ZW50OnN0cmluZzpd
CiAtW1dLVGV4dElucHV0UGFuZWwgX2ludGVycHJldEtleUV2ZW50OnN0cmluZzpdCiBfX1pONldl
YktpdDExV2ViVUlDbGllbnQ3dW5mb2N1c0VQTlNfMTJXZWJQYWdlUHJveHlFCi1fX1pON0NvcmVJ
UEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdlczEyV2ViUGFnZVByb3h5MTlTaG93Q29ycmVjdGlv
blBhbmVsRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2aVJLTjdXZWJDb3JlOUZsb2F0UmVj
dEVSS04zV1RGNlN0cmluZ0VTRF9SS05TQV82VmVjdG9ySVNCX0xtMEVFRUVFRXZQTlNfMTVBcmd1
bWVudERlY29kZXJFUFQwX1QxXwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHM1SWlON1dlYkNvcmU5
RmxvYXRSZWN0RU4zV1RGNlN0cmluZ0VTNF9OUzNfNlZlY3RvcklTNF9MbTBFRUVFNmRlY29kZUVQ
TlNfMTVBcmd1bWVudERlY29kZXJFUlM3XwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SWlON1dl
YkNvcmU5RmxvYXRSZWN0RU4zV1RGNlN0cmluZ0VTNF9FNmRlY29kZUVQTlNfMTVBcmd1bWVudERl
Y29kZXJFUlM1XwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSWlON1dlYkNvcmU5RmxvYXRSZWN0
RU4zV1RGNlN0cmluZ0VFNmRlY29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlM1XwotX19aTjdD
b3JlSVBDMTBBcmd1bWVudHMySWlON1dlYkNvcmU5RmxvYXRSZWN0RUU2ZGVjb2RlRVBOU18xNUFy
Z3VtZW50RGVjb2RlckVSUzNfCitfX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdl
czEyV2ViUGFnZVByb3h5MTlTaG93Q29ycmVjdGlvblBhbmVsRU42V2ViS2l0MTJXZWJQYWdlUHJv
eHlFTVM1X0Z2aVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFUktOM1dURjZTdHJpbmdFU0RfUktO
U0FfNlZlY3RvcklTQl9MbTBFRUVFRUV2UE5TXzE1QXJndW1lbnREZWNvZGVyRVBUMF9UMV8KK19f
Wk43Q29yZUlQQzEwQXJndW1lbnRzNUlpTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTjNXVEY2U3Ry
aW5nRVM0X05TM182VmVjdG9ySVM0X0xtMEVFRUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2Rl
ckVSUzdfCitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czRJaU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0
RU4zV1RGNlN0cmluZ0VTNF9FNmRlY29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlM1XworX19a
TjdDb3JlSVBDMTBBcmd1bWVudHMzSWlON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVOM1dURjZTdHJp
bmdFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNV8KK19fWk43Q29yZUlQQzEwQXJn
dW1lbnRzMklpTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnRE
ZWNvZGVyRVJTM18KIF9fWk43Q29yZUlQQzE5VmVjdG9yQXJndW1lbnRDb2RlcklMYjBFTjNXVEY2
U3RyaW5nRUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2RlckVSTlMxXzZWZWN0b3JJUzJfTG0w
RUVFCiBfX1pOM1dURjZWZWN0b3JJTlNfNlN0cmluZ0VMbTBFRTE0c2hyaW5rQ2FwYWNpdHlFbQot
X19aTjdDb3JlSVBDMThjYWxsTWVtYmVyRnVuY3Rpb25JTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVN
UzJfRnZpUktON1dlYkNvcmU5RmxvYXRSZWN0RVJLTjNXVEY2U3RyaW5nRVNBX1JLTlM3XzZWZWN0
b3JJUzhfTG0wRUVFRWlTNF9TOF9TOF9TQ19FRXZSS05TXzEwQXJndW1lbnRzNUlUMV9UMl9UM19U
NF9UNV9FRVBUX1QwXwotX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE5c2hvd0NvcnJlY3Rpb25Q
YW5lbEVpUktON1dlYkNvcmU5RmxvYXRSZWN0RVJLTjNXVEY2U3RyaW5nRVM4X1JLTlM1XzZWZWN0
b3JJUzZfTG0wRUVFCi1fX1pONldlYktpdDE0UGFnZUNsaWVudEltcGwxOXNob3dDb3JyZWN0aW9u
UGFuZWxFTjdXZWJDb3JlMTlDb3JyZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TMV85Rmxv
YXRSZWN0RVJLTjNXVEY2U3RyaW5nRVNBX1JLTlM3XzZWZWN0b3JJUzhfTG0wRUVFCi1fX1pONldl
YktpdDE1Q29ycmVjdGlvblBhbmVsNHNob3dFUDZXS1ZpZXdON1dlYkNvcmUxOUNvcnJlY3Rpb25Q
YW5lbEluZm85UGFuZWxUeXBlRVJLTlMzXzlGbG9hdFJlY3RFUktOM1dURjZTdHJpbmdFU0NfUktO
UzlfNlZlY3RvcklTQV9MbTBFRUUKK19fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42
V2ViS2l0MTJXZWJQYWdlUHJveHlFTVMyX0Z2aVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFUktO
M1dURjZTdHJpbmdFU0FfUktOUzdfNlZlY3RvcklTOF9MbTBFRUVFaVM0X1M4X1M4X1NDX0VFdlJL
TlNfMTBBcmd1bWVudHM1SVQxX1QyX1QzX1Q0X1Q1X0VFUFRfVDBfCitfX1pONldlYktpdDEyV2Vi
UGFnZVByb3h5MTlzaG93Q29ycmVjdGlvblBhbmVsRWlSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0
RVJLTjNXVEY2U3RyaW5nRVM4X1JLTlM1XzZWZWN0b3JJUzZfTG0wRUVFCitfX1pONldlYktpdDE0
UGFnZUNsaWVudEltcGwxOXNob3dDb3JyZWN0aW9uUGFuZWxFTjdXZWJDb3JlMTlDb3JyZWN0aW9u
UGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TMV8xMkdyYXBoaWNzUmVjdEVSS04zV1RGNlN0cmluZ0VT
QV9SS05TN182VmVjdG9ySVM4X0xtMEVFRQorX19aTjZXZWJLaXQxNUNvcnJlY3Rpb25QYW5lbDRz
aG93RVA2V0tWaWV3TjdXZWJDb3JlMTlDb3JyZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05T
M18xMkdyYXBoaWNzUmVjdEVSS04zV1RGNlN0cmluZ0VTQ19SS05TOV82VmVjdG9ySVNBX0xtMEVF
RQogLVtXS1ZpZXcgYWNjZXNzaWJpbGl0eUlzSWdub3JlZF0KLV9fWk43Q29yZUlQQzEwQXJndW1l
bnRzNElpTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFUzRfRUQyRXYKLV9fWk43Q29y
ZUlQQzEwQXJndW1lbnRzM0lpTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFRUQyRXYK
K19fWk43Q29yZUlQQzEwQXJndW1lbnRzNElpTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTjNXVEY2
U3RyaW5nRVM0X0VEMkV2CitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czNJaU43V2ViQ29yZTEyR3Jh
cGhpY3NSZWN0RU4zV1RGNlN0cmluZ0VFRDJFdgogX19fc2hvd19ibG9ja19pbnZva2VfMQogX19a
TjZXZWJLaXQxNUNvcnJlY3Rpb25QYW5lbDI1aGFuZGxlQWNjZXB0ZWRSZXBsYWNlbWVudEVQOE5T
U3RyaW5nUzJfUzJfbAogLVtXS1ZpZXcoUHJpdmF0ZSkgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWdd
CkBAIC0yODQ2LDIxICsyODQ2LDIxIEBAIF9fWk42V2ViS2l0MTVXZWJQcm9jZXNzUHJveHk0c2Vu
ZElOOE1lc3MKIF9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3NhZ2VzMTJXZWJQYWdl
UHJveHkxM0RpZEZpbmRTdHJpbmdFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVfRnZSS04zV1RG
NlN0cmluZ0VqRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCiBfX1pONldlYktpdDEy
V2ViUGFnZVByb3h5MTNkaWRGaW5kU3RyaW5nRVJLTjNXVEY2U3RyaW5nRWoKIF9fWk42V2ViS2l0
MTNXZWJGaW5kQ2xpZW50MTNkaWRGaW5kU3RyaW5nRVBOU18xMldlYlBhZ2VQcm94eUVSS04zV1RG
NlN0cmluZ0VqCi1fX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdlczEyV2ViUGFn
ZVByb3h5MTZTZXRGaW5kSW5kaWNhdG9yRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2UktO
N1dlYkNvcmU5RmxvYXRSZWN0RVJLTjNXVEY2VmVjdG9ySVM3X0xtMEVFRVJLTlM0XzE1U2hhcmVh
YmxlQml0bWFwNkhhbmRsZUViRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCi1fX1pO
N0NvcmVJUEMxMEFyZ3VtZW50czRJTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJUzJf
TG0wRUVFTjZXZWJLaXQxNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkU2ZGVjb2RlRVBOU18xNUFy
Z3VtZW50RGVjb2RlckVSUzlfCi1fX1pON0NvcmVJUEMxMEFyZ3VtZW50czNJTjdXZWJDb3JlOUZs
b2F0UmVjdEVOM1dURjZWZWN0b3JJUzJfTG0wRUVFTjZXZWJLaXQxNVNoYXJlYWJsZUJpdG1hcDZI
YW5kbGVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTOV8KLV9fWk43Q29yZUlQQzEw
QXJndW1lbnRzMklON1dlYkNvcmU5RmxvYXRSZWN0RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVFNmRl
Y29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlM2XwotX19aTjdDb3JlSVBDMTlWZWN0b3JBcmd1
bWVudENvZGVySUxiMEVON1dlYkNvcmU5RmxvYXRSZWN0RUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50
RGVjb2RlckVSTjNXVEY2VmVjdG9ySVMyX0xtMEVFRQotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29y
ZTlGbG9hdFJlY3RFTG0wRUUxNGV4cGFuZENhcGFjaXR5RW1QS1MyXwotX19aTjNXVEY2VmVjdG9y
SU43V2ViQ29yZTlGbG9hdFJlY3RFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCi1fX1pOM1dURjE2
VmVjdG9yQnVmZmVyQmFzZUlON1dlYkNvcmU5RmxvYXRSZWN0RUUxNGFsbG9jYXRlQnVmZmVyRW0K
LV9fWk4zV1RGMTFWZWN0b3JNb3ZlcklMYjBFTjdXZWJDb3JlOUZsb2F0UmVjdEVFNG1vdmVFUEtT
Ml9TNV9QUzJfCi1fX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlOUZsb2F0UmVjdEVMbTBFRTE0c2hy
aW5rQ2FwYWNpdHlFbQotX19aTjdDb3JlSVBDMThjYWxsTWVtYmVyRnVuY3Rpb25JTjZXZWJLaXQx
MldlYlBhZ2VQcm94eUVNUzJfRnZSS043V2ViQ29yZTlGbG9hdFJlY3RFUktOM1dURjZWZWN0b3JJ
UzRfTG0wRUVFUktOUzFfMTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRWJFUzRfUzlfU0RfYkVFdlJL
TlNfMTBBcmd1bWVudHM0SVQxX1QyX1QzX1Q0X0VFUFRfVDBfCi1fX1pONldlYktpdDEyV2ViUGFn
ZVByb3h5MTZzZXRGaW5kSW5kaWNhdG9yRVJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlZl
Y3RvcklTMl9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViCi1fX1pONldlYktp
dDEzRmluZEluZGljYXRvcjZjcmVhdGVFUktON1dlYkNvcmU5RmxvYXRSZWN0RVJLTjNXVEY2VmVj
dG9ySVMyX0xtMEVFRVJLTlNfMTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRQotX19aTjNXVEY2VmVj
dG9ySU43V2ViQ29yZTlGbG9hdFJlY3RFTG0wRUVDMkVSS1MzXwotX19aTjNXVEYxMlZlY3RvckNv
cGllcklMYjBFTjdXZWJDb3JlOUZsb2F0UmVjdEVFMTd1bmluaXRpYWxpemVkQ29weUVQS1MyX1M1
X1BTMl8KK19fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3NhZ2VzMTJXZWJQYWdlUHJv
eHkxNlNldEZpbmRJbmRpY2F0b3JFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVfRnZSS043V2Vi
Q29yZTEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2VmVjdG9ySVM3X0xtMEVFRVJLTlM0XzE1U2hhcmVh
YmxlQml0bWFwNkhhbmRsZUViRUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCitfX1pO
N0NvcmVJUEMxMEFyZ3VtZW50czRJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTjNXVEY2VmVjdG9y
SVMyX0xtMEVFRU42V2ViS2l0MTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRWJFNmRlY29kZUVQTlNf
MTVBcmd1bWVudERlY29kZXJFUlM5XworX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSU43V2ViQ29y
ZTEyR3JhcGhpY3NSZWN0RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1U2hhcmVhYmxl
Qml0bWFwNkhhbmRsZUVFNmRlY29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlM5XworX19aTjdD
b3JlSVBDMTBBcmd1bWVudHMySU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RU4zV1RGNlZlY3RvcklT
Ml9MbTBFRUVFNmRlY29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlM2XworX19aTjdDb3JlSVBD
MTlWZWN0b3JBcmd1bWVudENvZGVySUxiMEVON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFNmRlY29k
ZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUk4zV1RGNlZlY3RvcklTMl9MbTBFRUUKK19fWk4zV1RG
NlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbVBL
UzJfCitfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNXJlc2Vy
dmVDYXBhY2l0eUVtCitfX1pOM1dURjE2VmVjdG9yQnVmZmVyQmFzZUlON1dlYkNvcmUxMkdyYXBo
aWNzUmVjdEVFMTRhbGxvY2F0ZUJ1ZmZlckVtCitfX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRU43
V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUU0bW92ZUVQS1MyX1M1X1BTMl8KK19fWk4zV1RGNlZlY3Rv
cklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVMbTBFRTE0c2hyaW5rQ2FwYWNpdHlFbQorX19aTjdD
b3JlSVBDMThjYWxsTWVtYmVyRnVuY3Rpb25JTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzJfRnZS
S043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2VmVjdG9ySVM0X0xtMEVFRVJLTlMxXzE1
U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViRVM0X1M5X1NEX2JFRXZSS05TXzEwQXJndW1lbnRzNElU
MV9UMl9UM19UNF9FRVBUX1QwXworX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE2c2V0RmluZElu
ZGljYXRvckVSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2VmVjdG9ySVMyX0xtMEVF
RVJLTlNfMTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRWIKK19fWk42V2ViS2l0MTNGaW5kSW5kaWNh
dG9yNmNyZWF0ZUVSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2VmVjdG9ySVMyX0xt
MEVFRVJLTlNfMTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRQorX19aTjNXVEY2VmVjdG9ySU43V2Vi
Q29yZTEyR3JhcGhpY3NSZWN0RUxtMEVFQzJFUktTM18KK19fWk4zV1RGMTJWZWN0b3JDb3BpZXJJ
TGIwRU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUUxN3VuaW5pdGlhbGl6ZWRDb3B5RVBLUzJfUzVf
UFMyXwogX19aTjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMTZzZXRGaW5kSW5kaWNhdG9yRU4zV1RG
MTBQYXNzUmVmUHRySU5TXzEzRmluZEluZGljYXRvckVFRWIKIC1bV0tWaWV3KEludGVybmFsKSBf
c2V0RmluZEluZGljYXRvcjpmYWRlT3V0Ol0KIF9fWk42V2ViS2l0MTlGaW5kSW5kaWNhdG9yV2lu
ZG93NmNyZWF0ZUVQNldLVmlldwpAQCAtMjg3OCw3ICsyODc4LDcgQEAgX19aTjZXZWJLaXQxM0Zp
bmRJbmRpY2F0b3I0ZHJhd0VSTjdXZWJDbwogX19aTjNXVEYxMFJlZkNvdW50ZWRJTjdXZWJDb3Jl
OUdlbmVyYXRvckVFNWRlcmVmRXYKIF9XS1dpbmRvd0JvdW5jZUFuaW1hdGlvbkNvbnRleHRDcmVh
dGUKIC1bV2ViRmluZEluZGljYXRvcldpbmRvd0FuaW1hdGlvbiBfaW5pdFdpdGhGaW5kSW5kaWNh
dG9yV2luZG93OmFuaW1hdGlvbkR1cmF0aW9uOmFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6YW5p
bWF0aW9uRGlkRW5kQ2FsbGJhY2s6XQotX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSU43V2ViQ29y
ZTlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVMyX0xtMEVFRU42V2ViS2l0MTVTaGFyZWFibGVCaXRt
YXA2SGFuZGxlRUVEMkV2CitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czNJTjdXZWJDb3JlMTJHcmFw
aGljc1JlY3RFTjNXVEY2VmVjdG9ySVMyX0xtMEVFRU42V2ViS2l0MTVTaGFyZWFibGVCaXRtYXA2
SGFuZGxlRUVEMkV2CiAtW1dlYkZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gc2V0Q3VycmVu
dFByb2dyZXNzOl0KIF9fWk42V2ViS2l0MTlGaW5kSW5kaWNhdG9yV2luZG93MjNib3VuY2VBbmlt
YXRpb25DYWxsYmFja0VkCiBfV0tXaW5kb3dCb3VuY2VBbmltYXRpb25TZXRBbmltYXRpb25Qcm9n
cmVzcwpAQCAtMzE5OSwxMCArMzE5OSwxMCBAQCBfX1pOM1dURjlIYXNoVGFibGVJTjdXZWJDb3Jl
N0ludFJlY3RFU3Q0CiAtW1dLUHJpbnRpbmdWaWV3IGlzRmxpcHBlZF0KIC1bV0tQcmludGluZ1Zp
ZXcgbG9jYXRpb25PZlByaW50UmVjdDpdCiAtW1dLUHJpbnRpbmdWaWV3IGRyYXdQYWdlQm9yZGVy
V2l0aFNpemU6XQotX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTEwZHJhd0hlYWRlckVQTlNfMTNX
ZWJGcmFtZVByb3h5RVJLTjdXZWJDb3JlOUZsb2F0UmVjdEUKLV9fWk42V2ViS2l0MTFXZWJVSUNs
aWVudDEwZHJhd0hlYWRlckVQTlNfMTJXZWJQYWdlUHJveHlFUE5TXzEzV2ViRnJhbWVQcm94eUVS
S043V2ViQ29yZTlGbG9hdFJlY3RFCi1fX1pONldlYktpdDEyV2ViUGFnZVByb3h5MTBkcmF3Rm9v
dGVyRVBOU18xM1dlYkZyYW1lUHJveHlFUktON1dlYkNvcmU5RmxvYXRSZWN0RQotX19aTjZXZWJL
aXQxMVdlYlVJQ2xpZW50MTBkcmF3Rm9vdGVyRVBOU18xMldlYlBhZ2VQcm94eUVQTlNfMTNXZWJG
cmFtZVByb3h5RVJLTjdXZWJDb3JlOUZsb2F0UmVjdEUKK19fWk42V2ViS2l0MTJXZWJQYWdlUHJv
eHkxMGRyYXdIZWFkZXJFUE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTEyR3JhcGhpY3NS
ZWN0RQorX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50MTBkcmF3SGVhZGVyRVBOU18xMldlYlBhZ2VQ
cm94eUVQTlNfMTNXZWJGcmFtZVByb3h5RVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCitfX1pO
NldlYktpdDEyV2ViUGFnZVByb3h5MTBkcmF3Rm9vdGVyRVBOU18xM1dlYkZyYW1lUHJveHlFUktO
N1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKK19fWk42V2ViS2l0MTFXZWJVSUNsaWVudDEwZHJhd0Zv
b3RlckVQTlNfMTJXZWJQYWdlUHJveHlFUE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTEy
R3JhcGhpY3NSZWN0RQogX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMxMldl
YlBhZ2VQcm94eTIxQ29tcHV0ZWRQYWdlc0NhbGxiYWNrRU42V2ViS2l0MTJXZWJQYWdlUHJveHlF
TVM1X0Z2UktOM1dURjZWZWN0b3JJTjdXZWJDb3JlN0ludFJlY3RFTG0wRUVFZHlFRUV2UE5TXzE1
QXJndW1lbnREZWNvZGVyRVBUMF9UMV8KIF9fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lOM1dURjZW
ZWN0b3JJTjdXZWJDb3JlN0ludFJlY3RFTG0wRUVFZHlFNmRlY29kZUVQTlNfMTVBcmd1bWVudERl
Y29kZXJFUlM2XwogX19aTjdDb3JlSVBDMTBBcmd1bWVudHMySU4zV1RGNlZlY3RvcklON1dlYkNv
cmU3SW50UmVjdEVMbTBFRUVkRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNl8KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3Ry
YWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENo
YW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQg
YWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0
eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRi
aXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
RmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0UmVjdDo6b3BlcmF0b3IgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0KToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnNldFdpbmRvd1JlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6cGFnZVJlY3QpOgorICAgICAgICAqIHNyYy9DaHJvbWVD
bGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwOgorICAg
ICAgICAqIHNyYy9XZWJGb250SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvbnRJbXBs
OjpkcmF3VGV4dCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6c3Bvb2xQYWdlKToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lUGx1Z2luUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVJbXBsOjpwcmludEJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tU
b0NhbnZhcyk6CisgICAgICAgICogdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAg
ICAgICogdGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMv
VHJhbnNwYXJlbmN5V2luVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSRUNUVG9HcmFwaGlj
c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDct
MTQgIElseWEgU2hlcm1hbiAgPGlzaGVybWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW5h
bWUgQXV0b0ZpbGwgLT4gQXV0b2ZpbGwgYW5kIGF1dG9GaWxsIC0+IGF1dG9maWxsCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaAkocmV2aXNpb24g
OTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgog
CiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC04
MSw5ICs4MSw5IEBAIHN0cnVjdCBXZWJGbG9hdFJlY3QgewogICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgfQogCi0gICAgb3BlcmF0b3IgV2ViQ29yZTo6RmxvYXRSZWN0KCkgY29uc3QKKyAgICBv
cGVyYXRvciBXZWJDb3JlOjpHcmFwaGljc1JlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAj
ZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QAogI2luY2x1ZGUgIkV4dGVybmFsUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIu
aCIKICNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgpAQCAtMTc1
LDEzICsxNzUsMTMgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjpjaHJvbWVEZXN0cm95ZWQoKQog
ICAgIC8vIE91ciBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgV2ViVmlld0ltcGwuCiB9CiAKLXZv
aWQgQ2hyb21lQ2xpZW50SW1wbDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2
b2lkIENocm9tZUNsaWVudEltcGw6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiBy
KQogewogICAgIGlmIChtX3dlYlZpZXctPmNsaWVudCgpKQogICAgICAgICBtX3dlYlZpZXctPmNs
aWVudCgpLT5zZXRXaW5kb3dSZWN0KEludFJlY3QocikpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21l
Q2xpZW50SW1wbDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50SW1wbDo6
d2luZG93UmVjdCgpCiB7CiAgICAgV2ViUmVjdCByZWN0OwogICAgIGlmIChtX3dlYlZpZXctPmNs
aWVudCgpKQpAQCAtMTkzLDEwICsxOTMsMTAgQEAgRmxvYXRSZWN0IENocm9tZUNsaWVudEltcGw6
OndpbmRvd1JlY3QoKQogICAgICAgICByZWN0LndpZHRoID0gbV93ZWJWaWV3LT5zaXplKCkud2lk
dGg7CiAgICAgICAgIHJlY3QuaGVpZ2h0ID0gbV93ZWJWaWV3LT5zaXplKCkuaGVpZ2h0OwogICAg
IH0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QpOworICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
cmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRJbXBsOjpwYWdlUmVjdCgpCitHcmFw
aGljc1JlY3QgQ2hyb21lQ2xpZW50SW1wbDo6cGFnZVJlY3QoKQogewogICAgIC8vIFdlIGhpZGUg
dGhlIGRldGFpbHMgb2YgdGhlIHdpbmRvdydzIGJvcmRlciB0aGlja25lc3MgZnJvbSB0aGUgd2Vi
IHBhZ2UgYnkKICAgICAvLyBzaW1wbGUgcmUtdXNpbmcgdGhlIHdpbmRvdyBwb3NpdGlvbiBoZXJl
LiAgU28sIGZyb20gdGhlIHBvaW50LW9mLXZpZXcgb2YKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw5ICs2Miw5IEBAIHB1YmxpYzoKIAogICAgIC8vIENocm9tZUNsaWVudCBtZXRob2Rz
OgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9h
dFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCB3aW5kb3dSZWN0KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgcGFnZVJl
Y3QoKTsKICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAgICAgdmlydHVhbCB2b2lk
IGZvY3VzKCk7CiAgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwCShyZXZpc2lv
biA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ2xpZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudElt
cGwuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1wbC5jcHAJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBXZWJGb250SW1w
bDo6ZHJhd1RleHQoV2ViQ2FudmFzKiBjYQogCiAgICAgZ2Muc2F2ZSgpOwogICAgIGdjLnNldEZp
bGxDb2xvcihjb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ2MuY2xpcChXZWJDb3Jl
OjpGbG9hdFJlY3QoY2xpcCkpOworICAgIGdjLmNsaXAoV2ViQ29yZTo6R3JhcGhpY3NSZWN0KGNs
aXApKTsKICAgICBtX2ZvbnQuZHJhd1RleHQoJmdjLCBydW4sIGxlZnRCYXNlbGluZSwgZnJvbSwg
dG8pOwogICAgIGdjLnJlc3RvcmUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyAr
MzU1LDcgQEAgcHVibGljOgogCiAgICAgICAgIGN0eC5zYXZlKCk7CiAjaWYgT1MoVU5JWCkgJiYg
IU9TKERBUldJTikKLSAgICAgICAgY3R4LnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZSwg
c2NhbGUpKTsKKyAgICAgICAgY3R4LnNjYWxlKFdlYkNvcmU6OkdyYXBoaWNzU2l6ZShzY2FsZSwg
c2NhbGUpKTsKICNlbmRpZgogICAgICAgICBjdHgudHJhbnNsYXRlKHN0YXRpY19jYXN0PGZsb2F0
PigtcGFnZVJlY3QueCgpKSwKICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9h
dD4oLXBhZ2VSZWN0LnkoKSkpOwpAQCAtMzY1LDcgKzM2NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHNjYWxlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUGFnZVJlY3Rz
KGNvbnN0IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZv
b3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCkK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIHBy
aW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVz
ZXJTY2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQpCiAgICAgewogICAgICAgICByZXR1
cm4gUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJlY3RzKHByaW50UmVjdCwgaGVhZGVySGVpZ2h0
LCBmb290ZXJIZWlnaHQsIHVzZXJTY2FsZUZhY3Rvciwgb3V0UGFnZUhlaWdodCk7CiAgICAgfQpA
QCAtNDEyLDcgKzQxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIDEuMDsKICAgICB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50
UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJT
Y2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQpCisgICAgdmlydHVhbCB2b2lkIGNvbXB1
dGVQYWdlUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhl
aWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBv
dXRQYWdlSGVpZ2h0KQogICAgIHsKICAgICAgICAgbV9wYWdlQ291bnQgPSBtX3BsdWdpbi0+cHJp
bnRCZWdpbihJbnRSZWN0KHByaW50UmVjdCksIG1fcHJpbnRlckRQSSk7CiAgICAgfQpAQCAtMTMz
Nyw3ICsxMzM3LDcgQEAgaW50IFdlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbihjb25zdCBXZWJTaQog
ICAgIGVsc2UKICAgICAgICAgbV9wcmludENvbnRleHQgPSBhZG9wdFB0cihuZXcgQ2hyb21lUHJp
bnRDb250ZXh0KGZyYW1lKCkpKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KDAsIDAsIHN0YXRpY19j
YXN0PGZsb2F0PihwYWdlU2l6ZS53aWR0aCksCisgICAgR3JhcGhpY3NSZWN0IHJlY3QoMCwgMCwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhZ2VTaXplLndpZHRoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocGFnZVNpemUuaGVpZ2h0KSk7CiAgICAgbV9wcmludENv
bnRleHQtPmJlZ2luKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgZmxvYXQgcGFn
ZUhlaWdodDsKQEAgLTE3ODcsNyArMTc4Nyw3IEBAIGludCBXZWJGcmFtZUltcGw6OnBhZ2VOdW1i
ZXJGb3JFbGVtZW50QnkKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiAtMTsKIAot
ICAgIEZsb2F0U2l6ZSBwYWdlU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4
ZWxzKTsKKyAgICBHcmFwaGljc1NpemUgcGFnZVNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VI
ZWlnaHRJblBpeGVscyk7CiAgICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVs
ZW1lbnQoZWxlbWVudCwgcGFnZVNpemUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5NCw3
ICsxMDk0LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YQogICAg
ICAgICBpbWFnZUJ1ZmZlci0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShwaXhlbEFycmF5Lmdl
dCgpLCByZWN0LnNpemUoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSksIEludFBv
aW50KCkpOwogICAgICAgICBnYy5zYXZlKCk7CiAgICAgICAgIGdjLnRyYW5zbGF0ZShJbnRTaXpl
KDAsIGJpdG1hcEhlaWdodCkpOwotICAgICAgICBnYy5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEu
MGYpKTsKKyAgICAgICAgZ2Muc2NhbGUoR3JhcGhpY3NTaXplKDEuMGYsIC0xLjBmKSk7CiAgICAg
ICAgIC8vIFVzZSBpbnZlcnRSZWN0IGluIG5leHQgbGluZSwgc28gdGhhdCB0cmFuc2Zvcm0gYWJv
dmUgaW52ZXJ0cyBpdCBiYWNrIHRvCiAgICAgICAgIC8vIGRlc2lyZWQgZGVzdGluYXRpb24gcmVj
dC4KICAgICAgICAgZ2MuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBpbnZlcnRSZWN0LmxvY2F0aW9uKCkpOwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDggKzg2LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMHU7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpDb2xvclNwYWNlLAorICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
JiwgV2ViQ29yZTo6Q29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvcikKICAgICB7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIFRFU1Qo
RHJhZ0ltYWdlVGVzdCwgTnVsbEhhbmRsaW5nKQogCiAgICAgZGVsZXRlRHJhZ0ltYWdlKDApOwog
ICAgIEVYUEVDVF9UUlVFKGRyYWdJbWFnZVNpemUoMCkuaXNaZXJvKCkpOwotICAgIEVYUEVDVF9G
QUxTRShzY2FsZURyYWdJbWFnZSgwLCBGbG9hdFNpemUoMC41LCAwLjUpKSk7CisgICAgRVhQRUNU
X0ZBTFNFKHNjYWxlRHJhZ0ltYWdlKDAsIEdyYXBoaWNzU2l6ZSgwLjUsIDAuNSkpKTsKICAgICBF
WFBFQ1RfRkFMU0UoZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKDAsIDAuNSkpOwogICAgIEVY
UEVDVF9GQUxTRShjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoMCkpOwogICAgIEVYUEVDVF9GQUxT
RShjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoMCkpOwpAQCAtMTE3LDcgKzExNyw3
IEBAIFRFU1QoRHJhZ0ltYWdlVGVzdCwgTm9uTnVsbEhhbmRsaW5nKQogICAgIERyYWdJbWFnZVJl
ZiBkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UodGVzdEltYWdlLmdldCgpKTsK
ICAgICBBU1NFUlRfVFJVRShkcmFnSW1hZ2UpOwogCi0gICAgZHJhZ0ltYWdlID0gc2NhbGVEcmFn
SW1hZ2UoZHJhZ0ltYWdlLCBGbG9hdFNpemUoMC41LCAwLjUpKTsKKyAgICBkcmFnSW1hZ2UgPSBz
Y2FsZURyYWdJbWFnZShkcmFnSW1hZ2UsIEdyYXBoaWNzU2l6ZSgwLjUsIDAuNSkpOwogICAgIEFT
U0VSVF9UUlVFKGRyYWdJbWFnZSk7CiAgICAgSW50U2l6ZSBzaXplID0gZHJhZ0ltYWdlU2l6ZShk
cmFnSW1hZ2UpOwogICAgIEVYUEVDVF9FUSgxLCBzaXplLndpZHRoKCkpOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxBbmltYXRvck5vbmVUZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRl
c3QuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
U2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTm9uZS5oIgogCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCkBAIC04
Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV92ZXJ0aWNhbERhdGEucmVzZXQoKTsKICAg
ICB9CiAKLSAgICBNT0NLX01FVEhPRDEoc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uLCB2
b2lkKGNvbnN0IEZsb2F0UG9pbnQmKSk7CisgICAgTU9DS19NRVRIT0QxKHNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbiwgdm9pZChjb25zdCBHcmFwaGljc1BvaW50JikpOwogfTsKIAogVEVT
VChTY3JvbGxBbmltYXRvckVuYWJsZWQsIEVuYWJsZWQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUkVDVCog
cmVjdCkKK3N0YXRpYyBHcmFwaGljc1JlY3QgUkVDVFRvR3JhcGhpY3NSZWN0KGNvbnN0IFJFQ1Qq
IHJlY3QpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+
bGVmdCksCi0gICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+dG9w
KSwKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT5yaWdodCAt
IHJlY3QtPmxlZnQpLAotICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJl
Y3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOworICAgIHJldHVybiBHcmFwaGljc1JlY3Qoc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NVbml0PihyZWN0LT5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4ocmVjdC0+dG9wKSwKKyAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4ocmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0KSwKKyAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4ocmVjdC0+Ym90dG9t
IC0gcmVjdC0+dG9wKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwKQEAgLTExOSw3ICsxMTksNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdp
biwgTm9MYXllcikKIAogICAgIC8vIFNjYWxlVHJhbnNmb3JtCiAgICAgc3JjLT5jb250ZXh0KCkt
PnNhdmUoKTsKLSAgICBzcmMtPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKDIuMCwgMC41KSk7
CisgICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEdyYXBoaWNzU2l6ZSgyLjAsIDAuNSkpOwogICAg
IHsKICAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKICAgICAgICAgaGVscGVyLmluaXQo
c3JjLT5jb250ZXh0KCksCkBAIC0xNzEsNyArMTcxLDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4s
IFdoaXRlTGF5ZXIpCiAKICAgICAvLyBTY2FsZVRyYW5zZm9ybQogICAgIHNyYy0+Y29udGV4dCgp
LT5zYXZlKCk7Ci0gICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEZsb2F0U2l6ZSgyLjAsIDAuNSkp
OworICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShHcmFwaGljc1NpemUoMi4wLCAwLjUpKTsKICAg
ICB7CiAgICAgICAgIFRyYW5zcGFyZW5jeVdpbiBoZWxwZXI7CiAgICAgICAgIGhlbHBlci5pbml0
KHNyYy0+Y29udGV4dCgpLApAQCAtMjU5LDcgKzI1OSw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2lu
LCBPcGFxdWVDb21wb3NpdGVMYXkKIAogICAgIC8vIFNjYWxlVHJhbnNmb3JtCiAgICAgc3JjLT5j
b250ZXh0KCktPnNhdmUoKTsKLSAgICBzcmMtPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKDIu
MCwgMC41KSk7CisgICAgc3JjLT5jb250ZXh0KCktPnNjYWxlKEdyYXBoaWNzU2l6ZSgyLjAsIDAu
NSkpOwogICAgIHsKICAgICAgICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKICAgICAgICAgaGVs
cGVyLmluaXQoc3JjLT5jb250ZXh0KCksCkBAIC0zMTEsMTAgKzMxMSwxMCBAQCBURVNUKFRyYW5z
cGFyZW5jeVdpbiwgT3BhcXVlQ29tcG9zaXRlTGF5CiAgICAgLy8gTWFrZSBhIHJlZCBib3R0b20g
bGF5ZXIsIGZvbGxvd2VkIGJ5IGEgaGFsZiBncmVlbiBuZXh0IGxheWVyIEAgNTAlLgogICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYp
LCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7CiAKLSAgICBGbG9hdFJlY3QgZnVsbFJlY3QoMCwgMCwg
MTYsIDE2KTsKKyAgICBHcmFwaGljc1JlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKICAgICBz
cmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHJlZCwgQ29sb3JTcGFjZURldmljZVJH
Qik7CiAgICAgc3JjLT5jb250ZXh0KCktPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMC41KTsKLSAg
ICBGbG9hdFJlY3QgcmlnaHRIYWxmKDgsIDAsIDgsIDE2KTsKKyAgICBHcmFwaGljc1JlY3Qgcmln
aHRIYWxmKDgsIDAsIDgsIDE2KTsKICAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QocmlnaHRI
YWxmLCBncmVlbiwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAgICAvLyBNYWtlIGEgdHJhbnNw
YXJlbmN5IGxheWVyIGluc2V0IGJ5IG9uZSBwaXhlbCwgYW5kIGZpbGwgaXQgaW5zZXQgYnkKQEAg
LTMyNiw3ICszMjYsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgT3BhcXVlQ29tcG9zaXRlTGF5
CiAgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwKICAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCgxLCAxLCAxNCwgMTQpKTsKIAotICAgICAgICBGbG9h
dFJlY3QgaW5uZXIoMiwgMiwgMTIsIDEyKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGlubmVyKDIs
IDIsIDEyLCAxMik7CiAgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KGlubmVyLCBD
b2xvcigweDdmMDAwMDAwKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIC8vIFRoZXNl
IGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgbGF5ZXIsIHdoaXNoIGlzIGluc2V0IGJ5
IDF4MQogICAgICAgICAvLyBwaXhlbHMgZnJvbSB0aGUgdG9wIGxlZnQuIFNvIHdlJ3JlIGFjdHVh
bGx5IGNsZWFyaW5nICgyLCAyKSBhbmQKQEAgLTM2NCw3ICszNjQsNyBAQCBURVNUKFRyYW5zcGFy
ZW5jeVdpbiwgVHJhbnNsYXRlT3BhcXVlQ29tCiAgICAgLy8gRmlsbCB3aXRoIHdoaXRlLgogICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwg
MTYpLCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7CiAgICAgQ29sb3Igd2hpdGUoMHhGRkZGRkZGRik7
Ci0gICAgRmxvYXRSZWN0IGZ1bGxSZWN0KDAsIDAsIDE2LCAxNik7CisgICAgR3JhcGhpY3NSZWN0
IGZ1bGxSZWN0KDAsIDAsIDE2LCAxNik7CiAgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGZ1
bGxSZWN0LCB3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAgICAvLyBTY3JvbGwgZG93
biBieSA4IChjb29yZGluYXRlIHN5c3RlbSBnb2VzIHVwKS4KQEAgLTM4NCw3ICszODQsNyBAQCBU
RVNUKFRyYW5zcGFyZW5jeVdpbiwgVHJhbnNsYXRlT3BhcXVlQ29tCiAKICAgICAgICAgLy8gRHJh
dyBhIHJlZCBwaXhlbCBhdCAoMTUsIDE1KS4gVGhpcyBzaG91bGQgYmUgdGhlIGF0ICgxNSwgNykg
YWZ0ZXIKICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybS4KLSAgICAgICAgRmxvYXRSZWN0IGJvdHRv
bVJpZ2h0KDE1LCAxNSwgMSwgMSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3R0b21SaWdodCgx
NSwgMTUsIDEsIDEpOwogICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChib3R0b21S
aWdodCwgZ3JlZW4sIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBoZWxwZXIuY29tcG9z
aXRlKCk7CiAgICAgfQpAQCAtNDAzLDcgKzQwMyw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBS
b3RhdGVPcGFxdWVDb21wb3MKIAogICAgIC8vIFRoZSBiYWNrZ3JvdW5kIGlzIHdoaXRlLgogICAg
IENvbG9yIHdoaXRlKDB4RkZGRkZGRkYpOwotICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAx
NiwgMTYpOworICAgIEdyYXBoaWNzUmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOwogICAgIHNy
Yy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgd2hpdGUsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogCiAgICAgLy8gUm90YXRlIHRoZSBpbWFnZSBieSA5MCBkZWdyZWVzLiBUaGlzIG1hdHJp
eCBpcyB0aGUgc2FtZSBhcwpAQCAtNDIwLDcgKzQyMCw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2lu
LCBSb3RhdGVPcGFxdWVDb21wb3MKICAgICAvLyBTaW5jZSB0aGUgcm90YXRpb24gaXMgYXBwbGll
ZCwgdGhpcyB3aWxsIGFjdHVhbGx5IGJlIGEgdmVydGljYWwgbGluZQogICAgIC8vIGRvd24gdGhl
IG1pZGRsZSBvZiB0aGUgaW1hZ2UuCiAgICAgc3JjLT5jb250ZXh0KCktPmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoMC41KTsKLSAgICBGbG9hdFJlY3QgYmxhY2tSZWN0KDAsIC05LCAxNiwgMik7Cisg
ICAgR3JhcGhpY3NSZWN0IGJsYWNrUmVjdCgwLCAtOSwgMTYsIDIpOwogICAgIENvbG9yIGJsYWNr
KDB4RkYwMDAwMDApOwogICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChibGFja1JlY3QsIGJs
YWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIApAQCAtNDgyLDEwICs0ODIsMTAgQEAgVEVTVChU
cmFuc3BhcmVuY3lXaW4sIERJU0FCTEVEX1RyYW5zbGF0ZQogCiAgICAgLy8gVGhlIGJhY2tncm91
bmQgaXMgd2hpdGUgb24gdG9wIHdpdGggcmVkIG9uIGJvdHRvbS4KICAgICBDb2xvciB3aGl0ZSgw
eEZGRkZGRkZGKTsKLSAgICBGbG9hdFJlY3QgdG9wUmVjdCgwLCAwLCAxNiwgOCk7CisgICAgR3Jh
cGhpY3NSZWN0IHRvcFJlY3QoMCwgMCwgMTYsIDgpOwogICAgIHNyYy0+Y29udGV4dCgpLT5maWxs
UmVjdCh0b3BSZWN0LCB3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgQ29sb3IgcmVk
KDB4RkZGRjAwMDApOwotICAgIEZsb2F0UmVjdCBib3R0b21SZWN0KDAsIDgsIDE2LCA4KTsKKyAg
ICBHcmFwaGljc1JlY3QgYm90dG9tUmVjdCgwLCA4LCAxNiwgOCk7CiAgICAgc3JjLT5jb250ZXh0
KCktPmZpbGxSZWN0KGJvdHRvbVJlY3QsIHJlZCwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAg
ICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOwpAQCAtNTI3LDcgKzUyNyw3IEBAIFRFU1QoVHJhbnNw
YXJlbmN5V2luLCBTY2FsZSkKIHsKICAgICAvLyBDcmVhdGUgYW4gb3BhcXVlIHdoaXRlIGJ1ZmZl
ci4KICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHNyYyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNp
emUoMTYsIDE2KSwgQ29sb3JTcGFjZURldmljZVJHQikpOwotICAgIEZsb2F0UmVjdCBmdWxsQnVm
ZmVyKDAsIDAsIDE2LCAxNik7CisgICAgR3JhcGhpY3NSZWN0IGZ1bGxCdWZmZXIoMCwgMCwgMTYs
IDE2KTsKICAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbEJ1ZmZlciwgQ29sb3I6Ondo
aXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIC8vIFNjYWxlIGJ5IDJ4LgpAQCAtNTgw
LDEzICs1ODAsMTMgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlVHJhbnNwYXJlbmN5KQog
ewogICAgIC8vIENyZWF0ZSBhbiBvcGFxdWUgd2hpdGUgYnVmZmVyLgogICAgIE93blB0cjxJbWFn
ZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYpLCBDb2xvclNw
YWNlRGV2aWNlUkdCKSk7Ci0gICAgRmxvYXRSZWN0IGZ1bGxCdWZmZXIoMCwgMCwgMTYsIDE2KTsK
KyAgICBHcmFwaGljc1JlY3QgZnVsbEJ1ZmZlcigwLCAwLCAxNiwgMTYpOwogICAgIHNyYy0+Y29u
dGV4dCgpLT5maWxsUmVjdChmdWxsQnVmZmVyLCBDb2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogCiAgICAgLy8gTWFrZSBhbm90aGVyIGxheWVyICh3aGljaCBkdXBsaWNhdGVzIGhv
dyBXZWJLaXQgd2lsbCBtYWtlIHRoaXMpLiBXZSBmaWxsCiAgICAgLy8gdGhlIHRvcCBoYWxmIHdp
dGggcmVkLCBhbmQgaGF2ZSB0aGUgbGF5ZXIgYmUgNTAlIG9wYXF1ZS4KICAgICBzcmMtPmNvbnRl
eHQoKS0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigwLjUpOwotICAgIEZsb2F0UmVjdCB0b3BIYWxm
KDAsIDAsIDE2LCA4KTsKKyAgICBHcmFwaGljc1JlY3QgdG9wSGFsZigwLCAwLCAxNiwgOCk7CiAg
ICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KHRvcEhhbGYsIENvbG9yKDB4RkZGRjAwMDApLCBD
b2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIC8vIFNjYWxlIGJ5IDJ4LgpAQCAtNjUyLDcgKzY1
Miw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBUZXh0KQogCiAgICAgICAgIC8vIFdyaXRlIHNl
dmVyYWwgZGlmZmVyZW50IHNxdWFyZXMgdG8gc2ltdWxhdGUgQ2xlYXJUeXBlLiBUaGVzZSBzaG91
bGQKICAgICAgICAgLy8gYWxsIHJlZHVjZSB0byAyLzMgY292ZXJhZ2UuCi0gICAgICAgIEZsb2F0
UmVjdCBwaXhlbCgwLCAwLCAxLCAxKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHBpeGVsKDAsIDAs
IDEsIDEpOwogICAgICAgICBoZWxwZXIuY29udGV4dCgpLT5maWxsUmVjdChwaXhlbCwgMHhGRkZG
MDAwMCwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIHBpeGVsLm1vdmUoMS4wZiwgMC4w
Zik7CiAgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KHBpeGVsLCAweEZGMDBGRjAw
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCShyZXZpc2lvbiA5MTAyOCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVy
VGVzdCwgc3luY1NpbXBsZVRyZQogICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKSk7CiAKICAgICAvLyBQaWNrIHNvbWUgcmFuZG9tIHByb3BlcnRpZXMg
dG8gc2V0LiBUaGUgdmFsdWVzIGFyZSBub3QgaW1wb3J0YW50LCB3ZSdyZSBqdXN0IHRlc3Rpbmcg
dGhhdCBhdCBsZWFzdCBzb21lIHByb3BlcnRpZXMgYXJlIG1ha2luZyBpdCB0aHJvdWdoLgotICAg
IEZsb2F0UG9pbnQgcm9vdFBvc2l0aW9uID0gRmxvYXRQb2ludCgyLjMsIDcuNCk7CisgICAgR3Jh
cGhpY3NQb2ludCByb290UG9zaXRpb24gPSBHcmFwaGljc1BvaW50KDIuMywgNy40KTsKICAgICBs
YXllclRyZWVSb290LT5zZXRQb3NpdGlvbihyb290UG9zaXRpb24pOwogCiAgICAgZmxvYXQgZmly
c3RDaGlsZE9wYWNpdHkgPSAwLjI1OwpAQCAtMTcxLDcgKzE3MSw3IEBAIFRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmUKICAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChs
YXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOwogCiAgICAgLy8gQ2hl
Y2sgdGhhdCB0aGUgcHJvcGVydHkgdmFsdWVzIHdlIHNldCBvbiB0aGUgTGF5ZXJDaHJvbWl1bSB0
cmVlIGFyZSByZWZsZWN0ZWQgaW4gdGhlIENDTGF5ZXJJbXBsIHRyZWUuCi0gICAgRmxvYXRQb2lu
dCByb290Q0NMYXllclBvc2l0aW9uID0gY2NMYXllclRyZWVSb290LT5wb3NpdGlvbigpOworICAg
IEdyYXBoaWNzUG9pbnQgcm9vdENDTGF5ZXJQb3NpdGlvbiA9IGNjTGF5ZXJUcmVlUm9vdC0+cG9z
aXRpb24oKTsKICAgICBFWFBFQ1RfRVEocm9vdFBvc2l0aW9uLngoKSwgcm9vdENDTGF5ZXJQb3Np
dGlvbi54KCkpOwogICAgIEVYUEVDVF9FUShyb290UG9zaXRpb24ueSgpLCByb290Q0NMYXllclBv
c2l0aW9uLnkoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFi
c3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1Vu
aXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFz
ZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMg
NjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50RWZsOjp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbDo6
c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRFZmw6OnBhZ2VS
ZWN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaDoKKyAgICAg
ICAgKiBld2svZXdrX3ByaXZhdGUuaDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAg
ICAgICAoZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZSk6CisgICAgICAgIChld2tfdmlld19w
YWdlX3JlY3RfZ2V0KToKKwogMjAxMS0wNy0xMiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3
ZWJraXQub3JnPgogCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUgdXBkYXRlIHNob3VsZCBub3Qg
aW1tZWRpYXRlbHkgZmFpbCB3aGVuIHJlYWNoaW5nIHBlci1vcmlnaW4gcXVvdGEKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZs
LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAj
aW5jbHVkZSAiRVdlYktpdC5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAi
RmlsZUljb25Mb2FkZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpAQCAtOTcsMTcgKzk3
LDE3IEBAIHZvaWQgQ2hyb21lQ2xpZW50RWZsOjpmb2N1c2VkRnJhbWVDaGFuZ2UKIHsKIH0KIAot
RmxvYXRSZWN0IENocm9tZUNsaWVudEVmbDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgQ2hy
b21lQ2xpZW50RWZsOjp3aW5kb3dSZWN0KCkKIHsKICAgICBFY29yZV9FdmFzKiBlZSA9IDA7CiAg
ICAgaW50IHgsIHksIHcsIGg7CiAKICAgICBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQo
ZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7CiAgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9n
ZXQoZWUsICZ4LCAmeSwgJncsICZoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHgsIHksIHcsIGgp
OworICAgIHJldHVybiBHcmFwaGljc1JlY3QoeCwgeSwgdywgaCk7CiB9CiAKLXZvaWQgQ2hyb21l
Q2xpZW50RWZsOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgQ2hy
b21lQ2xpZW50RWZsOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAoIWV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19nZXQo
bV92aWV3KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgQ2hyb21l
Q2xpZW50RWZsOjpzZXRXaW5kb3dSZWN0KGNvbnMKICAgICBlY29yZV9ldmFzX3Jlc2l6ZShlZSwg
aW50cmVjdC53aWR0aCgpLCBpbnRyZWN0LmhlaWdodCgpKTsKIH0KIAotRmxvYXRSZWN0IENocm9t
ZUNsaWVudEVmbDo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudEVmbDo6cGFn
ZVJlY3QoKQogewogICAgIHJldHVybiBld2tfdmlld19wYWdlX3JlY3RfZ2V0KG1fdmlldyk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRFZmwuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTAgKzQwLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVkKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBGbG9hdFJl
Y3Qgd2luZG93UmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKTsKIAot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3QgcGFnZVJlY3QoKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3
ICsxNzUsNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjCiAKIHZv
aWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nv
b3JkIHcsIEV2YXNfQ29vcmQgaCk7CiAKLVdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdl
X3JlY3RfZ2V0KEV2YXNfT2JqZWN0ICpvKTsKK1dlYkNvcmU6OkdyYXBoaWNzUmVjdCBld2tfdmll
d19wYWdlX3JlY3RfZ2V0KEV2YXNfT2JqZWN0ICpvKTsKIAogY29uc3QgY2hhciogZXdrX3NldHRp
bmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9nZXQodm9pZCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a192aWV3LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzA4LDcgKzMzMDgsNyBAQCB2b2lkIGV3
a192aWV3X3BhaW50X2NvbnRleHRfc2NhbGUoRXdrX1ZpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oY3R4dCk7CiAKLSAgICBjdHh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6RmxvYXRT
aXplKHNjYWxlX3gsIHNjYWxlX3kpKTsKKyAgICBjdHh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6R3Jh
cGhpY3NTaXplKHNjYWxlX3gsIHNjYWxlX3kpKTsKIH0KIAogLyoqCkBAIC00NDczLDcgKzQ0NzMs
NyBAQCB2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzCiAgKgogICogQHJl
dHVybiBwYWdlIHNpemUuCiAgKi8KLVdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3Jl
Y3RfZ2V0KEV2YXNfT2JqZWN0ICpvKQorV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGV3a192aWV3X3Bh
Z2VfcmVjdF9nZXQoRXZhc19PYmplY3QgKm8pCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNk
KTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxl
dml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUg
YW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNz
ZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFu
Z2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cg
cGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhl
c2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xp
ZW50OjpwYWdlUmVjdCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNw
cDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6cGFnZU51bWJlckZvckVsZW1l
bnRCeUlkKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQYWdl
c0ZvckZyYW1lKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwOgorICAgICAg
ICAoYmVnaW5fcHJpbnRfY2FsbGJhY2spOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmF3KToKKwogMjAxMS0wNy0xNCAgTHVr
YXN6IFNsYWNoY2lhayAgPGwuc2xhY2hjaWFrQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gOTEwMjgpCisr
KyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIK
ICNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3RrVXRpbGl0aWVzLmgiCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaHJv
bWVEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xp
ZW50Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3Qo
KQogewogICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RL
X1dJREdFVChtX3dlYlZpZXcpKTsKICAgICBpZiAoZ3RrX3dpZGdldF9pc190b3BsZXZlbCh3aW5k
b3cpKSB7CkBAIC05NywxMCArOTcsMTAgQEAgRmxvYXRSZWN0IENocm9tZUNsaWVudDo6d2luZG93
UmVjdCgpCiAgICAgICAgIGd0a193aW5kb3dfZ2V0X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLCAm
d2lkdGgsICZoZWlnaHQpOwogICAgICAgICByZXR1cm4gSW50UmVjdChsZWZ0LCB0b3AsIHdpZHRo
LCBoZWlnaHQpOwogICAgIH0KLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIENocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVjdCBpbnRyZWN0ID0gSW50UmVjdChy
ZWN0KTsKICAgICBXZWJLaXRXZWJXaW5kb3dGZWF0dXJlcyogd2ViV2luZG93RmVhdHVyZXMgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19mZWF0dXJlcyhtX3dlYlZpZXcpOwpAQCAtMTI2LDcg
KzEyNiw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEYKICAgICB9
CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBD
aHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKIHsKICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247
CiAjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwgMTgsIDApCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICAg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAg
ICAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAg
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgICAgIHZpcnR1
YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAKICAgICAgICAgdmlydHVhbCBm
bG9hdCBzY2FsZUZhY3RvcigpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBA
IGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnBhZ2VOdW1iZXIKICAgICBFbGVtZW50KiBj
b3JlRWxlbWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoQXRvbWlj
U3RyaW5nKGlkKSk7CiAgICAgaWYgKCFjb3JlRWxlbWVudCkKICAgICAgICAgcmV0dXJuIC0xOwot
ICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGNvcmVFbGVtZW50
LCBGbG9hdFNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgcmV0dXJuIFByaW50Q29u
dGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoY29yZUVsZW1lbnQsIEdyYXBoaWNzU2l6ZShwYWdl
V2lkdGgsIHBhZ2VIZWlnaHQpKTsKIH0KIAogLyoqCkBAIC0yNzUsNyArMjc1LDcgQEAgaW50IER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bnVtYmVyT2ZQYQogICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBh
Z2VzKGNvcmVGcmFtZSwgRmxvYXRTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkpOworICAgIHJl
dHVybiBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZyYW1lLCBHcmFwaGljc1NpemUo
cGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CiB9CiAKIC8qKgpJbmRleDogU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgdm9pZCBiZWdpbl9wcmludF9jYWxsYmFjayhHdGtQcmlu
CiAKICAgICBmbG9hdCB3aWR0aCA9IGd0a19wcmludF9jb250ZXh0X2dldF93aWR0aChjb250ZXh0
KTsKICAgICBmbG9hdCBoZWlnaHQgPSBndGtfcHJpbnRfY29udGV4dF9nZXRfaGVpZ2h0KGNvbnRl
eHQpOwotICAgIEZsb2F0UmVjdCBwcmludFJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgd2lkdGgsIGhl
aWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHByaW50UmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCB3
aWR0aCwgaGVpZ2h0KTsKIAogICAgIHByaW50Q29udGV4dC0+YmVnaW4od2lkdGgpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2Vi
X3ZpZXdfZHJhdyhHdGsKICAgICAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwogICAgICAgICBp
ZiAoIXJlY3RMaXN0LT5zdGF0dXMgJiYgcmVjdExpc3QtPm51bV9yZWN0YW5nbGVzID4gMCkgewog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0TGlzdC0+bnVtX3JlY3RhbmdsZXM7
IGkrKykKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9h
dFJlY3QocmVjdExpc3QtPnJlY3RhbmdsZXNbaV0pKSk7CisgICAgICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0KHJlY3RMaXN0LT5yZWN0YW5nbGVz
W2ldKSkpOwogICAgICAgICB9CiAgICAgICAgIHBhaW50V2ViVmlldyhmcmFtZSwgcHJpdi0+dHJh
bnNwYXJlbnQsIGdjLCByZWN0LCByZWN0cyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFpa3Uv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2
aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBh
bmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3Nl
cyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5n
ZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBw
bGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVz
ZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6c2V0V2luZG93UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWVDbGllbnRIYWlrdTo6cGFnZVJlY3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEhhaWt1Lmg6CisKIDIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAg
PGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBz
aG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3Rh
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsMjEgKzYxLDIxIEBAIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmNocm9tZURlc3Ry
b3llZCgKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhhaWt1
OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENocm9tZUNsaWVudEhhaWt1
OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotRmxvYXRSZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZWN0KCkKK0dy
YXBoaWNzUmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVjdCgpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIDIwMCwgMjAwKTsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NSZWN0KDAsIDAsIDIwMCwgMjAwKTsKIH0KIAotRmxvYXRSZWN0IENocm9t
ZUNsaWVudEhhaWt1OjpwYWdlUmVjdCgpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50SGFpa3U6
OnBhZ2VSZWN0KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJl
Y3QoMCwgMCwgMjAwLCAyMDApOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoMCwgMCwgMjAwLCAy
MDApOwogfQogCiBmbG9hdCBDaHJvbWVDbGllbnRIYWlrdTo6c2NhbGVGYWN0b3IoKQpJbmRleDog
U291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50SGFpa3UuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICsz
MCwxMiBAQAogI2RlZmluZSBDaHJvbWVDbGllbnRIYWlrdV9oCiAKICNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJSZWZDb3VudGVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xhc3MgUGFn
ZTsKICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKIApAQCAtNDYsMTAgKzQ2LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgp
OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0g
ICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBw
YWdlUmVjdCgpOworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAg
ICAgICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApJbmRleDogU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0wNy0xNCAgTGV2aSBXZWludHJhdWIgIDxs
ZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVuYW1lIEZsb2F0UmVjdC9Qb2ludC9TaXpl
IGFuZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcgdGhlIEZsb2F0KiBncmFwaGljcyBjbGFz
c2VzIHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFjdGlvbiB3aGljaCBjdXJyZW50bHkgY2hh
bmdlcyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJvbSBGbG9hdCB0byBDR0Zsb2F0IG9uIENH
IHBsYXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNzIHVzZSA2NGJpdCBmbG9hdHMgZm9yIHRo
ZXNlIG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0
eS4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgtW1dl
YkZyYW1lIHBhZ2VOdW1iZXJGb3JFbGVtZW50OmVsZW1lbnQ6cGFnZVdpZHRoSW5QaXhlbHM6XSk6
CisgICAgICAgICgtW1dlYkZyYW1lIG51bWJlck9mUGFnZXM6cGFnZVdpZHRoSW5QaXhlbHM6XSk6
CisgICAgICAgICgtW1dlYkZyYW1lIHByaW50VG9DR0NvbnRleHQ6Y2dDb250ZXh0OnBhZ2VXaWR0
aEluUGl4ZWxzOl0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06Cisg
ICAgICAgICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6YWxsb3dp
bmdGb250U21vb3RoaW5nOl0pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25Q
YW5lbC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbToKKyAg
ICAgICAgKENvcnJlY3Rpb25QYW5lbDo6c2hvdyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAg
ICAgKFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGll
bnQ6OnBhZ2VSZWN0KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxpZ2h0
UmVjdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFdlYktpdC5vcmRlcjoKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY29tcHV0ZVBh
Z2VSZWN0c1dpdGhQcmludFNjYWxlRmFjdG9yOnBhZ2VTaXplOl0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9iZWdpblByaW50TW9k
ZVdpdGhQYWdlV2lkdGg6aGVpZ2h0OnNocmlua1RvRml0Ol0pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBfYmVnaW5TY3JlZW5QYWdpbmF0aW9uTW9kZVdpdGhQYWdlU2l6ZTpzaHJpbmtUb0ZpdDpd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOmhlaWdo
dDptYXhpbXVtU2hyaW5rUmF0aW86YWRqdXN0aW5nVmlld1NpemU6XSk6CisgICAgICAgICgtW1dl
YkhUTUxWaWV3IHNlbGVjdGlvblRleHRSZWN0c10pOgorICAgICAgICAqIFdlYlZpZXcvV2ViUmVu
ZGVyTm9kZS5tbToKKyAgICAgICAgKGNvcHlSZW5kZXJOb2RlKToKKwogMjAxMS0wNy0xMyAgSm9z
ZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIEltcHJvdmUgbmFt
ZXMgb2Ygc29tZSBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSBhY2Nlc3NvciBtZXRob2RzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJLaXQub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViS2l0Lm9yZGVyCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYktpdC5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMTY3NCw4ICsxNjc0LDggQEAgX19a
TjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnREMUV2CiAtW1dlYkZyYW1lVmlldyBfc2Ny
b2xsTGluZUhvcml6b250YWxseTpdCiAtW1dlYkZyYW1lVmlldyBfaG9yaXpvbnRhbEtleWJvYXJk
U2Nyb2xsRGlzdGFuY2VdCiAtW1dlYkZyYW1lVmlldyBfc2Nyb2xsSG9yaXpvbnRhbGx5Qnk6XQot
X19aTjE1V2ViRWRpdG9yQ2xpZW50MTlzaG93Q29ycmVjdGlvblBhbmVsRU43V2ViQ29yZTE5Q29y
cmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVFUktOUzBfOUZsb2F0UmVjdEVSS04zV1RGNlN0cmlu
Z0VTOV9SS05TNl82VmVjdG9ySVM3X0xtMEVFRQotX19aTjE1Q29ycmVjdGlvblBhbmVsNHNob3dF
UDdXZWJWaWV3TjdXZWJDb3JlMTlDb3JyZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TMl85
RmxvYXRSZWN0RVJLTjNXVEY2U3RyaW5nRVNCX1JLTlM4XzZWZWN0b3JJUzlfTG0wRUVFCitfX1pO
MTVXZWJFZGl0b3JDbGllbnQxOXNob3dDb3JyZWN0aW9uUGFuZWxFTjdXZWJDb3JlMTlDb3JyZWN0
aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TMF8xMkdyYXBoaWNzUmVjdEVSS04zV1RGNlN0cmlu
Z0VTOV9SS05TNl82VmVjdG9ySVM3X0xtMEVFRQorX19aTjE1Q29ycmVjdGlvblBhbmVsNHNob3dF
UDdXZWJWaWV3TjdXZWJDb3JlMTlDb3JyZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TMl8x
MkdyYXBoaWNzUmVjdEVSS04zV1RGNlN0cmluZ0VTQl9SS05TOF82VmVjdG9ySVM5X0xtMEVFRQog
X19fc2hvd19ibG9ja19pbnZva2VfMQogX19aTjE1Q29ycmVjdGlvblBhbmVsMjVoYW5kbGVBY2Nl
cHRlZFJlcGxhY2VtZW50RVA4TlNTdHJpbmdTMV9TMV9sCiAtW1dlYlZpZXcoV2ViVmlld1RleHRD
aGVja2luZykgaGFuZGxlQ29ycmVjdGlvblBhbmVsUmVzdWx0Ol0KQEAgLTE3MDQsOSArMTcwNCw5
IEBAIF9fX3JlcXVlc3RDaGVja2luZ09mU3RyaW5nX2Jsb2NrX2ludm9rZV8KIC1bV2ViRWRpdG9y
U3BlbGxDaGVja1Jlc3BvbmRlciBwZXJmb3JtXQogLVtXZWJFZGl0b3JTcGVsbENoZWNrUmVzcG9u
ZGVyIC5jeHhfZGVzdHJ1Y3RdCiBfX19kZXN0cm95X2hlbHBlcl9ibG9ja18xCi1fX1pOMTVXZWJD
aHJvbWVDbGllbnQxOWN1c3RvbUhpZ2hsaWdodFJlY3RFUE43V2ViQ29yZTROb2RlRVJLTjNXVEYx
MkF0b21pY1N0cmluZ0VSS05TMF85RmxvYXRSZWN0RQorX19aTjE1V2ViQ2hyb21lQ2xpZW50MTlj
dXN0b21IaWdobGlnaHRSZWN0RVBON1dlYkNvcmU0Tm9kZUVSS04zV1RGMTJBdG9taWNTdHJpbmdF
UktOUzBfMTJHcmFwaGljc1JlY3RFCiAtW1dlYkhUTUxWaWV3KFdlYkludGVybmFsKSBfaGlnaGxp
Z2h0ZXJGb3JUeXBlOl0KLV9fWk4xNVdlYkNocm9tZUNsaWVudDIwcGFpbnRDdXN0b21IaWdobGln
aHRFUE43V2ViQ29yZTROb2RlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSS05TMF85RmxvYXRSZWN0
RVM5X2JiCitfX1pOMTVXZWJDaHJvbWVDbGllbnQyMHBhaW50Q3VzdG9tSGlnaGxpZ2h0RVBON1dl
YkNvcmU0Tm9kZUVSS04zV1RGMTJBdG9taWNTdHJpbmdFUktOUzBfMTJHcmFwaGljc1JlY3RFUzlf
YmIKIC1bV2ViVmlldyhXZWJQZW5kaW5nUHVibGljKSBmaW5kU3RyaW5nOm9wdGlvbnM6XQogX19a
TDEwZmluZFN0cmluZ1A2TlNWaWV3UDhOU1N0cmluZ20KIC1bV2ViSFRNTFZpZXcoV2ViRG9jdW1l
bnRJbnRlcm5hbFByb3RvY29scykgX2ZpbmRTdHJpbmc6b3B0aW9uczpdCkBAIC0xNzkyLDcgKzE3
OTIsNyBAQCBfV0tRVE1vdmllTWF4VGltZVNlZWthYmxlCiAtW1dlYkZyYW1lIGNoaWxkRnJhbWVz
XQogLVtXZWJGcmFtZSBuYW1lXQogK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0
c0NvdW50XQotX19aTjE1V2ViQ2hyb21lQ2xpZW50MTNzZXRXaW5kb3dSZWN0RVJLTjdXZWJDb3Jl
OUZsb2F0UmVjdEUKK19fWk4xNVdlYkNocm9tZUNsaWVudDEzc2V0V2luZG93UmVjdEVSS043V2Vi
Q29yZTEyR3JhcGhpY3NSZWN0RQogLVtXZWJGcmFtZVZpZXcgc2Nyb2xsVG9CZWdpbm5pbmdPZkRv
Y3VtZW50Ol0KIC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxUb0JlZ2lubmluZ09mRG9jdW1lbnRdCiAt
W1dlYkZyYW1lVmlldyBzY3JvbGxUb0VuZE9mRG9jdW1lbnQ6XQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA5MTAyOCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI3NSwxMiArMjc1LDEyIEBAIC0gKE5TU3RyaW5nICopY291bnRlclZhbHVlRm9yRWxlbWVu
dDooRE8KIAogLSAoaW50KXBhZ2VOdW1iZXJGb3JFbGVtZW50OihET01FbGVtZW50KillbGVtZW50
OihmbG9hdClwYWdlV2lkdGhJblBpeGVsczooZmxvYXQpcGFnZUhlaWdodEluUGl4ZWxzCiB7Ci0g
ICAgcmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoY29yZShlbGVtZW50
KSwgRmxvYXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKKyAg
ICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChjb3JlKGVsZW1lbnQp
LCBHcmFwaGljc1NpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwog
fQogCiAtIChpbnQpbnVtYmVyT2ZQYWdlczooZmxvYXQpcGFnZVdpZHRoSW5QaXhlbHM6KGZsb2F0
KXBhZ2VIZWlnaHRJblBpeGVscwogewotICAgIHJldHVybiBQcmludENvbnRleHQ6Om51bWJlck9m
UGFnZXMoX3ByaXZhdGUtPmNvcmVGcmFtZSwgRmxvYXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBw
YWdlSGVpZ2h0SW5QaXhlbHMpKTsKKyAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBh
Z2VzKF9wcml2YXRlLT5jb3JlRnJhbWUsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVscywg
cGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopcGFnZVByb3BlcnR5Oihj
b25zdCBjaGFyICopcHJvcGVydHlOYW1lOihpbnQpcGFnZU51bWJlcgpAQCAtMzA1LDcgKzMwNSw3
IEBAIC0gKHZvaWQpcHJpbnRUb0NHQ29udGV4dDooQ0dDb250ZXh0UmVmKWMKICAgICAgICAgcmV0
dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOwot
ICAgIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKGNvcmVGcmFtZSwg
Z3JhcGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJ
blBpeGVscykpOworICAgIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVz
KGNvcmVGcmFtZSwgZ3JhcGhpY3NDb250ZXh0LCBHcmFwaGljc1NpemUocGFnZVdpZHRoSW5QaXhl
bHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0JKHJldmlzaW9uIDkxMDI4KQor
KysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQb2ludDooTlNQ
b2ludClwb2ludCAKICAgICAgICAgW1t0ZXh0Q29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1l
Ok5TRGV2aWNlUkdCQ29sb3JTcGFjZV0gZ2V0UmVkOiZyZWQgZ3JlZW46JmdyZWVuIGJsdWU6JmJs
dWUgYWxwaGE6JmFscGhhXTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvciht
YWtlUkdCQShyZWQgKiAyNTUsIGdyZWVuICogMjU1LCBibHVlICogMjU1LCBhbHBoYSAqIDI1NSks
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCi0gICAgICAgIHdlYkNvcmVGb250LmRyYXdUZXh0KCZn
cmFwaGljc0NvbnRleHQsIHJ1biwgRmxvYXRQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50
LnkgOiAoLTEgKiBwb2ludC55KSkpKTsKKyAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQoJmdy
YXBoaWNzQ29udGV4dCwgcnVuLCBHcmFwaGljc1BvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9p
bnQueSA6ICgtMSAqIHBvaW50LnkpKSkpOwogCiAgICAgICAgIGlmICghZmxpcHBlZCkKICAgICAg
ICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLmgJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVj
dGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgQ29ycmVj
dGlvblBhbmVsIHsKIHB1YmxpYzoKICAgICBDb3JyZWN0aW9uUGFuZWwoKTsKICAgICB+Q29ycmVj
dGlvblBhbmVsKCk7Ci0gICAgdm9pZCBzaG93KFdlYlZpZXcqLCBXZWJDb3JlOjpDb3JyZWN0aW9u
UGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdC
b3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRp
dmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZvaWQgc2hvdyhXZWJWaWV3KiwgV2ViQ29yZTo6
Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1Jl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICBTdHJpbmcgZGlzbWlzcyhX
ZWJDb3JlOjpSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKTsKICAgICBzdGF0aWMg
dm9pZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKFdlYlZpZXcqLCBOU0NvcnJlY3Rpb25S
ZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFN0cmluZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L0NvcnJlY3Rpb25QYW5lbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwubW0JKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBAIENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgp
CiAgICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJ
Z25vcmVkLCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdlYlZpZXcq
IHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBDb3JyZWN0aW9uUGFuZWw6
OnNob3coV2ViVmlldyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAg
ICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25v
cmVkLCBmYWxzZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY2hy
b21lRGVzdHJveWVkKCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qg
d2luZG93UmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdp
bmRvd1JlY3QoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHBhZ2VSZWN0KCk7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgcGFnZVJlY3QoKTsKIAogICAgIHZp
cnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApAQCAtMTI5LDEwICsxMjksMTAgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsK
IAotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2Vi
Q29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCBjdXN0b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6
OkF0b21pY1N0cmluZyYgdHlwZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
JiBsaW5lUmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFdlYkNv
cmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgdHlwZSwKLSAgICAgICAgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxp
bmVSZWN0LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGJveFJlY3QsIGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QsCiAgICAgICAgIGJvb2wgYmVoaW5k
VGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRV
SU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDkxMDI4KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxl
SWNvbkxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NSZWN0
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRU
ZXN0UmVzdWx0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ljb24uaD4KQEAgLTE1OCwyMCArMTU4LDIw
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogLy8gVGhlc2UgZnVu
Y3Rpb25zIHNjYWxlIGJldHdlZW4gd2luZG93IGFuZCBXZWJWaWV3IGNvb3JkaW5hdGVzIGJlY2F1
c2UgSmF2YVNjcmlwdC9ET00gb3BlcmF0aW9ucyAKIC8vIGFzc3VtZSB0aGF0IHRoZSBXZWJWaWV3
IGFuZCB0aGUgd2luZG93IHNoYXJlIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3lzdGVtLgogCi12b2lk
IFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJl
Y3QpCiB7CiAgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSB0b0RldmljZVNwYWNlKHJlY3QsIFttX3dl
YlZpZXcgd2luZG93XSk7CiAgICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6bV93ZWJWaWV3IHNldEZyYW1lOndpbmRvd1JlY3RdOwogfQogCi1GbG9hdFJlY3QgV2Vi
Q2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6
OndpbmRvd1JlY3QoKQogewogICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gW1ttX3dlYlZpZXcgX1VJ
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXdGcmFtZTptX3dlYlZpZXddOwogICAgIHJldHVybiB0
b1VzZXJTcGFjZSh3aW5kb3dSZWN0LCBbbV93ZWJWaWV3IHdpbmRvd10pOwogfQogCiAvLyBGSVhN
RTogV2UgbmVlZCB0byBhZGQgQVBJIGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoaXMuCi1GbG9h
dFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21l
Q2xpZW50OjpwYWdlUmVjdCgpCiB7CiAgICAgcmV0dXJuIFttX3dlYlZpZXcgZnJhbWVdOwogfQpA
QCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkYXNoYm9hcmRSZWdpb25z
Q2gKIAogI2VuZGlmCiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdo
dFJlY3QoTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBGbG9hdFJl
Y3QmIGxpbmVSZWN0KQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxp
Z2h0UmVjdChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgbGluZVJlY3QpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
CkBAIC03NTUsNyArNzU1LDcgQEAgRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3VzdG9tSGln
aGxpZwogICAgIHJldHVybiBOU1plcm9SZWN0OwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6
cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSogbm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgbGluZVJlY3QsCit2
b2lkIFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSogbm9kZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJveFJlY3QsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgbGluZVJlY3QsCiAgICAgYm9vbCBiZWhpbmRUZXh0LCBib29sIGVudGly
ZUxpbmUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV2ViQ29yZTo6U3BlbGxDaGVja2Vy
KiwgaW50LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzaywgY29uc3QgV1RGOjpTdHJpbmcm
KTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb3JyZWN0aW9uUGFuZWwo
V2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5l
bFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVu
dFN0cmluZ3MpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNzQ29ycmVjdGlvblBhbmVsKFdlYkNv
cmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHZpcnR1YWwgU3Ry
aW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3Np
bmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0J
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NjMsNyArODYzLDcgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogfQogCiAjaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVs
SW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9m
UmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJl
cGxhY2VtZW50U3RyaW5ncykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBh
bmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSBwYW5lbFR5cGUsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAgICAgbV9jb3JyZWN0
aW9uUGFuZWwuc2hvdyhtX3dlYlZpZXcsIHBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVw
bGFjZW1lbnRTdHJpbmdzKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCAtIChOU0FycmF5ICop
X2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTCiAgICAgZmxvYXQgcHJpbnRIZWlnaHQgPSByb290
LT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGFnZVNpemUuaGVpZ2h0IDog
ZG9jdW1lbnRSZWN0LmhlaWdodCgpIC8gcHJpbnRTY2FsZUZhY3RvcjsKIAogICAgIFByaW50Q29u
dGV4dCBwcmludENvbnRleHQoX3ByaXZhdGUtPmNvcmVGcmFtZSk7Ci0gICAgcHJpbnRDb250ZXh0
LmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemUoRmxvYXRTaXplKHByaW50V2lkdGgsIHByaW50
SGVpZ2h0KSwgdHJ1ZSk7CisgICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFn
ZVNpemUoR3JhcGhpY3NTaXplKHByaW50V2lkdGgsIHByaW50SGVpZ2h0KSwgdHJ1ZSk7CiAgICAg
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWdlUmVjdHMgPSBwcmludENvbnRleHQucGFnZVJlY3Rz
KCk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IHBhZ2VSZWN0cy5zaXplKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
OTAsMTIgKzkwLDEyIEBACiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRXZlbnRIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlvbkhhbmRsZXJz
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb2N1
c0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNp
bXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzUmVj
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CkBAIC0yMTQ3
LDEzICsyMTQ3LDEzIEBAIC0gKEJPT0wpX2JlZ2luUHJpbnRNb2RlV2l0aFBhZ2VXaWR0aDooZmwK
IAogICAgIGZsb2F0IHBhZ2VMb2dpY2FsV2lkdGggPSBpc0hvcml6b250YWwgPyBwYWdlV2lkdGgg
OiBwYWdlSGVpZ2h0OwogICAgIGZsb2F0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFs
ID8gcGFnZUhlaWdodCA6IHBhZ2VXaWR0aDsKLSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZShw
YWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCk7CisgICAgR3JhcGhpY3NTaXplIG1p
bkxheW91dFNpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIGZs
b2F0IG1heGltdW1TaHJpbmtSYXRpbyA9IDE7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNl
dCBqdXN0IHByaW50IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2Ug
cmVsYXlvdXQKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhZ2Ugd2lkdGguCiAgICAgaWYgKHNo
cmlua1RvRml0ICYmICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5p
c0ZyYW1lU2V0KCkpKSB7Ci0gICAgICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFn
ZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNh
bEhlaWdodCksIEZsb2F0U2l6ZShwYWdlTG9naWNhbFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRp
bmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYWdlTG9naWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1By
aW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOworICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJh
bWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxX
aWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpLCBHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCAq
IF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWln
aHQgKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKICAgICAgICAg
bWF4aW11bVNocmlua1JhdGlvID0gX1dlYkhUTUxWaWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFj
dG9yIC8gX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yOwogICAgIH0KIApA
QCAtMjE4MywxMyArMjE4MywxMyBAQCAtIChCT09MKV9iZWdpblNjcmVlblBhZ2luYXRpb25Nb2Rl
V2l0aFBhCiAKICAgICBmbG9hdCBwYWdlTG9naWNhbFdpZHRoID0gaXNIb3Jpem9udGFsID8gcGFn
ZVNpemUud2lkdGggOiBwYWdlU2l6ZS5oZWlnaHQ7CiAgICAgZmxvYXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSBpc0hvcml6b250YWwgPyBwYWdlU2l6ZS5oZWlnaHQgOiBwYWdlU2l6ZS53aWR0aDsKLSAg
ICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhl
aWdodCk7CisgICAgR3JhcGhpY3NTaXplIG1pbkxheW91dFNpemUocGFnZUxvZ2ljYWxXaWR0aCwg
cGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbyA9IDE7CiAK
ICAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhlIGxheW91dCB3
ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQKICAgICAvLyBhY2NvcmRpbmcgdG8g
dGhlIHBhZ2Ugd2lkdGguCiAgICAgaWYgKHNocmlua1RvRml0ICYmICghZnJhbWUtPmRvY3VtZW50
KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpKSB7Ci0gICAgICAgIG1pbkxh
eW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEZsb2F0U2l6ZShw
YWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEZsb2F0U2l6ZShwYWdlTG9naWNh
bFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYWdlTG9n
aWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOwor
ICAgICAgICBtaW5MYXlvdXRTaXplID0gZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRp
byhHcmFwaGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCwgcGFnZUxvZ2ljYWxIZWlnaHQpLCBHcmFw
aGljc1NpemUocGFnZUxvZ2ljYWxXaWR0aCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNo
cmlua0ZhY3RvciwgcGFnZUxvZ2ljYWxIZWlnaHQgKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmlt
dW1TaHJpbmtGYWN0b3IpKTsKICAgICAgICAgbWF4aW11bVNocmlua1JhdGlvID0gX1dlYkhUTUxW
aWV3UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yIC8gX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5p
bXVtU2hyaW5rRmFjdG9yOwogICAgIH0KIApAQCAtMzAyMiw5ICszMDIyLDkgQEAgLSAodm9pZCls
YXlvdXRUb01pbmltdW1QYWdlV2lkdGg6KGZsb2F0KQogCiAgICAgaWYgKEZyYW1lVmlldyogY29y
ZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkgewogICAgICAgICBpZiAobWluUGFnZUxvZ2ljYWxX
aWR0aCA+IDAuMCkgewotICAgICAgICAgICAgRmxvYXRTaXplIHBhZ2VTaXplKG1pblBhZ2VMb2dp
Y2FsV2lkdGgsIG1pblBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6
ZSBwYWdlU2l6ZShtaW5QYWdlTG9naWNhbFdpZHRoLCBtaW5QYWdlTG9naWNhbEhlaWdodCk7CiAg
ICAgICAgICAgICBpZiAoY29yZUZyYW1lLT5kb2N1bWVudCgpICYmIGNvcmVGcmFtZS0+ZG9jdW1l
bnQoKS0+cmVuZGVyVmlldygpICYmICFjb3JlRnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXco
KS0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBw
YWdlU2l6ZSA9IEZsb2F0U2l6ZShtaW5QYWdlTG9naWNhbEhlaWdodCwgbWluUGFnZUxvZ2ljYWxX
aWR0aCk7CisgICAgICAgICAgICAgICAgcGFnZVNpemUgPSBHcmFwaGljc1NpemUobWluUGFnZUxv
Z2ljYWxIZWlnaHQsIG1pblBhZ2VMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgY29yZVZpZXct
PmZvcmNlTGF5b3V0Rm9yUGFnaW5hdGlvbihwYWdlU2l6ZSwgbWF4aW11bVNocmlua1JhdGlvLCBh
ZGp1c3RWaWV3U2l6ZSA/IEFkanVzdFZpZXdTaXplIDogRG9Ob3RBZGp1c3RWaWV3U2l6ZSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXQoIWFkanVz
dFZpZXdTaXplKTsKQEAgLTU5NzEsNyArNTk3MSw3IEBAIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25U
ZXh0UmVjdHMKICAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKQogICAgICAgICByZXR1cm4g
bmlsOwogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gbGlzdDsKKyAgICBWZWN0b3I8R3JhcGhpY3NS
ZWN0PiBsaXN0OwogICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkKICAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+Z2V0Q2xpcHBlZFZpc2libGVUZXh0
UmVjdGFuZ2xlcyhsaXN0KTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJS
ZW5kZXJOb2RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UmVuZGVyTm9kZS5tbQkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlJlbmRlck5vZGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3Rh
dGljIFdlYlJlbmRlck5vZGUgKmNvcHlSZW5kZXJOb2RlKFJlbgogICAgIEZyYW1lKiBmcmFtZSA9
IGZyYW1lVmlldyA/IGZyYW1lVmlldy0+ZnJhbWUoKSA6IDA7CiAKICAgICAvLyBGSVhNRTogYnJv
a2VuIHdpdGggdHJhbnNmb3JtcwotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbm9kZS0+bG9jYWxU
b0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBub2Rl
LT5sb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludCgpKTsKICAgICBpbnQgeCA9IDA7CiAgICAg
aW50IHkgPSAwOwogICAgIGludCB3aWR0aCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI3IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1vdmUg
dGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNl
IGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRoZWly
CisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZvcm1z
LiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0
cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6ZHluYW1p
Y1Byb3BlcnR5Q2hhbmdlRXZlbnQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpzZXRXaW5kb3dS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0Ojp3aW5kb3dSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWVDbGllbnRRdDo6dmlzaWJsZVJlY3RGb3JUaWxlZEJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdDo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKToKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1iZXJPZlBhZ2VzKToKKwogMjAxMS0wNy0xMyAgSm9z
ZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIEltcHJvdmUgbmFt
ZXMgb2Ygc29tZSBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSBhY2Nlc3NvciBtZXRob2RzCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyMywyMSArMTIy
MywyMSBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZHluYW1pY1Byb3BlcnR5Q2hhCiAgICAgICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocS0+bWFpbkZy
YW1lKCkpOwogICAgICAgICBpZiAoIWZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBGbG9hdFNpemUga2VlcE11bHRpcGxpZXI7Ci0gICAgICAg
IEZsb2F0U2l6ZSBjb3Zlck11bHRpcGxpZXI7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBrZWVwTXVs
dGlwbGllcjsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNvdmVyTXVsdGlwbGllcjsKICAgICAgICAg
ZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCktPmdldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVy
cyhrZWVwTXVsdGlwbGllciwgY292ZXJNdWx0aXBsaWVyKTsKICAgICAgICAgUVNpemVGIHFTaXpl
ID0gcS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0b3JlS2VlcEFyZWFNdWx0aXBsaWVyIiku
dG9TaXplRigpOwotICAgICAgICBrZWVwTXVsdGlwbGllciA9IEZsb2F0U2l6ZShxU2l6ZS53aWR0
aCgpLCBxU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGtlZXBNdWx0aXBsaWVyID0gR3JhcGhpY3NT
aXplKHFTaXplLndpZHRoKCksIHFTaXplLmhlaWdodCgpKTsKICAgICAgICAgZnJhbWUtPnRpbGVk
QmFja2luZ1N0b3JlKCktPnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhrZWVwTXVsdGlw
bGllciwgY292ZXJNdWx0aXBsaWVyKTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LT5wcm9wZXJ0eU5h
bWUoKSA9PSAiX3FfVGlsZWRCYWNraW5nU3RvcmVDb3ZlckFyZWFNdWx0aXBsaWVyIikgewogICAg
ICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEtPm1h
aW5GcmFtZSgpKTsKICAgICAgICAgaWYgKCFmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRmxvYXRTaXplIGtlZXBNdWx0aXBsaWVyOwotICAg
ICAgICBGbG9hdFNpemUgY292ZXJNdWx0aXBsaWVyOworICAgICAgICBHcmFwaGljc1NpemUga2Vl
cE11bHRpcGxpZXI7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBjb3Zlck11bHRpcGxpZXI7CiAgICAg
ICAgIGZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5nZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlw
bGllcnMoa2VlcE11bHRpcGxpZXIsIGNvdmVyTXVsdGlwbGllcik7CiAgICAgICAgIFFTaXplRiBx
U2l6ZSA9IHEtPnByb3BlcnR5KCJfcV9UaWxlZEJhY2tpbmdTdG9yZUNvdmVyQXJlYU11bHRpcGxp
ZXIiKS50b1NpemVGKCk7Ci0gICAgICAgIGNvdmVyTXVsdGlwbGllciA9IEZsb2F0U2l6ZShxU2l6
ZS53aWR0aCgpLCBxU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNvdmVyTXVsdGlwbGllciA9IEdy
YXBoaWNzU2l6ZShxU2l6ZS53aWR0aCgpLCBxU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGZyYW1l
LT50aWxlZEJhY2tpbmdTdG9yZSgpLT5zZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoa2Vl
cE11bHRpcGxpZXIsIGNvdmVyTXVsdGlwbGllcik7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAko
cmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIENocm9tZUNs
aWVudFF0Ojp+Q2hyb21lQ2xpZW50UXQoKQogI2VuZGlmCiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50
UXQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBDaHJvbWVDbGll
bnRRdDo6c2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYg
KCFtX3dlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OnNldFdpbmRvd1JlY3QoY29uc3QKICAgICBsaWtlIHRvb2xiYXJzL3Nj
cm9sbGJhcnMgZXRjLiBJdCBpcyB1c2VkIGJ5IHRoZSB2aWV3cG9ydCBtZXRhIHRhZyBhcyB3ZWxs
IGFzCiAgICAgYnkgdGhlIERPTSBXaW5kb3cgb2JqZWN0OiBvdXRlckhlaWdodCgpLCBvdXRlcldp
ZHRoKCksIHNjcmVlblgoKSwgc2NyZWVuWSgpLgogKi8KLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRR
dDo6d2luZG93UmVjdCgpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50UXQ6OndpbmRvd1JlY3Qo
KQogewogICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCkpCi0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogICAgIHJldHVybiBwbGF0
Zm9ybVBhZ2VDbGllbnQoKS0+d2luZG93UmVjdCgpOwogfQogCkBAIC0xMzksMTEgKzEzOSwxMSBA
QCBib29sIENocm9tZUNsaWVudFF0OjphbGxvd3NBY2NlbGVyYXRlZENvCiAgICAgcmV0dXJuIHBs
YXRmb3JtUGFnZUNsaWVudCgpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CiB9CiAK
LUZsb2F0UmVjdCBDaHJvbWVDbGllbnRRdDo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9t
ZUNsaWVudFF0OjpwYWdlUmVjdCgpCiB7CiAgICAgaWYgKCFtX3dlYlBhZ2UpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KFFSZWN0RihRUG9pbnRGKDAs
IDApLCBtX3dlYlBhZ2UtPnZpZXdwb3J0U2l6ZSgpKSk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KFFSZWN0RihRUG9pbnRGKDAsIDApLCBt
X3dlYlBhZ2UtPnZpZXdwb3J0U2l6ZSgpKSk7CiB9CiAKIGZsb2F0IENocm9tZUNsaWVudFF0Ojpz
Y2FsZUZhY3RvcigpCkBAIC02NjcsNyArNjY3LDcgQEAgSW50UmVjdCBDaHJvbWVDbGllbnRRdDo6
dmlzaWJsZVJlY3RGb3JUaQogICAgIGlmICghcGxhdGZvcm1QYWdlQ2xpZW50KCktPnZpZXdSZXNp
emVzVG9Db250ZW50c0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFFSZWN0KG1fd2ViUGFnZS0+
bWFpbkZyYW1lKCktPnNjcm9sbFBvc2l0aW9uKCksIG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmdl
b21ldHJ5KCkuc2l6ZSgpKTsKIAotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVj
dChwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+Z3JhcGhpY3NJdGVtVmlzaWJsZVJlY3QoKSkpOworICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVjdChwbGF0Zm9ybVBhZ2VDbGllbnQo
KS0+Z3JhcGhpY3NJdGVtVmlzaWJsZVJlY3QoKSkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlz
aW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjZGVmaW5lIENocm9tZUNs
aWVudFF0X2gKIAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlF0UGxhdGZvcm1QbHVnaW4uaCIKQEAg
LTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWxlQ2hvb3NlcjsK
IGNsYXNzIEZpbGVJY29uTG9hZGVyOwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NS
ZWN0OwogY2xhc3MgUGFnZTsKIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogY2xhc3MgUXRBYnN0
cmFjdFdlYlBvcHVwOwpAQCAtNjMsMTAgKzYzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgY2hyb21lRGVzdHJveWVkKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQqIHdlYlZpZXcoKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VS
ZWN0KCk7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcGFnZVJlY3QoKTsKIAogICAgIHZpcnR1
YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJKHJl
dmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw3ICs0MzEsNyBAQCBp
bnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnBhZ2VOdW1iZXJGCiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVt
YmVyRm9yRWxlbWVudChlbGVtZW50LCBGbG9hdFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIHJl
dHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEdyYXBoaWNz
U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKIGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6
bnVtYmVyT2ZQYWdlcyhRV2ViRnJhbWUqIGZyYW1lLCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KQpAQCAtNDQwLDcgKzQ0MCw3IEBAIGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVy
T2ZQYWcKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0
dXJuIFByaW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CisgICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3Jl
RnJhbWUsIEdyYXBoaWNzU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKIC8vIFN1c3BlbmQgYWN0
aXZlIERPTSBvYmplY3RzIGluIHRoaXMgZnJhbWUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZp
c2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDM4IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1v
dmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8g
dXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRo
ZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZv
cm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2Jq
ZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgICogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHA6CisgICAgICAgIChIVURTbGlk
ZXI6OmRyYXcpOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6TGF5ZXJDbGll
bnQ6OnBsYXRmb3JtQ0FMYXllckxheW91dFN1YmxheWVyc09mTGF5ZXIpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGll
bnQ6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0
KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QpOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDaHJvbWVDbGll
bnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpw
YWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6CisgICAgICAgIChXZWJGcmFtZTo6cGFnZU51bWJl
ckZvckVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkZyYW1lOjpudW1iZXJPZlBhZ2VzKToKKyAg
ICAgICAgKFdlYkZyYW1lOjpzZXRQcmludGluZyk6CisgICAgICAgIChXZWJGcmFtZTo6c2V0SW5Q
cmludGluZ01vZGUpOgorICAgICAgICAoV2ViRnJhbWU6OmZyYW1lQm91bmRzKToKKyAgICAgICAg
KiBXZWJLaXRHcmFwaGljcy5jcHA6CisgICAgICAgIChXZWJEcmF3VGV4dCk6CisgICAgICAgICog
V2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QpOgorCiAy
MDExLTA3LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQXBwbGljYXRpb25DYWNoZSB1cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBmYWlsIHdo
ZW4gcmVhY2hpbmcgcGVyLW9yaWdpbiBxdW90YQpJbmRleDogU291cmNlL1dlYktpdC93aW4vRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93
aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291
cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIEhVRFNsaWRlcjo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGNvCiAgICAgfQogCiAgICAgLy8gRHJhdyBhIGRpYW1vbmQKLSAgICBGbG9hdFBvaW50IHBv
aW50c1s0XTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1s0XTsKICAgICBmbG9hdCBoYWxmID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fYnV0dG9uU2l6ZSkgLyAyOwogICAgIHBvaW50c1swXS5zZXRY
KG1fcmVjdC5sb2NhdGlvbigpLngoKSArIG1fYnV0dG9uUG9zaXRpb24gKyBoYWxmKTsKICAgICBw
b2ludHNbMF0uc2V0WShtX3JlY3QubG9jYXRpb24oKS55KCkpOwpAQCAtMjA5LDkgKzIwOSw5IEBA
IHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6TGF5ZXJDbGkKICAgICBpZiAoIXZpZGVv
TGF5ZXIgfHwgdmlkZW9MYXllci0+c3VwZXJsYXllcigpICE9IGxheWVyKQogICAgICAgICByZXR1
cm47CiAKLSAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAg
R3JhcGhpY3NSZWN0IGxheWVyQm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwogCi0gICAgRmxvYXRT
aXplIHZpZGVvU2l6ZSA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCktPm5hdHVyYWxTaXplKCk7Cisg
ICAgR3JhcGhpY3NTaXplIHZpZGVvU2l6ZSA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCktPm5hdHVy
YWxTaXplKCk7CiAgICAgZmxvYXQgc2NhbGVGYWN0b3I7CiAgICAgaWYgKHZpZGVvU2l6ZS5hc3Bl
Y3RSYXRpbygpID4gbGF5ZXJCb3VuZHMuc2l6ZSgpLmFzcGVjdFJhdGlvKCkpCiAgICAgICAgIHNj
YWxlRmFjdG9yID0gbGF5ZXJCb3VuZHMud2lkdGgoKSAvIHZpZGVvU2l6ZS53aWR0aCgpOwpAQCAt
MjIwLDExICsyMjAsMTEgQEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpMYXllckNs
aQogICAgIHZpZGVvU2l6ZS5zY2FsZShzY2FsZUZhY3Rvcik7CiAKICAgICAvLyBDYWxjdWxhdGUg
dGhlIGNlbnRlcmVkIHBvc2l0aW9uIGJhc2VkIG9uIHRoZSB2aWRlb0JvdW5kcyBhbmQgbGF5ZXJC
b3VuZHM6Ci0gICAgRmxvYXRQb2ludCB2aWRlb1Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQgdmlk
ZW9PcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCB2aWRlb1Bvc2l0aW9uOworICAgIEdyYXBoaWNz
UG9pbnQgdmlkZW9PcmlnaW47CiAgICAgdmlkZW9PcmlnaW4uc2V0WCgobGF5ZXJCb3VuZHMud2lk
dGgoKSAtIHZpZGVvU2l6ZS53aWR0aCgpKSAqIDAuNSk7CiAgICAgdmlkZW9PcmlnaW4uc2V0WSgo
bGF5ZXJCb3VuZHMuaGVpZ2h0KCkgLSB2aWRlb1NpemUuaGVpZ2h0KCkpICogMC41KTsKLSAgICB2
aWRlb0xheWVyLT5zZXRGcmFtZShGbG9hdFJlY3QodmlkZW9PcmlnaW4sIHZpZGVvU2l6ZSkpOwor
ICAgIHZpZGVvTGF5ZXItPnNldEZyYW1lKEdyYXBoaWNzUmVjdCh2aWRlb09yaWdpbiwgdmlkZW9T
aXplKSk7CiB9CiAjZW5kaWYgCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTAsNyArMzUwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6
cGFpbgogICAgIGdjLnNhdmUoKTsKICAgICBMT05HIHdpZHRoID0gcmVjdC5yaWdodCAtIHJlY3Qu
bGVmdDsKICAgICBMT05HIGhlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Ci0gICAgRmxv
YXRSZWN0IGRpcnR5UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgZGlydHlSZWN0OwogICAgIGRpcnR5
UmVjdC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgZGlydHlSZWN0LnNldEhlaWdodChoZWlnaHQpOwog
ICAgIGdjLmNsaXAoZGlydHlSZWN0KTsKQEAgLTkyNyw3ICs5MjcsNyBAQCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFdlYkZyYW1lOjpwYWdlCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGNvcmVG
cmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoY29yZUlkKTsKICAgICBpZiAoIWVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7Ci0gICAgKnJlc3VsdCA9IFByaW50Q29udGV4dDo6
cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgRmxvYXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxz
LCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKKyAgICAqcmVzdWx0ID0gUHJpbnRDb250ZXh0OjpwYWdl
TnVtYmVyRm9yRWxlbWVudChlbGVtZW50LCBHcmFwaGljc1NpemUocGFnZVdpZHRoSW5QaXhlbHMs
IHBhZ2VIZWlnaHRJblBpeGVscykpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC05NDMsNyAr
OTQzLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6bnVtYgogICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgKnJlc3VsdCA9IFBy
aW50Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEZsb2F0U2l6ZShwYWdlV2lkdGhJ
blBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CisgICAgKnJlc3VsdCA9IFByaW50Q29udGV4
dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVs
cywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTIwMTQs
NyArMjAxNCw3IEBAIHZvaWQgV2ViRnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcKIHsK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsKICAgICBBU1NFUlQoY29yZUZyYW1l
KTsKLSAgICBjb3JlRnJhbWUtPnNldFByaW50aW5nKHByaW50aW5nLCBGbG9hdFNpemUobWluUGFn
ZVdpZHRoLCBtaW5QYWdlSGVpZ2h0KSwgbWF4aW11bVNocmlua1JhdGlvLCBhZGp1c3RWaWV3U2l6
ZSA/IEFkanVzdFZpZXdTaXplIDogRG9Ob3RBZGp1c3RWaWV3U2l6ZSk7CisgICAgY29yZUZyYW1l
LT5zZXRQcmludGluZyhwcmludGluZywgR3JhcGhpY3NTaXplKG1pblBhZ2VXaWR0aCwgbWluUGFn
ZUhlaWdodCksIG1heGltdW1TaHJpbmtSYXRpbywgYWRqdXN0Vmlld1NpemUgPyBBZGp1c3RWaWV3
U2l6ZSA6IERvTm90QWRqdXN0Vmlld1NpemUpOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYkZyYW1lOjpzZXRJblByaW50aW5nTW9kZSggCkBAIC0yMDMyLDcgKzIwMzIsNyBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpzZXRJCiAKICAgICAvLyBJZiB3ZSBh
cmUgYSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVu
LCBvdGhlcndpc2UgcmVsYXlvdXQKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhcGVyIHNpemUK
LSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6ZSgwLjAsIDAuMCk7CisgICAgR3JhcGhpY3NTaXpl
IG1pbkxheW91dFNpemUoMC4wLCAwLjApOwogICAgIGlmIChtX2luUHJpbnRpbmdNb2RlICYmICFj
b3JlRnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKSkgewogICAgICAgICBpZiAoIXByaW50
REMpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA0Niw3ICsyMDQ2
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJGcmFtZTo6c2V0SQogICAgICAgICBp
bnQgcGFwZXJWZXJ0aWNhbFBpeGVsc1BlckluY2ggPSA6OkdldERldmljZUNhcHMocHJpbnREQywg
TE9HUElYRUxTWSk7CiAgICAgICAgIGludCBwYXBlckhlaWdodCA9IHByaW50UmVjdC5oZWlnaHQo
KSAqIGRlc2lyZWRQaXhlbHNQZXJJbmNoIC8gcGFwZXJWZXJ0aWNhbFBpeGVsc1BlckluY2g7CiAg
ICAgICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwotICAgICAgICBtaW5MYXlvdXRT
aXplID0gY29yZUZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oRmxvYXRTaXplKHBh
cGVyV2lkdGgsIHBhcGVySGVpZ2h0KSwgRmxvYXRTaXplKHBhcGVyV2lkdGggKiBQcmludGluZ01p
bmltdW1TaHJpbmtGYWN0b3IsIHBhcGVySGVpZ2h0ICogUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFj
dG9yKSk7CisgICAgICAgIG1pbkxheW91dFNpemUgPSBjb3JlRnJhbWUtPnJlc2l6ZVBhZ2VSZWN0
c0tlZXBpbmdSYXRpbyhHcmFwaGljc1NpemUocGFwZXJXaWR0aCwgcGFwZXJIZWlnaHQpLCBHcmFw
aGljc1NpemUocGFwZXJXaWR0aCAqIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciwgcGFwZXJI
ZWlnaHQgKiBQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IpKTsKICAgICB9CiAKICAgICBzZXRQ
cmludGluZyhtX2luUHJpbnRpbmdNb2RlLCBtaW5MYXlvdXRTaXplLndpZHRoKCksIG1pbkxheW91
dFNpemUuaGVpZ2h0KCksIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciAvIFByaW50aW5nTWlu
aW11bVNocmlua0ZhY3RvciwgdHJ1ZSk7CkBAIC0yNTQwLDcgKzI1NDAsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpmcmFtCiAgICAgaWYgKCF2aWV3KQogICAgICAgICBy
ZXR1cm4gRV9GQUlMOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHZpZXctPnZpc2libGVDb250
ZW50UmVjdCh0cnVlKTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRzID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KHRydWUpOwogICAgIHJlc3VsdC0+Ym90dG9tID0gKExPTkcpIGJvdW5kcy5oZWln
aHQoKTsKICAgICByZXN1bHQtPnJpZ2h0ID0gKExPTkcpIGJvdW5kcy53aWR0aCgpOwogICAgIHJl
dHVybiBTX09LOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViS2l0R3JhcGhpY3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFdlYkRyYXdUZXh0KFdlYlRleHRSZW5k
ZXJJbmZvKiBpbmZvCiAgICAgICAgIC8vIFNldCBzaGFkb3cgc2V0dGluZwogICAgICAgICBpZiAo
aW5mby0+c3RydWN0U2l6ZSA9PSBzaXplb2YoV2ViVGV4dFJlbmRlckluZm8pICYmCiAgICAgICAg
ICAgICAoaW5mby0+c2hhZG93T2Zmc2V0LmN4IHx8IGluZm8tPnNoYWRvd09mZnNldC5jeSB8fCBp
bmZvLT5zaGFkb3dCbHVyIHx8IGluZm8tPnNoYWRvd0NvbG9yKSkKLSAgICAgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KEZsb2F0U2l6ZShpbmZvLT5zaGFkb3dPZmZzZXQuY3gsIGluZm8tPnNoYWRv
d09mZnNldC5jeSksIGluZm8tPnNoYWRvd0JsdXIsIGluZm8tPnNoYWRvd0NvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KEdyYXBoaWNzU2l6
ZShpbmZvLT5zaGFkb3dPZmZzZXQuY3gsIGluZm8tPnNoYWRvd09mZnNldC5jeSksIGluZm8tPnNo
YWRvd0JsdXIsIGluZm8tPnNoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAg
ICAgICBXZWJDb3JlRHJhd1RleHRBdFBvaW50KGNvbnRleHQsIGRyYXdTdHJpbmcsIGluZm8tPnB0
LCBtYWtlRm9udCgqKGluZm8tPmRlc2NyaXB0aW9uKSksIGluZm8tPmNvbG9yLCBpbmZvLT51bmRl
cmxpbmVkSW5kZXgpOwogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dl
YlZpZXcuY3BwCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDEwLDcgKzUwMTAsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OnZpc2liCiB7CiAgICAgaWYgKCFyZWN0KQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudCA9IG1fcGFnZS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0
IHZpc2libGVDb250ZW50ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoKTsKICAgICByZWN0LT5sZWZ0ID0gKExPTkcpIHZpc2libGVDb250ZW50LngoKTsK
ICAgICByZWN0LT50b3AgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueSgpOwogICAgIHJlY3QtPnJp
Z2h0ID0gKExPTkcpIHZpc2libGVDb250ZW50Lm1heFgoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNp
b24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GaWxlSWNvbkxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OmNocm9tZURlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAg
ICBJV2ViVUlEZWxlZ2F0ZSogdWlEZWxlZ2F0ZSA9IDA7CiAgICAgaWYgKFNVQ0NFRURFRChtX3dl
YlZpZXctPnVpRGVsZWdhdGUoJnVpRGVsZWdhdGUpKSkgewpAQCAtOTUsNyArOTUsNyBAQCB2b2lk
IFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zCiAgICAgfQogfQogCi1GbG9hdFJl
Y3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVD
bGllbnQ6OndpbmRvd1JlY3QoKQogewogICAgIElXZWJVSURlbGVnYXRlKiB1aURlbGVnYXRlID0g
MDsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxlZ2F0ZSgmdWlEZWxlZ2F0ZSkp
KSB7CkBAIC0xMDgsMTAgKzEwOCwxMCBAQCBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5k
b3dSZWN0KCkKICAgICAgICAgICAgIHJldHVybiByZWN0OwogICAgIH0KIAotICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLUZsb2F0UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6
OnBhZ2VSZWN0KCkKIHsKICAgICBSRUNUIHJlY3Q7CiAgICAgbV93ZWJWaWV3LT5mcmFtZVJlY3Qo
JnJlY3QpOwpAQCAtNjQ5LDcgKzY0OSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwb3B1bGF0
ZVZpc2l0ZWRMaW4KICAgICBoaXN0b3J5LT5hZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91cChtX3dl
YlZpZXctPnBhZ2UoKS0+Z3JvdXAoKSk7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWlu
dEN1c3RvbVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSwgCitib29sIFdlYkNocm9tZUNsaWVu
dDo6cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTdGF0ZSBz
dGF0ZSwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSwgZmxvYXQgcHJv
cG9ydGlvbiwgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIHBhcnRzKQogewpAQCAtNzE3LDcgKzcx
Nyw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGIKICAgICByZXR1
cm4gU1VDQ0VFREVEKGhyKTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9t
U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlm
IChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMCArNDQsMTAgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAgICAgCi0gICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBo
aWNzUmVjdCBwYWdlUmVjdCgpOwogICAgIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3Io
KTsKIApAQCAtMTMwLDEwICsxMzAsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBv
cHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21TY3Jv
bGxiYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUsIAorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEN1c3RvbVNjcm9sbGJhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc1JlY3QmLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJv
bFN0YXRlLCBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0LCBib29sIHZlcnRpY2Fs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBm
bG9hdCBwcm9wb3J0aW9uLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sUGFydE1hc2spOwotICAg
IHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbENvcm5lcihXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDdXN0b21TY3JvbGxDb3JuZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdl
YkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwogICAgIHZp
cnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mLCBX
ZWJDb3JlOjpGaWxlSWNvbkxvYWRlciopOwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA5
MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2luY2x1ZGUgPFdl
YkNvcmUvQlN0cmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVj
dG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvd2luY2UvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTAyOCkKKysrIFNvdXJjZS9XZWJLaXQv
d2luY2UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDct
MTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFt
ZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRo
ZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rp
b24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20g
RmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1
c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRXaW5DRS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdpbkNFOjp3
aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNldFdpbmRv
d1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6cGFnZVJlY3QpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6CisKIDIwMTEtMDct
MTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBBcHBs
aWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFj
aGluZyBwZXItb3JpZ2luIHF1b3RhCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcAkocmV2aXNpb24gOTEw
MjgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdp
bkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjIgKzUwLDIyIEBAIHZvaWQgQ2hyb21lQ2xp
ZW50V2luQ0U6OmNocm9tZURlc3Ryb3llZCgKICAgICBkZWxldGUgdGhpczsKIH0KIAotRmxvYXRS
ZWN0IENocm9tZUNsaWVudFdpbkNFOjp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVD
bGllbnRXaW5DRTo6d2luZG93UmVjdCgpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAg
ICAgUkVDVCByZWN0OwogICAgIG1fd2ViVmlldy0+ZnJhbWVSZWN0KCZyZWN0KTsKICAgICByZXR1
cm4gcmVjdDsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0V2luZG93UmVjdChjb25z
dCBGbG9hdFJlY3QmKQordm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0V2luZG93UmVjdChjb25z
dCBHcmFwaGljc1JlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVj
dCBDaHJvbWVDbGllbnRXaW5DRTo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVu
dFdpbkNFOjpwYWdlUmVjdCgpCiB7CiAgICAgcmV0dXJuIHdpbmRvd1JlY3QoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2luQ0UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmgJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC93aW5jZS9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCAr
MzgsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCBwYWdlUmVjdCgpOwogCiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjgpCisrKyBTb3VyY2UvV2ViS2l0L3d4L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTA3LTE0ICBMZXZp
IFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRS
ZWN0L1BvaW50L1NpemUgYW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQq
IGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNo
IGN1cnJlbnRseSBjaGFuZ2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRv
IENHRmxvYXQgb24gQ0cgcGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0
IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5l
dyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAod3hX
ZWJGcmFtZVByaW50b3V0OjpJbml0aWFsaXplV2l0aFBhZ2VTaXplKToKKyAgICAgICAgKiBXZWJL
aXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudFd4OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4
Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjpwYWdlUmVj
dCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oOgorCiAyMDExLTA3
LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXBw
bGljYXRpb25DYWNoZSB1cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBmYWlsIHdoZW4gcmVh
Y2hpbmcgcGVyLW9yaWdpbiBxdW90YQpJbmRleDogU291cmNlL1dlYktpdC93eC9XZWJGcmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93eC9XZWJGcmFtZS5jcHAJKHJldmlzaW9u
IDkxMDI4KQorKysgU291cmNlL1dlYktpdC93eC9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50V3guaCIKQEAgLTEyMiw3
ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpbnRDb250ZXh0LmJlZ2luKG1fcGFnZVdp
ZHRoKTsKICAgICAgICAgCiAgICAgICAgIGZsb2F0IHBhZ2VIZWlnaHQgPSBwYWdlUmVjdC5oZWln
aHQ7Ci0gICAgICAgIG1fcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMoV2ViQ29yZTo6Rmxv
YXRSZWN0KHBhZ2VSZWN0KSwgLyogaGVhZGVySGVpZ2h0ICovIDAsIC8qIGZvb3RlckhlaWdodCAq
LyAwLCAvKiB1c2VyU2NhbGVGYWN0b3IgKi8gMS4wLCBwYWdlSGVpZ2h0KTsKKyAgICAgICAgbV9w
cmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0cyhXZWJDb3JlOjpHcmFwaGljc1JlY3QocGFnZVJl
Y3QpLCAvKiBoZWFkZXJIZWlnaHQgKi8gMCwgLyogZm9vdGVySGVpZ2h0ICovIDAsIC8qIHVzZXJT
Y2FsZUZhY3RvciAqLyAxLjAsIHBhZ2VIZWlnaHQpOwogICAgIH0KICAgICAKICAgICB2b2lkIE9u
QmVnaW5QcmludGluZygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hy
b21lQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRl
ICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVx
dWVzdC5oIgogI2luY2x1ZGUgIkljb24uaCIKQEAgLTkwLDIxICs5MCwyMSBAQCB2b2lkIENocm9t
ZUNsaWVudFd4OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgQ2hyb21lQ2xpZW50V3g6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikKK3Zv
aWQgQ2hyb21lQ2xpZW50V3g6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50V3g6Ondp
bmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudFd4Ojp3aW5kb3dSZWN0KCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRXeDo6cGFnZVJl
Y3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudFd4OjpwYWdlUmVjdCgpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOwogfQogCiBmbG9hdCBDaHJvbWVDbGllbnRXeDo6c2NhbGVGYWN0b3IoKQpJbmRl
eDogU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJ
KHJldmlzaW9uIDkxMDI4KQorKysgU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9t
ZUNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCiAgICAgdmlydHVhbCB2b2lkKiB3
ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3Qo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAKLSAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7
CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100894</attachid>
            <date>2011-07-14 16:37:56 -0700</date>
            <delta_ts>2011-07-15 10:57:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64413-20110714163754.patch</filename>
            <type>text/plain</type>
            <size>1896492</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3Qv
UG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3Jh
cGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3Vy
cmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dG
bG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxv
YXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1
bmN0aW9uYWxpdHkuCisKIDIwMTEtMDctMTQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IFNob3VsZCBub3QgZGlzcGF0Y2ggZGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0IGZvciB0aGUgaW5pdGlhbCBlbXB0eSBkb2N1bWVudApJbmRl
eDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNTYsMTEgKzEwNTYsNiBAQCBTRVQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
dGV4dFNoYWRvdy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFF1YWQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGF0YS5jcHAKQEAgLTEwNzMsNiArMTA2OCwxMSBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
UmVjdC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDc1LDE2ICsyNDc1
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9hcm0vRkVMaWdodGluZ05FT04uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UmVjdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEJhc2VsaW5lLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIFwKQEAgLTI1MjEsNiArMjUxMSwxNiBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1BvaW50M0QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1BvaW50M0QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQ
b2ludC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9p
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmggXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1NpemUuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlczNELmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCBfX1pOM1dURjZTdHJpbmdDMUVQOE5TU3RyaW5n
CiBfX1pOM1dURjZTdHJpbmdDMUVQSzEwX19DRlN0cmluZwogX19aTjdXZWJDb3JlMTBDcmVkZW50
aWFsQzFFUktOM1dURjZTdHJpbmdFUzRfTlNfMjFDcmVkZW50aWFsUGVyc2lzdGVuY2VFCiBfX1pO
N1dlYkNvcmUxMENyZWRlbnRpYWxDMUV2Ci1fX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05T
XzhJbnRQb2ludEUKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEMxRVJLTlNfOEludFBvaW50
RQogX19aTjdXZWJDb3JlMTBKU0RvY3VtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEw
SWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk43V2Vi
Q29yZTEwSlNEb2N1bWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnQ2Y3JlYXRl
RVJLTjNXVEYxMkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVS
S05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RWlOUzVfSU5TXzROb2RlRUVFCkBAIC0yMjAsOSArMjIw
LDkgQEAgX19aTjdXZWJDb3JlMTFtZW1vcnlDYWNoZUV2CiBfX1pON1dlYkNvcmUxMXN0YXJ0T2ZX
b3JkRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfOUVXb3JkU2lkZUUKIF9fWk43V2ViQ29yZTEx
dG9Vc2VyU3BhY2VFUks3X05TUmVjdFA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTExd3JpdGVUb0Zp
bGVFaVBLY2kKLV9fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbVNjcm9sbGJh
ckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RU5TXzIwU2Nyb2xsYmFyQ29u
dHJvbFNpemVFak5TXzEzU2Nyb2xsYmFyUGFydEViZmZqCitfX1pON1dlYkNvcmUxMkNocm9tZUNs
aWVudDIwcGFpbnRDdXN0b21TY3JvbGxiYXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJH
cmFwaGljc1JlY3RFTlNfMjBTY3JvbGxiYXJDb250cm9sU2l6ZUVqTlNfMTNTY3JvbGxiYXJQYXJ0
RWJmZmoKIF9fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjNwYWludEN1c3RvbU92ZXJoYW5nQXJl
YUVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEVTNV9TNV8KLV9fWk43V2ViQ29y
ZTEyQ2hyb21lQ2xpZW50MjNwYWludEN1c3RvbVNjcm9sbENvcm5lckVQTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTJDaHJvbWVDbGllbnQyM3BhaW50
Q3VzdG9tU2Nyb2xsQ29ybmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NS
ZWN0RQogX19aTjdXZWJDb3JlMTJFZGl0aW5nU3R5bGVEMUV2CiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjEwbW91c2VNb3ZlZEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MTBtb3VzZU1vdmVkRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCkBAIC0yNjUsMTQgKzI2NSwx
NCBAQCBfX1pON1dlYkNvcmUxMkljb25EYXRhYmFzZUMxRXYKIF9fWk43V2ViQ29yZTEySlNET01X
cmFwcGVyMzR2aXJ0dWFsRnVuY3Rpb25Ub1ByZXZlbnRXZWFrVnRhYmxlRXYKIF9fWk43V2ViQ29y
ZTEyUG9wdXBNZW51TWFjQzFFUE5TXzE1UG9wdXBNZW51Q2xpZW50RQogX19aTjdXZWJDb3JlMTJQ
cmludENvbnRleHQxMnBhZ2VQcm9wZXJ0eUVQTlNfNUZyYW1lRVBLY2kKLV9fWk43V2ViQ29yZTEy
UHJpbnRDb250ZXh0MTNudW1iZXJPZlBhZ2VzRVBOU181RnJhbWVFUktOU185RmxvYXRTaXplRQot
X19aTjdXZWJDb3JlMTJQcmludENvbnRleHQxNmNvbXB1dGVQYWdlUmVjdHNFUktOU185RmxvYXRS
ZWN0RWZmZlJmYgorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQxM251bWJlck9mUGFnZXNFUE5T
XzVGcmFtZUVSS05TXzEyR3JhcGhpY3NTaXplRQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQx
NmNvbXB1dGVQYWdlUmVjdHNFUktOU18xMkdyYXBoaWNzUmVjdEVmZmZSZmIKIF9fWk43V2ViQ29y
ZTEyUHJpbnRDb250ZXh0MTZpc1BhZ2VCb3hWaXNpYmxlRVBOU181RnJhbWVFaQotX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHQyMHBhZ2VOdW1iZXJGb3JFbGVtZW50RVBOU183RWxlbWVudEVSS05T
XzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDIwcGFnZU51bWJlckZvckVs
ZW1lbnRFUE5TXzdFbGVtZW50RVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmUxMlBy
aW50Q29udGV4dDI2cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHNFUE5TXzVGcmFtZUVpaWlpaWlp
Ci1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDI3Y29tcHV0ZUF1dG9tYXRpY1NjYWxlRmFjdG9y
RVJLTlNfOUZsb2F0U2l6ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjdzcG9vbEFsbFBh
Z2VzV2l0aEJvdW5kYXJpZXNFUE5TXzVGcmFtZUVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185
RmxvYXRTaXplRQotX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQyOGNvbXB1dGVQYWdlUmVjdHNX
aXRoUGFnZVNpemVFUktOU185RmxvYXRTaXplRWIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0
Mjdjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3JFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43
V2ViQ29yZTEyUHJpbnRDb250ZXh0MjdzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXNFUE5TXzVG
cmFtZUVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzU2l6ZUUKK19fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplRVJLTlNfMTJH
cmFwaGljc1NpemVFYgogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQzZW5kRXYKIF9fWk43V2Vi
Q29yZTEyUHJpbnRDb250ZXh0NWJlZ2luRWZmCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlz
cG9vbFBhZ2VFUk5TXzE1R3JhcGhpY3NDb250ZXh0RWlmCkBAIC0zMjUsNyArMzI1LDcgQEAgX19a
TjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDlfX0NGRXJybwogX19aTjdXZWJDb3JlMTNUeXBp
bmdDb21tYW5kMzlpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnRFUE5TXzhE
b2N1bWVudEUKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU180Tm9kZUUKIF9fWk43V2ViQ29yZTEzZGlyZWN0b3J5
TmFtZUVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTEzdG9EZXZpY2VTcGFjZUVSS05TXzlG
bG9hdFJlY3RFUDhOU1dpbmRvdworX19aTjdXZWJDb3JlMTN0b0RldmljZVNwYWNlRVJLTlNfMTJH
cmFwaGljc1JlY3RFUDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18y
MUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pT
QzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBO
U18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpAQCAtNDA5LDE2ICs0MDksMTYgQEAgX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQyMXNldENvbXBvcwogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQyMmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJFZgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQ0Y2xpcEVSS05TXzRQYXRoRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xp
cEVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05T
XzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRzYXZlRXYKLV9fWk43
V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NXNjYWxlRVJLTlNfOUZsb2F0U2l6ZUUKK19fWk43V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0NXNjYWxlRVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDdyZXN0b3JlRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0OGZpbGxQYXRoRVJLTlNfNFBhdGhFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Y2xlYXJSZWN0RVJLTlNfOUZsb2F0UmVjdEUK
K19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGljc1Jl
Y3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhp
Y3NSZWN0RVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0OWNsZWFyUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNf
OEludFBvaW50RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDlzZXRTaGFkb3dFUktOU185RmxvYXRTaXplRWZSS05TXzVDb2xvckVOU18xMENvbG9y
U3BhY2VFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlzZXRTaGFkb3dFUktOU18xMkdy
YXBoaWNzU2l6ZUVmUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQ5dHJhbnNsYXRlRWZmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dEMxRVA5Q0dDb250ZXh0CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dEQxRXYKQEAgLTQ4
OSw3ICs0ODksNyBAQCBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kCiBf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCiBfX1pON1dlYkNvcmUx
NmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLN19O
U1JlY3QKLV9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCitf
X1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43
V2ViQ29yZTE2aXNFbmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRp
dGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3JlMTZzdGFydE9mUGFyYWdyYXBo
RVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVF
CiBfX1pON1dlYkNvcmUxN0NyZWRlbnRpYWxTdG9yYWdlMjRnZXRGcm9tUGVyc2lzdGVudFN0b3Jh
Z2VFUktOU18xNVByb3RlY3Rpb25TcGFjZUUKQEAgLTcxNiw3ICs3MTYsNyBAQCBfX1pON1dlYkNv
cmU0UGFnZTlnb0ZvcndhcmRFdgogX19aTjdXZWJDb3JlNFBhZ2U5aW5pdEdyb3VwRXYKIF9fWk43
V2ViQ29yZTRQYWdlQzFFUk5TMF8xMVBhZ2VDbGllbnRzRQogX19aTjdXZWJDb3JlNFBhZ2VEMUV2
Ci1fX1pON1dlYkNvcmU0UGF0aDE0YWRkUm91bmRlZFJlY3RFUktOU185RmxvYXRSZWN0RVJLTlNf
OUZsb2F0U2l6ZUUKK19fWk43V2ViQ29yZTRQYXRoMTRhZGRSb3VuZGVkUmVjdEVSS05TXzEyR3Jh
cGhpY3NSZWN0RVJLTlNfMTJHcmFwaGljc1NpemVFCiBfX1pON1dlYkNvcmU0UGF0aEMxRXYKIF9f
Wk43V2ViQ29yZTRQYXRoRDFFdgogX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0aW9u
U3BhY2UKQEAgLTczNCw3ICs3MzQsNyBAQCBfX1pON1dlYkNvcmU1RnJhbWUxN3NldFRleHRab29t
RmFjdG9yRWYKIF9fWk43V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnRFUktO
U184SW50UG9pbnRFCiBfX1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdhaW5zdEVsZW1l
bnRFUDdOU0FycmF5UE5TXzdFbGVtZW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVzZXRQYWdlQW5k
VGV4dFpvb21GYWN0b3JzRWZmCi1fX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tl
ZXBpbmdSYXRpb0VSS05TXzlGbG9hdFNpemVFUzNfCitfX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6
ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05TXzEyR3JhcGhpY3NTaXplRVMzXwogX19aTjdXZWJD
b3JlNUZyYW1lMjhzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50RVA3TlNBcnJheVBOU183RWxl
bWVudEVQbVBiCiBfX1pON1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFIVE1M
RnJhbWVPd25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCiBfX1pON1dlYkNvcmU1
RnJhbWU3c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVFCkBAIC04MjQs
NyArODI0LDcgQEAgX19aTjdXZWJDb3JlN0VsZW1lbnQxNnJlbW92ZVNoYWRvd1Jvb3RFdgogX19a
TjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgogX19aTjdXZWJDb3JlN0ludFJlY3Q1dW5pdGVFUktT
MF8KIF9fWk43V2ViQ29yZTdJbnRSZWN0OWludGVyc2VjdEVSS1MwXwotX19aTjdXZWJDb3JlN0lu
dFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmU3SW50UmVjdEMxRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU3SW50U2l6ZUMxRVJLN19OU1NpemUKIF9fWk43V2Vi
Q29yZTdUZXh0UnVuMTlhbGxvd3NSb3VuZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVu
MjFzX2FsbG93c1JvdW5kaW5nSGFja3NFCkBAIC04NTAsNyArODUwLDcgQEAgX19aTjdXZWJDb3Jl
OERvY3VtZW50NGhlYWRFdgogX19aTjdXZWJDb3JlOEZvcm1EYXRhNmNyZWF0ZUVQS3ZtCiBfX1pO
N1dlYkNvcmU4Rm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmU4R3JhZGllbnQxMmFkZENvbG9yU3Rv
cEVmUktOU181Q29sb3JFCi1fX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2lu
dEVTM18KK19fWk43V2ViQ29yZThHcmFkaWVudEMxRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzXwog
X19aTjdXZWJDb3JlOEludFBvaW50QzFFUks4X05TUG9pbnQKIF9fWk43V2ViQ29yZThQb3NpdGlv
bkMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaU5TMF8xMEFuY2hvclR5cGVFCiBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKQEAgLTkyOSw5ICs5MjksOSBAQCBf
X1pON1dlYkNvcmU4b3BlbkZpbGVFUktOM1dURjZTdHJpbmdFTlNfCiBfX1pON1dlYkNvcmU4dG9T
dHJpbmdFUktOM1dURjZWZWN0b3JJTlNfMTFQcm94eVNlcnZlckVMbTBFRUUKIF9fWk43V2ViQ29y
ZTlET01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNv
cmU5RE9NV2luZG93MzZkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHNFdgotX19a
TjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLN19OU1JlY3QKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RD
MUVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVF
CitfX1pON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEMxRVJLN19OU1JlY3QKK19fWk43V2ViQ29yZTEy
R3JhcGhpY3NSZWN0QzFFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NTaXpl
QzFFUktOU183SW50U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRF
dgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKIF9fWk43
V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCkBAIC05NTMsNyArOTUz
LDcgQEAgX19aTjdXZWJDb3JlOUZyYW1lVmlldzIwZW50ZXJDb21wb3NpdGluZwogX19aTjdXZWJD
b3JlOUZyYW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcGFpbnRzRXYKIF9fWk43V2ViQ29yZTlGcmFt
ZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW5kQ29sb3JFUktOU181Q29sb3JFCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjN1cGRhdGVDYW5IYXZlU2Nyb2xsYmFyc0V2Ci1fX1pON1dlYkNvcmU5RnJhbWVW
aWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU185RmxvYXRTaXplRWZOU18xOUFkanVz
dFZpZXdTaXplT3JOb3RFCitfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjRmb3JjZUxheW91dEZvclBh
Z2luYXRpb25FUktOU18xMkdyYXBoaWNzU2l6ZUVmTlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzI2YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWRFUGZmZmYK
IF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyOXNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuRWIK
IF9fWk43V2ViQ29yZTlGcmFtZVZpZXczN3VwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1
cnNpdmVFdgpAQCAtMTAzNyw3ICsxMDM3LDcgQEAgX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDEx
cGVyc2lzdGVuY2VFdgogX19aTks3V2ViQ29yZTEwQ3JlZGVudGlhbDR1c2VyRXYKIF9fWk5LN1dl
YkNvcmUxMENyZWRlbnRpYWw3aXNFbXB0eUV2CiBfX1pOSzdXZWJDb3JlMTBDcmVkZW50aWFsOHBh
c3N3b3JkRXYKLV9fWk5LN1dlYkNvcmUxMEZsb2F0UG9pbnRjdjhfTlNQb2ludEV2CitfX1pOSzdX
ZWJDb3JlMTNHcmFwaGljc1BvaW50Y3Y4X05TUG9pbnRFdgogX19aTks3V2ViQ29yZTEwUGx1Z2lu
RGF0YTE2c3VwcG9ydHNNaW1lVHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk5LN1dlYkNvcmUxMFJl
bmRlclRleHQxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDlm
aXJzdFJ1blhFdgpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgX19aTks3V2ViQ29yZTEySWNvbkRhdGFi
YXNlMTJkYXRhYmFzZVBhdAogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9w
VGhyZWFkQWN0aXZpdHlFdgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2
CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKLV9fWk5LN1dl
YkNvcmUxMlJlbmRlck9iamVjdDE1bG9jYWxUb0Fic29sdXRlRVJLTlNfMTBGbG9hdFBvaW50RWJi
CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEzR3Jh
cGhpY3NQb2ludEViYgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0NHZpZXdFdgogX19aTks3
V2ViQ29yZTEyUmVuZGVyT2JqZWN0N2NoaWxkQXRFagogX19aTks3V2ViQ29yZTEyUmVuZGVyV2lk
Z2V0MTR3aW5kb3dDbGlwUmVjdEV2CkBAIC0xMTM4LDcgKzExMzgsNyBAQCBfX1pOSzdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjExY3VycmVudEZvCiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlv
bjE1Y29weVR5cGluZ1N0eWxlRXYKIF9fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMTdpc0lu
UGFzc3dvcmRGaWVsZEV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE4aXNGb2N1c2Vk
QW5kQWN0aXZlRXYKLV9fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMzFnZXRDbGlwcGVkVmlz
aWJsZVRleHRSZWN0YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUUKK19f
Wk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uMzFnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5n
bGVzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1JlY3RFTG0wRUVFCiBfX1pOSzdXZWJDb3Jl
MTRGcmFtZVNlbGVjdGlvbjZib3VuZHNFYgogX19aTks3V2ViQ29yZTE0UmVuZGVyTGlzdEl0ZW0x
MG1hcmtlclRleHRFdgogX19aTks3V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUxMGNvbm5lY3Rpb25F
dgpAQCAtMTIwOSw3ICsxMjA5LDcgQEAgX19aTks3V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFs
bGVuZ2VCYQogX19aTks3V2ViQ29yZTI3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlNWVycm9y
RXYKIF9fWk5LN1dlYkNvcmUyN0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZTZpc051bGxFdgog
X19aTks3V2ViQ29yZTRGb250NXdpZHRoRVJLTlNfN1RleHRSdW5FUE4zV1RGN0hhc2hTZXRJUEtO
U18xNFNpbXBsZUZvbnREYXRhRU5TNF83UHRySGFzaElTOF9FRU5TNF8xMEhhc2hUcmFpdHNJUzhf
RUVFRVBOU18xM0dseXBoT3ZlcmZsb3dFCi1fX1pOSzdXZWJDb3JlNEZvbnQ4ZHJhd1RleHRFUE5T
XzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWkKK19f
Wk5LN1dlYkNvcmU0Rm9udDhkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4
dFJ1bkVSS05TXzEzR3JhcGhpY3NQb2ludEVpaQogX19aTks3V2ViQ29yZTRLVVJMMTBwcm90b2Nv
bElzRVBLYwogX19aTks3V2ViQ29yZTRLVVJMMTFjcmVhdGVDRlVSTEV2CiBfX1pOSzdXZWJDb3Jl
NEtVUkwxMWlzTG9jYWxGaWxlRXYKQEAgLTEyNDUsNyArMTI0NSw3IEBAIF9fWk5LN1dlYkNvcmU1
UmFuZ2UyMWNvbXBhcmVCb3VuZGFyeVBvaW4KIF9fWk5LN1dlYkNvcmU1UmFuZ2U0dGV4dEV2CiBf
X1pOSzdXZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVSaQogX19aTks3V2ViQ29yZTVSYW5nZTlmaXJz
dE5vZGVFdgotX19aTks3V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU185
RmxvYXRRdWFkRUxtMEVFRWIKK19fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZW
ZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFYgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNy
ZWF0ZVdpbmRvd0VQTlNfNUZyYW1lRVJLTlNfMTZGcmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5k
b3dGZWF0dXJlc0VSS05TXzE2TmF2aWdhdGlvbkFjdGlvbkUKIF9fWk5LN1dlYkNvcmU2Q3Vyc29y
MTRwbGF0Zm9ybUN1cnNvckV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0RXYK
QEAgLTEzMTEsOCArMTMxMSw4IEBAIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0
ZXNwYWMKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9u
RU5TXzlFQWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUVOU18yN0Vk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU5RE9NV2luZG93MjdwZW5k
aW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgotX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMWJvdW5k
aW5nQm94RXYKLV9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0Y3Y3X05TUmVjdEV2CitfX1pOSzdXZWJD
b3JlMTJHcmFwaGljc1F1YWQxMWJvdW5kaW5nQm94RXYKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNz
UmVjdGN2N19OU1JlY3RFdgogX19aTks3V2ViQ29yZTlGcmFtZVRyZWUxMnRyYXZlcnNlTmV4dEVQ
S05TXzVGcmFtZUUKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMTRpc0Rlc2NlbmRhbnRPZkVQS05T
XzVGcmFtZUUKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVlMjB0cmF2ZXJzZU5leHRXaXRoV3JhcEVi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODEwLDExICs4MTAsNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yU3BhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
RGFzaEFycmF5LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRm9udEJhc2VsaW5lLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oJywKQEAgLTgzOCw2ICs4MzMs
MTEgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NRdWFkLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzUmVjdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1Np
emUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCcsCkBAIC0zOTQ1
LDExICszOTQ1LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hh
ZG93LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UmVjdC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
U2l6ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5jcHAnLApAQCAtMzk2NSw2ICszOTYwLDExIEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1JlY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1NpemUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCcsCkBAIC00
MDMyLDcgKzQwMzIsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvVXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nv
bnRleHRTaGFkb3dDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0RyYXdFcnJvclVuZGVybGluZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzUmVjdENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCcsCkBAIC00MDQ5LDE0ICs0MDQ5
LDE0IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25N
YXRyaXhDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9y
Q0cuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cu
Y3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
UG9pbnRDRy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
UmVjdENHLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NT
aXplQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNw
cCcsCkBAIC00Mjk2LDggKzQyOTYsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbnRQb2ludEd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9JbnRSZWN0R3RrLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Q29sb3JIYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zs
b2F0UG9pbnRIYWlrdS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0Zsb2F0UmVjdEhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udENhY2hlSGFpa3UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywKQEAgLTQzMDYsNiArNDMw
NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJl
ZU5vZGVIYWlrdS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YWRpZW50SGFpa3UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9H
cmFwaGljc0NvbnRleHRIYWlrdS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2hhaWt1L0dyYXBoaWNzUG9pbnRIYWlrdS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzUmVjdEhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvSWNvbkhhaWt1LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJEYXRhSGFpa3UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAnLApAQCAtNDMyMiw5ICs0
MzIyLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRD
b250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwJywKQEAgLTQzMzMsNiArNDMz
MCw5IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZVRyZWVO
b2RlTWFjLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0TWFjLm1tJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NQb2ludE1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzUmVjdE1hYy5tbScsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzU2l6ZU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ljb25NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1h
Yy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1t
JywKQEAgLTQzODUsOCArNDM4NSw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvQ29udGV4dFNoYWRvd1F0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRXh0ZW5zaW9uczNEUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9x
dC9FeHRlbnNpb25zM0RRdC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
bG9hdFBvaW50UXQuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9h
dFJlY3RRdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNo
ZVF0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhUXQuY3BwJywKQEAgLTQzOTksNiArNDM5Nyw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9JY29uUXQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlckRhdGFRdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcCcsCkBAIC00NDIxLDggKzQ0MjEsNiBAQAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc3BhcmVuY3lMYXll
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxv
YXRQb2ludFNraWEuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zs
b2F0UmVjdFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAnLApAQCAtNDQzMSw2ICs0NDI5LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NQb2ludFNraWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzUmVjdFNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbnRQb2ludFNraWEuY3BwJywKQEAgLTQ1NjEsNyArNDU2MSw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2ltcGxlRm9udERhdGFXaW5DRS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1dpbkNFR3JhcGhpY3NFeHRyYXMu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvQ29sb3JXeC5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVjdFd4LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy93eC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oJywK
QEAgLTQ1NzIsNiArNDU3MSw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
R2x5cGhNYXBXeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRp
ZW50V3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0Nv
bnRleHRXeC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNz
UmVjdFd4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSWNvbld4LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJEYXRhV3gu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAn
LApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTE4NywxMCArMTg3LDEwIEBAIF9f
Wk5LN1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhMTFpc1NlZ21lbnQKIF9fWk43V2ViQ29yZTlHbHlw
aFBhZ2U0ZmlsbEVqalB0alBLTlNfMTRTaW1wbGVGb250RGF0YUUKIF9fWk5LN1dlYkNvcmUxNFNp
bXBsZUZvbnREYXRhMjJwbGF0Zm9ybUJvdW5kc0ZvckdseXBoRXQKIF9fWk5LN1dlYkNvcmUxNkZv
bnRQbGF0Zm9ybURhdGE2Y3RGb250RXYKLV9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSSzZDR1Jl
Y3QKLV9fWk43V2ViQ29yZTEwRmxvYXRQb2ludEMxRVJLN0NHUG9pbnQKLV9fWk43V2ViQ29yZTlG
bG9hdFNpemVDMUVSSzZDR1NpemUKLV9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0Y3Y2Q0dSZWN0RXYK
K19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0QzFFUks2Q0dSZWN0CitfX1pON1dlYkNvcmUxM0dy
YXBoaWNzUG9pbnRDMUVSSzdDR1BvaW50CitfX1pON1dlYkNvcmUxMkdyYXBoaWNzU2l6ZUMxRVJL
NkNHU2l6ZQorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NSZWN0Y3Y2Q0dSZWN0RXYKIF9fWk43V2Vi
Q29yZTE0U2ltcGxlRm9udERhdGExN3BsYXRmb3JtR2x5cGhJbml0RXYKIF9fWk43V2ViQ29yZTE1
R2x5cGhNZXRyaWNzTWFwSWZFMThsb2NhdGVQYWdlU2xvd0Nhc2VFagogX19aTks3V2ViQ29yZTE0
U2ltcGxlRm9udERhdGEyMXBsYXRmb3JtV2lkdGhGb3JHbHlwaEV0CkBAIC0zMjAsMTYgKzMyMCwx
NiBAQCBfX1pON1dlYkNvcmUxNVN0cmluZ1RydW5jYXRvcjEzcmlnaHRUcnVuCiBfX1pON1dlYkNv
cmU4bWFrZVJHQkFFaWlpaQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxD
b2xvckVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDIwc2V0UGxhdGZvcm1GaWxsQ29sb3JFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNl
RQotX19aTks3V2ViQ29yZTRGb250OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05T
XzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQxNGRyYXdT
aW1wbGVUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWlpCitfX1pOSzdXZWJDb3JlNEZvbnQ4ZHJhd1RleHRFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWkKK19fWk5LN1dlYkNvcmU0
Rm9udDE0ZHJhd1NpbXBsZVRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5F
UktOU18xM0dyYXBoaWNzUG9pbnRFaWkKIF9fWk5LN1dlYkNvcmU0Rm9udDMzZ2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JTaW1wbGVUZXh0RVJLTlNfN1RleHRSdW5FaWlSTlNfMTFHbHlwaEJ1ZmZlckVO
UzBfMjBGb3JUZXh0RW1waGFzaXNPck5vdEUKLV9fWk43V2ViQ29yZTExR2x5cGhCdWZmZXIzYWRk
RXRQS05TXzE0U2ltcGxlRm9udERhdGFFZlBLTlNfOUZsb2F0U2l6ZUUKLV9fWk5LN1dlYkNvcmU0
Rm9udDE1ZHJhd0dseXBoQnVmZmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzExR2x5cGhC
dWZmZXJFUktOU18xMEZsb2F0UG9pbnRFCi1fX1pOSzdXZWJDb3JlNEZvbnQxMGRyYXdHbHlwaHNF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVBLTlNfMTRTaW1wbGVGb250RGF0YUVSS05TXzExR2x5cGhC
dWZmZXJFaWlSS05TXzEwRmxvYXRQb2ludEUKK19fWk43V2ViQ29yZTExR2x5cGhCdWZmZXIzYWRk
RXRQS05TXzE0U2ltcGxlRm9udERhdGFFZlBLTlNfMTJHcmFwaGljc1NpemVFCitfX1pOSzdXZWJD
b3JlNEZvbnQxNWRyYXdHbHlwaEJ1ZmZlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMUds
eXBoQnVmZmVyRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTks3V2ViQ29yZTRGb250MTBkcmF3
R2x5cGhzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVQS05TXzE0U2ltcGxlRm9udERhdGFFUktOU18x
MUdseXBoQnVmZmVyRWlpUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmU0Rm9udDE4
c2hvdWxkVXNlU21vb3RoaW5nRXYKLV9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlnZXRT
aGFkb3dFUk5TXzlGbG9hdFNpemVFUmZSTlNfNUNvbG9yRVJOU18xMENvbG9yU3BhY2VFCitfX1pO
SzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5Z2V0U2hhZG93RVJOU18xMkdyYXBoaWNzU2l6ZUVS
ZlJOU181Q29sb3JFUk5TXzEwQ29sb3JTcGFjZUUKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1dGV4dERyYXdpbmdNb2RlRXYKLV9fWk43V2ViQ29yZUwyMnNob3dHbHlwaHNXaXRoQWR2
YW5jZXNFUktOU18xMEZsb2F0UG9pbnRFUEtOU18xNFNpbXBsZUZvbnREYXRhRVA5Q0dDb250ZXh0
UEt0UEs2Q0dTaXplbQorX19aTjdXZWJDb3JlTDIyc2hvd0dseXBoc1dpdGhBZHZhbmNlc0VSS05T
XzEzR3JhcGhpY3NQb2ludEVQS05TXzE0U2ltcGxlRm9udERhdGFFUDlDR0NvbnRleHRQS3RQSzZD
R1NpemVtCiBfX1pOM1dURjZWZWN0b3JJUGNMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTks3
V2ViQ29yZTExSW1hZ2VTb3VyY2UxNmZyYW1lU2l6ZUF0SW5kZXhFbQogX19aTjdXZWJDb3JlMTVS
ZXNvdXJjZVJlcXVlc3QyM2RvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0RXYKQEAgLTE1NjQsMTAgKzE1
NjQsMTAgQEAgX19aTjdXZWJDb3JlMjZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZQogX19aTks3
V2ViQ29yZTEwU2Nyb2xsVmlldzE4dmlzaWJsZUNvbnRlbnRSZWN0RWIKIF9fWk5LN1dlYkNvcmUx
MFNjcm9sbFZpZXcyNnBsYXRmb3JtVmlzaWJsZUNvbnRlbnRSZWN0RWIKIF9fWk43V2ViQ29yZTdJ
bnRSZWN0OWludGVyc2VjdEVSS1MwXwotX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfN0lu
dFJlY3RFCi1fX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKLV9fWk43
V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJbnRTaXplRQotX19aTjdXZWJDb3JlMTZlbmNsb3Np
bmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0QzFF
UktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludEMxRVJLTlNfOEludFBv
aW50RQorX19aTjdXZWJDb3JlMTJHcmFwaGljc1NpemVDMUVSS05TXzdJbnRTaXplRQorX19aTjdX
ZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNv
cmUxMFJlbmRlclZpZXc0MXJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJz
RVJLTlNfN0ludFJlY3RFYgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyN2NhcHNMb2NrU3Rh
dGVNYXlIYXZlQ2hhbmdlZEV2CiBfX1pOSzdXZWJDb3JlOERvY3VtZW50MzJ1c2VTZWN1cmVLZXli
b2FyZEVudHJ5V2hlbkFjdGl2ZUV2CkBAIC0xODY2LDcgKzE4NjYsNyBAQCBfX1pOSzdXZWJDb3Jl
OVJlbmRlckJveDIzb3V0bGluZUJvdW5kc0ZvCiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDE3Ym9y
ZGVyQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjlhZGp1c3RSZWN0
Rm9yT3V0bGluZUFuZFNoYWRvd0VSTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJC
bG9jazIyb3V0bGluZVN0eWxlRm9yUmVwYWludEV2Ci1fX1pOSzdXZWJDb3JlOUZsb2F0UXVhZDEx
Ym91bmRpbmdCb3hFdgorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NRdWFkMTFib3VuZGluZ0JveEV2
CiBfX1pON1dlYkNvcmU5UmVuZGVyQm94MjFjb21wdXRlUmVjdEZvclJlcGFpbnRFUE5TXzIwUmVu
ZGVyQm94TW9kZWxPYmplY3RFUk5TXzdJbnRSZWN0RWIKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckJs
b2NrMTFpc0Jsb2NrRmxvd0V2CiBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcyM3JlcGFpbnRDb250
ZW50UmVjdGFuZ2xlRVJLTlNfN0ludFJlY3RFYgpAQCAtMTk1MCw3ICsxOTUwLDcgQEAgX19aTks3
V2ViQ29yZTlGcmFtZVZpZXcxOWJhc2VCYWNrZ3JvdW5kQwogX19aTks3V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MThjb21wb3NpdGVPcGVyYXRpb25FdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQyMXNldENvbXBvc2l0ZU9wZXJhdGlvbkVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQogX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyOXNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhm
aWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQorX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEVS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3Qx
OG1heGltYWxPdXRsaW5lU2l6ZUVOU18xMFBhaW50UGhhc2VFCiBfX1pOSzdXZWJDb3JlN0ludFJl
Y3QxMGludGVyc2VjdHNFUktTMF8KIF9fWk5LN1dlYkNvcmUxN1JlbmRlckxpbmVCb3hMaXN0NXBh
aW50RVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RVJOU185UGFpbnRJbmZvRWlpCkBAIC0xOTcw
LDEzICsxOTcwLDEzIEBAIF9fWk5LN1dlYkNvcmUxM0lubGluZVRleHRCb3gxOWxvZ2ljYWxPdmUK
IF9fWk5LN1dlYkNvcmU5SW5saW5lQm94MTZsb2dpY2FsRnJhbWVSZWN0RXYKIF9fWk43V2ViQ29y
ZTEzSW5saW5lVGV4dEJveDE0c2VsZWN0aW9uU3RhdGVFdgogX19aTjdXZWJDb3JlOUlubGluZUJv
eDI1bG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZ0V2Ci1fX1pON1dlYkNvcmUxM0lubGluZVRleHRC
b3gyMHBhaW50RG9jdW1lbnRNYXJrZXJzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxv
YXRQb2ludEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRGb250RWIKK19fWk43V2ViQ29yZTEzSW5s
aW5lVGV4dEJveDIwcGFpbnREb2N1bWVudE1hcmtlcnNFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfMTNHcmFwaGljc1BvaW50RVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFYgogX19aTjdX
ZWJDb3JlMjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIxNG1hcmtlcnNGb3JOb2RlRVBOU180Tm9k
ZUUKIF9fWk5LM1dURjdIYXNoTWFwSU5TXzZSZWZQdHJJTjdXZWJDb3JlNE5vZGVFRUVQTlNfNlZl
Y3RvcklOUzJfMjJSZW5kZXJlZERvY3VtZW50TWFya2VyRUxtMEVFRU5TXzdQdHJIYXNoSVM0X0VF
TlNfMTBIYXNoVHJhaXRzSVM0X0VFTlNCX0lTOF9FRUUzZ2V0RVBTM18KIF9fWk5LN1dlYkNvcmUx
M0lubGluZVRleHRCb3gyM2dldEVtcGhhc2lzTWFya1Bvc2l0aW9uRVBOU18xMVJlbmRlclN0eWxl
RVJOU18yMFRleHRFbXBoYXNpc1Bvc2l0aW9uRQogX19aTjdXZWJDb3JlMjF1cGRhdGVHcmFwaGlj
c0NvbnRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfNUNvbG9yRVM0X2ZOU18xMENvbG9y
U3BhY2VFCi1fX1pON1dlYkNvcmVMMjBwYWludFRleHRXaXRoU2hhZG93c0VQTlNfMTVHcmFwaGlj
c0NvbnRleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0Vp
aWlpUktOU18xMEZsb2F0UG9pbnRFUktOU185RmxvYXRSZWN0RVBLTlNfMTBTaGFkb3dEYXRhRWJi
Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDhkcmF3VGV4dEVSS05TXzRGb250RVJLTlNf
N1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWkKK19fWk43V2ViQ29yZUwyMHBhaW50VGV4dFdp
dGhTaGFkb3dzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5F
UktOM1dURjEyQXRvbWljU3RyaW5nRWlpaWlSS05TXzEzR3JhcGhpY3NQb2ludEVSS05TXzEyR3Jh
cGhpY3NSZWN0RVBLTlNfMTBTaGFkb3dEYXRhRWJiCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDhkcmF3VGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9p
bnRFaWkKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MTNwYWludEJlaGF2aW9yRXYKIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcxNnNldFBhaW50QmVoYXZpb3JFagogX19aTjdXZWJDb3JlMTBSZW5kZXJW
aWV3MTNub3RpZnlXaWRnZXRzRU5TXzE4V2lkZ2V0Tm90aWZpY2F0aW9uRQpAQCAtMzYxMSw4ICsz
NjExLDggQEAgX19aTjdXZWJDb3JlOERvY3VtZW50MjdjYW5jZWxGb2N1c0FwcGVhcgogX19aTjdX
ZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MjF1cGRhdGVGb2N1c0FwcGVhcmFuY2VFYgogX19aTjdX
ZWJDb3JlN0VsZW1lbnQyMXVwZGF0ZUZvY3VzQXBwZWFyYW5jZUViCiBfX1pOSzdXZWJDb3JlMTND
b250YWluZXJOb2RlN2dldFJlY3RFdgotX19aTks3V2ViQ29yZTEzQ29udGFpbmVyTm9kZTE4Z2V0
VXBwZXJMZWZ0Q29ybmVyRVJOU18xMEZsb2F0UG9pbnRFCi1fX1pOSzdXZWJDb3JlMTJSZW5kZXJP
YmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEwRmxvYXRQb2ludEViYgorX19aTks3V2ViQ29y
ZTEzQ29udGFpbmVyTm9kZTE4Z2V0VXBwZXJMZWZ0Q29ybmVyRVJOU18xM0dyYXBoaWNzUG9pbnRF
CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNWxvY2FsVG9BYnNvbHV0ZUVSS05TXzEzR3Jh
cGhpY3NQb2ludEViYgogX19aTks3V2ViQ29yZTlSZW5kZXJCb3gxOW1hcExvY2FsVG9Db250YWlu
ZXJFUE5TXzIwUmVuZGVyQm94TW9kZWxPYmplY3RFYmJSTlNfMTRUcmFuc2Zvcm1TdGF0ZUUKIF9f
Wk5LN1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlMTFtYXBwZWRQb2ludEV2CiBfX1pOSzdXZWJDb3Jl
OVJlbmRlckJveDE5b2Zmc2V0RnJvbUNvbnRhaW5lckVQTlNfMTJSZW5kZXJPYmplY3RFUktOU184
SW50UG9pbnRFCkBAIC0zNjIwLDcgKzM2MjAsNyBAQCBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3QzMXNob3VsZFVzZVRyCiBfX1pON1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlNG1vdmVFaWlOUzBf
MjFUcmFuc2Zvcm1BY2N1bXVsYXRpb25FCiBfX1pOSzdXZWJDb3JlMTBSZW5kZXJWaWV3MTltYXBM
b2NhbFRvQ29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJiUk5TXzE0VHJhbnNm
b3JtU3RhdGVFCiBfX1pON1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlN2ZsYXR0ZW5FdgotX19aTks3
V2ViQ29yZTEzQ29udGFpbmVyTm9kZTE5Z2V0TG93ZXJSaWdodENvcm5lckVSTlNfMTBGbG9hdFBv
aW50RQorX19aTks3V2ViQ29yZTEzQ29udGFpbmVyTm9kZTE5Z2V0TG93ZXJSaWdodENvcm5lckVS
TlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE5c2Nyb2xsUmVj
dFRvVmlzaWJsZUVSS05TXzdJbnRSZWN0RWJSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XwogX19a
Tks3V2ViQ29yZTlSZW5kZXJCb3gyOGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWRFYgogX19a
TjdXZWJDb3JlMTFSZW5kZXJMYXllcjE1Z2V0UmVjdFRvRXhwb3NlRVJLTlNfN0ludFJlY3RFUzNf
UktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KQEAgLTM3NzYsNyArMzc3Niw3IEBAIF9fWk43V2Vi
Q29yZTIwR3JhcGhpY3NDb250ZXh0U3RhdGVhU0VSS1MKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MjByZXN0b3JlUGxhdGZvcm1TdGF0ZUV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJCdXR0
b24xNWNvbnRyb2xDbGlwUmVjdEVpaQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xp
cEVSS05TXzdJbnRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ0Y2xpcEVSS05T
XzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU5UmVuZGVyQm94MTVwb3BDb250ZW50c0NsaXBFUk5T
XzlQYWludEluZm9FTlNfMTBQYWludFBoYXNlRWlpCiBfX1pOSzdXZWJDb3JlOUlubGluZUJveDRy
b290RXYKIF9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTJwYWludE91dGxpbmVFUE5TXzE1R3Jh
cGhpY3NDb250ZXh0RVJLTlNfN0ludFJlY3RFCkBAIC00MjE5LDcgKzQyMTksNyBAQCBfX1pON1dl
YkNvcmUxNkpTSFRNTERpdkVsZW1lbnQxOGdldE93blByCiBfX1pON1dlYkNvcmUxMUxheW91dFN0
YXRlbndFbVBOU18xMVJlbmRlckFyZW5hRQogX19aTjdXZWJDb3JlMTFMYXlvdXRTdGF0ZUMxRVBT
MF9QTlNfOVJlbmRlckJveEVSS05TXzdJbnRTaXplRWliUE5TXzEwQ29sdW1uSW5mb0UKIF9fWk43
V2ViQ29yZTExTGF5b3V0U3RhdGVDMkVQUzBfUE5TXzlSZW5kZXJCb3hFUktOU183SW50U2l6ZUVp
YlBOU18xMENvbHVtbkluZm9FCi1fX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGxvY2FsVG9D
b250YWluZXJRdWFkRVJLTlNfOUZsb2F0UXVhZEVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEVi
CitfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGxvY2FsVG9Db250YWluZXJRdWFkRVJLTlNf
MTJHcmFwaGljc1F1YWRFUE5TXzIwUmVuZGVyQm94TW9kZWxPYmplY3RFYgogX19aTjdXZWJDb3Jl
TDI0Zm9udERhdGFGb3JHZW5lcmljRmFtaWx5RVBOU184RG9jdW1lbnRFUktOU18xNUZvbnREZXNj
cmlwdGlvbkVSS04zV1RGMTJBdG9taWNTdHJpbmdFCiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMTdn
ZXRDYWNoZWRGb250RGF0YUVSS05TXzE1Rm9udERlc2NyaXB0aW9uRVJLTjNXVEYxMkF0b21pY1N0
cmluZ0ViTlMwXzEyU2hvdWxkUmV0YWluRQogX19aTks3V2ViQ29yZTEyUmVuZGVySW5saW5lMTZi
YXNlbGluZVBvc2l0aW9uRU5TXzEyRm9udEJhc2VsaW5lRWJOU18xN0xpbmVEaXJlY3Rpb25Nb2Rl
RU5TXzE2TGluZVBvc2l0aW9uTW9kZUUKQEAgLTQ0ODcsNyArNDQ4Nyw3IEBAIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MThzZXRTdHJva2UKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MjZzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzc0VmCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDExZHJhd0VsbGlwc2VFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTRQYXRoQzFF
dgotX19aTjdXZWJDb3JlNFBhdGgxMGFkZEVsbGlwc2VFUktOU185RmxvYXRSZWN0RQorX19aTjdX
ZWJDb3JlNFBhdGgxMGFkZEVsbGlwc2VFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0OGRyYXdQYXRoRVJLTlNfNFBhdGhFCiBfX1pON1dlYkNvcmU0UGF0
aEQxRXYKIF9fWk43V2ViQ29yZTIwSlNIVE1MSGVhZGluZ0VsZW1lbnREMUV2CkBAIC00NTcwLDkg
KzQ1NzAsOSBAQCBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMjJzZXRNYXJnaW5TdGFyCiBfX1pO
N1dlYkNvcmUxMVJlbmRlckJsb2NrMjBzZXRNYXJnaW5FbmRGb3JDaGlsZEVQTlNfOVJlbmRlckJv
eEVpCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMjd1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXRFdgogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjIzY29tcHV0ZVNjcm9sbERpbWVuc2lvbnNF
UGJTMV8KLV9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEzMHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbkVSS05TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTE3U2Nyb2xsQW5pbWF0
b3JNYWMzMHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbkVSS05TXzEwRmxvYXRQb2ludEUK
LV9fWk5LN1dlYkNvcmUxN1Njcm9sbEFuaW1hdG9yTWFjMzFhZGp1c3RTY3JvbGxQb3NpdGlvbklm
TmVjZXNzYXJ5RVJLTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTMwc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uRVJLTlNfMTNHcmFwaGljc1BvaW50RQor
X19aTjdXZWJDb3JlMTdTY3JvbGxBbmltYXRvck1hYzMwc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTks3V2ViQ29yZTE3U2Nyb2xsQW5pbWF0
b3JNYWMzMWFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnlFUktOU18xM0dyYXBoaWNzUG9p
bnRFCiBfX1pOSzdXZWJDb3JlOVJlbmRlckJveDI2bG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3dF
dgogX19aTjdXZWJDb3JlMTdSZW5kZXJUZXh0Q29udHJvbDI3dXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5RWJiCiBfX1pOSzdXZWJDb3JlMThUZXh0RmllbGRJbnB1dFR5cGUxMWlzVGV4dEZpZWxk
RXYKQEAgLTQ2ODMsOCArNDY4Myw4IEBAIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTFuZXh0
U2libGluZ0UKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQxOGNhbkJlU2VsZWN0aW9uTGVhZkV2
CiBfX1pON1dlYkNvcmUxMFJlbmRlclRleHQyM3NlbGVjdGlvblJlY3RGb3JSZXBhaW50RVBOU18y
MFJlbmRlckJveE1vZGVsT2JqZWN0RWIKIF9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDEzc2Vs
ZWN0aW9uUmVjdEVpaWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQyMHNlbGVjdGlvblJlY3RGb3JUZXh0
RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQy
NnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9p
bnRFaWlpCitfX1pOSzdXZWJDb3JlNEZvbnQyMHNlbGVjdGlvblJlY3RGb3JUZXh0RVJLTlNfN1Rl
eHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWlpCitfX1pOSzdXZWJDb3JlNEZvbnQyNnNlbGVj
dGlvblJlY3RGb3JTaW1wbGVUZXh0RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRF
aWlpCiBfX1pON1dlYkNvcmVMMThlbGxpcHNpc1JlY3RGb3JCb3hFUE5TXzEzSW5saW5lVGV4dEJv
eEVqagogX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMWNvbXB1dGVSZWN0Rm9yUmVwYWludEVQ
TlNfMjBSZW5kZXJCb3hNb2RlbE9iamVjdEVSTlNfN0ludFJlY3RFYgogX19aTjdXZWJDb3JlMTFS
ZW5kZXJCbG9jazI3c2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50RVBOU18yMFJlbmRlckJveE1v
ZGVsT2JqZWN0RQpAQCAtNDc4NywxMyArNDc4NywxMyBAQCBfX1pOSzdXZWJDb3JlMTFSZW5kZXJM
YXllcjIwbGF5ZXJGb3JTY3JvCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTdwYWludFNjcm9s
bENvcm5lckVQTlNfMTVHcmFwaGljc0NvbnRleHRFaWlSS05TXzdJbnRSZWN0RQogX19aTks3V2Vi
Q29yZTExUmVuZGVyTGF5ZXIxNnNjcm9sbENvcm5lclJlY3RFdgogX19aTjdXZWJDb3JlMTFSZW5k
ZXJMYXllcjEycGFpbnRSZXNpemVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEVpaVJLTlNfN0ludFJl
Y3RFCi1fX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gxNHBhaW50U2VsZWN0aW9uRVBOU18xNUdy
YXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2ludEVQTlNfMTFSZW5kZXJTdHlsZUVSS05TXzRG
b250RQorX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTRwYWludFNlbGVjdGlvbkVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU18xM0dyYXBoaWNzUG9pbnRFUE5TXzExUmVuZGVyU3R5bGVFUktO
U180Rm9udEUKIF9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDE3c2VsZWN0aW9uU3RhcnRFbmRF
UmlTMV8KIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDI0c2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclRoZW1lMzBhY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3JFdgogX19aTks3V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMzOHBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yRXYKIF9fWk5LN1dlYkNvcmU1Q29sb3IxNGJsZW5kV2l0
aFdoaXRlRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjBkcmF3SGlnaGxpZ2h0Rm9y
VGV4dEVSS05TXzRGb250RVJLTlNfN1RleHRSdW5FUktOU18xMEZsb2F0UG9pbnRFaVJLTlNfNUNv
bG9yRU5TXzEwQ29sb3JTcGFjZUVpaQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMGRy
YXdIaWdobGlnaHRGb3JUZXh0RVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS05TXzEzR3JhcGhp
Y3NQb2ludEVpUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRWlpCiBfX1pOSzdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QyNHNlbGVjdGlvbkZvcmVncm91bmRDb2xvckV2CiBfX1pOSzdXZWJDb3JlMTJS
ZW5kZXJPYmplY3QxNHNlbGVjdGlvbkNvbG9yRWkKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclRoZW1l
MzBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JFdgpAQCAtNDg1OSw4ICs0ODU5LDggQEAg
X19aTjdXZWJDb3JlMTJSZW5kZXJJbmxpbmUyOWNsaXBwZWRPdmVyZgogX19aTks3V2ViQ29yZTEy
UmVuZGVySW5saW5lMzBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3hFdgogX19aTks3V2Vi
Q29yZTEyUmVuZGVySW5saW5lMzdjdWxsZWRJbmxpbmVWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94
RXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlcklubGluZTIzY3VsbGVkSW5saW5lQm91bmRpbmdCb3hF
UEtTMF8KLV9fWk43V2ViQ29yZTlGbG9hdFJlY3QxNHVuaXRlSWZOb25aZXJvRVJLUzBfCi1fX1pO
N1dlYkNvcmU3SW50UmVjdEMxRVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTEyR3JhcGhp
Y3NSZWN0MTR1bml0ZUlmTm9uWmVyb0VSS1MwXworX19aTjdXZWJDb3JlN0ludFJlY3RDMUVSS05T
XzEyR3JhcGhpY3NSZWN0RQogX19aTks3V2ViQ29yZTEwUmVuZGVyVGV4dDMwbGluZXNWaXN1YWxP
dmVyZmxvd0JvdW5kaW5nQm94RXYKIF9fWk43V2ViQ29yZTdJbnRSZWN0MTR1bml0ZUlmTm9uWmVy
b0VSS1MwXwogX19aTjdXZWJDb3JlMTdSZW5kZXJMaW5lQm94TGlzdDE0ZGlydHlMaW5lQm94ZXNF
dgpAQCAtNTIyNiw5ICs1MjI2LDkgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyNnNl
dFBsYXRmbwogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZHJhd1JlY3RFUktOU183SW50
UmVjdEUKIF9fWk5LN1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExc3Ryb2tlU3R5bGVFdgogX19a
Tks3V2ViQ29yZTVDb2xvcjRkYXJrRXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdk
cmF3Q29udmV4UG9seWdvbkVtUEtOU18xMEZsb2F0UG9pbnRFYgotX19aTjdXZWJDb3JlNFBhdGg2
bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlNFBhdGg5YWRkTGluZVRvRVJL
TlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2RyYXdDb252
ZXhQb2x5Z29uRW1QS05TXzEzR3JhcGhpY3NQb2ludEViCitfX1pON1dlYkNvcmU0UGF0aDZtb3Zl
VG9FUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmU0UGF0aDlhZGRMaW5lVG9FUktO
U18xM0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmU0UGF0aDEyY2xvc2VTdWJwYXRoRXYKIF9f
Wk43V2ViQ29yZTE4UmVuZGVyVGFibGVTZWN0aW9uNXBhaW50RVJOU185UGFpbnRJbmZvRWlpCiBf
X1pON1dlYkNvcmUxOFJlbmRlclRhYmxlU2VjdGlvbjExcGFpbnRPYmplY3RFUk5TXzlQYWludElu
Zm9FaWkKQEAgLTUyNTQsNyArNTI1NCw3IEBAIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94MTRjb250
ZW50Qm94UmVjdEUKIF9fWk43V2ViQ29yZTEzUmVuZGVyTGlzdEJveDE5cGFpbnRJdGVtQmFja2dy
b3VuZEVSTlNfOVBhaW50SW5mb0VpaWkKIF9fWk43V2ViQ29yZTEzUmVuZGVyTGlzdEJveDE5aXRl
bUJvdW5kaW5nQm94UmVjdEVpaWkKIF9fWk43V2ViQ29yZTEzUmVuZGVyTGlzdEJveDE5cGFpbnRJ
dGVtRm9yZWdyb3VuZEVSTlNfOVBhaW50SW5mb0VpaWkKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MTJkcmF3QmlkaVRleHRFUktOU180Rm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMmRyYXdCaWRpVGV4dEVSS05T
XzRGb250RVJLTlNfN1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pOM1dURjEwUmVm
Q291bnRlZElON1dlYkNvcmUxMUJpZGlDb250ZXh0RUU1ZGVyZWZFdgogX19aTjdXZWJDb3JlMTJC
aWRpUmVzb2x2ZXJJTlNfMTVUZXh0UnVuSXRlcmF0b3JFTlNfMTZCaWRpQ2hhcmFjdGVyUnVuRUUy
MWNyZWF0ZUJpZGlSdW5zRm9yTGluZUVSS1MxX05TXzIzVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGVF
YgogX19aTjdXZWJDb3JlMTJCaWRpUmVzb2x2ZXJJTlNfMTVUZXh0UnVuSXRlcmF0b3JFTlNfMTZC
aWRpQ2hhcmFjdGVyUnVuRUU5YXBwZW5kUnVuRXYKQEAgLTUzMzksOCArNTMzOSw4IEBAIF9fWk5L
N1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QKIF9fWk5LN1dlYkNvcmUyNUFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QxMWVsZW1lbnRSZWN0RXYKIF9fWk5LN1dlYkNvcmUxOUFjY2Vz
c2liaWxpdHlPYmplY3QxM2lzUmFkaW9CdXR0b25FdgogX19aTks3V2ViQ29yZTI1QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDE1Ym91bmRpbmdCb3hSZWN0RXYKLV9fWk43V2ViQ29yZTEyUmVuZGVy
T2JqZWN0MjJhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVh
ZEVMbTBFRUUKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRRdWFkRUxtMEVFMTVyZXNl
cnZlQ2FwYWNpdHlFbQorX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMmFic29sdXRlRm9jdXNS
aW5nUXVhZHNFUk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKK19fWk4zV1RG
NlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUXVhZEVMbTBFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0K
IF9fWk5LN1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q5aXNGb2N1c2VkRXYKIF9f
Wk5LN1dlYkNvcmU3RWxlbWVudDIwaXNFbmFibGVkRm9ybUNvbnRyb2xFdgogLVtBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciByZW1vdGVBY2Nlc3NpYmlsaXR5UGFyZW50T2JqZWN0XQpAQCAtNTM5
MSwxMiArNTM5MSwxMiBAQCBfX1pOM1dURjlIYXNoVGFibGVJeXlOU18xN0lkZW50aXR5RXh0cmFj
CiBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMTNpc0xpbmtWaXNpdGVkRXkKIF9fWk43V2ViQ29yZTEx
UmVuZGVyU3R5bGUxN3NldFRleHREZWNvcmF0aW9uRWkKIF9fWk43V2ViQ29yZTE1U3R5bGVWaXN1
YWxEYXRhQzFFUktTMF8KLV9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDE1cGFpbnREZWNvcmF0
aW9uRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2ludEVpUEtOU18xMFNoYWRv
d0RhdGFFCitfX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gxNXBhaW50RGVjb3JhdGlvbkVQTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU18xM0dyYXBoaWNzUG9pbnRFaVBLTlNfMTBTaGFkb3dEYXRh
RQogX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QyM2dldFRleHREZWNvcmF0aW9uQ29sb3JzRWlS
TlNfNUNvbG9yRVMyX1MyX2IKIF9fWk43V2ViQ29yZUwxNWRlY29yYXRpb25Db2xvckVQTlNfMTJS
ZW5kZXJPYmplY3RFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd0xpbmVGb3JU
ZXh0RVJLTlNfMTBGbG9hdFBvaW50RWZiCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1
ZHJhd0xpbmVGb3JUZXh0RVJLTlNfMTNHcmFwaGljc1BvaW50RWZiCiBfX1pOSzdXZWJDb3JlMTVH
cmFwaGljc0NvbnRleHQxNXN0cm9rZVRoaWNrbmVzc0V2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDE5cm91bmRUb0RldmljZVBpeGVsc0VSS05TXzlGbG9hdFJlY3RFTlMwXzEyUm91bmRp
bmdNb2RlRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxOXJvdW5kVG9EZXZpY2VQaXhl
bHNFUktOU18xMkdyYXBoaWNzUmVjdEVOUzBfMTJSb3VuZGluZ01vZGVFCiBfX1pON1dlYkNvcmUx
N0hUTUxTY3JpcHRFbGVtZW50MTlyZW1vdmVkRnJvbURvY3VtZW50RXYKIF9fWk43V2ViQ29yZTEz
U2NyaXB0RWxlbWVudDE5cmVtb3ZlZEZyb21Eb2N1bWVudEV2CiBfX1pON1dlYkNvcmUxN0pTSFRN
TEJvZHlFbGVtZW50RDFFdgpAQCAtNTU1NSw4ICs1NTU1LDggQEAgX19aTks3V2ViQ29yZTE0UmVu
ZGVyUmVwbGFjZWQxMGlzU2VsZWN0ZQogX19aTjdXZWJDb3JlMTFSZW5kZXJJbWFnZTEzcGFpbnRS
ZXBsYWNlZEVSTlNfOVBhaW50SW5mb0VpaQogX19aTks3V2ViQ29yZTE5UmVuZGVySW1hZ2VSZXNv
dXJjZTVpbWFnZUVpaQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ5ZHJhd0ltYWdlRVBO
U181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJLTlNfOEludFBvaW50RU5TXzE3Q29tcG9zaXRlT3Bl
cmF0b3JFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFn
ZUVOU18xMENvbG9yU3BhY2VFUktOU185RmxvYXRSZWN0RVM2X05TXzE3Q29tcG9zaXRlT3BlcmF0
b3JFYgotX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZTRkcmF3RVBOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzlGbG9hdFJlY3RFUzVfTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0
b3JFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFnZUVO
U18xMENvbG9yU3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJh
dG9yRWIKK19fWk43V2ViQ29yZTExQml0bWFwSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVP
cGVyYXRvckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2UxNHN0YXJ0QW5pbWF0aW9uRWIKIF9f
Wk43V2ViQ29yZTExQml0bWFwSW1hZ2UyMW1heUZpbGxXaXRoU29saWRDb2xvckV2CiBfX1pOSzdX
ZWJDb3JlMTFCaXRtYXBJbWFnZTE2Y3VycmVudEZyYW1lU2l6ZUV2CkBAIC01ODk4LDcgKzU4OTgs
NyBAQCBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50CiBfX1pON1dlYkNv
cmUyMkltYWdlUXVhbGl0eUNvbnRyb2xsZXIzc2V0RVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0
RVBOM1dURjdIYXNoTWFwSVBLdk5TXzdJbnRTaXplRU5TM183UHRySGFzaElTNl9FRU5TM18xMEhh
c2hUcmFpdHNJUzZfRUVOU0FfSVM3X0VFRUVTNl9SS1M3XwogX19aTjdXZWJDb3JlMTFJbWFnZVNv
dXJjZTIwZnJhbWVEdXJhdGlvbkF0SW5kZXhFbQogX19aTks3V2ViQ29yZTExQml0bWFwSW1hZ2Ux
MHNvbGlkQ29sb3JFdgotX19aTjdXZWJDb3JlNUltYWdlMThmaWxsV2l0aFNvbGlkQ29sb3JFUE5T
XzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzVDb2xvckVOU18xMENvbG9y
U3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2ViQ29yZTVJbWFnZTE4ZmlsbFdp
dGhTb2xpZENvbG9yRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVJL
TlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQogX19aTjdX
ZWJDb3JlNVRpbWVySU5TXzIySW1hZ2VRdWFsaXR5Q29udHJvbGxlckVFNWZpcmVkRXYKIF9fWk43
V2ViQ29yZTIySW1hZ2VRdWFsaXR5Q29udHJvbGxlcjI4aGlnaFF1YWxpdHlSZXBhaW50VGltZXJG
aXJlZEVQTlNfNVRpbWVySVMwX0VFCiBfX1pON1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlJbWFnZU1h
cExpbmtEMEV2CkBAIC01OTQxLDcgKzU5NDEsNyBAQCBfX1pOSzdXZWJDb3JlMTdIVE1MQ2FudmFz
RWxlbWVudDE3Y3JlYXRlCiBfX1pON1dlYkNvcmUxMUltYWdlQnVmZmVyQzFFUktOU183SW50U2l6
ZUVOU18xMENvbG9yU3BhY2VFTlNfMTNSZW5kZXJpbmdNb2RlRVJiCiBfX1pON1dlYkNvcmUxMUlt
YWdlQnVmZmVyQzJFUktOU183SW50U2l6ZUVOU18xMENvbG9yU3BhY2VFTlNfMTNSZW5kZXJpbmdN
b2RlRVJiCiBfX1pON1dlYkNvcmUxNUltYWdlQnVmZmVyRGF0YUMxRVJLTlNfN0ludFNpemVFCi1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzlGbG9hdFNpemVFCitfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDVzY2FsZUVSS05TXzEyR3JhcGhpY3NTaXplRQogX19a
Tks3V2ViQ29yZTExSW1hZ2VCdWZmZXI3Y29udGV4dEV2CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDI2c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNFYgogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQyOHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlFTlNfMjBJbnRlcnBvbGF0
aW9uUXVhbGl0eUUKQEAgLTU5NzYsMTQgKzU5NzYsMTQgQEAgX19aTjdXZWJDb3JlNTNqc0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRAogX19aTjdXZWJDb3JlMjZKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDEwc3Ryb2tlUmVjdEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQxMHN0cm9rZVJlY3RFZmZmZgogX19aTjdXZWJDb3JlMjRDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQxMHN0cm9rZVJlY3RFZmZmZmYKLV9fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MTBzdHJva2VSZWN0RVJLTlNfOUZsb2F0UmVjdEVmCi1fX1pON1dlYkNvcmUyNENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDdkaWREcmF3RVJLTlNfOUZsb2F0UmVjdEVqCi1fX1pOSzdX
ZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm03bWFwUmVjdEVSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dl
YkNvcmUxN0hUTUxDYW52YXNFbGVtZW50N2RpZERyYXdFUktOU185RmxvYXRSZWN0RQotX19aTjdX
ZWJDb3JlN21hcFJlY3RFUktOU185RmxvYXRSZWN0RVMyX1MyXwotX19aTjdXZWJDb3JlOUZsb2F0
UmVjdDlpbnRlcnNlY3RFUktTMF8KLV9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0OGNvbnRhaW5zRVJL
UzBfCi1fX1pON1dlYkNvcmU5RmxvYXRSZWN0NXVuaXRlRVJLUzBfCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDEwc3Ryb2tlUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RWYKK19fWk43V2Vi
Q29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEN2RpZERyYXdFUktOU18xMkdyYXBoaWNzUmVj
dEVqCitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm03bWFwUmVjdEVSS05TXzEyR3JhcGhp
Y3NSZWN0RQorX19aTjdXZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDdkaWREcmF3RVJLTlNfMTJH
cmFwaGljc1JlY3RFCitfX1pON1dlYkNvcmU3bWFwUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RVMy
X1MyXworX19aTjdXZWJDb3JlMTJHcmFwaGljc1JlY3Q5aW50ZXJzZWN0RVJLUzBfCitfX1pOSzdX
ZWJDb3JlMTJHcmFwaGljc1JlY3Q4Y29udGFpbnNFUktTMF8KK19fWk43V2ViQ29yZTEyR3JhcGhp
Y3NSZWN0NXVuaXRlRVJLUzBfCiBfX1pON1dlYkNvcmU0MHNldEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEU3Ryb2tlU3R5bGVFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUyNkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMTRzZXRTdHJv
a2VTdHlsZUVQTjNKU0M5RXhlY1N0YXRlRU5TMV83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTI0Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEMTRzZXRTdHJva2VDb2xvckVSS04zV1RGNlN0cmluZ0UKQEAg
LTYwMjIsOCArNjAyMiw4IEBAIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyNmNyZWF0ZUVO
UzAKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyQzJFTlMwXzlMYXllclR5cGVFUDdDQUxh
eWVyUE5TXzIxUGxhdGZvcm1DQUxheWVyQ2xpZW50RQogLVtXZWJMYXllciBhY3Rpb25Gb3JLZXk6
XQogX19aTjdXZWJDb3JlMTNHcmFwaGljc0xheWVyMjF1cGRhdGVEZWJ1Z0luZGljYXRvcnNFdgot
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0E3c2V0U2l6ZUVSS05TXzlGbG9hdFNpemVFCi1f
X1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTExc2V0UG9zaXRpb25FUktOU18xMEZsb2F0UG9p
bnRFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTdzZXRTaXplRVJLTlNfMTJHcmFwaGlj
c1NpemVFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTExc2V0UG9zaXRpb25FUktOU18x
M0dyYXBoaWNzUG9pbnRFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE2c2V0TWFza3NU
b0JvdW5kc0ViCiBfX1pON1dlYkNvcmUyMVJlbmRlckxheWVyQ29tcG9zaXRvcjIzYXR0YWNoUm9v
dFBsYXRmb3JtTGF5ZXJFTlMwXzE5Um9vdExheWVyQXR0YWNobWVudEUKIF9fWk5LN1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTEzcGxhdGZvcm1MYXllckV2CkBAIC02MDgxLDggKzYwODEsOCBAQCBf
X1pOSzdXZWJDb3JlMjZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0CiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzTGF5ZXJDQTE0c2V0UHJlc2VydmVzM0RFYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xh
eWVyQ0EyMXNldEJhY2tmYWNlVmlzaWJpbGl0eUViCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5
ZXJDQTE1c2V0TmVlZHNEaXNwbGF5RXYKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFz
ZXROZWVkc0Rpc3BsYXlJblJlY3RFUktOU185RmxvYXRSZWN0RQotX19aTjdXZWJDb3JlMTVHcmFw
aGljc0xheWVyQ0ExNHNldEFuY2hvclBvaW50RVJLTlNfMTJGbG9hdFBvaW50M0RFCitfX1pON1dl
YkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIxc2V0TmVlZHNEaXNwbGF5SW5SZWN0RVJLTlNfMTJHcmFw
aGljc1JlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTE0c2V0QW5jaG9yUG9pbnRF
UktOU18xNUdyYXBoaWNzUG9pbnQzREUKIF9fWk5LN1dlYkNvcmUxOFJlbmRlckxheWVyQmFja2lu
ZzExY29udGVudHNCb3hFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExNXNldENvbnRl
bnRzUmVjdEVSS05TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTE4UmVuZGVyTGF5ZXJCYWNraW5n
MjJjb250YWluc1BhaW50ZWRDb250ZW50RXYKQEAgLTYxMDYsMTUgKzYxMDYsMTUgQEAgX19aTjNX
VEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMTVQbAogX19aTjdXZWJDb3JlMTVQbGF0Zm9y
bUNBTGF5ZXIyMHJlbW92ZUZyb21TdXBlcmxheWVyRXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1D
QUxheWVyMTJzZXRTdWJsYXllcnNFUktOM1dURjZWZWN0b3JJTlMxXzZSZWZQdHJJUzBfRUVMbTBF
RUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTV1cGRhdGVMYXllclNpemVFdgotX19a
TjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXI5c2V0Qm91bmRzRVJLTlNfOUZsb2F0UmVjdEUKK19f
Wk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyOXNldEJvdW5kc0VSS05TXzEyR3JhcGhpY3NSZWN0
RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOXVwZGF0ZUxheWVyUG9zaXRpb25Fdgot
X19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxMXNldFBvc2l0aW9uRVJLTlNfMTJGbG9hdFBv
aW50M0RFCitfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjExc2V0UG9zaXRpb25FUktOU18x
NUdyYXBoaWNzUG9pbnQzREUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTl1cGRhdGVN
YXNrc1RvQm91bmRzRXYKIF9fWk43V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMTZzZXRNYXNrc1Rv
Qm91bmRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMTh1cGRhdGVDb250ZW50c1Jl
Y3RFdgogX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxOHJlbW92ZUFsbFN1YmxheWVyc0V2
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIzdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnRF
dgotX19aTjdXZWJDb3JlMTVQbGF0Zm9ybUNBTGF5ZXIxNXNldE5lZWRzRGlzcGxheUVQS05TXzlG
bG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE1c2V0TmVlZHNEaXNwbGF5
RVBLTlNfMTJHcmFwaGljc1JlY3RFCiAtW1dlYkxheWVyIHNldE5lZWRzRGlzcGxheV0KIF9fWk43
V2ViQ29yZTE1UGxhdGZvcm1DQUxheWVyMTVwbGF0Zm9ybUNBTGF5ZXJFUHYKIF9fWlRobjQ0MF9O
SzdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyN3BsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudEV2
CkBAIC02MTQ0LDggKzYxNDQsOCBAQCBfX1pOSzdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQyCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDI5cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXNFdgogX19aTks3V2ViQ29yZTExSW1hZ2VCdWZmZXIxNGRyYXdz
VXNpbmdDb3B5RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVkcmF3SW1hZ2VCdWZm
ZXJFUE5TXzExSW1hZ2VCdWZmZXJFTlNfMTBDb2xvclNwYWNlRVJLTlNfN0ludFJlY3RFTlNfMTdD
b21wb3NpdGVPcGVyYXRvckViCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd0lt
YWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRU5TXzEwQ29sb3JTcGFjZUVSS05TXzlGbG9hdFJl
Y3RFUzZfTlNfMTdDb21wb3NpdGVPcGVyYXRvckViCi1fX1pON1dlYkNvcmUxMUltYWdlQnVmZmVy
NGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RU5TXzEwQ29sb3JTcGFjZUVSS05TXzlGbG9hdFJl
Y3RFUzZfTlNfMTdDb21wb3NpdGVPcGVyYXRvckViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29u
dGV4dDE1ZHJhd0ltYWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRU5TXzEwQ29sb3JTcGFjZUVS
S05TXzEyR3JhcGhpY3NSZWN0RVM2X05TXzE3Q29tcG9zaXRlT3BlcmF0b3JFYgorX19aTjdXZWJD
b3JlMTFJbWFnZUJ1ZmZlcjRkcmF3RVBOU18xNUdyYXBoaWNzQ29udGV4dEVOU18xMENvbG9yU3Bh
Y2VFUktOU18xMkdyYXBoaWNzUmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIKIF9fWk5L
N1dlYkNvcmUxMUltYWdlQnVmZmVyOWNvcHlJbWFnZUV2CiBfX1pON1dlYkNvcmUxMUJpdG1hcElt
YWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1hZ2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFw
SW1hZ2VDMkVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQpAQCAtNjI4MCw5ICs2MjgwLDkg
QEAgX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MjhhZGROb2RlVG9SZQogX19aTjdXZWJDb3Jl
MTRIVE1MTWFwRWxlbWVudDEzbWFwTW91c2VFdmVudEVpaVJLTlNfN0ludFNpemVFUk5TXzEzSGl0
VGVzdFJlc3VsdEUKIF9fWk43V2ViQ29yZTE1SFRNTEFyZWFFbGVtZW50MTNtYXBNb3VzZUV2ZW50
RWlpUktOU183SW50U2l6ZUVSTlNfMTNIaXRUZXN0UmVzdWx0RQogX19aTks3V2ViQ29yZTE1SFRN
TEFyZWFFbGVtZW50OWdldFJlZ2lvbkVSS05TXzdJbnRTaXplRQotX19aTjdXZWJDb3JlNFBhdGg3
YWRkUmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmU0UGF0aDdhZGRSZWN0RVJLTlNf
MTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmU0UGF0aEMxRVJLUzBfCi1fX1pOSzdXZWJDb3Jl
NFBhdGg4Y29udGFpbnNFUktOU18xMEZsb2F0UG9pbnRFTlNfOFdpbmRSdWxlRQorX19aTks3V2Vi
Q29yZTRQYXRoOGNvbnRhaW5zRVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzhXaW5kUnVsZUUKIF9f
Wk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDEzc2V0VVJMRWxlbWVudEVQTlNfN0VsZW1lbnRFCiBf
X1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRhU0VSS1MwXwogX19aTjdXZWJDb3JlMTFSZW5kZXJC
bG9jazE5dXBkYXRlSGl0VGVzdFJlc3VsdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfOEludFBv
aW50RQpAQCAtNjMwMCw3ICs2MzAwLDcgQEAgX19aTjdXZWJDb3JlMTRIVE1MQ29sbGVjdGlvbkQw
RXYKIF9fWk5LN1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsxMWVsZW1lbnRSZWN0
RXYKIF9fWk5LN1dlYkNvcmUxNUhUTUxBcmVhRWxlbWVudDExY29tcHV0ZVJlY3RFUE5TXzEyUmVu
ZGVyT2JqZWN0RQogX19aTks3V2ViQ29yZTE1SFRNTEFyZWFFbGVtZW50MTFjb21wdXRlUGF0aEVQ
TlNfMTJSZW5kZXJPYmplY3RFCi1fX1pON1dlYkNvcmU0UGF0aDl0cmFuc2xhdGVFUktOU185Rmxv
YXRTaXplRQorX19aTjdXZWJDb3JlNFBhdGg5dHJhbnNsYXRlRVJLTlNfMTJHcmFwaGljc1NpemVF
CiBfX1pOSzdXZWJDb3JlNFBhdGgxMmJvdW5kaW5nUmVjdEV2CiBfX1pON1dlYkNvcmUyOEpTSFRN
TFNlbGVjdEVsZW1lbnRQcm90b3R5cGVEMUV2CiBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMTNG
bG9hdFdpdGhSZWN0QzJFUE5TXzlSZW5kZXJCb3hFCkBAIC02Mzk0LDkgKzYzOTQsOSBAQCBfX1pO
SzdXZWJDb3JlNldpZGdldDI3Y29udmVydEZyb21Db250YWluCiBfX1pON1dlYkNvcmU2V2lkZ2V0
MzNjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3RFUEtTMF9SS05TXzhJbnRQb2ludEUK
IF9fWk43V2ViQ29yZThEb2N1bWVudDE3cHJlcGFyZU1vdXNlRXZlbnRFUktOU18xNEhpdFRlc3RS
ZXF1ZXN0RVJLTlNfOEludFBvaW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dl
YkNvcmUxM0lubGluZVRleHRCb3gxMW5vZGVBdFBvaW50RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVS
TlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfOEludFBvaW50RWlpaWkKLV9fWk5LN1dlYkNvcmU5Rmxv
YXRSZWN0MTBpbnRlcnNlY3RzRVJLUzBfCitfX1pOSzdXZWJDb3JlMTJHcmFwaGljc1JlY3QxMGlu
dGVyc2VjdHNFUktTMF8KIF9fWk43V2ViQ29yZTlJbmxpbmVCb3gxOGZsaXBGb3JXcml0aW5nTW9k
ZUVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDI4YWRkTm9kZVRv
UmVjdEJhc2VkVGVzdFJlc3VsdEVQTlNfNE5vZGVFaWlSS05TXzlGbG9hdFJlY3RFCitfX1pON1dl
YkNvcmUxM0hpdFRlc3RSZXN1bHQyOGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHRFUE5TXzRO
b2RlRWlpUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTROb2RlMzBlbmNsb3NpbmdM
aW5rRXZlbnRQYXJlbnRPclNlbGZFdgogX19aTjdXZWJDb3JlOERvY3VtZW50MTJzZXRIb3Zlck5v
ZGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9i
amVjdDEzaG92ZXJBbmNlc3RvckV2CkBAIC02NTI3LDcgKzY1MjcsNyBAQCBfX1pON1dlYkNvcmUx
M1Jvb3RJbmxpbmVCb3gxNWNsZWFyVHJ1bmNhCiBfX1pON1dlYkNvcmUxMUVsbGlwc2lzQm94RDBF
dgogX19aTjdXZWJDb3JlMTNJbmxpbmVGbG93Qm94MTVjbGVhclRydW5jYXRpb25FdgogX19aTjdX
ZWJDb3JlMTNJbmxpbmVUZXh0Qm94MTVjbGVhclRydW5jYXRpb25FdgotX19aTjdXZWJDb3JlMTBS
ZW5kZXJUZXh0MTNhYnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBF
RUVOUzBfMTRDbGlwcGluZ09wdGlvbkUKK19fWk43V2ViQ29yZTEwUmVuZGVyVGV4dDEzYWJzb2x1
dGVRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRU5TMF8xNENsaXBw
aW5nT3B0aW9uRQogX19aTks3V2ViQ29yZTEzSW5saW5lVGV4dEJveDE5Y2FsY3VsYXRlQm91bmRh
cmllc0V2CiBfX1pOSzdXZWJDb3JlMTNSb290SW5saW5lQm94MTFlbGxpcHNpc0JveEV2CiBfX1pO
N1dlYkNvcmUxMUVsbGlwc2lzQm94MTNzZWxlY3Rpb25SZWN0RWlpCkBAIC02Njk3LDcgKzY2OTcs
NyBAQCBfX1pON1dlYkNvcmUxMlJlbmRlcldpZGdldDVwYWludEVSTlNfOVBhCiBfX1pOSzdXZWJD
b3JlOVJlbmRlckJveDE1Ym9yZGVyRml0QWRqdXN0RVJOU183SW50UmVjdEUKIF9fWk43V2ViQ29y
ZTEwU2Nyb2xsVmlldzVwYWludEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUK
IF9fWk43V2ViQ29yZTZXaWRnZXQ1cGFpbnRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0lu
dFJlY3RFCi1fX1pON1dlYkNvcmUxOW1ha2VNYXBCZXR3ZWVuUmVjdHNFUktOU185RmxvYXRSZWN0
RVMyXworX19aTjdXZWJDb3JlMTltYWtlTWFwQmV0d2VlblJlY3RzRVJLTlNfMTJHcmFwaGljc1Jl
Y3RFUzJfCiBfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eVNjYWxlRXYKIF9fWk5LN1dl
YkNvcmUxNUFmZmluZVRyYW5zZm9ybTZ4U2NhbGVFdgogX19aTks3V2ViQ29yZTExUmVuZGVyTGF5
ZXIyMHJlcXVpcmVzU2xvd1JlcGFpbnRzRXYKQEAgLTY3MzUsNyArNjczNSw3IEBAIF9fWk43V2Vi
Q29yZTE2SlNIVE1MUHJlRWxlbWVudEMxRVBOM0pTQzkKIF9fWk43V2ViQ29yZTEyY2FjaGVXcmFw
cGVySU5TXzE0SFRNTFByZUVsZW1lbnRFRUV2UE5TXzE1RE9NV3JhcHBlcldvcmxkRVBUX1BOU18x
MkpTRE9NV3JhcHBlckUKIF9fWk43V2ViQ29yZTEzQVhXZWJBcmVhVGV4dEV2CiBfX1pON1dlYkNv
cmUyN0RlZmF1bHRMb2NhbGl6YXRpb25TdHJhdGVneTEzQVhXZWJBcmVhVGV4dEV2Ci1fX1pON1dl
YkNvcmUxMFJlbmRlclZpZXcxM2Fic29sdXRlUXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRR
dWFkRUxtMEVFRQorX19aTjdXZWJDb3JlMTBSZW5kZXJWaWV3MTNhYnNvbHV0ZVF1YWRzRVJOM1dU
RjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCiBfX1pON1dlYkNvcmUyNUFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QxNmdldERvY3VtZW50TGlua3NFUk4zV1RGNlZlY3RvcklOUzFfNlJl
ZlB0cklOU18xOUFjY2Vzc2liaWxpdHlPYmplY3RFRUVMbTBFRUUKIF9fWk43V2ViQ29yZThEb2N1
bWVudDVsaW5rc0V2CiBfX1pOSzdXZWJDb3JlMTRIVE1MQ29sbGVjdGlvbjhuZXh0SXRlbUV2CkBA
IC03MjM3LDEwICs3MjM3LDEwIEBAIF9fWk43V2ViQ29yZTIxUmVuZGVyTGF5ZXJDb21wb3NpdG9y
MzV1cGQKIF9fWk43V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyOHBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmRFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfOVBhaW50SW5mb0VSS05TXzdJbnRSZWN0
RQogX19aTjdXZWJDb3JlMTRSZW5kZXJUaGVtZU1hYzIycGFpbnRNZWRpYVJld2luZEJ1dHRvbkVQ
TlNfMTJSZW5kZXJPYmplY3RFUktOU185UGFpbnRJbmZvRVJLTlNfN0ludFJlY3RFCiBfX1pON1dl
YkNvcmUxNFJlbmRlclRoZW1lTWFjMjBwYWludE1lZGlhUGxheUJ1dHRvbkVQTlNfMTJSZW5kZXJP
YmplY3RFUktOU185UGFpbnRJbmZvRVJLTlNfN0ludFJlY3RFCi1fX1pON1dlYkNvcmUxM0lubGlu
ZVRleHRCb3gyOGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHRFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVBLTlNfMTBTaGFkb3dEYXRhRVJLTlNfOUZsb2F0UmVjdEViYmIKLV9fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5T
XzEwQ29sb3JTcGFjZUUKLV9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdzZXRQbGF0Zm9y
bVNoYWRvd0VSS05TXzlGbG9hdFNpemVFZlJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKLV9f
Wk5LN1dlYkNvcmU5RmxvYXRTaXplY3Y2Q0dTaXplRXYKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4
dEJveDI4YXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRF
UEtOU18xMFNoYWRvd0RhdGFFUktOU18xMkdyYXBoaWNzUmVjdEViYmIKK19fWk43V2ViQ29yZTE1
R3JhcGhpY3NDb250ZXh0OXNldFNoYWRvd0VSS05TXzEyR3JhcGhpY3NTaXplRWZSS05TXzVDb2xv
ckVOU18xMENvbG9yU3BhY2VFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE3c2V0UGxh
dGZvcm1TaGFkb3dFUktOU18xMkdyYXBoaWNzU2l6ZUVmUktOU181Q29sb3JFTlNfMTBDb2xvclNw
YWNlRQorX19aTks3V2ViQ29yZTEyR3JhcGhpY3NTaXplY3Y2Q0dTaXplRXYKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MTFjbGVhclNoYWRvd0V2CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNz
Q29udGV4dDE5Y2xlYXJQbGF0Zm9ybVNoYWRvd0V2CiBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVs
ZW1lbnQyMGFzeW5jRXZlbnRUaW1lckZpcmVkRVBOU181VGltZXJJUzBfRUUKQEAgLTczMjIsNyAr
NzMyMiw3IEBAIF9fWk5LN1dlYkNvcmUxMU1lZGlhUGxheWVyNnBhdXNlZEV2CiBfX1pOSzdXZWJD
b3JlMzBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb242cGF1c2VkRXYKIF9fWk5LN1dlYkNv
cmUzNE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM0cmF0ZUV2CiBfX1pON1dlYkNv
cmUyM01lZGlhQ29udHJvbFJvb3RFbGVtZW50MTVwbGF5YmFja1N0b3BwZWRFdgotX19aTjNXVEY2
VmVjdG9ySU43V2ViQ29yZTlGbG9hdFJlY3RFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCitfX1pO
M1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNXJlc2VydmVDYXBhY2l0
eUVtCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJCbG9jazE5dmlydHVhbENvbnRpbnVhdGlvbkV2CiBf
X1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTFyZW1vdmVDaGlsZEVQUzBfCiBfX1pON1dlYkNvcmUy
MVJlbmRlckxheWVyQ29tcG9zaXRvcjE4bGF5ZXJXaWxsQmVSZW1vdmVkRVBOU18xMVJlbmRlckxh
eWVyRVMyXwpAQCAtNzM0Niw4ICs3MzQ2LDggQEAgX19aTjdXZWJDb3JlMTdSZW5kZXJTbGlkZXJU
aHVtYjZsYXlvdXRFdgogX19aTjdXZWJDb3JlMTJSZW5kZXJTbGlkZXI5dGh1bWJSZWN0RXYKIF9f
Wk43V2ViQ29yZTlTdGVwUmFuZ2UxNnZhbHVlRnJvbUVsZW1lbnRFUE5TXzE2SFRNTElucHV0RWxl
bWVudEVQYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOHNldHVwQ29udGVudHNMYXll
ckVQTlNfMTVQbGF0Zm9ybUNBTGF5ZXJFCi1fX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE0
c2V0QW5jaG9yUG9pbnRFUktOU18xMkZsb2F0UG9pbnQzREUKLV9fWk4zV1RGNlZlY3RvcklON1dl
YkNvcmU5RmxvYXRSZWN0RUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCitfX1pON1dlYkNvcmUxNVBs
YXRmb3JtQ0FMYXllcjE0c2V0QW5jaG9yUG9pbnRFUktOU18xNUdyYXBoaWNzUG9pbnQzREUKK19f
Wk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVMbTBFRTE0c2hyaW5rQ2FwYWNp
dHlFbQogX19aTjdXZWJDb3JlMTRSZW5kZXJUaGVtZU1hYzIxcGFpbnRNZWRpYVNsaWRlclRyYWNr
RVBOU18xMlJlbmRlck9iamVjdEVSS05TXzlQYWludEluZm9FUktOU183SW50UmVjdEUKIF9fWk5L
N1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQ4YnVmZmVyZWRFdgogX19aTjdXZWJDb3JlMTFNZWRp
YVBsYXllcjhidWZmZXJlZEV2CkBAIC03NDg3LDggKzc0ODcsOCBAQCBfX1pON1dlYkNvcmUxNFNj
cm9sbEFuaW1hdG9yMjFub3RpdHlQb3NpCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjhz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uRVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3Jl
MTFSZW5kZXJMYXllcjE1c2V0U2Nyb2xsT2Zmc2V0RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJD
b3JlMTFSZW5kZXJMYXllcjhzY3JvbGxUb0VpaQotX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIz
NmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZEVSS05TXzlGbG9hdFF1YWRFCi1f
X1pOSzdXZWJDb3JlOUZsb2F0UXVhZDEzY29udGFpbnNQb2ludEVSS05TXzEwRmxvYXRQb2ludEUK
K19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMzZkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNv
b25JblF1YWRFUktOU18xMkdyYXBoaWNzUXVhZEUKK19fWk5LN1dlYkNvcmUxMkdyYXBoaWNzUXVh
ZDEzY29udGFpbnNQb2ludEVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTlTY3Jv
bGxiYXIxNW9mZnNldERpZENoYW5nZUV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXllcjE0c2Ny
b2xsUG9zaXRpb25FUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTl1cGRh
dGVUaHVtYlBvc2l0aW9uRXYKQEAgLTgwOTEsOSArODA5MSw5IEBAIF9fWk43V2ViQ29yZTIwVHJh
bnNmb3JtYXRpb25NYXRyaXg4bXVsdGkKIF9fWk5LN1dlYkNvcmUyMVJlbmRlckxheWVyQ29tcG9z
aXRvcjIxY2FuUmVuZGVyM0RUcmFuc2Zvcm1zRXYKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVy
MTZjdXJyZW50VHJhbnNmb3JtRXYKIF9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4
N21hcFJlY3RFUktOU183SW50UmVjdEUKLV9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0
cml4N21hcFJlY3RFUktOU185RmxvYXRSZWN0RQotX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRp
b25NYXRyaXg3bWFwUXVhZEVSS05TXzlGbG9hdFF1YWRFCi1fX1pOSzdXZWJDb3JlMjBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDhtYXBQb2ludEVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmUy
MFRyYW5zZm9ybWF0aW9uTWF0cml4N21hcFJlY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKK19fWk5L
N1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4N21hcFF1YWRFUktOU18xMkdyYXBoaWNzUXVh
ZEUKK19fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OG1hcFBvaW50RVJLTlNfMTNH
cmFwaGljc1BvaW50RQogX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MjVnZXRUcmFuc2Zvcm1G
cm9tQ29udGFpbmVyRVBLUzBfUktOU183SW50U2l6ZUVSTlNfMjBUcmFuc2Zvcm1hdGlvbk1hdHJp
eEUKIF9fWk43V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXg5dHJhbnNsYXRlRWRkCiBfX1pO
N1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlMTRhcHBseVRyYW5zZm9ybUVSS05TXzIwVHJhbnNmb3Jt
YXRpb25NYXRyaXhFTlMwXzIxVHJhbnNmb3JtQWNjdW11bGF0aW9uRQpAQCAtODQ4Myw5ICs4NDgz
LDkgQEAgX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMjJzZXRSZQogX19aTjdXZWJD
b3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTFzZXRBZGRpdGl2ZUViCiBfX1pON1dlYkNvcmUxOVBs
YXRmb3JtQ0FBbmltYXRpb24xMXNldEZpbGxNb2RlRU5TMF8xMkZpbGxNb2RlVHlwZUUKIF9fWk43
V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMzBzZXRUcmFuc2Zvcm1BbmltYXRpb25FbmRwb2ludHNF
UktOU18xN0tleWZyYW1lVmFsdWVMaXN0RVBLTlNfOUFuaW1hdGlvbkVQTlNfMTlQbGF0Zm9ybUNB
QW5pbWF0aW9uRWlOU18xOFRyYW5zZm9ybU9wZXJhdGlvbjEzT3BlcmF0aW9uVHlwZUViUktOU183
SW50U2l6ZUUKLV9fWk43V2ViQ29yZUwyNWdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWVFUEtOU18x
OFRyYW5zZm9ybU9wZXJhdGlvbkVOUzBfMTNPcGVyYXRpb25UeXBlRVJLTlNfN0ludFNpemVFUk5T
XzEyRmxvYXRQb2ludDNERQotX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTJzZXRG
cm9tVmFsdWVFUktOU18xMkZsb2F0UG9pbnQzREUKLV9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFu
aW1hdGlvbjEwc2V0VG9WYWx1ZUVSS05TXzEyRmxvYXRQb2ludDNERQorX19aTjdXZWJDb3JlTDI1
Z2V0VHJhbnNmb3JtRnVuY3Rpb25WYWx1ZUVQS05TXzE4VHJhbnNmb3JtT3BlcmF0aW9uRU5TMF8x
M09wZXJhdGlvblR5cGVFUktOU183SW50U2l6ZUVSTlNfMTVHcmFwaGljc1BvaW50M0RFCitfX1pO
N1dlYkNvcmUxOVBsYXRmb3JtQ0FBbmltYXRpb24xMnNldEZyb21WYWx1ZUVSS05TXzE1R3JhcGhp
Y3NQb2ludDNERQorX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTBzZXRUb1ZhbHVl
RVJLTlNfMTVHcmFwaGljc1BvaW50M0RFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMx
dGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZUVQS05TXzE0QW5pbWF0aW9uVmFsdWVFUEtO
U185QW5pbWF0aW9uRQogX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTdzZXRUaW1p
bmdGdW5jdGlvbkVQS05TXzE0VGltaW5nRnVuY3Rpb25FCiBfX1pON1dlYkNvcmUxOVBsYXRmb3Jt
Q0FBbmltYXRpb24xNnNldFZhbHVlRnVuY3Rpb25FTlMwXzE3VmFsdWVGdW5jdGlvblR5cGVFCkBA
IC04NTU5LDkgKzg1NTksOSBAQCBfX1pOSzdXZWJDb3JlMThDb21wb3NpdGVBbmltYXRpb24xNmdl
dEFuCiBfX1pON1dlYkNvcmUxN0tleWZyYW1lQW5pbWF0aW9uMTZnZXRBbmltYXRlZFN0eWxlRVJO
M1dURjZSZWZQdHJJTlNfMTFSZW5kZXJTdHlsZUVFRQogX19aTjdXZWJDb3JlMjRIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUxNGFwcGx5VHJhbnNmb3JtRVJLTlNfMjBUcmFuc2Zvcm1hdGlvbk1hdHJp
eEVOUzBfMjFUcmFuc2Zvcm1BY2N1bXVsYXRpb25FCiBfX1pOSzdXZWJDb3JlMjRIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUxMW1hcHBlZFBvaW50RXYKLV9fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0
aW9uTWF0cml4MTJwcm9qZWN0UG9pbnRFUktOU18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3Jl
MjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDEycHJvamVjdFBvaW50RVJLTlNfMTNHcmFwaGljc1BvaW50
RQogX19aTjdXZWJDb3JlMjRIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU3ZmxhdHRlbkV2Ci1fX1pO
SzdXZWJDb3JlMjBUcmFuc2Zvcm1hdGlvbk1hdHJpeDExcHJvamVjdFF1YWRFUktOU185RmxvYXRR
dWFkRQorX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXgxMXByb2plY3RRdWFkRVJL
TlNfMTJHcmFwaGljc1F1YWRFCiBfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMTNoaXRUZXN0Rmxv
YXRzRVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RWlpaWkKIF9fWk43
V2ViQ29yZTExUmVuZGVyQmxvY2syNGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbEVSTlNfMTNIaXRU
ZXN0UmVzdWx0RWlpaWkKIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94MThmbGlwRm9yV3JpdGluZ01v
ZGVFUktOU184SW50UG9pbnRFCkBAIC04Nzc5LDEwICs4Nzc5LDEwIEBAIF9fWk4zV1RGNlZlY3Rv
cklQTjdXZWJDb3JlOVJlbmRlckJveEVMbTAKIF9fWlRobjhfTjdXZWJDb3JlMjBIVE1MUGFyYWdy
YXBoRWxlbWVudEQwRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjNjcmVhdGVLZXlm
cmFtZUFuaW1hdGlvbkVQS05TXzlBbmltYXRpb25FTlNfMThBbmltYXRlZFByb3BlcnR5SURFYgog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EzMHNldFRyYW5zZm9ybUFuaW1hdGlvbktleWZy
YW1lc0VSS05TXzE3S2V5ZnJhbWVWYWx1ZUxpc3RFUEtOU185QW5pbWF0aW9uRVBOU18xOVBsYXRm
b3JtQ0FBbmltYXRpb25FaU5TXzE4VHJhbnNmb3JtT3BlcmF0aW9uMTNPcGVyYXRpb25UeXBlRWJS
S05TXzdJbnRTaXplRQotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyRmxvYXRQb2ludDNERUxt
MEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQorX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTE1R3JhcGhp
Y3NQb2ludDNERUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjNXVEY2VmVjdG9ySVBLTjdX
ZWJDb3JlMTRUaW1pbmdGdW5jdGlvbkVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbQogX19aTjdXZWJD
b3JlMTlQbGF0Zm9ybUNBQW5pbWF0aW9uMTFzZXRLZXlUaW1lc0VSS04zV1RGNlZlY3RvcklmTG0w
RUVFCi1fX1pON1dlYkNvcmUxOVBsYXRmb3JtQ0FBbmltYXRpb245c2V0VmFsdWVzRVJLTjNXVEY2
VmVjdG9ySU5TXzEyRmxvYXRQb2ludDNERUxtMEVFRQorX19aTjdXZWJDb3JlMTlQbGF0Zm9ybUNB
QW5pbWF0aW9uOXNldFZhbHVlc0VSS04zV1RGNlZlY3RvcklOU18xNUdyYXBoaWNzUG9pbnQzREVM
bTBFRUUKIF9fWk43V2ViQ29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjE4c2V0VGltaW5nRnVuY3Rp
b25zRVJLTjNXVEY2VmVjdG9ySVBLTlNfMTRUaW1pbmdGdW5jdGlvbkVMbTBFRUUKIF9fWk43V2Vi
Q29yZUwyOGNyZWF0ZUhUTUxMaW5rRWxlbWVudFdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNf
MTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xMUhUTUxFbGVtZW50RUVF
CiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTdKU0hUTUxMaW5rRWxlbWVudEVOU18x
NUhUTUxMaW5rRWxlbWVudEVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KQEAgLTg4NzYsNyArODg3Niw3IEBAIF9fWk43V2Vi
Q29yZTE5UGxhdGZvcm1DQUFuaW1hdGlvbjEyc2V0RnIKIF9fWk43V2ViQ29yZTE5UGxhdGZvcm1D
QUFuaW1hdGlvbjEwc2V0VG9WYWx1ZUVSS05TXzIwVHJhbnNmb3JtYXRpb25NYXRyaXhFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTI4Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lc0VS
S05TXzE3S2V5ZnJhbWVWYWx1ZUxpc3RFUEtOU185QW5pbWF0aW9uRVJLTjNXVEY2U3RyaW5nRWQK
IF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjFzZXRBbmltYXRpb25LZXlmcmFtZXNFUktO
U18xN0tleWZyYW1lVmFsdWVMaXN0RVBLTlNfOUFuaW1hdGlvbkVQTlNfMTlQbGF0Zm9ybUNBQW5p
bWF0aW9uRQotX19aTjdXZWJDb3JlMTlGbG9hdEFuaW1hdGlvblZhbHVlRDBFdgorX19aTjdXZWJD
b3JlMTEyR3JhcGhpY3NBbmltYXRpb25WYWx1ZUQwRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMjB1cGRhdGVPcGFjaXR5T25MYXllckV2CiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FM
YXllcjEwc2V0T3BhY2l0eUVmCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25F
UE5TXzVGcmFtZUVqCkBAIC05MDQ2LDkgKzkwNDYsOSBAQCBfX1pOSzdXZWJDb3JlMTBTdHlsZUlt
YWdlMTRpc1BlbmRpbmdJbWFnCiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJMaXN0SXRlbTM2cmVxdWly
ZXNGb3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uRXYKIF9fWk5LN1dlYkNvcmUxNlN0eWxlQ2Fj
aGVkSW1hZ2U1aW1hZ2VFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfN0ludFNpemVFCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDE0ZHJhd1RpbGVkSW1hZ2VFUE5TXzVJbWFnZUVOU18xMENv
bG9yU3BhY2VFUktOU183SW50UmVjdEVSS05TXzhJbnRQb2ludEVSS05TXzdJbnRTaXplRU5TXzE3
Q29tcG9zaXRlT3BlcmF0b3JFYgotX19aTjdXZWJDb3JlNUltYWdlOWRyYXdUaWxlZEVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RVJLTlNfMTBGbG9hdFBvaW50RVJLTlNfOUZs
b2F0U2l6ZUVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2Vi
Q29yZTVJbWFnZTlkcmF3VGlsZWRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFUktOU18xM0dyYXBoaWNzUG9pbnRFUktOU18xMkdyYXBoaWNzU2l6ZUVOU18xMENvbG9y
U3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNm
b3JtMTVzY2FsZU5vblVuaWZvcm1FZGQKLV9fWk43V2ViQ29yZTVJbWFnZTExZHJhd1BhdHRlcm5F
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE1QWZmaW5lVHJhbnNm
b3JtRVJLTlNfMTBGbG9hdFBvaW50RU5TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJh
dG9yRVM1XworX19aTjdXZWJDb3JlNUltYWdlMTFkcmF3UGF0dGVybkVQTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfMTNH
cmFwaGljc1BvaW50RU5TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRVM1Xwog
X19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZTI2bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVFdgog
X19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtMTJpc0ludmVydGlibGVFdgogX19aTjdXZWJD
b3JlMjRKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQxM3Zpc2l0Q2hpbGRyZW5FUk4zSlNDOU1hcmtT
dGFja0UKQEAgLTkwNjUsNyArOTA2NSw3IEBAIF9fWk43V2ViQ29yZTExQ2FudmFzU3R5bGUxNGFw
cGx5RmlsbENvbG8KIF9fWk43V2ViQ29yZTUxanNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90
b3R5cGVGdW5jdGlvbkZpbGxSZWN0RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDhmaWxsUmVjdEVmZmZmCiBfX1pOSzdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxMmZpbGxHcmFkaWVudEV2Ci1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDhmaWxsUmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlNDBzZXRKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREdsb2JhbEFscGhhRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNP
YmplY3RFTlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQxNHNldEdsb2JhbEFscGhhRWYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0OHNldEFs
cGhhRWYKQEAgLTkwNzUsOCArOTA3NSw4IEBAIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJENHMKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDVTdGF0ZUVMbTFFRTE1cmVzZXJ2ZUNhcGFjaXR5RW0KIF9fWk43V2ViQ29yZTI0Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJENVN0YXRlQzJFUktTMV8KIF9fWk43V2ViQ29yZTI0Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEMjVzZXRBbGxBdHRyaWJ1dGVzVG9EZWZhdWx0RXYKLV9fWk43V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0MTVzZXRMZWdhY3lTaGFkb3dFUktOU185RmxvYXRTaXplRWZS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCi1fX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDljbGVhclJlY3RFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQxNXNldExlZ2FjeVNoYWRvd0VSS05TXzEyR3JhcGhpY3NTaXplRWZSS05TXzVDb2xvckVOU18x
MENvbG9yU3BhY2VFCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDljbGVhclJlY3RFUktO
U18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
N3Jlc3RvcmVFdgogX19aTjdXZWJDb3JlNFBhdGg5dHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFu
c2Zvcm1FCiBfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm0xMGlzSWRlbnRpdHlFdgpAQCAt
OTA4NCw3ICs5MDg0LDcgQEAgX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtN2ludmVyc2VF
dgogX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJENGlzMmRFdgogX19aTjdX
ZWJDb3JlNTVqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uR2V0SW1h
Z2VEYXRhRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pOSzdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQxMmdldEltYWdlRGF0YUVmZmZmUmkKLV9fWk5LN1dlYkNvcmUxN0hUTUxDYW52YXNF
bGVtZW50MjJjb252ZXJ0TG9naWNhbFRvRGV2aWNlRVJLTlNfOUZsb2F0UmVjdEUKK19fWk5LN1dl
YkNvcmUxN0hUTUxDYW52YXNFbGVtZW50MjJjb252ZXJ0TG9naWNhbFRvRGV2aWNlRVJLTlNfMTJH
cmFwaGljc1JlY3RFCiBfX1pOSzdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjI0Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhRVJLTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTVJbWFnZUJ1ZmZlckRhdGE3
Z2V0RGF0YUVSS05TXzdJbnRSZWN0RVJLTlNfN0ludFNpemVFYmIKIF9fWk43V2ViQ29yZUwyMnVu
cHJlbXVsdGl0cGx5U2NhbmxpbmVFUHZtCkBAIC05MTQxLDcgKzkxNDEsNyBAQCBfX1pON1dlYkNv
cmUxN0hUTUxDYW52YXNFbGVtZW50OXNldEhlaWdoCiBfX1pON1dlYkNvcmU1MmpzQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25EcmF3SW1hZ2VFUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTI2SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBO
M0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlk
cmF3SW1hZ2VFUE5TXzE2SFRNTEltYWdlRWxlbWVudEVmZlJpCi1fX1pON1dlYkNvcmUyNENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE2SFRNTEltYWdlRWxlbWVudEVSS05T
XzlGbG9hdFJlY3RFUzVfUktOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRVJpCitfX1pON1dlYkNvcmUy
NENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE2SFRNTEltYWdlRWxlbWVu
dEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X1JLTlNfMTdDb21wb3NpdGVPcGVyYXRvckVSaQogX19a
Tks3V2ViQ29yZTE2SFRNTEltYWdlRWxlbWVudDhjb21wbGV0ZUV2CiBfX1pON1dlYkNvcmUyMkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQxMWNoZWNrT3JpZ2luRVBLTlNfMTZIVE1MSW1hZ2VFbGVtZW50
RQogX19aTjdXZWJDb3JlMjJDYW52YXNSZW5kZXJpbmdDb250ZXh0MTFjaGVja09yaWdpbkVSS05T
XzRLVVJMRQpAQCAtOTE1MCw3ICs5MTUwLDcgQEAgX19aTks3V2ViQ29yZTE0U2VjdXJpdHlPcmln
aW4xMnRhaW50c0NhbgogX19aTks3V2ViQ29yZTExQml0bWFwSW1hZ2UyM2hhc1NpbmdsZVNlY3Vy
aXR5T3JpZ2luRXYKIF9fWk43V2ViQ29yZUwyNXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2VFUlBL
dFMxX2NSTlNfMTdDU1NQcmltaXRpdmVWYWx1ZTlVbml0VHlwZXNFUmkKIF9fWk43V2ViQ29yZTI0
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJbWFnZUVQTlNfMTdIVE1MQ2FudmFzRWxlbWVu
dEVmZlJpCi1fX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VF
UE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFUktOU185RmxvYXRSZWN0RVM1X1JpCitfX1pON1dlYkNv
cmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5TXzE3SFRNTENhbnZhc0Vs
ZW1lbnRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9SaQogX19aTjdXZWJDb3JlMjJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MTFjaGVja09yaWdpbkVQS05TXzE3SFRNTENhbnZhc0VsZW1lbnRFCiBfX1pO
N1dlYkNvcmUxN0hUTUxDYW52YXNFbGVtZW50MjltYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJs
ZUV2CiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlMTVnZXRDR0ltYWdlQXJyYXlFdgpAQCAtOTE4
OSw3ICs5MTg5LDcgQEAgX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEMgog
X19aTjdXZWJDb3JlMjFjb21wb3NpdGVPcGVyYXRvck5hbWVFTlNfMTdDb21wb3NpdGVPcGVyYXRv
ckUKIF9fWk43V2ViQ29yZUwxMXBhcnNlRG91YmxlRVBLdFMxX2NSZAogX19aTjdXZWJDb3JlMjRD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxJbWFnZUVsZW1lbnRF
ZmZmZlJpCi1fX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VF
UE5TXzE2SFRNTEltYWdlRWxlbWVudEVSS05TXzlGbG9hdFJlY3RFUzVfUmkKK19fWk43V2ViQ29y
ZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWRyYXdJbWFnZUVQTlNfMTZIVE1MSW1hZ2VFbGVt
ZW50RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfUmkKIF9fWk43V2ViQ29yZTlSZW5kZXJCb3gzM21h
cmtGb3JQYWdpbmF0aW9uUmVsYXlvdXRJZk5lZWRlZEV2CiBfX1pOSzdXZWJDb3JlMTZTdHlsZUNh
Y2hlZEltYWdlMjJ1c2VzSW1hZ2VDb250YWluZXJTaXplRXYKIF9fWk43V2ViQ29yZTExQml0bWFw
SW1hZ2UyMGZyYW1lRHVyYXRpb25BdEluZGV4RW0KQEAgLTkyNzQsOCArOTI3NCw4IEBAIF9fWk43
V2ViQ29yZTE1SFRNTExpbmtFbGVtZW50MTlyZW1vdmVkRnIKIF9fWlRobjhfTjdXZWJDb3JlMTVI
VE1MSHRtbEVsZW1lbnREMEV2CiBfX1pON1dlYkNvcmU2M2pzQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEUHJvdG90eXBlRnVuY3Rpb25DcmVhdGVMaW5lYXJHcmFkaWVudEVQTjNKU0M5RXhlY1N0YXRl
RQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQyMGNyZWF0ZUxpbmVhckdy
YWRpZW50RWZmZmZSaQotX19aTjdXZWJDb3JlMTRDYW52YXNHcmFkaWVudEMxRVJLTlNfMTBGbG9h
dFBvaW50RVMzXwotX19aTjdXZWJDb3JlOEdyYWRpZW50QzFFUktOU18xMEZsb2F0UG9pbnRFUzNf
CitfX1pON1dlYkNvcmUxNENhbnZhc0dyYWRpZW50QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNf
CitfX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05TXzEzR3JhcGhpY3NQb2ludEVTM18KIF9fWk43
V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5T
XzE0Q2FudmFzR3JhZGllbnRFCiBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTZKU0Nh
bnZhc0dyYWRpZW50RU5TXzE0Q2FudmFzR3JhZGllbnRFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4z
SlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dlYkNvcmUx
NWdldERPTVN0cnVjdHVyZUlOU18xNkpTQ2FudmFzR3JhZGllbnRFRUVQTjNKU0M5U3RydWN0dXJl
RVBOUzJfOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEUKQEAgLTkyODUsNyArOTI4
NSw3IEBAIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTVzZXRGaWxsR3IKIF9fWk5LN1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDloYXNTaGFkb3dFdgogX19aTjdXZWJDb3JlOEdyYWRpZW50
NXBhaW50RVBOU18xNUdyYXBoaWNzQ29udGV4dEUKIF9fWk43V2ViQ29yZThHcmFkaWVudDVwYWlu
dEVQOUNHQ29udGV4dAotX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2N0NHUG9pbnRFdgorX19a
Tks3V2ViQ29yZTEzR3JhcGhpY3NQb2ludGN2N0NHUG9pbnRFdgogX19aTjdXZWJDb3JlOEdyYWRp
ZW50MTZwbGF0Zm9ybUdyYWRpZW50RXYKIF9fWk43V2ViQ29yZThHcmFkaWVudDIwc29ydFN0b3Bz
SWZOZWNlc3NhcnlFdgogX19aTjdXZWJDb3JlMTZKU0NhbnZhc0dyYWRpZW50RDFFdgpAQCAtOTMy
MSwxMyArOTMyMSwxMyBAQCBfX1pON1dlYkNvcmUyN0pTQ2FudmFzR3JhZGllbnRDb25zdHJ1Y3Rv
CiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90SU43V2ViQ29yZTI3SlNDYW52YXNHcmFkaWVu
dENvbnN0cnVjdG9yRU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlI
YXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdX
ZWJDb3JlNjNqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRl
UmFkaWFsR3JhZGllbnRFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTI0Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEMjBjcmVhdGVSYWRpYWxHcmFkaWVudEVmZmZmZmZSaQotX19aTjdXZWJD
b3JlMTRDYW52YXNHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RWZTM19mCi1fX1pON1dlYkNv
cmU4R3JhZGllbnRDMUVSS05TXzEwRmxvYXRQb2ludEVmUzNfZmYKK19fWk43V2ViQ29yZTE0Q2Fu
dmFzR3JhZGllbnRDMUVSS05TXzEzR3JhcGhpY3NQb2ludEVmUzNfZgorX19aTjdXZWJDb3JlOEdy
YWRpZW50QzFFUktOU18xM0dyYXBoaWNzUG9pbnRFZlMzX2ZmCiBfX1pON1dlYkNvcmUyN0pTQ2Fu
dmFzR3JhZGllbnRDb25zdHJ1Y3RvckQxRXYKIF9fWk43V2ViQ29yZTU4anNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRQcm90b3R5cGVGdW5jdGlvbkNyZWF0ZUltYWdlRGF0YUVQTjNKU0M5RXhlY1N0
YXRlRQogX19aTjdXZWJDb3JlMjZKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDE1Y3JlYXRlSW1h
Z2VEYXRhRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pOSzdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQxNWNyZWF0ZUltYWdlRGF0YUVmZlJpCi1fX1pOSzdXZWJDb3JlMTdIVE1MQ2FudmFz
RWxlbWVudDIyY29udmVydExvZ2ljYWxUb0RldmljZUVSS05TXzlGbG9hdFNpemVFCitfX1pOSzdX
ZWJDb3JlMTdIVE1MQ2FudmFzRWxlbWVudDIyY29udmVydExvZ2ljYWxUb0RldmljZUVSS05TXzEy
R3JhcGhpY3NTaXplRQogX19aTjdXZWJDb3JlOUltYWdlRGF0YTZjcmVhdGVFUktOU183SW50U2l6
ZUUKIF9fWk43V2ViQ29yZTE2Q2FudmFzUGl4ZWxBcnJheTZjcmVhdGVFagogX19aTjdXZWJDb3Jl
MTF0b0ltYWdlRGF0YUVOM0pTQzdKU1ZhbHVlRQpAQCAtOTM2Myw3ICs5MzYzLDcgQEAgX19aTks3
V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJENwogX19aTjdXZWJDb3JlMTFsaW5lQ2Fw
TmFtZUVOU183TGluZUNhcEUKIF9fWk43V2ViQ29yZTQ2anNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRQcm90b3R5cGVGdW5jdGlvbkFyY0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQzYXJjRWZmZmZmYlJpCi1fX1pON1dlYkNvcmU0UGF0aDZh
ZGRBcmNFUktOU18xMEZsb2F0UG9pbnRFZmZmYgorX19aTjdXZWJDb3JlNFBhdGg2YWRkQXJjRVJL
TlNfMTNHcmFwaGljc1BvaW50RWZmZmIKIF9fWk43V2ViQ29yZTM1anNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRMaW5lV2lkdGhFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJ
ZGVudGlmaWVyRQogX19aTks3V2ViQ29yZTI0Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOWxpbmVX
aWR0aEV2CiBfX1pON1dlYkNvcmUzNGpzQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJETGluZUpvaW5F
UE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtOTM4
Nyw3ICs5Mzg3LDcgQEAgX19aTjdXZWJDb3JlNDhqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAog
X19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ1YXJjVG9FZmZmZmZSaQogX19a
TjdXZWJDb3JlNTZqc0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZUZ1bmN0aW9uSXNQ
b2ludEluUGF0aEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQxM2lzUG9pbnRJblBhdGhFZmYKLV9fWk5LN1dlYkNvcmUxNUFmZmluZVRyYW5z
Zm9ybThtYXBQb2ludEVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybThtYXBQb2ludEVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTUxanND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRQcm90b3R5cGVGdW5jdGlvbkZpbGxUZXh0RVBOM0pTQzlF
eGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOGZpbGxU
ZXh0RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmU1M2pzQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEUHJvdG90eXBlRnVuY3Rpb25TdHJva2VUZXh0RVBOM0pTQzlFeGVjU3RhdGVFCkBAIC05
NDA5LDEwICs5NDA5LDEwIEBAIF9fWk43V2ViQ29yZTIySlNUZXh0TWV0cmljc1Byb3RvdHlwZUQx
RXYKIF9fWk43V2ViQ29yZTE1Q1NTRm9udFNlbGVjdG9yMzR1bnJlZ2lzdGVyRm9ySW52YWxpZGF0
aW9uQ2FsbGJhY2tzRVBOU18xOEZvbnRTZWxlY3RvckNsaWVudEUKIF9fWk5LM1dURjlIYXNoVGFi
bGVJUE43V2ViQ29yZTE4Rm9udFNlbGVjdG9yQ2xpZW50RVMzX05TXzE3SWRlbnRpdHlFeHRyYWN0
b3JJUzNfRUVOU183UHRySGFzaElTM19FRU5TXzEwSGFzaFRyYWl0c0lTM19FRVM5X0U0ZmluZElT
M19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNfUzNfUzdfRUVFRU5TXzIySGFzaFRhYmxl
Q29uc3RJdGVyYXRvcklTM19TM19TNV9TN19TOV9TOV9FRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJs
ZUlQTjdXZWJDb3JlMThGb250U2VsZWN0b3JDbGllbnRFUzNfTlNfMTdJZGVudGl0eUV4dHJhY3Rv
cklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VFUzlfRTZyZW1vdmVF
UFMzXwotX19aTjdXZWJDb3JlNFBhdGg4YWRkQXJjVG9FUktOU18xMEZsb2F0UG9pbnRFUzNfZgot
X19aTjdXZWJDb3JlNFBhdGgxNmFkZEJlemllckN1cnZlVG9FUktOU18xMEZsb2F0UG9pbnRFUzNf
UzNfCitfX1pON1dlYkNvcmU0UGF0aDhhZGRBcmNUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19m
CitfX1pON1dlYkNvcmU0UGF0aDE2YWRkQmV6aWVyQ3VydmVUb0VSS05TXzEzR3JhcGhpY3NQb2lu
dEVTM19TM18KIF9fWk43V2ViQ29yZUwzNGNvcHlDbG9zaW5nU3VicGF0aHNBcHBsaWVyRnVuY3Rp
b25FUHZQSzEzQ0dQYXRoRWxlbWVudAotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFF1YWRDdXJ2ZVRv
RVJLTlNfMTBGbG9hdFBvaW50RVMzXworX19aTjdXZWJDb3JlNFBhdGgxNGFkZFF1YWRDdXJ2ZVRv
RVJLTlNfMTNHcmFwaGljc1BvaW50RVMzXwogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02
cm90YXRlRWQKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0NnJvdGF0ZUVmCiBfX1pON1dl
YkNvcmUzNWpzRE9NV2luZG93Q2FudmFzUGF0dGVybkNvbnN0cnVjdG9yRVBOM0pTQzlFeGVjU3Rh
dGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTk3MTIsNyArOTcxMiw3IEBA
IF9fWk43V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTExZGF0YUNoYW4KIF9fWk43V2ViQ29yZTE2
UERGRG9jdW1lbnRJbWFnZTE0c2V0Q3VycmVudFBhZ2VFaQogX19aTks3V2ViQ29yZTE2UERGRG9j
dW1lbnRJbWFnZTRzaXplRXYKIF9fWk5LN1dlYkNvcmU1SW1hZ2UxM2lzQml0bWFwSW1hZ2VFdgot
X19aTjdXZWJDb3JlMTZQREZEb2N1bWVudEltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0UmVjdEVTNV9OU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRv
ckUKK19fWk43V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTRkcmF3RVBOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0
ZU9wZXJhdG9yRQogX19aTks3V2ViQ29yZTE2UERGRG9jdW1lbnRJbWFnZTlhZGp1c3RDVE1FUE5T
XzE1R3JhcGhpY3NDb250ZXh0RQogX19aTjdXZWJDb3JlTDE5ZnJhbWVzZXRDb25zdHJ1Y3RvckVS
S05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RVBOU18xNUhUTUxGb3JtRWxlbWVudEVi
CiBfX1pON1dlYkNvcmUxOUhUTUxGcmFtZVNldEVsZW1lbnQ2Y3JlYXRlRVJLTlNfMTNRdWFsaWZp
ZWROYW1lRVBOU184RG9jdW1lbnRFCkBAIC05NzkxLDE3ICs5NzkxLDE3IEBAIF9fWk43V2ViQ29y
ZTExTGF5b3V0U3RhdGVDMUVQTlNfMTJSZW5kZXIKIF9fWk43V2ViQ29yZTExTGF5b3V0U3RhdGVD
MkVQTlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUxMVJlbmRlclN0eWxlOHNldFJpZ2h0
RU5TXzZMZW5ndGhFCiBfX1pOSzdXZWJDb3JlMTBTaGFkb3dEYXRhMTlhZGp1c3RSZWN0Rm9yU2hh
ZG93RVJOU183SW50UmVjdEVpCi1fX1pON1dlYkNvcmUxMFNoYWRvd0JsdXJDMUVSS05TXzlGbG9h
dFNpemVFUzNfUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQotX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMTRkcmF3UmVjdFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRS
ZWN0RVJLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1ckMx
RVJLTlNfMTJHcmFwaGljc1NpemVFUzNfUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQorX19a
TjdXZWJDb3JlMTBTaGFkb3dCbHVyMTRkcmF3UmVjdFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCiBfX1pOSzdX
ZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMGNsaXBCb3VuZHNFdgotX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMjZjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdEVQTlNfMTVHcmFwaGljc0NvbnRleHRF
UktOU185RmxvYXRSZWN0RVJLTlNfN0ludFJlY3RFCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIy
NmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEy
R3JhcGhpY3NSZWN0RVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNmFk
anVzdEJsdXJSYWRpdXNFUE5TXzE1R3JhcGhpY3NDb250ZXh0RQotX19aTjdXZWJDb3JlMTBTaGFk
b3dCbHVyMjRkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfOUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50U2l6ZUVTQ18K
K19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI0ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nRVBOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNfMTRSb3VuZGVkUmVjdDVS
YWRpaUVSS05TXzdJbnRTaXplRVNDXwogX19aTjdXZWJDb3JlMTNTY3JhdGNoQnVmZmVyMTZnZXRT
Y3JhdGNoQnVmZmVyRVJLTlNfN0ludFNpemVFCi1fX1pOSzdXZWJDb3JlMTNTY3JhdGNoQnVmZmVy
MTdtYXRjaGVzTGFzdFNoYWRvd0VSS05TXzlGbG9hdFNpemVFUktOU181Q29sb3JFTlNfMTBDb2xv
clNwYWNlRVJLTlNfOUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCitfX1pOSzdX
ZWJDb3JlMTNTY3JhdGNoQnVmZmVyMTdtYXRjaGVzTGFzdFNoYWRvd0VSS05TXzEyR3JhcGhpY3NT
aXplRVJLTlNfNUNvbG9yRU5TXzEwQ29sb3JTcGFjZUVSS05TXzEyR3JhcGhpY3NSZWN0RVJLTlNf
MTRSb3VuZGVkUmVjdDVSYWRpaUUKIF9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjE2Ymx1clNoYWRv
d0J1ZmZlckVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMTRibHVyTGF5
ZXJJbWFnZUVQaFJLTlNfN0ludFNpemVFaQotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMTVkcmF3
TGF5ZXJQaWVjZXNFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE0
Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50U2l6ZUVTQ19OUzBfMTVTaGFkb3dEaXJlY3Rpb25F
CitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNWRyYXdMYXllclBpZWNlc0VQTlNfMTVHcmFwaGlj
c0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVSS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktO
U183SW50U2l6ZUVTQ19OUzBfMTVTaGFkb3dEaXJlY3Rpb25FCiBfX1pON1dlYkNvcmU1VGltZXJJ
TlNfMTNTY3JhdGNoQnVmZmVyRUU1ZmlyZWRFdgogX19aTjdXZWJDb3JlMTNTY3JhdGNoQnVmZmVy
MTB0aW1lckZpcmVkRVBOU181VGltZXJJUzBfRUUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVj
dDI3b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyRVBTMF8KQEAgLTk5NzQsNyArOTk3NCw3IEBA
IF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjhwYXNzTW91c2VNb3YKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMjdwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWVFUk5TXzI4TW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0c0VQTlNfNUZyYW1lRVBOU18xM0hpdFRlc3RSZXN1bHRFCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVmlldzI1Y29udmVydEZyb21Db250YWluaW5nVmlld0VSS05TXzhJbnRQ
b2ludEUKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MTdjb252ZXJ0VG9SZW5kZXJlckVQS05TXzEy
UmVuZGVyT2JqZWN0RVJLTlNfOEludFBvaW50RQotX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0
MTVhYnNvbHV0ZVRvTG9jYWxFUktOU18xMEZsb2F0UG9pbnRFYmIKK19fWk5LN1dlYkNvcmUxMlJl
bmRlck9iamVjdDE1YWJzb2x1dGVUb0xvY2FsRVJLTlNfMTNHcmFwaGljc1BvaW50RWJiCiBfX1pO
SzdXZWJDb3JlOVJlbmRlckJveDIzbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnRFYmJSTlNfMTRUcmFu
c2Zvcm1TdGF0ZUUKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclZpZXcyM21hcEFic29sdXRlVG9Mb2Nh
bFBvaW50RWJiUk5TXzE0VHJhbnNmb3JtU3RhdGVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjI5cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWVFUk5TXzI4TW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0c0VQTlNfNUZyYW1lRQpAQCAtMTAyNjYsOSArMTAyNjYsOSBAQCBfX1pOSzdXZWJD
b3JlMjlTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlCiBfX1pOSzdXZWJDb3JlMTZTVkdUcmFuc2Zv
cm1MaXN0MTFjb25jYXRlbmF0ZUVSTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBfX1pON1dlYkNvcmUx
M1JlbmRlclNWR1BhdGgyMnVwZGF0ZUNhY2hlZEJvdW5kYXJpZXNFdgogX19aTks3V2ViQ29yZTE0
U1ZHUmVuZGVyU3R5bGUxMGhhc01hcmtlcnNFdgotX19aTjdXZWJDb3JlMTZTVkdSZW5kZXJTdXBw
b3J0MzNpbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXNFUEtOU18xMlJlbmRlck9iamVj
dEVSTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDMzaW50ZXJz
ZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzRVBLTlNfMTJSZW5kZXJPYmplY3RFUk5TXzEyR3Jh
cGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdSb290MjJ1cGRhdGVDYWNoZWRCb3Vu
ZGFyaWVzRXYKLV9fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDI5Y29tcHV0ZUNvbnRhaW5l
ckJvdW5kaW5nQm94ZXNFUEtOU18xMlJlbmRlck9iamVjdEVSTlNfOUZsb2F0UmVjdEVTNV9TNV8K
K19fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9ydDI5Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5n
Qm94ZXNFUEtOU18xMlJlbmRlck9iamVjdEVSTlNfMTJHcmFwaGljc1JlY3RFUzVfUzVfCiBfX1pO
SzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMGlzU1ZHSGlkZGVuQ29udGFpbmVyRXYKIF9fWk5LN1dl
YkNvcmUxM1JlbmRlclNWR1BhdGgyMmxvY2FsVG9QYXJlbnRUcmFuc2Zvcm1FdgogX19aTks3V2Vi
Q29yZTEzUmVuZGVyU1ZHUGF0aDE3b2JqZWN0Qm91bmRpbmdCb3hFdgpAQCAtMTAyODMsNyArMTAy
ODMsNyBAQCBfX1pON1dlYkNvcmUxM1JlbmRlclNWR1Jvb3QyMWNvbXB1dGVSZWN0CiBfX1pOSzdX
ZWJDb3JlMTNSZW5kZXJTVkdSb290MjVsb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtRXYKIF9fWk5L
N1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxMmN1cnJlbnRTY2FsZUV2CiBfX1pOSzdXZWJDb3JlMTNT
VkdTVkdFbGVtZW50MjJ2aWV3Qm94VG9WaWV3VHJhbnNmb3JtRWZmCi1fX1pON1dlYkNvcmUxNVNW
R0ZpdFRvVmlld0JveDIydmlld0JveFRvVmlld1RyYW5zZm9ybUVSS05TXzlGbG9hdFJlY3RFUktO
U18yMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9FZmYKK19fWk43V2ViQ29yZTE1U1ZHRml0VG9WaWV3
Qm94MjJ2aWV3Qm94VG9WaWV3VHJhbnNmb3JtRVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18yMlNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9FZmYKIF9fWk5LN1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTdt
YXBSZWN0RVJLTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlMTNSZW5kZXJTVkdSb290MTltYXBM
b2NhbFRvQ29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJiUk5TXzE0VHJhbnNm
b3JtU3RhdGVFCiBfX1pON1dlYkNvcmUxNFRyYW5zZm9ybVN0YXRlMTRhcHBseVRyYW5zZm9ybUVS
S05TXzE1QWZmaW5lVHJhbnNmb3JtRU5TMF8yMVRyYW5zZm9ybUFjY3VtdWxhdGlvbkUKQEAgLTEw
Mjk3LDcgKzEwMjk3LDcgQEAgX19aTjdXZWJDb3JlMTdTTUlMVGltZUNvbnRhaW5lcjViZWdpbkV2
CiBfX1pON1dlYkNvcmUxN1NNSUxUaW1lQ29udGFpbmVyMTZ1cGRhdGVBbmltYXRpb25zRU5TXzhT
TUlMVGltZUUKIF9fWk43V2ViQ29yZTE3U01JTFRpbWVDb250YWluZXIxNHNvcnRCeVByaW9yaXR5
RVJOM1dURjZWZWN0b3JJUE5TXzE0U1ZHU01JTEVsZW1lbnRFTG0wRUVFTlNfOFNNSUxUaW1lRQog
X19aTjdXZWJDb3JlMTdTTUlMVGltZUNvbnRhaW5lcjEwc3RhcnRUaW1lckVOU184U01JTFRpbWVF
UzFfCi1fX1pON1dlYkNvcmU4U1ZHSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U185RmxvYXRSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9yRQor
X19aTjdXZWJDb3JlOFNWR0ltYWdlNGRyYXdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJH
cmFwaGljc1JlY3RFUzVfTlNfMTBDb2xvclNwYWNlRU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFCiBf
X1pUaG42NF9ON1dlYkNvcmU5RnJhbWVWaWV3Mjl3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJh
ckVQTlNfOVNjcm9sbGJhckUKIF9fWk5LN1dlYkNvcmU5RnJhbWVWaWV3MzRub3RpZnlQYWdlVGhh
dENvbnRlbnRBcmVhV2lsbFBhaW50RXYKIF9fWk5LN1dlYkNvcmUxN1Njcm9sbEFuaW1hdG9yTWFj
MjBjb250ZW50QXJlYVdpbGxQYWludEV2CkBAIC0xMDMwNiw3ICsxMDMwNiw3IEBAIF9fWk5LN1dl
YkNvcmUxM1JlbmRlclNWR1Jvb3QyMmxvY2FsVG9QYXIKIF9fWk43V2ViQ29yZTlQYWludEluZm8x
NGFwcGx5VHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBfX1pON1dlYkNvcmU5UmVu
ZGVyQm94NXBhaW50RVJOU185UGFpbnRJbmZvRWlpCiBfX1pON1dlYkNvcmUxM1JlbmRlclNWR1Bh
dGg1cGFpbnRFUk5TXzlQYWludEluZm9FaWkKLV9fWk43V2ViQ29yZTE2U1ZHUmVuZGVyU3VwcG9y
dDMwcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE1
QWZmaW5lVHJhbnNmb3JtRVJLTlNfOVBhaW50SW5mb0UKK19fWk43V2ViQ29yZTE2U1ZHUmVuZGVy
U3VwcG9ydDMwcGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0RVJLTlNfMTJHcmFwaGljc1Jl
Y3RFUktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzlQYWludEluZm9FCiBfX1pON1dlYkNvcmUx
NlNWR1JlbmRlclN1cHBvcnQyNXByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnRFUE5TXzEyUmVuZGVy
T2JqZWN0RVJOU185UGFpbnRJbmZvRQogX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTdmaWxs
QW5kU3Ryb2tlUGF0aEVQTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pON1dlYkNvcmVMMjNyZXF1
ZXN0UGFpbnRpbmdSZXNvdXJjZUVOU18yMVJlbmRlclNWR1Jlc291cmNlTW9kZUVQTlNfMTJSZW5k
ZXJPYmplY3RFUEtOU18xMVJlbmRlclN0eWxlRVJOU181Q29sb3JFCkBAIC0xMDQ4Miw5ICsxMDQ4
Miw5IEBAIF9fWk43V2ViQ29yZUwxMmNvbXBhcmVTdG9wc0VSS05TXzIwQ1NTR3IKIF9fWk5TdDE3
X1RlbXBvcmFyeV9idWZmZXJJUE43V2ViQ29yZTIwQ1NTR3JhZGllbnRDb2xvclN0b3BFUzFfRUQx
RXYKIF9fWk43V2ViQ29yZTIyQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZThwdXRJbWFnZUVSS05TXzdJ
bnRTaXplRU4zV1RGMTBQYXNzUmVmUHRySU5TXzVJbWFnZUVFRQogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxNGRyYXdUaWxlZEltYWdlRVBOU181SW1hZ2VFTlNfMTBDb2xvclNwYWNlRVJL
TlNfN0ludFJlY3RFUzZfTlMxXzhUaWxlUnVsZUVTN19OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIK
LV9fWk43V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2U0ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRF
UktOU185RmxvYXRSZWN0RVM1X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9y
RQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQ4ZmlsbFJlY3RFUktOU185RmxvYXRSZWN0
RVJOU185R2VuZXJhdG9yRQotX19aTjdXZWJDb3JlOEdyYWRpZW50NGZpbGxFUE5TXzE1R3JhcGhp
Y3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2U0
ZHJhd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9OU18xMENv
bG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0OGZpbGxSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUk5TXzlHZW5lcmF0b3JFCitfX1pO
N1dlYkNvcmU4R3JhZGllbnQ0ZmlsbEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBo
aWNzUmVjdEUKIF9fWk5LM1dURjlIYXNoVGFibGVJTjdXZWJDb3JlN0ludFNpemVFU3Q0cGFpcklT
Ml9qRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM0X0VFTlNfN0ludEhhc2hJUzJfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQV9JakVFRUVTQl9FOGNvbnRhaW5z
SVMyX05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNF9TOF9FRUVFYlJLVF8KIF9fWk43
V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2VEMEV2CiBfX1pON1dlYkNvcmUxOUNTU0JvcmRlckltYWdl
VmFsdWVEMEV2CkBAIC0xMTE4OCw4ICsxMTE4OCw4IEBAIF9fWk5LN1dlYkNvcmUxNUZvbnREZXNj
cmlwdGlvbjEzbGlnaHRlclcKIF9fWk5LN1dlYkNvcmUxM0hUTUxIUkVsZW1lbnQxMG1hcFRvRW50
cnlFUktOU18xM1F1YWxpZmllZE5hbWVFUk5TXzIwTWFwcGVkQXR0cmlidXRlRW50cnlFCiBfX1pO
N1dlYkNvcmUxM0hUTUxIUkVsZW1lbnQyMHBhcnNlTWFwcGVkQXR0cmlidXRlRVBOU185QXR0cmli
dXRlRQogX19aTjdXZWJDb3JlMTF0b1VzZXJTcGFjZUVSSzZDR1JlY3RQOE5TV2luZG93Ci1fX1pO
N1dlYkNvcmU5RmxvYXRSZWN0NXNjYWxlRWZmCi1fX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VF
UktOU185RmxvYXRSZWN0RVA4TlNXaW5kb3cKK19fWk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0NXNj
YWxlRWZmCitfX1pON1dlYkNvcmUxM3RvRGV2aWNlU3BhY2VFUktOU18xMkdyYXBoaWNzUmVjdEVQ
OE5TV2luZG93CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QyMmZpcnN0TGluZVN0eWxlU2xv
d0Nhc2VFdgogX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2sxNGZpcnN0TGluZUJsb2NrRXYKIF9f
Wk43V2ViQ29yZTEzV2lkdGhJdGVyYXRvcjIxbm9ybWFsaXplVm9pY2luZ01hcmtzRWkKQEAgLTEx
MjA2LDggKzExMjA2LDggQEAgX19aTjNXVEY2VmVjdG9ySU5TXzlSZXRhaW5QdHJJUEs4X19DVExp
bgogX19aTjdXZWJDb3JlMjFDb21wbGV4VGV4dENvbnRyb2xsZXIxNENvbXBsZXhUZXh0UnVuQzJF
UEs3X19DVFJ1blBLTlNfMTRTaW1wbGVGb250RGF0YUVQS3RqbTdDRlJhbmdlCiBfX1pON1dlYkNv
cmUyMUNvbXBsZXhUZXh0Q29udHJvbGxlcjIzYWRqdXN0R2x5cGhzQW5kQWR2YW5jZXNFdgogX19a
Tks3V2ViQ29yZTE2Rm9udFBsYXRmb3JtRGF0YTE5cm91bmRzR2x5cGhBZHZhbmNlc0V2Ci1fX1pO
N1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOU185RmxvYXRSZWN0RUUxOGxvY2F0ZVBhZ2VTbG93
Q2FzZUVqCi1fX1pOSzNXVEY3SGFzaE1hcElpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5T
MV85RmxvYXRSZWN0RUUxNkdseXBoTWV0cmljc1BhZ2VFTlNfN0ludEhhc2hJakVFTlNfMTBIYXNo
VHJhaXRzSWlFRU5TOV9JUzZfRUVFM2dldEVSS2kKK19fWk43V2ViQ29yZTE1R2x5cGhNZXRyaWNz
TWFwSU5TXzEyR3JhcGhpY3NSZWN0RUUxOGxvY2F0ZVBhZ2VTbG93Q2FzZUVqCitfX1pOSzNXVEY3
SGFzaE1hcElpUE43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TMV8xMkdyYXBoaWNzUmVjdEVF
MTZHbHlwaE1ldHJpY3NQYWdlRU5TXzdJbnRIYXNoSWpFRU5TXzEwSGFzaFRyYWl0c0lpRUVOUzlf
SVM2X0VFRTNnZXRFUktpCiBfX1pON1dlYkNvcmUyMUNvbXBsZXhUZXh0Q29udHJvbGxlcjE0Q29t
cGxleFRleHRSdW4xN3NldElzTm9uTW9ub3RvbmljRXYKIF9fWk43V2ViQ29yZTIxQ29tcGxleFRl
eHRDb250cm9sbGVyRDFFdgogX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMjFD
b21wbGV4VGV4dENvbnRyb2xsZXIxNENvbXBsZXhUZXh0UnVuRUVFTG0xNkVFRDFFdgpAQCAtMTEy
MzgsNyArMTEyMzgsNyBAQCBfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTlkZWZhdWx0
CiBfX1pOSzdXZWJDb3JlMTZIVE1MRWxlbWVudFN0YWNrMTNpbkJ1dHRvblNjb3BlRVJLTlNfMTNR
dWFsaWZpZWROYW1lRQogX19aTjdXZWJDb3JlTDIyZGVjb2RlTm9uQVNDSUlTZXF1ZW5jZUVQS2hq
CiBfX1pON1dlYkNvcmUyMFJlbmRlckJveE1vZGVsT2JqZWN0MjFjbGlwQm9yZGVyU2lkZVBvbHln
b25FUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTRSb3VuZGVkUmVjdEVTNV9OU183Qm94U2lk
ZUViYgotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2NsaXBDb252ZXhQb2x5Z29uRW1Q
S05TXzEwRmxvYXRQb2ludEViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE3Y2xpcENv
bnZleFBvbHlnb25FbVBLTlNfMTNHcmFwaGljc1BvaW50RWIKIF9fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0OGNsaXBQYXRoRVJLTlNfNFBhdGhFTlNfOFdpbmRSdWxlRQogX19aTjNXVEY5SGFz
aFRhYmxlSVBLTjdXZWJDb3JlMTRTaW1wbGVGb250RGF0YUVTNF9OU18xN0lkZW50aXR5RXh0cmFj
dG9ySVM0X0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xMEhhc2hUcmFpdHNJUzRfRUVTQV9FM2FkZElT
NF9TNF9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzRfUzRfUzhfRUVFRVN0NHBhaXJJTlNf
MTdIYXNoVGFibGVJdGVyYXRvcklTNF9TNF9TNl9TOF9TQV9TQV9FRWJFUktUX1JLVDBfCiBfX1pO
M1dURjlIYXNoVGFibGVJUEtON1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhRVM0X05TXzE3SWRlbnRp
dHlFeHRyYWN0b3JJUzRfRUVOU183UHRySGFzaElTNF9FRU5TXzEwSGFzaFRyYWl0c0lTNF9FRVNB
X0U2ZXhwYW5kRXYKQEAgLTExMzE4LDggKzExMzE4LDggQEAgX19aTkszV1RGMTJTdHJpbmdBcHBl
bmRJUEtjTlNfNlN0cmluZ0VFYwogX19aTjdXZWJDb3JlMjRTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIzNWV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzRXYKIF9fWk5LN1dlYkNvcmUx
N1hNTERvY3VtZW50UGFyc2VyMTBsaW5lTnVtYmVyRXYKIF9fWk43V2ViQ29yZTIxU1ZHRG9jdW1l
bnRFeHRlbnNpb25zMzZyZW1vdmVBbGxBbmltYXRpb25FbGVtZW50c0Zyb21UYXJnZXRFUE5TXzEw
U1ZHRWxlbWVudEUKLV9fWk43V2ViQ29yZTE1U1ZHRml0VG9WaWV3Qm94MTJwYXJzZVZpZXdCb3hF
UE5TXzhEb2N1bWVudEVSUEt0UzRfUk5TXzlGbG9hdFJlY3RFYgotX19aVGhuMzEyX043V2ViQ29y
ZTEzU1ZHU1ZHRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitf
X1pON1dlYkNvcmUxNVNWR0ZpdFRvVmlld0JveDEycGFyc2VWaWV3Qm94RVBOU184RG9jdW1lbnRF
UlBLdFM0X1JOU18xMkdyYXBoaWNzUmVjdEViCitfX1pUaG4zMTJfTjdXZWJDb3JlMTNTVkdTVkdF
bGVtZW50MTlzZXRWaWV3Qm94QmFzZVZhbHVlRVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dl
YkNvcmUyMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8yNHBhcnNlUHJlc2VydmVBc3BlY3RSYXRpb0VS
UEt0UzJfYlJiCiBfX1pUaG4zMTJfTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MzFzZXRQcmVzZXJ2
ZUFzcGVjdFJhdGlvQmFzZVZhbHVlRVJLTlNfMjJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvRQogX19a
TjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxNlNWR1N0eWxlZEVsZW1lbnRFUzNfTlNfMTdJZGVu
dGl0eUV4dHJhY3RvcklTM19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTBIYXNoVHJhaXRzSVMzX0VF
UzlfRTNhZGRJUzNfUzNfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMzX1MzX1M3X0VFRUVT
dDRwYWlySU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzNfUzVfUzdfUzlfUzlfRUViRVJLVF9S
S1QwXwpAQCAtMTE0ODQsOCArMTE0ODQsOCBAQCBfX1pOSzdXZWJDb3JlMTRSZW5kZXJTVkdJbWFn
ZTE3c3Ryb2tlQm91CiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJTVkdJbWFnZTI5cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXNFdgogX19aTks3V2ViQ29yZTEzUmVuZGVyU1ZHVGV4dDE3c3Ryb2tl
Qm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29yZTEzUmVuZGVyU1ZHVGV4dDI5cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXNFdgotX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9jazEzYWJzb2x1dGVR
dWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFCi1fX1pON1dlYkNvcmUxMENs
aWVudFJlY3RDMUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxMVJlbmRlckJsb2NrMTNh
YnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCitfX1pO
N1dlYkNvcmUxMENsaWVudFJlY3RDMUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3Jl
NHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBDbGll
bnRSZWN0RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzEySlNDbGllbnRSZWN0RU5T
XzEwQ2xpZW50UmVjdEVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18x
N0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTE1Z2V0RE9NU3RydWN0dXJlSU5T
XzEySlNDbGllbnRSZWN0RUVFUE4zSlNDOVN0cnVjdHVyZUVQTlMyXzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFCkBAIC0xMTUyNCw3ICsxMTUyNCw3IEBAIF9fWk43V2ViQ29yZTEy
SlNTVkdFbGVtZW50MThnZXRPd25Qcm9wZXIKIF9fWk4zSlNDMThnZXRTdGF0aWNWYWx1ZVNsb3RJ
TjdXZWJDb3JlMTJKU1NWR0VsZW1lbnRFTlMxXzlKU0VsZW1lbnRFRUViUE5TXzlFeGVjU3RhdGVF
UEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUK
IF9fWk43V2ViQ29yZTI0SlNTVkdTVkdFbGVtZW50UHJvdG90eXBlMThnZXRPd25Qcm9wZXJ0eVNs
b3RFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJFUk5TMV8xMlByb3BlcnR5U2xv
dEUKIF9fWk4zSlNDMjFnZXRTdGF0aWNQcm9wZXJ0eVNsb3RJTjdXZWJDb3JlMjRKU1NWR1NWR0Vs
ZW1lbnRQcm90b3R5cGVFTlNfOEpTT2JqZWN0RUVFYlBOU185RXhlY1N0YXRlRVBLTlNfOUhhc2hU
YWJsZUVQVF9SS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCi1fX1pOSzdXZWJD
b3JlMTBTVkdFbGVtZW50MTFib3VuZGluZ0JveEVSTlNfOUZsb2F0UmVjdEVOU18xMlNWR0xvY2F0
YWJsZTE5U3R5bGVVcGRhdGVTdHJhdGVneUUKK19fWk5LN1dlYkNvcmUxMFNWR0VsZW1lbnQxMWJv
dW5kaW5nQm94RVJOU18xMkdyYXBoaWNzUmVjdEVOU18xMlNWR0xvY2F0YWJsZTE5U3R5bGVVcGRh
dGVTdHJhdGVneUUKIF9fWk5LN1dlYkNvcmUyNVNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQxN2lz
U3R5bGVkTG9jYXRhYmxlRXYKIF9fWk5LN1dlYkNvcmUyNVNWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQ3Z2V0QkJveEVOU18xMlNWR0xvY2F0YWJsZTE5U3R5bGVVcGRhdGVTdHJhdGVneUUKIF9fWk43
V2ViQ29yZTEyU1ZHTG9jYXRhYmxlN2dldEJCb3hFUEtOU18xMFNWR0VsZW1lbnRFTlMwXzE5U3R5
bGVVcGRhdGVTdHJhdGVneUUKQEAgLTExNTg1LDcgKzExNTg1LDcgQEAgX19aTjdXZWJDb3JlMTZT
VkdSb290SW5saW5lQm94RDBFdgogX19aTjdXZWJDb3JlMTZTVkdJbmxpbmVUZXh0Qm94RDBFdgog
X19aTjdXZWJDb3JlMTRSZW5kZXJTVkdJbWFnZTVwYWludEVSTlNfOVBhaW50SW5mb0VpaQogX19a
TjdXZWJDb3JlMTNSZW5kZXJTVkdUZXh0NXBhaW50RVJOU185UGFpbnRJbmZvRWlpCi1fX1pON1dl
YkNvcmUyMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8xM3RyYW5zZm9ybVJlY3RFUk5TXzlGbG9hdFJl
Y3RFUzJfCitfX1pON1dlYkNvcmUyMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8xM3RyYW5zZm9ybVJl
Y3RFUk5TXzEyR3JhcGhpY3NSZWN0RVMyXwogX19aTjdXZWJDb3JlMTZTVkdSb290SW5saW5lQm94
NXBhaW50RVJOU185UGFpbnRJbmZvRWlpaWkKIF9fWk43V2ViQ29yZTE2U1ZHSW5saW5lRmxvd0Jv
eDM3Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlckVQTlNfMTlSZW5kZXJTVkdJ
bmxpbmVUZXh0RQogX19aTjdXZWJDb3JlMTZTVkdJbmxpbmVUZXh0Qm94NXBhaW50RVJOU185UGFp
bnRJbmZvRWlpaWkKQEAgLTExOTYzLDggKzExOTYzLDggQEAgX19aTjdXZWJDb3JlMjBSZW5kZXJF
bWJlZGRlZE9iamVjdDMwc2V0UwogX19aTjdXZWJDb3JlMTdtaXNzaW5nUGx1Z2luVGV4dEV2CiBf
X1pON1dlYkNvcmUyN0RlZmF1bHRMb2NhbGl6YXRpb25TdHJhdGVneTE3bWlzc2luZ1BsdWdpblRl
eHRFdgogX19aTjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRlZE9iamVjdDEzcGFpbnRSZXBsYWNlZEVS
TlNfOVBhaW50SW5mb0VpaQotX19aTjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRlZE9iamVjdDI2Z2V0
UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnlFaWlSTlNfOUZsb2F0UmVjdEVSTlNfNFBhdGhFUzJfUk5T
XzRGb250RVJOU183VGV4dFJ1bkVSZgotX19aTjdXZWJDb3JlNFBhdGgxNGFkZFJvdW5kZWRSZWN0
RVJLTlNfOUZsb2F0UmVjdEVSS05TXzlGbG9hdFNpemVFCitfX1pON1dlYkNvcmUyMFJlbmRlckVt
YmVkZGVkT2JqZWN0MjZnZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeUVpaVJOU18xMkdyYXBoaWNz
UmVjdEVSTlNfNFBhdGhFUzJfUk5TXzRGb250RVJOU183VGV4dFJ1bkVSZgorX19aTjdXZWJDb3Jl
NFBhdGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xMkdyYXBoaWNz
U2l6ZUUKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU5SFRNTFRva2VuOUF0dHJpYnV0ZUVMbTEw
RUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRU43V2ViQ29y
ZTlIVE1MVG9rZW45QXR0cmlidXRlRUU0bW92ZUVQS1MzX1M2X1BTM18KIF9fWk43V2ViQ29yZTlI
VE1MVG9rZW45QXR0cmlidXRlQzFFUktTMV8KQEAgLTE0MTMyLDggKzE0MTMyLDggQEAgX19aTjdX
ZWJDb3JlMjhTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbAogX19aTks3V2ViQ29yZTExRWRpdENv
bW1hbmQxOWlzQ3JlYXRlTGlua0NvbW1hbmRFdgogX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTE0
RG9jdW1lbnRNYXJrZXJFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM1dURjExVmVjdG9y
TW92ZXJJTGIwRU43V2ViQ29yZTE0RG9jdW1lbnRNYXJrZXJFRTRtb3ZlRVBLUzJfUzVfUFMyXwot
X19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MjhwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2Vy
RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEwRmxvYXRQb2ludEVSS05TXzE0RG9jdW1lbnRN
YXJrZXJFUE5TXzExUmVuZGVyU3R5bGVFUktOU180Rm9udEViCi1fX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDIzZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmdFUktOU18xMEZsb2F0UG9pbnRFZk5T
MF8yMVRleHRDaGVja2luZ0xpbmVTdHlsZUUKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI4
cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18x
M0dyYXBoaWNzUG9pbnRFUktOU18xNERvY3VtZW50TWFya2VyRVBOU18xMVJlbmRlclN0eWxlRVJL
TlNfNEZvbnRFYgorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyM2RyYXdMaW5lRm9yVGV4
dENoZWNraW5nRVJLTlNfMTNHcmFwaGljc1BvaW50RWZOUzBfMjFUZXh0Q2hlY2tpbmdMaW5lU3R5
bGVFCiBfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMjJSZW5kZXJlZERvY3VtZW50TWFya2VyRUxt
MEVFNmluc2VydElTMl9FRXZtUktUXwogX19aTjdXZWJDb3JlMjBDb21wb3NpdGVFZGl0Q29tbWFu
ZDI3YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkRVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29y
ZUwyMGV4ZWN1dGVGb3J3YXJkRGVsZXRlRVBOU181RnJhbWVFUE5TXzVFdmVudEVOU18xOUVkaXRv
ckNvbW1hbmRTb3VyY2VFUktOM1dURjZTdHJpbmdFCkBAIC0xNDIyNCw3ICsxNDIyNCw3IEBAIF9f
Wk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjMwcmlnaHRWaXMKIF9fWk5LN1dlYkNvcmU4UG9z
aXRpb24xNnByaW1hcnlEaXJlY3Rpb25FdgogX19aTks3V2ViQ29yZTE5SFRNTFRleHRBcmVhRWxl
bWVudDI5aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnRFUE5TXzIzQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnRFCiBfX1pOSzdXZWJDb3JlMTlIVE1MVGV4dEFyZWFFbGVtZW50OW1heExlbmd0aEV2
Ci1fX1pOSzdXZWJDb3JlNEZvbnQyN3NlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dEVSS05TXzdU
ZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpaQorX19aTks3V2ViQ29yZTRGb250MjdzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHRFUktOU183VGV4dFJ1bkVSS05TXzEzR3JhcGhpY3NQb2ludEVp
aWkKIF9fWk43V2ViQ29yZTIxQ29tcGxleFRleHRDb250cm9sbGVyN2FkdmFuY2VFalBOU18xMUds
eXBoQnVmZmVyRQogX19aTjdXZWJDb3JlMjZSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTE3c3Vi
dHJlZUhhc0NoYW5nZWRFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIzdGV4dERpZENoYW5nZUluVGV4
dEFyZWFFUE5TXzdFbGVtZW50RQpAQCAtMTQyMzIsNyArMTQyMzIsNyBAQCBfX1oza2l0UE43V2Vi
Q29yZTE5SFRNTFRleHRBcmVhRWxlbWVudEUKIF9fWk43V2ViQ29yZTVSYW5nZTExc2V0RW5kQWZ0
ZXJFUE5TXzROb2RlRVJpCiBfX1pOSzdXZWJDb3JlNVJhbmdlMTFjaGVja05vZGVCQUVQTlNfNE5v
ZGVFUmkKIF9fWk5LN1dlYkNvcmUxMFJlbmRlclRleHQzM3ByZXZpb3VzT2Zmc2V0Rm9yQmFja3dh
cmREZWxldGlvbkVpCi1fX1pOSzdXZWJDb3JlNEZvbnQxNWRyYXdDb21wbGV4VGV4dEVQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaQorX19aTks3
V2ViQ29yZTRGb250MTVkcmF3Q29tcGxleFRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNf
N1RleHRSdW5FUktOU18xM0dyYXBoaWNzUG9pbnRFaWkKIF9fWk5LN1dlYkNvcmU0Rm9udDM0Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dEVSS05TXzdUZXh0UnVuRWlpUk5TXzExR2x5
cGhCdWZmZXJFTlMwXzIwRm9yVGV4dEVtcGhhc2lzT3JOb3RFCiBfX1pON1dlYkNvcmUxMUdseXBo
QnVmZmVyM2FkZEV0UEtOU18xNFNpbXBsZUZvbnREYXRhRTZDR1NpemUKIF9fWk5LN1dlYkNvcmUx
NlJlbmRlckxpc3RNYXJrZXIxOGNhbkJlU2VsZWN0aW9uTGVhZkV2CkBAIC0xNDI2Nyw3ICsxNDI2
Nyw3IEBAIF9fWk43V2ViQ29yZTE0Um91bmRlZFJlY3Q1UmFkaWk1c2NhbGVFZgogX19aTjdXZWJD
b3JlMTRSb3VuZGVkUmVjdDE5aW5jbHVkZUxvZ2ljYWxFZGdlc0VSS05TMF81UmFkaWlFYmJiCiBf
X1pON1dlYkNvcmUxNFJvdW5kZWRSZWN0NVJhZGlpNmV4cGFuZEVpaWlpCiBfX1pON1dlYkNvcmU0
UGF0aDE0YWRkUm91bmRlZFJlY3RFUktOU18xNFJvdW5kZWRSZWN0RQotX19aTjdXZWJDb3JlNFBh
dGgxNGFkZFJvdW5kZWRSZWN0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzlGbG9hdFNpemVFUzZfUzZf
UzZfCitfX1pON1dlYkNvcmU0UGF0aDE0YWRkUm91bmRlZFJlY3RFUktOU18xMkdyYXBoaWNzUmVj
dEVSS05TXzEyR3JhcGhpY3NTaXplRVM2X1M2X1M2XwogX19aTjdXZWJDb3JlMjFjcmVhdGVMaXN0
SXRlbUVsZW1lbnRFUE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTEzSFRNTExJRWxlbWVudDZj
cmVhdGVFUE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZTM5anNEb2N1bWVudFByb3RvdHlwZUZ1
bmN0aW9uR2V0U2VsZWN0aW9uRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0xNDM4MSwxMiArMTQzODEs
MTIgQEAgX19aTjNXVEY5SGFzaFRhYmxlSU43V2ViQ29yZTdJbnRTaXplRVN0NAogX19aTjNXVEY5
SGFzaFRhYmxlSU43V2ViQ29yZTdJbnRTaXplRVN0NHBhaXJJUzJfTlNfNlJlZlB0cklOUzFfNUlt
YWdlRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN0ludEhhc2hJUzJfRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TRF9JUzZfRUVFRVNFX0U2cmVt
b3ZlRVBTN18KIF9fWk4zV1RGOUhhc2hUYWJsZUlON1dlYkNvcmU3SW50U2l6ZUVTdDRwYWlySVMy
X05TXzZSZWZQdHJJTlMxXzVJbWFnZUVFRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5T
XzdJbnRIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVO
U0RfSVM2X0VFRUVTRV9FRDFFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyM2ZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlRVJLTlNfN0ludFJlY3RFUktOU18xNFJvdW5kZWRSZWN0RVJLTlNf
NUNvbG9yRU5TXzEwQ29sb3JTcGFjZUUKLV9fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjE1ZHJhd0lu
c2V0U2hhZG93RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUzVfUktOU18x
NFJvdW5kZWRSZWN0NVJhZGlpRQotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMjVkcmF3SW5zZXRT
aGFkb3dXaXRoVGlsaW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUzVf
UktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFNpemVFU0NfCi1fX1pOSzdXZWJDb3Jl
MTNTY3JhdGNoQnVmZmVyMjJtYXRjaGVzTGFzdEluc2V0U2hhZG93RVJLTlNfOUZsb2F0U2l6ZUVS
S05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFUktOU185RmxvYXRSZWN0RVNBX1JLTlNfMTRSb3Vu
ZGVkUmVjdDVSYWRpaUUKLV9fWk43V2ViQ29yZTE0R2VuZXJhdGVkSW1hZ2UxMWRyYXdQYXR0ZXJu
RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFJlY3RFUktOU18xNUFmZmluZVRyYW5z
Zm9ybUVSS05TXzEwRmxvYXRQb2ludEVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVy
YXRvckVTNV8KLV9fWk43V2ViQ29yZThHcmFkaWVudDMxYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVk
RHJhd2luZ0VSTlNfN0ludFNpemVFUk5TXzlGbG9hdFJlY3RFCi1fX1pON1dlYkNvcmUxMUltYWdl
QnVmZmVyMTFkcmF3UGF0dGVybkVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0
RVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU18xMEZsb2F0UG9pbnRFTlNfMTBDb2xvclNwYWNl
RU5TXzE3Q29tcG9zaXRlT3BlcmF0b3JFUzVfCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIxNWRy
YXdJbnNldFNoYWRvd0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVT
NV9SS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFCitfX1pON1dlYkNvcmUxMFNoYWRvd0JsdXIyNWRy
YXdJbnNldFNoYWRvd1dpdGhUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFw
aGljc1JlY3RFUzVfUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRVJLTlNfN0ludFNpemVFU0NfCitf
X1pOSzdXZWJDb3JlMTNTY3JhdGNoQnVmZmVyMjJtYXRjaGVzTGFzdEluc2V0U2hhZG93RVJLTlNf
MTJHcmFwaGljc1NpemVFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRVJLTlNfMTJHcmFwaGlj
c1JlY3RFU0FfUktOU18xNFJvdW5kZWRSZWN0NVJhZGlpRQorX19aTjdXZWJDb3JlMTRHZW5lcmF0
ZWRJbWFnZTExZHJhd1BhdHRlcm5FUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGlj
c1JlY3RFUktOU18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xMENv
bG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVyYXRvckVTNV8KK19fWk43V2ViQ29yZThHcmFkaWVu
dDMxYWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZ0VSTlNfN0ludFNpemVFUk5TXzEyR3Jh
cGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTFJbWFnZUJ1ZmZlcjExZHJhd1BhdHRlcm5FUE5TXzE1
R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xNUFmZmluZVRyYW5zZm9y
bUVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xMENvbG9yU3BhY2VFTlNfMTdDb21wb3NpdGVPcGVy
YXRvckVTNV8KIF9fWk43V2ViQ29yZTVJbWFnZTE0c3RhcnRBbmltYXRpb25FYgogX19aTjNXVEY5
SGFzaFRhYmxlSVBON1dlYkNvcmUyMFJlbmRlckJveE1vZGVsT2JqZWN0RVN0NHBhaXJJUzNfTlNf
N0hhc2hNYXBJUEt2TlMxXzdJbnRTaXplRU5TXzdQdHJIYXNoSVM3X0VFTlNfMTBIYXNoVHJhaXRz
SVM3X0VFTlNCX0lTOF9FRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVNGX0VFTlM5X0lTM19F
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNCX0lTM19FRU5TQl9JU0VfRUVFRVNLX0UxNmxvb2t1cEZv
cldyaXRpbmdFUktTM18KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMjBSZW5kZXJCb3hN
b2RlbE9iamVjdEVTdDRwYWlySVMzX05TXzdIYXNoTWFwSVBLdk5TMV83SW50U2l6ZUVOU183UHRy
SGFzaElTN19FRU5TXzEwSGFzaFRyYWl0c0lTN19FRU5TQl9JUzhfRUVFRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTRl9FRU5TOV9JUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TQl9JUzNfRUVO
U0JfSVNFX0VFRUVTS19FM2FkZElTM19TRV9OU18xN0hhc2hNYXBUcmFuc2xhdG9ySVNGX1NNX1NJ
X0VFRUVTNF9JTlNfMTdIYXNoVGFibGVJdGVyYXRvcklTM19TRl9TSF9TSV9TTV9TS19FRWJFUktU
X1JLVDBfCkBAIC0xNDM5NCw3ICsxNDM5NCw3IEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJD
b3JlMjBSZW5kZXJCb3gKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMjBSZW5kZXJCb3hN
b2RlbE9iamVjdEVTdDRwYWlySVMzX05TXzdIYXNoTWFwSVBLdk5TMV83SW50U2l6ZUVOU183UHRy
SGFzaElTN19FRU5TXzEwSGFzaFRyYWl0c0lTN19FRU5TQl9JUzhfRUVFRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTRl9FRU5TOV9JUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TQl9JUzNfRUVO
U0JfSVNFX0VFRUVTS19FNnJlaGFzaEVpCiBfX1pTdDE2X19tZXJnZV9iYWNrd2FyZElQTjdXZWJD
b3JlMjBDU1NHcmFkaWVudENvbG9yU3RvcEVTMl9TMl9QRmJSS1MxX1M0X0VFVDFfVF9TOF9UMF9T
OV9TN19UMl8KIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDM1Ym9yZGVySW1hZ2VJc0xvYWRl
ZEFuZENhbkJlUmVuZGVyZWRFdgotX19aTks3V2ViQ29yZTIwUmVuZGVyQm94TW9kZWxPYmplY3Qy
OGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2VFUktOU185RmxvYXRTaXplRQorX19aTks3V2Vi
Q29yZTIwUmVuZGVyQm94TW9kZWxPYmplY3QyOGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2VF
UktOU18xMkdyYXBoaWNzU2l6ZUUKIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043
V2ViQ29yZTdJbnRTaXplRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNo
SVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VF
RUVTRF9FMTZsb29rdXBGb3JXcml0aW5nRVJLUzJfCiBfX1pOM1dURjlIYXNoVGFibGVJUEt2U3Q0
cGFpcklTMl9ON1dlYkNvcmU3SW50U2l6ZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVO
U183UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VF
TlNDX0lTNV9FRUVFU0RfRTNhZGRJUzJfUzVfTlNfMTdIYXNoTWFwVHJhbnNsYXRvcklTNl9TRl9T
QV9FRUVFUzNfSU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzJfUzZfUzhfU0FfU0ZfU0RfRUViRVJL
VF9SS1QwXwogX19aTjNXVEY5SGFzaFRhYmxlSVBLdlN0NHBhaXJJUzJfTjdXZWJDb3JlN0ludFNp
emVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM2X0VFTlNfN1B0ckhhc2hJUzJfRUVOU18xNFBh
aXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQ19JUzVfRUVFRVNEX0UzYWRkSVMy
X1M2X05TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNl9TQV9FRUVFUzNfSU5TXzE3SGFz
aFRhYmxlSXRlcmF0b3JJUzJfUzZfUzhfU0FfU0ZfU0RfRUViRVJLVF9SS1QwXwpAQCAtMTQ0Nzcs
MTIgKzE0NDc3LDEyIEBAIF9fWk43V2ViQ29yZTQxanNET01TZWxlY3Rpb25Qcm90b3R5cGVGdW4K
IF9fWk43V2ViQ29yZTEyRE9NU2VsZWN0aW9uMTBnZXRSYW5nZUF0RWlSaQogX19aTjdXZWJDb3Jl
Mzhqc1JhbmdlUHJvdG90eXBlRnVuY3Rpb25HZXRDbGllbnRSZWN0c0VQTjNKU0M5RXhlY1N0YXRl
RQogX19aTks3V2ViQ29yZTVSYW5nZTE0Z2V0Q2xpZW50UmVjdHNFdgotX19aTks3V2ViQ29yZTVS
YW5nZTIxZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVM
bTBFRUUKLV9fWk43V2ViQ29yZTEwUmVuZGVyVGV4dDIxYWJzb2x1dGVRdWFkc0ZvclJhbmdlRVJO
M1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUVqamIKLV9fWk43V2ViQ29yZUw1MmFkanVz
dEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGVFUk4zV1RGNlZl
Y3RvcklOU185RmxvYXRRdWFkRUxtMEVFRVBOU184RG9jdW1lbnRFUE5TXzEyUmVuZGVyT2JqZWN0
RQotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTlGbG9hdFF1YWRFTG0wRUU2YXBwZW5kSVMyX0VF
dlBLVF9tCi1fX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFUktOM1dURjZWZWN0b3JJTlNf
OUZsb2F0UXVhZEVMbTBFRUUKLV9fWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMkVSS04zV1RG
NlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRQorX19aTks3V2ViQ29yZTVSYW5nZTIxZ2V0Qm9y
ZGVyQW5kVGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0wRUVFCitf
X1pON1dlYkNvcmUxMFJlbmRlclRleHQyMWFic29sdXRlUXVhZHNGb3JSYW5nZUVSTjNXVEY2VmVj
dG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRWpqYgorX19aTjdXZWJDb3JlTDUyYWRqdXN0Rmxv
YXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZUVSTjNXVEY2VmVjdG9y
SU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRVBOU184RG9jdW1lbnRFUE5TXzEyUmVuZGVyT2JqZWN0
RQorX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyR3JhcGhpY3NRdWFkRUxtMEVFNmFwcGVuZElT
Ml9FRXZQS1RfbQorX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMxRVJLTjNXVEY2VmVjdG9y
SU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRQorX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMy
RVJLTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRQogX19aTjdXZWJDb3JlMTBD
bGllbnRSZWN0QzFFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVj
U3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE0Q2xpZW50UmVjdExpc3RFCiBfX1pO
N1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTZKU0NsaWVudFJlY3RMaXN0RU5TXzE0Q2xpZW50
UmVjdExpc3RFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQVDBfCkBAIC0xNTczOSwxMCArMTU3MzksMTAgQEAgX19aTjdXZWJDb3Jl
MjJSZW5kZXJTVkdGb3JlaWduT2JqZWN0MjFjbwogX19aTks3V2ViQ29yZTIyUmVuZGVyU1ZHRm9y
ZWlnbk9iamVjdDE5bWFwTG9jYWxUb0NvbnRhaW5lckVQTlNfMjBSZW5kZXJCb3hNb2RlbE9iamVj
dEViYlJOU18xNFRyYW5zZm9ybVN0YXRlRQogX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdSb290MTFu
b2RlQXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05T
XzhJbnRQb2ludEVpaU5TXzEzSGl0VGVzdEFjdGlvbkUKIF9fWk5LN1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybThtYXBQb2ludEVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29yZTEzUmVuZGVyU1ZH
VGV4dDE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVz
dFJlc3VsdEVSS05TXzEwRmxvYXRQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCitfX1pON1dlYkNv
cmUxM1JlbmRlclNWR1RleHQxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0
RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMTNIaXRUZXN0QWN0
aW9uRQogX19aTjdXZWJDb3JlMjFQb2ludGVyRXZlbnRzSGl0UnVsZXNDMUVOUzBfMTFFSGl0VGVz
dGluZ0VSS05TXzE0SGl0VGVzdFJlcXVlc3RFTlNfMTRFUG9pbnRlckV2ZW50c0UKLV9fWk43V2Vi
Q29yZTE2U1ZHUmVuZGVyU3VwcG9ydDE5cG9pbnRJbkNsaXBwaW5nQXJlYUVQTlNfMTJSZW5kZXJP
YmplY3RFUktOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUyMlJlbmRlclNWR0ZvcmVpZ25P
YmplY3QxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRl
c3RSZXN1bHRFUktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19aTjdXZWJD
b3JlMTZTVkdSZW5kZXJTdXBwb3J0MTlwb2ludEluQ2xpcHBpbmdBcmVhRVBOU18xMlJlbmRlck9i
amVjdEVSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTIyUmVuZGVyU1ZHRm9yZWln
bk9iamVjdDE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0
VGVzdFJlc3VsdEVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCiBfX1pO
N1dlYkNvcmUyN1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTExbm9kZUF0UG9pbnRFUktOU18x
NEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU184SW50UG9pbnRFaWlOU18x
M0hpdFRlc3RBY3Rpb25FCiBfX1pON1dlYkNvcmUxN1JlbmRlclRleHRDb250cm9sMTloaXRJbm5l
clRleHRFbGVtZW50RVJOU18xM0hpdFRlc3RSZXN1bHRFaWlpaQogX19aTks3V2ViQ29yZTE2U1ZH
U3R5bGVkRWxlbWVudDV0aXRsZUV2CkBAIC0xNTc2OCw3ICsxNTc2OCw3IEBAIF9fWk5LN1dlYkNv
cmU4RHJhZ0RhdGExMWNvbnRhaW5zVVJMRVBOU18KIF9fWk5LN1dlYkNvcmU4RHJhZ0RhdGE1YXNV
UkxFUE5TXzVGcmFtZUVOUzBfMjRGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3lFUE4zV1RGNlN0cmlu
Z0UKIF9fWk43V2ViQ29yZTEwUGFzdGVib2FyZDVhc1VSTEVQTlNfNUZyYW1lRQogX19aTjdXZWJD
b3JlMTBQYXN0ZWJvYXJkMTBnZXRCZXN0VVJMRVBOU181RnJhbWVFCi1fX1pON1dlYkNvcmUxM1Jl
bmRlclNWR1BhdGgxNm5vZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18x
M0hpdFRlc3RSZXN1bHRFUktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQorX19a
TjdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTZub2RlQXRGbG9hdFBvaW50RVJLTlNfMTRIaXRUZXN0
UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzEzSGl0
VGVzdEFjdGlvbkUKIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQxNGhhc1NWR1Jvb3ROb2RlRXYKIF9f
Wk43V2ViQ29yZTRQYWdlMjJhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkRVBOU185UGFnZUdyb3VwRQog
X19aTjdXZWJDb3JlMTZDU1NTdHlsZVNlbGVjdG9yMTVTZWxlY3RvckNoZWNrZXIyMmFsbFZpc2l0
ZWRTdGF0ZUNoYW5nZWRFdgpAQCAtMTYyMTEsNyArMTYyMTEsNyBAQCBfX1pOM1dURjZWZWN0b3JJ
TjdXZWJDb3JlMTREb2N1bWVudE1hcmtlCiBfX1pON1dlYkNvcmUxM0lubGluZVRleHRCb3gzMWNv
bXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXJFUktOU18xNERvY3VtZW50TWFya2VyRVBOU18x
MVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjIxcmVtb3ZlTWFya2Vyc0Zyb21MaXN0RVBOU180Tm9kZUVQTjNXVEY2VmVjdG9ySU5T
XzIyUmVuZGVyZWREb2N1bWVudE1hcmtlckVMbTBFRUVOU18xNERvY3VtZW50TWFya2VyMTFNYXJr
ZXJUeXBlc0UKIF9fWk5LN1dlYkNvcmUyOFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIxOHdp
bmRvd1JlY3RGb3JSYW5nZUVQS05TXzVSYW5nZUUKLV9fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1
YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUViCitfX1pOSzdXZWJDb3JlNVJh
bmdlOXRleHRRdWFkc0VSTjNXVEY2VmVjdG9ySU5TXzEyR3JhcGhpY3NRdWFkRUxtMEVFRWIKIF9f
Wk43V2ViQ29yZTZFZGl0b3IyN2hhbmRsZUNvcnJlY3Rpb25QYW5lbFJlc3VsdEVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMzdzZWxlY3RDbG9zZXN0V29yZE9yTGlu
a0Zyb21Nb3VzZUV2ZW50RVJLTlNfMjhNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzRQogX19a
Tks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDEwaXNMaXZlTGlua0V2CkBAIC0xNjMzMiw4ICsxNjMz
Miw4IEBAIF9fWk43V2ViQ29yZTE3c2V0SlNET01XaW5kb3dUb3BFUE4zSlNDOUUKIF9fWk43V2Vi
Q29yZTEyUmVuZGVyT2JqZWN0MjFjcmVhdGVWaXNpYmxlUG9zaXRpb25FUktOU184UG9zaXRpb25F
CiBfX1pON1dlYkNvcmUyNHNldEpTSFRNTEVsZW1lbnRUYWJJbmRleEVQTjNKU0M5RXhlY1N0YXRl
RVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTExSFRNTEVsZW1lbnQx
MXNldFRhYkluZGV4RWkKLV9fWk43V2ViQ29yZTEyUmVuZGVySW5saW5lMTNhYnNvbHV0ZVF1YWRz
RVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUUKLV9fWk43V2ViQ29yZTEyUmVuZGVy
SW5saW5lMjVjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzRVBLUzBfUk4zV1RGNlZlY3RvcklOU185
RmxvYXRRdWFkRUxtMEVFRQorX19aTjdXZWJDb3JlMTJSZW5kZXJJbmxpbmUxM2Fic29sdXRlUXVh
ZHNFUk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKK19fWk43V2ViQ29yZTEy
UmVuZGVySW5saW5lMjVjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzRVBLUzBfUk4zV1RGNlZlY3Rv
cklOU18xMkdyYXBoaWNzUXVhZEVMbTBFRUUKIF9fWk43V2ViQ29yZTIyc2V0SlNFbGVtZW50U2Ny
b2xsTGVmdEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUUKIF9f
Wk43V2ViQ29yZTdFbGVtZW50MTNzZXRTY3JvbGxMZWZ0RWkKIF9fWk43V2ViQ29yZTlSZW5kZXJC
b3gxM3NldFNjcm9sbExlZnRFaQpAQCAtMTYzOTAsNyArMTYzOTAsNyBAQCBfX1pON1dlYkNvcmU1
UmFuZ2UxM3NldFN0YXJ0QWZ0ZXJFUE5TXzROCiBfX1pON1dlYkNvcmUzMmpzSFRNTElucHV0RWxl
bWVudFNlbGVjdGlvblN0YXJ0RVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEw
SWRlbnRpZmllckUKIF9fWk5LN1dlYkNvcmUxOEpTSFRNTElucHV0RWxlbWVudDE0c2VsZWN0aW9u
U3RhcnRFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyOHBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b25FUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfOVBhaW50
SW5mb0VSS05TXzdJbnRSZWN0RQotX19aTks3V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyMWNvbnZl
cnRUb1BhaW50aW5nUmVjdEVQS05TXzEyUmVuZGVyT2JqZWN0RVMzX1JLTlNfOUZsb2F0UmVjdEVS
S05TXzdJbnRSZWN0RQorX19aTks3V2ViQ29yZTE0UmVuZGVyVGhlbWVNYWMyMWNvbnZlcnRUb1Bh
aW50aW5nUmVjdEVQS05TXzEyUmVuZGVyT2JqZWN0RVMzX1JLTlNfMTJHcmFwaGljc1JlY3RFUktO
U183SW50UmVjdEUKIF9fWlRobjhfTjdXZWJDb3JlMzBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVs
ZW1lbnREMEV2CiBfX1pUaG44X043V2ViQ29yZTMxU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxl
bWVudEQwRXYKIF9fWk43V2ViQ29yZTIwSlNIVE1MSGVhZGluZ0VsZW1lbnQzcHV0RVBOM0pTQzlF
eGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVy
dHlTbG90RQpAQCAtMTY1MDEsNyArMTY1MDEsNyBAQCBfX1pOM1dURjlIYXNoVGFibGVJUE43V2Vi
Q29yZTROb2RlRVN0NHBhCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTROb2RlRVN0NHBh
aXJJUzNfZkVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNf
MTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWZFRUVFU0NfRTZsb29r
dXBFUktTM18KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlNE5vZGVFU3Q0cGFpcklTM19m
RU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM1X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJI
YXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TQl9JZkVFRUVTQ19FNnJlaGFzaEVpCiBf
X1pOM1dURjZWZWN0b3JJTlNfNlJlZlB0cklON1dlYkNvcmUxMUhUTUxFbGVtZW50RUVFTG0wRUUx
NGV4cGFuZENhcGFjaXR5RW0KLV9fWk43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TXzlGbG9h
dFJlY3RFRUQxRXYKK19fWk43V2ViQ29yZTE1R2x5cGhNZXRyaWNzTWFwSU5TXzEyR3JhcGhpY3NS
ZWN0RUVEMUV2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTI0dHJhdmVyc2VQcmV2aW91c1dpdGhX
cmFwRWIKIF9fWk4zV1RGNlZlY3Rvckl0TG0wRUU2aW5zZXJ0SXRFRXZtUEtUX20KIF9fWk5LN1dl
YkNvcmUxMlNlYXJjaEJ1ZmZlcjE2aXNXb3JkU3RhcnRNYXRjaEVtbQpAQCAtMTY1NzgsNyArMTY1
NzgsNyBAQCBfX1pON1dlYkNvcmVMMTNwYXJzZUtleVRpbWVzRVJLTjNXVEY2U3RyCiBfX1pON1dl
YkNvcmUxNFNWR1NNSUxFbGVtZW50MTVwYXJzZUJlZ2luT3JFbmRFUktOM1dURjZTdHJpbmdFTlMw
XzEwQmVnaW5PckVuZEUKIF9fWk43V2ViQ29yZTE0U1ZHU01JTEVsZW1lbnQxNXBhcnNlQ2xvY2tW
YWx1ZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0U1ZHU01JTEVsZW1lbnQxNnBhcnNl
T2Zmc2V0VmFsdWVFUktOM1dURjZTdHJpbmdFCi1fX1pOSzNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJ
ZGVudGl0eUV4dHJhY3RvcklkRUVOU185RmxvYXRIYXNoSWRFRU5TXzEwSGFzaFRyYWl0c0lkRUVT
Nl9FOGNvbnRhaW5zSWROU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJZGRTNF9FRUVFYlJLVF8K
K19fWk5LM1dURjlIYXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzEyR3Jh
cGhpY3NIYXNoSWRFRU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FOGNvbnRhaW5zSWROU18yMklkZW50
aXR5SGFzaFRyYW5zbGF0b3JJZGRTNF9FRUVFYlJLVF8KIF9fWk4zV1RGNlZlY3RvcklON1dlYkNv
cmU4U01JTFRpbWVFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pTdDE2X19pbnRyb3NvcnRf
bG9vcElQTjdXZWJDb3JlOFNNSUxUaW1lRWxFdlRfUzNfVDBfCiBfX1pTdDIyX19maW5hbF9pbnNl
cnRpb25fc29ydElQTjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM18KQEAgLTE2NjgzLDE0ICsxNjY4
MywxNCBAQCBfX1pON1dlYkNvcmUxN1NNSUxUaW1lQ29udGFpbmVyMTB0aW1lckZpCiBfX1pON1dl
YkNvcmUxOVNWR0FuaW1hdGlvbkVsZW1lbnQxOWVuZGVkQWN0aXZlSW50ZXJ2YWxFdgogX19aTks3
V2ViQ29yZTIyQXBwbHlQcm9wZXJ0eUZpbGxMYXllcklOU184RUZpbGxCb3hFRTEwYXBwbHlWYWx1
ZUVQTlNfMTZDU1NTdHlsZVNlbGVjdG9yRVBOU184Q1NTVmFsdWVFCiBfX1pON1dlYkNvcmUxNkNT
U1N0eWxlU2VsZWN0b3IxMW1hcEZpbGxDbGlwRU5TXzEzQ1NTUHJvcGVydHlJREVQTlNfOUZpbGxM
YXllckVQTlNfOENTU1ZhbHVlRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2NsaXBU
b0ltYWdlQnVmZmVyRVBOU18xMUltYWdlQnVmZmVyRVJLTlNfOUZsb2F0UmVjdEUKLV9fWk5LN1dl
YkNvcmUxMUltYWdlQnVmZmVyNGNsaXBFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0
UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTdjbGlwVG9JbWFnZUJ1ZmZlckVQ
TlNfMTFJbWFnZUJ1ZmZlckVSS05TXzEyR3JhcGhpY3NSZWN0RQorX19aTks3V2ViQ29yZTExSW1h
Z2VCdWZmZXI0Y2xpcEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEUK
IF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUyM2luaGVyaXRCYWNrZ3JvdW5kTGF5ZXJzRVJLTlNf
OUZpbGxMYXllckUKIF9fWk5LN1dlYkNvcmU5UmVuZGVyQm94NDFwZXJwZW5kaWN1bGFyQ29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodEV2CiBfX1pOSzdXZWJDb3JlMTRTaW1wbGVGb250RGF0YTMy
dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGFFdgogX19aTkszV1RGOUhhc2hUYWJsZUlQ
S043V2ViQ29yZTEzSW5saW5lVGV4dEJveEVTdDRwYWlySVM0X1M1X0lOU182VmVjdG9ySVBLTlMx
XzE0U2ltcGxlRm9udERhdGFFTG0wRUVFTlMxXzEzR2x5cGhPdmVyZmxvd0VFRU5TXzE4UGFpckZp
cnN0RXh0cmFjdG9ySVNEX0VFTlNfN1B0ckhhc2hJUzRfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5T
XzEwSGFzaFRyYWl0c0lTNF9FRU5TSl9JU0NfRUVFRVNLX0U0ZmluZElTNF9OU18yMklkZW50aXR5
SGFzaFRyYW5zbGF0b3JJUzRfU0RfU0hfRUVFRU5TXzIySGFzaFRhYmxlQ29uc3RJdGVyYXRvcklT
NF9TRF9TRl9TSF9TTV9TS19FRVJLVF8KIF9fWk43V2ViQ29yZTEzSW5saW5lRmxvd0JveDI1Zmxp
cExpbmVzSW5CbG9ja0RpcmVjdGlvbkVpaQotX19aTjdXZWJDb3JlMTZmaW5kSW50ZXJzZWN0aW9u
RVJLTlNfMTBGbG9hdFBvaW50RVMyX1MyX1MyX1JTMF8KK19fWk43V2ViQ29yZTE2ZmluZEludGVy
c2VjdGlvbkVSS05TXzEzR3JhcGhpY3NQb2ludEVTMl9TMl9TMl9SUzBfCiBfX1pON1dlYkNvcmUy
MFJlbmRlckJveE1vZGVsT2JqZWN0MTlkcmF3Qm94U2lkZUZyb21QYXRoRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzdJbnRSZWN0RVJLTlNfNFBhdGhFUEtOU18xMEJvcmRlckVkZ2VFZmZOU183
Qm94U2lkZUVQS05TXzExUmVuZGVyU3R5bGVFTlNfNUNvbG9yRU5TXzEyRUJvcmRlclN0eWxlRU5T
XzI0QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlRWJiCiBfX1pON1dlYkNvcmUyMFJlbmRlckJveE1v
ZGVsT2JqZWN0MjdwYWludFRyYW5zbHVjZW50Qm9yZGVyU2lkZXNFUE5TXzE1R3JhcGhpY3NDb250
ZXh0RVBLTlNfMTFSZW5kZXJTdHlsZUVSS05TXzE0Um91bmRlZFJlY3RFUzhfUEtOU18xMEJvcmRl
ckVkZ2VFTlNfMjRCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2VFYmJiCiBfX1pOM1dURjlIYXNoVGFi
bGVJUE5TXzE1TGlzdEhhc2hTZXROb2RlSVBON1dlYkNvcmUxMVJlbmRlckJsb2NrMTRGbG9hdGlu
Z09iamVjdEVMbTRFRUVTN19OU18xN0lkZW50aXR5RXh0cmFjdG9ySVM3X0VFTlNfMjhMaXN0SGFz
aFNldE5vZGVIYXNoRnVuY3Rpb25zSVM1X0xtNEVOUzNfMjdGbG9hdGluZ09iamVjdEhhc2hGdW5j
dGlvbnNFRUVOU18xMEhhc2hUcmFpdHNJUzdfRUVTRV9FMTZsb29rdXBGb3JXcml0aW5nRVJLUzdf
CkBAIC0xNjgwMiwxNiArMTY4MDIsMTYgQEAgX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMjNw
YXJzZVBhdGhEYQogX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMTVtb3ZlVG9OZXh0
VG9rZW5FdgogX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMTlwYXJzZVNWR1NlZ21l
bnRUeXBlRVJOU18xNFNWR1BhdGhTZWdUeXBlRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2Vy
MThwYXJzZU1vdmVUb1NlZ21lbnRFdgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNl
MThwYXJzZU1vdmVUb1NlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTI0U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyNm1vdmVUb0VSS05TXzEwRmxvYXRQb2ludEViTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCi1fX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjE1
d3JpdGVGbG9hdFBvaW50RVJLTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMTlTVkdQYXRo
U3RyaW5nU291cmNlMThwYXJzZU1vdmVUb1NlZ21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEUKK19f
Wk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyNm1vdmVUb0VSS05TXzEzR3JhcGhp
Y3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyNFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjE1d3JpdGVGbG9hdFBvaW50RVJLTlNfMTNHcmFwaGljc1BvaW50RQog
X19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxN2NvbnRpbnVlQ29uc3VtaW5n
RXYKIF9fWk5LN1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UxMWhhc01vcmVEYXRhRXYKIF9f
Wk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTExbmV4dENvbW1hbmRFTlNfMTRTVkdQYXRo
U2VnVHlwZUUKIF9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMjVpbmNyZW1l
bnRQYXRoU2VnbWVudENvdW50RXYKIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjE4cGFyc2VM
aW5lVG9TZWdtZW50RXYKLV9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTE4cGFyc2VM
aW5lVG9TZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlcjZsaW5lVG9FUktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0
ZU1vZGVFCitfX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UxOHBhcnNlTGluZVRvU2Vn
bWVudEVSTlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVh
bUJ1aWxkZXI2bGluZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVN
b2RlRQogX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI5Y2xvc2VQYXRoRXYK
IF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjdjbGVhbnVwRXYKIF9fWk43V2ViQ29yZTI0U1ZH
UGF0aEJ5dGVTdHJlYW1CdWlsZGVyN2NsZWFudXBFdgpAQCAtMTY4MzQsMTQgKzE2ODM0LDE0IEBA
IF9fWk43V2ViQ29yZTE0U1ZHUGF0aEJ1aWxkZXJDMUV2CiBfX1pON1dlYkNvcmUyM1NWR1BhdGhC
eXRlU3RyZWFtU291cmNlQzFFUE5TXzE3U1ZHUGF0aEJ5dGVTdHJlYW1FCiBfX1pON1dlYkNvcmUy
M1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMTVtb3ZlVG9OZXh0VG9rZW5FdgogX19aTjdXZWJDb3Jl
MjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE5cGFyc2VTVkdTZWdtZW50VHlwZUVSTlNfMTRTVkdQ
YXRoU2VnVHlwZUUKLV9fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOHBhcnNl
TW92ZVRvU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVp
bGRlcjZtb3ZlVG9FUktOU18xMEZsb2F0UG9pbnRFYk5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQor
X19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE4cGFyc2VNb3ZlVG9TZWdtZW50
RVJOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyNm1vdmVU
b0VSS05TXzEzR3JhcGhpY3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dl
YkNvcmUxNFNWR1BhdGhCdWlsZGVyMTdjb250aW51ZUNvbnN1bWluZ0V2CiBfX1pOSzdXZWJDb3Jl
MjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTExaGFzTW9yZURhdGFFdgogX19aTjdXZWJDb3JlMjNT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTExbmV4dENvbW1hbmRFTlNfMTRTVkdQYXRoU2VnVHlwZUUK
IF9fWk43V2ViQ29yZTE0U1ZHUGF0aEJ1aWxkZXIyNWluY3JlbWVudFBhdGhTZWdtZW50Q291bnRF
dgotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTE4cGFyc2VMaW5lVG9TZWdt
ZW50RVJOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyNmxpbmVU
b0VSS05TXzEwRmxvYXRQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29y
ZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxOHBhcnNlTGluZVRvU2VnbWVudEVSTlNfMTNHcmFw
aGljc1BvaW50RQorX19aTjdXZWJDb3JlMTRTVkdQYXRoQnVpbGRlcjZsaW5lVG9FUktOU18xM0dy
YXBoaWNzUG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1Bh
dGhCdWlsZGVyOWNsb3NlUGF0aEV2CiBfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyN2NsZWFu
dXBFdgogX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZUQwRXYKQEAgLTE2ODY4
LDcgKzE2ODY4LDcgQEAgX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxOFNWR0dyYWRpZQog
X19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxOFNWR0dyYWRpZW50RWxlbWVudEVTM19OU18x
N0lkZW50aXR5RXh0cmFjdG9ySVMzX0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xMEhhc2hUcmFpdHNJ
UzNfRUVTOV9FNmV4cGFuZEV2CiBfX1pOSzdXZWJDb3JlMzFSZW5kZXJTVkdSZXNvdXJjZUxpbmVh
ckdyYWRpZW50MTVib3VuZGluZ0JveE1vZGVFdgogX19aTks3V2ViQ29yZTMxUmVuZGVyU1ZHUmVz
b3VyY2VMaW5lYXJHcmFkaWVudDEzYnVpbGRHcmFkaWVudEVQTlNfMTJHcmFkaWVudERhdGFFUE5T
XzE4U1ZHR3JhZGllbnRFbGVtZW50RQotX19aTjdXZWJDb3JlMjRTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQyM2NhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzRVJLTlNfMjRMaW5lYXJHcmFkaWVudEF0dHJp
YnV0ZXNFUk5TXzEwRmxvYXRQb2ludEVTNV8KK19fWk43V2ViQ29yZTI0U1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50MjNjYWxjdWxhdGVTdGFydEVuZFBvaW50c0VSS05TXzI0TGluZWFyR3JhZGllbnRB
dHRyaWJ1dGVzRVJOU18xM0dyYXBoaWNzUG9pbnRFUzVfCiBfX1pON1dlYkNvcmU4R3JhZGllbnQx
NXNldFNwcmVhZE1ldGhvZEVOU18yMEdyYWRpZW50U3ByZWFkTWV0aG9kRQogX19aTjdXZWJDb3Jl
OEdyYWRpZW50MTJhZGRDb2xvclN0b3BFUktOUzBfOUNvbG9yU3RvcEUKIF9fWk43V2ViQ29yZTMx
UmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudDI2Y2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zv
cm1FUk5TXzE1QWZmaW5lVHJhbnNmb3JtRQpAQCAtMTY4NzksMTggKzE2ODc5LDE4IEBAIF9fWk43
V2ViQ29yZTMxUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmEKIF9fWk43V2ViQ29yZTI0U1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50MjVjb2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzRVJOU18yNFJhZGlh
bEdyYWRpZW50QXR0cmlidXRlc0UKIF9fWk5LN1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQxNWJvdW5kaW5nQm94TW9kZUV2CiBfX1pOSzdXZWJDb3JlMzFSZW5kZXJTVkdS
ZXNvdXJjZVJhZGlhbEdyYWRpZW50MTNidWlsZEdyYWRpZW50RVBOU18xMkdyYWRpZW50RGF0YUVQ
TlNfMThTVkdHcmFkaWVudEVsZW1lbnRFCi1fX1pON1dlYkNvcmUyNFNWR1JhZGlhbEdyYWRpZW50
RWxlbWVudDM1Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXNFUktOU18yNFJhZGlh
bEdyYWRpZW50QXR0cmlidXRlc0VSTlNfMTBGbG9hdFBvaW50RVM1X1JmCitfX1pON1dlYkNvcmUy
NFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDM1Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRS
YWRpdXNFUktOU18yNFJhZGlhbEdyYWRpZW50QXR0cmlidXRlc0VSTlNfMTNHcmFwaGljc1BvaW50
RVM1X1JmCiBfX1pON1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQyNmNh
bGN1bGF0ZUdyYWRpZW50VHJhbnNmb3JtRVJOU18xNUFmZmluZVRyYW5zZm9ybUUKIF9fWk43V2Vi
Q29yZTEyU1ZHVHJhbnNmb3JtOHNldFNjYWxlRWZmCiBfX1pON1dlYkNvcmUxMlNWR1RyYW5zZm9y
bTlzZXRSb3RhdGVFZmZmCiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIxN3BhcnNlQXJjVG9T
ZWdtZW50RXYKLV9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTE3cGFyc2VBcmNUb1Nl
Z21lbnRFUmZTMV9TMV9SYlMyX1JOU18xMEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUxOVNWR1Bh
dGhTdHJpbmdTb3VyY2UxN3BhcnNlQXJjVG9TZWdtZW50RVJmUzFfUzFfUmJTMl9STlNfMTNHcmFw
aGljc1BvaW50RQogX19aTjdXZWJDb3JlMTJwYXJzZUFyY0ZsYWdFUlBLdFMxX1JiCi1fX1pON1dl
YkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjVhcmNUb0VmZmZiYlJLTlNfMTBGbG9hdFBv
aW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0
cmVhbVNvdXJjZTE3cGFyc2VBcmNUb1NlZ21lbnRFUmZTMV9TMV9SYlMyX1JOU18xMEZsb2F0UG9p
bnRFCi1fX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIxOWRlY29tcG9zZUFyY1RvQ3ViaWNFZmZm
Uk5TXzEwRmxvYXRQb2ludEVTMl9iYgorX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1
aWxkZXI1YXJjVG9FZmZmYmJSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRl
TW9kZUUKK19fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UxN3BhcnNlQXJjVG9T
ZWdtZW50RVJmUzFfUzFfUmJTMl9STlNfMTNHcmFwaGljc1BvaW50RQorX19aTjdXZWJDb3JlMTNT
VkdQYXRoUGFyc2VyMTlkZWNvbXBvc2VBcmNUb0N1YmljRWZmZlJOU18xM0dyYXBoaWNzUG9pbnRF
UzJfYmIKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtNXNjYWxlRWRkCi1fX1pON1dlYkNv
cmUxNFNWR1BhdGhCdWlsZGVyMTJjdXJ2ZVRvQ3ViaWNFUktOU18xMEZsb2F0UG9pbnRFUzNfUzNf
TlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUxNFNWR1BhdGhCdWlsZGVyMTJj
dXJ2ZVRvQ3ViaWNFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfUzNfTlNfMThQYXRoQ29vcmRpbmF0
ZU1vZGVFCiBfX1pUaG4xMjBfTjdXZWJDb3JlMTZTVkdTY3JpcHRFbGVtZW50MTZzZXRIcmVmQmFz
ZVZhbHVlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMjhwYXJz
ZUxpbmVUb0hvcml6b250YWxTZWdtZW50RXYKIF9fWk43V2ViQ29yZTE5U1ZHUGF0aFN0cmluZ1Nv
dXJjZTI4cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudEVSZgpAQCAtMTY4OTksMTEgKzE2ODk5
LDExIEBAIF9fWk43V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjI2cGFyc2VMaW5lVG8KIF9fWk43V2Vi
Q29yZTE5U1ZHUGF0aFN0cmluZ1NvdXJjZTI2cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnRFUmYK
IF9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMTRsaW5lVG9WZXJ0aWNhbEVm
TlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxM1NWR1BhdGhQYXJzZXIyNHBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudEV2Ci1fX1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3Vy
Y2UyNHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RVMyX1MyXwotX19a
TjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEw
RmxvYXRQb2ludEVTM19TM19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTE5
U1ZHUGF0aFN0cmluZ1NvdXJjZTI0cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50RVJOU18xM0dyYXBo
aWNzUG9pbnRFUzJfUzJfCitfX1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjEy
Y3VydmVUb0N1YmljRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4UGF0aENvb3JkaW5h
dGVNb2RlRQogX19aTjdXZWJDb3JlMTNTVkdQYXRoUGFyc2VyMzBwYXJzZUN1cnZlVG9DdWJpY1Nt
b290aFNlZ21lbnRFdgotX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMzBwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEVTMl8KLV9fWk43V2ViQ29y
ZTI0U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xMEZs
b2F0UG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUxOVNWR1Bh
dGhTdHJpbmdTb3VyY2UzMHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFw
aGljc1BvaW50RVMyXworX19aTjdXZWJDb3JlMjRTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIxOGN1
cnZlVG9DdWJpY1Ntb290aEVSS05TXzEzR3JhcGhpY3NQb2ludEVTM19OU18xOFBhdGhDb29yZGlu
YXRlTW9kZUUKIF9fWk43V2ViQ29yZTEyU1ZHVHJhbnNmb3JtOXNldE1hdHJpeEVSS05TXzE1QWZm
aW5lVHJhbnNmb3JtRQogX19aTjdXZWJDb3JlTDE2dHNwYW5Db25zdHJ1Y3RvckVSS05TXzEzUXVh
bGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RWIKIF9fWk43V2ViQ29yZTE1U1ZHVFNwYW5FbGVtZW50
NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RQpAQCAtMTY5MTcsOCAr
MTY5MTcsOCBAQCBfX1pON1dlYkNvcmUxNVJlbmRlclNWR0lubGluZTE3dXBkYXRlRnJvCiBfX1pO
SzdXZWJDb3JlMTVTVkdUU3BhbkVsZW1lbnQyNWNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXJFUE5T
XzROb2RlRQogX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTI4cGFyc2VMaW5l
VG9Ib3Jpem9udGFsU2VnbWVudEVSZgogX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZTI2cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnRFUmYKLV9fWk43V2ViQ29yZTIzU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2UyNHBhcnNlQ3VydmVUb0N1YmljU2VnbWVudEVSTlNfMTBGbG9hdFBv
aW50RVMyX1MyXwotX19aTjdXZWJDb3JlMjNTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTMwcGFyc2VD
dXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfCitfX1pON1dlYkNv
cmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMjRwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnRFUk5T
XzEzR3JhcGhpY3NQb2ludEVTMl9TMl8KK19fWk43V2ViQ29yZTIzU1ZHUGF0aEJ5dGVTdHJlYW1T
b3VyY2UzMHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50
RVMyXwogX19aTjdXZWJDb3JlTDI1cmVjdXJzaXZlVXBkYXRlU2NhbGVkRm9udEVQTlNfMTJSZW5k
ZXJPYmplY3RFCiBfX1pOSzdXZWJDb3JlMTVSZW5kZXJTVkdJbmxpbmUxMWlzU1ZHSW5saW5lRXYK
IF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUzMFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzQnVpbGRl
cjEyVGV4dFBvc2l0aW9uRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQpAQCAtMTY5MjgsMTEgKzE2
OTI4LDExIEBAIF9fWk4zV1RGMTFWZWN0b3JNb3ZlcklMYjBFTjdXZWJDb3JlMjNTVkcKIF9fWk5L
N1dlYkNvcmUxNlNWR0lubGluZUZsb3dCb3gxOWNhbGN1bGF0ZUJvdW5kYXJpZXNFdgogX19aTjdX
ZWJDb3JlMTZTVkdJbmxpbmVGbG93Qm94NXBhaW50RVJOU185UGFpbnRJbmZvRWlpaWkKIF9fWk43
V2ViQ29yZTEzU1ZHUGF0aFBhcnNlcjI4cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudEV2Ci1f
X1pON1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UyOHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnRFUk5TXzEwRmxvYXRQb2ludEVTMl8KLV9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyMTZjdXJ2ZVRvUXVhZHJhdGljRVJLTlNfMTBGbG9hdFBvaW50RVMzX05TXzE4UGF0
aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMjhwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFUzJfCitfX1pON1dl
YkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjE2Y3VydmVUb1F1YWRyYXRpY0VSS05TXzEz
R3JhcGhpY3NQb2ludEVTM19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTEz
U1ZHUGF0aFBhcnNlcjM0cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudEV2Ci1fX1pO
N1dlYkNvcmUxOVNWR1BhdGhTdHJpbmdTb3VyY2UzNHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290
aFNlZ21lbnRFUk5TXzEwRmxvYXRQb2ludEUKLV9fWk43V2ViQ29yZTI0U1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTBGbG9hdFBvaW50RU5TXzE4
UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMTlTVkdQYXRoU3RyaW5nU291cmNlMzRw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFCitf
X1pON1dlYkNvcmUyNFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjIyY3VydmVUb1F1YWRyYXRpY1Nt
b290aEVSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43
V2ViQ29yZThTVkdDb2xvcjIzY29sb3JGcm9tUkdCQ29sb3JTdHJpbmdFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmVMMTVtYXNrQ29uc3RydWN0b3JFUktOU18xM1F1YWxpZmllZE5hbWVFUE5T
XzhEb2N1bWVudEViCiBfX1pON1dlYkNvcmUxNFNWR01hc2tFbGVtZW50NmNyZWF0ZUVSS05TXzEz
UXVhbGlmaWVkTmFtZUVQTlNfOERvY3VtZW50RQpAQCAtMTY5NTIsMjAgKzE2OTUyLDIwIEBAIF9f
WlRobjEyOF9OSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU0KIF9fWk5LN1dlYkNvcmUxN1N0
eWxlUmVzb3VyY2VEYXRhZXFFUktTMF8KIF9fWlRobjEyOF9ON1dlYkNvcmUyM1JlbmRlclNWR1Jl
c291cmNlTWFza2VyMjVyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlRWIKIF9fWk43V2ViQ29yZTE3
U3R5bGVSZXNvdXJjZURhdGFEMUV2Ci1fX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291
cmNlMjhwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfCi1f
X1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMzRwYXJzZUN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUyM1NWR1BhdGhC
eXRlU3RyZWFtU291cmNlMjhwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50RVJOU18xM0dyYXBo
aWNzUG9pbnRFUzJfCitfX1pON1dlYkNvcmUyM1NWR1BhdGhCeXRlU3RyZWFtU291cmNlMzRwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRFCiBfX1pO
N1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFza2VyMTlyZXNvdXJjZUJvdW5kaW5nQm94RVBO
U18xMlJlbmRlck9iamVjdEUKLV9fWk5LN1dlYkNvcmUxNFNWR01hc2tFbGVtZW50MTVtYXNrQm91
bmRpbmdCb3hFUktOU185RmxvYXRSZWN0RQorX19aTks3V2ViQ29yZTE0U1ZHTWFza0VsZW1lbnQx
NW1hc2tCb3VuZGluZ0JveEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMjNSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjMxY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdEV2CiBf
X1pON1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFza2VyMjFyZW1vdmVDbGllbnRGcm9tQ2Fj
aGVFUE5TXzEyUmVuZGVyT2JqZWN0RWIKIF9fWk5LM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEy
UmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8xME1hc2tlckRhdGFFRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U4Y29udGFpbnNJUzNfTlNfMjJJZGVudGl0
eUhhc2hUcmFuc2xhdG9ySVMzX1M3X1NCX0VFRUViUktUXwogX19aTjdXZWJDb3JlMjNSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjEzYXBwbHlSZXNvdXJjZUVQTlNfMTJSZW5kZXJPYmplY3RFUE5TXzEx
UmVuZGVyU3R5bGVFUlBOU18xNUdyYXBoaWNzQ29udGV4dEV0Ci1fX1pON1dlYkNvcmUxOVNWR0lt
YWdlQnVmZmVyVG9vbHMzNmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlckVQS05T
XzEyUmVuZGVyT2JqZWN0RVJLTlNfOUZsb2F0UmVjdEUKLV9fWk43V2ViQ29yZTE5U1ZHSW1hZ2VC
dWZmZXJUb29sczE3Y3JlYXRlSW1hZ2VCdWZmZXJFUktOU185RmxvYXRSZWN0RVMzX1JOM1dURjZP
d25QdHJJTlNfMTFJbWFnZUJ1ZmZlckVFRU5TXzEwQ29sb3JTcGFjZUUKK19fWk43V2ViQ29yZTE5
U1ZHSW1hZ2VCdWZmZXJUb29sczM2Y2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVy
RVBLTlNfMTJSZW5kZXJPYmplY3RFUktOU18xMkdyYXBoaWNzUmVjdEUKK19fWk43V2ViQ29yZTE5
U1ZHSW1hZ2VCdWZmZXJUb29sczE3Y3JlYXRlSW1hZ2VCdWZmZXJFUktOU18xMkdyYXBoaWNzUmVj
dEVTM19STjNXVEY2T3duUHRySU5TXzExSW1hZ2VCdWZmZXJFRUVOU18xMENvbG9yU3BhY2VFCiBf
X1pON1dlYkNvcmUyMmxpbmVhclJHQkNvbG9yU3BhY2VSZWZFdgogX19aTjdXZWJDb3JlMjNSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjI0ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlRVBOU18xME1hc2tl
ckRhdGFFUEtOU18xNFNWR01hc2tFbGVtZW50RVBOU18xMlJlbmRlck9iamVjdEUKIF9fWk43V2Vi
Q29yZTE5U1ZHSW1hZ2VCdWZmZXJUb29sczI2cmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXJFUE5T
XzExSW1hZ2VCdWZmZXJFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
Ci1fX1pON1dlYkNvcmUxOVNWR0ltYWdlQnVmZmVyVG9vbHMxN2NsaXBUb0ltYWdlQnVmZmVyRVBO
U18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfOUZsb2F0UmVj
dEVSTjNXVEY2T3duUHRySU5TXzExSW1hZ2VCdWZmZXJFRUUKK19fWk43V2ViQ29yZTE5U1ZHSW1h
Z2VCdWZmZXJUb29sczE3Y2xpcFRvSW1hZ2VCdWZmZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfMTVBZmZpbmVUcmFuc2Zvcm1FUktOU18xMkdyYXBoaWNzUmVjdEVSTjNXVEY2T3duUHRySU5T
XzExSW1hZ2VCdWZmZXJFRUUKIF9fWk43V2ViQ29yZTQ2anNET01XaW5kb3dQcm90b3R5cGVGdW5j
dGlvbkdldE1hdGNoZWRDU1NSdWxlc0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3V2ViQ29yZTlE
T01XaW5kb3cxOGdldE1hdGNoZWRDU1NSdWxlc0VQTlNfN0VsZW1lbnRFUktOM1dURjZTdHJpbmdF
YgogX19aTks3V2ViQ29yZTI2Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24yNGdldExheWVyZWRT
aG9ydGhhbmRWYWx1ZUVQS2ltCkBAIC0xNzEwMCw3ICsxNzEwMCw3IEBAIF9fWk5LN1dlYkNvcmUx
NFJlbmRlclJ1YnlCYXNlMTByZW5kZXJOYW0KIF9fWk43V2ViQ29yZTE0UmVuZGVyUnVieVRleHRE
MEV2CiBfX1pOSzdXZWJDb3JlOFNWR0ltYWdlMTd1c2VzQ29udGFpbmVyU2l6ZUV2CiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDlkcmF3SW1hZ2VFUE5TXzVJbWFnZUVOU18xMENvbG9yU3Bh
Y2VFUktOU183SW50UmVjdEVTNl9OU18xN0NvbXBvc2l0ZU9wZXJhdG9yRWIKLV9fWk43V2ViQ29y
ZTVJbWFnZTlkcmF3VGlsZWRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVT
NV9OUzBfOFRpbGVSdWxlRVM2X05TXzEwQ29sb3JTcGFjZUVOU18xN0NvbXBvc2l0ZU9wZXJhdG9y
RQorX19aTjdXZWJDb3JlNUltYWdlOWRyYXdUaWxlZEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U18xMkdyYXBoaWNzUmVjdEVTNV9OUzBfOFRpbGVSdWxlRVM2X05TXzEwQ29sb3JTcGFjZUVOU18x
N0NvbXBvc2l0ZU9wZXJhdG9yRQogX19aTks3V2ViQ29yZTE0U2ltcGxlRm9udERhdGEyM2Jyb2tl
bklkZW9ncmFwaEZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTE4dmVydGljYWxUZXh0Q3Vyc29yRXYK
IF9fWk5LN1dlYkNvcmUxNFNpbXBsZUZvbnREYXRhMjZ1cHJpZ2h0T3JpZW50YXRpb25Gb250RGF0
YUV2CkBAIC0xNzExNSwyOSArMTcxMTUsMjkgQEAgX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGUx
NWJvcmRlckxlZnRXaQogX19aTks3V2ViQ29yZTExUmVuZGVyU3R5bGUxN2JvcmRlckJvdHRvbVdp
ZHRoRXYKIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUxMnNldEJvcmRlckZpdEVOU18xMEVCb3Jk
ZXJGaXRFCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJCbG9jazE4YWRqdXN0Rm9yQm9yZGVyRml0RWlS
aVMxXwotX19aTjdXZWJDb3JlMTBTaGFkb3dCbHVyMjdkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxp
bmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UmVjdEVSS05TXzE0Um91bmRlZFJl
Y3Q1UmFkaWlFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI3ZHJhd1Jl
Y3RTaGFkb3dXaXRob3V0VGlsaW5nRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhp
Y3NSZWN0RVJLTlNfMTRSb3VuZGVkUmVjdDVSYWRpaUVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJD
b3JlMTBTaGFkb3dCbHVyMTZkcmF3U2hhZG93QnVmZmVyRVBOU18xNUdyYXBoaWNzQ29udGV4dEUK
IF9fWk5LN1dlYkNvcmU0UGF0aDZsZW5ndGhFdgogX19aTjdXZWJDb3JlMThQYXRoVHJhdmVyc2Fs
U3RhdGVDMUVOUzBfMTlQYXRoVHJhdmVyc2FsQWN0aW9uRQogX19aTks3V2ViQ29yZTRQYXRoNWFw
cGx5RVB2UEZ2UzFfUEtOU18xMVBhdGhFbGVtZW50RUUKIF9fWk43V2ViQ29yZUwyNkNHUGF0aEFw
cGxpZXJUb1BhdGhBcHBsaWVyRVB2UEsxM0NHUGF0aEVsZW1lbnQKIF9fWk43V2ViQ29yZUwyNXBh
dGhMZW5ndGhBcHBsaWVyRnVuY3Rpb25FUHZQS05TXzExUGF0aEVsZW1lbnRFCi1fX1pON1dlYkNv
cmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTZtb3ZlVG9FUktOU18xMEZsb2F0UG9pbnRFCi1fX1pON1dl
YkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTZsaW5lVG9FUktOU18xMEZsb2F0UG9pbnRFCi1fX1pO
N1dlYkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTEzY3ViaWNCZXppZXJUb0VSS05TXzEwRmxvYXRQ
b2ludEVTM19TM18KK19fWk43V2ViQ29yZTE4UGF0aFRyYXZlcnNhbFN0YXRlNm1vdmVUb0VSS05T
XzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTE4UGF0aFRyYXZlcnNhbFN0YXRlNmxpbmVU
b0VSS05TXzEzR3JhcGhpY3NQb2ludEUKK19fWk43V2ViQ29yZTE4UGF0aFRyYXZlcnNhbFN0YXRl
MTNjdWJpY0JlemllclRvRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzXwogX19aTjNXVEY2VmVj
dG9ySU43V2ViQ29yZTExQ3ViaWNCZXppZXJFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pO
N1dlYkNvcmUxOFBhdGhUcmF2ZXJzYWxTdGF0ZTEyY2xvc2VTdWJwYXRoRXYKIF9fWk4zV1RGNlZl
Y3RvcklkTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250
ZXh0MTFzZXRMaW5lRGFzaEVSS04zV1RGNlZlY3RvcklkTG0wRUVFZgogX19aTjdXZWJDb3JlMTNJ
bmxpbmVGbG93Qm94OXBhaW50TWFza0VSTlNfOVBhaW50SW5mb0VpaQogX19aTjdXZWJDb3JlOFNW
R0ltYWdlMjZuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZUV2Ci1fX1pON1dlYkNvcmUxMFNoYWRv
d0JsdXIyOGRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmdFUE5TXzE1R3JhcGhpY3NDb250ZXh0
RVJLTlNfOUZsb2F0UmVjdEVTNV9SS05TXzE0Um91bmRlZFJlY3Q1UmFkaWlFUktOU183SW50UmVj
dEUKK19fWk43V2ViQ29yZTEwU2hhZG93Qmx1cjI4ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGlu
Z0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMkdyYXBoaWNzUmVjdEVTNV9SS05TXzE0Um91
bmRlZFJlY3Q1UmFkaWlFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUx
MnNldE1heEhlaWdodEVOU182TGVuZ3RoRQogX19aTjdXZWJDb3JlMTNDU1NTdHlsZVNoZWV0MThk
ZXRlcm1pbmVOYW1lc3BhY2VFUktOM1dURjEyQXRvbWljU3RyaW5nRQogX19aTks3V2ViQ29yZTEw
U3R5bGVJbWFnZTEzZXJyb3JPY2N1cnJlZEV2CiBfX1pOSzdXZWJDb3JlMTlTdHlsZUdlbmVyYXRl
ZEltYWdlMjFpbWFnZUhhc1JlbGF0aXZlV2lkdGhFdgotX19aVGhuMTA0X043V2ViQ29yZTE0Q1NT
Q2FudmFzVmFsdWUxM2NhbnZhc0NoYW5nZWRFUE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFUktOU185
RmxvYXRSZWN0RQotX19aTjdXZWJDb3JlMTRDU1NDYW52YXNWYWx1ZTEzY2FudmFzQ2hhbmdlZEVQ
TlNfMTdIVE1MQ2FudmFzRWxlbWVudEVSS05TXzlGbG9hdFJlY3RFCitfX1pUaG4xMDRfTjdXZWJD
b3JlMTRDU1NDYW52YXNWYWx1ZTEzY2FudmFzQ2hhbmdlZEVQTlNfMTdIVE1MQ2FudmFzRWxlbWVu
dEVSS05TXzEyR3JhcGhpY3NSZWN0RQorX19aTjdXZWJDb3JlMTRDU1NDYW52YXNWYWx1ZTEzY2Fu
dmFzQ2hhbmdlZEVQTlNfMTdIVE1MQ2FudmFzRWxlbWVudEVSS05TXzEyR3JhcGhpY3NSZWN0RQog
X19aTjdXZWJDb3JlMTRqc0xvY2F0aW9uSGFzaEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1
ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pOSzdXZWJDb3JlOExvY2F0aW9uNGhhc2hFdgogX19a
TjdXZWJDb3JlMTBKU0xvY2F0aW9uM3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRp
ZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKQEAgLTE3MTk5LDcgKzE3
MTk5LDcgQEAgX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQxMQogX19aTjdX
ZWJDb3JlMjJKU0hUTUxUYWJsZUNlbGxFbGVtZW50M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMx
XzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5TMV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4z
SlNDOWxvb2t1cFB1dElON1dlYkNvcmUyMkpTSFRNTFRhYmxlQ2VsbEVsZW1lbnRFRUViUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBU
XwogX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ5ZHJhd0ltYWdlRVBOU18x
NkhUTUxWaWRlb0VsZW1lbnRFZmZSaQotX19aTjdXZWJDb3JlMjRDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ5ZHJhd0ltYWdlRVBOU18xNkhUTUxWaWRlb0VsZW1lbnRFUktOU185RmxvYXRSZWN0RVM1
X1JpCitfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlkcmF3SW1hZ2VFUE5T
XzE2SFRNTFZpZGVvRWxlbWVudEVSS05TXzEyR3JhcGhpY3NSZWN0RVM1X1JpCiBfX1pON1dlYkNv
cmUxNUdyYXBoaWNzQ29udGV4dDE3c2V0U3Ryb2tlR3JhZGllbnRFTjNXVEYxMFBhc3NSZWZQdHJJ
TlNfOEdyYWRpZW50RUVFCiBfX1pON1dlYkNvcmUyNENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDlk
cmF3SW1hZ2VFUE5TXzE3SFRNTENhbnZhc0VsZW1lbnRFZmZmZlJpCiBfX1pON1dlYkNvcmU2MGpz
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlRnVuY3Rpb25EcmF3SW1hZ2VGcm9tUmVj
dEVQTjNKU0M5RXhlY1N0YXRlRQpAQCAtMjI3MzgsOCArMjI3MzgsOCBAQCBfX1pON1dlYkNvcmUy
MXNldEpTRG9jdW1lbnRPbnNjcm9sbEVQTjNKCiBfX1pON1dlYkNvcmUzNmpzRE9NV2luZG93UHJv
dG90eXBlRnVuY3Rpb25SZXNpemVUb0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3V2ViQ29yZTlE
T01XaW5kb3c4cmVzaXplVG9FZmYKIF9fWk43V2ViQ29yZTE5c2NyZWVuQXZhaWxhYmxlUmVjdEVQ
TlNfNldpZGdldEUKLV9fWk43V2ViQ29yZTlET01XaW5kb3cxNmFkanVzdFdpbmRvd1JlY3RFUktO
U185RmxvYXRSZWN0RVJTMV9TM18KLV9fWk5LN1dlYkNvcmU2Q2hyb21lMTNzZXRXaW5kb3dSZWN0
RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTlET01XaW5kb3cxNmFkanVzdFdpbmRvd1Jl
Y3RFUktOU18xMkdyYXBoaWNzUmVjdEVSUzFfUzNfCitfX1pOSzdXZWJDb3JlNkNocm9tZTEzc2V0
V2luZG93UmVjdEVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlTDM0ZXhlY3V0ZVNj
cm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudEVQTlNfNUZyYW1lRVBOU181RXZlbnRFTlNfMTlFZGl0
b3JDb21tYW5kU291cmNlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyNGxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9sbExvZ2ljYWxEaXJlY3Rpb25F
TlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjIxbG9naWNhbFNjcm9sbE92ZXJmbG93RU5TXzIyU2Nyb2xsTG9naWNhbERpcmVjdGlvbkVO
U18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTIyOTE5LDcgKzIyOTE5LDcgQEAg
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0NmFwcGVuZEVSS1MwXwogX19aTjdXZWJDb3JlMTNI
aXRUZXN0UmVzdWx0MjZtdXRhYmxlUmVjdEJhc2VkVGVzdFJlc3VsdEV2CiBfX1pOSzdXZWJDb3Jl
MTNIaXRUZXN0UmVzdWx0MTlyZWN0QmFzZWRUZXN0UmVzdWx0RXYKIF9fWk43V2ViQ29yZTIxU3Rh
dGljSGFzaFNldE5vZGVMaXN0RDBFdgotX19aTjdXZWJDb3JlOVJlbmRlckJveDEzYWJzb2x1dGVR
dWFkc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTG0wRUVFCitfX1pON1dlYkNvcmU5UmVu
ZGVyQm94MTNhYnNvbHV0ZVF1YWRzRVJOM1dURjZWZWN0b3JJTlNfMTJHcmFwaGljc1F1YWRFTG0w
RUVFCiBfX1pON1dlYkNvcmUzOWpzRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uU2Nyb2xsQnlMaW5l
c0VQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlN0VsZW1lbnQxM3Njcm9sbEJ5TGluZXNF
aQogX19aTjdXZWJDb3JlMzlqc0VsZW1lbnRQcm90b3R5cGVGdW5jdGlvblNjcm9sbEJ5UGFnZXNF
UE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTI0MjkwLDEyICsyNDI5MCwxMiBAQCBfX1pON1dlYkNvcmU4
RG9jdW1lbnQyM2RvY3VtZW50RGlkQmVjb21lCiBfX1pON1dlYkNvcmU2MGpzRE9NV2luZG93UHJv
dG90eXBlRnVuY3Rpb25XZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZUVQTjNKU0M5RXhl
Y1N0YXRlRQogX19aTjdXZWJDb3JlMTN0b1dlYktpdFBvaW50RU4zSlNDN0pTVmFsdWVFCiBfX1pO
SzdXZWJDb3JlOURPTVdpbmRvdzMyd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2VFUE5T
XzROb2RlRVBLTlNfMTFXZWJLaXRQb2ludEUKLV9fWk5LN1dlYkNvcmU0Tm9kZTEzY29udmVydFRv
UGFnZUVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmU0Tm9kZTEzY29udmVydFRvUGFn
ZUVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZTE0anNXZWJLaXRQb2ludFhFUE4z
SlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdXZWJD
b3JlMTRqc1dlYktpdFBvaW50WUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8x
MElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU2MGpzRE9NV2luZG93UHJvdG90eXBlRnVuY3Rpb25X
ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZUVQTjNKU0M5RXhlY1N0YXRlRQogX19aTks3
V2ViQ29yZTlET01XaW5kb3czMndlYmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlRVBOU180
Tm9kZUVQS05TXzExV2ViS2l0UG9pbnRFCi1fX1pOSzdXZWJDb3JlNE5vZGUxNWNvbnZlcnRGcm9t
UGFnZUVSS05TXzEwRmxvYXRQb2ludEUKK19fWk5LN1dlYkNvcmU0Tm9kZTE1Y29udmVydEZyb21Q
YWdlRVJLTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdF
U3Q0cGFpcklTMV9TMV9FTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzNfRUVOU18xMFN0cmluZ0hh
c2hFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVTOV9FRVM5X0UxNmxv
b2t1cEZvcldyaXRpbmdJUzFfTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySVMxX1MzX1M2X0VF
RUVTMl9JUFMzX2JFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSU5TXzZTdHJpbmdFU3Q0cGFpcklT
MV9TMV9FTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzNfRUVOU18xMFN0cmluZ0hhc2hFTlNfMTRQ
YWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzFfRUVTOV9FRVM5X0UzYWRkSVMxX1MxX05T
XzE3SGFzaE1hcFRyYW5zbGF0b3JJUzNfU0FfUzZfRUVFRVMyX0lOU18xN0hhc2hUYWJsZUl0ZXJh
dG9ySVMxX1MzX1M1X1M2X1NBX1M5X0VFYkVSS1RfUktUMF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlO
U182U3RyaW5nRVN0NHBhaXJJUzFfUzFfRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVMzX0VFTlNf
MTBTdHJpbmdIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMxX0VFUzlf
RUVTOV9FM2FkZElTMV9TM19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzFfUzNfUzZfRUVF
RVMyX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMxX1MzX1M1X1M2X1NBX1M5X0VFYkVSS1RfUktU
MF8KQEAgLTI1MTA5LDggKzI1MTA5LDggQEAgX19aTjdXZWJDb3JlMjBzZXRKU0VsZW1lbnRPbnNj
cm9sbEVQTjNKUwogX19aTks3V2ViQ29yZTZDaHJvbWUyMndpbGxSdW5Nb2RhbEhUTUxEaWFsb2dF
UEtOU181RnJhbWVFCiBfX1pOSzdXZWJDb3JlNkNocm9tZTE0Y2FuUnVuTW9kYWxOb3dFdgogX19a
TjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEybG9hZHNCbG9ja2VkRXYKLV9fWk43V2ViQ29yZTE0
V2luZG93RmVhdHVyZXNDMUVSS04zV1RGNlN0cmluZ0VSS05TXzlGbG9hdFJlY3RFCi1fX1pON1dl
YkNvcmUxNFdpbmRvd0ZlYXR1cmVzQzJFUktOM1dURjZTdHJpbmdFUktOU185RmxvYXRSZWN0RQor
X19aTjdXZWJDb3JlMTRXaW5kb3dGZWF0dXJlc0MxRVJLTjNXVEY2U3RyaW5nRVJLTlNfMTJHcmFw
aGljc1JlY3RFCitfX1pON1dlYkNvcmUxNFdpbmRvd0ZlYXR1cmVzQzJFUktOM1dURjZTdHJpbmdF
UktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTE0V2luZG93RmVhdHVyZXMxOXBhcnNl
RGlhbG9nRmVhdHVyZXNFUktOM1dURjZTdHJpbmdFUk5TMV83SGFzaE1hcElTMl9TMl9OUzFfMTBT
dHJpbmdIYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzJfRUVTOF9FRQogX19aTjdXZWJDb3JlMTRXaW5k
b3dGZWF0dXJlczEyZmxvYXRGZWF0dXJlRVJLTjNXVEY3SGFzaE1hcElOUzFfNlN0cmluZ0VTM19O
UzFfMTBTdHJpbmdIYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzNfRUVTNl9FRVBLY2ZmZgogX19aTjdX
ZWJDb3JlMTRXaW5kb3dGZWF0dXJlczExYm9vbEZlYXR1cmVFUktOM1dURjdIYXNoTWFwSU5TMV82
U3RyaW5nRVMzX05TMV8xMFN0cmluZ0hhc2hFTlMxXzEwSGFzaFRyYWl0c0lTM19FRVM2X0VFUEtj
YgpAQCAtMjU0NzMsNyArMjU0NzMsNyBAQCBfX1pON1dlYkNvcmUxN1Bhc3N3b3JkSW5wdXRUeXBl
MjZzaG91bGRSCiBfX1pON1dlYkNvcmUxNU51bWJlcklucHV0VHlwZTIwaGFzVW5hY2NlcHRhYmxl
VmFsdWVFdgogX19aTjdXZWJDb3JlMTVOdW1iZXJJbnB1dFR5cGUxN2lzQWNjZXB0YWJsZVZhbHVl
RVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjBwYXJzZUxvY2FsaXplZE51bWJlckVSS04z
V1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI2cGFpbnRDb21wb3NpdGlv
bkJhY2tncm91bmRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTBGbG9hdFBvaW50RVBOU18x
MVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFaWkKK19fWk43V2ViQ29yZTEzSW5saW5lVGV4dEJveDI2
cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTNH
cmFwaGljc1BvaW50RVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFaWkKIF9fWk5LN1dlYkNv
cmUxNU51bWJlcklucHV0VHlwZTIzY29udmVydEZyb21WaXNpYmxlVmFsdWVFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxNU51bWJlcklucHV0VHlwZTE1aGFuZGxlQmx1ckV2ZW50RXYKIF9f
Wk43V2ViQ29yZTE1TnVtYmVySW5wdXRUeXBlMThoYW5kbGVLZXlkb3duRXZlbnRFUE5TXzEzS2V5
Ym9hcmRFdmVudEUKQEAgLTI1OTExLDggKzI1OTExLDggQEAgX19aTjdXZWJDb3JlMTBSZW5kZXJW
aWV3Mjljb21wdXRlUHJlZmVycgogX19aTjdXZWJDb3JlMjJDU1NSYWRpYWxHcmFkaWVudFZhbHVl
MTRjcmVhdGVHcmFkaWVudEVQTlNfMTJSZW5kZXJPYmplY3RFUktOU183SW50U2l6ZUUKIF9fWk43
V2ViQ29yZTIyQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZUQwRXYKIF9fWk43V2ViQ29yZTlDU1NQYXJz
ZXIxOXBhcnNlUmFkaWFsR3JhZGllbnRFUk4zV1RGNlJlZlB0cklOU184Q1NTVmFsdWVFRUVOU18x
N0NTU0dyYWRpZW50UmVwZWF0RQotX19aTjdXZWJDb3JlTDI0ZGlzdGFuY2VUb0ZhcnRoZXN0Q29y
bmVyRVJLTlNfMTBGbG9hdFBvaW50RVJLTlNfOUZsb2F0U2l6ZUVSUzBfCi1fX1pOSzdXZWJDb3Jl
OUZsb2F0U2l6ZTE0ZGlhZ29uYWxMZW5ndGhFdgorX19aTjdXZWJDb3JlTDI0ZGlzdGFuY2VUb0Zh
cnRoZXN0Q29ybmVyRVJLTlNfMTNHcmFwaGljc1BvaW50RVJLTlNfMTJHcmFwaGljc1NpemVFUlMw
XworX19aTks3V2ViQ29yZTEyR3JhcGhpY3NTaXplMTRkaWFnb25hbExlbmd0aEV2CiBfX1pOSzdX
ZWJDb3JlMTZDU1NHcmFkaWVudFZhbHVlMTZpc0xpbmVhckdyYWRpZW50RXYKIF9fWk5LN1dlYkNv
cmUyMkNTU1JhZGlhbEdyYWRpZW50VmFsdWUxNmlzUmFkaWFsR3JhZGllbnRFdgogX19aTks3V2Vi
Q29yZTIyQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTdjc3NUZXh0RXYKQEAgLTI1OTI4LDkgKzI1OTI4
LDkgQEAgX19aTjdXZWJDb3JlMTdTVkdQb2x5Z29uRWxlbWVudDZjcmVhdGVFUgogX19aTjdXZWJD
b3JlMTRTVkdQb2x5RWxlbWVudEMyRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1lbnRF
CiBfX1pON1dlYkNvcmUxNFNWR1BvbHlFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJpYnV0ZUVQTlNf
OUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTIxcG9pbnRzTGlzdEZyb21TVkdEYXRhRVJOU18xMlNW
R1BvaW50TGlzdEVSS04zV1RGNlN0cmluZ0UKLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxMEZs
b2F0UG9pbnRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCi1fX1pOM1dURjZWZWN0b3JJTjdXZWJD
b3JlMTBGbG9hdFBvaW50RUxtMEVFYVNFUktTM18KLV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUx
MEZsb2F0UG9pbnRFTG0wRUUxNHNocmlua0NhcGFjaXR5RW0KK19fWk4zV1RGNlZlY3RvcklON1dl
YkNvcmUxM0dyYXBoaWNzUG9pbnRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCitfX1pOM1dURjZW
ZWN0b3JJTjdXZWJDb3JlMTNHcmFwaGljc1BvaW50RUxtMEVFYVNFUktTM18KK19fWk4zV1RGNlZl
Y3RvcklON1dlYkNvcmUxM0dyYXBoaWNzUG9pbnRFTG0wRUUxNHNocmlua0NhcGFjaXR5RW0KIF9f
Wk43V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQxOXN2Z0F0dHJpYnV0ZUNoYW5nZWRFUktOU18xM1F1
YWxpZmllZE5hbWVFCiBfX1pOSzdXZWJDb3JlMTRTVkdQb2x5RWxlbWVudDdpc1ZhbGlkRXYKIF9f
Wk43V2ViQ29yZTMzanNTdG9yYWdlUHJvdG90eXBlRnVuY3Rpb25HZXRJdGVtRVBOM0pTQzlFeGVj
U3RhdGVFCkBAIC0yNjAzMiwxMSArMjYwMzIsMTEgQEAgX19aTks3V2ViQ29yZTRGb250MThlbXBo
YXNpc01hcmtIZWlnaHRFUgogX19aTks3V2ViQ29yZTRGb250MjRnZXRFbXBoYXNpc01hcmtHbHlw
aERhdGFFUktOM1dURjEyQXRvbWljU3RyaW5nRVJOU185R2x5cGhEYXRhRQogX19aTks3V2ViQ29y
ZTE0U2ltcGxlRm9udERhdGEyMGVtcGhhc2lzTWFya0ZvbnREYXRhRVJLTlNfMTVGb250RGVzY3Jp
cHRpb25FCiBfX1pOSzdXZWJDb3JlNEZvbnQxOWVtcGhhc2lzTWFya0Rlc2NlbnRFUktOM1dURjEy
QXRvbWljU3RyaW5nRQotX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxN2RyYXdFbXBoYXNp
c01hcmtzRVJLTlNfNEZvbnRFUktOU183VGV4dFJ1bkVSS04zV1RGMTJBdG9taWNTdHJpbmdFUktO
U18xMEZsb2F0UG9pbnRFaWkKLV9fWk5LN1dlYkNvcmU0Rm9udDE3ZHJhd0VtcGhhc2lzTWFya3NF
UE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRvbWljU3RyaW5n
RVJLTlNfMTBGbG9hdFBvaW50RWlpCi1fX1pOSzdXZWJDb3JlNEZvbnQzMGRyYXdFbXBoYXNpc01h
cmtzRm9yU2ltcGxlVGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183VGV4dFJ1bkVSS04z
V1RGMTJBdG9taWNTdHJpbmdFUktOU18xMEZsb2F0UG9pbnRFaWkKK19fWk43V2ViQ29yZTE1R3Jh
cGhpY3NDb250ZXh0MTdkcmF3RW1waGFzaXNNYXJrc0VSS05TXzRGb250RVJLTlNfN1RleHRSdW5F
UktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCitfX1pOSzdXZWJD
b3JlNEZvbnQxN2RyYXdFbXBoYXNpc01hcmtzRVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdU
ZXh0UnVuRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSS05TXzEzR3JhcGhpY3NQb2ludEVpaQorX19a
Tks3V2ViQ29yZTRGb250MzBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHRFUE5TXzE1R3Jh
cGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTNH
cmFwaGljc1BvaW50RWlpCiBfX1pON1dlYkNvcmU0Rm9udDIyY2FuUmVjZWl2ZVRleHRFbXBoYXNp
c0VpCi1fX1pOSzdXZWJDb3JlNEZvbnQxN2RyYXdFbXBoYXNpc01hcmtzRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzExR2x5cGhCdWZmZXJFUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTBG
bG9hdFBvaW50RQorX19aTks3V2ViQ29yZTRGb250MTdkcmF3RW1waGFzaXNNYXJrc0VQTlNfMTVH
cmFwaGljc0NvbnRleHRFUktOU18xMUdseXBoQnVmZmVyRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VS
S05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29yZUwyMW9mZnNldFRvTWlkZGxlT2ZHbHlw
aEVQS05TXzE0U2ltcGxlRm9udERhdGFFdAogX19aTjdXZWJDb3JlNTZqc0NTU1N0eWxlRGVjbGFy
YXRpb25Qcm90b3R5cGVGdW5jdGlvbklzUHJvcGVydHlJbXBsaWNpdEVQTjNKU0M5RXhlY1N0YXRl
RQogX19aTjdXZWJDb3JlMTlDU1NTdHlsZURlY2xhcmF0aW9uMThpc1Byb3BlcnR5SW1wbGljaXRF
UktOM1dURjZTdHJpbmdFCkBAIC0yNjM4MCw3ICsyNjM4MCw3IEBAIF9fWk43V2ViQ29yZTdEYXRh
UmVmSU5TXzE4U3R5bGVTaGFkb3dTVkcKIF9fWk43V2ViQ29yZTE4U3R5bGVTaGFkb3dTVkdEYXRh
QzFFUktTMF8KIF9fWk5LN1dlYkNvcmUxOFN0eWxlU2hhZG93U1ZHRGF0YWVxRVJLUzBfCiBfX1pO
N1dlYkNvcmUxNFNWR1JlbmRlclN0eWxlMThzZXRTdHJva2VEYXNoQXJyYXlFUktOM1dURjZWZWN0
b3JJTlNfOVNWR0xlbmd0aEVMbTBFRUUKLV9fWk5LN1dlYkNvcmUxMFNoYWRvd0RhdGExOWFkanVz
dFJlY3RGb3JTaGFkb3dFUk5TXzlGbG9hdFJlY3RFaQorX19aTks3V2ViQ29yZTEwU2hhZG93RGF0
YTE5YWRqdXN0UmVjdEZvclNoYWRvd0VSTlNfMTJHcmFwaGljc1JlY3RFaQogX19aTjdXZWJDb3Jl
MTNSZW5kZXJTVkdQYXRoMjNzZXROZWVkc1RyYW5zZm9ybVVwZGF0ZUV2CiBfX1pON1dlYkNvcmUx
MlNWR0xhbmdTcGFjZTE2aXNLbm93bkF0dHJpYnV0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUUKIF9f
Wk43V2ViQ29yZTV3cml0ZUVSTlNfMTBUZXh0U3RyZWFtRVJLTlNfMTNSZW5kZXJTVkdSb290RWkK
QEAgLTI2Mzk3LDEwICsyNjM5NywxMCBAQCBfX1pOSzdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTRs
b2NhbFRyYW5zCiBfX1pON1dlYkNvcmVMMjR3cml0ZVNWR1BhaW50aW5nUmVzb3VyY2VFUk5TXzEw
VGV4dFN0cmVhbUVQTlNfMTdSZW5kZXJTVkdSZXNvdXJjZUUKIF9fWk5LN1dlYkNvcmUyN1JlbmRl
clNWR1Jlc291cmNlU29saWRDb2xvcjEycmVzb3VyY2VUeXBlRXYKIF9fWk43V2ViQ29yZTIwU1ZH
UGF0aFBhcnNlckZhY3RvcnkyNWJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW1FUE5TXzE3U1ZHUGF0
aEJ5dGVTdHJlYW1FUk4zV1RGNlN0cmluZ0VOU18xNVBhdGhQYXJzaW5nTW9kZUUKLV9fWk43V2Vi
Q29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RWJOU18x
OFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2
bW92ZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RWJOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9f
Wk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIxN2NvbnRpbnVlQ29uc3VtaW5nRXYKIF9f
Wk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIyNWluY3JlbWVudFBhdGhTZWdtZW50Q291
bnRFdgotX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRlcjZsaW5lVG9FUktOU18xMEZs
b2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhT
dHJpbmdCdWlsZGVyNmxpbmVUb0VSS05TXzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGlu
YXRlTW9kZUUKIF9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI5Y2xvc2VQYXRoRXYK
IF9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI2cmVzdWx0RXYKIF9fWk43V2ViQ29y
ZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXI3Y2xlYW51cEV2CkBAIC0yNjQ3Myw5ICsyNjQ3Myw5IEBA
IF9fWk43V2ViQ29yZUwzNGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGgKIF9fWk4zV1RGNlZlY3Rv
ckl0TG0yNTZFRTZhcHBlbmRJdEVFdlBLVF9tCiBfX1pOM1dURjZWZWN0b3JJU3Q0cGFpcklQS043
V2ViQ29yZThGb250RGF0YUViRUxtMUVFMTVyZXNlcnZlQ2FwYWNpdHlFbQogX19aTjdXZWJDb3Jl
MTJCaWRpUmVzb2x2ZXJJTlNfMTVUZXh0UnVuSXRlcmF0b3JFTlNfMTZCaWRpQ2hhcmFjdGVyUnVu
RUUyN2xvd2VyRXhwbGljaXRFbWJlZGRpbmdMZXZlbEVOM1dURjdVbmljb2RlOURpcmVjdGlvbkUK
LV9fWk5LN1dlYkNvcmUxN1JlbmRlckNvbWJpbmVUZXh0MTZhZGp1c3RUZXh0T3JpZ2luRVJOU18x
MEZsb2F0UG9pbnRFUktOU185RmxvYXRSZWN0RQorX19aTks3V2ViQ29yZTE3UmVuZGVyQ29tYmlu
ZVRleHQxNmFkanVzdFRleHRPcmlnaW5FUk5TXzEzR3JhcGhpY3NQb2ludEVSS05TXzEyR3JhcGhp
Y3NSZWN0RQogX19aTks3V2ViQ29yZTE3UmVuZGVyQ29tYmluZVRleHQxOGNoYXJhY3RlcnNUb1Jl
bmRlckVpUlBLdFJpCi1fX1pOSzdXZWJDb3JlNEZvbnQzMWRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1RleHRSdW5FUktOM1dURjEyQXRv
bWljU3RyaW5nRVJLTlNfMTBGbG9hdFBvaW50RWlpCitfX1pOSzdXZWJDb3JlNEZvbnQzMWRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHRFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN1Rl
eHRSdW5FUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pO
N1dlYkNvcmVMMTlub3JtYWxpemVDaGFyYWN0ZXJzRVBLdGpSTjNXVEY2VmVjdG9ySXRMbTBFRUUK
IF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGU5c2V0TG9jYWxlRVJLTjNXVEYxMkF0b21pY1N0cmlu
Z0UKIF9fWk43V2ViQ29yZTExUmVuZGVyU3R5bGUxMHNldEh5cGhlbnNFTlNfN0h5cGhlbnNFCkBA
IC0yNjQ5MCwxMCArMjY0OTAsMTAgQEAgX19aTjdXZWJDb3JlMTFSZW5kZXJTdHlsZTI0c2V0SHlw
aGVuYXRpbwogX19aTjNXVEYxMVZlY3Rvck1vdmVySUxiMEVTdDRwYWlySU5TXzEyQXRvbWljU3Ry
aW5nRU5TXzlSZXRhaW5QdHJJUEsxMF9fQ0ZMb2NhbGVFRUVFMTVtb3ZlT3ZlcmxhcHBpbmdFUEtT
OF9TQl9QUzhfCiBfX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRVN0NHBhaXJJTlNfMTJBdG9taWNT
dHJpbmdFTlNfOVJldGFpblB0cklQSzEwX19DRkxvY2FsZUVFRUU0bW92ZUVQS1M4X1NCX1BTOF8K
IF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDEzaXNDb21iaW5lVGV4dEV2Ci1fX1pOM1dURjlI
YXNoVGFibGVJaVN0NHBhaXJJaVBON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzJfOUZsb2F0
UmVjdEVFMTZHbHlwaE1ldHJpY3NQYWdlRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOF9FRU5T
XzdJbnRIYXNoSWpFRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TRV9J
UzdfRUVFRVNGX0UxNmxvb2t1cEZvcldyaXRpbmdFUktpCi1fX1pOM1dURjlIYXNoVGFibGVJaVN0
NHBhaXJJaVBON1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzJfOUZsb2F0UmVjdEVFMTZHbHlw
aE1ldHJpY3NQYWdlRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTOF9FRU5TXzdJbnRIYXNoSWpF
RU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSWlFRU5TRV9JUzdfRUVFRVNGX0Uz
YWRkSWlTN19OU18xN0hhc2hNYXBUcmFuc2xhdG9ySVM4X1NIX1NDX0VFRUVTMV9JTlNfMTdIYXNo
VGFibGVJdGVyYXRvcklpUzhfU0FfU0NfU0hfU0ZfRUViRVJLVF9SS1QwXwotX19aTjNXVEY5SGFz
aFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzlGbG9hdFJl
Y3RFRTE2R2x5cGhNZXRyaWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183
SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3
X0VFRUVTRl9FNGZpbmRJaU5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklpUzhfU0NfRUVFRU5T
XzE3SGFzaFRhYmxlSXRlcmF0b3JJaVM4X1NBX1NDX1NIX1NGX0VFUktUXwotX19aTjNXVEY5SGFz
aFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzlGbG9hdFJl
Y3RFRTE2R2x5cGhNZXRyaWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183
SW50SGFzaElqRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3
X0VFRUVTRl9FNnJlaGFzaEVpCitfX1pOM1dURjlIYXNoVGFibGVJaVN0NHBhaXJJaVBON1dlYkNv
cmUxNUdseXBoTWV0cmljc01hcElOUzJfMTJHcmFwaGljc1JlY3RFRTE2R2x5cGhNZXRyaWNzUGFn
ZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183SW50SGFzaElqRUVOU18xNFBhaXJI
YXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3X0VFRUVTRl9FMTZsb29rdXBGb3JX
cml0aW5nRVJLaQorX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRwYWlySWlQTjdXZWJDb3JlMTVHbHlw
aE1ldHJpY3NNYXBJTlMyXzEyR3JhcGhpY3NSZWN0RUUxNkdseXBoTWV0cmljc1BhZ2VFRU5TXzE4
UGFpckZpcnN0RXh0cmFjdG9ySVM4X0VFTlNfN0ludEhhc2hJakVFTlNfMTRQYWlySGFzaFRyYWl0
c0lOU18xMEhhc2hUcmFpdHNJaUVFTlNFX0lTN19FRUVFU0ZfRTNhZGRJaVM3X05TXzE3SGFzaE1h
cFRyYW5zbGF0b3JJUzhfU0hfU0NfRUVFRVMxX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySWlTOF9T
QV9TQ19TSF9TRl9FRWJFUktUX1JLVDBfCitfX1pOM1dURjlIYXNoVGFibGVJaVN0NHBhaXJJaVBO
N1dlYkNvcmUxNUdseXBoTWV0cmljc01hcElOUzJfMTJHcmFwaGljc1JlY3RFRTE2R2x5cGhNZXRy
aWNzUGFnZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzhfRUVOU183SW50SGFzaElqRUVOU18x
NFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lpRUVOU0VfSVM3X0VFRUVTRl9FNGZpbmRJ
aU5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklpUzhfU0NfRUVFRU5TXzE3SGFzaFRhYmxlSXRl
cmF0b3JJaVM4X1NBX1NDX1NIX1NGX0VFUktUXworX19aTjNXVEY5SGFzaFRhYmxlSWlTdDRwYWly
SWlQTjdXZWJDb3JlMTVHbHlwaE1ldHJpY3NNYXBJTlMyXzEyR3JhcGhpY3NSZWN0RUUxNkdseXBo
TWV0cmljc1BhZ2VFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM4X0VFTlNfN0ludEhhc2hJakVF
TlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJaUVFTlNFX0lTN19FRUVFU0ZfRTZy
ZWhhc2hFaQogX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMjFDb21wbGV4VGV4
dENvbnRyb2xsZXIxNENvbXBsZXhUZXh0UnVuRUVFTG0xNkVFMTVyZXNlcnZlQ2FwYWNpdHlFbQog
X19aTjdXZWJDb3JlMThSZW5kZXJMYXllckJhY2tpbmcxOXVwZGF0ZUNvbnRlbnRzU2NhbGVFZgog
X19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0ExOXVwZGF0ZUNvbnRlbnRzU2NhbGVFdgpAQCAt
Mjc3MzIsOCArMjc3MzIsOCBAQCBfX1pON1dlYkNvcmUxN0luc3BlY3RvckRPTUFnZW50OWhpZ2hs
aWdoCiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTdkcmF3Tm9kZUhpZ2hsaWdo
dEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCiBfX1pOSzdXZWJDb3JlMTdJbnNwZWN0b3JET01BZ2Vu
dDE3ZHJhd05vZGVIaWdobGlnaHRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RQogX19aTjdXZWJDb3Jl
MThET01Ob2RlSGlnaGxpZ2h0ZXIxN0RyYXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29u
dGV4dEVQTlNfNE5vZGVFTlMwXzEzSGlnaGxpZ2h0TW9kZUUKLV9fWk43V2ViQ29yZTEyX0dMT0JB
TF9fTl8xMjRkcmF3T3V0bGluZWRRdWFkV2l0aENsaXBFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfOUZsb2F0UXVhZEVTNV9SS05TXzVDb2xvckUKLV9fWk43V2ViQ29yZTEyX0dMT0JBTF9fTl8x
MTZkcmF3T3V0bGluZWRRdWFkRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFF1YWRF
UktOU181Q29sb3JFCitfX1pON1dlYkNvcmUxMl9HTE9CQUxfX05fMTI0ZHJhd091dGxpbmVkUXVh
ZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzEyR3JhcGhpY3NRdWFkRVM1X1JL
TlNfNUNvbG9yRQorX19aTjdXZWJDb3JlMTJfR0xPQkFMX19OXzExNmRyYXdPdXRsaW5lZFF1YWRF
Uk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1F1YWRFUktOU181Q29sb3JFCiBf
X1pON1dlYkNvcmVMMThnZXRKU0RhdGFiYXNlVGFibGVFUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43
V2ViQ29yZTQ3anNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGVGdW5jdGlvbkRhdGFiYXNlSWRF
UE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTIwSlNJbmplY3RlZFNjcmlwdEhvc3QxMGRh
dGFiYXNlSWRFUE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTI4NjcxLDEzICsyODY3MSwxMyBAQCBfX1pO
M0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE2Z2V0Q29uCiBfX1pOM0pTQzhCaW5kaW5nc0wy
MmNhbGxSdW50aW1lQ29uc3RydWN0b3JFUE5TXzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxM0lk
ZW50aWZpZXJSZXAzZ2V0RWkKIF9fWk43V2ViQ29yZUwxMGNhbGxQbHVnaW5FUE4zSlNDOUV4ZWNT
dGF0ZUUKLV9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjBwYWdlTnVtYmVyRm9yRWxlbWVudEVQ
TlNfN0VsZW1lbnRFUktOU185RmxvYXRTaXplRQotX19aTjdXZWJDb3JlNUZyYW1lMTFzZXRQcmlu
dGluZ0ViUktOU185RmxvYXRTaXplRWZOU18xOUFkanVzdFZpZXdTaXplT3JOb3RFCitfX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDIwcGFnZU51bWJlckZvckVsZW1lbnRFUE5TXzdFbGVtZW50RVJL
TlNfMTJHcmFwaGljc1NpemVFCitfX1pON1dlYkNvcmU1RnJhbWUxMXNldFByaW50aW5nRWJSS05T
XzEyR3JhcGhpY3NTaXplRWZOU18xOUFkanVzdFZpZXdTaXplT3JOb3RFCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjZhZGp1c3RNZWRpYVR5cGVGb3JQcmludGluZ0ViCi1fX1pON1dlYkNvcmU5RnJh
bWVWaWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU185RmxvYXRTaXplRWZOU18xOUFk
anVzdFZpZXdTaXplT3JOb3RFCi1fX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDM2Y29tcHV0ZVBh
Z2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsRVJLTlNfOUZsb2F0U2l6ZUViCitfX1pON1dlYkNv
cmU5RnJhbWVWaWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU18xMkdyYXBoaWNzU2l6
ZUVmTlNfMTlBZGp1c3RWaWV3U2l6ZU9yTm90RQorX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQz
NmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbEVSS05TXzEyR3JhcGhpY3NTaXpl
RWIKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0NWJlZ2luRWZmCi1fX1pON1dlYkNvcmUxMlBy
aW50Q29udGV4dDEzbnVtYmVyT2ZQYWdlc0VQTlNfNUZyYW1lRVJLTlNfOUZsb2F0U2l6ZUUKK19f
Wk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MTNudW1iZXJPZlBhZ2VzRVBOU181RnJhbWVFUktOU18x
MkdyYXBoaWNzU2l6ZUUKIF9fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0MjZwYWdlU2l6ZUFuZE1h
cmdpbnNJblBpeGVsc0VQTlNfNUZyYW1lRWlpaWlpaWkKIF9fWk43V2ViQ29yZThEb2N1bWVudDI2
cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHNFaVJOU183SW50U2l6ZUVSaVMzX1MzX1MzXwogX19a
TjdXZWJDb3JlMTZDU1NTdHlsZVNlbGVjdG9yMTJzdHlsZUZvclBhZ2VFaQpAQCAtMjg4MTYsNyAr
Mjg4MTYsNyBAQCBfX1pON1dlYkNvcmUxOHdyaXRlU1ZHSW5saW5lVGV4dEVSTlNfMTBUCiBfX1pO
SzdXZWJDb3JlMTlSZW5kZXJTVkdJbmxpbmVUZXh0MTByZW5kZXJOYW1lRXYKIF9fWk5LN1dlYkNv
cmUxOVJlbmRlclNWR0lubGluZVRleHQxNmxpbmVzQm91bmRpbmdCb3hFdgogX19aTks3V2ViQ29y
ZTEwUmVuZGVyVGV4dDE0Zmlyc3RSdW5PcmlnaW5FdgotX19aTjdXZWJDb3JlbHNFUk5TXzEwVGV4
dFN0cmVhbUVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmVsc0VSTlNfMTBUZXh0U3RyZWFt
RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxMmhhc0ZyYWN0aW9uc0VkCiBfX1pO
N1dlYkNvcmUxMFRleHRTdHJlYW1sc0VqCiBfX1pON1dlYkNvcmUxM3dyaXRlU1ZHSW1hZ2VFUk5T
XzEwVGV4dFN0cmVhbUVSS05TXzE0UmVuZGVyU1ZHSW1hZ2VFaQpAQCAtMjg5NTcsNyArMjg5NTcs
NyBAQCBfX1pOSzdXZWJDb3JlNEZvbnQyMmZsb2F0V2lkdGhVc2luZ1NWR0ZvCiBfX1pOSzdXZWJD
b3JlNEZvbnQ3c3ZnRm9udEV2CiBfX1pOSzdXZWJDb3JlMTRTVkdGb250RWxlbWVudDQyaG9yaXpv
bnRhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzRVJLTjNXVEY2U3RyaW5nRVM0X1M0
X1M0XwogX19aTjdXZWJDb3JlTDMya2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHNFUk4z
V1RGNlZlY3RvcklOU18xNFNWR0tlcm5pbmdQYWlyRUxtMEVFRVJLTlMwXzZTdHJpbmdFUzdfUzdf
UzdfCi1fX1pOSzdXZWJDb3JlNEZvbnQyMGRyYXdUZXh0VXNpbmdTVkdGb250RVBOU18xNUdyYXBo
aWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBvaW50RWlpCitfX1pOSzdXZWJD
b3JlNEZvbnQyMGRyYXdUZXh0VXNpbmdTVkdGb250RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05T
XzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpCiBfX1pON1dlYkNvcmUxNlNWR1RleHRS
dW5XYWxrZXJJTlNfMjhTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhRUU0d2Fsa0VSS05TXzdU
ZXh0UnVuRWJSS04zV1RGNlN0cmluZ0VpaQogX19aTjdXZWJDb3JlTDI4ZHJhd1RleHRVc2luZ1NW
R0ZvbnRDYWxsYmFja0VSS05TXzhTVkdHbHlwaEVSTlNfMjhTVkdUZXh0UnVuV2Fsa2VyRHJhd1Rl
eHREYXRhRQogX19aTjdXZWJDb3JlMjhTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhRDFFdgpA
QCAtMjkwNDIsMTAgKzI5MDQyLDEwIEBAIF9fWk5LN1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MTVz
dXBwb3J0c00KIF9fWk43V2ViQ29yZTE5U1ZHTWFya2VyTGF5b3V0SW5mbzE5Y2FsY3VsYXRlQm91
bmRhcmllc0VQTlNfMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlckVTMl9TMl9mUktOU180UGF0aEUK
IF9fWk43V2ViQ29yZUwyNXByb2Nlc3NTdGFydEFuZE1pZE1hcmtlcnNFUHZQS05TXzExUGF0aEVs
ZW1lbnRFCiBfX1pON1dlYkNvcmUxM1NWR01hcmtlckRhdGEzMHVwZGF0ZU1hcmtlckRhdGFGb3JQ
YXRoRWxlbWVudEVQS05TXzExUGF0aEVsZW1lbnRFCi1fX1pON1dlYkNvcmUxOVNWR01hcmtlckxh
eW91dEluZm8xN2FkZExheW91dGVkTWFya2VyRVBOU18yM1JlbmRlclNWR1Jlc291cmNlTWFya2Vy
RVJLTlNfMTBGbG9hdFBvaW50RWYKLV9fWk5LN1dlYkNvcmUyM1JlbmRlclNWR1Jlc291cmNlTWFy
a2VyMjBtYXJrZXJUcmFuc2Zvcm1hdGlvbkVSS05TXzEwRmxvYXRQb2ludEVmZgorX19aTjdXZWJD
b3JlMTlTVkdNYXJrZXJMYXlvdXRJbmZvMTdhZGRMYXlvdXRlZE1hcmtlckVQTlNfMjNSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlckVSS05TXzEzR3JhcGhpY3NQb2ludEVmCitfX1pOSzdXZWJDb3JlMjNS
ZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjIwbWFya2VyVHJhbnNmb3JtYXRpb25FUktOU18xM0dyYXBo
aWNzUG9pbnRFZmYKIF9fWk5LN1dlYkNvcmU4U1ZHQW5nbGU1dmFsdWVFdgotX19aTks3V2ViQ29y
ZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIyN21hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbkVS
S05TXzE1QWZmaW5lVHJhbnNmb3JtRVJLTlNfMTBGbG9hdFBvaW50RWYKK19fWk5LN1dlYkNvcmUy
M1JlbmRlclNWR1Jlc291cmNlTWFya2VyMjdtYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb25FUktO
U18xNUFmZmluZVRyYW5zZm9ybUVSS05TXzEzR3JhcGhpY3NQb2ludEVmCiBfX1pOSzdXZWJDb3Jl
MTZTVkdNYXJrZXJFbGVtZW50MjJ2aWV3Qm94VG9WaWV3VHJhbnNmb3JtRWZmCiBfX1pOM1dURjZW
ZWN0b3JJTjdXZWJDb3JlMTJNYXJrZXJMYXlvdXRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCiBf
X1pOSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjIybG9jYWxUb1BhcmVudFRyYW5z
Zm9ybUV2CkBAIC0yOTA1Myw3ICsyOTA1Myw3IEBAIF9fWk43V2ViQ29yZTIzUmVuZGVyU1ZHUmVz
b3VyY2VNYXJrZXIyMXIKIF9fWk43V2ViQ29yZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIxN2Fw
cGx5Vmlld3BvcnRDbGlwRVJOU185UGFpbnRJbmZvRQogX19aTjdXZWJDb3JlMjV3cml0ZVNWR1Jl
c291cmNlQ29udGFpbmVyRVJOU18xMFRleHRTdHJlYW1FUktOU18xMlJlbmRlck9iamVjdEVpCiBf
X1pOSzdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjEwcmVuZGVyTmFtZUV2Ci1fX1pO
N1dlYkNvcmVsc0VSTlNfMTBUZXh0U3RyZWFtRVJLTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJD
b3JlbHNFUk5TXzEwVGV4dFN0cmVhbUVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43V2ViQ29y
ZTIzUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIyNXJlbW92ZUFsbENsaWVudHNGcm9tQ2FjaGVFYgog
X19aTjdXZWJDb3JlMjNSZW5kZXJTVkdSZXNvdXJjZU1hcmtlckQwRXYKIF9fWk43V2ViQ29yZTI3
anNTVkdQYXRoRWxlbWVudFBhdGhTZWdMaXN0RVBOM0pTQzlFeGVjU3RhdGVFTlMwXzdKU1ZhbHVl
RVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTI5MDg1LDcgKzI5MDg1LDcgQEAgX19aTjdXZWJDb3Jl
MjBTVkdQYXRoUGFyc2VyRmFjdG9yeTQwYnVpbAogX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlz
dFNvdXJjZUMxRVJLTlNfMTRTVkdQYXRoU2VnTGlzdEUKIF9fWk43V2ViQ29yZTIwU1ZHUGF0aFNl
Z0xpc3RTb3VyY2UxNW1vdmVUb05leHRUb2tlbkV2CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdM
aXN0U291cmNlMTlwYXJzZVNWR1NlZ21lbnRUeXBlRVJOU18xNFNWR1BhdGhTZWdUeXBlRQotX19a
TjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlzdFNvdXJjZTE4cGFyc2VNb3ZlVG9TZWdtZW50RVJOU18x
MEZsb2F0UG9pbnRFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMThwYXJzZU1v
dmVUb1NlZ21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk5LN1dlYkNvcmUyMFNWR1BhdGhT
ZWdMaXN0U291cmNlMTFoYXNNb3JlRGF0YUV2CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0
U291cmNlRDBFdgogX19aTjdXZWJDb3JlNjRqc1NWR1BhdGhFbGVtZW50UHJvdG90eXBlRnVuY3Rp
b25DcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0y
OTA5NCw3ICsyOTA5NCw3IEBAIF9fWk5LN1dlYkNvcmUyNVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnMKIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18yN0pTU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY0Fic0VOU18yNVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnNFRUVQTlNfMTJKU0RPTVdyYXBw
ZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQVDBfCiBfX1pON1dl
YkNvcmUyN0pTU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fic0MxRVBOM0pTQzlTdHJ1Y3R1cmVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMjVTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljQWJzRUVFCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMTFuZXh0
Q29tbWFuZEVOU18xNFNWR1BhdGhTZWdUeXBlRQotX19aTjdXZWJDb3JlMjBTVkdQYXRoU2VnTGlz
dFNvdXJjZTI0cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50RVJOU18xMEZsb2F0UG9pbnRFUzJfUzJf
CitfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMjRwYXJzZUN1cnZlVG9DdWJpY1Nl
Z21lbnRFUk5TXzEzR3JhcGhpY3NQb2ludEVTMl9TMl8KIF9fWk43V2ViQ29yZTU4anNTVkdQYXRo
RWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aEVQTjNKU0M5
RXhlY1N0YXRlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDI1Y3JlYXRlU1ZHUGF0aFNl
Z0Nsb3NlUGF0aEVOU18xNFNWR1BhdGhTZWdSb2xlRQogX19aTks3V2ViQ29yZTE5U1ZHUGF0aFNl
Z0Nsb3NlUGF0aDExcGF0aFNlZ1R5cGVFdgpAQCAtMjkxMzMsNyArMjkxMzMsNyBAQCBfX1pON1dl
YkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xNFNWR1BhCiBfX1pON1dlYkNvcmU0M2pzU1ZHUGF0
aFNlZ0xpc3RQcm90b3R5cGVGdW5jdGlvblJlbW92ZUl0ZW1FUE4zSlNDOUV4ZWNTdGF0ZUUKIF9f
Wk43V2ViQ29yZTI5U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYxMHJlbW92ZUl0ZW1FalJp
CiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xNFNWR1BhdGhTZWdMaXN0RUUxNnJl
bW92ZUl0ZW1WYWx1ZXNFUlMxX2pSaQotX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRl
cjEyY3VydmVUb0N1YmljRVJLTlNfMTBGbG9hdFBvaW50RVMzX1MzX05TXzE4UGF0aENvb3JkaW5h
dGVNb2RlRQorX19aTjdXZWJDb3JlMjBTVkdQYXRoU3RyaW5nQnVpbGRlcjEyY3VydmVUb0N1Ymlj
RVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19a
TjdXZWJDb3JlOFNWR1BhaW50MTdjcmVhdGVVUklBbmRDb2xvckVSS04zV1RGNlN0cmluZ0VSS05T
XzVDb2xvckUKIF9fWk5LN1dlYkNvcmUzMVJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQx
MHJlbmRlck5hbWVFdgogX19aTjdXZWJDb3JlTDI5d3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRp
ZXNFUk5TXzEwVGV4dFN0cmVhbUVOU18yMEdyYWRpZW50U3ByZWFkTWV0aG9kRVJLTlNfMTVBZmZp
bmVUcmFuc2Zvcm1FYgpAQCAtMjkxNjgsMTMgKzI5MTY4LDEzIEBAIF9fWk4zV1RGOUhhc2hUYWJs
ZUlQTjdXZWJDb3JlMTJSZW5kZXJPYmoKIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJDb3JlMTJS
ZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExUGF0dGVybkRhdGFFRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U0ZmluZElTM19OU18yMklkZW50aXR5SGFz
aFRyYW5zbGF0b3JJUzNfUzdfU0JfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzdfUzlf
U0JfU0dfU0VfRUVSS1RfCiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2Jq
ZWN0RVN0NHBhaXJJUzNfUE5TMV8xMVBhdHRlcm5EYXRhRUVOU18xOFBhaXJGaXJzdEV4dHJhY3Rv
cklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFp
dHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FNmxvb2t1cEVSS1MzXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFQYXR0ZXJuRGF0YUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTZyZWhhc2hFaQot
X19aTks3V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMjNidWlsZFRpbGVJbWFnZVRy
YW5zZm9ybUVQTlNfMTJSZW5kZXJPYmplY3RFUktOU18xN1BhdHRlcm5BdHRyaWJ1dGVzRVBLTlNf
MTdTVkdQYXR0ZXJuRWxlbWVudEVSTlNfOUZsb2F0UmVjdEVSTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
CitfX1pOSzdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4yM2J1aWxkVGlsZUltYWdl
VHJhbnNmb3JtRVBOU18xMlJlbmRlck9iamVjdEVSS05TXzE3UGF0dGVybkF0dHJpYnV0ZXNFUEtO
U18xN1NWR1BhdHRlcm5FbGVtZW50RVJOU18xMkdyYXBoaWNzUmVjdEVSTlNfMTVBZmZpbmVUcmFu
c2Zvcm1FCiBfX1pOSzdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4xMHJlbmRlck5h
bWVFdgogX19aTjNXVEYyMGRlbGV0ZUFsbFBhaXJTZWNvbmRzSVBON1dlYkNvcmUxMVBhdHRlcm5E
YXRhRUtOU183SGFzaE1hcElQTlMxXzEyUmVuZGVyT2JqZWN0RVMzX05TXzdQdHJIYXNoSVM2X0VF
TlNfMTBIYXNoVHJhaXRzSVM2X0VFTlM5X0lTM19FRUVFRUV2UlQwXwogX19aTjdXZWJDb3JlMjRS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm5EMEV2Ci1fX1pUaG4zMjBfTjdXZWJDb3JlMTdTVkdQYXR0
ZXJuRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitfX1pUaG4z
MjBfTjdXZWJDb3JlMTdTVkdQYXR0ZXJuRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05T
XzEyR3JhcGhpY3NSZWN0RQogX19aVGhuMTY4X043V2ViQ29yZTE3U1ZHUGF0dGVybkVsZW1lbnQx
NnNldEhyZWZCYXNlVmFsdWVFUktOM1dURjZTdHJpbmdFCi1fX1pOSzdXZWJDb3JlMjRSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm4xNWNyZWF0ZVRpbGVJbWFnZUVQTlNfMTJSZW5kZXJPYmplY3RFUktO
U18xN1BhdHRlcm5BdHRyaWJ1dGVzRVJLTlNfOUZsb2F0UmVjdEVTOF9SS05TXzE1QWZmaW5lVHJh
bnNmb3JtRQorX19aTks3V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuMTVjcmVhdGVU
aWxlSW1hZ2VFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfMTdQYXR0ZXJuQXR0cmlidXRlc0VSS05T
XzEyR3JhcGhpY3NSZWN0RVM4X1JLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCiBfX1pON1dlYkNvcmU3
UGF0dGVybjI0c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1F
CiBfX1pUaG4xMjhfTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4xN3Bvc3RBcHBs
eVJlc291cmNlRVBOU18xMlJlbmRlck9iamVjdEVSUE5TXzE1R3JhcGhpY3NDb250ZXh0RXRQS05T
XzRQYXRoRQogX19aTkszV1RGOUhhc2hUYWJsZUlQS043V2ViQ29yZTE3U1ZHUGF0dGVybkVsZW1l
bnRFUzRfTlNfMTdJZGVudGl0eUV4dHJhY3RvcklTNF9FRU5TXzdQdHJIYXNoSVM0X0VFTlNfMTBI
YXNoVHJhaXRzSVM0X0VFU0FfRThjb250YWluc0lTNF9OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0
b3JJUzRfUzRfUzhfRUVFRWJSS1RfCkBAIC0yOTMxNCwxNSArMjkzMTQsMTUgQEAgX19aTjdXZWJD
b3JlMTVqc1NWR0FuZ2xlVmFsdWVFUE4zSlNDOUV4ZQogX19aTjdXZWJDb3JlMThqc1NWR0FuZ2xl
VW5pdFR5cGVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVy
RQogX19aTjdXZWJDb3JlMjJqc1NWR1NWR0VsZW1lbnRWaWV3Qm94RVBOM0pTQzlFeGVjU3RhdGVF
TlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxl
bWVudDE1dmlld0JveEFuaW1hdGVkRXYKLV9fWk43V2ViQ29yZTE5U1ZHQW5pbWF0ZWRQcm9wZXJ0
eTIxbG9va3VwT3JDcmVhdGVXcmFwcGVySU5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJ
TlNfOUZsb2F0UmVjdEVFRVMzX0VFTjNXVEYxMFBhc3NSZWZQdHJJVF9FRVBOU18xMFNWR0VsZW1l
bnRFUktOU18xM1F1YWxpZmllZE5hbWVFUktOUzVfMTJBdG9taWNTdHJpbmdFUlQwXwotX19aTjdX
ZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNf
MjZTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZklOU185RmxvYXRSZWN0RUVFCi1fX1pON1dlYkNv
cmUxM2NyZWF0ZVdyYXBwZXJJTlNfMTdKU1NWR0FuaW1hdGVkUmVjdEVOU18yNlNWR0FuaW1hdGVk
UHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9hdFJlY3RFRUVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNK
U0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KK19fWk43V2ViQ29yZTE5
U1ZHQW5pbWF0ZWRQcm9wZXJ0eTIxbG9va3VwT3JDcmVhdGVXcmFwcGVySU5TXzI2U1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1JlY3RFRUVTM19FRU4zV1RGMTBQYXNzUmVm
UHRySVRfRUVQTlNfMTBTVkdFbGVtZW50RVJLTlNfMTNRdWFsaWZpZWROYW1lRVJLTlM1XzEyQXRv
bWljU3RyaW5nRVJUMF8KK19fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFUE5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfMTJH
cmFwaGljc1JlY3RFRUUKK19fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xN0pTU1ZHQW5p
bWF0ZWRSZWN0RU5TXzI2U1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1Jl
Y3RFRUVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xv
YmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTE3SlNTVkdBbmltYXRlZFJlY3QxOGdldE93blBy
b3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVSTlMxXzEyUHJv
cGVydHlTbG90RQogX19aTjNKU0MxOGdldFN0YXRpY1ZhbHVlU2xvdElON1dlYkNvcmUxN0pTU1ZH
QW5pbWF0ZWRSZWN0RU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNfOUV4ZWNTdGF0ZUVQS05TXzlI
YXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjdX
ZWJDb3JlMjRqc1NWR0FuaW1hdGVkUmVjdEJhc2VWYWxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pT
VmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQotX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlZFByb3Bl
cnR5VGVhck9mZklOU185RmxvYXRSZWN0RUU3YmFzZVZhbEV2Ci1fX1pON1dlYkNvcmU0dG9KU0VQ
TjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xOFNWR1Byb3BlcnR5
VGVhck9mZklOU185RmxvYXRSZWN0RUVFCi1fX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJJTlNf
OUpTU1ZHUmVjdEVOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU185RmxvYXRSZWN0RUVFRUVQTlNf
MTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQ
VDBfCitfX1pON1dlYkNvcmUyNlNWR0FuaW1hdGVkUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhp
Y3NSZWN0RUU3YmFzZVZhbEV2CitfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMkdyYXBo
aWNzUmVjdEVFRQorX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzlKU1NWR1JlY3RFTlNf
MThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1JlY3RFRUVFRVBOU18xMkpTRE9NV3Jh
cHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43
V2ViQ29yZTlKU1NWR1JlY3QxOGdldE93blByb3BlcnR5U2xvdEVQTjNKU0M5RXhlY1N0YXRlRVJL
TlMxXzEwSWRlbnRpZmllckVSTlMxXzEyUHJvcGVydHlTbG90RQogX19aTjNKU0MxOGdldFN0YXRp
Y1ZhbHVlU2xvdElON1dlYkNvcmU5SlNTVkdSZWN0RU5TMV8xMkpTRE9NV3JhcHBlckVFRWJQTlNf
OUV4ZWNTdGF0ZUVQS05TXzlIYXNoVGFibGVFUFRfUktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJv
cGVydHlTbG90RQogX19aTjdXZWJDb3JlMTBqc1NWR1JlY3RYRVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTI5Mzk3LDcgKzI5Mzk3LDcgQEAgX19a
TjdXZWJDb3JlMTJTVkdMb2NhdGFibGUyM2ZhcnRoZXN0VmlldwogX19aTjdXZWJDb3JlNDBqc1NW
R0NpcmNsZUVsZW1lbnROZWFyZXN0Vmlld3BvcnRFbGVtZW50RVBOM0pTQzlFeGVjU3RhdGVFTlMw
XzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKIF9fWk5LN1dlYkNvcmUyOVNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50MjJuZWFyZXN0Vmlld3BvcnRFbGVtZW50RXYKIF9fWk43V2ViQ29y
ZTI2UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIxN2FwcGx5Vmlld3BvcnRDbGlwRVJOU185UGFp
bnRJbmZvRQotX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfOUZsb2F0UmVjdEVF
RDBFdgorX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTJHcmFwaGljc1JlY3RF
RUQwRXYKIF9fWk43V2ViQ29yZThTVkdBbmdsZTE2c2V0VmFsdWVBc1N0cmluZ0VSS04zV1RGNlN0
cmluZ0VSaQogX19aTjdXZWJDb3JlMzNqc1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnRSb3RhdGVF
UE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQogX19aTjdX
ZWJDb3JlMjVTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50MTRyb3RhdGVBbmltYXRlZEV2CkBAIC0y
OTQyMSw3ICsyOTQyMSw3IEBAIF9fWk43V2ViQ29yZTMwanNTVkdBbmltYXRlZExlbmd0aExpc3RB
bmkKIF9fWk43V2ViQ29yZTI1anNTVkdBbmltYXRlZEFuZ2xlQW5pbVZhbEVQTjNKU0M5RXhlY1N0
YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUyNlNWR0Fu
aW1hdGVkUHJvcGVydHlUZWFyT2ZmSU5TXzhTVkdBbmdsZUVFN2FuaW1WYWxFdgogX19aTjdXZWJD
b3JlMjRqc1NWR0FuaW1hdGVkUmVjdEFuaW1WYWxFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQotX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlZFByb3BlcnR5
VGVhck9mZklOU185RmxvYXRSZWN0RUU3YW5pbVZhbEV2CitfX1pON1dlYkNvcmUyNlNWR0FuaW1h
dGVkUHJvcGVydHlUZWFyT2ZmSU5TXzEyR3JhcGhpY3NSZWN0RUU3YW5pbVZhbEV2CiBfX1pON1dl
YkNvcmUyN2pzU1ZHQ2lyY2xlRWxlbWVudFRyYW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83
SlNWYWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUzM2pzU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0QW5pbVZhbEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8x
MElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmUzOWpzU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvQW5pbVZhbEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZp
ZXJFCkBAIC0yOTQ5NSw3ICsyOTQ5NSw3IEBAIF9fWk43V2ViQ29yZTE4c2V0SlNTVkdBbmdsZVZh
bHVlRVBOM0pTQzkKIF9fWk43V2ViQ29yZTlKU1NWR1JlY3QzcHV0RVBOM0pTQzlFeGVjU3RhdGVF
UktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQog
X19aTjNKU0M5bG9va3VwUHV0SU43V2ViQ29yZTlKU1NWR1JlY3RFRUViUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwogX19aTjdX
ZWJDb3JlMTNzZXRKU1NWR1JlY3RYRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMw
XzdKU1ZhbHVlRQotX19aTks3V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9hdFJl
Y3RFRTRyb2xlRXYKK19fWk5LN1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMkdyYXBo
aWNzUmVjdEVFNHJvbGVFdgogX19aTjdXZWJDb3JlNDBqc1NWR1RyYW5zZm9ybUxpc3RQcm90b3R5
cGVGdW5jdGlvbkNsZWFyRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUyNEpTU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbzNwdXRFUE4zSlNDOUV4ZWNTdGF0ZUVSS05TMV8xMElkZW50aWZpZXJF
TlMxXzdKU1ZhbHVlRVJOUzFfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzlsb29rdXBQdXRJ
TjdXZWJDb3JlMjRKU1NWR1ByZXNlcnZlQXNwZWN0UmF0aW9FRUViUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwpAQCAtMjk1MTgs
NyArMjk1MTgsNyBAQCBfX1pON1dlYkNvcmUyM1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50MTZyCiBf
X1pON1dlYkNvcmUyOVNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50MjFzdXBwbGVtZW50YWxU
cmFuc2Zvcm1FdgogX19aTks3V2ViQ29yZTIzU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQxM2FuaW1h
dGlvblBhdGhFdgogX19aTjdXZWJDb3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVudDI0Y2FsY3Vs
YXRlRnJvbUFuZFRvVmFsdWVzRVJLTjNXVEY2U3RyaW5nRVM0XwotX19aTjdXZWJDb3JlTDEwcGFy
c2VQb2ludEVSS04zV1RGNlN0cmluZ0VSTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlTDEw
cGFyc2VQb2ludEVSS04zV1RGNlN0cmluZ0VSTlNfMTNHcmFwaGljc1BvaW50RQogX19aTjdXZWJD
b3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVudDIyY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZUVmalBO
U18xNFNWR1NNSUxFbGVtZW50RQogX19aTjdXZWJDb3JlMjNTVkdBbmltYXRlTW90aW9uRWxlbWVu
dDIwYXBwbHlSZXN1bHRzVG9UYXJnZXRFdgogX19aTjdXZWJDb3JlMTVTVkdHbHlwaEVsZW1lbnQx
OXJlbW92ZWRGcm9tRG9jdW1lbnRFdgpAQCAtMjk1OTksNyArMjk1OTksNyBAQCBfX1pON1dlYkNv
cmUyNlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50CiBfX1pON1dlYkNvcmUyMFNWR1RyYW5zZm9y
bURpc3RhbmNlQzFFUktOU18xMlNWR1RyYW5zZm9ybUVTM18KIF9fWk43V2ViQ29yZTIwU1ZHVHJh
bnNmb3JtRGlzdGFuY2VDMkVSS05TXzEyU1ZHVHJhbnNmb3JtRVMzXwogX19aTks3V2ViQ29yZTEy
U1ZHVHJhbnNmb3JtNXNjYWxlRXYKLV9fWk43V2ViQ29yZTlGbG9hdFNpemUxNW5hcnJvd1ByZWNp
c2lvbkVkZAorX19aTjdXZWJDb3JlMTJHcmFwaGljc1NpemUxNW5hcnJvd1ByZWNpc2lvbkVkZAog
X19aTks3V2ViQ29yZTIwU1ZHVHJhbnNmb3JtRGlzdGFuY2UxNHNjYWxlZERpc3RhbmNlRWYKIF9f
Wk5LN1dlYkNvcmUyMFNWR1RyYW5zZm9ybURpc3RhbmNlMTdhZGRUb1NWR1RyYW5zZm9ybUVSS05T
XzEyU1ZHVHJhbnNmb3JtRQogX19aTjdXZWJDb3JlMTRTVkdQb2x5RWxlbWVudDI2YXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXBFdgpAQCAtMjk2MDksNyArMjk2MDksNyBAQCBfX1pON1dlYkNvcmUx
NVNWR0ltYWdlRWxlbWVudDMwZmlsbEF0dHJpCiBfX1pON1dlYkNvcmUxM1NWR1VzZUVsZW1lbnQy
NmF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwRXYKIF9fWk43V2ViQ29yZTEzU1ZHVXNlRWxlbWVu
dDMwZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwRXYKIF9fWk5LN1dlYkNvcmUxMlNWR1Ry
YW5zZm9ybTl0cmFuc2xhdGVFdgotX19aTjdXZWJDb3JlMTBGbG9hdFBvaW50MTVuYXJyb3dQcmVj
aXNpb25FZGQKK19fWk43V2ViQ29yZTEzR3JhcGhpY3NQb2ludDE1bmFycm93UHJlY2lzaW9uRWRk
CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTlzZXRNYXRyaXhFZGRkZGRkCiBfX1pON1dl
YkNvcmUxMFRyZWVTaGFyZWRJTlNfMThTVkdFbGVtZW50SW5zdGFuY2VFRTE0cmVtb3ZlZExhc3RS
ZWZFdgogX19aTjdXZWJDb3JlMThTVkdFbGVtZW50SW5zdGFuY2VEMEV2CkBAIC0yOTY2NywxMSAr
Mjk2NjcsMTEgQEAgX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm01c2tld1hFZAogX19aTjdX
ZWJDb3JlMTJTVkdUcmFuc2Zvcm04c2V0U2tld1lFZgogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFu
c2Zvcm01c2tld1lFZAogX19aTjdXZWJDb3JlMjZTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDE3
Y2FsY3VsYXRlRGlzdGFuY2VFUktOM1dURjZTdHJpbmdFUzRfCi1fX1pON1dlYkNvcmUyMFNWR1Bh
dGhTdHJpbmdCdWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xMEZsb2F0UG9pbnRFUzNf
TlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWls
ZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMTRsaW5l
VG9WZXJ0aWNhbEVmTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUyMFNWR1Bh
dGhTdHJpbmdCdWlsZGVyMTZsaW5lVG9Ib3Jpem9udGFsRWZOU18xOFBhdGhDb29yZGluYXRlTW9k
ZUUKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxkZXIxNmN1cnZlVG9RdWFkcmF0aWNF
UktOU18xMEZsb2F0UG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCi1fX1pON1dlYkNv
cmUyMFNWR1BhdGhTdHJpbmdCdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTBG
bG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjBTVkdQYXRo
U3RyaW5nQnVpbGRlcjE2Y3VydmVUb1F1YWRyYXRpY0VSS05TXzEzR3JhcGhpY3NQb2ludEVTM19O
U18xOFBhdGhDb29yZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIwU1ZHUGF0aFN0cmluZ0J1aWxk
ZXIyMmN1cnZlVG9RdWFkcmF0aWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxMFNWR0VsZW1lbnQyNmF0dHJpYnV0ZVRvUHJv
cGVydHlUeXBlTWFwRXYKIF9fWk43V2ViQ29yZTEwU1ZHRWxlbWVudDMwZmlsbEF0dHJpYnV0ZVRv
UHJvcGVydHlUeXBlTWFwRXYKIF9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU4U1ZHR2x5cGgxMEFy
YWJpY0Zvcm1FTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCkBAIC0yOTcxMyw3ICsyOTcxMyw3IEBA
IF9fWk43V2ViQ29yZUwxNXZpZXdDb25zdHJ1Y3RvckVSS05TXzEzUXUKIF9fWk43V2ViQ29yZTE0
U1ZHVmlld0VsZW1lbnQ2Y3JlYXRlRVJLTlNfMTNRdWFsaWZpZWROYW1lRVBOU184RG9jdW1lbnRF
CiBfX1pON1dlYkNvcmUxNFNWR1ZpZXdFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJpYnV0ZUVQTlNf
OUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTE0U1ZHVmlld0VsZW1lbnQxNnJlbmRlcmVySXNOZWVk
ZWRFUE5TXzExUmVuZGVyU3R5bGVFCi1fX1pUaG4xNzZfTjdXZWJDb3JlMTRTVkdWaWV3RWxlbWVu
dDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitfX1pUaG4xNzZfTjdXZWJD
b3JlMTRTVkdWaWV3RWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzEyR3JhcGhpY3NS
ZWN0RQogX19aVGhuMTc2X043V2ViQ29yZTE0U1ZHVmlld0VsZW1lbnQzMXNldFByZXNlcnZlQXNw
ZWN0UmF0aW9CYXNlVmFsdWVFUktOU18yMlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9FCiBfX1pON1dl
YkNvcmUxNFNWR1ZpZXdFbGVtZW50RDBFdgogX19aTjdXZWJDb3JlMThTVkdDbGlwUGF0aEVsZW1l
bnQyMHBhcnNlTWFwcGVkQXR0cmlidXRlRVBOU185QXR0cmlidXRlRQpAQCAtMjk3MjcsMTUgKzI5
NzI3LDE1IEBAIF9fWk43V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMzEKIF9fWk43
V2ViQ29yZTI0UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMjFyZW1vdmVDbGllbnRGcm9tQ2FjaGVF
UE5TXzEyUmVuZGVyT2JqZWN0RWIKIF9fWk5LM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVu
ZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8xMUNsaXBwZXJEYXRhRUVOU18xOFBhaXJGaXJzdEV4
dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhh
c2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVTRV9FOGNvbnRhaW5zSVMzX05TXzIySWRlbnRpdHlI
YXNoVHJhbnNsYXRvcklTM19TN19TQl9FRUVFYlJLVF8KIF9fWk43V2ViQ29yZTI0UmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyMTNhcHBseVJlc291cmNlRVBOU18xMlJlbmRlck9iamVjdEVQTlNfMTFS
ZW5kZXJTdHlsZUVSUE5TXzE1R3JhcGhpY3NDb250ZXh0RXQKLV9fWk43V2ViQ29yZTI0UmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyMjJhcHBseUNsaXBwaW5nVG9Db250ZXh0RVBOU18xMlJlbmRlck9i
amVjdEVSS05TXzlGbG9hdFJlY3RFUzVfUE5TXzE1R3JhcGhpY3NDb250ZXh0RQorX19aTjdXZWJD
b3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIyMmFwcGx5Q2xpcHBpbmdUb0NvbnRleHRFUE5T
XzEyUmVuZGVyT2JqZWN0RVJLTlNfMTJHcmFwaGljc1JlY3RFUzVfUE5TXzE1R3JhcGhpY3NDb250
ZXh0RQogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWly
SVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183
UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNE
X0lTNl9FRUVFU0VfRTE2bG9va3VwRm9yV3JpdGluZ0VSS1MzXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTNhZGRJUzNfUzZf
TlNfMTdIYXNoTWFwVHJhbnNsYXRvcklTN19TR19TQl9FRUVFUzRfSU5TXzE3SGFzaFRhYmxlSXRl
cmF0b3JJUzNfUzdfUzlfU0JfU0dfU0VfRUViRVJLVF9SS1QwXwogX19aTjNXVEY5SGFzaFRhYmxl
SVBON1dlYkNvcmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX1BOUzFfMTFDbGlwcGVyRGF0YUVF
TlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzdfRUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhh
c2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMzX0VFTlNEX0lTNl9FRUVFU0VfRTRmaW5kSVMzX05T
XzIySWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTM19TN19TQl9FRUVFTlNfMTdIYXNoVGFibGVJdGVy
YXRvcklTM19TN19TOV9TQl9TR19TRV9FRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQTjdXZWJD
b3JlMTJSZW5kZXJPYmplY3RFU3Q0cGFpcklTM19QTlMxXzExQ2xpcHBlckRhdGFFRU5TXzE4UGFp
ckZpcnN0RXh0cmFjdG9ySVM3X0VFTlNfN1B0ckhhc2hJUzNfRUVOU18xNFBhaXJIYXNoVHJhaXRz
SU5TXzEwSGFzaFRyYWl0c0lTM19FRU5TRF9JUzZfRUVFRVNFX0U2bG9va3VwRVJLUzNfCiBfX1pO
M1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNfUE5TMV8x
MUNsaXBwZXJEYXRhRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTN19FRU5TXzdQdHJIYXNoSVMz
X0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0RfSVM2X0VFRUVT
RV9FNnJlaGFzaEVpCi1fX1pON1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjE2cGF0
aE9ubHlDbGlwcGluZ0VQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RQorX19a
TjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIxNnBhdGhPbmx5Q2xpcHBpbmdFUE5T
XzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pOSzdXZWJDb3JlMjlT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDEwdG9DbGlwUGF0aEVSTlNfNFBhdGhFCi1fX1pO
N1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjI0ZHJhd0NvbnRlbnRJbnRvTWFza0lt
YWdlRVBOU18xMUNsaXBwZXJEYXRhRVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTI0UmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyMjRkcmF3Q29udGVudEludG9NYXNrSW1hZ2VFUE5TXzExQ2xp
cHBlckRhdGFFUktOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVj
dDI4aXNTVkdTaGFkb3dUcmVlUm9vdENvbnRhaW5lckV2CiBfX1pOSzdXZWJDb3JlMjRSZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIxMHJlbmRlck5hbWVFdgogX19aTjdXZWJDb3JlTDE4d3JpdGVOYW1l
VmFsdWVQYWlySU5TXzEyU1ZHVW5pdFR5cGVzMTFTVkdVbml0VHlwZUVFRXZSTlNfMTBUZXh0U3Ry
ZWFtRVBLY1RfCkBAIC0yOTc0Niw3ICsyOTc0Niw3IEBAIF9fWk5LN1dlYkNvcmUxOVJlbmRlclNW
R0lubGluZVRleHQxN29iamUKIF9fWk43V2ViQ29yZUwxOW1ldGFkYXRhQ29uc3RydWN0b3JFUktO
U18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEViCiBfX1pON1dlYkNvcmUxOFNWR01ldGFk
YXRhRWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEUKIF9f
Wk43V2ViQ29yZTE4U1ZHTWV0YWRhdGFFbGVtZW50RDBFdgotX19aVGhuMTkyX043V2ViQ29yZTE2
U1ZHTWFya2VyRWxlbWVudDE5c2V0Vmlld0JveEJhc2VWYWx1ZUVSS05TXzlGbG9hdFJlY3RFCitf
X1pUaG4xOTJfTjdXZWJDb3JlMTZTVkdNYXJrZXJFbGVtZW50MTlzZXRWaWV3Qm94QmFzZVZhbHVl
RVJLTlNfMTJHcmFwaGljc1JlY3RFCiBfX1pON1dlYkNvcmUxNFNWR1JlbmRlclN0eWxlMjJzZXRN
YXJrZXJTdGFydFJlc291cmNlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTVkdSZW5k
ZXJTdHlsZTIwc2V0TWFya2VyTWlkUmVzb3VyY2VFUktOM1dURjZTdHJpbmdFCiBfX1pOSzdXZWJD
b3JlMTRTVkdQb2x5RWxlbWVudDE1c3VwcG9ydHNNYXJrZXJzRXYKQEAgLTI5NzcwLDcgKzI5Nzcw
LDcgQEAgX19aTjdXZWJDb3JlTDE3c3ltYm9sQ29uc3RydWN0b3JFUktOU18xMwogX19aTjdXZWJD
b3JlMTZTVkdTeW1ib2xFbGVtZW50NmNyZWF0ZUVSS05TXzEzUXVhbGlmaWVkTmFtZUVQTlNfOERv
Y3VtZW50RQogX19aTjdXZWJDb3JlMTZTVkdTeW1ib2xFbGVtZW50MjBwYXJzZU1hcHBlZEF0dHJp
YnV0ZUVQTlNfOUF0dHJpYnV0ZUUKIF9fWk43V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDE5c3Zn
QXR0cmlidXRlQ2hhbmdlZEVSS05TXzEzUXVhbGlmaWVkTmFtZUUKLV9fWlRobjE5Ml9ON1dlYkNv
cmUxNlNWR1N5bWJvbEVsZW1lbnQxOXNldFZpZXdCb3hCYXNlVmFsdWVFUktOU185RmxvYXRSZWN0
RQorX19aVGhuMTkyX043V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVudDE5c2V0Vmlld0JveEJhc2VW
YWx1ZUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTks3V2ViQ29yZTE2U1ZHU3ltYm9sRWxlbWVu
dDIyc2VsZkhhc1JlbGF0aXZlTGVuZ3Roc0V2CiBfX1pUaG4xOTJfTjdXZWJDb3JlMTZTVkdTeW1i
b2xFbGVtZW50MzFzZXRQcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlRVJLTlNfMjJTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvRQogX19aTjdXZWJDb3JlMTZTVkdTeW1ib2xFbGVtZW50MTZyZW5kZXJl
cklzTmVlZGVkRVBOU18xMVJlbmRlclN0eWxlRQpAQCAtMjk4NTAsOCArMjk4NTAsOCBAQCBfX1pO
N1dlYkNvcmUxMlJlbmRlck9iamVjdDIzc2V0TmVlZHNUcmFuCiBfX1pOSzdXZWJDb3JlMTBTVkdF
bGVtZW50MTRpc0dyYWRpZW50U3RvcEV2CiBfX1pON1dlYkNvcmUzN2pzU1ZHR3JhZGllbnRFbGVt
ZW50R3JhZGllbnRUcmFuc2Zvcm1FUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBf
MTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMThTVkdHcmFkaWVudEVsZW1lbnQyNWdyYWRpZW50
VHJhbnNmb3JtQW5pbWF0ZWRFdgotX19aTjdXZWJDb3JlMThSZW5kZXJTVkdDb250YWluZXIxNm5v
ZGVBdEZsb2F0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRF
UktOU18xMEZsb2F0UG9pbnRFTlNfMTNIaXRUZXN0QWN0aW9uRQotX19aTjdXZWJDb3JlMThSZW5k
ZXJTVkdDb250YWluZXIyNXBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXBFUktOU18xMEZsb2F0UG9p
bnRFCitfX1pON1dlYkNvcmUxOFJlbmRlclNWR0NvbnRhaW5lcjE2bm9kZUF0RmxvYXRQb2ludEVS
S05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEzR3JhcGhpY3NQ
b2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCitfX1pON1dlYkNvcmUxOFJlbmRlclNWR0NvbnRhaW5l
cjI1cG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcEVSS05TXzEzR3JhcGhpY3NQb2ludEUKIF9fWk43
V2ViQ29yZUwyN2NyZWF0ZVNWR0RlZnNFbGVtZW50V3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBO
U18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEwU1ZHRWxlbWVudEVF
RQogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzE2SlNTVkdEZWZzRWxlbWVudEVOU18x
NFNWR0RlZnNFbGVtZW50RUVFUE5TXzEySlNET01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwogX19aTjdXZWJDb3JlMTZKU1NWR0RlZnNFbGVtZW50
QzFFUE4zSlNDOVN0cnVjdHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xNFNWR0RlZnNFbGVtZW50RUVFCkBAIC0yOTg2MiwxMSArMjk4NjIsMTEgQEAgX19a
TjdXZWJDb3JlMTZKU1NWR0RlZnNFbGVtZW50RDFFdgogX19aVGhuOF9ON1dlYkNvcmUxNFNWR0Rl
ZnNFbGVtZW50RDBFdgogX19aVGhuOF9ON1dlYkNvcmUxNVNWR01QYXRoRWxlbWVudEQwRXYKIF9f
Wk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyQzFFdgotX19aTjdXZWJDb3JlMjFTVkdQ
YXRoU2VnTGlzdEJ1aWxkZXI2bW92ZVRvRVJLTlNfMTBGbG9hdFBvaW50RWJOU18xOFBhdGhDb29y
ZGluYXRlTW9kZUUKK19fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyNm1vdmVUb0VS
S05TXzEzR3JhcGhpY3NQb2ludEViTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNv
cmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjE3Y29udGludWVDb25zdW1pbmdFdgogX19aTjdXZWJD
b3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIyNWluY3JlbWVudFBhdGhTZWdtZW50Q291bnRFdgot
X19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIxMmN1cnZlVG9DdWJpY0VSS05TXzEw
RmxvYXRQb2ludEVTM19TM19OU18xOFBhdGhDb29yZGluYXRlTW9kZUUKLV9fWk43V2ViQ29yZTIx
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMThjdXJ2ZVRvQ3ViaWNTbW9vdGhFUktOU18xMEZsb2F0UG9p
bnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdM
aXN0QnVpbGRlcjEyY3VydmVUb0N1YmljRVJLTlNfMTNHcmFwaGljc1BvaW50RVMzX1MzX05TXzE4
UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIx
OGN1cnZlVG9DdWJpY1Ntb290aEVSS05TXzEzR3JhcGhpY3NQb2ludEVTM19OU18xOFBhdGhDb29y
ZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZTE0U1ZHUGF0aEVsZW1lbnQzN2NyZWF0ZVNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnNFZmZmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCiBfX1pON1dl
YkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjljbG9zZVBhdGhFdgogX19aTjdXZWJDb3JlMjFT
VkdQYXRoU2VnTGlzdEJ1aWxkZXI3Y2xlYW51cEV2CkBAIC0yOTkwMCw3ICsyOTkwMCw3IEBAIF9f
Wk43V2ViQ29yZTIwU1ZHUGF0aFBhcnNlckZhY3RvcnkzMGJ1aWwKIF9fWk43V2ViQ29yZTE0U1ZH
UGF0aEJsZW5kZXJDMUV2CiBfX1pON1dlYkNvcmUxNFNWR1BhdGhCbGVuZGVyMTdibGVuZEFuaW1h
dGVkUGF0aEVmUE5TXzEzU1ZHUGF0aFNvdXJjZUVTMl9QTlNfMTVTVkdQYXRoQ29uc3VtZXJFCiBf
X1pON1dlYkNvcmUxNFNWR1BhdGhCbGVuZGVyMThibGVuZE1vdmVUb1NlZ21lbnRFdgotX19aTjdX
ZWJDb3JlMTRTVkdQYXRoQmxlbmRlcjIzYmxlbmRBbmltYXRlZEZsb2F0UG9pbnRFUktOU18xMEZs
b2F0UG9pbnRFUzNfCitfX1pON1dlYkNvcmUxNFNWR1BhdGhCbGVuZGVyMjNibGVuZEFuaW1hdGVk
RmxvYXRQb2ludEVSS05TXzEzR3JhcGhpY3NQb2ludEVTM18KIF9fWk43V2ViQ29yZTE0U1ZHUGF0
aEJsZW5kZXIyNGJsZW5kQ3VydmVUb0N1YmljU2VnbWVudEV2CiBfX1pON1dlYkNvcmUxNFNWR1Bh
dGhCbGVuZGVyMzBibGVuZEN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFdgogX19aTjdXZWJDb3Jl
MTRTVkdQYXRoQmxlbmRlcjdjbGVhbnVwRXYKQEAgLTI5OTM1LDcgKzI5OTM1LDcgQEAgX19aTjdX
ZWJDb3JlMjdKU1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZQogX19aTjdXZWJDb3JlMjVTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsRDBFdgogX19aTjdXZWJDb3JlMzNKU1NWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWxEMUV2CiBfX1pON1dlYkNvcmUzMVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWxEMEV2Ci1fX1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjZsaW5lVG9F
UktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitfX1pON1dlYkNvcmUy
MVNWR1BhdGhTZWdMaXN0QnVpbGRlcjZsaW5lVG9FUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQ
YXRoQ29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MjVjcmVhdGVT
VkdQYXRoU2VnTGluZXRvQWJzRWZmTlNfMTRTVkdQYXRoU2VnUm9sZUUKIF9fWk43V2ViQ29yZTIx
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyMTRsaW5lVG9WZXJ0aWNhbEVmTlNfMThQYXRoQ29vcmRpbmF0
ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MzNjcmVhdGVTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnNFZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCkBAIC0yOTk5Nyw5ICsyOTk5Nyw5
IEBAIF9fWk43V2ViQ29yZTI5SlNTVkdQYXRoU2VnTGluZXRvVmVydGljYWwKIF9fWk43V2ViQ29y
ZTI3U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsRDBFdgogX19aTjdXZWJDb3JlMzFKU1NWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsRDFFdgogX19aTjdXZWJDb3JlMjlTVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbFJlbEQwRXYKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVy
MTZjdXJ2ZVRvUXVhZHJhdGljRVJLTlNfMTBGbG9hdFBvaW50RVMzX05TXzE4UGF0aENvb3JkaW5h
dGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxkZXIxNmN1cnZlVG9RdWFk
cmF0aWNFUktOU18xM0dyYXBoaWNzUG9pbnRFUzNfTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCiBf
X1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MzVjcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Fic0VmZmZmTlNfMTRTVkdQYXRoU2VnUm9sZUUKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyMjJjdXJ2ZVRvUXVhZHJhdGljU21vb3RoRVJLTlNfMTBGbG9hdFBvaW50RU5T
XzE4UGF0aENvb3JkaW5hdGVNb2RlRQorX19aTjdXZWJDb3JlMjFTVkdQYXRoU2VnTGlzdEJ1aWxk
ZXIyMmN1cnZlVG9RdWFkcmF0aWNTbW9vdGhFUktOU18xM0dyYXBoaWNzUG9pbnRFTlNfMThQYXRo
Q29vcmRpbmF0ZU1vZGVFCiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50NDFjcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFic0VmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCiBf
X1pOSzdXZWJDb3JlMjlTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FiczExcGF0aFNlZ1R5cGVF
dgogX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzMxSlNTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0Fic0VOU18yOVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzRUVFUE5TXzEySlNE
T01XcmFwcGVyRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUFQwXwpA
QCAtMzAwNDUsMTIgKzMwMDQ1LDEyIEBAIF9fWk43V2ViQ29yZTMxSlNTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXQKIF9fWk43V2ViQ29yZTI5U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWxEMEV2
CiBfX1pON1dlYkNvcmUzN0pTU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxEMUV2
CiBfX1pON1dlYkNvcmUzNVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsRDBFdgot
X19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJ
TlMyXzEwRmxvYXRQb2ludEVFRUVFTG0wRUU0ZmlsbEVSS1M2X20KLV9fWk4zV1RGNlZlY3RvcklO
U182UmVmUHRySU43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TMl8xMEZsb2F0UG9pbnRF
RUVFRUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCitfX1pOM1dURjZWZWN0b3JJTlNfNlJlZlB0cklO
N1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOUzJfMTNHcmFwaGljc1BvaW50RUVFRUVMbTBF
RTRmaWxsRVJLUzZfbQorX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMThTVkdQ
cm9wZXJ0eVRlYXJPZmZJTlMyXzEzR3JhcGhpY3NQb2ludEVFRUVFTG0wRUUxNHNocmlua0NhcGFj
aXR5RW0KIF9fWk43V2ViQ29yZTM4anNTVkdQb2ludExpc3RQcm90b3R5cGVGdW5jdGlvbkdldEl0
ZW1FUE4zSlNDOUV4ZWNTdGF0ZUUKIF9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEy
U1ZHUG9pbnRMaXN0RUUyNGdldEl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVqUmkKLV9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlF
eGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2Zm
SU5TXzEwRmxvYXRQb2ludEVFRQotX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzEwSlNT
VkdQb2ludEVOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUVFRVBOU18x
MkpTRE9NV3JhcHBlckVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBU
MF8KK19fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxP
YmplY3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEzR3JhcGhpY3NQb2ludEVFRQorX19a
TjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVySU5TXzEwSlNTVkdQb2ludEVOU18xOFNWR1Byb3BlcnR5
VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRVBOU18xMkpTRE9NV3JhcHBlckVQTjNKU0M5
RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBUMF8KIF9fWk43V2ViQ29yZTEwSlNT
VkdQb2ludDE4Z2V0T3duUHJvcGVydHlTbG90RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVu
dGlmaWVyRVJOUzFfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzE4Z2V0U3RhdGljVmFsdWVTbG90
SU43V2ViQ29yZTEwSlNTVkdQb2ludEVOUzFfMTJKU0RPTVdyYXBwZXJFRUViUE5TXzlFeGVjU3Rh
dGVFUEtOU185SGFzaFRhYmxlRVBUX1JLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xv
dEUKIF9fWk43V2ViQ29yZTExanNTVkdQb2ludFhFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMzAwNTgsNyArMzAwNTgsNyBAQCBfX1pON1dlYkNv
cmUxMWpzU1ZHUG9pbnRZRVBOM0pTQzlFeGVjU3RhCiBfX1pON1dlYkNvcmUxMlNWR1BvaW50TGlz
dDE0Y3JlYXRlQW5pbWF0ZWRFUktTMF9TMl9SUzBfZgogX19aTjdXZWJDb3JlMzBTVkdBbmltYXRl
ZExpc3RQcm9wZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTE4ZGV0YWNoTGlzdFdyYXBw
ZXJzRWoKIF9fWk43V2ViQ29yZTEwSlNTVkdQb2ludEQxRXYKLV9fWk43V2ViQ29yZTE4U1ZHUHJv
cGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRDBFdgorX19aTjdXZWJDb3JlMThTVkdQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGljc1BvaW50RUVEMEV2CiBfX1pON1dlYkNvcmUxOVJlbmRl
clNWR0lubGluZVRleHQxNnBvc2l0aW9uRm9yUG9pbnRFUktOU184SW50UG9pbnRFCiBfX1pOSzdX
ZWJDb3JlMTZTVkdJbmxpbmVUZXh0Qm94MjdvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnRFUktO
U18xNVNWR1RleHRGcmFnbWVudEVmYgogX19aTjdXZWJDb3JlMTlSZW5kZXJTVkdJbmxpbmVUZXh0
MTRsb2NhbENhcmV0UmVjdEVQTlNfOUlubGluZUJveEVpUGkKQEAgLTMwMTIwLDExICszMDEyMCwx
MSBAQCBfX1pON1dlYkNvcmUzMWpzU1ZHU1ZHRWxlbWVudEN1cnJlbnRUcmFuCiBfX1pON1dlYkNv
cmUxMEpTU1ZHUG9pbnQzcHV0RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5T
MV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M5bG9va3VwUHV0SU43
V2ViQ29yZTEwSlNTVkdQb2ludEVFRWJQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVO
U183SlNWYWx1ZUVQS05TXzlIYXNoVGFibGVFUFRfCiBfX1pON1dlYkNvcmUxNHNldEpTU1ZHUG9p
bnRYRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQotX19aTks3
V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFNHJvbGVFdgotX19a
TjdXZWJDb3JlMjRTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmZJTlNfMTNTVkdTVkdFbGVtZW50RU5T
XzEwRmxvYXRQb2ludEVFMTJjb21taXRDaGFuZ2VFdgorX19aTks3V2ViQ29yZTE4U1ZHUHJvcGVy
dHlUZWFyT2ZmSU5TXzEzR3JhcGhpY3NQb2ludEVFNHJvbGVFdgorX19aTjdXZWJDb3JlMjRTVkdT
dGF0aWNQcm9wZXJ0eVRlYXJPZmZJTlNfMTNTVkdTVkdFbGVtZW50RU5TXzEzR3JhcGhpY3NQb2lu
dEVFMTJjb21taXRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MjJ1cGRhdGVD
dXJyZW50VHJhbnNsYXRlRXYKLV9fWk43V2ViQ29yZTI0U1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
SU5TXzEzU1ZHU1ZHRWxlbWVudEVOU18xMEZsb2F0UG9pbnRFRUQwRXYKLV9fWk43V2ViQ29yZTE4
U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRDJFdgorX19aTjdXZWJDb3JlMjRT
VkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmZJTlNfMTNTVkdTVkdFbGVtZW50RU5TXzEzR3JhcGhpY3NQ
b2ludEVFRDBFdgorX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUVEMkV2CiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxMWlzU1ZHSW5saW5lRXYK
IF9fWk43V2ViQ29yZTEwU1ZHRWxlbWVudDIzY3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWRFdgogX19a
TjdXZWJDb3JlMThqc1NWR0dFbGVtZW50U3R5bGVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFs
dWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMzAxNDUsOCArMzAxNDUsOCBAQCBfX1pON1dlYkNv
cmUxM1NWR1NWR0VsZW1lbnQxOHN5bmNocm9uaXplCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1l
bnQzMHN5bmNocm9uaXplUHJlc2VydmVBc3BlY3RSYXRpb0V2CiBfX1pON1dlYkNvcmUyMWpzU1ZH
U1ZHRWxlbWVudEhlaWdodEVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElk
ZW50aWZpZXJFCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQxNGhlaWdodEFuaW1hdGVkRXYK
LV9fWk43V2ViQ29yZTE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzlGbG9hdFJlY3RFRTEyY29tbWl0
Q2hhbmdlRXYKLV9fWk43V2ViQ29yZTE3U1ZHUHJvcGVydHlUcmFpdHNJTlNfOUZsb2F0UmVjdEVF
OHRvU3RyaW5nRVJLUzFfCitfX1pON1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMkdy
YXBoaWNzUmVjdEVFMTJjb21taXRDaGFuZ2VFdgorX19aTjdXZWJDb3JlMTdTVkdQcm9wZXJ0eVRy
YWl0c0lOU18xMkdyYXBoaWNzUmVjdEVFOHRvU3RyaW5nRVJLUzFfCiBfX1pON1dlYkNvcmUxM3Nl
dEpTU1ZHUmVjdFlFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmUxN3NldEpTU1ZHUmVjdFdpZHRoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84
SlNPYmplY3RFTlMwXzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMThzZXRKU1NWR1JlY3RIZWlnaHRF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCkBAIC0zMDE5Miwx
MyArMzAxOTIsMTMgQEAgX19aTjdXZWJDb3JlMTZTVkdTdHlsZWRFbGVtZW50MjRnZXRQcmVzZQog
X19aTjdXZWJDb3JlMTNTdHlsZWRFbGVtZW50MjJnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsRU5TXzIw
TWFwcGVkQXR0cmlidXRlRW50cnlFUE5TXzlBdHRyaWJ1dGVFCiBfX1pON1dlYkNvcmU0NmpzU1ZH
U1ZHRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRlU1ZHUG9pbnRFUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDE0Y3JlYXRlU1ZHUG9pbnRFdgotX19aTjdX
ZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUUxMmNvbW1pdENoYW5n
ZUV2CitfX1pON1dlYkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRF
RTEyY29tbWl0Q2hhbmdlRXYKIF9fWk43V2ViQ29yZTE0c2V0SlNTVkdQb2ludFlFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUpTU1ZH
TnVtYmVyRDFFdgogX19aTjdXZWJDb3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJZkVEMEV2CiBfX1pO
N1dlYkNvcmUzNWpzU1ZHTWF0cml4UHJvdG90eXBlRnVuY3Rpb25JbnZlcnNlRVBOM0pTQzlFeGVj
U3RhdGVFCiBfX1pON1dlYkNvcmU0MmpzU1ZHUG9pbnRQcm90b3R5cGVGdW5jdGlvbk1hdHJpeFRy
YW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRQotX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludDE1bWF0
cml4VHJhbnNmb3JtRVJLTlNfMTVBZmZpbmVUcmFuc2Zvcm1FCitfX1pOSzdXZWJDb3JlMTNHcmFw
aGljc1BvaW50MTVtYXRyaXhUcmFuc2Zvcm1FUktOU18xNUFmZmluZVRyYW5zZm9ybUUKIF9fWk5L
N1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTNtYXBFZGRSZFMxXwogX19aTjdXZWJDb3JlNDVqc1NW
R1NWR0VsZW1lbnRQcm90b3R5cGVGdW5jdGlvbkNyZWF0ZVNWR1JlY3RFUE4zSlNDOUV4ZWNTdGF0
ZUUKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDEzY3JlYXRlU1ZHUmVjdEV2CkBAIC0zMDIy
NSw4ICszMDIyNSw4IEBAIF9fWk43V2ViQ29yZTE2anNTVkdTVkdFbGVtZW50WEVQTjNKU0M5RXgK
IF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDl4QW5pbWF0ZWRFdgogX19aTks3V2ViQ29yZTIy
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdDEwcmVuZGVyTmFtZUV2CiBfX1pON1dlYkNvcmUyNWpzU1ZH
UmVjdEVsZW1lbnRDbGFzc05hbWVFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBf
MTBJZGVudGlmaWVyRQotX19aTjdXZWJDb3JlMjRSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIxOGhp
dFRlc3RDbGlwQ29udGVudEVSS05TXzlGbG9hdFJlY3RFUktOU18xMEZsb2F0UG9pbnRFCi1fX1pO
N1dlYkNvcmUyNFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjE2bm9kZUF0RmxvYXRQb2ludEVSS05T
XzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEwRmxvYXRQb2ludEVO
U18xM0hpdFRlc3RBY3Rpb25FCitfX1pON1dlYkNvcmUyNFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjE4aGl0VGVzdENsaXBDb250ZW50RVJLTlNfMTJHcmFwaGljc1JlY3RFUktOU18xM0dyYXBoaWNz
UG9pbnRFCitfX1pON1dlYkNvcmUyNFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjE2bm9kZUF0Rmxv
YXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEz
R3JhcGhpY3NQb2ludEVOU18xM0hpdFRlc3RBY3Rpb25FCiBfX1pON1dlYkNvcmUyNlJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyOWlkQ2hhbmdlZEV2CiBfX1pON1dlYkNvcmUyOVNWR1N0eWxlZFRy
YW5zZm9ybWFibGVFbGVtZW50MTZpc0tub3duQXR0cmlidXRlRVJLTlNfMTNRdWFsaWZpZWROYW1l
RQogX19aTjdXZWJDb3JlMzNqc1NWR0NsaXBQYXRoRWxlbWVudENsaXBQYXRoVW5pdHNFUE4zSlND
OUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBfMTBJZGVudGlmaWVyRQpAQCAtMzAyNDQsOSAr
MzAyNDQsOSBAQCBfX1pON1dlYkNvcmUyMEpTU1ZHTWV0YWRhdGFFbGVtZW50RDFFdgogX19aVGhu
OF9ON1dlYkNvcmUxOFNWR01ldGFkYXRhRWxlbWVudEQwRXYKIF9fWk43V2ViQ29yZTE1U1ZHSW1h
Z2VFbGVtZW50MTlzeW5jaHJvbml6ZVByb3BlcnR5RVJLTlNfMTNRdWFsaWZpZWROYW1lRQogX19a
TjdXZWJDb3JlMTVTVkdJbWFnZUVsZW1lbnQxNXN5bmNocm9uaXplSHJlZkV2Ci1fX1pON1dlYkNv
cmUyNlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyMjVwb2ludElzSW5zaWRlVmlld3BvcnRDbGlw
RVJLTlNfMTBGbG9hdFBvaW50RQotX19aTjdXZWJDb3JlMTNSZW5kZXJTVkdQYXRoMTRzdHJva2VD
b250YWluc0VSS05TXzEwRmxvYXRQb2ludEViCi1fX1pOSzdXZWJDb3JlNFBhdGgxNHN0cm9rZUNv
bnRhaW5zRVBOU18xOFN0cm9rZVN0eWxlQXBwbGllckVSS05TXzEwRmxvYXRQb2ludEUKK19fWk43
V2ViQ29yZTI2UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIyNXBvaW50SXNJbnNpZGVWaWV3cG9y
dENsaXBFUktOU18xM0dyYXBoaWNzUG9pbnRFCitfX1pON1dlYkNvcmUxM1JlbmRlclNWR1BhdGgx
NHN0cm9rZUNvbnRhaW5zRVJLTlNfMTNHcmFwaGljc1BvaW50RWIKK19fWk5LN1dlYkNvcmU0UGF0
aDE0c3Ryb2tlQ29udGFpbnNFUE5TXzE4U3Ryb2tlU3R5bGVBcHBsaWVyRVJLTlNfMTNHcmFwaGlj
c1BvaW50RQogX19aTks3V2ViQ29yZTEzU1ZHVXNlRWxlbWVudDI4aW5zdGFuY2VGb3JTaGFkb3dU
cmVlRWxlbWVudEVQTlNfNE5vZGVFCiBfX1pOSzdXZWJDb3JlMTNTVkdVc2VFbGVtZW50MjhpbnN0
YW5jZUZvclNoYWRvd1RyZWVFbGVtZW50RVBOU180Tm9kZUVQTlNfMThTVkdFbGVtZW50SW5zdGFu
Y2VFCiBfX1pOSzdXZWJDb3JlMThTVkdFbGVtZW50SW5zdGFuY2UxN3NoYWRvd1RyZWVFbGVtZW50
RXYKQEAgLTMwMzMyLDcgKzMwMzMyLDcgQEAgX19aTjdXZWJDb3JlMjRpc01pZGRsZU1vdXNlQnV0
dG9uRXZlbnRFUAogX19aTks3V2ViQ29yZTExU1ZHQUVsZW1lbnQ2dGFyZ2V0RXYKIF9fWk43V2Vi
Q29yZTE3SlNTVkdJbWFnZUVsZW1lbnQzcHV0RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVu
dGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJvcGVydHlTbG90RQogX19aTjNKU0M5bG9v
a3VwUHV0SU43V2ViQ29yZTE3SlNTVkdJbWFnZUVsZW1lbnRFRUViUE5TXzlFeGVjU3RhdGVFUktO
U18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwotX19aTjdXZWJD
b3JlMTRSZW5kZXJTVkdJbWFnZTE2bm9kZUF0RmxvYXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVl
c3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzEwRmxvYXRQb2ludEVOU18xM0hpdFRlc3RBY3Rp
b25FCitfX1pON1dlYkNvcmUxNFJlbmRlclNWR0ltYWdlMTZub2RlQXRGbG9hdFBvaW50RVJLTlNf
MTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfMTNHcmFwaGljc1BvaW50
RU5TXzEzSGl0VGVzdEFjdGlvbkUKIF9fWk5LN1dlYkNvcmUxNlNWR1NjcmlwdEVsZW1lbnQyN2Fk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMc0VSTjNXVEYxMUxpc3RIYXNoU2V0SU5TXzRLVVJMRUxt
MjU2RU5TXzhLVVJMSGFzaEVFRQogX19aTks3V2ViQ29yZTE1U1ZHSW1hZ2VFbGVtZW50MjdhZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHNFUk4zV1RGMTFMaXN0SGFzaFNldElOU180S1VSTEVMbTI1
NkVOU184S1VSTEhhc2hFRUUKIF9fWk43V2ViQ29yZTQxanNTVkdEb2N1bWVudFByb3RvdHlwZUZ1
bmN0aW9uQ3JlYXRlRXZlbnRFUE4zSlNDOUV4ZWNTdGF0ZUUKQEAgLTMwMzkyLDEzICszMDM5Miwx
MyBAQCBfX1pON1dlYkNvcmUxNVNWR0ltYWdlRWxlbWVudDE3c3luY2hyb25pCiBfX1pON1dlYkNv
cmUxNVNWR0ltYWdlRWxlbWVudDMwc3luY2hyb25pemVQcmVzZXJ2ZUFzcGVjdFJhdGlvRXYKIF9f
Wk43V2ViQ29yZTE1U1ZHSW1hZ2VFbGVtZW50MzZzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWRFdgogX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDI1Y3JlYXRlU1ZHUGF0aFNl
Z01vdmV0b1JlbEVmZk5TXzE0U1ZHUGF0aFNlZ1JvbGVFCi1fX1pON1dlYkNvcmUyMFNWR1BhdGhT
ZWdMaXN0U291cmNlMzBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnRFUk5TXzEwRmxvYXRQ
b2ludEVTMl8KK19fWk43V2ViQ29yZTIwU1ZHUGF0aFNlZ0xpc3RTb3VyY2UzMHBhcnNlQ3VydmVU
b0N1YmljU21vb3RoU2VnbWVudEVSTlNfMTNHcmFwaGljc1BvaW50RVMyXwogX19aTks3V2ViQ29y
ZTE5U1ZHUGF0aFNlZ01vdmV0b1JlbDExcGF0aFNlZ1R5cGVFdgogX19aTjdXZWJDb3JlMjRqc1NW
R1BhdHRlcm5FbGVtZW50V2lkdGhFUE4zSlNDOUV4ZWNTdGF0ZUVOUzBfN0pTVmFsdWVFUktOUzBf
MTBJZGVudGlmaWVyRQogX19aTjdXZWJDb3JlMTdTVkdQYXR0ZXJuRWxlbWVudDEzd2lkdGhBbmlt
YXRlZEV2CiBfX1pON1dlYkNvcmU0MWpzU1ZHUG9pbnRMaXN0UHJvdG90eXBlRnVuY3Rpb25SZW1v
dmVJdGVtRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlO
U18xMlNWR1BvaW50TGlzdEVFMjdyZW1vdmVJdGVtVmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZH
QW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMxX0VFalJpCi1fX1pON1dlYkNvcmUxOFNWR1By
b3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRTEzZGV0YWNoV3JhcHBlckV2CitfX1pON1dl
YkNvcmUxOFNWR1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRTEzZGV0YWNoV3Jh
cHBlckV2CiBfX1pON1dlYkNvcmUyMlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2lu
dExpc3RFRTEyY29tbWl0Q2hhbmdlRXYKIF9fWk43V2ViQ29yZTI4anNTVkdQb2x5Z29uRWxlbWVu
dFRyYW5zZm9ybUVQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNWYWx1ZUVSS05TMF8xMElkZW50aWZp
ZXJFCiBfX1pON1dlYkNvcmU1MGpzU1ZHU1ZHRWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uQ3JlYXRl
U1ZHVHJhbnNmb3JtRVBOM0pTQzlFeGVjU3RhdGVFCkBAIC0zMDQwNyw3ICszMDQwNyw3IEBAIF9f
Wk43V2ViQ29yZTEyU1ZHVHJhbnNmb3JtQzFFTlMwXzE2U1ZHVHIKIF9fWk5LN1dlYkNvcmUxM1NW
R1NWR0VsZW1lbnQxMWN1cnJlbnRWaWV3RXYKIF9fWk43V2ViQ29yZTExU1ZHVmlld1NwZWNDMUVQ
TlNfMTBTVkdFbGVtZW50RQogX19aTjdXZWJDb3JlMTFTVkdWaWV3U3BlYzEzcGFyc2VWaWV3U3Bl
Y0VSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTExU1ZHVmlld1NwZWMxOXNldFZpZXdCb3hC
YXNlVmFsdWVFUktOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlMTFTVkdWaWV3U3BlYzE5c2V0
Vmlld0JveEJhc2VWYWx1ZUVSS05TXzEyR3JhcGhpY3NSZWN0RQogX19aTjdXZWJDb3JlMTFTVkdW
aWV3U3BlYzMxc2V0UHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZUVSS05TXzIyU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpb0UKIF9fWk43V2ViQ29yZTEzU1ZHU1ZHRWxlbWVudDE3c2V0VXNlQ3VycmVu
dFZpZXdFYgogX19aTjdXZWJDb3JlMTFTVkdWaWV3U3BlY0QwRXYKQEAgLTMwNDI3LDkgKzMwNDI3
LDkgQEAgX19aTjdXZWJDb3JlMTRTVkdQYXRoRWxlbWVudDE0Z2V0VG90YWxMZQogX19aTjdXZWJD
b3JlMjZqc1NWR1BvbHlsaW5lRWxlbWVudFBvaW50c0VQTjNKU0M5RXhlY1N0YXRlRU5TMF83SlNW
YWx1ZUVSS05TMF8xMElkZW50aWZpZXJFCiBfX1pON1dlYkNvcmU0MWpzU1ZHUG9pbnRMaXN0UHJv
dG90eXBlRnVuY3Rpb25BcHBlbmRJdGVtRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmUx
MHRvU1ZHUG9pbnRFTjNKU0M3SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5
SU5TXzEyU1ZHUG9pbnRMaXN0RUUyN2FwcGVuZEl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBT
VkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18x
OFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9pbnRFRUVFRVJpCi1fX1pON1dlYkNvcmUy
MlNWR0xpc3RQcm9wZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTMwcHJvY2Vzc0luY29t
aW5nTGlzdEl0ZW1XcmFwcGVyRVJOM1dURjZSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJ
TlNfMTBGbG9hdFBvaW50RUVFRUVQagotX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJD
b3JlMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlMyXzEwRmxvYXRQb2ludEVFRUVFTG0wRUUxNGV4cGFu
ZENhcGFjaXR5RW0KK19fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5TXzEyU1ZHUG9pbnRM
aXN0RUUyN2FwcGVuZEl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5VGVh
ck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRVJpCitfX1pON1dlYkNvcmUyMlNWR0xpc3RQcm9w
ZXJ0eVRlYXJPZmZJTlNfMTJTVkdQb2ludExpc3RFRTMwcHJvY2Vzc0luY29taW5nTGlzdEl0ZW1X
cmFwcGVyRVJOM1dURjZSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUVFRUVQagorX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjdXZWJDb3JlMThTVkdQ
cm9wZXJ0eVRlYXJPZmZJTlMyXzEzR3JhcGhpY3NQb2ludEVFRUVFTG0wRUUxNGV4cGFuZENhcGFj
aXR5RW0KIF9fWk43V2ViQ29yZTE0U1ZHUG9seUVsZW1lbnQxOXN5bmNocm9uaXplUHJvcGVydHlF
UktOU18xM1F1YWxpZmllZE5hbWVFCiBfX1pON1dlYkNvcmUxNFNWR1BvbHlFbGVtZW50MTdzeW5j
aHJvbml6ZVBvaW50c0V2CiBfX1pON1dlYkNvcmUxNkpTU1ZHUmVjdEVsZW1lbnQzcHV0RVBOM0pT
QzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRU5TMV83SlNWYWx1ZUVSTlMxXzE1UHV0UHJv
cGVydHlTbG90RQpAQCAtMzA0NTAsMTAgKzMwNDUwLDEwIEBAIF9fWk5LN1dlYkNvcmUyNVNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQKIF9fWk43V2ViQ29yZTM2anNTVkdHRWxlbWVudFByb3RvdHlw
ZUZ1bmN0aW9uR2V0Q1RNRVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pON1dlYkNvcmU0MmpzU1ZHR0Vs
ZW1lbnRQcm90b3R5cGVGdW5jdGlvbkdldFNjcmVlbkNUTUVQTjNKU0M5RXhlY1N0YXRlRQogX19a
TjdXZWJDb3JlNjBqc1NWR1RleHRDb250ZW50RWxlbWVudFByb3RvdHlwZUZ1bmN0aW9uR2V0Q2hh
ck51bUF0UG9zaXRpb25FUE4zSlNDOUV4ZWNTdGF0ZUUKLV9fWk5LN1dlYkNvcmUyMVNWR1RleHRD
b250ZW50RWxlbWVudDIwZ2V0Q2hhck51bUF0UG9zaXRpb25FUktOU18xMEZsb2F0UG9pbnRFCi1f
X1pOSzdXZWJDb3JlMTJTVkdUZXh0UXVlcnkyNWNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25FUktO
U18xMEZsb2F0UG9pbnRFCitfX1pOSzdXZWJDb3JlMjFTVkdUZXh0Q29udGVudEVsZW1lbnQyMGdl
dENoYXJOdW1BdFBvc2l0aW9uRVJLTlNfMTNHcmFwaGljc1BvaW50RQorX19aTks3V2ViQ29yZTEy
U1ZHVGV4dFF1ZXJ5MjVjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uRVJLTlNfMTNHcmFwaGljc1Bv
aW50RQogX19aTks3V2ViQ29yZTEyU1ZHVGV4dFF1ZXJ5MzNjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0
aW9uQ2FsbGJhY2tFUE5TMF80RGF0YUVSS05TXzE1U1ZHVGV4dEZyYWdtZW50RQotX19aTjdXZWJD
b3JlTDI0Y2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzRVBOU18xMlNWR1RleHRRdWVyeTREYXRhRVJL
TlNfMTVTVkdUZXh0RnJhZ21lbnRFaVJOU185RmxvYXRSZWN0RQorX19aTjdXZWJDb3JlTDI0Y2Fs
Y3VsYXRlR2x5cGhCb3VuZGFyaWVzRVBOU18xMlNWR1RleHRRdWVyeTREYXRhRVJLTlNfMTVTVkdU
ZXh0RnJhZ21lbnRFaVJOU18xMkdyYXBoaWNzUmVjdEUKIF9fWk43V2ViQ29yZTU1anNTVkdUZXh0
Q29udGVudEVsZW1lbnRQcm90b3R5cGVGdW5jdGlvbkdldEV4dGVudE9mQ2hhckVQTjNKU0M5RXhl
Y1N0YXRlRQogX19aTks3V2ViQ29yZTIxU1ZHVGV4dENvbnRlbnRFbGVtZW50MTVnZXRFeHRlbnRP
ZkNoYXJFalJpCiBfX1pOSzdXZWJDb3JlMTJTVkdUZXh0UXVlcnkxN2V4dGVudE9mQ2hhcmFjdGVy
RWoKQEAgLTMwNjYxLDcgKzMwNjYxLDcgQEAgX19aTjdXZWJDb3JlOFNWR1BhaW50NnNldFVyaUVS
S04zV1RGNlN0cgogX19aTjdXZWJDb3JlMzFKU1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVs
M3B1dEVQTjNKU0M5RXhlY1N0YXRlRVJLTlMxXzEwSWRlbnRpZmllckVOUzFfN0pTVmFsdWVFUk5T
MV8xNVB1dFByb3BlcnR5U2xvdEUKIF9fWk4zSlNDOWxvb2t1cFB1dElON1dlYkNvcmUzMUpTU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWxFRUViUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFTlNfN0pTVmFsdWVFUEtOU185SGFzaFRhYmxlRVBUXwogX19aTjdXZWJDb3JlMzVzZXRK
U1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsWEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpT
T2JqZWN0RU5TMF83SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTIwU1ZHUGF0aFNlZ0xpc3RTb3VyY2Ux
OHBhcnNlTGluZVRvU2VnbWVudEVSTlNfMTBGbG9hdFBvaW50RQorX19aTjdXZWJDb3JlMjBTVkdQ
YXRoU2VnTGlzdFNvdXJjZTE4cGFyc2VMaW5lVG9TZWdtZW50RVJOU18xM0dyYXBoaWNzUG9pbnRF
CiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMjhwYXJzZUxpbmVUb0hvcml6b250
YWxTZWdtZW50RVJmCiBfX1pON1dlYkNvcmUyMFNWR1BhdGhTZWdMaXN0U291cmNlMjZwYXJzZUxp
bmVUb1ZlcnRpY2FsU2VnbWVudEVSZgogX19aTks3V2ViQ29yZTMwU1ZHQW5pbWF0ZWRMaXN0UHJv
cGVydHlUZWFyT2ZmSU5TXzE0U1ZHUGF0aFNlZ0xpc3RFRTIxaXNBbmltYXRlZExpc3RUZWFyT2Zm
RXYKQEAgLTMwNjg4LDE1ICszMDY4OCwxNSBAQCBfX1pON1dlYkNvcmUyOVNWR1BhdGhTZWdMaXN0
UHJvcGVydHlUZWFyCiBfX1pON1dlYkNvcmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xNFNWR1BhdGhT
ZWdMaXN0RUUxN3JlcGxhY2VJdGVtVmFsdWVzRVJTMV9SS04zV1RGNlJlZlB0cklOU18xMFNWR1Bh
dGhTZWdFRUVqUmkKIF9fWk43V2ViQ29yZTU4anNTVkdQYXRoRWxlbWVudFByb3RvdHlwZUZ1bmN0
aW9uQ3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbEVQTjNKU0M5RXhlY1N0YXRlRQogX19aTjdXZWJD
b3JlNDFqc1NWR1BvaW50TGlzdFByb3RvdHlwZUZ1bmN0aW9uSW5pdGlhbGl6ZUVQTjNKU0M5RXhl
Y1N0YXRlRQotX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExpc3RF
RTI3aW5pdGlhbGl6ZVZhbHVlc0FuZFdyYXBwZXJzRVBOU18zMFNWR0FuaW1hdGVkTGlzdFByb3Bl
cnR5VGVhck9mZklTMV9FRU4zV1RGMTBQYXNzUmVmUHRySU5TXzE4U1ZHUHJvcGVydHlUZWFyT2Zm
SU5TXzEwRmxvYXRQb2ludEVFRUVFUmkKK19fWk43V2ViQ29yZTE1U1ZHTGlzdFByb3BlcnR5SU5T
XzEyU1ZHUG9pbnRMaXN0RUUyN2luaXRpYWxpemVWYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdB
bmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNW
R1Byb3BlcnR5VGVhck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRVJpCiBfX1pON1dlYkNvcmUx
NFNWR1BvbHlFbGVtZW50MzZzeW5jaHJvbml6ZUV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRFdgog
X19aTjdXZWJDb3JlNDdqc1NWR1BvaW50TGlzdFByb3RvdHlwZUZ1bmN0aW9uSW5zZXJ0SXRlbUJl
Zm9yZUVQTjNKU0M5RXhlY1N0YXRlRQotX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNf
MTJTVkdQb2ludExpc3RFRTMzaW5zZXJ0SXRlbUJlZm9yZVZhbHVlc0FuZFdyYXBwZXJzRVBOU18z
MFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVhck9mZklTMV9FRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5TXzEwRmxvYXRQb2ludEVFRUVFalJpCitfX1pON1dlYkNv
cmUxNVNWR0xpc3RQcm9wZXJ0eUlOU18xMlNWR1BvaW50TGlzdEVFMzNpbnNlcnRJdGVtQmVmb3Jl
VmFsdWVzQW5kV3JhcHBlcnNFUE5TXzMwU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmSVMx
X0VFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTNHcmFwaGlj
c1BvaW50RUVFRUVqUmkKIF9fWk5LN1dlYkNvcmUzMFNWR0FuaW1hdGVkTGlzdFByb3BlcnR5VGVh
ck9mZklOU18xMlNWR1BvaW50TGlzdEVFMjFpc0FuaW1hdGVkTGlzdFRlYXJPZmZFdgotX19aTjdX
ZWJDb3JlMjJTVkdMaXN0UHJvcGVydHlUZWFyT2ZmSU5TXzEyU1ZHUG9pbnRMaXN0RUUxOHJlbW92
ZUl0ZW1Gcm9tTGlzdEVQTlNfMThTVkdQcm9wZXJ0eVRlYXJPZmZJTlNfMTBGbG9hdFBvaW50RUVF
YgotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEwRmxvYXRQb2ludEVMbTBFRTZpbnNlcnRJUzJf
RUV2bVJLVF8KK19fWk43V2ViQ29yZTIyU1ZHTGlzdFByb3BlcnR5VGVhck9mZklOU18xMlNWR1Bv
aW50TGlzdEVFMThyZW1vdmVJdGVtRnJvbUxpc3RFUE5TXzE4U1ZHUHJvcGVydHlUZWFyT2ZmSU5T
XzEzR3JhcGhpY3NQb2ludEVFRWIKK19fWk4zV1RGNlZlY3RvcklON1dlYkNvcmUxM0dyYXBoaWNz
UG9pbnRFTG0wRUU2aW5zZXJ0SVMyX0VFdm1SS1RfCiBfX1pON1dlYkNvcmU0MmpzU1ZHUG9pbnRM
aXN0UHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlSXRlbUVQTjNKU0M5RXhlY1N0YXRlRQotX19aTjdX
ZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExpc3RFRTI4cmVwbGFjZUl0ZW1W
YWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmZJUzFf
RUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5VGVhck9mZklOU18xMEZsb2F0UG9p
bnRFRUVFRWpSaQorX19aTjdXZWJDb3JlMTVTVkdMaXN0UHJvcGVydHlJTlNfMTJTVkdQb2ludExp
c3RFRTI4cmVwbGFjZUl0ZW1WYWx1ZXNBbmRXcmFwcGVyc0VQTlNfMzBTVkdBbmltYXRlZExpc3RQ
cm9wZXJ0eVRlYXJPZmZJUzFfRUVOM1dURjEwUGFzc1JlZlB0cklOU18xOFNWR1Byb3BlcnR5VGVh
ck9mZklOU18xM0dyYXBoaWNzUG9pbnRFRUVFRWpSaQogX19aTjdXZWJDb3JlNDlqc1NWR1BhdGhF
bGVtZW50UHJvdG90eXBlRnVuY3Rpb25HZXRQb2ludEF0TGVuZ3RoRVBOM0pTQzlFeGVjU3RhdGVF
CiBfX1pON1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MTZnZXRQb2ludEF0TGVuZ3RoRWYKIF9fWk43
V2ViQ29yZTM5anNTVkdUZXh0Q29udGVudEVsZW1lbnRSZXF1aXJlZEZlYXR1cmVzRVBOM0pTQzlF
eGVjU3RhdGVFTlMwXzdKU1ZhbHVlRVJLTlMwXzEwSWRlbnRpZmllckUKQEAgLTMwNzg1LDcgKzMw
Nzg1LDcgQEAgX19aTjdXZWJDb3JlMTNTVkdTVkdFbGVtZW50MTFkZXNlbGVjdEFsbAogX19aTjdX
ZWJDb3JlMzBzZXRKU1NWR1NWR0VsZW1lbnRDdXJyZW50U2NhbGVFUE4zSlNDOUV4ZWNTdGF0ZUVQ
TlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxM1NWR1NWR0VsZW1lbnQx
NXNldEN1cnJlbnRTY2FsZUVmCiBfX1pOSzdXZWJDb3JlMTlTVkdQYXRoU2VnQ2xvc2VQYXRoMTlw
YXRoU2VnVHlwZUFzTGV0dGVyRXYKLV9fWk43V2ViQ29yZTIxU1ZHUGF0aFNlZ0xpc3RCdWlsZGVy
NWFyY1RvRWZmZmJiUktOU18xMEZsb2F0UG9pbnRFTlNfMThQYXRoQ29vcmRpbmF0ZU1vZGVFCitf
X1pON1dlYkNvcmUyMVNWR1BhdGhTZWdMaXN0QnVpbGRlcjVhcmNUb0VmZmZiYlJLTlNfMTNHcmFw
aGljc1BvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2RlRQogX19aTjdXZWJDb3JlMTRTVkdQYXRo
RWxlbWVudDIyY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbEVmZmZmZmJiTlNfMTRTVkdQYXRoU2VnUm9s
ZUUKIF9fWk5LN1dlYkNvcmUxNlNWR1BhdGhTZWdBcmNSZWwxMXBhdGhTZWdUeXBlRXYKIF9fWk43
V2ViQ29yZTEzY3JlYXRlV3JhcHBlcklOU18xOEpTU1ZHUGF0aFNlZ0FyY1JlbEVOU18xNlNWR1Bh
dGhTZWdBcmNSZWxFRUVQTlNfMTJKU0RPTVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdK
U0RPTUdsb2JhbE9iamVjdEVQVDBfCkBAIC0zMDg1MiwxMSArMzA4NTIsMTEgQEAgX19aTjdXZWJD
b3JlMTNjcmVhdGVXcmFwcGVySU5TXzE1SlNTVkdTZQogX19aTjdXZWJDb3JlMTVKU1NWR1NldEVs
ZW1lbnRDMUVQTjNKU0M5U3RydWN0dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzEzU1ZHU2V0RWxlbWVudEVFRQogX19aTjdXZWJDb3JlMTJjYWNoZVdyYXBw
ZXJJTlNfMTNTVkdTZXRFbGVtZW50RUVFdlBOU18xNURPTVdyYXBwZXJXb3JsZEVQVF9QTlNfMTJK
U0RPTVdyYXBwZXJFCiBfX1pON1dlYkNvcmUxNUpTU1ZHU2V0RWxlbWVudDE4Z2V0T3duUHJvcGVy
dHlTbG90RVBOM0pTQzlFeGVjU3RhdGVFUktOUzFfMTBJZGVudGlmaWVyRVJOUzFfMTJQcm9wZXJ0
eVNsb3RFCi1fX1pOM1dURjlIYXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5T
XzlGbG9hdEhhc2hJZEVFTlNfMTBIYXNoVHJhaXRzSWRFRVM2X0UzYWRkSWRkTlNfMjJJZGVudGl0
eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVFRVN0NHBhaXJJTlNfMTdIYXNoVGFibGVJdGVyYXRvcklk
ZFMyX1M0X1M2X1M2X0VFYkVSS1RfUktUMF8KLV9fWk4zV1RGOUhhc2hUYWJsZUlkZE5TXzE3SWRl
bnRpdHlFeHRyYWN0b3JJZEVFTlNfOUZsb2F0SGFzaElkRUVOU18xMEhhc2hUcmFpdHNJZEVFUzZf
RTZyZWhhc2hFaQorX19aTjNXVEY5SGFzaFRhYmxlSWRkTlNfMTdJZGVudGl0eUV4dHJhY3Rvcklk
RUVOU18xMkdyYXBoaWNzSGFzaElkRUVOU18xMEhhc2hUcmFpdHNJZEVFUzZfRTNhZGRJZGROU18y
MklkZW50aXR5SGFzaFRyYW5zbGF0b3JJZGRTNF9FRUVFU3Q0cGFpcklOU18xN0hhc2hUYWJsZUl0
ZXJhdG9ySWRkUzJfUzRfUzZfUzZfRUViRVJLVF9SS1QwXworX19aTjNXVEY5SGFzaFRhYmxlSWRk
TlNfMTdJZGVudGl0eUV4dHJhY3RvcklkRUVOU18xMkdyYXBoaWNzSGFzaElkRUVOU18xMEhhc2hU
cmFpdHNJZEVFUzZfRTZyZWhhc2hFaQogX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTE0U1ZHU01J
TEVsZW1lbnQ5Q29uZGl0aW9uRUxtMEVFMTRzaHJpbmtDYXBhY2l0eUVtCi1fX1pOM1dURjlIYXNo
VGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzlGbG9hdEhhc2hJZEVFTlNfMTBI
YXNoVHJhaXRzSWRFRVM2X0UxNmxvb2t1cEZvcldyaXRpbmdFUktkCi1fX1pOM1dURjlIYXNoVGFi
bGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzlGbG9hdEhhc2hJZEVFTlNfMTBIYXNo
VHJhaXRzSWRFRVM2X0U0ZmluZElkTlNfMjJJZGVudGl0eUhhc2hUcmFuc2xhdG9ySWRkUzRfRUVF
RU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJZGRTMl9TNF9TNl9TNl9FRVJLVF8KK19fWk4zV1RGOUhh
c2hUYWJsZUlkZE5TXzE3SWRlbnRpdHlFeHRyYWN0b3JJZEVFTlNfMTJHcmFwaGljc0hhc2hJZEVF
TlNfMTBIYXNoVHJhaXRzSWRFRVM2X0UxNmxvb2t1cEZvcldyaXRpbmdFUktkCitfX1pOM1dURjlI
YXNoVGFibGVJZGROU18xN0lkZW50aXR5RXh0cmFjdG9ySWRFRU5TXzEyR3JhcGhpY3NIYXNoSWRF
RU5TXzEwSGFzaFRyYWl0c0lkRUVTNl9FNGZpbmRJZE5TXzIySWRlbnRpdHlIYXNoVHJhbnNsYXRv
cklkZFM0X0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySWRkUzJfUzRfUzZfUzZfRUVSS1RfCiBf
X1pTdDEzX19oZWFwX3NlbGVjdElQTjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM19TM18KIF9fWlN0
OW1ha2VfaGVhcElQTjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM18KIF9fWlN0OXNvcnRfaGVhcElQ
TjdXZWJDb3JlOFNNSUxUaW1lRUV2VF9TM18KQEAgLTMwODg3LDEyICszMDg4NywxMiBAQCBfX1pO
N1dlYkNvcmUxNFNWR1BhdGhFbGVtZW50MThnZXRQYXRoU2VnCiBfX1pON1dlYkNvcmUyMFNWR1Bh
dGhQYXJzZXJGYWN0b3J5NDJnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJl
YW1FUE5TXzE3U1ZHUGF0aEJ5dGVTdHJlYW1FZlJtCiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2
ZXJzYWxTdGF0ZUJ1aWxkZXJDMUV2CiBfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXIxNnNldERlc2lyZWRMZW5ndGhFZgotX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyNm1vdmVUb0VSS05TXzEwRmxvYXRQb2ludEViTlNfMThQYXRoQ29vcmRp
bmF0ZU1vZGVFCitfX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI2bW92
ZVRvRVJLTlNfMTNHcmFwaGljc1BvaW50RWJOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43
V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjE3Y29udGludWVDb25zdW1pbmdF
dgogX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyMTZwYXRoU2VnbWVu
dEluZGV4RXYKIF9fWk43V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjdjbGVh
bnVwRXYKIF9fWk43V2ViQ29yZTI4U1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjI1aW5jcmVt
ZW50UGF0aFNlZ21lbnRDb3VudEV2Ci1fX1pON1dlYkNvcmUyOFNWR1BhdGhUcmF2ZXJzYWxTdGF0
ZUJ1aWxkZXI2bGluZVRvRVJLTlNfMTBGbG9hdFBvaW50RU5TXzE4UGF0aENvb3JkaW5hdGVNb2Rl
RQorX19aTjdXZWJDb3JlMjhTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyNmxpbmVUb0VSS05T
XzEzR3JhcGhpY3NQb2ludEVOU18xOFBhdGhDb29yZGluYXRlTW9kZUUKIF9fWk43V2ViQ29yZUwx
NnZrZXJuQ29uc3RydWN0b3JFUktOU18xM1F1YWxpZmllZE5hbWVFUE5TXzhEb2N1bWVudEViCiBf
X1pON1dlYkNvcmUxNVNWR1ZLZXJuRWxlbWVudDZjcmVhdGVFUktOU18xM1F1YWxpZmllZE5hbWVF
UE5TXzhEb2N1bWVudEUKIF9fWk43V2ViQ29yZUwyOGNyZWF0ZVNWR1ZLZXJuRWxlbWVudFdyYXBw
ZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xMFNWR0VsZW1lbnRFRUUKQEAgLTMxMDEzLDcgKzMxMDEzLDcgQEAgX19aTjdXZWJD
b3JlMzFqc1NWR1VzZUVsZW1lbnRSZXF1aXJlZEZlYQogX19aTks3V2ViQ29yZTE1UmVuZGVyU1ZH
SW5saW5lMTltYXBMb2NhbFRvQ29udGFpbmVyRVBOU18yMFJlbmRlckJveE1vZGVsT2JqZWN0RWJi
Uk5TXzE0VHJhbnNmb3JtU3RhdGVFCiBfX1pON1dlYkNvcmU1M2pzU1ZHU1ZHRWxlbWVudFByb3Rv
dHlwZUZ1bmN0aW9uR2V0VHJhbnNmb3JtVG9FbGVtZW50RVBOM0pTQzlFeGVjU3RhdGVFCiBfX1pU
djBfbjU2X05LN1dlYkNvcmUyNVNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ2Z2V0Q1RNRU5TXzEy
U1ZHTG9jYXRhYmxlMTlTdHlsZVVwZGF0ZVN0cmF0ZWd5RQotX19aTks3V2ViQ29yZTRGb250MzJz
ZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWlpaQorX19aTks3V2ViQ29yZTRGb250MzJzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5n
U1ZHRm9udEVSS05TXzdUZXh0UnVuRVJLTlNfMTNHcmFwaGljc1BvaW50RWlpaQogX19aTks3V2Vi
Q29yZTEzUmVuZGVyU1ZHVGV4dDE0Zmlyc3RMaW5lQmxvY2tFdgogX19aTjdXZWJDb3JlMTVTVkdW
S2VybkVsZW1lbnQyNGJ1aWxkVmVydGljYWxLZXJuaW5nUGFpckVSTjNXVEY2VmVjdG9ySU5TXzE0
U1ZHS2VybmluZ1BhaXJFTG0wRUVFCiBfX1pOSzdXZWJDb3JlMTZTVkdDdXJzb3JFbGVtZW50Mjdh
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHNFUk4zV1RGMTFMaXN0SGFzaFNldElOU180S1VSTEVM
bTI1NkVOU184S1VSTEhhc2hFRUUKQEAgLTMxMDczLDcgKzMxMDczLDcgQEAgX19aTjNXVEY5SGFz
aFRhYmxlSVBON1dlYkNvcmUxMlJlbmRlck9iagogX19aTjNXVEY5SGFzaFRhYmxlSVBON1dlYkNv
cmUxMlJlbmRlck9iamVjdEVTdDRwYWlySVMzX2lFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzVf
RUVOU183UHRySGFzaElTM19FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMz
X0VFTlNCX0lpRUVFRVNDX0U0ZmluZElTM19OU18yMklkZW50aXR5SGFzaFRyYW5zbGF0b3JJUzNf
UzVfUzlfRUVFRU5TXzE3SGFzaFRhYmxlSXRlcmF0b3JJUzNfUzVfUzdfUzlfU0VfU0NfRUVSS1Rf
CiBfX1pOM1dURjlIYXNoVGFibGVJUE43V2ViQ29yZTEyUmVuZGVyT2JqZWN0RVN0NHBhaXJJUzNf
aUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNV9FRU5TXzdQdHJIYXNoSVMzX0VFTlNfMTRQYWly
SGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzNfRUVOU0JfSWlFRUVFU0NfRTZleHBhbmRFdgog
X19aTks3V2ViQ29yZTI2TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24xNmdldE9wZXJhdGlvblR5
cGVFdgotX19aTks3V2ViQ29yZTIwVHJhbnNmb3JtYXRpb25NYXRyaXg4bWFwUG9pbnRFUktOU18x
MkZsb2F0UG9pbnQzREUKK19fWk5LN1dlYkNvcmUyMFRyYW5zZm9ybWF0aW9uTWF0cml4OG1hcFBv
aW50RVJLTlNfMTVHcmFwaGljc1BvaW50M0RFCiBfX1pOSzdXZWJDb3JlMjRTaG9ydGhhbmRQcm9w
ZXJ0eVdyYXBwZXI2ZXF1YWxzRVBLTlNfMTFSZW5kZXJTdHlsZUVTM18KIF9fWk5LN1dlYkNvcmUy
NFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcjVibGVuZEVQS05TXzEzQW5pbWF0aW9uQmFzZUVQTlNf
MTFSZW5kZXJTdHlsZUVQS1M0X1M3X2QKIF9fWk5LN1dlYkNvcmUyNUZpbGxMYXllcnNQcm9wZXJ0
eVdyYXBwZXI1YmxlbmRFUEtOU18xM0FuaW1hdGlvbkJhc2VFUE5TXzExUmVuZGVyU3R5bGVFUEtT
NF9TN19kCkBAIC0zMTkzMywxNCArMzE5MzMsMTQgQEAgX19aTks3V2ViQ29yZTE5Q2FjaGVkQ1NT
U3R5bGVTaGVldDhlbmNvZAogX19aTjdXZWJDb3JlNkVkaXRvcjM0c2V0TWFya2VkVGV4dE1hdGNo
ZXNBcmVIaWdobGlnaHRlZEViCiBfX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNGb3JU
ZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFuZ2VFampiCiBfX1pOSzdXZWJDb3JlNVJhbmdlMThz
aGFkb3dUcmVlUm9vdE5vZGVFdgotX19aTjdXZWJDb3JlMTNJbmxpbmVUZXh0Qm94MjBwYWludFRl
eHRNYXRjaE1hcmtlckVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU18xMEZsb2F0UG9pbnRFUktO
U18xNERvY3VtZW50TWFya2VyRVBOU18xMVJlbmRlclN0eWxlRVJLTlNfNEZvbnRFCitfX1pON1dl
YkNvcmUxM0lubGluZVRleHRCb3gyMHBhaW50VGV4dE1hdGNoTWFya2VyRVBOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzEzR3JhcGhpY3NQb2ludEVSS05TXzE0RG9jdW1lbnRNYXJrZXJFUE5TXzEx
UmVuZGVyU3R5bGVFUktOU180Rm9udEUKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyMjNyZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0VOU18xNERvY3VtZW50TWFya2VyMTBNYXJr
ZXJUeXBlRQotX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zMWdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtMEVFRQorX19aTks3
V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zMWdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXNF
Uk4zV1RGNlZlY3RvcklOU18xMkdyYXBoaWNzUmVjdEVMbTBFRUUKIF9fWk5LN1dlYkNvcmU1RnJh
bWUxNHNlbGVjdGlvbkltYWdlRWIKIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEw
TlNNZW51SXRlbQogX19aTks3V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtN2VuYWJsZWRFdgogX19a
TjdXZWJDb3JlOUZyYW1lVmlldzEyc2V0TWVkaWFUeXBlRVJLTjNXVEY2U3RyaW5nRQotX19aTjdX
ZWJDb3JlMTJQcmludENvbnRleHQyOGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVFUktOU185
RmxvYXRTaXplRWIKK19fWk43V2ViQ29yZTEyUHJpbnRDb250ZXh0Mjhjb21wdXRlUGFnZVJlY3Rz
V2l0aFBhZ2VTaXplRVJLTlNfMTJHcmFwaGljc1NpemVFYgogX19aTjdXZWJDb3JlMThjb3JyZWN0
ZWRUZXh0Q29sb3JFTlNfNUNvbG9yRVMwXwogX19aTjdXZWJDb3JlN0ludFJlY3Q1c2NhbGVFZgog
X19aTjdXZWJDb3JlMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUMxRVJLTlNfMTVQcm90ZWN0aW9u
U3BhY2VFUktOU18xMENyZWRlbnRpYWxFalJLTlNfMTZSZXNvdXJjZVJlc3BvbnNlRVJLTlNfMTNS
ZXNvdXJjZUVycm9yRQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTk4MCwxMSArOTgwLDYg
QEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3Bw
IFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0
LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCkBAIC05OTIsNiArOTg3
LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzUG9pbnQzRC5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQu
Y3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1NpemUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAgXApAQCAtMTk2NiwxMSArMTk2Niw2IEBAIEhFQURFUlMgKz0g
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUxpZ2h0aW5nTkVPTi5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL2FybS9GRUdhdXNzaWFuQmx1ck5FT04uaCBcCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQuaCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmggXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFNpemUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYW1pbHkuaCBcCkBAIC0xOTgyLDYgKzE5NzcsMTEgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuaCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1F1YWQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0Lmgg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMzRC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIFwKQEAgLTI1MjksMTAg
KzI1MjksMTAgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zs
b2F0UmVjdFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhZGllbnRRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcCBcCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9JY29uUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwIFwKQEAgLTMw
MTcsNyArMzAxNyw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAKICAg
ICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRS
ZWN0Q0cuY3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNH
LmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5j
cHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIFwKICAgICAg
ICAgICAgIHBsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAKIApAQCAtMzAyOSw3ICszMDI5LDcgQEAg
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEpIHsKICAgICAgICAgICAgIHBsYXRmb3Jt
L21hYy9TaGFyZWRCdWZmZXJNYWMubW0gXAogICAgICAgICAgICAgcGxhdGZvcm0vbWFjL0tVUkxN
YWMubW0gXAogICAgICAgICAgICAgcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nTWFjLm1tIFwKLSAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0gXAorICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbSBcCiAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UmVjdE1hYy5tbSBcCiAgICAgICAgICAgICBw
bGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5tbSBcCiAgICAgICAgICAg
ICBwbGF0Zm9ybS9tYWMvV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93Q29udHJvbGxlci5tbSBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBj
b3B5KQpAQCAtMTQyMyw5ICsxNDIzLDkgQEAKICAgICAgICAgICAgICMgdGhlIHNwZWNpZmljIGV4
Y2x1c2lvbnMgaW4gdGhlICJzb3VyY2VzISIgbGlzdCBiZWxvdy4KICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdyZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsn
aW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWNcXC5tbSQnXSwKLSAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hY1xc
Lm1tJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFJlY3RNYWNcXC5tbSQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRmxvYXRTaXplTWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUG9pbnRNYWNcXC5tbSQnXSwKKyAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NSZWN0TWFj
XFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzU2l6ZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hY1xcLmNwcCQnXSwKICAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWNcXC5tbSQn
XSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50UmVj
dE1hY1xcLm1tJCddLApAQCAtMTQ5Miw5ICsxNDkyLDkgQEAKICAgICAgICAgfV0sCiAgICAgICAg
IFsnT1M9PSJtYWMiIGFuZCB1c2Vfc2tpYT09MScsIHsKICAgICAgICAgICAnc291cmNlcy8nOiBb
Ci0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2lu
dENHXFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0Zsb2F0UmVjdENHXFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHXFwuY3BwJCddLAorICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUG9pbnRDR1xcLmNwcCQnXSwKKyAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RD
R1xcLmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc1NpemVDR1xcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHXFwuY3BwJCddLAogICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFJlY3RDR1xcLmNwcCQnXSwKICAgICAgICAg
ICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0dcXC5jcHAkJ10s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjczNDEsNDYgKzI3MzQxLDYgQEAKIAkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvaW50LmNwcCIKLQkJCQkJPgotCQkJCTwv
RmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNz
XEZsb2F0UG9pbnQuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UG9pbnQzRC5jcHAiCi0JCQkJCT4K
LQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xGbG9hdFBvaW50M0QuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQot
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UXVhZC5jcHAiCi0J
CQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xGbG9hdFF1YWQuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8Rmls
ZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0UmVjdC5jcHAi
Ci0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFJlY3QuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8
RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZsb2F0U2l6ZS5j
cHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFNpemUuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJ
CQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEZvbnQuY3Bw
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtMjc1MjksNiArMjc0ODksNDYgQEAKIAkJCQkJPgog
CQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEdyYXBoaWNzUG9pbnQuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NQb2ludC5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NQb2ludDNELmNwcCIKKwkJCQkJPgorCQkJCTwvRmls
ZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdy
YXBoaWNzUG9pbnQzRC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NRdWFkLmNwcCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXEdyYXBoaWNzUXVhZC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhpY3NSZWN0LmNw
cCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzUmVjdC5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcR3JhcGhp
Y3NTaXplLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEdyYXBoaWNzU2l6ZS5oIgorCQkJCQk+CisJCQkJ
PC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3NcR3JhcGhpY3NUeXBlcy5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0yODM1NiwxNCAr
MjgzNTYsMTQgQEAKIAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJ
CQkJPEZpbGUKLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcRmxv
YXRQb2ludENHLmNwcCIKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Y2dcRm9udFBsYXRmb3JtRGF0YS5oIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CiAJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgogCQkJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgogCQkJCQkJCT4KIAkJCQkJCQk8VG9vbAotCQkJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKIAkJCQkJ
CQkvPgogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgpAQCAtMjgzNzEsMTIgKzI4MzcxLDEyIEBACiAJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCiAJCQkJCQkJPgogCQkJCQkJCTxUb29sCi0JCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgogCQkJCQkJCS8+CiAJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZsb2F0UmVjdENHLmNwcCIKKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhZGllbnRDRy5jcHAiCiAJ
CQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJCQlOYW1lPSJEZWJ1Z19DYWly
b19DRkxpdGV8V2luMzIiCkBAIC0yODM5Niw3ICsyODM5Niw3IEBACiAJCQkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEZsb2F0U2l6ZUNHLmNwcCIKKwkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcR3JhcGhpY3NDb250ZXh0Q0cuY3BwIgogCQkJ
CQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgpAQCAtMjg0MTYsNyArMjg0MTYsNyBAQAogCQkJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xGb250UGxhdGZvcm1EYXRhLmgiCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmgiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJCQlOYW1l
PSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCkBAIC0yODQzNiw3ICsyODQzNiw3IEBACiAJCQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCi0JCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYWRpZW50Q0cuY3BwIgorCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc1BvaW50Q0cu
Y3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCiAJCQkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgpAQCAtMjg0NTYsNyArMjg0NTYsNyBAQAogCQkJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc0NvbnRleHRDRy5jcHAiCisJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdyYXBoaWNzUmVjdENH
LmNwcCIKIAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgogCQkJCQkJCU5hbWU9IkRl
YnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKQEAgLTI4NDc2LDE0ICsyODQ3NiwxNCBAQAogCQkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQotCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjZ1xHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVDRy5oIgorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xj
Z1xHcmFwaGljc1NpemVDRy5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
IAkJCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCiAJCQkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCiAJCQkJCQkJPgogCQkJCQkJCTxUb29sCi0JCQkJCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIgorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCQkJ
CS8+CiAJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCQkJPEZpbGVDb25maWd1cmF0aW9u
CkBAIC0yODQ5MSw3ICsyODQ5MSw3IEBACiAJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CiAJCQkJCQkJPgogCQkJCQkJCTxUb29sCi0JCQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29s
IgorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCQkJCS8+CiAJCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgogCQkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTAwMDIyRTY5MTND
RTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMDAyMkU2ODEz
Q0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5o
ICovOyB9OwogCQkwMDE0NjI4QTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAxNDYy
ODgxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCAqLzsgfTsKIAkJMDAx
NDYyOEIxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMDE0NjI4OTEwM0NEMURFMDAwQjIw
REIgLyogT3JpZ2luQWNjZXNzRW50cnkuaCAqLzsgfTsKIAkJMDAzRjFGRUExMUU2QUI0MzAwODI1
OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDAwM0YxRkU5MTFFNkFCNDMwMDgyNThEOSAvKiBVc2VyQ29udGVudFR5
cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTU3LDcgKzU4LDYgQEAKIAkJMDBDQTkzQjUxM0M2Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERvY3Vt
ZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHAg
Ki87IH07CiAJCTAwRDA0NjRBMTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVu
Y2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDBEMDQ2NDgxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNl
ci5jcHAgKi87IH07CiAJCTAwRDA0NjRCMTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDAwRDA0NjQ5MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXIuaCAqLzsgfTsKLQkJMDAwMjJFNjkxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJl
ZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDAwMDIyRTY4MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggKi87IH07CiAJCTA1MkJGQ0U5MTI4QUJGMTUw
MEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZDRTgxMjhBQkYxNTAwRkQzMzhEIC8qIEdl
b2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgKi87IH07CiAJCTA1MkJGQ0VCMTI4QUJGMjEwMEZEMzM4
RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlv
bkNsaWVudE1vY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwNUZENjlFMDEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNUZENjlERjEyODQ1RDQz
MDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIyMyw4ICsyMjMsOCBAQAogCQkwRkQzMDgwRjExN0NGN0U3
MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDgwRDExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJh
bWVCYXNlLmggKi87IH07CiAJCTBGRDMwOEQ1MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJh
bWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
MzA4RDMxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5jcHAgKi87IH07CiAJCTBGRDMw
OEQ2MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDMwOEQ0MTE3RDE2ODQwMEE3OTFGNyAvKiBS
ZW5kZXJJRnJhbWUuaCAqLzsgfTsKLQkJMEZENzIzODIwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0
UXVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
NzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAv
KiBGbG9hdFF1YWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgKi87IH07CisJ
CTBGRDcyMzgyMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgwMEVDOEJEOTMwMENBNURE
NyAvKiBHcmFwaGljc1F1YWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ3MjM4MzBFQzhCRDkzMDBDQTVERDcgLyogR3JhcGhpY3NRdWFkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgx
MEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwICovOyB9OwogCQkwRkY1MDI1QjEw
MkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAyNTkxMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0
eWxlTWVkaWEuaCAqLzsgfTsKIAkJMEZGNTAyNUMxMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxl
TWVkaWEubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkY1MDI1QTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYS5tbSAqLzsgfTsKIAkJMEZG
NTAyNjMxMDJCQTkyQzAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNTAyNjIxMDJCQTkyQjAw
NjZGMzlBIC8qIERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oICovOyB9OwpAQCAtNDMzMyw5ICs0MzMz
LDkgQEAKIAkJQjI2NkNENEQwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjZDRDRCMEMz
QUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUIyNjZDRDRFMEMz
QUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZH
RXhjZXB0aW9uLmggKi87IH07CiAJCUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRD
Ry5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLzsgfTsKLQkJQjI3NTM1
NUEwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFJlY3RDRy5jcHAgKi87IH07Ci0JCUIyNzUzNTVCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFNpemVDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovOyB9OworCQlC
Mjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludENHLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJCMEIwNTM4MTQwMDJD
RTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovOyB9OworCQlCMjc1MzU1QTBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVj
dENHLmNwcCAqLzsgfTsKKwkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6
ZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVDRy5jcHAgKi87IH07CiAJCUIy
NzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bWFnZUNHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291
cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovOyB9OwogCQlC
Mjc1MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBCMDUzODE0MDAyQ0U2NEYg
LyogSW50UG9pbnRDRy5jcHAgKi87IH07CkBAIC00MzQ2LDEyICs0MzQ2LDEyIEBACiAJCUIyNzUz
NTY1MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYg
LyogUERGRG9jdW1lbnRJbWFnZS5oICovOyB9OwogCQlCMjc1MzU2NjBCMDUzODE0MDAyQ0U2NEYg
LyogQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAqLzsgfTsKIAkJQjI3NTM1
NjcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCMjc1MzU2
ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludC5jcHAgKi87IH07Ci0JCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUIyNzUzNTZBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1M0MwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgKi87IH07Ci0J
CUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlCMjc1MzU2QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNFMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovOyB9OwotCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjI3NTM1NjgwQjA1Mzgx
NDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNz
UG9pbnQuY3BwICovOyB9OworCQlCMjc1MzU2OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQ
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3
NTM1M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMjc1MzU2QTBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NSZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyNzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3QuY3Bw
ICovOyB9OworCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzRDBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjI3NTM1NkMwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBo
aWNzU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplLmNwcCAqLzsgfTsKKwkJ
QjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUIyNzUzNTZFMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MDBCMDUzODE0MDAy
Q0U2NEYgLyogSWNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUIyNzUzNTZGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MTBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2UuY3BwICovOyB9OwogCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyog
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MzYyLDkgKzQzNjIsOSBAQAogCQlCMjc1MzU3
NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDcwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1
MzU3NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRTaXplSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUIyNzUzNTc3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRBMEIwNTM4MTQwMDJD
RTY0RiAvKiBDb2xvck1hYy5tbSAqLzsgfTsKLQkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLzsg
fTsKLQkJQjI3NTM1NzkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdE1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRDMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi87IH07Ci0JCUIyNzUzNTdBMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFNpemVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1t
ICovOyB9OworCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludE1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRC
MEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tICovOyB9OworCQlCMjc1MzU3
OTBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzUmVjdE1hYy5tbSAqLzsgfTsKKwkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzU2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyNzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVNYWMubW0g
Ki87IH07CiAJCUIyNzUzNTdCMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRFMEIwNTM4MTQw
MDJDRTY0RiAvKiBJbWFnZU1hYy5tbSAqLzsgfTsKIAkJQjI3NTM1N0MwQjA1MzgxNDAwMkNFNjRG
IC8qIEludFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tICovOyB9
OwogCQlCMjc1MzU3RDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdE1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTUwMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbnRSZWN0TWFjLm1tICovOyB9OwpAQCAtNDQ4NSw4ICs0NDg1LDggQEAKIAkJQjJD
QjkyNjIwQjVCREEwMjAwOUJBQTc4IC8qIERPTVNWR0VsZW1lbnRJbnN0YW5jZS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjVFMEI1QkRBMDIw
MDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2UubW0gKi87IH07CiAJCUIyQ0I5MjYzMEI1
QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkNCOTI1RjBCNUJEQTAyMDA5QkFB
NzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovOyB9OwogCQlCMkNCOTI2NDBCNUJE
QTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I5MjYwMEI1QkRBMDIwMDlCQUE3
OCAvKiBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tICovOyB9OwotCQlCMkUyN0M5RjBCMEYy
QjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBv
aW50M0QuY3BwICovOyB9OwotCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2lu
dDNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUy
N0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdC
IC8qIEdyYXBoaWNzUG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogR3JhcGhpY3NQb2ludDNE
LmNwcCAqLzsgfTsKKwkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQz
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFMjdD
OUUwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0
MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJFNEVDOTQwRDAwQzIyQjAwNDMyNjQzIC8qIFNWR1pvb21FdmVudC5jcHAg
Ki87IH07CiAJCUIyRTRFQzk4MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRTRFQzk1MEQwMEMy
MkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLzsgfTsKIAkJQjJFRDk3NzEwQjFGNTVDRTAw
MjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRUQ5NzcwMEIxRjU1Q0UwMDI1N0QwRiAvKiBHcmFwaGlj
c0NvbnRleHRDRy5jcHAgKi87IH07CkBAIC02NDA0LDYgKzY0MDQsNyBAQAogLyogRW5kIFBCWENv
cHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KKwkJMDAwMjJFNjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwMDE0NjI4ODEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNz
RW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3JpZ2luQWNj
ZXNzRW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMDE0NjI4OTEwM0NE
MURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3JpZ2luQWNjZXNzRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDAzRjFGRTkxMUU2QUI0MzAwODI1OEQ5IC8qIFVzZXJDb250ZW50VHlwZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRUeXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQxNiw3ICs2NDE3LDYgQEAKIAkJMDBDQTkzQjQxM0M2
Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDBEMDQ2NDgxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMEQwNDY0OTEzQzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJl
bmNlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwMDAyMkU2
ODEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9k
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJSZWZlcmVuY2VQ
YXJzZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1MkJG
Q0U4MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsg
cGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50
TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNsaWVu
dE1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3Rh
bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGltZVN0YW1wLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NjAzLDggKzY2MDMsOCBAQAogCQkwRkQzMDgw
RDExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlckZyYW1lQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQzMDhEMzExN0QxNjg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcklGcmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDMwOEQ0MTE3RDE2ODQwMEE3OTFGNyAvKiBSZW5k
ZXJJRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVySUZyYW1l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDcyMzgwMEVDOEJEOTMwMENBNURE
NyAvKiBGbG9hdFF1YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRR
dWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDcyMzgxMEVDOEJEOTMwMENB
NURENyAvKiBGbG9hdFF1YWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmxvYXRRdWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZENzIzODAw
RUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHcmFwaGljc1F1YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1F1YWQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkY1MDI1OTEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRp
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHlsZU1lZGlhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjUwMjVBMTAyQkE5MDEwMDY2RjM5QSAvKiBE
T01TdHlsZU1lZGlhLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NU3R5bGVNZWRpYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNTAyNjIx
MDJCQTkyQjAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01TdHlsZU1lZGlhSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTI0LDkgKzEwOTI0LDkgQEAKIAkJQjI2NkNENEIwQzNBRUM2
NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNjZDRDRDMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdFeGNlcHRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9y
bWF0aW9uTWF0cml4Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50Q0cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdENH
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1MkQwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGbG9hdFNpemVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUz
NTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50Q0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzUG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1Jl
Y3RDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NS
ZWN0Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUyRDBCMDUzODE0
MDAyQ0U2NEYgLyogR3JhcGhpY3NTaXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzU2l6ZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjI3NTM1MzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlQ0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjc1MzUzMTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2VDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VTb3VyY2VDRy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRQb2ludENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnRQb2ludENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTM3LDEy
ICsxMDkzNywxMiBAQAogCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJ
bWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUERGRG9jdW1lbnRJbWFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2
NEYgLyogQ29sb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MzkwQjA1MzgxNDAw
MkNFNjRGIC8qIENvbG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRQb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmxvYXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTNC
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGbG9hdFBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIy
NzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUIyNzUzNTNEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFNpemUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8q
IEdyYXBoaWNzUG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdyYXBoaWNzUG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUz
QjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1JlY3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhp
Y3NSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1JlY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NTaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1
M0YwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJY29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTQxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDk1Myw5ICsxMDk1Myw5IEBACiAJCUIyNzUzNTQ3MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRTaXplLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXpl
SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50U2l6ZUhhc2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NEEwQjA1MzgxNDAwMkNFNjRGIC8q
IENvbG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENv
bG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzU0QjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBGbG9hdFBvaW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0UmVjdE1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
U2l6ZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGbG9h
dFNpemVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTRCMEIwNTM4
MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzUG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1JlY3RNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR3JhcGhpY3NSZWN0
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzU0RDBCMDUzODE0MDAy
Q0U2NEYgLyogR3JhcGhpY3NTaXplTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEdyYXBoaWNzU2l6ZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEltYWdlTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW50UG9pbnRNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTUwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRSZWN0TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEludFJlY3RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTA4MCw4
ICsxMTA4MCw4IEBACiAJCUIyQ0I5MjVFMEI1QkRBMDIwMDlCQUE3OCAvKiBET01TVkdFbGVtZW50
SW5zdGFuY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9N
U1ZHRWxlbWVudEluc3RhbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNC
OTI1RjBCNUJEQTAyMDA5QkFBNzggLyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCOTI2MDBCNUJEQTAyMDA5QkFBNzgg
LyogRE9NU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBET01TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2lu
dDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvaW50
M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkUyN0M5RTBCMEYyQjA5MDBG
MTdDN0IgLyogRmxvYXRQb2ludDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdFBvaW50M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJFMjdDOUQw
QjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NQb2ludDNELmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjJFMjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQz
RC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NQb2ludDNELmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk0MEQwMEMyMkIwMDQzMjY0MyAv
KiBTVkdab29tRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR1pvb21FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTRFQzk1
MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1pvb21FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkU0RUM5NjBEMDBDMjJCMDA0MzI2NDMgLyogU1ZHWm9vbUV2ZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU1ZHWm9vbUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE3ODkyLDE0ICsxNzg5MiwxNCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8s
Ci0JCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8sCi0J
CQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKLQkJCQlC
Mjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAogCQkJCUJDNTND
NjBBMERBNTZDRjEwMDIxRUI1RCAvKiBHcmFkaWVudENHLmNwcCAqLywKIAkJCQk2RTIxQzZDMTEx
MjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgKi8sCiAJCQkJQjJFRDk3
NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLywKIAkJCQk5MzQ5
MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQlBODBE
NjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cu
aCAqLywKKwkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludENHLmNw
cCAqLywKKwkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3Bw
ICovLAorCQkJCUIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVDRy5jcHAg
Ki8sCiAJCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICov
LAogCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAg
Ki8sCiAJCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmgg
Ki8sCkBAIC0xNzkyOCw5ICsxNzkyOCw2IEBACiAJCQkJMzdDMjM2MEYxMDk3RUU3NzAwRUY5Rjcy
IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJCTM3QzIzODFGMTA5OEM4NDIwMEVG
OUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXJBVFNVSS5jcHAgKi8sCiAJCQkJMzdDMjM4MjAx
MDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0LmNwcCAqLywK
LQkJCQlCMjc1MzU0QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLywKLQkJ
CQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovLAotCQkJCUIy
NzUzNTREMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gKi8sCiAJCQkJQjJBRkZD
NzQwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSAqLywKIAkJCQkzN0MyMzYwQTEw
OTdFREVEMDBFRjlGNzIgLyogRm9udENvbXBsZXhUZXh0TWFjLmNwcCAqLywKIAkJCQlCMkFGRkM3
NTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8sCkBAIC0x
NzkzOSw2ICsxNzkzNiw5IEBACiAJCQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBo
UGFnZVRyZWVOb2RlTWFjLmNwcCAqLywKIAkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyog
R3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8sCiAJCQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2
IC8qIEdyYXBoaWNzQ29udGV4dE1hYy5tbSAqLywKKwkJCQlCMjc1MzU0QjBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NQb2ludE1hYy5tbSAqLywKKwkJCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NSZWN0TWFjLm1tICovLAorCQkJCUIyNzUzNTREMEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1NpemVNYWMubW0gKi8sCiAJCQkJQjI3NTM1OEQwQjA1M0E2NjAwMkNFNjRG
IC8qIEljb25NYWMubW0gKi8sCiAJCQkJQjI3NTM1NEUwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdl
TWFjLm1tICovLAogCQkJCUIyNzUzNTRGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludE1hYy5t
bSAqLywKQEAgLTE3OTgzLDE2ICsxNzk4Myw2IEBACiAJCQkJOTM4MkRGNTcxMEE4RDVDOTAwOTI1
NjUyIC8qIENvbG9yU3BhY2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyog
RGFzaEFycmF5LmggKi8sCiAJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRC5oICovLAotCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNw
cCAqLywKLQkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovLAot
CQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLAotCQkJ
CUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLywKLQkJCQkwRkQ3
MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLywKLQkJCQkwRkQ3MjM4MDBF
QzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggKi8sCi0JCQkJQjI3NTM1M0MwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgKi8sCi0JCQkJQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdC5oICovLAotCQkJCUIyNzUzNTNFMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFNpemUuY3BwICovLAotCQkJCUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUu
aCAqLywKIAkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCiAJCQkJ
QjJDM0RBNTAwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnQuaCAqLywKIAkJCQlCQ0I5MkQ0RTEyOTM1
NTBCMDBDODM4N0YgLyogRm9udEJhc2VsaW5lLmggKi8sCkBAIC0xODAzNCw2ICsxODAyNCwxNiBA
QAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywK
IAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJ
CTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCisJ
CQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnQuY3BwICovLAorCQkJ
CUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1BvaW50LmggKi8sCisJCQkJQjJF
MjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5jcHAgKi8sCisJCQkJQjJF
MjdDOUUwQjBGMkIwOTAwRjE3QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5oICovLAorCQkJCTBGRDcy
MzgxMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuY3BwICovLAorCQkJCTBGRDcyMzgw
MEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1YWQuaCAqLywKKwkJCQlCMjc1MzUzQzBCMDUz
ODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmNwcCAqLywKKwkJCQlCMjc1MzUzRDBCMDUzODE0
MDAyQ0U2NEYgLyogR3JhcGhpY3NSZWN0LmggKi8sCisJCQkJQjI3NTM1M0UwQjA1MzgxNDAwMkNF
NjRGIC8qIEdyYXBoaWNzU2l6ZS5jcHAgKi8sCisJCQkJQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRG
IC8qIEdyYXBoaWNzU2l6ZS5oICovLAogCQkJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc1R5cGVzLmNwcCAqLywKIAkJCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3Jh
cGhpY3NUeXBlcy5oICovLAogCQkJCTc3QTE3QTdBMTJGMjg5MEIwMDRFMDJGNiAvKiBHcmFwaGlj
c1R5cGVzM0QuaCAqLywKQEAgLTIxMTk2LDExICsyMTE5NiwxMSBAQAogCQkJCTQ5RUVDREU2MTA1
MDNDMjQwMDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQkM1
RDgyMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDczQkFBMEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFk
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRS
ZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU2OTBCMDUzODE0MDAyQ0U2NEYgLyog
R3JhcGhpY3NQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3
QzdCIC8qIEdyYXBoaWNzUG9pbnQzRC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZENzIzODIwRUM4
QkQ5MzAwQ0E1REQ3IC8qIEdyYXBoaWNzUXVhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjI3NTM1
NkIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ5OTNCRTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDYyMjg3ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2MTBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNDEwNiwxNyArMjQxMDYsMTcgQEAKIAkJCQlBOENGRjA0RDBB
MTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0OUVFQ0RFNTEwNTAzQzI0MDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTZFQkM1RDgxMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0
UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYg
LyogRmxvYXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTc4MEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZENzIzODMw
RUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjc1
MzU2QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUIyNzUzNTVBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlCMjc1MzU3OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJQjI3NTM1NkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXpl
Q0cuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjI3NTM1N0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0U2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUIyNzUzNTY4MEIwNTM4MTQwMDJDRTY0
RiAvKiBHcmFwaGljc1BvaW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRTI3QzlGMEIwRjJC
MDkwMEYxN0M3QiAvKiBHcmFwaGljc1BvaW50M0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3
NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUG9pbnRDRy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogR3JhcGhpY3NQb2ludE1hYy5tbSBp
biBTb3VyY2VzICovLAorCQkJCTBGRDcyMzgzMEVDOEJEOTMwMENBNURENyAvKiBHcmFwaGljc1F1
YWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NkEwQjA1MzgxNDAwMkNFNjRGIC8qIEdy
YXBoaWNzUmVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMjc1MzU1QTBCMDUzODE0MDAyQ0U2
NEYgLyogR3JhcGhpY3NSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjI3NTM1NzkwQjA1
MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzUmVjdE1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUIy
NzUzNTZDMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8qIEdyYXBoaWNzU2l6ZUNHLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUIyNzUzNTdBMEIwNTM4MTQwMDJDRTY0RiAvKiBHcmFwaGljc1NpemVN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9j
dXNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTYwMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTYyMEQwMDZDRDYwMEVG
NkYyNiAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlz
aW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAi
QVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlJbWFnZU1hcExpbmsuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTY4Niw3ICs2ODYsNyBAQCBi
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzT2ZmU2NyCiAgICAgQVNTRVJUKG1fcmVu
ZGVyZXIpOwogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBtX3JlbmRlcmVyLT5hYnNvbHV0ZUNs
aXBwZWRPdmVyZmxvd1JlY3QoKTsKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3JlbmRlcmVyLT5m
cmFtZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7CiAgICAgdmlld1JlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKICAgICBy
ZXR1cm4gdmlld1JlY3QuaXNFbXB0eSgpOwogfQpAQCAtMTQyNiw3ICsxNDI2LDcgQEAgSW50UmVj
dCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZAogICAgIAogICAgIC8vIGFic29sdXRl
Rm9jdXNSaW5nUXVhZHMgd2lsbCBxdWVyeSB0aGUgaGllcmFyY2h5IGJlbG93IHRoaXMgZWxlbWVu
dCwgd2hpY2ggZm9yIGxhcmdlIHdlYnBhZ2VzIGNhbiBiZSB2ZXJ5IHNsb3cuCiAgICAgLy8gRm9y
IGEgd2ViIGFyZWEsIHdoaWNoIHdpbGwgaGF2ZSB0aGUgbW9zdCBlbGVtZW50cyBvZiBhbnkgZWxl
bWVudCwgYWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNlZC4KLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKKyAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiBxdWFkczsKICAgICBpZiAob2JqLT5p
c1RleHQoKSkKICAgICAgICAgdG9SZW5kZXJUZXh0KG9iaiktPmFic29sdXRlUXVhZHMocXVhZHMs
IFJlbmRlclRleHQ6OkNsaXBUb0VsbGlwc2lzKTsKICAgICBlbHNlIGlmIChpc1dlYkFyZWEoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3IucG0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCArNzYsMTAgQEAgbXkg
JXN2Z1R5cGVOZWVkaW5nVGVhck9mZiA9ICgKICAgICAiU1ZHTnVtYmVyIiA9PiAiU1ZHUHJvcGVy
dHlUZWFyT2ZmPGZsb2F0PiIsCiAgICAgIlNWR051bWJlckxpc3QiID0+ICJTVkdMaXN0UHJvcGVy
dHlUZWFyT2ZmPFNWR051bWJlckxpc3Q+IiwKICAgICAiU1ZHUGF0aFNlZ0xpc3QiID0+ICJTVkdQ
YXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZiIsCi0gICAgIlNWR1BvaW50IiA9PiAiU1ZHUHJvcGVy
dHlUZWFyT2ZmPEZsb2F0UG9pbnQ+IiwKKyAgICAiU1ZHUG9pbnQiID0+ICJTVkdQcm9wZXJ0eVRl
YXJPZmY8R3JhcGhpY3NQb2ludD4iLAogICAgICJTVkdQb2ludExpc3QiID0+ICJTVkdMaXN0UHJv
cGVydHlUZWFyT2ZmPFNWR1BvaW50TGlzdD4iLAogICAgICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
IiA9PiAiU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+IiwKLSAgICAi
U1ZHUmVjdCIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+IiwKKyAgICAiU1ZHUmVj
dCIgPT4gIlNWR1Byb3BlcnR5VGVhck9mZjxHcmFwaGljc1JlY3Q+IiwKICAgICAiU1ZHU3RyaW5n
TGlzdCIgPT4gIlNWR1N0YXRpY0xpc3RQcm9wZXJ0eVRlYXJPZmY8U1ZHU3RyaW5nTGlzdD4iLAog
ICAgICJTVkdUcmFuc2Zvcm0iID0+ICJTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHVHJhbnNmb3JtPiIs
CiAgICAgIlNWR1RyYW5zZm9ybUxpc3QiID0+ICJTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFy
T2ZmIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI4Niw3ICsy
ODYsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JTVkdBbmltYXRlZFR5cGUKICAgICAkdHlwZSA9fiBz
L1NWR0FuaW1hdGVkLy87CiAKICAgICBpZiAoJHR5cGUgZXEgIlBvaW50IiBvciAkdHlwZSBlcSAi
UmVjdCIpIHsKLSAgICAgICAgJGltcGxJbmNsdWRlc3siRmxvYXQkdHlwZS5oIn0gPSAxOworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJHcmFwaGljcyR0eXBlLmgifSA9IDE7CiAgICAgfSBlbHNpZiAo
JHR5cGUgZXEgIlN0cmluZyIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZvcm1TdHJp
bmcuaCJ9ID0gMTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5
KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHN1YiBHZXRTVkdQcm9wZXJ0eVR5cGVzCiAgICAgfQogCiAg
ICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgJHN2Z1Byb3BlcnR5VHlwZSA9ICJT
VkdQb2ludCIgaWYgJHN2Z1Byb3BlcnR5VHlwZSBlcSAiRmxvYXRQb2ludCI7CisgICAgICAgICRz
dmdQcm9wZXJ0eVR5cGUgPSAiU1ZHUG9pbnQiIGlmICRzdmdQcm9wZXJ0eVR5cGUgZXEgIkdyYXBo
aWNzUG9pbnQiOwogICAgIH0KIAogICAgIHJldHVybiAoJHN2Z1Byb3BlcnR5VHlwZSwgJHN2Z0xp
c3RQcm9wZXJ0eVR5cGUsICRzdmdOYXRpdmVUeXBlKTsKQEAgLTI3NSw3ICsyNzUsNyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnRlbXBs
YXRlPHR5cGVuYW1lIFByb3BlcnR5VHlwZT4gY2xhc3MgU1ZHTGlzdFByb3BlcnR5VGVhck9mZjtc
biIpOwogICAgICAgICB9CiAgICAgfQotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbmNsYXNz
IEZsb2F0UmVjdDtcbiIpIGlmICRzdmdQcm9wZXJ0eVR5cGUgJiYgJHN2Z1Byb3BlcnR5VHlwZSBl
cSAiRmxvYXRSZWN0IjsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG5jbGFzcyBHcmFwaGlj
c1JlY3Q7XG4iKSBpZiAkc3ZnUHJvcGVydHlUeXBlICYmICRzdmdQcm9wZXJ0eVR5cGUgZXEgIkdy
YXBoaWNzUmVjdCI7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuY2xhc3MgJGNsYXNzTmFt
ZSB7XG4iKTsKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHVibGljOlxuIik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAj
aW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhD
YW52YXNHcmFkaWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVl
Ojpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENTU0NhbnZh
c1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0
JiBjaGFuZ2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENh
bnZhc0VsZW1lbnQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGNoYW5nZWRSZWN0KQogewogICAgIElu
dFJlY3QgaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdCk7CiAg
ICAgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2NsaWVu
dHMuZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVj
dCYgY2hhbmdlZFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52
YXNFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBjaGFuZ2VkUmVjdCk7CiAgICAgdmlydHVh
bCB2b2lkIGNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZv
aWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIs
MTIgKzE0MiwxMiBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50CiAg
ICAgZmxvYXQgZ3JhZGllbnRMZW5ndGggPSAwOwogICAgIGJvb2wgY29tcHV0ZWRHcmFkaWVudExl
bmd0aCA9IGZhbHNlOwogICAgIAotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRTdGFydCA9IGdyYWRp
ZW50LT5wMCgpOwotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7CisgICAgR3JhcGhpY3NQb2lu
dCBncmFkaWVudFN0YXJ0ID0gZ3JhZGllbnQtPnAwKCk7CisgICAgR3JhcGhpY3NQb2ludCBncmFk
aWVudEVuZDsKICAgICBpZiAoaXNMaW5lYXJHcmFkaWVudCgpKQogICAgICAgICBncmFkaWVudEVu
ZCA9IGdyYWRpZW50LT5wMSgpOwogICAgIGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnQoKSkKLSAg
ICAgICAgZ3JhZGllbnRFbmQgPSBncmFkaWVudFN0YXJ0ICsgRmxvYXRTaXplKGdyYWRpZW50LT5l
bmRSYWRpdXMoKSwgMCk7CisgICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEdy
YXBoaWNzU2l6ZShncmFkaWVudC0+ZW5kUmFkaXVzKCksIDApOwogICAgICAgICAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTR3Jh
ZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHZv
aWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAgICAgICAgICAgIGVsc2Ug
aWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1VuaXRUeXBlTGVuZ3RoKHR5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgZmxvYXQgbGVuZ3RoID0gc3RvcC5tX3Bvc2l0aW9uLT5jb21wdXRlTGVuZ3RoPGZs
b2F0PihzdHlsZSwgcm9vdFN0eWxlLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQpOwor
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUgZ3JhZGllbnRTaXplKGdyYWRpZW50U3Rh
cnQgLSBncmFkaWVudEVuZCk7CiAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50TGVuZ3RoID0g
Z3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IChncmFkaWVudExlbmd0aCA+IDApID8gbGVuZ3Ro
IC8gZ3JhZGllbnRMZW5ndGggOiAwOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgQ1NTR3JhZGll
bnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQKICAgICAgICAgICAgIC8vIHRvIHJlcGVhdCBvdXQg
dG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KICAgICAgICAgICAgIGlmIChpc1JhZGlhbEdyYWRp
ZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsK
LSAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0
IC0gZ3JhZGllbnRFbmQpOworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUgZ3JhZGll
bnRTaXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7CiAgICAgICAgICAgICAgICAgICAg
IGdyYWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzEwLDEwICszMTAsMTAgQEAgdm9pZCBD
U1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKQogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9m
ZnNldCA9IChzdG9wc1tpXS5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKIAotICAgICAg
ICAgICAgRmxvYXRQb2ludCBwMCA9IGdyYWRpZW50LT5wMCgpOwotICAgICAgICAgICAgRmxvYXRQ
b2ludCBwMSA9IGdyYWRpZW50LT5wMSgpOwotICAgICAgICAgICAgZ3JhZGllbnQtPnNldFAwKEZs
b2F0UG9pbnQocDAueCgpICsgZmlyc3RPZmZzZXQgKiAocDEueCgpIC0gcDAueCgpKSwgcDAueSgp
ICsgZmlyc3RPZmZzZXQgKiAocDEueSgpIC0gcDAueSgpKSkpOwotICAgICAgICAgICAgZ3JhZGll
bnQtPnNldFAxKEZsb2F0UG9pbnQocDEueCgpICsgKGxhc3RPZmZzZXQgLSAxKSAqIChwMS54KCkg
LSBwMC54KCkpLCBwMS55KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLnkoKSAtIHAwLnkoKSkp
KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcDAgPSBncmFkaWVudC0+cDAoKTsKKyAgICAg
ICAgICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBncmFkaWVudC0+cDEoKTsKKyAgICAgICAgICAgIGdy
YWRpZW50LT5zZXRQMChHcmFwaGljc1BvaW50KHAwLngoKSArIGZpcnN0T2Zmc2V0ICogKHAxLngo
KSAtIHAwLngoKSksIHAwLnkoKSArIGZpcnN0T2Zmc2V0ICogKHAxLnkoKSAtIHAwLnkoKSkpKTsK
KyAgICAgICAgICAgIGdyYWRpZW50LT5zZXRQMShHcmFwaGljc1BvaW50KHAxLngoKSArIChsYXN0
T2Zmc2V0IC0gMSkgKiAocDEueCgpIC0gcDAueCgpKSwgcDEueSgpICsgKGxhc3RPZmZzZXQgLSAx
KSAqIChwMS55KCkgLSBwMC55KCkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNSYWRpYWxHcmFk
aWVudCgpKSB7CiAgICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2FsaW5nIHRoZSBwb2ludHMg
PCAwLCB3ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29yZGluZyB0byB0aGUgbGFy
Z2VzdCBwb2ludC4KICAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsKQEAgLTM5NSw5
ICszOTUsOSBAQCBzdGF0aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoQ1NTUHJpbWl0CiAgICAg
fQogfQogCi1GbG9hdFBvaW50IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVFbmRQb2ludChDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QsIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQsIFJlbmRlclN0
eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K0dyYXBoaWNzUG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVuZFBvaW50KENTU1ByaW1p
dGl2ZVZhbHVlKiBmaXJzdCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBJbnRTaXplJiBzaXplKQogewot
ICAgIEZsb2F0UG9pbnQgcmVzdWx0OworICAgIEdyYXBoaWNzUG9pbnQgcmVzdWx0OwogCiAgICAg
aWYgKGZpcnN0KQogICAgICAgICByZXN1bHQuc2V0WChwb3NpdGlvbkZyb21WYWx1ZShmaXJzdCwg
c3R5bGUsIHJvb3RTdHlsZSwgc2l6ZSwgdHJ1ZSkpOwpAQCAtNDczLDcgKzQ3Myw3IEBAIFN0cmlu
ZyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjc3NUZXh0KCkKIH0KIAogLy8gQ29tcHV0ZSB0aGUg
ZW5kcG9pbnRzIHNvIHRoYXQgYSBncmFkaWVudCBvZiB0aGUgZ2l2ZW4gYW5nbGUgY292ZXJzIGEg
Ym94IG9mIHRoZSBnaXZlbiBzaXplLgotc3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZs
b2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRTaXplJiBzaXplLCBGbG9hdFBvaW50JiBmaXJzdFBvaW50
LCBGbG9hdFBvaW50JiBzZWNvbmRQb2ludCkKK3N0YXRpYyB2b2lkIGVuZFBvaW50c0Zyb21Bbmds
ZShmbG9hdCBhbmdsZURlZywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NQb2ludCYgZmly
c3RQb2ludCwgR3JhcGhpY3NQb2ludCYgc2Vjb25kUG9pbnQpCiB7CiAgICAgYW5nbGVEZWcgPSBm
bW9kZihhbmdsZURlZywgMzYwKTsKICAgICBpZiAoYW5nbGVEZWcgPCAwKQpAQCAtNTEyLDcgKzUx
Miw3IEBAIHN0YXRpYyB2b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9hdCBhbmcKICAgICAvLyBD
b21wdXRlIHN0YXJ0IGNvcm5lciByZWxhdGl2ZSB0byBjZW50ZXIuCiAgICAgZmxvYXQgaGFsZkhl
aWdodCA9IHNpemUuaGVpZ2h0KCkgLyAyOwogICAgIGZsb2F0IGhhbGZXaWR0aCA9IHNpemUud2lk
dGgoKSAvIDI7Ci0gICAgRmxvYXRQb2ludCBlbmRDb3JuZXI7CisgICAgR3JhcGhpY3NQb2ludCBl
bmRDb3JuZXI7CiAgICAgaWYgKGFuZ2xlRGVnIDwgOTApCiAgICAgICAgIGVuZENvcm5lci5zZXQo
aGFsZldpZHRoLCBoYWxmSGVpZ2h0KTsKICAgICBlbHNlIGlmIChhbmdsZURlZyA8IDE4MCkKQEAg
LTUzOSw4ICs1MzksOCBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFkaWVudFZh
CiAgICAgCiAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKIAotICAgIEZsb2F0UG9pbnQgZmly
c3RQb2ludDsKLSAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQg
Zmlyc3RQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHNlY29uZFBvaW50OwogICAgIGlmIChtX2Fu
Z2xlKSB7CiAgICAgICAgIGZsb2F0IGFuZ2xlID0gbV9hbmdsZS0+Z2V0RmxvYXRWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyk7CiAgICAgICAgIGVuZFBvaW50c0Zyb21BbmdsZShhbmds
ZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQpOwpAQCAtNjQ5LDE5ICs2NDksMTkgQEAg
ZmxvYXQgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6cmVzb2x2ZVJhZAogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXN0YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb25zdCBGbG9h
dFBvaW50JiBwLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0UG9pbnQmIGNvcm5lcikKK3N0
YXRpYyBmbG9hdCBkaXN0YW5jZVRvQ2xvc2VzdENvcm5lcihjb25zdCBHcmFwaGljc1BvaW50JiBw
LCBjb25zdCBHcmFwaGljc1NpemUmIHNpemUsIEdyYXBoaWNzUG9pbnQmIGNvcm5lcikKIHsKLSAg
ICBGbG9hdFBvaW50IHRvcExlZnQ7Ci0gICAgZmxvYXQgdG9wTGVmdERpc3RhbmNlID0gRmxvYXRT
aXplKHAgLSB0b3BMZWZ0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgdG9w
TGVmdDsKKyAgICBmbG9hdCB0b3BMZWZ0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcExl
ZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAKLSAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHNpemUud2lk
dGgoKSwgMCk7Ci0gICAgZmxvYXQgdG9wUmlnaHREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gdG9w
UmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BSaWdodChzaXpl
LndpZHRoKCksIDApOworICAgIGZsb2F0IHRvcFJpZ2h0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUo
cCAtIHRvcFJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21M
ZWZ0KDAsIHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbUxlZnREaXN0YW5jZSA9IEZs
b2F0U2l6ZShwIC0gYm90dG9tTGVmdCkuZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1Bv
aW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5oZWlnaHQoKSk7CisgICAgZmxvYXQgYm90dG9tTGVmdERp
c3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0b21MZWZ0KS5kaWFnb25hbExlbmd0aCgpOwog
Ci0gICAgRmxvYXRQb2ludCBib3R0b21SaWdodChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OwotICAgIGZsb2F0IGJvdHRvbVJpZ2h0RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbVJp
Z2h0KS5kaWFnb25hbExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgYm90dG9tUmlnaHQoc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNl
ID0gR3JhcGhpY3NTaXplKHAgLSBib3R0b21SaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAg
IGNvcm5lciA9IHRvcExlZnQ7CiAgICAgZmxvYXQgbWluRGlzdGFuY2UgPSB0b3BMZWZ0RGlzdGFu
Y2U7CkBAIC02ODIsMTkgKzY4MiwxOSBAQCBzdGF0aWMgZmxvYXQgZGlzdGFuY2VUb0Nsb3Nlc3RD
b3JuZXIoY29uCiAgICAgcmV0dXJuIG1pbkRpc3RhbmNlOwogfQogCi1zdGF0aWMgZmxvYXQgZGlz
dGFuY2VUb0ZhcnRoZXN0Q29ybmVyKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgRmxvYXRQb2ludCYgY29ybmVyKQorc3RhdGljIGZsb2F0IGRpc3RhbmNlVG9GYXJ0
aGVzdENvcm5lcihjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25zdCBHcmFwaGljc1NpemUmIHNp
emUsIEdyYXBoaWNzUG9pbnQmIGNvcm5lcikKIHsKLSAgICBGbG9hdFBvaW50IHRvcExlZnQ7Ci0g
ICAgZmxvYXQgdG9wTGVmdERpc3RhbmNlID0gRmxvYXRTaXplKHAgLSB0b3BMZWZ0KS5kaWFnb25h
bExlbmd0aCgpOworICAgIEdyYXBoaWNzUG9pbnQgdG9wTGVmdDsKKyAgICBmbG9hdCB0b3BMZWZ0
RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcExlZnQpLmRpYWdvbmFsTGVuZ3RoKCk7CiAK
LSAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHNpemUud2lkdGgoKSwgMCk7Ci0gICAgZmxvYXQgdG9w
UmlnaHREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gdG9wUmlnaHQpLmRpYWdvbmFsTGVuZ3RoKCk7
CisgICAgR3JhcGhpY3NQb2ludCB0b3BSaWdodChzaXplLndpZHRoKCksIDApOworICAgIGZsb2F0
IHRvcFJpZ2h0RGlzdGFuY2UgPSBHcmFwaGljc1NpemUocCAtIHRvcFJpZ2h0KS5kaWFnb25hbExl
bmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KDAsIHNpemUuaGVpZ2h0KCkpOwot
ICAgIGZsb2F0IGJvdHRvbUxlZnREaXN0YW5jZSA9IEZsb2F0U2l6ZShwIC0gYm90dG9tTGVmdCku
ZGlhZ29uYWxMZW5ndGgoKTsKKyAgICBHcmFwaGljc1BvaW50IGJvdHRvbUxlZnQoMCwgc2l6ZS5o
ZWlnaHQoKSk7CisgICAgZmxvYXQgYm90dG9tTGVmdERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAg
LSBib3R0b21MZWZ0KS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgRmxvYXRQb2ludCBib3R0b21S
aWdodChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIGZsb2F0IGJvdHRvbVJpZ2h0
RGlzdGFuY2UgPSBGbG9hdFNpemUocCAtIGJvdHRvbVJpZ2h0KS5kaWFnb25hbExlbmd0aCgpOwor
ICAgIEdyYXBoaWNzUG9pbnQgYm90dG9tUmlnaHQoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICBmbG9hdCBib3R0b21SaWdodERpc3RhbmNlID0gR3JhcGhpY3NTaXplKHAgLSBib3R0
b21SaWdodCkuZGlhZ29uYWxMZW5ndGgoKTsKIAogICAgIGNvcm5lciA9IHRvcExlZnQ7CiAgICAg
ZmxvYXQgbWF4RGlzdGFuY2UgPSB0b3BMZWZ0RGlzdGFuY2U7CkBAIC03MTcsNyArNzE3LDcgQEAg
c3RhdGljIGZsb2F0IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihjbwogCiAvLyBDb21wdXRlIGhv
cml6b250YWwgcmFkaXVzIG9mIGVsbGlwc2Ugd2l0aCBjZW50ZXIgYXQgMCwwIHdoaWNoIHBhc3Nl
cyB0aHJvdWdoIHAsIGFuZCBoYXMKIC8vIHdpZHRoL2hlaWdodCBnaXZlbiBieSBhc3BlY3RSYXRp
by4KLXN0YXRpYyBpbmxpbmUgZmxvYXQgaG9yaXpvbnRhbEVsbGlwc2VSYWRpdXMoY29uc3QgRmxv
YXRTaXplJiBwLCBmbG9hdCBhc3BlY3RSYXRpbykKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaG9yaXpv
bnRhbEVsbGlwc2VSYWRpdXMoY29uc3QgR3JhcGhpY3NTaXplJiBwLCBmbG9hdCBhc3BlY3RSYXRp
bykKIHsKICAgICAvLyB4XjIvYV4yICsgeV4yL2JeMiA9IDEKICAgICAvLyBhL2IgPSBhc3BlY3RS
YXRpbywgYiA9IGEvYXNwZWN0UmF0aW8KQEAgLTczMiwxMyArNzMyLDEzIEBAIFBhc3NSZWZQdHI8
R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmEKICAgICAKICAgICBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJT
dHlsZSgpOwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1f
Zmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHls
ZSwgc2l6ZSk7CisgICAgR3JhcGhpY3NQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50
KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RT
dHlsZSwgc2l6ZSk7CiAgICAgaWYgKCFtX2ZpcnN0WCkKICAgICAgICAgZmlyc3RQb2ludC5zZXRY
KHNpemUud2lkdGgoKSAvIDIpOwogICAgIGlmICghbV9maXJzdFkpCiAgICAgICAgIGZpcnN0UG9p
bnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7CiAKLSAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50
ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCByZW5k
ZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKKyAgICBHcmFwaGljc1BvaW50IHNlY29u
ZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgp
LCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKICAgICBpZiAoIW1fc2Vjb25k
WCkKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAyKTsKICAgICBpZiAo
IW1fc2Vjb25kWSkKQEAgLTgxNCw3ICs4MTQsNyBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NS
YWRpYWxHcmFkaWVudFZhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENsb3Nlc3RDb3JuZXI6IHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY29ybmVyOworICAg
ICAgICAgICAgR3JhcGhpY3NQb2ludCBjb3JuZXI7CiAgICAgICAgICAgICBmbG9hdCBkaXN0YW5j
ZSA9IGRpc3RhbmNlVG9DbG9zZXN0Q29ybmVyKHNlY29uZFBvaW50LCBzaXplLCBjb3JuZXIpOwog
ICAgICAgICAgICAgaWYgKHNoYXBlID09IENpcmNsZSkKICAgICAgICAgICAgICAgICBzZWNvbmRS
YWRpdXMgPSBkaXN0YW5jZTsKQEAgLTgzMSw3ICs4MzEsNyBAQCBQYXNzUmVmUHRyPEdyYWRpZW50
PiBDU1NSYWRpYWxHcmFkaWVudFZhCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEZhcnRoZXN0
Q29ybmVyOiB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKKyAgICAgICAgICAgIEdy
YXBoaWNzUG9pbnQgY29ybmVyOwogICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBkaXN0YW5j
ZVRvRmFydGhlc3RDb3JuZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgICAgICAg
ICBpZiAoc2hhcGUgPT0gQ2lyY2xlKQogICAgICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGRp
c3RhbmNlOwpAQCAtODU0LDcgKzg1NCw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlh
bEdyYWRpZW50VmEKICAgICAvLyBhZGRTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJl
cGVhdGluZyBncmFkaWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKICAgICBpZiAobV9y
ZXBlYXRpbmcpIHsKLSAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQgY29ybmVyOwogICAgICAgICBtYXhFeHRlbnQgPSBkaXN0YW5jZVRvRmFydGhlc3RDb3Ju
ZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFw
aGljc1BvaW50OwogY2xhc3MgR3JhZGllbnQ7CiAKIGVudW0gQ1NTR3JhZGllbnRUeXBlIHsgQ1NT
TGluZWFyR3JhZGllbnQsIENTU1JhZGlhbEdyYWRpZW50IH07CkBAIC04MCw3ICs4MCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhZGllbnQ+IGNyZWF0ZUdyYWRpZW50
KFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSA9IDA7CiAKICAgICAvLyBSZXNvbHZlIHBv
aW50cy9yYWRpaSB0byBmcm9udCBlbmQgdmFsdWVzLgotICAgIEZsb2F0UG9pbnQgY29tcHV0ZUVu
ZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmKTsKKyAgICBHcmFwaGlj
c1BvaW50IGNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZh
bHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25zdCBJbnRTaXpl
Jik7CiAgICAgCiAgICAgYm9vbCBpc0NhY2hlYWJsZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpA
QCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyBib29sIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2
YWwKIHN0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZp
eCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVu
UmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
KTsKICAgICAgICAgaW50IGggPSAwOwogICAgICAgICBpbnQgdiA9IDA7CiAgICAgICAgIGlmIChw
YXJzZUFzcGVjdFJhdGlvKHZhbHVlLCBoLCB2KSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMg
Ym9vbCBncmlkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1CiBzdGF0aWMgYm9vbCBkZXZpY2VfaGVp
Z2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYgKHZhbHVlKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBzZyA9IHNjcmVlblJlY3QoZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgICAgIFJlbmRlclN0eWxlKiBy
b290U3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0
eWxlKCk7CiAgICAgICAgIHJldHVybiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGNvbXBh
cmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSwgc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxl
KSwgb3ApOwogICAgIH0KQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgYm9vbCBkZXZpY2VfaGVp
Z2h0TWVkaWFGZWF0dXJlRXZhCiBzdGF0aWMgYm9vbCBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVF
dmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsK
KyAgICAgICAgR3JhcGhpY3NSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZyYW1l
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAg
cmV0dXJuIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19j
YXN0PGludD4oc2cud2lkdGgoKSksIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSksIG9wKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBDbGllbnRSZWN0OjpDbGllbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlCiB7CiB9CiAKLUNs
aWVudFJlY3Q6OkNsaWVudFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorQ2xpZW50UmVjdDo6
Q2xpZW50UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiAgICAgOiBtX3JlY3QocmVjdCkK
IHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjaWZuZGVmIENsaWVudFJlY3RfaAogI2RlZmluZSBDbGllbnRSZWN0X2gKIAotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMzks
NyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
Q2xpZW50UmVjdCk7IH0KICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gY3Jl
YXRlKGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGllbnRSZWN0
KHJlY3QpKTsgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2xpZW50UmVjdChy
ZWN0KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENsaWVudFJlY3Qo
cmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0Lnko
KTsgfQogICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5tYXhYKCk7
IH0KQEAgLTUxLDkgKzUxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAg
ICAgICAgIENsaWVudFJlY3QoKTsKICAgICAgICAgQ2xpZW50UmVjdChjb25zdCBJbnRSZWN0Jik7
Ci0gICAgICAgIENsaWVudFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgICAgIENsaWVudFJl
Y3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKLSAgICAgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAg
ICAgICAgR3JhcGhpY3NSZWN0IG1fcmVjdDsKICAgICB9OyAKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdExpc3QuY3BwCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0TGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDcgKzM2LDcgQEAgQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KCkK
IHsKIH0KIAotQ2xpZW50UmVjdExpc3Q6OkNsaWVudFJlY3RMaXN0KGNvbnN0IFZlY3RvcjxGbG9h
dFF1YWQ+JiBxdWFkcykKK0NsaWVudFJlY3RMaXN0OjpDbGllbnRSZWN0TGlzdChjb25zdCBWZWN0
b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgbV9saXN0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkocXVhZHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNp
emUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3RMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgQ2xpZW50UmVjdExpc3RfaAogI2RlZmlu
ZSBDbGllbnRSZWN0TGlzdF9oCiAKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1F1YWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzksNyArMzksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2xpZW50UmVjdExpc3QgOiBwdWJsaWMg
UmVmQ291bnRlZDxDbGllbnRSZWN0TGlzdD4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDbGllbnRSZWN0TGlzdCk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpZW50UmVj
dExpc3Q+IGNyZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDbGllbnRSZWN0TGlzdChxdWFkcykpOyB9CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENsaWVudFJlY3RMaXN0PiBjcmVhdGUoY29uc3QgVmVjdG9yPEdyYXBoaWNzUXVhZD4m
IHF1YWRzKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2xpZW50UmVjdExpc3QocXVhZHMpKTsgfQog
ICAgICAgICB+Q2xpZW50UmVjdExpc3QoKTsKIAogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgQ2xpZW50UmVjdExpc3QoKTsKLSAgICAgICAgQ2xpZW50UmVjdExpc3QoY29u
c3QgVmVjdG9yPEZsb2F0UXVhZD4mKTsKKyAgICAgICAgQ2xpZW50UmVjdExpc3QoY29uc3QgVmVj
dG9yPEdyYXBoaWNzUXVhZD4mKTsKIAogICAgICAgICBWZWN0b3I8UmVmUHRyPENsaWVudFJlY3Q+
ID4gbV9saXN0OwogICAgIH07IApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJEZWxldGVCdXR0
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIENvbnRhaW5lck5v
ZGU6OmNsb25lQ2hpbGROb2RlcyhDb250CiAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVk
aXRvcigpLT5kZWxldGVCdXR0b25Db250cm9sbGVyKCktPmVuYWJsZSgpOwogfQogCi1ib29sIENv
bnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
K2Jvb2wgQ29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29ybmVyKEdyYXBoaWNzUG9pbnQmIHBv
aW50KSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtODU4LDcgKzg1OCw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0VXBwZXJMZWZ0Q29y
bmVyKEYKICAgICBSZW5kZXJPYmplY3QgKnAgPSBvOwogCiAgICAgaWYgKCFvLT5pc0lubGluZSgp
IHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRv
QWJzb2x1dGUoR3JhcGhpY3NQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtODgzLDE0ICs4ODMsMTQgQEAgYm9vbCBDb250YWluZXJOb2RlOjpn
ZXRVcHBlckxlZnRDb3JuZXIoRgogICAgICAgICBBU1NFUlQobyk7CiAKICAgICAgICAgaWYgKCFv
LT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewotICAgICAgICAgICAgcG9pbnQgPSBv
LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAg
ICBwb2ludCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIGZhbHNlLCB0cnVl
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHAt
Pm5vZGUoKSAmJiBwLT5ub2RlKCkgPT0gdGhpcyAmJiBvLT5pc1RleHQoKSAmJiAhby0+aXNCUigp
ICYmICF0b1JlbmRlclRleHQobyktPmZpcnN0VGV4dEJveCgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gZG8gbm90aGluZyAtIHNraXAgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlIHRoYXQgaXMgYSBjaGls
ZCBvciBuZXh0IHNpYmxpbmcgb2YgdGhlIGFuY2hvcgogICAgICAgICB9IGVsc2UgaWYgKChvLT5p
c1RleHQoKSAmJiAhby0+aXNCUigpKSB8fCBvLT5pc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgICAg
IHBvaW50ID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgcG9pbnQgPSBHcmFwaGljc1BvaW50
KCk7CiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG8pLT5maXJz
dFRleHRCb3goKSkgewogICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUodG9SZW5kZXJUZXh0KG8p
LT5saW5lc0JvdW5kaW5nQm94KCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9S
ZW5kZXJUZXh0KG8pLT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5lVG9wKCkpOwpAQCAtOTA2
LDE0ICs5MDYsMTQgQEAgYm9vbCBDb250YWluZXJOb2RlOjpnZXRVcHBlckxlZnRDb3JuZXIoRgog
ICAgIC8vIElmIHRoZSB0YXJnZXQgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiBvciBzaWJsaW5n
cyB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdl
IG11c3QgYmUKICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gIFNjcm9sbCB0byB0
aGUgYm90dG9tLiBGSVhNRTogd2hvIHNhaWQgYW55dGhpbmcgYWJvdXQgc2Nyb2xsaW5nPwogICAg
IGlmICghbyAmJiBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgcG9pbnQgPSBGbG9hdFBv
aW50KDAsIGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNIZWlnaHQoKSk7CisgICAgICAgIHBv
aW50ID0gR3JhcGhpY3NQb2ludCgwLCBkb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzSGVpZ2h0
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CiAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4K
LWJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcihGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKK2Jvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcihHcmFwaGlj
c1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTkyMSw3ICs5MjEsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExv
d2VyUmlnaHRDb3JuZXIoCiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcmVuZGVyZXIoKTsKICAgICBp
ZiAoIW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKSB7CiAgICAgICAgIFJlbmRlckJv
eCogYm94ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgIHBvaW50ID0gby0+bG9jYWxUb0Fic29s
dXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOworICAgICAgICBwb2ludCA9IG8tPmxvY2Fs
VG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICAgICAgcG9pbnQu
bW92ZShib3gtPnNpemUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTk0NCw3
ICs5NDQsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2VyUmlnaHRDb3JuZXIoCiAgICAg
ICAgIH0KICAgICAgICAgQVNTRVJUKG8pOwogICAgICAgICBpZiAoby0+aXNUZXh0KCkgfHwgby0+
aXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgICAgICBwb2ludCA9IEZsb2F0UG9pbnQoKTsKKyAgICAg
ICAgICAgIHBvaW50ID0gR3JhcGhpY3NQb2ludCgpOwogICAgICAgICAgICAgaWYgKG8tPmlzVGV4
dCgpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChv
KTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGxpbmVzQm94ID0gdGV4dC0+bGluZXNCb3VuZGlu
Z0JveCgpOwpAQCAtOTY0LDcgKzk2NCw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJS
aWdodENvcm5lcigKIAogSW50UmVjdCBDb250YWluZXJOb2RlOjpnZXRSZWN0KCkgY29uc3QKIHsK
LSAgICBGbG9hdFBvaW50ICB1cHBlckxlZnQsIGxvd2VyUmlnaHQ7CisgICAgR3JhcGhpY3NQb2lu
dCB1cHBlckxlZnQsIGxvd2VyUmlnaHQ7CiAgICAgYm9vbCBmb3VuZFVwcGVyTGVmdCA9IGdldFVw
cGVyTGVmdENvcm5lcih1cHBlckxlZnQpOwogICAgIGJvb2wgZm91bmRMb3dlclJpZ2h0ID0gZ2V0
TG93ZXJSaWdodENvcm5lcihsb3dlclJpZ2h0KTsKICAgICAKQEAgLTk3Nyw3ICs5NzcsNyBAQCBJ
bnRSZWN0IENvbnRhaW5lck5vZGU6OmdldFJlY3QoKSBjb25zdAogICAgICAgICAgICAgdXBwZXJM
ZWZ0ID0gbG93ZXJSaWdodDsKICAgICB9IAogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
RmxvYXRSZWN0KHVwcGVyTGVmdCwgbG93ZXJSaWdodC5leHBhbmRlZFRvKHVwcGVyTGVmdCkgLSB1
cHBlckxlZnQpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChHcmFwaGljc1JlY3QodXBw
ZXJMZWZ0LCBsb3dlclJpZ2h0LmV4cGFuZGVkVG8odXBwZXJMZWZ0KSAtIHVwcGVyTGVmdCkpOwog
fQogCiB2b2lkIENvbnRhaW5lck5vZGU6OnNldEZvY3VzKGJvb2wgcmVjZWl2ZWQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFw
aGljc1BvaW50OwogICAgIAogdHlwZWRlZiB2b2lkICgqTm9kZUNhbGxiYWNrKShOb2RlKiwgdW5z
aWduZWQpOwogCkBAIC0xMDksOCArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lk
IGRpc3BhdGNoUG9zdEF0dGFjaENhbGxiYWNrcygpOwogCi0gICAgYm9vbCBnZXRVcHBlckxlZnRD
b3JuZXIoRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihG
bG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBnZXRVcHBlckxlZnRDb3JuZXIoR3JhcGhpY3NQ
b2ludCYpIGNvbnN0OworICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihHcmFwaGljc1BvaW50
JikgY29uc3Q7CiAKICAgICBOb2RlKiBtX2ZpcnN0Q2hpbGQ7CiAgICAgTm9kZSogbV9sYXN0Q2hp
bGQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyMyw3ICsx
MTIzLDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gRG9jdW1lbnQ6Om5vZGVzRnJvbQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBmcmFtZS0+cGFnZVpvb21GYWN0
b3IoKTsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KGNl
bnRlclggKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxYKCksIGNlbnRlclkgKiB6b29tRmFj
dG9yICsgdmlldygpLT5zY3JvbGxZKCkpKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJ
bnRQb2ludChHcmFwaGljc1BvaW50KGNlbnRlclggKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3Jv
bGxYKCksIGNlbnRlclkgKiB6b29tRmFjdG9yICsgdmlldygpLT5zY3JvbGxZKCkpKTsKIAogICAg
IGludCB0eXBlID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFj
dGl2ZTsKIApAQCAtMTE3MSw3ICsxMTcxLDcgQEAgc3RhdGljIE5vZGUqIG5vZGVGcm9tUG9pbnQo
RnJhbWUqIGZyYW1lLAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3Ig
PSBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJvdW5kZWRJ
bnRQb2ludChGbG9hdFBvaW50KHggKiB6b29tRmFjdG9yICArIGZyYW1lVmlldy0+c2Nyb2xsWCgp
LCB5ICogem9vbUZhY3RvciArIGZyYW1lVmlldy0+c2Nyb2xsWSgpKSk7CisgICAgSW50UG9pbnQg
cG9pbnQgPSByb3VuZGVkSW50UG9pbnQoR3JhcGhpY3NQb2ludCh4ICogem9vbUZhY3RvciAgKyBm
cmFtZVZpZXctPnNjcm9sbFgoKSwgeSAqIHpvb21GYWN0b3IgKyBmcmFtZVZpZXctPnNjcm9sbFko
KSkpOwogCiAgICAgaWYgKCFmcmFtZVZpZXctPnZpc2libGVDb250ZW50UmVjdCgpLmNvbnRhaW5z
KHBvaW50KSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE5LDEyICs1MTksMTIgQEAgSW50UmVjdCBFbGVtZW50Ojpib3VuZHNJbldp
bmRvd1NwYWNlKCkgYwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
IAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+
IHF1YWRzOwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRl
cmVyKCkpIHsKICAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUg
U1ZHIG1vZGVsLgogICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU1ZHRWxlbWVudCo+KHRoaXMpOwotICAgICAgICBGbG9hdFJlY3QgbG9jYWxS
ZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0OwogICAgICAgICBpZiAoc3ZnRWxl
bWVudC0+Ym91bmRpbmdCb3gobG9jYWxSZWN0KSkKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChy
ZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgIH0gZWxzZQpA
QCAtNTU3LDcgKzU1Nyw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEVsZW1lbnQ6Omdl
dEMKICAgICAvLyBGSVhNRTogSGFuZGxlIFNWRyBlbGVtZW50cy4KICAgICAvLyBGSVhNRTogSGFu
ZGxlIHRhYmxlL2lubGluZS10YWJsZSB3aXRoIGEgY2FwdGlvbi4KIAotICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgIHJlbmRl
ckJveE1vZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKIAogICAgIGZsb2F0IHBhZ2VT
Y2FsZSA9IDE7CkBAIC01NzAsOSArNTcwLDkgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4g
RWxlbWVudDo6Z2V0QwogICAgICAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXct
PnZpc2libGVDb250ZW50UmVjdCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1
YWRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29u
dGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBhZGp1
c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlckJveE1vZGVsT2JqZWN0
KTsKKyAgICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tp
XSwgcmVuZGVyQm94TW9kZWxPYmplY3QpOwogICAgICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAx
KQotICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwg
cGFnZVNjYWxlKTsKKyAgICAgICAgICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JQYWdlU2Nh
bGUocXVhZHNbaV0sIHBhZ2VTY2FsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU4MywxMiAr
NTgzLDEyIEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQKIHsKICAg
ICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAot
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1
YWRzOwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHRWxlbWVudCgpICYmIHJlbmRlcmVy
KCkpIHsKICAgICAgICAgLy8gR2V0IHRoZSBib3VuZGluZyByZWN0YW5nbGUgZnJvbSB0aGUgU1ZH
IG1vZGVsLgogICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgU1ZHRWxlbWVudCo+KHRoaXMpOwotICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0
OworICAgICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0OwogICAgICAgICBpZiAoc3ZnRWxlbWVu
dC0+Ym91bmRpbmdCb3gobG9jYWxSZWN0KSkKICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5k
ZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgIH0gZWxzZQpAQCAt
NjAyLDcgKzYwMiw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQK
ICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3Jl
YXRlKCk7CiAKLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uYm91bmRpbmdCb3goKTsK
KyAgICBHcmFwaGljc1JlY3QgcmVzdWx0ID0gcXVhZHNbMF0uYm91bmRpbmdCb3goKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICByZXN1bHQu
dW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKQEAgLTYxMSwxMCArNjExLDEwIEBAIFBh
c3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQKICAgICAgICAgcmVzdWx0Lm1v
dmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKICAg
ICB9CiAKLSAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5kZXJl
cigpKTsKKyAgICBhZGp1c3RHcmFwaGljc1JlY3RGb3JBYnNvbHV0ZVpvb20ocmVzdWx0LCByZW5k
ZXJlcigpKTsKICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgewogICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBh
ZGp1c3RGbG9hdFJlY3RGb3JQYWdlU2NhbGUocmVzdWx0LCBmcmFtZS0+cGFnZVNjYWxlRmFjdG9y
KCkpOworICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwg
ZnJhbWUtPnBhZ2VTY2FsZUZhY3RvcigpKTsKICAgICB9CiAKICAgICByZXR1cm4gQ2xpZW50UmVj
dDo6Y3JlYXRlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTW91c2VSZWxhdGVk
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRF
dmVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVs
YXRlZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyBm
bG9hdCBwYWdlWm9vbUZhY3Rvcihjb25zdCBVSUV2ZW4KIHZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6
OmNvbXB1dGVQYWdlTG9jYXRpb24oKQogewogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBwYWdlWm9v
bUZhY3Rvcih0aGlzKTsKLSAgICBzZXRBYnNvbHV0ZUxvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChG
bG9hdFBvaW50KHBhZ2VYKCkgKiB6b29tRmFjdG9yLCBwYWdlWSgpICogem9vbUZhY3RvcikpKTsK
KyAgICBzZXRBYnNvbHV0ZUxvY2F0aW9uKHJvdW5kZWRJbnRQb2ludChHcmFwaGljc1BvaW50KHBh
Z2VYKCkgKiB6b29tRmFjdG9yLCBwYWdlWSgpICogem9vbUZhY3RvcikpKTsKIH0KIAogdm9pZCBN
b3VzZVJlbGF0ZWRFdmVudDo6cmVjZWl2ZWRUYXJnZXQoKQpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZv
aWQgTW91c2VSZWxhdGVkRXZlbnQ6OmNvbXB1dGVSZWxhdGl2ZVAKICAgICAvLyBBZGp1c3Qgb2Zm
c2V0TG9jYXRpb24gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCdzIHBvc2l0aW9uLgogICAg
IGlmICghaXNTaW11bGF0ZWQoKSkgewogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByID0gdGFy
Z2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvcyA9
IHItPmFic29sdXRlVG9Mb2NhbChhYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxQb3MgPSByLT5hYnNvbHV0ZVRvTG9jYWwoYWJz
b2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICBtX29mZnNldExvY2F0
aW9uID0gcm91bmRlZEludFBvaW50KGxvY2FsUG9zKTsKICAgICAgICAgICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gMSAvIHBhZ2Vab29tRmFjdG9yKHRoaXMpOwogICAgICAgICAgICAgaWYgKHNjYWxl
RmFjdG9yICE9IDEuMGYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDcgKzg0
Myw3IEBAIGJvb2wgTm9kZTo6aGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpIGNvbnMKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgRmxvYXRQb2lu
dCBhYnNQb3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoKTsKKyAgICBHcmFwaGljc1Bv
aW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIHJlbmRlcmVy
KCktPmFic29sdXRlUmVjdHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChhYnNQb3MpKTsKICAgICBz
aXplX3QgbiA9IHJlY3RzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkKQEAgLTIyNjIsNyArMjI2Miw3IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1
bWVudFBvc2kKICAgICAgICAgICAgICAgIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyB8IERP
Q1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TOwogfQogCi1GbG9hdFBvaW50IE5vZGU6OmNvbnZlcnRU
b1BhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgTm9kZTo6Y29u
dmVydFRvUGFnZShjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIC8vIElmIHRo
ZXJlIGlzIGEgcmVuZGVyZXIsIGp1c3QgYXNrIGl0IHRvIGRvIHRoZSBjb252ZXJzaW9uCiAgICAg
aWYgKHJlbmRlcmVyKCkpCkBAIC0yMjc3LDcgKzIyNzcsNyBAQCBGbG9hdFBvaW50IE5vZGU6OmNv
bnZlcnRUb1BhZ2UoY29uc3QgRmxvCiAgICAgcmV0dXJuIHA7CiB9CiAKLUZsb2F0UG9pbnQgTm9k
ZTo6Y29udmVydEZyb21QYWdlKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0CitHcmFwaGljc1Bv
aW50IE5vZGU6OmNvbnZlcnRGcm9tUGFnZShjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAog
ewogICAgIC8vIElmIHRoZXJlIGlzIGEgcmVuZGVyZXIsIGp1c3QgYXNrIGl0IHRvIGRvIHRoZSBj
b252ZXJzaW9uCiAgICAgaWYgKHJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNyArNTEsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudENv
bnRleHQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdy
YXBoaWNzUG9pbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFz
cyBJbnRSZWN0OwpAQCAtNDI4LDggKzQyOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
Y2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsKIAogICAgIC8vIEdldHRpbmcgcG9pbnRzIGludG8g
YW5kIG91dCBvZiBzY3JlZW4gc3BhY2UKLSAgICBGbG9hdFBvaW50IGNvbnZlcnRUb1BhZ2UoY29u
c3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgY29udmVydEZyb21QYWdlKGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGNvbnZlcnRUb1BhZ2Uo
Y29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgY29udmVydEZy
b21QYWdlKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAgIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAgICAgLy8gSW50ZWdyYXRpb24gd2l0aCByZW5kZXJpbmcgdHJlZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDbGll
bnRSZWN0TGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgpAQCAtMTY1Myw3ICsxNjUzLDcgQEAgdm9pZCBSYW5nZTo6
dGV4dFJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcgogICAgIH0KIH0KIAotdm9pZCBSYW5nZTo6dGV4
dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQp
IGNvbnN0Cit2b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRz
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydENvbnRh
aW5lciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gbV9l
bmQuY29udGFpbmVyKCk7CkBAIC0xOTE0LDcgKzE5MTQsNyBAQCBQYXNzUmVmUHRyPENsaWVudFJl
Y3RMaXN0PiBSYW5nZTo6Z2V0Q2xpCiAKICAgICBtX293bmVyRG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVh
ZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAgICAgZ2V0Qm9yZGVyQW5kVGV4
dFF1YWRzKHF1YWRzKTsKIAogICAgIHJldHVybiBDbGllbnRSZWN0TGlzdDo6Y3JlYXRlKHF1YWRz
KTsKQEAgLTE5MjIsMTEgKzE5MjIsMTEgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gUmFu
Z2U6OmdldENsaQogCiBQYXNzUmVmUHRyPENsaWVudFJlY3Q+IFJhbmdlOjpnZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZWN0ID0gYm91bmRpbmdSZWN0KCk7
CisgICAgR3JhcGhpY3NSZWN0IHJlY3QgPSBib3VuZGluZ1JlY3QoKTsKICAgICByZXR1cm4gcmVj
dC5pc0VtcHR5KCkgPyAwIDogQ2xpZW50UmVjdDo6Y3JlYXRlKHJlY3QpOwogfQogCi1zdGF0aWMg
dm9pZCBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxl
KFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQorc3RhdGljIHZvaWQgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFu
ZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMsIERv
Y3VtZW50KiBkb2N1bWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwogICAgIGlmICghdmlldykKQEAgLTE5NDEsMTMg
KzE5NDEsMTMgQEAgc3RhdGljIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZAogICAg
IEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRS
ZWN0LnkoKSk7Ci0gICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tp
XSwgcmVuZGVyZXIpOworICAgICAgICBhZGp1c3RHcmFwaGljc1F1YWRGb3JBYnNvbHV0ZVpvb20o
cXVhZHNbaV0sIHJlbmRlcmVyKTsKICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQotICAgICAg
ICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUpOwor
ICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdl
U2NhbGUpOwogICAgIH0KIH0KIAotdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QKK3ZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRl
eHRRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpIGNvbnN0CiB7CiAgICAgTm9kZSog
c3RhcnRDb250YWluZXIgPSBtX3N0YXJ0LmNvbnRhaW5lcigpOwogICAgIE5vZGUqIGVuZENvbnRh
aW5lciA9IG1fZW5kLmNvbnRhaW5lcigpOwpAQCAtMTk2Myw5ICsxOTYzLDkgQEAgdm9pZCBSYW5n
ZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgICAgICBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGVTZXQuY29udGFpbnMobm9kZS0+cGFy
ZW50Tm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVuZGVyQm94TW9kZWxPYmplY3QgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPnJlbmRl
ckJveE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVh
ZD4gZWxlbWVudFF1YWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8R3JhcGhpY3NRdWFk
PiBlbGVtZW50UXVhZHM7CiAgICAgICAgICAgICAgICAgICAgIHJlbmRlckJveE1vZGVsT2JqZWN0
LT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkanVz
dEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoZWxlbWVudFF1
YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgYWRqdXN0R3JhcGhpY3NRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9v
bUFuZFBhZ2VTY2FsZShlbGVtZW50UXVhZHMsIG1fb3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVy
Qm94TW9kZWxPYmplY3QpOwogCiAgICAgICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChlbGVt
ZW50UXVhZHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5NzYsOSArMTk3Niw5IEBAIHZvaWQg
UmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3IKICAgICAgICAgICAgICAgICBpbnQg
c3RhcnRPZmZzZXQgPSAobm9kZSA9PSBzdGFydENvbnRhaW5lcikgPyBtX3N0YXJ0Lm9mZnNldCgp
IDogMDsKICAgICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gKG5vZGUgPT0gZW5kQ29udGFp
bmVyKSA/IG1fZW5kLm9mZnNldCgpIDogSU5UX01BWDsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CisgICAgICAgICAgICAgICAg
VmVjdG9yPEdyYXBoaWNzUXVhZD4gdGV4dFF1YWRzOwogICAgICAgICAgICAgICAgIHJlbmRlclRl
eHQtPmFic29sdXRlUXVhZHNGb3JSYW5nZSh0ZXh0UXVhZHMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpOwotICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0
ZVpvb21BbmRQYWdlU2NhbGUodGV4dFF1YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRl
clRleHQpOworICAgICAgICAgICAgICAgIGFkanVzdEdyYXBoaWNzUXVhZHNGb3JTY3JvbGxBbmRB
YnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUodGV4dFF1YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCks
IHJlbmRlclRleHQpOwogCiAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKHRleHRRdWFkcyk7
CiAgICAgICAgICAgICB9CkBAIC0xOTg3LDE5ICsxOTg3LDE5IEBAIHZvaWQgUmFuZ2U6OmdldEJv
cmRlckFuZFRleHRRdWFkcyhWZWN0b3IKIH0KIAogICAgIAotRmxvYXRSZWN0IFJhbmdlOjpib3Vu
ZGluZ1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJhbmdlOjpib3VuZGluZ1JlY3QoKSBjb25z
dAogewogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBtX293bmVyRG9j
dW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4gcXVhZHM7CiAg
ICAgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKHF1YWRzKTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1Jl
Y3QoKTsKIAotICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQogICAgICAgICBy
ZXN1bHQudW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIFJhbmdlX2gKIAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiUmFuZ2VCb3VuZGFyeVBvaW50LmgiCkBAIC00MSw3ICs0MSw3IEBAIGNs
YXNzIENsaWVudFJlY3RMaXN0OwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERvY3VtZW50
OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEdyYXBo
aWNzUXVhZDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7CiBjbGFzcyBUZXh0OwogCkBAIC0xMTUsOSAr
MTE1LDkgQEAgcHVibGljOgogICAgIC8vIE5vdCB0cmFuc2Zvcm0tZnJpZW5kbHkKICAgICB2b2lk
IHRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZh
bHNlKTsKICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKLSAgICB2b2lkIHRleHRRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpIGNvbnN0Owot
ICAgIHZvaWQgZ2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JikgY29uc3Q7
Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgIHZvaWQgdGV4dFF1YWRz
KFZlY3RvcjxHcmFwaGljc1F1YWQ+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSkg
Y29uc3Q7CisgICAgdm9pZCBnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVh
ZD4mKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAKICAg
ICB2b2lkIG5vZGVDaGlsZHJlbkNoYW5nZWQoQ29udGFpbmVyTm9kZSopOwogICAgIHZvaWQgbm9k
ZUNoaWxkcmVuV2lsbEJlUmVtb3ZlZChDb250YWluZXJOb2RlKik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vV2hlZWxFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1doZWVsRXZlbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9X
aGVlbEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBXaGVlbEV2ZW50
OjpXaGVlbEV2ZW50KCkKIHsKIH0KIAotV2hlZWxFdmVudDo6V2hlZWxFdmVudChjb25zdCBGbG9h
dFBvaW50JiB3aGVlbFRpY2tzLCBjb25zdCBGbG9hdFBvaW50JiByYXdEZWx0YSwKK1doZWVsRXZl
bnQ6OldoZWVsRXZlbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgd2hlZWxUaWNrcywgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcmF3RGVsdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNjcmVlbkxvY2F0aW9uLCBjb25zdCBJbnRQb2lu
dCYgcGFnZUxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJv
b2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXkpCkBAIC05Niw3ICs5Niw3IEBA
IFdoZWVsRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpXaGVlbEV2ZW50RGkKICAgICBpZiAoIShldmVu
dC5kZWx0YVgoKSB8fCBldmVudC5kZWx0YVkoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNl
dEV2ZW50KFdoZWVsRXZlbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGV2ZW50LndoZWVsVGlja3NYKCks
IGV2ZW50LndoZWVsVGlja3NZKCkpLCBGbG9hdFBvaW50KGV2ZW50LmRlbHRhWCgpLCBldmVudC5k
ZWx0YVkoKSksIGdyYW51bGFyaXR5KGV2ZW50KSwKKyAgICBzZXRFdmVudChXaGVlbEV2ZW50Ojpj
cmVhdGUoR3JhcGhpY3NQb2ludChldmVudC53aGVlbFRpY2tzWCgpLCBldmVudC53aGVlbFRpY2tz
WSgpKSwgR3JhcGhpY3NQb2ludChldmVudC5kZWx0YVgoKSwgZXZlbnQuZGVsdGFZKCkpLCBncmFu
dWxhcml0eShldmVudCksCiAgICAgICAgIHZpZXcsIEludFBvaW50KGV2ZW50Lmdsb2JhbFgoKSwg
ZXZlbnQuZ2xvYmFsWSgpKSwgSW50UG9pbnQoZXZlbnQueCgpLCBldmVudC55KCkpLCBldmVudC5j
dHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5tZXRhS2V5
KCkpKTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDcgQEAKICNpZm5kZWYgV2hlZWxFdmVudF9oCiAjZGVmaW5lIFdoZWVsRXZlbnRfaAog
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNp
bmNsdWRlICJNb3VzZVJlbGF0ZWRFdmVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCw4ICszOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXaGVlbEV2ZW50KTsKICAgICAgICAgfQotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXaGVlbEV2ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgd2hlZWxU
aWNrcywKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHJhd0RlbHRhLCBHcmFudWxhcml0
eSBncmFudWxhcml0eSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdoZWVsRXZlbnQ+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiB3
aGVlbFRpY2tzLAorICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcmF3RGVsdGEsIEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAg
ICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3JlZW5Mb2NhdGlvbiwgY29uc3QgSW50UG9pbnQm
IHBhZ2VMb2NhdGlvbiwKICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJv
b2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSkKICAgICAgICAgewpAQCAtNjcsNyArNjcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBXaGVlbEV2ZW50KCk7
Ci0gICAgICAgIFdoZWVsRXZlbnQoY29uc3QgRmxvYXRQb2ludCYgd2hlZWxUaWNrcywgY29uc3Qg
RmxvYXRQb2ludCYgcmF3RGVsdGEsCisgICAgICAgIFdoZWVsRXZlbnQoY29uc3QgR3JhcGhpY3NQ
b2ludCYgd2hlZWxUaWNrcywgY29uc3QgR3JhcGhpY3NQb2ludCYgcmF3RGVsdGEsCiAgICAgICAg
ICAgICAgICAgICAgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBhc3NSZWZQdHI8QWJzdHJhY3RW
aWV3PiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgc2NyZWVuTG9jYXRpb24s
IGNvbnN0IEludFBvaW50JiBwYWdlTG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQ0LDcgKzI3NDQs
NyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgQVNTRVJU
KHN0YXJ0UmVuZGVyZXIpOwogICAgIEludFJlY3Qgc3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRl
cmVyLT5sb2NhbENhcmV0UmVjdChzdGFydElubGluZUJveCwgc3RhcnRDYXJldE9mZnNldCwgJmV4
dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAgICAgaWYgKHN0YXJ0Q2FyZXRSZWN0ICE9IEludFJlY3Qo
KSkKLSAgICAgICAgc3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChzdGFydENhcmV0UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
CisgICAgICAgIHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRl
UXVhZChHcmFwaGljc1JlY3Qoc3RhcnRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwogCiAgICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7CiAgICAgaW50IGVuZENhcmV0T2Zmc2V0
OwpAQCAtMjc1Nyw3ICsyNzU3LDcgQEAgSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdl
KFJhbmdlKgogICAgIEFTU0VSVChlbmRSZW5kZXJlcik7CiAgICAgSW50UmVjdCBlbmRDYXJldFJl
Y3QgPSBlbmRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9m
ZnNldCk7CiAgICAgaWYgKGVuZENhcmV0UmVjdCAhPSBJbnRSZWN0KCkpCi0gICAgICAgIGVuZENh
cmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChlbmRD
YXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBlbmRDYXJldFJlY3Qg
PSBlbmRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoZW5kQ2FyZXRS
ZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIAogICAgIGlmIChzdGFydENhcmV0UmVjdC55
KCkgPT0gZW5kQ2FyZXRSZWN0LnkoKSkgewogICAgICAgICAvLyBzdGFydCBhbmQgZW5kIGFyZSBv
biB0aGUgc2FtZSBsaW5lCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0
aW9uLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFk
LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKQEAgLTExMzQsNyArMTEzNCw3IEBAIExheW91dFJlY3QgQ2Fy
ZXRCYXNlOjphYnNvbHV0ZUJvdW5kc0ZvckwKICAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdChyZWN0
KTsKICAgICBpZiAoY2FyZXRQYWludGVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChj
YXJldFBhaW50ZXIpLT5mbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsKLSAgICByZXR1cm4g
Y2FyZXRQYWludGVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgIHJldHVybiBjYXJldFBhaW50ZXItPmxvY2FsVG9B
YnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CiB9CiAKIExheW91dFJlY3QgRnJhbWVTZWxlY3Rpb246OmFic29sdXRlQ2FyZXRCb3VuZHMo
KQpAQCAtMTczMiw3ICsxNzMyLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRl
U2VsZWN0aQogICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPnNob3VsZERl
bGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAotRmxv
YXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpib3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBGcmFtZVNlbGVjdGlvbjo6Ym91bmRzKGJvb2wgY2xpcFRvVmlz
aWJsZUNvbnRlbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsK
QEAgLTE3NDMsMjAgKzE3NDMsMjAgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpib3VuZHMo
Ym9vbCBjbAogICAgIHJldHVybiBjbGlwVG9WaXNpYmxlQ29udGVudCA/IGludGVyc2VjdGlvbihz
ZWxlY3Rpb25SZWN0LCB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKSkgOiBzZWxlY3Rpb25SZWN0
OwogfQogCi12b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5n
bGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzKSBjb25zdAordm9pZCBGcmFtZVNlbGVj
dGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8R3JhcGhpY3NSZWN0
PiYgcmVjdGFuZ2xlcykgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxl
Q29udGVudFJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9m
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKTsKIAotICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1YWQ+IHF1YWRzOwogICAgIHRvTm9ybWFs
aXplZFJhbmdlKCktPnRleHRRdWFkcyhxdWFkcywgdHJ1ZSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9
IHF1YWRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGbG9hdFJlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihxdWFkc1tp
XS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpLCB2aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBH
cmFwaGljc1JlY3QgaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihxdWFkc1tpXS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpLCB2aXNpYmxlQ29udGVudFJlY3QpOwogICAgICAgICBpZiAoIWlu
dGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQo
aW50ZXJzZWN0aW9uUmVjdCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw5ICsyMzMsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUeXBpbmdTdHlsZShQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4pOwog
ICAgIHZvaWQgY2xlYXJUeXBpbmdTdHlsZSgpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyhib29s
IGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGJv
dW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CiAKLSAgICB2b2lk
IGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mKSBjb25z
dDsKKyAgICB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEdyYXBo
aWNzUmVjdD4mKSBjb25zdDsKIAogICAgIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBj
b25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5o
IgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgpAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6
aXNTcGUKIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjpzaG93KFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewot
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShyYW5nZVRvUmVw
bGFjZS5nZXQoKSk7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZv
clJhbmdlKHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKICAgICBpZiAoYm91bmRpbmdCb3guaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2Vk
U3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKQEAgLTI5OCw3ICsyOTgs
NyBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLmlzQWN0aXZlID0gdHJ1ZTsK
ICAgICAgICAgbV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJlcGxhY2VkU3RyaW5nID0gcGxhaW5UZXh0
KG1fY29ycmVjdGlvblBhbmVsSW5mby5yYW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7Ci0gICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHdpbmRvd1JlY3RGb3JSYW5nZShtX2NvcnJlY3Rpb25Q
YW5lbEluZm8ucmFuZ2VUb0JlUmVwbGFjZWQuZ2V0KCkpOworICAgICAgICBHcmFwaGljc1JlY3Qg
Ym91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9uUGFuZWxJbmZvLnJh
bmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBjbGllbnQoKS0+c2hvd0NvcnJlY3Rpb25QYW5lbChtX2NvcnJlY3Rp
b25QYW5lbEluZm8ucGFuZWxUeXBlLCBib3VuZGluZ0JveCwgbV9jb3JyZWN0aW9uUGFuZWxJbmZv
LnJlcGxhY2VkU3RyaW5nLCBtX2NvcnJlY3Rpb25QYW5lbEluZm8ucmVwbGFjZW1lbnRTdHJpbmcs
IFZlY3RvcjxTdHJpbmc+KCkpOwogICAgIH0KQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXI6OmNvcnJlCiAgICAgICAgIFN0cmluZyB0b3BTdWdnZXN0
aW9uID0gc3VnZ2VzdGlvbnMuZmlyc3QoKTsKICAgICAgICAgc3VnZ2VzdGlvbnMucmVtb3ZlKDAp
OwogICAgICAgICBtX2NvcnJlY3Rpb25QYW5lbEluZm8uaXNBY3RpdmUgPSB0cnVlOwotICAgICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSB3aW5kb3dSZWN0Rm9yUmFuZ2UobV9jb3JyZWN0aW9u
UGFuZWxJbmZvLnJhbmdlVG9CZVJlcGxhY2VkLmdldCgpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IGJvdW5kaW5nQm94ID0gd2luZG93UmVjdEZvclJhbmdlKG1fY29ycmVjdGlvblBhbmVsSW5mby5y
YW5nZVRvQmVSZXBsYWNlZC5nZXQoKSk7CiAgICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0
eSgpKQogICAgICAgICAgICAgY2xpZW50KCktPnNob3dDb3JyZWN0aW9uUGFuZWwobV9jb3JyZWN0
aW9uUGFuZWxJbmZvLnBhbmVsVHlwZSwgYm91bmRpbmdCb3gsIG1fY29ycmVjdGlvblBhbmVsSW5m
by5yZXBsYWNlZFN0cmluZywgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwogICAgIH0KQEAg
LTM2MiwxNCArMzYyLDE0IEBAIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlcjo6aXNB
dXQKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uRW5hYmxlZCgpOwogfQogCi1GbG9hdFJlY3QgU3BlbGxpbmdDb3JyZWN0aW9uQ29u
dHJvbGxlcjo6d2luZG93UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKK0dy
YXBoaWNzUmVjdCBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOjp3aW5kb3dSZWN0Rm9yUmFu
Z2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAogewogICAgIEZyYW1lVmlldyogdmlldyA9IG1f
ZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7CisgICAgICAgIHJldHVybiBHcmFw
aGljc1JlY3QoKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NRdWFkPiB0ZXh0UXVhZHM7CiAgICAgcmFu
Z2UtPnRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7Cisg
ICAgR3JhcGhpY3NSZWN0IGJvdW5kaW5nUmVjdDsKICAgICBzaXplX3Qgc2l6ZSA9IHRleHRRdWFk
cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAg
IGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3
IEBAIHByaXZhdGU6CiAKICAgICBFZGl0b3JDbGllbnQqIGNsaWVudCgpOwogICAgIFRleHRDaGVj
a2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpOwotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0Rm9yUmFu
Z2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgd2luZG93UmVjdEZvclJh
bmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7CiAgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwogCiAg
ICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SW5saW5lVGV4dEJveC5oIgpAQCAtNTkzLDcgKzU5Myw3IEBAIEludFJlY3QgVmlzaWJsZVBvc2l0
aW9uOjphYnNvbHV0ZUNhcmV0Qm8KICAgICBpZiAobG9jYWxSZWN0LmlzRW1wdHkoKSB8fCAhcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICByZXR1cm4gcmVuZGVyZXIt
PmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBo
aWNzUmVjdChsb2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCiBpbnQgVmlz
aWJsZVBvc2l0aW9uOjpsaW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRp
b24oKSBjb25zdApAQCAtNjA2LDcgKzYwNiw3IEBAIGludCBWaXNpYmxlUG9zaXRpb246OmxpbmVE
aXJlY3Rpb25Qb2ludEYKICAgICAvLyBUaGlzIGlnbm9yZXMgdHJhbnNmb3JtcyBvbiBwdXJwb3Nl
LCBmb3Igbm93LiBWZXJ0aWNhbCBuYXZpZ2F0aW9uIGlzIGRvbmUKICAgICAvLyB3aXRob3V0IGNv
bnN1bHRpbmcgdHJhbnNmb3Jtcywgc28gdGhhdCAndXAnIGluIHRyYW5zZm9ybWVkIHRleHQgaXMg
J3VwJwogICAgIC8vIHJlbGF0aXZlIHRvIHRoZSB0ZXh0LCBub3QgYWJzb2x1dGUgJ3VwJy4KLSAg
ICBGbG9hdFBvaW50IGNhcmV0UG9pbnQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKGxvY2Fs
UmVjdC5sb2NhdGlvbigpKTsKKyAgICBHcmFwaGljc1BvaW50IGNhcmV0UG9pbnQgPSByZW5kZXJl
ci0+bG9jYWxUb0Fic29sdXRlKGxvY2FsUmVjdC5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gcmVu
ZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2Fy
ZXRQb2ludC54KCkgOiBjYXJldFBvaW50LnkoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw3ICs1
MDksNyBAQCBzdGF0aWMgaW5saW5lIEludFBvaW50IGFic29sdXRlTGluZURpcmVjCiB7CiAgICAg
QVNTRVJUKHJvb3QpOwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSByb290LT5i
bG9jaygpOwotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVCbG9ja1BvaW50ID0gY29udGFpbmluZ0Js
b2NrLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGFi
c29sdXRlQmxvY2tQb2ludCA9IGNvbnRhaW5pbmdCbG9jay0+bG9jYWxUb0Fic29sdXRlKEdyYXBo
aWNzUG9pbnQoKSk7CiAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkp
CiAgICAgICAgIGFic29sdXRlQmxvY2tQb2ludCAtPSBjb250YWluaW5nQmxvY2stPmxheWVyKCkt
PnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3
IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRpb24KICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHBhc3MgdHJ1ZSBmb3Ig
dXNlVHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9zaXRpb24gPSByZW5kZXJl
ci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
ZW50KS0+cGFnZVgoKSwgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVkoKSkp
OworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVQb3NpdGlvbiA9IHJlbmRlcmVyLT5hYnNvbHV0
ZVRvTG9jYWwoR3JhcGhpY3NQb2ludChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5w
YWdlWCgpLCBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5wYWdlWSgpKSk7CiAgICAg
aW50IHggPSBhYnNvbHV0ZVBvc2l0aW9uLngoKTsKICAgICBpbnQgeSA9IGFic29sdXRlUG9zaXRp
b24ueSgpOwogICAgIHVybCArPSAiPyI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
cmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBQYXRoIEhU
TUxBcmVhRWxlbWVudDo6Y29tcHV0ZVBhdGgoUmVuZGVyCiAgICAgICAgIHJldHVybiBQYXRoKCk7
CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRy
YW5zZm9ybXMuCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBvYmotPmxvY2FsVG9BYnNvbHV0ZSgp
OworICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gb2JqLT5sb2NhbFRvQWJzb2x1dGUoKTsKIAog
ICAgIC8vIERlZmF1bHQgc2hvdWxkIGRlZmF1bHQgdG8gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5p
bmcgb2JqZWN0LgogICAgIEludFNpemUgc2l6ZSA9IG1fbGFzdFNpemU7CkBAIC0xMTQsNyArMTE0
LDcgQEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmNvbXB1dGVQYXRoKFJlbmRlcgogICAgICAgICBw
LnRyYW5zZm9ybSh6b29tVHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBwLnRyYW5zbGF0ZShhYnNQ
b3MgLSBGbG9hdFBvaW50KCkpOworICAgIHAudHJhbnNsYXRlKGFic1BvcyAtIEdyYXBoaWNzUG9p
bnQoKSk7CiAgICAgcmV0dXJuIHA7CiB9CiAgICAgCkBAIC0xNDcsOSArMTQ3LDkgQEAgUGF0aCBI
VE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBJbgogICAgICAgICBjYXNlIFBvbHk6CiAg
ICAgICAgICAgICBpZiAobV9jb29yZHNMZW4gPj0gNikgewogICAgICAgICAgICAgICAgIGludCBu
dW1Qb2ludHMgPSBtX2Nvb3Jkc0xlbiAvIDI7Ci0gICAgICAgICAgICAgICAgcGF0aC5tb3ZlVG8o
RmxvYXRQb2ludChtX2Nvb3Jkc1swXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1sxXS5j
YWxjTWluVmFsdWUoaGVpZ2h0KSkpOworICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKEdyYXBo
aWNzUG9pbnQobV9jb29yZHNbMF0uY2FsY01pblZhbHVlKHdpZHRoKSwgbV9jb29yZHNbMV0uY2Fs
Y01pblZhbHVlKGhlaWdodCkpKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IG51bVBvaW50czsgKytpKQotICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9h
dFBvaW50KG1fY29vcmRzW2kgKiAyXS5jYWxjTWluVmFsdWUod2lkdGgpLCBtX2Nvb3Jkc1tpICog
MiArIDFdLmNhbGNNaW5WYWx1ZShoZWlnaHQpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhdGgu
YWRkTGluZVRvKEdyYXBoaWNzUG9pbnQobV9jb29yZHNbaSAqIDJdLmNhbGNNaW5WYWx1ZSh3aWR0
aCksIG1fY29vcmRzW2kgKiAyICsgMV0uY2FsY01pblZhbHVlKGhlaWdodCkpKTsKICAgICAgICAg
ICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xNTcsNyArMTU3LDcgQEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lv
bihjb25zdCBJbgogICAgICAgICAgICAgaWYgKG1fY29vcmRzTGVuID49IDMpIHsKICAgICAgICAg
ICAgICAgICBMZW5ndGggcmFkaXVzID0gbV9jb29yZHNbMl07CiAgICAgICAgICAgICAgICAgaW50
IHIgPSBtaW4ocmFkaXVzLmNhbGNNaW5WYWx1ZSh3aWR0aCksIHJhZGl1cy5jYWxjTWluVmFsdWUo
aGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKEZsb2F0UmVjdChtX2Nv
b3Jkc1swXS5jYWxjTWluVmFsdWUod2lkdGgpIC0gciwgbV9jb29yZHNbMV0uY2FsY01pblZhbHVl
KGhlaWdodCkgLSByLCAyICogciwgMiAqIHIpKTsKKyAgICAgICAgICAgICAgICBwYXRoLmFkZEVs
bGlwc2UoR3JhcGhpY3NSZWN0KG1fY29vcmRzWzBdLmNhbGNNaW5WYWx1ZSh3aWR0aCkgLSByLCBt
X2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0KSAtIHIsIDIgKiByLCAyICogcikpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVjdDoKQEAgLTE2
NiwxMSArMTY2LDExIEBAIFBhdGggSFRNTEFyZWFFbGVtZW50OjpnZXRSZWdpb24oY29uc3QgSW4K
ICAgICAgICAgICAgICAgICBpbnQgeTAgPSBtX2Nvb3Jkc1sxXS5jYWxjTWluVmFsdWUoaGVpZ2h0
KTsKICAgICAgICAgICAgICAgICBpbnQgeDEgPSBtX2Nvb3Jkc1syXS5jYWxjTWluVmFsdWUod2lk
dGgpOwogICAgICAgICAgICAgICAgIGludCB5MSA9IG1fY29vcmRzWzNdLmNhbGNNaW5WYWx1ZSho
ZWlnaHQpOwotICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoeDAsIHkwLCB4
MSAtIHgwLCB5MSAtIHkwKSk7CisgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KEdyYXBoaWNz
UmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIERlZmF1bHQ6Ci0gICAgICAgICAgICBwYXRoLmFkZFJl
Y3QoRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgICAgIHBhdGguYWRk
UmVjdChHcmFwaGljc1JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVW5rbm93bjoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMywxMyArMjAzLDEzIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52
YXNFbGVtZW4KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGlk
RHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWRE
cmF3KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBtX2NvcGllZEltYWdlLmNsZWFy
KCk7IC8vIENsZWFyIG91ciBpbWFnZSBzbmFwc2hvdCBpZiB3ZSBoYXZlIG9uZS4KIAogICAgIGlm
IChSZW5kZXJCb3gqIHJvID0gcmVuZGVyQm94KCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGRlc3RS
ZWN0ID0gcm8tPmNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgICAgIEZsb2F0UmVjdCByID0gbWFwUmVj
dChyZWN0LCBGbG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSks
IGRlc3RSZWN0KTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRC
b3hSZWN0KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByID0gbWFwUmVjdChyZWN0LCBHcmFwaGlj
c1JlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGRlc3RSZWN0KTsK
ICAgICAgICAgci5pbnRlcnNlY3QoZGVzdFJlY3QpOwogICAgICAgICBpZiAoci5pc0VtcHR5KCkg
fHwgbV9kaXJ0eVJlY3QuY29udGFpbnMocikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNjUs
NyArMjY1LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKICAgICAvLyBDbGVhciB0aGUgZGlydHkg
cmVjdAotICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9kaXJ0eVJlY3QgPSBH
cmFwaGljc1JlY3QoKTsKIAogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM3MSw3ICszNzEsNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
SFRNTENhbnZhc0VsZW1lbnQ6CiAjZW5kaWYKIH0KIAotSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVu
dDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxSZWN0KSBj
b25zdAorSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShj
b25zdCBHcmFwaGljc1JlY3QmIGxvZ2ljYWxSZWN0KSBjb25zdAogewogICAgIC8vIFByZXZlbnQg
dW5kZXIvb3ZlcmZsb3cgYnkgZW5zdXJpbmcgdGhlIHJlY3QncyBib3VuZHMgc3RheSB3aXRoaW4g
aW50ZWdlci1leHByZXNzaWJsZSByYW5nZQogICAgIGludCBsZWZ0ID0gY2xhbXBUb0ludGVnZXIo
Zmxvb3JmKGxvZ2ljYWxSZWN0LngoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKSk7CkBAIC0zODIsNyAr
MzgyLDcgQEAgSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6Y29udmVydExvZ2ljYQogICAgIHJl
dHVybiBJbnRSZWN0KEludFBvaW50KGxlZnQsIHRvcCksIGNvbnZlcnRUb1ZhbGlkRGV2aWNlU2l6
ZShyaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogfQogCi1JbnRTaXplIEhUTUxDYW52YXNF
bGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUpIGNvbnN0CitJbnRTaXplIEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2
aWNlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgbG9naWNhbFNpemUpIGNvbnN0CiB7CiAgICAgLy8gUHJl
dmVudCBvdmVyZmxvdyBieSBlbnN1cmluZyB0aGUgcmVjdCdzIGJvdW5kcyBzdGF5IHdpdGhpbiBp
bnRlZ2VyLWV4cHJlc3NpYmxlIHJhbmdlCiAgICAgZmxvYXQgd2lkdGggPSBjbGFtcFRvSW50ZWdl
cihjZWlsZihsb2dpY2FsU2l6ZS53aWR0aCgpICogbV9wYWdlU2NhbGVGYWN0b3IpKTsKQEAgLTQy
Miw3ICs0MjIsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAK
ICAgICBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IHRydWU7CiAKLSAgICBGbG9hdFNpemUgdW5z
Y2FsZWRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICBHcmFwaGljc1NpemUgdW5zY2FsZWRT
aXplKHdpZHRoKCksIGhlaWdodCgpKTsKICAgICBJbnRTaXplIHNpemUgPSBjb252ZXJ0TG9naWNh
bFRvRGV2aWNlKHVuc2NhbGVkU2l6ZSk7CiAgICAgaWYgKCFzaXplLndpZHRoKCkgfHwgIXNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6
OmNyZWF0ZSgpIHJldHVybnMgMCwgaG93ZXZlciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVt
b3J5LgogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1faW1h
Z2VCdWZmZXItPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSAvIHVuc2Nh
bGVkU2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpIC8gdW5zY2FsZWRTaXplLmhlaWdodCgpKSk7
CisgICAgbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5zY2FsZShHcmFwaGljc1NpemUoc2l6ZS53
aWR0aCgpIC8gdW5zY2FsZWRTaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgLyB1bnNjYWxlZFNp
emUuaGVpZ2h0KCkpKTsKICAgICBtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCktPnNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKHRydWUpOwogICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+c2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShEZWZhdWx0SW50ZXJwb2xhdGlvblF1YWxpdHkpOwog
CkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJ
bWFnZQogQWZmaW5lVHJhbnNmb3JtIEhUTUxDYW52YXNFbGVtZW50OjpiYXNlVHJhbnNmb3JtKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpOwotICAgIEZsb2F0
U2l6ZSB1bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzU2l6ZSB1
bnNjYWxlZFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIEludFNpemUgc2l6ZSA9IGNvbnZl
cnRMb2dpY2FsVG9EZXZpY2UodW5zY2FsZWRTaXplKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOwogICAgIGlmIChzaXplLndpZHRoKCkgJiYgc2l6ZS5oZWlnaHQoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAjaWZuZGVmIEhUTUxDYW52YXNFbGVtZW50X2gKICNkZWZpbmUgSFRN
TENhbnZhc0VsZW1lbnRfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCiAKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgQ2FudmFzT2JzZXJ2ZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkNhbnZhc09ic2VydmVyKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2Fu
dmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgY2hhbmdlZFJl
Y3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVu
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgY2hhbmdlZFJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCopID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50KikgPSAwOwogfTsKQEAgLTk1LDcg
Kzk1LDcgQEAgcHVibGljOgogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRvRGF0YVVSTChtaW1lVHlwZSwgMCwg
ZWMpOyB9CiAKICAgICAvLyBVc2VkIGZvciByZW5kZXJpbmcKLSAgICB2b2lkIGRpZERyYXcoY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBkaWREcmF3KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwog
CiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAKQEAgLTExMSw4ICsxMTEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBtYWtlUHJlc2VudGF0aW9uQ29weSgpOwogICAgIHZvaWQgY2xlYXJQcmVzZW50
YXRpb25Db3B5KCk7CiAKLSAgICBJbnRSZWN0IGNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgSW50U2l6ZSBjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIEludFJlY3QgY29udmVydExvZ2ljYWxUb0Rldmlj
ZShjb25zdCBHcmFwaGljc1JlY3QmKSBjb25zdDsKKyAgICBJbnRTaXplIGNvbnZlcnRMb2dpY2Fs
VG9EZXZpY2UoY29uc3QgR3JhcGhpY3NTaXplJikgY29uc3Q7CiAgICAgSW50U2l6ZSBjb252ZXJ0
VG9WYWxpZERldmljZVNpemUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3Q7CiAKICAg
ICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKQEAgLTE1MSw3ICsxNTEs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZW5kZXJlcklzQ2FudmFzOwogCiAgICAgYm9vbCBt
X2lnbm9yZVJlc2V0OwotICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKKyAgICBHcmFwaGljc1Jl
Y3QgbV9kaXJ0eVJlY3Q7CiAKICAgICBmbG9hdCBtX3BhZ2VTY2FsZUZhY3RvcjsKICAgICBib29s
IG1fb3JpZ2luQ2xlYW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDcgKzM2NSw3IEBAIGludCBIVE1MSW1h
Z2VFbGVtZW50Ojp4KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBv
aW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJz
UG9zID0gci0+bG9jYWxUb0Fic29sdXRlKCk7CiAgICAgcmV0dXJuIGFic1Bvcy54KCk7CiB9CiAK
QEAgLTM3Niw3ICszNzYsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVudDo6eSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3Rs
eSB3aXRoIHRyYW5zZm9ybXMuCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSByLT5sb2NhbFRvQWJz
b2x1dGUoKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IHItPmxvY2FsVG9BYnNvbHV0ZSgp
OwogICAgIHJldHVybiBhYnNQb3MueSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTMgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FudmFzR3JhZGll
bnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSkKK0NhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50
JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEpCiAgICAgOiBtX2dyYWRpZW50KEdyYWRpZW50
OjpjcmVhdGUocDAsIHAxKSkKICAgICAsIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5TW9kZShmYWxz
ZSkKIHsKIH0KIAotQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9p
bnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorQ2FudmFz
R3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCBy
MCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxKQogICAgIDogbV9ncmFkaWVudChH
cmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKICAgICAsIG1fZGFzaGJhcmRDb21wYXRp
YmlsaXR5TW9kZShmYWxzZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FudmFzR3JhZGllbnQgOiBwdWJs
aWMgUmVmQ291bnRlZDxDYW52YXNHcmFkaWVudD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c0dyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAxKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENh
bnZhc0dyYWRpZW50KHAwLCBwMSkpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIw
LCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0
IHIwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEp
KTsKICAgICAgICAgfQpAQCAtNTgsOCArNTgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9p
bnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7Ci0gICAgICAgIENhbnZhc0dyYWRpZW50KGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0
IHIxKTsKKyAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHAxKTsKKyAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQg
cjEpOwogICAgICAgICAKICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAg
ICAgICBib29sIG1fZGFzaGJhcmRDb21wYXRpYmlsaXR5TW9kZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNyArMzQ1LDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc3RvcmUoKQogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEFsbEF0dHJpYnV0ZXNUb0RlZmF1bHQoKQogewogICAgIHN0YXRl
KCkubV9nbG9iYWxBbHBoYSA9IDE7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0
U2l6ZSgpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUoKTsKICAg
ICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IDA7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0g
Q29sb3I6OnRyYW5zcGFyZW50OwogICAgIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUgPSBDb21w
b3NpdGVTb3VyY2VPdmVyOwpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRBbGxBdHQKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGNvbnRleHQtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRy
YW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5zZXRMZWdhY3lT
aGFkb3coR3JhcGhpY3NTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURl
dmljZVJHQik7CiAgICAgY29udGV4dC0+c2V0QWxwaGEoMSk7CiAgICAgY29udGV4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogfQpAQCAtNTkxLDcgKzU5MSw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZShmbG8KICAgICB9CiAKICAg
ICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwotICAgIGMtPnNjYWxlKEZsb2F0
U2l6ZShzeCwgc3kpKTsKKyAgICBjLT5zY2FsZShHcmFwaGljc1NpemUoc3gsIHN5KSk7CiAgICAg
bV9wYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oMS4wIC8g
c3gsIDEuMCAvIHN5KSk7CiB9CiAKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Y2xvc2VQYXRoCiAgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBib3VuZFJlY3QgPSBtX3BhdGguYm91bmRpbmdS
ZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kUmVjdCA9IG1fcGF0aC5ib3VuZGluZ1JlY3Qo
KTsKICAgICBpZiAoYm91bmRSZWN0LndpZHRoKCkgfHwgYm91bmRSZWN0LmhlaWdodCgpKQogICAg
ICAgICBtX3BhdGguY2xvc2VTdWJwYXRoKCk7CiB9CkBAIC03ODgsNyArNzg4LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyhmbAogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGF0
aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1Bv
aW50KHgsIHkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyhm
bG9hdCB4LCBmbG9hdCB5KQpAQCAtNzk4LDExICs3OTgsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmxpbmVUbyhmbAogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgcDEgPSBGbG9hdFBvaW50KHgsIHkp
OworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIGlmICgh
bV9wYXRoLmhhc0N1cnJlbnRQb2ludCgpKQogICAgICAgICBtX3BhdGgubW92ZVRvKHAxKTsKICAg
ICBlbHNlIGlmIChwMSAhPSBtX3BhdGguY3VycmVudFBvaW50KCkpCi0gICAgICAgIG1fcGF0aC5h
ZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7CisgICAgICAgIG1fcGF0aC5hZGRMaW5lVG8oR3Jh
cGhpY3NQb2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpx
dWFkcmF0aWNDdXJ2ZVRvKGZsb2F0IGNweCwgZmxvYXQgY3B5LCBmbG9hdCB4LCBmbG9hdCB5KQpA
QCAtODEyLDExICs4MTIsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnF1YWRy
YXRpYwogICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLm1vdmVU
byhGbG9hdFBvaW50KGNweCwgY3B5KSk7CisgICAgICAgIG1fcGF0aC5tb3ZlVG8oR3JhcGhpY3NQ
b2ludChjcHgsIGNweSkpOwogCi0gICAgRmxvYXRQb2ludCBwMSA9IEZsb2F0UG9pbnQoeCwgeSk7
CisgICAgR3JhcGhpY3NQb2ludCBwMSA9IEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgaWYgKHAx
ICE9IG1fcGF0aC5jdXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRv
KEZsb2F0UG9pbnQoY3B4LCBjcHkpLCBwMSk7CisgICAgICAgIG1fcGF0aC5hZGRRdWFkQ3VydmVU
byhHcmFwaGljc1BvaW50KGNweCwgY3B5KSwgcDEpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6YmV6aWVyQ3VydmVUbyhmbG9hdCBjcDF4LCBmbG9hdCBjcDF5LCBmbG9hdCBj
cDJ4LCBmbG9hdCBjcDJ5LCBmbG9hdCB4LCBmbG9hdCB5KQpAQCAtODI2LDExICs4MjYsMTEgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlemllckN1cgogICAgIGlmICghc3RhdGUo
KS5tX2ludmVydGlibGVDVE0pCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fcGF0aC5oYXND
dXJyZW50UG9pbnQoKSkKLSAgICAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KGNwMXgsIGNw
MXkpKTsKKyAgICAgICAgbV9wYXRoLm1vdmVUbyhHcmFwaGljc1BvaW50KGNwMXgsIGNwMXkpKTsK
IAotICAgIEZsb2F0UG9pbnQgcDEgPSBGbG9hdFBvaW50KHgsIHkpOworICAgIEdyYXBoaWNzUG9p
bnQgcDEgPSBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIGlmIChwMSAhPSBtX3BhdGguY3VycmVu
dFBvaW50KCkpCi0gICAgICAgIG1fcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3Ax
eCwgY3AxeSksIEZsb2F0UG9pbnQoY3AyeCwgY3AyeSksIHAxKTsKKyAgICAgICAgbV9wYXRoLmFk
ZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2ludChjcDF4LCBjcDF5KSwgR3JhcGhpY3NQb2ludChj
cDJ4LCBjcDJ5KSwgcDEpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJj
VG8oZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtODQ3LDggKzg0Nyw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjphcmNUbyhmbG8KICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHAxID0gRmxvYXRQb2ludCh4MSwgeTEpOwot
ICAgIEZsb2F0UG9pbnQgcDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7CisgICAgR3JhcGhpY3NQb2lu
dCBwMSA9IEdyYXBoaWNzUG9pbnQoeDEsIHkxKTsKKyAgICBHcmFwaGljc1BvaW50IHAyID0gR3Jh
cGhpY3NQb2ludCh4MiwgeTIpOwogCiAgICAgaWYgKCFtX3BhdGguaGFzQ3VycmVudFBvaW50KCkp
CiAgICAgICAgIG1fcGF0aC5tb3ZlVG8ocDEpOwpAQCAtODc3LDE1ICs4NzcsMTUgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdAogCiAgICAgLy8gSWYgJ3NhJyBhbmQg
J2VhJyBkaWZmZXIgYnkgbW9yZSB0aGFuIDJQaSwganVzdCBhZGQgYSBjaXJjbGUgc3RhcnRpbmcv
ZW5kaW5nIGF0ICdzYScKICAgICBpZiAoYW50aWNsb2Nrd2lzZSAmJiBzYSAtIGVhID49IDIgKiBw
aUZsb2F0KSB7Ci0gICAgICAgIG1fcGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2Es
IHNhIC0gMiAqIHBpRmxvYXQsIGFudGljbG9ja3dpc2UpOworICAgICAgICBtX3BhdGguYWRkQXJj
KEdyYXBoaWNzUG9pbnQoeCwgeSksIHIsIHNhLCBzYSAtIDIgKiBwaUZsb2F0LCBhbnRpY2xvY2t3
aXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWFudGljbG9ja3dpc2UgJiYg
ZWEgLSBzYSA+PSAyICogcGlGbG9hdCkgewotICAgICAgICBtX3BhdGguYWRkQXJjKEZsb2F0UG9p
bnQoeCwgeSksIHIsIHNhLCBzYSArIDIgKiBwaUZsb2F0LCBhbnRpY2xvY2t3aXNlKTsKKyAgICAg
ICAgbV9wYXRoLmFkZEFyYyhHcmFwaGljc1BvaW50KHgsIHkpLCByLCBzYSwgc2EgKyAyICogcGlG
bG9hdCwgYW50aWNsb2Nrd2lzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3Bh
dGguYWRkQXJjKEZsb2F0UG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7Cisg
ICAgbV9wYXRoLmFkZEFyYyhHcmFwaGljc1BvaW50KHgsIHkpLCByLCBzYSwgZWEsIGFudGljbG9j
a3dpc2UpOwogfQogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZVJlY3RGb3JDYW52YXMoZmxvYXQmIHgs
IGZsb2F0JiB5LCBmbG9hdCYgd2lkdGgsIGZsb2F0JiBoZWlnaHQpCkBAIC05MTgsMTEgKzkxOCwx
MSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVjdChmbG9hCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkgewotICAgICAgICBtX3BhdGgubW92
ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworICAgICAgICBtX3BhdGgubW92ZVRvKEdyYXBoaWNzUG9p
bnQoeCwgeSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wYXRoLmFkZFJlY3Qo
RmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICBtX3BhdGguYWRkUmVjdChHcmFw
aGljc1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogfQogCiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQpAQCAtOTY0LDkgKzk2NCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzdHJva2UoKQogCiAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7CiAjaWYgUExBVEZP
Uk0oUVQpCi0gICAgICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGgucGxhdGZvcm1QYXRo
KCkuY29udHJvbFBvaW50UmVjdCgpOworICAgICAgICBHcmFwaGljc1JlY3QgZGlydHlSZWN0ID0g
bV9wYXRoLnBsYXRmb3JtUGF0aCgpLmNvbnRyb2xQb2ludFJlY3QoKTsKICNlbHNlCi0gICAgICAg
IEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7CisgICAgICAgIEdy
YXBoaWNzUmVjdCBkaXJ0eVJlY3QgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7CiAjZW5kaWYKICAg
ICAgICAgLy8gRmFzdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzdHJva2UncyBib3VuZGluZyByZWN0
LgogICAgICAgICAvLyBUaGlzIHlpZWxkcyBhIHNsaWdodGx5IG92ZXJzaXplZCByZWN0IGJ1dCBp
cyB2ZXJ5IGZhc3QKQEAgLTEwMDMsOSArMTAwMyw5IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjppc1BvaW50SW4KICAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFBvaW50IHBvaW50KHgsIHkpOworICAgIEdy
YXBoaWNzUG9pbnQgcG9pbnQoeCwgeSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRl
KCkubV90cmFuc2Zvcm07Ci0gICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmlu
dmVyc2UoKS5tYXBQb2ludChwb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCB0cmFuc2Zvcm1lZFBv
aW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CiAgICAgaWYgKCFpc2Zpbml0ZSh0
cmFuc2Zvcm1lZFBvaW50LngoKSkgfHwgIWlzZmluaXRlKHRyYW5zZm9ybWVkUG9pbnQueSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBtX3BhdGguY29udGFpbnModHJhbnNm
b3JtZWRQb2ludCk7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Y2xlYXJSZWN0CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXN0YXRlKCkubV9p
bnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiAKICAgICBzYXZlKCk7CiAgICAgc2V0QWxsQXR0cmlidXRlc1RvRGVmYXVsdCgpOwpAQCAt
MTA0Nyw3ICsxMDQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxSZWN0
KAogICAgIGlmIChncmFkaWVudCAmJiBncmFkaWVudC0+aXNaZXJvU2l6ZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBH
cmFwaGljc1JlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGlmIChzaG91bGRE
aXNwbGF5VHJhbnNwYXJlbmN5RWxzZXdoZXJlKCkpCiAgICAgICAgIGRpc3BsYXlUcmFuc3BhcmVu
Y3lFbHNld2hlcmU8SW50UmVjdD4oZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CkBAIC0xMDc3LDkg
KzEwNzcsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjCiAgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxv
YXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVj
dDsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3VuZGluZ1Jl
Y3QuaW5mbGF0ZShsaW5lV2lkdGggLyAyKTsKIAogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGlu
ZVdpZHRoKTsKQEAgLTExMDgsNyArMTEwOCw3IEBAIHN0YXRpYyBpbmxpbmUgQ0dTaXplIGFkanVz
dGVkU2hhZG93U2l6ZSgKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRv
dyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyKQogewotICAgIHN0YXRlKCku
bV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5t
X3NoYWRvd09mZnNldCA9IEdyYXBoaWNzU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGF0ZSgp
Lm1fc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gQ29sb3I6
OnRyYW5zcGFyZW50OwogICAgIGFwcGx5U2hhZG93KCk7CkBAIC0xMTE5LDE0ICsxMTE5LDE0IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3cKICAgICBpZiAoIXBhcnNl
Q29sb3JPckN1cnJlbnRDb2xvcihzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIGNvbG9yLCBjYW52YXMo
KSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9h
dFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEdyYXBo
aWNzU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7
CiAgICAgYXBwbHlTaGFkb3coKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBn
cmF5TGV2ZWwpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdp
ZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKICAgICBzdGF0
ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlM
ZXZlbCwgZ3JheUxldmVsLCAxLjBmKTsKIApAQCAtMTEzNCw3ICsxMTM0LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwogICAgIGlmICghYykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCks
IHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOworICAgIGMtPnNldExlZ2FjeVNoYWRvdyhHcmFwaGljc1NpemUod2lkdGgsIC1o
ZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJp
bmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKQEAgLTExNDUsMTkgKzExNDUsMTkgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwogICAgICAgICByZXR1cm47CiAKICAgICBz
dGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBjb2xvcldpdGhPdmVycmlkZUFscGhhKHJnYmEsIGFscGhh
KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdo
dCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKyAgICBjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0
KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFk
b3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVs
LCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXpl
KHdpZHRoLCBoZWlnaHQpOworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBHcmFwaGljc1Np
emUod2lkdGgsIGhlaWdodCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAg
IHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKGdyYXlMZXZlbCwg
Z3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKTsKIApAQCAtMTE2NSwxMiArMTE2NSwxMiBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAt
aGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3
aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRv
d09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93
T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFk
b3dCbHVyID0gYmx1cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQTMyRnJv
bUZsb2F0cyhyLCBnLCBiLCBhKTsKIApAQCAtMTE3OCwxMiArMTE3OCwxMiBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwg
c3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3aWR0aCwgLWhl
aWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZs
b2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRv
d09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93
T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgIHN0YXRlKCkubV9zaGFk
b3dCbHVyID0gYmx1cjsKICAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdCQUZyb21D
TVlLQShjLCBtLCB5LCBrLCBhKTsKIApAQCAtMTE5OCwxMyArMTE5OCwxMyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93CiAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0
aENvbG9yKGRjLT5wbGF0Zm9ybUNvbnRleHQoKSwgYWRqdXN0ZWRTaGFkb3dTaXplKHdpZHRoLCAt
aGVpZ2h0KSwgYmx1ciwgc2hhZG93Q29sb3IpOwogICAgIENHQ29sb3JSZWxlYXNlKHNoYWRvd0Nv
bG9yKTsKICNlbHNlCi0gICAgZGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1o
ZWlnaHQpLCBibHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGRjLT5zZXRMZWdhY3lTaGFkb3coR3JhcGhpY3NTaXplKHdpZHRoLCAtaGVpZ2h0KSwg
Ymx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICNlbmRp
ZgogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJTaGFkb3coKQogewot
ICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICBzdGF0ZSgpLm1f
c2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKCk7CiAgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIg
PSAwOwogICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudDsKICAg
ICBhcHBseVNoYWRvdygpOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmFwcGx5U2hhZAogCiAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLm1fc2hh
ZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5tX3NoYWRvd09m
ZnNldC5oZWlnaHQoKTsKLSAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAt
aGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIHN0YXRlKCkubV9zaGFkb3dDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgYy0+c2V0TGVnYWN5U2hhZG93KEdyYXBoaWNzU2l6ZSh3
aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBzdGF0ZSgpLm1fc2hhZG93Q29s
b3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzaXplKEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlKQpAQCAtMTIzNyw5ICsxMjM3LDkgQEAgc3RhdGljIEludFNpemUg
c2l6ZShIVE1MVmlkZW9FbGVtZW50KiB2aQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgRmxv
YXRSZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorc3RhdGljIGlubGlu
ZSBHcmFwaGljc1JlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7
Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtaW4ocmVjdC54KCksIHJlY3QubWF4WCgpKSwKKyAgICBy
ZXR1cm4gR3JhcGhpY3NSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAogICAgICAgICBt
aW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lkdGgoKSwgLXJl
Y3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5oZWlnaHQoKSkp
OwpAQCAtMTI2Myw3ICsxMjYzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRy
YXdJbWFnZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEludFNpemUgcyA9IHNpemUoaW1h
Z2UpOwotICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KDAsIDAsIHMud2lkdGgoKSwgcy5o
ZWlnaHQoKSksIEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOworICAgIGRyYXdJ
bWFnZShpbWFnZSwgR3JhcGhpY3NSZWN0KDAsIDAsIHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEdy
YXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLApAQCAt
MTI3NCwxNSArMTI3NCwxNSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlCiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLCBGbG9h
dFJlY3QoZHgsIGR5LCBkdywgZGgpLCBlYyk7CisgICAgZHJhd0ltYWdlKGltYWdlLCBHcmFwaGlj
c1JlY3Qoc3gsIHN5LCBzdywgc2gpLCBHcmFwaGljc1JlY3QoZHgsIGR5LCBkdywgZGgpLCBlYyk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdl
RWxlbWVudCogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgc3JjUmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBkcmF3SW1hZ2UoaW1hZ2UsIHNyY1JlY3QsIGRzdFJlY3QsIHN0YXRlKCkubV9n
bG9iYWxDb21wb3NpdGUsIGVjKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9yJiBv
cCwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgQ29tcG9zaXRlT3BlcmF0b3Im
IG9wLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWltYWdlKSB7CiAgICAgICAgIGVj
ID0gVFlQRV9NSVNNQVRDSF9FUlI7CkBAIC0xMzAxLDEwICsxMzAxLDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBpZiAoIWltYWdlLT5jb21wbGV0ZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZFNyY1JlY3QgPSBu
b3JtYWxpemVSZWN0KHNyY1JlY3QpOwotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkRHN0UmVjdCA9
IG5vcm1hbGl6ZVJlY3QoZHN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWRTcmNS
ZWN0ID0gbm9ybWFsaXplUmVjdChzcmNSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybWFsaXpl
ZERzdFJlY3QgPSBub3JtYWxpemVSZWN0KGRzdFJlY3QpOwogCi0gICAgRmxvYXRSZWN0IGltYWdl
UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoaW1hZ2UpKTsKKyAgICBHcmFwaGlj
c1JlY3QgaW1hZ2VSZWN0ID0gR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgc2l6ZShpbWFn
ZSkpOwogICAgIGlmICghaW1hZ2VSZWN0LmNvbnRhaW5zKG5vcm1hbGl6ZWRTcmNSZWN0KSB8fCAh
c3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTEzNDIsMjUgKzEzNDIsMjUgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgICAgICBlYyA9IFRZUEVf
TUlTTUFUQ0hfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGRyYXdJbWFnZShjYW52
YXMsIEZsb2F0UmVjdCgwLCAwLCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpLCBG
bG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGVjKTsKKyAgICBkcmF3SW1hZ2UoY2FudmFz
LCBHcmFwaGljc1JlY3QoMCwgMCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSwg
R3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywK
ICAgICBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwKICAgICBmbG9hdCBk
eCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgZHJhd0ltYWdlKGNhbnZhcywgRmxvYXRSZWN0KHN4LCBzeSwgc3csIHNoKSwgRmxvYXRSZWN0
KGR4LCBkeSwgZHcsIGRoKSwgZWMpOworICAgIGRyYXdJbWFnZShjYW52YXMsIEdyYXBoaWNzUmVj
dChzeCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxl
bWVudCogc291cmNlQ2FudmFzLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCi0gICAgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqIHNvdXJjZUNhbnZhcywg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAorICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
UmVjdCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFzb3VyY2VDYW52YXMpIHsKICAg
ICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEZsb2F0UmVjdCBzcmNDYW52YXNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc291
cmNlQ2FudmFzLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBzcmNDYW52YXNSZWN0ID0gR3Jh
cGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgc291cmNlQ2FudmFzLT5zaXplKCkpOwogCiAgICAg
aWYgKCFzcmNDYW52YXNSZWN0LndpZHRoKCkgfHwgIXNyY0NhbnZhc1JlY3QuaGVpZ2h0KCkpIHsK
ICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MjQsMTcgKzE0MjQsMTcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIEludFNpemUgcyA9IHNpemUodmlkZW8pOwotICAgIGRyYXdJbWFnZSh2aWRl
bywgRmxvYXRSZWN0KDAsIDAsIHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEZsb2F0UmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KSwgZWMpOworICAgIGRyYXdJbWFnZSh2aWRlbywgR3JhcGhpY3NSZWN0
KDAsIDAsIHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEdyYXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLAogICAgIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3csIGZsb2F0IHNoLAogICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0
IGRoLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBkcmF3SW1hZ2UodmlkZW8sIEZsb2F0UmVj
dChzeCwgc3ksIHN3LCBzaCksIEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCksIGVjKTsKKyAgICBk
cmF3SW1hZ2UodmlkZW8sIEdyYXBoaWNzUmVjdChzeCwgc3ksIHN3LCBzaCksIEdyYXBoaWNzUmVj
dChkeCwgZHksIGR3LCBkaCksIGVjKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdJbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKCF2aWRlbykgewpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIGlmICh2aWRlby0+cmVhZHlTdGF0ZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORyB8fCB2aWRlby0+cmVhZHlTdGF0ZSgpID09IEhUTUxN
ZWRpYUVsZW1lbnQ6OkhBVkVfTUVUQURBVEEpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UmVjdCB2aWRlb1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKHZpZGVvKSk7Cisg
ICAgR3JhcGhpY3NSZWN0IHZpZGVvUmVjdCA9IEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCks
IHNpemUodmlkZW8pKTsKICAgICBpZiAoIXZpZGVvUmVjdC5jb250YWlucyhub3JtYWxpemVSZWN0
KHNyY1JlY3QpKSB8fCAhc3JjUmVjdC53aWR0aCgpIHx8ICFzcmNSZWN0LmhlaWdodCgpKSB7CiAg
ICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTE0NjcsNyAr
MTQ2Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmMpOwogICAgIGMtPmNsaXAoZHN0
UmVjdCk7CiAgICAgYy0+dHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAg
Yy0+c2NhbGUoRmxvYXRTaXplKGRzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKSwgZHN0
UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKKyAgICBjLT5zY2FsZShHcmFwaGlj
c1NpemUoZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgp
IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwogICAgIGMtPnRyYW5zbGF0ZSgtc3JjUmVjdC54KCksIC1z
cmNSZWN0LnkoKSk7CiAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGMsIElu
dFJlY3QoSW50UG9pbnQoKSwgc2l6ZSh2aWRlbykpKTsKICAgICBzdGF0ZVNhdmVyLnJlc3RvcmUo
KTsKQEAgLTE0ODUsNyArMTQ4NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UKICAgICAgICAgb3AgPSBDb21wb3NpdGVTb3VyY2VPdmVyOwogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYzsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBz
aCksIEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCksIG9wLCBlYyk7CisgICAgZHJhd0ltYWdlKGlt
YWdlLCBHcmFwaGljc1JlY3Qoc3gsIHN5LCBzdywgc2gpLCBHcmFwaGljc1JlY3QoZHgsIGR5LCBk
dywgZGgpLCBvcCwgZWMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
QWxwaGEoZmxvYXQgYWxwaGEpCkBAIC0xNTExLDcgKzE1MTEsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBU
PiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvCiB7CiAgICAgQVNTRVJUKHNob3VsZERpc3BsYXlUcmFu
c3BhcmVuY3lFbHNld2hlcmUoKSk7CiAKLSAgICBGbG9hdFJlY3QgY2FudmFzUmVjdCgwLCAwLCBj
YW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3Qg
Y2FudmFzUmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsK
ICAgICBjYW52YXNSZWN0ID0gc3RhdGUoKS5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChj
YW52YXNSZWN0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CkBAIC0xNTM5LDcgKzE1MzksNyBAQCBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBDYW52YXNS
ZW5kZXJpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxDYW52YXNHcmFk
aWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAsIHkw
KSwgRmxvYXRQb2ludCh4MSwgeTEpKTsKKyAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRp
ZW50ID0gQ2FudmFzR3JhZGllbnQ6OmNyZWF0ZShHcmFwaGljc1BvaW50KHgwLCB5MCksIEdyYXBo
aWNzUG9pbnQoeDEsIHkxKSk7CiAgICAgcHJlcGFyZUdyYWRpZW50Rm9yRGFzaGJvYXJkKGdyYWRp
ZW50LmdldCgpKTsKICAgICByZXR1cm4gZ3JhZGllbnQucmVsZWFzZSgpOwogfQpAQCAtMTU1Niw3
ICsxNTU2LDcgQEAgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gQ2FudmFzUmVuZGVyaQogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRp
ZW50ID0gQ2FudmFzR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHgwLCB5MCksIHIwLCBGbG9h
dFBvaW50KHgxLCB5MSksIHIxKTsKKyAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50
ID0gQ2FudmFzR3JhZGllbnQ6OmNyZWF0ZShHcmFwaGljc1BvaW50KHgwLCB5MCksIHIwLCBHcmFw
aGljc1BvaW50KHgxLCB5MSksIHIxKTsKICAgICBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9hcmQo
Z3JhZGllbnQuZ2V0KCkpOwogICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CiB9CkBAIC0x
NjA1LDcgKzE2MDUsNyBAQCBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmlu
CiAgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShjYW52YXMtPmNvcGllZEltYWdlKCks
IHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4oKSk7CiB9CiAKLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWdu
ZWQgb3B0aW9ucykKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0
IEdyYXBoaWNzUmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKQEAgLTE2MTMsNyArMTYxMyw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGMKICAgICBpZiAoIXN0
YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qg
ZGlydHlSZWN0ID0gcjsKKyAgICBHcmFwaGljc1JlY3QgZGlydHlSZWN0ID0gcjsKICAgICBpZiAo
b3B0aW9ucyAmIENhbnZhc0RpZERyYXdBcHBseVRyYW5zZm9ybSkgewogICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gY3RtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKICAgICAgICAgZGlydHlSZWN0ID0g
Y3RtLm1hcFJlY3Qocik7CkBAIC0xNjIxLDcgKzE2MjEsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZGlkRHJhdyhjCiAKICAgICBpZiAob3B0aW9ucyAmIENhbnZhc0RpZERyYXdB
cHBseVNoYWRvdyAmJiBhbHBoYUNoYW5uZWwoc3RhdGUoKS5tX3NoYWRvd0NvbG9yKSkgewogICAg
ICAgICAvLyBUaGUgc2hhZG93IGdldHMgYXBwbGllZCBhZnRlciB0cmFuc2Zvcm1hdGlvbgotICAg
ICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOworICAgICAgICBHcmFwaGljc1Jl
Y3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOwogICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc3RhdGUo
KS5tX3NoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzdGF0ZSgpLm1f
c2hhZG93Qmx1cik7CiAgICAgICAgIGRpcnR5UmVjdC51bml0ZShzaGFkb3dSZWN0KTsKQEAgLTE2
NzcsNyArMTY3Nyw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNSZW5kZXJpbmdDb24K
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZShm
YWJzKHN3KSwgZmFicyhzaCkpOworICAgIEdyYXBoaWNzU2l6ZSB1bnNjYWxlZFNpemUoZmFicyhz
dyksIGZhYnMoc2gpKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYW52YXMoKS0+Y29udmVy
dExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNpemUpOwogICAgIGlmIChzY2FsZWRTaXplLndpZHRo
KCkgPCAxKQogICAgICAgICBzY2FsZWRTaXplLnNldFdpZHRoKDEpOwpAQCAtMTcxNSw3ICsxNzE1
LDcgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IENhbnZhc1JlbmRlcmluZ0NvbgogICAgICAgICBz
aCA9IC1zaDsKICAgICB9CiAgICAgCi0gICAgRmxvYXRSZWN0IHVuc2NhbGVkUmVjdChzeCwgc3ks
IHN3LCBzaCk7CisgICAgR3JhcGhpY3NSZWN0IHVuc2NhbGVkUmVjdChzeCwgc3ksIHN3LCBzaCk7
CiAgICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gY2FudmFzKCktPmNvbnZlcnRMb2dpY2FsVG9EZXZp
Y2UodW5zY2FsZWRSZWN0KTsKICAgICBpZiAoc2NhbGVkUmVjdC53aWR0aCgpIDwgMSkKICAgICAg
ICAgc2NhbGVkUmVjdC5zZXRXaWR0aCgxKTsKQEAgLTE3NjcsNyArMTc2Nyw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZUQKICAgICAgICAgZGlydHlIZWlnaHQgPSAt
ZGlydHlIZWlnaHQ7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGNsaXBSZWN0KGRpcnR5WCwgZGly
dHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IGNsaXBSZWN0
KGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiAgICAgY2xpcFJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS0+d2lkdGgoKSwgZGF0YS0+aGVpZ2h0KCkpKTsK
ICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0
PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlw
UmVjdCk7CkBAIC0xOTEzLDcgKzE5MTMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd1RleHRJCiAgICAgVGV4dFJ1biB0ZXh0UnVuKHN0cmluZywgbGVuZ3RoLCBmYWxzZSwg
MCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgZGlyZWN0aW9uLCBvdmVycmlk
ZSwgVGV4dFJ1bjo6Tm9Sb3VuZGluZyk7CiAKICAgICAvLyBEcmF3IHRoZSBpdGVtIHRleHQgYXQg
dGhlIGNvcnJlY3QgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBsb2NhdGlvbih4LCB5KTsKKyAgICBH
cmFwaGljc1BvaW50IGxvY2F0aW9uKHgsIHkpOwogICAgIHN3aXRjaCAoc3RhdGUoKS5tX3RleHRC
YXNlbGluZSkgewogICAgIGNhc2UgVG9wVGV4dEJhc2VsaW5lOgogICAgIGNhc2UgSGFuZ2luZ1Rl
eHRCYXNlbGluZToKQEAgLTE5NTIsNyArMTk1Miw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3VGV4dEkKICAgICB9CiAKICAgICAvLyBUaGUgc2xvcCBidWlsdCBpbiB0byB0
aGlzIG1hc2sgcmVjdCBtYXRjaGVzIHRoZSBoZXVyaXN0aWMgdXNlZCBpbiBGb250Q0dXaW4uY3Bw
IGZvciBHREkgdGV4dC4KLSAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBGbG9hdFJlY3QobG9jYXRp
b24ueCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkgLyAyLCBsb2NhdGlvbi55KCkgLSBmb250TWV0
cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxpbmVHYXAoKSwKKyAgICBHcmFwaGljc1JlY3Qg
dGV4dFJlY3QgPSBHcmFwaGljc1JlY3QobG9jYXRpb24ueCgpIC0gZm9udE1ldHJpY3MuaGVpZ2h0
KCkgLyAyLCBsb2NhdGlvbi55KCkgLSBmb250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNz
LmxpbmVHYXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggKyBm
b250TWV0cmljcy5oZWlnaHQoKSwgZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSk7CiAgICAgaWYg
KCFmaWxsKQogICAgICAgICB0ZXh0UmVjdC5pbmZsYXRlKGMtPnN0cm9rZVRoaWNrbmVzcygpIC8g
Mik7CkBAIC0yMDA2LDcgKzIwMDYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd1RleHRJCiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdoZW4gc3Ryb2tpbmcgdGV4dCwgcG9p
bnR5IG1pdGVycyBjYW4gZXh0ZW5kIG91dHNpZGUgb2YgdGV4dFJlY3QsIHNvIHdlCiAgICAgICAg
IC8vIHB1bnQgYW5kIGRpcnR5IHRoZSB3aG9sZSBjYW52YXMuCi0gICAgICAgIGRpZERyYXcoRmxv
YXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAg
ICAgICAgZGlkRHJhdyhHcmFwaGljc1JlY3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZh
cygpLT5oZWlnaHQoKSkpOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgogI2luY2x1ZGUgIlBhdGguaCIKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQ2FudmFzR3JhZGllbnQ7CiBjbGFzcyBDYW52YXNQYXR0ZXJuOwog
Y2xhc3MgQ2FudmFzU3R5bGU7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKIGNsYXNz
IEhUTUxJbWFnZUVsZW1lbnQ7CkBAIC0xNjgsMTcgKzE2OCwxNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZs
b2F0IHN3LCBmbG9hdCBzaCwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50Kiwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0
IHgsIGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2Fu
dmFzRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCos
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0lt
YWdlKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGRyYXdJbWFnZShI
VE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdG9yJiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9w
ZXJhdG9yJiwgRXhjZXB0aW9uQ29kZSYpOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGRy
YXdJbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQgeSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQg
c3csIGZsb2F0IHNoLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBjb25zdCBHcmFw
aGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9u
Q29kZSYpOwogI2VuZGlmCiAKICAgICB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhUTUxJbWFnZUVs
ZW1lbnQqLCBmbG9hdCBzeCA9IDAsIGZsb2F0IHN5ID0gMCwgZmxvYXQgc3cgPSAwLCBmbG9hdCBz
aCA9IDAsCkBAIC0yNDEsNyArMjQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTGluZUNhcCBtX2xp
bmVDYXA7CiAgICAgICAgIExpbmVKb2luIG1fbGluZUpvaW47CiAgICAgICAgIGZsb2F0IG1fbWl0
ZXJMaW1pdDsKLSAgICAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OworICAgICAgICBHcmFw
aGljc1NpemUgbV9zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGZsb2F0IG1fc2hhZG93Qmx1cjsKICAg
ICAgICAgUkdCQTMyIG1fc2hhZG93Q29sb3I7CiAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7
CkBAIC0yNzUsNyArMjc1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYXBwbHlTaGFkb3coKTsK
IAotICAgIHZvaWQgZGlkRHJhdyhjb25zdCBGbG9hdFJlY3QmLCB1bnNpZ25lZCBvcHRpb25zID0g
Q2FudmFzRGlkRHJhd0FwcGx5QWxsKTsKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgR3JhcGhpY3NS
ZWN0JiwgdW5zaWduZWQgb3B0aW9ucyA9IENhbnZhc0RpZERyYXdBcHBseUFsbCk7CiAKICAgICBH
cmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogICAgIGVsc2UgewogI2VuZGlmCiAg
ICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkKLSAgICAgICAgICAgIGNhbnZhcygpLT5k
aWREcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdo
dCgpKSk7CisgICAgICAgICAgICBjYW52YXMoKS0+ZGlkRHJhdyhHcmFwaGljc1JlY3QoMCwgMCwg
Y2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaWZuZGVmIFNsaWRlclRodW1iRWxlbWVudF9oCiAj
ZGVmaW5lIFNsaWRlclRodW1iRWxlbWVudF9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIK
QEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEVsZW1lbnQ7
CiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGbG9hdFBvaW50
OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIAogY2xhc3MgU2xpZGVyVGh1bWJFbGVtZW50IDogcHVi
bGljIEhUTUxEaXZFbGVtZW50IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsK
IAotUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKK1BhdGggcXVhZFRvUGF0
aChjb25zdCBHcmFwaGljc1F1YWQmIHF1YWQpCiB7CiAgICAgUGF0aCBxdWFkUGF0aDsKICAgICBx
dWFkUGF0aC5tb3ZlVG8ocXVhZC5wMSgpKTsKQEAgLTU4LDcgKzU4LDcgQEAgUGF0aCBxdWFkVG9Q
YXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gcXVhZFBhdGg7CiB9CiAKLXZv
aWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3ZvaWQgZHJhd091dGxpbmVkUXVh
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCwgY29u
c3QgQ29sb3ImIGZpbGxDb2xvcikKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IG91dGxpbmVUaGlj
a25lc3MgPSAyOwogICAgIHN0YXRpYyBjb25zdCBDb2xvciBvdXRsaW5lQ29sb3IoNjIsIDg2LCAx
ODAsIDIyOCk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGlj
c0NvbnRleHQmIGMKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsKIH0KIAotdm9pZCBk
cmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBm
aWxsQ29sb3IpCit2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBj
bGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKIHsKICAgICBjb250ZXh0LnNhdmUoKTsK
ICAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwpAQCAtOTIsMTQg
KzkyLDE0IEBAIHZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ28KICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxv
YXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBG
bG9hdFF1YWQmIG1hcmdpblF1YWQsIERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0TW9kZSBt
b2RlKQordm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgR3JhcGhpY3NRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBwYWRk
aW5nUXVhZCwgY29uc3QgR3JhcGhpY3NRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBHcmFwaGljc1F1
YWQmIG1hcmdpblF1YWQsIERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0TW9kZSBtb2RlKQog
ewogICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb250ZW50Qm94Q29sb3IoMTI1LCAxNzMsIDIxNywg
MTI4KTsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgcGFkZGluZ0JveENvbG9yKDEyNSwgMTczLCAy
MTcsIDE2MCk7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIGJvcmRlckJveENvbG9yKDEyNSwgMTcz
LCAyMTcsIDE5Mik7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIG1hcmdpbkJveENvbG9yKDEyNSwg
MTczLCAyMTcsIDIyOCk7CiAKLSAgICBGbG9hdFF1YWQgY2xpcFF1YWQ7CisgICAgR3JhcGhpY3NR
dWFkIGNsaXBRdWFkOwogICAgIGlmIChtb2RlID09IERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxp
Z2h0TWFyZ2luIHx8IChtb2RlID09IERPTU5vZGVIaWdobGlnaHRlcjo6SGlnaGxpZ2h0QWxsICYm
IG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkpIHsKICAgICAgICAgZHJhd091dGxpbmVkUXVhZFdp
dGhDbGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdpbkJveENvbG9yKTsK
ICAgICAgICAgY2xpcFF1YWQgPSBib3JkZXJRdWFkOwpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQg
ZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQKICAgICAgICAgZHJhd091dGxpbmVk
UXVhZFdpdGhDbGlwKGNvbnRleHQsIGNsaXBRdWFkLCBjbGlwUXVhZCwgY29udGVudEJveENvbG9y
KTsKIH0KIAotdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBsaW5lQm94UXVh
ZHMpCit2b2lkIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEdyYXBoaWNzUXVhZD4mIGxpbmVCb3hRdWFk
cykKIHsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgbGluZUJveENvbG9yKDEyNSwgMTczLCAyMTcs
IDEyOCk7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFpbkZy
YW1lT2Zmc2V0KEZyCiAgICAgcmV0dXJuIG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKIH0K
IAotdm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSog
bm9kZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hvckJv
eCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRp
bmdzKQordm9pZCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9k
ZSogbm9kZSwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEludFJlY3QmIGFuY2hv
ckJveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3Mq
IHNldHRpbmdzKQogewogICAgIHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7CiAg
ICAgc3RhdGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsKQEAgLTIzOSw3ICsyMzksNyBA
QCB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgSW50UmVjdCB0
aXRsZUFuY2hvckJveCA9IGJvdW5kaW5nQm94OwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gY29u
dGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0
IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgR3JhcGhpY3NS
ZWN0IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgaWYgKCFv
dmVybGF5UmVjdC5jb250YWlucyhib3VuZGluZ0JveCkgJiYgIWJvdW5kaW5nQm94LmNvbnRhaW5z
KGVuY2xvc2luZ0ludFJlY3Qob3ZlcmxheVJlY3QpKSkKICAgICAgICAgb3ZlcmxheVJlY3QgPSB2
aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb3Zlcmxh
eVJlY3QueCgpLCAtb3ZlcmxheVJlY3QueSgpKTsKQEAgLTI2NywxMCArMjY3LDEwIEBAIHZvaWQg
ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyQm94LndpZHRoKCkgKyByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSArIHJlbmRl
ckJveC0+bWFyZ2luUmlnaHQoKSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJn
aW5Ub3AoKSArIHJlbmRlckJveC0+bWFyZ2luQm90dG9tKCkpOwogCiAKLSAgICAgICAgRmxvYXRR
dWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0
UmVjdChjb250ZW50Qm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJl
bmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGluZ0JveCkpOwotICAg
ICAgICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNNYXJnaW5R
dWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJnaW5Cb3gp
KTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyQm94LT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChjb250ZW50Qm94KSk7CisgICAgICAgIEdyYXBo
aWNzUXVhZCBhYnNQYWRkaW5nUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChH
cmFwaGljc1JlY3QocGFkZGluZ0JveCkpOworICAgICAgICBHcmFwaGljc1F1YWQgYWJzQm9yZGVy
UXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoYm9yZGVy
Qm94KSk7CisgICAgICAgIEdyYXBoaWNzUXVhZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyQm94LT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChtYXJnaW5Cb3gpKTsKIAogICAgICAgICBh
YnNDb250ZW50UXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CiAgICAgICAgIGFic1BhZGRpbmdR
dWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIGRyYXdO
b2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgICAgIGRyYXdIaWdobGlnaHRGb3JC
b3goY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFk
LCBhYnNNYXJnaW5RdWFkLCBtb2RlKTsKICAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRl
cklubGluZSgpIHx8IGlzU1ZHUmVuZGVyZXIpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBzaG93IG1hcmdpbnMvcGFkZGluZy9ib3JkZXIgZm9yIGlubGluZXMuCi0gICAgICAgIFZlY3Rv
cjxGbG9hdFF1YWQ+IGxpbmVCb3hRdWFkczsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzUXVhZD4g
bGluZUJveFF1YWRzOwogICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhsaW5lQm94UXVh
ZHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUo
KTsgKytpKQogICAgICAgICAgICAgbGluZUJveFF1YWRzW2ldICs9IG1haW5GcmFtZU9mZnNldDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUg
IkNocm9tZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nCiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAg
RmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2luZG93UmVj
dCgpOworICAgIEdyYXBoaWNzUmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hyb21l
KCktPndpbmRvd1JlY3QoKTsKICAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKICAgICBtX2Zyb250
ZW5kUGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCAr
MzcsMTAgQEAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRm9jdXNEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQ
bHVnaW5IYWx0ZXJDbGllbnQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnUuaCIKQEAgLTg5LDEwICs4
OSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpIHsgfQog
CiAgICAgdmlydHVhbCB2b2lkKiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHdpbmRvd1JlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIHsgfQorICAgIHZp
cnR1YWwgR3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QoKSB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsg
fQogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgcGFnZVJlY3QoKSB7IHJldHVybiBGbG9hdFJlY3Qo
KTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCkgeyByZXR1cm4gR3JhcGhp
Y3NSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKSB7IHJldHVybiAx
LmY7IH0KIApAQCAtNTE3LDcgKzUxNyw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hlY2tlckNsaWVu
dCogdGV4dENoZWNrZXIoKSB7IHJldHVybiAmbV90ZXh0Q2hlY2tlckNsaWVudDsgfQogCiAjaWYg
VVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQotICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlv
blBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc21p
c3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyB9
CiAgICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlVHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQs
NyBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGb3JtU3VibWlzc2lv
bi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zMjY1LDggKzMyNjUsOCBAQCBGcmFtZSogY3Jl
YXRlV2luZG93KEZyYW1lKiBvcGVuZXJGcmFtZSwgCiAgICAgLy8gc3BlY2lmeSB0aGUgc2l6ZSBv
ZiB0aGUgcGFnZS4gV2UgY2FuIG9ubHkgcmVzaXplIHRoZSB3aW5kb3csIHNvCiAgICAgLy8gYWRq
dXN0IGZvciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3aW5kb3cgc2l6ZSBhbmQgdGhlIHBh
Z2Ugc2l6ZS4KIAotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0ID0gcGFnZS0+Y2hyb21lKCktPndp
bmRvd1JlY3QoKTsKLSAgICBGbG9hdFNpemUgcGFnZVNpemUgPSBwYWdlLT5jaHJvbWUoKS0+cGFn
ZVJlY3QoKS5zaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IHdpbmRvd1JlY3QgPSBwYWdlLT5jaHJv
bWUoKS0+d2luZG93UmVjdCgpOworICAgIEdyYXBoaWNzU2l6ZSBwYWdlU2l6ZSA9IHBhZ2UtPmNo
cm9tZSgpLT5wYWdlUmVjdCgpLnNpemUoKTsKICAgICBpZiAoZmVhdHVyZXMueFNldCkKICAgICAg
ICAgd2luZG93UmVjdC5zZXRYKGZlYXR1cmVzLngpOwogICAgIGlmIChmZWF0dXJlcy55U2V0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNp
bmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAjaW5j
bHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgog
I2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCkBAIC0xMzIsMTcgKzEzMiwxNyBAQCB2b2lkIENocm9t
ZTo6c2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjCiAgICAgbV9jbGllbnQtPnNjcm9sbGJhcnNN
b2RlRGlkQ2hhbmdlKCk7CiB9CiAKLXZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQgQ2hyb21lOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBtX2NsaWVudC0+c2V0V2luZG93UmVjdChy
ZWN0KTsKIH0KIAotRmxvYXRSZWN0IENocm9tZTo6d2luZG93UmVjdCgpIGNvbnN0CitHcmFwaGlj
c1JlY3QgQ2hyb21lOjp3aW5kb3dSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jbGllbnQt
PndpbmRvd1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IENocm9tZTo6cGFnZVJlY3QoKSBjb25zdAor
R3JhcGhpY3NSZWN0IENocm9tZTo6cGFnZVJlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX2Ns
aWVudC0+cGFnZVJlY3QoKTsKIH0KQEAgLTUxMywxMiArNTEzLDEyIEBAIHZvaWQgQ2hyb21lQ2xp
ZW50Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygKIHsKIH0KIAotRmxvYXRSZWN0IENocm9tZUNsaWVu
dDo6Y3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
RmxvYXRSZWN0JikKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnQ6OmN1c3RvbUhpZ2hsaWdodFJl
Y3QoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7Ci0g
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAot
dm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sLCBib29s
KQordm9pZCBDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBB
dG9taWNTdHJpbmcmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBi
b29sLCBib29sKQogewogfQogCkBAIC01MzMsMTQgKzUzMywxNCBAQCBTdHJpbmcgQ2hyb21lQ2xp
ZW50OjpnZW5lcmF0ZVJlcGxhY2VtZW50CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29s
IENocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsCitib29sIENocm9tZUNsaWVudDo6
cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiwgU2Nyb2xsYmFyQ29udHJvbFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2Nyb2xsYmFyQ29udHJvbFN0YXRlLCBTY3JvbGxiYXJQYXJ0LCBib29sLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgU2Nyb2xs
YmFyQ29udHJvbFBhcnRNYXNrKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBDaHJv
bWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYpCitib29sIENocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICByZXR1cm4gZmFs
c2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50OwogICAgIGNsYXNzIEZp
bGVDaG9vc2VyOwogICAgIGNsYXNzIEZpbGVJY29uTG9hZGVyOwotICAgIGNsYXNzIEZsb2F0UmVj
dDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3Mg
R2VvbG9jYXRpb247CiAgICAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTg3LDEwICs4NywxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChG
cmFtZSosIGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICAgICAgdm9pZCBsYXlvdXRVcGRhdGVk
KEZyYW1lKikgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGNvbnN0OwotICAgICAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCgpIGNvbnN0OworICAg
ICAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CisgICAg
ICAgIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCkgY29uc3Q7CiAKLSAgICAgICAgRmxvYXRSZWN0
IHBhZ2VSZWN0KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpIGNvbnN0
OwogICAgICAgICAKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRmlsZUNob29z
ZXI7CiAgICAgY2xhc3MgRmlsZUljb25Mb2FkZXI7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAg
IGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBHZW9sb2Nh
dGlvbjsKICAgICBjbGFzcyBHcmFwaGljc0xheWVyOwpAQCAtNzksMTAgKzc5LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVE
ZXN0cm95ZWQoKSA9IDA7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93
UmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdp
bmRvd1JlY3QoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYpID0gMDsKKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgd2luZG93
UmVjdCgpID0gMDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHBhZ2VSZWN0
KCkgPSAwOworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpID0gMDsKICAg
ICAgICAgCiAgICAgICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKSA9IDA7CiAgICAgCkBA
IC0yMDksMTcgKzIwOSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJl
Y3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBj
b25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0
UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwKKyAgICAgICAgdmlydHVh
bCBHcmFwaGljc1JlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChOb2RlKiwgY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGxpbmVSZWN0KTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBsaW5l
UmVjdCwKICAgICAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9vbCBlbnRpcmVMaW5lKTsKICAg
ICAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0
ZWRGaWxlRm9yVXBsb2FkKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RyaW5nJiBnZW5lcmF0ZWRGaWxl
bmFtZSk7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Ny
b2xsYmFyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIFNjcm9sbGJhckNvbnRy
b2xTaXplLCAKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsYmFyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNjcm9sbGJhckNvbnRyb2xTaXplLCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRy
b2xTdGF0ZSwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlLCBmbG9hdCBw
cm9wb3J0aW9uLCBTY3JvbGxiYXJDb250cm9sUGFydE1hc2spOwotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbENvcm5lcihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDdXN0b21PdmVyaGFuZ0FyZWEoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIERPTVdp
bmRvdzo6ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkCiAvLyAgICBzY3JlZW4gcmVjdC4KIC8vIDUp
IFRyYW5zbGF0ZSB0aGUgd2luZG93IHJlY3QgY29vcmRpbmF0ZXMgdG8gYmUgd2l0aGluIHRoZSBj
b29yZGluYXRlIHNwYWNlIG9mCiAvLyAgICB0aGUgc2NyZWVuIHJlY3QuCi12b2lkIERPTVdpbmRv
dzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHNjcmVlbiwgRmxvYXRSZWN0JiB3
aW5kb3csIGNvbnN0IEZsb2F0UmVjdCYgcGVuZGluZ0NoYW5nZXMpCit2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHNjcmVlbiwgR3JhcGhpY3NSZWN0
JiB3aW5kb3csIGNvbnN0IEdyYXBoaWNzUmVjdCYgcGVuZGluZ0NoYW5nZXMpCiB7CiAgICAgLy8g
TWFrZSBzdXJlIHdlJ3JlIGluIGEgdmFsaWQgc3RhdGUgYmVmb3JlIGFkanVzdGluZyBkaW1lbnNp
b25zLgogICAgIEFTU0VSVChpc2Zpbml0ZShzY3JlZW4ueCgpKSk7CkBAIC0zNDMsOCArMzQzLDgg
QEAgdm9pZCBET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3QoY29uc3QgRgogICAgICAgICB3aW5k
b3cuc2V0SGVpZ2h0KHBlbmRpbmdDaGFuZ2VzLmhlaWdodCgpKTsKICAgICAKICAgICAvLyBSZXNp
emUgdGhlIHdpbmRvdyB0byBiZXR3ZWVuIDEwMCBhbmQgdGhlIHNjcmVlbiB3aWR0aCBhbmQgaGVp
Z2h0LgotICAgIHdpbmRvdy5zZXRXaWR0aChtaW4obWF4KDEwMC4wZiwgd2luZG93LndpZHRoKCkp
LCBzY3JlZW4ud2lkdGgoKSkpOwotICAgIHdpbmRvdy5zZXRIZWlnaHQobWluKG1heCgxMDAuMGYs
IHdpbmRvdy5oZWlnaHQoKSksIHNjcmVlbi5oZWlnaHQoKSkpOworICAgIHdpbmRvdy5zZXRXaWR0
aChtaW4obWF4PEdyYXBoaWNzVW5pdD4oMTAwLjBmLCB3aW5kb3cud2lkdGgoKSksIHNjcmVlbi53
aWR0aCgpKSk7CisgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4PEdyYXBoaWNzVW5pdD4oMTAw
LjBmLCB3aW5kb3cuaGVpZ2h0KCkpLCBzY3JlZW4uaGVpZ2h0KCkpKTsKICAgICAKICAgICAvLyBD
b25zdHJhaW4gdGhlIHdpbmRvdyBwb3NpdGlvbiB0byB0aGUgc2NyZWVuLgogICAgIHdpbmRvdy5z
ZXRYKG1heChzY3JlZW4ueCgpLCBtaW4od2luZG93LngoKSwgc2NyZWVuLm1heFgoKSAtIHdpbmRv
dy53aWR0aCgpKSkpOwpAQCAtMTMxNSw3ICsxMzE1LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRQb2lu
dD4gRE9NV2luZG93Ojp3ZWJraQogCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBGbG9hdFBvaW50IHBhZ2VQb2lu
dChwLT54KCksIHAtPnkoKSk7CisgICAgR3JhcGhpY3NQb2ludCBwYWdlUG9pbnQocC0+eCgpLCBw
LT55KCkpOwogICAgIHBhZ2VQb2ludCA9IG5vZGUtPmNvbnZlcnRUb1BhZ2UocGFnZVBvaW50KTsK
ICAgICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShwYWdlUG9pbnQueCgpLCBwYWdlUG9pbnQu
eSgpKTsKIH0KQEAgLTEzMjcsNyArMTMyNyw3IEBAIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IERP
TVdpbmRvdzo6d2Via2kKIAogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgRmxvYXRQb2ludCBub2RlUG9pbnQocC0+
eCgpLCBwLT55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgbm9kZVBvaW50KHAtPngoKSwgcC0+eSgp
KTsKICAgICBub2RlUG9pbnQgPSBub2RlLT5jb252ZXJ0RnJvbVBhZ2Uobm9kZVBvaW50KTsKICAg
ICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShub2RlUG9pbnQueCgpLCBub2RlUG9pbnQueSgp
KTsKIH0KQEAgLTE0MDAsOCArMTQwMCw4IEBAIHZvaWQgRE9NV2luZG93Ojptb3ZlQnkoZmxvYXQg
eCwgZmxvYXQgeSkKICAgICBpZiAobV9mcmFtZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jl
Y3QoKTsKLSAgICBGbG9hdFJlY3QgdXBkYXRlID0gZnI7CisgICAgR3JhcGhpY3NSZWN0IGZyID0g
cGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgdXBkYXRlID0g
ZnI7CiAgICAgdXBkYXRlLm1vdmUoeCwgeSk7CiAgICAgLy8gU2VjdXJpdHkgY2hlY2sgKHRoZSBz
cGVjIHRhbGtzIGFib3V0IFVuaXZlcnNhbEJyb3dzZXJXcml0ZSB0byBkaXNhYmxlIHRoaXMgY2hl
Y2suLi4pCiAgICAgYWRqdXN0V2luZG93UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCkpLCBmciwgdXBkYXRlKTsKQEAgLTE0MjAsMTAgKzE0MjAsMTAgQEAg
dm9pZCBET01XaW5kb3c6Om1vdmVUbyhmbG9hdCB4LCBmbG9hdCB5KQogICAgIGlmIChtX2ZyYW1l
ICE9IHBhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3Qg
ZnIgPSBwYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwotICAgIEZsb2F0UmVjdCBzciA9IHNj
cmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CisgICAgR3JhcGhp
Y3NSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBHcmFwaGljc1Jl
Y3Qgc3IgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwog
ICAgIGZyLnNldExvY2F0aW9uKHNyLmxvY2F0aW9uKCkpOwotICAgIEZsb2F0UmVjdCB1cGRhdGUg
PSBmcjsKKyAgICBHcmFwaGljc1JlY3QgdXBkYXRlID0gZnI7CiAgICAgdXBkYXRlLm1vdmUoeCwg
eSk7ICAgICAKICAgICAvLyBTZWN1cml0eSBjaGVjayAodGhlIHNwZWMgdGFsa3MgYWJvdXQgVW5p
dmVyc2FsQnJvd3NlcldyaXRlIHRvIGRpc2FibGUgdGhpcyBjaGVjay4uLikKICAgICBhZGp1c3RX
aW5kb3dSZWN0KHNyLCBmciwgdXBkYXRlKTsKQEAgLTE0NDIsOSArMTQ0Miw5IEBAIHZvaWQgRE9N
V2luZG93OjpyZXNpemVCeShmbG9hdCB4LCBmbG9hdCAKICAgICBpZiAobV9mcmFtZSAhPSBwYWdl
LT5tYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGZyID0gcGFn
ZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsKLSAgICBGbG9hdFNpemUgZGVzdCA9IGZyLnNpemUo
KSArIEZsb2F0U2l6ZSh4LCB5KTsKLSAgICBGbG9hdFJlY3QgdXBkYXRlKGZyLmxvY2F0aW9uKCks
IGRlc3QpOworICAgIEdyYXBoaWNzUmVjdCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0
KCk7CisgICAgR3JhcGhpY3NTaXplIGRlc3QgPSBmci5zaXplKCkgKyBHcmFwaGljc1NpemUoeCwg
eSk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZShmci5sb2NhdGlvbigpLCBkZXN0KTsKICAgICBh
ZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKSksIGZyLCB1cGRhdGUpOwogICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZy
KTsKIH0KQEAgLTE0NjEsOSArMTQ2MSw5IEBAIHZvaWQgRE9NV2luZG93OjpyZXNpemVUbyhmbG9h
dCB3aWR0aCwgZmwKICAgICBpZiAobV9mcmFtZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jl
Y3QoKTsKLSAgICBGbG9hdFNpemUgZGVzdCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBGbG9hdFJlY3QgdXBkYXRlKGZyLmxvY2F0aW9uKCksIGRlc3QpOworICAgIEdyYXBoaWNzUmVj
dCBmciA9IHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7CisgICAgR3JhcGhpY3NTaXplIGRl
c3QgPSBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCk7CisgICAgR3JhcGhpY3NSZWN0IHVwZGF0
ZShmci5sb2NhdGlvbigpLCBkZXN0KTsKICAgICBhZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWls
YWJsZVJlY3QocGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSksIGZyLCB1cGRhdGUpOwogICAgIHBh
Z2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyKTsKIH0KQEAgLTE4MjYsNyArMTgyNiw3IEBA
IFBhc3NSZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4oY28KICAgICB9CiAKICAgICBX
aW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyh3aW5kb3dGZWF0dXJlc1N0cmluZyk7Ci0gICAg
RmxvYXRSZWN0IHdpbmRvd1JlY3Qod2luZG93RmVhdHVyZXMueFNldCA/IHdpbmRvd0ZlYXR1cmVz
LnggOiAwLCB3aW5kb3dGZWF0dXJlcy55U2V0ID8gd2luZG93RmVhdHVyZXMueSA6IDAsCisgICAg
R3JhcGhpY3NSZWN0IHdpbmRvd1JlY3Qod2luZG93RmVhdHVyZXMueFNldCA/IHdpbmRvd0ZlYXR1
cmVzLnggOiAwLCB3aW5kb3dGZWF0dXJlcy55U2V0ID8gd2luZG93RmVhdHVyZXMueSA6IDAsCiAg
ICAgICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0ID8gd2luZG93RmVhdHVyZXMud2lkdGggOiAw
LCB3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQgPyB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgOiAwKTsK
ICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIERPTVdpbmRvdzo6YWRqdXN0
V2luZG93UmVjdChzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UgPyBwYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpIDogMCksIHdpbmRvd1JlY3QsIHdpbmRvd1JlY3QpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEVycm9yQ2FsbGJhY2s7CiAgICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAg
ICBjbGFzcyBGaWxlU3lzdGVtQ2FsbGJhY2s7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNs
YXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBIaXN0b3J5Owog
ICAgIGNsYXNzIElEQkZhY3Rvcnk7CkBAIC0xMDYsNyArMTA2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBzdGF0aWMgYm9vbCBkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRF
dmVudHMoKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZl
bnRzKCk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0V2luZG93UmVjdChjb25zdCBGbG9h
dFJlY3QmIHNjcmVlbiwgRmxvYXRSZWN0JiB3aW5kb3csIGNvbnN0IEZsb2F0UmVjdCYgcGVuZGlu
Z0NoYW5nZXMpOworICAgICAgICBzdGF0aWMgdm9pZCBhZGp1c3RXaW5kb3dSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgc2NyZWVuLCBHcmFwaGljc1JlY3QmIHdpbmRvdywgY29uc3QgR3JhcGhpY3NS
ZWN0JiBwZW5kaW5nQ2hhbmdlcyk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiByZW1vdmUg
dGhpcyBmdW5jdGlvbiBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBjaGFuZ2VkIHRvIHVzZSBE
T01XaW5kb3cuCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhj
b25zdCBTdHJpbmcmLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBAIC0yNjcsNyArMjY3LDcgQEAg
c3RhdGljIEVsZW1lbnQqIGVsZW1lbnRVbmRlck1vdXNlKERvY3VtZQogewogICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50VW5kZXJNb3VzZS0+ZnJhbWUoKTsKICAgICBmbG9hdCB6b29tRmFjdG9y
ID0gZnJhbWUgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDE7Ci0gICAgSW50UG9pbnQgcG9p
bnQgPSByb3VuZGVkSW50UG9pbnQoRmxvYXRQb2ludChwLngoKSAqIHpvb21GYWN0b3IsIHAueSgp
ICogem9vbUZhY3RvcikpOworICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50KEdy
YXBoaWNzUG9pbnQocC54KCkgKiB6b29tRmFjdG9yLCBwLnkoKSAqIHpvb21GYWN0b3IpKTsKIAog
ICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQocG9pbnQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJUZXh0QWZmaW5pdHkuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTE1Niw3ICsx
NTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkK
LSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFuZWxJbmZv
OjpQYW5lbFR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY21lbnRT
dHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5n
cykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFj
ZW1lbnRTdHJpbmdzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFu
ZWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwg
U3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFJlYXNvbkZvckRpc21pc3NpbmdDb3Jy
ZWN0aW9uUGFuZWwpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZykgPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDggQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5j
bHVkZSAiRXZlbnRRdWV1ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNjU5LDcgKzY1OSw3IEBAIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uRXh0ZW50UmUKICAgICAgICAgaWYgKCFlZGl0YWJsZUVs
ZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
CiAKLSAgICAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFyZ2V0Tm9kZS0+cmVuZGVy
ZXIoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoc2VsZWN0aW9uRW5kUG9pbnQpKTsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludCBhYnNvbHV0ZVBvaW50ID0gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIo
KS0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoc2VsZWN0aW9uRW5kUG9pbnQpKTsKICAg
ICAgICAgc2VsZWN0aW9uRW5kUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoZWRpdGFibGVFbGVtZW50
LT5yZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2ludCkpOwogICAgICAgICB0
YXJnZXROb2RlID0gZWRpdGFibGVFbGVtZW50OwogICAgIH0KQEAgLTIzNTIsNyArMjM1Miw3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaEZha2VNb3VzZU1vdmUKICAgICAgICAgbV9mYWtl
TW91c2VNb3ZlRXZlbnRUaW1lci5zdGFydE9uZVNob3QoZmFrZU1vdXNlTW92ZUludGVydmFsKTsK
IH0KIAotdm9pZCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbklu
UXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit2b2lkIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hG
YWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVhZCkKIHsK
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpA
QCAtMjY4Miw3ICsyNjgyLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2
ZW50SAogfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKLWJvb2wgRXZlbnRIYW5kbGVyOjpk
cmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0RHJhZ1ZpZXdwb3J0
TG9jYXRpb24pIGNvbnN0Citib29sIEV2ZW50SGFuZGxlcjo6ZHJhZ0h5c3RlcmVzaXNFeGNlZWRl
ZChjb25zdCBHcmFwaGljc1BvaW50JiBmbG9hdERyYWdWaWV3cG9ydExvY2F0aW9uKSBjb25zdAog
ewogICAgIEludFBvaW50IGRyYWdWaWV3cG9ydExvY2F0aW9uKChpbnQpZmxvYXREcmFnVmlld3Bv
cnRMb2NhdGlvbi54KCksIChpbnQpZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbi55KCkpOwogICAg
IHJldHVybiBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGRyYWdWaWV3cG9ydExvY2F0aW9uKTsKQEAg
LTI4NDUsNyArMjg0NSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnKGNvbnN0IE1v
dXMKICAgICAgICAgaWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1R5cGUgPT0gRHJhZ1NvdXJjZUFjdGlv
bkRIVE1MKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRyYWdT
dGF0ZSgpLm1fZHJhZ1NyYy0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZSgpOwor
ICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gcmVuZGVyZXItPmxvY2FsVG9B
YnNvbHV0ZSgpOwogICAgICAgICAgICAgICAgIEludFNpemUgZGVsdGEgPSBtX21vdXNlRG93blBv
cyAtIHJvdW5kZWRJbnRQb2ludChhYnNQb3MpOwogICAgICAgICAgICAgICAgIGRyYWdTdGF0ZSgp
Lm1fZHJhZ0NsaXBib2FyZC0+c2V0RHJhZ0ltYWdlRWxlbWVudChkcmFnU3RhdGUoKS5tX2RyYWdT
cmMuZ2V0KCksIHRvUG9pbnQoZGVsdGEpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBA
QCBjbGFzcyBDbGlwYm9hcmQ7CiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2
ZW50VGFyZ2V0OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEdy
YXBoaWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1F1YWQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhU
TUxGcmFtZVNldEVsZW1lbnQ7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKQEAgLTExNiw3ICsxMTYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKIAogICAg
IHZvaWQgZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Ci0gICAgdm9pZCBkaXNwYXRj
aEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQoY29uc3QgRmxvYXRRdWFkJik7CisgICAgdm9p
ZCBkaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQoY29uc3QgR3JhcGhpY3NRdWFk
Jik7CiAKICAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnN0IEludFBv
aW50JiwgYm9vbCBhbGxvd1NoYWRvd0NvbnRlbnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcgPSBmYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RTY3JvbGxi
YXJzIHNjcm9sbGJhcnMgPSBEb250SGl0VGVzdFNjcm9sbGJhcnMsCkBAIC0yOTEsNyArMjkxLDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCi0gICAgYm9v
bCBkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBi
b29sIGRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0Owog
ICAgIGJvb2wgZHJhZ0h5c3RlcmVzaXNFeGNlZWRlZChjb25zdCBJbnRQb2ludCYpIGNvbnN0Owog
I2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNp
bmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiRm9j
dXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgpAQCAtNTQ4LDcgKzU0OCw3IEBAIENvbG9yIEZyYW1lOjpnZXREb2N1
bWVudEJhY2tncm91bmRDb2xvcigKICAgICByZXR1cm4gdmlldygpLT5iYXNlQmFja2dyb3VuZENv
bG9yKCkuYmxlbmQoaHRtbEJhY2tncm91bmRDb2xvcikuYmxlbmQoYm9keUJhY2tncm91bmRDb2xv
cik7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGNvbnN0IEZs
b2F0U2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywgQWRqdXN0Vmlld1Np
emVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKK3ZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJv
b2wgcHJpbnRpbmcsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1T
aHJpbmtSYXRpbywgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKIHsK
ICAgICAvLyBJbiBzZXR0aW5nIHByaW50aW5nLCB3ZSBzaG91bGQgbm90IHZhbGlkYXRlIHJlc291
cmNlcyBhbHJlYWR5IGNhY2hlZCBmb3IgdGhlIGRvY3VtZW50LgogICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM3MDQKQEAgLTU3MSwxMSArNTcxLDEx
IEBAIHZvaWQgRnJhbWU6OnNldFByaW50aW5nKGJvb2wgcHJpbnRpbmcsIGMKICAgICAgICAgY2hp
bGQtPnNldFByaW50aW5nKHByaW50aW5nLCBJbnRTaXplKCksIDAsIHNob3VsZEFkanVzdFZpZXdT
aXplKTsKIH0KIAotRmxvYXRTaXplIEZyYW1lOjpyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8o
Y29uc3QgRmxvYXRTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgZXhwZWN0ZWRT
aXplKQorR3JhcGhpY3NTaXplIEZyYW1lOjpyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oY29u
c3QgR3JhcGhpY3NTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZXhwZWN0
ZWRTaXplKQogewotICAgIEZsb2F0U2l6ZSByZXN1bHRTaXplOworICAgIEdyYXBoaWNzU2l6ZSBy
ZXN1bHRTaXplOwogICAgIGlmICghY29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogCiAgICAgaWYgKGNv
bnRlbnRSZW5kZXJlcigpLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAg
ICAgICAgIGZsb2F0IHJhdGlvID0gb3JpZ2luYWxTaXplLmhlaWdodCgpIC8gb3JpZ2luYWxTaXpl
LndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDggKzE0Nyw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25z
dDsgLy8gY2FuIGJlIE5VTEwKIAotICAgICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcHJpbnRp
bmcsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemUsIGZsb2F0IG1heGltdW1TaHJpbmtSYXRpbywg
QWRqdXN0Vmlld1NpemVPck5vdCk7Ci0gICAgICAgIEZsb2F0U2l6ZSByZXNpemVQYWdlUmVjdHNL
ZWVwaW5nUmF0aW8oY29uc3QgRmxvYXRTaXplJiBvcmlnaW5hbFNpemUsIGNvbnN0IEZsb2F0U2l6
ZSYgZXhwZWN0ZWRTaXplKTsKKyAgICAgICAgdm9pZCBzZXRQcmludGluZyhib29sIHByaW50aW5n
LCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8s
IEFkanVzdFZpZXdTaXplT3JOb3QpOworICAgICAgICBHcmFwaGljc1NpemUgcmVzaXplUGFnZVJl
Y3RzS2VlcGluZ1JhdGlvKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb3JpZ2luYWxTaXplLCBjb25zdCBH
cmFwaGljc1NpemUmIGV4cGVjdGVkU2l6ZSk7CiAKICAgICAgICAgYm9vbCBpblZpZXdTb3VyY2VN
b2RlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sID0gdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CkBAIC0yNjEwLDcgKzI2MTAsNyBAQCB2b2lkIEZyYW1lVmlldzo6Zm9yY2VMYXlvdXQoYm9vbCBh
bGxvd1N1CiAgICAgbGF5b3V0KGFsbG93U3VidHJlZSk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojpm
b3JjZUxheW91dEZvclBhZ2luYXRpb24oY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQg
bWF4aW11bVNocmlua0ZhY3RvciwgQWRqdXN0Vmlld1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3
U2l6ZSkKK3ZvaWQgRnJhbWVWaWV3Ojpmb3JjZUxheW91dEZvclBhZ2luYXRpb24oY29uc3QgR3Jh
cGhpY3NTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua0ZhY3RvciwgQWRqdXN0Vmll
d1NpemVPck5vdCBzaG91bGRBZGp1c3RWaWV3U2l6ZSkKIHsKICAgICAvLyBEdW1waW5nIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24obV9mcmFtZS0+cmVuZGVyZXIoKSkuYXNjaWkoKSBpcyBhIGdvb2Qg
dHJpY2sgdG8gc2VlCiAgICAgLy8gdGhlIHN0YXRlIG9mIHRoaW5ncyBiZWZvcmUgYW5kIGFmdGVy
IHRoZSBsYXlvdXQKQEAgLTI2NzcsNyArMjY3Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQ
YWdlSGVpZ2h0RGVwcmVjYXQKIAogSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVy
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgcmVuZGVyZXJS
ZWN0KSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChyZW5kZXJlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwor
ICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNz
UmVjdChyZW5kZXJlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogCiAgICAgLy8gQ29u
dmVydCBmcm9tIHBhZ2UgKCJhYnNvbHV0ZSIpIHRvIEZyYW1lVmlldyBjb29yZGluYXRlcy4KICAg
ICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENvbG9yOwogY2xhc3MgRXZlbnQ7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFw
aGljc1NpemU7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lQWN0aW9uU2NoZWR1bGVyOwogY2xh
c3MgSW50UmVjdDsKQEAgLTIzMiw3ICsyMzIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Zp
c3VhbGx5Tm9uRW1wdHkoKSB7IG1faXNWaXN1YWxseU5vbkVtcHR5ID0gdHJ1ZTsgfQogCiAgICAg
dm9pZCBmb3JjZUxheW91dChib29sIGFsbG93U3VidHJlZSA9IGZhbHNlKTsKLSAgICB2b2lkIGZv
cmNlTGF5b3V0Rm9yUGFnaW5hdGlvbihjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBmbG9hdCBt
YXhpbXVtU2hyaW5rRmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90KTsKKyAgICB2b2lkIGZvcmNl
TGF5b3V0Rm9yUGFnaW5hdGlvbihjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplLCBmbG9hdCBt
YXhpbXVtU2hyaW5rRmFjdG9yLCBBZGp1c3RWaWV3U2l6ZU9yTm90KTsKIAogICAgIC8vIEZJWE1F
OiBUaGlzIG1ldGhvZCBpcyByZXRhaW5lZCBiZWNhdXNlIG9mIGVtYmVkZGVkIFdlYlZpZXdzIGlu
IEFwcEtpdC4gIFdoZW4gYSBXZWJWaWV3IGlzIGVtYmVkZGVkIGluc2lkZQogICAgIC8vIHNvbWUg
ZW5jbG9zaW5nIHZpZXcgd2l0aCBhdXRvLXBhZ2luYXRpb24sIG5vIGNhbGwgaGFwcGVucyB0byBy
ZXNpemUgdGhlIHZpZXcuICBUaGUgbmV3IHBhZ2luYXRpb24gbW9kZWwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9QcmludENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBA
IFByaW50Q29udGV4dDo6flByaW50Q29udGV4dCgpCiAgICAgICAgIGVuZCgpOwogfQogCi12b2lk
IFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50UmVj
dCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2Fs
ZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5n
KQordm9pZCBQcmludENvbnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMoY29uc3QgR3JhcGhpY3NSZWN0
JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0LCBmbG9h
dCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0LCBib29sIGFsbG93SG9yaXpv
bnRhbFRpbGluZykKIHsKICAgICBtX3BhZ2VSZWN0cy5jbGVhcigpOwogICAgIG91dFBhZ2VIZWln
aHQgPSAwOwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VS
ZWN0cyhjb25zCiAKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJhbWUt
PmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogICAgIGNvbnN0IEludFJlY3QmIGRvY3VtZW50UmVj
dCA9IHZpZXctPmRvY3VtZW50UmVjdCgpOwotICAgIEZsb2F0U2l6ZSBwYWdlU2l6ZSA9IG1fZnJh
bWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9hdFNpemUocHJpbnRSZWN0LndpZHRo
KCksIHByaW50UmVjdC5oZWlnaHQoKSksIEZsb2F0U2l6ZShkb2N1bWVudFJlY3Qud2lkdGgoKSwg
ZG9jdW1lbnRSZWN0LmhlaWdodCgpKSk7CisgICAgR3JhcGhpY3NTaXplIHBhZ2VTaXplID0gbV9m
cmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6ZShwcmludFJlY3Qu
d2lkdGgoKSwgcHJpbnRSZWN0LmhlaWdodCgpKSwgR3JhcGhpY3NTaXplKGRvY3VtZW50UmVjdC53
aWR0aCgpLCBkb2N1bWVudFJlY3QuaGVpZ2h0KCkpKTsKICAgICBmbG9hdCBwYWdlV2lkdGggPSBw
YWdlU2l6ZS53aWR0aCgpOwogICAgIGZsb2F0IHBhZ2VIZWlnaHQgPSBwYWdlU2l6ZS5oZWlnaHQo
KTsKIApAQCAtODIsMTYgKzgyLDE2IEBAIHZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRlUGFnZVJl
Y3RzKGNvbnMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbXB1dGVQYWdlUmVjdHNX
aXRoUGFnZVNpemVJbnRlcm5hbChGbG9hdFNpemUocGFnZVdpZHRoIC8gdXNlclNjYWxlRmFjdG9y
LCBwYWdlSGVpZ2h0IC8gdXNlclNjYWxlRmFjdG9yKSwgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsK
KyAgICBjb21wdXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWwoR3JhcGhpY3NTaXplKHBh
Z2VXaWR0aCAvIHVzZXJTY2FsZUZhY3RvciwgcGFnZUhlaWdodCAvIHVzZXJTY2FsZUZhY3Rvciks
IGFsbG93SG9yaXpvbnRhbFRpbGluZyk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21wdXRl
UGFnZVJlY3RzV2l0aFBhZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscywg
Ym9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcpCit2b2lkIFByaW50Q29udGV4dDo6Y29tcHV0ZVBh
Z2VSZWN0c1dpdGhQYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMs
IGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKQogewogICAgIG1fcGFnZVJlY3RzLmNsZWFyKCk7
CiAgICAgY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZUludGVybmFsKHBhZ2VTaXplSW5QaXhl
bHMsIGFsbG93SG9yaXpvbnRhbFRpbGluZyk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0Ojpjb21w
dXRlUGFnZVJlY3RzV2l0aFBhZ2VTaXplSW50ZXJuYWwoY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6
ZUluUGl4ZWxzLCBib29sIGFsbG93SW5saW5lRGlyZWN0aW9uVGlsaW5nKQordm9pZCBQcmludENv
bnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGlj
c1NpemUmIHBhZ2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dJbmxpbmVEaXJlY3Rpb25UaWxpbmcp
CiB7CiAgICAgaWYgKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwg
IW1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2
NSwxMyArMTY1LDEzIEBAIHZvaWQgUHJpbnRDb250ZXh0OjpiZWdpbihmbG9hdCB3aWR0aCwgZmwK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gYWRq
dXN0IHByaW50aW5nIHBhcmFtZXRlcnMgd2l0aG91dCBnb2luZyBiYWNrIHRvIHNjcmVlbiBtb2Rl
LgogICAgIG1faXNQcmludGluZyA9IHRydWU7CiAKLSAgICBGbG9hdFNpemUgbWluTGF5b3V0U2l6
ZSA9IG1fZnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9hdFNpemUod2lkdGgs
IGhlaWdodCksIEZsb2F0U2l6ZSh3aWR0aCAqIHByaW50aW5nTWluaW11bVNocmlua0ZhY3Rvciwg
aGVpZ2h0ICogcHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CisgICAgR3JhcGhpY3NTaXpl
IG1pbkxheW91dFNpemUgPSBtX2ZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oR3Jh
cGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpLCBHcmFwaGljc1NpemUod2lkdGggKiBwcmludGluZ01p
bmltdW1TaHJpbmtGYWN0b3IsIGhlaWdodCAqIHByaW50aW5nTWluaW11bVNocmlua0ZhY3Rvcikp
OwogCiAgICAgLy8gVGhpcyBjaGFuZ2VzIGxheW91dCwgc28gY2FsbGVycyBuZWVkIHRvIG1ha2Ug
c3VyZSB0aGF0IHRoZXkgZG9uJ3QgcGFpbnQgdG8gc2NyZWVuIHdoaWxlIGluIHByaW50aW5nIG1v
ZGUuCiAgICAgbV9mcmFtZS0+c2V0UHJpbnRpbmcodHJ1ZSwgbWluTGF5b3V0U2l6ZSwgcHJpbnRp
bmdNYXhpbXVtU2hyaW5rRmFjdG9yIC8gcHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBBZGp1
c3RWaWV3U2l6ZSk7CiB9CiAKLWZsb2F0IFByaW50Q29udGV4dDo6Y29tcHV0ZUF1dG9tYXRpY1Nj
YWxlRmFjdG9yKGNvbnN0IEZsb2F0U2l6ZSYgYXZhaWxhYmxlUGFwZXJTaXplKQorZmxvYXQgUHJp
bnRDb250ZXh0Ojpjb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgR3JhcGhpY3NTaXpl
JiBhdmFpbGFibGVQYXBlclNpemUpCiB7CiAgICAgaWYgKCFtX2ZyYW1lLT52aWV3KCkpCiAgICAg
ICAgIHJldHVybiAxOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9v
bFBhZ2UoR3JhcGhpY3NDb24KICAgICBmbG9hdCBzY2FsZSA9IHdpZHRoIC8gcGFnZVJlY3Qud2lk
dGgoKTsKIAogICAgIGN0eC5zYXZlKCk7Ci0gICAgY3R4LnNjYWxlKEZsb2F0U2l6ZShzY2FsZSwg
c2NhbGUpKTsKKyAgICBjdHguc2NhbGUoR3JhcGhpY3NTaXplKHNjYWxlLCBzY2FsZSkpOwogICAg
IGN0eC50cmFuc2xhdGUoLXBhZ2VSZWN0LngoKSwgLXBhZ2VSZWN0LnkoKSk7CiAgICAgY3R4LmNs
aXAocGFnZVJlY3QpOwogICAgIG1fZnJhbWUtPnZpZXcoKS0+cGFpbnRDb250ZW50cygmY3R4LCBw
YWdlUmVjdCk7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBQcmludENvbnRleHQ6OmVuZCgpCiB7
CiAgICAgQVNTRVJUKG1faXNQcmludGluZyk7CiAgICAgbV9pc1ByaW50aW5nID0gZmFsc2U7Ci0g
ICAgbV9mcmFtZS0+c2V0UHJpbnRpbmcoZmFsc2UsIEZsb2F0U2l6ZSgpLCAwLCBBZGp1c3RWaWV3
U2l6ZSk7CisgICAgbV9mcmFtZS0+c2V0UHJpbnRpbmcoZmFsc2UsIEdyYXBoaWNzU2l6ZSgpLCAw
LCBBZGp1c3RWaWV3U2l6ZSk7CiB9CiAKIHN0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogZW5j
bG9zaW5nQm94TW9kZWxPYmplY3QoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkBAIC0yMzAsNyArMjMw
LDcgQEAgc3RhdGljIFJlbmRlckJveE1vZGVsT2JqZWN0KiBlbmNsb3NpbmdCbwogICAgIHJldHVy
biB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CiB9CiAKLWludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEZsb2F0U2l6ZSYg
cGFnZVNpemVJblBpeGVscykKK2ludCBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcGFnZVNpemVJblBpeGVscykK
IHsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgbm90IGZyZWVkIGR1cmluZyB0aGUg
bGF5b3V0LgogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50UmVmKGVsZW1lbnQpOwpAQCAtMjQx
LDEwICsyNDEsMTAgQEAgaW50IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoRQog
ICAgICAgICByZXR1cm4gLTE7CiAKICAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwotICAgIEZsb2F0UmVjdCBwYWdlUmVjdChGbG9hdFBvaW50KDAsIDApLCBw
YWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBHcmFwaGljc1JlY3QgcGFnZVJlY3QoR3JhcGhpY3NQb2lu
dCgwLCAwKSwgcGFnZVNpemVJblBpeGVscyk7CiAgICAgUHJpbnRDb250ZXh0IHByaW50Q29udGV4
dChmcmFtZSk7CiAgICAgcHJpbnRDb250ZXh0LmJlZ2luKHBhZ2VSZWN0LndpZHRoKCksIHBhZ2VS
ZWN0LmhlaWdodCgpKTsKLSAgICBGbG9hdFNpemUgc2NhbGVkUGFnZVNpemUgPSBwYWdlU2l6ZUlu
UGl4ZWxzOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZWRQYWdlU2l6ZSA9IHBhZ2VTaXplSW5QaXhl
bHM7CiAgICAgc2NhbGVkUGFnZVNpemUuc2NhbGUoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXpl
KCkud2lkdGgoKSAvIHBhZ2VSZWN0LndpZHRoKCkpOwogICAgIHByaW50Q29udGV4dC5jb21wdXRl
UGFnZVJlY3RzV2l0aFBhZ2VTaXplKHNjYWxlZFBhZ2VTaXplLCBmYWxzZSk7CiAKQEAgLTI5OSwy
MSArMjk5LDIxIEBAIFN0cmluZyBQcmludENvbnRleHQ6OnBhZ2VTaXplQW5kTWFyZ2luc0kKICAg
ICAgICAgICAgU3RyaW5nOjpudW1iZXIobWFyZ2luVG9wKSArICcgJyArIFN0cmluZzo6bnVtYmVy
KG1hcmdpblJpZ2h0KSArICcgJyArIFN0cmluZzo6bnVtYmVyKG1hcmdpbkJvdHRvbSkgKyAnICcg
KyBTdHJpbmc6Om51bWJlcihtYXJnaW5MZWZ0KTsKIH0KIAotaW50IFByaW50Q29udGV4dDo6bnVt
YmVyT2ZQYWdlcyhGcmFtZSogZnJhbWUsIGNvbnN0IEZsb2F0U2l6ZSYgcGFnZVNpemVJblBpeGVs
cykKK2ludCBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoRnJhbWUqIGZyYW1lLCBjb25zdCBH
cmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMpCiB7CiAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dCgpOwogCi0gICAgRmxvYXRSZWN0IHBhZ2VSZWN0KEZsb2F0UG9pbnQoMCwg
MCksIHBhZ2VTaXplSW5QaXhlbHMpOworICAgIEdyYXBoaWNzUmVjdCBwYWdlUmVjdChHcmFwaGlj
c1BvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKTsKICAgICBQcmludENvbnRleHQgcHJpbnRD
b250ZXh0KGZyYW1lKTsKICAgICBwcmludENvbnRleHQuYmVnaW4ocGFnZVJlY3Qud2lkdGgoKSwg
cGFnZVJlY3QuaGVpZ2h0KCkpOwogICAgIC8vIEFjY291bnQgZm9yIHNocmluay10by1maXQuCi0g
ICAgRmxvYXRTaXplIHNjYWxlZFBhZ2VTaXplID0gcGFnZVNpemVJblBpeGVsczsKKyAgICBHcmFw
aGljc1NpemUgc2NhbGVkUGFnZVNpemUgPSBwYWdlU2l6ZUluUGl4ZWxzOwogICAgIHNjYWxlZFBh
Z2VTaXplLnNjYWxlKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLyBwYWdl
UmVjdC53aWR0aCgpKTsKICAgICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdl
U2l6ZShzY2FsZWRQYWdlU2l6ZSwgZmFsc2UpOwogICAgIHJldHVybiBwcmludENvbnRleHQucGFn
ZUNvdW50KCk7CiB9CiAKLXZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5k
YXJpZXMoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKQordm9pZCBQcmludENvbnRleHQ6OnNwb29s
QWxsUGFnZXNXaXRoQm91bmRhcmllcyhGcmFtZSogZnJhbWUsIEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhlbHMpCiB7CiAg
ICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPnZpZXcoKSB8fCAhZnJhbWUtPmRv
Y3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyNCw3ICszMjQsNyBA
QCB2b2lkIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuCiAgICAgcHJpbnRDb250
ZXh0LmJlZ2luKHBhZ2VTaXplSW5QaXhlbHMud2lkdGgoKSwgcGFnZVNpemVJblBpeGVscy5oZWln
aHQoKSk7CiAKICAgICBmbG9hdCBwYWdlSGVpZ2h0OwotICAgIHByaW50Q29udGV4dC5jb21wdXRl
UGFnZVJlY3RzKEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBwYWdlU2l6ZUluUGl4ZWxzKSwg
MCwgMCwgMSwgcGFnZUhlaWdodCk7CisgICAgcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMo
R3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoMCwgMCksIHBhZ2VTaXplSW5QaXhlbHMpLCAwLCAw
LCAxLCBwYWdlSGVpZ2h0KTsKIAogICAgIGNvbnN0IGZsb2F0IHBhZ2VXaWR0aCA9IHBhZ2VTaXpl
SW5QaXhlbHMud2lkdGgoKTsKICAgICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhZ2VSZWN0cyA9
IHByaW50Q29udGV4dC5wYWdlUmVjdHMoKTsKQEAgLTMzMiwxMSArMzMyLDExIEBAIHZvaWQgUHJp
bnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KIAogICAgIC8vIEZpbGwgdGhlIHdob2xl
IGJhY2tncm91bmQgYnkgd2hpdGUuCiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihD
b2xvcigyNTUsIDI1NSwgMjU1KSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ3JhcGhpY3ND
b250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBwYWdlV2lkdGgsIHRvdGFsSGVpZ2h0KSk7
CisgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBwYWdlV2lk
dGgsIHRvdGFsSGVpZ2h0KSk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwogICAgIGdy
YXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgdG90YWxIZWlnaHQpOwotICAgIGdyYXBoaWNzQ29u
dGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2NhbGUo
R3JhcGhpY3NTaXplKDEsIC0xKSk7CiAKICAgICBpbnQgY3VycmVudEhlaWdodCA9IDA7CiAgICAg
Zm9yIChzaXplX3QgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgcGFnZVJlY3RzLnNpemUoKTsg
cGFnZUluZGV4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRleHQuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxl
bWVudDsKIGNsYXNzIEZyYW1lOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgRmxvYXRTaXplOwor
Y2xhc3MgR3JhcGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NTaXplOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogY2xhc3MgSW50UmVjdDsKIApAQCAtNDMsMTggKzQzLDE4IEBAIHB1YmxpYzoKICAg
ICAvLyBCcmVhayB1cCBhIHBhZ2UgaW50byByZWN0cyB3aXRob3V0IHJlbGF5b3V0LgogICAgIC8v
IEZJWE1FOiBUaGlzIG1lYW5zIHRoYXQgQ1NTIHBhZ2UgYnJlYWtzIHdvbid0IGJlIG9uIHBhZ2Ug
Ym91bmRhcnkgaWYgdGhlIHNpemUgaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB3YXMgcGFzc2VkIHRv
IGJlZ2luKCkuIFRoYXQncyBwcm9iYWJseSBub3QgYWx3YXlzIGRlc2lyYWJsZS4KICAgICAvLyBG
SVhNRTogSGVhZGVyIGFuZCBmb290ZXIgaGVpZ2h0IHNob3VsZCBiZSBhcHBsaWVkIGJlZm9yZSBs
YXlvdXQsIG5vdCBhZnRlci4KLSAgICAvLyBGSVhNRTogVGhlIHByaW50UmVjdCBhcmd1bWVudCBp
cyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lIHBhZ2UgYXNwZWN0IHJhdGlvLCBpdCB3b3VsZCBiZSBi
ZXR0ZXIgdG8gcGFzcyBhIEZsb2F0U2l6ZSB3aXRoIHBhZ2UgZGltZW5zaW9ucyBpbnN0ZWFkLgot
ICAgIHZvaWQgY29tcHV0ZVBhZ2VSZWN0cyhjb25zdCBGbG9hdFJlY3QmIHByaW50UmVjdCwgZmxv
YXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3Rv
ciwgZmxvYXQmIG91dFBhZ2VIZWlnaHQsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nID0gZmFs
c2UpOworICAgIC8vIEZJWE1FOiBUaGUgcHJpbnRSZWN0IGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB0
byBkZXRlcm1pbmUgcGFnZSBhc3BlY3QgcmF0aW8sIGl0IHdvdWxkIGJlIGJldHRlciB0byBwYXNz
IGEgR3JhcGhpY3NTaXplIHdpdGggcGFnZSBkaW1lbnNpb25zIGluc3RlYWQuCisgICAgdm9pZCBj
b21wdXRlUGFnZVJlY3RzKGNvbnN0IEdyYXBoaWNzUmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFk
ZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBmbG9h
dCYgb3V0UGFnZUhlaWdodCwgYm9vbCBhbGxvd0hvcml6b250YWxUaWxpbmcgPSBmYWxzZSk7CiAK
ICAgICAvLyBEZXByZWNhdGVkLiBQYWdlIHNpemUgY29tcHV0YXRpb24gaXMgYWxyZWFkeSBpbiB0
aGlzIGNsYXNzLCBjbGllbnRzIHNob3VsZG4ndCBiZSBjb3B5aW5nIGl0LgotICAgIHZvaWQgY29t
cHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhl
bHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICB2b2lkIGNvbXB1dGVQYWdlUmVj
dHNXaXRoUGFnZVNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6ZUluUGl4ZWxzLCBib29s
IGFsbG93SG9yaXpvbnRhbFRpbGluZyk7CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB2YWxpZCBh
ZnRlciBwYWdlIHJlY3RzIGFyZSBjb21wdXRlZC4KICAgICBzaXplX3QgcGFnZUNvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlUmVjdHMuc2l6ZSgpOyB9CiAgICAgY29uc3QgSW50UmVjdCYgcGFn
ZVJlY3Qoc2l6ZV90IHBhZ2VOdW1iZXIpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJlY3RzW3BhZ2VO
dW1iZXJdOyB9CiAgICAgY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWdlUmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VSZWN0czsgfQogCi0gICAgZmxvYXQgY29tcHV0ZUF1dG9tYXRpY1NjYWxl
RmFjdG9yKGNvbnN0IEZsb2F0U2l6ZSYgYXZhaWxhYmxlUGFwZXJTaXplKTsKKyAgICBmbG9hdCBj
b21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3IoY29uc3QgR3JhcGhpY3NTaXplJiBhdmFpbGFibGVQ
YXBlclNpemUpOwogCiAgICAgLy8gRW50ZXIgcHJpbnQgbW9kZSwgdXBkYXRpbmcgbGF5b3V0IGZv
ciBuZXcgcGFnZSBzaXplLgogICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0
aXBsZSB0aW1lcyB0byBhcHBseSBuZXcgcHJpbnQgb3B0aW9ucyB3aXRob3V0IGdvaW5nIGJhY2sg
dG8gc2NyZWVuIG1vZGUuCkBAIC02OSwyMiArNjksMjIgQEAgcHVibGljOgogICAgIHZvaWQgZW5k
KCk7CiAKICAgICAvLyBVc2VkIGJ5IGxheW91dCB0ZXN0cy4KLSAgICBzdGF0aWMgaW50IHBhZ2VO
dW1iZXJGb3JFbGVtZW50KEVsZW1lbnQqLCBjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplSW5QaXhl
bHMpOyAvLyBSZXR1cm5zIC0xIGlmIHBhZ2UgaXNuJ3QgZm91bmQuCisgICAgc3RhdGljIGludCBw
YWdlTnVtYmVyRm9yRWxlbWVudChFbGVtZW50KiwgY29uc3QgR3JhcGhpY3NTaXplJiBwYWdlU2l6
ZUluUGl4ZWxzKTsgLy8gUmV0dXJucyAtMSBpZiBwYWdlIGlzbid0IGZvdW5kLgogICAgIHN0YXRp
YyBTdHJpbmcgcGFnZVByb3BlcnR5KEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBpbnQgcGFnZU51bWJlcik7CiAgICAgc3RhdGljIGJvb2wgaXNQYWdlQm94VmlzaWJsZShG
cmFtZSogZnJhbWUsIGludCBwYWdlTnVtYmVyKTsKICAgICBzdGF0aWMgU3RyaW5nIHBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzKEZyYW1lKiBmcmFtZSwgaW50IHBhZ2VOdW1iZXIsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2lu
Qm90dG9tLCBpbnQgbWFyZ2luTGVmdCk7Ci0gICAgc3RhdGljIGludCBudW1iZXJPZlBhZ2VzKEZy
YW1lKiwgY29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKKyAgICBzdGF0aWMgaW50
IG51bWJlck9mUGFnZXMoRnJhbWUqLCBjb25zdCBHcmFwaGljc1NpemUmIHBhZ2VTaXplSW5QaXhl
bHMpOwogICAgIC8vIERyYXcgYWxsIHBhZ2VzIGludG8gYSBncmFwaGljcyBjb250ZXh0IHdpdGgg
bGluZXMgd2hpY2ggbWVhbiBwYWdlIGJvdW5kYXJpZXMuCiAgICAgLy8gVGhlIGhlaWdodCBvZiB0
aGUgZ3JhcGhpY3MgY29udGV4dCBzaG91bGQgYmUKICAgICAvLyAocGFnZVNpemVJblBpeGVscy5o
ZWlnaHQoKSArIDEpICogbnVtYmVyLW9mLXBhZ2VzIC0gMQotICAgIHN0YXRpYyB2b2lkIHNwb29s
QWxsUGFnZXNXaXRoQm91bmRhcmllcyhGcmFtZSosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0U2l6ZSYgcGFnZVNpemVJblBpeGVscyk7CisgICAgc3RhdGljIHZvaWQgc3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NT
aXplJiBwYWdlU2l6ZUluUGl4ZWxzKTsKIAogcHJvdGVjdGVkOgogICAgIEZyYW1lKiBtX2ZyYW1l
OwogICAgIFZlY3RvcjxJbnRSZWN0PiBtX3BhZ2VSZWN0czsKIAogcHJpdmF0ZToKLSAgICB2b2lk
IGNvbXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBGbG9hdFNpemUmIHBh
Z2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKKyAgICB2b2lkIGNv
bXB1dGVQYWdlUmVjdHNXaXRoUGFnZVNpemVJbnRlcm5hbChjb25zdCBHcmFwaGljc1NpemUmIHBh
Z2VTaXplSW5QaXhlbHMsIGJvb2wgYWxsb3dIb3Jpem9udGFsVGlsaW5nKTsKIAogICAgIC8vIFVz
ZWQgdG8gcHJldmVudCBtaXN1c2VzIG9mIGJlZ2luKCkgYW5kIGVuZCgpIChlLmcuLCBjYWxsIGVu
ZCB3aXRob3V0IGJlZ2luKS4KICAgICBib29sIG1faXNQcmludGluZzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NjcmVlbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TY3Jl
ZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFdpbmRvd0ZlYXR1
cmVzOjpzZXRXaW5kb3dGZWF0dXJlKGNvCiAgICAgICAgIGFkZGl0aW9uYWxGZWF0dXJlcy5hcHBl
bmQoa2V5U3RyaW5nKTsKIH0KIAotV2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0
IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcsIGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuQXZh
aWxhYmxlUmVjdCkKK1dpbmRvd0ZlYXR1cmVzOjpXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcm
IGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBjb25zdCBHcmFwaGljc1JlY3QmIHNjcmVlbkF2YWlsYWJs
ZVJlY3QpCiAgICAgOiB3aWR0aFNldCh0cnVlKQogICAgICwgaGVpZ2h0U2V0KHRydWUpCiAgICAg
LCBtZW51QmFyVmlzaWJsZShmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2luZG93
RmVhdHVyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1
cmVzLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0
dXJlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CiAK
ICAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXMgewogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRl
bGV0ZSB0aGlzIGNvbnN0cnVjdG9yIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlzIGNoYW5nZWQg
dG8gdXNlIERPTVdpbmRvdy4KQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB9CiAKICAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiB3aW5kb3dG
ZWF0dXJlc1N0cmluZyk7Ci0gICAgICAgIFdpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlh
bG9nRmVhdHVyZXNTdHJpbmcsIGNvbnN0IEZsb2F0UmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCk7
CisgICAgICAgIFdpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJp
bmcsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2NyZWVuQXZhaWxhYmxlUmVjdCk7CiAKICAgICAgICAg
ZmxvYXQgeDsKICAgICAgICAgYm9vbCB4U2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9j
aHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDaHJvbWl1
bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkN1cnNvci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0ZyYW1lQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFt
ZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUg
IkZyYW1lLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAt
ODYsNyArODYsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6Om5vZGVJbWFnZShOb2RlKiBub2RlCiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGJ1ZmZlci0+Y29udGV4dCgp
LT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1JlY3QueSgpKTsKLSAgICBi
dWZmZXItPmNvbnRleHQoKS0+Y2xpcChGbG9hdFJlY3QoMCwgMCwgcGFpbnRpbmdSZWN0Lm1heFgo
KSwgcGFpbnRpbmdSZWN0Lm1heFkoKSkpOworICAgIGJ1ZmZlci0+Y29udGV4dCgpLT5jbGlwKEdy
YXBoaWNzUmVjdCgwLCAwLCBwYWludGluZ1JlY3QubWF4WCgpLCBwYWludGluZ1JlY3QubWF4WSgp
KSk7CiAKICAgICBtX3ZpZXctPnBhaW50Q29udGVudHMoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50
aW5nUmVjdCk7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJ
bWFnZUZvclNlbGVjdGlvCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAg
IGJ1ZmZlci0+Y29udGV4dCgpLT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGlu
Z1JlY3QueSgpKTsKLSAgICBidWZmZXItPmNvbnRleHQoKS0+Y2xpcChGbG9hdFJlY3QoMCwgMCwg
cGFpbnRpbmdSZWN0Lm1heFgoKSwgcGFpbnRpbmdSZWN0Lm1heFkoKSkpOworICAgIGJ1ZmZlci0+
Y29udGV4dCgpLT5jbGlwKEdyYXBoaWNzUmVjdCgwLCAwLCBwYWludGluZ1JlY3QubWF4WCgpLCBw
YWludGluZ1JlY3QubWF4WSgpKSk7CiAKICAgICBtX3ZpZXctPnBhaW50Q29udGVudHMoYnVmZmVy
LT5jb250ZXh0KCksIHBhaW50aW5nUmVjdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
ZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9lZmwvRXZlbnRIYW5kbGVyRWZsLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2VmbC9FdmVudEhhbmRsZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRFZmwuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQu
aCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVu
dEhhbmRsZXJHdGsuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Z3RrL0V2ZW50SGFuZGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAK
ICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKIAogI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgot
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5j
bHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5k
bGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiQ3Vy
c29yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNl
bGVjdGlvCiAKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBidWZmZXItPmNvbnRleHQo
KTsKICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXBhaW50aW5nUmVjdC54KCksIC1wYWludGluZ1Jl
Y3QueSgpKTsKLSAgICBjb250ZXh0LT5jbGlwKEZsb2F0UmVjdCgwLCAwLCBwYWludGluZ1JlY3Qu
bWF4WCgpLCBwYWludGluZ1JlY3QubWF4WSgpKSk7CisgICAgY29udGV4dC0+Y2xpcChHcmFwaGlj
c1JlY3QoMCwgMCwgcGFpbnRpbmdSZWN0Lm1heFgoKSwgcGFpbnRpbmdSZWN0Lm1heFkoKSkpOwog
CiAgICAgUGFpbnRCZWhhdmlvciBwcmV2aW91c1BhaW50QmVoYXZpb3IgPSBtX3ZpZXctPnBhaW50
QmVoYXZpb3IoKTsKICAgICBtX3ZpZXctPnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvclNl
bGVjdGlvbk9ubHkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRXZlbnRIYW5kbGVy
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9FdmVudEhhbmRs
ZXJXaW4uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0V2
ZW50SGFuZGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKIAogI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiRm9jdXND
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Myw3ICs4Myw3IEBAIEhCSVRNQVAgaW1hZ2VGcm9tU2VsZWN0aW9uKEZyYW1lKiBm
cmFtZSwKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBmcmFt
ZS0+dmlldygpLT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3JTZWxlY3Rpb25Pbmx5IHwg
KGZvcmNlQmxhY2tUZXh0ID8gUGFpbnRCZWhhdmlvckZvcmNlQmxhY2tUZXh0IDogMCkpOwotICAg
IEZsb2F0UmVjdCBmciA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+Ym91bmRzKCk7CisgICAgR3JhcGhp
Y3NSZWN0IGZyID0gZnJhbWUtPnNlbGVjdGlvbigpLT5ib3VuZHMoKTsKICAgICBJbnRSZWN0IGly
KHN0YXRpY19jYXN0PGludD4oZnIueCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihmci55KCkpLAogICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihmci53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50
Pihmci5oZWlnaHQoKSkpOwogICAgIEhCSVRNQVAgaW1hZ2UgPSBpbWFnZUZyb21SZWN0KGZyYW1l
LCBpcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luY2Uv
RnJhbWVXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW5jZS9G
cmFtZVdpbkNFLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bmNlL0ZyYW1lV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1l
bnQuaCIKQEAgLTEwOSw3ICsxMDksNyBAQCBIQklUTUFQIGltYWdlRnJvbVNlbGVjdGlvbihGcmFt
ZSogZnJhbWUsCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFp
bnRCZWhhdmlvcihQYWludEJlaGF2aW9yU2VsZWN0aW9uT25seSB8IChmb3JjZUJsYWNrVGV4dCA/
IFBhaW50QmVoYXZpb3JGb3JjZUJsYWNrVGV4dCA6IDApKTsKLSAgICBGbG9hdFJlY3QgZnIgPSBm
cmFtZS0+c2VsZWN0aW9uKCktPmJvdW5kcygpOworICAgIEdyYXBoaWNzUmVjdCBmciA9IGZyYW1l
LT5zZWxlY3Rpb24oKS0+Ym91bmRzKCk7CiAgICAgSW50UmVjdCBpcigoaW50KWZyLngoKSwgKGlu
dClmci55KCksIChpbnQpZnIud2lkdGgoKSwgKGludClmci5oZWlnaHQoKSk7CiAgICAgaWYgKGly
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBEcmFnSW1h
Z2VSZWYgZml0RHJhZ0ltYWdlVG9NYXhTaXplKERyYWdJCiAgICAgfQogICAgIAogICAgIGlmIChz
cmNTaXplID09IG9yaWdpbmFsU2l6ZSkKLSAgICAgICAgcmV0dXJuIHJlc2l6ZVJhdGlvID4gMC4w
ZiA/IHNjYWxlRHJhZ0ltYWdlKGltYWdlLCBGbG9hdFNpemUocmVzaXplUmF0aW8sIHJlc2l6ZVJh
dGlvKSkgOiBpbWFnZTsKKyAgICAgICAgcmV0dXJuIHJlc2l6ZVJhdGlvID4gMC4wZiA/IHNjYWxl
RHJhZ0ltYWdlKGltYWdlLCBHcmFwaGljc1NpemUocmVzaXplUmF0aW8sIHJlc2l6ZVJhdGlvKSkg
OiBpbWFnZTsKICAgICAKICAgICAvLyBUaGUgaW1hZ2Ugd2FzIHNjYWxlZCBpbiB0aGUgd2VicGFn
ZSBzbyBhdCBtaW5pbXVtIHdlIG11c3QgYWNjb3VudCBmb3IgdGhhdCBzY2FsaW5nCiAgICAgZmxv
YXQgc2NhbGV4ID0gc3JjU2l6ZS53aWR0aCgpIC8gKGZsb2F0KW9yaWdpbmFsU2l6ZS53aWR0aCgp
OwpAQCAtNjIsNyArNjIsNyBAQCBEcmFnSW1hZ2VSZWYgZml0RHJhZ0ltYWdlVG9NYXhTaXplKERy
YWdJCiAgICAgICAgIHNjYWxleSAqPSByZXNpemVSYXRpbzsKICAgICB9CiAgICAgCi0gICAgcmV0
dXJuIHNjYWxlRHJhZ0ltYWdlKGltYWdlLCBGbG9hdFNpemUoc2NhbGV4LCBzY2FsZXkpKTsKKyAg
ICByZXR1cm4gc2NhbGVEcmFnSW1hZ2UoaW1hZ2UsIEdyYXBoaWNzU2l6ZShzY2FsZXgsIHNjYWxl
eSkpOwogfQogICAgIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbihG
cmFtZSogZnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBEcmFnSW1hZ2VfaAogCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBA
IC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvL3RoZXkgc2hvdWxkIHJl
bGVhc2UgdGhlIGlucHV0IGltYWdlLiAgQXMgYSBjb3JvbGxhcnkgdGhlc2UgbWV0aG9kcyBkb24n
dCBndWFyYW50ZWUKICAgICAvL3RoZSBpbnB1dCBpbWFnZSByZWYgd2lsbCBzdGlsbCBiZSB2YWxp
ZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBjYWxsZWQKICAgICBEcmFnSW1hZ2VSZWYgZml0RHJhZ0lt
YWdlVG9NYXhTaXplKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERy
YWdJbWFnZVJlZiwgRmxvYXRTaXplIHNjYWxlKTsKKyAgICBEcmFnSW1hZ2VSZWYgc2NhbGVEcmFn
SW1hZ2UoRHJhZ0ltYWdlUmVmLCBHcmFwaGljc1NpemUgc2NhbGUpOwogICAgIERyYWdJbWFnZVJl
ZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCBk
ZWx0YSk7CiAgICAgCiAgICAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJ
bWFnZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGxhdGZvcm1TY3Jl
ZW5faAogI2RlZmluZSBQbGF0Zm9ybVNjcmVlbl9oCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDIsMjEgKzQyLDIxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7
CiAgICAgY2xhc3MgV2lkZ2V0OwogCiAgICAgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwogICAg
IGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKTsKICAgICBib29sIHNjcmVlbklz
TW9ub2Nocm9tZShXaWRnZXQqKTsKIAotICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCop
OwotICAgIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopOworICAgIEdyYXBo
aWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOworICAgIEdyYXBoaWNzUmVjdCBzY3JlZW5BdmFp
bGFibGVSZWN0KFdpZGdldCopOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TU2NyZWVuICpz
Y3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKik7CiAKLSAgICBGbG9hdFJlY3QgdG9Vc2VyU3BhY2Uo
Y29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKLSAgICBOU1JlY3QgdG9EZXZp
Y2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKKyAgICBHcmFwaGlj
c1JlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsK
KyAgICBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3QmLCBOU1dpbmRvdyAq
c291cmNlKTsKIAogICAgIE5TUG9pbnQgZmxpcFNjcmVlblBvaW50KGNvbnN0IE5TUG9pbnQmLCBO
U1NjcmVlbiAqKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDgg
QEAgY2xhc3MgQk1lc3NhZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZs
b2F0UG9pbnQ7Ci0gICAgY2xhc3MgRmxvYXRTaXplOworICAgIGNsYXNzIEdyYXBoaWNzUG9pbnQ7
CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwogCiAgICAgLy8gV2hlZWwgZXZlbnRzIGNvbWUgaW4g
dHdvIGZsYXZvcnM6CiAgICAgLy8gVGhlIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50IGlzIGEgZmlu
ZS1ncmFpbmVkIGV2ZW50IHRoYXQgc3BlY2lmaWVzIHRoZSBwcmVjaXNlIG51bWJlciBvZiBwaXhl
bHMgdG8gc2Nyb2xsLiAgSXQgaXMgc2VudCBkaXJlY3RseSBieSBNYWNCb29rIHRvdWNocGFkcyBv
biBPUyBYLApAQCAtMTg5LDcgKzE4OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBM
QVRGT1JNKFdJTikKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBB
UkFNLCBib29sIGlzTW91c2VIV2hlZWwpOwotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdO
RCwgY29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24pOwor
ICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwgY29uc3QgR3JhcGhpY3NTaXplJiBkZWx0
YSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbG9jYXRpb24pOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXWCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChTY3JvbGxiYXJP
cmkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9P
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGlj
c1BvaW50JiBvZmZzZXQpCiB7CiAgICAgaWYgKG1fY3VycmVudFBvc1ggIT0gb2Zmc2V0LngoKSB8
fCBtX2N1cnJlbnRQb3NZICE9IG9mZnNldC55KCkpIHsKICAgICAgICAgbV9jdXJyZW50UG9zWCA9
IG9mZnNldC54KCk7CkBAIC0xMTksOSArMTE5LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6aGFu
ZGxlR2VzdHVyZUV2ZW50KAogfQogI2VuZGlmCiAKLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6
OmN1cnJlbnRQb3NpdGlvbigpIGNvbnN0CitHcmFwaGljc1BvaW50IFNjcm9sbEFuaW1hdG9yOjpj
dXJyZW50UG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVu
dFBvc1gsIG1fY3VycmVudFBvc1kpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG1fY3VycmVu
dFBvc1gsIG1fY3VycmVudFBvc1kpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQ
b3NpdGlvbkNoYW5nZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNs
YXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Ny
b2xsYmFyOwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGJhc2UgY2xhc3Mg
aW1wbGVtZW50YXRpb24gYWx3YXlzIHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVz
LgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgR3Jh
cGhpY3NQb2ludCYpOwogCiAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCkBAIC02OCw3ICs2OCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50Jik7CiAjZW5kaWYKIAotICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uKCkg
Y29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkgeyB9CiAKQEAgLTkzLDcgKzkzLDcgQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKIAog
ICAgIFNjcm9sbGFibGVBcmVhKiBtX3Njcm9sbGFibGVBcmVhOwotICAgIGZsb2F0IG1fY3VycmVu
dFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UK
KyAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEdyYXBoaWNzUG9p
bnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3ViY2xh
c3MgY29kZSBjb21wbGV4aXR5LgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTm9uZS5oIgogCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk93bkFycmF5UHRyLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKQEAgLTMxOSw3ICszMTksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6c2Nyb2xsKFNjcm9sbGJhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTY3Jv
bGxBbmltYXRvck5vbmU6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAgICBzdG9w
QW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CiAgICAgc3RvcEFuaW1h
dGlvblRpbWVySWZOZWVkZWQoJm1fdmVydGljYWxEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5v
bmUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0
IEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIGVudW0gQ3VydmUgewogICAgICAgICBMaW5lYXIsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JXaW4uaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTE3OCw3ICsxNzgsNyBA
QCBib29sIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xsYmFyCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbEFuaW1hdG9yV2lu
OjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgb2Zm
c2V0KQogewogICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRh
KTsKICAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCShyZXZpc2lv
biA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNj
cm9sbEFuaW1hdG9yV2luKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25z
dCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFBl
ckF4aXNEYXRhIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lLmgiCkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbChTY3JvbGxEaXJlY3QKICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS0+c2Ny
b2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CiAKLXZv
aWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgb2Zmc2V0KQogewogICAgIHNjcm9s
bEFuaW1hdG9yKCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOwogfQpA
QCAtMTE0LDEyICsxMTQsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRX
aXRobwogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGZsb2F0IHgpCiB7Ci0gICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0
UG9pbnQoeCwgc2Nyb2xsQW5pbWF0b3IoKS0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7CisgICAg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEdyYXBoaWNzUG9pbnQoeCwgc2Nyb2xsQW5p
bWF0b3IoKS0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeSkKIHsKLSAgICBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGxBbmltYXRvcigpLT5j
dXJyZW50UG9zaXRpb24oKS54KCksIHkpKTsKKyAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oR3JhcGhpY3NQb2ludChzY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKS54
KCksIHkpKTsKIH0KIAogdm9pZCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGlj
c1BvaW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZl
bnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5TY3JvbGxhYmxlQXJlYSgpOwogCiAgICAgYm9vbCBzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwotICAg
IHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1Bv
aW50Jik7CiAgICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oU2Nyb2xsYmFy
T3JpZW50YXRpb24sIGZsb2F0IG9mZnNldCk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGZsb2F0IHgpOwogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihmbG9hdCB4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNyArMjY5LDcgQEAgdm9pZCBTY3JvbGxiYXI6Om1v
dmVUaHVtYihpbnQgcG9zLCBib29sIAogICAgICAgICBpZiAobV9kcmFnZ2luZ0RvY3VtZW50KQog
ICAgICAgICAgICAgZGVsdGEgPSBwb3MgLSBtX2RvY3VtZW50RHJhZ1BvczsKICAgICAgICAgbV9k
cmFnZ2luZ0RvY3VtZW50ID0gdHJ1ZTsKLSAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRp
b24gPSBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24o
KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24gPSBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxBbmltYXRvcigpLT5jdXJyZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGRl
c3RpbmF0aW9uUG9zaXRpb24gPSAobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gY3VycmVudFBvc2l0aW9uLngoKSA6IGN1cnJlbnRQb3NpdGlvbi55KCkpICsgZGVsdGE7CiAg
ICAgICAgIGlmIChkZWx0YSA+IDApCiAgICAgICAgICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0g
bWluKGRlc3RpbmF0aW9uUG9zaXRpb24gKyBkZWx0YSwgbWF4aW11bSgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NjcmVlbkFu
ZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMyArMzEsMTIgQEAKIAogLy8gVGhpcyBp
bmNsdWRlIG11c3QgY29tZSBmaXJzdC4KICN1bmRlZiBMT0cgLy8gRklYTUU6IFN0aWxsIGhhdmUg
dG8gZG8gdGhpcyB0byBnZXQgdGhlIGxvZyB0byBzaG93IHVwCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAidXRpbHMvTG9nLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJ1aS9EaXNwbGF5SW5mby5oIgogI2luY2x1
ZGUgInVpL1BpeGVsRm9ybWF0LmgiCiAjaW5jbHVkZSAidWkvU3VyZmFjZUNvbXBvc2VyQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTAs
MjAgKzg5LDIwIEBAIGludCBTY3JlZW46Om9yaWVudGF0aW9uKCkgY29uc3QKIC8vIHBvc2l0aW9u
aW5nIHBvcHVwIHdpbmRvd3MuIElmIHdlIHN1cHBvcnQgbXVsdGlwbGUgd2luZG93cwogLy8gdGhl
eSB3aWxsIGJlIG1vc3QgbGlrZWx5IGZ1bGwgc2NyZWVuLiBUaGVyZWZvcmUsCiAvLyB0aGUgYWNj
dXJhY3kgb2YgdGhlc2UgbnVtYmVyIGFyZSBub3QgdG9vIGltcG9ydGFudC4KLUZsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCogcGFnZSkKK0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCog
cGFnZSkKIHsKICAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOwogICAgIGFuZHJvaWQ6OlN1
cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDAp
LCAmaW5mbyk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLjAsIDAuMCwgaW5mby53LCBpbmZvLmgp
OworICAgIHJldHVybiBHcmFwaGljc1JlY3QoMC4wLCAwLjAsIGluZm8udywgaW5mby5oKTsKIH0K
IAogLy8gU2ltaWxhciBzY3JlZW5SZWN0LCB0aGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IHVzZWQg
YnkgamF2YXNjcmlwdHMKIC8vIHRvIHBvc2l0aW9uIGFuZCByZXNpemUgd2luZG93cyAodXN1YWxs
eSB0byBmdWxsIHNjcmVlbikuIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0
KikKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopCiB7CiAgICAgYW5k
cm9pZDo6RGlzcGxheUluZm8gaW5mbzsKICAgICBhbmRyb2lkOjpTdXJmYWNlQ29tcG9zZXJDbGll
bnQ6OmdldERpc3BsYXlJbmZvKGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOwotICAgIHJl
dHVybiBGbG9hdFJlY3QoMC4wLCAwLjAsIGluZm8udywgaW5mby5oKTsKKyAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KDAuMCwgMC4wLCBpbmZvLncsIGluZm8uaCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmll
d0FuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIlNrUmVnaW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUzLDcgKzM1Myw3IEBAIGNvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1
cnNvcigpCiAgICAgcmV0dXJuIGR1bW15Q3Vyc29yOwogfQogCi12b2lkKiBzY2FsZURyYWdJbWFn
ZSh2b2lkKiwgRmxvYXRTaXplKQordm9pZCogc2NhbGVEcmFnSW1hZ2Uodm9pZCosIEdyYXBoaWNz
U2l6ZSkKIHsKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0NvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0NvbmUuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0NvbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIsMTYgQEAgQ29uZUVm
ZmVjdDo6Q29uZUVmZmVjdCgpCiB7CiB9CiAKLWRvdWJsZSBDb25lRWZmZWN0OjpnYWluKEZsb2F0
UG9pbnQzRCBzb3VyY2VQb3NpdGlvbiwgRmxvYXRQb2ludDNEIHNvdXJjZU9yaWVudGF0aW9uLCBG
bG9hdFBvaW50M0QgbGlzdGVuZXJQb3NpdGlvbikKK2RvdWJsZSBDb25lRWZmZWN0OjpnYWluKEdy
YXBoaWNzUG9pbnQzRCBzb3VyY2VQb3NpdGlvbiwgR3JhcGhpY3NQb2ludDNEIHNvdXJjZU9yaWVu
dGF0aW9uLCBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJQb3NpdGlvbikKIHsKICAgICBpZiAoc291
cmNlT3JpZW50YXRpb24uaXNaZXJvKCkgfHwgKChtX2lubmVyQW5nbGUgPT0gMzYwLjApICYmICht
X291dGVyQW5nbGUgPT0gMzYwLjApKSkKICAgICAgICAgcmV0dXJuIDEuMDsgLy8gbm8gY29uZSBz
cGVjaWZpZWQgLSB1bml0eSBnYWluCiAKICAgICAvLyBOb3JtYWxpemVkIHNvdXJjZS1saXN0ZW5l
ciB2ZWN0b3IKLSAgICBGbG9hdFBvaW50M0Qgc291cmNlVG9MaXN0ZW5lciA9IGxpc3RlbmVyUG9z
aXRpb24gLSBzb3VyY2VQb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0Qgc291cmNlVG9MaXN0
ZW5lciA9IGxpc3RlbmVyUG9zaXRpb24gLSBzb3VyY2VQb3NpdGlvbjsKICAgICBzb3VyY2VUb0xp
c3RlbmVyLm5vcm1hbGl6ZSgpOwogCi0gICAgRmxvYXRQb2ludDNEIG5vcm1hbGl6ZWRTb3VyY2VP
cmllbnRhdGlvbiA9IHNvdXJjZU9yaWVudGF0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBub3Jt
YWxpemVkU291cmNlT3JpZW50YXRpb24gPSBzb3VyY2VPcmllbnRhdGlvbjsKICAgICBub3JtYWxp
emVkU291cmNlT3JpZW50YXRpb24ubm9ybWFsaXplKCk7CiAKICAgICAvLyBBbmdsZSBiZXR3ZWVu
IHRoZSBzb3VyY2Ugb3JpZW50YXRpb24gdmVjdG9yIGFuZCB0aGUgc291cmNlLWxpc3RlbmVyIHZl
Y3RvcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29uZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbmUuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9Db25lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgQ29uZV9oCiAjZGVmaW5lIENvbmVfaAogCi0j
aW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgQ29u
ZUVmZmVjdCgpOwogCiAgICAgLy8gUmV0dXJucyBzY2FsYXIgZ2FpbiBmb3IgdGhlIGdpdmVuIHNv
dXJjZS9saXN0ZW5lciBwb3NpdGlvbnMvb3JpZW50YXRpb25zCi0gICAgZG91YmxlIGdhaW4oRmxv
YXRQb2ludDNEIHNvdXJjZVBvc2l0aW9uLCBGbG9hdFBvaW50M0Qgc291cmNlT3JpZW50YXRpb24s
IEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uKTsKKyAgICBkb3VibGUgZ2FpbihHcmFwaGlj
c1BvaW50M0Qgc291cmNlUG9zaXRpb24sIEdyYXBoaWNzUG9pbnQzRCBzb3VyY2VPcmllbnRhdGlv
biwgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24pOwogCiAgICAgLy8gQW5nbGVzIGlu
IGRlZ3JlZXMKICAgICB2b2lkIHNldElubmVyQW5nbGUoZG91YmxlIGlubmVyQW5nbGUpIHsgbV9p
bm5lckFuZ2xlID0gaW5uZXJBbmdsZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YnJldy9TY3JlZW5CcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9icmV3L1NjcmVlbkJyZXcuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JyZXcvU2NyZWVuQnJldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JlZW4uaCIKIAotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAt
NTksMTUgKzU5LDE1IEBAIHN0YXRpYyB2b2lkIGdldERpc3BsYXlJbmZvKERpc3BsYXlJbmZvJiAK
ICAgICBpbmZvLmRlcHRoICA9IGJpdG1hcEluZm8ubkRlcHRoOwogfQogCi1GbG9hdFJlY3Qgc2Ny
ZWVuUmVjdChXaWRnZXQqKQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KikKIHsKICAg
ICBEaXNwbGF5SW5mbyBpbmZvOwogICAgIGdldERpc3BsYXlJbmZvKGluZm8pOwogCi0gICAgcmV0
dXJuIEZsb2F0UmVjdCgwLCAwLCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCk7CisgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgwLCAwLCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCk7CiB9CiAKLUZsb2F0
UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNj
cmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgcmV0dXJuIHNjcmVlblJl
Y3Qod2lkZ2V0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ry
YWdJbWFnZUNocm9taXVtTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0ltYWdlQ2hyb21pdW1NYWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdl
KERyYWdJbWFnZVJlZiBpbWFnZSkKICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CiB9CiAKLURy
YWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBz
Y2FsZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdy
YXBoaWNzU2l6ZSBzY2FsZSkKIHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdJbWFnZUNocm9taXVt
U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RHJhZ0ltYWdlQ2hyb21pdW1Ta2lhLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnSW1hZ2VDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJl
ZiBpbWFnZSkKICAgICBkZWxldGUgaW1hZ2U7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJ
bWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKK0RyYWdJbWFnZVJlZiBz
Y2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSBzY2FsZSkKIHsK
ICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiAr
NTEsMTIgQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAgICAgcmV0
dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUod2lkZ2V0KTsKIH0KIAotRmxv
YXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuUmVj
dChXaWRnZXQqIHdpZGdldCkKIHsKICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlblJl
Y3Qod2lkZ2V0KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3
aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkK
IHsKICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3Qod2lkZ2V0
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjMsNyArMzYzLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2Fs
Y3VsYQogICAgIGlmIChjaHJvbWVDbGllbnQpIHsKICAgICAgICAgLy8gSWYgdGhlIHBvcHVwIHdv
dWxkIGV4dGVuZCBwYXN0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiwgb3BlbiB1cHdhcmRzCiAg
ICAgICAgIC8vIGluc3RlYWQuCi0gICAgICAgIEZsb2F0UmVjdCBzY3JlZW4gPSBzY3JlZW5BdmFp
bGFibGVSZWN0KG1fZnJhbWVWaWV3LmdldCgpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHNjcmVl
biA9IHNjcmVlbkF2YWlsYWJsZVJlY3QobV9mcmFtZVZpZXcuZ2V0KCkpOwogICAgICAgICAvLyBV
c2UgcG9wdXBJbml0aWFsQ29vcmRpbmF0ZS54KCkgKyByaWdodE9mZnNldCBiZWNhdXNlIFJUTCBw
b3NpdGlvbgogICAgICAgICAvLyBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgogICAgICAgICB3aWRn
ZXRSZWN0ID0gY2hyb21lQ2xpZW50LT53aW5kb3dUb1NjcmVlbihJbnRSZWN0KHBvcHVwSW5pdGlh
bENvb3JkaW5hdGUueCgpICsgcmlnaHRPZmZzZXQsIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueSgp
LCB0YXJnZXRTaXplLndpZHRoKCksIHRhcmdldFNpemUuaGVpZ2h0KCkpKTsKQEAgLTM3MSw3ICsz
NzEsNyBAQCBJbnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAg
IC8vIElmIHdlIGhhdmUgbXVsdGlwbGUgc2NyZWVucyBhbmQgdGhlIGJyb3dzZXIgcmVjdCBpcyBp
biBvbmUgc2NyZWVuLCB3ZSBoYXZlCiAgICAgICAgIC8vIHRvIGNsaXAgdGhlIHdpbmRvdyB3aWR0
aCB0byB0aGUgc2NyZWVuIHdpZHRoLgogICAgICAgICAvLyBXaGVuIGNsaXBwaW5nLCB3ZSBhbHNv
IG5lZWQgdG8gc2V0IGEgbWF4aW11bSB3aWR0aCBmb3IgdGhlIGxpc3QgYm94LgotICAgICAgICBG
bG9hdFJlY3Qgd2luZG93UmVjdCA9IGNocm9tZUNsaWVudC0+d2luZG93UmVjdCgpOworICAgICAg
ICBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCA9IGNocm9tZUNsaWVudC0+d2luZG93UmVjdCgpOwog
ICAgICAgICBpZiAod2luZG93UmVjdC54KCkgPj0gc2NyZWVuLngoKSAmJiB3aW5kb3dSZWN0Lm1h
eFgoKSA8PSBzY3JlZW4ubWF4WCgpICYmICh3aWRnZXRSZWN0LngoKSA8IHNjcmVlbi54KCkgfHwg
d2lkZ2V0UmVjdC5tYXhYKCkgPiBzY3JlZW4ubWF4WCgpKSkgewogICAgICAgICAgICAgLy8gRmly
c3QsIGludmVyc2UgdGhlIHBvcHVwIGFsaWdubWVudCBpZiBpdCBkb2VzIG5vdCBmaXQgdGhlIHNj
cmVlbiAtIHRoaXMgbWlnaHQgZml4IHRoaW5ncyAob3IgbWFrZSB0aGVtIGJldHRlcikuCiAgICAg
ICAgICAgICBJbnRSZWN0IGludmVyc2VXaWRnZXRSZWN0ID0gY2hyb21lQ2xpZW50LT53aW5kb3dU
b1NjcmVlbihJbnRSZWN0KHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueCgpICsgKGlzUlRMID8gMCA6
IHJ0bE9mZnNldCksIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueSgpLCB0YXJnZXRTaXplLndpZHRo
KCksIHRhcmdldFNpemUuaGVpZ2h0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBA
CiAjaWZuZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAogI2RlZmluZSBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJG
bG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NTaXplLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLmgiCkBA
IC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAg
dmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBv
aW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihj
b25zdCBHcmFwaGljc1BvaW50Jik7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkBAIC02
NywxMSArNjcsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlv
bnMoKTsKIAotICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50
JiBuZXdQb3NpdGlvbik7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdy
YXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9uKTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVs
dGFYKGZsb2F0IGRlbHRhWCk7CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9h
dCBkZWx0YVkpOwogCi0gICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsKKyAgICB2b2lkIGltbWVkaWF0
ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3
UG9zaXRpb24pOwogCiAgICAgdm9pZCBzZXRJc0RyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKSB7IG1f
ZHJhd2luZ0ludG9MYXllciA9IGI7IH0KICAgICBib29sIGlzRHJhd2luZ0ludG9MYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd2luZ0ludG9MYXllcjsgfQpAQCAtMTI2LDcgKzEyNiw3IEBAIHBy
aXZhdGU6CiAKICAgICBmbG9hdCBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9h
dCkgY29uc3Q7CiAgICAgZmxvYXQgYWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxv
YXQpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2Fy
eShjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RTY3Jv
bGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGlu
ZygpIGNvbnN0OwpAQCAtMTQ4LDE1ICsxNDgsMTUgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlk
Q3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9m
UGluOwogCiAgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7
Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKLSAgICBGbG9hdFNpemUgbV9z
dHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKKyAg
ICBHcmFwaGljc1NpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAgIEdyYXBoaWNzU2l6ZSBt
X3N0cmV0Y2hTY3JvbGxGb3JjZTsKKyAgICBHcmFwaGljc1NpemUgbV9tb21lbnR1bVZlbG9jaXR5
OwogCiAgICAgLy8gUnViYmVyIGJhbmQgc3RhdGUuCiAgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFy
dFRpbWU7Ci0gICAgRmxvYXRTaXplIG1fc3RhcnRTdHJldGNoOwotICAgIEZsb2F0UG9pbnQgbV9v
cmlnT3JpZ2luOwotICAgIEZsb2F0U2l6ZSBtX29yaWdWZWxvY2l0eTsKKyAgICBHcmFwaGljc1Np
emUgbV9zdGFydFN0cmV0Y2g7CisgICAgR3JhcGhpY3NQb2ludCBtX29yaWdPcmlnaW47CisgICAg
R3JhcGhpY3NTaXplIG1fb3JpZ1ZlbG9jaXR5OwogICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM+IG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKICNlbmRpZgogICAgIGJvb2wgbV9kcmF3
aW5nSW50b0xheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJl
RXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3Jv
bGxWaWV3LmgiCkBAIC05OCw3ICs5OCw3IEBAIC0gKE5TUmVjdClib3VuZHMKICAgICBpZiAoIV9h
bmltYXRvcikKICAgICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAKLSAgICBXZWJDb3JlOjpGbG9h
dFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7Cisg
ICAgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24gPSBfYW5pbWF0b3ItPmN1
cnJlbnRQb3NpdGlvbigpOwogICAgIHJldHVybiBOU01ha2VSZWN0KGN1cnJlbnRQb3NpdGlvbi54
KCksIGN1cnJlbnRQb3NpdGlvbi55KCksIDAsIDApOwogfQogCkBAIC01MjcsNyArNTI3LDcgQEAg
Ym9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGwoUwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFw
aGljc1BvaW50JiBvZmZzZXQpCiB7CiAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgp
IF9zdG9wUnVuXTsKICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7CkBAIC01NDks
NyArNTQ5LDcgQEAgZmxvYXQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0UwogICAg
IHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEt
PmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdo
dCgpKSwgMCk7CiB9CiAKLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRq
dXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikg
Y29uc3QKK0dyYXBoaWNzUG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Ny
b2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBHcmFwaGljc1BvaW50JiBwb3NpdGlvbikgY29u
c3QKIHsKICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKCkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKQEAgLTU1NywxMiArNTU3LDEy
IEBAIEZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWQKICAgICBmbG9hdCBu
ZXdYID0gbWF4PGZsb2F0PihtaW48ZmxvYXQ+KHBvc2l0aW9uLngoKSwgbV9zY3JvbGxhYmxlQXJl
YS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0
aCgpKSwgMCk7CiAgICAgZmxvYXQgbmV3WSA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlv
bi55KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3Jv
bGxhYmxlQXJlYS0+dmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKLSAgICByZXR1cm4gRmxvYXRQb2lu
dChuZXdYLCBuZXdZKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChuZXdYLCBuZXdZKTsKIH0K
IAotdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQordm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bv
c2l0aW9uKQogewotICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9s
bFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOworICAgIEdyYXBoaWNzUG9pbnQgYWRq
dXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRp
b24pOwogIAogICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQb3NYICYm
IGFkanVzdGVkUG9zaXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCiAgICAgICAgIHJldHVybjsK
QEAgLTU5NCw3ICs1OTQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVk
aWF0CiAgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihj
b25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBHcmFw
aGljc1BvaW50JiBuZXdQb3NpdGlvbikKIHsKICAgICBBU1NFUlQobV9zY3JvbGxBbmltYXRpb25I
ZWxwZXIpOwogICAgIENHRmxvYXQgcHJvZ3Jlc3MgPSBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIu
Z2V0KCkgX3Byb2dyZXNzXTsKQEAgLTg1Niw3ICs4NTYsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmhhbmRsZUdlCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCiB7Ci0gICAgRmxv
YXRTaXplIGxpbWl0RGVsdGE7CisgICAgR3JhcGhpY3NTaXplIGxpbWl0RGVsdGE7CiAgICAgaWYg
KGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkgewogICAgICAgICBpZiAoZGVsdGFZIDwg
MCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1
cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcApAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2MKICAgICBmbG9hdCBkZWx0YVkgPSBt
X292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7CiAKICAgICAvLyBSZXNldCBvdmVyZmxvdyB2
YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBhdCB2YXJpb3VzIHBv
aW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRh
ID0gRmxvYXRTaXplKCk7CisgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gR3JhcGhpY3NTaXpl
KCk7CiAKICAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRh
WCgpOwogICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZ
KCk7CkBAIC05NjEsNyArOTYxLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpz
bW9vdGhTYwogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVl
bEV2ZW50LnRpbWVzdGFtcCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9sYXN0
TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAg
ICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX21v
bWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKQEAgLTEwNTEsOSArMTA1MSw5IEBAIHZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3RoU2MKICAgICAgICAgICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlLnNldFdpZHRoKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkgKyBkZWx0YVgp
OwogICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KG1fc3RyZXRjaFNj
cm9sbEZvcmNlLmhlaWdodCgpICsgZGVsdGFZKTsKIAotICAgICAgICAgICAgRmxvYXRTaXplIGRh
bXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3Jv
bGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgb3Jp
Z09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlv
bigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV3T3JpZ2luID0gb3JpZ09yaWdpbiArIGRhbXBlZERl
bHRhOworICAgICAgICAgICAgR3JhcGhpY3NTaXplIGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNE
ZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxm
KGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQo
KSkpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFi
bGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsKKyAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgbmV3T3JpZ2luID0gb3JpZ09yaWdpbiArIGRhbXBlZERlbHRhOwogCiAgICAgICAgICAg
ICBpZiAob3JpZ09yaWdpbiAhPSBuZXdPcmlnaW4pIHsKICAgICAgICAgICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CkBA
IC0xMDc5LDcgKzEwNzksNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2lu
U2NyCiAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICBtX2lnbm9y
ZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwogICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wID0gMDsKLSAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICBtX21v
bWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKICAgICBtX3Njcm9sbGVySW5pdGlhbGx5
UGlubmVkT25MZWZ0ID0gbV9zY3JvbGxhYmxlQXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5u
ZWRUb01pbmltdW1Qb3NpdGlvbigpOwogICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPblJp
Z2h0ID0gbV9zY3JvbGxhYmxlQXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGlt
dW1Qb3NpdGlvbigpOwogICAgIG1fY3VtdWxhdGl2ZUhvcml6b250YWxTY3JvbGwgPSAwOwpAQCAt
MTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpiZWdpblNj
cgogICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0
aWNEZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKICAgICBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVp
Z2h0KCkpKTsKIAotICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgIAogICAgIGlmICht
X3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9zbmFwUnViYmVyQmFu
ZFRpbWVyLnN0b3AoKTsKQEAgLTExMDYsNyArMTEwNiw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6c25hcFJ1YmIKIHsKICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBb
W05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbnR1
bVNjcm9sbFRpbWVzdGFtcDsKICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAg
JiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCi0gICAgICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICBtX21vbWVudHVtVmVsb2Np
dHkgPSBHcmFwaGljc1NpemUoKTsKIAogICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CiAK
QEAgLTExMTQsOSArMTExNCw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25h
cFJ1YmIKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJ
bnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNp
emUoKTsKLSAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9vcmlnVmVsb2Np
dHkgPSBGbG9hdFNpemUoKTsKKyAgICBtX3N0YXJ0U3RyZXRjaCA9IEdyYXBoaWNzU2l6ZSgpOwor
ICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9pbnQoKTsKKyAgICBtX29yaWdWZWxvY2l0eSA9
IEdyYXBoaWNzU2l6ZSgpOwogCiAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0YXJ0UmVwZWF0
aW5nKDEuMC82MC4wKTsKIH0KQEAgLTExNDAsMTUgKzExNDAsMTUgQEAgdm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpzbmFwUnViYgogICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMpIHsKICAgICAgICAgQ0ZUaW1lSW50ZXJ2
YWwgdGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0g
bV9zdGFydFRpbWU7CiAKLSAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgp
KSB7CisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBHcmFwaGljc1NpemUoKSkgewogICAg
ICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3Vu
dCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7ICAg
IAorICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEdyYXBoaWNzU2l6ZSgpKSB7ICAg
IAogICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Ci0gICAgICAg
ICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAg
ICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZs
b2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsK
LSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAg
ICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgICAgICAgICAgICAg
bV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgpOworICAgICAgICAgICAgICAgIG1fb3JpZ1Zl
bG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkBAIC0xMTczLDE3ICsxMTczLDE3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6c25hcFJ1YmIKICAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWln
aHQoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZp
Y2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNo
LndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisg
ICAgICAgIEdyYXBoaWNzUG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhl
bGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1Zl
bG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1lRGVsdGEpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0
YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxv
YXQpdGltZURlbHRhKSkpOwogCiAgICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBm
YWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4g
PSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbmV3T3Jp
Z2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CiAKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKICAgICAgICAg
ICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKICAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwog
Ci0gICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92
ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICBHcmFwaGljc1NpemUgbmV3U3RyZXRjaCA9IG1f
c2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZv
cmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWln
aHQoKSkpOwpAQCAtMTE5MywxNiArMTE5MywxNiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OnNuYXBSdWJiCiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0
ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKIAogICAgICAgICAg
ICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX3N0YXJ0VGlt
ZSA9IDA7Ci0gICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAg
ICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAgbV9vcmlnVmVs
b2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhp
Y3NTaXplKCk7CisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBHcmFwaGljc1BvaW50KCk7Cisg
ICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNp
bmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7
CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CiAgICAgfQogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRUaWMKICAgICAgICAgY29uc3QgaW50IHlQb3MgPSByZWN0Lnko
KSArIChyZWN0LmhlaWdodCgpICogcGVyY2VudCk7CiAKICAgICAgICAgLy8gUGFpbnQuCi0gICAg
ICAgIEZsb2F0UmVjdCB0aWNrUmVjdChyZWN0LngoKSwgeVBvcywgcmVjdC53aWR0aCgpLCAyKTsK
KyAgICAgICAgR3JhcGhpY3NSZWN0IHRpY2tSZWN0KHJlY3QueCgpLCB5UG9zLCByZWN0LndpZHRo
KCksIDIpOwogICAgICAgICBjb250ZXh0LT5maWxsUmVjdCh0aWNrUmVjdCk7CiAgICAgICAgIGNv
bnRleHQtPnN0cm9rZVJlY3QodGlja1JlY3QsIDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNo
cm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIHZv
aWQgcGFpbnRDaGVja2JveChDb250cm9sU3RhdGVzIAogICAgICAgICBpbmZsYXRlZFJlY3Quc2V0
V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKICAgICAgICAgaW5mbGF0
ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKICAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55
KCkpOwotICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZh
Y3RvcikpOworICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUZhY3Rvciwg
em9vbUZhY3RvcikpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54
KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAgICB9CiAKQEAgLTQ3Niw3ICs0NzYsNyBAQCBzdGF0
aWMgdm9pZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMgc3RhCiAgICAgICAgIGluZmxhdGVkUmVj
dC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBp
bmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3Ip
OwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRS
ZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6
b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFj
dG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRS
ZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwogICAgIH0KIApAQCAtNTg5LDcgKzU4OSw3IEBA
IHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQKICAgICAgICAgICAgIGlu
ZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwog
ICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkg
LyB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJl
Y3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICBjb250ZXh0LT5z
Y2FsZShHcmFwaGljc1NpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOwogICAgICAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7
CiAgICAgICAgIH0KICAgICB9CkBAIC02NDYsNyArNjQ2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRT
dGVwcGVyKENvbnRyb2xTdGF0ZXMgcwogICAgICAgICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgo
KSAvIHpvb21GYWN0b3IpOwogICAgICAgICByZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8g
em9vbUZhY3Rvcik7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShyZWN0LngoKSwgcmVjdC55
KCkpOwotICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZh
Y3RvcikpOworICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoem9vbUZhY3Rvciwg
em9vbUZhY3RvcikpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXJlY3QueCgpLCAtcmVj
dC55KCkpOwogICAgIH0KICAgICBDR1JlY3QgYm91bmRzKHJlY3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVm
KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFn
ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJ
bWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSkKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogICAgIHJldHVybiBpbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9QbGF0Zm9ybVNjcmVlbkVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1BsYXRmb3JtU2NyZWVuRWZsLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1TY3JlZW5FZmwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSwxNyArNjEsMTcgQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0
KikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCog
d2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAg
aW50IHgsIHksIHcsIGg7CiAgICAgRXZhcyogZSA9IHdpZGdldC0+ZXZhcygpOwogCiAgICAgZWNv
cmVfZXZhc19zY3JlZW5fZ2VvbWV0cnlfZ2V0KGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZSks
ICZ4LCAmeSwgJncsICZoKTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoeCwgeSwgdywgaCk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCh4LCB5LCB3LCBoKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVl
bkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxh
YmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiBzY3JlZW5SZWN0KHdpZGdldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIxNCw4ICsxMjE0LDggQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZWRpYVNsaWRlclRy
YQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGluZm8uY29udGV4dDsKIAotICAg
IGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0KSwgbV9tZWRpYVBhbmVsQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdChJbnRS
ZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbWVkaWFTbGlkZXJIZWln
aHQpIC8gMiwKKyAgICBjb250ZXh0LT5maWxsUmVjdChHcmFwaGljc1JlY3QocmVjdCksIG1fbWVk
aWFQYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVj
dChHcmFwaGljc1JlY3QoSW50UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAtIG1lZGlhU2xpZGVySGVpZ2h0KSAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC53aWR0aCgpLCBtZWRpYVNsaWRlckhlaWdodCkpLCBtX21lZGlhU2xp
ZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gb2JqZWN0LT5zdHlsZSgpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUVmbDo6cGFpbnRNZWRpYVNsaWRlclRyYQogICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BSaWdo
dCA9IHNsaWRlclRvcExlZnQ7CiAgICAgICAgIHNsaWRlclRvcFJpZ2h0Lm1vdmUoMCwgcmFuZ2VS
ZWN0LmhlaWdodCgpKTsKIAotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVj
dCksIG1fbWVkaWFQYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgY29u
dGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpLCBtX21lZGlhUGFuZWxDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CiAgICAgfQogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTEyOTAsNyArMTI5MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50TWVkaWFWb2x1bWVTbGkKIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZWRpYUN1cnJl
bnRUaW1lKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaW5mby5jb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3Qo
cmVjdCksIG1fbWVkaWFQYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBpbmZv
LmNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChyZWN0KSwgbV9tZWRpYVBhbmVsQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsVmlld0VmbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbFZpZXdFZmwuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxWaWV3RWZs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
Ikhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzgsMTMgKzE3OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgQml0bWFw
SW1hZ2UoSW1hZ2VPYnNlcnZlciogPSAwKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBo
aWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICNlbmRpZgotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAjaWYgKE9TKFdJ
TkNFKSAmJiAhUExBVEZPUk0oUVQpKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3QmIGRl
c3RSZWN0KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSEFJS1UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hh
ZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBDb250ZXh0U2hhZG93OjpD
b250ZXh0U2hhZG93KCkKIHsKIH0KIAotQ29udGV4dFNoYWRvdzo6Q29udGV4dFNoYWRvdyhjb25z
dCBDb2xvciYgY29sb3IsIGZsb2F0IHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCitD
b250ZXh0U2hhZG93OjpDb250ZXh0U2hhZG93KGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgcmFk
aXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCkKICAgICA6IG1fY29sb3IoY29sb3IpCiAg
ICAgLCBtX2JsdXJEaXN0YW5jZShyb3VuZChyYWRpdXMpKQogICAgICwgbV9vZmZzZXQob2Zmc2V0
KQpAQCAtODAsNyArODAsNyBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmNsZWFyKCkKICAgICBtX3R5
cGUgPSBOb1NoYWRvdzsKICAgICBtX2NvbG9yID0gQ29sb3IoKTsKICAgICBtX2JsdXJEaXN0YW5j
ZSA9IDA7Ci0gICAgbV9vZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICBtX29mZnNldCA9IEdyYXBo
aWNzU2l6ZSgpOwogfQogCiBib29sIENvbnRleHRTaGFkb3c6Om11c3RVc2VDb250ZXh0U2hhZG93
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKQEAgLTE4NywxNyArMTg3LDE3IEBAIHZvaWQgQ29u
dGV4dFNoYWRvdzo6YWRqdXN0Qmx1ckRpc3RhbmNlKEcKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gQ2FsY3VsYXRlIHRyYW5zZm9ybWVkIHVuaXQgdmVjdG9ycy4KLSAgICBjb25zdCBGbG9hdFF1
YWQgdW5pdFF1YWQoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgxLCAwKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludCgwLCAxKSwgRmxvYXRQb2ludCgxLCAxKSk7
CisgICAgY29uc3QgRmxvYXRRdWFkIHVuaXRRdWFkKEdyYXBoaWNzUG9pbnQoMCwgMCksIEdyYXBo
aWNzUG9pbnQoMSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9p
bnQoMCwgMSksIEdyYXBoaWNzUG9pbnQoMSwgMSkpOwogICAgIGNvbnN0IEZsb2F0UXVhZCB0cmFu
c2Zvcm1lZFVuaXRRdWFkID0gdHJhbnNmb3JtLm1hcFF1YWQodW5pdFF1YWQpOwogCiAgICAgLy8g
Q2FsY3VsYXRlIFggYXhpcyBzY2FsZSBmYWN0b3IuCi0gICAgY29uc3QgRmxvYXRTaXplIHhVbml0
Q2hhbmdlID0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMigpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5w
MSgpOworICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSB4VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5p
dFF1YWQucDIoKSAtIHRyYW5zZm9ybWVkVW5pdFF1YWQucDEoKTsKICAgICBjb25zdCBmbG9hdCB4
QXhpc1NjYWxlID0gc3FydGYoeFVuaXRDaGFuZ2Uud2lkdGgoKSAqIHhVbml0Q2hhbmdlLndpZHRo
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB4VW5pdENoYW5nZS5oZWln
aHQoKSAqIHhVbml0Q2hhbmdlLmhlaWdodCgpKTsKIAogICAgIC8vIENhbGN1bGF0ZSBZIGF4aXMg
c2NhbGUgZmFjdG9yLgotICAgIGNvbnN0IEZsb2F0U2l6ZSB5VW5pdENoYW5nZSA9IHRyYW5zZm9y
bWVkVW5pdFF1YWQucDMoKSAtIHRyYW5zZm9ybWVkVW5pdFF1YWQucDEoKTsKKyAgICBjb25zdCBH
cmFwaGljc1NpemUgeVVuaXRDaGFuZ2UgPSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAzKCkgLSB0cmFu
c2Zvcm1lZFVuaXRRdWFkLnAxKCk7CiAgICAgY29uc3QgZmxvYXQgeUF4aXNTY2FsZSA9IHNxcnRm
KHlVbml0Q2hhbmdlLndpZHRoKCkgKiB5VW5pdENoYW5nZS53aWR0aCgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgeVVuaXRDaGFuZ2UuaGVpZ2h0KCkgKiB5VW5pdENoYW5n
ZS5oZWlnaHQoKSk7CiAKQEAgLTIwNiw0MiArMjA2LDQyIEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6
YWRqdXN0Qmx1ckRpc3RhbmNlKEcKICAgICBtX2JsdXJEaXN0YW5jZSA9IHJvdW5kZihzdGF0aWNf
Y2FzdDxmbG9hdD4obV9ibHVyRGlzdGFuY2UpIC8gc2NhbGUpOwogfQogCi1JbnRSZWN0IENvbnRl
eHRTaGFkb3c6OmNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KQorSW50UmVjdCBDb250ZXh0U2hhZG93OjpjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGF5ZXJBcmVhLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICAvLyBDYWxjdWxhdGUgdGhlIGRlc3RpbmF0aW9u
IG9mIHRoZSBibHVycmVkIGFuZC9vciB0cmFuc2Zvcm1lZCBsYXllci4KLSAgICBGbG9hdFJlY3Qg
bGF5ZXJGbG9hdFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyR3JhcGhpY3NSZWN0OwogICAg
IGZsb2F0IGluZmxhdGlvbiA9IDA7CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgaWYgKG1fc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgJiYgIXRyYW5zZm9ybS5pc0lkZW50aXR5KCkpIHsKICAgICAgICAgRmxvYXRRdWFkIHRyYW5z
Zm9ybWVkUG9seWdvbiA9IHRyYW5zZm9ybS5tYXBRdWFkKEZsb2F0UXVhZChsYXllckFyZWEpKTsK
ICAgICAgICAgdHJhbnNmb3JtZWRQb2x5Z29uLm1vdmUobV9vZmZzZXQpOwotICAgICAgICBsYXll
ckZsb2F0UmVjdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUXVhZCh0cmFuc2Zvcm1lZFBvbHln
b24pLmJvdW5kaW5nQm94KCk7CisgICAgICAgIGxheWVyR3JhcGhpY3NSZWN0ID0gdHJhbnNmb3Jt
LmludmVyc2UoKS5tYXBRdWFkKHRyYW5zZm9ybWVkUG9seWdvbikuYm91bmRpbmdCb3goKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBsYXllckZsb2F0UmVjdCA9IGxheWVyQXJlYTsKLSAgICAgICAg
bGF5ZXJGbG9hdFJlY3QubW92ZShtX29mZnNldCk7CisgICAgICAgIGxheWVyR3JhcGhpY3NSZWN0
ID0gbGF5ZXJBcmVhOworICAgICAgICBsYXllckdyYXBoaWNzUmVjdC5tb3ZlKG1fb2Zmc2V0KTsK
ICAgICB9CiAKICAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhlIGJsdXIgcmFkaXVzIHRv
IGdpdmUgZXh0cmEgc3BhY2UgZm9yIHRoZSBibHVyIHRyYW5zaXRpb24uCiAgICAgaWYgKG1fdHlw
ZSA9PSBCbHVyU2hhZG93KSB7Ci0gICAgICAgIGxheWVyRmxvYXRSZWN0LmluZmxhdGUobV9ibHVy
RGlzdGFuY2UpOworICAgICAgICBsYXllckdyYXBoaWNzUmVjdC5pbmZsYXRlKG1fYmx1ckRpc3Rh
bmNlKTsKICAgICAgICAgaW5mbGF0aW9uICs9IG1fYmx1ckRpc3RhbmNlOwogICAgIH0KIAotICAg
IEZsb2F0UmVjdCB1bmNsaXBwZWRMYXllclJlY3QgPSBsYXllckZsb2F0UmVjdDsKKyAgICBHcmFw
aGljc1JlY3QgdW5jbGlwcGVkTGF5ZXJSZWN0ID0gbGF5ZXJHcmFwaGljc1JlY3Q7CiAKLSAgICBp
ZiAoIWNsaXBSZWN0LmNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3QobGF5ZXJGbG9hdFJlY3QpKSkg
eworICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChsYXllckdyYXBo
aWNzUmVjdCkpKSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gaGF2ZSB0aGUgYnVmZmVyIGxhcmdl
ciB0aGFuIHRoZSBjbGlwLgotICAgICAgICBsYXllckZsb2F0UmVjdC5pbnRlcnNlY3QoY2xpcFJl
Y3QpOworICAgICAgICBsYXllckdyYXBoaWNzUmVjdC5pbnRlcnNlY3QoY2xpcFJlY3QpOwogCiAg
ICAgICAgIC8vIElmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLCB3ZSBh
cmVuJ3QgcGFpbnRpbmcgYXQgYWxsLgotICAgICAgICBpZiAobGF5ZXJGbG9hdFJlY3QuaXNFbXB0
eSgpKQorICAgICAgICBpZiAobGF5ZXJHcmFwaGljc1JlY3QuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIEludFJlY3QoMCwgMCwgMCwgMCk7CiAKICAgICAgICAgLy8gV2UgYWRqdXN0IGFn
YWluIGJlY2F1c2UgdGhlIHBpeGVscyBhdCB0aGUgYm9yZGVycyBhcmUgc3RpbGwKICAgICAgICAg
Ly8gcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgdGhlIHBpeGVscyBvdXRzaWRlIHRoZSBidWZmZXIu
CiAgICAgICAgIGlmIChtX3R5cGUgPT0gQmx1clNoYWRvdykgewotICAgICAgICAgICAgbGF5ZXJG
bG9hdFJlY3QuaW5mbGF0ZShtX2JsdXJEaXN0YW5jZSk7CisgICAgICAgICAgICBsYXllckdyYXBo
aWNzUmVjdC5pbmZsYXRlKG1fYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAgIHVuY2xpcHBlZExh
eWVyUmVjdC5pbmZsYXRlKG1fYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAgIGluZmxhdGlvbiAr
PSBtX2JsdXJEaXN0YW5jZTsKICAgICAgICAgfQpAQCAtMjQ5LDE4ICsyNDksMTggQEAgSW50UmVj
dCBDb250ZXh0U2hhZG93OjpjYWxjdWxhdGVMYXllckJvdQogCiAgICAgY29uc3QgaW50IGZyYW1l
U2l6ZSA9IGluZmxhdGlvbiAqIDI7CiAgICAgbV9zb3VyY2VSZWN0ID0gSW50UmVjdCgwLCAwLCBs
YXllckFyZWEud2lkdGgoKSArIGZyYW1lU2l6ZSwgbGF5ZXJBcmVhLmhlaWdodCgpICsgZnJhbWVT
aXplKTsKLSAgICBtX2xheWVyT3JpZ2luID0gRmxvYXRQb2ludChsYXllckZsb2F0UmVjdC54KCks
IGxheWVyRmxvYXRSZWN0LnkoKSk7CisgICAgbV9sYXllck9yaWdpbiA9IEdyYXBoaWNzUG9pbnQo
bGF5ZXJHcmFwaGljc1JlY3QueCgpLCBsYXllckdyYXBoaWNzUmVjdC55KCkpOwogCi0gICAgY29u
c3QgRmxvYXRQb2ludCBtX3VuY2xpcHBlZExheWVyT3JpZ2luID0gRmxvYXRQb2ludCh1bmNsaXBw
ZWRMYXllclJlY3QueCgpLCB1bmNsaXBwZWRMYXllclJlY3QueSgpKTsKLSAgICBjb25zdCBGbG9h
dFNpemUgY2xpcHBlZE91dCA9IG1fdW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3JpZ2lu
OworICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQgbV91bmNsaXBwZWRMYXllck9yaWdpbiA9IEdyYXBo
aWNzUG9pbnQodW5jbGlwcGVkTGF5ZXJSZWN0LngoKSwgdW5jbGlwcGVkTGF5ZXJSZWN0LnkoKSk7
CisgICAgY29uc3QgR3JhcGhpY3NTaXplIGNsaXBwZWRPdXQgPSBtX3VuY2xpcHBlZExheWVyT3Jp
Z2luIC0gbV9sYXllck9yaWdpbjsKIAogICAgIC8vIFNldCB0aGUgb3JpZ2luIGFzIHRoZSB0b3Ag
bGVmdCBjb3JuZXIgb2YgdGhlIHNjcmF0Y2ggaW1hZ2UsIG9yLCBpbiBjYXNlIHRoZXJlJ3MgYSBj
bGlwcGVkCiAgICAgLy8gb3V0IHJlZ2lvbiwgc2V0IHRoZSBvcmlnaW4gYWNjb3JkaW5nbHkgdG8g
dGhlIGZ1bGwgYm91bmRpbmcgcmVjdCdzIHRvcC1sZWZ0IGNvcm5lci4KICAgICBjb25zdCBmbG9h
dCB0cmFuc2xhdGlvblggPSAtbGF5ZXJBcmVhLngoKSArIGluZmxhdGlvbiAtIGZhYnNmKGNsaXBw
ZWRPdXQud2lkdGgoKSk7CiAgICAgY29uc3QgZmxvYXQgdHJhbnNsYXRpb25ZID0gLWxheWVyQXJl
YS55KCkgKyBpbmZsYXRpb24gLSBmYWJzZihjbGlwcGVkT3V0LmhlaWdodCgpKTsKLSAgICBtX2xh
eWVyQ29udGV4dFRyYW5zbGF0aW9uID0gRmxvYXRQb2ludCh0cmFuc2xhdGlvblgsIHRyYW5zbGF0
aW9uWSk7CisgICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEdyYXBoaWNzUG9pbnQodHJh
bnNsYXRpb25YLCB0cmFuc2xhdGlvblkpOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
bGF5ZXJGbG9hdFJlY3QpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGxheWVyR3JhcGhp
Y3NSZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQ29udGV4dFNoYWRvd19o
CiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCkBAIC04MCwxMCArODAsMTAgQEAgcHVibGljOgogCiAgICAgQ29sb3IgbV9j
b2xvcjsKICAgICBpbnQgbV9ibHVyRGlzdGFuY2U7Ci0gICAgRmxvYXRTaXplIG1fb2Zmc2V0Owor
ICAgIEdyYXBoaWNzU2l6ZSBtX29mZnNldDsKIAogICAgIENvbnRleHRTaGFkb3coKTsKLSAgICBD
b250ZXh0U2hhZG93KGNvbnN0IENvbG9yJiwgZmxvYXQgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IG9mZnNldCk7CisgICAgQ29udGV4dFNoYWRvdyhjb25zdCBDb2xvciYsIGZsb2F0IHJhZGl1cywg
Y29uc3QgR3JhcGhpY3NTaXplJiBvZmZzZXQpOwogCiAgICAgYm9vbCBtdXN0VXNlQ29udGV4dFNo
YWRvdyhHcmFwaGljc0NvbnRleHQqKTsKICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMTAsNyArMTEw
LDcgQEAgcHVibGljOgogICAgIC8vIG9yaWdpbmFsIGNvbnRleHQuIElmIGJsdXIgcmFkaXVzIGlz
IHNwZWNpZmllZCwgdGhlIHNoYWRvdyB3aWxsIGJlCiAgICAgLy8gZmlsdGVyZWQgZmlyc3QuCiAK
LSAgICBQbGF0Zm9ybUNvbnRleHQgYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSk7CisgICAgUGxhdGZvcm1Db250ZXh0IGJlZ2luU2hh
ZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBsYXllckFyZWEp
OwogICAgIHZvaWQgZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgc3RhdGlj
IHZvaWQgcHVyZ2VTY3JhdGNoQnVmZmVyKCk7CiAKQEAgLTEyNiwxNCArMTI2LDE0IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1JbWFnZSBtX2xheWVySW1hZ2U7IC8vIEJ1ZmZlciB0
byB3aGVyZSB0aGUgdGVtcG9yYXJ5IHNoYWRvdyB3aWxsIGJlIGRyYXduIHRvLgogICAgIFBsYXRm
b3JtQ29udGV4dCBtX2xheWVyQ29udGV4dDsgLy8gQ29udGV4dCB1c2VkIHRvIHBhaW50IHRoZSBz
aGFkb3cgdG8gdGhlIGxheWVyIGltYWdlLgotICAgIEZsb2F0UmVjdCBtX3NvdXJjZVJlY3Q7IC8v
IFN1Yi1yZWN0IG9mIG1fbGF5ZXJJbWFnZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFkb3cgcGl4ZWxz
LgotICAgIEZsb2F0UG9pbnQgbV9sYXllck9yaWdpbjsgLy8gVG9wLWxlZnQgY29ybmVyIG9mIHRo
ZSAocG9zc2libHkgY2xpcHBlZCkgYm91bmRpbmcgcmVjdCB0byBkcmF3IHRoZSBzaGFkb3cgdG8u
Ci0gICAgRmxvYXRQb2ludCBtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uOyAvLyBUcmFuc2xhdGlv
biB0byBhcHBseSB0byBtX2xheWVyQ29udGV4dCBmb3IgdGhlIHNoYWRvdyB0byBiZSBjb3JyZWN0
bHkgY2xpcHBlZC4KKyAgICBHcmFwaGljc1JlY3QgbV9zb3VyY2VSZWN0OyAvLyBTdWItcmVjdCBv
ZiBtX2xheWVySW1hZ2UgdGhhdCBjb250YWlucyB0aGUgc2hhZG93IHBpeGVscy4KKyAgICBHcmFw
aGljc1BvaW50IG1fbGF5ZXJPcmlnaW47IC8vIFRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgKHBvc3Np
Ymx5IGNsaXBwZWQpIGJvdW5kaW5nIHJlY3QgdG8gZHJhdyB0aGUgc2hhZG93IHRvLgorICAgIEdy
YXBoaWNzUG9pbnQgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbjsgLy8gVHJhbnNsYXRpb24gdG8g
YXBwbHkgdG8gbV9sYXllckNvbnRleHQgZm9yIHRoZSBzaGFkb3cgdG8gYmUgY29ycmVjdGx5IGNs
aXBwZWQuCiAgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogCiAgICAgdm9pZCBh
ZGp1c3RCbHVyRGlzdGFuY2UoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgdm9pZCBibHVyTGF5ZXJJ
bWFnZSh1bnNpZ25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBpbnQgc3RyaWRl
KTsKLSAgICBJbnRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7
CisgICAgSW50UmVjdCBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
OwogCiAjaWYgVVNFKENBSVJPKQogICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5n
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IEludFNp
emUmIHRvcExlZnRSYWRpdXMsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBJ
bnRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodFJhZGl1
cywgZmxvYXQgYWxwaGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50M0QuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVy
aWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLQotI2luY2x1ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIEZsb2F0UG9pbnQzRDo6bm9ybWFsaXplKCkKLXsKLSAgICBmbG9h
dCB0ZW1wTGVuZ3RoID0gbGVuZ3RoKCk7Ci0KLSAgICBpZiAodGVtcExlbmd0aCkgewotICAgICAg
ICBtX3ggLz0gdGVtcExlbmd0aDsKLSAgICAgICAgbV95IC89IHRlbXBMZW5ndGg7Ci0gICAgICAg
IG1feiAvPSB0ZW1wTGVuZ3RoOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
M0QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3
ZWJraXQub3JnPgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBGbG9hdFBvaW50M0RfaAotI2RlZmluZSBGbG9hdFBvaW50
M0RfaAotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEZsb2F0UG9pbnQzRCB7Ci1wdWJsaWM6Ci0gICAgRmxvYXRQb2ludDNEKCkKLSAgICAg
ICAgOiBtX3goMCkKLSAgICAgICAgLCBtX3koMCkKLSAgICAgICAgLCBtX3ooMCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgRmxvYXRQb2ludDNEKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCi0gICAg
ICAgIDogbV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgICAgICwgbV96KHopCi0gICAgewot
ICAgIH0KLQotICAgIEZsb2F0UG9pbnQzRChjb25zdCBGbG9hdFBvaW50JiBwKQotICAgICAgICA6
IG1feChwLngoKSkKLSAgICAgICAgLCBtX3kocC55KCkpCi0gICAgICAgICwgbV96KDApCi0gICAg
ewotICAgIH0KLQotICAgIEZsb2F0UG9pbnQzRChjb25zdCBGbG9hdFBvaW50M0QmIHApCi0gICAg
ICAgIDogbV94KHAueCgpKQotICAgICAgICAsIG1feShwLnkoKSkKLSAgICAgICAgLCBtX3oocC56
KCkpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0K
LSAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9Ci0KLSAgICBmbG9hdCB5KCkgY29u
c3QgeyByZXR1cm4gbV95OyB9Ci0gICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV95ID0geTsgfQot
Ci0gICAgZmxvYXQgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQotICAgIHZvaWQgc2V0WihmbG9h
dCB6KSB7IG1feiA9IHo7IH0KLSAgICB2b2lkIHNldChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6
KQotICAgIHsKLSAgICAgICAgbV94ID0geDsKLSAgICAgICAgbV95ID0geTsKLSAgICAgICAgbV96
ID0gejsKLSAgICB9Ci0gICAgdm9pZCBtb3ZlKGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHop
Ci0gICAgewotICAgICAgICBtX3ggKz0gZHg7Ci0gICAgICAgIG1feSArPSBkeTsKLSAgICAgICAg
bV96ICs9IGR6OwotICAgIH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3opCi0gICAgewotICAgICAgICBtX3ggKj0gc3g7Ci0gICAgICAgIG1feSAqPSBzeTsKLSAg
ICAgICAgbV96ICo9IHN6OwotICAgIH0KLQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhbV94ICYmICFtX3kgJiYgIW1fejsKLSAgICB9Ci0KLSAgICB2b2lk
IG5vcm1hbGl6ZSgpOwotCi0gICAgZmxvYXQgZG90KGNvbnN0IEZsb2F0UG9pbnQzRCYgYSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ggKiBhLngoKSArIG1feSAqIGEueSgpICsgbV96
ICogYS56KCk7Ci0gICAgfQotCi0gICAgLy8gU2V0cyB0aGlzIEZsb2F0UG9pbnQzRCB0byB0aGUg
Y3Jvc3MgcHJvZHVjdCBvZiB0aGUgcGFzc2VkIHR3by4KLSAgICAvLyBJdCBpcyBzYWZlIGZvciAi
dGhpcyIgdG8gYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9yIGJvdGggb2YgdGhlCi0gICAgLy8gYXJn
dW1lbnRzLgotICAgIHZvaWQgY3Jvc3MoY29uc3QgRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9h
dFBvaW50M0QmIGIpCi0gICAgewotICAgICAgICBmbG9hdCB4ID0gYS55KCkgKiBiLnooKSAtIGEu
eigpICogYi55KCk7Ci0gICAgICAgIGZsb2F0IHkgPSBhLnooKSAqIGIueCgpIC0gYS54KCkgKiBi
LnooKTsKLSAgICAgICAgZmxvYXQgeiA9IGEueCgpICogYi55KCkgLSBhLnkoKSAqIGIueCgpOwot
ICAgICAgICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5OwotICAgICAgICBtX3ogPSB6OwotICAg
IH0KLQotICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIHJldHVybmluZyAidGhpcyBjcm9zcyBw
b2ludCIgYXMgYQotICAgIC8vIHN0YWNrLWFsbG9jYXRlZCByZXN1bHQuCi0gICAgRmxvYXRQb2lu
dDNEIGNyb3NzKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBGbG9hdFBvaW50M0QgcmVzdWx0OwotICAgICAgICByZXN1bHQuY3Jvc3MoKnRoaXMsIHBvaW50
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZW5ndGhTcXVh
cmVkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQotICAgIGZsb2F0IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7IH0KLSAgICAKLSAgICBm
bG9hdCBkaXN0YW5jZVRvKGNvbnN0IEZsb2F0UG9pbnQzRCYgYSkgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKLSAgICBmbG9hdCBtX3o7Ci19OwotCi1p
bmxpbmUgRmxvYXRQb2ludDNEJiBvcGVyYXRvciArPShGbG9hdFBvaW50M0QmIGEsIGNvbnN0IEZs
b2F0UG9pbnQzRCYgYikKLXsKLSAgICBhLm1vdmUoYi54KCksIGIueSgpLCBiLnooKSk7Ci0gICAg
cmV0dXJuIGE7Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50M0QmIG9wZXJhdG9yIC09KEZsb2F0UG9p
bnQzRCYgYSwgY29uc3QgRmxvYXRQb2ludDNEJiBiKQotewotICAgIGEubW92ZSgtYi54KCksIC1i
LnkoKSwgLWIueigpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0UG9pbnQzRCBv
cGVyYXRvcisoY29uc3QgRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIpCi17
Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgpLCBh
LnooKSArIGIueigpKTsKLX0KLQotaW5saW5lIEZsb2F0UG9pbnQzRCBvcGVyYXRvci0oY29uc3Qg
RmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIpCi17Ci0gICAgcmV0dXJuIEZs
b2F0UG9pbnQzRChhLngoKSAtIGIueCgpLCBhLnkoKSAtIGIueSgpLCBhLnooKSAtIGIueigpKTsK
LX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFBvaW50M0QmIGEsIGNvbnN0
IEZsb2F0UG9pbnQzRCYgYikKLXsKLSAgICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkg
PT0gYi55KCkgJiYgYS56KCkgPT0gYi56KCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIpCi17Ci0gICAgcmV0
dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgpIHx8IGEueigpICE9IGIueigpOwot
fQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQzRCYgYSwgY29uc3Qg
RmxvYXRQb2ludDNEJiBiKQotewotICAgIC8vIGRvdCBwcm9kdWN0Ci0gICAgcmV0dXJuIGEuZG90
KGIpOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludDNEIG9wZXJhdG9yKihmbG9hdCBrLCBjb25zdCBG
bG9hdFBvaW50M0QmIHYpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChrICogdi54KCksIGsg
KiB2LnkoKSwgayAqIHYueigpKTsKLX0KLQotaW5saW5lIEZsb2F0UG9pbnQzRCBvcGVyYXRvcioo
Y29uc3QgRmxvYXRQb2ludDNEJiB2LCBmbG9hdCBrKQotewotICAgIHJldHVybiBGbG9hdFBvaW50
M0QoayAqIHYueCgpLCBrICogdi55KCksIGsgKiB2LnooKSk7Ci19Ci0KLWlubGluZSBmbG9hdCBG
bG9hdFBvaW50M0Q6OmRpc3RhbmNlVG8oY29uc3QgRmxvYXRQb2ludDNEJiBhKSBjb25zdAotewot
ICAgIHJldHVybiAoKnRoaXMgLSBhKS5sZW5ndGgoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRmxvYXRQb2ludDNEX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJGbG9h
dENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgPGxpbWl0cz4K
LSNpbmNsdWRlIDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2ludDo6
RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYgcCkgOiBtX3gocC54KCkpLCBtX3kocC55KCkpCi17
Ci19Ci0KLXZvaWQgRmxvYXRQb2ludDo6bm9ybWFsaXplKCkKLXsKLSAgICBmbG9hdCB0ZW1wTGVu
Z3RoID0gbGVuZ3RoKCk7Ci0KLSAgICBpZiAodGVtcExlbmd0aCkgewotICAgICAgICBtX3ggLz0g
dGVtcExlbmd0aDsKLSAgICAgICAgbV95IC89IHRlbXBMZW5ndGg7Ci0gICAgfQotfQotCi1mbG9h
dCBGbG9hdFBvaW50OjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBzcXJ0ZihsZW5ndGhT
cXVhcmVkKCkpOwotfQotCi1GbG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBkb3VibGUgbmV3
WCwgbmV3WTsKLSAgICB0cmFuc2Zvcm0ubWFwKHN0YXRpY19jYXN0PGRvdWJsZT4obV94KSwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3kpLCBuZXdYLCBuZXdZKTsKLSAgICByZXR1cm4gbmFycm93UHJl
Y2lzaW9uKG5ld1gsIG5ld1kpOwotfQotCi1GbG9hdFBvaW50IEZsb2F0UG9pbnQ6Om1hdHJpeFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSBjb25zdAotewot
ICAgIGRvdWJsZSBuZXdYLCBuZXdZOwotICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOwotICAgIHJl
dHVybiBuYXJyb3dQcmVjaXNpb24obmV3WCwgbmV3WSk7Ci19Ci0KLUZsb2F0UG9pbnQgRmxvYXRQ
b2ludDo6bmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLSAgICByZXR1cm4g
RmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHgpLCBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHkpKTsKLX0KLQotZmxvYXQgZmluZFNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMiwgZmxvYXQmIGMpCi17Ci0gICAgaWYgKHAyLngoKSA9PSBwMS54KCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsK
LQotICAgIC8vIHkgPSBteCArIGMKLSAgICBmbG9hdCBzbG9wZSA9IChwMi55KCkgLSBwMS55KCkp
IC8gKHAyLngoKSAtIHAxLngoKSk7Ci0gICAgYyA9IHAxLnkoKSAtIHNsb3BlICogcDEueCgpOwot
ICAgIHJldHVybiBzbG9wZTsKLX0KLQotYm9vbCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgZDEsIGNv
bnN0IEZsb2F0UG9pbnQmIGQyLCBGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pIAotewotICAgIGZs
b2F0IHBPZmZzZXQgPSAwOwotICAgIGZsb2F0IHBTbG9wZSA9IGZpbmRTbG9wZShwMSwgcDIsIHBP
ZmZzZXQpOwotCi0gICAgZmxvYXQgZE9mZnNldCA9IDA7Ci0gICAgZmxvYXQgZFNsb3BlID0gZmlu
ZFNsb3BlKGQxLCBkMiwgZE9mZnNldCk7Ci0KLSAgICBpZiAoZFNsb3BlID09IHBTbG9wZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChwU2xvcGUgPT0gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKLSAgICAgICAgaW50ZXJzZWN0aW9uLnNldFgo
cDEueCgpKTsKLSAgICAgICAgaW50ZXJzZWN0aW9uLnNldFkoZFNsb3BlICogaW50ZXJzZWN0aW9u
LngoKSArIGRPZmZzZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGRT
bG9wZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgewotICAgICAg
ICBpbnRlcnNlY3Rpb24uc2V0WChkMS54KCkpOwotICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WShw
U2xvcGUgKiBpbnRlcnNlY3Rpb24ueCgpICsgcE9mZnNldCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHggYXQgaW50ZXJzZWN0aW9uLCB3aGVyZSB5cyBv
dmVybGFwOyB4ID0gKGMnIC0gYykgLyAobSAtIG0nKQotICAgIGludGVyc2VjdGlvbi5zZXRYKChk
T2Zmc2V0IC0gcE9mZnNldCkgLyAocFNsb3BlIC0gZFNsb3BlKSk7Ci0gICAgaW50ZXJzZWN0aW9u
LnNldFkocFNsb3BlICogaW50ZXJzZWN0aW9uLngoKSArIHBPZmZzZXQpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2ludC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNTMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZsb2F0UG9pbnRfaAotI2RlZmluZSBGbG9hdFBvaW50
X2gKLQotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFD
X0NIUk9NSVVNKQotdHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSNp
ZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwotdHlwZWRlZiBz
dHJ1Y3QgQ0dQb2ludCBOU1BvaW50OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5T
UG9pbnQ7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAicWds
b2JhbC5oIgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUG9pbnRGOwotUVRfRU5EX05BTUVT
UEFDRQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJQb2ludDsKLSNlbmRp
ZgotCi0jaWYgVVNFKFNLSUEpCi1zdHJ1Y3QgU2tQb2ludDsKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIFRyYW5zZm9ybWF0aW9u
TWF0cml4OwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRTaXplOwotCi1jbGFzcyBGbG9hdFBv
aW50IHsKLXB1YmxpYzoKLSAgICBGbG9hdFBvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KLSAg
ICBGbG9hdFBvaW50KGZsb2F0IHgsIGZsb2F0IHkpIDogbV94KHgpLCBtX3koeSkgeyB9Ci0gICAg
RmxvYXRQb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0KLSAgICBzdGF0aWMgRmxvYXRQb2ludCB6
ZXJvKCkgeyByZXR1cm4gRmxvYXRQb2ludCgpOyB9Ci0KLSAgICBzdGF0aWMgRmxvYXRQb2ludCBu
YXJyb3dQcmVjaXNpb24oZG91YmxlIHgsIGRvdWJsZSB5KTsKLQotICAgIGZsb2F0IHgoKSBjb25z
dCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0K
LSAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9Ci0gICAgdm9pZCBzZXRZKGZsb2F0
IHkpIHsgbV95ID0geTsgfQotICAgIHZvaWQgc2V0KGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgewot
ICAgICAgICBtX3ggPSB4OwotICAgICAgICBtX3kgPSB5OwotICAgIH0KLSAgICB2b2lkIG1vdmUo
ZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIHsKLSAgICAgICAgbV94ICs9IGR4OwotICAgICAgICBt
X3kgKz0gZHk7Ci0gICAgfQotICAgIHZvaWQgbW92ZShjb25zdCBJbnRTaXplJiBhKQotICAgIHsK
LSAgICAgICAgbV94ICs9IGEud2lkdGgoKTsKLSAgICAgICAgbV95ICs9IGEuaGVpZ2h0KCk7Ci0g
ICAgfQotICAgIHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIGEpCi0gICAgewotICAgICAgICBt
X3ggKz0gYS53aWR0aCgpOwotICAgICAgICBtX3kgKz0gYS5oZWlnaHQoKTsKLSAgICB9Ci0gICAg
dm9pZCBtb3ZlQnkoY29uc3QgSW50UG9pbnQmIGEpCi0gICAgewotICAgICAgICBtX3ggKz0gYS54
KCk7Ci0gICAgICAgIG1feSArPSBhLnkoKTsKLSAgICB9Ci0gICAgdm9pZCBtb3ZlQnkoY29uc3Qg
RmxvYXRQb2ludCYgYSkKLSAgICB7Ci0gICAgICAgIG1feCArPSBhLngoKTsKLSAgICAgICAgbV95
ICs9IGEueSgpOwotICAgIH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKLSAg
ICB7Ci0gICAgICAgIG1feCAqPSBzeDsKLSAgICAgICAgbV95ICo9IHN5OwotICAgIH0KLQotICAg
IHZvaWQgbm9ybWFsaXplKCk7Ci0KLSAgICBmbG9hdCBkb3QoY29uc3QgRmxvYXRQb2ludCYgYSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ggKiBhLngoKSArIG1feSAqIGEueSgpOwot
ICAgIH0KLQotICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0OwotICAgIGZsb2F0IGxlbmd0aFNxdWFy
ZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1feCAqIG1feCArIG1feSAqIG1feTsK
LSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IGV4cGFuZGVkVG8oY29uc3QgRmxvYXRQb2ludCYgb3Ro
ZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChzdGQ6Om1heChtX3gs
IG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95KSk7Ci0gICAgfQotCi0gICAgRmxv
YXRQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZs
b2F0UG9pbnQobV95LCBtX3gpOwotICAgIH0KLQotI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05f
TUFDX0NIUk9NSVVNKQotICAgIEZsb2F0UG9pbnQoY29uc3QgQ0dQb2ludCYpOwotICAgIG9wZXJh
dG9yIENHUG9pbnQoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCi0gICAg
ICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSAgICBGbG9hdFBvaW50
KGNvbnN0IE5TUG9pbnQmKTsKLSAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFFUKQotICAgIEZsb2F0UG9pbnQoY29uc3QgUVBvaW50RiYpOwotICAg
IG9wZXJhdG9yIFFQb2ludEYoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSEFJS1Up
Ci0gICAgRmxvYXRQb2ludChjb25zdCBCUG9pbnQmKTsKLSAgICBvcGVyYXRvciBCUG9pbnQoKSBj
b25zdDsKLSNlbmRpZgotCi0jaWYgVVNFKFNLSUEpCi0gICAgb3BlcmF0b3IgU2tQb2ludCgpIGNv
bnN0OwotICAgIEZsb2F0UG9pbnQoY29uc3QgU2tQb2ludCYpOwotI2VuZGlmCi0KLSAgICBGbG9h
dFBvaW50IG1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0
OwotICAgIEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCwgbV95OwotfTsKLQotCi1pbmxpbmUg
RmxvYXRQb2ludCYgb3BlcmF0b3IrPShGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFNpemUmIGIp
Ci17Ci0gICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGE7Ci19
Ci0KLWlubGluZSBGbG9hdFBvaW50JiBvcGVyYXRvcis9KEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZs
b2F0UG9pbnQmIGIpCi17Ci0gICAgYS5tb3ZlKGIueCgpLCBiLnkoKSk7Ci0gICAgcmV0dXJuIGE7
Ci19Ci0KLWlubGluZSBGbG9hdFBvaW50JiBvcGVyYXRvci09KEZsb2F0UG9pbnQmIGEsIGNvbnN0
IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoLWIud2lkdGgoKSwgLWIuaGVpZ2h0KCkpOwot
ICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvcisoY29uc3QgRmxv
YXRQb2ludCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBGbG9hdFBvaW50
KGEueCgpICsgYi53aWR0aCgpLCBhLnkoKSArIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRmxv
YXRQb2ludCBvcGVyYXRvcisoY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2ludCYg
YikKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludChhLngoKSArIGIueCgpLCBhLnkoKSArIGIueSgp
KTsKLX0KLQotaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvci0oY29uc3QgRmxvYXRQb2ludCYgYSwg
Y29uc3QgRmxvYXRQb2ludCYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKGEueCgpIC0gYi54
KCksIGEueSgpIC0gYi55KCkpOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvci0oY29u
c3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBGbG9h
dFBvaW50KGEueCgpIC0gYi53aWR0aCgpLCBhLnkoKSAtIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0UG9pbnQm
IGIpCi17Ci0gICAgcmV0dXJuIGEueCgpID09IGIueCgpICYmIGEueSgpID09IGIueSgpOwotfQot
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0IEZsb2F0
UG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuIGEueCgpICE9IGIueCgpIHx8IGEueSgpICE9IGIueSgp
OwotfQotCi1pbmxpbmUgZmxvYXQgb3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQmIGEsIGNvbnN0
IEZsb2F0UG9pbnQmIGIpCi17Ci0gICAgLy8gZG90IHByb2R1Y3QKLSAgICByZXR1cm4gYS5kb3Qo
Yik7Ci19Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcCkKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC54
KCkpKSwgc3RhdGljX2Nhc3Q8aW50Pihyb3VuZGYocC55KCkpKSk7Ci19Ci0KLWlubGluZSBJbnRQ
b2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4g
SW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihwLngoKSksIHN0YXRpY19jYXN0PGludD4ocC55KCkp
KTsKLX0KLQotaW5saW5lIEludFNpemUgZmxvb3JlZEludFNpemUoY29uc3QgRmxvYXRQb2ludCYg
cCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGlj
X2Nhc3Q8aW50PihwLnkoKSkpOwotfQotCi1mbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCYgYyk7Ci0KLS8vIEZpbmQgcG9pbnQg
d2hlcmUgbGluZXMgdGhyb3VnaCB0aGUgdHdvIHBhaXJzIG9mIHBvaW50cyBpbnRlcnNlY3QuIFJl
dHVybnMgZmFsc2UgaWYgdGhlIGxpbmVzIGRvbid0IGludGVyc2VjdC4KLWJvb2wgZmluZEludGVy
c2VjdGlvbihjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGNvbnN0
IEZsb2F0UG9pbnQmIGQxLCBjb25zdCBGbG9hdFBvaW50JiBkMiwgRmxvYXRQb2ludCYgaW50ZXJz
ZWN0aW9uKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3Rk
OjptaW47Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBmbG9hdCBtaW40
KGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGMsIGZsb2F0IGQpCi17Ci0gICAgcmV0dXJuIG1pbiht
aW4oYSwgYiksIG1pbihjLCBkKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgbWF4NChmbG9h
dCBhLCBmbG9hdCBiLCBmbG9hdCBjLCBmbG9hdCBkKQotewotICAgIHJldHVybiBtYXgobWF4KGEs
IGIpLCBtYXgoYywgZCkpOwotfQotCi1pbmxpbmUgZmxvYXQgZG90KGNvbnN0IEZsb2F0U2l6ZSYg
YSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgKiBiLndpZHRo
KCkgKyBhLmhlaWdodCgpICogYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIGJvb2wgaXNQb2ludElu
VHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYgdDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHQyLCBjb25zdCBGbG9hdFBvaW50JiB0MykKLXsKLSAgICAvLyBDb21wdXRl
IHZlY3RvcnMgICAgICAgIAotICAgIEZsb2F0U2l6ZSB2MCA9IHQzIC0gdDE7Ci0gICAgRmxvYXRT
aXplIHYxID0gdDIgLSB0MTsKLSAgICBGbG9hdFNpemUgdjIgPSBwIC0gdDE7Ci0gICAgCi0gICAg
Ly8gQ29tcHV0ZSBkb3QgcHJvZHVjdHMKLSAgICBmbG9hdCBkb3QwMCA9IGRvdCh2MCwgdjApOwot
ICAgIGZsb2F0IGRvdDAxID0gZG90KHYwLCB2MSk7Ci0gICAgZmxvYXQgZG90MDIgPSBkb3QodjAs
IHYyKTsKLSAgICBmbG9hdCBkb3QxMSA9IGRvdCh2MSwgdjEpOwotICAgIGZsb2F0IGRvdDEyID0g
ZG90KHYxLCB2Mik7Ci0KLSAgICAvLyBDb21wdXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzCi0g
ICAgZmxvYXQgaW52RGVub20gPSAxLjBmIC8gKGRvdDAwICogZG90MTEgLSBkb3QwMSAqIGRvdDAx
KTsKLSAgICBmbG9hdCB1ID0gKGRvdDExICogZG90MDIgLSBkb3QwMSAqIGRvdDEyKSAqIGludkRl
bm9tOwotICAgIGZsb2F0IHYgPSAoZG90MDAgKiBkb3QxMiAtIGRvdDAxICogZG90MDIpICogaW52
RGVub207Ci0KLSAgICAvLyBDaGVjayBpZiBwb2ludCBpcyBpbiB0cmlhbmdsZQotICAgIHJldHVy
biAodSA+PSAwKSAmJiAodiA+PSAwKSAmJiAodSArIHYgPD0gMSk7Ci19Ci0KLUZsb2F0UmVjdCBG
bG9hdFF1YWQ6OmJvdW5kaW5nQm94KCkgY29uc3QKLXsKLSAgICBmbG9hdCBsZWZ0ICAgPSBtaW40
KG1fcDEueCgpLCBtX3AyLngoKSwgbV9wMy54KCksIG1fcDQueCgpKTsKLSAgICBmbG9hdCB0b3Ag
ICAgPSBtaW40KG1fcDEueSgpLCBtX3AyLnkoKSwgbV9wMy55KCksIG1fcDQueSgpKTsKLQotICAg
IGZsb2F0IHJpZ2h0ICA9IG1heDQobV9wMS54KCksIG1fcDIueCgpLCBtX3AzLngoKSwgbV9wNC54
KCkpOwotICAgIGZsb2F0IGJvdHRvbSA9IG1heDQobV9wMS55KCksIG1fcDIueSgpLCBtX3AzLnko
KSwgbV9wNC55KCkpOwotICAgIAotICAgIHJldHVybiBGbG9hdFJlY3QobGVmdCwgdG9wLCByaWdo
dCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7Ci19Ci0KLWJvb2wgRmxvYXRRdWFkOjppc1JlY3RpbGlu
ZWFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fcDEueCgpID09IG1fcDIueCgpICYmIG1fcDIu
eSgpID09IG1fcDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYmIG1fcDQueSgpID09IG1f
cDEueSgpKQotICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkgJiYgbV9wMi54KCkgPT0g
bV9wMy54KCkgJiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54KCkgPT0gbV9wMS54KCkp
OwotfQotCi1ib29sIEZsb2F0UXVhZDo6Y29udGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50JiBw
KSBjb25zdAotewotICAgIHJldHVybiBpc1BvaW50SW5UcmlhbmdsZShwLCBtX3AxLCBtX3AyLCBt
X3AzKSB8fCBpc1BvaW50SW5UcmlhbmdsZShwLCBtX3AxLCBtX3AzLCBtX3A0KTsKLX0gCi0KLS8v
IE5vdGUgdGhhdCB3ZSBvbmx5IGhhbmRsZSBjb252ZXggcXVhZHMgaGVyZS4KLWJvb2wgRmxvYXRR
dWFkOjpjb250YWluc1F1YWQoY29uc3QgRmxvYXRRdWFkJiBvdGhlcikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29udGFpbnNQb2ludChvdGhlci5wMSgpKSAmJiBjb250YWluc1BvaW50KG90aGVyLnAy
KCkpICYmIGNvbnRhaW5zUG9pbnQob3RoZXIucDMoKSkgJiYgY29udGFpbnNQb2ludChvdGhlci5w
NCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRmxvYXRRdWFkX2gKLSNkZWZpbmUgRmxvYXRR
dWFkX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBGbG9h
dFF1YWQgaXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBvZnRlbiByZXByZXNlbnRpbmcgdGhl
IHJlc3VsdCBvZgotLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0aHJvdWdoIHRyYW5zZm9ybXMuIFdo
ZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQotLy8gcG9pbnRzIGFyZSBpbiBjbG9ja3dp
c2Ugb3JkZXIgZnJvbSB0b3AgbGVmdC4KLWNsYXNzIEZsb2F0UXVhZCB7Ci1wdWJsaWM6Ci0gICAg
RmxvYXRRdWFkKCkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRRdWFkKGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMsIGNvbnN0
IEZsb2F0UG9pbnQmIHA0KQotICAgICAgICA6IG1fcDEocDEpCi0gICAgICAgICwgbV9wMihwMikK
LSAgICAgICAgLCBtX3AzKHAzKQotICAgICAgICAsIG1fcDQocDQpCi0gICAgewotICAgIH0KLQot
ICAgIEZsb2F0UXVhZChjb25zdCBGbG9hdFJlY3QmIGluUmVjdCkKLSAgICAgICAgOiBtX3AxKGlu
UmVjdC5sb2NhdGlvbigpKQotICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0Lnko
KSkKLSAgICAgICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCi0gICAgICAg
ICwgbV9wNChpblJlY3QueCgpLCBpblJlY3QubWF4WSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICBG
bG9hdFBvaW50IHAxKCkgY29uc3QgeyByZXR1cm4gbV9wMTsgfQotICAgIEZsb2F0UG9pbnQgcDIo
KSBjb25zdCB7IHJldHVybiBtX3AyOyB9Ci0gICAgRmxvYXRQb2ludCBwMygpIGNvbnN0IHsgcmV0
dXJuIG1fcDM7IH0KLSAgICBGbG9hdFBvaW50IHA0KCkgY29uc3QgeyByZXR1cm4gbV9wNDsgfQot
Ci0gICAgdm9pZCBzZXRQMShjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDEgPSBwOyB9Ci0gICAg
dm9pZCBzZXRQMihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDIgPSBwOyB9Ci0gICAgdm9pZCBz
ZXRQMyhjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDMgPSBwOyB9Ci0gICAgdm9pZCBzZXRQNChj
b25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcDQgPSBwOyB9Ci0KLSAgICAvLyBpc0VtcHR5IHRlc3Rz
IHRoYXQgdGhlIGJvdW5kaW5nIGJveCBpcyBlbXB0eS4gVGhpcyB3aWxsIG5vdCBpZGVudGlmeQot
ICAgIC8vICJzbGFudGVkIiBlbXB0eSBxdWFkcy4KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBib3VuZGluZ0JveCgpLmlzRW1wdHkoKTsgfQotCi0gICAgLy8gVGVzdHMgd2hldGhl
ciB0aGlzIHF1YWQgY2FuIGJlIGxvc3NsZXNzbHkgcmVwcmVzZW50ZWQgYnkgYSBGbG9hdFJlY3Qs
Ci0gICAgLy8gdGhhdCBpcywgaWYgdHdvIGVkZ2VzIGFyZSBwYXJhbGxlbCB0byB0aGUgeC1heGlz
IGFuZCB0aGUgb3RoZXIgdHdvCi0gICAgLy8gYXJlIHBhcmFsbGVsIHRvIHRoZSB5LWF4aXMuIElm
IHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSwgdGhlCi0gICAgLy8gY29ycmVzcG9uZGluZyBGbG9h
dFJlY3QgY2FuIGJlIHJldHJpZXZlZCB3aXRoIGJvdW5kaW5nQm94KCkuCi0gICAgYm9vbCBpc1Jl
Y3RpbGluZWFyKCkgY29uc3Q7Ci0KLSAgICAvLyBUZXN0cyB3aGV0aGVyIHRoZSBnaXZlbiBwb2lu
dCBpcyBpbnNpZGUsIG9yIG9uIGFuIGVkZ2Ugb3IgY29ybmVyIG9mIHRoaXMgcXVhZC4KLSAgICBi
b29sIGNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotCi0gICAgLy8gVGVz
dHMgd2hldGhlciB0aGUgZm91ciBjb3JuZXJzIG9mIG90aGVyIGFyZSBpbnNpZGUsIG9yIGNvaW5j
aWRlbnQgd2l0aCB0aGUgc2lkZXMgb2YgdGhpcyBxdWFkLgotICAgIC8vIE5vdGUgdGhhdCB0aGlz
IG9ubHkgd29ya3MgZm9yIGNvbnZleCBxdWFkcywgYnV0IHRoYXQgaW5jbHVkZXMgYWxsIHF1YWRz
IHRoYXQgb3JpZ2luYXRlCi0gICAgLy8gZnJvbSB0cmFuc2Zvcm1lZCByZWN0cy4KLSAgICBib29s
IGNvbnRhaW5zUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKLQotICAgIEZsb2F0UmVjdCBi
b3VuZGluZ0JveCgpIGNvbnN0OwotICAgIEludFJlY3QgZW5jbG9zaW5nQm91bmRpbmdCb3goKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3go
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotICAg
IHsKLSAgICAgICAgbV9wMSArPSBvZmZzZXQ7Ci0gICAgICAgIG1fcDIgKz0gb2Zmc2V0OwotICAg
ICAgICBtX3AzICs9IG9mZnNldDsKLSAgICAgICAgbV9wNCArPSBvZmZzZXQ7Ci0gICAgfQotCi0g
ICAgdm9pZCBtb3ZlKGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICB7Ci0gICAgICAgIG1fcDEubW92
ZShkeCwgZHkpOwotICAgICAgICBtX3AyLm1vdmUoZHgsIGR5KTsKLSAgICAgICAgbV9wMy5tb3Zl
KGR4LCBkeSk7Ci0gICAgICAgIG1fcDQubW92ZShkeCwgZHkpOwotICAgIH0KLQotICAgIHZvaWQg
c2NhbGUoZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIHsKLSAgICAgICAgbV9wMS5zY2FsZShkeCwg
ZHkpOwotICAgICAgICBtX3AyLnNjYWxlKGR4LCBkeSk7Ci0gICAgICAgIG1fcDMuc2NhbGUoZHgs
IGR5KTsKLSAgICAgICAgbV9wNC5zY2FsZShkeCwgZHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBGbG9hdFBvaW50IG1fcDE7Ci0gICAgRmxvYXRQb2ludCBtX3AyOwotICAgIEZsb2F0UG9pbnQg
bV9wMzsKLSAgICBGbG9hdFBvaW50IG1fcDQ7Ci19OwotCi1pbmxpbmUgRmxvYXRRdWFkJiBvcGVy
YXRvcis9KEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIGEubW92ZShi
KTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0UXVhZCYgb3BlcmF0b3ItPShGbG9h
dFF1YWQmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLm1vdmUoLWIud2lkdGgoKSwg
LWIuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQotewotICAgIHJldHVybiBh
LnAxKCkgPT0gYi5wMSgpICYmCi0gICAgICAgICAgIGEucDIoKSA9PSBiLnAyKCkgJiYgCi0gICAg
ICAgICAgIGEucDMoKSA9PSBiLnAzKCkgJiYKLSAgICAgICAgICAgYS5wNCgpID09IGIucDQoKTsK
LX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZs
b2F0UXVhZCYgYikKLXsKLSAgICByZXR1cm4gYS5wMSgpICE9IGIucDEoKSB8fAotICAgICAgICAg
ICBhLnAyKCkgIT0gYi5wMigpIHx8IAotICAgICAgICAgICBhLnAzKCkgIT0gYi5wMygpIHx8Ci0g
ICAgICAgICAgIGEucDQoKSAhPSBiLnA0KCk7Ci19Ci0KLX0gICAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0KLSNlbmRpZiAvLyBGbG9hdFF1YWRfaAotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1
IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBzdGQ6Om1heDsKLXVz
aW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRS
ZWN0KGNvbnN0IEludFJlY3QmIHIpIDogbV9sb2NhdGlvbihyLmxvY2F0aW9uKCkpLCBtX3NpemUo
ci5zaXplKCkpCi17Ci19Ci0KLUZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5hcnJvd1ByZWNpc2lvbihk
b3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKLXsKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoeCksIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoeSksIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGhlaWdodCkpOwotfQotCi1ib29sIEZsb2F0UmVjdDo6aW50ZXJzZWN0cyhjb25z
dCBGbG9hdFJlY3QmIG90aGVyKSBjb25zdAotewotICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBo
YW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCi0gICAgcmV0dXJuICFpc0Vt
cHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkg
JiYgb3RoZXIueCgpIDwgbWF4WCgpCi0gICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBv
dGhlci55KCkgPCBtYXhZKCk7Ci19Ci0KLWJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBG
bG9hdFJlY3QmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYm
IG1heFgoKSA+PSBvdGhlci5tYXhYKCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBt
YXhZKCkgPj0gb3RoZXIubWF4WSgpOwotfQotCi12b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0KGNv
bnN0IEZsb2F0UmVjdCYgb3RoZXIpCi17Ci0gICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVyLngo
KSk7Ci0gICAgZmxvYXQgdCA9IG1heCh5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9IG1p
bihtYXhYKCksIG90aGVyLm1heFgoKSk7Ci0gICAgZmxvYXQgYiA9IG1pbihtYXhZKCksIG90aGVy
Lm1heFkoKSk7Ci0KLSAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5v
bi1pbnRlcnNlY3RpbmcgY2FzZXMuCi0gICAgaWYgKGwgPj0gciB8fCB0ID49IGIpIHsKLSAgICAg
ICAgbCA9IDA7Ci0gICAgICAgIHQgPSAwOwotICAgICAgICByID0gMDsKLSAgICAgICAgYiA9IDA7
Ci0gICAgfQotCi0gICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGwsIHQsIHIsIGIpOwot
fQotCi12b2lkIEZsb2F0UmVjdDo6dW5pdGUoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKLXsKLSAg
ICAvLyBIYW5kbGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KLSAgICBpZiAob3RoZXIuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICAq
dGhpcyA9IG90aGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmxvYXQgbCA9IG1p
bih4KCksIG90aGVyLngoKSk7Ci0gICAgZmxvYXQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0g
ICAgZmxvYXQgciA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7Ci0gICAgZmxvYXQgYiA9IG1h
eChtYXhZKCksIG90aGVyLm1heFkoKSk7Ci0KLSAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRn
ZXMobCwgdCwgciwgYik7Ci19Ci0KLXZvaWQgRmxvYXRSZWN0Ojp1bml0ZUlmTm9uWmVybyhjb25z
dCBGbG9hdFJlY3QmIG90aGVyKQotewotICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjaWFsIGNhc2Vz
IGZpcnN0LgotICAgIGlmICghb3RoZXIud2lkdGgoKSAmJiAhb3RoZXIuaGVpZ2h0KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXdpZHRoKCkgJiYgIWhlaWdodCgpKSB7Ci0gICAgICAgICp0
aGlzID0gb3RoZXI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZWZ0ID0g
bWluKHgoKSwgb3RoZXIueCgpKTsKLSAgICBmbG9hdCB0b3AgPSBtaW4oeSgpLCBvdGhlci55KCkp
OwotICAgIGZsb2F0IHJpZ2h0ID0gbWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKLSAgICBmbG9h
dCBib3R0b20gPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOwotCi0gICAgc2V0TG9jYXRpb25B
bmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci19Ci0KLXZvaWQgRmxv
YXRSZWN0OjpzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCi17Ci0gICAgbV9sb2NhdGlvbi5zZXRY
KHgoKSAqIHN4KTsKLSAgICBtX2xvY2F0aW9uLnNldFkoeSgpICogc3kpOwotICAgIG1fc2l6ZS5z
ZXRXaWR0aCh3aWR0aCgpICogc3gpOwotICAgIG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KCkgKiBz
eSk7Ci19Ci0KLXZvaWQgRmxvYXRSZWN0OjpmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEpCi17Ci0gICAgZmxvYXQgbGVmdCA9IG1pbihwMC54KCks
IHAxLngoKSk7Ci0gICAgZmxvYXQgdG9wID0gbWluKHAwLnkoKSwgcDEueSgpKTsKLSAgICBmbG9h
dCByaWdodCA9IG1heChwMC54KCksIHAxLngoKSk7Ci0gICAgZmxvYXQgYm90dG9tID0gbWF4KHAw
LnkoKSwgcDEueSgpKTsKLQotICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0
b3AsIHJpZ2h0LCBib3R0b20pOwotfQotCi1uYW1lc3BhY2UgewotLy8gSGVscGVycyBmb3IgMy0g
YW5kIDQtd2F5IG1heCBhbmQgbWluLgotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLVQgbWluMyhj
b25zdCBUJiB2MSwgY29uc3QgVCYgdjIsIGNvbnN0IFQmIHYzKQotewotICAgIHJldHVybiBtaW4o
bWluKHYxLCB2MiksIHYzKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1UIG1heDMoY29u
c3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MykKLXsKLSAgICByZXR1cm4gbWF4KG1h
eCh2MSwgdjIpLCB2Myk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCBtaW40KGNvbnN0
IFQmIHYxLCBjb25zdCBUJiB2MiwgY29uc3QgVCYgdjMsIGNvbnN0IFQmIHY0KQotewotICAgIHJl
dHVybiBtaW4obWluKHYxLCB2MiksIG1pbih2MywgdjQpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1UIG1heDQoY29uc3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MywgY29u
c3QgVCYgdjQpCi17Ci0gICAgcmV0dXJuIG1heChtYXgodjEsIHYyKSwgbWF4KHYzLCB2NCkpOwot
fQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBGbG9hdFJlY3Q6OmZpdFRvUG9p
bnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxv
YXRQb2ludCYgcDIpCi17Ci0gICAgZmxvYXQgbGVmdCA9IG1pbjMocDAueCgpLCBwMS54KCksIHAy
LngoKSk7Ci0gICAgZmxvYXQgdG9wID0gbWluMyhwMC55KCksIHAxLnkoKSwgcDIueSgpKTsKLSAg
ICBmbG9hdCByaWdodCA9IG1heDMocDAueCgpLCBwMS54KCksIHAyLngoKSk7Ci0gICAgZmxvYXQg
Ym90dG9tID0gbWF4MyhwMC55KCksIHAxLnkoKSwgcDIueSgpKTsKLQotICAgIHNldExvY2F0aW9u
QW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotfQotCi12b2lkIEZs
b2F0UmVjdDo6Zml0VG9Qb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMpCi17Ci0g
ICAgZmxvYXQgbGVmdCA9IG1pbjQocDAueCgpLCBwMS54KCksIHAyLngoKSwgcDMueCgpKTsKLSAg
ICBmbG9hdCB0b3AgPSBtaW40KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7Ci0gICAg
ZmxvYXQgcmlnaHQgPSBtYXg0KHAwLngoKSwgcDEueCgpLCBwMi54KCksIHAzLngoKSk7Ci0gICAg
ZmxvYXQgYm90dG9tID0gbWF4NChwMC55KCksIHAxLnkoKSwgcDIueSgpLCBwMy55KCkpOwotCi0g
ICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2VzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7
Ci19Ci0KLUludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgZmxvYXQgbGVmdCA9IGZsb29yZihyZWN0LngoKSk7Ci0gICAgZmxvYXQgdG9wID0gZmxv
b3JmKHJlY3QueSgpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4WCgpKSAtIGxl
ZnQ7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkpIC0gdG9wOwotICAgIAot
ICAgIHJldHVybiBJbnRSZWN0KGNsYW1wVG9JbnRlZ2VyKGxlZnQpLCBjbGFtcFRvSW50ZWdlcih0
b3ApLCAKLSAgICAgICAgICAgICAgICAgICBjbGFtcFRvSW50ZWdlcih3aWR0aCksIGNsYW1wVG9J
bnRlZ2VyKGhlaWdodCkpOwotfQotCi1GbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
LXsKLSAgICBpZiAoc3JjUmVjdC53aWR0aCgpID09IDAgfHwgc3JjUmVjdC5oZWlnaHQoKSA9PSAw
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBmbG9hdCB3aWR0aFNjYWxlID0g
ZGVzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKLSAgICBmbG9hdCBoZWlnaHRTY2Fs
ZSA9IGRlc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxv
YXRSZWN0KGRlc3RSZWN0LngoKSArIChyLngoKSAtIHNyY1JlY3QueCgpKSAqIHdpZHRoU2NhbGUs
Ci0gICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC55KCkgKyAoci55KCkgLSBzcmNSZWN0Lnko
KSkgKiBoZWlnaHRTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSAqIHdpZHRo
U2NhbGUsIHIuaGVpZ2h0KCkgKiBoZWlnaHRTY2FsZSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRmxvYXRS
ZWN0X2gKLSNkZWZpbmUgRmxvYXRSZWN0X2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQot
I2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQotdHlwZWRlZiBzdHJ1Y3Qg
Q0dSZWN0IENHUmVjdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0o
Q0hST01JVU0pICYmIE9TKERBUldJTikpCi0jaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMKLXR5cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7Ci0jZWxzZQot
dHlwZWRlZiBzdHJ1Y3QgX05TUmVjdCBOU1JlY3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oUVQpCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFSZWN0RjsKLVFUX0VORF9OQU1F
U1BBQ0UKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQotY2xhc3Mgd3hS
ZWN0MkREb3VibGU7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEhBSUtVKQotY2xhc3MgQlJlY3Q7
Ci0jZW5kaWYKLQotI2lmIFVTRShTS0lBKQotc3RydWN0IFNrUmVjdDsKLSNlbmRpZgotCi0jaWYg
VVNFKENBSVJPKQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZSBjYWlyb19yZWN0YW5n
bGVfdDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShPUEVO
VkcpCi1jbGFzcyBWR1JlY3Q7Ci0jZW5kaWYKLQotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFBv
aW50OwotCi1jbGFzcyBGbG9hdFJlY3QgewotcHVibGljOgotICAgIEZsb2F0UmVjdCgpIHsgfQot
ICAgIEZsb2F0UmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBzaXplKQotICAgICAgICA6IG1fbG9jYXRpb24obG9jYXRpb24pLCBtX3NpemUoc2l6ZSkgeyB9
Ci0gICAgRmxvYXRSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCi0gICAgICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50KHgsIHkpKSwgbV9zaXplKEZsb2F0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkgeyB9Ci0gICAgRmxvYXRSZWN0KGNvbnN0IEludFJlY3QmKTsK
LQotICAgIHN0YXRpYyBGbG9hdFJlY3QgbmFycm93UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUg
eSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KTsKLQotICAgIEZsb2F0UG9pbnQgbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgRmxvYXRTaXplIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgbG9jYXRpb24pIHsgbV9sb2NhdGlvbiA9IGxvY2F0aW9uOyB9Ci0gICAgdm9pZCBz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9Ci0KLSAgICBm
bG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KLSAgICBmbG9hdCB5KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KLSAgICBmbG9hdCBtYXhYKCkgY29uc3Qg
eyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQotICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KLSAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KLQotICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4
KTsgfQotICAgIHZvaWQgc2V0WShmbG9hdCB5KSB7IG1fbG9jYXRpb24uc2V0WSh5KTsgfQotICAg
IHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQot
ICAgIHZvaWQgc2V0SGVpZ2h0KGZsb2F0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdo
dCk7IH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5
KCk7IH0KLQotICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2lu
dCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQotCi0gICAgdm9pZCBt
b3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0YTsgfSAKLSAg
ICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBkZWx0YSkgeyBtX2xvY2F0aW9uLm1vdmUo
ZGVsdGEueCgpLCBkZWx0YS55KCkpOyB9Ci0gICAgdm9pZCBtb3ZlKGZsb2F0IGR4LCBmbG9hdCBk
eSkgeyBtX2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfQotCi0gICAgdm9pZCBleHBhbmQoY29uc3Qg
RmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSArPSBzaXplOyB9Ci0gICAgdm9pZCBleHBhbmQoZmxv
YXQgZHcsIGZsb2F0IGRoKSB7IG1fc2l6ZS5leHBhbmQoZHcsIGRoKTsgfQotICAgIHZvaWQgY29u
dHJhY3QoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXplOyB9Ci0gICAgdm9p
ZCBjb250cmFjdChmbG9hdCBkdywgZmxvYXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7
IH0KLQotICAgIHZvaWQgc2hpZnRYRWRnZVRvKGZsb2F0IGVkZ2UpCi0gICAgewotICAgICAgICBm
bG9hdCBkZWx0YSA9IGVkZ2UgLSB4KCk7Ci0gICAgICAgIHNldFgoZWRnZSk7Ci0gICAgICAgIHNl
dFdpZHRoKHN0ZDo6bWF4KDAuMGYsIHdpZHRoKCkgLSBkZWx0YSkpOwotICAgIH0KLSAgICB2b2lk
IHNoaWZ0TWF4WEVkZ2VUbyhmbG9hdCBlZGdlKQotICAgIHsKLSAgICAgICAgZmxvYXQgZGVsdGEg
PSBlZGdlIC0gbWF4WCgpOwotICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLjBmLCB3aWR0aCgp
ICsgZGVsdGEpKTsKLSAgICB9Ci0gICAgdm9pZCBzaGlmdFlFZGdlVG8oZmxvYXQgZWRnZSkKLSAg
ICB7Ci0gICAgICAgIGZsb2F0IGRlbHRhID0gZWRnZSAtIHkoKTsKLSAgICAgICAgc2V0WShlZGdl
KTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6bWF4KDAuMGYsIGhlaWdodCgpIC0gZGVsdGEpKTsK
LSAgICB9Ci0gICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oZmxvYXQgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIGZsb2F0IGRlbHRhID0gZWRnZSAtIG1heFkoKTsKLSAgICAgICAgc2V0SGVpZ2h0KHN0ZDo6
bWF4KDAuMGYsIGhlaWdodCgpICsgZGVsdGEpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IG1p
blhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfSAvLyB0eXBpY2FsbHkg
dG9wTGVmdAotICAgIEZsb2F0UG9pbnQgbWF4WE1pbllDb3JuZXIoKSBjb25zdCB7IHJldHVybiBG
bG9hdFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgp
KTsgfSAvLyB0eXBpY2FsbHkgdG9wUmlnaHQKLSAgICBGbG9hdFBvaW50IG1pblhNYXhZQ29ybmVy
KCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2ludChtX2xvY2F0aW9uLngoKSwgbV9sb2NhdGlvbi55
KCkgKyBtX3NpemUuaGVpZ2h0KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21MZWZ0Ci0gICAgRmxv
YXRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV9sb2Nh
dGlvbi54KCkgKyBtX3NpemUud2lkdGgoKSwgbV9sb2NhdGlvbi55KCkgKyBtX3NpemUuaGVpZ2h0
KCkpOyB9IC8vIHR5cGljYWxseSBib3R0b21SaWdodAotCi0gICAgYm9vbCBpbnRlcnNlY3RzKGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRSZWN0
JikgY29uc3Q7Ci0KLSAgICB2b2lkIGludGVyc2VjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2
b2lkIHVuaXRlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgdW5pdGVJZk5vblplcm8oY29u
c3QgRmxvYXRSZWN0Jik7Ci0KLSAgICAvLyBOb3RlLCB0aGlzIGRvZXNuJ3QgbWF0Y2ggd2hhdCBJ
bnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQgdmVyc2lvbgotICAgIC8v
IGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgxIHJlY3QsIGJ1dCB0aGF0
IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KLSAgICBib29sIGNvbnRhaW5zKGZsb2F0
IHB4LCBmbG9hdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9
IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9Ci0gICAgYm9vbCBjb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQu
eCgpLCBwb2ludC55KCkpOyB9Ci0KLSAgICB2b2lkIGluZmxhdGVYKGZsb2F0IGR4KSB7Ci0gICAg
ICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKLSAgICAgICAgbV9zaXpl
LnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7Ci0gICAgfQotICAgIHZvaWQgaW5m
bGF0ZVkoZmxvYXQgZHkpIHsKLSAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1fbG9jYXRpb24ueSgp
IC0gZHkpOwotICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSArIGR5ICsg
ZHkpOwotICAgIH0KLSAgICB2b2lkIGluZmxhdGUoZmxvYXQgZCkgeyBpbmZsYXRlWChkKTsgaW5m
bGF0ZVkoZCk7IH0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KLSAg
ICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSk7Ci0KLSAgICBGbG9hdFJlY3QgdHJhbnNw
b3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9sb2NhdGlvbi50cmFuc3Bvc2Vk
UG9pbnQoKSwgbV9zaXplLnRyYW5zcG9zZWRTaXplKCkpOyB9Ci0KLSAgICAvLyBSZS1pbml0aWFs
aXplcyB0aGlzIHJlY3RhbmdsZSB0byBmaXQgdGhlIHNldHMgb2YgcGFzc2VkIHBvaW50cy4KLSAg
ICB2b2lkIGZpdFRvUG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSk7Ci0gICAgdm9pZCBmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKTsKLSAgICB2b2lkIGZpdFRvUG9p
bnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxv
YXRQb2ludCYgcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAzKTsKLQotI2lmIFVTRShDRykgfHwgVVNF
KFNLSUFfT05fTUFDX0NIUk9NSVVNKQotICAgIEZsb2F0UmVjdChjb25zdCBDR1JlY3QmKTsKLSAg
ICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBc
Ci0gICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSAgICBGbG9h
dFJlY3QoY29uc3QgTlNSZWN0Jik7Ci0gICAgb3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgIEZsb2F0UmVjdChjb25zdCBRUmVjdEYmKTsKLSAg
ICBvcGVyYXRvciBRUmVjdEYoKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgbm9ybWFsaXplZCgpIGNv
bnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXWCkgJiYgVVNFKFdYR0MpCi0gICAgRmxvYXRS
ZWN0KGNvbnN0IHd4UmVjdDJERG91YmxlJik7Ci0gICAgb3BlcmF0b3Igd3hSZWN0MkREb3VibGUo
KSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSEFJS1UpCi0gICAgRmxvYXRSZWN0KGNv
bnN0IEJSZWN0Jik7Ci0gICAgb3BlcmF0b3IgQlJlY3QoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYg
VVNFKFNLSUEpCi0gICAgRmxvYXRSZWN0KGNvbnN0IFNrUmVjdCYpOwotICAgIG9wZXJhdG9yIFNr
UmVjdCgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShPUEVOVkcpCi0gICAgb3BlcmF0
b3IgVkdSZWN0KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBGbG9hdFJl
Y3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3QmKTsKLSAgICBvcGVyYXRvciBjYWlyb19yZWN0YW5n
bGVfdCgpIGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgRmxvYXRQb2ludCBtX2xvY2F0
aW9uOwotICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci0KLSAgICB2b2lkIHNldExvY2F0aW9uQW5kU2l6
ZUZyb21FZGdlcyhmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0
b20pCi0gICAgewotICAgICAgICBtX2xvY2F0aW9uLnNldChsZWZ0LCB0b3ApOwotICAgICAgICBt
X3NpemUuc2V0V2lkdGgocmlnaHQgLSBsZWZ0KTsKLSAgICAgICAgbV9zaXplLnNldEhlaWdodChi
b3R0b20gLSB0b3ApOwotICAgIH0KLX07Ci0KLWlubGluZSBGbG9hdFJlY3QgaW50ZXJzZWN0aW9u
KGNvbnN0IEZsb2F0UmVjdCYgYSwgY29uc3QgRmxvYXRSZWN0JiBiKQotewotICAgIEZsb2F0UmVj
dCBjID0gYTsKLSAgICBjLmludGVyc2VjdChiKTsKLSAgICByZXR1cm4gYzsKLX0KLQotaW5saW5l
IEZsb2F0UmVjdCB1bmlvblJlY3QoY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3Qm
IGIpCi17Ci0gICAgRmxvYXRSZWN0IGMgPSBhOwotICAgIGMudW5pdGUoYik7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWlubGluZSBGbG9hdFJlY3QmIG9wZXJhdG9yKz0oRmxvYXRSZWN0JiBhLCBjb25z
dCBGbG9hdFJlY3QmIGIpCi17Ci0gICAgYS5tb3ZlKGIueCgpLCBiLnkoKSk7Ci0gICAgYS5zZXRX
aWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkg
KyBiLmhlaWdodCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0UmVjdCBvcGVy
YXRvcisoY29uc3QgRmxvYXRSZWN0JiBhLCBjb25zdCBGbG9hdFJlY3QmIGIpCi17Ci0gICAgRmxv
YXRSZWN0IGMgPSBhOwotICAgIGMgKz0gYjsKLSAgICByZXR1cm4gYzsKLX0KLQotaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFJlY3QmIGEsIGNvbnN0IEZsb2F0UmVjdCYgYikKLXsK
LSAgICByZXR1cm4gYS5sb2NhdGlvbigpID09IGIubG9jYXRpb24oKSAmJiBhLnNpemUoKSA9PSBi
LnNpemUoKTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFJlY3QmIGEs
IGNvbnN0IEZsb2F0UmVjdCYgYikKLXsKLSAgICByZXR1cm4gYS5sb2NhdGlvbigpICE9IGIubG9j
YXRpb24oKSB8fCBhLnNpemUoKSAhPSBiLnNpemUoKTsKLX0KLQotSW50UmVjdCBlbmNsb3NpbmdJ
bnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0vLyBNYXAgcmVjdCByIGZyb20gc3JjUmVjdCB0
byBhbiBlcXVpdmFsZW50IHJlY3QgaW4gZGVzdFJlY3QuCi1GbG9hdFJlY3QgbWFwUmVjdChjb25z
dCBGbG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCk7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1
IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSA6IG1f
d2lkdGgoc2l6ZS53aWR0aCgpKSwgbV9oZWlnaHQoc2l6ZS5oZWlnaHQoKSkKLXsKLX0KLQotZmxv
YXQgRmxvYXRTaXplOjpkaWFnb25hbExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNxcnRm
KGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpKTsKLX0KLQotRmxvYXRTaXplIEZsb2F0U2l6ZTo6bmFy
cm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKLXsKLSAgICByZXR1cm4g
RmxvYXRTaXplKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQod2lkdGgpLCBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGhlaWdodCkpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMDggRXJpYyBTZWlkZWwg
PGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZsb2F0U2l6ZV9oCi0jZGVmaW5lIEZs
b2F0U2l6ZV9oCi0KLSNpbmNsdWRlICJJbnRQb2ludC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0KLSNpZiBVU0UoQ0cpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwg
VVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQotdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIENHU2l6ZTsK
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikpIHx8IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKLSNpZmRlZiBOU0dFT01F
VFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwotdHlwZWRlZiBzdHJ1Y3QgQ0dTaXpl
IE5TU2l6ZTsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfTlNTaXplIE5TU2l6ZTsKLSNlbmRpZgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLQotY2xhc3Mg
RmxvYXRTaXplIHsKLXB1YmxpYzoKLSAgICBGbG9hdFNpemUoKSA6IG1fd2lkdGgoMCksIG1faGVp
Z2h0KDApIHsgfQotICAgIEZsb2F0U2l6ZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IG1f
d2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWlnaHQpIHsgfQotICAgIEZsb2F0U2l6ZShjb25zdCBJ
bnRTaXplJik7Ci0KLSAgICBzdGF0aWMgRmxvYXRTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUg
d2lkdGgsIGRvdWJsZSBoZWlnaHQpOwotCi0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9Ci0gICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7
IH0KLQotICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9
Ci0gICAgdm9pZCBzZXRIZWlnaHQoZmxvYXQgaGVpZ2h0KSB7IG1faGVpZ2h0ID0gaGVpZ2h0OyB9
Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoIDw9IDAgfHwgbV9o
ZWlnaHQgPD0gMDsgfQotCi0gICAgZmxvYXQgYXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoIC8gbV9oZWlnaHQ7IH0KLQotICAgIHZvaWQgZXhwYW5kKGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpCi0gICAgewotICAgICAgICBtX3dpZHRoICs9IHdpZHRoOwotICAgICAgICBtX2hl
aWdodCArPSBoZWlnaHQ7Ci0gICAgfQotCi0gICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxl
KHMsIHMpOyB9Ci0KLSAgICB2b2lkIHNjYWxlKGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKQot
ICAgIHsKLSAgICAgICAgbV93aWR0aCAqPSBzY2FsZVg7Ci0gICAgICAgIG1faGVpZ2h0ICo9IHNj
YWxlWTsKLSAgICB9Ci0KLSAgICBGbG9hdFNpemUgZXhwYW5kZWRUbyhjb25zdCBGbG9hdFNpemUm
IG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShtX3dpZHRoID4g
b3RoZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAotICAgICAgICAgICAgbV9o
ZWlnaHQgPiBvdGhlci5tX2hlaWdodCA/IG1faGVpZ2h0IDogb3RoZXIubV9oZWlnaHQpOwotICAg
IH0KLQotICAgIEZsb2F0U2l6ZSBzaHJ1bmtUbyhjb25zdCBGbG9hdFNpemUmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICByZXR1cm4gRmxvYXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRo
ID8gbV93aWR0aCA6IG90aGVyLm1fd2lkdGgsCi0gICAgICAgICAgIG1faGVpZ2h0IDwgb3RoZXIu
bV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBmbG9h
dCBkaWFnb25hbExlbmd0aCgpIGNvbnN0OwotICAgIGZsb2F0IGRpYWdvbmFsTGVuZ3RoU3F1YXJl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV93aWR0aCAqIG1fd2lkdGggKyBtX2hl
aWdodCAqIG1faGVpZ2h0OwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gRmxvYXRTaXplKG1faGVpZ2h0LCBtX3dpZHRo
KTsKLSAgICB9Ci0KLSNpZiBVU0UoQ0cpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkg
fHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQotICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25z
dCBDR1NpemUmKTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kK
LSAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMp
KSBcCi0gICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBM
QVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQotICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBO
U1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5Ci0g
ICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBmbG9h
dCBtX3dpZHRoLCBtX2hlaWdodDsKLX07Ci0KLWlubGluZSBGbG9hdFNpemUmIG9wZXJhdG9yKz0o
RmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgYS5zZXRXaWR0aChhLndp
ZHRoKCkgKyBiLndpZHRoKCkpOwotICAgIGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdo
dCgpKTsKLSAgICByZXR1cm4gYTsKLX0KLQotaW5saW5lIEZsb2F0U2l6ZSYgb3BlcmF0b3ItPShG
bG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICBhLnNldFdpZHRoKGEud2lk
dGgoKSAtIGIud2lkdGgoKSk7Ci0gICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0
KCkpOwotICAgIHJldHVybiBhOwotfQotCi1pbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yKyhjb25z
dCBGbG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRT
aXplKGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOwotfQot
Ci1pbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yLShjb25zdCBGbG9hdFNpemUmIGEsIGNvbnN0IEZs
b2F0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKGEud2lkdGgoKSAtIGIud2lkdGgo
KSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOwotfQotCi1pbmxpbmUgRmxvYXRTaXplIG9wZXJh
dG9yLShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSgtc2l6
ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRmxvYXRTaXplJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCi17Ci0gICAgcmV0dXJuIGEu
d2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQoKSA9PSBiLmhlaWdodCgpOwotfQotCi1p
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXpl
JiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkg
IT0gYi5oZWlnaHQoKTsKLX0KLQotaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3Qg
RmxvYXRTaXplJiBwKQotewotICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocm91
bmRmKHAud2lkdGgoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLmhlaWdodCgpKSkpOwot
fQotCi1pbmxpbmUgSW50U2l6ZSBleHBhbmRlZEludFNpemUoY29uc3QgRmxvYXRTaXplJiBwKQot
ewotICAgIHJldHVybiBJbnRTaXplKGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHAud2lkdGgoKSkpLCBj
bGFtcFRvSW50ZWdlcihjZWlsZihwLmhlaWdodCgpKSkpOwotfQotCi1pbmxpbmUgSW50UG9pbnQg
Zmxvb3JlZEludFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgcCkKLXsKLSAgICByZXR1cm4gSW50UG9p
bnQoc3RhdGljX2Nhc3Q8aW50PihwLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAuaGVpZ2h0
KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRmxvYXRTaXpl
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5z
Y29kZXIuaCIKICNpZiBQTEFURk9STShRVCkgJiYgSEFWRShRUkFXRk9OVCkKQEAgLTEzOCw3ICsx
MzgsNyBAQCB2b2lkIEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3RvCiAgICAgbV9m
b250TGlzdC0+aW52YWxpZGF0ZShmb250U2VsZWN0b3IpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJh
d1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIC8v
IERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0
IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLgogICAgIGlmIChsb2FkaW5nQ3VzdG9tRm9u
dHMoKSkKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29uCiAgICAgcmV0dXJuIGRyYXdDb21wbGV4VGV4dChjb250ZXh0LCBydW4sIHBvaW50
LCBmcm9tLCB0byk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGlmIChsb2FkaW5n
Q3VzdG9tRm9udHMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyLDcgKzIwMiw3IEBAIGZsb2F0
IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgaW4KICAgICByZXR1cm4gZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KHJ1bik7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0
Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
aCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICB0byA9ICh0byA9PSAtMSA/
IHJ1bi5sZW5ndGgoKSA6IHRvKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgR3JhcGhpY3NQb2ludDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEZvbnREYXRhOwog
Y2xhc3MgRm9udE1ldHJpY3M7CiBjbGFzcyBGb250UGxhdGZvcm1EYXRhOwpAQCAtOTMsMTQgKzkz
LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlKFBhc3NSZWZQdHI8Rm9udFNlbGVjdG9y
PikgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29u
c3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgdm9pZCBkcmF3VGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9t
ID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywg
Y29uc3QgR3JhcGhpY3NQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0Owog
CiAgICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAg
ICAgZmxvYXQgd2lkdGgoY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5n
JiBnbHlwaE5hbWUpIGNvbnN0OwogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRl
eHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7
Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGgsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0Owor
ICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgY29u
c3QgR3JhcGhpY3NQb2ludCYsIGludCBoLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKIAogICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlw
dGlvbi5zbWFsbENhcHMoKTsgfQogCkBAIC0xNjEsMTQgKzE2MSwxNCBAQCBwcml2YXRlOgogCiAg
ICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KICAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9t
LCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0
RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZm
ZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owor
ICAgIHZvaWQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
aW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJv
bSwgaW50IHRvLCBjb25zdCBHcmFwaGljc1BvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3R2x5
cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVy
JiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogICAg
IGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBHbHlwaEJ1ZmZl
ciosIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEds
eXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3Q7CiAKICAgICBib29sIGdldEVtcGhhc2lzTWFya0dseXBoRGF0YShjb25zdCBB
dG9taWNTdHJpbmcmLCBHbHlwaERhdGEmKSBjb25zdDsKIApAQCAtMTc5LDExICsxNzksMTEgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2Uu
CiAgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5v
dCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAg
IHZvaWQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBk
cmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBi
b29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCBzZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBp
bnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CiAKICAgICBmcmllbmQgc3RydWN0IFdpZHRo
SXRlcmF0b3I7CiAgICAgZnJpZW5kIGNsYXNzIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBh
dGguY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYXN0UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIK
ICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
QEAgLTM1MSw3ICszNTEsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNp
bXBsCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi12b2lkIEZvbnQ6OmRyYXdTaW1w
bGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6
ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
ewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9u
dCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAt
MzYxLDExICszNjEsMTEgQEAgdm9pZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRl
eAogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50LnkoKSk7CisgICAgR3JhcGhpY3NQ
b2ludCBzdGFydFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIo
Y29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCk7CiB9CiAKLXZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
cyk7CkBAIC0zNzMsMTUgKzM3MywxNSBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4CiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFy
aywgRmxvYXRQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7Cisg
ICAgZHJhd0VtcGhhc2lzTWFya3MoY29udGV4dCwgcnVuLCBnbHlwaEJ1ZmZlciwgbWFyaywgR3Jh
cGhpY3NQb2ludChwb2ludC54KCkgKyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7CiB9CiAK
LXZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7ICAgCiAg
ICAgLy8gRHJhdyBlYWNoIGNvbnRpZ3VvdXMgcnVuIG9mIGdseXBocyB0aGF0IHVzZSB0aGUgc2Ft
ZSBmb250IGRhdGEuCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhC
dWZmZXIuZm9udERhdGFBdCgwKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIu
b2Zmc2V0QXQoMCk7Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50KTsKKyAgICBHcmFw
aGljc1NpemUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQoMCk7CisgICAgR3JhcGhpY3NQ
b2ludCBzdGFydFBvaW50KHBvaW50KTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgp
OwogICAgIGludCBsYXN0RnJvbSA9IDA7CiAgICAgaW50IG5leHRHbHlwaCA9IDA7CkBAIC0zOTAs
NyArMzkwLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZQogI2Vu
ZGlmCiAgICAgd2hpbGUgKG5leHRHbHlwaCA8IGdseXBoQnVmZmVyLnNpemUoKSkgewogICAgICAg
ICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERh
dGFBdChuZXh0R2x5cGgpOwotICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVm
ZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBuZXh0T2Zmc2V0
ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQobmV4dEdseXBoKTsKIAogICAgICAgICBpZiAobmV4dEZv
bnREYXRhICE9IGZvbnREYXRhIHx8IG5leHRPZmZzZXQgIT0gb2Zmc2V0KSB7CiAjaWYgRU5BQkxF
KFNWR19GT05UUykKQEAgLTQyMCw3ICs0MjAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaEJ1ZmZl
cihHcmFwaGljc0NvbnRlCiBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlw
aChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIEdseXBoIGdseXBoKQogewogICAgIGlm
IChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5
cGgpOworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRzID0gZm9udERhdGEtPmJvdW5kc0Zvckds
eXBoKGdseXBoKTsKICAgICAgICAgcmV0dXJuIGJvdW5kcy54KCkgKyBib3VuZHMud2lkdGgoKSAv
IDI7CiAgICAgfQogICAgIC8vIEZJWE1FOiBVc2UgZ2x5cGggYm91bmRzIG9uY2UgdGhleSBtYWtl
IHNlbnNlIGZvciB2ZXJ0aWNhbCBmb250cy4KQEAgLTQzMiw3ICs0MzIsNyBAQCBpbmxpbmUgc3Rh
dGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwCiAgICAgcmV0dXJuIG9mZnNldFRvTWlkZGxl
T2ZHbHlwaChnbHlwaEJ1ZmZlci5mb250RGF0YUF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkp
KTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAog
ewogICAgIEdseXBoRGF0YSBtYXJrR2x5cGhEYXRhOwogICAgIGlmICghZ2V0RW1waGFzaXNNYXJr
R2x5cGhEYXRhKG1hcmssIG1hcmtHbHlwaERhdGEpKQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQg
Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb24KICAgICBHbHlwaCBzcGFjZUdseXBo
ID0gbWFya0ZvbnREYXRhLT5zcGFjZUdseXBoKCk7CiAKICAgICBmbG9hdCBtaWRkbGVPZkxhc3RH
bHlwaCA9IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIDApOwotICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9m
ZnNldFRvTWlkZGxlT2ZHbHlwaChtYXJrRm9udERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7
CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEds
eXBoIC0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9p
bnQueSgpKTsKIAogICAgIEdseXBoQnVmZmVyIG1hcmtCdWZmZXI7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgKyAxIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpIHsKQEAgLTQ3Niw3ICs0NzYsNyBA
QCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zCiAgICAgcmV0dXJuIGl0
Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGlu
dCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIFdpZHRoSXRl
cmF0b3IgaXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZhbmNlKGZyb20pOwpAQCAtNDg4LDEwICs0
ODgsMTAgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZQogICAgIGlm
IChydW4ucnRsKCkpIHsKICAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwogICAgICAg
ICBmbG9hdCB0b3RhbFdpZHRoID0gaXQubV9ydW5XaWR0aFNvRmFyOwotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBv
aW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBm
bG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKKyAgICAgICAg
cmV0dXJuIEdyYXBoaWNzUmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVy
V2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYmVmb3Jl
V2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgaCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgYmVmb3Jl
V2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyBhZnRlcldpZHRoKSAtIGZsb29y
Zihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCksIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3Qo
Zmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQu
eCgpICsgYWZ0ZXJXaWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsK
IH0KIAogaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1h
Z2UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdlbmVyYXRlZEltYWdlLmgiCiAKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCkBAIC0zNCwyNCAr
MzQsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcCkKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwogICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3Np
dGVPcCk7CiAgICAgY29udGV4dC0+Y2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LT50cmFuc2xh
dGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKICAgICBpZiAoZHN0UmVjdC5zaXplKCkgIT0g
c3JjUmVjdC5zaXplKCkpCi0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0
LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0Lmhl
aWdodCgpKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShkc3RSZWN0Lndp
ZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdo
dCgpKSk7CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1zcmNSZWN0LngoKSwgLXNyY1JlY3QueSgp
KTsKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX3NpemUp
LCAqbV9nZW5lcmF0b3IuZ2V0KCkpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVj
dChHcmFwaGljc1BvaW50KCksIG1fc2l6ZSksICptX2dlbmVyYXRvci5nZXQoKSk7CiB9CiAKLXZv
aWQgR2VuZXJhdGVkSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHZW5lcmF0ZWRJ
bWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgLy8gQWxsb3cgdGhl
IGdlbmVyYXRvciB0byBwcm92aWRlIHZpc3VhbGx5LWVxdWl2YWxlbnQgdGlsaW5nIHBhcmFtZXRl
cnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KICAgICBJbnRTaXplIGFkanVzdGVkU2l6ZSA9IG1f
c2l6ZTsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBHcmFw
aGljc1JlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKICAgICBtX2dlbmVyYXRvci0+YWRq
dXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVkU3JjUmVj
dCk7CiAKICAgICAvLyBDcmVhdGUgYSBCaXRtYXBJbWFnZSBhbmQgY2FsbCBkcmF3UGF0dGVybiBv
biBpdC4KQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBHZW5lcmF0ZWRJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpYwogCiAgICAgLy8gRmlsbCB3aXRoIHRoZSBncmFkaWVudC4KICAgICBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgZ3Jh
cGhpY3NDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhZGp1c3RlZFNp
emUpLCAqbV9nZW5lcmF0b3IuZ2V0KCkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3Qo
R3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgYWRqdXN0ZWRTaXplKSwgKm1fZ2VuZXJhdG9y
LmdldCgpKTsKIAogICAgIC8vIFRpbGUgdGhlIGltYWdlIGJ1ZmZlciBpbnRvIHRoZSBjb250ZXh0
LgogICAgIGltYWdlQnVmZmVyLT5kcmF3UGF0dGVybihjb250ZXh0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBk
ZXN0UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRlZEltYWdlLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOSAr
NTcsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGRlc3RSZWN0KTsKICAgICAKICAgICBHZW5lcmF0ZWRJbWFnZShQYXNzUmVmUHRyPEdl
bmVyYXRvcj4gZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICA6IG1fZ2Vu
ZXJhdG9yKGdlbmVyYXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dlbmVyYXRvci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNSArMzAsMTUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFw
aGljc1JlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdlbmVyYXRvciA6IHB1
YmxpYyBSZWZDb3VudGVkPEdlbmVyYXRvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkdlbmVy
YXRvcigpIHt9OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVy
c0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiAvKiBzaXplICovLCBGbG9hdFJlY3QmIC8qIHNyY1Jl
Y3QgKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEdyYXBoaWNzUmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UGFyYW1ldGVyc0Zv
clRpbGVkRHJhd2luZyhJbnRTaXplJiAvKiBzaXplICovLCBHcmFwaGljc1JlY3QmIC8qIHNyY1Jl
Y3QgKi8pIHsgfQogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpZm5kZWYgR2x5cGhCdWZmZXJfaAogI2RlZmluZSBHbHlw
aEJ1ZmZlcl9oCiAKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Np
emUuaCIKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTYwLDcgKzYwLDcgQEAgdHlwZWRlZiB3Y2hhcl90
IEdseXBoQnVmZmVyR2x5cGg7CiB0eXBlZGVmIEdseXBoIEdseXBoQnVmZmVyR2x5cGg7CiAjZW5k
aWYKIAotLy8gQ0cgdXNlcyBDR1NpemUgaW5zdGVhZCBvZiBGbG9hdFNpemUgc28gdGhhdCB0aGUg
cmVzdWx0IG9mIGFkdmFuY2VzKCkKKy8vIENHIHVzZXMgQ0dTaXplIGluc3RlYWQgb2YgR3JhcGhp
Y3NTaXplIHNvIHRoYXQgdGhlIHJlc3VsdCBvZiBhZHZhbmNlcygpCiAvLyBjYW4gYmUgcGFzc2Vk
IGRpcmVjdGx5IHRvIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMgaW4gRm9udE1hYy5t
bQogI2lmIFVTRShDRykgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJ
QV9PTl9NQUNfQ0hST01JVU0pCiB0eXBlZGVmIENHU2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CkBA
IC02OSw3ICs2OSw3IEBAIHR5cGVkZWYgQ0dTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsKIC8vIHNv
IHdlIGNhbiBzYXZlIG1lbW9yeSBzcGFjZSBvbiBlbWJlZGRlZCBkZXZpY2VzIGJ5IHN0b3Jpbmcg
b25seSB0aGUgd2lkdGgKIHR5cGVkZWYgZmxvYXQgR2x5cGhCdWZmZXJBZHZhbmNlOwogI2Vsc2UK
LXR5cGVkZWYgRmxvYXRTaXplIEdseXBoQnVmZmVyQWR2YW5jZTsKK3R5cGVkZWYgR3JhcGhpY3NT
aXplIEdseXBoQnVmZmVyQWR2YW5jZTsKICNlbmRpZgogCiBjbGFzcyBHbHlwaEJ1ZmZlciB7CkBA
IC0xMDksNyArMTA5LDcgQEAgcHVibGljOgogICAgICAgICBtX2FkdmFuY2VzW2luZGV4Ml0gPSBz
OwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBGbG9hdFNpemUgb2Zmc2V0ID0gbV9vZmZz
ZXRzW2luZGV4MV07CisgICAgICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXQgPSBtX29mZnNldHNbaW5k
ZXgxXTsKICAgICAgICAgbV9vZmZzZXRzW2luZGV4MV0gPSBtX29mZnNldHNbaW5kZXgyXTsKICAg
ICAgICAgbV9vZmZzZXRzW2luZGV4Ml0gPSBvZmZzZXQ7CiAjZW5kaWYKQEAgLTEzNSwxNyArMTM1
LDE3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBvZmZzZXRBdChp
bnQgaW5kZXgpIGNvbnN0CisgICAgR3JhcGhpY3NTaXplIG9mZnNldEF0KGludCBpbmRleCkgY29u
c3QKICAgICB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2lu
ZGV4XTsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgICAgIHJldHVy
biBGbG9hdFNpemUoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZSgpOwogI2VuZGlmCiAg
ICAgfQogCi0gICAgdm9pZCBhZGQoR2x5cGggZ2x5cGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250LCBmbG9hdCB3aWR0aCwgY29uc3QgRmxvYXRTaXplKiBvZmZzZXQgPSAwKQorICAgIHZvaWQg
YWRkKEdseXBoIGdseXBoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgZmxvYXQgd2lkdGgs
IGNvbnN0IEdyYXBoaWNzU2l6ZSogb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIG1fZm9udERh
dGEuYXBwZW5kKGZvbnQpOwogCkBAIC0xNjMsMTQgKzE2MywxNCBAQCBwdWJsaWM6CiAjZWxpZiBP
UyhXSU5DRSkKICAgICAgICAgbV9hZHZhbmNlcy5hcHBlbmQod2lkdGgpOwogI2Vsc2UKLSAgICAg
ICAgbV9hZHZhbmNlcy5hcHBlbmQoRmxvYXRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgIG1fYWR2
YW5jZXMuYXBwZW5kKEdyYXBoaWNzU2l6ZSh3aWR0aCwgMCkpOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgICAgIGlmIChvZmZzZXQpCiAgICAgICAgICAgICBtX29mZnNldHMuYXBw
ZW5kKCpvZmZzZXQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX29mZnNldHMuYXBwZW5k
KEZsb2F0U2l6ZSgpKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0cy5hcHBlbmQoR3JhcGhpY3NTaXpl
KCkpOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAjZW5kaWYKQEAgLTIw
MSw3ICsyMDEsNyBAQCBwdWJsaWM6CiAjZWxpZiBPUyhXSU5DRSkKICAgICAgICAgbGFzdEFkdmFu
Y2UgKz0gd2lkdGg7CiAjZWxzZQotICAgICAgICBsYXN0QWR2YW5jZSArPSBGbG9hdFNpemUod2lk
dGgsIDApOworICAgICAgICBsYXN0QWR2YW5jZSArPSBHcmFwaGljc1NpemUod2lkdGgsIDApOwog
I2VuZGlmCiAgICAgfQogCkBAIC0yMTAsNyArMjEwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMjA0OD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVy
QWR2YW5jZSwgMjA0OD4gbV9hZHZhbmNlczsKICNpZiBQTEFURk9STShXSU4pCi0gICAgVmVjdG9y
PEZsb2F0U2l6ZSwgMjA0OD4gbV9vZmZzZXRzOworICAgIFZlY3RvcjxHcmFwaGljc1NpemUsIDIw
NDg+IG1fb2Zmc2V0czsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDkgKzk2LDkgQEAgdGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgR2x5
cGhNZXRyaWNzTWFwPAogICAgIHJldHVybiBjR2x5cGhTaXplVW5rbm93bjsKIH0KIAotdGVtcGxh
dGU8PiBpbmxpbmUgRmxvYXRSZWN0IEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+Ojp1bmtub3du
TWV0cmljcygpCit0ZW1wbGF0ZTw+IGlubGluZSBHcmFwaGljc1JlY3QgR2x5cGhNZXRyaWNzTWFw
PEdyYXBoaWNzUmVjdD46OnVua25vd25NZXRyaWNzKCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0
KDAsIDAsIGNHbHlwaFNpemVVbmtub3duLCBjR2x5cGhTaXplVW5rbm93bik7CisgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgwLCAwLCBjR2x5cGhTaXplVW5rbm93biwgY0dseXBoU2l6ZVVua25vd24p
OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBUPiB0eXBlbmFtZSBHbHlwaE1ldHJpY3NNYXA8VD46Okds
eXBoTWV0cmljc1BhZ2UqIEdseXBoTWV0cmljc01hcDxUPjo6bG9jYXRlUGFnZVNsb3dDYXNlKHVu
c2lnbmVkIHBhZ2VOdW1iZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTIgKzI4
LDEyIEBACiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhZGllbnQ6Okdy
YWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK0dyYWRp
ZW50OjpHcmFkaWVudChjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcDEpCiAgICAgOiBtX3JhZGlhbChmYWxzZSkKICAgICAsIG1fcDAocDApCiAgICAgLCBtX3Ax
KHAxKQpAQCAtNDcsNyArNDcsNyBAQCBHcmFkaWVudDo6R3JhZGllbnQoY29uc3QgRmxvYXRQb2lu
dCYgcDAsCiAgICAgcGxhdGZvcm1Jbml0KCk7CiB9CiAKLUdyYWRpZW50OjpHcmFkaWVudChjb25z
dCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCBy
MSwgZmxvYXQgYXNwZWN0UmF0aW8pCitHcmFkaWVudDo6R3JhZGllbnQoY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEsIGZs
b2F0IGFzcGVjdFJhdGlvKQogICAgIDogbV9yYWRpYWwodHJ1ZSkKICAgICAsIG1fcDAocDApCiAg
ICAgLCBtX3AxKHAxKQpAQCAtNjYsNyArNjYsNyBAQCBHcmFkaWVudDo6fkdyYWRpZW50KCkKICAg
ICBwbGF0Zm9ybURlc3Ryb3koKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6YWRqdXN0UGFyYW1ldGVy
c0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QpCit2b2lk
IEdyYWRpZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKEludFNpemUmIHNpemUs
IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCkKIHsKICAgICBpZiAobV9yYWRpYWwpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
aAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIEdyYWRp
ZW50X2gKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CkBAIC03NCwxMSArNzQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgR3Jh
ZGllbnQgOiBwdWJsaWMgR2VuZXJhdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZs
b2F0UG9pbnQmIHAxKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRl
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsK
ICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0
IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyA9IDEpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdy
YWRpZW50PiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwMSwgZmxvYXQgcjEsIGZsb2F0IGFzcGVjdFJhdGlvID0gMSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcjAsIHAx
LCByMSwgYXNwZWN0UmF0aW8pKTsKICAgICAgICAgfQpAQCAtOTQsMTEgKzk0LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1JhZGlhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFkaWFsOyB9CiAgICAgICAgIGJvb2wgaXNaZXJvU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcDAu
eCgpID09IG1fcDEueCgpICYmIG1fcDAueSgpID09IG1fcDEueSgpICYmICghbV9yYWRpYWwgfHwg
bV9yMCA9PSBtX3IxKTsgfQogCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHAwKCkgY29uc3Qg
eyByZXR1cm4gbV9wMDsgfQotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMSgpIGNvbnN0IHsg
cmV0dXJuIG1fcDE7IH0KKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcDAoKSBjb25zdCB7
IHJldHVybiBtX3AwOyB9CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxKCkgY29uc3Qg
eyByZXR1cm4gbV9wMTsgfQogCi0gICAgICAgIHZvaWQgc2V0UDAoY29uc3QgRmxvYXRQb2ludCYg
cCkgeyBtX3AwID0gcDsgfQotICAgICAgICB2b2lkIHNldFAxKGNvbnN0IEZsb2F0UG9pbnQmIHAp
IHsgbV9wMSA9IHA7IH0KKyAgICAgICAgdm9pZCBzZXRQMChjb25zdCBHcmFwaGljc1BvaW50JiBw
KSB7IG1fcDAgPSBwOyB9CisgICAgICAgIHZvaWQgc2V0UDEoY29uc3QgR3JhcGhpY3NQb2ludCYg
cCkgeyBtX3AxID0gcDsgfQogCiAgICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yMDsgfQogICAgICAgICBmbG9hdCBlbmRSYWRpdXMoKSBjb25zdCB7IHJldHVybiBt
X3IxOyB9CkBAIC0xMzMsOCArMTMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAv
LyBRdCBhbmQgQ0cgdHJhbnNmb3JtIHRoZSBncmFkaWVudCBhdCBkcmF3IHRpbWUKICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSB7IHJldHVybiBtX2dyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmaWxsKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhJbnRTaXplJiBzaXplLCBGbG9hdFJlY3Qm
IHNyY1JlY3QpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFBhcmFtZXRl
cnNGb3JUaWxlZERyYXdpbmcoSW50U2l6ZSYgc2l6ZSwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsK
IAogICAgICAgICB2b2lkIHNldFBsYXRmb3JtR3JhZGllbnRTcGFjZVRyYW5zZm9ybShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7CiAKQEAgLTE0NCw4
ICsxNDQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBw
MSk7Ci0gICAgICAgIEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29u
c3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyk7CisgICAgICAg
IEdyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
MSk7CisgICAgICAgIEdyYWRpZW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAwLCBmbG9hdCByMCwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGZsb2F0IHIxLCBmbG9hdCBhc3BlY3RSYXRpbyk7CiAK
ICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3JhZGllbnQgPSAwOyB9CiAgICAgICAg
IHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CkBAIC0xNTQsOCArMTU0LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CiAKICAgICAgICAg
Ym9vbCBtX3JhZGlhbDsKLSAgICAgICAgRmxvYXRQb2ludCBtX3AwOwotICAgICAgICBGbG9hdFBv
aW50IG1fcDE7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgbV9wMDsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludCBtX3AxOwogICAgICAgICBmbG9hdCBtX3IwOwogICAgICAgICBmbG9hdCBtX3IxOwogICAg
ICAgICBmbG9hdCBtX2FzcGVjdFJhdGlvOyAvLyBGb3IgZWxsaXB0aWNhbCBncmFkaWVudCwgd2lk
dGggLyBoZWlnaHQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xv
cihjb24KICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKIHsKICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNo
YWRvd0JsdXIgPSBibHVyOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTaGFkb3coY29uc3QgRmwKICAgICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIs
IGNvbG9yLCBjb2xvclNwYWNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExlZ2Fj
eVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGVnYWN5U2hhZG93KGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBtX3N0YXRlLnNo
YWRvd09mZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwpAQCAt
MTU3LDcgKzE1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMZWdhY3lTaGFkb3coY28K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBtX3N0YXRlLnNo
YWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOworICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gR3Jh
cGhpY3NTaXplKCk7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKICAgICBtX3N0YXRlLnNo
YWRvd0NvbG9yID0gQ29sb3IoKTsKICAgICBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UgPSBDb2xv
clNwYWNlRGV2aWNlUkdCOwpAQCAtMTcwLDcgKzE3MCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
OjpoYXNTaGFkb3coKSBjb25zdAogICAgICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8
IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYg
b2Zmc2V0LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlJiBjb2xvclNwYWNl
KSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhHcmFwaGljc1NpemUmIG9m
ZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkg
Y29uc3QKIHsKICAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKICAgICBibHVyID0g
bV9zdGF0ZS5zaGFkb3dCbHVyOwpAQCAtMzY4LDExICszNjgsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJl
Y3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29s
b3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxl
KTsKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgR3JhcGhpY3NSZWN0KGRl
c3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKIH0KIAogI2lmICFPUyhXSU5D
RSkgfHwgKFBMQVRGT1JNKFFUKSAmJiAhSEFWRShRUkFXRk9OVCkpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM4MSw3ICszODEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9uCiB9CiAjZW5kaWYKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJr
cygKICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtzKHRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZy
b20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBG
b250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250JiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNSw3ICs0MDUsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0CiAgICAgaWYgKCFiaWRpUnVu
cy5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IGN1cnJQb2lu
dCA9IHBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgY3VyclBvaW50ID0gcG9pbnQ7CiAgICAgQmlk
aUNoYXJhY3RlclJ1biogYmlkaVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7CiAgICAgd2hpbGUg
KGJpZGlSdW4pIHsKICAgICAgICAgVGV4dFJ1biBzdWJydW4gPSBydW47CkBAIC00MjUsNyArNDI1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdAogICAgIGJpZGlS
dW5zLmRlbGV0ZVJ1bnMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGln
aHRGb3JUZXh0KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGludCBmcm9tLCBpbnQgdG8pCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgaW50IGZyb20sIGludCB0bykKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC00MzMsNyAr
NDMzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZQogICAgIGZp
bGxSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8p
LCBiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yU3BhY2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkZXN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyYywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgIWltYWdlKQogICAgICAgICByZXR1cm47CkBAIC00NTcsMTAgKzQ1NywxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpCiAgICAgICAgIEludGVy
cG9sYXRpb25RdWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgSW50ZXJwb2xh
dGlvbkxvdwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRp
b25Ob25lKTsKLSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRp
b24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0
U2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRy
YXcodGhpcywgR3JhcGhpY3NSZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0
aCkpLCBHcmFwaGljc1JlY3Qoc3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkp
LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAg
aW1hZ2UtPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXplKHR3
LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBz
dHlsZUNvbG9yU3BhY2UsIG9wKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgR3JhcGhpY3NS
ZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0aCkpLCBHcmFwaGljc1JlY3Qo
c3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2Us
IG9wKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlKiBp
bWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IEludFBvaW50JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKQEAgLTUxNCwxMCArNTE0LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7
Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChk
ZXN0KSwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0KSwgc3JjUmVjdCwg
b3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
c3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCiAgICAgICAgIHJldHVybjsKQEAg
LTU0MSwxNiArNTQxLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIo
SW0KICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgcHJldmlvdXNJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCBiZSBJbnRlcnBvbGF0aW9uTG93CiAgICAgICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHls
ZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgp
KSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JT
cGFjZSwgR3JhcGhpY3NSZWN0KGRlc3QubG9jYXRpb24oKSwgR3JhcGhpY3NTaXplKHR3LCB0aCkp
LCBHcmFwaGljc1JlY3Qoc3JjLmxvY2F0aW9uKCksIEdyYXBoaWNzU2l6ZSh0c3csIHRzaCkpLCBv
cCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAg
aW1hZ2UtPmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlv
bigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRT
aXplKHRzdywgdHNoKSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworICAgICAgICBpbWFnZS0+
ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEdyYXBoaWNzUmVjdChkZXN0LmxvY2F0aW9uKCks
IEdyYXBoaWNzU2l6ZSh0dywgdGgpKSwgR3JhcGhpY3NSZWN0KHNyYy5sb2NhdGlvbigpLCBHcmFw
aGljc1NpemUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKICNpZiAh
UExBVEZPUk0oUVQpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIGNsaXAoRmxvYXRSZWN0KHJlY3QpKTsKKyAgICBjbGlwKEdyYXBoaWNzUmVj
dChyZWN0KSk7CiB9CiAjZW5kaWYKIApAQCAtNTc0LDcgKzU3NCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QKICAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBidWZmZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MDIsMTQg
KzYwMiwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlCiAgICAg
c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdlbmVyYXRvciYgZ2VuZXJhdG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCwgR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGdlbmVyYXRvci5maWxsKHRoaXMsIHJlY3QpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0R3JhcGhpY3NDb250ZXh0CiAjZW5kaWYKIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRq
dXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwg
ZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhHcmFwaGljc1BvaW50JiBwMSwgR3Jh
cGhpY3NQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkK
IHsKICAgICAvLyBGb3Igb2RkIHdpZHRocywgd2UgYWRkIGluIDAuNSB0byB0aGUgYXBwcm9wcmlh
dGUgeC95IHNvIHRoYXQgdGhlIGZsb2F0IGFyaXRobWV0aWMKICAgICAvLyB3b3JrcyBvdXQuICBG
b3IgZXhhbXBsZSwgd2l0aCBhIGJvcmRlciB3aWR0aCBvZiAzLCBXZWJLaXQgd2lsbCBwYXNzIHVz
ICh5MSt5MikvMiwgZS5nLiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAi
RGFzaEFycmF5LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIlBhdGguaCIKQEAgLTE4NCw3ICsxODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwogICAgICAgICBSZWZQdHI8UGF0dGVy
bj4gZmlsbFBhdHRlcm47CiAKLSAgICAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICAg
ICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldDsKIAogICAgICAgICBmbG9hdCBzdHJva2VUaGlj
a25lc3M7CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXI7CkBAIC0yODUsNyArMjg1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsK
ICAgICAgICAgdm9pZCBkcmF3TGluZShjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7
CiAgICAgICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2b2lk
IGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBi
b29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9s
eWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiwgYm9vbCBzaG91bGRB
bnRpYWxpYXMgPSBmYWxzZSk7CiAKICAgICAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7
CiAgICAgICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CkBAIC0yOTMsMjMgKzI5Mywy
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5
IGJvcmRlci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21l
bnQuCiAgICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmds
ZSwgaW50IGFuZ2xlU3Bhbik7CiAKLSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKLSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYsIENvbG9yU3BhY2UpOwotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IEdlbmVyYXRvciYpOwotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJiwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgR2VuZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdo
dCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQs
IGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAgICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiwgY29uc3QgUm91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKIAotICAg
ICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKLSAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOwogCiAgICAgICAgIHZvaWQg
ZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBv
aW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdl
KiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291
cmNlT3Zlcik7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93
UXVhbGl0eVNjYWxlID0gZmFsc2UpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKKyAgICAgICAg
dm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0ID0gR3Jh
cGhpY3NSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUg
PSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFBvaW50
JiBzcmNQb2ludCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUgPSBmYWxzZSk7CkBAIC0zMjEsNDUgKzMyMSw0NSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9
IENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwog
ICAgICAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgICAg
ICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxp
dHlTY2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCisg
ICAgICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgc3JjUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCAtMSwgLTEpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIs
IGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gZmFsc2UpOwogCiAgICAgICAgIHZvaWQgc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiAgICAgICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdDsKIAog
ICAgICAgICB2b2lkIGNsaXAoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgICAgIHZvaWQgY2xpcChjb25zdCBHcmFwaGljc1JlY3QmKTsK
ICAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgUm91bmRlZFJlY3QmKTsKICAg
ICAgICAgdm9pZCBhZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiwgaW50IHRo
aWNrbmVzcyk7CiAgICAgICAgIHZvaWQgY2xpcE91dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAg
IHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IFJvdW5kZWRSZWN0Jik7CiAgICAgICAgIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKLSAgICAgICAgdm9pZCBjbGlwQ29u
dmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBhbnRp
YWxpYXMgPSB0cnVlKTsKLSAgICAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2b2lkIGNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqLCBib29sIGFudGlhbGlhcyA9IHRy
dWUpOworICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3Qg
R3JhcGhpY3NSZWN0Jik7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBj
b25zdDsKIAogICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBj
b25zdDsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxh
Z3MpOwogCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7Ci0gICAgICAg
IHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mICwgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSk7Ci0gICAgICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnQmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lkIGRyYXdIaWdobGln
aHRGb3JUZXh0KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IGludCBoLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBDb2xvclNwYWNlLCBpbnQgZnJv
bSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0
byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250JiwgY29u
c3QgVGV4dFJ1biYgLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKKyAgICAgICAgdm9pZCBkcmF3QmlkaVRl
eHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50Jik7Cisg
ICAgICAgIHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGgsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IsIENvbG9yU3BhY2UsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwogCiAgICAgICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgICAgIFJvdW5kQWxsU2lkZXMsCiAgICAgICAg
ICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKICAgICAgICAgfTsKLSAgICAgICAgRmxvYXRS
ZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0g
Um91bmRBbGxTaWRlcyk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpOwogCi0g
ICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0
aCwgYm9vbCBwcmludGluZyk7CisgICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZyk7CiAgICAgICAgIGVudW0g
VGV4dENoZWNraW5nTGluZVN0eWxlIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1NwZWxsaW5n
TGluZVN0eWxlLAogICAgICAgICAgICAgVGV4dENoZWNraW5nR3JhbW1hckxpbmVTdHlsZSwKICAg
ICAgICAgICAgIFRleHRDaGVja2luZ1JlcGxhY2VtZW50TGluZVN0eWxlCiAgICAgICAgIH07Ci0g
ICAgICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUpOworICAgICAgICB2b2lkIGRyYXdMaW5l
Rm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBmbG9hdCB3aWR0aCwgVGV4dENo
ZWNraW5nTGluZVN0eWxlKTsKIAogICAgICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25z
dDsKICAgICAgICAgdm9pZCBzZXRQYWludGluZ0Rpc2FibGVkKGJvb2wpOwpAQCAtMzcxLDEyICsz
NzEsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7CiAKICAgICAgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBD
b2xvclNwYWNlKTsKKyAgICAgICAgdm9pZCBzZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiwg
ZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICAgICAgLy8gTGVnYWN5
IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1z
aGFkb3cuCiAgICAgICAgIC8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4g
OHB4LgotICAgICAgICB2b2lkIHNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCBibHVyLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgICAgICB2b2lkIHNldExlZ2Fj
eVNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIENv
bG9yU3BhY2UpOwogCi0gICAgICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0Jiwg
Q29sb3ImLCBDb2xvclNwYWNlJikgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0U2hhZG93KEdyYXBo
aWNzU2l6ZSYsIGZsb2F0JiwgQ29sb3ImLCBDb2xvclNwYWNlJikgY29uc3Q7CiAgICAgICAgIHZv
aWQgY2xlYXJTaGFkb3coKTsKIAogICAgICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiwgaW50IHdpZHRoLCBpbnQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwpAQCAt
NDAwLDkgKzQwMCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjYW52YXND
bGlwKGNvbnN0IFBhdGgmKTsKICAgICAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAot
ICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIHNjYWxl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucyk7Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
eyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgICAgICB2b2lk
IHRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KICAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSk7CiAKICAgICAgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IEtVUkwmLCBjb25z
dCBJbnRSZWN0Jik7CkBAIC00MTYsMTMgKzQxNiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCkgY29uc3Q7CiAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lVHJhbnNmb3JtKCk7CiAgICAgICAgIHZvaWQg
cmVzZXRBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBHcmFkaWVudCopOwotICAgICAgICB2b2lkIGRyYXdUZXh0KGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBp
bnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOworICAgICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IEdyYWRpZW50Kik7Cisg
ICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCk7CiAgICAgICAgIHZvaWQgZHJhd0ZyYW1lQ29udHJvbChj
b25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBzdGF0ZSk7CiAgICAg
ICAgIHZvaWQgZHJhd0ZvY3VzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKICAgICAgICAgdm9p
ZCBwYWludFRleHRGaWVsZChjb25zdCBJbnRSZWN0JiByZWN0LCB1bnNpZ25lZCBzdGF0ZSk7CiAg
ICAgICAgIHZvaWQgZHJhd0JpdG1hcChTaGFyZWRCaXRtYXAqLCBjb25zdCBJbnRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApOwotICAgICAgICB2b2lkIGRyYXdCaXRtYXBQ
YXR0ZXJuKFNoYXJlZEJpdG1hcCosIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSk7Cisg
ICAgICAgIHZvaWQgZHJhd0JpdG1hcFBhdHRlcm4oU2hhcmVkQml0bWFwKiwgY29uc3QgR3JhcGhp
Y3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKICAgICAgICAgdm9pZCBkcmF3SWNvbihISUNP
TiBpY29uLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBVSU5UIGZsYWdzKTsKICAgICAgICAgYm9v
bCBpblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAg
SERDIGdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kID0gZmFsc2UsIGJvb2wgbWF5Q3JlYXRlQml0bWFwID0gdHJ1ZSk7IC8vIFRoZSBwYXNzZWQg
aW4gcmVjdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRl
IHRyYW5zcGFyZW5jeSBsYXllcnMuCkBAIC00NzksNyArNDc5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2lmIFBMQVRGT1JNKFdYKQogICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNl
IG9mIGEgYnVnIHdoZXJlYnkgZ2V0dGluZyBhbiBIREMgZnJvbSBhIEdESSsgY29udGV4dAogICAg
ICAgICAvLyBsb3NlcyB0aGUgc2NhbGUgb3BlcmF0aW9ucyBhcHBsaWVkIHRvIHRoZSBjb250ZXh0
LgotICAgICAgICBGbG9hdFNpemUgY3VycmVudFNjYWxlKCk7IAorICAgICAgICBHcmFwaGljc1Np
emUgY3VycmVudFNjYWxlKCk7IAogICAgICAgICBib29sIGluVHJhbnNwYXJlbmN5TGF5ZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKQEAgLTUxMyw3ICs1MTMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChHcmFw
aGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAKLSAgICAg
ICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAx
LCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEdyYXBoaWNzUG9pbnQm
IHAxLCBHcmFwaGljc1BvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0Kik7CkBAIC01MzgsNyArNTM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wpOwogICAgICAgICB2b2lk
IHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7CiAKLSAgICAgICAgdm9pZCBzZXRQ
bGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYs
IENvbG9yU3BhY2UpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdyYXBo
aWNzU2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAgICAg
IHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwogCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1D
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50LmgiCiAjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTQzMCwx
NyArNDMwLDE3IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcExheWVyKFRleHRTdHJlYW0KIAog
dm9pZCBHcmFwaGljc0xheWVyOjpkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCwgTGF5ZXJUcmVlQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fcG9zaXRpb24gIT0gRmxvYXRQb2ludCgpKSB7CisgICAgaWYgKG1fcG9zaXRpb24gIT0gR3Jh
cGhpY3NQb2ludCgpKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAg
ICAgICAgdHMgPDwgIihwb3NpdGlvbiAiIDw8IG1fcG9zaXRpb24ueCgpIDw8ICIgIiA8PCBtX3Bv
c2l0aW9uLnkoKSA8PCAiKVxuIjsKICAgICB9CiAKLSAgICBpZiAobV9ib3VuZHNPcmlnaW4gIT0g
RmxvYXRQb2ludCgpKSB7CisgICAgaWYgKG1fYm91bmRzT3JpZ2luICE9IEdyYXBoaWNzUG9pbnQo
KSkgewogICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAgICAgICAgIHRzIDw8
ICIoYm91bmRzIG9yaWdpbiAiIDw8IG1fYm91bmRzT3JpZ2luLngoKSA8PCAiICIgPDwgbV9ib3Vu
ZHNPcmlnaW4ueSgpIDw8ICIpXG4iOwogICAgIH0KIAotICAgIGlmIChtX2FuY2hvclBvaW50ICE9
IEZsb2F0UG9pbnQzRCgwLjVmLCAwLjVmLCAwKSkgeworICAgIGlmIChtX2FuY2hvclBvaW50ICE9
IEdyYXBoaWNzUG9pbnQzRCgwLjVmLCAwLjVmLCAwKSkgewogICAgICAgICB3cml0ZUluZGVudCh0
cywgaW5kZW50ICsgMSk7CiAgICAgICAgIHRzIDw8ICIoYW5jaG9yICIgPDwgbV9hbmNob3JQb2lu
dC54KCkgPDwgIiAiIDw8IG1fYW5jaG9yUG9pbnQueSgpIDw8ICIpXG4iOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRl
ICJBbmltYXRpb24uaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgpAQCAtODAsNyArODAsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIExheWVyVHJlZUFzVGV4dEJlaGF2
aW9yCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDNEOworY2xhc3Mg
R3JhcGhpY3NQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2U7CiBj
bGFzcyBUZXh0U3RyZWFtOwpAQCAtMjI1LDI5ICsyMjUsMjkgQEAgcHVibGljOgogICAgIC8vIFRo
ZSBsYXllciB0aGF0IHJlcGxpY2F0ZXMgdGhpcyBsYXllciAoaWYgYW55KS4KICAgICBHcmFwaGlj
c0xheWVyKiByZXBsaWNhTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllcjsgfQog
Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgcmVwbGljYXRlZExheWVyUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXBsaWNh
dGVkTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKSB7IG1fcmVwbGljYXRlZExheWVy
UG9zaXRpb24gPSBwOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcmVwbGljYXRlZExheWVy
UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uOyB9Cisg
ICAgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBw
KSB7IG1fcmVwbGljYXRlZExheWVyUG9zaXRpb24gPSBwOyB9CiAKICAgICAvLyBPZmZzZXQgaXMg
b3JpZ2luIG9mIHRoZSByZW5kZXJlciBtaW51cyBvcmlnaW4gb2YgdGhlIGdyYXBoaWNzIGxheWVy
IChzbyBlaXRoZXIgemVybyBvciBuZWdhdGl2ZSkuCiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21SZW5kZXJlcjsgfQogICAgIHZvaWQg
c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKGNvbnN0IEludFNpemUmIG9mZnNldCkgeyBtX29mZnNldEZy
b21SZW5kZXJlciA9IG9mZnNldDsgfQogCiAgICAgLy8gVGhlIHBvc2l0aW9uIG9mIHRoZSBsYXll
ciAodGhlIGxvY2F0aW9uIG9mIGl0cyB0b3AtbGVmdCBjb3JuZXIgaW4gaXRzIHBhcmVudCkKLSAg
ICBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkgeyBt
X3Bvc2l0aW9uID0gcDsgfQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihj
b25zdCBHcmFwaGljc1BvaW50JiBwKSB7IG1fcG9zaXRpb24gPSBwOyB9CiAgICAgCiAgICAgLy8g
QW5jaG9yIHBvaW50OiAoMCwgMCkgaXMgdG9wIGxlZnQsICgxLCAxKSBpcyBib3R0b20gcmlnaHQu
IFRoZSBhbmNob3IgcG9pbnQKICAgICAvLyBhZmZlY3RzIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5z
Zm9ybXMuCi0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5jaG9yUG9pbnQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29u
c3QgRmxvYXRQb2ludDNEJiBwKSB7IG1fYW5jaG9yUG9pbnQgPSBwOyB9CisgICAgY29uc3QgR3Jh
cGhpY3NQb2ludDNEJiBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnQ7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNE
JiBwKSB7IG1fYW5jaG9yUG9pbnQgPSBwOyB9CiAKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgbGF5
ZXIuCi0gICAgY29uc3QgRmxvYXRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IG1fc2l6
ZSA9IHNpemU7IH0KKyAgICBjb25zdCBHcmFwaGljc1NpemUmIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUm
IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQogCiAgICAgLy8gVGhlIGJvdW5kT3JpZ2luIGFmZmVj
dHMgdGhlIG9mZnNldCBhdCB3aGljaCBjb250ZW50IGlzIHJlbmRlcmVkLCBhbmQgc3VibGF5ZXJz
IGFyZSBwb3NpdGlvbmVkLgotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJvdW5kc09yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRzT3JpZ2luOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEJvdW5k
c09yaWdpbihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4pIHsgbV9ib3VuZHNPcmlnaW4gPSBvcmln
aW47IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50JiBib3VuZHNPcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kc09yaWdpbjsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZHNPcmlnaW4o
Y29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luKSB7IG1fYm91bmRzT3JpZ2luID0gb3JpZ2luOyB9
CiAKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm07IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KSB7IG1fdHJhbnNmb3JtID0gdDsgfQpAQCAtMjg5LDcg
KzI4OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSA9
IDA7CiAgICAgLy8gbWFyayB0aGUgZ2l2ZW4gcmVjdCAoaW4gbGF5ZXIgY29vcmRzKSBhcyBuZWVk
aW5nIGRpc3BheS4gTmV2ZXIgZ29lcyBkZWVwLgotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikgPSAwOwogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIHsgfTsKIApAQCAtMzk4LDEwICsz
OTgsMTAgQEAgcHJvdGVjdGVkOgogICAgIEludFNpemUgbV9vZmZzZXRGcm9tUmVuZGVyZXI7CiAg
ICAgCiAgICAgLy8gUG9zaXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBHcmFwaGljc0xh
eWVyCi0gICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2FuY2hv
clBvaW50OwotICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci0gICAgRmxvYXRQb2ludCBtX2JvdW5kc09y
aWdpbjsKKyAgICBHcmFwaGljc1BvaW50IG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludDNE
IG1fYW5jaG9yUG9pbnQ7CisgICAgR3JhcGhpY3NTaXplIG1fc2l6ZTsKKyAgICBHcmFwaGljc1Bv
aW50IG1fYm91bmRzT3JpZ2luOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zv
cm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jaGlsZHJlblRyYW5zZm9ybTsKQEAgLTQz
MCw3ICs0MzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllciogbV9yZXBsaWNhTGF5
ZXI7IC8vIEEgbGF5ZXIgdGhhdCByZXBsaWNhdGVzIHRoaXMgbGF5ZXIuIFdlIG9ubHkgYWxsb3cg
b25lLCBmb3Igbm93LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUg
cmVwbGljYSBpcyBub3QgcGFyZW50ZWQ7IHRoaXMgaXMgdGhlIHByaW1hcnkgcmVmZXJlbmNlIHRv
IGl0LgogICAgIEdyYXBoaWNzTGF5ZXIqIG1fcmVwbGljYXRlZExheWVyOyAvLyBGb3IgYSByZXBs
aWNhIGxheWVyLCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgbGF5ZXIuCi0gICAgRmxvYXRQ
b2ludCBtX3JlcGxpY2F0ZWRMYXllclBvc2l0aW9uOyAvLyBGb3IgYSByZXBsaWNhIGxheWVyLCB0
aGUgcG9zaXRpb24gb2YgdGhlIHJlcGxpY2EuCisgICAgR3JhcGhpY3NQb2ludCBtX3JlcGxpY2F0
ZWRMYXllclBvc2l0aW9uOyAvLyBGb3IgYSByZXBsaWNhIGxheWVyLCB0aGUgcG9zaXRpb24gb2Yg
dGhlIHJlcGxpY2EuCiAKICAgICBJbnRSZWN0IG1fY29udGVudHNSZWN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0xheWVyOwogY2xhc3MgSW50
UG9pbnQ7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEdyYXBoaWNz
UG9pbnQ7CiAKIGVudW0gR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgewogICAgIEdyYXBoaWNz
TGF5ZXJQYWludEJhY2tncm91bmQgPSAoMSA8PCAwKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQzRC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAg
ICAgICAgICAgICAgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCisKKyNpbmNsdWRl
IDxtYXRoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGljc1BvaW50M0Q6
Om5vcm1hbGl6ZSgpCit7CisgICAgZmxvYXQgdGVtcExlbmd0aCA9IGxlbmd0aCgpOworCisgICAg
aWYgKHRlbXBMZW5ndGgpIHsKKyAgICAgICAgbV94IC89IHRlbXBMZW5ndGg7CisgICAgICAgIG1f
eSAvPSB0ZW1wTGVuZ3RoOworICAgICAgICBtX3ogLz0gdGVtcExlbmd0aDsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludDNELmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50M0QuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgICAgICAgICAgICAgICAgMjAx
MCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgR3JhcGhp
Y3NQb2ludDNEX2gKKyNkZWZpbmUgR3JhcGhpY3NQb2ludDNEX2gKKworI2luY2x1ZGUgIkdyYXBo
aWNzUG9pbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc1BvaW50
M0QgeworcHVibGljOgorICAgIEdyYXBoaWNzUG9pbnQzRCgpCisgICAgICAgIDogbV94KDApCisg
ICAgICAgICwgbV95KDApCisgICAgICAgICwgbV96KDApCisgICAgeworICAgIH0KKworICAgIEdy
YXBoaWNzUG9pbnQzRChHcmFwaGljc1VuaXQgeCwgR3JhcGhpY3NVbml0IHksIEdyYXBoaWNzVW5p
dCB6KQorICAgICAgICA6IG1feCh4KQorICAgICAgICAsIG1feSh5KQorICAgICAgICAsIG1feih6
KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50M0QoY29uc3QgR3JhcGhpY3NQb2lu
dCYgcCkKKyAgICAgICAgOiBtX3gocC54KCkpCisgICAgICAgICwgbV95KHAueSgpKQorICAgICAg
ICAsIG1feigwKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50M0QoY29uc3QgR3Jh
cGhpY3NQb2ludDNEJiBwKQorICAgICAgICA6IG1feChwLngoKSkKKyAgICAgICAgLCBtX3kocC55
KCkpCisgICAgICAgICwgbV96KHAueigpKQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc1Vu
aXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQorICAgIHZvaWQgc2V0WChHcmFwaGljc1VuaXQg
eCkgeyBtX3ggPSB4OyB9CisKKyAgICBHcmFwaGljc1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1f
eTsgfQorICAgIHZvaWQgc2V0WShHcmFwaGljc1VuaXQgeSkgeyBtX3kgPSB5OyB9CisKKyAgICBH
cmFwaGljc1VuaXQgeigpIGNvbnN0IHsgcmV0dXJuIG1fejsgfQorICAgIHZvaWQgc2V0WihHcmFw
aGljc1VuaXQgeikgeyBtX3ogPSB6OyB9CisgICAgdm9pZCBzZXQoR3JhcGhpY3NVbml0IHgsIEdy
YXBoaWNzVW5pdCB5LCBHcmFwaGljc1VuaXQgeikKKyAgICB7CisgICAgICAgIG1feCA9IHg7Cisg
ICAgICAgIG1feSA9IHk7CisgICAgICAgIG1feiA9IHo7CisgICAgfQorICAgIHZvaWQgbW92ZShH
cmFwaGljc1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSwgR3JhcGhpY3NVbml0IGR6KQorICAgIHsK
KyAgICAgICAgbV94ICs9IGR4OworICAgICAgICBtX3kgKz0gZHk7CisgICAgICAgIG1feiArPSBk
ejsKKyAgICB9CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBz
eSwgR3JhcGhpY3NVbml0IHN6KQorICAgIHsKKyAgICAgICAgbV94ICo9IHN4OworICAgICAgICBt
X3kgKj0gc3k7CisgICAgICAgIG1feiAqPSBzejsKKyAgICB9CisKKyAgICBib29sIGlzWmVybygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1feCAmJiAhbV95ICYmICFtX3o7CisgICAg
fQorCisgICAgdm9pZCBub3JtYWxpemUoKTsKKworICAgIEdyYXBoaWNzVW5pdCBkb3QoY29uc3Qg
R3JhcGhpY3NQb2ludDNEJiBhKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIGEu
eCgpICsgbV95ICogYS55KCkgKyBtX3ogKiBhLnooKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIHRo
aXMgR3JhcGhpY3NQb2ludDNEIHRvIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHRoZSBwYXNzZWQgdHdv
LgorICAgIC8vIEl0IGlzIHNhZmUgZm9yICJ0aGlzIiB0byBiZSB0aGUgc2FtZSBhcyBlaXRoZXIg
b3IgYm90aCBvZiB0aGUKKyAgICAvLyBhcmd1bWVudHMuCisgICAgdm9pZCBjcm9zcyhjb25zdCBH
cmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikKKyAgICB7CisgICAg
ICAgIEdyYXBoaWNzVW5pdCB4ID0gYS55KCkgKiBiLnooKSAtIGEueigpICogYi55KCk7CisgICAg
ICAgIEdyYXBoaWNzVW5pdCB5ID0gYS56KCkgKiBiLngoKSAtIGEueCgpICogYi56KCk7CisgICAg
ICAgIEdyYXBoaWNzVW5pdCB6ID0gYS54KCkgKiBiLnkoKSAtIGEueSgpICogYi54KCk7CisgICAg
ICAgIG1feCA9IHg7CisgICAgICAgIG1feSA9IHk7CisgICAgICAgIG1feiA9IHo7CisgICAgfQor
CisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gcmV0dXJuaW5nICJ0aGlzIGNyb3NzIHBvaW50
IiBhcyBhCisgICAgLy8gc3RhY2stYWxsb2NhdGVkIHJlc3VsdC4KKyAgICBHcmFwaGljc1BvaW50
M0QgY3Jvc3MoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb2ludCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEdyYXBoaWNzUG9pbnQzRCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5jcm9zcygqdGhpcywg
cG9pbnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEdyYXBoaWNzVW5p
dCBsZW5ndGhTcXVhcmVkKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQorICAg
IEdyYXBoaWNzVW5pdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVk
KCkpOyB9CisgICAgCisgICAgR3JhcGhpY3NVbml0IGRpc3RhbmNlVG8oY29uc3QgR3JhcGhpY3NQ
b2ludDNEJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NVbml0IG1feDsKKyAgICBH
cmFwaGljc1VuaXQgbV95OworICAgIEdyYXBoaWNzVW5pdCBtX3o7Cit9OworCitpbmxpbmUgR3Jh
cGhpY3NQb2ludDNEJiBvcGVyYXRvciArPShHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBo
aWNzUG9pbnQzRCYgYikKK3sKKyAgICBhLm1vdmUoYi54KCksIGIueSgpLCBiLnooKSk7CisgICAg
cmV0dXJuIGE7Cit9CisKK2lubGluZSBHcmFwaGljc1BvaW50M0QmIG9wZXJhdG9yIC09KEdyYXBo
aWNzUG9pbnQzRCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBiKQoreworICAgIGEubW92ZSgt
Yi54KCksIC1iLnkoKSwgLWIueigpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEdyYXBo
aWNzUG9pbnQzRCBvcGVyYXRvcisoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBhLCBjb25zdCBHcmFw
aGljc1BvaW50M0QmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChhLngoKSArIGIu
eCgpLCBhLnkoKSArIGIueSgpLCBhLnooKSArIGIueigpKTsKK30KKworaW5saW5lIEdyYXBoaWNz
UG9pbnQzRCBvcGVyYXRvci0oY29uc3QgR3JhcGhpY3NQb2ludDNEJiBhLCBjb25zdCBHcmFwaGlj
c1BvaW50M0QmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQzRChhLngoKSAtIGIueCgp
LCBhLnkoKSAtIGIueSgpLCBhLnooKSAtIGIueigpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYikK
K3sKKyAgICByZXR1cm4gYS54KCkgPT0gYi54KCkgJiYgYS55KCkgPT0gYi55KCkgJiYgYS56KCkg
PT0gYi56KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR3JhcGhpY3NQb2lu
dDNEJiBhLCBjb25zdCBHcmFwaGljc1BvaW50M0QmIGIpCit7CisgICAgcmV0dXJuIGEueCgpICE9
IGIueCgpIHx8IGEueSgpICE9IGIueSgpIHx8IGEueigpICE9IGIueigpOworfQorCitpbmxpbmUg
R3JhcGhpY3NVbml0IG9wZXJhdG9yKihjb25zdCBHcmFwaGljc1BvaW50M0QmIGEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgYikKK3sKKyAgICAvLyBkb3QgcHJvZHVjdAorICAgIHJldHVybiBhLmRv
dChiKTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQzRCBvcGVyYXRvciooR3JhcGhpY3NVbml0
IGssIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dDNEKGsgKiB2LngoKSwgayAqIHYueSgpLCBrICogdi56KCkpOworfQorCitpbmxpbmUgR3JhcGhp
Y3NQb2ludDNEIG9wZXJhdG9yKihjb25zdCBHcmFwaGljc1BvaW50M0QmIHYsIEdyYXBoaWNzVW5p
dCBrKQoreworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QoayAqIHYueCgpLCBrICogdi55KCks
IGsgKiB2LnooKSk7Cit9CisKK2lubGluZSBHcmFwaGljc1VuaXQgR3JhcGhpY3NQb2ludDNEOjpk
aXN0YW5jZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgYSkgY29uc3QKK3sKKyAgICByZXR1cm4g
KCp0aGlzIC0gYSkubGVuZ3RoKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEdyYXBoaWNzUG9pbnQzRF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1BvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUG9pbnQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxsaW1pdHM+Cisj
aW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzUG9pbnQ6
OkdyYXBoaWNzUG9pbnQoY29uc3QgSW50UG9pbnQmIHApIDogbV94KHAueCgpKSwgbV95KHAueSgp
KQoreworfQorCit2b2lkIEdyYXBoaWNzUG9pbnQ6Om5vcm1hbGl6ZSgpCit7CisgICAgR3JhcGhp
Y3NVbml0IHRlbXBMZW5ndGggPSBsZW5ndGgoKTsKKworICAgIGlmICh0ZW1wTGVuZ3RoKSB7Cisg
ICAgICAgIG1feCAvPSB0ZW1wTGVuZ3RoOworICAgICAgICBtX3kgLz0gdGVtcExlbmd0aDsKKyAg
ICB9Cit9CisKK0dyYXBoaWNzVW5pdCBHcmFwaGljc1BvaW50OjpsZW5ndGgoKSBjb25zdAorewor
ICAgIHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOworfQorCitHcmFwaGljc1BvaW50IEdy
YXBoaWNzUG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkgY29uc3QKK3sKKyAgICBkb3VibGUgbmV3WCwgbmV3WTsKKyAgICB0cmFuc2Zvcm0ubWFw
KHN0YXRpY19jYXN0PGRvdWJsZT4obV94KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3kpLCBuZXdY
LCBuZXdZKTsKKyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uKG5ld1gsIG5ld1kpOworfQorCitH
cmFwaGljc1BvaW50IEdyYXBoaWNzUG9pbnQ6Om1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSBjb25zdAoreworICAgIGRvdWJsZSBuZXdYLCBuZXdZ
OworICAgIHRyYW5zZm9ybS5tYXAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3gpLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1feSksIG5ld1gsIG5ld1kpOworICAgIHJldHVybiBuYXJyb3dQcmVjaXNpb24o
bmV3WCwgbmV3WSk7Cit9CisKK0dyYXBoaWNzUG9pbnQgR3JhcGhpY3NQb2ludDo6bmFycm93UHJl
Y2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChu
YXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdCh4KSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGlj
c1VuaXQoeSkpOworfQorCitHcmFwaGljc1VuaXQgZmluZFNsb3BlKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwgR3JhcGhpY3NVbml0JiBjKQoreworICAg
IGlmIChwMi54KCkgPT0gcDEueCgpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxHcmFwaGljc1VuaXQ+OjppbmZpbml0eSgpOworCisgICAgLy8geSA9IG14ICsgYworICAgIEdy
YXBoaWNzVW5pdCBzbG9wZSA9IChwMi55KCkgLSBwMS55KCkpIC8gKHAyLngoKSAtIHAxLngoKSk7
CisgICAgYyA9IHAxLnkoKSAtIHNsb3BlICogcDEueCgpOworICAgIHJldHVybiBzbG9wZTsKK30K
KworYm9vbCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBH
cmFwaGljc1BvaW50JiBwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDEsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGQyLCBHcmFwaGljc1BvaW50JiBpbnRlcnNlY3Rpb24pIAoreworICAgIEdyYXBoaWNz
VW5pdCBwT2Zmc2V0ID0gMDsKKyAgICBHcmFwaGljc1VuaXQgcFNsb3BlID0gZmluZFNsb3BlKHAx
LCBwMiwgcE9mZnNldCk7CisKKyAgICBHcmFwaGljc1VuaXQgZE9mZnNldCA9IDA7CisgICAgR3Jh
cGhpY3NVbml0IGRTbG9wZSA9IGZpbmRTbG9wZShkMSwgZDIsIGRPZmZzZXQpOworCisgICAgaWYg
KGRTbG9wZSA9PSBwU2xvcGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
cFNsb3BlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8R3JhcGhpY3NVbml0Pjo6aW5maW5pdHkoKSkg
eworICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WChwMS54KCkpOworICAgICAgICBpbnRlcnNlY3Rp
b24uc2V0WShkU2xvcGUgKiBpbnRlcnNlY3Rpb24ueCgpICsgZE9mZnNldCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZFNsb3BlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
R3JhcGhpY3NVbml0Pjo6aW5maW5pdHkoKSkgeworICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WChk
MS54KCkpOworICAgICAgICBpbnRlcnNlY3Rpb24uc2V0WShwU2xvcGUgKiBpbnRlcnNlY3Rpb24u
eCgpICsgcE9mZnNldCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAv
LyBGaW5kIHggYXQgaW50ZXJzZWN0aW9uLCB3aGVyZSB5cyBvdmVybGFwOyB4ID0gKGMnIC0gYykg
LyAobSAtIG0nKQorICAgIGludGVyc2VjdGlvbi5zZXRYKChkT2Zmc2V0IC0gcE9mZnNldCkgLyAo
cFNsb3BlIC0gZFNsb3BlKSk7CisgICAgaW50ZXJzZWN0aW9uLnNldFkocFNsb3BlICogaW50ZXJz
ZWN0aW9uLngoKSArIHBPZmZzZXQpOworICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1BvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQb2ludC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NQ
b2ludC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdyYXBoaWNzUG9pbnRfaAorI2RlZmluZSBHcmFwaGljc1BvaW50X2gKKworI2luY2x1
ZGUgIkdyYXBoaWNzU2l6ZS5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVN
KQordHlwZWRlZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyNpZmRlZiBOU0dF
T01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwordHlwZWRlZiBzdHJ1Y3QgQ0dQ
b2ludCBOU1BvaW50OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7Cisj
ZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAicWdsb2JhbC5oIgor
UVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUG9pbnRGOworUVRfRU5EX05BTUVTUEFDRQorI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShIQUlLVSkKK2NsYXNzIEJQb2ludDsKKyNlbmRpZgorCisjaWYg
VVNFKFNLSUEpCitzdHJ1Y3QgU2tQb2ludDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKK2NsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owor
Y2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBHcmFwaGljc1BvaW50IHsK
K3B1YmxpYzoKKyAgICBHcmFwaGljc1BvaW50KCkgOiBtX3goMCksIG1feSgwKSB7IH0KKyAgICBH
cmFwaGljc1BvaW50KEdyYXBoaWNzVW5pdCB4LCBHcmFwaGljc1VuaXQgeSkgOiBtX3goeCksIG1f
eSh5KSB7IH0KKyAgICBHcmFwaGljc1BvaW50KGNvbnN0IEludFBvaW50Jik7CisKKworICAgIHN0
YXRpYyBHcmFwaGljc1BvaW50IHplcm8oKSB7IHJldHVybiBHcmFwaGljc1BvaW50KCk7IH0KKwor
ICAgIHN0YXRpYyBHcmFwaGljc1BvaW50IG5hcnJvd1ByZWNpc2lvbihkb3VibGUgeCwgZG91Ymxl
IHkpOworCisgICAgR3JhcGhpY3NVbml0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KKyAgICBH
cmFwaGljc1VuaXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQorCisgICAgdm9pZCBzZXRYKEdy
YXBoaWNzVW5pdCB4KSB7IG1feCA9IHg7IH0KKyAgICB2b2lkIHNldFkoR3JhcGhpY3NVbml0IHkp
IHsgbV95ID0geTsgfQorICAgIHZvaWQgc2V0KEdyYXBoaWNzVW5pdCB4LCBHcmFwaGljc1VuaXQg
eSkKKyAgICB7CisgICAgICAgIG1feCA9IHg7CisgICAgICAgIG1feSA9IHk7CisgICAgfQorICAg
IHZvaWQgbW92ZShHcmFwaGljc1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAg
ICAgIG1feCArPSBkeDsKKyAgICAgICAgbV95ICs9IGR5OworICAgIH0KKyAgICB2b2lkIG1vdmUo
Y29uc3QgSW50U2l6ZSYgYSkKKyAgICB7CisgICAgICAgIG1feCArPSBhLndpZHRoKCk7CisgICAg
ICAgIG1feSArPSBhLmhlaWdodCgpOworICAgIH0KKyAgICB2b2lkIG1vdmUoY29uc3QgR3JhcGhp
Y3NTaXplJiBhKQorICAgIHsKKyAgICAgICAgbV94ICs9IGEud2lkdGgoKTsKKyAgICAgICAgbV95
ICs9IGEuaGVpZ2h0KCk7CisgICAgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEludFBvaW50JiBh
KQorICAgIHsKKyAgICAgICAgbV94ICs9IGEueCgpOworICAgICAgICBtX3kgKz0gYS55KCk7Cisg
ICAgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEpCisgICAgeworICAg
ICAgICBtX3ggKz0gYS54KCk7CisgICAgICAgIG1feSArPSBhLnkoKTsKKyAgICB9CisgICAgdm9p
ZCBzY2FsZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSkKKyAgICB7CisgICAgICAg
IG1feCAqPSBzeDsKKyAgICAgICAgbV95ICo9IHN5OworICAgIH0KKworICAgIHZvaWQgbm9ybWFs
aXplKCk7CisKKyAgICBHcmFwaGljc1VuaXQgZG90KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV94ICogYS54KCkgKyBtX3kgKiBhLnkoKTsKKyAg
ICB9CisKKyAgICBHcmFwaGljc1VuaXQgbGVuZ3RoKCkgY29uc3Q7CisgICAgR3JhcGhpY3NVbml0
IGxlbmd0aFNxdWFyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1feCAqIG1feCAr
IG1feSAqIG1feTsKKyAgICB9CisKKyAgICBHcmFwaGljc1BvaW50IGV4cGFuZGVkVG8oY29uc3Qg
R3JhcGhpY3NQb2ludCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludChzdGQ6Om1heChtX3gsIG90aGVyLm1feCksIHN0ZDo6bWF4KG1feSwgb3RoZXIubV95
KSk7CisgICAgfQorCisgICAgR3JhcGhpY3NQb2ludCB0cmFuc3Bvc2VkUG9pbnQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV95LCBtX3gpOworICAgIH0KKwor
I2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVNKQorICAgIEdyYXBoaWNzUG9p
bnQoY29uc3QgQ0dQb2ludCYpOworICAgIG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKKyNlbmRp
ZgorCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1F
X0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkg
JiYgT1MoREFSV0lOKSkKKyAgICBHcmFwaGljc1BvaW50KGNvbnN0IE5TUG9pbnQmKTsKKyAgICBv
cGVyYXRvciBOU1BvaW50KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorICAg
IEdyYXBoaWNzUG9pbnQoY29uc3QgUVBvaW50RiYpOworICAgIG9wZXJhdG9yIFFQb2ludEYoKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSEFJS1UpCisgICAgR3JhcGhpY3NQb2ludChj
b25zdCBCUG9pbnQmKTsKKyAgICBvcGVyYXRvciBCUG9pbnQoKSBjb25zdDsKKyNlbmRpZgorCisj
aWYgVVNFKFNLSUEpCisgICAgb3BlcmF0b3IgU2tQb2ludCgpIGNvbnN0OworICAgIEdyYXBoaWNz
UG9pbnQoY29uc3QgU2tQb2ludCYpOworI2VuZGlmCisKKyAgICBHcmFwaGljc1BvaW50IG1hdHJp
eFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworICAgIEdyYXBo
aWNzUG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIEdyYXBoaWNzVW5pdCBtX3gsIG1feTsKK307CisKKworaW5saW5lIEdy
YXBoaWNzUG9pbnQmIG9wZXJhdG9yKz0oR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NT
aXplJiBiKQoreworICAgIGEubW92ZShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOworICAgIHJldHVy
biBhOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCYgb3BlcmF0b3IrPShHcmFwaGljc1BvaW50
JiBhLCBjb25zdCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIGEubW92ZShiLngoKSwgYi55KCkp
OworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NQb2ludCYgb3BlcmF0b3ItPShH
cmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1NpemUmIGIpCit7CisgICAgYS5tb3ZlKC1i
LndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30KKworaW5saW5lIEdyYXBo
aWNzUG9pbnQgb3BlcmF0b3IrKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNz
U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChhLngoKSArIGIud2lkdGgoKSwg
YS55KCkgKyBiLmhlaWdodCgpKTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0b3Ir
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIpCit7CisgICAg
cmV0dXJuIEdyYXBoaWNzUG9pbnQoYS54KCkgKyBiLngoKSwgYS55KCkgKyBiLnkoKSk7Cit9CisK
K2lubGluZSBHcmFwaGljc1NpemUgb3BlcmF0b3ItKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGIpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShhLngoKSAt
IGIueCgpLCBhLnkoKSAtIGIueSgpKTsKK30KKworaW5saW5lIEdyYXBoaWNzUG9pbnQgb3BlcmF0
b3ItKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAg
ICByZXR1cm4gR3JhcGhpY3NQb2ludChhLngoKSAtIGIud2lkdGgoKSwgYS55KCkgLSBiLmhlaWdo
dCgpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHcmFwaGljc1BvaW50JiBh
LCBjb25zdCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIHJldHVybiBhLngoKSA9PSBiLngoKSAm
JiBhLnkoKSA9PSBiLnkoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHcmFw
aGljc1BvaW50JiBhLCBjb25zdCBHcmFwaGljc1BvaW50JiBiKQoreworICAgIHJldHVybiBhLngo
KSAhPSBiLngoKSB8fCBhLnkoKSAhPSBiLnkoKTsKK30KKworaW5saW5lIEdyYXBoaWNzVW5pdCBv
cGVyYXRvciooY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYikK
K3sKKyAgICAvLyBkb3QgcHJvZHVjdAorICAgIHJldHVybiBhLmRvdChiKTsKK30KKworaW5saW5l
IEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAg
IHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kZihwLngoKSkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihwLnkoKSkpKTsKK30KKworaW5saW5lIEludFBvaW50IGZsb29yZWRJ
bnRQb2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChz
dGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOworfQorCitp
bmxpbmUgSW50U2l6ZSBmbG9vcmVkSW50U2l6ZShjb25zdCBHcmFwaGljc1BvaW50JiBwKQorewor
ICAgIHJldHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocC54KCkpLCBzdGF0aWNfY2FzdDxp
bnQ+KHAueSgpKSk7Cit9CisKK0dyYXBoaWNzVW5pdCBmaW5kU2xvcGUoY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBHcmFwaGljc1VuaXQmKTsKKworLy8g
RmluZCBwb2ludCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2YgcG9pbnRzIGlu
dGVyc2VjdC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJzZWN0LgorYm9v
bCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgZDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IGQyLCBHcmFwaGljc1BvaW50JiBpbnRlcnNlY3Rpb24pOworCit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NRdWFkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1F1YWQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NRdWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzVW5pdCBtaW40KEdyYXBoaWNzVW5pdCBhLCBH
cmFwaGljc1VuaXQgYiwgR3JhcGhpY3NVbml0IGMsIEdyYXBoaWNzVW5pdCBkKQoreworICAgIHJl
dHVybiBtaW4obWluKGEsIGIpLCBtaW4oYywgZCkpOworfQorCitzdGF0aWMgaW5saW5lIEdyYXBo
aWNzVW5pdCBtYXg0KEdyYXBoaWNzVW5pdCBhLCBHcmFwaGljc1VuaXQgYiwgR3JhcGhpY3NVbml0
IGMsIEdyYXBoaWNzVW5pdCBkKQoreworICAgIHJldHVybiBtYXgobWF4KGEsIGIpLCBtYXgoYywg
ZCkpOworfQorCitpbmxpbmUgR3JhcGhpY3NVbml0IGRvdChjb25zdCBHcmFwaGljc1NpemUmIGEs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi53aWR0
aCgpICsgYS5oZWlnaHQoKSAqIGIuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29sIGlzUG9pbnRJ
blRyaWFuZ2xlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHQx
LCBjb25zdCBHcmFwaGljc1BvaW50JiB0MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdDMpCit7Cisg
ICAgLy8gQ29tcHV0ZSB2ZWN0b3JzICAgICAgICAKKyAgICBHcmFwaGljc1NpemUgdjAgPSB0MyAt
IHQxOworICAgIEdyYXBoaWNzU2l6ZSB2MSA9IHQyIC0gdDE7CisgICAgR3JhcGhpY3NTaXplIHYy
ID0gcCAtIHQxOworICAgIAorICAgIC8vIENvbXB1dGUgZG90IHByb2R1Y3RzCisgICAgR3JhcGhp
Y3NVbml0IGRvdDAwID0gZG90KHYwLCB2MCk7CisgICAgR3JhcGhpY3NVbml0IGRvdDAxID0gZG90
KHYwLCB2MSk7CisgICAgR3JhcGhpY3NVbml0IGRvdDAyID0gZG90KHYwLCB2Mik7CisgICAgR3Jh
cGhpY3NVbml0IGRvdDExID0gZG90KHYxLCB2MSk7CisgICAgR3JhcGhpY3NVbml0IGRvdDEyID0g
ZG90KHYxLCB2Mik7CisKKyAgICAvLyBDb21wdXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzCisg
ICAgR3JhcGhpY3NVbml0IGludkRlbm9tID0gMS4wZiAvIChkb3QwMCAqIGRvdDExIC0gZG90MDEg
KiBkb3QwMSk7CisgICAgR3JhcGhpY3NVbml0IHUgPSAoZG90MTEgKiBkb3QwMiAtIGRvdDAxICog
ZG90MTIpICogaW52RGVub207CisgICAgR3JhcGhpY3NVbml0IHYgPSAoZG90MDAgKiBkb3QxMiAt
IGRvdDAxICogZG90MDIpICogaW52RGVub207CisKKyAgICAvLyBDaGVjayBpZiBwb2ludCBpcyBp
biB0cmlhbmdsZQorICAgIHJldHVybiAodSA+PSAwKSAmJiAodiA+PSAwKSAmJiAodSArIHYgPD0g
MSk7Cit9CisKK0dyYXBoaWNzUmVjdCBHcmFwaGljc1F1YWQ6OmJvdW5kaW5nQm94KCkgY29uc3QK
K3sKKyAgICBHcmFwaGljc1VuaXQgbGVmdCAgID0gbWluNChtX3AxLngoKSwgbV9wMi54KCksIG1f
cDMueCgpLCBtX3A0LngoKSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCAgICA9IG1pbjQobV9wMS55
KCksIG1fcDIueSgpLCBtX3AzLnkoKSwgbV9wNC55KCkpOworCisgICAgR3JhcGhpY3NVbml0IHJp
Z2h0ICA9IG1heDQobV9wMS54KCksIG1fcDIueCgpLCBtX3AzLngoKSwgbV9wNC54KCkpOworICAg
IEdyYXBoaWNzVW5pdCBib3R0b20gPSBtYXg0KG1fcDEueSgpLCBtX3AyLnkoKSwgbV9wMy55KCks
IG1fcDQueSgpKTsKKyAgICAKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGxlZnQsIHRvcCwgcmln
aHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOworfQorCitib29sIEdyYXBoaWNzUXVhZDo6aXNSZWN0
aWxpbmVhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3AxLngoKSA9PSBtX3AyLngoKSAmJiBt
X3AyLnkoKSA9PSBtX3AzLnkoKSAmJiBtX3AzLngoKSA9PSBtX3A0LngoKSAmJiBtX3A0LnkoKSA9
PSBtX3AxLnkoKSkKKyAgICAgICAgfHwgKG1fcDEueSgpID09IG1fcDIueSgpICYmIG1fcDIueCgp
ID09IG1fcDMueCgpICYmIG1fcDMueSgpID09IG1fcDQueSgpICYmIG1fcDQueCgpID09IG1fcDEu
eCgpKTsKK30KKworYm9vbCBHcmFwaGljc1F1YWQ6OmNvbnRhaW5zUG9pbnQoY29uc3QgR3JhcGhp
Y3NQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNQb2ludEluVHJpYW5nbGUocCwgbV9w
MSwgbV9wMiwgbV9wMykgfHwgaXNQb2ludEluVHJpYW5nbGUocCwgbV9wMSwgbV9wMywgbV9wNCk7
Cit9IAorCisvLyBOb3RlIHRoYXQgd2Ugb25seSBoYW5kbGUgY29udmV4IHF1YWRzIGhlcmUuCiti
b29sIEdyYXBoaWNzUXVhZDo6Y29udGFpbnNRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQob3RoZXIucDEoKSkgJiYgY29udGFp
bnNQb2ludChvdGhlci5wMigpKSAmJiBjb250YWluc1BvaW50KG90aGVyLnAzKCkpICYmIGNvbnRh
aW5zUG9pbnQob3RoZXIucDQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUXVhZC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NR
dWFkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNz
UXVhZF9oCisjZGVmaW5lIEdyYXBoaWNzUXVhZF9oCisKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgR3JhcGhpY3NRdWFkIGlzIGEgY29sbGVjdGlvbiBv
ZiA0IHBvaW50cywgb2Z0ZW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YKKy8vIG1hcHBpbmcg
YSByZWN0YW5nbGUgdGhyb3VnaCB0cmFuc2Zvcm1zLiBXaGVuIGluaXRpYWxpemVkIGZyb20gYSBy
ZWN0LCB0aGUKKy8vIHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVyIGZyb20gdG9wIGxlZnQu
CitjbGFzcyBHcmFwaGljc1F1YWQgeworcHVibGljOgorICAgIEdyYXBoaWNzUXVhZCgpCisgICAg
eworICAgIH0KKworICAgIEdyYXBoaWNzUXVhZChjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwNCkKKyAgICAgICAgOiBtX3AxKHAxKQorICAgICAgICAsIG1fcDIocDIpCisg
ICAgICAgICwgbV9wMyhwMykKKyAgICAgICAgLCBtX3A0KHA0KQorICAgIHsKKyAgICB9CisKKyAg
ICBHcmFwaGljc1F1YWQoY29uc3QgR3JhcGhpY3NSZWN0JiBpblJlY3QpCisgICAgICAgIDogbV9w
MShpblJlY3QubG9jYXRpb24oKSkKKyAgICAgICAgLCBtX3AyKGluUmVjdC5tYXhYKCksIGluUmVj
dC55KCkpCisgICAgICAgICwgbV9wMyhpblJlY3QubWF4WCgpLCBpblJlY3QubWF4WSgpKQorICAg
ICAgICAsIG1fcDQoaW5SZWN0LngoKSwgaW5SZWN0Lm1heFkoKSkKKyAgICB7CisgICAgfQorCisg
ICAgR3JhcGhpY3NQb2ludCBwMSgpIGNvbnN0IHsgcmV0dXJuIG1fcDE7IH0KKyAgICBHcmFwaGlj
c1BvaW50IHAyKCkgY29uc3QgeyByZXR1cm4gbV9wMjsgfQorICAgIEdyYXBoaWNzUG9pbnQgcDMo
KSBjb25zdCB7IHJldHVybiBtX3AzOyB9CisgICAgR3JhcGhpY3NQb2ludCBwNCgpIGNvbnN0IHsg
cmV0dXJuIG1fcDQ7IH0KKworICAgIHZvaWQgc2V0UDEoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkg
eyBtX3AxID0gcDsgfQorICAgIHZvaWQgc2V0UDIoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBt
X3AyID0gcDsgfQorICAgIHZvaWQgc2V0UDMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3Az
ID0gcDsgfQorICAgIHZvaWQgc2V0UDQoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgeyBtX3A0ID0g
cDsgfQorCisgICAgLy8gaXNFbXB0eSB0ZXN0cyB0aGF0IHRoZSBib3VuZGluZyBib3ggaXMgZW1w
dHkuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkKKyAgICAvLyAic2xhbnRlZCIgZW1wdHkgcXVhZHMu
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gYm91bmRpbmdCb3goKS5pc0VtcHR5
KCk7IH0KKworICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhpcyBxdWFkIGNhbiBiZSBsb3NzbGVzc2x5
IHJlcHJlc2VudGVkIGJ5IGEgR3JhcGhpY3NSZWN0LAorICAgIC8vIHRoYXQgaXMsIGlmIHR3byBl
ZGdlcyBhcmUgcGFyYWxsZWwgdG8gdGhlIHgtYXhpcyBhbmQgdGhlIG90aGVyIHR3bworICAgIC8v
IGFyZSBwYXJhbGxlbCB0byB0aGUgeS1heGlzLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUs
IHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NSZWN0IGNhbiBiZSByZXRyaWV2ZWQg
d2l0aCBib3VuZGluZ0JveCgpLgorICAgIGJvb2wgaXNSZWN0aWxpbmVhcigpIGNvbnN0OworCisg
ICAgLy8gVGVzdHMgd2hldGhlciB0aGUgZ2l2ZW4gcG9pbnQgaXMgaW5zaWRlLCBvciBvbiBhbiBl
ZGdlIG9yIGNvcm5lciBvZiB0aGlzIHF1YWQuCisgICAgYm9vbCBjb250YWluc1BvaW50KGNvbnN0
IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKworICAgIC8vIFRlc3RzIHdoZXRoZXIgdGhlIGZvdXIg
Y29ybmVycyBvZiBvdGhlciBhcmUgaW5zaWRlLCBvciBjb2luY2lkZW50IHdpdGggdGhlIHNpZGVz
IG9mIHRoaXMgcXVhZC4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIGZvciBjb252
ZXggcXVhZHMsIGJ1dCB0aGF0IGluY2x1ZGVzIGFsbCBxdWFkcyB0aGF0IG9yaWdpbmF0ZQorICAg
IC8vIGZyb20gdHJhbnNmb3JtZWQgcmVjdHMuCisgICAgYm9vbCBjb250YWluc1F1YWQoY29uc3Qg
R3JhcGhpY3NRdWFkJikgY29uc3Q7CisKKyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdCb3goKSBj
b25zdDsKKyAgICBJbnRSZWN0IGVuY2xvc2luZ0JvdW5kaW5nQm94KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KCkpOworICAgIH0KKwor
ICAgIHZvaWQgbW92ZShjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCkKKyAgICB7CisgICAgICAg
IG1fcDEgKz0gb2Zmc2V0OworICAgICAgICBtX3AyICs9IG9mZnNldDsKKyAgICAgICAgbV9wMyAr
PSBvZmZzZXQ7CisgICAgICAgIG1fcDQgKz0gb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQgbW92
ZShHcmFwaGljc1VuaXQgZHgsIEdyYXBoaWNzVW5pdCBkeSkKKyAgICB7CisgICAgICAgIG1fcDEu
bW92ZShkeCwgZHkpOworICAgICAgICBtX3AyLm1vdmUoZHgsIGR5KTsKKyAgICAgICAgbV9wMy5t
b3ZlKGR4LCBkeSk7CisgICAgICAgIG1fcDQubW92ZShkeCwgZHkpOworICAgIH0KKworICAgIHZv
aWQgc2NhbGUoR3JhcGhpY3NVbml0IGR4LCBHcmFwaGljc1VuaXQgZHkpCisgICAgeworICAgICAg
ICBtX3AxLnNjYWxlKGR4LCBkeSk7CisgICAgICAgIG1fcDIuc2NhbGUoZHgsIGR5KTsKKyAgICAg
ICAgbV9wMy5zY2FsZShkeCwgZHkpOworICAgICAgICBtX3A0LnNjYWxlKGR4LCBkeSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzUG9pbnQgbV9wMTsKKyAgICBHcmFwaGljc1BvaW50
IG1fcDI7CisgICAgR3JhcGhpY3NQb2ludCBtX3AzOworICAgIEdyYXBoaWNzUG9pbnQgbV9wNDsK
K307CisKK2lubGluZSBHcmFwaGljc1F1YWQmIG9wZXJhdG9yKz0oR3JhcGhpY3NRdWFkJiBhLCBj
b25zdCBHcmFwaGljc1NpemUmIGIpCit7CisgICAgYS5tb3ZlKGIpOworICAgIHJldHVybiBhOwor
fQorCitpbmxpbmUgR3JhcGhpY3NRdWFkJiBvcGVyYXRvci09KEdyYXBoaWNzUXVhZCYgYSwgY29u
c3QgR3JhcGhpY3NTaXplJiBiKQoreworICAgIGEubW92ZSgtYi53aWR0aCgpLCAtYi5oZWlnaHQo
KSk7CisgICAgcmV0dXJuIGE7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR3Jh
cGhpY3NRdWFkJiBhLCBjb25zdCBHcmFwaGljc1F1YWQmIGIpCit7CisgICAgcmV0dXJuIGEucDEo
KSA9PSBiLnAxKCkgJiYKKyAgICAgICAgICAgYS5wMigpID09IGIucDIoKSAmJiAKKyAgICAgICAg
ICAgYS5wMygpID09IGIucDMoKSAmJgorICAgICAgICAgICBhLnA0KCkgPT0gYi5wNCgpOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyYXBoaWNzUXVhZCYgYSwgY29uc3QgR3Jh
cGhpY3NRdWFkJiBiKQoreworICAgIHJldHVybiBhLnAxKCkgIT0gYi5wMSgpIHx8CisgICAgICAg
ICAgIGEucDIoKSAhPSBiLnAyKCkgfHwgCisgICAgICAgICAgIGEucDMoKSAhPSBiLnAzKCkgfHwK
KyAgICAgICAgICAgYS5wNCgpICE9IGIucDQoKTsKK30KKworfSAgIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKworI2VuZGlmIC8vIEdyYXBoaWNzUXVhZF9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NSZWN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzUmVjdC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKKworI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NSZWN0OjpHcmFw
aGljc1JlY3QoY29uc3QgSW50UmVjdCYgcikgOiBtX2xvY2F0aW9uKHIubG9jYXRpb24oKSksIG1f
c2l6ZShyLnNpemUoKSkKK3sKK30KKworR3JhcGhpY3NSZWN0IEdyYXBoaWNzUmVjdDo6bmFycm93
UHJlY2lzaW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0
KQoreworICAgIHJldHVybiBHcmFwaGljc1JlY3QobmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1Vu
aXQoeCksIG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHkpLCBuYXJyb3dQcmVjaXNpb25U
b0dyYXBoaWNzVW5pdCh3aWR0aCksIG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KGhlaWdo
dCkpOworfQorCitib29sIEdyYXBoaWNzUmVjdDo6aW50ZXJzZWN0cyhjb25zdCBHcmFwaGljc1Jl
Y3QmIG90aGVyKSBjb25zdAoreworICAgIC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5l
Z2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYg
IW90aGVyLmlzRW1wdHkoKQorICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIu
eCgpIDwgbWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkg
PCBtYXhZKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NSZWN0Ojpjb250YWlucyhjb25zdCBHcmFwaGlj
c1JlY3QmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1h
eFgoKSA+PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZ
KCkgPj0gb3RoZXIubWF4WSgpOworfQorCit2b2lkIEdyYXBoaWNzUmVjdDo6aW50ZXJzZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIpCit7CisgICAgR3JhcGhpY3NVbml0IGwgPSBtYXgoeCgp
LCBvdGhlci54KCkpOworICAgIEdyYXBoaWNzVW5pdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsK
KyAgICBHcmFwaGljc1VuaXQgciA9IG1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgR3Jh
cGhpY3NVbml0IGIgPSBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgLy8gUmV0dXJu
IGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJzZWN0aW5nIGNhc2VzLgorICAg
IGlmIChsID49IHIgfHwgdCA+PSBiKSB7CisgICAgICAgIGwgPSAwOworICAgICAgICB0ID0gMDsK
KyAgICAgICAgciA9IDA7CisgICAgICAgIGIgPSAwOworICAgIH0KKworICAgIHNldExvY2F0aW9u
QW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnVu
aXRlKGNvbnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5IHNw
ZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEdyYXBoaWNzVW5pdCBsID0gbWluKHgoKSwgb3RoZXIu
eCgpKTsKKyAgICBHcmFwaGljc1VuaXQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7CisgICAgR3Jh
cGhpY3NVbml0IHIgPSBtYXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEdyYXBoaWNzVW5p
dCBiID0gbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKKworICAgIHNldExvY2F0aW9uQW5kU2l6
ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OnVuaXRlSWZO
b25aZXJvKGNvbnN0IEdyYXBoaWNzUmVjdCYgb3RoZXIpCit7CisgICAgLy8gSGFuZGxlIGVtcHR5
IHNwZWNpYWwgY2FzZXMgZmlyc3QuCisgICAgaWYgKCFvdGhlci53aWR0aCgpICYmICFvdGhlci5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghd2lkdGgoKSAmJiAhaGVpZ2h0KCkp
IHsKKyAgICAgICAgKnRoaXMgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEdyYXBoaWNzVW5pdCBsZWZ0ID0gbWluKHgoKSwgb3RoZXIueCgpKTsKKyAgICBHcmFwaGljc1Vu
aXQgdG9wID0gbWluKHkoKSwgb3RoZXIueSgpKTsKKyAgICBHcmFwaGljc1VuaXQgcmlnaHQgPSBt
YXgobWF4WCgpLCBvdGhlci5tYXhYKCkpOworICAgIEdyYXBoaWNzVW5pdCBib3R0b20gPSBtYXgo
bWF4WSgpLCBvdGhlci5tYXhZKCkpOworCisgICAgc2V0TG9jYXRpb25BbmRTaXplRnJvbUVkZ2Vz
KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NSZWN0OjpzY2Fs
ZShHcmFwaGljc1VuaXQgc3gsIEdyYXBoaWNzVW5pdCBzeSkKK3sKKyAgICBtX2xvY2F0aW9uLnNl
dFgoeCgpICogc3gpOworICAgIG1fbG9jYXRpb24uc2V0WSh5KCkgKiBzeSk7CisgICAgbV9zaXpl
LnNldFdpZHRoKHdpZHRoKCkgKiBzeCk7CisgICAgbV9zaXplLnNldEhlaWdodChoZWlnaHQoKSAq
IHN5KTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSkKK3sKKyAgICBHcmFwaGljc1VuaXQg
bGVmdCA9IG1pbihwMC54KCksIHAxLngoKSk7CisgICAgR3JhcGhpY3NVbml0IHRvcCA9IG1pbihw
MC55KCksIHAxLnkoKSk7CisgICAgR3JhcGhpY3NVbml0IHJpZ2h0ID0gbWF4KHAwLngoKSwgcDEu
eCgpKTsKKyAgICBHcmFwaGljc1VuaXQgYm90dG9tID0gbWF4KHAwLnkoKSwgcDEueSgpKTsKKwor
ICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20p
OworfQorCituYW1lc3BhY2UgeworLy8gSGVscGVycyBmb3IgMy0gYW5kIDQtd2F5IG1heCBhbmQg
bWluLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1QgbWluMyhjb25zdCBUJiB2MSwgY29uc3Qg
VCYgdjIsIGNvbnN0IFQmIHYzKQoreworICAgIHJldHVybiBtaW4obWluKHYxLCB2MiksIHYzKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUIG1heDMoY29uc3QgVCYgdjEsIGNvbnN0IFQm
IHYyLCBjb25zdCBUJiB2MykKK3sKKyAgICByZXR1cm4gbWF4KG1heCh2MSwgdjIpLCB2Myk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorVCBtaW40KGNvbnN0IFQmIHYxLCBjb25zdCBUJiB2
MiwgY29uc3QgVCYgdjMsIGNvbnN0IFQmIHY0KQoreworICAgIHJldHVybiBtaW4obWluKHYxLCB2
MiksIG1pbih2MywgdjQpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUIG1heDQoY29u
c3QgVCYgdjEsIGNvbnN0IFQmIHYyLCBjb25zdCBUJiB2MywgY29uc3QgVCYgdjQpCit7CisgICAg
cmV0dXJuIG1heChtYXgodjEsIHYyKSwgbWF4KHYzLCB2NCkpOworfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKwordm9pZCBHcmFwaGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcDIpCit7CisgICAgR3JhcGhpY3NVbml0IGxlZnQgPSBtaW4zKHAwLngoKSwgcDEueCgpLCBw
Mi54KCkpOworICAgIEdyYXBoaWNzVW5pdCB0b3AgPSBtaW4zKHAwLnkoKSwgcDEueSgpLCBwMi55
KCkpOworICAgIEdyYXBoaWNzVW5pdCByaWdodCA9IG1heDMocDAueCgpLCBwMS54KCksIHAyLngo
KSk7CisgICAgR3JhcGhpY3NVbml0IGJvdHRvbSA9IG1heDMocDAueSgpLCBwMS55KCksIHAyLnko
KSk7CisKKyAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKK30KKwordm9pZCBHcmFwaGljc1JlY3Q6OmZpdFRvUG9pbnRzKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHAwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzKQoreworICAgIEdyYXBoaWNzVW5pdCBsZWZ0
ID0gbWluNChwMC54KCksIHAxLngoKSwgcDIueCgpLCBwMy54KCkpOworICAgIEdyYXBoaWNzVW5p
dCB0b3AgPSBtaW40KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnkoKSk7CisgICAgR3JhcGhp
Y3NVbml0IHJpZ2h0ID0gbWF4NChwMC54KCksIHAxLngoKSwgcDIueCgpLCBwMy54KCkpOworICAg
IEdyYXBoaWNzVW5pdCBib3R0b20gPSBtYXg0KHAwLnkoKSwgcDEueSgpLCBwMi55KCksIHAzLnko
KSk7CisKKyAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobGVmdCwgdG9wLCByaWdodCwg
Ym90dG9tKTsKK30KKworSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc1VuaXQgbGVmdCA9IGZsb29yKHJlY3QueCgpKTsKKyAg
ICBHcmFwaGljc1VuaXQgdG9wID0gZmxvb3IocmVjdC55KCkpOworICAgIEdyYXBoaWNzVW5pdCB3
aWR0aCA9IGNlaWwocmVjdC5tYXhYKCkpIC0gbGVmdDsKKyAgICBHcmFwaGljc1VuaXQgaGVpZ2h0
ID0gY2VpbChyZWN0Lm1heFkoKSkgLSB0b3A7CisgICAgCisgICAgcmV0dXJuIEludFJlY3QoY2xh
bXBUb0ludGVnZXIobGVmdCksIGNsYW1wVG9JbnRlZ2VyKHRvcCksIAorICAgICAgICAgICAgICAg
ICAgIGNsYW1wVG9JbnRlZ2VyKHdpZHRoKSwgY2xhbXBUb0ludGVnZXIoaGVpZ2h0KSk7Cit9CisK
K0dyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQoreworICAgIGlm
IChzcmNSZWN0LndpZHRoKCkgPT0gMCB8fCBzcmNSZWN0LmhlaWdodCgpID09IDApCisgICAgICAg
IHJldHVybiBHcmFwaGljc1JlY3QoKTsKKworICAgIEdyYXBoaWNzVW5pdCB3aWR0aFNjYWxlID0g
ZGVzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKKyAgICBHcmFwaGljc1VuaXQgaGVp
Z2h0U2NhbGUgPSBkZXN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdChkZXN0UmVjdC54KCkgKyAoci54KCkgLSBzcmNSZWN0LngoKSkgKiB3
aWR0aFNjYWxlLAorICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QueSgpICsgKHIueSgpIC0g
c3JjUmVjdC55KCkpICogaGVpZ2h0U2NhbGUsCisgICAgICAgICAgICAgICAgICAgICByLndpZHRo
KCkgKiB3aWR0aFNjYWxlLCByLmhlaWdodCgpICogaGVpZ2h0U2NhbGUpOworfQorCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1JlY3QuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
UmVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEdyYXBoaWNzUmVjdF9oCisjZGVmaW5lIEdyYXBoaWNzUmVjdF9oCisKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJP
TUlVTSkKK3R5cGVkZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQorI2lmZGVmIE5T
R0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCit0eXBlZGVmIHN0cnVjdCBD
R1JlY3QgTlNSZWN0OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF9OU1JlY3QgTlNSZWN0OworI2Vu
ZGlmCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFz
cyBRUmVjdEY7CitRVF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdYKSAm
JiBVU0UoV1hHQykKK2NsYXNzIHd4UmVjdDJERG91YmxlOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShIQUlLVSkKK2NsYXNzIEJSZWN0OworI2VuZGlmCisKKyNpZiBVU0UoU0tJQSkKK3N0cnVjdCBT
a1JlY3Q7CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19y
ZWN0YW5nbGUgY2Fpcm9fcmVjdGFuZ2xlX3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgUExBVEZPUk0oT1BFTlZHKQorY2xhc3MgVkdSZWN0OworI2VuZGlmCisKK2NsYXNz
IEludFJlY3Q7CitjbGFzcyBJbnRQb2ludDsKKworY2xhc3MgR3JhcGhpY3NSZWN0IHsKK3B1Ymxp
YzoKKyAgICBHcmFwaGljc1JlY3QoKSB7IH0KKyAgICBHcmFwaGljc1JlY3QoY29uc3QgR3JhcGhp
Y3NQb2ludCYgbG9jYXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBt
X2xvY2F0aW9uKGxvY2F0aW9uKSwgbV9zaXplKHNpemUpIHsgfQorICAgIEdyYXBoaWNzUmVjdChH
cmFwaGljc1VuaXQgeCwgR3JhcGhpY3NVbml0IHksIEdyYXBoaWNzVW5pdCB3aWR0aCwgR3JhcGhp
Y3NVbml0IGhlaWdodCkKKyAgICAgICAgOiBtX2xvY2F0aW9uKEdyYXBoaWNzUG9pbnQoeCwgeSkp
LCBtX3NpemUoR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KKyAgICBHcmFwaGljc1Jl
Y3QoY29uc3QgSW50UmVjdCYpOworCisgICAgc3RhdGljIEdyYXBoaWNzUmVjdCBuYXJyb3dQcmVj
aXNpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOwor
CisgICAgR3JhcGhpY3NQb2ludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247
IH0KKyAgICBHcmFwaGljc1NpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisg
ICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBsb2NhdGlvbikgeyBtX2xv
Y2F0aW9uID0gbG9jYXRpb247IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXpl
JiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIEdyYXBoaWNzVW5pdCB4KCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KKyAgICBHcmFwaGljc1VuaXQgeSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9CisgICAgR3JhcGhpY3NVbml0IG1heFgoKSBjb25zdCB7
IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgR3JhcGhpY3NVbml0IG1heFkoKSBjb25zdCB7
IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQorICAgIEdyYXBoaWNzVW5pdCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CisgICAgR3JhcGhpY3NVbml0IGhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorCisgICAgdm9pZCBzZXRYKEdyYXBoaWNz
VW5pdCB4KSB7IG1fbG9jYXRpb24uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0WShHcmFwaGljc1Vu
aXQgeSkgeyBtX2xvY2F0aW9uLnNldFkoeSk7IH0KKyAgICB2b2lkIHNldFdpZHRoKEdyYXBoaWNz
VW5pdCB3aWR0aCkgeyBtX3NpemUuc2V0V2lkdGgod2lkdGgpOyB9CisgICAgdm9pZCBzZXRIZWln
aHQoR3JhcGhpY3NVbml0IGhlaWdodCkgeyBtX3NpemUuc2V0SGVpZ2h0KGhlaWdodCk7IH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KKwor
ICAgIEdyYXBoaWNzUG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NQb2ludCh4
KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQorCisgICAgdm9pZCBtb3Zl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0YTsgfSAKKyAg
ICB2b2lkIG1vdmVCeShjb25zdCBHcmFwaGljc1BvaW50JiBkZWx0YSkgeyBtX2xvY2F0aW9uLm1v
dmUoZGVsdGEueCgpLCBkZWx0YS55KCkpOyB9CisgICAgdm9pZCBtb3ZlKEdyYXBoaWNzVW5pdCBk
eCwgR3JhcGhpY3NVbml0IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9CisKKyAgICB2
b2lkIGV4cGFuZChjb25zdCBHcmFwaGljc1NpemUmIHNpemUpIHsgbV9zaXplICs9IHNpemU7IH0K
KyAgICB2b2lkIGV4cGFuZChHcmFwaGljc1VuaXQgZHcsIEdyYXBoaWNzVW5pdCBkaCkgeyBtX3Np
emUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEdyYXBoaWNzU2l6
ZSYgc2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoR3JhcGhpY3NV
bml0IGR3LCBHcmFwaGljc1VuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgtZHcsIC1kaCk7IH0KKwor
ICAgIHZvaWQgc2hpZnRYRWRnZVRvKEdyYXBoaWNzVW5pdCBlZGdlKQorICAgIHsKKyAgICAgICAg
R3JhcGhpY3NVbml0IGRlbHRhID0gZWRnZSAtIHgoKTsKKyAgICAgICAgc2V0WChlZGdlKTsKKyAg
ICAgICAgc2V0V2lkdGgoc3RkOjptYXg8R3JhcGhpY3NVbml0PigwLjBmLCB3aWR0aCgpIC0gZGVs
dGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oR3JhcGhpY3NVbml0IGVkZ2Up
CisgICAgeworICAgICAgICBHcmFwaGljc1VuaXQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOworICAg
ICAgICBzZXRXaWR0aChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYsIHdpZHRoKCkgKyBkZWx0
YSkpOworICAgIH0KKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhHcmFwaGljc1VuaXQgZWRnZSkKKyAg
ICB7CisgICAgICAgIEdyYXBoaWNzVW5pdCBkZWx0YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNl
dFkoZWRnZSk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heDxHcmFwaGljc1VuaXQ+KDAuMGYs
IGhlaWdodCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oR3Jh
cGhpY3NVbml0IGVkZ2UpCisgICAgeworICAgICAgICBHcmFwaGljc1VuaXQgZGVsdGEgPSBlZGdl
IC0gbWF4WSgpOworICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXg8R3JhcGhpY3NVbml0PigwLjBm
LCBoZWlnaHQoKSArIGRlbHRhKSk7CisgICAgfQorCisgICAgR3JhcGhpY3NQb2ludCBtaW5YTWlu
WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExl
ZnQKKyAgICBHcmFwaGljc1BvaW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gR3Jh
cGhpY3NQb2ludChtX2xvY2F0aW9uLngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnko
KSk7IH0gLy8gdHlwaWNhbGx5IHRvcFJpZ2h0CisgICAgR3JhcGhpY3NQb2ludCBtaW5YTWF4WUNv
cm5lcigpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9j
YXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAor
ICAgIEdyYXBoaWNzUG9pbnQgbWF4WE1heFlDb3JuZXIoKSBjb25zdCB7IHJldHVybiBHcmFwaGlj
c1BvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9jYXRpb24ueSgpICsg
bV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQKKworICAgIGJvb2wg
aW50ZXJzZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OworCisgICAgdm9pZCBpbnRlcnNlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAg
ICB2b2lkIHVuaXRlSWZOb25aZXJvKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworCisgICAgLy8gTm90
ZSwgdGhpcyBkb2Vzbid0IG1hdGNoIHdoYXQgSW50UmVjdDo6Y29udGFpbnMoSW50UG9pbnQmKSBk
b2VzOyB0aGUgaW50IHZlcnNpb24KKyAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNvbnRh
aW5tZW50IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBmbG9h
dHMuCisgICAgYm9vbCBjb250YWlucyhHcmFwaGljc1VuaXQgcHgsIEdyYXBoaWNzVW5pdCBweSkg
Y29uc3QKKyAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDw9IG1heFgoKSAmJiBweSA+
PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9CisgICAgYm9vbCBjb250YWlucyhjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMocG9pbnQueCgpLCBwb2ludC55
KCkpOyB9CisKKyAgICB2b2lkIGluZmxhdGVYKEdyYXBoaWNzVW5pdCBkeCkKKyAgICB7CisgICAg
ICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsKKyAgICAgICAgbV9zaXpl
LnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CisgICAgfQorICAgIHZvaWQgaW5m
bGF0ZVkoR3JhcGhpY3NVbml0IGR5KQorICAgIHsKKyAgICAgICAgbV9sb2NhdGlvbi5zZXRZKG1f
bG9jYXRpb24ueSgpIC0gZHkpOworICAgICAgICBtX3NpemUuc2V0SGVpZ2h0KG1fc2l6ZS5oZWln
aHQoKSArIGR5ICsgZHkpOworICAgIH0KKyAgICB2b2lkIGluZmxhdGUoR3JhcGhpY3NVbml0IGQp
IHsgaW5mbGF0ZVgoZCk7IGluZmxhdGVZKGQpOyB9CisgICAgdm9pZCBzY2FsZShHcmFwaGljc1Vu
aXQgcykgeyBzY2FsZShzLCBzKTsgfQorICAgIHZvaWQgc2NhbGUoR3JhcGhpY3NVbml0IHN4LCBH
cmFwaGljc1VuaXQgc3kpOworCisgICAgR3JhcGhpY3NSZWN0IHRyYW5zcG9zZWRSZWN0KCkgY29u
c3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KG1fbG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCksIG1f
c2l6ZS50cmFuc3Bvc2VkU2l6ZSgpKTsgfQorCisgICAgLy8gUmUtaW5pdGlhbGl6ZXMgdGhpcyBy
ZWN0YW5nbGUgdG8gZml0IHRoZSBzZXRzIG9mIHBhc3NlZCBwb2ludHMuCisgICAgdm9pZCBmaXRU
b1BvaW50cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEp
OworICAgIHZvaWQgZml0VG9Qb2ludHMoY29uc3QgR3JhcGhpY3NQb2ludCYgcDAsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMik7CisgICAgdm9pZCBmaXRU
b1BvaW50cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMyk7CisKKyNp
ZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKKyAgICBHcmFwaGljc1JlY3Qo
Y29uc3QgQ0dSZWN0Jik7CisgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7CisjZW5kaWYKKwor
I2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19D
R0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgICB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikpCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IE5TUmVjdCYpOworICAgIG9wZXJhdG9y
IE5TUmVjdCgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKKyAgICBHcmFwaGlj
c1JlY3QoY29uc3QgUVJlY3RGJik7CisgICAgb3BlcmF0b3IgUVJlY3RGKCkgY29uc3Q7CisgICAg
R3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWQoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
V1gpICYmIFVTRShXWEdDKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCB3eFJlY3QyRERvdWJsZSYp
OworICAgIG9wZXJhdG9yIHd4UmVjdDJERG91YmxlKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKEhBSUtVKQorICAgIEdyYXBoaWNzUmVjdChjb25zdCBCUmVjdCYpOworICAgIG9wZXJh
dG9yIEJSZWN0KCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShTS0lBKQorICAgIEdyYXBoaWNz
UmVjdChjb25zdCBTa1JlY3QmKTsKKyAgICBvcGVyYXRvciBTa1JlY3QoKSBjb25zdDsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oT1BFTlZHKQorICAgIG9wZXJhdG9yIFZHUmVjdCgpIGNvbnN0Owor
I2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisgICAgR3JhcGhpY3NSZWN0KGNvbnN0IGNhaXJvX3Jl
Y3RhbmdsZV90Jik7CisgICAgb3BlcmF0b3IgY2Fpcm9fcmVjdGFuZ2xlX3QoKSBjb25zdDsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzUG9pbnQgbV9sb2NhdGlvbjsKKyAgICBHcmFw
aGljc1NpemUgbV9zaXplOworCisgICAgdm9pZCBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMo
R3JhcGhpY3NVbml0IGxlZnQsIEdyYXBoaWNzVW5pdCB0b3AsIEdyYXBoaWNzVW5pdCByaWdodCwg
R3JhcGhpY3NVbml0IGJvdHRvbSkKKyAgICB7CisgICAgICAgIG1fbG9jYXRpb24uc2V0KGxlZnQs
IHRvcCk7CisgICAgICAgIG1fc2l6ZS5zZXRXaWR0aChyaWdodCAtIGxlZnQpOworICAgICAgICBt
X3NpemUuc2V0SGVpZ2h0KGJvdHRvbSAtIHRvcCk7CisgICAgfQorfTsKKworaW5saW5lIEdyYXBo
aWNzUmVjdCBpbnRlcnNlY3Rpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBhLCBjb25zdCBHcmFwaGlj
c1JlY3QmIGIpCit7CisgICAgR3JhcGhpY3NSZWN0IGMgPSBhOworICAgIGMuaW50ZXJzZWN0KGIp
OworICAgIHJldHVybiBjOworfQorCitpbmxpbmUgR3JhcGhpY3NSZWN0IHVuaW9uUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYikKK3sKKyAgICBHcmFwaGlj
c1JlY3QgYyA9IGE7CisgICAgYy51bml0ZShiKTsKKyAgICByZXR1cm4gYzsKK30KKworaW5saW5l
IEdyYXBoaWNzUmVjdCYgb3BlcmF0b3IrPShHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgYikKK3sKKyAgICBhLm1vdmUoYi54KCksIGIueSgpKTsKKyAgICBhLnNldFdpZHRoKGEu
d2lkdGgoKSArIGIud2lkdGgoKSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSArIGIuaGVp
Z2h0KCkpOworICAgIHJldHVybiBhOworfQorCitpbmxpbmUgR3JhcGhpY3NSZWN0IG9wZXJhdG9y
Kyhjb25zdCBHcmFwaGljc1JlY3QmIGEsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYikKK3sKKyAgICBH
cmFwaGljc1JlY3QgYyA9IGE7CisgICAgYyArPSBiOworICAgIHJldHVybiBjOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdyYXBoaWNzUmVjdCYgYSwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBiKQoreworICAgIHJldHVybiBhLmxvY2F0aW9uKCkgPT0gYi5sb2NhdGlvbigpICYmIGEu
c2l6ZSgpID09IGIuc2l6ZSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdy
YXBoaWNzUmVjdCYgYSwgY29uc3QgR3JhcGhpY3NSZWN0JiBiKQoreworICAgIHJldHVybiBhLmxv
Y2F0aW9uKCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOworfQorCitJ
bnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisKKy8vIE1hcCBy
ZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxlbnQgcmVjdCBpbiBkZXN0UmVjdC4KK0dy
YXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgciwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBzcmNSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKKworfQorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NTaXplLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzU2l6ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NT
aXplLmgiCisKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNz
U2l6ZTo6R3JhcGhpY3NTaXplKGNvbnN0IEludFNpemUmIHNpemUpIDogbV93aWR0aChzaXplLndp
ZHRoKCkpLCBtX2hlaWdodChzaXplLmhlaWdodCgpKQoreworfQorCitHcmFwaGljc1VuaXQgR3Jh
cGhpY3NTaXplOjpkaWFnb25hbExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNxcnRmKGRp
YWdvbmFsTGVuZ3RoU3F1YXJlZCgpKTsKK30KKworR3JhcGhpY3NTaXplIEdyYXBoaWNzU2l6ZTo6
bmFycm93UHJlY2lzaW9uKGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkKK3sKKyAgICByZXR1
cm4gR3JhcGhpY3NTaXplKG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHdpZHRoKSwgbmFy
cm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQoaGVpZ2h0KSk7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzU2l6ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NTaXplLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
R3JhcGhpY3NTaXplX2gKKyNkZWZpbmUgR3JhcGhpY3NTaXplX2gKKworI2luY2x1ZGUgIkludFBv
aW50LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2lmIFVTRShDRykgfHwgKFBM
QVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCit0
eXBlZGVmIHN0cnVjdCBDR1NpemUgQ0dTaXplOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMp
IHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFFUKSAm
JiBVU0UoUVRLSVQpKQorI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZ
X1RZUEVTCit0eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOworI2Vsc2UKK3R5cGVkZWYgc3Ry
dWN0IF9OU1NpemUgTlNTaXplOworI2VuZGlmCisjZW5kaWYKKworCisjaWYgVVNFKENHKQordHlw
ZWRlZiBDR0Zsb2F0IEdyYXBoaWNzVW5pdDsKKyNlbHNlCit0eXBlZGVmIGZsb2F0IEdyYXBoaWNz
VW5pdDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7CisK
K2NsYXNzIEdyYXBoaWNzU2l6ZSB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NTaXplKCkgOiBtX3dp
ZHRoKDApLCBtX2hlaWdodCgwKSB7IH0KKyAgICBHcmFwaGljc1NpemUoR3JhcGhpY3NVbml0IHdp
ZHRoLCBHcmFwaGljc1VuaXQgaGVpZ2h0KSA6IG1fd2lkdGgod2lkdGgpLCBtX2hlaWdodChoZWln
aHQpIHsgfQorICAgIEdyYXBoaWNzU2l6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICBzdGF0aWMg
R3JhcGhpY3NTaXplIG5hcnJvd1ByZWNpc2lvbihkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQp
OworCisgICAgR3JhcGhpY3NVbml0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQor
ICAgIEdyYXBoaWNzVW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorCisg
ICAgdm9pZCBzZXRXaWR0aChHcmFwaGljc1VuaXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9
CisgICAgdm9pZCBzZXRIZWlnaHQoR3JhcGhpY3NVbml0IGhlaWdodCkgeyBtX2hlaWdodCA9IGhl
aWdodDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aCA8PSAw
IHx8IG1faGVpZ2h0IDw9IDA7IH0KKworICAgIEdyYXBoaWNzVW5pdCBhc3BlY3RSYXRpbygpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGggLyBtX2hlaWdodDsgfQorCisgICAgdm9pZCBleHBhbmQoR3Jh
cGhpY3NVbml0IHdpZHRoLCBHcmFwaGljc1VuaXQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV93
aWR0aCArPSB3aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgKz0gaGVpZ2h0OworICAgIH0KKworICAg
IHZvaWQgc2NhbGUoR3JhcGhpY3NVbml0IHMpIHsgc2NhbGUocywgcyk7IH0KKworICAgIHZvaWQg
c2NhbGUoR3JhcGhpY3NVbml0IHNjYWxlWCwgR3JhcGhpY3NVbml0IHNjYWxlWSkKKyAgICB7Cisg
ICAgICAgIG1fd2lkdGggKj0gc2NhbGVYOworICAgICAgICBtX2hlaWdodCAqPSBzY2FsZVk7Cisg
ICAgfQorCisgICAgR3JhcGhpY3NTaXplIGV4cGFuZGVkVG8oY29uc3QgR3JhcGhpY3NTaXplJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc1NpemUobV93aWR0aCA+
IG90aGVyLm1fd2lkdGggPyBtX3dpZHRoIDogb3RoZXIubV93aWR0aCwKKyAgICAgICAgICAgIG1f
aGVpZ2h0ID4gb3RoZXIubV9oZWlnaHQgPyBtX2hlaWdodCA6IG90aGVyLm1faGVpZ2h0KTsKKyAg
ICB9CisKKyAgICBHcmFwaGljc1NpemUgc2hydW5rVG8oY29uc3QgR3JhcGhpY3NTaXplJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgcmV0dXJuIEdyYXBoaWNzU2l6ZShtX3dpZHRoIDwgb3Ro
ZXIubV93aWR0aCA/IG1fd2lkdGggOiBvdGhlci5tX3dpZHRoLAorICAgICAgICAgICBtX2hlaWdo
dCA8IG90aGVyLm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQor
CisgICAgR3JhcGhpY3NVbml0IGRpYWdvbmFsTGVuZ3RoKCkgY29uc3Q7CisgICAgR3JhcGhpY3NV
bml0IGRpYWdvbmFsTGVuZ3RoU3F1YXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV93aWR0aCAqIG1fd2lkdGggKyBtX2hlaWdodCAqIG1faGVpZ2h0OworICAgIH0KKworICAgIEdy
YXBoaWNzU2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
R3JhcGhpY3NTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKKyNpZiBVU0UoQ0cpIHx8
IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NSVVN
KQorICAgIGV4cGxpY2l0IEdyYXBoaWNzU2l6ZShjb25zdCBDR1NpemUmKTsgLy8gZG9uJ3QgZG8g
dGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKKyAgICBvcGVyYXRvciBDR1NpemUoKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRS
WV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICAgIHx8IChQTEFURk9S
TShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQp
KQorICAgIGV4cGxpY2l0IEdyYXBoaWNzU2l6ZShjb25zdCBOU1NpemUgJik7IC8vIGRvbid0IGRv
IHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CisgICAgb3BlcmF0b3IgTlNTaXplKCkg
Y29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc1VuaXQgbV93aWR0aCwgbV9o
ZWlnaHQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR3JhcGhpY3NVbml0IG5hcnJvd1By
ZWNpc2lvblRvR3JhcGhpY3NVbml0KFQpOworICAgIAordGVtcGxhdGU8PgoraW5saW5lIEdyYXBo
aWNzVW5pdCBuYXJyb3dQcmVjaXNpb25Ub0dyYXBoaWNzVW5pdChkb3VibGUgbnVtYmVyKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG51bWJlcik7Cit9CisKK2lubGlu
ZSBHcmFwaGljc1NpemUmIG9wZXJhdG9yKz0oR3JhcGhpY3NTaXplJiBhLCBjb25zdCBHcmFwaGlj
c1NpemUmIGIpCit7CisgICAgYS5zZXRXaWR0aChhLndpZHRoKCkgKyBiLndpZHRoKCkpOworICAg
IGEuc2V0SGVpZ2h0KGEuaGVpZ2h0KCkgKyBiLmhlaWdodCgpKTsKKyAgICByZXR1cm4gYTsKK30K
KworaW5saW5lIEdyYXBoaWNzU2l6ZSYgb3BlcmF0b3ItPShHcmFwaGljc1NpemUmIGEsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICBhLnNldFdpZHRoKGEud2lkdGgoKSAtIGIud2lkdGgo
KSk7CisgICAgYS5zZXRIZWlnaHQoYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworICAgIHJldHVy
biBhOworfQorCitpbmxpbmUgR3JhcGhpY3NTaXplIG9wZXJhdG9yKyhjb25zdCBHcmFwaGljc1Np
emUmIGEsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXpl
KGEud2lkdGgoKSArIGIud2lkdGgoKSwgYS5oZWlnaHQoKSArIGIuaGVpZ2h0KCkpOworfQorCitp
bmxpbmUgR3JhcGhpY3NTaXplIG9wZXJhdG9yLShjb25zdCBHcmFwaGljc1NpemUmIGEsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NTaXplKGEud2lkdGgoKSAt
IGIud2lkdGgoKSwgYS5oZWlnaHQoKSAtIGIuaGVpZ2h0KCkpOworfQorCitpbmxpbmUgR3JhcGhp
Y3NTaXplIG9wZXJhdG9yLShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCit7CisgICAgcmV0dXJu
IEdyYXBoaWNzU2l6ZSgtc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR3JhcGhpY3NTaXplJiBhLCBjb25zdCBHcmFwaGljc1Np
emUmIGIpCit7CisgICAgcmV0dXJuIGEud2lkdGgoKSA9PSBiLndpZHRoKCkgJiYgYS5oZWlnaHQo
KSA9PSBiLmhlaWdodCgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdyYXBo
aWNzU2l6ZSYgYSwgY29uc3QgR3JhcGhpY3NTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRo
KCkgIT0gYi53aWR0aCgpIHx8IGEuaGVpZ2h0KCkgIT0gYi5oZWlnaHQoKTsKK30KKworaW5saW5l
IEludFNpemUgcm91bmRlZEludFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBwKQoreworICAgIHJl
dHVybiBJbnRTaXplKHN0YXRpY19jYXN0PGludD4ocm91bmRmKHAud2lkdGgoKSkpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJvdW5kZihwLmhlaWdodCgpKSkpOworfQorCitpbmxpbmUgSW50U2l6ZSBleHBh
bmRlZEludFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBwKQoreworICAgIHJldHVybiBJbnRTaXpl
KGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHAud2lkdGgoKSkpLCBjbGFtcFRvSW50ZWdlcihjZWlsZihw
LmhlaWdodCgpKSkpOworfQorCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBvaW50KGNvbnN0
IEdyYXBoaWNzU2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50
PihwLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAuaGVpZ2h0KCkpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3JhcGhpY3NTaXplX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw3ICs3Niw3IEBAIGJvb2wgSW1hZ2U6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWYKICAgICByZXR1cm4gZGF0YUNoYW5nZWQoYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAotdm9p
ZCBJbWFnZTo6ZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgSW1hZ2U6OmZpbGxXaXRoU29s
aWRDb2xvcihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKGNvbG9yLmFscGhhKCkgPD0gMCkKICAgICAgICAg
cmV0dXJuOwpAQCAtODcsNyArODcsNyBAQCB2b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3Io
R3JhcGhpY3NDCiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0
b3IpOwogfQogCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBjYWxjdWxhdGVQYXR0ZXJuU2NhbGUo
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIEltYWdl
OjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlKQorc3RhdGljIGlubGluZSBH
cmFwaGljc1NpemUgY2FsY3VsYXRlUGF0dGVyblNjYWxlKGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0
UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSkKIHsKICAgICBmbG9hdCBzY2FsZVggPSAxLjBmLCBzY2Fs
ZVkgPSAxLjBmOwogICAgIApAQCAtMTAxLDExICsxMDEsMTEgQEAgc3RhdGljIGlubGluZSBGbG9h
dFNpemUgY2FsY3VsYXRlUGF0dGVybgogICAgIGlmICh2UnVsZSA9PSBJbWFnZTo6UmVwZWF0VGls
ZSkKICAgICAgICAgc2NhbGVZID0gc2NhbGVYOwogICAgIAotICAgIHJldHVybiBGbG9hdFNpemUo
c2NhbGVYLCBzY2FsZVkpOworICAgIHJldHVybiBHcmFwaGljc1NpemUoc2NhbGVYLCBzY2FsZVkp
OwogfQogCiAKLXZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25z
dCBGbG9hdFNpemUmIHNjYWxlZFRpbGVTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3ApCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250
ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1Bv
aW50JiBzcmNQb2ludCwgY29uc3QgR3JhcGhpY3NTaXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBp
ZiAobWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9y
KGN0eHQsIGRlc3RSZWN0LCBzb2xpZENvbG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwpAQCAt
MTE3LDIzICsxMTcsMjMgQEAgdm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCog
YwogICAgIEFTU0VSVCghaXNCaXRtYXBJbWFnZSgpIHx8IHN0YXRpY19jYXN0PEJpdG1hcEltYWdl
Kj4odGhpcyktPm5vdFNvbGlkQ29sb3IoKSk7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSBpbnRy
aW5zaWNUaWxlU2l6ZSA9IHNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgaW50cmluc2ljVGlsZVNp
emUgPSBzaXplKCk7CiAgICAgaWYgKGhhc1JlbGF0aXZlV2lkdGgoKSkKICAgICAgICAgaW50cmlu
c2ljVGlsZVNpemUuc2V0V2lkdGgoc2NhbGVkVGlsZVNpemUud2lkdGgoKSk7CiAgICAgaWYgKGhh
c1JlbGF0aXZlSGVpZ2h0KCkpCiAgICAgICAgIGludHJpbnNpY1RpbGVTaXplLnNldEhlaWdodChz
Y2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGUoc2NhbGVkVGls
ZVNpemUud2lkdGgoKSAvIGludHJpbnNpY1RpbGVTaXplLndpZHRoKCksCisgICAgR3JhcGhpY3NT
aXplIHNjYWxlKHNjYWxlZFRpbGVTaXplLndpZHRoKCkgLyBpbnRyaW5zaWNUaWxlU2l6ZS53aWR0
aCgpLAogICAgICAgICAgICAgICAgICAgICBzY2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSAvIGludHJp
bnNpY1RpbGVTaXplLmhlaWdodCgpKTsKIAotICAgIEZsb2F0UmVjdCBvbmVUaWxlUmVjdDsKKyAg
ICBHcmFwaGljc1JlY3Qgb25lVGlsZVJlY3Q7CiAgICAgb25lVGlsZVJlY3Quc2V0WChkZXN0UmVj
dC54KCkgKyBmbW9kZihmbW9kZigtc3JjUG9pbnQueCgpLCBzY2FsZWRUaWxlU2l6ZS53aWR0aCgp
KSAtIHNjYWxlZFRpbGVTaXplLndpZHRoKCksIHNjYWxlZFRpbGVTaXplLndpZHRoKCkpKTsKICAg
ICBvbmVUaWxlUmVjdC5zZXRZKGRlc3RSZWN0LnkoKSArIGZtb2RmKGZtb2RmKC1zcmNQb2ludC55
KCksIHNjYWxlZFRpbGVTaXplLmhlaWdodCgpKSAtIHNjYWxlZFRpbGVTaXplLmhlaWdodCgpLCBz
Y2FsZWRUaWxlU2l6ZS5oZWlnaHQoKSkpOwogICAgIG9uZVRpbGVSZWN0LnNldFNpemUoc2NhbGVk
VGlsZVNpemUpOwogICAgIAogICAgIC8vIENoZWNrIGFuZCBzZWUgaWYgYSBzaW5nbGUgZHJhdyBv
ZiB0aGUgaW1hZ2UgY2FuIGNvdmVyIHRoZSBlbnRpcmUgYXJlYSB3ZSBhcmUgc3VwcG9zZWQgdG8g
dGlsZS4gICAgCiAgICAgaWYgKG9uZVRpbGVSZWN0LmNvbnRhaW5zKGRlc3RSZWN0KSkgewotICAg
ICAgICBGbG9hdFJlY3QgdmlzaWJsZVNyY1JlY3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCB2aXNp
YmxlU3JjUmVjdDsKICAgICAgICAgdmlzaWJsZVNyY1JlY3Quc2V0WCgoZGVzdFJlY3QueCgpIC0g
b25lVGlsZVJlY3QueCgpKSAvIHNjYWxlLndpZHRoKCkpOwogICAgICAgICB2aXNpYmxlU3JjUmVj
dC5zZXRZKChkZXN0UmVjdC55KCkgLSBvbmVUaWxlUmVjdC55KCkpIC8gc2NhbGUuaGVpZ2h0KCkp
OwogICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRXaWR0aChkZXN0UmVjdC53aWR0aCgpIC8gc2Nh
bGUud2lkdGgoKSk7CkBAIC0xNDMsMTQgKzE0MywxNCBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQo
R3JhcGhpY3NDb250ZXh0KiBjCiAgICAgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5U
cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oc2NhbGUud2lkdGgo
KSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCB0aWxlUmVjdChGbG9hdFBvaW50KCks
IGludHJpbnNpY1RpbGVTaXplKTsgICAgCisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0KEdyYXBo
aWNzUG9pbnQoKSwgaW50cmluc2ljVGlsZVNpemUpOyAgICAKICAgICBkcmF3UGF0dGVybihjdHh0
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgb25lVGlsZVJlY3QubG9jYXRpb24oKSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwogICAgIAogICAgIHN0YXJ0QW5pbWF0aW9uKCk7
CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB3aXRoIHRoZSBvdGhlciBkcmF3VGlsZWQgZXZlbnR1YWxs
eSwgc2luY2Ugd2UgbmVlZCBhIGNvbWJpbmF0aW9uIG9mIGJvdGggZm9yIHNvbWUgdGhpbmdzLgot
dm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBU
aWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIFRp
bGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENv
bG9yKCkpIHsKICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRzdFJlY3QsIHNvbGlk
Q29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBvcCk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBJ
bWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogYwogICAgIGlmICh2UnVsZSA9PSBSb3Vu
ZFRpbGUpCiAgICAgICAgIHZSdWxlID0gUmVwZWF0VGlsZTsKIAotICAgIEZsb2F0U2l6ZSBzY2Fs
ZSA9IGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShkc3RSZWN0LCBzcmNSZWN0LCBoUnVsZSwgdlJ1bGUp
OworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZSA9IGNhbGN1bGF0ZVBhdHRlcm5TY2FsZShkc3RSZWN0
LCBzcmNSZWN0LCBoUnVsZSwgdlJ1bGUpOwogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJh
bnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGVOb25Vbmlmb3JtKHNjYWxlLndpZHRoKCks
IHNjYWxlLmhlaWdodCgpKTsKIAogICAgIC8vIFdlIHdhbnQgdG8gY29uc3RydWN0IHRoZSBwaGFz
ZSBzdWNoIHRoYXQgdGhlIHBhdHRlcm4gaXMgY2VudGVyZWQgKHdoZW4gc3RyZXRjaCBpcyBub3QK
QEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0
KiBjCiAgICAgICAgIGhQaGFzZSAtPSBmbW9kZihkc3RSZWN0LndpZHRoKCksIHNjYWxlLndpZHRo
KCkgKiBzcmNSZWN0LndpZHRoKCkpIC8gMi4wZjsKICAgICBpZiAodlJ1bGUgPT0gSW1hZ2U6OlJl
cGVhdFRpbGUpCiAgICAgICAgIHZQaGFzZSAtPSBmbW9kZihkc3RSZWN0LmhlaWdodCgpLCBzY2Fs
ZS5oZWlnaHQoKSAqIHNyY1JlY3QuaGVpZ2h0KCkpIC8gMi4wZjsKLSAgICBGbG9hdFBvaW50IHBh
dHRlcm5QaGFzZShkc3RSZWN0LngoKSAtIGhQaGFzZSwgZHN0UmVjdC55KCkgLSB2UGhhc2UpOwor
ICAgIEdyYXBoaWNzUG9pbnQgcGF0dGVyblBoYXNlKGRzdFJlY3QueCgpIC0gaFBoYXNlLCBkc3RS
ZWN0LnkoKSAtIHZQaGFzZSk7CiAgICAgCiAgICAgZHJhd1BhdHRlcm4oY3R4dCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkc3RS
ZWN0KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDkgKzY2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dka1Bp
eGJ1ZiBHZGtQaXhidWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2lu
dDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzUG9p
bnQ7CitjbGFzcyBHcmFwaGljc1JlY3Q7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CkBAIC0xNTMsMjEgKzE1MywyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1h
Z2U+IGxvYWRQbGF0Zm9ybVRoZW1lSWNvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2l6ZSk7CiAj
ZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKIAogcHJv
dGVjdGVkOgogICAgIEltYWdlKEltYWdlT2JzZXJ2ZXIqID0gMCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCBmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CisgICAgc3RhdGljIHZvaWQgZmlsbFdpdGhTb2xpZENvbG9yKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgQ29sb3ImLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgLy8gVGhl
IENvbG9yU3BhY2UgcGFyYW1ldGVyIHdpbGwgb25seSBiZSB1c2VkIGZvciB1bnRhZ2dlZCBpbWFn
ZXMuCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGlu
Z1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJj
ZVNpemUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IpIHsgfQogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwotICAg
IHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdm9p
ZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIFRpbGVSdWxlIGhSdWxlLCBUaWxlUnVsZSB2UnVsZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJl
Y3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yKSA9IDA7CisgICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1BvaW50
JiBzcmNQb2ludCwgY29uc3QgR3JhcGhpY3NTaXplJiB0aWxlU2l6ZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGRyYXdUaWxlZChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgc3JjUmVjdCwgVGlsZVJ1bGUgaFJ1bGUsIFRpbGVSdWxlIHZSdWxlLCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgLy8gU3VwcG9ydGlu
ZyB0aWxlZCBkcmF3aW5nCiAgICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigp
IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgY2xpcChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGlw
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiAgICAgICAg
IC8vIFRoZSBkcmF3IG1ldGhvZCBkcmF3cyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB3aXRo
b3V0IGNvcHlpbmcgaXQuCi0gICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCisgICAgICAgIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0ID0g
R3JhcGhpY3NSZWN0KDAsIDAsIC0xLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCk7CiAgICAgICAgIAog
ICAgICAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogdXNpbmcgc3RkOjpt
YXg7CkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIHN0ZDo6bWluOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUludFJlY3Q6OkludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorSW50UmVjdDo6SW50
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKEludFBvaW50KHN0
YXRpY19jYXN0PGludD4oci54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHIueSgpKSkpCiAgICAgLCBt
X3NpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHIud2lkdGgoKSksIHN0YXRpY19jYXN0PGlu
dD4oci5oZWlnaHQoKSkpKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3Ry
dWN0IFNrSVJlY3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0Owor
Y2xhc3MgR3JhcGhpY3NSZWN0OwogCiBjbGFzcyBJbnRSZWN0IHsKIHB1YmxpYzoKQEAgLTgyLDcg
KzgyLDcgQEAgcHVibGljOgogICAgIEludFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiAgICAgICAgIDogbV9sb2NhdGlvbihJbnRQb2ludCh4LCB5KSksIG1fc2l6ZShJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpKSB7IH0KIAotICAgIGV4cGxpY2l0IEludFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KTsgLy8gZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3Mg
bG9zc3kKKyAgICBleHBsaWNpdCBJbnRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCk7IC8v
IGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgICAgIAogICAg
IEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbjsgfQogICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDggKzI5LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKLSNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlBh
dGhUcmF2ZXJzYWxTdGF0ZS5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgpAQCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgdm9pZCBwYXRoTGVuZ3RoQXBwbGll
ckZ1bmN0aW9uKHZvCiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlJiB0cmF2ZXJzYWxTdGF0ZSA9ICpz
dGF0aWNfY2FzdDxQYXRoVHJhdmVyc2FsU3RhdGUqPihpbmZvKTsKICAgICBpZiAodHJhdmVyc2Fs
U3RhdGUubV9zdWNjZXNzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRQb2ludCogcG9pbnRz
ID0gZWxlbWVudC0+cG9pbnRzOworICAgIEdyYXBoaWNzUG9pbnQqIHBvaW50cyA9IGVsZW1lbnQt
PnBvaW50czsKICAgICBmbG9hdCBzZWdtZW50TGVuZ3RoID0gMDsKICAgICBzd2l0Y2ggKGVsZW1l
bnQtPnR5cGUpIHsKICAgICAgICAgY2FzZSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OgpAQCAtNzMs
NyArNzMsNyBAQCBmbG9hdCBQYXRoOjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiB0cmF2ZXJz
YWxTdGF0ZS5tX3RvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OnBvaW50QXRMZW5n
dGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK0dyYXBoaWNzUG9pbnQgUGF0aDo6cG9p
bnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdAogewogICAgIFBhdGhUcmF2
ZXJzYWxTdGF0ZSB0cmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2FsU3RhdGU6OlRyYXZlcnNhbFBv
aW50QXRMZW5ndGgpOwogICAgIHRyYXZlcnNhbFN0YXRlLm1fZGVzaXJlZExlbmd0aCA9IGxlbmd0
aDsKQEAgLTk3LDEzICs5NywxMyBAQCB2b2lkIFBhdGg6OmFkZFJvdW5kZWRSZWN0KGNvbnN0IFJv
dW5kZWRSCiAgICAgYWRkUm91bmRlZFJlY3Qoci5yZWN0KCksIHIucmFkaWkoKS50b3BMZWZ0KCks
IHIucmFkaWkoKS50b3BSaWdodCgpLCByLnJhZGlpKCkuYm90dG9tTGVmdCgpLCByLnJhZGlpKCku
Ym90dG9tUmlnaHQoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFNpemUmIHJvdW5kaW5nUmFkaWkpCit2b2lkIFBhdGg6
OmFkZFJvdW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgR3JhcGhpY3NT
aXplJiByb3VuZGluZ1JhZGlpKQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRmxvYXRTaXplIHJhZGl1cyhyb3VuZGluZ1JhZGlpKTsKLSAgICBGbG9h
dFNpemUgaGFsZlNpemUocmVjdC53aWR0aCgpIC8gMiwgcmVjdC5oZWlnaHQoKSAvIDIpOworICAg
IEdyYXBoaWNzU2l6ZSByYWRpdXMocm91bmRpbmdSYWRpaSk7CisgICAgR3JhcGhpY3NTaXplIGhh
bGZTaXplKHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAogICAgIC8vIElm
IHJ4IGlzIGdyZWF0ZXIgdGhhbiBoYWxmIG9mIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCiAg
ICAgLy8gdGhlbiBzZXQgcnggdG8gaGFsZiBvZiB0aGUgd2lkdGggKHJlcXVpcmVkIGluIFNWRyBz
cGVjKQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgUGF0aDo6YWRkUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSZWMKICAgICBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QocmVjdCwgcmFkaXVzLCByYWRp
dXMsIHJhZGl1cywgcmFkaXVzKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBib3R0b21MZWZ0UmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKQordm9pZCBQYXRoOjphZGRS
b3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
dG9wTGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3Qg
R3JhcGhpY3NTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRv
bVJpZ2h0UmFkaXVzKQogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTM5LDI2ICsxMzksMjYgQEAgdm9pZCBQYXRoOjphZGRSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJlYwogLy8gVGhpcyBpcyAxLWthcHBhLCB3aGVyZSBrYXBwYSA9IDQgKiAoc3FydCgyKSAt
IDEpIC8gMwogc3RhdGljIGNvbnN0IGZsb2F0IGdDaXJjbGVDb250cm9sUG9pbnQgPSAwLjQ0Nzcx
NWY7CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyc0ZvclJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUm
IHRvcFJpZ2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCit2b2lkIFBhdGg6OmFkZEJlemllcnNGb3JS
b3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
dG9wTGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3Qg
R3JhcGhpY3NTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRv
bVJpZ2h0UmFkaXVzKQogewotICAgIG1vdmVUbyhGbG9hdFBvaW50KHJlY3QueCgpICsgdG9wTGVm
dFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIG1vdmVUbyhHcmFwaGljc1BvaW50KHJl
Y3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOwogCi0gICAgYWRkTGlu
ZVRvKEZsb2F0UG9pbnQocmVjdC5tYXhYKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCByZWN0
LnkoKSkpOwotICAgIGFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludChyZWN0Lm1heFgoKSAtIHRv
cFJpZ2h0UmFkaXVzLndpZHRoKCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCi0g
ICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRv
cFJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCi0gICAgICAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QubWF4WCgpLCByZWN0LnkoKSArIHRvcFJpZ2h0UmFk
aXVzLmhlaWdodCgpKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJl
Y3QubWF4WSgpIC0gYm90dG9tUmlnaHRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRCZXppZXJD
dXJ2ZVRvKEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIC0gYm90dG9tUmlnaHRS
YWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQocmVjdC5tYXhYKCkgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpICog
Z0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC5tYXhZKCkpLAotICAgICAgICAgICAgICAgICAgICAg
RmxvYXRQb2ludChyZWN0Lm1heFgoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCksIHJlY3Qu
bWF4WSgpKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0
UmFkaXVzLndpZHRoKCksIHJlY3QubWF4WSgpKSk7Ci0gICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9h
dFBvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRy
b2xQb2ludCwgcmVjdC5tYXhZKCkpLAotICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChy
ZWN0LngoKSwgcmVjdC5tYXhZKCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNs
ZUNvbnRyb2xQb2ludCksCi0gICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KHJlY3QueCgp
LCByZWN0Lm1heFkoKSAtIGJvdHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkpKTsKLSAgICBhZGRMaW5l
VG8oRmxvYXRQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgp
KSk7Ci0gICAgYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0LnkoKSAr
IHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKiBnQ2lyY2xlQ29udHJvbFBvaW50KSwKLSAgICAgICAg
ICAgICAgICAgICAgIEZsb2F0UG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0UmFkaXVzLndpZHRoKCkg
KiBnQ2lyY2xlQ29udHJvbFBvaW50LCByZWN0LnkoKSksCi0gICAgICAgICAgICAgICAgICAgICBG
bG9hdFBvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0LnkoKSkpOwor
ICAgIGFkZExpbmVUbyhHcmFwaGljc1BvaW50KHJlY3QubWF4WCgpIC0gdG9wUmlnaHRSYWRpdXMu
d2lkdGgoKSwgcmVjdC55KCkpKTsKKyAgICBhZGRCZXppZXJDdXJ2ZVRvKEdyYXBoaWNzUG9pbnQo
cmVjdC5tYXhYKCkgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpICogZ0NpcmNsZUNvbnRyb2xQb2lu
dCwgcmVjdC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0Lm1h
eFgoKSwgcmVjdC55KCkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9s
UG9pbnQpLAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwg
cmVjdC55KCkgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSkpOworICAgIGFkZExpbmVUbyhHcmFw
aGljc1BvaW50KHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhl
aWdodCgpKSk7CisgICAgYWRkQmV6aWVyQ3VydmVUbyhHcmFwaGljc1BvaW50KHJlY3QubWF4WCgp
LCByZWN0Lm1heFkoKSAtIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRy
b2xQb2ludCksCisgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QubWF4WCgp
IC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3Qu
bWF4WSgpKSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCkg
LSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLCByZWN0Lm1heFkoKSkpOworICAgIGFkZExpbmVU
byhHcmFwaGljc1BvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpLCByZWN0
Lm1heFkoKSkpOworICAgIGFkZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2ludChyZWN0LngoKSAr
IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQsIHJlY3QubWF4
WSgpKSwKKyAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQocmVjdC54KCksIHJlY3Qu
bWF4WSgpIC0gYm90dG9tTGVmdFJhZGl1cy5oZWlnaHQoKSAqIGdDaXJjbGVDb250cm9sUG9pbnQp
LAorICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZ
KCkgLSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpKSk7CisgICAgYWRkTGluZVRvKEdyYXBoaWNz
UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdFJhZGl1cy5oZWlnaHQoKSkpOworICAg
IGFkZEJlemllckN1cnZlVG8oR3JhcGhpY3NQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0b3BM
ZWZ0UmFkaXVzLmhlaWdodCgpICogZ0NpcmNsZUNvbnRyb2xQb2ludCksCisgICAgICAgICAgICAg
ICAgICAgICBHcmFwaGljc1BvaW50KHJlY3QueCgpICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpICog
Z0NpcmNsZUNvbnRyb2xQb2ludCwgcmVjdC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgR3Jh
cGhpY3NQb2ludChyZWN0LngoKSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmVjdC55KCkpKTsK
IAogICAgIGNsb3NlU3VicGF0aCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAgdHlwZWRl
ZiBQbGF0Zm9ybVBhdGgqIFBsYXRmb3JtUGF0aFB0cjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNs
YXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQ
b2ludDsKKyAgICBjbGFzcyBHcmFwaGljc1JlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwog
ICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBTdHJva2VTdHlsZUFwcGxpZXI7
CiAKQEAgLTkyLDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IFBh
dGhFbGVtZW50IHsKICAgICAgICAgUGF0aEVsZW1lbnRUeXBlIHR5cGU7Ci0gICAgICAgIEZsb2F0
UG9pbnQqIHBvaW50czsKKyAgICAgICAgR3JhcGhpY3NQb2ludCogcG9pbnRzOwogICAgIH07CiAK
ICAgICB0eXBlZGVmIHZvaWQgKCpQYXRoQXBwbGllckZ1bmN0aW9uKSh2b2lkKiBpbmZvLCBjb25z
dCBQYXRoRWxlbWVudCopOwpAQCAtMTA2LDEzICsxMDYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAgICAgUGF0aCYgb3BlcmF0b3I9KGNv
bnN0IFBhdGgmKTsKIAotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmLCBX
aW5kUnVsZSBydWxlID0gUlVMRV9OT05aRVJPKSBjb25zdDsKLSAgICAgICAgYm9vbCBzdHJva2VD
b250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0g
ICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKLSAgICAgICAgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqID0gMCkgY29uc3Q7CisgICAg
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYsIFdpbmRSdWxlIHJ1bGUgPSBS
VUxFX05PTlpFUk8pIGNvbnN0OworICAgICAgICBib29sIHN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0
eWxlQXBwbGllciosIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgICAgICBHcmFwaGljc1JlY3Qgc3Ryb2tl
Qm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogPSAwKSBjb25zdDsKICAgICAgICAgCiAg
ICAgICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0OwotICAgICAgICBGbG9hdFBvaW50IHBvaW50QXRM
ZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUG9p
bnQgcG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsKICAgICAgICAg
ZmxvYXQgbm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdDsK
IAogICAgICAgICB2b2lkIGNsZWFyKCk7CkBAIC0xMjAsMjMgKzEyMCwyMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIC8vIEdldHMgdGhlIGN1cnJlbnQgcG9pbnQgb2YgdGhlIGN1cnJl
bnQgcGF0aCwgd2hpY2ggaXMgY29uY2VwdHVhbGx5IHRoZSBmaW5hbCBwb2ludCByZWFjaGVkIGJ5
IHRoZSBwYXRoIHNvIGZhci4KICAgICAgICAgLy8gTm90ZSB0aGUgUGF0aCBjYW4gYmUgZW1wdHkg
KGlzRW1wdHkoKSA9PSB0cnVlKSBhbmQgc3RpbGwgaGF2ZSBhIGN1cnJlbnQgcG9pbnQuCiAgICAg
ICAgIGJvb2wgaGFzQ3VycmVudFBvaW50KCkgY29uc3Q7Ci0gICAgICAgIEZsb2F0UG9pbnQgY3Vy
cmVudFBvaW50KCkgY29uc3Q7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50KCkg
Y29uc3Q7CiAKLSAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAg
ICB2b2lkIGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgICAgIHZvaWQgYWRkUXVh
ZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50
JiBlbmRQb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBv
aW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25z
dCBGbG9hdFBvaW50JiBlbmRQb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMpOworICAgICAgICB2b2lk
IG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkTGluZVRvKGNv
bnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBH
cmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGVuZFBvaW50
KTsKKyAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNv
bnRyb2xQb2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGVuZFBvaW50KTsKKyAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBHcmFw
aGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHJhZGl1cyk7CiAgICAgICAg
IHZvaWQgY2xvc2VTdWJwYXRoKCk7CiAKLSAgICAgICAgdm9pZCBhZGRBcmMoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJv
b2wgYW50aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgICAgICB2
b2lkIGFkZFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgcm91
bmRpbmdSYWRpaSk7Ci0gICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIHRvcFJp
Z2h0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICB2b2lkIGFkZEFyYyhjb25zdCBHcmFw
aGljc1BvaW50JiwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmds
ZSwgYm9vbCBhbnRpY2xvY2t3aXNlKTsKKyAgICAgICAgdm9pZCBhZGRSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYpOworICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0Jik7
CisgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3Qg
R3JhcGhpY3NTaXplJiByb3VuZGluZ1JhZGlpKTsKKyAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1NpemUmIHRvcExlZnRSYWRpdXMs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYg
Ym90dG9tTGVmdFJhZGl1cywgY29uc3QgR3JhcGhpY3NTaXplJiBib3R0b21SaWdodFJhZGl1cyk7
CiAgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3QoY29uc3QgUm91bmRlZFJlY3QmKTsKIAotICAg
ICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICAgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJik7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoUHRyIHBs
YXRmb3JtUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCkBAIC0xNDQsNyArMTQ0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyc0Zv
clJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgdG9wTGVmdFJh
ZGl1cywgY29uc3QgRmxvYXRTaXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBi
b3R0b21MZWZ0UmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAg
ICAgICAgdm9pZCBhZGRCZXppZXJzRm9yUm91bmRlZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jiwg
Y29uc3QgR3JhcGhpY3NTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIHRv
cFJpZ2h0UmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0
IEdyYXBoaWNzU2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpOwogCiAgICAgICAgIFBsYXRmb3JtUGF0
aFB0ciBtX3BhdGg7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOSArMjcsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgY29uc3QgZmxvYXQga1BhdGhTZWdtZW50TGVuZ3RoVG9sZXJhbmNlID0gMC4w
MDAwMWY7CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBtaWRQb2ludChjb25zdCBGbG9hdFBv
aW50JiBmaXJzdCwgY29uc3QgRmxvYXRQb2ludCYgc2Vjb25kKQorc3RhdGljIGlubGluZSBHcmFw
aGljc1BvaW50IG1pZFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZpcnN0LCBjb25zdCBHcmFw
aGljc1BvaW50JiBzZWNvbmQpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoKGZpcnN0LngoKSAr
IHNlY29uZC54KCkpIC8gMi4wZiwgKGZpcnN0LnkoKSArIHNlY29uZC55KCkpIC8gMi4wZik7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKGZpcnN0LngoKSArIHNlY29uZC54KCkpIC8gMi4wZiwg
KGZpcnN0LnkoKSArIHNlY29uZC55KCkpIC8gMi4wZik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxv
YXQgZGlzdGFuY2VMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50
JiBlbmQpCitzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlTGluZShjb25zdCBHcmFwaGljc1Bv
aW50JiBzdGFydCwgY29uc3QgR3JhcGhpY3NQb2ludCYgZW5kKQogewogICAgIHJldHVybiBzcXJ0
ZigoZW5kLngoKSAtIHN0YXJ0LngoKSkgKiAoZW5kLngoKSAtIHN0YXJ0LngoKSkgKyAoZW5kLnko
KSAtIHN0YXJ0LnkoKSkgKiAoZW5kLnkoKSAtIHN0YXJ0LnkoKSkpOwogfQogCiBzdHJ1Y3QgUXVh
ZHJhdGljQmV6aWVyIHsKICAgICBRdWFkcmF0aWNCZXppZXIoKSB7IH0KLSAgICBRdWFkcmF0aWNC
ZXppZXIoY29uc3QgRmxvYXRQb2ludCYgcywgY29uc3QgRmxvYXRQb2ludCYgYywgY29uc3QgRmxv
YXRQb2ludCYgZSkKKyAgICBRdWFkcmF0aWNCZXppZXIoY29uc3QgR3JhcGhpY3NQb2ludCYgcywg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYywgY29uc3QgR3JhcGhpY3NQb2ludCYgZSkKICAgICAgICAg
OiBzdGFydChzKQogICAgICAgICAsIGNvbnRyb2woYykKICAgICAgICAgLCBlbmQoZSkKQEAgLTU2
LDcgKzU2LDcgQEAgc3RydWN0IFF1YWRyYXRpY0JlemllciB7CiAgICAgICAgIGxlZnQuY29udHJv
bCA9IG1pZFBvaW50KHN0YXJ0LCBjb250cm9sKTsKICAgICAgICAgcmlnaHQuY29udHJvbCA9IG1p
ZFBvaW50KGNvbnRyb2wsIGVuZCk7CiAgICAgICAgIAotICAgICAgICBGbG9hdFBvaW50IGxlZnRD
b250cm9sVG9SaWdodENvbnRyb2wgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wsIHJpZ2h0LmNvbnRy
b2wpOworICAgICAgICBHcmFwaGljc1BvaW50IGxlZnRDb250cm9sVG9SaWdodENvbnRyb2wgPSBt
aWRQb2ludChsZWZ0LmNvbnRyb2wsIHJpZ2h0LmNvbnRyb2wpOwogICAgICAgICBsZWZ0LmVuZCA9
IGxlZnRDb250cm9sVG9SaWdodENvbnRyb2w7CiAgICAgICAgIHJpZ2h0LnN0YXJ0ID0gbGVmdENv
bnRyb2xUb1JpZ2h0Q29udHJvbDsKIApAQCAtNjQsMTQgKzY0LDE0IEBAIHN0cnVjdCBRdWFkcmF0
aWNCZXppZXIgewogICAgICAgICByaWdodC5lbmQgPSBlbmQ7CiAgICAgfQogICAgIAotICAgIEZs
b2F0UG9pbnQgc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBjb250cm9sOwotICAgIEZsb2F0UG9pbnQg
ZW5kOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnQ7CisgICAgR3JhcGhpY3NQb2ludCBjb250cm9s
OworICAgIEdyYXBoaWNzUG9pbnQgZW5kOwogfTsKIAogc3RydWN0IEN1YmljQmV6aWVyIHsKICAg
ICBDdWJpY0JlemllcigpIHsgfQotICAgIEN1YmljQmV6aWVyKGNvbnN0IEZsb2F0UG9pbnQmIHMs
IGNvbnN0IEZsb2F0UG9pbnQmIGMxLCBjb25zdCBGbG9hdFBvaW50JiBjMiwgY29uc3QgRmxvYXRQ
b2ludCYgZSkKKyAgICBDdWJpY0Jlemllcihjb25zdCBHcmFwaGljc1BvaW50JiBzLCBjb25zdCBH
cmFwaGljc1BvaW50JiBjMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGUpCiAgICAgICAgIDogc3RhcnQocykKICAgICAgICAgLCBjb250cm9sMShjMSkKICAg
ICAgICAgLCBjb250cm9sMihjMikKQEAgLTg2LDcgKzg2LDcgQEAgc3RydWN0IEN1YmljQmV6aWVy
IHsKICAgICAgICAgCiAgICAgdm9pZCBzcGxpdChDdWJpY0JlemllciYgbGVmdCwgQ3ViaWNCZXpp
ZXImIHJpZ2h0KSBjb25zdAogICAgIHsgICAgCi0gICAgICAgIEZsb2F0UG9pbnQgc3RhcnRUb0Nv
bnRyb2wxID0gbWlkUG9pbnQoY29udHJvbDEsIGNvbnRyb2wyKTsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludCBzdGFydFRvQ29udHJvbDEgPSBtaWRQb2ludChjb250cm9sMSwgY29udHJvbDIpOwogICAg
ICAgICAKICAgICAgICAgbGVmdC5zdGFydCA9IHN0YXJ0OwogICAgICAgICBsZWZ0LmNvbnRyb2wx
ID0gbWlkUG9pbnQoc3RhcnQsIGNvbnRyb2wxKTsKQEAgLTk2LDE1ICs5NiwxNSBAQCBzdHJ1Y3Qg
Q3ViaWNCZXppZXIgewogICAgICAgICByaWdodC5jb250cm9sMSA9IG1pZFBvaW50KHJpZ2h0LmNv
bnRyb2wyLCBzdGFydFRvQ29udHJvbDEpOwogICAgICAgICByaWdodC5lbmQgPSBlbmQ7CiAgICAg
ICAgIAotICAgICAgICBGbG9hdFBvaW50IGxlZnRDb250cm9sMlRvUmlnaHRDb250cm9sMSA9IG1p
ZFBvaW50KGxlZnQuY29udHJvbDIsIHJpZ2h0LmNvbnRyb2wxKTsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludCBsZWZ0Q29udHJvbDJUb1JpZ2h0Q29udHJvbDEgPSBtaWRQb2ludChsZWZ0LmNvbnRyb2wy
LCByaWdodC5jb250cm9sMSk7CiAgICAgICAgIGxlZnQuZW5kID0gbGVmdENvbnRyb2wyVG9SaWdo
dENvbnRyb2wxOwogICAgICAgICByaWdodC5zdGFydCA9IGxlZnRDb250cm9sMlRvUmlnaHRDb250
cm9sMTsKICAgICB9CiAgICAgCi0gICAgRmxvYXRQb2ludCBzdGFydDsKLSAgICBGbG9hdFBvaW50
IGNvbnRyb2wxOwotICAgIEZsb2F0UG9pbnQgY29udHJvbDI7Ci0gICAgRmxvYXRQb2ludCBlbmQ7
CisgICAgR3JhcGhpY3NQb2ludCBzdGFydDsKKyAgICBHcmFwaGljc1BvaW50IGNvbnRyb2wxOwor
ICAgIEdyYXBoaWNzUG9pbnQgY29udHJvbDI7CisgICAgR3JhcGhpY3NQb2ludCBlbmQ7CiB9Owog
CiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyBwb3NzaWJseSB2ZXJ5IHNsb3cgZHVlIHRvIHRo
ZSBpZnMgcmVxdWlyZWQgZm9yIHByb3BlciBwYXRoIG1lYXN1cmluZwpAQCAtMTY0LDIwICsxNjQs
MjAgQEAgZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpjbG9zZVN1YnBhdGgoKQogICAgIHJldHVy
biBkaXN0YW5jZTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjptb3ZlVG8oY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCitmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6Om1vdmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBtX2N1cnJlbnQgPSBtX3N0YXJ0ID0gbV9j
b250cm9sMSA9IG1fY29udHJvbDIgPSBwb2ludDsKICAgICByZXR1cm4gMDsKIH0KIAotZmxvYXQg
UGF0aFRyYXZlcnNhbFN0YXRlOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCitmbG9h
dCBQYXRoVHJhdmVyc2FsU3RhdGU6OmxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkK
IHsKICAgICBmbG9hdCBkaXN0YW5jZSA9IGRpc3RhbmNlTGluZShtX2N1cnJlbnQsIHBvaW50KTsK
ICAgICBtX2N1cnJlbnQgPSBtX2NvbnRyb2wxID0gbV9jb250cm9sMiA9IHBvaW50OwogICAgIHJl
dHVybiBkaXN0YW5jZTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNC
ZXppZXJUbyhjb25zdCBGbG9hdFBvaW50JiBuZXdDb250cm9sLCBjb25zdCBGbG9hdFBvaW50JiBu
ZXdFbmQpCitmbG9hdCBQYXRoVHJhdmVyc2FsU3RhdGU6OnF1YWRyYXRpY0JlemllclRvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRyb2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCkK
IHsKICAgICBmbG9hdCBkaXN0YW5jZSA9IGN1cnZlTGVuZ3RoPFF1YWRyYXRpY0Jlemllcj4oKnRo
aXMsIFF1YWRyYXRpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wsIG5ld0VuZCkpOwogCkBA
IC0xOTAsNyArMTkwLDcgQEAgZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpxdWFkcmF0aWNCZXpp
ZQogICAgIHJldHVybiBkaXN0YW5jZTsKIH0KIAotZmxvYXQgUGF0aFRyYXZlcnNhbFN0YXRlOjpj
dWJpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2wxLCBjb25zdCBGbG9hdFBv
aW50JiBuZXdDb250cm9sMiwgY29uc3QgRmxvYXRQb2ludCYgbmV3RW5kKQorZmxvYXQgUGF0aFRy
YXZlcnNhbFN0YXRlOjpjdWJpY0JlemllclRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRy
b2wxLCBjb25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9sMiwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgbmV3RW5kKQogewogICAgIGZsb2F0IGRpc3RhbmNlID0gY3VydmVMZW5ndGg8Q3ViaWNCZXpp
ZXI+KCp0aGlzLCBDdWJpY0JlemllcihtX2N1cnJlbnQsIG5ld0NvbnRyb2wxLCBuZXdDb250cm9s
MiwgbmV3RW5kKSk7CiAKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIFBhdGhUcmF2ZXJzYWxTdGF0
ZTo6cHJvY2Vzc1NlZ21lbnQoCiAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIAog
ICAgIGlmICgobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExlbmd0aCB8fCBtX2FjdGlvbiA9
PSBUcmF2ZXJzYWxOb3JtYWxBbmdsZUF0TGVuZ3RoKSAmJiBtX3RvdGFsTGVuZ3RoID49IG1fZGVz
aXJlZExlbmd0aCkgewotICAgICAgICBGbG9hdFNpemUgY2hhbmdlID0gbV9jdXJyZW50IC0gbV9w
cmV2aW91czsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNoYW5nZSA9IG1fY3VycmVudCAtIG1fcHJl
dmlvdXM7CiAgICAgICAgIGZsb2F0IHNsb3BlID0gYXRhbjJmKGNoYW5nZS5oZWlnaHQoKSwgY2hh
bmdlLndpZHRoKCkpOwogICAgICAgICBpZiAobV9hY3Rpb24gPT0gVHJhdmVyc2FsUG9pbnRBdExl
bmd0aCkgewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9kZXNpcmVkTGVuZ3RoIC0gbV90
b3RhbExlbmd0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhU
cmF2ZXJzYWxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIFBhdGhUcmF2ZXJzYWxTdGF0ZV9oCiAjZGVm
aW5lIFBhdGhUcmF2ZXJzYWxTdGF0ZV9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NQb2ludC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQyLDEw
ICs0MiwxMCBAQCBwdWJsaWM6CiAgICAgUGF0aFRyYXZlcnNhbFN0YXRlKFBhdGhUcmF2ZXJzYWxB
Y3Rpb24pOwogCiAgICAgZmxvYXQgY2xvc2VTdWJwYXRoKCk7Ci0gICAgZmxvYXQgbW92ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmKTsKLSAgICBmbG9hdCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwot
ICAgIGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEZsb2F0UG9pbnQmIG5ld0NvbnRyb2ws
IGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7Ci0gICAgZmxvYXQgY3ViaWNCZXppZXJUbyhjb25z
dCBGbG9hdFBvaW50JiBuZXdDb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgbmV3Q29udHJvbDIs
IGNvbnN0IEZsb2F0UG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgbW92ZVRvKGNvbnN0IEdyYXBo
aWNzUG9pbnQmKTsKKyAgICBmbG9hdCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAg
IGZsb2F0IHF1YWRyYXRpY0JlemllclRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0NvbnRyb2ws
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CisgICAgZmxvYXQgY3ViaWNCZXppZXJUbyhj
b25zdCBHcmFwaGljc1BvaW50JiBuZXdDb250cm9sMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3
Q29udHJvbDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld0VuZCk7CiAgICAgCiAgICAgdm9pZCBw
cm9jZXNzU2VnbWVudCgpOwogCkBAIC01MywxNyArNTMsMTcgQEAgcHVibGljOgogICAgIFBhdGhU
cmF2ZXJzYWxBY3Rpb24gbV9hY3Rpb247CiAgICAgYm9vbCBtX3N1Y2Nlc3M7CiAKLSAgICBGbG9h
dFBvaW50IG1fY3VycmVudDsKLSAgICBGbG9hdFBvaW50IG1fc3RhcnQ7Ci0gICAgRmxvYXRQb2lu
dCBtX2NvbnRyb2wxOwotICAgIEZsb2F0UG9pbnQgbV9jb250cm9sMjsKKyAgICBHcmFwaGljc1Bv
aW50IG1fY3VycmVudDsKKyAgICBHcmFwaGljc1BvaW50IG1fc3RhcnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBtX2NvbnRyb2wxOworICAgIEdyYXBoaWNzUG9pbnQgbV9jb250cm9sMjsKIAogICAgIGZs
b2F0IG1fdG90YWxMZW5ndGg7CiAgICAgdW5zaWduZWQgbV9zZWdtZW50SW5kZXg7CiAgICAgZmxv
YXQgbV9kZXNpcmVkTGVuZ3RoOwogCiAgICAgLy8gRm9yIG5vcm1hbCBjYWxjdWxhdGlvbnMKLSAg
ICBGbG9hdFBvaW50IG1fcHJldmlvdXM7CisgICAgR3JhcGhpY3NQb2ludCBtX3ByZXZpb3VzOwog
ICAgIGZsb2F0IG1fbm9ybWFsQW5nbGU7IC8vIGRlZ3JlZXMKIH07ICAgIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAJKHJldmlz
aW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJTaGFkb3dC
bHVyLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC04
Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7
CiAgICAgfQogCi0gICAgdm9pZCBzZXRMYXN0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYg
cmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
RmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKQor
ICAgIHZvaWQgc2V0TGFzdFNoYWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKICAgICB7
CiAgICAgICAgIG1fbGFzdFdhc0luc2V0ID0gZmFsc2U7CiAgICAgICAgIG1fbGFzdFJhZGl1cyA9
IHJhZGl1czsKQEAgLTkzLDcgKzkzLDcgQEAgcHVibGljOgogICAgICAgICBtX2xhc3RSYWRpaSA9
IHJhZGlpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TGFzdEluc2V0U2hhZG93VmFsdWVzKGNvbnN0
IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93UmVj
dCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkKKyAgICB2b2lkIHNldExhc3RJbnNl
dFNoYWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRzLCBj
b25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYg
cmFkaWkpCiAgICAgewogICAgICAgICBtX2xhc3RXYXNJbnNldCA9IHRydWU7CiAgICAgICAgIG1f
bGFzdEluc2V0Qm91bmRzID0gYm91bmRzOwpAQCAtMTA0LDE0ICsxMDQsMTQgQEAgcHVibGljOgog
ICAgICAgICBtX2xhc3RSYWRpaSA9IHJhZGlpOwogICAgIH0KICAgICAKLSAgICBib29sIG1hdGNo
ZXNMYXN0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dSZWN0LCBjb25z
dCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAorICAgIGJvb2wgbWF0Y2hlc0xhc3RT
aGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiByYWRpdXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd1JlY3QsIGNvbnN0
IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9s
YXN0V2FzSW5zZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBt
X2xhc3RSYWRpdXMgPT0gcmFkaXVzICYmIG1fbGFzdENvbG9yID09IGNvbG9yICYmIG1fbGFzdENv
bG9yU3BhY2UgPT0gY29sb3JTcGFjZSAmJiBzaGFkb3dSZWN0ID09IG1fbGFzdFNoYWRvd1JlY3Qg
JiYgcmFkaWkgPT0gbV9sYXN0UmFkaWk7CiAgICAgfQogCi0gICAgYm9vbCBtYXRjaGVzTGFzdElu
c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZHMsIGNvbnN0IEZsb2F0
UmVjdCYgc2hhZG93UmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSkgY29uc3QK
KyAgICBib29sIG1hdGNoZXNMYXN0SW5zZXRTaGFkb3coY29uc3QgR3JhcGhpY3NTaXplJiByYWRp
dXMsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc1JlY3QmIGJvdW5kcywgY29uc3QgR3JhcGhpY3NSZWN0JiBzaGFkb3dSZWN0LCBjb25zdCBS
b3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2xh
c3RXYXNJbnNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MSwxOCArMTQxLDE4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclNjcmF0Y2hCdWZmZXIoKQogICAgIHsKICAgICAg
ICAgbV9pbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIG1fbGFzdFJhZGl1cyA9IEZsb2F0
U2l6ZSgpOworICAgICAgICBtX2xhc3RSYWRpdXMgPSBHcmFwaGljc1NpemUoKTsKICAgICB9CiAK
ICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CiAgICAgVGltZXI8U2NyYXRj
aEJ1ZmZlcj4gbV9wdXJnZVRpbWVyOwogICAgIAotICAgIEZsb2F0UmVjdCBtX2xhc3RJbnNldEJv
dW5kczsKLSAgICBGbG9hdFJlY3QgbV9sYXN0U2hhZG93UmVjdDsKKyAgICBHcmFwaGljc1JlY3Qg
bV9sYXN0SW5zZXRCb3VuZHM7CisgICAgR3JhcGhpY3NSZWN0IG1fbGFzdFNoYWRvd1JlY3Q7CiAg
ICAgUm91bmRlZFJlY3Q6OlJhZGlpIG1fbGFzdFJhZGlpOwogICAgIENvbG9yIG1fbGFzdENvbG9y
OwogICAgIENvbG9yU3BhY2UgbV9sYXN0Q29sb3JTcGFjZTsKLSAgICBGbG9hdFNpemUgbV9sYXN0
UmFkaXVzOworICAgIEdyYXBoaWNzU2l6ZSBtX2xhc3RSYWRpdXM7CiAgICAgYm9vbCBtX2xhc3RX
YXNJbnNldDsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0xNjgsNyArMTY4LDcgQEAg
U2NyYXRjaEJ1ZmZlciYgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkKIAogc3RhdGljIGNvbnN0IGlu
dCB0ZW1wbGF0ZVNpZGVMZW5ndGggPSAxOwogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0
IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgOiBtX2NvbG9yKGNv
bG9yKQogICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCiAgICAgLCBtX2JsdXJSYWRpdXMo
cmFkaXVzKQpAQCAtMTg2LDcgKzE4Niw3IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoKQogewog
fQogCi12b2lkIFNoYWRvd0JsdXI6OnNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmIHJh
ZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBib29sIGlnbm9yZVRyYW5zZm9ybXMpCit2b2lkIFNoYWRvd0JsdXI6
OnNldFNoYWRvd1ZhbHVlcyhjb25zdCBHcmFwaGljc1NpemUmIHJhZGl1cywgY29uc3QgR3JhcGhp
Y3NTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBib29sIGlnbm9yZVRyYW5zZm9ybXMpCiB7CiAgICAgbV9ibHVyUmFkaXVzID0gcmFkaXVzOwog
ICAgIG1fb2Zmc2V0ID0gb2Zmc2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgU2hhZG93Qmx1
cjo6c2V0U2hhZG93VmFsdWVzKGNvbnN0IEYKIHZvaWQgU2hhZG93Qmx1cjo6dXBkYXRlU2hhZG93
Qmx1clZhbHVlcygpCiB7CiAgICAgLy8gTGltaXQgYmx1ciByYWRpdXMgdG8gMTI4IHRvIGF2b2lk
IGxvdHMgb2YgdmVyeSBleHBlbnNpdmUgYmx1cnJpbmcuCi0gICAgbV9ibHVyUmFkaXVzID0gbV9i
bHVyUmFkaXVzLnNocnVua1RvKEZsb2F0U2l6ZSgxMjgsIDEyOCkpOworICAgIG1fYmx1clJhZGl1
cyA9IG1fYmx1clJhZGl1cy5zaHJ1bmtUbyhHcmFwaGljc1NpemUoMTI4LCAxMjgpKTsKIAogICAg
IC8vIFRoZSB0eXBlIG9mIHNoYWRvdyBpcyBkZWNpZGVkIGJ5IHRoZSBibHVyIHJhZGl1cywgc2hh
ZG93IG9mZnNldCwgYW5kIHNoYWRvdyBjb2xvci4KICAgICBpZiAoIW1fY29sb3IuaXNWYWxpZCgp
IHx8ICFtX2NvbG9yLmFscGhhKCkpIHsKQEAgLTI2NCw4ICsyNjQsOCBAQCB2b2lkIFNoYWRvd0Js
dXI6OmNsZWFyKCkKIHsKICAgICBtX3R5cGUgPSBOb1NoYWRvdzsKICAgICBtX2NvbG9yID0gQ29s
b3IoKTsKLSAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUoKTsKLSAgICBtX29mZnNldCA9IEZs
b2F0U2l6ZSgpOworICAgIG1fYmx1clJhZGl1cyA9IEdyYXBoaWNzU2l6ZSgpOworICAgIG1fb2Zm
c2V0ID0gR3JhcGhpY3NTaXplKCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckxheWVySW1h
Z2UodW5zaWduZWQgY2hhciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgcm93
U3RyaWRlKQpAQCAtMzYzLDE3ICszNjMsMTcgQEAgdm9pZCBTaGFkb3dCbHVyOjphZGp1c3RCbHVy
UmFkaXVzKEdyYXBoaQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDYWxjdWxhdGUgdHJhbnNm
b3JtZWQgdW5pdCB2ZWN0b3JzLgotICAgIGNvbnN0IEZsb2F0UXVhZCB1bml0UXVhZChGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFBvaW50KDEsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGbG9hdFBvaW50KDAsIDEpLCBGbG9hdFBvaW50KDEsIDEpKTsKLSAgICBjb25zdCBGbG9hdFF1
YWQgdHJhbnNmb3JtZWRVbml0UXVhZCA9IHRyYW5zZm9ybS5tYXBRdWFkKHVuaXRRdWFkKTsKKyAg
ICBjb25zdCBHcmFwaGljc1F1YWQgdW5pdFF1YWQoR3JhcGhpY3NQb2ludCgwLCAwKSwgR3JhcGhp
Y3NQb2ludCgxLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NQb2lu
dCgwLCAxKSwgR3JhcGhpY3NQb2ludCgxLCAxKSk7CisgICAgY29uc3QgR3JhcGhpY3NRdWFkIHRy
YW5zZm9ybWVkVW5pdFF1YWQgPSB0cmFuc2Zvcm0ubWFwUXVhZCh1bml0UXVhZCk7CiAKICAgICAv
LyBDYWxjdWxhdGUgWCBheGlzIHNjYWxlIGZhY3Rvci4KLSAgICBjb25zdCBGbG9hdFNpemUgeFVu
aXRDaGFuZ2UgPSB0cmFuc2Zvcm1lZFVuaXRRdWFkLnAyKCkgLSB0cmFuc2Zvcm1lZFVuaXRRdWFk
LnAxKCk7CisgICAgY29uc3QgR3JhcGhpY3NTaXplIHhVbml0Q2hhbmdlID0gdHJhbnNmb3JtZWRV
bml0UXVhZC5wMigpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOwogICAgIGNvbnN0IGZsb2F0
IHhBeGlzU2NhbGUgPSBzcXJ0Zih4VW5pdENoYW5nZS53aWR0aCgpICogeFVuaXRDaGFuZ2Uud2lk
dGgoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHhVbml0Q2hhbmdlLmhl
aWdodCgpICogeFVuaXRDaGFuZ2UuaGVpZ2h0KCkpOwogCiAgICAgLy8gQ2FsY3VsYXRlIFkgYXhp
cyBzY2FsZSBmYWN0b3IuCi0gICAgY29uc3QgRmxvYXRTaXplIHlVbml0Q2hhbmdlID0gdHJhbnNm
b3JtZWRVbml0UXVhZC5wMygpIC0gdHJhbnNmb3JtZWRVbml0UXVhZC5wMSgpOworICAgIGNvbnN0
IEdyYXBoaWNzU2l6ZSB5VW5pdENoYW5nZSA9IHRyYW5zZm9ybWVkVW5pdFF1YWQucDMoKSAtIHRy
YW5zZm9ybWVkVW5pdFF1YWQucDEoKTsKICAgICBjb25zdCBmbG9hdCB5QXhpc1NjYWxlID0gc3Fy
dGYoeVVuaXRDaGFuZ2Uud2lkdGgoKSAqIHlVbml0Q2hhbmdlLndpZHRoKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyB5VW5pdENoYW5nZS5oZWlnaHQoKSAqIHlVbml0Q2hh
bmdlLmhlaWdodCgpKTsKIApAQCAtMzk1LDE3ICszOTUsMTcgQEAgSW50U2l6ZSBTaGFkb3dCbHVy
OjpibHVycmVkRWRnZVNpemUoKSBjbwogICAgIHJldHVybiBlZGdlU2l6ZTsKIH0KIAotSW50UmVj
dCBTaGFkb3dCbHVyOjpjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkKK0ludFJlY3QgU2hhZG93Qmx1cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3Qo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNoYWRvd2VkUmVj
dCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgSW50U2l6ZSBlZGdlU2l6ZSA9IGJs
dXJyZWRFZGdlU2l6ZSgpOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiB0
aGUgYmx1cnJlZCBhbmQvb3IgdHJhbnNmb3JtZWQgbGF5ZXIuCi0gICAgRmxvYXRSZWN0IGxheWVy
UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbGF5ZXJSZWN0OwogICAgIEludFNpemUgaW5mbGF0aW9u
OwogCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGNvbnRleHQtPmdldENU
TSgpOwogICAgIGlmIChtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zICYmICF0cmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpKSB7Ci0gICAgICAgIEZsb2F0UXVhZCB0cmFuc2Zvcm1lZFBvbHlnb24gPSB0cmFu
c2Zvcm0ubWFwUXVhZChGbG9hdFF1YWQoc2hhZG93ZWRSZWN0KSk7CisgICAgICAgIEdyYXBoaWNz
UXVhZCB0cmFuc2Zvcm1lZFBvbHlnb24gPSB0cmFuc2Zvcm0ubWFwUXVhZChHcmFwaGljc1F1YWQo
c2hhZG93ZWRSZWN0KSk7CiAgICAgICAgIHRyYW5zZm9ybWVkUG9seWdvbi5tb3ZlKG1fb2Zmc2V0
KTsKICAgICAgICAgbGF5ZXJSZWN0ID0gdHJhbnNmb3JtLmludmVyc2UoKS5tYXBRdWFkKHRyYW5z
Zm9ybWVkUG9seWdvbikuYm91bmRpbmdCb3goKTsKICAgICB9IGVsc2UgewpAQCAtNDIwLDcgKzQy
MCw3IEBAIEludFJlY3QgU2hhZG93Qmx1cjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZGkKICAgICAgICAg
aW5mbGF0aW9uID0gZWRnZVNpemU7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHVuY2xpcHBlZExh
eWVyUmVjdCA9IGxheWVyUmVjdDsKKyAgICBHcmFwaGljc1JlY3QgdW5jbGlwcGVkTGF5ZXJSZWN0
ID0gbGF5ZXJSZWN0OwogCiAgICAgaWYgKCFjbGlwUmVjdC5jb250YWlucyhlbmNsb3NpbmdJbnRS
ZWN0KGxheWVyUmVjdCkpKSB7CiAgICAgICAgIC8vIElmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUg
dGhlIGNsaXAgcmVnaW9uLCB3ZSBhcmVuJ3QgcGFpbnRpbmcgYXQgYWxsLgpAQCAtNDQwLDE4ICs0
NDAsMTggQEAgSW50UmVjdCBTaGFkb3dCbHVyOjpjYWxjdWxhdGVMYXllckJvdW5kaQogCiAgICAg
SW50U2l6ZSBmcmFtZVNpemUgPSBpbmZsYXRpb247CiAgICAgZnJhbWVTaXplLnNjYWxlKDIpOwot
ICAgIG1fc291cmNlUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCBzaGFkb3dlZFJlY3Qud2lkdGgoKSAr
IGZyYW1lU2l6ZS53aWR0aCgpLCBzaGFkb3dlZFJlY3QuaGVpZ2h0KCkgKyBmcmFtZVNpemUuaGVp
Z2h0KCkpOwotICAgIG1fbGF5ZXJPcmlnaW4gPSBGbG9hdFBvaW50KGxheWVyUmVjdC54KCksIGxh
eWVyUmVjdC55KCkpOworICAgIG1fc291cmNlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCAwLCBzaGFk
b3dlZFJlY3Qud2lkdGgoKSArIGZyYW1lU2l6ZS53aWR0aCgpLCBzaGFkb3dlZFJlY3QuaGVpZ2h0
KCkgKyBmcmFtZVNpemUuaGVpZ2h0KCkpOworICAgIG1fbGF5ZXJPcmlnaW4gPSBHcmFwaGljc1Bv
aW50KGxheWVyUmVjdC54KCksIGxheWVyUmVjdC55KCkpOwogICAgIG1fbGF5ZXJTaXplID0gbGF5
ZXJSZWN0LnNpemUoKTsKIAotICAgIGNvbnN0IEZsb2F0UG9pbnQgdW5jbGlwcGVkTGF5ZXJPcmln
aW4gPSBGbG9hdFBvaW50KHVuY2xpcHBlZExheWVyUmVjdC54KCksIHVuY2xpcHBlZExheWVyUmVj
dC55KCkpOwotICAgIGNvbnN0IEZsb2F0U2l6ZSBjbGlwcGVkT3V0ID0gdW5jbGlwcGVkTGF5ZXJP
cmlnaW4gLSBtX2xheWVyT3JpZ2luOworICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQgdW5jbGlwcGVk
TGF5ZXJPcmlnaW4gPSBHcmFwaGljc1BvaW50KHVuY2xpcHBlZExheWVyUmVjdC54KCksIHVuY2xp
cHBlZExheWVyUmVjdC55KCkpOworICAgIGNvbnN0IEdyYXBoaWNzU2l6ZSBjbGlwcGVkT3V0ID0g
dW5jbGlwcGVkTGF5ZXJPcmlnaW4gLSBtX2xheWVyT3JpZ2luOwogCiAgICAgLy8gU2V0IHRoZSBv
cmlnaW4gYXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgc2NyYXRjaCBpbWFnZSwgb3IsIGlu
IGNhc2UgdGhlcmUncyBhIGNsaXBwZWQKICAgICAvLyBvdXQgcmVnaW9uLCBzZXQgdGhlIG9yaWdp
biBhY2NvcmRpbmdseSB0byB0aGUgZnVsbCBib3VuZGluZyByZWN0J3MgdG9wLWxlZnQgY29ybmVy
LgogICAgIGZsb2F0IHRyYW5zbGF0aW9uWCA9IC1zaGFkb3dlZFJlY3QueCgpICsgaW5mbGF0aW9u
LndpZHRoKCkgLSBmYWJzZihjbGlwcGVkT3V0LndpZHRoKCkpOwogICAgIGZsb2F0IHRyYW5zbGF0
aW9uWSA9IC1zaGFkb3dlZFJlY3QueSgpICsgaW5mbGF0aW9uLmhlaWdodCgpIC0gZmFic2YoY2xp
cHBlZE91dC5oZWlnaHQoKSk7Ci0gICAgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiA9IEZsb2F0
U2l6ZSh0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7CisgICAgbV9sYXllckNvbnRleHRUcmFu
c2xhdGlvbiA9IEdyYXBoaWNzU2l6ZSh0cmFuc2xhdGlvblgsIHRyYW5zbGF0aW9uWSk7CiAKICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChsYXllclJlY3QpOwogfQpAQCAtNDY3LDEzICs0Njcs
MTMgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaQogICAgIGlmIChi
dWZmZXJTaXplICE9IG1fbGF5ZXJTaXplKSB7CiAgICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0
byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0byBiZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1
ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1heSBub3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28g
Y2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmlyc3QuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
Y2xpcChGbG9hdFJlY3QobV9sYXllck9yaWdpbiwgbV9sYXllclNpemUpKTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKEdyYXBoaWNzUmVjdChtX2xheWVyT3JpZ2luLCBtX2xheWVyU2l6
ZSkpOwogICAgIH0KLSAgICBncmFwaGljc0NvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKG1fbGF5
ZXJJbWFnZSwgRmxvYXRSZWN0KG1fbGF5ZXJPcmlnaW4sIGJ1ZmZlclNpemUpKTsKKyAgICBncmFw
aGljc0NvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgR3JhcGhpY3NSZWN0
KG1fbGF5ZXJPcmlnaW4sIGJ1ZmZlclNpemUpKTsKICAgICBncmFwaGljc0NvbnRleHQtPnNldEZp
bGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGVhclNoYWRvdygpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KG1f
bGF5ZXJPcmlnaW4sIG1fc291cmNlUmVjdC5zaXplKCkpKTsKKyAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KEdyYXBoaWNzUmVjdChtX2xheWVyT3JpZ2luLCBtX3NvdXJjZVJlY3Quc2l6ZSgp
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVTbGljZVNpemVzRnJvbVJhZGlpKGNvbnN0IElu
dFNpemUmIHR3aWNlUmFkaXVzLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBpbnQm
IGxlZnRTbGljZSwgaW50JiByaWdodFNsaWNlLCBpbnQmIHRvcFNsaWNlLCBpbnQmIGJvdHRvbVNs
aWNlKQpAQCAtNTAzLDcgKzUwMyw3IEBAIEludFNpemUgU2hhZG93Qmx1cjo6dGVtcGxhdGVTaXpl
KGNvbnN0IEkKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNpZGVMZW5ndGggKyB0b3BTbGlj
ZSArIGJvdHRvbVNsaWNlKTsKIH0KIAotdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dl
ZFJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkpCit2b2lkIFNoYWRvd0JsdXI6
OmRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBH
cmFwaGljc1JlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRp
aSkKIHsKICAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0
KGdyYXBoaWNzQ29udGV4dCwgc2hhZG93ZWRSZWN0LCBncmFwaGljc0NvbnRleHQtPmNsaXBCb3Vu
ZHMoKSk7CiAgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCkBAIC01MzAsNyArNTMwLDcgQEAg
dm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvdyhHcmFwaGljcwogICAgIGRyYXdSZWN0U2hh
ZG93V2l0aFRpbGluZyhncmFwaGljc0NvbnRleHQsIHNoYWRvd2VkUmVjdCwgcmFkaWksIHRlbXBs
YXRlU2l6ZSwgZWRnZVNpemUpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
dyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhv
bGVSYWRpaSkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKQog
ewogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoZ3Jh
cGhpY3NDb250ZXh0LCByZWN0LCBncmFwaGljc0NvbnRleHQtPmNsaXBCb3VuZHMoKSk7CiAgICAg
aWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCkBAIC01NTcsMjAgKzU1NywyMCBAQCB2b2lkIFNoYWRv
d0JsdXI6OmRyYXdJbnNldFNoYWRvdyhHcmFwaGljCiAgICAgZHJhd0luc2V0U2hhZG93V2l0aFRp
bGluZyhncmFwaGljc0NvbnRleHQsIHJlY3QsIGhvbGVSZWN0LCBob2xlUmFkaWksIHRlbXBsYXRl
U2l6ZSwgZWRnZVNpemUpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0
IEludFJlY3QmIGxheWVyUmVjdCkKK3ZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRo
b3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgUm91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29u
c3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZm
ZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CiAgICAgaWYg
KCFtX2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBidWZmZXJS
ZWxhdGl2ZVNoYWRvd2VkUmVjdCA9IHNoYWRvd2VkUmVjdDsKKyAgICBHcmFwaGljc1JlY3QgYnVm
ZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QgPSBzaGFkb3dlZFJlY3Q7CiAgICAgYnVmZmVyUmVsYXRp
dmVTaGFkb3dlZFJlY3QubW92ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKICAgICBpZiAo
IVNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLm1hdGNoZXNMYXN0U2hhZG93KG1fYmx1clJhZGl1cywg
Q29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2ZVNoYWRvd2Vk
UmVjdCwgcmFkaWkpKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9
IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogCiAgICAgICAgIC8vIEFkZCBhIHBpeGVs
IHRvIGF2b2lkIGxhdGVyIGVkZ2UgYWxpYXNpbmcgd2hlbiByb3RhdGVkLgotICAgICAgICBzaGFk
b3dDb250ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkg
KyAxLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSArIDEpKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+
Y2xlYXJSZWN0KEdyYXBoaWNzUmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9s
YXllclNpemUuaGVpZ2h0KCkgKyAxKSk7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0
ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIGlm
IChyYWRpaS5pc1plcm8oKSkKQEAgLTU5MSwxNiArNTkxLDE2IEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGkKICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hl
ZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwogfQogCi12b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNl
dFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSZWN0JiBob2xlUmVjdCwgY29uc3QgUm91
bmRlZFJlY3Q6OlJhZGlpJiBob2xlUmFkaWksIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKK3Zv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBHcmFw
aGljc1JlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIGhvbGVSYWRpaSwg
Y29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hC
dWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CiAgICAg
aWYgKCFtX2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBidWZm
ZXJSZWxhdGl2ZVJlY3QgPSByZWN0OworICAgIEdyYXBoaWNzUmVjdCBidWZmZXJSZWxhdGl2ZVJl
Y3QgPSByZWN0OwogICAgIGJ1ZmZlclJlbGF0aXZlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJh
bnNsYXRpb24pOwogCi0gICAgRmxvYXRSZWN0IGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QgPSBob2xl
UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCA9IGhvbGVSZWN0
OwogICAgIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QubW92ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0
aW9uKTsKIAogICAgIGlmICghU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkubWF0Y2hlc0xhc3RJbnNl
dFNoYWRvdyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQiwg
YnVmZmVyUmVsYXRpdmVSZWN0LCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0LCBob2xlUmFkaWkpKSB7
CkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRo
b3V0VAogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNoYWRv
d0NvbnRleHQpOwogCiAgICAgICAgIC8vIEFkZCBhIHBpeGVsIHRvIGF2b2lkIGxhdGVyIGVkZ2Ug
YWxpYXNpbmcgd2hlbiByb3RhdGVkLgotICAgICAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3Qo
RmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCkgKyAxLCBtX2xheWVyU2l6ZS5oZWln
aHQoKSArIDEpKTsKKyAgICAgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEdyYXBoaWNzUmVj
dCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpICsgMSwgbV9sYXllclNpemUuaGVpZ2h0KCkgKyAx
KSk7CiAgICAgICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4dFRyYW5z
bGF0aW9uKTsKIAogICAgICAgICBQYXRoIHBhdGg7CkBAIC02NjQsNyArNjY0LDcgQEAgdm9pZCBT
aGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VAogICAgICB0aGUgc2hhZG93LgogICov
CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJ
bnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VTaXplKQordm9pZCBTaGFk
b3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
aG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUm
IHRlbXBsYXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7CiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwogICAgIGdyYXBo
aWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKQEAgLTY3NCw4ICs2NzQsOCBAQCB2b2lkIFNoYWRv
d0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERyYXcgdGhlIHJlY3RhbmdsZSB3aXRoIGhvbGUuCi0gICAgRmxvYXRSZWN0IHRlbXBsYXRlQm91
bmRzKDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpOwot
ICAgIEZsb2F0UmVjdCB0ZW1wbGF0ZUhvbGUgPSBGbG9hdFJlY3QoZWRnZVNpemUud2lkdGgoKSwg
ZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gMiAqIGVkZ2VTaXplLndp
ZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIgKiBlZGdlU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgR3JhcGhpY3NSZWN0IHRlbXBsYXRlQm91bmRzKDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgp
LCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCB0ZW1wbGF0ZUhvbGUg
PSBHcmFwaGljc1JlY3QoZWRnZVNpemUud2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBs
YXRlU2l6ZS53aWR0aCgpIC0gMiAqIGVkZ2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWln
aHQoKSAtIDIgKiBlZGdlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICBpZiAoIVNjcmF0Y2hCdWZmZXI6
OnNoYXJlZCgpLm1hdGNoZXNMYXN0SW5zZXRTaGFkb3cobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBt
X2NvbG9yU3BhY2UsIHRlbXBsYXRlQm91bmRzLCB0ZW1wbGF0ZUhvbGUsIHJhZGlpKSkgewogICAg
ICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgpAQCAtNjk5LDEyICs2
OTksMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaQogICAgICAg
ICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRMYXN0SW5zZXRTaGFkb3dWYWx1ZXMobV9ibHVy
UmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlQm91bmRzLCB0ZW1wbGF0ZUhv
bGUsIHJhZGlpKTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsK
KyAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKICAgICBib3VuZGluZ1JlY3Qu
bW92ZShtX29mZnNldCk7CiAKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVSZWN0ID0gaG9sZVJlY3Q7
CisgICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlUmVjdCA9IGhvbGVSZWN0OwogICAgIGRlc3RIb2xl
UmVjdC5tb3ZlKG1fb2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgZGVzdEhvbGVCb3VuZHMgPSBkZXN0
SG9sZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RIb2xlQm91bmRzID0gZGVzdEhvbGVSZWN0
OwogICAgIGRlc3RIb2xlQm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkpOwogICAgIGRl
c3RIb2xlQm91bmRzLmluZmxhdGVZKGVkZ2VTaXplLmhlaWdodCgpKTsKIApAQCAtNzI2LDcgKzcy
Niw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGkKICAgICBTY3Jh
dGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwogfQogCi12
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IFJv
dW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgY29u
c3QgSW50U2l6ZSYgZWRnZVNpemUpCit2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNvbnN0
IEludFNpemUmIHRlbXBsYXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwog
ICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKQEAgLTczNSwxNCArNzM1LDE0IEBA
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW4KICAgICBpZiAoIW1fbGF5
ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IHRlbXBsYXRlU2hhZG93
ID0gRmxvYXRSZWN0KGVkZ2VTaXplLndpZHRoKCksIGVkZ2VTaXplLmhlaWdodCgpLCB0ZW1wbGF0
ZVNpemUud2lkdGgoKSAtIDIgKiBlZGdlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0
KCkgLSAyICogZWRnZVNpemUuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCB0ZW1wbGF0ZVNo
YWRvdyA9IEdyYXBoaWNzUmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwg
dGVtcGxhdGVTaXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXpl
LmhlaWdodCgpIC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKIAogICAgIGlmICghU2NyYXRjaEJ1
ZmZlcjo6c2hhcmVkKCkubWF0Y2hlc0xhc3RTaGFkb3cobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBt
X2NvbG9yU3BhY2UsIHRlbXBsYXRlU2hhZG93LCByYWRpaSkpIHsKICAgICAgICAgLy8gRHJhdyBz
aGFkb3cgaW50byB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hh
ZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOwogICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHNoYWRvd1N0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogCi0gICAg
ICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgdGVtcGxhdGVTaXpl
LndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBzaGFkb3dDb250ZXh0
LT5jbGVhclJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1w
bGF0ZVNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgc2hhZG93Q29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIAogICAgICAgICBp
ZiAocmFkaWkuaXNaZXJvKCkpCkBAIC03NTgsNyArNzU4LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpk
cmF3UmVjdFNoYWRvd1dpdGhUaWxpbgogICAgICAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5z
ZXRMYXN0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0
ZW1wbGF0ZVNoYWRvdywgcmFkaWkpOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBzaGFkb3dCb3Vu
ZHMgPSBzaGFkb3dlZFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHNoYWRvd0JvdW5kcyA9IHNoYWRv
d2VkUmVjdDsKICAgICBzaGFkb3dCb3VuZHMubW92ZShtX29mZnNldC53aWR0aCgpLCBtX29mZnNl
dC5oZWlnaHQoKSk7CiAgICAgc2hhZG93Qm91bmRzLmluZmxhdGVYKGVkZ2VTaXplLndpZHRoKCkp
OwogICAgIHNoYWRvd0JvdW5kcy5pbmZsYXRlWShlZGdlU2l6ZS5oZWlnaHQoKSk7CkBAIC03Njks
NyArNzY5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbgogICAg
IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9
CiAKLXZvaWQgU2hhZG93Qmx1cjo6ZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd0JvdW5kcywgY29uc3QgUm91bmRl
ZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgYnVmZmVyUGFkZGluZywgY29uc3Qg
SW50U2l6ZSYgdGVtcGxhdGVTaXplLCBTaGFkb3dEaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZCBT
aGFkb3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93Qm91bmRzLCBjb25zdCBSb3VuZGVkUmVjdDo6
UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXplJiBidWZmZXJQYWRkaW5nLCBjb25zdCBJbnRTaXpl
JiB0ZW1wbGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgY29uc3Qg
SW50U2l6ZSB0d2ljZVJhZGl1cyA9IEludFNpemUoYnVmZmVyUGFkZGluZy53aWR0aCgpICogMiwg
YnVmZmVyUGFkZGluZy5oZWlnaHQoKSAqIDIpOwogCkBAIC03ODMsNyArNzgzLDcgQEAgdm9pZCBT
aGFkb3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpYwogICAgIGludCBjZW50ZXJIZWlnaHQg
PSBzaGFkb3dCb3VuZHMuaGVpZ2h0KCkgLSB0b3BTbGljZSAtIGJvdHRvbVNsaWNlOwogCiAgICAg
aWYgKGRpcmVjdGlvbiA9PSBPdXRlclNoYWRvdykgewotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93
SW50ZXJpb3Ioc2hhZG93Qm91bmRzLngoKSArIGxlZnRTbGljZSwgc2hhZG93Qm91bmRzLnkoKSAr
IHRvcFNsaWNlLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKKyAgICAgICAgR3JhcGhpY3NS
ZWN0IHNoYWRvd0ludGVyaW9yKHNoYWRvd0JvdW5kcy54KCkgKyBsZWZ0U2xpY2UsIHNoYWRvd0Jv
dW5kcy55KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCk7CiAgICAgICAg
IGlmICghc2hhZG93SW50ZXJpb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CiAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwpA
QCAtNzkzLDEyICs3OTMsMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3Jh
cGhpYwogCiAgICAgLy8gTm90ZSB0aGF0IGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIGlzIGZhc3Rl
ciB0aGFuIGNyZWF0aW5nIGEgSW1hZ2UgYW5kIGRyYXdpbmcgdGhhdCwKICAgICAvLyBiZWNhdXNl
IEltYWdlQnVmZmVyOjpkcmF3KCkga25vd3MgdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gY29weSB0
aGUgaW1hZ2UgYml0cy4KLSAgICBGbG9hdFJlY3QgY2VudGVyUmVjdChzaGFkb3dCb3VuZHMueCgp
ICsgbGVmdFNsaWNlLCBzaGFkb3dCb3VuZHMueSgpICsgdG9wU2xpY2UsIGNlbnRlcldpZHRoLCBj
ZW50ZXJIZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCBjZW50ZXJSZWN0KHNoYWRvd0JvdW5kcy54
KCkgKyBsZWZ0U2xpY2UsIHNoYWRvd0JvdW5kcy55KCkgKyB0b3BTbGljZSwgY2VudGVyV2lkdGgs
IGNlbnRlckhlaWdodCk7CiAgICAgY2VudGVyUmVjdCA9IGdyYXBoaWNzQ29udGV4dC0+cm91bmRU
b0RldmljZVBpeGVscyhjZW50ZXJSZWN0KTsKICAgICAKICAgICAvLyBUb3Agc2lkZS4KLSAgICBG
bG9hdFJlY3QgdGlsZVJlY3QgPSBGbG9hdFJlY3QobGVmdFNsaWNlLCAwLCB0ZW1wbGF0ZVNpZGVM
ZW5ndGgsIHRvcFNsaWNlKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoY2Vu
dGVyUmVjdC54KCksIGNlbnRlclJlY3QueSgpIC0gdG9wU2xpY2UsIGNlbnRlclJlY3Qud2lkdGgo
KSwgdG9wU2xpY2UpOworICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdChs
ZWZ0U2xpY2UsIDAsIHRlbXBsYXRlU2lkZUxlbmd0aCwgdG9wU2xpY2UpOworICAgIEdyYXBoaWNz
UmVjdCBkZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0LngoKSwgY2VudGVyUmVjdC55
KCkgLSB0b3BTbGljZSwgY2VudGVyUmVjdC53aWR0aCgpLCB0b3BTbGljZSk7CiAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkZXN0UmVjdCwgdGlsZVJlY3QpOwogCiAgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUu
CkBAIC04MDksOCArODA5LDggQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3TGF5ZXJQaWVjZXMoR3Jh
cGhpYwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIExlZnQg
c2lkZS4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCB0
ZW1wbGF0ZVNpZGVMZW5ndGgpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3Qu
eCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0LnkoKSwgbGVmdFNsaWNlLCBjZW50ZXJSZWN0Lmhl
aWdodCgpKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVjdCgwLCB0b3BTbGljZSwgbGVmdFNs
aWNlLCB0ZW1wbGF0ZVNpZGVMZW5ndGgpOworICAgIGRlc3RSZWN0ID0gR3JhcGhpY3NSZWN0KGNl
bnRlclJlY3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0LnkoKSwgbGVmdFNsaWNlLCBjZW50
ZXJSZWN0LmhlaWdodCgpKTsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlciht
X2xheWVySW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAK
ICAgICAvLyBSaWdodCBzaWRlLgpAQCAtODIxLDIzICs4MjEsMjMgQEAgdm9pZCBTaGFkb3dCbHVy
OjpkcmF3TGF5ZXJQaWVjZXMoR3JhcGhpYwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVS
ZWN0KTsKIAogICAgIC8vIFRvcCBsZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0UmVj
dCgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNlKTsKLSAgICBkZXN0UmVjdCA9IEZsb2F0UmVjdChj
ZW50ZXJSZWN0LngoKSAtIGxlZnRTbGljZSwgY2VudGVyUmVjdC55KCkgLSB0b3BTbGljZSwgbGVm
dFNsaWNlLCB0b3BTbGljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgbGVm
dFNsaWNlLCB0b3BTbGljZSk7CisgICAgZGVzdFJlY3QgPSBHcmFwaGljc1JlY3QoY2VudGVyUmVj
dC54KCkgLSBsZWZ0U2xpY2UsIGNlbnRlclJlY3QueSgpIC0gdG9wU2xpY2UsIGxlZnRTbGljZSwg
dG9wU2xpY2UpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJ
bWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8v
IFRvcCByaWdodCBjb3JuZXIuCi0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QodGVtcGxhdGVTaXpl
LndpZHRoKCkgLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSk7Ci0gICAgZGVz
dFJlY3QgPSBGbG9hdFJlY3QoY2VudGVyUmVjdC5tYXhYKCksIGNlbnRlclJlY3QueSgpIC0gdG9w
U2xpY2UsIHJpZ2h0U2xpY2UsIHRvcFNsaWNlKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVj
dCh0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNs
aWNlKTsKKyAgICBkZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0Lm1heFgoKSwgY2Vu
dGVyUmVjdC55KCkgLSB0b3BTbGljZSwgcmlnaHRTbGljZSwgdG9wU2xpY2UpOwogICAgIGdyYXBo
aWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZGVzdFJlY3QsIHRpbGVSZWN0KTsKIAogICAgIC8vIEJvdHRvbSByaWdodCBjb3JuZXIu
Ci0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QodGVtcGxhdGVTaXplLndpZHRoKCkgLSByaWdodFNs
aWNlLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90
dG9tU2xpY2UpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJlY3QubWF4WCgpLCBj
ZW50ZXJSZWN0Lm1heFkoKSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpOworICAgIHRpbGVSZWN0
ID0gR3JhcGhpY3NSZWN0KHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmlnaHRTbGljZSwgdGVtcGxh
dGVTaXplLmhlaWdodCgpIC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKTsK
KyAgICBkZXN0UmVjdCA9IEdyYXBoaWNzUmVjdChjZW50ZXJSZWN0Lm1heFgoKSwgY2VudGVyUmVj
dC5tYXhZKCksIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKTsKICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RS
ZWN0LCB0aWxlUmVjdCk7CiAKICAgICAvLyBCb3R0b20gbGVmdCBjb3JuZXIuCi0gICAgdGlsZVJl
Y3QgPSBGbG9hdFJlY3QoMCwgdGVtcGxhdGVTaXplLmhlaWdodCgpIC0gYm90dG9tU2xpY2UsIGxl
ZnRTbGljZSwgYm90dG9tU2xpY2UpOwotICAgIGRlc3RSZWN0ID0gRmxvYXRSZWN0KGNlbnRlclJl
Y3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0Lm1heFkoKSwgbGVmdFNsaWNlLCBib3R0b21T
bGljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwgdGVtcGxhdGVTaXplLmhlaWdo
dCgpIC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpOworICAgIGRlc3RSZWN0
ID0gR3JhcGhpY3NSZWN0KGNlbnRlclJlY3QueCgpIC0gbGVmdFNsaWNlLCBjZW50ZXJSZWN0Lm1h
eFkoKSwgbGVmdFNsaWNlLCBib3R0b21TbGljZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwg
dGlsZVJlY3QpOwogfQogCkBAIC04NjIsMTAgKzg2MiwxMCBAQCB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJBbmRDb2xvclNoYWRvd0J1ZmZlCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKICAgICBzaGFkb3dDb250ZXh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOwogICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxD
b2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwotICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0
KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdo
dCgpKSk7CisgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDAsIDAsIHRl
bXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpKTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0KiBTaGFkb3dCbHVyOjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCAq
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCitHcmFwaGljc0NvbnRleHQqIFNo
YWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25z
dCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSkKIHsKICAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRl
eHQpOwogCkBAIC04NzgsNyArODc4LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBTaGFkb3dCbHVyOjpi
ZWdpblNoYWRvdwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXll
ckltYWdlLT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+c2F2ZSgpOwotICAgIHNoYWRv
d0NvbnRleHQtPmNsZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwg
bV9sYXllclNpemUuaGVpZ2h0KCkpKTsKKyAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3QoR3Jh
cGhpY3NSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgp
KSk7CiAKICAgICBzaGFkb3dDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRleHRUcmFuc2xh
dGlvbik7CiAgICAgcmV0dXJuIHNoYWRvd0NvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xv
clNwYWNlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtNTAsMTkgKzUwLDE5IEBAIHB1YmxpYzoKICAgICAgICAgQmx1clNoYWRvdwogICAg
IH07CiAKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKKyAgICBTaGFkb3dCbHVy
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmFkaXVzLCBjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCwg
Y29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICBTaGFkb3dCbHVyKCk7CiAKLSAgICB2b2lk
IHNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwgY29u
c3QgQ29sb3ImLCBDb2xvclNwYWNlLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7Cisg
ICAgdm9pZCBzZXRTaGFkb3dWYWx1ZXMoY29uc3QgR3JhcGhpY3NTaXplJiwgY29uc3QgR3JhcGhp
Y3NTaXplJiAsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSwgYm9vbCBpZ25vcmVUcmFuc2Zvcm1z
ID0gZmFsc2UpOwogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIGln
bm9yZVRyYW5zZm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5z
Zm9ybXM7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBi
ZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJB
cmVhKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBsYXllckFyZWEpOwogICAgIHZvaWQgZW5kU2hhZG93
TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kik7CiAKLSAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYp
OwotICAgIHZvaWQgZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRp
aSYgaG9sZVJhZGlpKTsKKyAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYpOworICAgIHZv
aWQgZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYg
aG9sZVJhZGlpKTsKIAogICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciosIGNv
bnN0IEludFNpemUmLCBpbnQgc3RyaWRlKTsKIApAQCAtODEsMTYgKzgxLDE2IEBAIHByaXZhdGU6
CiAgICAgICAgIElubmVyU2hhZG93CiAgICAgfTsKICAgICAKLSAgICBJbnRSZWN0IGNhbGN1bGF0
ZUxheWVyQm91bmRpbmdSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5
ZXJBcmVhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgSW50UmVjdCBjYWxjdWxhdGVM
YXllckJvdW5kaW5nUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmIGxh
eWVyQXJlYSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogICAgIEludFNpemUgdGVtcGxhdGVT
aXplKGNvbnN0IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSwgY29uc3QgUm91bmRlZFJlY3Q6OlJh
ZGlpJikgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkm
LCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwotICAgIHZvaWQgZHJhd1JlY3RTaGFkb3dXaXRo
VGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFJvdW5kZWRS
ZWN0OjpSYWRpaSYsIGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmx1cnJlZEVkZ2VTaXplKTsKKyAgICB2b2lkIGRyYXdSZWN0U2hhZG93V2l0aG91dFRp
bGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBSb3VuZGVk
UmVjdDo6UmFkaWkmLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpOworICAgIHZvaWQgZHJhd1Jl
Y3RTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYs
IGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYsIGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRl
U2l6ZSwgY29uc3QgSW50U2l6ZSYgYmx1cnJlZEVkZ2VTaXplKTsKIAotICAgIHZvaWQgZHJhd0lu
c2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QpOwotICAgIHZvaWQgZHJhd0luc2V0U2hhZG93V2l0aFRp
bGluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
IGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiBzaGFk
b3dUZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGJsdXJyZWRFZGdlU2l6ZSk7CisgICAgdm9p
ZCBkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdy
YXBoaWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRS
ZWN0OjpSYWRpaSYsIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCk7CisgICAgdm9pZCBkcmF3SW5z
ZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRSZWN0OjpSYWRpaSYs
IGNvbnN0IEludFNpemUmIHNoYWRvd1RlbXBsYXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmx1cnJl
ZEVkZ2VTaXplKTsKICAgICAKLSAgICB2b2lkIGRyYXdMYXllclBpZWNlcyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd0JvdW5kcywgY29uc3QgUm91bmRlZFJlY3Q6OlJh
ZGlpJiwgY29uc3QgSW50U2l6ZSYgcm91bmRlZFJhZGl1cywgY29uc3QgSW50U2l6ZSYgdGVtcGxh
dGVTaXplLCBTaGFkb3dEaXJlY3Rpb24pOworICAgIHZvaWQgZHJhd0xheWVyUGllY2VzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc2hhZG93Qm91bmRzLCBjb25zdCBSb3Vu
ZGVkUmVjdDo6UmFkaWkmLCBjb25zdCBJbnRTaXplJiByb3VuZGVkUmFkaXVzLCBjb25zdCBJbnRT
aXplJiB0ZW1wbGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlvbik7CiAgICAgCiAgICAgdm9pZCBibHVy
U2hhZG93QnVmZmVyKGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSk7CiAgICAgdm9pZCBibHVy
QW5kQ29sb3JTaGFkb3dCdWZmZXIoY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKTsKQEAgLTEw
MiwxNSArMTAyLDE1IEBAIHByaXZhdGU6CiAKICAgICBDb2xvciBtX2NvbG9yOwogICAgIENvbG9y
U3BhY2UgbV9jb2xvclNwYWNlOwotICAgIEZsb2F0U2l6ZSBtX2JsdXJSYWRpdXM7Ci0gICAgRmxv
YXRTaXplIG1fb2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSBtX2JsdXJSYWRpdXM7CisgICAgR3Jh
cGhpY3NTaXplIG1fb2Zmc2V0OwogCiAgICAgSW1hZ2VCdWZmZXIqIG1fbGF5ZXJJbWFnZTsgLy8g
QnVmZmVyIHRvIHdoZXJlIHRoZSB0ZW1wb3Jhcnkgc2hhZG93IHdpbGwgYmUgZHJhd24gdG8uCiAK
LSAgICBGbG9hdFJlY3QgbV9zb3VyY2VSZWN0OyAvLyBTdWItcmVjdCBvZiBtX2xheWVySW1hZ2Ug
dGhhdCBjb250YWlucyB0aGUgc2hhZG93IHBpeGVscy4KLSAgICBGbG9hdFBvaW50IG1fbGF5ZXJP
cmlnaW47IC8vIFRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgKHBvc3NpYmx5IGNsaXBwZWQpIGJvdW5k
aW5nIHJlY3QgdG8gZHJhdyB0aGUgc2hhZG93IHRvLgotICAgIEZsb2F0U2l6ZSBtX2xheWVyU2l6
ZTsgLy8gU2l6ZSBvZiBtX2xheWVySW1hZ2UgcGl4ZWxzIHRoYXQgbmVlZCBibHVycmluZy4KLSAg
ICBGbG9hdFNpemUgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbjsgLy8gVHJhbnNsYXRpb24gdG8g
YXBwbHkgdG8gbV9sYXllckNvbnRleHQgZm9yIHRoZSBzaGFkb3cgdG8gYmUgY29ycmVjdGx5IGNs
aXBwZWQuCisgICAgR3JhcGhpY3NSZWN0IG1fc291cmNlUmVjdDsgLy8gU3ViLXJlY3Qgb2YgbV9s
YXllckltYWdlIHRoYXQgY29udGFpbnMgdGhlIHNoYWRvdyBwaXhlbHMuCisgICAgR3JhcGhpY3NQ
b2ludCBtX2xheWVyT3JpZ2luOyAvLyBUb3AtbGVmdCBjb3JuZXIgb2YgdGhlIChwb3NzaWJseSBj
bGlwcGVkKSBib3VuZGluZyByZWN0IHRvIGRyYXcgdGhlIHNoYWRvdyB0by4KKyAgICBHcmFwaGlj
c1NpemUgbV9sYXllclNpemU7IC8vIFNpemUgb2YgbV9sYXllckltYWdlIHBpeGVscyB0aGF0IG5l
ZWQgYmx1cnJpbmcuCisgICAgR3JhcGhpY3NTaXplIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247
IC8vIFRyYW5zbGF0aW9uIHRvIGFwcGx5IHRvIG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93
IHRvIGJlIGNvcnJlY3RseSBjbGlwcGVkLgogCiAgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiRm9udERhdGEuaCIKICNpbmNsdWRlICJGb250TWV0cmljcy5o
IgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHbHlwaE1ldHJpY3NNYXAuaCIK
ICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogI2luY2x1ZGUgIlR5cGVzZXR0aW5nRmVh
dHVyZXMuaCIKQEAgLTEyOCw5ICsxMjgsOSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgYXZnQ2hhcldp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmdDaGFyV2lkdGg7IH0KICAgICB2b2lkIHNldEF2Z0No
YXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGggPSBhdmdDaGFyV2lk
dGg7IH0KIAotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CisgICAg
R3JhcGhpY3NSZWN0IGJvdW5kc0ZvckdseXBoKEdseXBoKSBjb25zdDsKICAgICBmbG9hdCB3aWR0
aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcGxhdGZvcm1Cb3Vu
ZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHBsYXRmb3JtQm91bmRz
Rm9yR2x5cGgoR2x5cGgpIGNvbnN0OwogICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChH
bHlwaCkgY29uc3Q7CiAKICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
cGFjZVdpZHRoOyB9CkBAIC0yMjAsNyArMjIwLDcgQEAgcHJpdmF0ZToKICAgICB8fCAoT1MoV0lO
RE9XUykgJiYgUExBVEZPUk0oV1gpKQogICAgIHZvaWQgaW5pdEdESUZvbnQoKTsKICAgICB2b2lk
IHBsYXRmb3JtQ29tbW9uRGVzdHJveSgpOwotICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHRElHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGJvdW5kc0ZvckdESUdseXBo
KEdseXBoIGdseXBoKSBjb25zdDsKICAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBoIGds
eXBoKSBjb25zdDsKICNlbmRpZgogCkBAIC0yMzEsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICBG
b250UGxhdGZvcm1EYXRhIG1fcGxhdGZvcm1EYXRhOwogICAgIE93blB0cjxBZGRpdGlvbmFsRm9u
dERhdGE+IG1fZm9udERhdGE7CiAKLSAgICBtdXRhYmxlIE93blB0cjxHbHlwaE1ldHJpY3NNYXA8
RmxvYXRSZWN0PiA+IG1fZ2x5cGhUb0JvdW5kc01hcDsKKyAgICBtdXRhYmxlIE93blB0cjxHbHlw
aE1ldHJpY3NNYXA8R3JhcGhpY3NSZWN0PiA+IG1fZ2x5cGhUb0JvdW5kc01hcDsKICAgICBtdXRh
YmxlIEdseXBoTWV0cmljc01hcDxmbG9hdD4gbV9nbHlwaFRvV2lkdGhNYXA7CiAKICAgICBib29s
IG1fdHJlYXRBc0ZpeGVkUGl0Y2g7CkBAIC0yOTksMTIgKzI5OSwxMiBAQCBwcml2YXRlOgogfTsK
IAogI2lmICEoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkKLUFMV0FZU19JTkxJTkUg
RmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK0FMV0FZU19JTkxJTkUgR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JH
bHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBpZiAoaXNaZXJvV2lkdGhTcGFjZUdseXBo
KGdseXBoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIEdyYXBoaWNzUmVjdCBi
b3VuZHM7CiAgICAgaWYgKG1fZ2x5cGhUb0JvdW5kc01hcCkgewogICAgICAgICBib3VuZHMgPSBt
X2dseXBoVG9Cb3VuZHNNYXAtPm1ldHJpY3NGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgIGlmIChi
b3VuZHMud2lkdGgoKSAhPSBjR2x5cGhTaXplVW5rbm93bikKQEAgLTMxMyw3ICszMTMsNyBAQCBB
TFdBWVNfSU5MSU5FIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6CiAKICAgICBib3VuZHMgPSBw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICBpZiAoIW1fZ2x5cGhUb0JvdW5kc01h
cCkKLSAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gYWRvcHRQdHIobmV3IEdseXBoTWV0cmlj
c01hcDxGbG9hdFJlY3Q+KTsKKyAgICAgICAgbV9nbHlwaFRvQm91bmRzTWFwID0gYWRvcHRQdHIo
bmV3IEdseXBoTWV0cmljc01hcDxHcmFwaGljc1JlY3Q+KTsKICAgICBtX2dseXBoVG9Cb3VuZHNN
YXAtPnNldE1ldHJpY3NGb3JHbHlwaChnbHlwaCwgYm91bmRzKTsKICAgICByZXR1cm4gYm91bmRz
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhp
Y3NQb2ludDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEZvbnQ7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6
CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBXaWR0aEl0ZXJh
dG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3Rl
ciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRy
YXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBG
bG9hdFBvaW50JikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBo
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEq
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEdyYXBoaWNzUG9p
bnQmKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3Ry
aW5nJiBnbHlwaE5hbWUpIGNvbnN0ID0gMDsKICNlbmRpZgogICAgIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQogICAgIGNvbnN0IEludFJlY3QmIHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICAKLSAgICBzdGF0aWMgdm9pZCBwYWlu
dENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IHN0YXRpYyB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
R3JhcGhpY3NSZWN0Jik7CiAKIHByaXZhdGU6CiAgICAgVGlsZShUaWxlZEJhY2tpbmdTdG9yZSos
IGNvbnN0IENvb3JkaW5hdGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6
OnNldFRpbGVDcmVhdGlvbkQKICAgICBtX3RpbGVDcmVhdGlvbkRlbGF5ID0gZGVsYXk7CiB9CiAK
LXZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhj
b25zdCBGbG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVs
dGlwbGllcikKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0
aXBsaWVycyhjb25zdCBHcmFwaGljc1NpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBHcmFwaGlj
c1NpemUmIGNvdmVyTXVsdGlwbGllcikKIHsKICAgICBtX2tlZXBBcmVhTXVsdGlwbGllciA9IGtl
ZXBNdWx0aXBsaWVyOwogICAgIG1fY292ZXJBcmVhTXVsdGlwbGllciA9IGNvdmVyTXVsdGlwbGll
cjsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpwYWludChHcmFw
aGljc0NvCiAgICAgCiAgICAgLy8gQXNzdW1lcyB0aGUgYmFja2luZyBzdG9yZSBpcyBwYWludGVk
IHdpdGggdGhlIHNjYWxlIHRyYW5zZm9ybSBhcHBsaWVkLgogICAgIC8vIFNpbmNlIHRpbGUgY29u
dGVudCBpcyBhbHJlYWR5IHNjYWxlZCwgZmlyc3QgcmV2ZXJ0IHRoZSBzY2FsaW5nIGZyb20gdGhl
IHBhaW50ZXIuCi0gICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEuZiAvIG1fY29udGVudHNT
Y2FsZSwgMS5mIC8gbV9jb250ZW50c1NjYWxlKSk7CisgICAgY29udGV4dC0+c2NhbGUoR3JhcGhp
Y3NTaXplKDEuZiAvIG1fY29udGVudHNTY2FsZSwgMS5mIC8gbV9jb250ZW50c1NjYWxlKSk7CiAg
ICAgCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9tQ29udGVudHMocmVjdCk7CiAgICAg
CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6cGFpbnQoR3JhcGhp
Y3NDbwogICAgICAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0ID0gaW50ZXJzZWN0aW9uKHRpbGVS
ZWN0LCBkaXJ0eVJlY3QpOwogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBUaWxlOjpwYWlu
dENoZWNrZXJQYXR0ZXJuKGNvbnRleHQsIEZsb2F0UmVjdCh0YXJnZXQpKTsKKyAgICAgICAgICAg
ICAgICBUaWxlOjpwYWludENoZWNrZXJQYXR0ZXJuKGNvbnRleHQsIEdyYXBoaWNzUmVjdCh0YXJn
ZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI5MywxMyArMjkzLDEz
IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OmRyb3BPdmVyaGFuZ2luZ1QKIAogdm9pZCBUaWxl
ZEJhY2tpbmdTdG9yZTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJl
Y3QpCiB7Ci0gICAgRmxvYXRSZWN0IGtlZXBSZWN0RiA9IGtlZXBSZWN0OworICAgIEdyYXBoaWNz
UmVjdCBrZWVwUmVjdEYgPSBrZWVwUmVjdDsKIAogICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRl
PiB0b1JlbW92ZTsKICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwog
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vj
b25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNv
bmQtPnJlY3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+
cmVjdCgpOwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKICAg
ICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsKICAgICB9CkBAIC0zMjUsNyAr
MzI1LDcgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlVGlsZShjb25zdAogCiBJbnRS
ZWN0IFRpbGVkQmFja2luZ1N0b3JlOjptYXBUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgp
IC8gbV9jb250ZW50c1NjYWxlLAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNz
UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgcmVjdC55KCkgLyBtX2Nv
bnRlbnRzU2NhbGUsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAvIG1fY29udGVudHNTY2FsZSwKICAg
ICAgICAgcmVjdC5oZWlnaHQoKSAvIG1fY29udGVudHNTY2FsZSkpOwpAQCAtMzMzLDcgKzMzMyw3
IEBAIEludFJlY3QgVGlsZWRCYWNraW5nU3RvcmU6Om1hcFRvQ29udGVudHMKIAogSW50UmVjdCBU
aWxlZEJhY2tpbmdTdG9yZTo6bWFwRnJvbUNvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpICog
bV9jb250ZW50c1NjYWxlLAorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNzUmVj
dChyZWN0LngoKSAqIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgcmVjdC55KCkgKiBtX2NvbnRl
bnRzU2NhbGUsCiAgICAgICAgIHJlY3Qud2lkdGgoKSAqIG1fY29udGVudHNTY2FsZSwKICAgICAg
ICAgcmVjdC5oZWlnaHQoKSAqIG1fY29udGVudHNTY2FsZSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFj
a2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmIEVOQUJM
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiVGlsZS5oIgpAQCAtNjAsMTIgKzYwLDEyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFRpbGVDcmVhdGlvbkRlbGF5KGRvdWJsZSBkZWxheSk7CiAgICAgCiAgICAgLy8g
VGlsZWQgYXJlIGRyb3BwZWQgb3V0c2lkZSB0aGUga2VlcCBhcmVhLCBhbmQgY3JlYXRlZCBmb3Ig
Y292ZXIgYXJlYS4gVGhlIHZhbHVlcyBhIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBzaXplLgot
ICAgIHZvaWQgZ2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKEZsb2F0U2l6ZSYga2VlcE11
bHRpcGxpZXIsIEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQorICAgIHZvaWQgZ2V0S2VlcEFu
ZENvdmVyQXJlYU11bHRpcGxpZXJzKEdyYXBoaWNzU2l6ZSYga2VlcE11bHRpcGxpZXIsIEdyYXBo
aWNzU2l6ZSYgY292ZXJNdWx0aXBsaWVyKQogICAgIHsKICAgICAgICAga2VlcE11bHRpcGxpZXIg
PSBtX2tlZXBBcmVhTXVsdGlwbGllcjsKICAgICAgICAgY292ZXJNdWx0aXBsaWVyID0gbV9jb3Zl
ckFyZWFNdWx0aXBsaWVyOwogICAgIH0KLSAgICB2b2lkIHNldEtlZXBBbmRDb3ZlckFyZWFNdWx0
aXBsaWVycyhjb25zdCBGbG9hdFNpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUm
IGNvdmVyTXVsdGlwbGllcik7ICAgIAorICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRp
cGxpZXJzKGNvbnN0IEdyYXBoaWNzU2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEdyYXBoaWNz
U2l6ZSYgY292ZXJNdWx0aXBsaWVyKTsgICAgCiAKIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFRp
bGVCdWZmZXJVcGRhdGVUaW1lcigpOwpAQCAtMTEwLDggKzExMCw4IEBAIHByaXZhdGU6CiAKICAg
ICBJbnRTaXplIG1fdGlsZVNpemU7CiAgICAgZG91YmxlIG1fdGlsZUNyZWF0aW9uRGVsYXk7Ci0g
ICAgRmxvYXRTaXplIG1fa2VlcEFyZWFNdWx0aXBsaWVyOwotICAgIEZsb2F0U2l6ZSBtX2NvdmVy
QXJlYU11bHRpcGxpZXI7CisgICAgR3JhcGhpY3NTaXplIG1fa2VlcEFyZWFNdWx0aXBsaWVyOwor
ICAgIEdyYXBoaWNzU2l6ZSBtX2NvdmVyQXJlYU11bHRpcGxpZXI7CiAgICAgCiAgICAgSW50UmVj
dCBtX3ByZXZpb3VzVmlzaWJsZVJlY3Q7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdW5z
aWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2ZmcwogICAgIHdpZHRoU2luY2VMYXN0
Um91bmRpbmcgLT0gbV9ydW5XaWR0aFNvRmFyOwogCiAgICAgZmxvYXQgbGFzdFJvdW5kaW5nV2lk
dGggPSBtX2ZpbmFsUm91bmRpbmdXaWR0aDsKLSAgICBGbG9hdFJlY3QgYm91bmRzOworICAgIEdy
YXBoaWNzUmVjdCBib3VuZHM7CiAKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcHJpbWFyeUZv
bnQgPSBtX2ZvbnQtPnByaW1hcnlGb250KCk7CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGxh
c3RGb250RGF0YSA9IHByaW1hcnlGb250OwpAQCAtMjM4LDkgKzIzOCw5IEBAIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnMKICAgICAgICAgbGFzdFJvdW5kaW5nV2lkdGgg
PSB3aWR0aCAtIG9sZFdpZHRoOwogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5k
cykgewotICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBo
Qm91bmRpbmdCb3hZLCBib3VuZHMubWF4WSgpKTsKLSAgICAgICAgICAgIG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFkgPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLnkoKSk7Ci0gICAg
ICAgICAgICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZsb2F0PigwLCBib3VuZHMubWF4WCgp
IC0gd2lkdGgpOworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21h
eEdseXBoQm91bmRpbmdCb3hZLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLm1heFkoKSkpOwor
ICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRp
bmdCb3hZLCBzdGF0aWNfY2FzdDxmbG9hdD4oYm91bmRzLnkoKSkpOworICAgICAgICAgICAgbV9s
YXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJvdW5k
cy5tYXhYKCkpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lv
biA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCi0j
aW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVk
ZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CkBAIC0yNTEsNyArMjUxLDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmlu
ZyBtX2Fzc2V0VVJMOwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9hZDsKLSAgICBG
bG9hdFNpemUgbV9zY2FsZUZhY3RvcjsKKyAgICBHcmFwaGljc1NpemUgbV9zY2FsZUZhY3RvcjsK
IAogICAgIEludFNpemUgbV9jYWNoZWROYXR1cmFsU2l6ZTsKICAgICBtdXRhYmxlIGZsb2F0IG1f
Y2FjaGVkTWF4VGltZUxvYWRlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNyAr
NjA3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlm
IChpbWFnZSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KmNvbnRleHQpOwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLjBm
LCAtMS4wZikpOworICAgICAgICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEu
MGYpKTsKICAgICAgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uTG93KTsKICAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCks
IEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAgICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBw
YWludFJlY3Qud2lkdGgoKSwgcGFpbnRSZWN0LmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCkBA
IC03OSw3ICs3OSw3IEBAIHN0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZVRyYW5zZm9ybWF0aW8K
ICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRChUcmFu
c2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKK3N0YXRpYyBib29s
IGlzVHJhbnNmb3JtVHlwZUdyYXBoaWNzUG9pbnQzRChUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsK
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6CkBAIC05NCw3ICs5NCw3IEBAIHN0
YXRpYyBib29sIGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCgKIAogc3RhdGljIGJvb2wgaXNU
cmFuc2Zvcm1UeXBlTnVtYmVyKFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFu
c2Zvcm1UeXBlKQogewotICAgIHJldHVybiAhaXNUcmFuc2Zvcm1UeXBlVHJhbnNmb3JtYXRpb25N
YXRyaXgodHJhbnNmb3JtVHlwZSkgJiYgIWlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCh0cmFu
c2Zvcm1UeXBlKTsKKyAgICByZXR1cm4gIWlzVHJhbnNmb3JtVHlwZVRyYW5zZm9ybWF0aW9uTWF0
cml4KHRyYW5zZm9ybVR5cGUpICYmICFpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0QodHJh
bnNmb3JtVHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcCwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIHRyYW5zZm9ybVR5cGUsIGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0
JiB2YWx1ZSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5j
dGlvblZhbHVlKGNvCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1GdW5jdGlv
blZhbHVlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3AsIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBGbG9hdFBvaW50M0QmIHZhbHVlKQorc3RhdGljIHZvaWQgZ2V0VHJhbnNmb3JtRnVuY3Rpb25W
YWx1ZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wLCBUcmFuc2Zvcm1PcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
R3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHRyYW5zZm9ybVR5cGUpIHsK
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6CkBAIC0zNzUsNyArMzc1LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFJlcGxpY2F0ZWRCeUxheQogICAgIG5vdGVMYXllclBy
b3BlcnR5Q2hhbmdlZChSZXBsaWNhdGVkTGF5ZXJDaGFuZ2VkKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBHcmFw
aGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewog
ICAgIGlmIChwb2ludCA9PSBtX3Bvc2l0aW9uKQogICAgICAgICByZXR1cm47CkBAIC0zODQsNyAr
Mzg0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFBvc2l0aW9uKGNvbnN0IAogICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNBOjpzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0Qm
IHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAgICByZXR1
cm47CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldEFuY2hvclBv
aW50KGNvbgogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwog
fQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUp
CiB7CiAgICAgaWYgKHNpemUgPT0gbV9zaXplKQogICAgICAgICByZXR1cm47CkBAIC00MDIsNyAr
NDAyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldFNpemUoY29uc3QgRmxvYQogICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChHZW9tZXRyeUNoYW5nZWQpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c2V0Qm91bmRzT3JpZ2luKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbikKK3Zv
aWQgR3JhcGhpY3NMYXllckNBOjpzZXRCb3VuZHNPcmlnaW4oY29uc3QgR3JhcGhpY3NQb2ludCYg
b3JpZ2luKQogewogICAgIGlmIChvcmlnaW4gPT0gbV9ib3VuZHNPcmlnaW4pCiAgICAgICAgIHJl
dHVybjsKQEAgLTU2MSwxOSArNTYxLDE5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRPcGFj
aXR5KGZsb2F0IG8KIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldE5lZWRzRGlzcGxheSgpCiB7
Ci0gICAgRmxvYXRSZWN0IGh1Z2VSZWN0KC1udW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpIC8g
MiwgLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkgLyAyLAorICAgIEdyYXBoaWNzUmVjdCBo
dWdlUmVjdCgtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSAvIDIsIC1udW1lcmljX2xpbWl0
czxmbG9hdD46Om1heCgpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjptYXgoKSwgbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7CiAKICAgICBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoaHVnZVJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgR3JhcGhp
Y3NMYXllckNBOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKQog
ewogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UmVjdCByZWN0KHIpOwotICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyhGbG9hdFBvaW50KCksIG1f
c2l6ZSk7CisgICAgR3JhcGhpY3NSZWN0IHJlY3Qocik7CisgICAgR3JhcGhpY3NSZWN0IGxheWVy
Qm91bmRzKEdyYXBoaWNzUG9pbnQoKSwgbV9zaXplKTsKICAgICByZWN0LmludGVyc2VjdChsYXll
ckJvdW5kcyk7CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC05
NzYsMTggKzk3NiwxOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlR2VvbWV0cnkoKQog
ICAgIGlmIChuZWVkVGlsZWRMYXllciAhPSBtX3VzaW5nVGlsZWRMYXllcikKICAgICAgICAgc3dh
cEZyb21PclRvVGlsZWRMYXllcihuZWVkVGlsZWRMYXllcik7CiAKLSAgICBGbG9hdFNpemUgdXNl
ZFNpemUgPSBtX3VzaW5nVGlsZWRMYXllciA/IGNvbnN0cmFpbmVkU2l6ZSgpIDogbV9zaXplOwot
ICAgIEZsb2F0UmVjdCBib3VuZHNSZWN0KG1fYm91bmRzT3JpZ2luLCB1c2VkU2l6ZSk7CisgICAg
R3JhcGhpY3NTaXplIHVzZWRTaXplID0gbV91c2luZ1RpbGVkTGF5ZXIgPyBjb25zdHJhaW5lZFNp
emUoKSA6IG1fc2l6ZTsKKyAgICBHcmFwaGljc1JlY3QgYm91bmRzUmVjdChtX2JvdW5kc09yaWdp
biwgdXNlZFNpemUpOwogCiAgICAgLy8gVXBkYXRlIHBvc2l0aW9uLgogICAgIC8vIFBvc2l0aW9u
IGlzIG9mZnNldCBvbiB0aGUgbGF5ZXIgYnkgdGhlIGxheWVyIGFuY2hvciBwb2ludC4KLSAgICBG
bG9hdFBvaW50IHBvc1BvaW50KG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiB1
c2VkU2l6ZS53aWR0aCgpLCBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogdXNl
ZFNpemUuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9pbnQgcG9zUG9pbnQobV9wb3NpdGlvbi54
KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIHVzZWRTaXplLndpZHRoKCksIG1fcG9zaXRpb24ueSgp
ICsgbV9hbmNob3JQb2ludC55KCkgKiB1c2VkU2l6ZS5oZWlnaHQoKSk7CiAgICAgcHJpbWFyeUxh
eWVyKCktPnNldFBvc2l0aW9uKHBvc1BvaW50KTsKIAogICAgIGlmIChMYXllck1hcCogbGF5ZXJD
bG9uZU1hcCA9IHByaW1hcnlMYXllckNsb25lcygpKSB7CiAgICAgICAgIExheWVyTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBsYXllckNsb25lTWFwLT5lbmQoKTsKICAgICAgICAgZm9yIChMYXll
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXllckNsb25lTWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xvbmVQb3NpdGlvbiA9IHBvc1Bv
aW50OworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjbG9uZVBvc2l0aW9uID0gcG9zUG9pbnQ7
CiAgICAgICAgICAgICBpZiAobV9yZXBsaWNhTGF5ZXIgJiYgaXNSZXBsaWNhdGVkUm9vdENsb25l
KGl0LT5maXJzdCkpIHsKICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgc3BlY2lhbC1j
YXNlIHBvc2l0aW9uIGZvciB0aGUgcm9vdCBvZiBhIGNsb25lIHN1YnRyZWUsCiAgICAgICAgICAg
ICAgICAgLy8gd2hpY2ggd2Ugc2V0IHVwIGluIHJlcGxpY2F0ZWRMYXllclJvb3QoKS4KQEAgLTEx
ODEsOCArMTE4MSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjplbnN1cmVTdHJ1Y3R1cmFsTGEK
ICAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKICAgICAKICAgICAvLyBTZXQgcHJvcGVy
dGllcyBvZiBtX2xheWVyIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBzaW5jZSB0aGVzZSBhcmUg
ZXhwcmVzc2VkIG9uIG9uIHRoZSBzdHJ1Y3R1cmFsIGxheWVyLgotICAgIEZsb2F0UG9pbnQgcG9p
bnQobV9zaXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVpZ2h0KCkgLyAyLjBmKTsKLSAgICBG
bG9hdFBvaW50M0QgYW5jaG9yUG9pbnQoMC41ZiwgMC41ZiwgMCk7CisgICAgR3JhcGhpY3NQb2lu
dCBwb2ludChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWlnaHQoKSAvIDIuMGYpOwor
ICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3JQb2ludCgwLjVmLCAwLjVmLCAwKTsKICAgICBtX2xh
eWVyLT5zZXRQb3NpdGlvbihwb2ludCk7CiAgICAgbV9sYXllci0+c2V0QW5jaG9yUG9pbnQoYW5j
aG9yUG9pbnQpOwogICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpKTsKQEAgLTEzMTEsOCArMTMxMSw4IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVD
b250ZW50c1JlY3QKICAgICBpZiAoIW1fY29udGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRmxvYXRQb2ludCBwb2ludChtX2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNSZWN0
LnkoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgbV9jb250ZW50c1JlY3Qud2lkdGgoKSwg
bV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQobV9jb250
ZW50c1JlY3QueCgpLCBtX2NvbnRlbnRzUmVjdC55KCkpOworICAgIEdyYXBoaWNzUmVjdCByZWN0
KDAsIDAsIG1fY29udGVudHNSZWN0LndpZHRoKCksIG1fY29udGVudHNSZWN0LmhlaWdodCgpKTsK
IAogICAgIG1fY29udGVudHNMYXllci0+c2V0UG9zaXRpb24ocG9pbnQpOwogICAgIG1fY29udGVu
dHNMYXllci0+c2V0Qm91bmRzKHJlY3QpOwpAQCAtMTM4Nyw3ICsxMzg3LDcgQEAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBoaWNzTGF5ZQogICAgIEdyYXBoaWNzTGF5ZXJDQSogcmVw
bGljYXRlZExheWVyID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNBKj4obV9yZXBsaWNhdGVk
TGF5ZXIpOwogICAgIAogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lZExheWVyUm9v
dCA9IHJlcGxpY2F0ZWRMYXllci0+ZmV0Y2hDbG9uZUxheWVycyh0aGlzLCByZXBsaWNhU3RhdGUs
IFJvb3RDbG9uZUxldmVsKTsKLSAgICBGbG9hdFBvaW50IGNsb25lUm9vdFBvc2l0aW9uID0gcmVw
bGljYXRlZExheWVyLT5wb3NpdGlvbkZvckNsb25lUm9vdExheWVyKCk7CisgICAgR3JhcGhpY3NQ
b2ludCBjbG9uZVJvb3RQb3NpdGlvbiA9IHJlcGxpY2F0ZWRMYXllci0+cG9zaXRpb25Gb3JDbG9u
ZVJvb3RMYXllcigpOwogCiAgICAgLy8gUmVwbGljYSByb290IGhhcyBubyBvZmZzZXQgb3IgdHJh
bnNmb3JtCiAgICAgY2xvbmVkTGF5ZXJSb290LT5zZXRQb3NpdGlvbihjbG9uZVJvb3RQb3NpdGlv
bik7CkBAIC0xNzg5LDEyICsxNzg5LDEyIEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFu
c2Zvcm1BbmltYXQKICAgICAgICAgICAgIGZsb2F0IHRvVmFsdWU7CiAgICAgICAgICAgICBnZXRU
cmFuc2Zvcm1GdW5jdGlvblZhbHVlKGVuZFZhbHVlLT52YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4
KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB0b1ZhbHVlKTsKICAgICAgICAgICAgIGJhc2lj
QW5pbS0+c2V0VG9WYWx1ZSh0b1ZhbHVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9y
bVR5cGVGbG9hdFBvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgewotICAgICAgICAgICAgRmxvYXRQ
b2ludDNEIGZyb21WYWx1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1RyYW5zZm9ybVR5cGVHcmFw
aGljc1BvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgeworICAgICAgICAgICAgR3JhcGhpY3NQb2lu
dDNEIGZyb21WYWx1ZTsKICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9uVmFsdWUoc3Rh
cnRWYWx1ZS0+dmFsdWUoKS0+YXQoZnVuY3Rpb25JbmRleCksIHRyYW5zZm9ybU9wVHlwZSwgYm94
U2l6ZSwgZnJvbVZhbHVlKTsKICAgICAgICAgICAgIGJhc2ljQW5pbS0+c2V0RnJvbVZhbHVlKGZy
b21WYWx1ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCB0b1ZhbHVl
OworICAgICAgICAgICAgR3JhcGhpY3NQb2ludDNEIHRvVmFsdWU7CiAgICAgICAgICAgICBnZXRU
cmFuc2Zvcm1GdW5jdGlvblZhbHVlKGVuZFZhbHVlLT52YWx1ZSgpLT5hdChmdW5jdGlvbkluZGV4
KSwgdHJhbnNmb3JtT3BUeXBlLCBib3hTaXplLCB0b1ZhbHVlKTsKICAgICAgICAgICAgIGJhc2lj
QW5pbS0+c2V0VG9WYWx1ZSh0b1ZhbHVlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE4MjYsNyAr
MTgyNiw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFuc2Zvcm1BbmltYXQKIHsKICAg
ICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOwogICAgIFZlY3RvcjxmbG9hdD4gZmxvYXRWYWx1ZXM7
Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQzRD4gZmxvYXRQb2ludDNEVmFsdWVzOworICAgIFZlY3Rv
cjxHcmFwaGljc1BvaW50M0Q+IGZsb2F0UG9pbnQzRFZhbHVlczsKICAgICBWZWN0b3I8VHJhbnNm
b3JtYXRpb25NYXRyaXg+IHRyYW5zZm9ybWF0aW9uTWF0cml4VmFsdWVzOwogICAgIFZlY3Rvcjxj
b25zdCBUaW1pbmdGdW5jdGlvbio+IHRpbWluZ0Z1bmN0aW9uczsKIApAQCAtMTg0OSw4ICsxODQ5
LDggQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdAogICAgICAgICAg
ICAgICAgIGZsb2F0IHZhbHVlOwogICAgICAgICAgICAgICAgIGdldFRyYW5zZm9ybUZ1bmN0aW9u
VmFsdWUodHJhbnNmb3JtT3AsIHRyYW5zZm9ybU9wVHlwZSwgYm94U2l6ZSwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgIGZsb2F0VmFsdWVzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGlzVHJhbnNmb3JtVHlwZUZsb2F0UG9pbnQzRCh0cmFuc2Zvcm1PcFR5cGUpKSB7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRQb2ludDNEIHZhbHVlOworICAgICAgICAgICAgfSBlbHNlIGlm
IChpc1RyYW5zZm9ybVR5cGVHcmFwaGljc1BvaW50M0QodHJhbnNmb3JtT3BUeXBlKSkgeworICAg
ICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQzRCB2YWx1ZTsKICAgICAgICAgICAgICAgICBnZXRU
cmFuc2Zvcm1GdW5jdGlvblZhbHVlKHRyYW5zZm9ybU9wLCB0cmFuc2Zvcm1PcFR5cGUsIGJveFNp
emUsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBmbG9hdFBvaW50M0RWYWx1ZXMuYXBwZW5kKHZh
bHVlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xODcxLDcgKzE4NzEsNyBAQCBib29sIEdy
YXBoaWNzTGF5ZXJDQTo6c2V0VHJhbnNmb3JtQW5pbWF0CiAgICAgCiAgICAgaWYgKGlzVHJhbnNm
b3JtVHlwZU51bWJlcih0cmFuc2Zvcm1PcFR5cGUpKQogICAgICAgICBrZXlmcmFtZUFuaW0tPnNl
dFZhbHVlcyhmbG9hdFZhbHVlcyk7Ci0gICAgZWxzZSBpZiAoaXNUcmFuc2Zvcm1UeXBlRmxvYXRQ
b2ludDNEKHRyYW5zZm9ybU9wVHlwZSkpCisgICAgZWxzZSBpZiAoaXNUcmFuc2Zvcm1UeXBlR3Jh
cGhpY3NQb2ludDNEKHRyYW5zZm9ybU9wVHlwZSkpCiAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0
VmFsdWVzKGZsb2F0UG9pbnQzRFZhbHVlcyk7CiAgICAgZWxzZQogICAgICAgICBrZXlmcmFtZUFu
aW0tPnNldFZhbHVlcyh0cmFuc2Zvcm1hdGlvbk1hdHJpeFZhbHVlcyk7CkBAIC0xOTk0LDkgKzE5
OTQsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0RGVidWdCb3JkZXIoY29uCiAgICAgfQog
fQogCi1GbG9hdFNpemUgR3JhcGhpY3NMYXllckNBOjpjb25zdHJhaW5lZFNpemUoKSBjb25zdAor
R3JhcGhpY3NTaXplIEdyYXBoaWNzTGF5ZXJDQTo6Y29uc3RyYWluZWRTaXplKCkgY29uc3QKIHsK
LSAgICBGbG9hdFNpemUgY29uc3RyYWluZWRTaXplID0gbV9zaXplOworICAgIEdyYXBoaWNzU2l6
ZSBjb25zdHJhaW5lZFNpemUgPSBtX3NpemU7CiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBmbG9hdCB0aWxl
Q29sdW1ucyA9IGNlaWxmKG1fc2l6ZS53aWR0aCgpIC8ga1RpbGVkTGF5ZXJUaWxlU2l6ZSk7CiAg
ICAgZmxvYXQgdGlsZVJvd3MgPSBjZWlsZihtX3NpemUuaGVpZ2h0KCkgLyBrVGlsZWRMYXllclRp
bGVTaXplKTsKQEAgLTIwMTgsNyArMjAxOCw3IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0xheWVyQ0E6
OmNvbnN0cmFpbmVkU2kKICAgICByZXR1cm4gY29uc3RyYWluZWRTaXplOwogfQogCi1ib29sIEdy
YXBoaWNzTGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
Y29uc3QKK2Jvb2wgR3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgR3Jh
cGhpY3NTaXplJiBzaXplKSBjb25zdAogewogICAgIGlmICghbV9kcmF3c0NvbnRlbnQgfHwgIW1f
YWxsb3dUaWxlZExheWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTE5LDkgKzIxMTks
OSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0dXBDb250ZW50c0xheWVyCiAgICAgICAgICAg
ICAwLjBmLCAwLjBmLCAxLjBmLCAwLjBmLAogICAgICAgICAgICAgMC4wZiwgMC4wZiwgMC4wZiwg
MS4wZik7CiAgICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldFRyYW5zZm9ybShmbGlwcGVyKTsKLSAg
ICAgICAgY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDEsIDAp
KTsKKyAgICAgICAgY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNE
KDAsIDEsIDApKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29udGVudHNMYXllci0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBjb250ZW50c0xheWVyLT5zZXRBbmNob3JQ
b2ludChHcmFwaGljc1BvaW50M0QoKSk7CiAKICAgICBpZiAoc2hvd0RlYnVnQm9yZGVycygpKSB7
CiAgICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yKDAsIDAsIDEyOCwg
MTgwKSk7CkBAIC0yMTgwLDE0ICsyMTgwLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZW1v
dmVDbG9uZUxheWVycygKICAgICBtX2NvbnRlbnRzTGF5ZXJDbG9uZXMgPSBudWxscHRyOwogfQog
Ci1GbG9hdFBvaW50IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJvb3RMYXllcigp
IGNvbnN0CitHcmFwaGljc1BvaW50IEdyYXBoaWNzTGF5ZXJDQTo6cG9zaXRpb25Gb3JDbG9uZVJv
b3RMYXllcigpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBjYW4gZ2V0IGNhbGxlZCBkdXJpbmcgYSBz
eW5jIHdoZW4gd2UndmUganVzdCByZW1vdmVkIHRoZSBtX3JlcGxpY2FMYXllci4KICAgICBpZiAo
IW1fcmVwbGljYUxheWVyKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NQb2ludCgpOwogCi0gICAgRmxvYXRQb2ludCByZXBsaWNhUG9zaXRpb24g
PSBtX3JlcGxpY2FMYXllci0+cmVwbGljYXRlZExheWVyUG9zaXRpb24oKTsKLSAgICByZXR1cm4g
RmxvYXRQb2ludChyZXBsaWNhUG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3Np
emUud2lkdGgoKSwKKyAgICBHcmFwaGljc1BvaW50IHJlcGxpY2FQb3NpdGlvbiA9IG1fcmVwbGlj
YUxheWVyLT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpOworICAgIHJldHVybiBHcmFwaGljc1Bv
aW50KHJlcGxpY2FQb3NpdGlvbi54KCkgKyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0
aCgpLAogICAgICAgICAgICAgICAgICAgICAgIHJlcGxpY2FQb3NpdGlvbi55KCkgKyBtX2FuY2hv
clBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCArNzEsMTAgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRSZXBsaWNhdGVkTGF5ZXIoR3JhcGhpY3NMYXllciopOwogCi0gICAgdmlydHVh
bCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJvdW5kc09yaWdp
bihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3Qg
R3JhcGhpY3NQb2ludDNEJik7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhp
Y3NTaXplJik7CisgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kc09yaWdpbihjb25zdCBHcmFwaGlj
c1BvaW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7
CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7
CkBAIC0xODQsOSArMTg0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbW1pdExheWVyQ2hhbmdl
c0JlZm9yZVN1YmxheWVycygpOwogICAgIHZvaWQgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJs
YXllcnMoKTsKIAotICAgIEZsb2F0U2l6ZSBjb25zdHJhaW5lZFNpemUoKSBjb25zdDsKKyAgICBH
cmFwaGljc1NpemUgY29uc3RyYWluZWRTaXplKCkgY29uc3Q7CiAKLSAgICBib29sIHJlcXVpcmVz
VGlsZWRMYXllcihjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKKyAgICBib29sIHJlcXVpcmVzVGls
ZWRMYXllcihjb25zdCBHcmFwaGljc1NpemUmKSBjb25zdDsKICAgICB2b2lkIHN3YXBGcm9tT3JU
b1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVyKTsKIAogICAgIENvbXBvc2l0aW5nQ29vcmRp
bmF0ZXNPcmllbnRhdGlvbiBkZWZhdWx0Q29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0OwpAQCAt
MjU3LDcgKzI1Nyw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0Nsb25lTGF5ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllckNsb25lczsgfQogICAgIHZvaWQgcmVtb3ZlQ2xvbmVMYXllcnMo
KTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKSBjb25zdDsKKyAg
ICBHcmFwaGljc1BvaW50IHBvc2l0aW9uRm9yQ2xvbmVSb290TGF5ZXIoKSBjb25zdDsKICAgICAK
ICAgICB2b2lkIHByb3BhZ2F0ZUxheWVyQ2hhbmdlVG9SZXBsaWNhcygpOwogICAgIApAQCAtMzk1
LDcgKzM5NSw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9y
PExheWVyUHJvcGVydHlBbmltYXRpb24+ID4gQW5pbWF0aW9uc01hcDsKICAgICBBbmltYXRpb25z
TWFwIG1fcnVubmluZ0FuaW1hdGlvbnM7CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX2RpcnR5
UmVjdHM7CisgICAgVmVjdG9yPEdyYXBoaWNzUmVjdD4gbV9kaXJ0eVJlY3RzOwogICAgIAogICAg
IExheWVyQ2hhbmdlRmxhZ3MgbV91bmNvbW1pdHRlZENoYW5nZXM7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5p
bWF0aW9uLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
M0QuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDksNyArNDksNyBA
QCB0eXBlZGVmIENBQ0ZBbmltYXRpb25SZWYgUGxhdGZvcm1BbmltYXRpCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3Mg
UGxhdGZvcm1DQUFuaW1hdGlvbjsKIGNsYXNzIFRpbWluZ0Z1bmN0aW9uOwogCkBAIC0xMTEsMjAg
KzExMSwyMCBAQCBwdWJsaWM6CiAgICAgLy8gQmFzaWMtYW5pbWF0aW9uIHByb3BlcnRpZXMuCiAg
ICAgdm9pZCBzZXRGcm9tVmFsdWUoZmxvYXQpOwogICAgIHZvaWQgc2V0RnJvbVZhbHVlKGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRGcm9tVmFsdWUo
Y29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgR3JhcGhp
Y3NQb2ludDNEJik7CiAgICAgdm9pZCBzZXRGcm9tVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3Im
KTsKICAgICB2b2lkIGNvcHlGcm9tVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24q
KTsKIAogICAgIHZvaWQgc2V0VG9WYWx1ZShmbG9hdCk7CiAgICAgdm9pZCBzZXRUb1ZhbHVlKGNv
bnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRUb1ZhbHVl
KGNvbnN0IEZsb2F0UG9pbnQzRCYpOworICAgIHZvaWQgc2V0VG9WYWx1ZShjb25zdCBHcmFwaGlj
c1BvaW50M0QmKTsKICAgICB2b2lkIHNldFRvVmFsdWUoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsK
ICAgICB2b2lkIGNvcHlUb1ZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uKik7CiAK
ICAgICAvLyBLZXlmcmFtZS1hbmltYXRpb24gcHJvcGVydGllcy4KICAgICB2b2lkIHNldFZhbHVl
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiYpOwotICAgIHZvaWQgc2V0VmFsdWVzKGNv
bnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+Jik7CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPEdyYXBoaWNzUG9pbnQzRD4mKTsKICAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29sb3I+Jik7CiAgICAgdm9pZCBjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9y
bUNBQW5pbWF0aW9uKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5
b3V0KCk7CiAKIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGly
dHlSZWN0ID0gMCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgR3JhcGhpY3NSZWN0
KiBkaXJ0eVJlY3QgPSAwKTsKICAgICAKICAgICAvLyBUaGlzIHRlbGxzIHRoZSBsYXllciB0cmVl
IHRvIGNvbW1pdCBjaGFuZ2VzIGFuZCBwZXJmb3JtIGEgcmVuZGVyLCB3aXRob3V0IGRvIGEgc2V0
TmVlZHNEaXNwbGF5IG9uIGFueSBsYXllci4KICAgICB2b2lkIHNldE5lZWRzQ29tbWl0KCk7CkBA
IC0xMTcsMTUgKzExNywxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0T3BhcXVlKGJvb2wpOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kcygpIGNvbnN0
OwotICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVj
dCBib3VuZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBHcmFwaGljc1JlY3Qm
KTsKIAotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0OwotICAgIHZvaWQgc2V0UG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludDNEJik7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50JiBwb3MpIHsgc2V0UG9zaXRpb24oRmxvYXRQb2ludDNEKHBvcy54KCksIHBvcy55
KCksIDApKTsgfQorICAgIEdyYXBoaWNzUG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0OworICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludDNEJik7CisgICAgdm9pZCBzZXRQb3Np
dGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwb3MpIHsgc2V0UG9zaXRpb24oR3JhcGhpY3NQb2lu
dDNEKHBvcy54KCksIHBvcy55KCksIDApKTsgfQogCi0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBv
aW50KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0Qm
KTsKKyAgICBHcmFwaGljc1BvaW50M0QgYW5jaG9yUG9pbnQoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOwogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKQEAgLTE1NCw4ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAg
Q0ZUeXBlUmVmIGNvbnRlbnRzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250ZW50cyhDRlR5cGVS
ZWYpOwogCi0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIHZvaWQgc2V0
Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBjb250ZW50
c1JlY3QoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmKTsKIAogICAgIHZvaWQgc2V0TWluaWZpY2F0aW9uRmlsdGVyKEZpbHRlclR5cGUpOwogICAg
IHZvaWQgc2V0TWFnbmlmaWNhdGlvbkZpbHRlcihGaWx0ZXJUeXBlKTsKQEAgLTE3NSw4ICsxNzUs
OCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWUo
Y29uc3QgU3RyaW5nJik7CiAKLSAgICBGbG9hdFJlY3QgZnJhbWUoKSBjb25zdDsKLSAgICB2b2lk
IHNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVjdCBmcmFtZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAKICAgICBmbG9h
dCBzcGVlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3BlZWQoZmxvYXQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FBbmltYXRpb25NYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b246OnNldEZyb21WYWx1ZShjCiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNm
b3JtM0Q6dmFsdWVdXTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRGcm9tVmFs
dWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
c2V0RnJvbVZhbHVlKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKGFu
aW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDIwLDcgKzQyMCw3
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0VG9WYWx1ZShjb24KICAgICBbc3RhdGlj
X2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOltO
U1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpzZXRUb1ZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRvVmFsdWUoY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2
YWx1ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAgICByZXR1
cm47CkBAIC00ODIsNyArNDgyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpzZXRWYWx1
ZXMoY29ucwogICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRp
b24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKK3ZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbjo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxHcmFwaGljc1BvaW50M0Q+
JiB2YWx1ZSkKIHsKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUxheWVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0JKHJldmlzaW9uIDkxMDM0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FM
YXllck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyOjphbmltYXRpb25TdGFydGVkKEMKICAgICAgICAgbV9vd25lci0+cGxhdGZvcm1D
QUxheWVyQW5pbWF0aW9uU3RhcnRlZChiZWdpblRpbWUpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FM
YXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEZsb2F0UmVjdCogZGlydHlSZWN0KQordm9pZCBQ
bGF0Zm9ybUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqIGRpcnR5
UmVjdCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBpZiAoZGlydHlS
ZWN0KQpAQCAtNDA0LDI1ICs0MDQsMjUgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldE9wYXF1
ZShib29sIHZhbAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotRmxvYXRSZWN0
IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNB
TGF5ZXI6OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFttX2xheWVyLmdldCgpIGJvdW5k
c107CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3VuZHMoY29uc3QgRmxvYXRSZWN0
JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRCb3VuZHMoY29uc3QgR3JhcGhpY3NS
ZWN0JiB2YWx1ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICBbbV9s
YXllci5nZXQoKSBzZXRCb3VuZHM6dmFsdWVdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKIH0KIAotRmxvYXRQb2ludDNEIFBsYXRmb3JtQ0FMYXllcjo6cG9zaXRpb24oKSBjb25zdAor
R3JhcGhpY3NQb2ludDNEIFBsYXRmb3JtQ0FMYXllcjo6cG9zaXRpb24oKSBjb25zdAogewogICAg
IENHUG9pbnQgcG9pbnQgPSBbbV9sYXllci5nZXQoKSBwb3NpdGlvbl07Ci0gICAgcmV0dXJuIEZs
b2F0UG9pbnQzRChwb2ludC54LCBwb2ludC55LCBbbV9sYXllci5nZXQoKSB6UG9zaXRpb25dKTsK
KyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDNEKHBvaW50LngsIHBvaW50LnksIFttX2xheWVyLmdl
dCgpIHpQb3NpdGlvbl0pOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3Np
dGlvbihjb25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtl
KHZhbHVlLngoKSwgdmFsdWUueSgpKV07CkBAIC00MzAsMTcgKzQzMCwxNyBAQCB2b2lkIFBsYXRm
b3JtQ0FMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyOjphbmNob3JQb2ludCgpIGNv
bnN0CitHcmFwaGljc1BvaW50M0QgUGxhdGZvcm1DQUxheWVyOjphbmNob3JQb2ludCgpIGNvbnN0
CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IFttX2xheWVyLmdldCgpIGFuY2hvclBvaW50XTsKICAg
ICBmbG9hdCB6ID0gMDsKICNpZiBIQVZFX01PREVSTl9RVUFSVFpDT1JFCiAgICAgeiA9IFttX2xh
eWVyLmdldCgpIGFuY2hvclBvaW50Wl07CiAjZW5kaWYKLSAgICByZXR1cm4gRmxvYXRQb2ludDNE
KHBvaW50LngsIHBvaW50LnksIHopOworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0QocG9pbnQu
eCwgcG9pbnQueSwgeik7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEFu
Y2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21fbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQ
b2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55KCkpXTsKQEAgLTU4OCwxMiArNTg4LDEyIEBAIHZv
aWQgUGxhdGZvcm1DQUxheWVyOjpzZXRDb250ZW50cyhDRlR5cGUKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmNvbnRlbnRzUmVj
dCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVyOjpjb250ZW50c1JlY3QoKSBj
b25zdAogewogICAgIHJldHVybiBbbV9sYXllci5nZXQoKSBjb250ZW50c1JlY3RdOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmFs
dWUpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgdmFsdWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgW21f
bGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNSZWN0OnZhbHVlXTsKQEAgLTY5NCwxMiArNjk0LDEyIEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXROYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCiB9CiAKLUZsb2F0UmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmZyYW1lKCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5ZXI6OmZyYW1lKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gW21fbGF5ZXIuZ2V0KCkgZnJhbWVdOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVy
OjpzZXRGcmFtZShjb25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQogewogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwogICAgIFttX2xheWVyLmdldCgpIHNldEZyYW1lOnZhbHVlXTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVl
SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZSgpCiAgICAgLy8gU2Nyb2xsaW5nIHdpbGwgYWZmZWN0IG9ubHkgdGhlIHBvc2l0
aW9uIG9mIHRoZSBzY3JvbGwgbGF5ZXIgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGJvdW5kcy4KIAog
ICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDQUNGTGF5ZXJUcmVlSG9zdCByb290TGF5ZXIiKTsK
LSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsK
KyAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKDAsIDAsIDAp
KTsKICAgICBtX3Jvb3RMYXllci0+c2V0R2VvbWV0cnlGbGlwcGVkKHRydWUpOwogCiAjaWZuZGVm
IE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw3ICszNDUsNyBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1ZShjCiAgICAgQ0FDRkFuaW1h
dGlvblNldEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CiAKLXZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbjo6c2V0RnJvbVZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFs
dWUpCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldEZyb21WYWx1ZShjb25zdCBHcmFwaGlj
c1BvaW50M0QmIHZhbHVlKQogewogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b246OnNldFRvVmFsdWUoY29uCiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRp
b24uZ2V0KCksIHYuZ2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFRv
VmFsdWUoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bjo6c2V0VG9WYWx1ZShjb25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIGlmIChh
bmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0OSw3ICs0NDks
NyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zCiAgICAgQ0FDRkFu
aW1hdGlvblNldFZhbHVlcyhtX2FuaW1hdGlvbi5nZXQoKSwgYXJyYXkuZ2V0KCkpOwogfQogCi12
b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2lu
dDNEPiYgdmFsdWUpCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb246OnNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8R3JhcGhpY3NQb2ludDNEPiYgdmFsdWUpCiB7CiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Miw3ICsxOTIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZW5zdXJlQW5pbWF0aW9uc1N1CiAg
ICAgICAgIGNoaWxkcmVuW2ldLT5lbnN1cmVBbmltYXRpb25zU3VibWl0dGVkKCk7CiB9CiAKLXZv
aWQgUGxhdGZvcm1DQUxheWVyOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0
eVJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEdyYXBo
aWNzUmVjdCogZGlydHlSZWN0KQogewogICAgIGludGVybih0aGlzKS0+c2V0TmVlZHNEaXNwbGF5
KGRpcnR5UmVjdCk7CiB9CkBAIC0zNTMsMzggKzM1MywzOCBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cjo6c2V0T3BhcXVlKGJvb2wgdmFsCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotRmxvYXRS
ZWN0IFBsYXRmb3JtQ0FMYXllcjo6Ym91bmRzKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9y
bUNBTGF5ZXI6OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldEJvdW5k
cyhtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldEJvdW5kcyhj
b25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0Qm91bmRz
KHZhbHVlKTsKICAgICBzZXROZWVkc0xheW91dCgpOwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZv
cm1DQUxheWVyOjpwb3NpdGlvbigpIGNvbnN0CitHcmFwaGljc1BvaW50M0QgUGxhdGZvcm1DQUxh
eWVyOjpwb3NpdGlvbigpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENBQ0ZMYXllckdl
dFBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpOwotICAgIHJldHVybiBGbG9hdFBvaW50M0QocG9pbnQu
eCwgcG9pbnQueSwgQ0FDRkxheWVyR2V0WlBvc2l0aW9uKG1fbGF5ZXIuZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gR3JhcGhpY3NQb2ludDNEKHBvaW50LngsIHBvaW50LnksIENBQ0ZMYXllckdldFpQb3Np
dGlvbihtX2xheWVyLmdldCgpKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNl
dFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgQ0FDRkxheWVy
U2V0UG9zaXRpb24obV9sYXllci5nZXQoKSwgQ0dQb2ludE1ha2UodmFsdWUueCgpLCB2YWx1ZS55
KCkpKTsKICAgICBDQUNGTGF5ZXJTZXRaUG9zaXRpb24obV9sYXllci5nZXQoKSwgdmFsdWUueigp
KTsKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1GbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxh
eWVyOjphbmNob3JQb2ludCgpIGNvbnN0CitHcmFwaGljc1BvaW50M0QgUGxhdGZvcm1DQUxheWVy
OjphbmNob3JQb2ludCgpIGNvbnN0CiB7CiAgICAgQ0dQb2ludCBwb2ludCA9IENBQ0ZMYXllckdl
dEFuY2hvclBvaW50KG1fbGF5ZXIuZ2V0KCkpOwogICAgIGZsb2F0IHogPSBDQUNGTGF5ZXJHZXRB
bmNob3JQb2ludFoobV9sYXllci5nZXQoKSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwb2lu
dC54LCBwb2ludC55LCB6KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDNEKHBvaW50LngsIHBv
aW50LnksIHopOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29u
c3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRBbmNob3JQ
b2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmIHZhbHVlKQogewogICAgIENBQ0ZMYXllclNldEFu
Y2hvclBvaW50KG1fbGF5ZXIuZ2V0KCksIENHUG9pbnRNYWtlKHZhbHVlLngoKSwgdmFsdWUueSgp
KSk7CiAgICAgQ0FDRkxheWVyU2V0QW5jaG9yUG9pbnRaKG1fbGF5ZXIuZ2V0KCksIHZhbHVlLnoo
KSk7CkBAIC00ODgsMTIgKzQ4OCwxMiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0Q29udGVu
dHMoQ0ZUeXBlCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotRmxvYXRSZWN0IFBsYXRmb3Jt
Q0FMYXllcjo6Y29udGVudHNSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQbGF0Zm9ybUNBTGF5
ZXI6OmNvbnRlbnRzUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldENvbnRl
bnRzUmVjdChtX2xheWVyLmdldCgpKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXI6OnNldENv
bnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQordm9pZCBQbGF0Zm9ybUNBTGF5ZXI6
OnNldENvbnRlbnRzUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHZhbHVlKQogewogICAgIENBQ0ZM
YXllclNldENvbnRlbnRzUmVjdChtX2xheWVyLmdldCgpLCB2YWx1ZSk7CiAgICAgc2V0TmVlZHND
b21taXQoKTsKQEAgLTU3OCwxMiArNTc4LDEyIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRO
YW1lKGNvbnN0IFN0cmkKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1GbG9hdFJlY3QgUGxh
dGZvcm1DQUxheWVyOjpmcmFtZSgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGxhdGZvcm1DQUxheWVy
OjpmcmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENBQ0ZMYXllckdldEZyYW1lKG1fbGF5ZXIu
Z2V0KCkpOwogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcjo6c2V0RnJhbWUoY29uc3QgRmxvYXRS
ZWN0JiB2YWx1ZSkKK3ZvaWQgUGxhdGZvcm1DQUxheWVyOjpzZXRGcmFtZShjb25zdCBHcmFwaGlj
c1JlY3QmIHZhbHVlKQogewogICAgIGludGVybih0aGlzKS0+c2V0RnJhbWUodmFsdWUpOwogICAg
IHNldE5lZWRzTGF5b3V0KCk7CkBAIC02MzgsOSArNjM4LDkgQEAgc3RhdGljIHZvaWQgcHJpbnRU
cmFuc2Zvcm0oY29uc3QgQ0FUcmFucwogCiBzdGF0aWMgdm9pZCBwcmludExheWVyKGNvbnN0IFBs
YXRmb3JtQ0FMYXllciogbGF5ZXIsIGludCBpbmRlbnQpCiB7Ci0gICAgRmxvYXRQb2ludDNEIGxh
eWVyUG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKLSAgICBGbG9hdFBvaW50M0QgbGF5ZXJB
bmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIEZsb2F0UmVjdCBsYXllckJv
dW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGF5ZXJQb3NpdGlv
biA9IGxheWVyLT5wb3NpdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsYXllckFuY2hvclBv
aW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyQm91bmRz
ID0gbGF5ZXItPmJvdW5kcygpOwogICAgIHByaW50SW5kZW50KGluZGVudCk7CiAKICAgICBjaGFy
KiBsYXllclR5cGVOYW1lID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5h
bDo6ZGlzcGxheQogICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckxheWVyRGlk
RGlzcGxheShjYUxheWVyKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
aW50ZXJuYWxTZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3QpCit2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnRlcm5hbFNldE5lZWRzRGlzcGxheShjb25z
dCBHcmFwaGljc1JlY3QqIGRpcnR5UmVjdCkKIHsKICAgICBpZiAoZGlydHlSZWN0KSB7CiAgICAg
ICAgIENHUmVjdCByZWN0ID0gKmRpcnR5UmVjdDsKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFBs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsOjppbnRlcm5hCiAgICAgICAgIENBQ0ZMYXllclNldE5l
ZWRzRGlzcGxheShvd25lcigpLT5wbGF0Zm9ybUxheWVyKCksIDApOwogfQogCi12b2lkIFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBk
aXJ0eVJlY3QpCit2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpzZXROZWVkc0Rpc3Bs
YXkoY29uc3QgR3JhcGhpY3NSZWN0KiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYgKG93bmVyKCktPmxh
eWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2ViVGlsZWRMYXllcikgewog
ICAgICAgICAvLyBGSVhNRTogT25seSBzZXROZWVkc0Rpc3BsYXkgZm9yIHRpbGVzIHRoYXQgYXJl
IGN1cnJlbnRseSB2aXNpYmxlCkBAIC0xNzAsOCArMTcwLDggQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbDo6c2V0TmVlZAogICAgIH0gZWxzZSBpZiAob3duZXIoKS0+bGF5ZXJUeXBl
KCkgPT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcikgewogICAgICAgICBpZiAo
b3duZXIoKSAmJiBvd25lcigpLT5vd25lcigpKSB7CiAgICAgICAgICAgICBpZiAob3duZXIoKS0+
b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKCkpIHsKLSAgICAgICAg
ICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBvd25lcigpLT5ib3VuZHMoKTsKLSAgICAg
ICAgICAgICAgICBGbG9hdFJlY3QgcmVwYWludENvdW50ZXJSZWN0ID0gbGF5ZXJCb3VuZHM7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IGxheWVyQm91bmRzID0gb3duZXIoKS0+Ym91bmRz
KCk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlcGFpbnRDb3VudGVyUmVjdCA9IGxh
eWVyQm91bmRzOwogCiAgICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGEgbWF4aW11bSBvZiA0
IGRpZ2l0cyBhbmQgYSBmb250IHNpemUgb2YgMTguCiAgICAgICAgICAgICAgICAgcmVwYWludENv
dW50ZXJSZWN0LnNldFdpZHRoKDgwKTsKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpzZXROZWVkCiAgICAgICAgICAgICAgICAgaW50ZXJuYWxTZXRO
ZWVkc0Rpc3BsYXkoJnJlcGFpbnRDb3VudGVyUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoZGlydHlSZWN0ICYmIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNv
bnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzVG9wRG93bikgewotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBmbGlwcGVk
RGlydHlSZWN0ID0gKmRpcnR5UmVjdDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgZmxp
cHBlZERpcnR5UmVjdCA9ICpkaXJ0eVJlY3Q7CiAgICAgICAgICAgICAgICAgZmxpcHBlZERpcnR5
UmVjdC5zZXRZKG93bmVyKCktPmJvdW5kcygpLmhlaWdodCgpIC0gKGZsaXBwZWREaXJ0eVJlY3Qu
eSgpICsgZmxpcHBlZERpcnR5UmVjdC5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIGludGVy
bmFsU2V0TmVlZHNEaXNwbGF5KCZmbGlwcGVkRGlydHlSZWN0KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zMTQsNyArMzE0LDcgQEAgUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcgogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihz
dGF0aWNfY2FzdDxDQUNGTGF5ZXJSZWY+KGNvbnN0X2Nhc3Q8dm9pZCo+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoc3VibGF5ZXJzLCBpbmRleCkpKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpzZXRCb3VuZHMoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIGlmIChDR1JlY3RFcXVhbFRvUmVjdChyZWN0LCBvd25lcigpLT5ib3VuZHMoKSkp
CiAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpzZXRCb3VuCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpzZXRGcmFtZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7
CiAgICAgQ0dSZWN0IG9sZEZyYW1lID0gb3duZXIoKS0+ZnJhbWUoKTsKICAgICBpZiAoQ0dSZWN0
RXF1YWxUb1JlY3QocmVjdCwgb2xkRnJhbWUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0ICpDR0Nv
bnRleHRSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OworY2xh
c3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyOwogCiB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiA+IFBsYXRmb3JtQ0FMYXllckxpc3Q7CkBAIC00OCw3
ICs0OCw3IEBAIHB1YmxpYzoKICAgICB+UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwoKTsKIAog
ICAgIHZvaWQgZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiwgQ0dDb250ZXh0UmVmKTsKLSAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QqKTsKKyAgICB2b2lkIHNldE5l
ZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIG93
bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogCiAgICAgdm9pZCBzZXRTdWJsYXllcnMo
Y29uc3QgUGxhdGZvcm1DQUxheWVyTGlzdCYpOwpAQCAtNTgsMTEgKzU4LDExIEBAIHB1YmxpYzoK
ICAgICBzaXplX3Qgc3VibGF5ZXJDb3VudCgpIGNvbnN0OwogICAgIGludCBpbmRleE9mU3VibGF5
ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVyKiByZWZlcmVuY2UpOwogCi0gICAgdm9pZCBzZXRCb3Vu
ZHMoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lkIHNl
dEZyYW1lKGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgaW50ZXJu
YWxTZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0Kik7CisgICAgdm9pZCBpbnRlcm5hbFNl
dE5lZWRzRGlzcGxheShjb25zdCBHcmFwaGljc1JlY3QqKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIq
IHN1YmxheWVyQXRJbmRleChpbnQpIGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgdGlsZURpc3Bs
YXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYsIENHQ29udGV4dFJlZik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRp
ZXMuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgs
OCBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJPd25QdHJDYWlyby5oIgogI2luY2x1ZGUgIlBhdGguaCIK
QEAgLTExOCw4ICsxMTgsOCBAQCBjYWlyb19vcGVyYXRvcl90IHRvQ2Fpcm9PcGVyYXRvcihDb21w
b3NpCiAgICAgfQogfQogCi12b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCog
Y3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjYWlyb19vcGVyYXRvcl90IG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQor
dm9pZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19zdXJmYWNl
X3QqIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
dGlsZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgY2Fp
cm9fb3BlcmF0b3JfdCBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICAv
LyBBdm9pZCBOYU4KICAgICBpZiAoIWlzZmluaXRlKHBoYXNlLngoKSkgfHwgIWlzZmluaXRlKHBo
YXNlLnkoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9h
dFBvaW50OworY2xhc3MgR3JhcGhpY3NSZWN0OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIGNsYXNz
IEludFNpemU7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgUGF0aDsKQEAgLTQ0LDggKzQ0LDggQEAg
dm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdAogdm9pZCBzZXRQYXRoT25D
YWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZyb20pOwogdm9pZCBhcHBlbmRXZWJD
b3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgp
OwogY2Fpcm9fb3BlcmF0b3JfdCB0b0NhaXJvT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Owotdm9pZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19zdXJm
YWNlX3QqIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY2Fpcm9f
b3BlcmF0b3JfdCBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Cit2b2lkIGRyYXdQYXR0
ZXJuVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY3IsIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNv
bnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBjYWlyb19vcGVyYXRvcl90
IG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsKIFBhc3NSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90Kik7CiB2b2lkIGNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoY2Fpcm9fc3VyZmFjZV90KiBmcm9tLCBjYWly
b19zdXJmYWNlX3QqIHRvLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Db250ZXh0U2hhZG93Q2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NvbnRleHRTaGFkb3dDYWlyby5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ29udGV4dFNoYWRvd0NhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBnZXRT
Y3JhdGNoQnVmZmVyCiAgICAgcmV0dXJuIGdTY3JhdGNoQnVmZmVyLmdldCgpOwogfQogCi1QbGF0
Zm9ybUNvbnRleHQgQ29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQorUGxhdGZvcm1Db250ZXh0
IENvbnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBHcmFwaGljc1JlY3QmIGxheWVyQXJlYSkKIHsKICAgICBhZGp1c3RCbHVyRGlzdGFu
Y2UoY29udGV4dCk7CiAKQEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIENvbnRleHRTaGFkb3c6OmRy
YXdSZWN0U2hhZG93V2l0aG91CiAgICAgZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZSkKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NQb2ludCBnZXRQaGFz
ZShjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZSkKIHsK
LSAgICBGbG9hdFBvaW50IHBoYXNlID0gZGVzdC5sb2NhdGlvbigpOworICAgIEdyYXBoaWNzUG9p
bnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CiAgICAgcGhhc2UubW92ZSgtdGlsZS54KCksIC10
aWxlLnkoKSk7CiAKICAgICByZXR1cm4gcGhhc2U7CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBD
b250ZXh0U2hhZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIEludFNpemUgc2hhZG93QnVm
ZmVyU2l6ZSA9IEludFNpemUocmVjdC53aWR0aCgpICsgcmFkaXVzVHdpY2UsIHJlY3QuaGVpZ2h0
KCkgKyByYWRpdXNUd2ljZSk7CiAKICAgICAvLyBEZXRlcm1pbmUgZGltZW5zaW9ucyBvZiBzaGFk
b3cgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdCA9IEZsb2F0UmVjdChyZWN0LmxvY2F0
aW9uKCksIHNoYWRvd0J1ZmZlclNpemUpOworICAgIEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0ID0g
R3JhcGhpY3NSZWN0KHJlY3QubG9jYXRpb24oKSwgc2hhZG93QnVmZmVyU2l6ZSk7CiAgICAgc2hh
ZG93UmVjdC5tb3ZlKC0gbV9ibHVyRGlzdGFuY2UsIC0gbV9ibHVyRGlzdGFuY2UpOwogCiAgICAg
Ly8gU2l6ZSBvZiB0aGUgdGlsaW5nIHNpZGUuCkBAIC0yODIsMTcgKzI4MiwxNyBAQCB2b2lkIENv
bnRleHRTaGFkb3c6OmRyYXdSZWN0U2hhZG93KEdyYXBoCiAgICAgc2hhZG93UmVjdC5pbmZsYXRl
KHJhZGl1c1R3aWNlKTsKIAogICAgIC8vIERyYXcgdG9wIHNpZGUuCi0gICAgRmxvYXRSZWN0IHRp
bGVSZWN0ID0gRmxvYXRSZWN0KHJhZGl1c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAw
LCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0g
dGlsZVJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KHJhZGl1
c1R3aWNlICsgdG9wTGVmdFJhZGl1cy53aWR0aCgpLCAwLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNU
d2ljZSk7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0ID0gdGlsZVJlY3Q7CiAgICAgZGVzdFJl
Y3QubW92ZShzaGFkb3dSZWN0LngoKSwgc2hhZG93UmVjdC55KCkpOwogICAgIGRlc3RSZWN0LnNl
dFdpZHRoKHNoYWRvd1JlY3Qud2lkdGgoKSAtIHRvcExlZnRSYWRpdXMud2lkdGgoKSAtIHRvcFJp
Z2h0UmFkaXVzLndpZHRoKCkgLSBtX2JsdXJEaXN0YW5jZSAqIDQpOwotICAgIEZsb2F0UG9pbnQg
cGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOworICAgIEdyYXBoaWNzUG9pbnQg
cGhhc2UgPSBnZXRQaGFzZShkZXN0UmVjdCwgdGlsZVJlY3QpOwogICAgIEFmZmluZVRyYW5zZm9y
bSBwYXR0ZXJuVHJhbnNmb3JtOwogICAgIHBhdHRlcm5UcmFuc2Zvcm0ubWFrZUlkZW50aXR5KCk7
CiAgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4dChjciwgbV9sYXllckltYWdlLCBzaGFkb3dU
ZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BF
UkFUT1JfT1ZFUiwgZGVzdFJlY3QpOwogCiAgICAgLy8gRHJhdyB0aGUgYm90dG9tIHNpZGUuCi0g
ICAgdGlsZVJlY3QgPSBGbG9hdFJlY3QocmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLndp
ZHRoKCksIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlLCBzaWRlVGls
ZVdpZHRoLCByYWRpdXNUd2ljZSk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QocmFkaXVz
VHdpY2UgKyBib3R0b21MZWZ0UmFkaXVzLndpZHRoKCksIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWln
aHQoKSAtIHJhZGl1c1R3aWNlLCBzaWRlVGlsZVdpZHRoLCByYWRpdXNUd2ljZSk7CiAgICAgZGVz
dFJlY3QgPSB0aWxlUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpLCBzaGFk
b3dSZWN0LnkoKSArIHJhZGl1c1R3aWNlICsgcmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RlbXBsYXRl
U2l6ZS5oZWlnaHQoKSk7CiAgICAgZGVzdFJlY3Quc2V0V2lkdGgoc2hhZG93UmVjdC53aWR0aCgp
IC0gYm90dG9tTGVmdFJhZGl1cy53aWR0aCgpIC0gYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSAt
IG1fYmx1ckRpc3RhbmNlICogNCk7CkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBDb250ZXh0U2hh
ZG93OjpkcmF3UmVjdFNoYWRvdyhHcmFwaAogICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQo
Y3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsKIAogICAgIC8v
IERyYXcgdGhlIHJpZ2h0IHNpZGUuCi0gICAgdGlsZVJlY3QgPSBGbG9hdFJlY3Qoc2hhZG93VGVt
cGxhdGVTaXplLndpZHRoKCkgLSByYWRpdXNUd2ljZSwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJh
ZGl1cy5oZWlnaHQoKSwgcmFkaXVzVHdpY2UsIHNpZGVUaWxlV2lkdGgpOworICAgIHRpbGVSZWN0
ID0gR3JhcGhpY3NSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2Us
IHJhZGl1c1R3aWNlICsgdG9wUmlnaHRSYWRpdXMuaGVpZ2h0KCksIHJhZGl1c1R3aWNlLCBzaWRl
VGlsZVdpZHRoKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RSZWN0Lm1vdmUo
c2hhZG93UmVjdC54KCkgKyByYWRpdXNUd2ljZSArIHJlY3Qud2lkdGgoKSAtIHNoYWRvd1RlbXBs
YXRlU2l6ZS53aWR0aCgpLCBzaGFkb3dSZWN0LnkoKSk7CiAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0
KHNoYWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSAtIGJvdHRvbVJp
Z2h0UmFkaXVzLmhlaWdodCgpIC0gbV9ibHVyRGlzdGFuY2UgKiA0KTsKQEAgLTMwOCwyMiArMzA4
LDIyIEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGgKICAgICBkcmF3
UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6
ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVS
LCBkZXN0UmVjdCk7CiAKICAgICAvLyBEcmF3IHRoZSBsZWZ0IHNpZGUuCi0gICAgdGlsZVJlY3Qg
PSBGbG9hdFJlY3QoMCwgcmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRp
dXNUd2ljZSwgc2lkZVRpbGVXaWR0aCk7CisgICAgdGlsZVJlY3QgPSBHcmFwaGljc1JlY3QoMCwg
cmFkaXVzVHdpY2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpLCByYWRpdXNUd2ljZSwgc2lkZVRp
bGVXaWR0aCk7CiAgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKHNo
YWRvd1JlY3QueCgpLCBzaGFkb3dSZWN0LnkoKSk7CiAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHNo
YWRvd1JlY3QuaGVpZ2h0KCkgLSB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpIC0gYm90dG9tTGVmdFJh
ZGl1cy5oZWlnaHQoKSAtIG1fYmx1ckRpc3RhbmNlICogNCk7Ci0gICAgcGhhc2UgPSBGbG9hdFBv
aW50KGRlc3RSZWN0LngoKSAtIHRpbGVSZWN0LngoKSwgZGVzdFJlY3QueSgpIC0gdGlsZVJlY3Qu
eSgpKTsKKyAgICBwaGFzZSA9IEdyYXBoaWNzUG9pbnQoZGVzdFJlY3QueCgpIC0gdGlsZVJlY3Qu
eCgpLCBkZXN0UmVjdC55KCkgLSB0aWxlUmVjdC55KCkpOwogICAgIGRyYXdQYXR0ZXJuVG9DYWly
b0NvbnRleHQoY3IsIG1fbGF5ZXJJbWFnZSwgc2hhZG93VGVtcGxhdGVTaXplLCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIENBSVJPX09QRVJBVE9SX09WRVIsIGRlc3RSZWN0KTsK
IAogICAgIC8vIERyYXcgdGhlIHRvcCBsZWZ0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0
UmVjdCgwLCAwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdp
Y2UgKyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKTsKKyAgICB0aWxlUmVjdCA9IEdyYXBoaWNzUmVj
dCgwLCAwLCByYWRpdXNUd2ljZSArIHRvcExlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2Ug
KyB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAg
IGRlc3RSZWN0Lm1vdmUoc2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpKTsKICAgICBwaGFz
ZSA9IGdldFBoYXNlKGRlc3RSZWN0LCB0aWxlUmVjdCk7CiAgICAgZHJhd1BhdHRlcm5Ub0NhaXJv
Q29udGV4dChjciwgbV9sYXllckltYWdlLCBzaGFkb3dUZW1wbGF0ZVNpemUsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgQ0FJUk9fT1BFUkFUT1JfT1ZFUiwgZGVzdFJlY3QpOwog
CiAgICAgLy8gRHJhdyB0aGUgdG9wIHJpZ2h0IGNvcm5lci4KLSAgICB0aWxlUmVjdCA9IEZsb2F0
UmVjdChzaGFkb3dUZW1wbGF0ZVNpemUud2lkdGgoKSAtIHJhZGl1c1R3aWNlIC0gdG9wUmlnaHRS
YWRpdXMud2lkdGgoKSwgMCwgcmFkaXVzVHdpY2UgKyB0b3BSaWdodFJhZGl1cy53aWR0aCgpLAor
ICAgIHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0g
cmFkaXVzVHdpY2UgLSB0b3BSaWdodFJhZGl1cy53aWR0aCgpLCAwLCByYWRpdXNUd2ljZSArIHRv
cFJpZ2h0UmFkaXVzLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzVHdp
Y2UgKyB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSk7CiAgICAgZGVzdFJlY3QgPSB0aWxlUmVjdDsK
ICAgICBkZXN0UmVjdC5tb3ZlKHNoYWRvd1JlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gc2hhZG93
VGVtcGxhdGVTaXplLndpZHRoKCkgKyByYWRpdXNUd2ljZSwgc2hhZG93UmVjdC55KCkpOwpAQCAt
MzMxLDcgKzMzMSw3IEBAIHZvaWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGgK
ICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1Rl
bXBsYXRlU2l6ZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVS
QVRPUl9PVkVSLCBkZXN0UmVjdCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gcmlnaHQgY29y
bmVyLgotICAgIHRpbGVSZWN0ID0gRmxvYXRSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgp
IC0gcmFkaXVzVHdpY2UgLSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLAorICAgIHRpbGVSZWN0
ID0gR3JhcGhpY3NSZWN0KHNoYWRvd1RlbXBsYXRlU2l6ZS53aWR0aCgpIC0gcmFkaXVzVHdpY2Ug
LSBib3R0b21SaWdodFJhZGl1cy53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tUmlnaHRSYWRp
dXMuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzVHdpY2UgKyBib3R0
b21SaWdodFJhZGl1cy53aWR0aCgpLCByYWRpdXNUd2ljZSArIGJvdHRvbVJpZ2h0UmFkaXVzLmhl
aWdodCgpKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwpAQCAtMzQxLDcgKzM0MSw3IEBAIHZv
aWQgQ29udGV4dFNoYWRvdzo6ZHJhd1JlY3RTaGFkb3coR3JhcGgKICAgICBkcmF3UGF0dGVyblRv
Q2Fpcm9Db250ZXh0KGNyLCBtX2xheWVySW1hZ2UsIHNoYWRvd1RlbXBsYXRlU2l6ZSwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBDQUlST19PUEVSQVRPUl9PVkVSLCBkZXN0UmVj
dCk7CiAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gbGVmdCBjb3JuZXIuCi0gICAgdGlsZVJlY3Qg
PSBGbG9hdFJlY3QoMCwgc2hhZG93VGVtcGxhdGVTaXplLmhlaWdodCgpIC0gcmFkaXVzVHdpY2Ug
LSBib3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpLAorICAgIHRpbGVSZWN0ID0gR3JhcGhpY3NSZWN0
KDAsIHNoYWRvd1RlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIHJhZGl1c1R3aWNlIC0gYm90dG9tTGVm
dFJhZGl1cy5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXNUd2ljZSAr
IGJvdHRvbUxlZnRSYWRpdXMud2lkdGgoKSwgcmFkaXVzVHdpY2UgKyBib3R0b21MZWZ0UmFkaXVz
LmhlaWdodCgpKTsKICAgICBkZXN0UmVjdCA9IHRpbGVSZWN0OwogICAgIGRlc3RSZWN0Lm1vdmUo
c2hhZG93UmVjdC54KCksIHNoYWRvd1JlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIHNoYWRvd1Rl
bXBsYXRlU2l6ZS5oZWlnaHQoKSArIHJhZGl1c1R3aWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5j
cHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IGNhaXJv
X3JlY3RhbmdsZV90JiByKQotICAgIDogbV9sb2NhdGlvbihyLngsIHIueSkKLSAgICAsIG1fc2l6
ZShyLndpZHRoLCByLmhlaWdodCkKLXsKLX0KLQotRmxvYXRSZWN0OjpvcGVyYXRvciBjYWlyb19y
ZWN0YW5nbGVfdCgpIGNvbnN0Ci17Ci0gICAgY2Fpcm9fcmVjdGFuZ2xlX3QgciA9IHsgeCgpLCB5
KCksIHdpZHRoKCksIGhlaWdodCgpIH07Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9f
dCoKICAgICAgICAgY2Fpcm9fc2V0X21hdHJpeChjb250ZXh0LCAmb3JpZ2luYWxUcmFuc2Zvcm0p
OwogfQogCi1zdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51bUdseXBocykKK3N0YXRp
YyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQogewogICAgIENvbnRleHRT
aGFkb3cqIHNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC0+Y29udGV4dFNoYWRvdygpOwogICAgIEFT
U0VSVChzaGFkb3cpOwpAQCAtOTUsNyArOTUsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29uCiAKICAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwogICAg
IGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoZm9udC0+cGxhdGZvcm1EYXRhKCkuc2Nh
bGVkRm9udCgpLCBnbHlwaHMsIG51bUdseXBocywgJmV4dGVudHMpOwotICAgIEZsb2F0UmVjdCBm
b250RXh0ZW50c1JlY3QocG9pbnQueCgpLCBwb2ludC55KCkgLSBleHRlbnRzLmhlaWdodCwgZXh0
ZW50cy53aWR0aCwgZXh0ZW50cy5oZWlnaHQpOworICAgIEdyYXBoaWNzUmVjdCBmb250RXh0ZW50
c1JlY3QocG9pbnQueCgpLCBwb2ludC55KCkgLSBleHRlbnRzLmhlaWdodCwgZXh0ZW50cy53aWR0
aCwgZXh0ZW50cy5oZWlnaHQpOwogICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250RXh0ZW50c1JlY3QpOwogICAg
IGlmIChzaGFkb3dDb250ZXh0KSB7CiAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93
Q29udGV4dCwgZm9udCwgZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb24KIH0KIAogdm9pZCBGb250Ojpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0CisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGlmICghZm9udC0+cGxhdGZvcm1E
YXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEdy
YWRpZW50OjpzZXRQbGF0Zm9ybUdyYWRpZW50U3BhY2VUCiAgICAgfQogfQogCi12b2lkIEdyYWRp
ZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIk93blB0ckNh
aXJvLmgiCkBAIC03MSw3ICs3MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIC8vIEEgaGVscGVyIHdoaWNoIHF1aWNrbHkgZmlsbHMgYSByZWN0YW5nbGUg
d2l0aCBhIHNpbXBsZSBjb2xvciBmaWxsLgotc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0V2l0
aENvbG9yKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjYWlyb190KiBjciwg
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYg
KCFjb2xvci5hbHBoYSgpKQogICAgICAgICByZXR1cm47CkBAIC04MSw3ICs4MSw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjYWkKICAgICBjYWlyb19maWxsKGNyKTsK
IH0KIAotc3RhdGljIHZvaWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChjYWlyb190KiBjb250
ZXh0LCBzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCitzdGF0aWMg
dm9pZCBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cykKIHsKICAgICBjYWlyb19tb3Zl
X3RvKGNvbnRleHQsIHBvaW50c1swXS54KCksIHBvaW50c1swXS55KCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbnVtUG9pbnRzOyBpKyspCkBAIC0xMDYsMTggKzEwNiwxOCBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZHJhd1BhdGhTaGFkb3coR3JhcGhpCiAgICAgY2Fpcm9fdCogY2Fpcm9D
b250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgT3duUHRyPGNh
aXJvX3BhdGhfdD4gcGF0aCA9IGFkb3B0UHRyKGNhaXJvX2NvcHlfcGF0aChjYWlyb0NvbnRleHQp
KTsKIAotICAgIEZsb2F0UmVjdCBzb2xpZEZpZ3VyZUV4dGVudHM7CisgICAgR3JhcGhpY3NSZWN0
IHNvbGlkRmlndXJlRXh0ZW50czsKICAgICBkb3VibGUgeDAgPSAwOwogICAgIGRvdWJsZSB4MSA9
IDA7CiAgICAgZG91YmxlIHkwID0gMDsKICAgICBkb3VibGUgeTEgPSAwOwogICAgIGlmIChkcmF3
aW5nU3R5bGUgJiBTdHJva2UpIHsKICAgICAgICAgY2Fpcm9fc3Ryb2tlX2V4dGVudHMoY2Fpcm9D
b250ZXh0LCAmeDAsICZ5MCwgJngxLCAmeTEpOwotICAgICAgICBzb2xpZEZpZ3VyZUV4dGVudHMg
PSBGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKKyAgICAgICAgc29saWRGaWd1
cmVFeHRlbnRzID0gR3JhcGhpY3NSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7CiAgICAg
fQogICAgIGlmIChkcmF3aW5nU3R5bGUgJiBGaWxsKSB7CiAgICAgICAgIGNhaXJvX2ZpbGxfZXh0
ZW50cyhjYWlyb0NvbnRleHQsICZ4MCwgJnkwLCAmeDEsICZ5MSk7Ci0gICAgICAgIEZsb2F0UmVj
dCBmaWxsRXh0ZW50cyh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOworICAgICAgICBHcmFwaGlj
c1JlY3QgZmlsbEV4dGVudHMoeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKICAgICAgICAgc29s
aWRGaWd1cmVFeHRlbnRzLnVuaXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKQEAgLTIzMyw3ICsy
MzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50CiAKICAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBzZXRTb3VyY2VSR0JBRnJv
bUNvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKLSAgICAgICAgRmxvYXRSZWN0IHIocmVjdCk7Cisg
ICAgICAgIEdyYXBoaWNzUmVjdCByKHJlY3QpOwogICAgICAgICByLmluZmxhdGUoLS41Zik7CiAg
ICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVp
Z2h0KCkpOwogICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgMS4wKTsKQEAgLTI3MCw3
ICsyNzAsNyBAQCBzdGF0aWMgZG91YmxlIGNhbGN1bGF0ZVN0cm9rZVBhdHRlcm5PZmZzCiAgICAg
cmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdMaW5lT25DYWlyb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorc3RhdGljIHZvaWQgZHJh
d0xpbmVPbkNhaXJvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY2Fp
cm9fdCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludDIpCiB7CiAgICAgU3Ryb2tlU3R5bGUgc3R5bGUgPSBncmFwaGljc0NvbnRl
eHQtPnN0cm9rZVN0eWxlKCk7CiAgICAgaWYgKHN0eWxlID09IE5vU3Ryb2tlKQpAQCAtMjg4LDE2
ICsyODgsMTYgQEAgc3RhdGljIHZvaWQgZHJhd0xpbmVPbkNhaXJvQ29udGV4dChHcmFwaAogICAg
ICAgICBwYXR0ZXJuV2lkdGggPSAzICogc3Ryb2tlVGhpY2tuZXNzOwogCiAgICAgYm9vbCBpc1Zl
cnRpY2FsTGluZSA9IHBvaW50MS54KCkgPT0gcG9pbnQyLngoKTsKLSAgICBGbG9hdFBvaW50IHBv
aW50MU9uUGl4ZWxCb3VuZGFyaWVzID0gcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyT25Q
aXhlbEJvdW5kYXJpZXMgPSBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDFPblBpeGVs
Qm91bmRhcmllcyA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50Mk9uUGl4ZWxCb3Vu
ZGFyaWVzID0gcG9pbnQyOwogICAgIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKHBvaW50MU9uUGl4ZWxCb3VuZGFyaWVzLCBwb2ludDJPblBpeGVsQm91bmRhcmll
cywgc3Ryb2tlVGhpY2tuZXNzLCBzdHlsZSk7CiAKICAgICBjYWlyb19zZXRfYW50aWFsaWFzKGNv
bnRleHQsIENBSVJPX0FOVElBTElBU19OT05FKTsKICAgICBpZiAocGF0dGVybldpZHRoKSB7CiAg
ICAgICAgIC8vIERvIGEgcmVjdCBmaWxsIG9mIG91ciBlbmRwb2ludHMuICBUaGlzIGVuc3VyZXMg
d2UgYWx3YXlzIGhhdmUgdGhlCiAgICAgICAgIC8vIGFwcGVhcmFuY2Ugb2YgYmVpbmcgYSBib3Jk
ZXIuICBXZSB0aGVuIGRyYXcgdGhlIGFjdHVhbCBkb3R0ZWQvZGFzaGVkIGxpbmUuCi0gICAgICAg
IEZsb2F0UmVjdCBmaXJzdFJlY3QocG9pbnQxT25QaXhlbEJvdW5kYXJpZXMsIEZsb2F0U2l6ZShz
dHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcykpOwotICAgICAgICBGbG9hdFJlY3Qgc2Vj
b25kUmVjdChwb2ludDJPblBpeGVsQm91bmRhcmllcywgRmxvYXRTaXplKHN0cm9rZVRoaWNrbmVz
cywgc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBmaXJzdFJlY3QocG9p
bnQxT25QaXhlbEJvdW5kYXJpZXMsIEdyYXBoaWNzU2l6ZShzdHJva2VUaGlja25lc3MsIHN0cm9r
ZVRoaWNrbmVzcykpOworICAgICAgICBHcmFwaGljc1JlY3Qgc2Vjb25kUmVjdChwb2ludDJPblBp
eGVsQm91bmRhcmllcywgR3JhcGhpY3NTaXplKHN0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tu
ZXNzKSk7CiAgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewogICAgICAgICAgICAgZmlyc3RS
ZWN0Lm1vdmUoLXN0cm9rZVRoaWNrbmVzcyAvIDIsIC1zdHJva2VUaGlja25lc3MpOwogICAgICAg
ICAgICAgc2Vjb25kUmVjdC5tb3ZlKC1zdHJva2VUaGlja25lc3MgLyAyLCAwKTsKQEAgLTQxOCw3
ICs0MTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAgICAg
Y2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4
UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNo
b3VsZEFudGlhbGlhcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihz
aXplX3QgbnBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFu
dGlhbGlhcykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC00NDgsNyArNDQ4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKAogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBib29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQ
b2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9v
bCBhbnRpYWxpYXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoY29uc3QgUAogICAgIHNoYWRvd0FuZFN0cm9rZUN1cnJlbnRDYWlyb1BhdGgodGhpcyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUw
MSw3ICs1MDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvCiAg
ICAgc2hhZG93QW5kRmlsbEN1cnJlbnRDYWlyb1BhdGgodGhpcyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQ29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC01MTIsNyArNTEy
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIGZpbGxS
ZWN0V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LCBjb2xvcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MTksNyArNjE5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkgewogICAgICAgICBpZiAoaSA+IDApCiAg
ICAgICAgICAgICBwYXRoLmNsZWFyKCk7Ci0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVj
dHNbaV0sIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOworICAgICAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHJlY3RzW2ldLCBHcmFwaGljc1NpemUocmFkaXVzLCByYWRpdXMpKTsKICAgICAgICAg
YXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgfQogI2VuZGlm
CkBAIC02NDMsNyArNjQzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29ucwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJv
b2wgcHJpbnRpbmcpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEdyYXBoaWNzUG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjUyLDggKzY1
Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICBjYWly
b19zYXZlKGNhaXJvQ29udGV4dCk7CiAKICAgICAvLyBUaGlzIGJ1bXBpbmcgb2YgPDEgc3Ryb2tl
IHRoaWNrbmVzc2VzIG1hdGNoZXMgdGhlIG9uZSBpbiBkcmF3TGluZU9uQ2Fpcm9Db250ZXh0Lgot
ICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQob3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCkpOwotICAg
IEZsb2F0UmVjdCBsaW5lRXh0ZW50cyhvcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgc3Ryb2tlVGhp
Y2tuZXNzKCkpKTsKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvaW50KG9yaWdpbiArIEludFNpemUo
d2lkdGgsIDApKTsKKyAgICBHcmFwaGljc1JlY3QgbGluZUV4dGVudHMob3JpZ2luLCBHcmFwaGlj
c1NpemUod2lkdGgsIHN0cm9rZVRoaWNrbmVzcygpKSk7CiAKICAgICBDb250ZXh0U2hhZG93KiBz
aGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJUKHNoYWRvdyk7CkBAIC02NzEsNyAr
NjcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjbwogI2luY2x1
ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0
IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBm
bG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTcwMSw5ICs3MDEsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAgICAgY2Fpcm9fcmVzdG9yZShj
cik7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQorR3JhcGhpY3NSZWN0IEdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmIGZyZWN0
LCBSb3VuZGluZ01vZGUpCiB7Ci0gICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBHcmFwaGljc1Jl
Y3QgcmVzdWx0OwogICAgIGRvdWJsZSB4ID0gZnJlY3QueCgpOwogICAgIGRvdWJsZSB5ID0gZnJl
Y3QueSgpOwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CkBAIC04
MjksNyArODI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwog
ICAgIGNsaXAocmVjdCk7CiAKICAgICBQYXRoIHA7Ci0gICAgRmxvYXRSZWN0IHIocmVjdCk7Cisg
ICAgR3JhcGhpY3NSZWN0IHIocmVjdCk7CiAgICAgLy8gQWRkIG91dGVyIGVsbGlwc2UKICAgICBw
LmFkZEVsbGlwc2Uocik7CiAgICAgLy8gQWRkIGlubmVyIGVsbGlwc2UKQEAgLTg0MywxNiArODQz
LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMKICAgICBjYWly
b19zZXRfZmlsbF9ydWxlKGNyLCBzYXZlZEZpbGxSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KEZsb2F0U2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQgYmx1
ciwgQ29sb3IgY29uc3QmIGNvbG9yLCBDb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KEdyYXBoaWNzU2l6ZSBjb25zdCYgc2l6ZSwgZmxvYXQgYmx1ciwg
Q29sb3IgY29uc3QmIGNvbG9yLCBDb2xvclNwYWNlKQogewogICAgIC8vIENhaXJvIGRvZXNuJ3Qg
c3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUg
ZHJhdyogZnVuY3Rpb25zCiAgICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsKICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3Nv
Y2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAg
dGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlz
Ci0gICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwg
LXNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3co
Y29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7Cisg
ICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHNpemUud2lkdGgoKSwg
LXNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3co
Y29sb3IsIGJsdXIsIEdyYXBoaWNzU2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xv
ciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgICAg
ICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEdyYXBoaWNzU2l6
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKIAogICAgIG1fZGF0YS0+c2hhZG93LnNl
dFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwogfQpAQCAtODkxLDcgKzg5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXkKICAgICBtX2RhdGEtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTA1LDcgKzkw
NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICBjYWly
b19yZXN0b3JlKGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAzMCw3ICsxMDMw
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYQogICAgIG1fZGF0
YS0+cm90YXRlKHJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEdy
YXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMDU1LDkgKzEwNTUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dChjb25zdCBJbnRSCiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgc2F2ZWRGaWxsUnVs
ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBnZXRQaGFzZShjb25zdCBGbG9hdFJl
Y3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZSkKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NQ
b2ludCBnZXRQaGFzZShjb25zdCBHcmFwaGljc1JlY3QmIGRlc3QsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgdGlsZSkKIHsKLSAgICBGbG9hdFBvaW50IHBoYXNlID0gZGVzdC5sb2NhdGlvbigpOworICAg
IEdyYXBoaWNzUG9pbnQgcGhhc2UgPSBkZXN0LmxvY2F0aW9uKCk7CiAgICAgcGhhc2UubW92ZSgt
dGlsZS54KCksIC10aWxlLnkoKSk7CiAKICAgICByZXR1cm4gcGhhc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSAr
NzEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzYXZlKCk7CiAgICAgdm9pZCByZXN0b3JlKCk7CiAg
ICAgdm9pZCBmbHVzaCgpOwotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
b2lkIGNsaXAoY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgm
KTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2NhbGUoY29u
c3QgR3JhcGhpY3NTaXplJik7CiAgICAgdm9pZCByb3RhdGUoZmxvYXQpOwogICAgIHZvaWQgdHJh
bnNsYXRlKGZsb2F0LCBmbG9hdCk7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CkBAIC04Niw5ICs4Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmUoKSB7fQog
ICAgIHZvaWQgcmVzdG9yZSgpIHt9CiAgICAgdm9pZCBmbHVzaCgpIHt9Ci0gICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpIHt9CisgICAgdm9pZCBjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYp
IHt9CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKSB7fQotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikge30KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIHt9CiAg
ICAgdm9pZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0
KSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc1JlY3RDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NSZWN0Q2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwOjkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NSZWN0Q2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IGNhaXJvX3JlY3RhbmdsZV90JiByKQor
ICAgIDogbV9sb2NhdGlvbihyLngsIHIueSkKKyAgICAsIG1fc2l6ZShyLndpZHRoLCByLmhlaWdo
dCkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBjYWlyb19yZWN0YW5nbGVfdCgpIGNvbnN0
Cit7CisgICAgY2Fpcm9fcmVjdGFuZ2xlX3QgciA9IHsgeCgpLCB5KCksIHdpZHRoKCksIGhlaWdo
dCgpIH07CisgICAgcmV0dXJuIHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzUmVjdENhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc1JlY3RDYWlyby5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NSZWN0Q2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxOSArMjQsMTkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAKICNpbmNs
dWRlIDxjYWlyby5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdDo6RmxvYXRS
ZWN0KGNvbnN0IGNhaXJvX3JlY3RhbmdsZV90JiByKQorR3JhcGhpY3NSZWN0OjpHcmFwaGljc1Jl
Y3QoY29uc3QgY2Fpcm9fcmVjdGFuZ2xlX3QmIHIpCiAgICAgOiBtX2xvY2F0aW9uKHIueCwgci55
KQogICAgICwgbV9zaXplKHIud2lkdGgsIHIuaGVpZ2h0KQogewogfQogCi1GbG9hdFJlY3Q6Om9w
ZXJhdG9yIGNhaXJvX3JlY3RhbmdsZV90KCkgY29uc3QKK0dyYXBoaWNzUmVjdDo6b3BlcmF0b3Ig
Y2Fpcm9fcmVjdGFuZ2xlX3QoKSBjb25zdAogewogICAgIGNhaXJvX3JlY3RhbmdsZV90IHIgPSB7
IHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSB9OwogICAgIHJldHVybiByOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDEyICs5NywxMiBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlCiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNl
KG1fZGF0YS5tX3N1cmZhY2UpLmxlYWtSZWYoKSk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmNs
aXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0KSBj
b25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgbWFza1JlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPnB1c2hJbWFnZU1hc2sobV9kYXRhLm1fc3VyZmFjZSwgbWFza1JlY3QpOwog
fQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxl
KQogewogICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZh
Y2Ugb24gZGVzdHJ1Y3Rpb24KQEAgLTExMCw4ICsxMTAsOCBAQCB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgp
LCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNj
YWxlKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2Ug
dGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCiAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9kYXRh
Lm1fc3VyZmFjZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKQEAgLTkzLDEwICs5MywxMCBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1h
Z2UoY2Fpcm9fc3VyZmFjZV90CiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9CiAKLXZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOwotICAgIEZsb2F0UmVjdCBkc3RSZWN0
KGRzdCk7CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3Qoc3JjKTsKKyAgICBHcmFwaGljc1JlY3Qg
ZHN0UmVjdChkc3QpOwogCiAgICAgaWYgKGRzdFJlY3Qud2lkdGgoKSA9PSAwLjBmIHx8IGRzdFJl
Y3QuaGVpZ2h0KCkgPT0gMC4wZiB8fAogICAgICAgICBzcmNSZWN0LndpZHRoKCkgPT0gMC4wZiB8
fCBzcmNSZWN0LmhlaWdodCgpID09IDAuMGYpCkBAIC0xMjgsOCArMTI4LDggQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBpbWFnZU9ic2VydmVyKCkt
PmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQog
ewogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwogICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUg
YW4gaW1hZ2UgeWV0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGF0aENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJPd25QdHJD
YWlyby5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUGF0aENhaXJvLmgiCkBAIC04NSwzNCArODUsMzQg
QEAgYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0
eSgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhp
Y3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICAvLyBGSVhNRTogSXMg
dGhpcyB0aGUgY29ycmVjdCB3YXk/CiAgICAgZG91YmxlIHg7CiAgICAgZG91YmxlIHk7CiAgICAg
Y2Fpcm9fZ2V0X2N1cnJlbnRfcG9pbnQocGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSwgJngsICZ5
KTsKLSAgICByZXR1cm4gRmxvYXRQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dCh4LCB5KTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBwKQor
dm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBwKQogewogICAgIGNhaXJv
X3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBjYWlyb190cmFuc2xhdGUo
Y3IsIC1wLndpZHRoKCksIC1wLmhlaWdodCgpKTsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29u
c3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHApCiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwogICAg
IGNhaXJvX21vdmVfdG8oY3IsIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkTGlu
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFw
aGljc1BvaW50JiBwKQogewogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRl
eHQoKTsKICAgICBjYWlyb19saW5lX3RvKGNyLCBwLngoKSwgcC55KCkpOwogfQogCi12b2lkIFBh
dGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtUGF0
aCgpLT5jb250ZXh0KCk7CiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9p
ZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogLyoKICAqIGluc3BpcmVkIGJ5
IGxpYnN2Zy1jYWlybwogICovCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6
OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgo
KS0+Y29udGV4dCgpOwogICAgIGRvdWJsZSB4LCB5OwpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQg
UGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2kKICAgICAgICAgICAgICAgICAgICB4
MiwgeTIpOwogfQogCi12b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3Qg
RmxvYXRQb2ludCYgY29udHJvbFBvaW50MykKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhj
b25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBj
b250cm9sUG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQzKQogewogICAg
IGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBjYWlyb19jdXJ2
ZV90byhjciwgY29udHJvbFBvaW50MS54KCksIGNvbnRyb2xQb2ludDEueSgpLApAQCAtMTQ0LDcg
KzE0NCw3IEBAIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFAKICAgICAg
ICAgICAgICAgICAgICBjb250cm9sUG9pbnQzLngoKSwgY29udHJvbFBvaW50My55KCkpOwogfQog
Ci12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBz
dGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBhbnRpY2xvY2t3aXNlKQordm9pZCBQYXRo
OjphZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc3RhcnRBbmds
ZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICAvLyBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0OQogICAgIC8vIGNhaXJvX2FyYygp
IGZ1bmN0aW9ucyBoYW5nIG9yIGNyYXNoIHdoZW4gcGFzc2VkIGluZiBhcyByYWRpdXMgb3Igc3Rh
cnQvZW5kIGFuZ2xlCkBAIC0xNzAsMTIgKzE3MCwxMiBAQCB2b2lkIFBhdGg6OmFkZEFyYyhjb25z
dCBGbG9hdFBvaW50JiBwLCBmCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGFyZWFP
ZlRyaWFuZ2xlRm9ybWVkQnlQb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMykKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXJl
YU9mVHJpYW5nbGVGb3JtZWRCeVBvaW50cyhjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAzKQogewogICAgIHJldHVy
biBwMS54KCkgKiAocDIueSgpIC0gcDMueSgpKSArIHAyLngoKSAqIChwMy55KCkgLSBwMS55KCkp
ICsgcDMueCgpICogKHAxLnkoKSAtIHAyLnkoKSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8o
Y29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMp
Cit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQogewogICAgIGlmIChpc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0
IEZsb2F0UG9pbnQmIHAxCiAKICAgICBkb3VibGUgeDAsIHkwOwogICAgIGNhaXJvX2dldF9jdXJy
ZW50X3BvaW50KGNyLCAmeDAsICZ5MCk7Ci0gICAgRmxvYXRQb2ludCBwMCh4MCwgeTApOworICAg
IEdyYXBoaWNzUG9pbnQgcDAoeDAsIHkwKTsKIAogICAgIC8vIERyYXcgb25seSBhIHN0cmFpZ2h0
IGxpbmUgdG8gcDEgaWYgYW55IG9mIHRoZSBwb2ludHMgYXJlIGVxdWFsIG9yIHRoZSByYWRpdXMg
aXMgemVybwogICAgIC8vIG9yIHRoZSBwb2ludHMgYXJlIGNvbGxpbmVhciAodHJpYW5nbGUgdGhh
dCB0aGUgcG9pbnRzIGZvcm0gaGFzIGFyZWEgb2YgemVybyB2YWx1ZSkuCkBAIC0xOTQsOCArMTk0
LDggQEAgdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBwMXAwKChwMC54KCkgLSBwMS54KCkpLChw
MC55KCkgLSBwMS55KCkpKTsKLSAgICBGbG9hdFBvaW50IHAxcDIoKHAyLngoKSAtIHAxLngoKSks
KHAyLnkoKSAtIHAxLnkoKSkpOworICAgIEdyYXBoaWNzUG9pbnQgcDFwMCgocDAueCgpIC0gcDEu
eCgpKSwocDAueSgpIC0gcDEueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwMXAyKChwMi54KCkg
LSBwMS54KCkpLChwMi55KCkgLSBwMS55KCkpKTsKICAgICBmbG9hdCBwMXAwX2xlbmd0aCA9IHNx
cnRmKHAxcDAueCgpICogcDFwMC54KCkgKyBwMXAwLnkoKSAqIHAxcDAueSgpKTsKICAgICBmbG9h
dCBwMXAyX2xlbmd0aCA9IHNxcnRmKHAxcDIueCgpICogcDFwMi54KCkgKyBwMXAyLnkoKSAqIHAx
cDIueSgpKTsKIApAQCAtMjA5LDI4ICsyMDksMjggQEAgdm9pZCBQYXRoOjphZGRBcmNUbyhjb25z
dCBGbG9hdFBvaW50JiBwMQogICAgICAgICAvLyBhZGQgaW5maW5pdGUgZmFyIGF3YXkgcG9pbnQK
ICAgICAgICAgdW5zaWduZWQgaW50IG1heF9sZW5ndGggPSA2NTUzNTsKICAgICAgICAgZG91Ymxl
IGZhY3Rvcl9tYXggPSBtYXhfbGVuZ3RoIC8gcDFwMF9sZW5ndGg7Ci0gICAgICAgIEZsb2F0UG9p
bnQgZXAoKHAwLngoKSArIGZhY3Rvcl9tYXggKiBwMXAwLngoKSksIChwMC55KCkgKyBmYWN0b3Jf
bWF4ICogcDFwMC55KCkpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBlcCgocDAueCgpICsgZmFj
dG9yX21heCAqIHAxcDAueCgpKSwgKHAwLnkoKSArIGZhY3Rvcl9tYXggKiBwMXAwLnkoKSkpOwog
ICAgICAgICBjYWlyb19saW5lX3RvKGNyLCBlcC54KCksIGVwLnkoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBmbG9hdCB0YW5nZW50ID0gcmFkaXVzIC8gdGFuKGFjb3MoY29zX3Bo
aSkgLyAyKTsKICAgICBmbG9hdCBmYWN0b3JfcDFwMCA9IHRhbmdlbnQgLyBwMXAwX2xlbmd0aDsK
LSAgICBGbG9hdFBvaW50IHRfcDFwMCgocDEueCgpICsgZmFjdG9yX3AxcDAgKiBwMXAwLngoKSks
IChwMS55KCkgKyBmYWN0b3JfcDFwMCAqIHAxcDAueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCB0
X3AxcDAoKHAxLngoKSArIGZhY3Rvcl9wMXAwICogcDFwMC54KCkpLCAocDEueSgpICsgZmFjdG9y
X3AxcDAgKiBwMXAwLnkoKSkpOwogCi0gICAgRmxvYXRQb2ludCBvcnRoX3AxcDAocDFwMC55KCks
IC1wMXAwLngoKSk7CisgICAgR3JhcGhpY3NQb2ludCBvcnRoX3AxcDAocDFwMC55KCksIC1wMXAw
LngoKSk7CiAgICAgZmxvYXQgb3J0aF9wMXAwX2xlbmd0aCA9IHNxcnQob3J0aF9wMXAwLngoKSAq
IG9ydGhfcDFwMC54KCkgKyBvcnRoX3AxcDAueSgpICogb3J0aF9wMXAwLnkoKSk7CiAgICAgZmxv
YXQgZmFjdG9yX3JhID0gcmFkaXVzIC8gb3J0aF9wMXAwX2xlbmd0aDsKIAogICAgIC8vIGFuZ2xl
IGJldHdlZW4gb3J0aF9wMXAwIGFuZCBwMXAyIHRvIGdldCB0aGUgcmlnaHQgdmVjdG9yIG9ydGhv
Z3JhcGhpYyB0byBwMXAwCiAgICAgZG91YmxlIGNvc19hbHBoYSA9IChvcnRoX3AxcDAueCgpICog
cDFwMi54KCkgKyBvcnRoX3AxcDAueSgpICogcDFwMi55KCkpIC8gKG9ydGhfcDFwMF9sZW5ndGgg
KiBwMXAyX2xlbmd0aCk7CiAgICAgaWYgKGNvc19hbHBoYSA8IDAuZikKLSAgICAgICAgb3J0aF9w
MXAwID0gRmxvYXRQb2ludCgtb3J0aF9wMXAwLngoKSwgLW9ydGhfcDFwMC55KCkpOworICAgICAg
ICBvcnRoX3AxcDAgPSBHcmFwaGljc1BvaW50KC1vcnRoX3AxcDAueCgpLCAtb3J0aF9wMXAwLnko
KSk7CiAKLSAgICBGbG9hdFBvaW50IHAoKHRfcDFwMC54KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3Ax
cDAueCgpKSwgKHRfcDFwMC55KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueSgpKSk7CisgICAg
R3JhcGhpY3NQb2ludCBwKCh0X3AxcDAueCgpICsgZmFjdG9yX3JhICogb3J0aF9wMXAwLngoKSks
ICh0X3AxcDAueSgpICsgZmFjdG9yX3JhICogb3J0aF9wMXAwLnkoKSkpOwogCiAgICAgLy8gY2Fs
Y3VsYXRlIGFuZ2xlcyBmb3IgYWRkQXJjCi0gICAgb3J0aF9wMXAwID0gRmxvYXRQb2ludCgtb3J0
aF9wMXAwLngoKSwgLW9ydGhfcDFwMC55KCkpOworICAgIG9ydGhfcDFwMCA9IEdyYXBoaWNzUG9p
bnQoLW9ydGhfcDFwMC54KCksIC1vcnRoX3AxcDAueSgpKTsKICAgICBmbG9hdCBzYSA9IGFjb3Mo
b3J0aF9wMXAwLngoKSAvIG9ydGhfcDFwMF9sZW5ndGgpOwogICAgIGlmIChvcnRoX3AxcDAueSgp
IDwgMC5mKQogICAgICAgICBzYSA9IDIgKiBwaURvdWJsZSAtIHNhOwpAQCAtMjM5LDggKzIzOSw4
IEBAIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEKICAgICBib29sIGFu
dGljbG9ja3dpc2UgPSBmYWxzZTsKIAogICAgIGZsb2F0IGZhY3Rvcl9wMXAyID0gdGFuZ2VudCAv
IHAxcDJfbGVuZ3RoOwotICAgIEZsb2F0UG9pbnQgdF9wMXAyKChwMS54KCkgKyBmYWN0b3JfcDFw
MiAqIHAxcDIueCgpKSwgKHAxLnkoKSArIGZhY3Rvcl9wMXAyICogcDFwMi55KCkpKTsKLSAgICBG
bG9hdFBvaW50IG9ydGhfcDFwMigodF9wMXAyLngoKSAtIHAueCgpKSwodF9wMXAyLnkoKSAtIHAu
eSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCB0X3AxcDIoKHAxLngoKSArIGZhY3Rvcl9wMXAyICog
cDFwMi54KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDIgKiBwMXAyLnkoKSkpOworICAgIEdyYXBo
aWNzUG9pbnQgb3J0aF9wMXAyKCh0X3AxcDIueCgpIC0gcC54KCkpLCh0X3AxcDIueSgpIC0gcC55
KCkpKTsKICAgICBmbG9hdCBvcnRoX3AxcDJfbGVuZ3RoID0gc3FydGYob3J0aF9wMXAyLngoKSAq
IG9ydGhfcDFwMi54KCkgKyBvcnRoX3AxcDIueSgpICogb3J0aF9wMXAyLnkoKSk7CiAgICAgZmxv
YXQgZWEgPSBhY29zKG9ydGhfcDFwMi54KCkgLyBvcnRoX3AxcDJfbGVuZ3RoKTsKICAgICBpZiAo
b3J0aF9wMXAyLnkoKSA8IDApCkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwMQogICAgIGFkZEFyYyhwLCByYWRpdXMsIHNhLCBlYSwgYW50
aWNsb2Nrd2lzZSk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQog
ewogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBjYWly
b19zYXZlKGNyKTsKQEAgLTI3MywxNSArMjczLDE1IEBAIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRo
KCkKICAgICBjYWlyb19jbG9zZV9wYXRoKGNyKTsKIH0KIAotRmxvYXRSZWN0IFBhdGg6OmJvdW5k
aW5nUmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QK
IHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCk7CiAgICAgZG91
YmxlIHgwLCB4MSwgeTAsIHkxOwogICAgIGNhaXJvX3BhdGhfZXh0ZW50cyhjciwgJngwLCAmeTAs
ICZ4MSwgJnkxKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5
MCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCh4MCwgeTAsIHgxIC0geDAsIHkxIC0geTApOwog
fQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGll
ciogYXBwbGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
U3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIGNhaXJvX3QqIGNyID0g
cGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKTsKICAgICBpZiAoYXBwbGllcikgewpAQCAtMjkxLDEw
ICsyOTEsMTAgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJvawogCiAg
ICAgZG91YmxlIHgwLCB4MSwgeTAsIHkxOwogICAgIGNhaXJvX3N0cm9rZV9leHRlbnRzKGNyLCAm
eDAsICZ5MCwgJngxLCAmeTEpOwotICAgIHJldHVybiBGbG9hdFJlY3QoeDAsIHkwLCB4MSAtIHgw
LCB5MSAtIHkwKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEg
LSB5MCk7CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIGlmICghaXNmaW5pdGUo
cG9pbnQueCgpKSB8fCAhaXNmaW5pdGUocG9pbnQueSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzA2LDcgKzMwNiw3IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG8KICAgICByZXR1cm4gY29udGFpbnM7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFp
bnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBs
aWVyLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQoYXBw
bGllcik7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpOwpAQCAt
MzIyLDcgKzMyMiw3IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9pZCogaW5mbywgUGF0aEFwcGxpZXIK
ICAgICBPd25QdHI8Y2Fpcm9fcGF0aF90PiBwYXRoQ29weSA9IGFkb3B0UHRyKGNhaXJvX2NvcHlf
cGF0aChjcikpOwogICAgIGNhaXJvX3BhdGhfZGF0YV90KiBkYXRhOwogICAgIFBhdGhFbGVtZW50
IHBlbGVtZW50OwotICAgIEZsb2F0UG9pbnQgcG9pbnRzWzNdOworICAgIEdyYXBoaWNzUG9pbnQg
cG9pbnRzWzNdOwogICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsKIAogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcGF0aENvcHktPm51bV9kYXRhOyBpICs9IHBhdGhDb3B5LT5kYXRhW2ldLmhl
YWRlci5sZW5ndGgpIHsKQEAgLTMzMCwxOSArMzMwLDE5IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9p
ZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICAgICAgc3dpdGNoIChkYXRhLT5oZWFkZXIudHlwZSkg
ewogICAgICAgICBjYXNlIENBSVJPX1BBVEhfTU9WRV9UTzoKICAgICAgICAgICAgIHBlbGVtZW50
LnR5cGUgPSBQYXRoRWxlbWVudE1vdmVUb1BvaW50OwotICAgICAgICAgICAgcGVsZW1lbnQucG9p
bnRzWzBdID0gRmxvYXRQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsKKyAg
ICAgICAgICAgIHBlbGVtZW50LnBvaW50c1swXSA9IEdyYXBoaWNzUG9pbnQoZGF0YVsxXS5wb2lu
dC54LGRhdGFbMV0ucG9pbnQueSk7CiAgICAgICAgICAgICBmdW5jdGlvbihpbmZvLCAmcGVsZW1l
bnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ0FJUk9fUEFUSF9MSU5FX1RP
OgogICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ7
Ci0gICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMF0gPSBGbG9hdFBvaW50KGRhdGFbMV0ucG9p
bnQueCxkYXRhWzFdLnBvaW50LnkpOworICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRzWzBdID0g
R3JhcGhpY3NQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsKICAgICAgICAg
ICAgIGZ1bmN0aW9uKGluZm8sICZwZWxlbWVudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDQUlST19QQVRIX0NVUlZFX1RPOgogICAgICAgICAgICAgcGVsZW1lbnQudHlwZSA9
IFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OwotICAgICAgICAgICAgcGVsZW1lbnQucG9pbnRz
WzBdID0gRmxvYXRQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2ludC55KTsKLSAgICAg
ICAgICAgIHBlbGVtZW50LnBvaW50c1sxXSA9IEZsb2F0UG9pbnQoZGF0YVsyXS5wb2ludC54LGRh
dGFbMl0ucG9pbnQueSk7Ci0gICAgICAgICAgICBwZWxlbWVudC5wb2ludHNbMl0gPSBGbG9hdFBv
aW50KGRhdGFbM10ucG9pbnQueCxkYXRhWzNdLnBvaW50LnkpOworICAgICAgICAgICAgcGVsZW1l
bnQucG9pbnRzWzBdID0gR3JhcGhpY3NQb2ludChkYXRhWzFdLnBvaW50LngsZGF0YVsxXS5wb2lu
dC55KTsKKyAgICAgICAgICAgIHBlbGVtZW50LnBvaW50c1sxXSA9IEdyYXBoaWNzUG9pbnQoZGF0
YVsyXS5wb2ludC54LGRhdGFbMl0ucG9pbnQueSk7CisgICAgICAgICAgICBwZWxlbWVudC5wb2lu
dHNbMl0gPSBHcmFwaGljc1BvaW50KGRhdGFbM10ucG9pbnQueCxkYXRhWzNdLnBvaW50LnkpOwog
ICAgICAgICAgICAgZnVuY3Rpb24oaW5mbywgJnBlbGVtZW50KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENBSVJPX1BBVEhfQ0xPU0VfUEFUSDoKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bUNvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGRldGFpbHMgYXMg
cGFydCBvZiB0aGUgY29udGV4dCBzdGF0ZSBhbmQgYXBwbHkgdGhlbSBkdXJpbmcgcGxhdGZvcm0g
cmVzdG9yZS4KIGNsYXNzIEltYWdlTWFza0luZm9ybWF0aW9uIHsKIHB1YmxpYzoKLSAgICB2b2lk
IHVwZGF0ZShjYWlyb19zdXJmYWNlX3QqIG1hc2tTdXJmYWNlLCBjb25zdCBGbG9hdFJlY3QmIG1h
c2tSZWN0KQorICAgIHZvaWQgdXBkYXRlKGNhaXJvX3N1cmZhY2VfdCogbWFza1N1cmZhY2UsIGNv
bnN0IEdyYXBoaWNzUmVjdCYgbWFza1JlY3QpCiAgICAgewogICAgICAgICBtX21hc2tTdXJmYWNl
ID0gbWFza1N1cmZhY2U7CiAgICAgICAgIG1fbWFza1JlY3QgPSBtYXNrUmVjdDsKQEAgLTQ4LDEx
ICs0OCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X21hc2tTdXJmYWNlOyB9CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBtYXNrU3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFza1N1cmZhY2UuZ2V0KCk7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIG1h
c2tSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrUmVjdDsgfQorICAgIGNvbnN0IEdyYXBoaWNz
UmVjdCYgbWFza1JlY3QoKSBjb25zdCB7IHJldHVybiBtX21hc2tSZWN0OyB9CiAKIHByaXZhdGU6
CiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9tYXNrU3VyZmFjZTsKLSAgICBGbG9hdFJl
Y3QgbV9tYXNrUmVjdDsKKyAgICBHcmFwaGljc1JlY3QgbV9tYXNrUmVjdDsKIH07CiAKIApAQCAt
ODgsNyArODgsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKIHsKICAg
ICBjb25zdCBJbWFnZU1hc2tJbmZvcm1hdGlvbiYgbWFza0luZm9ybWF0aW9uID0gbV9zdGF0ZS0+
bV9pbWFnZU1hc2tJbmZvcm1hdGlvbjsKICAgICBpZiAobWFza0luZm9ybWF0aW9uLmlzVmFsaWQo
KSkgewotICAgICAgICBjb25zdCBGbG9hdFJlY3QmIG1hc2tSZWN0ID0gbWFza0luZm9ybWF0aW9u
Lm1hc2tSZWN0KCk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgbWFza1JlY3QgPSBtYXNr
SW5mb3JtYXRpb24ubWFza1JlY3QoKTsKICAgICAgICAgY2Fpcm9fcG9wX2dyb3VwX3RvX3NvdXJj
ZShtX2NyLmdldCgpKTsKICAgICAgICAgY2Fpcm9fbWFza19zdXJmYWNlKG1fY3IuZ2V0KCksIG1h
c2tJbmZvcm1hdGlvbi5tYXNrU3VyZmFjZSgpLCBtYXNrUmVjdC54KCksIG1hc2tSZWN0LnkoKSk7
CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fpcm86OnNh
dmUoKQogICAgIGNhaXJvX3NhdmUobV9jci5nZXQoKSk7CiB9CiAKLXZvaWQgUGxhdGZvcm1Db250
ZXh0Q2Fpcm86OnB1c2hJbWFnZU1hc2soY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFBsYXRmb3JtQ29udGV4dENhaXJvOjpwdXNoSW1hZ2VNYXNr
KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIC8vIFdlIG11c3QgY2FsbCBzYXZlUGxhdGZvcm1TdGF0ZSBhdCBsZWFzdCBvbmNlIGJlZm9y
ZSB3ZSBjYW4gdXNlIGltYWdlIG1hc2tpbmcsCiAgICAgLy8gc2luY2Ugd2UgYWN0dWFsbHkgYXBw
bHkgdGhlIG1hc2sgaW4gcmVzdG9yZVBsYXRmb3JtU3RhdGUuCkBAIC0xMzgsNyArMTM4LDcgQEAg
dm9pZCBQbGF0Zm9ybUNvbnRleHRDYWlybzo6cHVzaEltYWdlTWFzawogICAgIGNhaXJvX2ZpbGwo
bV9jci5nZXQoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQo
Y2Fpcm9fdCogY3IsIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgZmxvYXQgYWxwaGEpCitzdGF0aWMgdm9pZCBkcmF3UGF0dGVyblRvQ2Fpcm9Db250
ZXh0KGNhaXJvX3QqIGNyLCBjYWlyb19wYXR0ZXJuX3QqIHBhdHRlcm4sIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZGVzdFJlY3QsIGZsb2F0IGFscGhhKQogewogICAgIGNhaXJvX3RyYW5zbGF0ZShjciwg
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOwogICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHBh
dHRlcm4pOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuVG9DYWly
b0NvbnRleHQoY2EKICAgICBjYWlyb19wYWludF93aXRoX2FscGhhKGNyLCBhbHBoYSk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1Db250ZXh0Q2Fpcm86OmRyYXdTdXJmYWNlVG9Db250ZXh0KGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFBsYXRmb3JtQ29u
dGV4dENhaXJvOjpkcmF3U3VyZmFjZVRvQ29udGV4dChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Us
IGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVj
dCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcg
YSBzdWIgcG9ydGlvbiBvZiB0aGUgaW1hZ2Ugb3Igc2NhbGluZyB0aGVuIGNyZWF0ZQogICAgIC8v
IGEgcGF0dGVybiB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgaW1hZ2UgYW5kIGRyYXcgdGhlIHRyYW5z
Zm9ybWVkIHBhdHRlcm4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRHbG9iYWxBbHBoYShmbG9hdCk7CiAgICAgZmxvYXQgZ2xvYmFsQWxwaGEo
KSBjb25zdDsKIAotICAgIHZvaWQgcHVzaEltYWdlTWFzayhjYWlyb19zdXJmYWNlX3QqLCBjb25z
dCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRyYXdTdXJmYWNlVG9Db250ZXh0KGNhaXJvX3N1cmZh
Y2VfdCosIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgR3JhcGhpY3NDb250ZXh0Kik7CisgICAgdm9pZCBwdXNoSW1hZ2VNYXNrKGNhaXJvX3N1cmZh
Y2VfdCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd1N1cmZhY2VUb0NvbnRl
eHQoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBHcmFwaGljc0NvbnRleHQqKTsKIAogICAgIHZvaWQgc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7
IG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IH0KICAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlv
bk1hdHJpeENhaXJvLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAKICNp
bmNsdWRlIDxjYWlyby5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GbG9hdFBvaW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRQb2ludENHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2lmIFVTRShDRykgfHwgVVNF
KFNLSUFfT05fTUFDX0NIUk9NSVVNKQotCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9B
cHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRQb2lu
dDo6RmxvYXRQb2ludChjb25zdCBDR1BvaW50JiBwKSA6IG1feChwLngpLCBtX3kocC55KQotewot
fQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBDR1BvaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q0dQb2ludE1ha2UobV94LCBtX3kpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0
Q0cuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0Zsb2F0UmVjdENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0KLSNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKLQotI2lu
Y2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IENHUmVjdCYgcikg
OiBtX2xvY2F0aW9uKHIub3JpZ2luKSwgbV9zaXplKHIuc2l6ZSkKLXsKLX0KLQotRmxvYXRSZWN0
OjpvcGVyYXRvciBDR1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBDR1JlY3RNYWtlKHgoKSwg
eSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNp
emVDRy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgotCi0jaWYgVVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pIHx8
IChQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKLQotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZs
b2F0U2l6ZTo6RmxvYXRTaXplKGNvbnN0IENHU2l6ZSYgcykgOiBtX3dpZHRoKHMud2lkdGgpLCBt
X2hlaWdodChzLmhlaWdodCkKLXsKLX0KLQotRmxvYXRTaXplOjpvcGVyYXRvciBDR1NpemUoKSBj
b25zdAotewotICAgIHJldHVybiBDR1NpemVNYWtlKG1fd2lkdGgsIG1faGVpZ2h0KTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBDR0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9y
bUdyYWRpZW50CiB9CiAjZW5kaWYKIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhZGllbnQ6OmZpbGwo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAg
ICAgY29udGV4dC0+Y2xpcChyZWN0KTsKICAgICBwYWludChjb250ZXh0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAs
MTAgKzE3MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50CiAg
ICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gc3Ryb2tlQ29sb3IoKSkKICAgICAgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9rZUNvbG9yU3BhY2UoKSk7
CiAgICAgICAgIENHUmVjdCByZWN0c1s0XSA9IHsKLSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCi0gICAgICAgICAgICBGbG9hdFJlY3Qo
cmVjdC54KCksIHJlY3QubWF4WSgpIC0gMSwgcmVjdC53aWR0aCgpLCAxKSwKLSAgICAgICAgICAg
IEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdodCgpIC0gMiks
Ci0gICAgICAgICAgICBGbG9hdFJlY3QocmVjdC5tYXhYKCkgLSAxLCByZWN0LnkoKSArIDEsIDEs
IHJlY3QuaGVpZ2h0KCkgLSAyKQorICAgICAgICAgICAgR3JhcGhpY3NSZWN0KHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCAxKSwKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdChyZWN0
LngoKSwgcmVjdC5tYXhZKCkgLSAxLCByZWN0LndpZHRoKCksIDEpLAorICAgICAgICAgICAgR3Jh
cGhpY3NSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKSwK
KyAgICAgICAgICAgIEdyYXBoaWNzUmVjdChyZWN0Lm1heFgoKSAtIDEsIHJlY3QueSgpICsgMSwg
MSwgcmVjdC5oZWlnaHQoKSAtIDIpCiAgICAgICAgIH07CiAgICAgICAgIENHQ29udGV4dEZpbGxS
ZWN0cyhjb250ZXh0LCByZWN0cywgNCk7CiAgICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gc3Ry
b2tlQ29sb3IoKSkKQEAgLTE5Miw4ICsxOTIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmUoY29uc3QgSW50CiAKICAgICBmbG9hdCB3aWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwog
Ci0gICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQy
OworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBwMiA9
IHBvaW50MjsKICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngoKSA9PSBwMi54KCkpOwog
ICAgIAogICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3By
aWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYwpAQCAtMjQ3LDExICsyNDcsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAgICAgICAvLyBh
cHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90
dGVkL2Rhc2hlZCBsaW5lLgogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VD
b2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOyAgLy8gVGhlIHNhdmUvcmVzdG9yZSBtYWtlIGl0
IHNhZmUgdG8gbXV0YXRlIHRoZSBmaWxsIGNvbG9yIGhlcmUgd2l0aG91dCBzZXR0aW5nIGl0IGJh
Y2sgdG8gdGhlIG9sZCBjb2xvci4KICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lk
dGggLyAyLCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7Ci0gICAgICAgICAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55
KCksIHdpZHRoLCB3aWR0aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4
dCwgR3JhcGhpY3NSZWN0KHAxLngoKSAtIHdpZHRoIC8gMiwgcDEueSgpIC0gd2lkdGgsIHdpZHRo
LCB3aWR0aCkpOworICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgR3JhcGhp
Y3NSZWN0KHAyLngoKSAtIHdpZHRoIC8gMiwgcDIueSgpLCB3aWR0aCwgd2lkdGgpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0
UmVjdChwMS54KCkgLSB3aWR0aCwgcDEueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpKTsK
LSAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIEZsb2F0UmVjdChwMi54KCks
IHAyLnkoKSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRl
eHRGaWxsUmVjdChjb250ZXh0LCBHcmFwaGljc1JlY3QocDEueCgpIC0gd2lkdGgsIHAxLnkoKSAt
IHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRGaWxsUmVj
dChjb250ZXh0LCBHcmFwaGljc1JlY3QocDIueCgpLCBwMi55KCkgLSB3aWR0aCAvIDIsIHdpZHRo
LCB3aWR0aCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdp
dGggYSB3aWR0aCBvZiAzMCBwaXhlbHMuCkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbgogICAgIGZsb2F0IHJldmVyc2VTY2FsZUZhY3Rv
ciA9IHcgLyBoOwogCiAgICAgaWYgKHcgIT0gaCkKLSAgICAgICAgc2NhbGUoRmxvYXRTaXplKDEs
IHNjYWxlRmFjdG9yKSk7CisgICAgICAgIHNjYWxlKEdyYXBoaWNzU2l6ZSgxLCBzY2FsZUZhY3Rv
cikpOwogCiAgICAgZmxvYXQgaFJhZGl1cyA9IHcgLyAyOwogICAgIGZsb2F0IHZSYWRpdXMgPSBo
IC8gMjsKQEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJj
KGNvbnN0IEluCiAgICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRleHQsIHggKyBoUmFkaXVzLCAoeSAr
IHZSYWRpdXMpICogcmV2ZXJzZVNjYWxlRmFjdG9yLCBoUmFkaXVzLCBzdGFydCwgZW5kLCB0cnVl
KTsKIAogICAgIGlmICh3ICE9IGgpCi0gICAgICAgIHNjYWxlKEZsb2F0U2l6ZSgxLCByZXZlcnNl
U2NhbGVGYWN0b3IpKTsKKyAgICAgICAgc2NhbGUoR3JhcGhpY3NTaXplKDEsIHJldmVyc2VTY2Fs
ZUZhY3RvcikpOwogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKICAgICBp
bnQgcGF0V2lkdGggPSAwOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMoY29uc3QgSW4KICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwogfQogCi1zdGF0aWMgdm9pZCBhZGRDb252ZXhQb2x5Z29uVG9QYXRoKFBhdGgmIHBhdGgsIHNp
emVfdCBudW1iZXJPZlBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQorc3RhdGljIHZv
aWQgYWRkQ29udmV4UG9seWdvblRvUGF0aChQYXRoJiBwYXRoLCBzaXplX3QgbnVtYmVyT2ZQb2lu
dHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cykKIHsKICAgICBBU1NFUlQobnVtYmVyT2ZQ
b2ludHMgPiAwKTsKIApAQCAtNDA5LDcgKzQwOSw3IEBAIHN0YXRpYyB2b2lkIGFkZENvbnZleFBv
bHlnb25Ub1BhdGgoUGF0aCYKICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bWJlck9mUG9pbnRzLCBjb25zdCBH
cmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICAgICAgQ0dDb250ZXh0U2V0
U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlhbGlhcygpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1iZXJPZlBvaW50cywg
Y29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtYmVyT2ZQb2ludHMsIGNvbnN0IEdy
YXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXMpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU0LDcgKzU1NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKIAogICAgIGlmIChtX3N0YXRlLmZpbGxH
cmFkaWVudCkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAgIEZsb2F0
UmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVj
dCByZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIENHTGF5ZXJSZWYgbGF5
ZXIgPSBDR0xheWVyQ3JlYXRlV2l0aENvbnRleHQoY29udGV4dCwgQ0dTaXplTWFrZShyZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpLCAwKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlZiBsYXll
ckNvbnRleHQgPSBDR0xheWVyR2V0Q29udGV4dChsYXllcik7CiAKQEAgLTYwOSw3ICs2MDksNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAKICAgICBpZiAobV9z
dGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAg
ICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgICAg
IEdyYXBoaWNzUmVjdCByZWN0ID0gcGF0aC5ib3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIGZs
b2F0IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgICAgICAgICAgZmxvYXQgZG91
YmxlTGluZVdpZHRoID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGxheWVyV2lk
dGggPSBjZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtNjYyLDcgKzY2
Miw3IEBAIHN0YXRpYyBib29sIGhhc0JsdXJyZWRTaGFkb3coY29uc3QgR3JhcGgKICAgICByZXR1
cm4gc3RhdGUuc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmIHN0YXRlLnNoYWRvd0NvbG9yLmFscGhh
KCkgJiYgc3RhdGUuc2hhZG93Qmx1cjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzAyLDcgKzcwMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4
dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFk
b3coRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNl
dCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKKyAgICAg
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KEdyYXBoaWNzU2l6ZShzaGFkb3dCbHVyLCBzaGFk
b3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3Rh
dGUuc2hhZG93Q29sb3JTcGFjZSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFk
b3codGhpcywgcmVjdCwgUm91bmRlZFJlY3Q6OlJhZGlpKCkpOwogICAgIH0KIApAQCAtNzEyLDcg
KzcxMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsbwogICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8s
IDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hh
ZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRv
d0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVyIGNv
bnRleHRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRl
LnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNw
YWNlKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdyh0aGlzLCByZWN0LCBS
b3VuZGVkUmVjdDo6UmFkaWkoKSk7CiAgICAgfQogCkBAIC03NjQsNyArNzY0LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogICAgICAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxh
dGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIg
Y29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3Bh
Y2UpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRv
d0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dD
b2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5k
cmF3UmVjdFNoYWRvdyh0aGlzLCByZWN0LCBSb3VuZGVkUmVjdDo6UmFkaWkodG9wTGVmdCwgdG9w
UmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KSk7CiAgICAgfQogCkBAIC04MTcsNyArODE3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZQogICAgICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dX
aXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1
ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNo
YWRvd0NvbG9yU3BhY2UpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coR3JhcGhp
Y3NTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlKTsKICAgICAgICAgY29u
dGV4dFNoYWRvdy5kcmF3SW5zZXRTaGFkb3codGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LnJl
Y3QoKSwgcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkpOwogICAgIH0KIApAQCAtODMwLDcgKzgzMCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGUKICAgICBzZXRGaWxs
Q29sb3Iob2xkRmlsbENvbG9yLCBvbGRGaWxsQ29sb3JTcGFjZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBHcmFwaGlj
c1NpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtOTkwLDE0ICs5OTAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhh
KGZsb2F0IGFscAogICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29udGV4dCgpLCBhbHBo
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBHcmFwaGljc1JlY3Qm
IHIpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IENHQ29udGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aAogICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNv
bnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXpl
JiBzaXplKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTExNzUsNyArMTE3NSw3IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTSgKICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKHQuYSwgdC5iLCB0LmMsIHQuZCwgdC50
eCwgdC50eSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQor
R3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAjaWYgUExB
VEZPUk0oQ0hST01JVU0pCiAgICAgcmV0dXJuIHJlY3Q7CkBAIC0xMjE3LDEzICsxMjE3LDEzIEBA
IEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2UKICAgICBpZiAoZGV2aWNl
T3JpZ2luLnggPT0gZGV2aWNlTG93ZXJSaWdodC54ICYmIHJlY3Qud2lkdGgoKSkKICAgICAgICAg
ZGV2aWNlTG93ZXJSaWdodC54ICs9IDE7CiAKLSAgICBGbG9hdFBvaW50IHJvdW5kZWRPcmlnaW4g
PSBGbG9hdFBvaW50KGRldmljZU9yaWdpbi54IC8gZGV2aWNlU2NhbGVYLCBkZXZpY2VPcmlnaW4u
eSAvIGRldmljZVNjYWxlWSk7Ci0gICAgRmxvYXRQb2ludCByb3VuZGVkTG93ZXJSaWdodCA9IEZs
b2F0UG9pbnQoZGV2aWNlTG93ZXJSaWdodC54IC8gZGV2aWNlU2NhbGVYLCBkZXZpY2VMb3dlclJp
Z2h0LnkgLyBkZXZpY2VTY2FsZVkpOwotICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdp
biwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKKyAgICBHcmFwaGljc1BvaW50
IHJvdW5kZWRPcmlnaW4gPSBHcmFwaGljc1BvaW50KGRldmljZU9yaWdpbi54IC8gZGV2aWNlU2Nh
bGVYLCBkZXZpY2VPcmlnaW4ueSAvIGRldmljZVNjYWxlWSk7CisgICAgR3JhcGhpY3NQb2ludCBy
b3VuZGVkTG93ZXJSaWdodCA9IEdyYXBoaWNzUG9pbnQoZGV2aWNlTG93ZXJSaWdodC54IC8gZGV2
aWNlU2NhbGVYLCBkZXZpY2VMb3dlclJpZ2h0LnkgLyBkZXZpY2VTY2FsZVkpOworICAgIHJldHVy
biBHcmFwaGljc1JlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVk
T3JpZ2luKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyNDksNyArMTI0OSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY28KICAgICAgICAgLy8gV2UgdHJ5IHRv
IHJvdW5kIGFsbCBwYXJhbWV0ZXJzIHRvIGludGVnZXIgYm91bmRhcmllcyBpbiBkZXZpY2Ugc3Bh
Y2UuIElmIHJvdW5kaW5nIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UKICAgICAgICAgLy8gbWFrZXMg
b3VyIHRoaWNrbmVzcyBtb3JlIHRoYW4gZG91YmxlLCB0aGVuIHRoZXJlIG11c3QgYmUgYSBzaHJp
bmtpbmctc2NhbGUgZmFjdG9yIGFuZCByb3VuZGluZyB0byBwaXhlbHMKICAgICAgICAgLy8gaW4g
ZGV2aWNlIHNwYWNlIHdpbGwgbWFrZSB0aGUgdW5kZXJsaW5lcyB0b28gdGhpY2suCi0gICAgICAg
IENHUmVjdCBsaW5lUmVjdCA9IHJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KHgsIHksIGxp
bmVMZW5ndGgsIGFkanVzdGVkVGhpY2tuZXNzKSwgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zKTsK
KyAgICAgICAgQ0dSZWN0IGxpbmVSZWN0ID0gcm91bmRUb0RldmljZVBpeGVscyhHcmFwaGljc1Jl
Y3QoeCwgeSwgbGluZUxlbmd0aCwgYWRqdXN0ZWRUaGlja25lc3MpLCBSb3VuZE9yaWdpbkFuZERp
bWVuc2lvbnMpOwogICAgICAgICBpZiAobGluZVJlY3Quc2l6ZS5oZWlnaHQgPCB0aGlja25lc3Mg
KiAyLjApIHsKICAgICAgICAgICAgIHggPSBsaW5lUmVjdC5vcmlnaW4ueDsKICAgICAgICAgICAg
IHkgPSBsaW5lUmVjdC5vcmlnaW4ueTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ0cuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmUoKSB7fQog
ICAgIHZvaWQgcmVzdG9yZSgpIHt9CiAgICAgdm9pZCBmbHVzaCgpIHt9Ci0gICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpIHt9CisgICAgdm9pZCBjbGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYp
IHt9CiAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKSB7fQotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikge30KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYpIHt9CiAg
ICAgdm9pZCByb3RhdGUoZmxvYXQpIHt9CiAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0
KSB7fQogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIHt9CkBAIC03
OCw5ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUo
KTsKICAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZvaWQgY2xpcChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIGNsaXAoY29uc3Qg
UGF0aCYpOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBzY2Fs
ZShjb25zdCBHcmFwaGljc1NpemUmKTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCk7CiAgICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzUG9pbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NQb2ludENHLmNwcAkocmV2aXNpb24gOTEwMTEpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHA6OTEw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1BvaW50
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaWYg
VVNFKENHKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01JVU0pCisKKyNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IENHUG9pbnQmIHApIDogbV94KHAueCks
IG1feShwLnkpCit7Cit9CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIENHUG9pbnQoKSBjb25zdAor
eworICAgIHJldHVybiBDR1BvaW50TWFrZShtX3gsIG1feSk7Cit9CisKK30KKworI2VuZGlmIC8v
IFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzUG9pbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NQb2ludENHLmNwcAkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1BvaW50Q0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKICNpZiBV
U0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKIApAQCAtMzMsMTEgKzMzLDExIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBD
R1BvaW50JiBwKSA6IG1feChwLngpLCBtX3kocC55KQorR3JhcGhpY3NQb2ludDo6R3JhcGhpY3NQ
b2ludChjb25zdCBDR1BvaW50JiBwKSA6IG1feChwLngpLCBtX3kocC55KQogewogfQogCi1GbG9h
dFBvaW50OjpvcGVyYXRvciBDR1BvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQ6Om9wZXJhdG9y
IENHUG9pbnQoKSBjb25zdAogewogICAgIHJldHVybiBDR1BvaW50TWFrZShtX3gsIG1feSk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NSZWN0Q0cuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwOjkxMDExKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NSZWN0Q0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgTm9raWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2lmIFVTRShDRykgfHwgVVNFKFNLSUFf
T05fTUFDX0NIUk9NSVVNKQorCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNh
dGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9h
dFJlY3QoY29uc3QgQ0dSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5z
aXplKQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIENHUmVjdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIENHUmVjdE1ha2UoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfQor
CisjZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NSZWN0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzUmVjdENHLmNwcAkocmV2aXNpb24gOTEwMTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1JlY3RDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAK
ICNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlVTSkKIApAQCAtMzMsMTEgKzMz
LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29u
c3QgQ0dSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQorR3Jh
cGhpY3NSZWN0OjpHcmFwaGljc1JlY3QoY29uc3QgQ0dSZWN0JiByKSA6IG1fbG9jYXRpb24oci5v
cmlnaW4pLCBtX3NpemUoci5zaXplKQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIENHUmVj
dCgpIGNvbnN0CitHcmFwaGljc1JlY3Q6Om9wZXJhdG9yIENHUmVjdCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIENHUmVjdE1ha2UoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzU2l6ZUNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c1NpemVDRy5jcHAJKHJldmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5jcHA6OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBO
b2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisKKyNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01B
Q19DSFJPTUlVTSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQorCisjaW5jbHVkZSA8
QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRmxvYXRTaXplOjpGbG9hdFNpemUoY29uc3QgQ0dTaXplJiBzKSA6IG1fd2lk
dGgocy53aWR0aCksIG1faGVpZ2h0KHMuaGVpZ2h0KQoreworfQorCitGbG9hdFNpemU6Om9wZXJh
dG9yIENHU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENHU2l6ZU1ha2UobV93aWR0aCwgbV9o
ZWlnaHQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc1NpemVDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NTaXplQ0cuY3BwCShy
ZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzU2l6ZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAg
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NTaXplLmgiCiAKICNpZiBVU0UoQ0cpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUlV
TSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQogCkBAIC0zMywxMSArMzMsMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBDR1Np
emUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCitHcmFwaGljc1Np
emU6OkdyYXBoaWNzU2l6ZShjb25zdCBDR1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9o
ZWlnaHQocy5oZWlnaHQpCiB7CiB9CiAKLUZsb2F0U2l6ZTo6b3BlcmF0b3IgQ0dTaXplKCkgY29u
c3QKK0dyYXBoaWNzU2l6ZTo6b3BlcmF0b3IgQ0dTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Q0dTaXplTWFrZShtX3dpZHRoLCBtX2hlaWdodCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIEltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9j
b250ZXh0PSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dC5nZXQoKSkpOwot
ICAgIG1fY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9jb250ZXh0LT5z
Y2FsZShHcmFwaGljc1NpemUoMSwgLTEpKTsKICAgICBtX2NvbnRleHQtPnRyYW5zbGF0ZSgwLCAt
c2l6ZS5oZWlnaHQoKSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CiB9CkBAIC0yMDEsNyArMjAxLDcg
QEAgc3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25zdCBJbnRTaXplJgogICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEubV9jb2xvclNwYWNlLCBkYXRhLm1fYml0bWFwSW5mbywgZGF0YS5t
X2RhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7
CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQogewogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKSB7CkBAIC0yMjAs
OCArMjIwLDggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAg
IH0KIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFz
ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVy
aW5nKSB7CiAgICAgICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKQEAgLTIzOCw3
ICsyMzgsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvCiAgICAg
fQogfQogCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dFRv
Q2xpcCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xp
cChHcmFwaGljc0NvbnRleHQqIGNvbnRleHRUb0NsaXAsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkgY29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0VG9DbGlwID0gY29u
dGV4dFRvQ2xpcC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlOwpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhp
Y3NDb250ZXh0KiAKICNlbmRpZgogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHRUb0NsaXAsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENH
Q29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgMSwgLTEpOwotICAgIENHQ29u
dGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0VG9DbGlwLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCByZWN0LnNpemUoKSksIGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHRDbGlwVG9NYXNr
KHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQoKSwgcmVj
dC5zaXplKCkpLCBpbWFnZS5nZXQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1D
b250ZXh0VG9DbGlwLCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3Jt
Q29udGV4dFRvQ2xpcCwgLXJlY3QueCgpLCAtcmVjdC55KCkgLSByZWN0LmhlaWdodCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJQREZEb2N1bWVudEltYWdlLmgiCkBAIC0xODIsNyArMTgyLDcgQEAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDRwogICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4oQWRvcHRDRiwgYXJyYXkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3ApCiB7CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIApAQCAtMTk1LDcgKzE5NSw3IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
LmdldCgpKTsKKyAgICBHcmFwaGljc1VuaXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UuZ2V0KCkpOwogICAgIGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIwNiw4ICsyMDYsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogCiAKICAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBzdWJwb3J0
aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3RpbmF0aW9u
IHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQogICAgIC8vIGFuZCB0aGVuIHNl
dCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKLSAgICBGbG9hdFNpemUgc2VsZlNp
emUgPSBjdXJyZW50RnJhbWVTaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IGFkanVzdGVkRGVzdFJl
Y3QgPSBkZXN0UmVjdDsKKyAgICBHcmFwaGljc1NpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVT
aXplKCk7CiAgICAgaWYgKHNyY1JlY3Quc2l6ZSgpICE9IHNlbGZTaXplKSB7CiAgICAgICAgIENH
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0KTsKICAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2Ug
aXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0
ZW1wb3JhcnkgQ0dJbWFnZQpAQCAtMjE1LDEyICsyMTUsMTIgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAvLyBpbnRlcnBvbGF0aW9uIHNtb290aGVz
IHNoYXJwIGVkZ2VzLCBjYXVzaW5nIHBpeGVscyBmcm9tIG91dHNpZGUgdGhlIHNvdXJjZSByZWN0
IHRvIGJsZWVkCiAgICAgICAgIC8vIGludG8gdGhlIGRlc3RpbmF0aW9uIHJlY3QuIFNlZSA8cmRh
cjovL3Byb2JsZW0vNjExMjkwOT4uCiAgICAgICAgIHNob3VsZFVzZVN1YmltYWdlID0gKGludGVy
cG9sYXRpb25RdWFsaXR5ICE9IGtDR0ludGVycG9sYXRpb25Ob25lKSAmJiAoc3JjUmVjdC5zaXpl
KCkgIT0gZGVzdFJlY3Quc2l6ZSgpIHx8ICFjdHh0LT5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFu
c2xhdGlvbk9yRmxpcHBlZCgpKTsKLSAgICAgICAgZmxvYXQgeFNjYWxlID0gc3JjUmVjdC53aWR0
aCgpIC8gZGVzdFJlY3Qud2lkdGgoKTsKLSAgICAgICAgZmxvYXQgeVNjYWxlID0gc3JjUmVjdC5o
ZWlnaHQoKSAvIGRlc3RSZWN0LmhlaWdodCgpOworICAgICAgICBHcmFwaGljc1VuaXQgeFNjYWxl
ID0gc3JjUmVjdC53aWR0aCgpIC8gZGVzdFJlY3Qud2lkdGgoKTsKKyAgICAgICAgR3JhcGhpY3NV
bml0IHlTY2FsZSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKICAgICAg
ICAgaWYgKHNob3VsZFVzZVN1YmltYWdlKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1h
Z2VSZWN0ID0gc3JjUmVjdDsKLSAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVj
dC54KCkgLSBmbG9vcmYoc3JjUmVjdC54KCkpOwotICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGlu
ZyA9IHNyY1JlY3QueSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKKyAgICAgICAgICAgIEdyYXBo
aWNzUmVjdCBzdWJpbWFnZVJlY3QgPSBzcmNSZWN0OworICAgICAgICAgICAgR3JhcGhpY3NVbml0
IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkgLSBmbG9vcihzcmNSZWN0LngoKSk7CisgICAgICAg
ICAgICBHcmFwaGljc1VuaXQgdG9wUGFkZGluZyA9IHNyY1JlY3QueSgpIC0gZmxvb3Ioc3JjUmVj
dC55KCkpOwogCiAgICAgICAgICAgICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRpbmcsIC10
b3BQYWRkaW5nKTsKICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVmdFBhZGRp
bmcgLyB4U2NhbGUsIC10b3BQYWRkaW5nIC8geVNjYWxlKTsKQEAgLTIzNyw4ICsyMzcsOCBAQCB2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgICAgICAgICAg
YWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkg
LyB5U2NhbGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
YWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGRlc3RSZWN0LngoKSAtIHNy
Y1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAvIHlTY2FsZSkp
OwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEZsb2F0U2l6ZShzZWxmU2l6
ZS53aWR0aCgpIC8geFNjYWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAg
ICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KGRlc3RSZWN0
LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAv
IHlTY2FsZSkpOworICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEdyYXBoaWNz
U2l6ZShzZWxmU2l6ZS53aWR0aCgpIC8geFNjYWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2Fs
ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3Rl
ZERlc3RSZWN0KSkKQEAgLTI3MCwxMSArMjcwLDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiAKIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCog
aW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IChD
R0ltYWdlUmVmKWluZm87Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7Cisg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5y
b3VuZFRvRGV2aWNlUGl4ZWxzKEdyYXBoaWNzUmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7CiB9CiAKLXZvaWQgSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
R3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoIW5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5MiwxNSArMjkyLDE1IEBAIHZvaWQg
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICBDR0NvbnRleHRTY2FsZUNU
TShjb250ZXh0LCAxLCAtMSk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgc2NhbGVkIHRpbGUg
c2l6ZS4KLSAgICBmbG9hdCBzY2FsZWRUaWxlSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKTsKKyAgICBHcmFwaGlj
c1VuaXQgc2NhbGVkVGlsZUhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpICogbmFycm93UHJlY2lz
aW9uVG9HcmFwaGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5kKCkpOwogICAgIAogICAgIC8vIFdl
IGhhdmUgdG8gYWRqdXN0IHRoZSBwaGFzZSB0byBkZWFsIHdpdGggdGhlIGZhY3Qgd2UncmUgaW4g
Q2FydGVzaWFuIHNwYWNlIG5vdyAod2l0aCB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIGRlc3RS
ZWN0IGJlaW5nCiAgICAgLy8gdGhlIG9yaWdpbikuCi0gICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhh
c2UueCgpIC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9G
bG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNvbnRleHQg
c28gdGhhdCBkZXN0UmVjdC54KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQgb3V0Lgot
ICAgIGZsb2F0IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRl
c3RSZWN0LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVy
blRyYW5zZm9ybS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7CisgICAgR3JhcGhpY3NVbml0IGFk
anVzdGVkWCA9IHBoYXNlLngoKSAtIGRlc3RSZWN0LngoKSArIHRpbGVSZWN0LngoKSAqIG5hcnJv
d1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJh
bnNsYXRlZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBz
byBzdWJ0cmFjdCBpdCBvdXQuCisgICAgR3JhcGhpY3NVbml0IGFkanVzdGVkWSA9IGRlc3RSZWN0
LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5h
cnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKSArIHNjYWxl
ZFRpbGVIZWlnaHQpOwogCiAgICAgQ0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwotICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRpbGVJbWFn
ZSk7CisgICAgR3JhcGhpY3NVbml0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRpbGVJbWFnZSk7CiAK
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2U7CiAgICAgaWYgKHRpbGVSZWN0LnNp
emUoKSA9PSBzaXplKCkpCkBAIC0zMTksMTQgKzMxOSwxNCBAQCB2b2lkIEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgLy8gaXRzIGJ1ZmZlciBpcyB0aGUgc2FtZSBzaXpl
IGFzIHRoZSBvdmVyYWxsIGltYWdlLiAgQmVjYXVzZSBhIHBhcnRpYWxseSBkZWNvZGVkIENHSW1h
Z2VSZWYgd2l0aCBhIHNtYWxsZXIgd2lkdGggb3IgaGVpZ2h0IHRoYW4gdGhlCiAgICAgLy8gb3Zl
cmFsbCBpbWFnZSBidWZmZXIgbmVlZHMgdG8gdGlsZSB3aXRoICJnYXBzIiwgd2UgY2FuJ3QgdXNl
IHRoZSBvcHRpbWl6ZWQgdGlsaW5nIGNhbGwgaW4gdGhhdCBjYXNlLgogICAgIC8vIEZJWE1FOiBX
ZSBjYW5ub3QgdXNlIENHQ29udGV4dERyYXdUaWxlZEltYWdlIHdpdGggc2NhbGVkIHRpbGVzIG9u
IExlb3BhcmQsIGJlY2F1c2UgaXQgc3VmZmVycyBmcm9tIHJvdW5kaW5nIGVycm9ycy4gIFNub3cg
TGVvcGFyZCBpcyBvay4KLSAgICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0
aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0gICAg
ZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UpOworICAgIEdyYXBoaWNzVW5pdCBz
Y2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9HcmFw
aGljc1VuaXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOworICAgIEdyYXBoaWNzVW5pdCB3ID0gQ0dJ
bWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7CiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAogICAg
IGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpICYmIHNjYWxl
ZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNjYWxlZFRpbGVIZWlnaHQgPT0gdGls
ZVJlY3QuaGVpZ2h0KCkpCiAjZWxzZQogICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGgg
PT0gc2l6ZSgpLmhlaWdodCgpKQogI2VuZGlmCi0gICAgICAgIENHQ29udGV4dERyYXdUaWxlZElt
YWdlKGNvbnRleHQsIEZsb2F0UmVjdChhZGp1c3RlZFgsIGFkanVzdGVkWSwgc2NhbGVkVGlsZVdp
ZHRoLCBzY2FsZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0KCkpOworICAgICAgICBDR0NvbnRl
eHREcmF3VGlsZWRJbWFnZShjb250ZXh0LCBHcmFwaGljc1JlY3QoYWRqdXN0ZWRYLCBhZGp1c3Rl
ZFksIHNjYWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdodCksIHN1YkltYWdlLmdldCgpKTsK
ICAgICBlbHNlIHsKIAogICAgIC8vIE9uIExlb3BhcmQgYW5kIG5ld2VyLCB0aGlzIGNvZGUgbm93
IG9ubHkgcnVucyBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzIHdob3NlIGJ1ZmZlcnMgZG8g
bm90IHlldCBtYXRjaCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBpbWFnZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyAr
MTU1LDcgQEAgaW50IFBERkRvY3VtZW50SW1hZ2U6OnBhZ2VDb3VudCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fZG9jdW1lbnQgPyBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhtX2RvY3VtZW50
KSA6IDA7CiB9CiAKLXZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgUERGRG9jdW1lbnRJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYg
ZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBvcCkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgbV9jdXJyZW50UGFnZSA9
PSAtMSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUERGRG9jdW1lbnRJ
bWFnZV9oCiAjZGVmaW5lIFBERkRvY3VtZW50SW1hZ2VfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCiAKQEAgLTYyLDE1ICs2MiwxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAKICAgICAgICAg
UERGRG9jdW1lbnRJbWFnZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgICAgIAogICAgICAgICB2b2lkIHNl
dEN1cnJlbnRQYWdlKGludCk7CiAgICAgICAgIGludCBwYWdlQ291bnQoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBhZGp1c3RDVE0oR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CiAKICAgICAgICAgQ0dQ
REZEb2N1bWVudFJlZiBtX2RvY3VtZW50OwotICAgICAgICBGbG9hdFJlY3QgbV9tZWRpYUJveDsK
LSAgICAgICAgRmxvYXRSZWN0IG1fY3JvcEJveDsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG1fbWVk
aWFCb3g7CisgICAgICAgIEdyYXBoaWNzUmVjdCBtX2Nyb3BCb3g7CiAgICAgICAgIGZsb2F0IG1f
cm90YXRpb247CiAgICAgICAgIGludCBtX2N1cnJlbnRQYWdlOwogICAgIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTIyLDcgKzEyMiw3
IEBAIHN0YXRpYyBDR011dGFibGVQYXRoUmVmIGNvcHlDR1BhdGhDbG9zaW4KICAgICByZXR1cm4g
cGF0aDsKIH0KIAotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50ICZwb2ludCwg
V2luZFJ1bGUgcnVsZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQ
b2ludCAmcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgaWYgKCFib3VuZGluZ1Jl
Y3QoKS5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEzMyw3ICsx
MzMsNyBAQCBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQgJnBvCiAgICAgcmV0
dXJuIHJldDsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxp
ZXIqIGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBQYXRoOjpz
dHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEFTU0VSVChhcHBsaWVyKTsKIApAQCAtMTUyLDcg
KzE1Miw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAKICAgICBy
ZXR1cm4gaGl0U3VjY2VzczsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXpl
KQogewogICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlKDEsIDAsIDAsIDEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dN
dXRhYmxlUGF0aFJlZiBuZXdQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwpAQCAtMTYxLDEy
ICsxNjEsMTIgQEAgdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaQogICAg
IG1fcGF0aCA9IG5ld1BhdGg7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBj
b25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIENHUGF0aEdldEJvdW5kaW5nQm94KG1fcGF0aCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAorR3Jh
cGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFw
cGxpZXIpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBzY3JhdGNoQ29udGV4
dCgpOwogCkBAIC0xODYsMjcgKzE4NiwyNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rCiAgICAgcmV0dXJuIGJveDsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkKIHsKICAgICBDR1BhdGhNb3ZlVG9Qb2ludChtX3BhdGgsIDAsIHBvaW50Lngo
KSwgcG9pbnQueSgpKTsKIH0KIAotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2lu
dCYgcCkKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAg
ICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobV9wYXRoLCAwLCBwLngoKSwgcC55KCkpOwogfQogCi12
b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9h
dFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50
JiBjcCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBDR1BhdGhBZGRRdWFkQ3VydmVU
b1BvaW50KG1fcGF0aCwgMCwgY3AueCgpLCBjcC55KCksIHAueCgpLCBwLnkoKSk7CiB9CiAKLXZv
aWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZs
b2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVy
Q3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNw
MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQo
bV9wYXRoLCAwLCBjcDEueCgpLCBjcDEueSgpLCBjcDIueCgpLCBjcDIueSgpLCBwLngoKSwgcC55
KCkpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRoOjphZGRBcmNUbyhjb25z
dCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGZsb2F0IHJhZGl1
cykKIHsKICAgICBDR1BhdGhBZGRBcmNUb1BvaW50KG1fcGF0aCwgMCwgcDEueCgpLCBwMS55KCks
IHAyLngoKSwgcDIueSgpLCByYWRpdXMpOwogfQpAQCAtMjE2LDE5ICsyMTYsMTkgQEAgdm9pZCBQ
YXRoOjpjbG9zZVN1YnBhdGgoKQogICAgIENHUGF0aENsb3NlU3VicGF0aChtX3BhdGgpOwogfQog
Ci12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBz
YSwgZmxvYXQgZWEsIGJvb2wgY2xvY2t3aXNlKQordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2EsIGZsb2F0IGVhLCBib29sIGNsb2Nrd2lz
ZSkKIHsKICAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vNTE4OTIzMz4gQ0dQ
YXRoQWRkQXJjIGhhbmdzIG9yIGNyYXNoZXMgd2hlbiBwYXNzZWQgaW5mIGFzIHN0YXJ0IG9yIGVu
ZCBhbmdsZQogICAgIGlmIChpc2Zpbml0ZShzYSkgJiYgaXNmaW5pdGUoZWEpKQogICAgICAgICBD
R1BhdGhBZGRBcmMobV9wYXRoLCAwLCBwLngoKSwgcC55KCksIHIsIHNhLCBlYSwgY2xvY2t3aXNl
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0
aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgQ0dQYXRoQWRkUmVjdCht
X3BhdGgsIDAsIHIpOwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByKQordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAg
ICBDR1BhdGhBZGRFbGxpcHNlSW5SZWN0KG1fcGF0aCwgMCwgcik7CiB9CkBAIC0yNDksNyArMjQ5
LDcgQEAgYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNF
bXB0eSgpOwogfQogICAgIAotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAK
K0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCiB7CiAgICAgcmV0dXJu
IENHUGF0aEdldEN1cnJlbnRQb2ludChtX3BhdGgpOwogfQpAQCAtMjY1LDcgKzI2NSw3IEBAIHN0
cnVjdCBQYXRoQXBwbGllckluZm8gewogc3RhdGljIHZvaWQgQ0dQYXRoQXBwbGllclRvUGF0aEFw
cGxpZXIodm9pZCAqaW5mbywgY29uc3QgQ0dQYXRoRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBQ
YXRoQXBwbGllckluZm8qIHBpbmZvID0gKFBhdGhBcHBsaWVySW5mbyopaW5mbzsKLSAgICBGbG9h
dFBvaW50IHBvaW50c1szXTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1szXTsKICAgICBQYXRo
RWxlbWVudCBwZWxlbWVudDsKICAgICBwZWxlbWVudC50eXBlID0gKFBhdGhFbGVtZW50VHlwZSll
bGVtZW50LT50eXBlOwogICAgIHBlbGVtZW50LnBvaW50cyA9IHBvaW50czsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0
ZXJuQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyB2b2lkIHBh
dHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0
IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKLSAg
ICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJ
bWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOworICAgICAgICBHcmFwaGljc1JlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRm
b3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRm
b3JtSW1hZ2UpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9s
bGVyTGludXguY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAi
VGV4dFJ1bi5oIgogCkBAIC00NTksNyArNDU5LDcgQEAgaW50IENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6b2Zmc2V0Rm9yUG9zaQogICAgIHJldHVybiBiYXNlUG9zaXRpb247CiB9CiAKLUZsb2F0UmVj
dCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pCitHcmFwaGljc1JlY3QgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQogewogICAgIGludCBmcm9tWCA9IC0xLCB0
b1ggPSAtMTsKICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2lj
YWwgb3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9m
IGludGVyZXN0LgpAQCAtNDkzLDkgKzQ5Myw5IEBAIEZsb2F0UmVjdCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OnNlbGVjdGkKICAgICBBU1NFUlQoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKTsKIAog
ICAgIGlmIChmcm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkg
KyBmcm9tWCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdChwb2ludC54KCkgKyBmcm9tWCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwg
aGVpZ2h0KTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgdG9YLCBwb2ludC55
KCksIGZyb21YIC0gdG9YLCBoZWlnaHQpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQu
eCgpICsgdG9YLCBwb2ludC55KCksIGZyb21YIC0gdG9YLCBoZWlnaHQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckxpbnV4LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaAkod29ya2luZyBjb3B5
KQpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRh
KiBmb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxGb250UGxhdGZvcm1EYXRhKj4obV9pdGVtLmZvbnQtPnVzZXJEYXRhKTsgfQogCiAgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uKGludCk7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29u
c3QgRmxvYXRQb2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tICwgaW50IHRvKTsKKyAgICBHcmFw
aGljc1JlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGhlaWdodCwg
aW50IGZyb20gLCBpbnQgdG8pOwogCiBwcml2YXRlOgogICAgIC8vIFJldHVybiB0aGUgd2lkdGgg
KGluIHB4KSBvZiB0aGUgY3VycmVudCBzY3JpcHQgcnVuLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpw
YWludENvbnRlbnRzCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGlsZXItPnByZXBhcmVUb1Vw
ZGF0ZShsYXllclJlY3QsIHRleHR1cmVVcGRhdGVyKCkpOwotICAgIG1fZGlydHlSZWN0ID0gRmxv
YXRSZWN0KCk7CisgICAgbV9kaXJ0eVJlY3QgPSBHcmFwaGljc1JlY3QoKTsKIH0KIAogYm9vbCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENocm9taXVtV2luLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSw3IEBAIGJvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMoY29uc3QgU2tD
YW4KIAogY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7CiBwdWJsaWM6Ci0gICAg
VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFBvaW50Jik7CisgICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAgICAgflRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXIoKTsKIAogcHJvdGVjdGVkOgpAQCAtNzcsNyArNzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
R3JhcGhpY3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogbV9wbGF0Zm9ybUNvbnRleHQ7CiAKLSAgICBGbG9hdFBvaW50IG1fcG9pbnQ7Cisg
ICAgR3JhcGhpY3NQb2ludCBtX3BvaW50OwogCiAgICAgLy8gU2V0IHdoZW4gV2luZG93cyBjYW4g
aGFuZGxlIHRoZSB0eXBlIG9mIGRyYXdpbmcgd2UncmUgZG9pbmcuCiAgICAgYm9vbCBtX3VzZUdE
STsKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIH07CiAKIFRyYW5zcGFyZW5jeUF3YXJlRm9u
dFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQpCiAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQogICAgICwgbV9wbGF0
Zm9ybUNvbnRleHQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCiAgICAgLCBtX3BvaW50KHBv
aW50KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGNsYXNzIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWlu
dGVyIDogcHUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhC
dWZmZXImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGlj
c1BvaW50Jik7CiAgICAgflRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKCk7CiAKICAgICAv
LyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcgb2YgZ2x5cGhzLCBzdGFydGluZyBhdCB8c3RhcnRB
ZHZhbmNlfCB0byB0aGUKQEAgLTIxNyw3ICsyMTcsNyBAQCBUcmFuc3BhcmVuY3lBd2FyZUdseXBo
UGFpbnRlcjo6VHJhbnNwYXJlCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAogICAgIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KQogICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihjb250ZXh0LCBw
b2ludCkKICAgICAsIG1fZm9udChmb250KQogICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZl
cikKQEAgLTI3Niw3ICsyNzYsNyBAQCBib29sIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVy
OjpkcmF3CiAKICAgICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0
aGUgZmlsbCBjb2xvciBhbmQgc2hhZG93IGNvbG9yIAogICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRs
ZSB3aXRob3V0IHNraWEuIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhp
Y3NTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNo
YWRvd0NvbG9yOwogICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTMwMiw3ICsz
MDIsNyBAQCBjbGFzcyBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0UnVuJiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50Jik7CiAgICAgflRy
YW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpOwogCiAgICAgLy8gVW5pc2NpYmUgd2ls
bCBkcmF3IGRpcmVjdGx5IGludG8gb3VyIGJ1ZmZlciwgc28gd2UgbmVlZCB0byBleHBvc2Ugb3Vy
IERDLgpAQCAtMzIyLDcgKzMyMiw3IEBAIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRl
cjo6VHJhbnMKICAgICBjb25zdCBGb250KiBmb250LAogICAgIGNvbnN0IFRleHRSdW4mIHJ1biwK
ICAgICBpbnQgZnJvbSwgaW50IHRvLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcihjb250ZXh0LCBwb2ludCkKICAgICAsIG1fZm9udChmb250KQogICAgICwgbV9ydW4o
cnVuKQpAQCAtMzgwLDcgKzM4MCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNXaW4oR3JhcGhp
Y3NDb250ZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIHsKICAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBo
UGFpbnRlciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20s
IG51bUdseXBocywgcG9pbnQpOwogCiAgICAgLy8gV2UgZHJhdyB0aGUgZ2x5cGhzIGluIGNodW5r
cyB0byBhdm9pZCBoYXZpbmcgdG8gZG8gYSBoZWFwIGFsbG9jYXRpb24gZm9yCkBAIC00NDYsNyAr
NDQ2LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZwogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5
cGhzLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25z
dAogewogICAgIFNrQ29sb3IgY29sb3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gU2tD
b2xvckdldEEoY29sb3IpOwpAQCAtNDU3LDggKzQ1Nyw4IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQqIGcKICAgICBkcmF3R2x5cGhzV2luKGdyYXBoaWNzQ29udGV4dCwg
Zm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOwogfQogCi1GbG9hdFJl
Y3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsCitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHRvKSBjb25zdApAQCAtNDY5LDE2ICs0NjksMTYgQEAg
RmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogCiAgICAgLy8gSWYgdGhl
IHRleHQgaXMgUlRMLCBsZWZ0IHdpbGwgYWN0dWFsbHkgYmUgYWZ0ZXIgcmlnaHQuCiAgICAgaWYg
KGxlZnQgPCByaWdodCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChsZWZ0LCBwb2ludC55KCks
CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QobGVmdCwgcG9pbnQueSgpLAogICAgICAgICAg
ICAgICAgICAgICAgICByaWdodCAtIGxlZnQsIHN0YXRpY19jYXN0PGZsb2F0PihoKSk7CiAKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KHJpZ2h0LCBwb2ludC55KCksCisgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdChyaWdodCwgcG9pbnQueSgpLAogICAgICAgICAgICAgICAgICAgICAgbGVmdCAtIHJpZ2h0
LCBzdGF0aWNfY2FzdDxmbG9hdD4oaCkpOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJv
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bykgY29uc3QKIHsKQEAgLTUwNyw3
ICs1MDcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAKICAg
ICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xv
ciBhbmQgc2hhZG93IGNvbG9yIAogICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNr
aWEuIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRv
d09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwog
ICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lk
IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgc3RhdGUuZHJhdyhncmFw
aGljc0NvbnRleHQsIGhkYywgbHJvdW5kZihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAt
IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7CiB9CiAKLXZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJr
ICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAv
KiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAq
LywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAv
KiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udExpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAK
ICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oIgotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lh
LmgiCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdFRleHRSZW5kZXJNb2RlKFNr
UGFpbnQKIAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAotICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdCB7CisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0IHsKICAgICBTa0FT
U0VSVChzaXplb2YoR2x5cGhCdWZmZXJHbHlwaCkgPT0gc2l6ZW9mKHVpbnQxNl90KSk7IC8vIGNv
bXBpbGUtdGltZSBhc3NlcnQKIAogICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKQEAgLTE3Miw3ICsxNzIsNyBAQCBzdGF0aWMgdm9p
ZCBzZXR1cEZvclRleHRQYWludGluZyhTa1BhaW50CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKCFydW4ubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgfQogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBj
b25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywg
Y29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8g
Ki8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNv
bnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgR3JhcGhpY3NQb2ludCYgLyogcG9p
bnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KQEAgLTI0NSw4ICsyNDUsOCBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4CiB9CiAKIC8vIFJldHVybiB0aGUgcmVjdGFuZ2xlIGZvciBzZWxl
Y3RpbmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRoZSBUZXh0UnVuLgotRmxv
YXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBp
bnQgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250
cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhw
YW5zaW9uKCksIHRoaXMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKQEAgLTE4MCwxMyArMTgwLDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjpyZW1vdmVGcm9tUGEKICAgICBsYXllckZvclBhcmVudCgpLT5yZW1vdmVGcm9tUGFyZW50KCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbihj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbihwb2ludCk7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2lu
dCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludChjb25zdCBHcmFw
aGljc1BvaW50M0QmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQog
ICAgICAgICByZXR1cm47CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnNldEFuY2hvclBvaQogICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6
ZSkKIHsKICAgICBpZiAoc2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTMzMiw3
ICszMzIsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwCiAgICAg
ICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgbV9s
YXllci0+c2V0TmVlZHNEaXNwbGF5KHJlY3QpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDaGlsZEwKIHZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKIHsKICAgICAvLyBQb3NpdGlvbiBpcyBvZmZzZXQg
b24gdGhlIGxheWVyIGJ5IHRoZSBsYXllciBhbmNob3IgcG9pbnQuCi0gICAgRmxvYXRQb2ludCBs
YXllclBvc2l0aW9uKG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUu
d2lkdGgoKSwKKyAgICBHcmFwaGljc1BvaW50IGxheWVyUG9zaXRpb24obV9wb3NpdGlvbi54KCkg
KyBtX2FuY2hvclBvaW50LngoKSAqIG1fc2l6ZS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3Bvc2l0aW9uLnkoKSArIG1fYW5jaG9yUG9pbnQueSgpICogbV9zaXplLmhl
aWdodCgpKTsKIAogICAgIHByaW1hcnlMYXllcigpLT5zZXRQb3NpdGlvbihsYXllclBvc2l0aW9u
KTsKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
TGF5ZXJTCiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsKICAgICAgICAgbV90cmFuc2Zvcm1M
YXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgICAgIC8vIFRoZSBhbmNob3Igb2YgdGhl
IGNvbnRlbnRzIGxheWVyIGlzIGFsd2F5cyBhdCAwLjUsIDAuNSwgc28gdGhlIHBvc2l0aW9uIGlz
IGNlbnRlci1yZWxhdGl2ZS4KLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludChtX3NpemUu
d2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOworICAgICAgICBHcmFwaGljc1BvaW50
IGNlbnRlclBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMik7CiAg
ICAgICAgIG1fbGF5ZXItPnNldFBvc2l0aW9uKGNlbnRlclBvaW50KTsKICAgICB9CiAKQEAgLTUy
OSw3ICs1MjksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJTCiAK
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVBbmNob3JQb2ludCgpCiB7Ci0gICAg
cHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQb2ludC54
KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7CisgICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBv
aW50KEdyYXBoaWNzUG9pbnQobV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7
CiAgICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50WihtX2FuY2hvclBvaW50LnooKSk7
CiAKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CkBAIC01NzQsOSArNTc0LDkgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUAogICAgICAgICB1cGRhdGVUcmFuc2Zv
cm0oKTsKICAgICAgICAgdXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKTsKIAotICAgICAgICBtX2xh
eWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXpl
LmhlaWdodCgpIC8gMi4wZikpOworICAgICAgICBtX2xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGlj
c1BvaW50KG1fc2l6ZS53aWR0aCgpIC8gMi4wZiwgbV9zaXplLmhlaWdodCgpIC8gMi4wZikpOwog
Ci0gICAgICAgIG1fbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41Zikp
OworICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50KDAuNWYsIDAu
NWYpKTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIG1f
bGF5ZXItPnNldFRyYW5zZm9ybShpZGVudGl0eSk7CiAgICAgICAgIApAQCAtNjQxLDcgKzY0MSw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW4KICAgICBpZiAoIW1f
Y29udGVudHNMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZW50c0xheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3Qu
eSgpKSk7CisgICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KG1f
Y29udGVudHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKSk7CiAgICAgbV9jb250ZW50c0xh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2NvbnRlbnRz
UmVjdC5oZWlnaHQoKSkpOwogfQogCkBAIC02NTgsNyArNjU4LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldHVwQ29udGVudAogICAgIGlmIChjb250ZW50c0xheWVyKSB7CiAgICAg
ICAgIG1fY29udGVudHNMYXllciA9IGNvbnRlbnRzTGF5ZXI7CiAKLSAgICAgICAgbV9jb250ZW50
c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKKyAgICAgICAgbV9jb250
ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChHcmFwaGljc1BvaW50KDAsIDApKTsKIAogICAgICAg
ICAvLyBJbnNlcnQgdGhlIGNvbnRlbnQgbGF5ZXIgZmlyc3QuIFZpZGVvIGVsZW1lbnRzIHJlcXVp
cmUgdGhpcywgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAgLy8gc2hhZG93IGNvbnRlbnQgdGhh
dCBtdXN0IGRpc3BsYXkgaW4gZnJvbnQgb2YgdGhlIHZpZGVvLgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3Jh
cGhpY3NMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDkgKzU2LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUZyb21QYXJlbnQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAg
dmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogCiAgICAgdmlydHVh
bCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCkBAIC04
MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDE4ICsxOTAs
MTggQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3VuZHMoY29uc3QgSW50UwogICAgIG1fYm91
bmRzID0gc2l6ZTsKIAogICAgIGlmIChmaXJzdFJlc2l6ZSkKLSAgICAgICAgc2V0TmVlZHNEaXNw
bGF5KEZsb2F0UmVjdCgwLCAwLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkp
OworICAgICAgICBzZXROZWVkc0Rpc3BsYXkoR3JhcGhpY3NSZWN0KDAsIDAsIGJvdW5kcygpLndp
ZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CiAgICAgZWxzZQogICAgICAgICBzZXROZWVkc0Nv
bW1pdCgpOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0
JiByZWN0KQogewogICAgIGlmIChyZWN0ID09IG1fZnJhbWUpCiAgICAgICByZXR1cm47CiAKICAg
ICBtX2ZyYW1lID0gcmVjdDsKLSAgICBzZXROZWVkc0Rpc3BsYXkoRmxvYXRSZWN0KDAsIDAsIGJv
dW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpKSk7CisgICAgc2V0TmVlZHNEaXNwbGF5
KEdyYXBoaWNzUmVjdCgwLCAwLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSkp
OwogfQogCiBjb25zdCBMYXllckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5ZXIoKSBj
b25zdApAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmFtZShjb25z
dCBTdHJpbmcKICAgICBtX25hbWUgPSBuYW1lOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnNl
dE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEdyYXBoaWNzUmVjdCYgZGlydHlSZWN0KQogewog
ICAgIC8vIFNpbXBseSBtYXJrIHRoZSBjb250ZW50cyBhcyBkaXJ0eS4gRm9yIG5vbi1yb290IGxh
eWVycywgdGhlIGNhbGwgdG8KICAgICAvLyBzZXROZWVkc0NvbW1pdCB3aWxsIHNjaGVkdWxlIGEg
ZnJlc2ggY29tcG9zaXRpbmcgcGFzcy4KQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheShjb25zCiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVl
ZHNEaXNwbGF5KCkKIHsKLSAgICBtX2RpcnR5UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkp
OworICAgIG1fZGlydHlSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgbV9k
aXJ0eVJlY3Quc2V0U2l6ZShib3VuZHMoKSk7CiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsK
ICAgICBzZXROZWVkc0NvbW1pdCgpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIAogdm9pZCBMYXllckNocm9taXVtOjpyZXNldE5lZWRz
RGlzcGxheSgpCiB7Ci0gICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBtX2RpcnR5
UmVjdCA9IEdyYXBoaWNzUmVjdCgpOwogICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNzUsOCArNzUsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4mKTsKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQogCi0gICAgdm9pZCBzZXRBbmNo
b3JQb2ludChjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0g
YW5jaG9yUG9pbnQ7IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBGbG9hdFBvaW50IGFuY2hvclBv
aW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2ludDsgfQorICAgIHZvaWQgc2V0QW5jaG9y
UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQb2ludCA9
IGFuY2hvclBvaW50OyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgR3JhcGhpY3NQb2ludCBhbmNo
b3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnQ7IH0KIAogICAgIHZvaWQgc2V0
QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hvclBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hv
clBvaW50Wjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGZsb2F0IGFuY2hvclBvaW50WigpIGNv
bnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnRaOyB9CkBAIC05MSw4ICs5MSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENsZWFyc0NvbnRleHQoYm9vbCBjbGVhcnMpIHsgbV9jbGVhcnNDb250ZXh0
ID0gY2xlYXJzOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBjbGVhcnNDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGVhcnNDb250ZXh0OyB9CiAKLSAgICB2b2lkIHNldEZyYW1lKGNv
bnN0IEZsb2F0UmVjdCYpOwotICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWU7IH0KKyAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIEdy
YXBoaWNzUmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogICAgIHZvaWQg
c2V0SGlkZGVuKGJvb2wgaGlkZGVuKSB7IG1faGlkZGVuID0gaGlkZGVuOyBzZXROZWVkc0NvbW1p
dCgpOyB9CiAgICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuOyB9CkBA
IC0xMDcsMTAgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgQ0NMYXllckltcGwqIG1hc2tEcmF3TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllciA/IG1fbWFza0xheWVyLT5jY0xheWVySW1w
bCgpIDogMDsgfQogICAgIExheWVyQ2hyb21pdW0qIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFza0xheWVyLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgR3Jh
cGhpY3NSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KSB7
fQotICAgIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXJ0
eVJlY3Q7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgR3JhcGhpY3NS
ZWN0JiBkaXJ0eVJlY3QpIHt9CisgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBkaXJ0eVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2RpcnR5UmVjdDsgfQogICAgIHZvaWQgcmVzZXROZWVkc0Rpc3BsYXko
KTsKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoYm9vbCBuZWVkc0Rp
c3BsYXkpIHsgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5lZWRzRGlzcGxheTsgfQpA
QCAtMTIxLDggKzEyMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYXF1ZShib29sIG9wYXF1
ZSkgeyBtX29wYXF1ZSA9IG9wYXF1ZTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgb3Bh
cXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIAotICAgIHZvaWQgc2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0
TmVlZHNDb21taXQoKTsgfQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50
JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247ICBzZXROZWVkc0NvbW1pdCgpOyB9
CisgICAgR3JhcGhpY3NQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247
IH0KIAogICAgIHZvaWQgc2V0WlBvc2l0aW9uKGZsb2F0IHpQb3NpdGlvbikgeyBtX3pQb3NpdGlv
biA9IHpQb3NpdGlvbjsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGZsb2F0IHpQb3NpdGlvbigp
IGNvbnN0IHsgIHJldHVybiBtX3pQb3NpdGlvbjsgfQpAQCAtMjA1LDcgKzIwNSw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gIkxheWVyQ2hyb21pdW0iOyB9CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0
IG1fZGlydHlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1f
Y29udGVudHNEaXJ0eTsKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX21hc2tMYXllcjsK
QEAgLTI1Miw4ICsyNTIsOCBAQCBwcml2YXRlOgogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAg
ICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKLSAg
ICBGbG9hdFBvaW50IG1fcG9zaXRpb247Ci0gICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50Owor
ICAgIEdyYXBoaWNzUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IG1fYW5jaG9y
UG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9kZWJ1Z0Jv
cmRlckNvbG9yOwogICAgIGZsb2F0IG1fZGVidWdCb3JkZXJXaWR0aDsKQEAgLTI3MSw3ICsyNzEs
NyBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CiAKLSAgICBGbG9hdFJl
Y3QgbV9mcmFtZTsKKyAgICBHcmFwaGljc1JlY3QgbV9mcmFtZTsKIAogICAgIC8vIFJlcGxpY2Eg
bGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
cmVwbGljYUxheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MCw3
ICszOTAsNyBAQCBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zCiAgICAg
Ly8gYXhpcy1hbGlnbmVkKSwgYnV0IGlzIGEgcmVhc29uYWJsZSBmaWx0ZXIgb24gdGhlIHNwYWNl
IHRvIGNvbnNpZGVyLgogICAgIC8vIE5vbi1pbnZlcnRpYmxlIHRyYW5zZm9ybXMgd2lsbCBjcmVh
dGUgYW4gZW1wdHkgcmVjdCBoZXJlLgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1
cmZhY2VUb0xheWVyID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBJbnRSZWN0IGxheWVyUmVj
dCA9IHN1cmZhY2VUb0xheWVyLnByb2plY3RRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobWluaW1h
bFN1cmZhY2VSZWN0KSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBsYXll
clJlY3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChGbG9hdFF1YWQoR3JhcGhpY3NSZWN0
KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIGxheWVy
UmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwogICAgIHJldHVybiBsYXllclJlY3Q7CiB9
CkBAIC02NjcsMTIgKzY2NywxMiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXll
clZpc2liCiAgICAgcmVuZGVyTWF0cml4LnNjYWxlM2QobGF5ZXItPmJvdW5kcygpLndpZHRoKCks
IGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgMSk7CiAgICAgcmVuZGVyTWF0cml4ID0gbV9wcm9q
ZWN0aW9uTWF0cml4ICogcmVuZGVyTWF0cml4OwogCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgt
MC41LCAtMC41LCAxLCAxKTsKLSAgICBGbG9hdFJlY3QgbWFwcGVkUmVjdCA9IHJlbmRlck1hdHJp
eC5tYXBSZWN0KGxheWVyUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGxheWVyUmVjdCgtMC41LCAt
MC41LCAxLCAxKTsKKyAgICBHcmFwaGljc1JlY3QgbWFwcGVkUmVjdCA9IHJlbmRlck1hdHJpeC5t
YXBSZWN0KGxheWVyUmVjdCk7CiAKICAgICAvLyBUaGUgbGF5ZXIgaXMgdmlzaWJsZSBpZiBpdCBp
bnRlcnNlY3RzIGFueSBwYXJ0IG9mIGEgcmVjdGFuZ2xlIHdob3NlIG9yaWdpbgogICAgIC8vIGlz
IGF0ICgtMSwgLTEpIGFuZCBzaXplIGlzIDJ4Mi4KLSAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRl
cnNlY3RzKEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKKyAgICByZXR1cm4gbWFwcGVkUmVjdC5p
bnRlcnNlY3RzKEdyYXBoaWNzUmVjdCgtMSwgLTEsIDIsIDIpKTsKIH0KIAogLy8gUmVjdXJzaXZl
bHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNv
bXB1dGVzIGFsbCB0aGUKQEAgLTY5OCw4ICs2OTgsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4
IGNvbXB1dGVkIGFib3ZlCiAgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQg
KHRvIHNjYWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQogICAgIEludFNpemUgYm91bmRzID0gbGF5
ZXItPmJvdW5kcygpOwotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9y
UG9pbnQoKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7Cisg
ICAgR3JhcGhpY3NQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOworICAg
IEdyYXBoaWNzUG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKIAogICAgIC8vIE9m
ZnNldCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAg
ICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMu
d2lkdGgoKTsKQEAgLTcxNiw3ICs3MTYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUHJvcGVyCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0g
PSBwYXJlbnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9y
bS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBsYXllclJl
Y3QoLTAuNSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygp
LmhlaWdodCgpLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdo
dCgpKTsKKyAgICBHcmFwaGljc1JlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCku
d2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygp
LndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CiAgICAgSW50UmVjdCB0cmFuc2Zv
cm1lZExheWVyUmVjdDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2UgdGhlIHdyb25n
IHBsYWNlIHRvIHNldCB0aGlzCkBAIC04NzYsMTAgKzg3NiwxMCBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgbGF5ZXIgIT0gbV9yb290Q0NMYXllckltcGwuZ2V0KCkpIHsKICAgICAgICAgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRl
bnRSZWN0KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZh
Y2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgc3VyZmFjZUNl
bnRlciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAKICAgICAgICAgLy8g
UmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3Mgdmlz
aWJsZS4KLSAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmc7CisgICAg
ICAgIEdyYXBoaWNzU2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOwogCiAgICAgICAgIC8v
IERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBz
aG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xpcHBlZC4KQEAgLTg4OCw3ICs4ODgsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVyCiAgICAgICAgICAgICAgICAgSW50
UmVjdCBzdXJmYWNlU2Npc3NvclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlUmVjdChyZW5kZXJTdXJm
YWNlLT5tX3NjaXNzb3JSZWN0LCByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LCByZW5kZXJT
dXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybSk7CiAgICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSByZW5k
ZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOworICAgICAgICAgICAgR3JhcGhpY3NQb2lu
dCBjbGlwcGVkU3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVy
KCk7CiAgICAgICAgICAgICBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nID0gY2xpcHBlZFN1cmZh
Y2VDZW50ZXIgLSBzdXJmYWNlQ2VudGVyOwogICAgICAgICB9CiAKQEAgLTEwNjUsMTMgKzEwNjUs
MTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQwogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkRHJhd01hdHJpeCA9IChsYXllci0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgp
Lm11bHRpcGx5KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpIDogbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7CiAgICAgCiAgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgewotICAgICAgICBGbG9h
dFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRz
KCkpKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGxheWVyUmVjdChHcmFwaGljc1BvaW50KDAsIDAp
LCBHcmFwaGljc1NpemUobGF5ZXItPmJvdW5kcygpKSk7CiAgICAgICAgIEZsb2F0UXVhZCBtYXBw
ZWRMYXllciA9IGNvbWJpbmVkRHJhd01hdHJpeC5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3Qp
KTsKLSAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0g
bWFwcGVkTGF5ZXIucDEoKTsKLSAgICAgICAgRmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVk
TGF5ZXIucDQoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB4QXhp
cyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOwotICAg
ICAgICBGbG9hdFBvaW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIu
aGVpZ2h0KCksIDApOwotICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5
QXhpcyk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBob3Jpem9udGFsRGlyID0gbWFwcGVkTGF5ZXIu
cDIoKSAtIG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSB2ZXJ0aWNhbERp
ciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgICAgICBHcmFwaGlj
c1BvaW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdo
dCgpLCAwKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRo
KCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHpB
eGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOwogICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXR5cGVkZWYgRmxvYXRQb2ludDNEIEVkZ2U7Cit0eXBlZGVmIEdyYXBoaWNzUG9pbnQzRCBFZGdl
OwogCiBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpj
cmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXpl
JiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVyKQogewpAQCAtNDI5LDE4ICs0Mjks
MTggQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udAogCiBzdGF0aWMg
Ym9vbCBpc0NDVyhjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgRmxvYXRQb2ludCB2MSA9
IEZsb2F0UG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCisgICAgR3JhcGhpY3NQ
b2ludCB2MSA9IEdyYXBoaWNzUG9pbnQocXVhZC5wMigpLngoKSAtIHF1YWQucDEoKS54KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC5wMigpLnkoKSAtIHF1YWQucDEoKS55
KCkpOwotICAgIEZsb2F0UG9pbnQgdjIgPSBGbG9hdFBvaW50KHF1YWQucDMoKS54KCkgLSBxdWFk
LnAyKCkueCgpLAorICAgIEdyYXBoaWNzUG9pbnQgdjIgPSBHcmFwaGljc1BvaW50KHF1YWQucDMo
KS54KCkgLSBxdWFkLnAyKCkueCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1
YWQucDMoKS55KCkgLSBxdWFkLnAyKCkueSgpKTsKICAgICByZXR1cm4gKHYxLngoKSAqIHYyLnko
KSAtIHYxLnkoKSAqIHYyLngoKSkgPCAwOwogfQogCi1zdGF0aWMgRWRnZSBjb21wdXRlRWRnZShj
b25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFBvaW50JiBxLCBmbG9hdCBzaWduKQorc3Rh
dGljIEVkZ2UgY29tcHV0ZUVkZ2UoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcSwgZmxvYXQgc2lnbikKIHsKICAgICBBU1NFUlQocCAhPSBxKTsKIAotICAgIEZs
b2F0UG9pbnQgdGFuZ2VudChwLnkoKSAtIHEueSgpLCBxLngoKSAtIHAueCgpKTsKKyAgICBHcmFw
aGljc1BvaW50IHRhbmdlbnQocC55KCkgLSBxLnkoKSwgcS54KCkgLSBwLngoKSk7CiAgICAgZmxv
YXQgc2NhbGUgPSBzaWduIC8gdGFuZ2VudC5sZW5ndGgoKTsKICAgICBmbG9hdCBjcm9zczIgPSBw
LngoKSAqIHEueSgpIC0gcS54KCkgKiBwLnkoKTsKIApAQCAtNDQ5LDkgKzQ0OSw5IEBAIHN0YXRp
YyBFZGdlIGNvbXB1dGVFZGdlKGNvbnN0IEZsb2F0UG9pbnQKICAgICAgICAgICAgICAgICBjcm9z
czIgKiBzY2FsZSk7CiB9CiAKLXN0YXRpYyBGbG9hdFBvaW50IGludGVyc2VjdChjb25zdCBFZGdl
JiBhLCBjb25zdCBFZGdlJiBiKQorc3RhdGljIEdyYXBoaWNzUG9pbnQgaW50ZXJzZWN0KGNvbnN0
IEVkZ2UmIGEsIGNvbnN0IEVkZ2UmIGIpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoCisgICAg
cmV0dXJuIEdyYXBoaWNzUG9pbnQoCiAgICAgICAgIChhLnkoKSAqIGIueigpIC0gYi55KCkgKiBh
LnooKSkgLyAoYS54KCkgKiBiLnkoKSAtIGIueCgpICogYS55KCkpLAogICAgICAgICAoYS54KCkg
KiBiLnooKSAtIGIueCgpICogYS56KCkpIC8gKGIueCgpICogYS55KCkgLSBhLngoKSAqIGIueSgp
KSk7CiB9CkBAIC01MTgsOCArNTE4LDggQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXdU
aWxlcyhjb25zdAogICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IG1fdGlsaW5nRGF0YS50
aWxlQm91bmRzKG1fdGlsaW5nRGF0YS50aWxlSW5kZXgoMCwgaikpOwogICAgICAgICAgICAgdGls
ZVJlY3QubW92ZShtX2xheWVyUG9zaXRpb24ueCgpLCBtX2xheWVyUG9zaXRpb24ueSgpKTsKIAot
ICAgICAgICAgICAgRmxvYXRQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFko
KSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHAyKHRpbGVSZWN0LngoKSwgdGlsZVJlY3QubWF4
WSgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcDEodGlsZVJlY3QubWF4WCgpLCB0aWxl
UmVjdC5tYXhZKCkpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwMih0aWxlUmVjdC54KCks
IHRpbGVSZWN0Lm1heFkoKSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBwb2ludHMgdG8gZGV2aWNl
IHNwYWNlLgogICAgICAgICAgICAgcDEgPSBtYXRyaXgubWFwUG9pbnQocDEpOwpAQCAtNTYyLDgg
KzU2Miw4IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3VGlsZXMoY29uc3QKIAogICAg
ICAgICAgICAgRWRnZSBlZGdlWCA9IHJpZ2h0RWRnZTsKICAgICAgICAgICAgIGlmIChpIDwgKG1f
dGlsaW5nRGF0YS5udW1UaWxlc1goKSAtIDEpKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRQb2lu
dCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7Ci0gICAgICAgICAgICAgICAgRmxv
YXRQb2ludCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0Lm1heFkoKSk7CisgICAgICAgICAg
ICAgICAgR3JhcGhpY3NQb2ludCBwMSh0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0LnkoKSk7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwMih0aWxlUmVjdC5tYXhYKCksIHRpbGVSZWN0
Lm1heFkoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBNYXAgcG9pbnRzIHRvIGRldmljZSBzcGFj
ZS4KICAgICAgICAgICAgICAgICBwMSA9IG1hdHJpeC5tYXBQb2ludChwMSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDExIEBAIExheWVyUmVuZGVyZXJD
aHJvbWl1bSogUmVuZGVyU3VyZmFjZUNocm8KICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bGF5
ZXJSZW5kZXJlcigpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3
YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW06OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBsb2NhbENv
bnRlbnRSZWN0KC0wLjUgKiBtX2NvbnRlbnRSZWN0LndpZHRoKCksIC0wLjUgKiBtX2NvbnRlbnRS
ZWN0LmhlaWdodCgpLAorICAgIEdyYXBoaWNzUmVjdCBsb2NhbENvbnRlbnRSZWN0KC0wLjUgKiBt
X2NvbnRlbnRSZWN0LndpZHRoKCksIC0wLjUgKiBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250
ZW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBt
X2RyYXdUcmFuc2Zvcm0ubWFwUmVjdChsb2NhbENvbnRlbnRSZWN0KTsKKyAgICBHcmFwaGljc1Jl
Y3QgZHJhd2FibGVDb250ZW50UmVjdCA9IG1fZHJhd1RyYW5zZm9ybS5tYXBSZWN0KGxvY2FsQ29u
dGVudFJlY3QpOwogICAgIGlmIChtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKICAgICAg
ICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShtX3JlcGxpY2FEcmF3VHJhbnNmb3JtLm1hcFJl
Y3QobG9jYWxDb250ZW50UmVjdCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2hhZGVy
Q2hyb21pdW0uaCIKQEAgLTU4LDExICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG5hbWUo
KSBjb25zdDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBj
b25zdDsKIAotICAgIEZsb2F0UG9pbnQgY29udGVudFJlY3RDZW50ZXIoKSBjb25zdCB7IHJldHVy
biBGbG9hdFJlY3QobV9jb250ZW50UmVjdCkuY2VudGVyKCk7IH0KKyAgICBHcmFwaGljc1BvaW50
IGNvbnRlbnRSZWN0Q2VudGVyKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0KG1fY29udGVu
dFJlY3QpLmNlbnRlcigpOyB9CiAgICAgSW50UmVjdCBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudFJlY3Q7IH0KIAogICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBlbmNs
b3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBpbmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCi0gICAgRmxv
YXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3QgZHJh
d2FibGVDb250ZW50UmVjdCgpIGNvbnN0OwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJh
d1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNo
cm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVG
b250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJG
b250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCkBAIC0xNjksOSArMTY5LDkgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0
Y2goKQogICAgIFJlbGVhc2VEQygwLCBkYyk7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0
YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBmbG9h
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxl
Rm9udERhdGFMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAJKHJldmlzaW9uIDkxMDM0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9u
dERhdGFMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiVkRNWFBhcnNlci5oIgpAQCAtMjEy
LDkgKzIxMiw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gcGxhdGZvcm1EYXRhKCkuaXNGaXhlZFBpdGNoKCk7CiB9CiAK
LUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlw
aChHbHlwaCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdy
YXBoaWNzUmVjdCgpOwogfQogICAgIAogZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjksNyArMTI5LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
bwogICAgIGlmIChmcmFtZS0+c3VyZmFjZVR5cGUoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OlR5
cGVUZXh0dXJlKSB7CiAgICAgICAgIHJlbGVhc2VDdXJyZW50RnJhbWUoKTsKICAgICAgICAgc2F2
ZUN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxvYXRT
aXplKCkpOworICAgICAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEdyYXBoaWNzU2l6ZSgpKTsKICAg
ICAgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xNTEsNyArMTUxLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
bwogICAgICAgICB1cGRhdGVUZXh0dXJlKGNvbnRleHQsIHRleHR1cmUuaWQsIHRleHR1cmUuc2l6
ZSwgdGV4dHVyZUZvcm1hdCwgZnJhbWUtPmRhdGEocGxhbmUpKTsKICAgICB9CiAKLSAgICBtX2Rp
cnR5UmVjdC5zZXRTaXplKEZsb2F0U2l6ZSgpKTsKKyAgICBtX2RpcnR5UmVjdC5zZXRTaXplKEdy
YXBoaWNzU2l6ZSgpKTsKICAgICBtX2NvbnRlbnRzRGlydHkgPSBmYWxzZTsKIAogICAgIG1fcHJv
dmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRz
VXBEaXNwbGF5LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRl
bnRzKEcKIAogICAgIGlmIChtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSkgewogICAgICAgICBjdHgt
PnNldEZpbGxDb2xvcihDb2xvcigwLCAwLCAwLCAxOTIpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
LSAgICAgICAgY3R4LT5maWxsUmVjdChGbG9hdFJlY3QoMCwgMCwgaHVkU2l6ZS53aWR0aCgpLCBo
dWRTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGN0eC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDAs
IDAsIGh1ZFNpemUud2lkdGgoKSwgaHVkU2l6ZS5oZWlnaHQoKSkpOwogICAgIH0KIAogICAgIGlu
dCBmcHNDb3VudGVySGVpZ2h0ID0gbV9tZWRpdW1Gb250LT5mb250TWV0cmljcygpLmZsb2F0SGVp
Z2h0KCkgKyAyOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJh
d0ZQU0NvdW50ZXIoR3IKIAogICAgIC8vIERyYXcgYmFja2dyb3VuZC4KICAgICBjdHgtPnNldEZp
bGxDb2xvcihDb2xvcigwLCAwLCAwLCAyNTUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBj
dHgtPmZpbGxSZWN0KEZsb2F0UmVjdCgyLCB0b3AsIHRleHRXaWR0aCArIGdyYXBoV2lkdGgsIGhl
aWdodCkpOworICAgIGN0eC0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KDIsIHRvcCwgdGV4dFdpZHRo
ICsgZ3JhcGhXaWR0aCwgaGVpZ2h0KSk7CiAKICAgICAvLyBEcmF3IEZQUyB0ZXh0LgogICAgIGlm
IChtX2ZpbHRlcmVkRnJhbWVUaW1lKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBA
IGNvbnN0IEludFJlY3QgQ0NMYXllckltcGw6OmdldERyYXdSZWN0KCkKIHsKICAgICAvLyBGb3Jt
IHRoZSBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIHRvIG1hcCB0aGUgY29ybmVycyBvZiB0aGUg
bGF5ZXIncwogICAgIC8vIGJvdW5kcyBpbnRvIHRoZSB2aWV3IHNwYWNlLgotICAgIEZsb2F0UmVj
dCBsYXllclJlY3QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5oZWln
aHQoKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNz
UmVjdCBsYXllclJlY3QoLTAuNSAqIGJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBib3VuZHMoKS5o
ZWlnaHQoKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCkpOwogICAgIEludFJl
Y3QgbWFwcGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3Qo
bGF5ZXJSZWN0KSk7CiAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2RlZmluZSBDQ0xheWVySW1wbF9oCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKQEAgLTgzLDggKzgzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVh
bnVwUmVzb3VyY2VzKCk7CiAKLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgfQotICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JQb2lu
dDsgfQorICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgYW5jaG9y
UG9pbnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyB9CisgICAgY29uc3QgR3JhcGhp
Y3NQb2ludCYgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CiAK
ICAgICB2b2lkIHNldEFuY2hvclBvaW50WihmbG9hdCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQ
b2ludFogPSBhbmNob3JQb2ludFo7IH0KICAgICBmbG9hdCBhbmNob3JQb2ludFooKSBjb25zdCB7
IHJldHVybiBtX2FuY2hvclBvaW50WjsgfQpAQCAtOTUsOCArOTUsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9vcGFjaXR5ID0gb3BhY2l0eTsgfQog
ICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9
IHBvc2l0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1Bv
aW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAg
IHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkgeyBtX3ByZXNlcnZlczNEID0g
cHJlc2VydmVzM0Q7IH0KICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1cm4gbV9w
cmVzZXJ2ZXMzRDsgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGF5
ZXJJZDsKIAogICAgIC8vIFByb3BlcnRpZXMgc3luY2hyb25pemVkIGZyb20gdGhlIGFzc29jaWF0
ZWQgTGF5ZXJDaHJvbWl1bS4KLSAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCBtX2FuY2hvclBvaW50OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwogICAg
IEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRCb3VuZHM7CkBAIC0xOTYs
NyArMTk2LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9tYXNrc1RvQm91bmRzOwogICAgIGZs
b2F0IG1fb3BhY2l0eTsKLSAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQ
b2ludCBtX3Bvc2l0aW9uOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fdHJhbnNmb3JtOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclNvcnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQCBzdGF0
aWMgV1RGTG9nQ2hhbm5lbCBMb2dDQ0xheWVyU29ydGVyID0gCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotc3RhdGljIGJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjKQorc3RhdGljIGJvb2wgcG9pbnRJ
blRyaWFuZ2xlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBjKQogewogICAgIC8vIEFsZ29yaXRobSBmcm9tIGh0dHA6
Ly93d3cuYmxhY2twYXduLmNvbS90ZXh0cy9wb2ludGlucG9seS9kZWZhdWx0Lmh0bWwKICAgICBm
bG9hdCB4MCA9IGMueCgpIC0gYS54KCk7CkBAIC03NSwxOCArNzUsMTggQEAgc3RhdGljIGJvb2wg
cG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UAogICAgIHJldHVybiAodSA+IDAuMGYpICYmICh2
ID4gMC4wZikgJiYgKHUgKyB2IDwgMS4wZik7CiB9CiAKLWlubGluZSBzdGF0aWMgZmxvYXQgcGVy
cFByb2R1Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBjb25zdCBGbG9hdFNpemUmIHYpCitpbmxpbmUg
c3RhdGljIGZsb2F0IHBlcnBQcm9kdWN0KGNvbnN0IEdyYXBoaWNzU2l6ZSYgdSwgY29uc3QgR3Jh
cGhpY3NTaXplJiB2KQogewogICAgIHJldHVybiB1LndpZHRoKCkgKiB2LmhlaWdodCgpIC0gdS5o
ZWlnaHQoKSAqIHYud2lkdGgoKTsKIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBpbm5lclByb2R1
Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBjb25zdCBGbG9hdFNpemUmIHYpCitpbmxpbmUgc3RhdGlj
IGZsb2F0IGlubmVyUHJvZHVjdChjb25zdCBHcmFwaGljc1NpemUmIHUsIGNvbnN0IEdyYXBoaWNz
U2l6ZSYgdikKIHsKICAgICByZXR1cm4gdS53aWR0aCgpICogdi53aWR0aCgpICsgdS5oZWlnaHQo
KSAqIHYuaGVpZ2h0KCk7CiB9CiAKIAotaW5saW5lIHN0YXRpYyBib29sIHBvaW50SW5Db2xpbmVh
ckVkZ2UoY29uc3QgRmxvYXRQb2ludCYgcCwgY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxv
YXRQb2ludCYgYikKK2lubGluZSBzdGF0aWMgYm9vbCBwb2ludEluQ29saW5lYXJFZGdlKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGEsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGIpCiB7CiAgICAgLy8gaWYgYWIgaXMgbm90IHZlcnRpY2FsLgogICAgIGlmIChhLngo
KSAhPSBiLngoKSkKQEAgLTk3LDExICs5NywxMSBAQCBpbmxpbmUgc3RhdGljIGJvb2wgcG9pbnRJ
bkNvbGluZWFyRWRnZShjCiAKIC8vIFRlc3RzIGlmIHR3byBlZGdlcyBkZWZpbmVkIGJ5IHRoZWly
IGVuZHBvaW50cyAoYSxiKSBhbmQgKGMsZCkgaW50ZXJzZWN0LiBSZXR1cm5zIHRydWUgYW5kIHRo
ZQogLy8gcG9pbnQgb2YgaW50ZXJzZWN0aW9uIGlmIHRoZXkgZG8gYW5kIGZhbHNlIG90aGVyd2lz
ZS4KLXN0YXRpYyBib29sIGVkZ2VFZGdlVGVzdChjb25zdCBGbG9hdFBvaW50JiBhLCBjb25zdCBG
bG9hdFBvaW50JiBiLCBjb25zdCBGbG9hdFBvaW50JiBjLCBjb25zdCBGbG9hdFBvaW50JiBkLCBG
bG9hdFBvaW50JiByKQorc3RhdGljIGJvb2wgZWRnZUVkZ2VUZXN0KGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGQsIEdyYXBoaWNzUG9pbnQmIHIpCiB7Ci0gICAgRmxvYXRTaXpl
IHUgPSBiIC0gYTsKLSAgICBGbG9hdFNpemUgdiA9IGQgLSBjOwotICAgIEZsb2F0U2l6ZSB3ID0g
YSAtIGM7CisgICAgR3JhcGhpY3NTaXplIHUgPSBiIC0gYTsKKyAgICBHcmFwaGljc1NpemUgdiA9
IGQgLSBjOworICAgIEdyYXBoaWNzU2l6ZSB3ID0gYSAtIGM7CiAKICAgICBmbG9hdCBkZW5vbSA9
IHBlcnBQcm9kdWN0KHUsIHYpOwogCkBAIC0xNjEsOSArMTYxLDkgQEAgdm9pZCBDQ0xheWVyU29y
dGVyOjpMYXllckludGVyc2VjdG9yOjpnbwogCiAKIC8vIENoZWNrcyBpZiBzZWdtZW50IHBxIGlu
dGVyc2VjdHMgYW55IG9mIHRoZSBzaWRlcyBvZiB0cmlhbmdsZSBhYmMuCi1ib29sIENDTGF5ZXJT
b3J0ZXI6OkxheWVySW50ZXJzZWN0b3I6OmVkZ2VUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2lu
dCYgcCwgY29uc3QgRmxvYXRQb2ludCYgcSwgY29uc3QgRmxvYXRQb2ludCYgYSwgY29uc3QgRmxv
YXRQb2ludCYgYiwgY29uc3QgRmxvYXRQb2ludCYgYykKK2Jvb2wgQ0NMYXllclNvcnRlcjo6TGF5
ZXJJbnRlcnNlY3Rvcjo6ZWRnZVRyaWFuZ2xlVGVzdChjb25zdCBHcmFwaGljc1BvaW50JiBwLCBj
b25zdCBHcmFwaGljc1BvaW50JiBxLCBjb25zdCBHcmFwaGljc1BvaW50JiBhLCBjb25zdCBHcmFw
aGljc1BvaW50JiBiLCBjb25zdCBHcmFwaGljc1BvaW50JiBjKQogewotICAgIEZsb2F0UG9pbnQg
cjsKKyAgICBHcmFwaGljc1BvaW50IHI7CiAgICAgaWYgKChlZGdlRWRnZVRlc3QocCwgcSwgYSwg
YiwgcikgJiYgY2hlY2taRGlmZihyKSkKICAgICAgICAgfHwgKGVkZ2VFZGdlVGVzdChwLCBxLCBh
LCBjLCByKSAmJiBjaGVja1pEaWZmKHIpKQogICAgICAgICB8fCAoZWRnZUVkZ2VUZXN0KHAsIHEs
IGIsIGMsIHIpICYmIGNoZWNrWkRpZmYocikpKQpAQCAtMTczLDcgKzE3Myw3IEBAIGJvb2wgQ0NM
YXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6ZWQKIH0KIAogLy8gQ2hlY2tzIGlmIHR3byBj
by1wbGFuYXIgdHJpYW5nbGVzIGludGVyc2VjdC4KLWJvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJ
bnRlcnNlY3Rvcjo6dHJpYW5nbGVUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2ludCYgYTEsIGNv
bnN0IEZsb2F0UG9pbnQmIGIxLCBjb25zdCBGbG9hdFBvaW50JiBjMSwgY29uc3QgRmxvYXRQb2lu
dCYgYTIsIGNvbnN0IEZsb2F0UG9pbnQmIGIyLCBjb25zdCBGbG9hdFBvaW50JiBjMikKK2Jvb2wg
Q0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6dHJpYW5nbGVUcmlhbmdsZVRlc3QoY29u
c3QgR3JhcGhpY3NQb2ludCYgYTEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGIxLCBjb25zdCBHcmFw
aGljc1BvaW50JiBjMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgYTIsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGIyLCBjb25zdCBHcmFwaGljc1BvaW50JiBjMikKIHsKICAgICAvLyBDaGVjayBhbGwgZWRn
ZXMgb2YgZmlyc3QgdHJpYW5nbGUgd2l0aCBlZGdlcyBvZiB0aGUgc2Vjb25kIG9uZS4KICAgICBp
ZiAoZWRnZVRyaWFuZ2xlVGVzdChhMSwgYjEsIGEyLCBiMiwgYzIpCkBAIC0yMDIsNyArMjAyLDcg
QEAgYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllckludGVyc2VjdG9yOjp0cgogLy8gbGF5ZXJzLiBJ
ZiB0aGUgdmFsdWUgb2YgZGlmZmVyZW5jZSBpcyBoaWdoZXIgdGhhbiBvdXIgZWFybHkgZXhpdCB0
aHJlc2hvbGQgdGhlbgogLy8gaXQgbWVhbnMgdGhhdCB0aGUgeiBkaWZmZXJlbmNlIGlzIGNvbmNs
dXNpdmUgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjawogLy8gb3RoZXIgaW50ZXJz
ZWN0aW9uIHBvaW50cy4KLWJvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6Y2hl
Y2taRGlmZihjb25zdCBGbG9hdFBvaW50JiBwKQorYm9vbCBDQ0xheWVyU29ydGVyOjpMYXllcklu
dGVyc2VjdG9yOjpjaGVja1pEaWZmKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgZmxv
YXQgemEgPSBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQobm9kZUEsIHApOwogICAgIGZsb2F0IHpi
ID0gbGF5ZXJaRnJvbVByb2plY3RlZFBvaW50KG5vZGVCLCBwKTsKQEAgLTIyNSwxMCArMjI1LDEw
IEBAIGJvb2wgQ0NMYXllclNvcnRlcjo6TGF5ZXJJbnRlcnNlY3Rvcjo6Y2gKIC8vIHRvIHBvaW50
IHAgd2hpY2ggbGllcyBvbiB0aGUgeiA9IDAgcGxhbmUuIEl0IGRvZXMgaXQgYnkgY29tcHV0aW5n
IHRoZQogLy8gaW50ZXJzZWN0aW9uIG9mIGEgbGluZSBzdGFydGluZyBmcm9tIHAgYWxvbmcgdGhl
IFogYXhpcyBhbmQgdGhlIHBsYW5lCiAvLyBvZiB0aGUgbGF5ZXIuCi1mbG9hdCBDQ0xheWVyU29y
dGVyOjpMYXllckludGVyc2VjdG9yOjpsYXllclpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2Rl
KiBsYXllciwgY29uc3QgRmxvYXRQb2ludCYgcCkKK2Zsb2F0IENDTGF5ZXJTb3J0ZXI6OkxheWVy
SW50ZXJzZWN0b3I6OmxheWVyWkZyb21Qcm9qZWN0ZWRQb2ludChHcmFwaE5vZGUqIGxheWVyLCBj
b25zdCBHcmFwaGljc1BvaW50JiBwKQogewotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCB6QXhpcygw
LCAwLCAxKTsKLSAgICBGbG9hdFBvaW50M0QgdyA9IEZsb2F0UG9pbnQzRChwLngoKSwgcC55KCks
IDApIC0gbGF5ZXItPm9yaWdpbjsKKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QgekF4aXMoMCwg
MCwgMSk7CisgICAgR3JhcGhpY3NQb2ludDNEIHcgPSBHcmFwaGljc1BvaW50M0QocC54KCksIHAu
eSgpLCAwKSAtIGxheWVyLT5vcmlnaW47CiAKICAgICBmbG9hdCBkID0gbGF5ZXItPm5vcm1hbC5k
b3QoekF4aXMpOwogICAgIGZsb2F0IG4gPSAtbGF5ZXItPm5vcm1hbC5kb3Qodyk7CkBAIC0yOTgs
MTUgKzI5OCwxNSBAQCB2b2lkIENDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoTm9kZXMoTGF5CiAg
ICAgICAgICAgICBsYXllckhlaWdodCA9IDAuNSAqIG5vZGUubGF5ZXItPmJvdW5kcygpLmhlaWdo
dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRQb2ludDNEIGMxID0gZHJhd1RyYW5zZm9y
bS5tYXBQb2ludChGbG9hdFBvaW50M0QoLWxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCBjMiA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2lu
dDNEKGxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCAwKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBj
MyA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludDNEKGxheWVyV2lkdGgsIC1sYXll
ckhlaWdodCwgMCkpOwotICAgICAgICBGbG9hdFBvaW50M0QgYzQgPSBkcmF3VHJhbnNmb3JtLm1h
cFBvaW50KEZsb2F0UG9pbnQzRCgtbGF5ZXJXaWR0aCwgLWxheWVySGVpZ2h0LCAwKSk7CisgICAg
ICAgIEdyYXBoaWNzUG9pbnQzRCBjMSA9IGRyYXdUcmFuc2Zvcm0ubWFwUG9pbnQoR3JhcGhpY3NQ
b2ludDNEKC1sYXllcldpZHRoLCBsYXllckhlaWdodCwgMCkpOworICAgICAgICBHcmFwaGljc1Bv
aW50M0QgYzIgPSBkcmF3VHJhbnNmb3JtLm1hcFBvaW50KEdyYXBoaWNzUG9pbnQzRChsYXllcldp
ZHRoLCBsYXllckhlaWdodCwgMCkpOworICAgICAgICBHcmFwaGljc1BvaW50M0QgYzMgPSBkcmF3
VHJhbnNmb3JtLm1hcFBvaW50KEdyYXBoaWNzUG9pbnQzRChsYXllcldpZHRoLCAtbGF5ZXJIZWln
aHQsIDApKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGM0ID0gZHJhd1RyYW5zZm9ybS5tYXBQ
b2ludChHcmFwaGljc1BvaW50M0QoLWxheWVyV2lkdGgsIC1sYXllckhlaWdodCwgMCkpOwogICAg
ICAgICBub2RlLm5vcm1hbCA9IChjMiAtIGMxKS5jcm9zcyhjMyAtIGMxKTsKLSAgICAgICAgbm9k
ZS5jMSA9IEZsb2F0UG9pbnQoYzEueCgpLCBjMS55KCkpOwotICAgICAgICBub2RlLmMyID0gRmxv
YXRQb2ludChjMi54KCksIGMyLnkoKSk7Ci0gICAgICAgIG5vZGUuYzMgPSBGbG9hdFBvaW50KGMz
LngoKSwgYzMueSgpKTsKLSAgICAgICAgbm9kZS5jNCA9IEZsb2F0UG9pbnQoYzQueCgpLCBjNC55
KCkpOworICAgICAgICBub2RlLmMxID0gR3JhcGhpY3NQb2ludChjMS54KCksIGMxLnkoKSk7Cisg
ICAgICAgIG5vZGUuYzIgPSBHcmFwaGljc1BvaW50KGMyLngoKSwgYzIueSgpKTsKKyAgICAgICAg
bm9kZS5jMyA9IEdyYXBoaWNzUG9pbnQoYzMueCgpLCBjMy55KCkpOworICAgICAgICBub2RlLmM0
ID0gR3JhcGhpY3NQb2ludChjNC54KCksIGM0LnkoKSk7CiAgICAgICAgIG5vZGUub3JpZ2luID0g
YzE7CiAgICAgICAgIG5vZGUuYm91bmRpbmdCb3guZml0VG9Qb2ludHMobm9kZS5jMSwgbm9kZS5j
Miwgbm9kZS5jMywgbm9kZS5jNCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5o
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBA
QAogI2lmbmRlZiBDQ0xheWVyU29ydGVyX2gKICNkZWZpbmUgQ0NMYXllclNvcnRlcl9oCiAKLSNp
bmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CkBAIC00OCwxMCArNDgsMTAgQEAgcHJpdmF0ZToKICAgICBzdHJ1
Y3QgR3JhcGhOb2RlIHsKICAgICAgICAgR3JhcGhOb2RlKENDTGF5ZXJJbXBsKiBjY2xheWVyKSA6
IGxheWVyKGNjbGF5ZXIpIHsgfTsKICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyOwotICAgICAg
ICBGbG9hdFBvaW50IGMxLCBjMiwgYzMsIGM0OwotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFs
OwotICAgICAgICBGbG9hdFBvaW50M0Qgb3JpZ2luOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3g7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYzEsIGMyLCBjMywgYzQ7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQzRCBub3JtYWw7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBvcmlnaW47Cisg
ICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveDsKICAgICAgICAgVmVjdG9yPEdyYXBoRWRn
ZSo+IGluY29taW5nOwogICAgICAgICBWZWN0b3I8R3JhcGhFZGdlKj4gb3V0Z29pbmc7CiAgICAg
fTsKQEAgLTY4LDEyICs2OCwxMiBAQCBwcml2YXRlOgogCiAgICAgICAgIHZvaWQgZ28oKTsKIAot
ICAgICAgICBmbG9hdCBsYXllclpGcm9tUHJvamVjdGVkUG9pbnQoR3JhcGhOb2RlKiwgY29uc3Qg
RmxvYXRQb2ludCYpOwotICAgICAgICBib29sIHRyaWFuZ2xlVHJpYW5nbGVUZXN0KGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAg
ICBib29sIGVkZ2VUcmlhbmdsZVRlc3QoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKLSAgICAgICAgYm9vbCBjaGVja1pEaWZmKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAg
ICAgZmxvYXQgbGF5ZXJaRnJvbVByb2plY3RlZFBvaW50KEdyYXBoTm9kZSosIGNvbnN0IEdyYXBo
aWNzUG9pbnQmKTsKKyAgICAgICAgYm9vbCB0cmlhbmdsZVRyaWFuZ2xlVGVzdChjb25zdCBHcmFw
aGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBj
b25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmKTsKKyAgICAgICAgYm9vbCBlZGdlVHJpYW5nbGVUZXN0KGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIGJvb2wgY2hlY2ta
RGlmZihjb25zdCBHcmFwaGljc1BvaW50Jik7CiAKLSAgICAgICAgRmxvYXRQb2ludCBpbnRlcnNl
Y3Rpb25Qb2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBpbnRlcnNlY3Rpb25Qb2ludDsKICAg
ICAgICAgR3JhcGhOb2RlKiBub2RlQTsKICAgICAgICAgR3JhcGhOb2RlKiBub2RlQjsKICAgICAg
ICAgZmxvYXQgekRpZmY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
bHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROZWVkc0Rpc3BsCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJDbHV0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ZvbnRFZmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9G
b250RWZsLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvRm9udEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHcmFwaGljc1BvaW50JiwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0
ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFy
ayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQg
LyogdG8gKi8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4g
Ki8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgR3JhcGhpY3NQb2ludCYg
LyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTY3LDEwICs2NywxMCBAQCBpbnQgRm9udDo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4CiAgICAgcmV0dXJuIDA7CiB9CiAKLUZsb2F0UmVjdCBG
b250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQsIGludCwgaW50KSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgR3JhcGhpY3NQb2lu
dCYsIGludCwgaW50LCBpbnQpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NMYXllckVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZs
L0dyYXBoaWNzTGF5ZXJFZmwuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0xheWVyRWZsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJFZmw6OnNldE5lZWRzRGlzcGxh
eSgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyRWZsOjpz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NMYXll
ckVmbDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0xheWVyRWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzTGF5ZXJFZmwuaAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NMYXllckVm
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5HcmFwaGljc0xheWVyRWZsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJGRUJsZW5kLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRkVDb21wb3NpdGU6OmFwcGx5KCkKICAgICAg
ICAgcmV0dXJuOwogICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHJlc3VsdElt
YWdlLT5jb250ZXh0KCk7CiAKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAs
IC0xLCAtMSk7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX09WRVI6CiAgICAgICAgIGZpbHRlckNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbjIt
PmFzSW1hZ2VCdWZmZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVDb252b2x2ZU1hdHJpeDo6RkVD
b252b2x2ZU1hdHJpeChGaWx0ZXIqIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwK
ICAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJu
ZWxNYXRyaXgpCisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9v
bCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCiAgICAg
OiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAg
ICAgLCBtX2Rpdmlzb3IoZGl2aXNvcikKQEAgLTUyLDcgKzUyLDcgQEAgRkVDb252b2x2ZU1hdHJp
eDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZQogCiBQYXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwKICAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2lu
dCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQ
b2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCisgICAgY29uc3QgR3JhcGhpY3NQb2ludCYga2VybmVsVW5p
dExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxN
YXRyaXgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGZpbHRl
ciwga2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2Vy
bmVsVW5pdExlbmd0aCwKICAgICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CkBA
IC0xMzEsMTIgKzEzMSwxMiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEVkZ2VNb2RlKEVk
Z2VNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0UG9pbnQgRkVDb252b2x2ZU1hdHJpeDo6
a2VybmVsVW5pdExlbmd0aCgpIGNvbnN0CitHcmFwaGljc1BvaW50IEZFQ29udm9sdmVNYXRyaXg6
Omtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBtX2tlcm5lbFVuaXRMZW5n
dGg7IAogfQogCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldEtlcm5lbFVuaXRMZW5ndGgoY29u
c3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCkKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6
c2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBHcmFwaGljc1BvaW50JiBrZXJuZWxVbml0TGVuZ3Ro
KQogewogICAgIGlmIChtX2tlcm5lbFVuaXRMZW5ndGggPT0ga2VybmVsVW5pdExlbmd0aCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2lmIEVO
QUJMRShGSUxURVJTKQogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1
LDcgKzQ1LDcgQEAgY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKIGNsYXNzIEZFQ29udm9sdmVNYXRy
aXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyKiwgY29uc3QgSW50U2l6ZSYsCi0gICAg
ICAgICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25z
dCBGbG9hdFBvaW50JiwKKyAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQm
LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLAogICAgICAgICAgICAgYm9vbCwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3Q7
CkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBj
b25zdDsKICAgICBib29sIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBGbG9hdFBv
aW50IGtlcm5lbFVuaXRMZW5ndGgoKSBjb25zdDsKLSAgICBib29sIHNldEtlcm5lbFVuaXRMZW5n
dGgoY29uc3QgRmxvYXRQb2ludCYpOworICAgIEdyYXBoaWNzUG9pbnQga2VybmVsVW5pdExlbmd0
aCgpIGNvbnN0OworICAgIGJvb2wgc2V0S2VybmVsVW5pdExlbmd0aChjb25zdCBHcmFwaGljc1Bv
aW50Jik7CiAKICAgICBib29sIHByZXNlcnZlQWxwaGEoKSBjb25zdDsKICAgICBib29sIHNldFBy
ZXNlcnZlQWxwaGEoYm9vbCk7CkBAIC05MCw3ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAog
ICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyKiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9h
dCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CiAKICAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1
ZXM+CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGlu
Z0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlF
bmQpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9iaWFzOwogICAg
IEludFBvaW50IG1fdGFyZ2V0T2Zmc2V0OwogICAgIEVkZ2VNb2RlVHlwZSBtX2VkZ2VNb2RlOwot
ICAgIEZsb2F0UG9pbnQgbV9rZXJuZWxVbml0TGVuZ3RoOworICAgIEdyYXBoaWNzUG9pbnQgbV9r
ZXJuZWxVbml0TGVuZ3RoOwogICAgIGJvb2wgbV9wcmVzZXJ2ZUFscGhhOwogICAgIFZlY3Rvcjxm
bG9hdD4gbV9rZXJuZWxNYXRyaXg7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgdm9pZCBGRURy
b3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbgogICAgIEZpbHRlciogZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7CiAgICAgQVNTRVJUKGZpbHRlcik7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1
dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBG
bG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpOworICAg
IEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0
ZVBhaW50UmVjdCgpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdChh
YnNvbHV0ZVBhaW50UmVjdCk7CiAgICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92ZShmaWx0
ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2Fs
ZShtX2R5KSk7CiAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QpOwogICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkp
OwpAQCAtODgsMTEgKzg4LDExIEBAIHZvaWQgRkVEcm9wU2hhZG93OjphcHBseSgpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3N0ZFgpLCBm
aWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3N0ZFkpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKTsKKyAgICBHcmFwaGljc1NpemUgYmx1clJhZGl1cyhmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fc3RkWCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc3Rk
WSkpOworICAgIEdyYXBoaWNzU2l6ZSBvZmZzZXQoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2Fs
ZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwogCi0gICAgRmxvYXRS
ZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJh
d2luZ1JlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBHcmFwaGljc1Jl
Y3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJhd2luZ1Jl
Z2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCiAgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlID0gaW4tPmFzSW1hZ2VCdWZmZXIoKTsKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEZFRHJv
cFNoYWRvdzo6YXBwbHkoKQogICAgIHJlc3VsdEltYWdlLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKHNyY1BpeGVsQXJyYXkuZ2V0KCksIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJ
bnRQb2ludCgpKTsKIAogICAgIHJlc3VsdENvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICByZXN1bHRDb250ZXh0LT5maWxsUmVjdChHcmFw
aGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1f
c2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHJlc3VsdENvbnRleHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKS0+ZHJhd0ltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgRkVGbG9vZDo6YXBwbHko
KQogICAgICAgICByZXR1cm47CiAKICAgICBDb2xvciBjb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRl
QWxwaGEoZmxvb2RDb2xvcigpLnJnYigpLCBmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpLCBjb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoR3JhcGhpY3NSZWN0KEdyYXBoaWNzUG9pbnQo
KSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvciwgQ29sb3JTcGFjZURldmljZVJH
Qik7CiB9CiAKIHZvaWQgRkVGbG9vZDo6ZHVtcCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3
IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUKIAogdm9pZCBGRUdh
dXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVj
dCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5h
YnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOwogCiAgICAgdW5zaWduZWQga2VybmVsU2l6ZVggPSAwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsx
ODQsNyBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjppbmxpbmVTZXRQaXhlbChpCiAgICAgICAg
IGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCiAgICAg
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3IueigpIC8gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CiAgICAgICAgICAgICBoYWxmd2F5VmVj
dG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGgpOwogICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0
b3IubGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCkBA
IC0xOTMsMTYgKzE5MywxNiBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjppbmxpbmVTZXRQaXhl
bChpCiAgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAq
IHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBtX3NwZWN1bGFy
RXhwb25lbnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRQb2ludDNE
IG5vcm1hbFZlY3RvcjsKLSAgICAgICAgbm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRp
Y19jYXN0PGZsb2F0Pihub3JtYWwyRFZlY3Rvci54KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwot
ICAgICAgICBub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5v
cm1hbDJEVmVjdG9yLnkoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CisgICAgICAgIEdyYXBoaWNz
UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRYKGZhY3Rvclgg
KiBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG5vcm1hbDJEVmVjdG9yLngoKSkgKiBkYXRhLnN1
cmZhY2VTY2FsZSk7CisgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRZKGZhY3RvclkgKiBzdGF0aWNf
Y2FzdDxHcmFwaGljc1VuaXQ+KG5vcm1hbDJEVmVjdG9yLnkoKSkgKiBkYXRhLnN1cmZhY2VTY2Fs
ZSk7CiAgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRaKDEpOwogICAgICAgICBmbG9hdCBub3JtYWxW
ZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7CiAKICAgICAgICAgaWYgKG1fbGln
aHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIHBhaW50aW5nRGF0YS5s
aWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgRmxvYXRQb2lu
dDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgICAg
ICBHcmFwaGljc1BvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
cjsKICAgICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVjdG9yLnooKSArIHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5
VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKICAgICAgICAgICAgIGlmICht
X3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKQEAgLTMxMCw3ICszMTAsNyBAQCBib29sIEZFTGlnaHRp
bmc6OmRyYXdMaWdodGluZyhCeXRlQXJyYXkqCiAgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAt
IDE7Ci0gICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKG1fbGlnaHRp
bmdDb2xvci5yZWQoKSwgbV9saWdodGluZ0NvbG9yLmdyZWVuKCksIG1fbGlnaHRpbmdDb2xvci5i
bHVlKCkpOworICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3RvciA9IEdyYXBoaWNzUG9pbnQzRCht
X2xpZ2h0aW5nQ29sb3IucmVkKCksIG1fbGlnaHRpbmdDb2xvci5ncmVlbigpLCBtX2xpZ2h0aW5n
Q29sb3IuYmx1ZSgpKTsKICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50
aW5nRGF0YSk7CiAKICAgICAvLyBUb3AvTGVmdCBjb3JuZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBA
QCBmbG9hdCBGRU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAogCiB2b2lkIEZFTW9ycGhvbG9n
eTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBwYWludFJl
Y3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBHcmFwaGljc1Jl
Y3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAg
RmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBwYWludFJlY3QuaW5mbGF0ZVgo
ZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX3JhZGl1c1gpKTsKICAgICBwYWludFJlY3Qu
aW5mbGF0ZVkoZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9yYWRpdXNZKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCB2b2lkIEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKIAogdm9pZCBGRU9mZnNldDo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1
dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QgcGFpbnRS
ZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmlsdGVyKiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBwYWludFJlY3QubW92ZShmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7
CiAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwpAQCAtODksNyArODks
NyBAQCB2b2lkIEZFT2Zmc2V0OjphcHBseSgpCiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgR3JhcGhpY3NS
ZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKICAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAg
IGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBm
aWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRl
eHQoKS0+ZHJhd0ltYWdlQnVmZmVyKGluLT5hc0ltYWdlQnVmZmVyKCksIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIGRyYXdpbmdSZWdpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDkgKzYyLDkgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KCkKIAogICAgIC8v
IFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRo
ZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQogICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBz
b3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9w
dGltaXphdGlvbi4KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpbi0+bWF4RWZmZWN0UmVjdCgp
OwotICAgIEZsb2F0UG9pbnQgaW5NYXhFZmZlY3RMb2NhdGlvbiA9IHRpbGVSZWN0LmxvY2F0aW9u
KCk7Ci0gICAgRmxvYXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1heEVmZmVjdFJlY3QoKS5s
b2NhdGlvbigpOworICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0
KCk7CisgICAgR3JhcGhpY3NQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9j
YXRpb24oKTsKKyAgICBHcmFwaGljc1BvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0
UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmls
dGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7CiAgICAgICAgIEZpbHRlciogZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7CiAgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLT5maWx0ZXJSZWdpb24oKTsK
QEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBGRVRpbGU6OmFwcGx5KCkKICAgICBwYXR0ZXJuLT5zZXRQ
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSk7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJD
b250ZXh0LT5zZXRGaWxsUGF0dGVybihwYXR0ZXJuKTsKLSAgICBmaWx0ZXJDb250ZXh0LT5maWxs
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkp
OworICAgIGZpbHRlckNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
NSw3ICsyMjUsNyBAQCBpbmxpbmUgdm9pZCBjaGVja05vaXNlKGludCYgbm9pc2VWYWx1ZSwgCiAg
ICAgICAgIG5vaXNlVmFsdWUgLT0gbmV3VmFsdWUgLSAxOwogfQogCi1mbG9hdCBGRVR1cmJ1bGVu
Y2U6Om5vaXNlMkQoaW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25z
dCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKK2Zsb2F0IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChp
bnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZSB7CiAgICAgICAgIGludCBub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlOwpAQCAtMjc2LDcgKzI3Niw3IEBAIGZsb2F0IEZFVHVyYnVs
ZW5jZTo6bm9pc2UyRChpbnQgY2hhbm5lbCwKICAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlv
bihzeSwgYSwgYik7CiB9CiAKLXVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVU
dXJidWxlbmNlVmFsdWVGb3JQb2ludChpbnQgY2hhbm5lbCwgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordW5zaWduZWQgY2hhciBGRVR1cmJ1bGVu
Y2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAg
ZmxvYXQgdGlsZVdpZHRoID0gcGFpbnRpbmdEYXRhLmZpbHRlclNpemUud2lkdGgoKTsKICAgICBB
U1NFUlQodGlsZVdpZHRoID4gMCk7CkBAIC0zMTAsNyArMzEwLDcgQEAgdW5zaWduZWQgY2hhciBG
RVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cgogICAgICAgICBwYWludGluZ0RhdGEud3JhcFkgPSBz
X3Blcmxpbk5vaXNlICsgcGFpbnRpbmdEYXRhLmhlaWdodDsKICAgICB9CiAgICAgZmxvYXQgdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gMDsKLSAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBv
aW50LngoKSAqIG1fYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIG1fYmFzZUZyZXF1ZW5jeVkp
OworICAgIEdyYXBoaWNzUG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogbV9iYXNlRnJlcXVl
bmN5WCwgcG9pbnQueSgpICogbV9iYXNlRnJlcXVlbmN5WSk7CiAgICAgZmxvYXQgcmF0aW8gPSAx
OwogICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3Rh
dmUpIHsKICAgICAgICAgaWYgKG1fdHlwZSA9PSBGRVRVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9J
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDggKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgRkVUdXJidWxlbmNlKEZpbHRlcios
IFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOwogCiAgICAg
aW5saW5lIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIGZsb2F0IG5vaXNlMkQo
aW50IGNoYW5uZWwsIFBhaW50aW5nRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB1bnNp
Z25lZCBjaGFyIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGludCBjaGFubmVsLCBQ
YWludGluZ0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgZmxvYXQgbm9pc2UyRChpbnQg
Y2hhbm5lbCwgUGFpbnRpbmdEYXRhJiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgIHVuc2ln
bmVkIGNoYXIgY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoaW50IGNoYW5uZWwsIFBh
aW50aW5nRGF0YSYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAgICBpbmxpbmUgdm9pZCBmaWxs
UmVnaW9uKEJ5dGVBcnJheSosIFBhaW50aW5nRGF0YSYsIGludCwgaW50KTsKIAogICAgIFR1cmJ1
bGVuY2VUeXBlIG1fdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw4ICsyMSw4IEBACiAjZGVmaW5lIEZpbHRlcl9oCiAKICNpZiBFTkFCTEUoRklMVEVSUykK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQxLDI0ICs0
MSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U291cmNlSW1hZ2Uo
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IHNv
dXJjZUltYWdlOyB9CiAgICAgICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJu
IG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KIAotICAgICAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgICAgICB2b2lk
IHNldEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7
IG1fZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICAgICAgR3JhcGhp
Y3NTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRp
b247IH0KKyAgICAgICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEdyYXBoaWNzU2l6
ZSYgZmlsdGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0
aW9uOyB9CiAKICAgICAgICAgdmlydHVhbCBmbG9hdCBhcHBseUhvcml6b250YWxTY2FsZShmbG9h
dCB2YWx1ZSkgY29uc3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24ud2lkdGgo
KTsgfQogICAgICAgICB2aXJ0dWFsIGZsb2F0IGFwcGx5VmVydGljYWxTY2FsZShmbG9hdCB2YWx1
ZSkgY29uc3QgeyByZXR1cm4gdmFsdWUgKiBtX2ZpbHRlclJlc29sdXRpb24uaGVpZ2h0KCk7IH0K
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNv
bnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25z
dCA9IDA7CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0
ID0gMDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBv
aW50VG9Mb2NhbFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KCk7IH0KKyAgICAgICAgdmlydHVhbCBHcmFwaGljc1BvaW50IG1hcEFic29sdXRlUG9pbnRU
b0xvY2FsUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNz
UG9pbnQoKTsgfQogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNl
clNwYWNlKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICAgICAgdmlydHVhbCBH
cmFwaGljc1JlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCB7IHJldHVybiBHcmFw
aGljc1JlY3QoKTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1v
ZGUoKSBjb25zdCA9IDA7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247
CisgICAgICAgIEdyYXBoaWNzU2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgRmlsdGVyRWZmZWN0
X2gKIAogI2lmIEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAogI2luY2x1ZGUgPHd0
Zi9CeXRlQXJyYXkuaD4KQEAgLTc2LDggKzc2LDggQEAgcHVibGljOgogICAgIEludFJlY3QgYWJz
b2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlUGFpbnRSZWN0OyB9CiAg
ICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50
UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KIAotICAg
IEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0
OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0
UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9IAorICAgIEdyYXBoaWNz
UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Cisg
ICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgbWF4RWZmZWN0UmVj
dCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9IAogCiAgICAgdmlydHVhbCB2
b2lkIGFwcGx5KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCkgPSAwOwpAQCAtMTAzLDEx
ICsxMDMsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9oYXNIZWlnaHQ7IH0KICAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFz
SGVpZ2h0ID0gdmFsdWU7IH0KIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZv
aWQgc2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uOyB9CisgICAgR3JhcGhpY3NSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAg
dm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KIAotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVz
KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZl
Y3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVj
dEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9CisgICAgR3JhcGhpY3NSZWN0IGVmZmVj
dEJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KKyAgICB2
b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMoY29uc3QgR3JhcGhpY3NSZWN0JiBlZmZlY3RCb3VuZGFy
aWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KIAogICAgIEZp
bHRlciogZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KIApAQCAtMTMwLDcgKzEzMCw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbHRlciBwcmlt
aXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGluIGFic29sdXRl
IGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgLy8gVGhlIGFic29sdXRlIHBhaW50IHJlY3Qgc2hvdWxk
IG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVjdC4KLSAgICBGbG9hdFJlY3QgbV9t
YXhFZmZlY3RSZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX21heEVmZmVjdFJlY3Q7CiAgICAgRmls
dGVyKiBtX2ZpbHRlcjsKIAogcHJpdmF0ZToKQEAgLTE0MSwxMSArMTQxLDExIEBAIHByaXZhdGU6
CiAKICAgICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcg
dG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KICAg
ICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVT
dWJyZWdpb247CisgICAgR3JhcGhpY3NSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwog
CiAgICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFsIFNWR0ZFKkVsZW1l
bnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0aGUKICAgICAvLyBm
aWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJlY3QgbV9lZmZlY3RC
b3VuZGFyaWVzOworICAgIEdyYXBoaWNzUmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CiAgICAgYm9v
bCBtX2hhc1g7CiAgICAgYm9vbCBtX2hhc1k7CiAgICAgYm9vbCBtX2hhc1dpZHRoOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDcgQEAKICNkZWZpbmUgTGlnaHRTb3VyY2VfaAogCiAjaWYgRU5BQkxFKEZJTFRFUlMpCi0jaW5j
bHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBA
IC00OSwxMiArNDksMTIgQEAgcHVibGljOgogICAgIC8vIGEgcmVmZXJlbmNlIHRvIHRoZSBmb2xs
b3dpbmcgc3RydWN0dXJlCiAgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CiAgICAgICAgIC8vIFNW
R0ZFTGlnaHRpbmcgYWxzbyB1c2UgdGhlbQotICAgICAgICBGbG9hdFBvaW50M0QgbGlnaHRWZWN0
b3I7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBjb2xvclZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludDNEIGxpZ2h0VmVjdG9yOworICAgICAgICBHcmFwaGljc1BvaW50M0QgY29sb3JWZWN0b3I7
CiAgICAgICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICAvLyBQcml2YXRlIG1l
bWJlcnMKLSAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKLSAgICAgICAgRmxv
YXRQb2ludDNEIHByaXZhdGVDb2xvclZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIGRp
cmVjdGlvblZlY3RvcjsKKyAgICAgICAgR3JhcGhpY3NQb2ludDNEIHByaXZhdGVDb2xvclZlY3Rv
cjsKICAgICAgICAgZmxvYXQgY29uZUN1dE9mZkxpbWl0OwogICAgICAgICBmbG9hdCBjb25lRnVs
bExpZ2h0OwogICAgICAgICBpbnQgc3BlY3VsYXJFeHBvbmVudDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIGJvb2wgUG9pbnRMaWdodFNvdXJjZTo6c2V0WihmbG9hdCB6KQogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludDNEJiBwKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkKIHsKICAgICB0
cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpIDw8ICIgej0iIDw8IHAueigpOwog
ICAgIHJldHVybiB0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdo
dFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBQb2ludExpZ2h0U291cmNlIDogcHVibGljIExpZ2h0U291cmNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2ludExpZ2h0U291cmNlPiBjcmVhdGUo
Y29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQb2lu
dExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbikKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUG9pbnRMaWdodFNvdXJjZShwb3NpdGlv
bikpOwogICAgIH0KIAotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBib29sIHNldFgoZmxvYXQpOwog
ICAgIGJvb2wgc2V0WShmbG9hdCk7CiAgICAgYm9vbCBzZXRaKGZsb2F0KTsKQEAgLTQ2LDEzICs0
NiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBQb2ludExpZ2h0U291
cmNlKGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9zaXRpb24pCisgICAgUG9pbnRMaWdodFNvdXJjZShj
b25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKQogICAgICAgICA6IExpZ2h0U291cmNlKExT
X1BPSU5UKQogICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgewogICAgIH0KIAot
ICAgIEZsb2F0UG9pbnQzRCBtX3Bvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3Bvc2l0
aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0Tgogdm9pZCBTb3VyY2VBbHBoYTo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAgIEZpbHRlciogZmlsdGVyID0gdGhp
cy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1h
Z2VSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1h
Z2VSZWN0KCk7CiAgICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigp
LndpZHRoKCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQpAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIFNvdXJjZUFscGhhOjphcHBseSgpCiAKICAgICBzZXRJc0FscGhhSW1h
Z2UodHJ1ZSk7CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBpbWFnZVJlY3QoR3JhcGhp
Y3NQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmZpbHRlckNvbnRleHQpOwogICAgIGZpbHRl
ckNvbnRleHQtPmNsaXBUb0ltYWdlQnVmZmVyKGZpbHRlci0+c291cmNlSW1hZ2UoKSwgaW1hZ2VS
ZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNl
R3JhcGhpYzo6ZWZmZWMKIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQogewogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0KCk7CiAgICAgcGFpbnRS
ZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci0+Zmls
dGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcs
NyBAQCBib29sIFNwb3RMaWdodFNvdXJjZTo6c2V0TGltaXRpbmdDb25lQW5nCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGbG9hdFBvaW50M0QmIHApCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwKQogewogICAgIHRzIDw8ICJ4
PSIgPDwgcC54KCkgPDwgIiB5PSIgPDwgcC55KCkgPDwgIiB6PSIgPDwgcC56KCk7CiAgICAgcmV0
dXJuIHRzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICszMCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFNwb3RMaWdodFNvdXJjZSA6IHB1YmxpYyBMaWdodFNvdXJjZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3BvdExpZ2h0U291cmNlPiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludDNEJiBwb3NpdGlvbiwKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEJiBkaXJlY3Rpb24s
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNwb3RMaWdodFNvdXJjZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgcG9zaXRpb24sCisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgZGlyZWN0aW9u
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBsaW1pdGluZ0NvbmVBbmdsZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BvdExpZ2h0U291cmNlKHBvc2l0aW9uLCBk
aXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQsIGxpbWl0aW5nQ29uZUFuZ2xlKSk7CiAgICAgfQog
Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KKyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIGJvb2wgc2V0WChmbG9hdCk7CiAgICAgYm9vbCBzZXRZ
KGZsb2F0KTsKICAgICBib29sIHNldFooZmxvYXQpOwotICAgIGNvbnN0IEZsb2F0UG9pbnQzRCYg
ZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBjb25zdCBHcmFw
aGljc1BvaW50M0QmIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAg
ICAgYm9vbCBzZXRQb2ludHNBdFgoZmxvYXQpOwogICAgIGJvb2wgc2V0UG9pbnRzQXRZKGZsb2F0
KTsKICAgICBib29sIHNldFBvaW50c0F0WihmbG9hdCk7CkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFNwb3RMaWdodFNvdXJjZShjb25zdCBGbG9h
dFBvaW50M0QmIHBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50M0QmIGRpcmVjdGlvbiwKKyAgICBT
cG90TGlnaHRTb3VyY2UoY29uc3QgR3JhcGhpY3NQb2ludDNEJiBwb3NpdGlvbiwgY29uc3QgR3Jh
cGhpY3NQb2ludDNEJiBkaXJlY3Rpb24sCiAgICAgICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGxpbWl0aW5nQ29uZUFuZ2xlKQogICAgICAgICA6IExpZ2h0U291cmNlKExTX1NQT1Qp
CiAgICAgICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKQEAgLTY2LDggKzY2LDggQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Ci0gICAgRmxv
YXRQb2ludDNEIG1fZGlyZWN0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBtX3Bvc2l0aW9uOwor
ICAgIEdyYXBoaWNzUG9pbnQzRCBtX2RpcmVjdGlvbjsKIAogICAgIGZsb2F0IG1fc3BlY3VsYXJF
eHBvbmVudDsKICAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtMTQ0LDkgKzE0
NCw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBpdGNoKCk7CiB9CiAKLUZsb2F0
UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QK
K0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlw
aCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogfQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uQ2xhc3NpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE5ICszNiwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OmFwcHJveEVxdWFsOwog
dXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjpyb3VuZFRvWmVybzsKIAotTG9vcEJsaW5uQ2xhc3Np
Zmllcjo6UmVzdWx0IExvb3BCbGlubkNsYXNzaWZpZXI6OmNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9p
bnQmIGMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMxLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGMzKQorTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0IExvb3BC
bGlubkNsYXNzaWZpZXI6OmNsYXNzaWZ5KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIGMzKQogewogICAgIC8vIENvbnN1bHQgdGhlIGNoYXB0ZXIgZm9yIHRoZSBk
ZWZpbml0aW9ucyBvZiB0aGUgZm9sbG93aW5nCiAgICAgLy8gKHRlcnNlKSB2YXJpYWJsZSBuYW1l
cy4gTm90ZSB0aGF0IHRoZSBiMC4uYjMgY29vcmRpbmF0ZXMgYXJlCiAgICAgLy8gaG9tb2dlbmVv
dXMsIHNvIHRoZSAieiIgdmFsdWUgKGFjdHVhbGx5IHRoZSB3IGNvb3JkaW5hdGUpIG11c3QKICAg
ICAvLyBiZSAxLjAuCi0gICAgRmxvYXRQb2ludDNEIGIwKGMwLngoKSwgYzAueSgpLCAxLjBmKTsK
LSAgICBGbG9hdFBvaW50M0QgYjEoYzEueCgpLCBjMS55KCksIDEuMGYpOwotICAgIEZsb2F0UG9p
bnQzRCBiMihjMi54KCksIGMyLnkoKSwgMS4wZik7Ci0gICAgRmxvYXRQb2ludDNEIGIzKGMzLngo
KSwgYzMueSgpLCAxLjBmKTsKKyAgICBHcmFwaGljc1BvaW50M0QgYjAoYzAueCgpLCBjMC55KCks
IDEuMGYpOworICAgIEdyYXBoaWNzUG9pbnQzRCBiMShjMS54KCksIGMxLnkoKSwgMS4wZik7Cisg
ICAgR3JhcGhpY3NQb2ludDNEIGIyKGMyLngoKSwgYzIueSgpLCAxLjBmKTsKKyAgICBHcmFwaGlj
c1BvaW50M0QgYjMoYzMueCgpLCBjMy55KCksIDEuMGYpOwogCiAgICAgLy8gQ29tcHV0ZSBhMS4u
YTMuCiAgICAgZmxvYXQgYTEgPSBiMCAqIGIzLmNyb3NzKGIyKTsKQEAgLTY2LDcgKzY2LDcgQEAg
TG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0IExvb3BCbGlubkNsYQogICAgIC8vIHRoZSB2ZWN0
b3IgZGVmaW5lZCBieSAoZDEsIGQyLCBkMyksIHRoaXMgZml4ZXMgdGhlIHByb2JsZW0gb2YgdGhl
CiAgICAgLy8gdGV4dHVyZSBjb29yZGluYXRlcyBnZXR0aW5nIHRvbyBsYXJnZSB3aXRob3V0IGFm
ZmVjdGluZyB0aGUKICAgICAvLyBjbGFzc2lmaWNhdGlvbiByZXN1bHRzLgotICAgIEZsb2F0UG9p
bnQzRCBuZChkMSwgZDIsIGQzKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbmQoZDEsIGQyLCBkMyk7
CiAgICAgbmQubm9ybWFsaXplKCk7CiAgICAgZDEgPSBuZC54KCk7CiAgICAgZDIgPSBuZC55KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uQ2xh
c3NpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkNsYXNzaWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEZsb2F0UG9pbnQ7CitjbGFzcyBHcmFwaGljc1BvaW50OwogCiAvLyBDbGFzc2lmaWVzIGN1Ymlj
IGN1cnZlcyBpbnRvIHNwZWNpZmljIHR5cGVzLgogY2xhc3MgTG9vcEJsaW5uQ2xhc3NpZmllciB7
CkBAIC03MCwxMCArNzAsMTAgQEAgcHVibGljOgogCiAgICAgLy8gQ2xhc3NpZmllcyB0aGUgZ2l2
ZW4gY3ViaWMgYmV6aWVyIGN1cnZlIHN0YXJ0aW5nIGF0IGMwLCBlbmRpbmcKICAgICAvLyBhdCBj
MywgYW5kIGFmZmVjdGVkIGJ5IGNvbnRyb2wgcG9pbnRzIGMxIGFuZCBjMi4KLSAgICBzdGF0aWMg
UmVzdWx0IGNsYXNzaWZ5KGNvbnN0IEZsb2F0UG9pbnQmIGMwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiBjMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGMzKTsKKyAgICBzdGF0aWMgUmVzdWx0IGNsYXNzaWZ5KGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQ
b2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50
JiBjMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMz
KTsKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGNsYXNzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5z
dGFudGlhdGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEwICs3
MiwxMCBAQCB2b2lkIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpUcmlhbmdsCiAgICAgLy8g
YWx3YXlzIHNwZWNpZmllZCBpbiBjb3VudGVyY2xvY2t3aXNlIG9yZGVyLiBUaGlzIG9yZGVycyB0
aGUKICAgICAvLyB2ZXJ0aWNlcyBjYW5vbmljYWxseSB3aGVuIHdhbGtpbmcgdGhlIGludGVyaW9y
IGVkZ2VzIGZyb20gdGhlCiAgICAgLy8gc3RhcnQgdG8gdGhlIGVuZCB2ZXJ0ZXguCi0gICAgRmxv
YXRQb2ludDNEIHBvaW50MChtX3ZlcnRpY2VzWzBdLT54eUNvb3JkaW5hdGVzKCkpOwotICAgIEZs
b2F0UG9pbnQzRCBwb2ludDEobV92ZXJ0aWNlc1sxXS0+eHlDb29yZGluYXRlcygpKTsKLSAgICBG
bG9hdFBvaW50M0QgcG9pbnQyKG1fdmVydGljZXNbMl0tPnh5Q29vcmRpbmF0ZXMoKSk7Ci0gICAg
RmxvYXRQb2ludDNEIGNyb3NzUHJvZHVjdCA9IChwb2ludDEgLSBwb2ludDApLmNyb3NzKHBvaW50
MiAtIHBvaW50MCk7CisgICAgR3JhcGhpY3NQb2ludDNEIHBvaW50MChtX3ZlcnRpY2VzWzBdLT54
eUNvb3JkaW5hdGVzKCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBwb2ludDEobV92ZXJ0aWNlc1sx
XS0+eHlDb29yZGluYXRlcygpKTsKKyAgICBHcmFwaGljc1BvaW50M0QgcG9pbnQyKG1fdmVydGlj
ZXNbMl0tPnh5Q29vcmRpbmF0ZXMoKSk7CisgICAgR3JhcGhpY3NQb2ludDNEIGNyb3NzUHJvZHVj
dCA9IChwb2ludDEgLSBwb2ludDApLmNyb3NzKHBvaW50MiAtIHBvaW50MCk7CiAgICAgaWYgKGNy
b3NzUHJvZHVjdC56KCkgPCAwKQogICAgICAgICBzdGQ6OnN3YXAobV92ZXJ0aWNlc1sxXSwgbV92
ZXJ0aWNlc1syXSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
TG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYs
OCBAQAogI2lmbmRlZiBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcl9oCiAjZGVmaW5lIExvb3BC
bGlubkxvY2FsVHJpYW5ndWxhdG9yX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSAiTG9vcEJsaW5uQ29uc3RhbnRzLmgiCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTUxLDEyICs1MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXNldEZsYWdzKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB4eUNvb3JkaW5hdGVzKCkgY29u
c3QKKyAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgeHlDb29yZGluYXRlcygpIGNvbnN0CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3h5Q29vcmRpbmF0ZXM7CiAgICAgICAgIH0K
IAotICAgICAgICBjb25zdCBGbG9hdFBvaW50M0QmIGtsbUNvb3JkaW5hdGVzKCkgY29uc3QKKyAg
ICAgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBrbG1Db29yZGluYXRlcygpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2tsbUNvb3JkaW5hdGVzOwogICAgICAgICB9CkBA
IC0xMDksOSArMTA5LDkgQEAgcHVibGljOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gMkQg
Y29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRleCBpbiB0aGUgcGxhbmUuCi0gICAgICAgIEZsb2F0UG9p
bnQgbV94eUNvb3JkaW5hdGVzOworICAgICAgICBHcmFwaGljc1BvaW50IG1feHlDb29yZGluYXRl
czsKICAgICAgICAgLy8gQ3ViaWMgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgcmVuZGVyaW5nIHRo
ZSBjdXJ2ZS4KLSAgICAgICAgRmxvYXRQb2ludDNEIG1fa2xtQ29vcmRpbmF0ZXM7CisgICAgICAg
IEdyYXBoaWNzUG9pbnQzRCBtX2tsbUNvb3JkaW5hdGVzOwogCiAgICAgICAgIC8vIEZsYWdzIGZv
ciB3YWxraW5nIGZyb20gdGhlIHN0YXJ0IHZlcnRleCB0byB0aGUgZW5kIHZlcnRleC4KICAgICAg
ICAgYm9vbCBtX2VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRo
VXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJM
b29wQmxpbm5NYXRoVXRpbHMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKQEAgLTM5LDE4ICszOSwxOCBAQCBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0
aFV0aWxzIHsKIG5hbWVzcGFjZSB7CiAKIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGxvY2FsIHRvIHRo
aXMgZmlsZS4KLWludCBvcmllbnRhdGlvbihjb25zdCBGbG9hdFBvaW50JiBwMSwKLSAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwMykKK2ludCBvcmllbnRhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBwMSwKKyAg
ICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwKKyAgICAgICAgICAgICAgICBj
b25zdCBHcmFwaGljc1BvaW50JiBwMykKIHsKICAgICBmbG9hdCBjcm9zc1Byb2R1Y3QgPSAocDIu
eSgpIC0gcDEueSgpKSAqIChwMy54KCkgLSBwMi54KCkpIC0gKHAzLnkoKSAtIHAyLnkoKSkgKiAo
cDIueCgpIC0gcDEueCgpKTsKICAgICByZXR1cm4gKGNyb3NzUHJvZHVjdCA8IDAuMGYpID8gLTEg
OiAoKGNyb3NzUHJvZHVjdCA+IDAuMGYpID8gMSA6IDApOwogfQogCi1ib29sIGVkZ2VFZGdlVGVz
dChjb25zdCBGbG9hdFNpemUmIHYwRGVsdGEsCi0gICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiB2MCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUwLAotICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdTEpCitib29sIGVkZ2VFZGdlVGVzdChj
b25zdCBHcmFwaGljc1NpemUmIHYwRGVsdGEsCisgICAgICAgICAgICAgICAgICBjb25zdCBHcmFw
aGljc1BvaW50JiB2MCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHUw
LAorICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgdTEpCiB7CiAgICAgLy8g
VGhpcyBlZGdlIHRvIGVkZ2UgdGVzdCBpcyBiYXNlZCBvbiBGcmFubGluIEFudG9uaW8ncyBnZW06
ICJGYXN0ZXIKICAgICAvLyBMaW5lIFNlZ21lbnQgSW50ZXJzZWN0aW9uIiwgaW4gR3JhcGhpY3Mg
R2VtcyBJSUksIHBwLiAxOTktMjAyLgpAQCAtNzgsMTMgKzc4LDEzIEBAIGJvb2wgZWRnZUVkZ2VU
ZXN0KGNvbnN0IEZsb2F0U2l6ZSYgdjBEZWwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
ZWRnZUFnYWluc3RUcmlhbmdsZUVkZ2VzKGNvbnN0IEZsb2F0UG9pbnQmIHYwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdjEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB1MCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHUxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdTIpCitib29sIGVkZ2VBZ2FpbnN0VHJpYW5nbGVF
ZGdlcyhjb25zdCBHcmFwaGljc1BvaW50JiB2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHYxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR3JhcGhpY3NQb2ludCYgdTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiB1MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHUyKQogewotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHYxIC0g
djA7CisgICAgR3JhcGhpY3NTaXplIGRlbHRhID0gdjEgLSB2MDsKICAgICAvLyBUZXN0IGVkZ2Ug
dTAsIHUxIGFnYWluc3QgdjAsIHYxLgogICAgIGlmIChlZGdlRWRnZVRlc3QoZGVsdGEsIHYwLCB1
MCwgdTEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExOCwxMiArMTE4LDEyIEBAIGZsb2F0
IHJvdW5kVG9aZXJvKGZsb2F0IHZhbCkKICAgICByZXR1cm4gdmFsOwogfQogCi1ib29sIGFwcHJv
eEVxdWFsKGNvbnN0IEZsb2F0UG9pbnQmIHYwLCBjb25zdCBGbG9hdFBvaW50JiB2MSkKK2Jvb2wg
YXBwcm94RXF1YWwoY29uc3QgR3JhcGhpY3NQb2ludCYgdjAsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHYxKQogewogICAgIHJldHVybiAodjAgLSB2MSkuZGlhZ29uYWxMZW5ndGhTcXVhcmVkKCkgPCBF
cHNpbG9uICogRXBzaWxvbjsKIH0KIAotYm9vbCBhcHByb3hFcXVhbChjb25zdCBGbG9hdFBvaW50
M0QmIHYwLCBjb25zdCBGbG9hdFBvaW50M0QmIHYxKQorYm9vbCBhcHByb3hFcXVhbChjb25zdCBH
cmFwaGljc1BvaW50M0QmIHYwLCBjb25zdCBHcmFwaGljc1BvaW50M0QmIHYxKQogewogICAgIHJl
dHVybiAodjAgLSB2MSkubGVuZ3RoU3F1YXJlZCgpIDwgRXBzaWxvbiAqIEVwc2lsb247CiB9CkBA
IC0xMzMsMTkgKzEzMywxOSBAQCBib29sIGFwcHJveEVxdWFsKGZsb2F0IGYwLCBmbG9hdCBmMSkK
ICAgICByZXR1cm4gZmFic2YoZjAgLSBmMSkgPCBFcHNpbG9uOwogfQogCi1ib29sIGxpbmVzSW50
ZXJzZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHAxLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBxMSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcDIs
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHEyKQorYm9vbCBsaW5lc0lu
dGVyc2VjdChjb25zdCBHcmFwaGljc1BvaW50JiBwMSwKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgR3JhcGhpY3NQb2ludCYgcTEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBxMikK
IHsKICAgICByZXR1cm4gKG9yaWVudGF0aW9uKHAxLCBxMSwgcDIpICE9IG9yaWVudGF0aW9uKHAx
LCBxMSwgcTIpCiAgICAgICAgICAgICAmJiBvcmllbnRhdGlvbihwMiwgcTIsIHAxKSAhPSBvcmll
bnRhdGlvbihwMiwgcTIsIHExKSk7CiB9CiAKLWJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
YSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIsCi0gICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjKQorYm9vbCBwb2ludEluVHJpYW5nbGUoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBhLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYg
YiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGMpCiB7CiAgICAg
Ly8gQWxnb3JpdGhtIGZyb20gaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5w
b2x5L2RlZmF1bHQuaHRtbAogICAgIGZsb2F0IHgwID0gYy54KCkgLSBhLngoKTsKQEAgLTE3Miwx
MiArMTcyLDEyIEBAIGJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0IEZsb2F0UG9pbnQmIHAKICAg
ICByZXR1cm4gKHUgPiAwLjBmKSAmJiAodiA+IDAuMGYpICYmICh1ICsgdiA8IDEuMGYpOwogfQog
Ci1ib29sIHRyaWFuZ2xlc092ZXJsYXAoY29uc3QgRmxvYXRQb2ludCYgYTEsCi0gICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjEsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgYzEsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgYTIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYjIsCi0g
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYzIpCitib29sIHRyaWFuZ2xl
c092ZXJsYXAoY29uc3QgR3JhcGhpY3NQb2ludCYgYTEsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYjEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgYTIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYjIsCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIpCiB7CiAgICAgLy8g
RGVyaXZlZCBmcm9tIGNvcGxhbmFyX3RyaV90cmkoKSBhdAogICAgIC8vIGh0dHA6Ly9qZ3QuYWtw
ZXRlcnMuY29tL3BhcGVycy9TaGVuSGVuZ1RhbmcwMy90cmlfdHJpLmh0bWwgLApAQCAtMjQzLDEz
ICsyNDMsMTMgQEAgZmxvYXQgZXZhbHVhdGVDdWJpYyhmbG9hdCBjb250cm9sUG9pbnQwLAogfQog
CiAvLyBFdmFsdWF0ZXMgdGhlIHBvaW50IG9uIHRoZSBzb3VyY2UgY3ViaWMgc3BlY2lmaWVkIGJ5
IHQsIDAgPD0gdCA8PSAxLjAuCi1GbG9hdFBvaW50IGV2YWx1YXRlQ3ViaWNBdChjb25zdCBGbG9h
dFBvaW50IGN1YmljWzRdLCBmbG9hdCB0KQorR3JhcGhpY3NQb2ludCBldmFsdWF0ZUN1YmljQXQo
Y29uc3QgR3JhcGhpY3NQb2ludCBjdWJpY1s0XSwgZmxvYXQgdCkKIHsKLSAgICByZXR1cm4gRmxv
YXRQb2ludChldmFsdWF0ZUN1YmljKGN1YmljWzBdLngoKSwgY3ViaWNbMV0ueCgpLCBjdWJpY1sy
XS54KCksIGN1YmljWzNdLngoKSwgdCksCisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoZXZhbHVh
dGVDdWJpYyhjdWJpY1swXS54KCksIGN1YmljWzFdLngoKSwgY3ViaWNbMl0ueCgpLCBjdWJpY1sz
XS54KCksIHQpLAogICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQ3ViaWMoY3ViaWNbMF0u
eSgpLCBjdWJpY1sxXS55KCksIGN1YmljWzJdLnkoKSwgY3ViaWNbM10ueSgpLCB0KSk7CiB9CiAK
LWJvb2wgeFJheUNyb3NzZXNNb25vdG9uaWNDdWJpYyhjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBG
bG9hdFBvaW50IGN1YmljWzRdLCBib29sJiBhbWJpZ3VvdXMpCitib29sIHhSYXlDcm9zc2VzTW9u
b3RvbmljQ3ViaWMoY29uc3QgWFJheSYgeFJheSwgY29uc3QgR3JhcGhpY3NQb2ludCBjdWJpY1s0
XSwgYm9vbCYgYW1iaWd1b3VzKQogewogICAgIGFtYmlndW91cyA9IGZhbHNlOwogCkBAIC0yOTIs
NyArMjkyLDcgQEAgYm9vbCB4UmF5Q3Jvc3Nlc01vbm90b25pY0N1YmljKGNvbnN0IFhSYQogICAg
IC8vIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHdlIGFyZSBnb2luZyB0byBnZXQgbW9yZSBwcmVjaXNp
b24gYnkKICAgICAvLyBpdGVyYXRpbmcgbW9yZSB0aW1lcyB0aGFuIHRoYXQuCiAgICAgY29uc3Qg
aW50IE1heEl0ZXJhdGlvbnMgPSAyMzsKLSAgICBGbG9hdFBvaW50IGV2YWx1YXRlZFBvaW50Owor
ICAgIEdyYXBoaWNzUG9pbnQgZXZhbHVhdGVkUG9pbnQ7CiAgICAgaW50IGl0ZXIgPSAwOwogICAg
IGZsb2F0IHVwcGVyVDsKICAgICBmbG9hdCBsb3dlclQ7CkBAIC00MTksNyArNDE5LDcgQEAgYm9v
bCBpc1VuaXRJbnRlcnZhbChmbG9hdCB4KQogfQogI2VuZGlmCiAKLXZvaWQgY2hvcEN1YmljQXRU
VmFsdWVzKGNvbnN0IEZsb2F0UG9pbnQgc3JjWzRdLCBGbG9hdFBvaW50IGRzdFtdLCBjb25zdCBm
bG9hdCB0VmFsdWVzW10sIGludCByb290cykKK3ZvaWQgY2hvcEN1YmljQXRUVmFsdWVzKGNvbnN0
IEdyYXBoaWNzUG9pbnQgc3JjWzRdLCBHcmFwaGljc1BvaW50IGRzdFtdLCBjb25zdCBmbG9hdCB0
VmFsdWVzW10sIGludCByb290cykKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCByb290cyAtIDE7ICsraSkgewpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgY2hvcEN1
YmljQXRUVmFsdWVzKGNvbnN0IEZsb2F0UG9pbnQKICAgICB9CiAKICAgICBmbG9hdCB0ID0gdFZh
bHVlc1swXTsKLSAgICBGbG9hdFBvaW50IHRtcFs0XTsKKyAgICBHcmFwaGljc1BvaW50IHRtcFs0
XTsKICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKICAgICAgICAgdG1wW2pdID0gc3Jj
W2pdOwogCkBAIC00NjAsMTMgKzQ2MCwxMyBAQCB2b2lkIGNob3BDdWJpY0F0VFZhbHVlcyhjb25z
dCBGbG9hdFBvaW50CiAgICAgfQogfQogCi12b2lkIGZsYXR0ZW5Eb3VibGVDdWJpY1lFeHRyZW1h
KEZsb2F0UG9pbnQgY29vcmRzWzddKQordm9pZCBmbGF0dGVuRG91YmxlQ3ViaWNZRXh0cmVtYShH
cmFwaGljc1BvaW50IGNvb3Jkc1s3XSkKIHsKICAgICBjb29yZHNbMl0uc2V0WShjb29yZHNbM10u
eSgpKTsKICAgICBjb29yZHNbNF0uc2V0WShjb29yZHNbM10ueSgpKTsKIH0KIAotaW50IGNob3BD
dWJpY0F0WUV4dHJlbWEoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzEw
XSkKK2ludCBjaG9wQ3ViaWNBdFlFeHRyZW1hKGNvbnN0IEdyYXBoaWNzUG9pbnQgc3JjWzRdLCBH
cmFwaGljc1BvaW50IGRzdFsxMF0pCiB7CiAgICAgZmxvYXQgdFZhbHVlc1syXTsKICAgICBpbnQg
cm9vdHMgPSBmaW5kQ3ViaWNFeHRyZW1hKHNyY1swXS55KCksIHNyY1sxXS55KCksIHNyY1syXS55
KCksIHNyY1szXS55KCksIHRWYWx1ZXMpOwpAQCAtNDg1LDcgKzQ4NSw3IEBAIGludCBjaG9wQ3Vi
aWNBdFlFeHRyZW1hKGNvbnN0IEZsb2F0UG9pbnQKIAogLy8gUHVibGljIGN1YmljIG9wZXJhdGlv
bnMuCiAKLXZvaWQgY2hvcEN1YmljQXQoY29uc3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9p
bnQgZHN0WzddLCBmbG9hdCB0KQordm9pZCBjaG9wQ3ViaWNBdChjb25zdCBHcmFwaGljc1BvaW50
IHNyY1s0XSwgR3JhcGhpY3NQb2ludCBkc3RbN10sIGZsb2F0IHQpCiB7CiAgICAgQVNTRVJUKHQg
Pj0gMCAmJiB0IDw9IDEpOwogCkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBjaG9wQ3ViaWNBdChj
b25zdCBGbG9hdFBvaW50IHNyY1s0XQogCiAvLyBQdWJsaWMgWFJheSBxdWVyaWVzLgogCi1ib29s
IHhSYXlDcm9zc2VzTGluZShjb25zdCBYUmF5JiB4UmF5LCBjb25zdCBGbG9hdFBvaW50IHB0c1sy
XSwgYm9vbCYgYW1iaWd1b3VzKQorYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUoY29uc3QgWFJheSYgeFJh
eSwgY29uc3QgR3JhcGhpY3NQb2ludCBwdHNbMl0sIGJvb2wmIGFtYmlndW91cykKIHsKICAgICBh
bWJpZ3VvdXMgPSBmYWxzZTsKIApAQCAtNTQ1LDEzICs1NDUsMTMgQEAgYm9vbCB4UmF5Q3Jvc3Nl
c0xpbmUoY29uc3QgWFJheSYgeFJheSwgYwogICAgIHJldHVybiB4UmF5LngoKSA8PSB4OwogfQog
Ci1pbnQgbnVtWFJheUNyb3NzaW5nc0ZvckN1YmljKGNvbnN0IFhSYXkmIHhSYXksIGNvbnN0IEZs
b2F0UG9pbnQgY3ViaWNbNF0sIGJvb2wmIGFtYmlndW91cykKK2ludCBudW1YUmF5Q3Jvc3Npbmdz
Rm9yQ3ViaWMoY29uc3QgWFJheSYgeFJheSwgY29uc3QgR3JhcGhpY3NQb2ludCBjdWJpY1s0XSwg
Ym9vbCYgYW1iaWd1b3VzKQogewogICAgIGludCBudW1Dcm9zc2luZ3MgPSAwOwotICAgIEZsb2F0
UG9pbnQgbW9ub3RvbmljQ3ViaWNzWzEwXTsKKyAgICBHcmFwaGljc1BvaW50IG1vbm90b25pY0N1
Ymljc1sxMF07CiAgICAgaW50IG51bU1vbm90b25pY0N1YmljcyA9IDEgKyBjaG9wQ3ViaWNBdFlF
eHRyZW1hKGN1YmljLCBtb25vdG9uaWNDdWJpY3MpOwogICAgIGFtYmlndW91cyA9IGZhbHNlOwot
ICAgIEZsb2F0UG9pbnQqIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgPSAmbW9ub3RvbmljQ3ViaWNz
WzBdOworICAgIEdyYXBoaWNzUG9pbnQqIG1vbm90b25pY0N1Ymljc1BvaW50ZXIgPSAmbW9ub3Rv
bmljQ3ViaWNzWzBdOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTW9ub3RvbmljQ3ViaWNz
OyArK2kpIHsKICAgICAgICAgaWYgKHhSYXlDcm9zc2VzTW9ub3RvbmljQ3ViaWMoeFJheSwgbW9u
b3RvbmljQ3ViaWNzUG9pbnRlciwgYW1iaWd1b3VzKSkKICAgICAgICAgICAgICsrbnVtQ3Jvc3Np
bmdzOwpAQCAtNTcwLDcgKzU3MCw3IEBAIGludCBudW1YUmF5Q3Jvc3NpbmdzRm9yQ3ViaWMoY29u
c3QgWFJheSYKICAqIGluICJHcmFwaGljcyBHZW1zIElWIiwgQWNhZGVtaWMgUHJlc3MsIDE5OTQK
ICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21wYXJlKGNvbnN0IEZsb2F0U2l6ZSYg
ZGVsdGEpCitzdGF0aWMgaW5saW5lIGludCBjb252ZXhDb21wYXJlKGNvbnN0IEdyYXBoaWNzU2l6
ZSYgZGVsdGEpCiB7CiAgICAgcmV0dXJuIChkZWx0YS53aWR0aCgpID4gMCkgPyAtMSA6IC8qIHgg
Y29vcmQgZGlmZiwgc2Vjb25kIHB0ID4gZmlyc3QgcHQgKi8KICAgICAgICAgICAgKGRlbHRhLndp
ZHRoKCkgPCAwKSA/ICAxIDogLyogeCBjb29yZCBkaWZmLCBzZWNvbmQgcHQgPCBmaXJzdCBwdCAq
LwpAQCAtNTc5LDEyICs1NzksMTIgQEAgc3RhdGljIGlubGluZSBpbnQgY29udmV4Q29tcGFyZShj
b25zdCBGbAogICAgICAgICAgICAwOyAvKiBzZWNvbmQgcHQgZXF1YWxzIGZpcnN0IHBvaW50ICov
CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmV4Q3Jvc3MoY29uc3QgRmxvYXRTaXplJiBw
LCBjb25zdCBGbG9hdFNpemUmIHEpCitzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZleENyb3NzKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgcCwgY29uc3QgR3JhcGhpY3NTaXplJiBxKQogewogICAgIHJldHVy
biBwLndpZHRoKCkgKiBxLmhlaWdodCgpIC0gcC5oZWlnaHQoKSAqIHEud2lkdGgoKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGNvbnZleENoZWNrVHJpcGxlKGNvbnN0IEZsb2F0U2l6ZSYgZGN1
ciwgY29uc3QgRmxvYXRTaXplJiBkcHJldiwgaW50KiBjdXJEaXIsIGludCogZGlyQ2hhbmdlcywg
aW50KiBhbmdsZVNpZ24pCitzdGF0aWMgaW5saW5lIGJvb2wgY29udmV4Q2hlY2tUcmlwbGUoY29u
c3QgR3JhcGhpY3NTaXplJiBkY3VyLCBjb25zdCBHcmFwaGljc1NpemUmIGRwcmV2LCBpbnQqIGN1
ckRpciwgaW50KiBkaXJDaGFuZ2VzLCBpbnQqIGFuZ2xlU2lnbikKIHsKICAgICBpbnQgdGhpc0Rp
ciA9IGNvbnZleENvbXBhcmUoZGN1cik7CiAgICAgaWYgKHRoaXNEaXIgPT0gLSpjdXJEaXIpCkBA
IC02MDMsMTEgKzYwMywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udmV4Q2hlY2tUcmlwbGUo
Y29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgaXNDb252ZXgoY29uc3QgRmxvYXRQb2lu
dCogdmVydGljZXMsIGludCBuVmVydGljZXMpCitib29sIGlzQ29udmV4KGNvbnN0IEdyYXBoaWNz
UG9pbnQqIHZlcnRpY2VzLCBpbnQgblZlcnRpY2VzKQogewogICAgIGludCBkaXJDaGFuZ2VzID0g
MCwgYW5nbGVTaWduID0gMDsKLSAgICBGbG9hdFBvaW50IHNlY29uZCwgdGhpcmQ7Ci0gICAgRmxv
YXRTaXplIGRwcmV2LCBkY3VyOworICAgIEdyYXBoaWNzUG9pbnQgc2Vjb25kLCB0aGlyZDsKKyAg
ICBHcmFwaGljc1NpemUgZHByZXYsIGRjdXI7CiAKICAgICAvKiBHZXQgZGlmZmVyZW50IHBvaW50
LCByZXR1cm4gaWYgbGVzcyB0aGFuIDMgZGlmZiBwb2ludHMuICovCiAgICAgaWYgKG5WZXJ0aWNl
cyA8IDMpCkBAIC02MjQsNyArNjI0LDcgQEAgYm9vbCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50
KiB2ZXJ0aWNlcwogICAgICAgICBpZiAoaSA+PSBuVmVydGljZXMpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIEZsb2F0UG9pbnQgc2F2ZVNlY29uZCA9IHNlY29uZDsKKyAg
ICBHcmFwaGljc1BvaW50IHNhdmVTZWNvbmQgPSBzZWNvbmQ7CiAgICAgaW50IGN1ckRpciA9IGNv
bnZleENvbXBhcmUoZHByZXYpOyAgICAgICAgLyogRmluZCBpbml0aWFsIGRpcmVjdGlvbiAqLwog
ICAgIHdoaWxlIChpIDwgblZlcnRpY2VzKSB7CiAgICAgICAgIC8qIEdldCBkaWZmZXJlbnQgcG9p
bnQsIGJyZWFrIGlmIG5vIG1vcmUgcG9pbnRzICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0aFV0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9M
b29wQmxpbm5NYXRoVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2lm
bmRlZiBMb29wQmxpbm5NYXRoVXRpbHNfaAogI2RlZmluZSBMb29wQmxpbm5NYXRoVXRpbHNfaAog
Ci0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNp
bmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDQ0ICszNiw0NCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzIHsKIAog
ZmxvYXQgcm91bmRUb1plcm8oZmxvYXQgdmFsKTsKLWJvb2wgYXBwcm94RXF1YWwoY29uc3QgRmxv
YXRQb2ludCYgdjAsIGNvbnN0IEZsb2F0UG9pbnQmIHYxKTsKLWJvb2wgYXBwcm94RXF1YWwoY29u
c3QgRmxvYXRQb2ludDNEJiB2MCwgY29uc3QgRmxvYXRQb2ludDNEJiB2MSk7Citib29sIGFwcHJv
eEVxdWFsKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHYwLCBjb25zdCBHcmFwaGljc1BvaW50JiB2MSk7
Citib29sIGFwcHJveEVxdWFsKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdjAsIGNvbnN0IEdyYXBo
aWNzUG9pbnQzRCYgdjEpOwogYm9vbCBhcHByb3hFcXVhbChmbG9hdCBmMCwgZmxvYXQgZjEpOwog
CiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGxpbmUgc2VnbWVudCBiZXR3ZWVuIChwMSwgcTEp
IGludGVyc2VjdHMKIC8vIHRoYXQgYmV0d2VlbiAocDIsIHEyKS4KLWJvb2wgbGluZXNJbnRlcnNl
Y3QoY29uc3QgRmxvYXRQb2ludCYgcDEsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHExLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwMiwKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcTIpOworYm9vbCBsaW5lc0ludGVy
c2VjdChjb25zdCBHcmFwaGljc1BvaW50JiBwMSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R3JhcGhpY3NQb2ludCYgcTEsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHAyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBxMik7CiAK
IC8vIERldGVybWluZXMgd2hldGhlciAicG9pbnQiIGlzIGluc2lkZSB0aGUgMkQgdHJpYW5nbGUg
ZGVmaW5lZCBieQogLy8gdmVydGljZXMgYSwgYiwgYW5kIGMuIFRoaXMgdGVzdCBkZWZpbmVzIHRo
YXQgcG9pbnRzIGV4YWN0bHkgb24gYW4KIC8vIGVkZ2UgYXJlIG5vdCBjb25zaWRlcmVkIHRvIGJl
IGluc2lkZSB0aGUgdHJpYW5nbGUuCi1ib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGEsCi0g
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAotICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgYyk7Citib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBH
cmFwaGljc1BvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGEsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBiLAor
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYyk7CiAKIC8vIERldGVy
bWluZXMgd2hldGhlciB0aGUgdHJpYW5nbGVzIGRlZmluZWQgYnkgdGhlIHBvaW50cyAoYTEsIGIx
LCBjMSkKIC8vIGFuZCAoYTIsIGIyLCBjMikgb3ZlcmxhcC4gVGhlIGRlZmluaXRpb24gb2YgdGhp
cyBmdW5jdGlvbiBpcyB0aGF0CiAvLyBpZiB0aGUgdHdvIHRyaWFuZ2xlcyBvbmx5IHNoYXJlIGFu
IGFkamFjZW50IGVkZ2Ugb3IgdmVydGV4LCB0aGV5CiAvLyBhcmUgbm90IGNvbnNpZGVyZWQgdG8g
b3ZlcmxhcC4KLWJvb2wgdHJpYW5nbGVzT3ZlcmxhcChjb25zdCBGbG9hdFBvaW50JiBhMSwKLSAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiMSwKLSAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBhMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBiMiwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjMik7Citib29s
IHRyaWFuZ2xlc092ZXJsYXAoY29uc3QgR3JhcGhpY3NQb2ludCYgYTEsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYjEsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhcGhpY3NQb2ludCYgYzEsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgYTIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2lu
dCYgYjIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYgYzIpOwog
CiAvLyBHaXZlbiBhIHNyYyBjdWJpYyBiZXppZXIsIGNob3BzIGl0IGF0IHRoZSBzcGVjaWZpZWQg
dCB2YWx1ZSwKIC8vIHdoZXJlIDAgPCB0IDwgMSwgYW5kIHJldHVybnMgdGhlIHR3byBuZXcgY3Vi
aWNzIGluIGRzdFswLi4zXQogLy8gYW5kIGRzdFszLi42XS4KLXZvaWQgY2hvcEN1YmljQXQoY29u
c3QgRmxvYXRQb2ludCBzcmNbNF0sIEZsb2F0UG9pbnQgZHN0WzddLCBmbG9hdCB0KTsKK3ZvaWQg
Y2hvcEN1YmljQXQoY29uc3QgR3JhcGhpY3NQb2ludCBzcmNbNF0sIEdyYXBoaWNzUG9pbnQgZHN0
WzddLCBmbG9hdCB0KTsKIAogLy8gIlgtUmF5IiBxdWVyaWVzLiBBbiBYUmF5IGlzIGEgaGFsZi1s
aW5lIG9yaWdpbmF0aW5nIGF0IHRoZSBnaXZlbgogLy8gcG9pbnQgYW5kIGV4dGVuZGluZyB0byB4
PStpbmZpbml0eS4KLXR5cGVkZWYgRmxvYXRQb2ludCBYUmF5OwordHlwZWRlZiBHcmFwaGljc1Bv
aW50IFhSYXk7CiAKIC8vIEdpdmVuIGFuIGFyYml0cmFyeSBjdWJpYyBiZXppZXIsIHJldHVybiB0
aGUgbnVtYmVyIG9mIHRpbWVzIGFuIFhSYXkKIC8vIGNyb3NzZXMgdGhlIGN1YmljLiBWYWxpZCBy
ZXR1cm4gdmFsdWVzIGFyZSBbMC4uM10uCkBAIC04OSw3ICs4OSw3IEBAIHR5cGVkZWYgRmxvYXRQ
b2ludCBYUmF5OwogLy8gY29vcmRpbmF0ZXMgb3IgYXQgYSB0YW5nZW50IHBvaW50LCBpbmRpY2F0
aW5nIHRoYXQgYW5vdGhlciBxdWVyeSB5CiAvLyBjb29yZGluYXRlIGlzIHByZWZlcnJlZCBmb3Ig
cm9idXN0bmVzcy4KIGludCBudW1YUmF5Q3Jvc3NpbmdzRm9yQ3ViaWMoY29uc3QgWFJheSYgeFJh
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCBjdWJpY1s0
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCBjdWJp
Y1s0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgYW1iaWd1b3VzKTsKIAog
Ly8gR2l2ZW4gYSBsaW5lIHNlZ21lbnQgZnJvbSBsaW5lRW5kcG9pbnRzWzBdIHRvIGxpbmVFbmRw
b2ludHNbMV0sIGFuZCBhbgpAQCAtOTgsMTEgKzk4LDExIEBAIGludCBudW1YUmF5Q3Jvc3Npbmdz
Rm9yQ3ViaWMoY29uc3QgWFJheSYKIC8vIGV4YWN0bHkgYXQgb25lIG9mIHRoZSBlbmRwb2ludHMn
IHkgY29vcmRpbmF0ZXMsIGluZGljYXRpbmcgdGhhdCBhbm90aGVyCiAvLyBxdWVyeSB5IGNvb3Jk
aW5hdGUgaXMgcHJlZmVycmVkIGZvciByb2J1c3RuZXNzLgogYm9vbCB4UmF5Q3Jvc3Nlc0xpbmUo
Y29uc3QgWFJheSYgeFJheSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQg
bGluZUVuZHBvaW50c1syXSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9p
bnQgbGluZUVuZHBvaW50c1syXSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGFtYmlndW91
cyk7CiAKIAotYm9vbCBpc0NvbnZleChjb25zdCBGbG9hdFBvaW50KiB2ZXJ0aWNlcywgaW50IG5W
ZXJ0aWNlcyk7Citib29sIGlzQ29udmV4KGNvbnN0IEdyYXBoaWNzUG9pbnQqIHZlcnRpY2VzLCBp
bnQgblZlcnRpY2VzKTsKIAogfSAvLyBuYW1lc3BhY2UgTG9vcEJsaW5uTWF0aFV0aWxzCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoUHJv
Y2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJMb29wQmxp
bm5QYXRoUHJvY2Vzc29yLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkxvb3BCbGlubkNsYXNzaWZpZXIuaCIKICNpbmNsdWRlICJM
b29wQmxpbm5Db25zdGFudHMuaCIKICNpbmNsdWRlICJMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRv
ci5oIgpAQCAtNjYsMTAgKzY2LDEwIEBAIHVzaW5nIExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBs
ZW1lbnRhdGkKIG5hbWVzcGFjZSB7CiAKICNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgdmFsdWVUb1N0
cmluZyhjb25zdCBGbG9hdFJlY3QmIGFyZykKK1N0cmluZyB2YWx1ZVRvU3RyaW5nKGNvbnN0IEdy
YXBoaWNzUmVjdCYgYXJnKQogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZCgiW0Zsb2F0UmVjdCB4PSIpOworICAgIGJ1aWxkZXIuYXBwZW5kKCJbR3JhcGhp
Y3NSZWN0IHg9Iik7CiAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoYXJnLngoKSkp
OwogICAgIGJ1aWxkZXIuYXBwZW5kKCIgeT0iKTsKICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6
Om51bWJlcihhcmcueSgpKSk7CkBAIC0xNTEsMTAgKzE1MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
SW5pdGlhbGl6ZXIgZm9yIGN1YmljIGN1cnZlIHNlZ21lbnRzLgogICAgIHZvaWQgc2V0dXAoUE9E
QXJlbmEqIGFyZW5hLAogICAgICAgICAgICAgICAgQ29udG91ciogY29udG91ciwKLSAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQgY3AwLAotICAgICAgICAgICAgICAgRmxvYXRQb2ludCBjcDEsCi0g
ICAgICAgICAgICAgICBGbG9hdFBvaW50IGNwMiwKLSAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
Y3AzKQorICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjcDAsCisgICAgICAgICAgICAgICBH
cmFwaGljc1BvaW50IGNwMSwKKyAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgY3AyLAorICAg
ICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBjcDMpCiAgICAgewogICAgICAgICBtX2FyZW5hID0g
YXJlbmE7CiAgICAgICAgIG1fY29udG91ciA9IGNvbnRvdXI7CkBAIC0xNjksOCArMTY5LDggQEAg
cHVibGljOgogICAgIC8vIEluaXRpYWxpemVyIGZvciBsaW5lIHNlZ21lbnRzLgogICAgIHZvaWQg
c2V0dXAoUE9EQXJlbmEqIGFyZW5hLAogICAgICAgICAgICAgICAgQ29udG91ciogY29udG91ciwK
LSAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcDAsCi0gICAgICAgICAgICAgICBGbG9hdFBvaW50
IHAxKQorICAgICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwMCwKKyAgICAgICAgICAgICAgIEdy
YXBoaWNzUG9pbnQgcDEpCiAgICAgewogICAgICAgICBtX2FyZW5hID0gYXJlbmE7CiAgICAgICAg
IG1fY29udG91ciA9IGNvbnRvdXI7CkBAIC0xODMsNyArMTgzLDcgQEAgcHVibGljOgogICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogCiAgICAgLy8gUmV0dXJucyB0aGUg
aSd0aCBjb250cm9sIHBvaW50LCAwIDw9IGkgPCA0LgotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGdl
dFBvaW50KGludCBpKQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGdldFBvaW50KGludCBpKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGkgPj0gMCAmJiBpIDwgNCk7CiAgICAgICAgIHJldHVybiBt
X3BvaW50c1tpXTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgLy8gU2VnbWVudC4K
ICAgICBTZWdtZW50KiBzdWJkaXZpZGUoZmxvYXQgcGFyYW0pCiAgICAgewotICAgICAgICBGbG9h
dFBvaW50IGRzdFs3XTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBkc3RbN107CiAgICAgICAgIGNo
b3BDdWJpY0F0KG1fcG9pbnRzLCBkc3QsIHBhcmFtKTsKICAgICAgICAgU2VnbWVudCogbGVmdCA9
IG1fYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFNlZ21lbnQ+KCk7CiAgICAgICAgIFNlZ21lbnQqIHJp
Z2h0ID0gbV9hcmVuYS0+YWxsb2NhdGVPYmplY3Q8U2VnbWVudD4oKTsKQEAgLTIzNCw3ICsyMzQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gcG9zc2libGUuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBs
ZWZ0bW9zdCBTZWdtZW50LgogICAgIFNlZ21lbnQqIHN1YmRpdmlkZSgpIHsgcmV0dXJuIHN1YmRp
dmlkZSgwLjVmKTsgfQogCi0gICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRpbmdCb3g7IH0KKyAgICBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsgfQogCiAgICAgLy8gQ29tcHV0
ZXMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHF1ZXJ5IGxpbmUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu
CiAgICAgLy8gcG9pbnQgYW5kIGV4dGVuZGluZyB0byB4PStpbmZpbml0eSBjcm9zc2VzIHRoaXMg
c2VnbWVudC4gT3V0Z29pbmcKQEAgLTI4OCwxMSArMjg4LDExIEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRoZSBnaXZlbiBpbnRlcmlvciB2ZXJ0ZXgsIDAgPD0gaW5kZXggPCBu
dW1iZXJPZkludGVyaW9yVmVydGljZXMoKS4KLSAgICBGbG9hdFBvaW50IGdldEludGVyaW9yVmVy
dGV4KGludCBpbmRleCkgY29uc3QKKyAgICBHcmFwaGljc1BvaW50IGdldEludGVyaW9yVmVydGV4
KGludCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmRleCA+PSAwICYmIGlu
ZGV4IDwgbnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCkpOwogICAgICAgICBpZiAobV9raW5kID09
IEN1YmljKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHJlczsKKyAgICAgICAgICAgIEdyYXBo
aWNzUG9pbnQgcmVzOwogICAgICAgICAgICAgaWYgKG1fdHJpYW5ndWxhdG9yKSB7CiAgICAgICAg
ICAgICAgICAgTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6OlZlcnRleCogdmVydGV4ID0gbV90
cmlhbmd1bGF0b3ItPmdldEludGVyaW9yVmVydGV4KGluZGV4KTsKICAgICAgICAgICAgICAgICBp
ZiAodmVydGV4KQpAQCAtMzQzLDExICszNDMsMTEgQEAgcHVibGljOgogCiAgICAgUE9EQXJlbmEq
IG1fYXJlbmE7CiAgICAgS2luZCBtX2tpbmQ7Ci0gICAgRmxvYXRQb2ludCBtX3BvaW50c1s0XTsK
KyAgICBHcmFwaGljc1BvaW50IG1fcG9pbnRzWzRdOwogICAgIFNlZ21lbnQqIG1fcHJldjsKICAg
ICBTZWdtZW50KiBtX25leHQ7CiAgICAgQ29udG91ciogbV9jb250b3VyOwotICAgIEZsb2F0UmVj
dCBtX2JvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX2JvdW5kaW5nQm94OwogICAgIExv
b3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yKiBtX3RyaWFuZ3VsYXRvcjsKICAgICBib29sIG1fbWFy
a2VkRm9yU3ViZGl2aXNpb247CiB9OwpAQCAtNDMzLDcgKzQzMyw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzT3JpZW50ZWRDb3VudGVyQ2xvY2t3aXNlKCkgY29uc3QgeyByZXR1cm4gbV9pc09yaWVu
dGVkQ291bnRlckNsb2Nrd2lzZTsgfQogICAgIHZvaWQgc2V0SXNPcmllbnRlZENvdW50ZXJDbG9j
a3dpc2UoYm9vbCBpc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZSkgeyBtX2lzT3JpZW50ZWRDb3Vu
dGVyQ2xvY2t3aXNlID0gaXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2U7IH0KIAotICAgIGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRpbmdCb3goKQorICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRp
bmdCb3goKQogICAgIHsKICAgICAgICAgaWYgKG1fYm91bmRpbmdCb3hEaXJ0eSkgewogICAgICAg
ICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CkBAIC00NzMsNyArNDczLDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9pc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZTsKIAotICAgIEZsb2F0UmVjdCBt
X2JvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX2JvdW5kaW5nQm94OwogICAgIGJvb2wg
bV9ib3VuZGluZ0JveERpcnR5OwogCiAgICAgLy8gV2hpY2ggc2lkZSBvZiB0aGlzIGNvbnRvdXIg
c2hvdWxkIGJlIGZpbGxlZC4KQEAgLTU5Miw5ICs1OTIsOSBAQCB2b2lkIExvb3BCbGlublBhdGhQ
cm9jZXNzb3I6OnByb2Nlc3MoY29uCiAjaWZkZWYgTE9PUF9CTElOTl9QQVRIX0NBQ0hFX0RFQlVH
X0lOVEVSSU9SX0VER0VTCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93IHRoZSBlbmQg
dXNlciB0aGUgaW50ZXJpb3IgZWRnZXMgYXMgd2VsbAogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCBzZWctPm51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcygpOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHZlcnQgPSBzZWctPmdl
dEludGVyaW9yVmVydGV4KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
UG9pbnQgdmVydCA9IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRHVwbGljYXRlIHByZXZpb3VzIHZlcnRleCB0byBiZSBhYmxlIHRvIGRy
YXcgR0xfTElORVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHByZXYg
PSBzZWctPmdldEludGVyaW9yVmVydGV4KGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHcmFwaGljc1BvaW50IHByZXYgPSBzZWctPmdldEludGVyaW9yVmVydGV4KGkgLSAxKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGRJbnRlcmlvckVkZ2VWZXJ0ZXgo
cHJldi54KCksIHByZXYueSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5h
ZGRJbnRlcmlvckVkZ2VWZXJ0ZXgodmVydC54KCksIHZlcnQueSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTcxNiw3ICs3MTYsNyBAQCBWZWN0b3I8U2VnbWVudCo+IExvb3BCbGlu
blBhdGhQcm9jZXNzb3I6CiAgICAgZm9yIChWZWN0b3I8Q29udG91cio+OjppdGVyYXRvciBpdGVy
ID0gbV9jb250b3Vycy5iZWdpbigpOyBpdGVyICE9IG1fY29udG91cnMuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKICAgICAgICAgZm9yIChTZWdtZW50KiBz
ZWcgPSBjdXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBzZWctPm5leHQoKSkg
ewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCA9IHNlZy0+Ym91bmRp
bmdCb3goKTsKKyAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3ggPSBz
ZWctPmJvdW5kaW5nQm94KCk7CiAgICAgICAgICAgICBpZiAoYm91bmRpbmdCb3gueSgpIDw9IHkg
JiYgeSA8PSBib3VuZGluZ0JveC5tYXhZKCkpCiAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChz
ZWcpOwogICAgICAgICB9CkBAIC03NDYsNyArNzQ2LDcgQEAgdm9pZCBMb29wQmxpbm5QYXRoUHJv
Y2Vzc29yOjpkZXRlcm1pbmVTaQogICAgICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKICAgICAg
ICAgZGV0ZXJtaW5lT3JpZW50YXRpb24oY3VyKTsKICAgICAgICAgZm9yIChTZWdtZW50KiBzZWcg
PSBjdXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBzZWctPm5leHQoKSkgewot
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCA9IHNlZy0+Ym91bmRpbmdC
b3goKTsKKyAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3ggPSBzZWct
PmJvdW5kaW5nQm94KCk7CiAgICAgICAgICAgICB0cmVlLmFkZCh0cmVlLmNyZWF0ZUludGVydmFs
KGJvdW5kaW5nQm94LnkoKSwgYm91bmRpbmdCb3gubWF4WSgpLCBzZWcpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lkIExvb3BCbGlublBhdGhQcm9jZXNzb3I6OmRl
dGVybWluZVNpCiAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHNlZ21lbnRzIGNvbWluZyBmcm9t
IHRoZSBzYW1lIGNvbnRvdXIuCiAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U2VnbWVudC0+Y29u
dG91cigpICE9IGN1cikgewogICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHBlcmZvcm0gcXVl
cmllcyB0aGF0IGNhbiBhZmZlY3QgdGhlIGNvbXB1dGF0aW9uLgotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gcXVlcnlTZWdtZW50LT5jb250b3VyKCkt
PmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYg
Ym91bmRpbmdCb3ggPSBxdWVyeVNlZ21lbnQtPmNvbnRvdXIoKS0+Ym91bmRpbmdCb3goKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNlZy0+Z2V0UG9pbnQoMCkueCgpID49IGJvdW5kaW5nQm94
LngoKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VnLT5nZXRQb2ludCgwKS54KCkgPD0g
Ym91bmRpbmdCb3gubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1Dcm9zc2lu
Z3MgKz0gcXVlcnlTZWdtZW50LT5udW1Dcm9zc2luZ3NGb3JYUmF5KHNlZy0+Z2V0UG9pbnQoMCks
CkBAIC04NDAsOCArODQwLDggQEAgdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpkZXRlcm1p
bmVPcgogICAgICAgICAgc2VnID0gc2VnLT5uZXh0KCkpIHsKICAgICAgICAgaW50IGxpbWl0ID0g
KHNlZy0+a2luZCgpID09IFNlZ21lbnQ6OkN1YmljKSA/IDQgOiAyOwogICAgICAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IGxpbWl0OyBpKyspIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQm
IHByZXZQb2ludCA9IHNlZy0+Z2V0UG9pbnQoaSAtIDEpOwotICAgICAgICAgICAgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQgPSBzZWctPmdldFBvaW50KGkpOworICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcHJldlBvaW50ID0gc2VnLT5nZXRQb2ludChpIC0gMSk7CisgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCA9IHNlZy0+Z2V0UG9pbnQoaSk7CiAgICAgICAg
ICAgICBmbG9hdCBjdXJBcmVhID0gcHJldlBvaW50LngoKSAqIHBvaW50LnkoKSAtIHByZXZQb2lu
dC55KCkgKiBwb2ludC54KCk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgaWYgKG1fdmVy
Ym9zZUxvZ2dpbmcpCkBAIC05ODMsNyArOTgzLDcgQEAgdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vz
c29yOjpzdWJkaXZpZGVDdQogICAgICAgICAgICAgQVNTRVJUKHNlZy0+a2luZCgpID09IFNlZ21l
bnQ6OkN1YmljKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VnLT5udW1iZXJP
ZlRyaWFuZ2xlcygpOyBpKyspIHsKICAgICAgICAgICAgICAgICBMb29wQmxpbm5Mb2NhbFRyaWFu
Z3VsYXRvcjo6VHJpYW5nbGUqIHRyaWFuZ2xlID0gc2VnLT5nZXRUcmlhbmdsZShpKTsKLSAgICAg
ICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgICAgICAgICAgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kaW5nQm94OwogICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94LmZpdFRvUG9p
bnRzKHRyaWFuZ2xlLT5nZXRWZXJ0ZXgoMCktPnh5Q29vcmRpbmF0ZXMoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZS0+Z2V0VmVydGV4KDEpLT54eUNv
b3JkaW5hdGVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJp
YW5nbGUtPmdldFZlcnRleCgyKS0+eHlDb29yZGluYXRlcygpKTsKQEAgLTExODIsNyArMTE4Miw3
IEBAIHZvaWQgTG9vcEJsaW5uUGF0aFByb2Nlc3Nvcjo6dGVzc2VsbGF0ZUkKICAgICAgICAgZm9y
IChTZWdtZW50KiBzZWcgPSBjdXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBz
ZWctPm5leHQoKSkgewogICAgICAgICAgICAgaW50IG51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcyA9
IHNlZy0+bnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCk7CiAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcyAtIDE7IGkrKykgewotICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBzZWctPmdldEludGVyaW9yVmVydGV4KGkpOworICAg
ICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQgPSBzZWctPmdldEludGVyaW9yVmVydGV4
KGkpOwogICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgewogICAgICAgICAgICAgICAgICAgICBm
aXJzdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhEYXRhLmFwcGVuZChwb2lu
dC54KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BC
bGlublRleHR1cmVDb29yZHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4
dHVyZUNvb3Jkcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE2ICs1OSwxNiBAQCBMb29wQmxp
bm5UZXh0dXJlQ29vcmRzOjpSZXN1bHQgTG9vcEJsaW5uCiAgICAgICAgIGZsb2F0IG10ID0gbHQ7
CiAgICAgICAgIGZsb2F0IGx0TWludXNMcyA9IGx0IC0gbHM7CiAgICAgICAgIGZsb2F0IG10TWlu
dXNNcyA9IG10IC0gbXM7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1swXSA9IEZsb2F0
UG9pbnQzRChscyAqIG1zLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBHcmFw
aGljc1BvaW50M0QobHMgKiBtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxzICogbHMgKiBscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1zICogbXMgKiBtcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29y
ZGluYXRlc1sxXSA9IEZsb2F0UG9pbnQzRChPbmVUaGlyZCAqICgzLjBmICogbHMgKiBtcyAtIGxz
ICogbXQgLSBsdCAqIG1zKSwKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzFdID0gR3Jh
cGhpY3NQb2ludDNEKE9uZVRoaXJkICogKDMuMGYgKiBscyAqIG1zIC0gbHMgKiBtdCAtIGx0ICog
bXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMg
KiBscyAqIChscyAtIGx0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1zICogbXMgKiAobXMgLSBtdCkpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRp
bmF0ZXNbMl0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAobHQgKiAobXQgLSAyLjBmICogbXMp
ICsgbHMgKiAoMy4wZiAqIG1zIC0gMi4wZiAqIG10KSksCisgICAgICAgIHJlc3VsdC5rbG1Db29y
ZGluYXRlc1syXSA9IEdyYXBoaWNzUG9pbnQzRChPbmVUaGlyZCAqIChsdCAqIChtdCAtIDIuMGYg
KiBtcykgKyBscyAqICgzLjBmICogbXMgLSAyLjBmICogbXQpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0TWludXNMcyAqIGx0TWludXNMcyAqIGxz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRNaW51
c01zICogbXRNaW51c01zICogbXMpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10g
PSBGbG9hdFBvaW50M0QobHRNaW51c0xzICogbXRNaW51c01zLAorICAgICAgICByZXN1bHQua2xt
Q29vcmRpbmF0ZXNbM10gPSBHcmFwaGljc1BvaW50M0QobHRNaW51c0xzICogbXRNaW51c01zLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShsdE1pbnVz
THMgKiBsdE1pbnVzTHMgKiBsdE1pbnVzTHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLShtdE1pbnVzTXMgKiBtdE1pbnVzTXMgKiBtdE1pbnVzTXMp
KTsKICAgICAgICAgaWYgKGNsYXNzaWZpY2F0aW9uLmQxIDwgMC4wZikKQEAgLTEwMSwxNiArMTAx
LDE2IEBAIExvb3BCbGlublRleHR1cmVDb29yZHM6OlJlc3VsdCBMb29wQmxpbm4KIAogICAgICAg
ICBmbG9hdCBsdE1pbnVzTHMgPSBsdCAtIGxzOwogICAgICAgICBmbG9hdCBtdE1pbnVzTXMgPSBt
dCAtIG1zOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0gPSBGbG9hdFBvaW50M0Qo
bHMgKiBtcywKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gR3JhcGhpY3NQb2lu
dDNEKGxzICogbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBscyAqIGxzICogbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBscyAqIG1zICogbXMpOwotICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNb
MV0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQgKiAoLWxzICogbXQgLSBsdCAqIG1zICsgMy4wZiAq
IGxzICogbXMpLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBHcmFwaGljc1Bv
aW50M0QoT25lVGhpcmQgKiAoLWxzICogbXQgLSBsdCAqIG1zICsgMy4wZiAqIGxzICogbXMpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRoaXJk
ICogbHMgKiAobHMgKiAobXQgLSAzLjBmICogbXMpICsgMi4wZiAqIGx0ICogbXMpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLU9uZVRoaXJkICogbXMg
KiAobHMgKiAoMi4wZiAqIG10IC0gMy4wZiAqIG1zKSArIGx0ICogbXMpKTsKLSAgICAgICAgcmVz
dWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNEKE9uZVRoaXJkICogKGx0ICogKG10
IC0gMi4wZiAqIG1zKSArIGxzICogKDMuMGYgKiBtcyAtIDIuMGYgKiBtdCkpLAorICAgICAgICBy
ZXN1bHQua2xtQ29vcmRpbmF0ZXNbMl0gPSBHcmFwaGljc1BvaW50M0QoT25lVGhpcmQgKiAobHQg
KiAobXQgLSAyLjBmICogbXMpICsgbHMgKiAoMy4wZiAqIG1zIC0gMi4wZiAqIG10KSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmVUaGlyZCAqIChs
dCAtIGxzKSAqIChscyAqICgyLjBmICogbXQgLSAzLjBmICogbXMpICsgbHQgKiBtcyksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmVUaGlyZCAqICht
dCAtIG1zKSAqIChscyAqIChtdCAtIDMuMGYgKiBtcykgKyAyLjBmICogbHQgKiBtcykpOwotICAg
ICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBGbG9hdFBvaW50M0QobHRNaW51c0xzICog
bXRNaW51c01zLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbM10gPSBHcmFwaGljc1Bv
aW50M0QobHRNaW51c0xzICogbXRNaW51c01zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLShsdE1pbnVzTHMgKiBsdE1pbnVzTHMpICogbXRNaW51c01z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWx0TWlu
dXNMcyAqIG10TWludXNNcyAqIG10TWludXNNcyk7CiAgICAgICAgIHJldmVyc2VPcmllbnRhdGlv
biA9ICgoY2xhc3NpZmljYXRpb24uZDEgPiAwLjBmICYmIHJlc3VsdC5rbG1Db29yZGluYXRlc1sw
XS54KCkgPCAwLjBmKQpAQCAtMTIyLDI2ICsxMjIsMjYgQEAgTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
czo6UmVzdWx0IExvb3BCbGlubgogICAgICAgICBmbG9hdCBscyA9IGNsYXNzaWZpY2F0aW9uLmQz
OwogICAgICAgICBmbG9hdCBsdCA9IDMuMGYgKiBjbGFzc2lmaWNhdGlvbi5kMjsKICAgICAgICAg
ZmxvYXQgbHNNaW51c0x0ID0gbHMgLSBsdDsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVz
WzBdID0gRmxvYXRQb2ludDNEKGxzLAorICAgICAgICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMF0g
PSBHcmFwaGljc1BvaW50M0QobHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBscyAqIGxzICogbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLjBmKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVz
WzFdID0gRmxvYXRQb2ludDNEKGxzIC0gT25lVGhpcmQgKiBsdCwKKyAgICAgICAgcmVzdWx0Lmts
bUNvb3JkaW5hdGVzWzFdID0gR3JhcGhpY3NQb2ludDNEKGxzIC0gT25lVGhpcmQgKiBsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzICogbHMgKiBs
c01pbnVzTHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLjBmKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNE
KGxzIC0gVHdvVGhpcmRzICogbHQsCisgICAgICAgIHJlc3VsdC5rbG1Db29yZGluYXRlc1syXSA9
IEdyYXBoaWNzUG9pbnQzRChscyAtIFR3b1RoaXJkcyAqIGx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNNaW51c0x0ICogbHNNaW51c0x0ICogbHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmKTsK
LSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0gRmxvYXRQb2ludDNEKGxzTWludXNM
dCwKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzNdID0gR3JhcGhpY3NQb2ludDNEKGxz
TWludXNMdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxzTWludXNMdCAqIGxzTWludXNMdCAqIGxzTWludXNMdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKICAgICBjYXNlIExvb3BCbGlubkNsYXNzaWZpZXI6OmtRdWFkcmF0aWM6IHsKLSAgICAgICAg
cmVzdWx0LmtsbUNvb3JkaW5hdGVzWzBdID0gRmxvYXRQb2ludDNEKDAsIDAsIDApOwotICAgICAg
ICByZXN1bHQua2xtQ29vcmRpbmF0ZXNbMV0gPSBGbG9hdFBvaW50M0QoT25lVGhpcmQsIDAsIE9u
ZVRoaXJkKTsKLSAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gRmxvYXRQb2ludDNE
KFR3b1RoaXJkcywgT25lVGhpcmQsIFR3b1RoaXJkcyk7Ci0gICAgICAgIHJlc3VsdC5rbG1Db29y
ZGluYXRlc1szXSA9IEZsb2F0UG9pbnQzRCgxLCAxLCAxKTsKKyAgICAgICAgcmVzdWx0LmtsbUNv
b3JkaW5hdGVzWzBdID0gR3JhcGhpY3NQb2ludDNEKDAsIDAsIDApOworICAgICAgICByZXN1bHQu
a2xtQ29vcmRpbmF0ZXNbMV0gPSBHcmFwaGljc1BvaW50M0QoT25lVGhpcmQsIDAsIE9uZVRoaXJk
KTsKKyAgICAgICAgcmVzdWx0LmtsbUNvb3JkaW5hdGVzWzJdID0gR3JhcGhpY3NQb2ludDNEKFR3
b1RoaXJkcywgT25lVGhpcmQsIFR3b1RoaXJkcyk7CisgICAgICAgIHJlc3VsdC5rbG1Db29yZGlu
YXRlc1szXSA9IEdyYXBoaWNzUG9pbnQzRCgxLCAxLCAxKTsKICAgICAgICAgaWYgKGNsYXNzaWZp
Y2F0aW9uLmQzIDwgMCkKICAgICAgICAgICAgIHJldmVyc2VPcmllbnRhdGlvbiA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlublRleHR1cmVDb29yZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5U
ZXh0dXJlQ29vcmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
TG9vcEJsaW5uVGV4dHVyZUNvb3Jkc19oCiAjZGVmaW5lIExvb3BCbGlublRleHR1cmVDb29yZHNf
aAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNE
LmgiCiAjaW5jbHVkZSAiTG9vcEJsaW5uQ2xhc3NpZmllci5oIgogI2luY2x1ZGUgIkxvb3BCbGlu
bkNvbnN0YW50cy5oIgogCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBU
aGUgKGssIGwsIG0pIHRleHR1cmUgY29vcmRpbmF0ZXMgdGhhdCBhcmUgdG8gYmUgYXNzb2NpYXRl
ZAogICAgICAgICAvLyB3aXRoIHRoZSBmb3VyIGNvbnRyb2wgcG9pbnRzIG9mIHRoZSBjdWJpYyBj
dXJ2ZS4KLSAgICAgICAgRmxvYXRQb2ludDNEIGtsbUNvb3JkaW5hdGVzWzRdOworICAgICAgICBH
cmFwaGljc1BvaW50M0Qga2xtQ29vcmRpbmF0ZXNbNF07CiAKICAgICAgICAgLy8gSW5kaWNhdGVz
IHdoZXRoZXIgdGhlIGN1cnZlIGlzIGEgbGluZSBvciBhIHBvaW50LCBpbiB3aGljaCBjYXNlCiAg
ICAgICAgIC8vIHdlIGRvIG5vdCBuZWVkIHRvIGFkZCBpdHMgdHJpYW5nbGVzIHRvIHRoZSBtZXNo
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0
dXJlLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNp
bmNsdWRlICJUZXh0dXJlLmgiCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGls
aW5nRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUg
IlRpbGluZ0RhdGEuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAK
QEAgLTE0NCwxMCArMTQ0LDEwIEBAIEludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhP
dXRlckIKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1GbG9hdFJlY3QgVGlsaW5nRGF0YTo6dGls
ZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0CitHcmFwaGljc1JlY3QgVGlsaW5nRGF0
YTo6dGlsZUJvdW5kc05vcm1hbGl6ZWQoaW50IHRpbGUpIGNvbnN0CiB7CiAgICAgYXNzZXJ0VGls
ZSh0aWxlKTsKLSAgICBGbG9hdFJlY3QgYm91bmRzKHRpbGVCb3VuZHModGlsZSkpOworICAgIEdy
YXBoaWNzUmVjdCBib3VuZHModGlsZUJvdW5kcyh0aWxlKSk7CiAgICAgYm91bmRzLnNjYWxlKDEu
MGYgLyBtX3RvdGFsU2l6ZVgsIDEuMGYgLyBtX3RvdGFsU2l6ZVkpOwogICAgIHJldHVybiBib3Vu
ZHM7CiB9CkBAIC0yMTMsMjEgKzIxMywyMSBAQCBJbnRSZWN0IFRpbGluZ0RhdGE6Om92ZXJsYXBw
ZWRUaWxlSW5kaWNlCiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgciAtIHgsIGIgLSB5KTsKIH0K
IAotSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0ICZzcmNSZWN0KSBjb25zdAorSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFw
cGVkVGlsZUluZGljZXMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0ICZzcmNSZWN0KSBjb25z
dAogewogICAgIHJldHVybiBvdmVybGFwcGVkVGlsZUluZGljZXMoZW5jbG9zaW5nSW50UmVjdChz
cmNSZWN0KSk7CiB9CiAKLXZvaWQgVGlsaW5nRGF0YTo6aW50ZXJzZWN0RHJhd1F1YWQoY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGludCB0aWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QqIG5ld1NyYywgRmxv
YXRSZWN0KiBuZXdEc3QpIGNvbnN0Cit2b2lkIFRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFk
KGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0
LCBpbnQgdGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NS
ZWN0KiBuZXdTcmMsIEdyYXBoaWNzUmVjdCogbmV3RHN0KSBjb25zdAogewogICAgIC8vIEludGVy
c2VjdCB3aXRoIHRpbGUKLSAgICBGbG9hdFJlY3QgdGlsZUJvdW5kcyA9IHRoaXMtPnRpbGVCb3Vu
ZHModGlsZSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3RJbnRlcnNlY3RlZCA9IHNyY1JlY3Q7Cisg
ICAgR3JhcGhpY3NSZWN0IHRpbGVCb3VuZHMgPSB0aGlzLT50aWxlQm91bmRzKHRpbGUpOworICAg
IEdyYXBoaWNzUmVjdCBzcmNSZWN0SW50ZXJzZWN0ZWQgPSBzcmNSZWN0OwogICAgIHNyY1JlY3RJ
bnRlcnNlY3RlZC5pbnRlcnNlY3QodGlsZUJvdW5kcyk7CiAKICAgICBpZiAoc3JjUmVjdEludGVy
c2VjdGVkLmlzRW1wdHkoKSkgewotICAgICAgICAqbmV3U3JjID0gKm5ld0RzdCA9IEZsb2F0UmVj
dCgwLCAwLCAwLCAwKTsKKyAgICAgICAgKm5ld1NyYyA9ICpuZXdEc3QgPSBHcmFwaGljc1JlY3Qo
MCwgMCwgMCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0MSw3ICsyNDEsNyBA
QCB2b2lkIFRpbGluZ0RhdGE6OmludGVyc2VjdERyYXdRdWFkKGNvbnN0CiAgICAgICAgIC10aWxl
Qm91bmRzLngoKSArIG1fYm9yZGVyVGV4ZWxzLAogICAgICAgICAtdGlsZUJvdW5kcy55KCkgKyBt
X2JvcmRlclRleGVscyk7CiAKLSAgICAqbmV3RHN0ID0gRmxvYXRSZWN0KAorICAgICpuZXdEc3Qg
PSBHcmFwaGljc1JlY3QoCiAgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1YICogZHN0UmVj
dC53aWR0aCgpICsgZHN0UmVjdC54KCksCiAgICAgICAgIHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1Z
ICogZHN0UmVjdC5oZWlnaHQoKSArIGRzdFJlY3QueSgpLAogICAgICAgICBzcmNSZWN0SW50ZXJz
ZWN0ZWROb3JtVyAqIGRzdFJlY3Qud2lkdGgoKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuaAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGlsaW5nRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNz
IEludFBvaW50OwogCkBAIC02MiwxNyArNjIsMTcgQEAgcHVibGljOgogICAgIEludFJlY3QgdGls
ZUJvdW5kcyhpbnQgdGlsZSkgY29uc3Q7CiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRl
cihpbnQgdGlsZSkgY29uc3Q7CiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aE91dGVyQm9yZGVy
KGludCB0aWxlKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgdGlsZUJvdW5kc05vcm1hbGl6ZWQoaW50
IHRpbGUpIGNvbnN0OworICAgIEdyYXBoaWNzUmVjdCB0aWxlQm91bmRzTm9ybWFsaXplZChpbnQg
dGlsZSkgY29uc3Q7CiAgICAgaW50IHRpbGVQb3NpdGlvblgoaW50IHhJbmRleCkgY29uc3Q7CiAg
ICAgaW50IHRpbGVQb3NpdGlvblkoaW50IHlJbmRleCkgY29uc3Q7CiAgICAgaW50IHRpbGVTaXpl
WChpbnQgeEluZGV4KSBjb25zdDsKICAgICBpbnQgdGlsZVNpemVZKGludCB5SW5kZXgpIGNvbnN0
OwogICAgIEludFJlY3Qgb3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0OwotICAgIEludFJlY3Qgb3ZlcmxhcHBlZFRpbGVJbmRpY2VzKGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgSW50UmVjdCBvdmVybGFwcGVkVGlsZUluZGljZXMo
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAogICAgIC8vIEdpdmVuIGEgc2V0
IG9mIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGEgZHJhd2luZyBxdWFk
CiAgICAgLy8gaW4gdGV4ZWwgdW5pdHMsIHJldHVybnMgYWRqdXN0ZWQgZGF0YSB0byByZW5kZXIg
anVzdCB0aGUgb25lIHRpbGUuCi0gICAgdm9pZCBpbnRlcnNlY3REcmF3UXVhZChjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgaW50IHRpbGUsIEZsb2F0
UmVjdCogbmV3U3JjLCBGbG9hdFJlY3QqIG5ld0RzdCkgY29uc3Q7CisgICAgdm9pZCBpbnRlcnNl
Y3REcmF3UXVhZChjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEdyYXBoaWNzUmVj
dCYgZHN0UmVjdCwgaW50IHRpbGUsIEdyYXBoaWNzUmVjdCogbmV3U3JjLCBHcmFwaGljc1JlY3Qq
IG5ld0RzdCkgY29uc3Q7CiAKICAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gdGlsZUJvdW5kJ3Mg
YW5kIHRpbGVCb3VuZFdpdGhCb3JkZXIncyBsb2NhdGlvbigpLgogICAgIEludFBvaW50IHRleHR1
cmVPZmZzZXQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udEd0ay5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTgsNyArMjE4LDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Dbwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFBh
bmdvTGF5b3V0TGluZSogbGF5b3V0TGluZSwgUGFuZ29SZWdpb25UeXBlIHJlbmRlclJlZ2lvbikK
K3N0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBQYW5nb0xheW91dExpbmUqIGxheW91
dExpbmUsIFBhbmdvUmVnaW9uVHlwZSByZW5kZXJSZWdpb24pCiB7CiAgICAgQ29udGV4dFNoYWRv
dyogc2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LT5jb250ZXh0U2hhZG93KCk7CiAgICAgQVNTRVJU
KHNoYWRvdyk7CkBAIC0yMjYsNyArMjI2LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRv
dyhHcmFwaGljc0NvbgogICAgIGlmICghKGdyYXBoaWNzQ29udGV4dC0+dGV4dERyYXdpbmdNb2Rl
KCkgJiBUZXh0TW9kZUZpbGwpIHx8IHNoYWRvdy0+bV90eXBlID09IENvbnRleHRTaGFkb3c6Ok5v
U2hhZG93KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IHRvdGFsT2Zmc2V0KHBv
aW50ICsgc2hhZG93LT5tX29mZnNldCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3RhbE9mZnNldChw
b2ludCArIHNoYWRvdy0+bV9vZmZzZXQpOwogCiAgICAgLy8gT3B0aW1pemUgbm9uLWJsdXJyeSBz
aGFkb3dzLCBieSBqdXN0IGRyYXdpbmcgdGV4dCB3aXRob3V0IHRoZSBDb250ZXh0U2hhZG93Lgog
ICAgIGlmICghc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyhncmFwaGljc0NvbnRleHQpKSB7
CkBAIC0yNDMsOCArMjQzLDggQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGlj
c0NvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGV4dGVudHMoZ2V0
UGFuZ29SZWdpb25FeHRlbnRzKHJlbmRlclJlZ2lvbikpOwotICAgIGV4dGVudHMuc2V0TG9jYXRp
b24oRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSAtIGV4dGVudHMuaGVpZ2h0KCkpKTsK
KyAgICBHcmFwaGljc1JlY3QgZXh0ZW50cyhnZXRQYW5nb1JlZ2lvbkV4dGVudHMocmVuZGVyUmVn
aW9uKSk7CisgICAgZXh0ZW50cy5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KHBvaW50LngoKSwg
cG9pbnQueSgpIC0gZXh0ZW50cy5oZWlnaHQoKSkpOwogICAgIGNhaXJvX3QqIHNoYWRvd0NvbnRl
eHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoZ3JhcGhpY3NDb250ZXh0LCBleHRlbnRzKTsK
ICAgICBpZiAoc2hhZG93Q29udGV4dCkgewogICAgICAgICBjYWlyb190cmFuc2xhdGUoc2hhZG93
Q29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb24KICAgICB9CiB9CiAKLXZvaWQgRm9u
dDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
K3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKIHsKICNpZiBVU0UoRlJFRVRZUEUpCiAgICAgaWYgKCFwcmltYXJ5Rm9udCgp
LT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pIHsKQEAgLTMyNiw3ICszMjYsNyBAQCB2b2lkIEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7
CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3Qg
QXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywg
aW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNv
bnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBj
b25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0
byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMzk5LDcgKzM5OSw3
IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXgKICAgICByZXR1cm4g
b2Zmc2V0OwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAorR3JhcGhpY3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50
LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICNpZiBVU0UoRlJFRVRZUEUpCiAg
ICAgaWYgKCFwcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5tX3BhdHRlcm4pCkBAIC00Mzks
NyArNDM5LDcgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogICAg
IGdfZnJlZSh1dGY4KTsKICAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwogCi0gICAgcmV0dXJu
IEZsb2F0UmVjdChwb2ludC54KCkgKyBiZWZvcmVXaWR0aCwgcG9pbnQueSgpLCBhZnRlcldpZHRo
IC0gYmVmb3JlV2lkdGgsIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsg
YmVmb3JlV2lkdGgsIHBvaW50LnkoKSwgYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoLCBoKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRQ
b2ludEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9GbG9hdFBvaW50SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UG9pbnRIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgotICoKLSAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKLQotI2luY2x1ZGUgPFBvaW50Lmg+Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
bG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IEJQb2ludCYgcG9pbnQpCi0gICAgOiBtX3gocG9p
bnQueCkKLSAgICAsIG1feShwb2ludC55KQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBC
UG9pbnQoKSBjb25zdAotewotICAgIHJldHVybiBCUG9pbnQobV94LCBtX3kpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0
SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgotICoK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotCi0jaW5jbHVkZSA8UmVjdC5oPgotCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQlJlY3QmIHJlY3QpCi0gICAg
OiBtX2xvY2F0aW9uKHJlY3QuTGVmdFRvcCgpKQotICAgICwgbV9zaXplKHJlY3QuV2lkdGgoKSAr
IDEsIHJlY3QuSGVpZ2h0KCkgKyAxKQotewotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIEJSZWN0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lk
dGgoKSAtIDEsIGhlaWdodCgpIC0gMSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRIYWlrdS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
Rm9udEhhaWt1LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9Gb250SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3
MSw3IEBAIGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ28KIH0KIAogdm9p
ZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4
dC0+ZmlsbENvbG9yKCk7CiAgICAgQlZpZXcqIHZpZXcgPSBncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwpAQCAtOTIsMTMgKzkyLDEzIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQqIGcKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
dHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8q
IHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50
JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQg
Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8q
IGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5n
JiAvKiBtYXJrICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZy
b20gKi8sIGludCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpA
QCAtMTA5LDEwICsxMDksMTAgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0
KGNvbgogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50LCBpbnQs
IGludCkgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBpbnQsIGludCwgaW50KSBj
b25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOwor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAogaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0LCBib29sKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3Uv
R3JhZGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaQog
ICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkK
IHsKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RmlsbFJlY3QocmVjdCwgKnBsYXRm
b3JtR3JhZGllbnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24o
c2l6ZV90IHBvaW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3Vs
ZEFudGlhbGlhcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXpl
X3QgcG9pbnRzTGVuZ3RoLCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxk
QW50aWFsaWFzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24oCiAgICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VQb2x5Z29uKGJQb2ludHMsIHBv
aW50c0xlbmd0aCwgdHJ1ZSwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50
KiBwb2ludHMsIGJvb2wgYW50aWFsaWFzZWQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwQ29udmV4UG9seWdvbigKICAgICAvLyBGSVhNRTogSU1QTEVNRU5UISEKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzEsNyArMTcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Io
b2xkQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KGNvbnN0IFBhdAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gcmVjdDsKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM4NCw3ICszODQsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBJbWFnZUJ1ZmZl
ciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTM0
LDcgKzUzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG8KICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaGFkb3coRmxvYXRTaXplIGNvbnN0JiwgZmxvYXQsIENvbG9yIGNvbnN0JiwgQ29sb3JTcGFj
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhHcmFwaGljc1NpemUg
Y29uc3QmLCBmbG9hdCwgQ29sb3IgY29uc3QmLCBDb2xvclNwYWNlKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9HcmFwaGljc1BvaW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUG9pbnRIYWlrdS5jcHAJKHJldmlzaW9uIDkx
MDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFBv
aW50SGFpa3UuY3BwOjkxMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NQb2ludEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaW5jbHVkZSA8UG9pbnQu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UG9pbnQ6OkZsb2F0UG9pbnQoY29u
c3QgQlBvaW50JiBwb2ludCkKKyAgICA6IG1feChwb2ludC54KQorICAgICwgbV95KHBvaW50Lnkp
Cit7Cit9CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEJQb2ludChtX3gsIG1feSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NQb2ludEhh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HcmFwaGljc1BvaW50SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUG9pbnRIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDIwICsyNiwyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgog
CiAjaW5jbHVkZSA8UG9pbnQuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UG9p
bnQ6OkZsb2F0UG9pbnQoY29uc3QgQlBvaW50JiBwb2ludCkKK0dyYXBoaWNzUG9pbnQ6OkdyYXBo
aWNzUG9pbnQoY29uc3QgQlBvaW50JiBwb2ludCkKICAgICA6IG1feChwb2ludC54KQogICAgICwg
bV95KHBvaW50LnkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIEJQb2ludCgpIGNvbnN0
CitHcmFwaGljc1BvaW50OjpvcGVyYXRvciBCUG9pbnQoKSBjb25zdAogewogICAgIHJldHVybiBC
UG9pbnQobV94LCBtX3kpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvR3JhcGhpY3NSZWN0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzUmVjdEhhaWt1LmNwcAkocmV2aXNp
b24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zs
b2F0UmVjdEhhaWt1LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L0dyYXBoaWNzUmVjdEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1
cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFJl
Y3QuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNv
bnN0IEJSZWN0JiByZWN0KQorICAgIDogbV9sb2NhdGlvbihyZWN0LkxlZnRUb3AoKSkKKyAgICAs
IG1fc2l6ZShyZWN0LldpZHRoKCkgKyAxLCByZWN0LkhlaWdodCgpICsgMSkKK3sKK30KKworRmxv
YXRSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJSZWN0KEJQb2lu
dCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFwaGljc1JlY3RIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NSZWN0SGFpa3UuY3BwCShyZXZp
c2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YXBoaWNzUmVjdEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDIwIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiAjaW5jbHVkZSA8UmVjdC5oPgogCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgQlJlY3QmIHJlY3QpCitHcmFw
aGljc1JlY3Q6OkdyYXBoaWNzUmVjdChjb25zdCBCUmVjdCYgcmVjdCkKICAgICA6IG1fbG9jYXRp
b24ocmVjdC5MZWZ0VG9wKCkpCiAgICAgLCBtX3NpemUocmVjdC5XaWR0aCgpICsgMSwgcmVjdC5I
ZWlnaHQoKSArIDEpCiB7CiB9CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3IgQlJlY3QoKSBjb25zdAor
R3JhcGhpY3NSZWN0OjpvcGVyYXRvciBCUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEJSZWN0
KEJQb2ludCh4KCksIHkoKSksIEJTaXplKHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgQml0bWFwSW1h
Z2U6OmludmFsaWRhdGVQbGF0Zm9ybURhdGEKIH0KIAogLy8gRHJhd2luZyBSb3V0aW5lcwotdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wKQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0LCBjb25zdCBHcmFwaGljc1JlY3Qm
IHNyYywgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQog
ewogICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTIxLDcgKzEyMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAK
ICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRz
dFJlY3QpCiB7CiAgICAgQkJpdG1hcCogaW1hZ2UgPSBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOwogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5Jc1ZhbGlkKCkpIC8vIElmIHRoZSBpbWFn
ZSBoYXNuJ3QgZnVsbHkgbG9hZGVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8UmVnaW9uLmg+CkBAIC02NSw1MSArNjUsNTEg
QEAgYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAgIHJldHVybiAhaXNFbXB0
eSgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0IAorR3JhcGhp
Y3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHNhZmUgd2F5IHRvIHJldHVybiBjdXJyZW50IHBvaW50IG9mIHN1YnBhdGguCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICBmbG9hdCBxdWlldE5hTiA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChxdWlldE5hTiwg
cXVpZXROYU4pOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KHF1aWV0TmFOLCBxdWlldE5hTik7
CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRS
dWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGgtPkNvbnRh
aW5zKHBvaW50KTsKIH0KIAotdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3Qo
KSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fcGF0aC0+RnJhbWUoKTsKIH0KIAotdm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCkKIHsKICAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PwogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lk
IFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGNwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYg
cCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcDEs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRo
OjphZGRBcmNUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYg
cDIsIGZsb2F0IHJhZGl1cykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTE5LDE3
ICsxMTksMTcgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIs
IGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFk
ZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiBwLCBmbG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVh
ciwgYm9vbCBhbnRpY2xvY2t3aXNlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIFBhdGg6OmFkZFJlY3Qo
Y29uc3QgR3JhcGhpY3NSZWN0JiByKQogewogICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKIH0KIAot
dm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRk
RWxsaXBzZShjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KQEAgLTE1NCwxMCArMTU0LDEwIEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm8KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ry
b2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKK0dyYXBoaWNzUmVj
dCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJl
dHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU2ltcGxlRm9udERhdGFIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvU3RpbGxJ
bWFnZUhhaWt1LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw4ICs2Myw4IEBAIE5hdGl2ZUltYWdlUHRyIFN0aWxsSW1hZ2U6Om5hdGl2ZUltYWdlRm8KICAg
ICByZXR1cm4gJm1fYml0bWFwOwogfQogCi12b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LAotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCit2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgc291cmNlUmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFtX2JpdG1hcC5Jc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxs
SW1hZ2VIYWlrdS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1N0aWxsSW1hZ2VIYWlrdS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IpOwogCiBwcml2YXRlOgogICAgIFN0aWxsSW1hZ2UoY29uc3QgQkJpdG1h
cCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIK
ICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAg
LTQ4OSw3ICs0ODksNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhz
CiAgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBGb250Ojppc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKGNoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBEaXN0cmlidXRlIHRoZSBy
dW4ncyB0b3RhbCBleHBhbnNpb24gZXZlbmx5IG92ZXIgYWxsIGV4cGFuc2lvbiBvcHBvcnR1bml0
aWVzIGluIHRoZSBydW4uCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4cGFuc2lvbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJldmlvdXNFeHBhbnNpb24gPSBtX2V4cGFu
c2lvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzVW5pdCBwcmV2aW91c0V4cGFu
c2lvbiA9IG1fZXhwYW5zaW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmVhdEFz
U3BhY2UgJiYgIW1fYWZ0ZXJFeHBhbnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUYWtlIHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgYmVmb3JlIHRoaXMgaWRlb2dyYXBo
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9u
UGVyT3Bwb3J0dW5pdHk7CkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgbV9hZGp1c3RlZEFkdmFuY2VzLmFwcGVu
ZChhZHZhbmNlKTsKICAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERh
dGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBnbHlw
aEJvdW5kcyA9IGZvbnREYXRhLT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAgICAgICAgICBn
bHlwaEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGdseXBoT3JpZ2luLnkpOwogICAgICAgICAg
ICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hYLCBn
bHlwaEJvdW5kcy54KCkpOwogICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1h
eChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4NSwxOCArMTg1LDE4IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fY3VycmVudFJ1
bjsKICAgICB1bnNpZ25lZCBtX2dseXBoSW5DdXJyZW50UnVuOwogICAgIHVuc2lnbmVkIG1fY2hh
cmFjdGVySW5DdXJyZW50R2x5cGg7Ci0gICAgZmxvYXQgbV9maW5hbFJvdW5kaW5nV2lkdGg7Ci0g
ICAgZmxvYXQgbV9leHBhbnNpb247Ci0gICAgZmxvYXQgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0
eTsKLSAgICBmbG9hdCBtX2xlYWRpbmdFeHBhbnNpb247CisgICAgR3JhcGhpY3NVbml0IG1fZmlu
YWxSb3VuZGluZ1dpZHRoOworICAgIEdyYXBoaWNzVW5pdCBtX2V4cGFuc2lvbjsKKyAgICBHcmFw
aGljc1VuaXQgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKKyAgICBHcmFwaGljc1VuaXQgbV9s
ZWFkaW5nRXhwYW5zaW9uOwogICAgIGJvb2wgbV9hZnRlckV4cGFuc2lvbjsKIAogICAgIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogbV9mYWxsYmFja0ZvbnRzOwogCi0gICAgZmxvYXQg
bV9taW5HbHlwaEJvdW5kaW5nQm94WDsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hY
OwotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlw
aEJvdW5kaW5nQm94WTsKKyAgICBHcmFwaGljc1VuaXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsK
KyAgICBHcmFwaGljc1VuaXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsKKyAgICBHcmFwaGljc1Vu
aXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WTsKKyAgICBHcmFwaGljc1VuaXQgbV9tYXhHbHlwaEJv
dW5kaW5nQm94WTsKIAogICAgIHVuc2lnbmVkIG1fbGFzdFJvdW5kaW5nR2x5cGg7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0
UG9pbnRNYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOU0dFT01F
VFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwotCi1GbG9hdFBvaW50OjpGbG9hdFBv
aW50KGNvbnN0IE5TUG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCi17Ci19Ci0KLUZsb2F0
UG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdAotewotICAgIHJldHVybiBOU01ha2VQb2lu
dChtX3gsIG1feSk7Ci19Ci0KLSNlbmRpZgotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRSZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW0JKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UmVjdE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUwotCi1GbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBOU1JlY3QmIHIpIDogbV9sb2Nh
dGlvbihyLm9yaWdpbiksIG1fc2l6ZShyLnNpemUpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0
b3IgTlNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlNNYWtlUmVjdCh4KCksIHkoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkpOwotfQotCi0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRTaXplTWFjLm1tCShyZXZpc2lv
biA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNp
emVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0gCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUwotCi1GbG9hdFNpemU6OkZsb2F0U2l6ZShjb25zdCBOU1NpemUmIHMpIDog
bV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCi17Ci19Ci0KLUZsb2F0U2l6ZTo6
b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlNNYWtlU2l6ZShtX3dpZHRo
LCBtX2hlaWdodCk7Ci19Ci0KLSNlbmRpZgotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVj
dCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsCitHcmFwaGljc1JlY3QgRm9udDo6c2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQsIGludCBoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJv
bGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7CkBAIC01MCwxMCArNTAsMTAgQEAgRmxvYXRSZWN0
IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogICAgIC8vIFVzaW5nIHJvdW5kZigpIHJh
dGhlciB0aGFuIGNlaWxmKCkgZm9yIHRoZSByaWdodCBlZGdlIGFzIGEgY29tcHJvbWlzZSB0byBl
bnN1cmUgY29ycmVjdCBjYXJldCBwb3NpdGlvbmluZwogICAgIGlmIChydW4ucnRsKCkpIHsKICAg
ICAgICAgZmxvYXQgdG90YWxXaWR0aCA9IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOwotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KGZsb29yZihwb2ludC54KCkgKyB0b3RhbFdpZHRoIC0gYWZ0ZXJX
aWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBiZWZvcmVX
aWR0aCkgLSBmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChmbG9vcmYocG9pbnQueCgpICsgdG90YWxXaWR0
aCAtIGFmdGVyV2lkdGgpLCBwb2ludC55KCksIHJvdW5kZihwb2ludC54KCkgKyB0b3RhbFdpZHRo
IC0gYmVmb3JlV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIHRvdGFsV2lkdGggLSBhZnRlcldp
ZHRoKSwgaCk7CiAgICAgfSAKIAotICAgIHJldHVybiBGbG9hdFJlY3QoZmxvb3JmKHBvaW50Lngo
KSArIGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYocG9pbnQueCgpICsgYWZ0ZXJXaWR0
aCkgLSBmbG9vcmYocG9pbnQueCgpICsgYmVmb3JlV2lkdGgpLCBoKTsKKyAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KGZsb29yZihwb2ludC54KCkgKyBiZWZvcmVXaWR0aCksIHBvaW50LnkoKSwgcm91
bmRmKHBvaW50LngoKSArIGFmdGVyV2lkdGgpIC0gZmxvb3JmKHBvaW50LngoKSArIGJlZm9yZVdp
ZHRoKSwgaCk7CiB9CiAKIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QK
QEAgLTgwLDcgKzgwLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
ewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyAr
IGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
QEAgLTkyLDExICs5MiwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRlCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cg
YXQgdGhlIHN0YXJ0aW5nIHBvaW50IHJldHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50
IHN0YXJ0UG9pbnQoc3RhcnRYLCBwb2ludC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQ
b2ludChzdGFydFgsIHBvaW50LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1
biwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7
CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBs
ZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAt
MTA0LDcgKzEwNCw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUK
ICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBk
cmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBv
aW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1w
aGFzaXNNYXJrcyhjb250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50
KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAogZmxvYXQgRm9u
dDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlw
aE92ZXJmbG93KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ZvbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgc3RhdGljIGJvb2wgaGFzQnJva2VuQ1RGb250R2V0VmVydGljYWxUcgogI2VuZGlm
CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3Qg
Y291bnQpCitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6
ZV90IGNvdW50KQogewogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2lu
dC54KCksIHBvaW50LnkoKSk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCBzaG93
R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENHQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4
dEdldFRleHRNYXRyaXgoY29udGV4dCkpOwogCi0gICAgICAgICAgICBDR1BvaW50IHBvc2l0aW9u
ID0gRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQtPmZvbnRNZXRyaWNzKCku
ZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LT5mb250TWV0cmljcygpLmZs
b2F0QXNjZW50KCkpOworICAgICAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEdyYXBoaWNzUG9p
bnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50
KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgp
KTsKICAgICAgICAgICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
ICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0
cmFuc2xhdGlvbnNbaV0sIHRyYW5zbGF0aW9uc1RyYW5zZm9ybSk7CkBAIC0xMzcsNyArMTM3LDcg
QEAgc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdAogI2VuZGlmCiB9CiAK
LXZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKQEAg
LTIxNSw3ICsyMTUsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBj
CiAgICAgICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLm1f
c2l6ZSk7CiAKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXpl
IHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0Nv
bG9yOwogICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTIzMiwxNSArMjMyLDE1
IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGMKICAgICAgICAgZmxv
YXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAg
ICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0
IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4K
ICAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVp
Z2h0KCkgKiAoY29udGV4dC0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0g
ICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hh
ZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIHNob3dHbHlwaHNX
aXRoQWR2YW5jZXMoR3JhcGhpY3NQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250
LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSksIG51bUdseXBocyk7CiAgICAgICAgIGlmIChmb250LT5zeW50aGV0aWNCb2xkT2Zm
c2V0KCkpCi0gICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hh
ZG93VGV4dFggKyBmb250LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwgZm9u
dCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhHcmFwaGljc1BvaW50KHNoYWRvd1RleHRYICsgZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgp
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKICAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvciwgZmlsbENvbG9yU3BhY2UpOwogICAgIH0KIAogICAg
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsK
ICAgICBpZiAoZm9udC0+c3ludGhldGljQm9sZE9mZnNldCgpKQotICAgICAgICBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgZm9udC0+c3ludGhldGljQm9sZE9m
ZnNldCgpLCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhm
cm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoR3JhcGhpY3NQb2ludChwb2ludC54KCkgKyBmb250LT5zeW50
aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsK
IAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCiAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyBOU0NvbG9yKiBjcmVhdGVQYXR0ZXJuQ29s
b3IoTlNTdHIKIH0KIAogLy8gV2ViS2l0IG9uIE1hYyBpcyBhIHN0YW5kYXJkIHBsYXRmb3JtIGNv
bXBvbmVudCwgc28gaXQgbXVzdCB1c2UgdGhlIHN0YW5kYXJkIHBsYXRmb3JtIGFydHdvcmsgZm9y
IHVuZGVybGluZS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVT
dHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2lu
Zyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xp
bmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NQb2ludE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NQb2ludE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tOjkxMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUG9pbnRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNSBOb2tpYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmIHApIDogbV94
KHAueCksIG1feShwLnkpCit7Cit9CisKK0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIE5TUG9pbnQoKSBj
b25zdAoreworICAgIHJldHVybiBOU01ha2VQb2ludChtX3gsIG1feSk7Cit9CisKKyNlbmRpZgor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NQ
b2ludE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NQb2ludE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NQb2ludE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTcgKzI1LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogI2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9N
RVRSWV9UWVBFUwogCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmIHApIDog
bV94KHAueCksIG1feShwLnkpCitHcmFwaGljc1BvaW50OjpHcmFwaGljc1BvaW50KGNvbnN0IE5T
UG9pbnQmIHApIDogbV94KHAueCksIG1feShwLnkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9wZXJh
dG9yIE5TUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludDo6b3BlcmF0b3IgTlNQb2ludCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIE5TTWFrZVBvaW50KG1feCwgbV95KTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1JlY3RNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUmVj
dE1hYy5tbQkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9GbG9hdFJlY3RNYWMubW06OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NSZWN0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9r
aWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE5T
R0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCisKK0Zsb2F0UmVjdDo6Rmxv
YXRSZWN0KGNvbnN0IE5TUmVjdCYgcikgOiBtX2xvY2F0aW9uKHIub3JpZ2luKSwgbV9zaXplKHIu
c2l6ZSkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBOU1JlY3QoKSBjb25zdAoreworICAg
IHJldHVybiBOU01ha2VSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKKyNl
bmRpZgorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NSZWN0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc1JlY3RNYWMubW0JKHJldmlzaW9uIDkxMDExKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzUmVjdE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTcgKzI1LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZm5kZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMKIAotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1f
bG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5zaXplKQorR3JhcGhpY3NSZWN0OjpHcmFwaGlj
c1JlY3QoY29uc3QgTlNSZWN0JiByKSA6IG1fbG9jYXRpb24oci5vcmlnaW4pLCBtX3NpemUoci5z
aXplKQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CitHcmFwaGlj
c1JlY3Q6Om9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE5TTWFrZVJlY3Qo
eCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc1NpemVNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbQkocmV2
aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9G
bG9hdFNpemVNYWMubW06OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvR3JhcGhpY3NTaXplTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTlNHRU9NRVRSWV9U
WVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKKworRmxvYXRTaXplOjpGbG9hdFNpemUoY29u
c3QgTlNTaXplJiBzKSA6IG1fd2lkdGgocy53aWR0aCksIG1faGVpZ2h0KHMuaGVpZ2h0KQorewor
fQorCitGbG9hdFNpemU6Om9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5T
TWFrZVNpemUobV93aWR0aCwgbV9oZWlnaHQpOworfQorCisjZW5kaWYKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzU2l6ZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NT
aXplTWFjLm1tCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9HcmFwaGljc1NpemVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsy
NSwxNyBAQAogICovCiAgCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXpl
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
I2lmbmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogCi1GbG9h
dFNpemU6OkZsb2F0U2l6ZShjb25zdCBOU1NpemUmIHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9o
ZWlnaHQocy5oZWlnaHQpCitHcmFwaGljc1NpemU6OkdyYXBoaWNzU2l6ZShjb25zdCBOU1NpemUm
IHMpIDogbV93aWR0aChzLndpZHRoKSwgbV9oZWlnaHQocy5oZWlnaHQpCiB7CiB9CiAKLUZsb2F0
U2l6ZTo6b3BlcmF0b3IgTlNTaXplKCkgY29uc3QKK0dyYXBoaWNzU2l6ZTo6b3BlcmF0b3IgTlNT
aXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gTlNNYWtlU2l6ZShtX3dpZHRoLCBtX2hlaWdodCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgogCi0jaW1wb3J0ICJG
bG9hdFJlY3QuaCIKKyNpbXBvcnQgIkdyYXBoaWNzUmVjdC5oIgogI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmluZy5oIgogI2ltcG9ydCAiU2hhcmVkQnVm
ZmVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJGbG9h
dFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1NpemUuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtMjAwLDcgKzIwMCw3IEBAIHByaXZhdGU6CiAg
ICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAgSW50UmVjdCBtX3JlY3Q7Ci0gICAg
RmxvYXRTaXplIG1fc2NhbGVGYWN0b3I7CisgICAgR3JhcGhpY3NTaXplIG1fc2NhbGVGYWN0b3I7
CiAgICAgdW5zaWduZWQgbV9lbmFibGVkVHJhY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX3RvdGFs
VHJhY2tDb3VudDsKICAgICBmbG9hdCBtX3JlcG9ydGVkRHVyYXRpb247CkBAIC0yMjAsNyArMjIw
LDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV90aW1lU3RhcnRlZFBsYXlpbmc7CiAgICAgZG91
YmxlIG1fdGltZVN0b3BwZWRQbGF5aW5nOwogI2VuZGlmCi0gICAgbXV0YWJsZSBGbG9hdFNpemUg
bV9jYWNoZWROYXR1cmFsU2l6ZTsKKyAgICBtdXRhYmxlIEdyYXBoaWNzU2l6ZSBtX2NhY2hlZE5h
dHVyYWxTaXplOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
TWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTgyNiw3ICs4MjYs
NyBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpuYXR1cmFsCiAgICAgLy8gICAg
ZGltZW5zaW9ucywgYXNwZWN0IHJhdGlvLCBjbGVhbiBhcGVydHVyZSwgcmVzb2x1dGlvbiwgYW5k
IHNvIGZvcnRoLCBhcyBkZWZpbmVkIGZvciB0aGUgCiAgICAgLy8gICAgZm9ybWF0IHVzZWQgYnkg
dGhlIHJlc291cmNlCiAgICAgCi0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKFtbbV9xdE1vdmll
LmdldCgpIGF0dHJpYnV0ZUZvcktleTpRVE1vdmllTmF0dXJhbFNpemVBdHRyaWJ1dGVdIHNpemVW
YWx1ZV0pOworICAgIEdyYXBoaWNzU2l6ZSBuYXR1cmFsU2l6ZShbW21fcXRNb3ZpZS5nZXQoKSBh
dHRyaWJ1dGVGb3JLZXk6UVRNb3ZpZU5hdHVyYWxTaXplQXR0cmlidXRlXSBzaXplVmFsdWVdKTsK
ICAgICBpZiAobmF0dXJhbFNpemUuaXNFbXB0eSgpICYmIG1faXNTdHJlYW1pbmcpIHsKICAgICAg
ICAgLy8gSFRUUCBMaXZlIFN0cmVhbXMgd2lsbCBvY2Nhc2lvbmFsbHkgcmV0dXJuIHswLDB9IG5h
dHVyYWwgc2l6ZXMgd2hpbGUgc2NydWJiaW5nLgogICAgICAgICAvLyBXb3JrIGFyb3VuZCB0aGlz
IHByb2JsZW0gKDxyZGFyOi8vcHJvYmxlbS85MDc4NTYzPikgYnkgcmV0dXJuaW5nIHRoZSBsYXN0
IHZhbGlkIApAQCAtMTMwNiw3ICsxMzA2LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtp
dDo6cGFpbnQoR3JhcAogICAgIFttX29iamNPYnNlcnZlci5nZXQoKSBzZXREZWxheUNhbGxiYWNr
czpZRVNdOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBOU0dyYXBoaWNz
Q29udGV4dCogbmV3Q29udGV4dDsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IoMS4wZiwgLTEu
MGYpOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZUZhY3RvcigxLjBmLCAtMS4wZik7CiAgICAgSW50
UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoci53aWR0aCgpLCByLmhlaWdo
dCgpKSk7CiAKICNpZiBQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKQpAQCAtMTM3MSw3ICsxMzcx
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6cGFpbnQoR3JhcAogICAgICAgICAg
ICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6OmZvcm1hdCgiJTEuMmYiLCBmcmFtZVJhdGUpOwogICAg
ICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgp
KTsKICAgICAgICAgICAgIGNvbnN0IENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsgICAgCisgICAgICAgICAg
ICBjb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsgICAgCiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvciwgc3R5bGVUb1VzZS0+Y29sb3JTcGFj
ZSgpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxl
Rm9udERhdGFNYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw3IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29s
b3IuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NSZWN0LmgiCiAj
aW1wb3J0ICJGb250LmgiCiAjaW1wb3J0ICJGb250Q2FjaGUuaCIKICNpbXBvcnQgIkZvbnREZXNj
cmlwdGlvbi5oIgpAQCAtMzg2LDkgKzM4Niw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVy
bWluZVBpdGNoKCkKICAgICAgICAgICAgW25hbWUgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAIk1v
bm90eXBlQ29yc2l2YSJdICE9IE5TT3JkZXJlZFNhbWU7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVG
b250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK0dyYXBo
aWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0
IGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0Zv
ckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhv
cml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKICAgICBib3VuZGluZ0JveC5zZXRZ
KC1ib3VuZGluZ0JveC5tYXhZKCkpOwogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMzLDcgKzIzMyw3IEBAIHB1YmxpYzoKICAgICB+Qml0bWFwVGV4dHVyZUdM
KCkgeyBkZXN0cm95KCk7IH0KICAgICB2aXJ0dWFsIHVpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQogICAgIGlubGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGFxdWU7IH0KLSAgICBpbmxpbmUgRmxvYXRTaXplIHJlbGF0aXZlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVsYXRpdmVTaXplOyB9CisgICAgaW5saW5lIEdyYXBoaWNzU2l6ZSByZWxhdGl2ZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0aXZlU2l6ZTsgfQogICAgIHZvaWQgc2V0VGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyR0wqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXht
YXA7IH0KIAogICAgIHZvaWQgcGFjaygpCkBAIC0yNjAsNyArMjYwLDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBHTHVpbnQgbV9pZDsKICAgICBJbWFnZVVJRCBtX2ltYWdlVUlEOwotICAgIEZs
b2F0U2l6ZSBtX3JlbGF0aXZlU2l6ZTsKKyAgICBHcmFwaGljc1NpemUgbV9yZWxhdGl2ZVNpemU7
CiAgICAgYm9vbCBtX29wYXF1ZTsKICAgICBJbnRTaXplIG1fdGV4dHVyZVNpemU7CiAgICAgUmVm
UHRyPFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBtX2J1ZmZlcjsKQEAgLTQxMiw3ICs0MTIs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kUGFpbnRpbmcoKQogfQogCiAKLXZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2spCit2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrKQogewog
ICAgIGlmICghdGV4dHVyZS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMCw3ICs0
MjAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgCiAgICAgZHJh
d1RleHR1cmUodGV4dHVyZUdMLmlkKCksIHRleHR1cmVHTC5pc09wYXF1ZSgpLCB0ZXh0dXJlR0wu
cmVsYXRpdmVTaXplKCksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFzaywgZmFsc2Up
OwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVy
ZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEZsb2F0U2l6ZSYgcmVsYXRpdmVTaXplLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBi
b29sIGZsaXApCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4
dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcmVsYXRpdmVTaXplLCBjb25z
dCBHcmFwaGljc1JlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
b2RlbFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tU
ZXh0dXJlLCBib29sIGZsaXApCiB7CiAgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xE
YXRhOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbTsKICAgICBpZiAobWFza1RleHR1cmUpCkBA
IC01MTEsNyArNTExLDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNp
egogICAgICAgICBHTF9DTUQoZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEs
IG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMCkpCiAgICAgfQogICAgIG1fYWN0dWFsU2l6ZSA9IG5ld1Np
emU7Ci0gICAgbV9yZWxhdGl2ZVNpemUgPSBGbG9hdFNpemUoZmxvYXQobmV3U2l6ZS53aWR0aCgp
KSAvIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgZmxvYXQobmV3U2l6ZS5oZWlnaHQoKSkgLyBtX3Rl
eHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEdyYXBoaWNzU2l6ZShm
bG9hdChuZXdTaXplLndpZHRoKCkpIC8gbV90ZXh0dXJlU2l6ZS53aWR0aCgpLCBmbG9hdChuZXdT
aXplLmhlaWdodCgpKSAvIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwogICAgIG1fb3BhcXVlID0g
b3BhcXVlOwogICAgIG1fc3VyZmFjZU5lZWRzUmVzZXQgPSB0cnVlOwogfQpAQCAtNjIwLDcgKzYy
MCw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKICAgICBtX2ZibyA9IDA7CiAg
ICAgbV9pZCA9IDA7CiAgICAgbV90ZXh0dXJlU2l6ZSA9IEludFNpemUoKTsKLSAgICBtX3JlbGF0
aXZlU2l6ZSA9IEZsb2F0U2l6ZSgxLCAxKTsKKyAgICBtX3JlbGF0aXZlU2l6ZSA9IEdyYXBoaWNz
U2l6ZSgxLCAxKTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6OmlzVmFsaWQoKSBjb25zdApA
QCAtNjU0LDcgKzY1NCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRt
YXAKICAgICBzdXJmYWNlLT5iaW5kKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdp
bkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0KQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBHcmFwaGlj
c1JlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6R2xvYmFsR0xE
YXRhOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6Okds
b2JhbEdMRGF0YTo6Q2xpcFByb2dyYW07CiAgICAgY29uc3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6
R2xvYmFsR0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkuZ2xvYmFsR0xE
YXRhLnByb2dyYW1zW3Byb2dyYW1dOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEwICszOSwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdMKCk7CiAKICAgICAvLyByZWltcHMgZnJvbSBUZXh0
dXJlTWFwcGVyCi0gICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1
cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0
IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wgZmxp
cCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmLCBj
b25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUsIGJvb2wg
ZmxpcCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZh
Y2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIGVuZENsaXAoKTsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVu
VkcuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9HcmFwaGljc0NvbnRleHRPcGVuVkcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYsNyArMTI2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbgog
ICAgIG1fZGF0YS0+ZHJhd0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIFZHX1NUUk9L
RV9QQVRIKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRp
YWxpYXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51
bVBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlh
cykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0x
NTIsNyArMTUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUAog
ICAgIG1fZGF0YS0+ZHJhd1BhdGgocGF0aCwgVkdfU1RST0tFX1BBVEgsIG1fc3RhdGUuZmlsbFJ1
bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVj
dCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsbwogICAgIG1fZGF0YS0+ZHJhd1JlY3QocmVjdCwgVkdfRklMTF9QQVRIKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdChjbwogICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsgLy8gRklY
TUUKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNSw3
ICsyMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAgICAg
Q29sb3Igb2xkU3Ryb2tlQ29sb3IgPSBtX2RhdGEtPnN0cm9rZUNvbG9yKCk7CiAgICAgbV9kYXRh
LT5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwogICAgIG1fZGF0YS0+c2V0U3Ryb2tlQ29s
b3IoY29sb3IpOwotICAgIHN0cm9rZVJlY3QoRmxvYXRSZWN0KGZpbmFsRm9jdXNSZWN0KSwgMS5m
KTsKKyAgICBzdHJva2VSZWN0KEdyYXBoaWNzUmVjdChmaW5hbEZvY3VzUmVjdCksIDEuZik7CiAg
ICAgbV9kYXRhLT5zZXRTdHJva2VTdHlsZShvbGRTdHlsZSk7CiAgICAgbV9kYXRhLT5zZXRTdHJv
a2VDb2xvcihvbGRTdHJva2VDb2xvcik7CiB9CkBAIC0yNTcsMTUgKzI1NywxNSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAgICAgVU5VU0VEX1BBUkFNKHN0eWxl
KTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSkKK0dyYXBoaWNzUmVjdCBHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKLSAgICBy
ZXR1cm4gRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QobV9kYXRhLT50cmFuc2Zvcm1hdGlvbigp
Lm1hcFJlY3QocmVjdCkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobV9kYXRhLT50cmFuc2Zvcm1hdGlvbigpLm1hcFJlY3QocmVjdCkpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgR3JhcGhpY3NTaXpl
JiBzaXplLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0zMDIsNyArMzAyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzEzLDcgKzMxMyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICBtX2RhdGEtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDcgKzM5
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgKICAgICBtX2Rh
dGEtPmNsaXBQYXRoKHBhdGgsIFBhaW50ZXJPcGVuVkc6OlN1YnRyYWN0Q2xpcCwgbV9zdGF0ZS5m
aWxsUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNjYWxlRmFjdG9ycykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFw
aGljc1NpemUmIHNjYWxlRmFjdG9ycykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgSW50UgogICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9w
ZW5WRzo6U3VidHJhY3RDbGlwLCBtX3N0YXRlLmZpbGxSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ0NCw3ICs0NDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3Vu
ZGVkUmVjCiAKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAg
IHBhdGguYWRkRWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCkgKyB0aGlja25lc3MsIHJlY3QueSgp
ICsgdGhpY2tuZXNzLAorICAgIHBhdGguYWRkRWxsaXBzZShHcmFwaGljc1JlY3QocmVjdC54KCkg
KyB0aGlja25lc3MsIHJlY3QueSgpICsgdGhpY2tuZXNzLAogICAgICAgICByZWN0LndpZHRoKCkg
LSAodGhpY2tuZXNzICogMiksIHJlY3QuaGVpZ2h0KCkgLSAodGhpY2tuZXNzICogMikpKTsKIAog
ICAgIG1fZGF0YS0+Y2xpcFBhdGgocGF0aCwgUGFpbnRlck9wZW5WRzo6SW50ZXJzZWN0Q2xpcCwg
bV9zdGF0ZS5maWxsUnVsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRmb3Jt
RGF0YQogfQogCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLXN0YXRp
YyB2b2lkIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRTaXplJiBvcmlnU2l6ZSwgY29uc3QgSW50U2l6ZSYgc2NhbGVkU2l6ZSkKK3N0
YXRpYyB2b2lkIGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoR3JhcGhpY3NSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU2l6ZSwgY29uc3QgSW50U2l6ZSYgc2NhbGVkU2l6
ZSkKIHsKICAgICAvLyBXZSBhc3N1bWUgZG93bi1zYW1wbGluZyB6b29tIHJhdGVzIGluIFggZGly
ZWN0aW9uIGFuZCBpbiBZIGRpcmVjdGlvbiBhcmUgc2FtZS4KICAgICBpZiAob3JpZ1NpemUud2lk
dGgoKSA9PSBzY2FsZWRTaXplLndpZHRoKCkpCkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIHZv
aWQgYWRqdXN0U291cmNlUmVjdEZvckRvd25TYW1wbAogfQogI2VuZGlmCiAKLXZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRzdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBz
cmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsK
ICAgICBpZiAoZHN0LmlzRW1wdHkoKSB8fCBzcmMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIAogICAgIGVsc2UKICAgICAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9w
KTsKIAotICAgIEZsb2F0UmVjdCBzcmNSZWN0TG9jYWwoc3JjKTsKKyAgICBHcmFwaGljc1JlY3Qg
c3JjUmVjdExvY2FsKHNyYyk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykKICAgICBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3RMb2NhbCwgc2l6
ZSgpLCBpbWFnZS0+c2l6ZSgpKTsKICNlbmRpZgpAQCAtMTY1LDEwICsxNjUsMTAgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7CiB9CiAKLXZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsCit2b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3Jj
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkc3QpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3QpCiB7CiAgICAgaWYgKGRzdC5pc0VtcHR5KCkg
fHwgc3JjLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVuVkcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3BlblZHLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudmcvUGFpbnRlck9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDkgQEAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkRhc2hBcnJheS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTA3LDcg
KzEwNyw3IEBAIHN0cnVjdCBQbGF0Zm9ybVBhaW50ZXJTdGF0ZSB7CiAgICAgZmxvYXQgb3BhY2l0
eTsKIAogICAgIGJvb2wgc2Npc3NvcmluZ0VuYWJsZWQ7Ci0gICAgRmxvYXRSZWN0IHNjaXNzb3JS
ZWN0OworICAgIEdyYXBoaWNzUmVjdCBzY2lzc29yUmVjdDsKICNpZmRlZiBPUEVOVkdfVkVSU0lP
Tl8xXzEKICAgICBib29sIG1hc2tpbmdDaGFuZ2VkQW5kRW5hYmxlZDsKICAgICBWR01hc2tMYXll
ciBtYXNrOwpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6c2V0QW50aWFs
aWFzaW5nRW5hYmwKICAgICAgICAgdmdTZXRpKFZHX1JFTkRFUklOR19RVUFMSVRZLCBWR19SRU5E
RVJJTkdfUVVBTElUWV9OT05BTlRJQUxJQVNFRCk7CiB9CiAKLXZvaWQgUGFpbnRlck9wZW5WRzo6
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZUZhY3RvcnMpCit2b2lkIFBhaW50ZXJPcGVuVkc6
OnNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2NhbGVGYWN0b3JzKQogewogICAgIEFTU0VSVCht
X3N0YXRlKTsKICAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7CkBAIC03MzMsNyArNzMzLDcg
QEAgdm9pZCBQYWludGVyT3BlblZHOjpkcmF3UGF0aChjb25zdCBQYXRoJgogICAgIEFTU0VSVF9W
R19OT19FUlJPUigpOwogfQogCi12b2lkIFBhaW50ZXJPcGVuVkc6OmludGVyc2VjdFNjaXNzb3JS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0
U2Npc3NvclJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIC8vIFNjaXNzb3Ig
cmVjdGFuZ2xlcyBhcmUgZGVmaW5lZCBieSBmbG9hdCB2YWx1ZXMsIGJ1dCBlLmcuIHBhaW50aW5n
CiAgICAgLy8gc29tZXRoaW5nIHJlZCB0byBhIGZsb2F0LWNsaXBwZWQgcmVjdGFuZ2xlIGFuZCB0
aGVuIHBhaW50aW5nIHNvbWV0aGluZwpAQCAtNzQ0LDE2ICs3NDQsMTYgQEAgdm9pZCBQYWludGVy
T3BlblZHOjppbnRlcnNlY3RTY2lzc29yUmVjdAogICAgIC8vIHZpc3VhbCByZXN1bHQgaXMgYmV0
dGVyIGlmIHdlIGNsaXAgdG8gdGhlIGVuY2xvc2luZyBpbnRlZ2VyIHJlY3RhbmdsZQogICAgIC8v
IHJhdGhlciB0aGFuIHRoZSBleGFjdCBmbG9hdCByZWN0YW5nbGUgZm9yIHNjaXNzb3JpbmcuCiAg
ICAgaWYgKG1fc3RhdGUtPnNjaXNzb3JpbmdFbmFibGVkKQotICAgICAgICBtX3N0YXRlLT5zY2lz
c29yUmVjdC5pbnRlcnNlY3QoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKyAg
ICAgICAgbV9zdGF0ZS0+c2Npc3NvclJlY3QuaW50ZXJzZWN0KEdyYXBoaWNzUmVjdChlbmNsb3Np
bmdJbnRSZWN0KHJlY3QpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3RhdGUtPnNjaXNzb3Jp
bmdFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgbV9zdGF0ZS0+c2Npc3NvclJlY3QgPSBGbG9hdFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7CisgICAgICAgIG1fc3RhdGUtPnNjaXNzb3JSZWN0
ID0gR3JhcGhpY3NSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwogICAgIH0KIAogICAgIG1f
c3RhdGUtPmFwcGx5U2Npc3NvclJlY3QoKTsKIH0KIAotdm9pZCBQYWludGVyT3BlblZHOjppbnRl
cnNlY3RDbGlwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFBhaW50ZXJPcGVuVkc6
OmludGVyc2VjdENsaXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBBU1NF
UlQobV9zdGF0ZSk7CiAgICAgbV9zdXJmYWNlLT5tYWtlQ3VycmVudCgpOwpAQCAtNzY1LDcgKzc2
NSw3IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6aW50ZXJzZWN0Q2xpcFJlY3QoY28KICAgICB9CiAK
ICAgICAvLyBDaGVjayBpZiB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBpcyBzdGls
bCByZWN0aWxpbmVhciAoY2FuIGJlCi0gICAgLy8gcmVwcmVzZW50ZWQgYXMgRmxvYXRSZWN0KSBz
byB3ZSBjb3VsZCBhcHBseSBzY2lzc29yaW5nIGluc3RlYWQgb2YKKyAgICAvLyByZXByZXNlbnRl
ZCBhcyBHcmFwaGljc1JlY3QpIHNvIHdlIGNvdWxkIGFwcGx5IHNjaXNzb3JpbmcgaW5zdGVhZCBv
ZgogICAgIC8vIChwb3RlbnRpYWxseSBtb3JlIGV4cGVuc2l2ZSkgcGF0aCBjbGlwcGluZy4gTm90
ZSB0aGF0IHNjaXNzb3JpbmcgaXMgbm90CiAgICAgLy8gc3ViamVjdCB0byB0cmFuc2Zvcm1hdGlv
bnMsIHNvIHdlIG5lZWQgdG8gZG8gdGhlIHRyYW5zZm9ybWF0aW9uIHRvCiAgICAgLy8gc3VyZmFj
ZSBjb29yZGluYXRlcyBieSBvdXJzZWx2ZXMuCkBAIC03NzQsNyArNzc0LDcgQEAgdm9pZCBQYWlu
dGVyT3BlblZHOjppbnRlcnNlY3RDbGlwUmVjdChjbwogICAgIGlmIChlZmZlY3RpdmVTY2lzc29y
UXVhZC5pc1JlY3RpbGluZWFyKCkpCiAgICAgICAgIGludGVyc2VjdFNjaXNzb3JSZWN0KGVmZmVj
dGl2ZVNjaXNzb3JRdWFkLmJvdW5kaW5nQm94KCkpOwogICAgIGVsc2UgewotICAgICAgICAvLyBU
aGUgdHJhbnNmb3JtZWQgc2Npc3NvclJlY3QgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIEZsb2F0
UmVjdAorICAgICAgICAvLyBUaGUgdHJhbnNmb3JtZWQgc2Npc3NvclJlY3QgY2Fubm90IGJlIHJl
cHJlc2VudGVkIGFzIEdyYXBoaWNzUmVjdAogICAgICAgICAvLyBhbnltb3JlLCBzbyB3ZSBuZWVk
IHRvIHBlcmZvcm0gbWFza2luZyBpbnN0ZWFkLgogICAgICAgICBQYXRoIHNjaXNzb3JSZWN0UGF0
aDsKICAgICAgICAgc2Npc3NvclJlY3RQYXRoLmFkZFJlY3QocmVjdCk7CkBAIC04MTQsNyArODE0
LDcgQEAgdm9pZCBQYWludGVyT3BlblZHOjpjbGlwUGF0aChjb25zdCBQYXRoJgogI2VuZGlmCiB9
CiAKLXZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBW
R2JpdGZpZWxkIHNwZWNpZmllZFBhaW50TW9kZXMpCit2b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdS
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgVkdiaXRmaWVsZCBzcGVjaWZpZWRQYWludE1v
ZGVzKQogewogICAgIEFTU0VSVChtX3N0YXRlKTsKIApAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQg
UGFpbnRlck9wZW5WRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXQKICAgICBBU1NFUlRfVkdfTk9fRVJS
T1IoKTsKIH0KIAotdm9pZCBQYWludGVyT3BlblZHOjpkcmF3Um91bmRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BS
aWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmln
aHQsIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKK3ZvaWQgUGFpbnRlck9wZW5WRzo6
ZHJhd1JvdW5kZWRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
dG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxl
ZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBWR2JpdGZpZWxkIHNwZWNpZmllZFBhaW50
TW9kZXMpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUpOwogCkBAIC04NzQsMTAgKzg3NCwxMCBAQCB2
b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdSb3VuZGVkUmVjdChjb25zCiAgICAgQVNTRVJUX1ZHX05P
X0VSUk9SKCk7CiAKICAgICAvLyBjbGFtcCBjb3JuZXIgYXJjIHNpemVzCi0gICAgRmxvYXRTaXpl
IGNsYW1wZWRUb3BMZWZ0ID0gRmxvYXRTaXplKHRvcExlZnQpLnNocnVua1RvKHJlY3Quc2l6ZSgp
KS5leHBhbmRlZFRvKEZsb2F0U2l6ZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFRvcFJpZ2h0
ID0gRmxvYXRTaXplKHRvcFJpZ2h0KS5zaHJ1bmtUbyhyZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhG
bG9hdFNpemUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRCb3R0b21MZWZ0ID0gRmxvYXRTaXpl
KGJvdHRvbUxlZnQpLnNocnVua1RvKHJlY3Quc2l6ZSgpKS5leHBhbmRlZFRvKEZsb2F0U2l6ZSgp
KTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZEJvdHRvbVJpZ2h0ID0gRmxvYXRTaXplKGJvdHRvbVJp
Z2h0KS5zaHJ1bmtUbyhyZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhGbG9hdFNpemUoKSk7CisgICAg
R3JhcGhpY3NTaXplIGNsYW1wZWRUb3BMZWZ0ID0gR3JhcGhpY3NTaXplKHRvcExlZnQpLnNocnVu
a1RvKHJlY3Quc2l6ZSgpKS5leHBhbmRlZFRvKEdyYXBoaWNzU2l6ZSgpKTsKKyAgICBHcmFwaGlj
c1NpemUgY2xhbXBlZFRvcFJpZ2h0ID0gR3JhcGhpY3NTaXplKHRvcFJpZ2h0KS5zaHJ1bmtUbyhy
ZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhHcmFwaGljc1NpemUoKSk7CisgICAgR3JhcGhpY3NTaXpl
IGNsYW1wZWRCb3R0b21MZWZ0ID0gR3JhcGhpY3NTaXplKGJvdHRvbUxlZnQpLnNocnVua1RvKHJl
Y3Quc2l6ZSgpKS5leHBhbmRlZFRvKEdyYXBoaWNzU2l6ZSgpKTsKKyAgICBHcmFwaGljc1NpemUg
Y2xhbXBlZEJvdHRvbVJpZ2h0ID0gR3JhcGhpY3NTaXplKGJvdHRvbVJpZ2h0KS5zaHJ1bmtUbyhy
ZWN0LnNpemUoKSkuZXhwYW5kZWRUbyhHcmFwaGljc1NpemUoKSk7CiAKICAgICAvLyBBcyBPcGVu
VkcncyBjb29yZGluYXRlIHN5c3RlbSBpcyBmbGlwcGVkIGluIGNvbXBhcmlzb24gdG8gV2ViS2l0
J3MsCiAgICAgLy8gd2UgaGF2ZSB0byBzcGVjaWZ5IHRoZSBvcHBvc2l0ZSB2YWx1ZSBmb3IgdGhl
ICJjbG9ja3dpc2UiIHZhbHVlLgpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgdm9pZCBQYWludGVyT3Bl
blZHOjpkcmF3RWxsaXBzZShjb25zdCBJbgogICAgIEFTU0VSVF9WR19OT19FUlJPUigpOwogfQog
Ci12b2lkIFBhaW50ZXJPcGVuVkc6OmRyYXdQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqIHBvaW50cywgVkdiaXRmaWVsZCBzcGVjaWZpZWRQYWludE1vZGVzKQordm9p
ZCBQYWludGVyT3BlblZHOjpkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBHcmFw
aGljc1BvaW50KiBwb2ludHMsIFZHYml0ZmllbGQgc3BlY2lmaWVkUGFpbnRNb2RlcykKIHsKICAg
ICBBU1NFUlQobV9zdGF0ZSk7CiAKQEAgLTEwNjEsNyArMTA2MSw3IEBAIHZvaWQgUGFpbnRlck9w
ZW5WRzo6ZHJhd1BvbHlnb24oc2l6ZV90IG4KICAgICBBU1NFUlRfVkdfTk9fRVJST1IoKTsKIH0K
IAotdm9pZCBQYWludGVyT3BlblZHOjpkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjKQordm9pZCBQ
YWludGVyT3BlblZHOjpkcmF3SW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjKQogewogICAgIEFT
U0VSVChtX3N0YXRlKTsKICAgICBtX3N1cmZhY2UtPm1ha2VDdXJyZW50KCk7CkBAIC0xMDcwLDE0
ICsxMDcwLDE0IEBAIHZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd0ltYWdlKFRpbGVkSW1hZ2UKICAg
ICAvLyB3ZSBzcGxpdCB0aGVtIGludG8gdGlsZXMuCiAgICAgSW50UmVjdCBkcmF3blRpbGVzID0g
dGlsZWRJbWFnZS0+dGlsZXNJblJlY3Qoc3JjKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gc3JjVG9E
c3RUcmFuc2Zvcm1hdGlvbiA9IG1ha2VNYXBCZXR3ZWVuUmVjdHMoCi0gICAgICAgIEZsb2F0UmVj
dChGbG9hdFBvaW50KDAuMCwgMC4wKSwgc3JjLnNpemUoKSksIGRzdCk7CisgICAgICAgIEdyYXBo
aWNzUmVjdChHcmFwaGljc1BvaW50KDAuMCwgMC4wKSwgc3JjLnNpemUoKSksIGRzdCk7CiAgICAg
c3JjVG9Ec3RUcmFuc2Zvcm1hdGlvbi50cmFuc2xhdGUoLXNyYy54KCksIC1zcmMueSgpKTsKIAog
ICAgIGZvciAoaW50IHlJbmRleCA9IGRyYXduVGlsZXMueSgpOyB5SW5kZXggPCBkcmF3blRpbGVz
LmJvdHRvbSgpOyArK3lJbmRleCkgewogICAgICAgICBmb3IgKGludCB4SW5kZXggPSBkcmF3blRp
bGVzLngoKTsgeEluZGV4IDwgZHJhd25UaWxlcy5yaWdodCgpOyArK3hJbmRleCkgewogICAgICAg
ICAgICAgLy8gVGhlIHNyY1RpbGUgcmVjdGFuZ2xlIGlzIGFuIGFsaWduZWQgdGlsZSBjcm9wcGVk
IGJ5IHRoZSBzcmMgcmVjdGFuZ2xlLgotICAgICAgICAgICAgRmxvYXRSZWN0IHRpbGUodGlsZWRJ
bWFnZS0+dGlsZVJlY3QoeEluZGV4LCB5SW5kZXgpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBz
cmNUaWxlID0gaW50ZXJzZWN0aW9uKHNyYywgdGlsZSk7CisgICAgICAgICAgICBHcmFwaGljc1Jl
Y3QgdGlsZSh0aWxlZEltYWdlLT50aWxlUmVjdCh4SW5kZXgsIHlJbmRleCkpOworICAgICAgICAg
ICAgR3JhcGhpY3NSZWN0IHNyY1RpbGUgPSBpbnRlcnNlY3Rpb24oc3JjLCB0aWxlKTsKIAogICAg
ICAgICAgICAgc2F2ZSgpOwogCkBAIC0xMTA1LDcgKzExMDUsNyBAQCB2b2lkIFBhaW50ZXJPcGVu
Vkc6OmRyYXdJbWFnZShUaWxlZEltYWdlCiB9CiAKICNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEK
LXZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm9udCwgVmVjdG9yPFZHdWlu
dD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFkanVzdG1lbnRzWCwgVkdmbG9hdCogYWRqdXN0bWVu
dHNZLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGFpbnRlck9wZW5WRzo6ZHJhd1Rl
eHQoVkdGb250IHZnRm9udCwgVmVjdG9yPFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFk
anVzdG1lbnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludCkKIHsKICAgICBBU1NFUlQobV9zdGF0ZSk7CiAKQEAgLTExMjAsOCArMTEyMCw4IEBAIHZv
aWQgUGFpbnRlck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm8KIAogICAgIG1fc3VyZmFjZS0+
bWFrZUN1cnJlbnQoKTsKIAotICAgIEZsb2F0UG9pbnQgZWZmZWN0aXZlUG9pbnQgPSBtX3N0YXRl
LT5zdXJmYWNlVHJhbnNmb3JtYXRpb24ubWFwUG9pbnQocG9pbnQpOwotICAgIEZsb2F0UG9pbnQg
cCA9IHBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZWZmZWN0aXZlUG9pbnQgPSBtX3N0YXRlLT5z
dXJmYWNlVHJhbnNmb3JtYXRpb24ubWFwUG9pbnQocG9pbnQpOworICAgIEdyYXBoaWNzUG9pbnQg
cCA9IHBvaW50OwogICAgIEFmZmluZVRyYW5zZm9ybSogb3JpZ2luYWxUcmFuc2Zvcm1hdGlvbiA9
IDA7CiAKICAgICAvLyBJbiBjYXNlIHRoZSBmb250IGlzbid0IGRyYXduIGF0IGEgcGl4ZWwtZXhh
Y3QgYmFzZWxpbmUgYW5kIHdlIGNhbiBlYXNpbHkKQEAgLTExMzgsNyArMTEzOCw3IEBAIHZvaWQg
UGFpbnRlck9wZW5WRzo6ZHJhd1RleHQoVkdGb250IHZnRm8KICAgICAgICAgICAgIG1fc3RhdGUt
PnN1cmZhY2VUcmFuc2Zvcm1hdGlvbi5hKCksIDAsCiAgICAgICAgICAgICAwLCBtX3N0YXRlLT5z
dXJmYWNlVHJhbnNmb3JtYXRpb24uZCgpLAogICAgICAgICAgICAgcm91bmRmKGVmZmVjdGl2ZVBv
aW50LngoKSksIHJvdW5kZihlZmZlY3RpdmVQb2ludC55KCkpKSk7Ci0gICAgICAgIHAgPSBGbG9h
dFBvaW50KCk7CisgICAgICAgIHAgPSBHcmFwaGljc1BvaW50KCk7CiAgICAgfQogCiAgICAgY29u
c3QgVkdmbG9hdCB2Z1BvaW50WzJdID0geyBwLngoKSwgcC55KCkgfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9QYWludGVyT3BlblZHLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhaW50ZXJPcGVu
VkcuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudmcvUGFpbnRlck9wZW5WRy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIEZs
b2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc1BvaW50OworY2xhc3Mg
R3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBQYXRo
OwpAQCAtOTcsMjQgKzk3LDI0IEBAIHB1YmxpYzoKICAgICBib29sIGFudGlhbGlhc2luZ0VuYWJs
ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldEFudGlhbGlhc2luZ0VuYWJsZWQoYm9vbCk7CiAKLSAg
ICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9
IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwotICAgIHZvaWQgZHJhd1JvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNp
emUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBi
b3R0b21SaWdodCwgVkdiaXRmaWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdf
RklMTF9QQVRIKSk7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBWR2Jp
dGZpZWxkIHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKKyAg
ICB2b2lkIGRyYXdSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBJbnRTaXpl
JiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9t
TGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9
IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFUSCkpOwogICAgIHZvaWQgZHJhd0xpbmUoY29u
c3QgSW50UG9pbnQmIGZyb20sIGNvbnN0IEludFBvaW50JiB0byk7CiAgICAgdm9pZCBkcmF3QXJj
KGNvbnN0IEludFJlY3QmIGVsbGlwc2VCb3VuZHMsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVT
cGFuLCBWR2JpdGZpZWxkIHBhaW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BB
VEgpKTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIGJvdW5kcywgVkdiaXRm
aWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSk7Ci0gICAg
dm9pZCBkcmF3UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMsIFZHYml0ZmllbGQgcGFpbnRNb2RlcyA9IChWR19TVFJPS0VfUEFUSCB8IFZHX0ZJTExfUEFU
SCkpOwotICAgIHZvaWQgZHJhd0ltYWdlKFRpbGVkSW1hZ2VPcGVuVkcqLCBjb25zdCBGbG9hdFJl
Y3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMpOworICAgIHZvaWQgZHJhd1BvbHlnb24oc2l6
ZV90IG51bVBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBWR2JpdGZpZWxkIHBh
aW50TW9kZXMgPSAoVkdfU1RST0tFX1BBVEggfCBWR19GSUxMX1BBVEgpKTsKKyAgICB2b2lkIGRy
YXdJbWFnZShUaWxlZEltYWdlT3BlblZHKiwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3QsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgc3JjKTsKICNpZmRlZiBPUEVOVkdfVkVSU0lPTl8xXzEKLSAgICB2b2lk
IGRyYXdUZXh0KFZHRm9udCwgVmVjdG9yPFZHdWludD4mIGNoYXJhY3RlcnMsIFZHZmxvYXQqIGFk
anVzdG1lbnRzWCwgVkdmbG9hdCogYWRqdXN0bWVudHNZLCBjb25zdCBGbG9hdFBvaW50Jik7Cisg
ICAgdm9pZCBkcmF3VGV4dChWR0ZvbnQsIFZlY3RvcjxWR3VpbnQ+JiBjaGFyYWN0ZXJzLCBWR2Zs
b2F0KiBhZGp1c3RtZW50c1gsIFZHZmxvYXQqIGFkanVzdG1lbnRzWSwgY29uc3QgR3JhcGhpY3NQ
b2ludCYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGVG
YWN0b3JzKTsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2NhbGVGYWN0b3Jz
KTsKICAgICB2b2lkIHJvdGF0ZShmbG9hdCByYWRpYW5zKTsKICAgICB2b2lkIHRyYW5zbGF0ZShm
bG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJiwgVkdi
aXRmaWVsZCBwYWludE1vZGVzID0gKFZHX1NUUk9LRV9QQVRIIHwgVkdfRklMTF9QQVRIKSwgV2lu
ZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpFUk8pOwogCi0gICAgdm9pZCBpbnRlcnNlY3RDbGlw
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGludGVyc2VjdENsaXBSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYpOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFBhaW50ZXJP
cGVuVkc6OkNsaXBPcGVyYXRpb24sIFdpbmRSdWxlIGNsaXBSdWxlID0gUlVMRV9OT05aRVJPKTsK
IAogICAgIFRpbGVkSW1hZ2VPcGVuVkcqIGFzTmV3TmF0aXZlSW1hZ2UoY29uc3QgSW50UmVjdCYg
c3JjLCBWR0ltYWdlRm9ybWF0KTsKQEAgLTEyOSw3ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGVzdHJveVBhaW50ZXJTdGF0ZXMoKTsKICAgICB2b2lkIGFwcGx5U3RhdGUoKTsKIAotICAg
IHZvaWQgaW50ZXJzZWN0U2Npc3NvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBp
bnRlcnNlY3RTY2lzc29yUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogcHJpdmF0ZToKICAg
ICBWZWN0b3I8UGxhdGZvcm1QYWludGVyU3RhdGUqPiBtX3N0YXRlU3RhY2s7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGF0aE9wZW5WRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BhdGhPcGVu
VkcuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9QYXRoT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBA
QAogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGFpbnRlck9wZW5WRy5oIgpAQCAtMTIzLDE0ICsxMjMsMTQgQEAgUGF0aCYgUGF0aDo6b3Bl
cmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotRmxvYXRQ
b2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKK0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3Vy
cmVudFBvaW50KCkgY29uc3QgCiB7CiAgICAgLy8gRklYTUU6IGlzIHRoaXMgdGhlIHdheSB0byBy
ZXR1cm4gdGhlIGN1cnJlbnQgcG9pbnQgb2YgdGhlIHN1YnBhdGg/CiAgICAgcmV0dXJuIG1fY3Vy
cmVudFBvaW50OwogfQogCiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdCgpLmNvbnRhaW5zKHBvaW50
KTsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFw
cGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBQYXRoOjpzdHJva2VD
b250YWlucyhTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHBvaW50KSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAKQEAgLTE0OCwxNCArMTQ4
LDE0IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHAKICAgICByZXR1
cm4gKGNvbnN0X2Nhc3Q8UGF0aCo+KHRoaXMpKS0+c3Ryb2tlQm91bmRpbmdSZWN0KCkuY29udGFp
bnMocG9pbnQpOwogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCit2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uOwogICAgIHRyYW5zZm9ybWF0aW9uLnRy
YW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIHRyYW5zZm9ybSh0cmFu
c2Zvcm1hdGlvbik7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAor
R3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgVkdmbG9hdCBt
aW5YOwogICAgIFZHZmxvYXQgbWluWTsKQEAgLTE2NiwxMCArMTY2LDEwIEBAIEZsb2F0UmVjdCBQ
YXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogICAgIHZnUGF0aEJvdW5kcyhtX3BhdGgtPnZnUGF0
aCgpLCAmbWluWCwgJm1pblksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUX1ZHX05PX0VS
Uk9SKCk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQobWluWCwgbWluWSksIEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChHcmFwaGlj
c1BvaW50KG1pblgsIG1pblkpLCBHcmFwaGljc1NpemUod2lkdGgsIGhlaWdodCkpOwogfQogCi1G
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBw
bGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tl
U3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAK
QEAgLTE3OCw3ICsxNzgsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0
cm9rCiAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdCgpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50KQogewogICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBhdGhTZWdtZW50c1td
ID0geyBWR19NT1ZFX1RPX0FCUyB9OwogICAgIGNvbnN0IFZHZmxvYXQgcGF0aERhdGFbXSA9IHsg
cG9pbnQueCgpLCBwb2ludC55KCkgfTsKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIFBhdGg6Om1v
dmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2luCiAgICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9
IG1fcGF0aC0+bV9zdWJwYXRoU3RhcnRQb2ludCA9IHBvaW50OwogfQogCi12b2lkIFBhdGg6OmFk
ZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0aDo6YWRkTGluZVRvKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIHN0YXRpYyBjb25zdCBWR3VieXRlIHBh
dGhTZWdtZW50c1tdID0geyBWR19MSU5FX1RPX0FCUyB9OwogICAgIGNvbnN0IFZHZmxvYXQgcGF0
aERhdGFbXSA9IHsgcG9pbnQueCgpLCBwb2ludC55KCkgfTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2
b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwCiAgICAgbV9wYXRoLT5tX2N1
cnJlbnRQb2ludCA9IHBvaW50OwogfQogCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgZW5kUG9pbnQpCit2
b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2xQb2lu
dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgZW5kUG9pbnQpCiB7CiAgICAgc3RhdGljIGNvbnN0IFZH
dWJ5dGUgcGF0aFNlZ21lbnRzW10gPSB7IFZHX1FVQURfVE9fQUJTIH07CiAgICAgY29uc3QgVkdm
bG9hdCBwYXRoRGF0YVtdID0geyBjb250cm9sUG9pbnQueCgpLCBjb250cm9sUG9pbnQueSgpLCBl
bmRQb2ludC54KCksIGVuZFBvaW50LnkoKSB9OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgUGF0
aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2kKICAgICBtX3BhdGgtPm1fY3VycmVudFBv
aW50ID0gZW5kUG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQy
LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2ludCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVU
byhjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50
JiBjb250cm9sUG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50JiBlbmRQb2ludCkKIHsKICAgICBz
dGF0aWMgY29uc3QgVkd1Ynl0ZSBwYXRoU2VnbWVudHNbXSA9IHsgVkdfQ1VCSUNfVE9fQUJTIH07
CiAgICAgY29uc3QgVkdmbG9hdCBwYXRoRGF0YVtdID0geyBjb250cm9sUG9pbnQxLngoKSwgY29u
dHJvbFBvaW50MS55KCksIGNvbnRyb2xQb2ludDIueCgpLCBjb250cm9sUG9pbnQyLnkoKSwgZW5k
UG9pbnQueCgpLCBlbmRQb2ludC55KCkgfTsKQEAgLTIyNiwxOCArMjI2LDE4IEBAIHZvaWQgUGF0
aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFAKICAgICBtX3BhdGgtPm1fY3VycmVudFBv
aW50ID0gZW5kUG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGZsb2F0IHJhZGl1cykKK3ZvaWQg
UGF0aDo6YWRkQXJjVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludDIsIGZsb2F0IHJhZGl1cykKIHsKICAgICAvLyBTZWUgaHR0cDovL3BoaWxp
cC5odG1sNS5vcmcvdGVzdHMvY2FudmFzL3N1aXRlL3Rlc3RzL3NwZWMuaHRtbCNhcmN0by4KIAot
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MCA9IG1fcGF0aC0+bV9jdXJyZW50UG9pbnQ7Cisg
ICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQwID0gbV9wYXRoLT5tX2N1cnJlbnRQb2ludDsK
ICAgICBpZiAoIXJhZGl1cyB8fCBwb2ludDAgPT0gcG9pbnQxIHx8IHBvaW50MSA9PSBwb2ludDIp
IHsKICAgICAgICAgYWRkTGluZVRvKHBvaW50MSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBGbG9hdFNpemUgdjAxID0gcG9pbnQwIC0gcG9pbnQxOwotICAgIEZsb2F0U2l6ZSB2MjEg
PSBwb2ludDIgLSBwb2ludDE7CisgICAgR3JhcGhpY3NTaXplIHYwMSA9IHBvaW50MCAtIHBvaW50
MTsKKyAgICBHcmFwaGljc1NpemUgdjIxID0gcG9pbnQyIC0gcG9pbnQxOwogCiAgICAgLy8gc2lu
KEEgLSBCKSA9IHNpbihBKSAqIGNvcyhCKSAtIHNpbihCKSAqIGNvcyhBKQogICAgIGRvdWJsZSBj
cm9zcyA9IHYwMS53aWR0aCgpICogdjIxLmhlaWdodCgpIC0gdjAxLmhlaWdodCgpICogdjIxLndp
ZHRoKCk7CkBAIC0yNTMsMTAgKzI1MywxMCBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZs
b2F0UG9pbnQmIHBvCiAgICAgZG91YmxlIGFuZ2xlID0gKHBpRG91YmxlIC0gZmFicyhhc2luKGNy
b3NzIC8gKGQwMSAqIGQyMSkpKSkgKiAwLjU7CiAgICAgZG91YmxlIHNwYW4gPSByYWRpdXMgKiB0
YW4oYW5nbGUpOwogICAgIGRvdWJsZSByYXRlID0gc3BhbiAvIGQwMTsKLSAgICBGbG9hdFBvaW50
IHN0YXJ0UG9pbnQgPSBGbG9hdFBvaW50KHBvaW50MS54KCkgKyB2MDEud2lkdGgoKSAqIHJhdGUs
CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvaW50ID0gR3JhcGhpY3NQb2ludChwb2ludDEueCgp
ICsgdjAxLndpZHRoKCkgKiByYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9pbnQxLnkoKSArIHYwMS5oZWlnaHQoKSAqIHJhdGUpOwogICAgIHJhdGUgPSBzcGFu
IC8gZDIxOwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQgPSBGbG9hdFBvaW50KHBvaW50MS54KCkg
KyB2MjEud2lkdGgoKSAqIHJhdGUsCisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludCA9IEdyYXBo
aWNzUG9pbnQocG9pbnQxLngoKSArIHYyMS53aWR0aCgpICogcmF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb2ludDEueSgpICsgdjIxLmhlaWdodCgpICogcmF0ZSk7
CiAKICAgICAvLyBGYTogbGFyZ2UgYXJjIGZsYWcsIG1ha2VzIHRoZSBkaWZmZXJlbmNlIGJldHdl
ZW4gU0NXQVJDX1RPIGFuZCBMQ1dBUkNfVE8KQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIFBhdGg6
OmNsb3NlU3VicGF0aCgpCiAgICAgbV9wYXRoLT5tX2N1cnJlbnRQb2ludCA9IG1fcGF0aC0+bV9z
dWJwYXRoU3RhcnRQb2ludDsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2lu
dCYgY2VudGVyLCBmbG9hdCByYWRpdXMsIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xl
LCBib29sIGFudGljbG9ja3dpc2UpCit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBHcmFwaGljc1Bv
aW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5n
bGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICAvLyBUaGUgT3BlblZHIHNwZWMgc2F5cyBu
b3RoaW5nIGFib3V0IGluZiBhcyByYWRpdXMgb3Igc3RhcnQvZW5kIGFuZ2xlLgogICAgIC8vIFdl
YktpdCBzZWVtcyB0byBwYXNzIHRob3NlIChlLmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQ0OSksCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBQYXRoOjphZGRB
cmMoY29uc3QgRmxvYXRQb2ludCYgY2VudAogICAgIG1fcGF0aC0+bV9jdXJyZW50UG9pbnQuc2V0
WShlbmRZKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IFZHdWJ5dGUgcGF0aFNlZ21lbnRzW10gPSB7CiAgICAgICAgIFZHX01PVkVfVE9f
QUJTLApAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QKICAgICBtX3BhdGgtPm1fY3VycmVudFBvaW50ID0gbV9wYXRoLT5tX3N1YnBhdGhT
dGFydFBvaW50ID0gcmVjdC5sb2NhdGlvbigpOwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCkKIHsKICAgICBzdGF0aWMgY29uc3QgVkd1Ynl0ZSBwYXRoU2VnbWVudHNb
XSA9IHsKICAgICAgICAgVkdfTU9WRV9UT19BQlMsCkBAIC00NzIsNyArNDcyLDcgQEAgZmxvYXQg
UGF0aDo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi1GbG9hdFBvaW50
IFBhdGg6OnBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKK0dyYXBo
aWNzUG9pbnQgUGF0aDo6cG9pbnRBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25z
dAogewogICAgIFZHZmxvYXQgeCA9IDAsIHkgPSAwOwogICAgIG1fcGF0aC0+bWFrZUNvbXBhdGli
bGVDb250ZXh0Q3VycmVudCgpOwpAQCAtNDgwLDcgKzQ4MCw3IEBAIEZsb2F0UG9pbnQgUGF0aDo6
cG9pbnRBdExlbmd0aChmbG9hdCBsZW4KICAgICB2Z1BvaW50QWxvbmdQYXRoKG1fcGF0aC0+dmdQ
YXRoKCksIDAsIHZnR2V0UGFyYW1ldGVyaShtX3BhdGgtPnZnUGF0aCgpLCBWR19QQVRIX05VTV9T
RUdNRU5UUyksCiAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsICZ4LCAmeSwgMCwgMCk7CiAg
ICAgb2sgPSAodmdHZXRFcnJvcigpID09IFZHX05PX0VSUk9SKTsKLSAgICByZXR1cm4gRmxvYXRQ
b2ludCh4LCB5KTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludCh4LCB5KTsKIH0KIAogZmxvYXQg
UGF0aDo6bm9ybWFsQW5nbGVBdExlbmd0aChmbG9hdCBsZW5ndGgsIGJvb2wmIG9rKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1BsYXRmb3JtUGF0
aE9wZW5WRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW52Zy9QbGF0Zm9ybVBhdGhPcGVuVkcuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvUGxhdGZvcm1QYXRoT3BlblZHLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgUGxhdGZvcm1QYXRoT3BlblZH
X2gKICNkZWZpbmUgUGxhdGZvcm1QYXRoT3BlblZHX2gKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiU2hhcmVkUmVzb3VyY2VP
cGVuVkcuaCIKIAogI2luY2x1ZGUgPG9wZW52Zy5oPgpAQCAtMzksOCArMzksOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjbGVhcigpOwogCiBwdWJsaWM6Ci0gICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQ
b2ludDsKLSAgICBGbG9hdFBvaW50IG1fc3VicGF0aFN0YXJ0UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBtX2N1cnJlbnRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fc3VicGF0aFN0YXJ0UG9p
bnQ7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVQYXRoKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5WRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1h
Z2VPcGVuVkcuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW52Zy9UaWxlZEltYWdlT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAsNyArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRpbGVkSW1hZ2VP
cGVuVkcuaCIKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJWR1V0aWxzLmgiCiAKQEAgLTg4
LDcgKzg4LDcgQEAgdm9pZCBUaWxlZEltYWdlT3BlblZHOjpzZXRUaWxlKGludCB4SW5kZQogICAg
IG1fdGlsZXMuYXQoaSkgPSBpbWFnZTsKIH0KIAotSW50UmVjdCBUaWxlZEltYWdlT3BlblZHOjp0
aWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CitJbnRSZWN0IFRpbGVkSW1h
Z2VPcGVuVkc6OnRpbGVzSW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkgY29uc3QKIHsK
ICAgICBpbnQgbGVmdEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0LngoKSkgLyBtX21heFRp
bGVTaXplLndpZHRoKCk7CiAgICAgaW50IHRvcEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0
LnkoKSkgLyBtX21heFRpbGVTaXplLmhlaWdodCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1RpbGVkSW1hZ2VPcGVuVkcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVGlsZWRJbWFnZU9wZW5WRy5o
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW52Zy9UaWxlZEltYWdlT3BlblZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CiAKIGNsYXNzIFRpbGVkSW1hZ2VPcGVuVkcgOiBwdWJsaWMgU2hhcmVkUmVzb3VyY2VP
cGVuVkcgewogcHVibGljOgpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgaW50IG51bUNv
bHVtbnMoKSBjb25zdDsKICAgICBpbnQgbnVtUm93cygpIGNvbnN0OwogCi0gICAgSW50UmVjdCB0
aWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBJbnRSZWN0IHRpbGVzSW5S
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUaWxlKGludCB4
SW5kZXgsIGludCB5SW5kZXgsIFZHSW1hZ2UpOwogICAgIFZHSW1hZ2UgdGlsZShpbnQgeEluZGV4
LCBpbnQgeUluZGV4KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9WR1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdVdGlscy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiVkdVdGlscy5oIgogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTAyLDcgKzEwMiw3IEBAIFZHUmVjdDo6VkdSZWN0KGNvbnN0
IFZHZmxvYXQgZGF0YVs0XSkKICAgICBtX2RhdGFbM10gPSBkYXRhWzNdOwogfQogCi1WR1JlY3Q6
OlZHUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitWR1JlY3Q6OlZHUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QpCiB7CiAgICAgbV9kYXRhWzBdID0gcmVjdC54KCk7CiAgICAgbV9kYXRh
WzFdID0gcmVjdC55KCk7CkBAIC0xMTAsMTIgKzExMCwxMiBAQCBWR1JlY3Q6OlZHUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgbV9kYXRhWzNdID0gcmVjdC5oZWlnaHQoKTsKIH0KIAot
VkdSZWN0OjpvcGVyYXRvciBGbG9hdFJlY3QoKSBjb25zdAorVkdSZWN0OjpvcGVyYXRvciBHcmFw
aGljc1JlY3QoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QobV9kYXRhWzBdLCBtX2Rh
dGFbMV0sIG1fZGF0YVsyXSwgbV9kYXRhWzNdKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KG1f
ZGF0YVswXSwgbV9kYXRhWzFdLCBtX2RhdGFbMl0sIG1fZGF0YVszXSk7CiB9CiAKLUZsb2F0UmVj
dDo6b3BlcmF0b3IgVkdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdDo6b3BlcmF0b3IgVkdSZWN0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gVkdSZWN0KCp0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9WR1V0aWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL1ZHVXRpbHMuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvVkdV
dGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgY29u
c3QgY2hhciogdG9WR0Vycm9yQ29uc3QKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xh
c3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIGNsYXNzIFZHTWF0cml4IHsKQEAgLTc4LDkgKzc4
LDkgQEAgcHJpdmF0ZToKIGNsYXNzIFZHUmVjdCB7CiBwdWJsaWM6CiAgICAgVkdSZWN0KGNvbnN0
IFZHZmxvYXQgZGF0YVs0XSk7Ci0gICAgVkdSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFZH
UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICBjb25zdCBWR2Zsb2F0KiB0b1ZHZmxvYXQo
KSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBvcGVyYXRvciBGbG9hdFJlY3QoKSBjb25z
dDsKKyAgICBvcGVyYXRvciBHcmFwaGljc1JlY3QoKSBjb25zdDsKIHByaXZhdGU6CiAgICAgVkdm
bG9hdCBtX2RhdGFbNF07CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vU2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28v
U2ltcGxlRm9udERhdGFQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgpAQCAtMTQwLDkgKzE0MCw5IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBp
dGNoKCkKICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9wbGF0Zm9ybURhdGEuaXNGaXhlZFBp
dGNoKCk7CiB9CiAKLUZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JH
bHlwaChHbHlwaCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1C
b3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cisg
ICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0
UG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgotCi0jaW5jbHVkZSA8UVBvaW50Rj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1G
bG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFFQb2ludEYmIHApCi0gICAgOiBtX3gocC54KCkp
Ci0gICAgLCBtX3kocC55KCkpCi17Ci19Ci0KLUZsb2F0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYo
KSBjb25zdAotewotICAgIHJldHVybiBRUG9pbnRGKG1feCwgbV95KTsKLX0KLQotfQotCi0vLyB2
aW06IHRzPTQgc3c9NCBldApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRmxvYXRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0Zsb2F0UmVjdFF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFJlY3RRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0KLSNpbmNsdWRlIDxRUmVj
dEY+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qg
UVJlY3RGJiByKQotICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKLSAgICAsIG1fc2l6ZShy
LndpZHRoKCkKLSAgICAsIHIuaGVpZ2h0KCkpCi17Ci19Ci0KLUZsb2F0UmVjdDo6b3BlcmF0b3Ig
UVJlY3RGKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUVJlY3RGKHgoKSwgeSgpLCB3aWR0aCgpLCBo
ZWlnaHQoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGbG9hdFJlY3Q6Om5vcm1hbGl6ZWQoKSBjb25zdAot
ewotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkUmVjdCA9ICp0aGlzOwotCi0gICAgaWYgKHdpZHRo
KCkgPCAwKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFgoeCgpICsgd2lkdGgoKSk7Ci0g
ICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFdpZHRoKC13aWR0aCgpKTsKLSAgICB9Ci0gICAgaWYg
KGhlaWdodCgpIDwgMCkgewotICAgICAgICBub3JtYWxpemVkUmVjdC5zZXRZKHkoKSArIGhlaWdo
dCgpKTsKLSAgICAgICAgbm9ybWFsaXplZFJlY3Quc2V0SGVpZ2h0KC1oZWlnaHQoKSk7Ci0gICAg
fQotICAgIHJldHVybiBub3JtYWxpemVkUmVjdDsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdGF0
aWMgUVBlbiBzdHJva2VQZW5Gb3JDb250ZXh0KEdyYXBoaWNzCiAgICAgcmV0dXJuIFFQZW4oUUNv
bG9yKGN0eC0+c3Ryb2tlQ29sb3IoKSksIGN0eC0+c3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCi1z
dGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bywgY29u
c3QgUUZvbnQmIGZvbnQsIGJvb2wgaXNDb21wbGV4VGV4dCkKK3N0YXRpYyB2b2lkIGRyYXdUZXh0
Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBRRm9udCYgZm9udCwg
Ym9vbCBpc0NvbXBsZXhUZXh0KQogewogICAgIGlmICh0byA8IDApCiAgICAgICAgIHRvID0gcnVu
Lmxlbmd0aCgpOwpAQCAtMjYxLDcgKzI2MSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9u
KEdyYXBoaWNzQ29udGUKICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgZHJhd1RleHRD
b21tb24oY3R4LCBydW4sIHBvaW50LCBmcm9tLCB0bywgZm9udCgpLCAvKiBpc0NvbXBsZXhUZXh0
ID0gKi90cnVlKTsKIH0KQEAgLTI5OCw3ICsyOTgsNyBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4CiAgICAgcmV0dXJuIGxpbmUueFRvQ3Vyc29yKHBvc2l0aW9uKTsK
IH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwdCwgaW50IGgsIGludCBm
cm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1h
bGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwogICAgIFFTdHJpbmcg
c3RyaW5nID0gZnJvbVJhd0RhdGFXaXRob3V0UmVmKHNhbml0aXplZCk7CkBAIC0zMTEsNyArMzEx
LDcgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VAogICAgIGlmICh4
MiA8IHgxKQogICAgICAgICBxU3dhcCh4MSwgeDIpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChw
dC54KCkgKyB4MSwgcHQueSgpLCB4MiAtIHgxLCBoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KHB0LngoKSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOwogfQogCiBib29sIEZvbnQ6OmNhblJl
dHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCkBAIC0zMTksMTMgKzMxOSwxMyBAQCBi
b29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0
IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8s
IGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBj
b25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywg
Y29uc3QgR3JhcGhpY3NQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyog
dG8gKi8pIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogI2lmIEhBVkUoUVJB
V0ZPTlQpCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkg
Y29uc3QKIHsKICAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MTAsNyArNDEwLDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVv
Z3JhcGhzSW5DbwogCiAjZWxzZSAvLyAhSEFWRShRUkFXRk9OVCkKIAotdm9pZCBGb250OjpkcmF3
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6
ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgZHJhd1RleHRDb21tb24oY3R4LCBydW4sIHBvaW50LCBmcm9tLCB0bywgZm9udCgpLCAvKiBp
c0NvbXBsZXhUZXh0ID0gKi9mYWxzZSk7CiB9CkBAIC00NjAsNyArNDYwLDcgQEAgZmxvYXQgRm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29ucwogfQogCiAKLUZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBG
b250OjpzZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHB0LCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAg
ICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJz
KCksIHJ1bi5sZW5ndGgoKSk7CiAgICAgUVN0cmluZyB3aG9sZVRleHQgPSBmcm9tUmF3RGF0YVdp
dGhvdXRSZWYoc2FuaXRpemVkKTsKQEAgLTQ2OSw3ICs0NjksNyBAQCBGbG9hdFJlY3QgRm9udDo6
c2VsZWN0aW9uUmVjdEZvclNpbXBsZVRlCiAgICAgaW50IHN0YXJ0WCA9IFFGb250TWV0cmljcyhm
b250KCkpLndpZHRoKHdob2xlVGV4dCwgZnJvbSwgUXQ6OlRleHRCeXBhc3NTaGFwaW5nKTsKICAg
ICBpbnQgd2lkdGggPSBRRm9udE1ldHJpY3MoZm9udCgpKS53aWR0aChzZWxlY3RlZFRleHQsIC0x
LCBRdDo6VGV4dEJ5cGFzc1NoYXBpbmcpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCkg
KyBzdGFydFgsIHB0LnkoKSwgd2lkdGgsIGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocHQu
eCgpICsgc3RhcnRYLCBwdC55KCksIHdpZHRoLCBoKTsKIH0KIAogYm9vbCBGb250OjpjYW5FeHBh
bmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCkBAIC01MDEsNyArNTAxLDcgQEAgaW50
IEZvbnQ6OmVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9taQogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRl
eHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWlj
U3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8q
IGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4
dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBj
b25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFkaWVudFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIFFHcmFkaWVudCogR3JhZGllbnQ6
OnBsYXRmb3JtR3JhZGllbnQoKQogICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdy
YWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
ZmlsbFJlY3QocmVjdCwgKnBsYXRmb3JtR3JhZGllbnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBRR0xXaWRnZXQqIGdldFZpZXdwb3J0R0xXaWRnZXQo
KTsKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIEJp
dG1hcFRleHR1cmUqIG1hc2spIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFz
aykgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqLCBjb25zdCBRU3R5
bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7CkBAIC01NTUsMTEgKzU1NSwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoCiB9CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNr
KSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBHcmFwaGljc1JlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHksIEJpdG1hcFRleHR1cmUqIG1hc2spIGNvbnN0CiB7CiAgICAgaWYgKHRleHR1cmVNYXBwZXIt
PmlzT3BlbkdMQmFja2VkKCkpIHsKICAgICAgICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhtYXBHTCA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwotICAgICAgICB0
ZXhtYXBHTC0+ZHJhd1RleHR1cmUobV90ZXh0dXJlLCAhbV9hdHRycy5hbHBoYSwgRmxvYXRTaXpl
KDEsIDEpLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHksIG1hc2ssIHRydWUgLyogZmxpcCAq
Lyk7CisgICAgICAgIHRleG1hcEdMLT5kcmF3VGV4dHVyZShtX3RleHR1cmUsICFtX2F0dHJzLmFs
cGhhLCBHcmFwaGljc1NpemUoMSwgMSksIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSwgbWFz
aywgdHJ1ZSAvKiBmbGlwICovKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
NSw3ICszMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhCiAK
ICAgICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCi0gICAgbV9kYXRhLT5zaGFkb3ctPnNldFNo
YWRvd1ZhbHVlcyhGbG9hdFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0Js
dXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5z
aGFkb3dDb2xvclNwYWNlLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBt
X2RhdGEtPnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEdyYXBoaWNzU2l6ZShtX3N0YXRlLnNoYWRv
d0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRl
LnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UsIG1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBh
IHN0cm9rZWQgYm9yZGVyLgpAQCAtMzU5LDggKzM1OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBJbnQKIAogICAgIGZsb2F0IHdpZHRoID0gc3Ryb2tlVGhpY2tuZXNz
KCk7CiAKLSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcDIgPSBw
b2ludDI7CisgICAgR3JhcGhpY3NQb2ludCBwMSA9IHBvaW50MTsKKyAgICBHcmFwaGljc1BvaW50
IHAyID0gcG9pbnQyOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngo
KSk7CiAKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwpAQCAtMzg3LDExICszODcsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAgICAgICAvLyBE
byBhIHJlY3QgZmlsbCBvZiBvdXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBo
YXZlIHRoZQogICAgICAgICAvLyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhl
biBkcmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgogICAgICAgICBpZiAoaXNWZXJ0
aWNhbExpbmUpIHsKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KEZsb2F0UmVjdChwMS54KCkgLSB3
aWR0aCAvIDIsIHAxLnkoKSAtIHdpZHRoLCB3aWR0aCwgd2lkdGgpLCBRQ29sb3IoY29sb3IpKTsK
LSAgICAgICAgICAgIHAtPmZpbGxSZWN0KEZsb2F0UmVjdChwMi54KCkgLSB3aWR0aCAvIDIsIHAy
LnkoKSwgd2lkdGgsIHdpZHRoKSwgUUNvbG9yKGNvbG9yKSk7CisgICAgICAgICAgICBwLT5maWxs
UmVjdChHcmFwaGljc1JlY3QocDEueCgpIC0gd2lkdGggLyAyLCBwMS55KCkgLSB3aWR0aCwgd2lk
dGgsIHdpZHRoKSwgUUNvbG9yKGNvbG9yKSk7CisgICAgICAgICAgICBwLT5maWxsUmVjdChHcmFw
aGljc1JlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCksIHdpZHRoLCB3aWR0aCksIFFDb2xv
cihjb2xvcikpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcC0+ZmlsbFJlY3QoRmxv
YXRSZWN0KHAxLngoKSAtIHdpZHRoLCBwMS55KCkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0aCks
IFFDb2xvcihjb2xvcikpOwotICAgICAgICAgICAgcC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHAyLngo
KSwgcDIueSgpIC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpLCBRQ29sb3IoY29sb3IpKTsKKyAg
ICAgICAgICAgIHAtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChwMS54KCkgLSB3aWR0aCwgcDEueSgp
IC0gd2lkdGggLyAyLCB3aWR0aCwgd2lkdGgpLCBRQ29sb3IoY29sb3IpKTsKKyAgICAgICAgICAg
IHAtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChwMi54KCksIHAyLnkoKSAtIHdpZHRoIC8gMiwgd2lk
dGgsIHdpZHRoKSwgUUNvbG9yKGNvbG9yKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBFeGFt
cGxlOiA4MCBwaXhlbHMgd2l0aCBhIHdpZHRoIG9mIDMwIHBpeGVscy4KQEAgLTQ1MCw3ICs0NTAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgbV9kYXRh
LT5wKCktPmRyYXdFbGxpcHNlKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywg
Ym9vbCBzaG91bGRBbnRpYWxpYXMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBz
aG91bGRBbnRpYWxpYXMpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDczLDcgKzQ3Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
dmV4UG9seWdvbigKICAgICBwLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcs
IGFudGlBbGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdv
bihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgYW50aWFs
aWFzZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51
bVBvaW50cywgY29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU2MSw3
ICs1NjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAg
ICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKICAgICAgICAgaWYgKG1fZGF0
YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gfHwgbV9zdGF0
ZS5zdHJva2VHcmFkaWVudCkKICAgICAgICAgewotICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nUmVjdCA9IHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCk7CisgICAgICAgICAgICBH
cmFwaGljc1JlY3QgYm91bmRpbmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3Qo
KTsKICAgICAgICAgICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBw
ZW4ud2lkdGhGKCkpOwogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0
ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIGJvdW5kaW5nUmVjdCk7CiAgICAgICAg
ICAgICBpZiAoc2hhZG93Q29udGV4dCkgewpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFAKICAgICAgICAgcC0+c3Ryb2tlUGF0aChwbGF0
Zm9ybVBhdGgsIHBlbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVwZWF0UGF0dGVy
bihRUGFpbnRlciogcCwgUVBpeG1hcCogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgYm9vbCByZXBlYXRYLCBjb25zdCBib29sIHJlcGVhdFkpCitzdGF0aWMgaW5saW5lIHZvaWQg
ZHJhd1JlcGVhdFBhdHRlcm4oUVBhaW50ZXIqIHAsIFFQaXhtYXAqIGltYWdlLCBjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QsIGNvbnN0IGJvb2wgcmVwZWF0WCwgY29uc3QgYm9vbCByZXBlYXRZKQog
ewogICAgIC8vIFBhdHRlcm5zIG11c3QgYmUgcGFpbnRlZCBzbyB0aGF0IHRoZSB0b3AgbGVmdCBv
ZiB0aGUgZmlyc3QgaW1hZ2UgaXMgYW5jaG9yZWQgYXQKICAgICAvLyB0aGUgb3JpZ2luIG9mIHRo
ZSBjb29yZGluYXRlIHNwYWNlCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGRyYXdSZXBlYXRQYXR0ZXJuKFFQYQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzIyLDcgKzcyMiw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IEludFJlY3QKICAgICBtX2RhdGEtPnAoKS0+c2V0Q2xpcFJlY3QocmVj
dCwgUXQ6OkludGVyc2VjdENsaXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtODg2LDEzICs4ODYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29ucwogICAgIGRyYXdGb2N1c1JpbmdGb3JQYXRoKG1fZGF0YS0+cCgpLCBw
YXRoLCBjb2xvciwgbV9kYXRhLT5hbnRpQWxpYXNpbmdGb3JSZWN0c0FuZExpbmVzKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBib29sKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dChjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29sKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZs
b2F0UG9pbnQgc3RhcnRQb2ludCA9IG9yaWdpbjsKLSAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0g
b3JpZ2luICsgRmxvYXRTaXplKHdpZHRoLCAwKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9p
bnQgPSBvcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb2ludCA9IG9yaWdpbiArIEdyYXBo
aWNzU2l6ZSh3aWR0aCwgMCk7CiAKICAgICAvLyBJZiBwYWludGVuZ2luZSB0eXBlIGlzIFgxMSB0
byBhdm9pZCBhcnRpZmFjdHMKICAgICAvLyBsaWtlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDIyNDgKQEAgLTkxNiw3ICs5MTYsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvCiAgICAgZHJhd0xpbmUoSW50UG9pbnQoc3RhcnRQ
b2ludC54KCksIHN0YXJ0UG9pbnQueSgpKSwgSW50UG9pbnQoZW5kUG9pbnQueCgpLCBlbmRQb2lu
dC55KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNr
aW5nKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBoaWNz
UG9pbnQmLCBmbG9hdCwgVGV4dENoZWNraW5nTGluZVN0eWxlKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkyNCw3ICs5MjQsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25z
dCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCitHcmFwaGljc1JlY3QgR3JhcGhpY3ND
b250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJlY3QsIFJv
dW5kaW5nTW9kZSkKIHsKICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8g
cGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8g
YWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhp
cyBjb252ZXJzaW9uIGlmIHdlIGhhdmUgYQpAQCAtOTQ3LDEyICs5NDcsMTIgQEAgRmxvYXRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZQogICAgIGlmIChkZXZpY2VPcmlnaW4ueCgp
ID09IGRldmljZUxvd2VyUmlnaHQueCgpICYmIGZyZWN0LndpZHRoKCkpCiAgICAgICAgIGRldmlj
ZUxvd2VyUmlnaHQuc2V0WChkZXZpY2VMb3dlclJpZ2h0LngoKSArIDEpOwogCi0gICAgRmxvYXRQ
b2ludCByb3VuZGVkT3JpZ2luID0gRmxvYXRQb2ludChkZXZpY2VPcmlnaW4ueCgpIC8gZGV2aWNl
U2NhbGVYLCBkZXZpY2VPcmlnaW4ueSgpIC8gZGV2aWNlU2NhbGVZKTsKLSAgICBGbG9hdFBvaW50
IHJvdW5kZWRMb3dlclJpZ2h0ID0gRmxvYXRQb2ludChkZXZpY2VMb3dlclJpZ2h0LngoKSAvIGRl
dmljZVNjYWxlWCwgZGV2aWNlTG93ZXJSaWdodC55KCkgLyBkZXZpY2VTY2FsZVkpOwotICAgIHJl
dHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVk
T3JpZ2luKTsKKyAgICBHcmFwaGljc1BvaW50IHJvdW5kZWRPcmlnaW4gPSBHcmFwaGljc1BvaW50
KGRldmljZU9yaWdpbi54KCkgLyBkZXZpY2VTY2FsZVgsIGRldmljZU9yaWdpbi55KCkgLyBkZXZp
Y2VTY2FsZVkpOworICAgIEdyYXBoaWNzUG9pbnQgcm91bmRlZExvd2VyUmlnaHQgPSBHcmFwaGlj
c1BvaW50KGRldmljZUxvd2VyUmlnaHQueCgpIC8gZGV2aWNlU2NhbGVYLCBkZXZpY2VMb3dlclJp
Z2h0LnkoKSAvIGRldmljZVNjYWxlWSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChyb3VuZGVk
T3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBHcmFwaGljc1NpemUm
IHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQogewogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5
IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMKQEAgLTk2
MCwxMCArOTYwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdygK
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICAvLyBN
ZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNl
IENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gR3JhcGhpY3NTaXplKHNpemUud2lkdGgo
KSwgLXNpemUuaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIG1fZGF0YS0+c2hhZG93LT5zZXRTaGFk
b3dWYWx1ZXMoRmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVy
KSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIGNvbG9yLCBjb2xvclNwYWNlLCBtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2RhdGEtPnNoYWRvdy0+c2V0U2hhZG93VmFsdWVz
KEdyYXBoaWNzU2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1f
c3RhdGUuc2hhZG93T2Zmc2V0LCBjb2xvciwgY29sb3JTcGFjZSwgbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KCkKQEAgLTEwMzAsNyArMTAzMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXkKICAgICBkZWxldGUgbGF5ZXI7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIHAtPnNldENvbXBvc2l0
aW9uTW9kZShjdXJyZW50Q29tcG9zaXRpb25Nb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xMTg0LDcgKzExODQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90
YXRlKGZsb2F0IHJhZGlhCiAgICAgbV9kYXRhLT5wKCktPnJvdGF0ZShyYWQyZGVnKHFyZWFsKHJh
ZGlhbnMpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBz
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NMYXllclF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw3IEBACiAjaWYgIWRlZmluZWQoUVRfTk9fR1JBUEhJQ1NWSUVXKQogCiAjaW5jbHVkZSAi
Q3VycmVudFRpbWUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKQEAgLTI3OCw5ICsyNzgsOSBAQCBwdWJsaWM6CiAK
ICAgICBzdHJ1Y3QgU3RhdGUgewogICAgICAgICBHcmFwaGljc0xheWVyKiBtYXNrTGF5ZXI7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgcG9zOwotICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7
Ci0gICAgICAgIEZsb2F0U2l6ZSBzaXplOworICAgICAgICBHcmFwaGljc1BvaW50IHBvczsKKyAg
ICAgICAgR3JhcGhpY3NQb2ludDNEIGFuY2hvclBvaW50OworICAgICAgICBHcmFwaGljc1NpemUg
c2l6ZTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKICAgICAgICAgQ29sb3IgYmFj
a2dyb3VuZENvbG9yOwpAQCAtOTY4LDcgKzk2OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0Ojpz
ZXROZWVkc0Rpc3BsYXkoKQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCi12b2lk
IEdyYXBoaWNzTGF5ZXJRdDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1faW1wbC0+bV9wZW5kaW5nQ29udGVudC5yZWdp
b25Ub1VwZGF0ZSB8PSBRUmVjdEYocmVjdCkudG9BbGlnbmVkUmVjdCgpOwogICAgIG1faW1wbC0+
bm90aWZ5Q2hhbmdlKEdyYXBoaWNzTGF5ZXJRdEltcGw6OkRpc3BsYXlDaGFuZ2UpOwpAQCAtMTA3
OCw3ICsxMDc4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldE1hc2tMYXllcihHcmFwaAog
CiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFsdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJR
dDo6c2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgdmFsdWUpCiB7CiAgICAgaWYgKHZh
bHVlID09IHBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwODgsNyArMTA4OCw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRQb3NpdGlvbihjb25zdCAKIAogLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCiAqLwotdm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0QW5j
aG9yUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludDNEJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUg
PT0gYW5jaG9yUG9pbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA5OCw3ICsxMDk4LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldEFuY2hvclBvaW50KGNvbgogCiAvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKICovCi12b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHZhbHVlKQordm9pZCBHcmFwaGljc0xheWVyUXQ6OnNldFNpemUoY29uc3QgR3Jh
cGhpY3NTaXplJiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gc2l6ZSgpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0xheWVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0xheWVyUXQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhpY3NMYXll
ci5oCiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihj
b25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CkBAIC01MCw5ICs1MCw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBH
cmFwaGljc0xheWVyKiBuZXdDaGlsZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJl
bnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgcCk7CisgICAgdmlydHVh
bCB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sIGIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c1BvaW50UXQuY3BwCShyZXZpc2lvbiA5MTAxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6
YWNrQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCisjaW5jbHVkZSA8UVBvaW50
Rj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0
IFFQb2ludEYmIHApCisgICAgOiBtX3gocC54KCkpCisgICAgLCBtX3kocC55KCkpCit7Cit9CisK
K0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAoreworICAgIHJldHVybiBRUG9p
bnRGKG1feCwgbV95KTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NQb2ludFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1Bv
aW50UXQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzUG9pbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsy
NiwxOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogCiAjaW5jbHVkZSA8UVBvaW50Rj4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFFQb2lu
dEYmIHApCitHcmFwaGljc1BvaW50OjpHcmFwaGljc1BvaW50KGNvbnN0IFFQb2ludEYmIHApCiAg
ICAgOiBtX3gocC54KCkpCiAgICAgLCBtX3kocC55KCkpCiB7CiB9CiAKLUZsb2F0UG9pbnQ6Om9w
ZXJhdG9yIFFQb2ludEYoKSBjb25zdAorR3JhcGhpY3NQb2ludDo6b3BlcmF0b3IgUVBvaW50Rigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NSZWN0UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0
LmNwcAkocmV2aXNpb24gOTEwMTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0Zsb2F0UmVjdFF0LmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworI2luY2x1ZGUgPFFSZWN0Rj4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBRUmVjdEYmIHIpCisg
ICAgOiBtX2xvY2F0aW9uKHIudG9wTGVmdCgpKQorICAgICwgbV9zaXplKHIud2lkdGgoKQorICAg
ICwgci5oZWlnaHQoKSkKK3sKK30KKworRmxvYXRSZWN0OjpvcGVyYXRvciBRUmVjdEYoKSBjb25z
dAoreworICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30K
KworRmxvYXRSZWN0IEZsb2F0UmVjdDo6bm9ybWFsaXplZCgpIGNvbnN0Cit7CisgICAgRmxvYXRS
ZWN0IG5vcm1hbGl6ZWRSZWN0ID0gKnRoaXM7CisKKyAgICBpZiAod2lkdGgoKSA8IDApIHsKKyAg
ICAgICAgbm9ybWFsaXplZFJlY3Quc2V0WCh4KCkgKyB3aWR0aCgpKTsKKyAgICAgICAgbm9ybWFs
aXplZFJlY3Quc2V0V2lkdGgoLXdpZHRoKCkpOworICAgIH0KKyAgICBpZiAoaGVpZ2h0KCkgPCAw
KSB7CisgICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFkoeSgpICsgaGVpZ2h0KCkpOworICAgICAg
ICBub3JtYWxpemVkUmVjdC5zZXRIZWlnaHQoLWhlaWdodCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IG5vcm1hbGl6ZWRSZWN0OworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc1JlY3RRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NS
ZWN0UXQuY3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzUmVjdFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjcgKzI2
LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiAjaW5jbHVkZSA8UVJlY3RGPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IFFSZWN0RiYgcikK
K0dyYXBoaWNzUmVjdDo6R3JhcGhpY3NSZWN0KGNvbnN0IFFSZWN0RiYgcikKICAgICA6IG1fbG9j
YXRpb24oci50b3BMZWZ0KCkpCiAgICAgLCBtX3NpemUoci53aWR0aCgpCiAgICAgLCByLmhlaWdo
dCgpKQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0CitHcmFwaGlj
c1JlY3Q6Om9wZXJhdG9yIFFSZWN0RigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFFSZWN0Rih4KCks
IHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogfQogCi1GbG9hdFJlY3QgRmxvYXRSZWN0Ojpub3Jt
YWxpemVkKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBHcmFwaGljc1JlY3Q6Om5vcm1hbGl6ZWQoKSBj
b25zdAogewotICAgIEZsb2F0UmVjdCBub3JtYWxpemVkUmVjdCA9ICp0aGlzOworICAgIEdyYXBo
aWNzUmVjdCBub3JtYWxpemVkUmVjdCA9ICp0aGlzOwogCiAgICAgaWYgKHdpZHRoKCkgPCAwKSB7
CiAgICAgICAgIG5vcm1hbGl6ZWRSZWN0LnNldFgoeCgpICsgd2lkdGgoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBA
IFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UKICAgICByZXR1cm4gU3Rp
bGxJbWFnZTo6Y3JlYXRlKG1fZGF0YS5tX3BpeG1hcCk7CiB9CiAKLXZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChk
ZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsKQEAgLTE0Miw4ICsxNDIsOCBAQCB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3
SW1hZ2UobV9kYXRhLm1faW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQqIGRlc3RDb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7
CiAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewogICAgICAgICAvLyBXZSdyZSBk
cmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3
ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCkBAIC0xNTMsNyArMTUzLDcg
QEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAgICAgICBtX2Rh
dGEubV9pbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKLXZvaWQg
SW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGZsb2F0UmVjdCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGZsb2F0UmVjdCkgY29uc3QKIHsKICAg
ICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IG1fZGF0YS5tX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgIGlmICghbmF0aXZlSW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTEwMSw4ICsxMDEsOCBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
CiAgICAgcmV0dXJuIFN0aWxsSW1hZ2U6OmNyZWF0ZShsb2FkUmVzb3VyY2VQaXhtYXAobmFtZSkp
OwogfQogCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCkKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NQb2ludCYg
cGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRlc3RSZWN0KQogewogICAgIFFQaXhtYXAqIGZyYW1lUGl4bWFwID0gbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lUGl4bWFwKSAvLyBJZiBpdCdzIHRvbyBl
YXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KQEAgLTIwMSw4ICsyMDEsOCBAQCB2b2lk
IEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhCiB9CiAKIC8vIERyYXdpbmcgUm91
dGluZXMKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0
JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
K3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFw
aGljc1JlY3QmIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0
JiBzcmMsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
IHsKICAgICBRUmVjdEYgbm9ybWFsaXplZERzdCA9IGRzdC5ub3JtYWxpemVkKCk7CiAgICAgUVJl
Y3RGIG5vcm1hbGl6ZWRTcmMgPSBzcmMubm9ybWFsaXplZCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
OSw3ICs2MDksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0OjpyZXBhaW50KCkKIH0KIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRdDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJl
KikgY29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXQ6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwg
Qml0bWFwVGV4dHVyZSopIGNvbnN0CiB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29udGV4dCgpOwogICAgICAgICBRUGFpbnRlciog
cGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZh
dGVRdC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsx
MDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKCkgeyB9CiAgICAgLy8gQ29uc3QtY2FzdGluZyBoZXJlIGlzIHNhZmUsIHNpbmNl
IGFsbCBvZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcidzIGZ1bmN0aW9ucyBhcmUgY29uc3Qu
ZwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciosIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEdy
YXBoaWNzUmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKSBjb25zdDsKICNlbHNlCiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgp
IHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9QYXRo
UXQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1BhdGhRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBib29sIGlzUG9pbnRPblBhdGhCb3Jk
ZXIoY29uc3QgUVAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBhdGg6
OmNvbnRhaW5zKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25z
dAogewogICAgIFF0OjpGaWxsUnVsZSBzYXZlZFJ1bGUgPSBtX3BhdGguZmlsbFJ1bGUoKTsKICAg
ICBjb25zdF9jYXN0PFFQYWludGVyUGF0aCo+KCZtX3BhdGgpLT5zZXRGaWxsUnVsZShydWxlID09
IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7CkBAIC0x
MjMsNyArMTIzLDcgQEAgc3RhdGljIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaENvbnRleHQoKQog
ICAgIHJldHVybiBjb250ZXh0OwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9r
ZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citi
b29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGFwcGxpZXIpOwog
CkBAIC0xNDIsMTkgKzE0MiwxOSBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0
eWxlQXBwCiAgICAgcmV0dXJuIHN0cm9rZS5jcmVhdGVTdHJva2UobV9wYXRoKS5jb250YWlucyhw
b2ludCk7CiB9CiAKLXZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBR
VHJhbnNmb3JtIG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7CiAgICAgbV9wYXRoID0gbV9wYXRoICogbWF0cml4OwogfQogCi1GbG9hdFJl
Y3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpib3VuZGlu
Z1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGguYm91bmRpbmdSZWN0KCk7CiB9CiAK
LUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBh
cHBsaWVyKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJv
a2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKICAgICBRUGFpbnRlclBhdGhTdHJva2VyIHN0cm9r
ZTsKQEAgLTE3MiwzMiArMTcyLDMyIEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1Jl
Y3QoU3Ryb2sKICAgICByZXR1cm4gc3Ryb2tlLmNyZWF0ZVN0cm9rZShtX3BhdGgpLmJvdW5kaW5n
UmVjdCgpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
K3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIG1f
cGF0aC5tb3ZlVG8ocG9pbnQpOwogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9h
dFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcCkK
IHsKICAgICBtX3BhdGgubGluZVRvKHApOwogfQogCi12b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjph
ZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBjcCwgY29uc3QgR3JhcGhpY3NQb2lu
dCYgcCkKIHsKICAgICBtX3BhdGgucXVhZFRvKGNwLCBwKTsKIH0KIAotdm9pZCBQYXRoOjphZGRC
ZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3Ay
LCBjb25zdCBGbG9hdFBvaW50JiBwKQordm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0
IEdyYXBoaWNzUG9pbnQmIGNwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgY3AyLCBjb25zdCBHcmFw
aGljc1BvaW50JiBwKQogewogICAgIG1fcGF0aC5jdWJpY1RvKGNwMSwgY3AyLCBwKTsKIH0KIAot
dm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2lu
dCYgcDIsIGZsb2F0IHJhZGl1cykKK3ZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgR3JhcGhpY3NQ
b2ludCYgcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAg
RmxvYXRQb2ludCBwMChtX3BhdGguY3VycmVudFBvc2l0aW9uKCkpOworICAgIEdyYXBoaWNzUG9p
bnQgcDAobV9wYXRoLmN1cnJlbnRQb3NpdGlvbigpKTsKIAotICAgIEZsb2F0UG9pbnQgcDFwMCgo
cDAueCgpIC0gcDEueCgpKSwgKHAwLnkoKSAtIHAxLnkoKSkpOwotICAgIEZsb2F0UG9pbnQgcDFw
MigocDIueCgpIC0gcDEueCgpKSwgKHAyLnkoKSAtIHAxLnkoKSkpOworICAgIEdyYXBoaWNzUG9p
bnQgcDFwMCgocDAueCgpIC0gcDEueCgpKSwgKHAwLnkoKSAtIHAxLnkoKSkpOworICAgIEdyYXBo
aWNzUG9pbnQgcDFwMigocDIueCgpIC0gcDEueCgpKSwgKHAyLnkoKSAtIHAxLnkoKSkpOwogICAg
IGZsb2F0IHAxcDBfbGVuZ3RoID0gc3FydGYocDFwMC54KCkgKiBwMXAwLngoKSArIHAxcDAueSgp
ICogcDFwMC55KCkpOwogICAgIGZsb2F0IHAxcDJfbGVuZ3RoID0gc3FydGYocDFwMi54KCkgKiBw
MXAyLngoKSArIHAxcDIueSgpICogcDFwMi55KCkpOwogCkBAIC0yMTMsMjEgKzIxMywyMSBAQCB2
b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxCiAKICAgICBmbG9hdCB0YW5n
ZW50ID0gcmFkaXVzIC8gdGFuKGFjb3MoY29zX3BoaSkgLyAyKTsKICAgICBmbG9hdCBmYWN0b3Jf
cDFwMCA9IHRhbmdlbnQgLyBwMXAwX2xlbmd0aDsKLSAgICBGbG9hdFBvaW50IHRfcDFwMCgocDEu
eCgpICsgZmFjdG9yX3AxcDAgKiBwMXAwLngoKSksIChwMS55KCkgKyBmYWN0b3JfcDFwMCAqIHAx
cDAueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCB0X3AxcDAoKHAxLngoKSArIGZhY3Rvcl9wMXAw
ICogcDFwMC54KCkpLCAocDEueSgpICsgZmFjdG9yX3AxcDAgKiBwMXAwLnkoKSkpOwogCi0gICAg
RmxvYXRQb2ludCBvcnRoX3AxcDAocDFwMC55KCksIC1wMXAwLngoKSk7CisgICAgR3JhcGhpY3NQ
b2ludCBvcnRoX3AxcDAocDFwMC55KCksIC1wMXAwLngoKSk7CiAgICAgZmxvYXQgb3J0aF9wMXAw
X2xlbmd0aCA9IHNxcnQob3J0aF9wMXAwLngoKSAqIG9ydGhfcDFwMC54KCkgKyBvcnRoX3AxcDAu
eSgpICogb3J0aF9wMXAwLnkoKSk7CiAgICAgZmxvYXQgZmFjdG9yX3JhID0gcmFkaXVzIC8gb3J0
aF9wMXAwX2xlbmd0aDsKIAogICAgIC8vIGFuZ2xlIGJldHdlZW4gb3J0aF9wMXAwIGFuZCBwMXAy
IHRvIGdldCB0aGUgcmlnaHQgdmVjdG9yIG9ydGhvZ3JhcGhpYyB0byBwMXAwCiAgICAgZG91Ymxl
IGNvc19hbHBoYSA9IChvcnRoX3AxcDAueCgpICogcDFwMi54KCkgKyBvcnRoX3AxcDAueSgpICog
cDFwMi55KCkpIC8gKG9ydGhfcDFwMF9sZW5ndGggKiBwMXAyX2xlbmd0aCk7CiAgICAgaWYgKGNv
c19hbHBoYSA8IDAuZikKLSAgICAgICAgb3J0aF9wMXAwID0gRmxvYXRQb2ludCgtb3J0aF9wMXAw
LngoKSwgLW9ydGhfcDFwMC55KCkpOworICAgICAgICBvcnRoX3AxcDAgPSBHcmFwaGljc1BvaW50
KC1vcnRoX3AxcDAueCgpLCAtb3J0aF9wMXAwLnkoKSk7CiAKLSAgICBGbG9hdFBvaW50IHAoKHRf
cDFwMC54KCkgKyBmYWN0b3JfcmEgKiBvcnRoX3AxcDAueCgpKSwgKHRfcDFwMC55KCkgKyBmYWN0
b3JfcmEgKiBvcnRoX3AxcDAueSgpKSk7CisgICAgR3JhcGhpY3NQb2ludCBwKCh0X3AxcDAueCgp
ICsgZmFjdG9yX3JhICogb3J0aF9wMXAwLngoKSksICh0X3AxcDAueSgpICsgZmFjdG9yX3JhICog
b3J0aF9wMXAwLnkoKSkpOwogCiAgICAgLy8gY2FsY3VsYXRlIGFuZ2xlcyBmb3IgYWRkQXJjCi0g
ICAgb3J0aF9wMXAwID0gRmxvYXRQb2ludCgtb3J0aF9wMXAwLngoKSwgLW9ydGhfcDFwMC55KCkp
OworICAgIG9ydGhfcDFwMCA9IEdyYXBoaWNzUG9pbnQoLW9ydGhfcDFwMC54KCksIC1vcnRoX3Ax
cDAueSgpKTsKICAgICBmbG9hdCBzYSA9IGFjb3Mob3J0aF9wMXAwLngoKSAvIG9ydGhfcDFwMF9s
ZW5ndGgpOwogICAgIGlmIChvcnRoX3AxcDAueSgpIDwgMC5mKQogICAgICAgICBzYSA9IDIgKiBw
aURvdWJsZSAtIHNhOwpAQCAtMjM2LDggKzIzNiw4IEBAIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29u
c3QgRmxvYXRQb2ludCYgcDEKICAgICBib29sIGFudGljbG9ja3dpc2UgPSBmYWxzZTsKIAogICAg
IGZsb2F0IGZhY3Rvcl9wMXAyID0gdGFuZ2VudCAvIHAxcDJfbGVuZ3RoOwotICAgIEZsb2F0UG9p
bnQgdF9wMXAyKChwMS54KCkgKyBmYWN0b3JfcDFwMiAqIHAxcDIueCgpKSwgKHAxLnkoKSArIGZh
Y3Rvcl9wMXAyICogcDFwMi55KCkpKTsKLSAgICBGbG9hdFBvaW50IG9ydGhfcDFwMigodF9wMXAy
LngoKSAtIHAueCgpKSwgKHRfcDFwMi55KCkgLSBwLnkoKSkpOworICAgIEdyYXBoaWNzUG9pbnQg
dF9wMXAyKChwMS54KCkgKyBmYWN0b3JfcDFwMiAqIHAxcDIueCgpKSwgKHAxLnkoKSArIGZhY3Rv
cl9wMXAyICogcDFwMi55KCkpKTsKKyAgICBHcmFwaGljc1BvaW50IG9ydGhfcDFwMigodF9wMXAy
LngoKSAtIHAueCgpKSwgKHRfcDFwMi55KCkgLSBwLnkoKSkpOwogICAgIGZsb2F0IG9ydGhfcDFw
Ml9sZW5ndGggPSBzcXJ0ZihvcnRoX3AxcDIueCgpICogb3J0aF9wMXAyLngoKSArIG9ydGhfcDFw
Mi55KCkgKiBvcnRoX3AxcDIueSgpKTsKICAgICBmbG9hdCBlYSA9IGFjb3Mob3J0aF9wMXAyLngo
KSAvIG9ydGhfcDFwMl9sZW5ndGgpOwogICAgIGlmIChvcnRoX3AxcDIueSgpIDwgMCkKQEAgLTI1
Nyw3ICsyNTcsNyBAQCB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiAgICAgbV9wYXRoLmNsb3Nl
U3VicGF0aCgpOwogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBm
bG9hdCByLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3aXNlKQordm9pZCBQ
YXRoOjphZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBm
bG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKIHsKICAgICBxcmVhbCB4YyA9IHAueCgpOwog
ICAgIHFyZWFsIHljID0gcC55KCk7CkBAIC0zMTksMTIgKzMxOSwxMiBAQCB2b2lkIFBhdGg6OmFk
ZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwLCBmCiAKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3Qm
IHIpCiB7CiAgICAgbV9wYXRoLmFkZFJlY3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVp
Z2h0KCkpOwogfQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQor
dm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKICAgICBtX3Bh
dGguYWRkRWxsaXBzZShyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CkBA
IC0zNDgsNyArMzQ4LDcgQEAgYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAogICAg
IHJldHVybiAhaXNFbXB0eSgpOwogfQogCi1GbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgp
IGNvbnN0IAorR3JhcGhpY3NQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdCAKIHsKICAg
ICByZXR1cm4gbV9wYXRoLmN1cnJlbnRQb3NpdGlvbigpOwogfQpAQCAtMzU2LDcgKzM1Niw3IEBA
IEZsb2F0UG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCiB2b2lkIFBhdGg6OmFwcGx5
KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAg
UGF0aEVsZW1lbnQgcGVsZW1lbnQ7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbM107CisgICAgR3Jh
cGhpY3NQb2ludCBwb2ludHNbM107CiAgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbV9wYXRoLmVsZW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAg
ICAgY29uc3QgUVBhaW50ZXJQYXRoOjpFbGVtZW50JiBjdXIgPSBtX3BhdGguZWxlbWVudEF0KGkp
OwpAQCAtNDA2LDcgKzQwNiw3IEBAIGZsb2F0IFBhdGg6Omxlbmd0aCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fcGF0aC5sZW5ndGgoKTsKIH0KIAotRmxvYXRQb2ludCBQYXRoOjpwb2ludEF0TGVuZ3Ro
KGZsb2F0IGxlbmd0aCwgYm9vbCYgb2spIGNvbnN0CitHcmFwaGljc1BvaW50IFBhdGg6OnBvaW50
QXRMZW5ndGgoZmxvYXQgbGVuZ3RoLCBib29sJiBvaykgY29uc3QKIHsKICAgICBvayA9IChsZW5n
dGggPj0gMCAmJiBsZW5ndGggPD0gbV9wYXRoLmxlbmd0aCgpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFR
dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDEwICs5Nywx
MCBAQCBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERhdGE6OmVtcGhhc2lzCiAgICAgcmV0dXJu
IG1fZGVyaXZlZEZvbnREYXRhLT5lbXBoYXNpc01hcmsuZ2V0KCk7CiB9CiAKLUZsb2F0UmVjdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3QKK0dyYXBo
aWNzUmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCkgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAjZWxzZQogYm9vbCBTaW1wbGVGb250RGF0YTo6
Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgaW50KSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1N0aWxsSW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBOYXRp
dmVJbWFnZVB0ciBTdGlsbEltYWdlOjpuYXRpdmVJbWFnZUZvCiAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8TmF0aXZlSW1hZ2VQdHI+KG1fcGl4bWFwKTsKIH0KIAotdm9pZCBTdGlsbEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQordm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NSZWN0JiBzcmMsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAg
IGlmIChtX3BpeG1hcC0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVj
dCBub3JtYWxpemVkU3JjID0gc3JjLm5vcm1hbGl6ZWQoKTsKLSAgICBGbG9hdFJlY3Qgbm9ybWFs
aXplZERzdCA9IGRzdC5ub3JtYWxpemVkKCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1hbGl6ZWRT
cmMgPSBzcmMubm9ybWFsaXplZCgpOworICAgIEdyYXBoaWNzUmVjdCBub3JtYWxpemVkRHN0ID0g
ZHN0Lm5vcm1hbGl6ZWQoKTsKIAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0
b3IgPSBjdHh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICBjdHh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24ob3ApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
U3RpbGxJbWFnZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgU3RpbGxJbWFnZShjb25zdCBRUGl4bWFwJiBwaXhtYXApOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RleHR1cmVNYXBwZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9p
ZCBCaXRtYXBUZXh0dXJlUXQ6OnVucGFjaygpCiAgICAgbV9pbWFnZSA9IFFJbWFnZSgpOwogfQog
Ci12b2lkIFRleHR1cmVNYXBwZXJRdDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgVGV4dHVyZU1hcHBlclF0
OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgICBRUGFpbnRlciogcGFpbnRlciA9IGN1cnJlbnRQYWlu
dGVyKCk7CiAgICAgIHBhaW50ZXItPnNhdmUoKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJRdDo6YmluZFN1cmZhY2UoQml0bWFwCiB9CiAKIAotdm9pZCBUZXh0dXJlTWFw
cGVyUXQ6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit2b2lkIFRl
eHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVy
ZSkKIHsKICAgICBjb25zdCBCaXRtYXBUZXh0dXJlUXQmIHRleHR1cmVRdCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVRdCY+KHRleHR1cmUpOwogICAgIFFQYWludGVyKiBwYWludGVy
ID0gbV9wYWludGVyOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlclF0Ojpk
cmF3VGV4dHVyZShjb25zdCAKICAgICBjb25zdCBRVHJhbnNmb3JtIHByZXZUcmFuc2Zvcm0gPSBw
YWludGVyLT50cmFuc2Zvcm0oKTsKICAgICBwYWludGVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwog
ICAgIHBhaW50ZXItPnNldFRyYW5zZm9ybShtYXRyaXgsIHRydWUpOwotICAgIHBhaW50ZXItPmRy
YXdQaXhtYXAodGFyZ2V0UmVjdCwgcGl4bWFwLCBGbG9hdFJlY3QodGV4dHVyZVF0LnNvdXJjZVJl
Y3QoKSkpOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwgcGl4bWFwLCBHcmFw
aGljc1JlY3QodGV4dHVyZVF0LnNvdXJjZVJlY3QoKSkpOwogICAgIHBhaW50ZXItPnNldFRyYW5z
Zm9ybShwcmV2VHJhbnNmb3JtKTsKICAgICBwYWludGVyLT5zZXRPcGFjaXR5KHByZXZPcGFjaXR5
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVN
YXBwZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1RleHR1cmVNYXBwZXJRdC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw5ICs1NSw5IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJRdCA6IHB1YmxpYyBUZXh0dXJlTWEK
IHB1YmxpYzoKICAgICBUZXh0dXJlTWFwcGVyUXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1h
cFRleHR1cmUqIG1hc2tUZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29u
c3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJl
KiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1
cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5D
bGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3ND
b250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L1RpbGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvVGlsZVF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9UaWxlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsOCAr
MTIxLDggQEAgVmVjdG9yPEludFJlY3Q+IFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQogICAgICAg
ICBjb250ZXh0LnNhdmUoKTsKICAgICAgICAgSW50UmVjdCByZWN0ID0gZGlydHlSZWN0c1tuXTsK
ICAgICAgICAgdXBkYXRlZFJlY3RzLmFwcGVuZChyZWN0KTsKLSAgICAgICAgY29udGV4dC5jbGlw
KEZsb2F0UmVjdChyZWN0KSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fYmFj
a2luZ1N0b3JlLT5tX2NvbnRlbnRzU2NhbGUsIG1fYmFja2luZ1N0b3JlLT5tX2NvbnRlbnRzU2Nh
bGUpKTsKKyAgICAgICAgY29udGV4dC5jbGlwKEdyYXBoaWNzUmVjdChyZWN0KSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoR3JhcGhpY3NTaXplKG1fYmFja2luZ1N0b3JlLT5tX2NvbnRlbnRzU2Nh
bGUsIG1fYmFja2luZ1N0b3JlLT5tX2NvbnRlbnRzU2NhbGUpKTsKICAgICAgICAgbV9iYWNraW5n
U3RvcmUtPm1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KCZjb250ZXh0LCBtX2JhY2tp
bmdTdG9yZS0+bWFwVG9Db250ZW50cyhyZWN0KSk7CiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgp
OwogICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFRpbGU6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4CiAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdQaXhtYXAo
dGFyZ2V0LCAqbV9idWZmZXIsIHNvdXJjZSk7CiB9CiAgICAgCi12b2lkIFRpbGU6OnBhaW50Q2hl
Y2tlclBhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldCkKK3ZvaWQgVGlsZTo6cGFpbnRDaGVja2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGFyZ2V0KQogewogICAgIFFQYWludGVyKiBwYWlu
dGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgUVRyYW5zZm9ybSB3b3JsZFRy
YW5zZm9ybSA9IHBhaW50ZXItPndvcmxkVHJhbnNmb3JtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlv
bk1hdHJpeFF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFw
SW1hZ2VTaW5nbGVGcmFtZVNraWEuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpOwogCiBwcml2YXRlOgogICAgIE5hdGl2ZUltYWdlU2tpYSBtX25hdGl2ZUltYWdlOwpAQCAt
ODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEJpdG1hcEltYWdlU2luZ2xlRnJh
bWVTa2lhKGNvbnN0IFNrQml0bWFwJik7CiB9OwogCi1GbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKK0dyYXBoaWNzUmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRQb2ludFNraWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRQb2ludFNraWEu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvRmxvYXRQb2ludFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLQotI2luY2x1
ZGUgIlNrUG9pbnQuaCIKLSNpbmNsdWRlICJTa2lhVXRpbHMuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1GbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmIHApCi0gICAgOiBt
X3gocC5mWCkKLSAgICAsIG1feShwLmZZKQotewotfQotCi1GbG9hdFBvaW50OjpvcGVyYXRvciBT
a1BvaW50KCkgY29uc3QKLXsKLSAgICBTa1BvaW50IHAgPSB7IFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIobV94KSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3kpIH07Ci0gICAgcmV0dXJuIHA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UmVj
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi0jaW5jbHVkZSAiU2tSZWN0LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgU2tSZWN0
JiByKQotICAgIDogbV9sb2NhdGlvbihyLmZMZWZ0LCByLmZUb3ApCi0gICAgLCBtX3NpemUoci53
aWR0aCgpLCByLmhlaWdodCgpKQotewotfQotCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIFNrUmVjdCgp
IGNvbnN0Ci17Ci0gICAgU2tSZWN0IHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9
OwotICAgIHJldHVybiByZWN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMg
dm9pZCBzZXR1cFBhaW50KFNrUGFpbnQqIHBhaW50LCBjCiAvLyBUaGlzIGlzc3VlIGlzIHRyYWNr
ZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyOTg5CiB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QgewogICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihHbHlwaEJ1ZmZlckdseXBoKSA9PSBzaXplb2YodWludDE2X3QpLCBHbHlwaEJ1ZmZlckds
eXBoU2l6ZV9lcXVhbHNfdWludDE2X3QpOwogCiAgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFkaWVudFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhZGllbnRTa2lhLmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YWRpZW50U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCBTa1NoYWRl
ciogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQogICAgIHJldHVybiBtX2dyYWRpZW50Owog
fQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBjb250ZXh0LT5zZXRGaWxs
R3JhZGllbnQodGhpcyk7CiAgICAgY29udGV4dC0+ZmlsbFJlY3QocmVjdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG8KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
RHJhd0xvb3BlcigwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0
IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdChjb25zdCBGbAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1Jl
Y3QociwgcGFpbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBHcmFwaGljc1Jl
Y3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3Qg
QWZmaW4KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNldE1hdHJpeChhZmZpbmUp
OwogfQogCi1zdGF0aWMgdm9pZCBzZXRQYXRoRnJvbUNvbnZleFBvaW50cyhTa1BhdGgqIHBhdGgs
IHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3N0YXRpYyB2b2lk
IHNldFBhdGhGcm9tQ29udmV4UG9pbnRzKFNrUGF0aCogcGF0aCwgc2l6ZV90IG51bVBvaW50cywg
Y29uc3QgR3JhcGhpY3NQb2ludCogcG9pbnRzKQogewogICAgIHBhdGgtPmluY1Jlc2VydmUobnVt
UG9pbnRzKTsKICAgICBwYXRoLT5tb3ZlVG8oV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwb2ludHNb
MF0ueCgpKSwKQEAgLTQzNiw3ICs0MzYsNyBAQCBzdGF0aWMgdm9pZCBzZXRQYXRoRnJvbUNvbnZl
eFBvaW50cyhTa1BhCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdv
bihzaXplX3QgbnVtUG9pbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBD
b252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50
cywgYm9vbCBhbnRpYWxpYXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC01ODIsMTUgKzU4MiwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgSW50CiAKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4
dEN1cnJlbnQoKTsKIAotICAgIEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7Ci0gICAgRmxvYXRQb2lu
dCBwMiA9IHBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHAxID0gcG9pbnQxOworICAgIEdyYXBo
aWNzUG9pbnQgcDIgPSBwb2ludDI7CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54KCkg
PT0gcDIueCgpKTsKICAgICBpbnQgd2lkdGggPSByb3VuZGYoc3Ryb2tlVGhpY2tuZXNzKCkpOwog
CiAgICAgLy8gV2Uga25vdyB0aGVzZSBhcmUgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBsaW5lcywg
c28gdGhlIGxlbmd0aCB3aWxsIGp1c3QKICAgICAvLyBiZSB0aGUgc3VtIG9mIHRoZSBkaXNwbGFj
ZW1lbnQgY29tcG9uZW50IHZlY3RvcnMgZ2l2ZSBvciB0YWtlIDEgLQogICAgIC8vIHByb2JhYmx5
IHdvcnRoIHRoZSBzcGVlZCB1cCBvZiBubyBzcXVhcmUgcm9vdCwgd2hpY2ggYWxzbyB3b24ndCBi
ZSBleGFjdC4KLSAgICBGbG9hdFNpemUgZGlzcCA9IHAyIC0gcDE7CisgICAgR3JhcGhpY3NTaXpl
IGRpc3AgPSBwMiAtIHAxOwogICAgIGludCBsZW5ndGggPSBTa1NjYWxhclJvdW5kKGRpc3Aud2lk
dGgoKSArIGRpc3AuaGVpZ2h0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCBsZW5ndGgpOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+ZHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwg
cHRzLCBwYWludCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRD
aGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xp
bmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVj
a2luZyhjb25zdCBHcmFwaGljc1BvaW50JiBwdCwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xp
bmVTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC02OTgsNyArNjk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dENoZQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocmVj
dCwgcGFpbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHB0LAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4
dChjb25zdCBHcmFwaGljc1BvaW50JiBwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJpbnRpbmcpCiB7CkBAIC03NjIsNyArNzYyLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CkBAIC03ODQsNyArNzg0LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZXN0b3Jl
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODY0LDEyICs4NjQsMTIgQEAgQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2tTY2FsYXJUb0RvdWJsZShtLmdldFRyYW5zbGF0ZVkoKSkpOwogfQogCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlKQorR3JhcGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSkKIHsK
ICAgICByZXR1cm4gcmVjdDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFw
aGljc1NpemUmIHNpemUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUZpbGxDb2wKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJn
YigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRv
dyhjb25zdCBHcmFwaGljc1NpemUmIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgYmx1ckZsb2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENvbG9yJiBjb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC0xMTUyLDcgKzExNTIs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgR3JhcGhp
Y3NSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc1BvaW50U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1BvaW50U2tpYS5jcHAJKHJldmlz
aW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zs
b2F0UG9pbnRTa2lhLmNwcDo5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NQb2ludFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKwor
I2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa2lhVXRpbHMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitGbG9hdFBvaW50OjpGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmIHApCisg
ICAgOiBtX3gocC5mWCkKKyAgICAsIG1feShwLmZZKQoreworfQorCitGbG9hdFBvaW50OjpvcGVy
YXRvciBTa1BvaW50KCkgY29uc3QKK3sKKyAgICBTa1BvaW50IHAgPSB7IFdlYkNvcmVGbG9hdFRv
U2tTY2FsYXIobV94KSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihtX3kpIH07CisgICAgcmV0dXJu
IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NQb2ludFNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NQb2ludFNraWEu
Y3BwCShyZXZpc2lvbiA5MTAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NQb2ludFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMCArMjks
MjAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKIAogI2luY2x1ZGUgIlNrUG9pbnQuaCIKICNp
bmNsdWRlICJTa2lhVXRpbHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdFBvaW50
OjpGbG9hdFBvaW50KGNvbnN0IFNrUG9pbnQmIHApCitHcmFwaGljc1BvaW50OjpHcmFwaGljc1Bv
aW50KGNvbnN0IFNrUG9pbnQmIHApCiAgICAgOiBtX3gocC5mWCkKICAgICAsIG1feShwLmZZKQog
ewogfQogCi1GbG9hdFBvaW50OjpvcGVyYXRvciBTa1BvaW50KCkgY29uc3QKK0dyYXBoaWNzUG9p
bnQ6Om9wZXJhdG9yIFNrUG9pbnQoKSBjb25zdAogewogICAgIFNrUG9pbnQgcCA9IHsgV2ViQ29y
ZUZsb2F0VG9Ta1NjYWxhcihtX3gpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKG1feSkgfTsKICAg
ICByZXR1cm4gcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NSZWN0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1JlY3RTa2lhLmNwcAkocmV2aXNpb24gOTEwMTEpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5j
cHA6OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzUmVjdFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCisjaW5jbHVkZSAiU2tSZWN0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qg
U2tSZWN0JiByKQorICAgIDogbV9sb2NhdGlvbihyLmZMZWZ0LCByLmZUb3ApCisgICAgLCBtX3Np
emUoci53aWR0aCgpLCByLmhlaWdodCgpKQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIFNr
UmVjdCgpIGNvbnN0Cit7CisgICAgU2tSZWN0IHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1h
eFkoKSB9OworICAgIHJldHVybiByZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzUmVjdFNr
aWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NSZWN0U2tpYS5jcHAJKHJldmlzaW9uIDkxMDExKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc1JlY3RTa2lhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTkgKzI5LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogCiAjaW5jbHVk
ZSAiU2tSZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0OjpGbG9hdFJl
Y3QoY29uc3QgU2tSZWN0JiByKQorR3JhcGhpY3NSZWN0OjpHcmFwaGljc1JlY3QoY29uc3QgU2tS
ZWN0JiByKQogICAgIDogbV9sb2NhdGlvbihyLmZMZWZ0LCByLmZUb3ApCiAgICAgLCBtX3NpemUo
ci53aWR0aCgpLCByLmhlaWdodCgpKQogewogfQogCi1GbG9hdFJlY3Q6Om9wZXJhdG9yIFNrUmVj
dCgpIGNvbnN0CitHcmFwaGljc1JlY3Q6Om9wZXJhdG9yIFNrUmVjdCgpIGNvbnN0CiB7CiAgICAg
U2tSZWN0IHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9OwogICAgIHJldHVybiBy
ZWN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCwxMiArMTA4LDEyIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpjb3B5SW1hZ2UKICAgICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNy
ZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1hcCgpLCB0cnVlKTsKIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShyZWN0LCB0aGlz
KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBo
aWNzUmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxlKQogewogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3Vy
cmVudCgpOwpAQCAtMTIxLDggKzEyMSw4IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29s
b3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQog
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3Qm
IGRlc3RSZWN0KQogewogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250
ZXh0Q3VycmVudCgpOwogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIGNv
bnRleHQgPT0gbV9jb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNs
dWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlc2Ft
cGxpbmdNb2RlIGNvbXB1dGVSZXNhbXBsaW5nTQogewogICAgIGlmIChwbGF0Zm9ybUNvbnRleHQt
Pmhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSkgewogICAgICAgICBJbnRTaXplIHNyY1NpemU7Ci0g
ICAgICAgIEZsb2F0U2l6ZSBkc3RTaXplOworICAgICAgICBHcmFwaGljc1NpemUgZHN0U2l6ZTsK
ICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5nZXRJbWFnZVJlc2FtcGxpbmdIaW50KCZzcmNTaXpl
LCAmZHN0U2l6ZSk7CiAgICAgICAgIHNyY1dpZHRoID0gc3JjU2l6ZS53aWR0aCgpOwogICAgICAg
ICBzcmNIZWlnaHQgPSBzcmNTaXplLmhlaWdodCgpOwpAQCAtMzAwLDkgKzMwMCw5IEBAIHN0YXRp
YyB2b2lkIFRyYW5zZm9ybURpbWVuc2lvbnMoY29uc3QgU2sKIH0KIAogLy8gQSBoZWxwZXIgbWV0
aG9kIGZvciB0cmFuc2xhdGluZyBuZWdhdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcy4KLUZs
b2F0UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0dyYXBoaWNzUmVj
dCBub3JtYWxpemVSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKLSAgICBGbG9hdFJl
Y3Qgbm9ybSA9IHJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IG5vcm0gPSByZWN0OwogICAgIGlmIChu
b3JtLndpZHRoKCkgPCAwKSB7CiAgICAgICAgIG5vcm0uc2V0WChub3JtLngoKSArIG5vcm0ud2lk
dGgoKSk7CiAgICAgICAgIG5vcm0uc2V0V2lkdGgoLW5vcm0ud2lkdGgoKSk7CkBAIC0zMzAsMTQg
KzMzMCwxNCBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhCiB9CiAK
IHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZmxvYXRTcmNSZWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBmbG9hdFNyY1JlY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewotICAgIEZsb2F0UmVjdCBu
b3JtU3JjUmVjdCA9IG5vcm1hbGl6ZVJlY3QoZmxvYXRTcmNSZWN0KTsKKyAgICBHcmFwaGljc1Jl
Y3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxpemVSZWN0KGZsb2F0U3JjUmVjdCk7CiAgICAgaWYgKGRl
c3RSZWN0LmlzRW1wdHkoKSB8fCBub3JtU3JjUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsgIC8vIG5vdGhpbmcgdG8gZHJhdwogCkBAIC00NjEsOCArNDYxLDggQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICB9CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFw
SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIGRz
dFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVj
dCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
IHsKICAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTQ3Niw4ICs0NzYsOCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgaWYgKCFibSkKICAgICAgICAgcmV0dXJuOyAgLy8gSXQncyB0b28gZWFybHkgYW5kIHdl
IGRvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgogCi0gICAgRmxvYXRSZWN0IG5vcm1Ec3RSZWN0ID0g
bm9ybWFsaXplUmVjdChkc3RSZWN0KTsKLSAgICBGbG9hdFJlY3Qgbm9ybVNyY1JlY3QgPSBub3Jt
YWxpemVSZWN0KHNyY1JlY3QpOworICAgIEdyYXBoaWNzUmVjdCBub3JtRHN0UmVjdCA9IG5vcm1h
bGl6ZVJlY3QoZHN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1TcmNSZWN0ID0gbm9ybWFs
aXplUmVjdChzcmNSZWN0KTsKIAogICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9y
bURzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcu
CkBAIC00OTQsMTMgKzQ5NCwxMyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogCiAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGdvIGludG8gQml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWEuY3BwCiAKIHZvaWQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBGbG9hdFJlY3Qgbm9ybURzdFJlY3QgPSBu
b3JtYWxpemVSZWN0KGRzdFJlY3QpOwotICAgIEZsb2F0UmVjdCBub3JtU3JjUmVjdCA9IG5vcm1h
bGl6ZVJlY3Qoc3JjUmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IG5vcm1Ec3RSZWN0ID0gbm9ybWFs
aXplUmVjdChkc3RSZWN0KTsKKyAgICBHcmFwaGljc1JlY3Qgbm9ybVNyY1JlY3QgPSBub3JtYWxp
emVSZWN0KHNyY1JlY3QpOwogCiAgICAgaWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBub3Jt
RHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJhdy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0aFNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGF0
aFNraWEuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGF0aFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKIApAQCAtNzQs
NTAgKzc0LDUwIEBAIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKICAgICByZXR1
cm4gbV9wYXRoLT5nZXRQb2ludHMoTlVMTCwgMCkgIT0gMDsKIH0KIAotRmxvYXRQb2ludCBQYXRo
OjpjdXJyZW50UG9pbnQoKSBjb25zdCAKK0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3VycmVudFBvaW50
KCkgY29uc3QgCiB7CiAgICAgLy8gRklYTUU6IHJldHVybiBjdXJyZW50IHBvaW50IG9mIHN1YnBh
dGguCiAgICAgZmxvYXQgcXVpZXROYU4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVp
ZXRfTmFOKCk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQocXVpZXROYU4sIHF1aWV0TmFOKTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NQb2ludChxdWlldE5hTiwgcXVpZXROYU4pOwogfQogCi1ib29sIFBh
dGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVsZSBydWxlKSBjb25z
dAorYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgV2luZFJ1
bGUgcnVsZSkgY29uc3QKIHsKICAgICByZXR1cm4gU2tQYXRoQ29udGFpbnNQb2ludChtX3BhdGgs
IHBvaW50LAogICAgICAgcnVsZSA9PSBSVUxFX05PTlpFUk8gPyBTa1BhdGg6OmtXaW5kaW5nX0Zp
bGxUeXBlIDogU2tQYXRoOjprRXZlbk9kZF9GaWxsVHlwZSk7CiB9CiAKLXZvaWQgUGF0aDo6dHJh
bnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0
IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBtX3BhdGgtPm9mZnNldChXZWJDb3JlRmxvYXRU
b1NrU2NhbGFyKHNpemUud2lkdGgoKSksIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWln
aHQoKSkpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QKK0dyYXBo
aWNzUmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGgt
PmdldEJvdW5kcygpOwogfQogCi12b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewog
ICAgIG1fcGF0aC0+bW92ZVRvKHBvaW50KTsKIH0KIAotdm9pZCBQYXRoOjphZGRMaW5lVG8oY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiBwb2ludCkKIHsKICAgICBtX3BhdGgtPmxpbmVUbyhwb2ludCk7CiB9CiAKLXZvaWQg
UGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY3AsIGNvbnN0IEZsb2F0UG9p
bnQmIGVwKQordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBj
cCwgY29uc3QgR3JhcGhpY3NQb2ludCYgZXApCiB7CiAgICAgbV9wYXRoLT5xdWFkVG8oY3AsIGVw
KTsKIH0KIAotdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHAx
LCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgZXApCit2b2lkIFBhdGg6
OmFkZEJlemllckN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgcDEsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAyLCBjb25zdCBHcmFwaGljc1BvaW50JiBlcCkKIHsKICAgICBtX3BhdGgtPmN1Ymlj
VG8ocDEsIHAyLCBlcCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBhdGg6OmFk
ZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwMiwg
ZmxvYXQgcmFkaXVzKQogewogICAgIG1fcGF0aC0+YXJjVG8ocDEsIHAyLCBXZWJDb3JlRmxvYXRU
b1NrU2NhbGFyKHJhZGl1cykpOwogfQpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgUGF0aDo6Y2xv
c2VTdWJwYXRoKCkKICAgICBtX3BhdGgtPmNsb3NlKCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJj
KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhLCBmbG9hdCBlYSwgYm9vbCBh
bnRpY2xvY2t3aXNlKSB7Cit2b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBHcmFwaGljc1BvaW50JiBw
LCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgYW50aWNsb2Nrd2lzZSkgewogICAg
IFNrU2NhbGFyIGN4ID0gV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihwLngoKSk7CiAgICAgU2tTY2Fs
YXIgY3kgPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHAueSgpKTsKICAgICBTa1NjYWxhciByYWRp
dXMgPSBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHIpOwpAQCAtMTYzLDEyICsxNjMsMTIgQEAgdm9p
ZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZgogICAgIH0KIH0KIAotdm9pZCBQ
YXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUGF0aDo6YWRkUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgbV9wYXRoLT5hZGRSZWN0KHJlY3QpOwog
fQogCi12b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBQ
YXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBtX3BhdGgt
PmFkZE92YWwocmVjdCk7CiB9CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBQYXRoOjpjbGVhcigp
CiAgICAgbV9wYXRoLT5yZXNldCgpOwogfQogCi1zdGF0aWMgRmxvYXRQb2ludCogY29udmVydFBh
dGhQb2ludHMoRmxvYXRQb2ludCBkc3RbXSwgY29uc3QgU2tQb2ludCBzcmNbXSwgaW50IGNvdW50
KQorc3RhdGljIEdyYXBoaWNzUG9pbnQqIGNvbnZlcnRQYXRoUG9pbnRzKEdyYXBoaWNzUG9pbnQg
ZHN0W10sIGNvbnN0IFNrUG9pbnQgc3JjW10sIGludCBjb3VudCkKIHsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgZHN0W2ldLnNldFgoU2tTY2FsYXJUb0Zs
b2F0KHNyY1tpXS5mWCkpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgUGF0aDo6YXBwbHkodm9p
ZCogaW5mbywgUGF0aEFwcGxpZXIKICAgICBTa1BhdGg6Okl0ZXIgaXRlcigqbV9wYXRoLCBmYWxz
ZSk7CiAgICAgU2tQb2ludCBwdHNbNF07CiAgICAgUGF0aEVsZW1lbnQgcGF0aEVsZW1lbnQ7Ci0g
ICAgRmxvYXRQb2ludCBwYXRoUG9pbnRzWzNdOworICAgIEdyYXBoaWNzUG9pbnQgcGF0aFBvaW50
c1szXTsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgc3dpdGNoIChpdGVyLm5leHQocHRzKSkg
ewpAQCAtMjI4LDcgKzIyOCw3IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm8KICAgICBtX3BhdGgtPnRyYW5zZm9ybSh4Zm9ybSk7CiB9CiAKLUZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAor
R3JhcGhpY3NSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIq
IGFwcGxpZXIpIGNvbnN0CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzY3JhdGNoID0gc2NyYXRj
aENvbnRleHQoKTsKICAgICBzY3JhdGNoLT5zYXZlKCk7CkBAIC0yNDEsMTIgKzI0MSwxMiBAQCBG
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rCiAgICAgU2tQYXRoIGJvdW5k
aW5nUGF0aDsKICAgICBwYWludC5nZXRGaWxsUGF0aCgqcGxhdGZvcm1QYXRoKCksICZib3VuZGlu
Z1BhdGgpOwogCi0gICAgRmxvYXRSZWN0IHIgPSBib3VuZGluZ1BhdGguZ2V0Qm91bmRzKCk7Cisg
ICAgR3JhcGhpY3NSZWN0IHIgPSBib3VuZGluZ1BhdGguZ2V0Qm91bmRzKCk7CiAgICAgc2NyYXRj
aC0+cmVzdG9yZSgpOwogICAgIHJldHVybiByOwogfQogCi1ib29sIFBhdGg6OnN0cm9rZUNvbnRh
aW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
IGNvbnN0Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciogYXBw
bGllciwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGFw
cGxpZXIpOwogICAgIEdyYXBoaWNzQ29udGV4dCogc2NyYXRjaCA9IHNjcmF0Y2hDb250ZXh0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgUGxhdGZvcm1Db250ZXh0
U2tpYTo6U3RhdGUgewogICAgIC8vIElmIG5vbi1lbXB0eSwgdGhlIGN1cnJlbnQgU3RhdGUgaXMg
Y2xpcHBlZCB0byB0aGlzIGltYWdlLgogICAgIFNrQml0bWFwIG1faW1hZ2VCdWZmZXJDbGlwOwog
ICAgIC8vIElmIG1faW1hZ2VCdWZmZXJDbGlwIGlzIG5vbi1lbXB0eSwgdGhpcyBpcyB0aGUgcmVn
aW9uIHRoZSBpbWFnZSBpcyBjbGlwcGVkIHRvLgotICAgIEZsb2F0UmVjdCBtX2NsaXA7CisgICAg
R3JhcGhpY3NSZWN0IG1fY2xpcDsKIAogICAgIC8vIFRoaXMgaXMgYSBsaXN0IG9mIGNsaXBwaW5n
IHBhdGhzIHdoaWNoIGFyZSBjdXJyZW50bHkgYWN0aXZlLCBpbiB0aGUKICAgICAvLyBvcmRlciBp
biB3aGljaCB0aGV5IHdlcmUgcHVzaGVkLgpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6c2F2ZSgpCiAgICAgY2FudmFzKCktPnNhdmUoKTsKIH0KIAotdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRv
SW1hZ2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
KQogewogICAgIC8vIFNraWEgZG9lc24ndCBzdXBwb3J0IGNsaXBwaW5nIHRvIGFuIGltYWdlLCBz
byB3ZSBjcmVhdGUgYSBsYXllci4gVGhlIG5leHQKQEAgLTU4MCwxMyArNTgwLDEzIEBAIGJvb2wg
UGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVGb250UmUKICNlbmRpZgogfQogCi12b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OmdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50U2l6ZSogc3JjU2l6
ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpn
ZXRJbWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUsIEdyYXBoaWNzU2l6ZSogZHN0
U2l6ZSkgY29uc3QKIHsKICAgICAqc3JjU2l6ZSA9IG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1Np
emU7CiAgICAgKmRzdFNpemUgPSBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplOwogfQogCi12
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEltYWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBkc3RTaXplKQordm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpzZXRJbWFnZVJlc2FtcGxpbmdIaW50KGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgZHN0U2l6ZSkKIHsKICAgICBtX2ltYWdlUmVzYW1wbGluZ0hp
bnRTcmNTaXplID0gc3JjU2l6ZTsKICAgICBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplID0g
ZHN0U2l6ZTsKQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNl
dEltYWdlUmVzYW1wCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsZWFySW1hZ2VSZXNhbXBs
aW5nSGludCgpCiB7CiAgICAgbV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZSA9IEludFNpemUo
KTsKLSAgICBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplID0gRmxvYXRTaXplKCk7CisgICAg
bV9pbWFnZVJlc2FtcGxpbmdIaW50RHN0U2l6ZSA9IEdyYXBoaWNzU2l6ZSgpOwogfQogCiBib29s
IFBsYXRmb3JtQ29udGV4dFNraWE6Omhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSBjb25zdApAQCAt
NjAzLDcgKzYwMyw3IEBAIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aGFzSW1hZ2VSZXNhbXAK
ICAgICByZXR1cm4gIW1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemUuaXNFbXB0eSgpICYmICFt
X2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplLmlzRW1wdHkoKTsKIH0KIAotdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjphcHBseUNsaXBGcm9tSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBTa0JpdG1hcCYgaW1hZ2VCdWZmZXIpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFw
cGx5Q2xpcEZyb21JbWFnZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IFNrQml0bWFw
JiBpbWFnZUJ1ZmZlcikKIHsKICAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhlIGltYWdlIG1h
c2sgY29udGFpbnMgb3BhcXVlIGJsYWNrIGZvciB0aGUgcG9ydGlvbnMgdGhhdCBhcmUgdG8gYmUg
c2hvd24sIGFzIHN1Y2ggd2UKICAgICAvLyBvbmx5IGxvb2sgYXQgdGhlIGFscGhhIHdoZW4gY29t
cG9zaXRpbmcuIEknbSBub3QgMTAwJSBzdXJlIHRoaXMgaXMgd2hhdCBXZWJLaXQgZXhwZWN0cyBm
b3IgaW1hZ2UgY2xpcHBpbmcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gfHJlY3R8LiBUaGlzIGxheWVyIGlzIGltcGxpY2l0bHkgcmVzdG9yZWQgd2hlbiB0aGUg
bmV4dCByZXN0b3JlIGlzCiAgICAgLy8gaW52b2tlZC4KICAgICAvLyBOT1RFOiB8aW1hZ2VCdWZm
ZXJ8IG1heSBiZSBkZWxldGVkIGJlZm9yZSB0aGUgfHJlc3RvcmV8IGlzIGludm9rZWQuCi0gICAg
dm9pZCBiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VCdWZmZXIqKTsKKyAgICB2b2lkIGJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBHcmFw
aGljc1JlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwogICAgIHZvaWQgY2xpcFBhdGhBbnRpQWxp
YXNlZChjb25zdCBTa1BhdGgmKTsKIAogICAgIC8vIFNldHMgdXAgdGhlIGNvbW1vbiBmbGFncyBv
biBhIHBhaW50IGZvciBhbnRpYWxpYXNpbmcsIGVmZmVjdHMsIGV0Yy4KQEAgLTE3Miw4ICsxNzIs
OCBAQCBwdWJsaWM6CiAgICAgLy8gdGV4dCBkcmF3aW5nIEFQSXMuCiAgICAgYm9vbCBpc05hdGl2
ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCk7CiAKLSAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hp
bnQoSW50U2l6ZSogc3JjU2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdDsKLSAgICB2b2lk
IHNldEltYWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBkc3RTaXplKTsKKyAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50U2l6
ZSogc3JjU2l6ZSwgR3JhcGhpY3NTaXplKiBkc3RTaXplKSBjb25zdDsKKyAgICB2b2lkIHNldElt
YWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgR3JhcGhpY3NT
aXplJiBkc3RTaXplKTsKICAgICB2b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwogICAg
IGJvb2wgaGFzSW1hZ2VSZXNhbXBsaW5nSGludCgpIGNvbnN0OwogCkBAIC0xODQsNyArMTg0LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBVc2VkIHdoZW4gcmVzdG9yaW5nIGFuZCB0aGUg
c3RhdGUgaGFzIGFuIGltYWdlIGNsaXAuIE9ubHkgc2hvd3MgdGhlIHBpeGVscyBpbgogICAgIC8v
IG1fY2FudmFzIHRoYXQgYXJlIGFsc28gaW4gaW1hZ2VCdWZmZXIuCi0gICAgdm9pZCBhcHBseUNs
aXBGcm9tSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgU2tCaXRtYXAmKTsKKyAgICB2b2lk
IGFwcGx5Q2xpcEZyb21JbWFnZShjb25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBTa0JpdG1hcCYp
OwogICAgIHZvaWQgYXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxTa1BhdGg+
JiBwYXRocyk7CiAKICAgICAvLyBjb21tb24gY29kZSBiZXR3ZWVuIHNldHVwUGFpbnRGb3JbRmls
bGluZyxTdHJva2luZ10KQEAgLTIwNyw3ICsyMDcsNyBAQCBwcml2YXRlOgogICAgIC8vIFN0b3Jl
cyBpbWFnZSBzaXplcyBmb3IgYSBoaW50IHRvIGNvbXB1dGUgaW1hZ2UgcmVzYW1wbGluZyBtb2Rl
cy4KICAgICAvLyBWYWx1ZXMgYXJlIHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUg
bV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsKLSAgICBGbG9hdFNpemUgbV9pbWFnZVJlc2Ft
cGxpbmdIaW50RHN0U2l6ZTsKKyAgICBHcmFwaGljc1NpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50
RHN0U2l6ZTsKICAgICBib29sIG1fcHJpbnRpbmc7CiAgICAgYm9vbCBtX2RyYXdpbmdUb0ltYWdl
QnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2dwdUNvbnRleHQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2lu
LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1NraWFGb250V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBA
IHZvaWQgU2tpYVdpbk91dGxpbmVDYWNoZTo6cmVtb3ZlUGF0aHNGb3IKIAogYm9vbCB3aW5kb3dz
Q2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0KQogewotICAg
IEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldDsK
ICAgICBmbG9hdCBzaGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIENvbG9y
U3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0
IFNrQ2FudmFzJiBjYQogICAgIGludmVyc2VUcmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCwgdHJh
bnNmb3JtZWREZXN0KTsKIH0KIAotYm9vbCBTa1BhdGhDb250YWluc1BvaW50KFNrUGF0aCogb3Jp
Z2luYWxQYXRoLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgU2tQYXRoOjpGaWxsVHlwZSBmdCkK
K2Jvb2wgU2tQYXRoQ29udGFpbnNQb2ludChTa1BhdGgqIG9yaWdpbmFsUGF0aCwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQsIFNrUGF0aDo6RmlsbFR5cGUgZnQpCiB7CiAgICAgU2tSZWdpb24g
cmduOwogICAgIFNrUmVnaW9uIGNsaXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgU2tTY2FsYXIgV2ViQ29yZURvdWJsZVRvU2tT
Y2FsYXIoCiB2b2lkIENsaXBSZWN0VG9DYW52YXMoY29uc3QgU2tDYW52YXMmLCBjb25zdCBTa1Jl
Y3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpOwogCiAvLyBEZXRlcm1pbmUgaWYgYSBnaXZl
biBXZWJLaXQgcG9pbnQgaXMgY29udGFpbmVkIGluIGEgcGF0aAotYm9vbCBTa1BhdGhDb250YWlu
c1BvaW50KFNrUGF0aCosIGNvbnN0IEZsb2F0UG9pbnQmLCBTa1BhdGg6OkZpbGxUeXBlKTsKK2Jv
b2wgU2tQYXRoQ29udGFpbnNQb2ludChTa1BhdGgqLCBjb25zdCBHcmFwaGljc1BvaW50JiwgU2tQ
YXRoOjpGaWxsVHlwZSk7CiAKIC8vIFJldHVybnMgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAxeDEg
R3JhcGhpY3NDb250ZXh0IGludGVuZGVkIGZvciB0ZW1wb3JhcnkKIC8vIG9wZXJhdGlvbnMuIFBs
ZWFzZSBzYXZlKCkgdGhlIHN0YXRlIGFuZCByZXN0b3JlKCkgaXQgd2hlbiB5b3UncmUgZG9uZSB3
aXRoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyAr
NjcsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkCiAKIC8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChtX3BlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxh
eSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldFJlcGwKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAq
Lwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYgdmFsdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRQb3Np
dGlvbihjb25zdCBHcmFwaGljc1BvaW50JiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUgPT0gcG9z
aXRpb24oKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBvc2kKIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVy
LmgpCiAqLwotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5jaG9yUG9pbnQo
Y29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlID09IGFuY2hvclBvaW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE4OCw3ICsx
ODgsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRBbmNoCiAKIC8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KLXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiB2YWx1ZSkKIHsKICAgICBp
ZiAodmFsdWUgPT0gc2l6ZSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gcmVpbXBz
IGZyb20gR3JhcGhpY3NMYXllci5oCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIHsgc2V0TmVlZHNE
aXNwbGF5KCk7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoR3JhcGhpY3NM
YXllciogbGF5ZXIpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5
ZXIqKTsKQEAgLTU2LDkgKzU2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZXBsYWNl
Q2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
b3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9y
UG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmIHNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBHcmFwaGljc1BvaW50JiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29u
c3QgR3JhcGhpY3NQb2ludDNEJiBwKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBH
cmFwaGljc1NpemUmIHNpemUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlblRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCk7CiAgICAgdmlydHVhbCB2b2lk
IHNldFByZXNlcnZlczNEKGJvb2wgYik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTMgKzk0LDEzIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQgPSAwKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3
TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNv
bnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0
YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCBmbG9hdCBvcGFjaXR5ID0gMS4wZiwgY29uc3QgQml0bWFwVGV4
dHVyZSogbWFza1RleHR1cmUgPSAwKSA9IDA7CiAKICAgICAvLyBtYWtlcyBhIHN1cmZhY2UgdGhl
IHRhcmdldCBmb3IgdGhlIGZvbGxvd2luZyBkcmF3VGV4dHVyZSBjYWxscy4KICAgICB2aXJ0dWFs
IHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KikgPSAwOwogICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgY29uc3QgR3JhcGhpY3NSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBl
bmRDbGlwKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6Y29tcHV0ZVBlcnNwZWN0aQogICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHko
KSB8fCBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29uc3QgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQobV9z
aXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyKTsKKyAgICBjb25zdCBHcmFwaGlj
c1BvaW50IGNlbnRlclBvaW50ID0gR3JhcGhpY3NQb2ludChtX3NpemUud2lkdGgoKSAvIDIsIG1f
c2l6ZS5oZWlnaHQoKSAvIDIpOwogICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCkKICAgICAgICAgICAgIC50cmFuc2xhdGUoY2VudGVyUG9pbnQueCgp
LCBjZW50ZXJQb2ludC55KCkpCiAgICAgICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS5jaGlsZHJl
blRyYW5zZm9ybSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpj
b21wdXRlQWxsVHJhbnNmCiAgICAgY29tcHV0ZVBlcnNwZWN0aXZlVHJhbnNmb3JtSWZOZWVkZWQo
KTsKIAogICAgIG1fdHJhbnNmb3Jtcy50YXJnZXQgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChtX3Bh
cmVudCA/IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgOiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpKS5tdWx0aXBseShtX3RyYW5zZm9ybXMubG9jYWwpOwotICAgIG1fdHJhbnNm
b3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QgPSBGbG9hdFJlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5t
YXBSZWN0KHRhcmdldFJlY3QoKSkpOworICAgIG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1Jl
Y3QgPSBHcmFwaGljc1JlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KHRhcmdldFJlY3Qo
KSkpOwogCiAgICAgbV9zdGF0ZS52aXNpYmxlID0gbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkg
fHwgbV90cmFuc2Zvcm1zLnRhcmdldC5pbnZlcnNlKCkubTMzKCkgPj0gMDsKICAgICBpZiAoIW1f
c3RhdGUudmlzaWJsZSkKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
Ojpjb21wdXRlQWxsVHJhbnNmCiAKICAgICAvLyBUaGlzIHRyYW5zZm9ybSBpcyBvbmx5IGFwcGxp
ZWQgaWYgdXNpbmcgYSB0d28tcGFzcyBmb3IgdGhlIHJlcGxpY2EsIGJlY2F1c2UgdGhlIHRyYW5z
Zm9ybSBuZWVkcyB0byBiZSBhZGp1c3RlZCB0byB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJtZWRpYXRl
IHN1cmZhY2UsIGluc3RlYWYgb2YgdGhlIHNpemUgb2YgdGhlIGNvbnRlbnQgbGF5ZXIuCiAgICAg
aWYgKG1fcGFyZW50ICYmIG1fcGFyZW50LT5tX3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICBt
X3RyYW5zZm9ybXMuY2VudGVyWiA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxvYXRQ
b2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwgbV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsK
KyAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFBv
aW50KEdyYXBoaWNzUG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAv
IDIsIDApKS56KCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1
cm47CkBAIC0xOTUsOSArMTk1LDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUJv
dW5kaW5nUgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgRmxvYXRSZWN0IHRh
cmdldFJlY3RJblJvb3RDb29yZGluYXRlcyA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0
YXJnZXRSZWN0KCkpOworICAgIGNvbnN0IEdyYXBoaWNzUmVjdCB0YXJnZXRSZWN0SW5Sb290Q29v
cmRpbmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Lm1hcFJlY3QodGFyZ2V0UmVjdCgpKTsKIAot
ICAgIGNvbnN0IEZsb2F0UmVjdCBwYXJlbnRCb3VuZGluZ1JlY3QgPSBtX3BhcmVudC0+bV90cmFu
c2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHM7CisgICAgY29uc3QgR3Jh
cGhpY3NSZWN0IHBhcmVudEJvdW5kaW5nUmVjdCA9IG1fcGFyZW50LT5tX3RyYW5zZm9ybXMuYm91
bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50czsKICAgICBpZiAocGFyZW50Qm91bmRpbmdS
ZWN0LndpZHRoKCkgPCAwKQogICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJv
b3QgPSB0YXJnZXRSZWN0SW5Sb290Q29vcmRpbmF0ZXM7CiAgICAgZWxzZSB7CkBAIC0yMTQsMTcg
KzIxNCwxNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVGlsZXMoKQogICAgICAg
ICBtX3RpbGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgVmVjdG9yPEZs
b2F0UmVjdD4gdGlsZXNUb0FkZDsKKyAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0aWxlc1RvQWRk
OwogICAgIFZlY3RvcjxpbnQ+IHRpbGVzVG9SZW1vdmU7CiAgICAgY29uc3QgaW50IFRpbGVFcmFz
ZVRocmVzaG9sZCA9IDY7Ci0gICAgRmxvYXRTaXplIHNpemUgPSBjb250ZW50U2l6ZSgpOwotICAg
IEZsb2F0UmVjdCBjb250ZW50UmVjdCgwLCAwLCBzaXplLndpZHRoKCkgKiBtX3N0YXRlLmNvbnRl
bnRTY2FsZSwgc2l6ZS5oZWlnaHQoKSAqIG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAgICBHcmFw
aGljc1NpemUgc2l6ZSA9IGNvbnRlbnRTaXplKCk7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRlbnRS
ZWN0KDAsIDAsIHNpemUud2lkdGgoKSAqIG1fc3RhdGUuY29udGVudFNjYWxlLCBzaXplLmhlaWdo
dCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUpOwogCiAgICAgZm9yIChmbG9hdCB5ID0gMDsgeSA8
IGNvbnRlbnRSZWN0LmhlaWdodCgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7CiAgICAgICAgIGZv
ciAoZmxvYXQgeCA9IDA7IHggPCBjb250ZW50UmVjdC53aWR0aCgpOyB4ICs9IGdUaWxlRGltZW5z
aW9uKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoeCwgeSwgZ1RpbGVEaW1lbnNp
b24sIGdUaWxlRGltZW5zaW9uKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB0aWxlUmVjdCh4
LCB5LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOwogICAgICAgICAgICAgdGlsZVJl
Y3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVj
dEluUm9vdENvb3JkaW5hdGVzID0gdGlsZVJlY3Q7CisgICAgICAgICAgICBHcmFwaGljc1JlY3Qg
dGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyA9IHRpbGVSZWN0OwogICAgICAgICAgICAgdGlsZVJl
Y3RJblJvb3RDb29yZGluYXRlcy5zY2FsZSgxLjAgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CiAg
ICAgICAgICAgICB0aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzID0gbV90cmFuc2Zvcm1zLnRhcmdl
dC5tYXBSZWN0KHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMpOwogICAgICAgICAgICAgc3RhdGlj
IGJvb2wgc0Rpc2NhcmRIaWRkZW5UaWxlcyA9IGZhbHNlOwpAQCAtMjM1LDExICsyMzUsMTEgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKCkKICAgICB9CiAKICAgICBmb3Ig
KGludCBpID0gbV90aWxlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25z
dCBGbG9hdFJlY3Qgb2xkVGlsZSA9IG1fdGlsZXNbaV0ucmVjdDsKKyAgICAgICAgY29uc3QgR3Jh
cGhpY3NSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3Q7CiAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKIAogICAgICAgICBmb3IgKGludCBqID0gdGlsZXNUb0FkZC5zaXplKCkgLSAxOyBq
ID49IDA7IC0taikgewotICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0IG5ld1RpbGUgPSB0aWxl
c1RvQWRkW2pdOworICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NSZWN0IG5ld1RpbGUgPSB0aWxl
c1RvQWRkW2pdOwogICAgICAgICAgICAgaWYgKG9sZFRpbGUgIT0gbmV3VGlsZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OmNvbXB1dGVWaXNpYmxlUmUKIHsKICAgICBpZiAoIW5lZWRzVG9Db21wdXRlQm91bmRp
bmdSZWN0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3Qgcm9vdFZpc2libGVSZWN0
OworICAgIEdyYXBoaWNzUmVjdCByb290VmlzaWJsZVJlY3Q7CiAgICAgaWYgKCFtX3BhcmVudCkK
ICAgICAgICAgcm9vdFZpc2libGVSZWN0ID0gbV9zdGF0ZS5yb290VmlzaWJsZVJlY3Q7CiAgICAg
ZWxzZSBpZiAobV9wYXJlbnQpCkBAIC0zMDAsMTIgKzMwMCwxMiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpyZW5kZXJDb250ZW50KFRlCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1F
OiBBZGQgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZXMuCi0gICAgRmxvYXRSZWN0IGRpcnR5UmVj
dCA9IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ID8gZW50aXJlUmVjdCgpIDogbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3Qg
PSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSA/IGVudGlyZVJlY3QoKSA6IG1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdDsKICAgICBkaXJ0eVJlY3Quc2NhbGUobV9zdGF0ZS5j
b250ZW50U2NhbGUpOwogCiAgICAgZm9yIChzaXplX3QgdGlsZUluZGV4ID0gMDsgdGlsZUluZGV4
IDwgbV90aWxlcy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CiAgICAgICAgIFRpbGUmIHRpbGUgPSBt
X3RpbGVzW3RpbGVJbmRleF07Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0ID0gZGlydHlSZWN0Owor
ICAgICAgICBHcmFwaGljc1JlY3QgcmVjdCA9IGRpcnR5UmVjdDsKICAgICAgICAgaWYgKCF0aWxl
LnRleHR1cmUpCiAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVh
dGVUZXh0dXJlKCk7CiAgICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiYgdGV4dHVyZSA9IHRp
bGUudGV4dHVyZTsKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpy
ZW5kZXJDb250ZW50KFRlCiAgICAgICAgIGlmIChjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBGbG9hdFJlY3QgY29udGVudFJlY3RJblRpbGVD
b29yZGluYXRlcyA9IGNvbnRlbnRSZWN0OwotICAgICAgICBGbG9hdFBvaW50IG9mZnNldCgtdGls
ZS5yZWN0LngoKSwgLXRpbGUucmVjdC55KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgY29udGVu
dFJlY3RJblRpbGVDb29yZGluYXRlcyA9IGNvbnRlbnRSZWN0OworICAgICAgICBHcmFwaGljc1Bv
aW50IG9mZnNldCgtdGlsZS5yZWN0LngoKSwgLXRpbGUucmVjdC55KCkpOwogICAgICAgICBjb250
ZW50UmVjdEluVGlsZUNvb3JkaW5hdGVzLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CiAK
ICAgICAgICAgewpAQCAtMzMxLDggKzMzMSw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJl
bmRlckNvbnRlbnQoVGUKICAgICAgICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAg
ICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4dHVyZU1hcHBlci0+dGV4dERy
YXdpbmdNb2RlKCkpOwogICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0LngoKSwg
b2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShtX3N0YXRl
LmNvbnRlbnRTY2FsZSwgbV9zdGF0ZS5jb250ZW50U2NhbGUpKTsKLSAgICAgICAgICAgIEZsb2F0
UmVjdCBzY2FsZWRDb250ZW50UmVjdChjb250ZW50UmVjdCk7CisgICAgICAgICAgICBjb250ZXh0
LnNjYWxlKEdyYXBoaWNzU2l6ZShtX3N0YXRlLmNvbnRlbnRTY2FsZSwgbV9zdGF0ZS5jb250ZW50
U2NhbGUpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBzY2FsZWRDb250ZW50UmVjdChjb250
ZW50UmVjdCk7CiAgICAgICAgICAgICBzY2FsZWRDb250ZW50UmVjdC5zY2FsZSgxLjAgLyBtX3N0
YXRlLmNvbnRlbnRTY2FsZSk7CiAgICAgICAgICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlKQogICAgICAgICAgICAgICAgIGNvbnRl
eHQuZHJhd0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIEludFBvaW50KDAsIDApKTsKQEAgLTM2MSw5ICszNjEsOSBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpwYWludCgpCiAgICAgcGFpbnRSZWN1cnNpdmUob3B0KTsKIH0KIAotRmxvYXRS
ZWN0IFRleHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdAorR3JhcGhp
Y3NSZWN0IFRleHR1cmVNYXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgR3Jh
cGhpY3NSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0KSBjb25z
dAogewotICAgIHJldHVybiBGbG9hdFJlY3QoCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgKICAg
ICAgICAgICAgICAgICB0YXJnZXRSZWN0LngoKSArICh0aWxlUmVjdC54KCkgLSB0YXJnZXRSZWN0
LngoKSkgLyBtX3N0YXRlLmNvbnRlbnRTY2FsZSwKICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0
LnkoKSArICh0aWxlUmVjdC55KCkgLSB0YXJnZXRSZWN0LnkoKSkgLyBtX3N0YXRlLmNvbnRlbnRT
Y2FsZSwKICAgICAgICAgICAgICAgICB0aWxlUmVjdC53aWR0aCgpIC8gbV9zdGF0ZS5jb250ZW50
U2NhbGUsCkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRT
ZWxmKGNvbnN0IAogCiAgICAgY29uc3QgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMuaXNTdXJmYWNl
ID8gMSA6IG9wdGlvbnMub3BhY2l0eTsKIAotICAgIGNvbnN0IEZsb2F0UmVjdCB0YXJnZXRSZWN0
ID0gdGhpcy0+dGFyZ2V0UmVjdCgpOworICAgIGNvbnN0IEdyYXBoaWNzUmVjdCB0YXJnZXRSZWN0
ID0gdGhpcy0+dGFyZ2V0UmVjdCgpOwogCiAgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVu
dFR5cGUgPT0gTWVkaWFDb250ZW50VHlwZSAmJiBtX2N1cnJlbnRDb250ZW50Lm1lZGlhKSB7CiAg
ICAgICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhb3B0aW9ucy5pc1N1cmZhY2UpCkBA
IC00MDYsNyArNDA2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPyByZXBs
aWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBjb25zdCBGbG9hdFJlY3QgcmVjdCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJn
ZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOworICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QgcmVj
dCA9IHRhcmdldFJlY3RGb3JUaWxlUmVjdCh0YXJnZXRSZWN0LCBtX3RpbGVzW2ldLnJlY3QpOwog
ICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCp0ZXh0dXJlLCByZWN0
LCBtX3RyYW5zZm9ybXMudGFyZ2V0LCBvcGFjaXR5LCBvcHRpb25zLmlzU3VyZmFjZSA/IDAgOiBt
YXNrVGV4dHVyZS5nZXQoKSk7CiAgICAgfQogfQpAQCAtNDI3LDcgKzQyNyw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWwKIHsKICAgICBib29sIGhhc0NsaXAgPSBt
X3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgIW1fY2hpbGRyZW4uaXNFbXB0eSgpOwogICAgIGlmICho
YXNDbGlwKQotICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMsIEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmVnaW5DbGlw
KG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cywgR3JhcGhpY3NSZWN0KDAsIDAsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKIAogICAgIHBhaW50U2VsZihvcHRpb25zKTsKIApA
QCAtNDU4LDcgKzQ1OCw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVmbGVjdGlv
bigKICAgICBjb25zdCBJbnRTaXplIHZpZXdwb3J0U2l6ZSA9IG9wdGlvbnMudGV4dHVyZU1hcHBl
ci0+dmlld3BvcnRTaXplKCk7CiAgICAgY29uc3QgYm9vbCB1c2VJbnRlcm1lZGlhdGVCdWZmZXJG
b3JSZXBsaWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgb3B0aW9ucy5vcGFjaXR5IDwgMC45
OTsKICAgICBjb25zdCBib29sIHVzZUludGVybWVkaWF0ZUJ1ZmZlckZvck1hc2sgPSBtYXNrVGV4
dHVyZSAmJiByZXBsaWNhTWFza1RleHR1cmU7Ci0gICAgY29uc3QgRmxvYXRSZWN0IHZpZXdwb3J0
UmVjdCgwLCAwLCB2aWV3cG9ydFNpemUud2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKTsK
KyAgICBjb25zdCBHcmFwaGljc1JlY3Qgdmlld3BvcnRSZWN0KDAsIDAsIHZpZXdwb3J0U2l6ZS53
aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOwogCiAgICAgLy8gVGhlIG1hc2sgaGFzIHRv
IGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KICAgICBpZiAobWFza1RleHR1cmUp
IHsKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vy
c2l2ZShUCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGbG9hdFJlY3Qgdmlld3BvcnRS
ZWN0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOwor
ICAgIEdyYXBoaWNzUmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCks
IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CiAKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFz
a1N1cmZhY2U7CiAKQEAgLTYwNSw5ICs2MDUsOSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTCiAgICAgfQogCiAgICAgaWYgKGNoYW5nZU1hc2sgJiAoU2l6ZUNoYW5n
ZSB8IENvbnRlbnRzUmVjdENoYW5nZSkpIHsKLSAgICAgICAgRmxvYXRTaXplIHdhbnRlZFNpemUo
Z3JhcGhpY3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWln
aHQoKSk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSB3YW50ZWRTaXplKGdyYXBoaWNzTGF5ZXItPnNp
emUoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICBp
ZiAod2FudGVkU2l6ZS5pc0VtcHR5KCkgJiYgcGVuZGluZ0NvbnRlbnQuY29udGVudFR5cGUgPT0g
SFRNTENvbnRlbnRUeXBlKQotICAgICAgICAgICAgd2FudGVkU2l6ZSA9IEZsb2F0U2l6ZShncmFw
aGljc0xheWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgpLCBncmFwaGljc0xheWVyLT5jb250ZW50
c1JlY3QoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICB3YW50ZWRTaXplID0gR3JhcGhpY3NTaXpl
KGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPmNv
bnRlbnRzUmVjdCgpLmhlaWdodCgpKTsKIAogICAgICAgICBpZiAod2FudGVkU2l6ZSAhPSBtX3Np
emUpCiAgICAgICAgICAgICBtX3RpbGVzLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAs
NyBAQAogI2lmbmRlZiBUZXh0dXJlTWFwcGVyTm9kZV9oCiAjZGVmaW5lIFRleHR1cmVNYXBwZXJO
b2RlX2gKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAv
LyBUaGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywg
c28gd2UgdHJ5IHRvIGRvIHNvLgogICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5
cGUsIERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVu
dFR5cGUsIENhbnZhczNEQ29udGVudFR5cGV9OwogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OworICAgICAgICBHcmFwaGljc1JlY3Qg
bmVlZHNEaXNwbGF5UmVjdDsKICAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk7CiAgICAgICAgIENv
bG9yIGJhY2tncm91bmRDb2xvcjsKIApAQCAtMTU2LDggKzE1Niw4IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjb21wdXRlQm91bmRpbmdSZWN0RnJvbVJvb3RJZk5lZWRlZCgpOwogICAgIHZvaWQgY29t
cHV0ZVRpbGVzKCk7CiAgICAgaW50IGNvdW50RGVzY2VuZGFudHNXaXRoQ29udGVudCgpIGNvbnN0
OwotICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0
b3RhbFRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0OwotICAgIHZv
aWQgaW52YWxpZGF0ZVZpZXdwb3J0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIEdyYXBoaWNzUmVj
dCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiB0b3RhbFRhcmdldFJl
Y3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3QpIGNvbnN0OworICAgIHZvaWQgaW52YWxp
ZGF0ZVZpZXdwb3J0KGNvbnN0IEdyYXBoaWNzUmVjdCYpOwogICAgIHZvaWQgbm90aWZ5Q2hhbmdl
KENoYW5nZU1hc2spOwogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyKTsKIApAQCAtMTg3LDMxICsxODcsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbG9jYWw7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2U7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0aXZlOwotICAgICAgICBGbG9h
dFJlY3QgdGFyZ2V0Qm91bmRpbmdSZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgdGFyZ2V0Qm91
bmRpbmdSZWN0OwogICAgICAgICBmbG9hdCBjZW50ZXJaOwotICAgICAgICBGbG9hdFJlY3QgYm91
bmRpbmdSZWN0RnJvbVJvb3Q7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9v
dEZvckRlc2NlbmRhbnRzOworICAgICAgICBHcmFwaGljc1JlY3QgYm91bmRpbmdSZWN0RnJvbVJv
b3Q7CisgICAgICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdEZvckRlc2NlbmRh
bnRzOwogICAgICAgICBUcmFuc2Zvcm1EYXRhKCkgeyB9CiAgICAgfTsKIAogICAgIFRyYW5zZm9y
bURhdGEgbV90cmFuc2Zvcm1zOwogCi0gICAgaW5saW5lIEZsb2F0UmVjdCB0YXJnZXRSZWN0KCkg
Y29uc3QKKyAgICBpbmxpbmUgR3JhcGhpY3NSZWN0IHRhcmdldFJlY3QoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRl
bnRUeXBlID8gZW50aXJlUmVjdCgpIDogbV9zdGF0ZS5jb250ZW50c1JlY3Q7CiAgICAgfQogCi0g
ICAgaW5saW5lIEZsb2F0UmVjdCBlbnRpcmVSZWN0KCkgY29uc3QKKyAgICBpbmxpbmUgR3JhcGhp
Y3NSZWN0IGVudGlyZVJlY3QoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKICAg
ICB9CiAKLSAgICBGbG9hdFNpemUgY29udGVudFNpemUoKSBjb25zdAorICAgIEdyYXBoaWNzU2l6
ZSBjb250ZW50U2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlICYmIG1fY3VycmVudENv
bnRlbnQuaW1hZ2UgPyBtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXplKCkgOiBtX3NpemU7CiAg
ICAgfQogICAgIHN0cnVjdCBUaWxlIHsKLSAgICAgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgICAg
IEdyYXBoaWNzUmVjdCByZWN0OwogICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZTsKICAgICAgICAgYm9vbCBuZWVkc1Jlc2V0OwogICAgIH07CkBAIC0yMjMsMTggKzIyMywxOCBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47CiAg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fcGFyZW50OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBt
X2VmZmVjdFRhcmdldDsKLSAgICBGbG9hdFNpemUgbV9zaXplOworICAgIEdyYXBoaWNzU2l6ZSBt
X3NpemU7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIFN0cmluZyBtX25hbWU7CiAKICAgICBz
dHJ1Y3QgU3RhdGUgewotICAgICAgICBGbG9hdFBvaW50IHBvczsKLSAgICAgICAgRmxvYXRQb2lu
dDNEIGFuY2hvclBvaW50OwotICAgICAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAgICAgR3JhcGhp
Y3NQb2ludCBwb3M7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICAg
ICAgR3JhcGhpY3NTaXplIHNpemU7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CiAg
ICAgICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7Cisg
ICAgICAgIEdyYXBoaWNzUmVjdCBjb250ZW50c1JlY3Q7CiAgICAgICAgIGludCBkZXNjZW5kYW50
c1dpdGhDb250ZW50OwogICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbWFza0xheWVyOwogICAg
ICAgICBUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGljYUxheWVyOwpAQCAtMjQ3LDggKzI0Nyw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGJvb2wgbmVlZHNSZXNldDogMTsKICAgICAgICAgYm9vbCBtaWdo
dEhhdmVPdmVybGFwcyA6IDE7CiAgICAgICAgIGJvb2wgbmVlZHNSZXBhaW50OwotICAgICAgICBG
bG9hdFJlY3QgdmlzaWJsZVJlY3Q7Ci0gICAgICAgIEZsb2F0UmVjdCByb290VmlzaWJsZVJlY3Q7
CisgICAgICAgIEdyYXBoaWNzUmVjdCB2aXNpYmxlUmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IHJvb3RWaXNpYmxlUmVjdDsKICAgICAgICAgZmxvYXQgY29udGVudFNjYWxlOwogCiAgICAgICAg
IFN0YXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsy
MCw3IEBACiAjaWZuZGVmIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyX2gKICNkZWZpbmUgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzAsNyArMzAsNyBAQCBjbGFzcyBCaXRtYXBUZXh0
dXJlOwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4ID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMCwgQml0bWFwVGV4dHVy
ZSogbWFzayA9IDApIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEdyYXBoaWNzUmVjdCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBm
bG9hdCBvcGFjaXR5ID0gMS4wLCBCaXRtYXBUZXh0dXJlKiBtYXNrID0gMCkgY29uc3QgPSAwOwog
fTsKIAogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZp
bmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1F1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjcwLDcgKzI3MCw3IEBA
IEFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3WSgKICAgICByZXR1cm4gc2hl
YXIoMCwgdGFuKGRlZzJyYWQoYW5nbGUpKSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBtYWtlTWFw
QmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3QpCitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBHcmFwaGljc1Jl
Y3QmIHNvdXJjZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0KQogewogICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm07CiAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShkZXN0LngoKSAtIHNvdXJj
ZS54KCksIGRlc3QueSgpIC0gc291cmNlLnkoKSk7CkBAIC0yOTMsNDQgKzI5Myw0NCBAQCBJbnRQ
b2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0CiAgICAgcmV0dXJuIEludFBvaW50
KGxyb3VuZCh4MiksIGxyb3VuZCh5MikpOwogfQogCi1GbG9hdFBvaW50IEFmZmluZVRyYW5zZm9y
bTo6bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitHcmFwaGljc1BvaW50
IEFmZmluZVRyYW5zZm9ybTo6bWFwUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNv
bnN0CiB7CiAgICAgZG91YmxlIHgyLCB5MjsKICAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCks
IHgyLCB5Mik7CiAKLSAgICByZXR1cm4gRmxvYXRQb2ludChuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHgyKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdCh5MikpOworICAgIHJldHVybiBHcmFwaGljc1Bv
aW50KG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KHgyKSwgbmFycm93UHJlY2lzaW9uVG9H
cmFwaGljc1VuaXQoeTIpKTsKIH0KIAogSW50UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3Qo
Y29uc3QgSW50UmVjdCAmcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChtYXBSZWN0KEZsb2F0UmVjdChyZWN0KSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KG1hcFJlY3QoR3JhcGhpY3NSZWN0KHJlY3QpKSk7CiB9CiAKLUZsb2F0UmVjdCBBZmZpbmVUcmFu
c2Zvcm06Om1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAorR3JhcGhpY3NSZWN0
IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIGNvbnN0
CiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IG1hcHBlZFJlY3QocmVjdCk7Ci0gICAgICAgIG1hcHBlZFJlY3QubW92ZShuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzRdKSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3Ry
YW5zZm9ybVs1XSkpOworICAgICAgICBHcmFwaGljc1JlY3QgbWFwcGVkUmVjdChyZWN0KTsKKyAg
ICAgICAgbWFwcGVkUmVjdC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvR3JhcGhpY3NVbml0KG1fdHJh
bnNmb3JtWzRdKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90cmFuc2Zvcm1bNV0p
KTsKICAgICAgICAgcmV0dXJuIG1hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgRmxvYXRRdWFkIHJl
c3VsdDsKKyAgICBHcmFwaGljc1F1YWQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMShtYXBQb2lu
dChyZWN0LmxvY2F0aW9uKCkpKTsKLSAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxvYXRQb2lu
dChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7Ci0gICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KEZs
b2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKSkpOwotICAgIHJlc3VsdC5zZXRQNCht
YXBQb2ludChGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSkpKTsKKyAgICByZXN1bHQu
c2V0UDIobWFwUG9pbnQoR3JhcGhpY3NQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7Cisg
ICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KEdyYXBoaWNzUG9pbnQocmVjdC5tYXhYKCksIHJlY3Qu
bWF4WSgpKSkpOworICAgIHJlc3VsdC5zZXRQNChtYXBQb2ludChHcmFwaGljc1BvaW50KHJlY3Qu
eCgpLCByZWN0Lm1heFkoKSkpKTsKICAgICByZXR1cm4gcmVzdWx0LmJvdW5kaW5nQm94KCk7CiB9
CiAKLUZsb2F0UXVhZCBBZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBx
KSBjb25zdAorR3JhcGhpY3NRdWFkIEFmZmluZVRyYW5zZm9ybTo6bWFwUXVhZChjb25zdCBHcmFw
aGljc1F1YWQmIHEpIGNvbnN0CiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkp
IHsKLSAgICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQocSk7Ci0gICAgICAgIG1hcHBlZFF1YWQu
bW92ZShuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzRdKSwgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChtX3RyYW5zZm9ybVs1XSkpOworICAgICAgICBHcmFwaGljc1F1YWQgbWFwcGVk
UXVhZChxKTsKKyAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvR3JhcGhp
Y3NVbml0KG1fdHJhbnNmb3JtWzRdKSwgbmFycm93UHJlY2lzaW9uVG9HcmFwaGljc1VuaXQobV90
cmFuc2Zvcm1bNV0pKTsKICAgICAgICAgcmV0dXJuIG1hcHBlZFF1YWQ7CiAgICAgfQogCi0gICAg
RmxvYXRRdWFkIHJlc3VsdDsKKyAgICBHcmFwaGljc1F1YWQgcmVzdWx0OwogICAgIHJlc3VsdC5z
ZXRQMShtYXBQb2ludChxLnAxKCkpKTsKICAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQocS5wMigp
KSk7CiAgICAgcmVzdWx0LnNldFAzKG1hcFBvaW50KHEucDMoKSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDkgKzQ4LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFBv
aW50OwotY2xhc3MgRmxvYXRRdWFkOwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NQ
b2ludDsKK2NsYXNzIEdyYXBoaWNzUXVhZDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIElu
dFBvaW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwpAQCAt
NzAsMTQgKzcwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBSb3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0
byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgogICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNz
UG9pbnQmKSBjb25zdDsKIAogICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0
YW5nbGUgb3V0LiBUaGlzIGlzIGhlbHBmdWwgZm9yIGJvdW5kaW5nCiAgICAgLy8gYm94IGNvbXB1
dGF0aW9ucyBidXQgbWF5IG5vdCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4K
ICAgICBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCi0gICAgRmxvYXRS
ZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgRmxvYXRRdWFkIG1hcFF1
YWQoY29uc3QgRmxvYXRRdWFkJikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IG1hcFJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0JikgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcFF1YWQoY29uc3Qg
R3JhcGhpY3NRdWFkJikgY29uc3Q7CiAKICAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKIApA
QCAtMTkxLDcgKzE5MSw3IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwog
fTsKIAotQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCk7CitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1h
cEJldHdlZW5SZWN0cyhjb25zdCBHcmFwaGljc1JlY3QmIHNvdXJjZSwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBkZXN0KTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0
cml4LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1BvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgpAQCAtNTI4LDcgKzUyOCw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4JiBUcmFu
c2Zvcm1hdGlvbk1hdHIKICAgICByZXR1cm4gc2NhbGVOb25Vbmlmb3JtKDEuMGYsIC0xLjBmKTsK
IH0KIAotRmxvYXRQb2ludCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFBvaW50KGNvbnN0
IEZsb2F0UG9pbnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4
Ojpwcm9qZWN0UG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcCkgY29uc3QKIHsKICAgICAvLyBU
aGlzIGlzIGJhc2ljYWxseSByYXl0cmFjaW5nLiBXZSBoYXZlIGEgcG9pbnQgaW4gdGhlIGRlc3Rp
bmF0aW9uCiAgICAgLy8gcGxhbmUgd2l0aCB6PTAsIGFuZCB3ZSBjYXN0IGEgcmF5IHBhcmFsbGVs
IHRvIHRoZSB6LWF4aXMgZnJvbSB0aGF0CkBAIC01NTYsMTIgKzU1NiwxMiBAQCBGbG9hdFBvaW50
IFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0CiAgICAgICAgIG91dFkgLz0gdzsKICAgICB9
CiAKLSAgICByZXR1cm4gRmxvYXRQb2ludChzdGF0aWNfY2FzdDxmbG9hdD4ob3V0WCksIHN0YXRp
Y19jYXN0PGZsb2F0PihvdXRZKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoc3RhdGljX2Nh
c3Q8R3JhcGhpY3NVbml0PihvdXRYKSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihvdXRZKSk7
CiB9CiAKLUZsb2F0UXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cHJvamVjdFF1YWQoY29uc3Qg
RmxvYXRRdWFkJiBxKSBjb25zdAorR3JhcGhpY3NRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpw
cm9qZWN0UXVhZChjb25zdCBHcmFwaGljc1F1YWQmIHEpIGNvbnN0CiB7Ci0gICAgRmxvYXRRdWFk
IHByb2plY3RlZFF1YWQ7CisgICAgR3JhcGhpY3NRdWFkIHByb2plY3RlZFF1YWQ7CiAgICAgcHJv
amVjdGVkUXVhZC5zZXRQMShwcm9qZWN0UG9pbnQocS5wMSgpKSk7CiAgICAgcHJvamVjdGVkUXVh
ZC5zZXRQMihwcm9qZWN0UG9pbnQocS5wMigpKSk7CiAgICAgcHJvamVjdGVkUXVhZC5zZXRQMyhw
cm9qZWN0UG9pbnQocS5wMygpKSk7CkBAIC01NjksNTQgKzU2OSw1NCBAQCBGbG9hdFF1YWQgVHJh
bnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RRCiAgICAgcmV0dXJuIHByb2plY3RlZFF1YWQ7CiB9
CiAKLUZsb2F0UG9pbnQgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0
UG9pbnQmIHApIGNvbnN0CitHcmFwaGljc1BvaW50IFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQ
b2ludChjb25zdCBHcmFwaGljc1BvaW50JiBwKSBjb25zdAogewogICAgIGlmIChpc0lkZW50aXR5
T3JUcmFuc2xhdGlvbigpKQotICAgICAgICByZXR1cm4gRmxvYXRQb2ludChwLngoKSArIHN0YXRp
Y19jYXN0PGZsb2F0PihtX21hdHJpeFszXVswXSksIHAueSgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fbWF0cml4WzNdWzFdKSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KHAueCgpICsg
c3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVswXSksIHAueSgpICsgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsxXSkpOwogCiAgICAgZG91YmxlIHgsIHk7
CiAgICAgbXVsdFZlY01hdHJpeChwLngoKSwgcC55KCksIHgsIHkpOwotICAgIHJldHVybiBGbG9h
dFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NQb2ludChzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHgpLCBzdGF0
aWNfY2FzdDxHcmFwaGljc1VuaXQ+KHkpKTsKIH0KIAotRmxvYXRQb2ludDNEIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApIGNvbnN0CitHcmFwaGlj
c1BvaW50M0QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9p
bnQzRCYgcCkgY29uc3QKIHsKICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIEZsb2F0UG9pbnQzRChwLngoKSArIHN0YXRpY19jYXN0PGZsb2F0PihtX21h
dHJpeFszXVswXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC55KCkgKyBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHAueigpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzJdKSk7CisgICAgICAgIHJl
dHVybiBHcmFwaGljc1BvaW50M0QocC54KCkgKyBzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1f
bWF0cml4WzNdWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkoKSArIHN0YXRp
Y19jYXN0PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMV0pLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHAueigpICsgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsy
XSkpOwogCiAgICAgZG91YmxlIHgsIHksIHo7CiAgICAgbXVsdFZlY01hdHJpeChwLngoKSwgcC55
KCksIHAueigpLCB4LCB5LCB6KTsKLSAgICByZXR1cm4gRmxvYXRQb2ludDNEKHN0YXRpY19jYXN0
PGZsb2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeikp
OworICAgIHJldHVybiBHcmFwaGljc1BvaW50M0Qoc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih4
KSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0Pih5KSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0
Pih6KSk7CiB9CiAKIEludFJlY3QgVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3Qg
SW50UmVjdCAmcmVjdCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtYXBS
ZWN0KEZsb2F0UmVjdChyZWN0KSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1hcFJl
Y3QoR3JhcGhpY3NSZWN0KHJlY3QpKSk7CiB9CiAKLUZsb2F0UmVjdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpIGNvbnN0CitHcmFwaGljc1JlY3QgVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKSBjb25zdAog
ewogICAgIGlmIChpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBtYXBwZWRSZWN0KHIpOwotICAgICAgICBtYXBwZWRSZWN0Lm1vdmUoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fbWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSk7
CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXBwZWRSZWN0KHIpOworICAgICAgICBtYXBwZWRSZWN0
Lm1vdmUoc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVswXSksIHN0YXRpY19j
YXN0PEdyYXBoaWNzVW5pdD4obV9tYXRyaXhbM11bMV0pKTsKICAgICAgICAgcmV0dXJuIG1hcHBl
ZFJlY3Q7CiAgICAgfQogCi0gICAgRmxvYXRRdWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEZsb2F0
UXVhZChyKSk7CisgICAgR3JhcGhpY3NRdWFkIHJlc3VsdFF1YWQgPSBtYXBRdWFkKEdyYXBoaWNz
UXVhZChyKSk7CiAgICAgcmV0dXJuIHJlc3VsdFF1YWQuYm91bmRpbmdCb3goKTsKIH0KIAotRmxv
YXRRdWFkIFRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcSkg
Y29uc3QKK0dyYXBoaWNzUXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVhZChjb25zdCBH
cmFwaGljc1F1YWQmIHEpIGNvbnN0CiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
KCkpIHsKLSAgICAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQocSk7Ci0gICAgICAgIG1hcHBlZFF1
YWQubW92ZShzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4obV9tYXRyaXhbM11bMV0pKTsKKyAgICAgICAgR3JhcGhpY3NRdWFkIG1hcHBlZFF1YWQo
cSk7CisgICAgICAgIG1hcHBlZFF1YWQubW92ZShzdGF0aWNfY2FzdDxHcmFwaGljc1VuaXQ+KG1f
bWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihtX21hdHJpeFszXVsxXSkp
OwogICAgICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAgICBGbG9hdFF1YWQgcmVz
dWx0OworICAgIEdyYXBoaWNzUXVhZCByZXN1bHQ7CiAgICAgcmVzdWx0LnNldFAxKG1hcFBvaW50
KHEucDEoKSkpOwogICAgIHJlc3VsdC5zZXRQMihtYXBQb2ludChxLnAyKCkpKTsKICAgICByZXN1
bHQuc2V0UDMobWFwUG9pbnQocS5wMygpKSk7CkBAIC04NzksNyArODc5LDcgQEAgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIFRyYW5zZm9ybWF0aW9uTWF0cgogICAgIHJldHVybiAqdGhpczsKIH0KIAot
VHJhbnNmb3JtYXRpb25NYXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29u
c3QgRmxvYXRSZWN0JiBmcm9tLCBjb25zdCBGbG9hdFJlY3QmIHRvKQorVHJhbnNmb3JtYXRpb25N
YXRyaXggVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0
JiBmcm9tLCBjb25zdCBHcmFwaGljc1JlY3QmIHRvKQogewogICAgIEFTU0VSVCghZnJvbS5pc0Vt
cHR5KCkpOwogICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0by53aWR0aCgpIC8gZnJv
bS53aWR0aCgpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgVHJhbnNmb3JtYXRpb25NYXRyaXhfaAogI2RlZmluZSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeF9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQ
b2ludC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8c3RyaW5nLmg+IC8vZm9y
IG1lbWNweQogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CkBAIC02MCw5ICs2MCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgSW50
UmVjdDsKLWNsYXNzIEZsb2F0UG9pbnQzRDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0
UXVhZDsKK2NsYXNzIEdyYXBoaWNzUG9pbnQzRDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKK2NsYXNz
IEdyYXBoaWNzUXVhZDsKIAogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXggewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTIzLDIxICsxMjMsMjEgQEAgcHVibGljOgogICAgIHZv
aWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlJiB4MiwgZG91YmxlJiB5MikgY29uc3Qg
eyBtdWx0VmVjTWF0cml4KHgsIHksIHgyLCB5Mik7IH0KIAogICAgIC8vIE1hcCBhIDNEIHBvaW50
IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgM0QgcG9pbnQuCi0gICAgRmxvYXRQ
b2ludDNEIG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIGNvbnN0OworICAgIEdyYXBoaWNz
UG9pbnQzRCBtYXBQb2ludChjb25zdCBHcmFwaGljc1BvaW50M0QmKSBjb25zdDsKIAogICAgIC8v
IE1hcCBhIDJEIHBvaW50IHRocm91Z2ggdGhlIHRyYW5zZm9ybSwgcmV0dXJuaW5nIGEgMkQgcG9p
bnQuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaWdub3JlcyB0aGUgeiBjb21wb25lbnQsIGVmZmVj
dGl2ZWx5IHByb2plY3RpbmcgdGhlIHBvaW50IGludG8gdGhlIHo9MCBwbGFuZS4KLSAgICBGbG9h
dFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBHcmFwaGljc1Bv
aW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogICAgIC8vIExpa2Ug
dGhlIHZlcnNpb24gYWJvdmUsIGV4Y2VwdCB0aGF0IGl0IHJvdW5kcyB0aGUgbWFwcGVkIHBvaW50
IHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCiAgICAgSW50UG9pbnQgbWFwUG9pbnQoY29u
c3QgSW50UG9pbnQmIHApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcm91bmRlZEludFBv
aW50KG1hcFBvaW50KEZsb2F0UG9pbnQocCkpKTsKKyAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRQ
b2ludChtYXBQb2ludChHcmFwaGljc1BvaW50KHApKSk7CiAgICAgfQogCiAgICAgLy8gSWYgdGhl
IG1hdHJpeCBoYXMgM0QgY29tcG9uZW50cywgdGhlIHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQg
aXMKICAgICAvLyBkcm9wcGVkLCBlZmZlY3RpdmVseSBwcm9qZWN0aW5nIHRoZSByZWN0IGludG8g
dGhlIHo9MCBwbGFuZQotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OworICAgIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0
OwogCiAgICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRo
aXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKICAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBt
YXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgpAQCAtMTQ1LDE2ICsx
NDUsMTYgQEAgcHVibGljOgogCiAgICAgLy8gSWYgdGhlIG1hdHJpeCBoYXMgM0QgY29tcG9uZW50
cywgdGhlIHogY29tcG9uZW50IG9mIHRoZSByZXN1bHQgaXMKICAgICAvLyBkcm9wcGVkLCBlZmZl
Y3RpdmVseSBwcm9qZWN0aW5nIHRoZSBxdWFkIGludG8gdGhlIHo9MCBwbGFuZQotICAgIEZsb2F0
UXVhZCBtYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYpIGNvbnN0OworICAgIEdyYXBoaWNzUXVhZCBt
YXBRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYpIGNvbnN0OwogCiAgICAgLy8gTWFwIGEgcG9pbnQg
b24gdGhlIHo9MCBwbGFuZSBpbnRvIGEgcG9pbnQgb24KICAgICAvLyB0aGUgcGxhbmUgd2l0aCB3
aXRoIHRoZSB0cmFuc2Zvcm0gYXBwbGllZCwgYnkgZXh0ZW5kaW5nCiAgICAgLy8gYSByYXkgcGVy
cGVuZGljdWxhciB0byB0aGUgc291cmNlIHBsYW5lIGFuZCBjb21wdXRpbmcKICAgICAvLyB0aGUg
bG9jYWwgeCx5IHBvc2l0aW9uIG9mIHRoZSBwb2ludCB3aGVyZSB0aGF0IHJheSBpbnRlcnNlY3Rz
CiAgICAgLy8gd2l0aCB0aGUgZGVzdGluYXRpb24gcGxhbmUuCi0gICAgRmxvYXRQb2ludCBwcm9q
ZWN0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcHJv
amVjdFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICAvLyBQcm9qZWN0cyB0
aGUgZm91ciBjb3JuZXJzIG9mIHRoZSBxdWFkCi0gICAgRmxvYXRRdWFkIHByb2plY3RRdWFkKGNv
bnN0IEZsb2F0UXVhZCYpIGNvbnN0OworICAgIEdyYXBoaWNzUXVhZCBwcm9qZWN0UXVhZChjb25z
dCBHcmFwaGljc1F1YWQmKSBjb25zdDsKIAogICAgIGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVy
biBtX21hdHJpeFswXVswXTsgfQogICAgIHZvaWQgc2V0TTExKGRvdWJsZSBmKSB7IG1fbWF0cml4
WzBdWzBdID0gZjsgfQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1Bl
cnNwZWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bM10gIT0gMC4wZjsgfQogCiAg
ICAgLy8gcmV0dXJucyBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbWFwcyBhIHJlY3QgdG8gYSByZWN0
Ci0gICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlY3RUb1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHJlY3RUb1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3JhcGhpY3NSZWN0Jik7CiAK
ICAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRpYyBDR1BhdGhSZWYgY3Jl
YXRlUGF0aEZvckdseXBoKEhEQyAKIH0KIAogc3RhdGljIHZvaWQgZHJhd0dESUdseXBocyhHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgCi0gICAgICAgICAgICAgICAgICAgICAg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgICAg
ICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCkKIHsKICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQtPmZp
bGxDb2xvcigpOwogCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIHZvaWQgZHJhd0dESUdseXBo
cyhHcmFwaGljc0NvbnRleAogCiAgICAgICAgIGRyYXdJbnRvQml0bWFwID0gZmlsbENvbG9yLmFs
cGhhKCkgIT0gMjU1IHx8IGdyYXBoaWNzQ29udGV4dC0+aW5UcmFuc3BhcmVuY3lMYXllcigpOwog
ICAgICAgICBpZiAoIWRyYXdJbnRvQml0bWFwKSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zm
c2V0OworICAgICAgICAgICAgR3JhcGhpY3NTaXplIG9mZnNldDsKICAgICAgICAgICAgIGZsb2F0
IGJsdXI7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIENvbG9yU3BhY2Ug
c2hhZG93Q29sb3JTcGFjZTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgdm9pZCBkcmF3R0RJ
R2x5cGhzKEdyYXBoaWNzQ29udGV4CiAgICAgU2V0VGV4dEFsaWduKGhkYywgVEFfTEVGVCB8IFRB
X0JBU0VMSU5FKTsKIAogICAgIC8vIFVuaXNjcmliZSBnaXZlcyB1cyBvZmZzZXRzIHRvIGhlbHAg
cmVmaW5lIHRoZSBwb3NpdGlvbmluZyBvZiBjb21iaW5pbmcgZ2x5cGhzLgotICAgIEZsb2F0U2l6
ZSB0cmFuc2xhdGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOworICAgIEdyYXBoaWNz
U2l6ZSB0cmFuc2xhdGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOwogICAgIGlmICh0
cmFuc2xhdGlvbi53aWR0aCgpIHx8IHRyYW5zbGF0aW9uLmhlaWdodCgpKSB7CiAgICAgICAgIFhG
T1JNIHhmb3JtOwogICAgICAgICB4Zm9ybS5lTTExID0gMS4wOwpAQCAtMjk4LDcgKzI5OCw3IEBA
IHN0YXRpYyB2b2lkIGRyYXdHRElHbHlwaHMoR3JhcGhpY3NDb250ZXgKIH0KIAogdm9pZCBGb250
OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1w
bGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIENHQ29udGV4
dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAg
IGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3Ro
aW5nKCk7CkBAIC0zNTAsMTIgKzM1MCwxMiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBnCiAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIG1hdHJp
eCk7CiAKICAgICAvLyBVbmlzY3JpYmUgZ2l2ZXMgdXMgb2Zmc2V0cyB0byBoZWxwIHJlZmluZSB0
aGUgcG9zaXRpb25pbmcgb2YgY29tYmluaW5nIGdseXBocy4KLSAgICBGbG9hdFNpemUgdHJhbnNs
YXRpb24gPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChmcm9tKTsKKyAgICBHcmFwaGljc1NpemUgdHJh
bnNsYXRpb24gPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChmcm9tKTsKIAogICAgIENHQ29udGV4dFNl
dEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAgICAgd2tTZXRDR0Nv
bnRleHRGb250UmVuZGVyaW5nU3R5bGUoY2dDb250ZXh0LCBmb250LT5pc1N5c3RlbUZvbnQoKSwg
ZmFsc2UsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAgIEZsb2F0U2l6ZSBz
aGFkb3dPZmZzZXQ7CisgICAgR3JhcGhpY3NTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBz
aGFkb3dCbHVyOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIENvbG9yU3BhY2Ugc2hhZG93
Q29sb3JTcGFjZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFdpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ28KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGgsCitH
cmFwaGljc1JlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAog
ewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKQEAgLTYzLDEwICs2Mywx
MCBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAgICAgaWYgKHJ1
bi5ydGwoKSkgewogICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSk7CiAgICAgICAgIGZs
b2F0IHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAgICAgIHJldHVybiBGbG9h
dFJlY3QocG9pbnQueCgpICsgZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQu
eSgpLCByb3VuZGYodG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZih0b3RhbFdpZHRo
IC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHBvaW50Lngo
KSArIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHRv
dGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgp
LCBoKTsKICAgICB9IAogICAgIAotICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxv
b3JmKGJlZm9yZVdpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYoYWZ0ZXJXaWR0aCkgLSBmbG9vcmYo
YmVmb3JlV2lkdGgpLCBoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHBvaW50LngoKSArIGZs
b29yZihiZWZvcmVXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKGFmdGVyV2lkdGgpIC0gZmxvb3Jm
KGJlZm9yZVdpZHRoKSwgaCk7CiB9CiAKIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNp
cykgY29uc3QKQEAgLTk0LDcgKzk0LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbAogICAgIHJldHVybiBiZWZvcmVXaWR0aDsKIH0KIAotdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LAordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0
bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsg
YWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCkBAIC0xMDcsMTEgKzEwNywxMSBA
QCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIERyYXcgdGhlIGdseXBoIGJ1ZmZlciBub3cgYXQgdGhlIHN0YXJ0aW5nIHBv
aW50IHJldHVybmVkIGluIHN0YXJ0WC4KLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoc3RhcnRY
LCBwb2ludC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnRQb2ludChzdGFydFgsIHBvaW50
LnkoKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKGNvbnRleHQsIHJ1biwgZ2x5cGhCdWZmZXIsIHN0
YXJ0UG9pbnQpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlh
bEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwg
dG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTE5LDcgKzExOSw3IEBAIHZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBpZiAoZ2x5cGhCdWZm
ZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3RW1waGFzaXNNYXJrcyhj
b250ZXh0LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGlu
aXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50KHBvaW50LngoKSArIGluaXRp
YWxBZHZhbmNlLCBwb2ludC55KCkpKTsKIH0KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgY29uc3QgQ29sb3ImIGdy
YW1tYXJQYXR0ZXJuQ29sb3IoCiAgICAgcmV0dXJuIGdyYW1tYXJDb2xvcjsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgVGV4dENoZWNraW5nTGluZVN0eWxlIHN0eWxlKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDksNyArMTQ5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJl
cwogICAgIFJlc3RvcmVEQyhtX2hkYywgLTEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaXAoY29uc3QgR3JhcGhpY3NSZWN0JiBjbGlw
UmVjdCkKIHsKICAgICBpZiAoIW1faGRjKQogICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYx
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmNsaQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6c2NhbGUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKQogewogICAgIGlmICghbV9o
ZGMpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJDQUNGLmNwcAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NM
YXllckNBQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllckNBQ0YuaCIKIAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJJbWFnZS5oIgpA
QCAtMjAzLDEzICsyMDMsMTMgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6cmVtb3ZlRnJvbVBh
cmVudAogICAgIGxheWVyRm9yU3VwZXJsYXllcigpLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOyAg
ICAgICAgICAgIAogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNldFBvc2l0aW9u
KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBv
c2l0aW9uKHBvaW50KTsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NMYXllckNBQ0Y6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcG9pbnQp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjpzZXRBbmNob3JQb2ludChjb25zdCBHcmFwaGljc1Bv
aW50M0QmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAg
ICByZXR1cm47CkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0
QW5jaG9yUG9pbnQoYwogICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllckNBQ0Y6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGlj
c0xheWVyQ0FDRjo6c2V0U2l6ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgaWYg
KHNpemUgPT0gbV9zaXplKQogICAgICAgICByZXR1cm47CkBAIC0zMjcsNyArMzI3LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0TmVlZHNEaXNwbGF5KAogICAgICAgICBtX2xheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0FDRjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NMYXllckNB
Q0Y6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKGRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSByZWN0OwpA
QCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBQ0Y6OnNldERlYnVnQm9yZGVy
KGMKICAgICB9CiB9CiAKLWJvb2wgR3JhcGhpY3NMYXllckNBQ0Y6OnJlcXVpcmVzVGlsZWRMYXll
cihjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0Citib29sIEdyYXBoaWNzTGF5ZXJDQUNGOjpy
ZXF1aXJlc1RpbGVkTGF5ZXIoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSBjb25zdAogewogICAg
IGlmICghbV9kcmF3c0NvbnRlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU0NCw3ICs1
NDQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQUNGOjp1cGRhdGVMYXllclNpemUoCiAKIHZvaWQg
R3JhcGhpY3NMYXllckNBQ0Y6OnVwZGF0ZUFuY2hvclBvaW50KCkKIHsKLSAgICBwcmltYXJ5TGF5
ZXIoKS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNo
b3JQb2ludC55KCkpKTsKKyAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoR3JhcGhp
Y3NQb2ludChtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsKICAgICBwcmlt
YXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKICAgICB1cGRh
dGVMYXllclBvc2l0aW9uKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXllckNBQ0YuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NMYXll
ckNBQ0YuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOSArNTMsOSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGluUG9pbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIGluUG9pbnQpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgaW5TaXplKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UG9zaXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgaW5Qb2ludCk7CisgICAgdmlydHVhbCB2b2lk
IHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgaW5Qb2ludCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBpblNpemUpOwogCiAgICAgdmly
dHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCkBA
IC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9h
dCBvcGFjaXR5KTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKIApA
QCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgogICAgIFdLQ0FDRkxheWVyKiBob3N0TGF5ZXJGb3JT
dWJsYXllcnMoKSBjb25zdDsKICAgICBXS0NBQ0ZMYXllciogbGF5ZXJGb3JTdXBlcmxheWVyKCkg
Y29uc3Q7CiAKLSAgICBib29sIHJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBGbG9hdFNpemUmKSBj
b25zdDsKKyAgICBib29sIHJlcXVpcmVzVGlsZWRMYXllcihjb25zdCBHcmFwaGljc1NpemUmKSBj
b25zdDsKICAgICB2b2lkIHN3YXBGcm9tT3JUb1RpbGVkTGF5ZXIoYm9vbCB1c2VUaWxlZExheWVy
KTsKIAogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBkZWZhdWx0Q29udGVu
dHNPcmllbnRhdGlvbigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDkgKzc2LDkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9m
U2l6ZShIQklUTQogCiAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgp
OwogICAgIGlmIChzaXplKQotICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdj
LCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0
KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwor
ICAgICAgICBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBHcmFwaGljc1JlY3QoMC4w
ZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6
ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAg
ICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgsIGJtcElu
Zm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGlt
YWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHkpOwor
ICAgICAgICBkcmF3KCZnYywgR3JhcGhpY3NSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0
aCwgYm1wSW5mby5ibUhlaWdodCksIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUu
d2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlQ29weSk7CiAKICAgICAvLyBEbyBjbGVhbnVwCiAgICAgQ0dDb250ZXh0UmVsZWFzZShjZ0Nv
bnRleHQpOwpAQCAtODYsNyArODYsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZT
aXplKEhCSVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdG
cmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAg
ICAgc2l6ZV90IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZyYW1lczsgKytpKSB7CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRy
YXdGcmFtZU1hdGNoaW5nU291cmMKICAgICAgICAgaWYgKENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Up
ID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS5oZWlnaHQoKSkgJiYgQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNyY1NpemUud2lkdGgoKSkpIHsKICAg
ICAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAg
ICAgIG1fY3VycmVudEZyYW1lID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwg
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSks
IHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgICAgICAgICAgZHJhdyhjdHh0LCBk
c3RSZWN0LCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXpl
LmhlaWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNo
aW5nU291cmMKIAogICAgIC8vIE5vIGltYWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5k
LCBmYWxsYmFjayB0byBkcmF3aW5nIHRoZSBjdXJyZW50IGZyYW1lCiAgICAgSW50U2l6ZSBpbWFn
ZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxv
YXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkp
LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICBkcmF3KGN0eHQsIGRzdFJlY3Qs
IEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhl
aWdodCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw5ICs4Miw5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE0KIAogICAgIEludFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsK
ICAgICBpZiAoc2l6ZSkKLSAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZnYywg
RmxvYXRSZWN0KDAuMGYsIDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCks
IEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKKyAg
ICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKCZnYywgR3JhcGhpY3NSZWN0KDAuMGYs
IDAuMGYsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCksIEludFNpemUoKnNpemUp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKICAgICBlbHNlCi0gICAgICAg
IGRyYXcoJmdjLCBGbG9hdFJlY3QoMC4wZiwgMC4wZiwgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZv
LmJtSGVpZ2h0KSwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFn
ZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5KTsKKyAg
ICAgICAgZHJhdygmZ2MsIEdyYXBoaWNzUmVjdCgwLjBmLCAwLjBmLCBibXBJbmZvLmJtV2lkdGgs
IGJtcEluZm8uYm1IZWlnaHQpLCBHcmFwaGljc1JlY3QoMC4wZiwgMC4wZiwgaW1hZ2VTaXplLndp
ZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZUNvcHkpOwogCiAgICAgLy8gRG8gY2xlYW51cAogICAgIGNhaXJvX2Rlc3Ryb3kodGFyZ2V0UmVm
KTsKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShI
QklUTQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3RnJhbWVN
YXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRy
YXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdy
YXBoaWNzUmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewogICAgIHNp
emVfdCBmcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
cmFtZXM7ICsraSkgewpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdG
cmFtZU1hdGNoaW5nU291cmMKICAgICAgICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hl
aWdodChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihzcmNTaXplLndpZHRoKCkpKSB7CiAgICAgICAgICAgICBzaXplX3QgY3VycmVudEZyYW1lID0g
bV9jdXJyZW50RnJhbWU7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGk7Ci0gICAgICAg
ICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBzcmNTaXplLndp
ZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBjb21wb3NpdGVP
cCk7CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEdyYXBoaWNzUmVjdCgwLjBmLCAw
LjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBjb21wb3NpdGVPcCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRGcmFtZSA9IGN1cnJlbnRG
cmFtZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTA4LDcgKzEwOCw3IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKIAogICAgIC8vIE5vIGlt
YWdlIG9mIHRoZSBjb3JyZWN0IHNpemUgd2FzIGZvdW5kLCBmYWxsYmFjayB0byBkcmF3aW5nIHRo
ZSBjdXJyZW50IGZyYW1lCiAgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6
ZSgpOwotICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAuMGYsIDAuMGYsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBj
b21wb3NpdGVPcCk7CisgICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBHcmFwaGljc1JlY3QoMC4wZiwg
MC4wZiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGNvbXBvc2l0ZU9wKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxD
b250ZXh0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiwyMCArMTE2LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ28KICAgICBBU1NFUlQobV9wYXJlbnQpOwogICAgIEFTU0VSVCht
X3BhcmVudC0+bV90cmFuc2Zvcm1MYXllciA9PSBsYXllcik7CiAKLSAgICBGbG9hdFNpemUgcGFy
ZW50U2l6ZSA9IGxheWVyLT5ib3VuZHMoKS5zaXplKCk7Ci0gICAgRmxvYXRTaXplIG5hdHVyYWxT
aXplID0gbV9wYXJlbnQtPm5hdHVyYWxTaXplKCk7CisgICAgR3JhcGhpY3NTaXplIHBhcmVudFNp
emUgPSBsYXllci0+Ym91bmRzKCkuc2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBuYXR1cmFsU2l6
ZSA9IG1fcGFyZW50LT5uYXR1cmFsU2l6ZSgpOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSByYXRp
byBvZiB0aGVzZSB0d28gc2l6ZXMgYW5kIHVzZSB0aGF0IHJhdGlvIHRvIHNjYWxlIHRoZSBxdFZp
ZGVvTGF5ZXI6Ci0gICAgRmxvYXRTaXplIHJhdGlvKHBhcmVudFNpemUud2lkdGgoKSAvIG5hdHVy
YWxTaXplLndpZHRoKCksIHBhcmVudFNpemUuaGVpZ2h0KCkgLyBuYXR1cmFsU2l6ZS5oZWlnaHQo
KSk7CisgICAgR3JhcGhpY3NTaXplIHJhdGlvKHBhcmVudFNpemUud2lkdGgoKSAvIG5hdHVyYWxT
aXplLndpZHRoKCksIHBhcmVudFNpemUuaGVpZ2h0KCkgLyBuYXR1cmFsU2l6ZS5oZWlnaHQoKSk7
CiAKICAgICBpbnQgdmlkZW9XaWR0aCA9IDA7CiAgICAgaW50IHZpZGVvSGVpZ2h0ID0gMDsKICAg
ICBtX3BhcmVudC0+bV9tb3ZpZS0+Z2V0TmF0dXJhbFNpemUodmlkZW9XaWR0aCwgdmlkZW9IZWln
aHQpOwotICAgIEZsb2F0UmVjdCB2aWRlb0JvdW5kcygwLCAwLCB2aWRlb1dpZHRoICogcmF0aW8u
d2lkdGgoKSwgdmlkZW9IZWlnaHQgKiByYXRpby5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludDNE
IHZpZGVvQW5jaG9yID0gbV9wYXJlbnQtPm1fcXRWaWRlb0xheWVyLT5hbmNob3JQb2ludCgpOwor
ICAgIEdyYXBoaWNzUmVjdCB2aWRlb0JvdW5kcygwLCAwLCB2aWRlb1dpZHRoICogcmF0aW8ud2lk
dGgoKSwgdmlkZW9IZWlnaHQgKiByYXRpby5oZWlnaHQoKSk7CisgICAgR3JhcGhpY3NQb2ludDNE
IHZpZGVvQW5jaG9yID0gbV9wYXJlbnQtPm1fcXRWaWRlb0xheWVyLT5hbmNob3JQb2ludCgpOwog
CiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgcG9zaXRpb24gYmFzZWQgb24gdGhlIHBhcmVudCdz
IHNpemU6Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbihwYXJlbnRTaXplLndpZHRoKCkgKiAwLjUg
LSB2aWRlb0JvdW5kcy53aWR0aCgpICogKDAuNSAtIHZpZGVvQW5jaG9yLngoKSksCisgICAgR3Jh
cGhpY3NQb2ludCBwb3NpdGlvbihwYXJlbnRTaXplLndpZHRoKCkgKiAwLjUgLSB2aWRlb0JvdW5k
cy53aWR0aCgpICogKDAuNSAtIHZpZGVvQW5jaG9yLngoKSksCiAgICAgICAgIHBhcmVudFNpemUu
aGVpZ2h0KCkgKiAwLjUgLSB2aWRlb0JvdW5kcy5oZWlnaHQoKSAqICgwLjUgLSB2aWRlb0FuY2hv
ci55KCkpKTsgCiAKICAgICBtX3BhcmVudC0+bV9xdFZpZGVvTGF5ZXItPnNldEJvdW5kcyh2aWRl
b0JvdW5kcyk7CkBAIC0xMTkxLDcgKzExOTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hcmsgdGhlIGxheWVy
IGFzIGFuY2hvcmVkIGluIHRoZSB0b3AgbGVmdC4KLSAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0QW5j
aG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKCkpOwogCiAgICAgbV9xdFZpZGVvTGF5ZXIgPSBQbGF0
Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsK
ICAgICBpZiAoIW1fcXRWaWRlb0xheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVdpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5OSw3ICs4OTksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZTo6Y3JlYXRlTGF5ZXJGb3JNCiAKICAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBkcmF3aW5nIGl0
c2VsZiwgYW5jaG9yZWQgaW4gdGhlIHRvcCBsZWZ0LCBhbmQgYm90dG9tLXVwLgogICAgIG1fcXRW
aWRlb0xheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9xdFZpZGVvTGF5ZXItPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBtX3F0VmlkZW9MYXllci0+c2V0QW5j
aG9yUG9pbnQoR3JhcGhpY3NQb2ludDNEKCkpOwogICAgIG1fcXRWaWRlb0xheWVyLT5zZXRDb250
ZW50c09yaWVudGF0aW9uKEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0
b21VcCk7CiAjaWZuZGVmIE5ERUJVRwogICAgIG1fcXRWaWRlb0xheWVyLT5zZXROYW1lKCJWaWRl
byBsYXllciIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Np
bXBsZUZvbnREYXRhQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFD
R1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMv
QXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgU2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtQ2hhcldpZHRoSW4KICAgICAgICAgaW5pdENoYXJXaWR0aHMoKTsKICAg
ICB9CiB9Ci1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CitHcmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1E
YXRhLnVzZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOwpA
QCAtMTI5LDcgKzEyOSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Cb3Vu
ZHMKICAgICBDR0ZvbnRHZXRHbHlwaEJCb3hlcyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgJmds
eXBoLCAxLCAmYm94KTsKICAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXpl
KCk7CiAgICAgQ0dGbG9hdCBzY2FsZSA9IHBvaW50U2l6ZSAvIGZvbnRNZXRyaWNzKCkudW5pdHNQ
ZXJFbSgpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJh
bnNmb3JtKGJveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOwor
ICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KGJveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOwogICAgIGlm
IChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCiAgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJv
dW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Np
bXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTksMTIgKzk5LDEyIEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRm
b3JtQ2hhcldpZHRoSW4KICAgICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1Jbml0
LgogfQogCi1GbG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0CitHcmFwaGljc1JlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
Qm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1E
YXRhLnVzZUdESSgpKQogICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOwog
ICAgIC8vRklYTUU6IEltcGxlbWVudCB0aGlzCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAg
IHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KICAgICAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpw
bGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YVdpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPG1sYW5nLmg+CiAjaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVy
bWluZVBpdGNoKCkKICAgICBSZWxlYXNlREMoMCwgZGMpOwogfQogCi1GbG9hdFJlY3QgU2ltcGxl
Rm9udERhdGE6OmJvdW5kc0ZvckdESUdseXBoKEdseXBoIGdseXBoKSBjb25zdAorR3JhcGhpY3NS
ZWN0IFNpbXBsZUZvbnREYXRhOjpib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
IHsKICAgICBIREMgaGRjID0gR2V0REMoMCk7CiAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYywgR01f
QURWQU5DRUQpOwpAQCAtMjE1LDcgKzIxNSw3IEBAIEZsb2F0UmVjdCBTaW1wbGVGb250RGF0YTo6
Ym91bmRzRm9yR0RJR2wKICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKICAgICBSZWxl
YXNlREMoMCwgaGRjKTsKICAgICAKLSAgICByZXR1cm4gRmxvYXRSZWN0KGdkaU1ldHJpY3MuZ21w
dEdseXBoT3JpZ2luLngsIC1nZGlNZXRyaWNzLmdtcHRHbHlwaE9yaWdpbi55LAorICAgIHJldHVy
biBHcmFwaGljc1JlY3QoZ2RpTWV0cmljcy5nbXB0R2x5cGhPcmlnaW4ueCwgLWdkaU1ldHJpY3Mu
Z21wdEdseXBoT3JpZ2luLnksCiAgICAgICAgIGdkaU1ldHJpY3MuZ21CbGFja0JveFggKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQsIGdkaU1ldHJpY3MuZ21CbGFja0JveFkpOyAKIH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzksMTEgKzMzOSwxMSBAQCBib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6
OnNoYXBlQW5kUGxhY2VJCiAgICAgICAgIC8vIGFzIHdlbGwsIHNvIHRoYXQgd2hlbiB0aGUgdGlt
ZSBjb21lcyB0byBkcmF3IHRob3NlIGdseXBocywgd2UgY2FuIGFwcGx5IHRoZSBhcHByb3ByaWF0
ZQogICAgICAgICAvLyB0cmFuc2xhdGlvbi4KICAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBGbG9hdFNpemUgc2l6ZShvZmZzZXRYLCAtb2Zmc2V0WSk7CisgICAgICAgICAg
ICBHcmFwaGljc1NpemUgc2l6ZShvZmZzZXRYLCAtb2Zmc2V0WSk7CiAgICAgICAgICAgICBnbHlw
aEJ1ZmZlci0+YWRkKGdseXBoLCBmb250RGF0YSwgYWR2YW5jZSwgJnNpemUpOwogICAgICAgICB9
CiAKLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0Zvckds
eXBoKGdseXBoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEt
PmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShtX2dseXBo
T3JpZ2luLngoKSwgbV9nbHlwaE9yaWdpbi55KCkpOwogICAgICAgICBtX21pbkdseXBoQm91bmRp
bmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7CiAg
ICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94
WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2Ny
aWJlQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6
ICAgIAogICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsK
ICAgICBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIG1fZmFsbGJhY2tGb250czsKLSAg
ICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBtX2dseXBoT3Jp
Z2luOwogICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFg7CiAgICAgZmxvYXQgbV9tYXhH
bHlwaEJvdW5kaW5nQm94WDsKICAgICBmbG9hdCBtX21pbkdseXBoQm91bmRpbmdCb3hZOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250
V2luQ0UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgIkZvbnRGYWxs
YmFja0xpc3QuaCIKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogU2NyZWVuRGNSZWxlYXNlciBy
ZWxlYXNlU2NyZWVuRGM7CiAKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorICAgICAgICAg
ICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUZXh0KGZvbnREYXRh
LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CiB9CkBAIC0yMDUsNyArMjA1
LDcgQEAgc3RhdGljIGludCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1bkNvbQogICAgIHJldHVy
biBvZmZzZXQ7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwK
K3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKHRvIDwg
MCkKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRlCiAgICAgICAgIGludCBsZW4gPSBjb21wLnRleHRMZW5ndGgoKTsKICAgICAgICAgaW50
IGN1ckVuZCA9IGN1clBvcyArIGxlbjsKICAgICAgICAgaWYgKGN1clBvcyA8IHRvICYmIGZyb20g
PCBjdXJFbmQgJiYgIWNvbXAuaXNTcGFjZSgpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHB0
ID0gcG9pbnQ7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHB0ID0gcG9pbnQ7CiAgICAgICAg
ICAgICBpZiAocnVuLnJ0bCgpKQogICAgICAgICAgICAgICAgIHB0LnNldFgocG9pbnQueCgpICsg
dyAtIGNvbXAubV9vZmZzZXQgLSBjb21wLm1fd2lkdGgpOwogICAgICAgICAgICAgZWxzZQpAQCAt
MjM1LDcgKzIzNSw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUK
ICAgICB9CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywg
Y29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2lu
dCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJr
ICovLCBjb25zdCBHcmFwaGljc1BvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGlu
dCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMzE3LDIx
ICszMTcsMjEgQEAgc3RhdGljIGZsb2F0IGN1cnNvclRvWChjb25zdCBGb250KiBmb250LAogICAg
IHJldHVybiB3aWR0aDsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LAorR3JhcGhp
Y3NSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIFRleHRSdW5D
b21wb25lbnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNv
bXBvbmVudHMsICp0aGlzLCBydW4pOwogCiAgICAgaWYgKCFmcm9tICYmIHRvID09IHJ1bi5sZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwdC54KCksIHB0LnkoKSwgdywgaCk7Cisg
ICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QocHQueCgpLCBwdC55KCksIHcsIGgpOwogCiAgICAg
ZmxvYXQgeDEgPSBjdXJzb3JUb1godGhpcywgY29tcG9uZW50cywgdywgcnVuLnJ0bCgpLCBmcm9t
KTsKICAgICBmbG9hdCB4MiA9IGN1cnNvclRvWCh0aGlzLCBjb21wb25lbnRzLCB3LCBydW4ucnRs
KCksIHRvKTsKICAgICBpZiAoeDIgPCB4MSkKICAgICAgICAgc3RkOjpzd2FwKHgxLCB4Mik7CiAK
LSAgICByZXR1cm4gRmxvYXRSZWN0KHB0LngoKSArIHgxLCBwdC55KCksIHgyIC0geDEsIGgpOwor
ICAgIHJldHVybiBHcmFwaGljc1JlY3QocHQueCgpICsgeDEsIHB0LnkoKSwgeDIgLSB4MSwgaCk7
CiB9CiAKIGJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2lu
Q0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0dyYWRpZW50V2luQ0UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYWRpZW50V2luQ0UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIGNvbnN0IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wLCAyPiYg
R3IKICAgICByZXR1cm4gbV9zdG9wczsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGlj
c0NvbnRleHQqIGMsIGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3Jh
cGhpY3NDb250ZXh0KiBjLCBjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAgYy0+ZmlsbFJl
Y3QociwgdGhpcyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dy
YXBoaWNzQ29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBz
dGF0aWMgaW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKIH0KIAogLy8gVW5saWtlIGVu
Y2xvc2luZ0ludFJlY3QoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIHN0cmljdCByb3VuZGluZy4KLXN0
YXRpYyBpbmxpbmUgSW50UmVjdCByb3VuZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQorc3RhdGlj
IGlubGluZSBJbnRSZWN0IHJvdW5kUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAg
cmV0dXJuIEludFJlY3Qoc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLnkoKSksIHN0
YWJsZVJvdW5kKHIubWF4WCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci5t
YXhZKCkpIC0gc3RhYmxlUm91bmQoci55KCkpKTsKIH0KQEAgLTExNywxMSArMTE3LDExIEBAIHRl
bXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgSW50UG9pbnQKICAgICByZXR1cm4gSW50UG9p
bnQoeCwgeSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgRmxvYXRQb2lu
dCBtYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwLCBjb25zdCBUJiB0KQordGVtcGxhdGU8Y2xh
c3MgVD4gc3RhdGljIGlubGluZSBHcmFwaGljc1BvaW50IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHAsIGNvbnN0IFQmIHQpCiB7CiAgICAgZG91YmxlIHgsIHk7CiAgICAgdC5tYXAocC54
KCksIHAueSgpLCAmeCwgJnkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZs
b2F0Pih4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2lu
dChzdGF0aWNfY2FzdDxmbG9hdD4oeCksIHN0YXRpY19jYXN0PGZsb2F0Pih5KSk7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIFRyYW5zZm9ybSwgY2xhc3MgUmVjdCwgY2xhc3MgVmFsdWU+IHN0YXRpYyBp
bmxpbmUgUmVjdCBtYXBSZWN0KGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IFRyYW5zZm9ybSYgdHJh
bnNmb3JtKQpAQCAtMTU2LDkgKzE1Niw5IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxp
bmUgSW50UmVjdCAKICAgICByZXR1cm4gbWFwUmVjdDxULCBJbnRSZWN0LCBpbnQ+KHJlY3QsIHRy
YW5zZm9ybSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0
IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUJiB0cmFuc2Zvcm0pCit0ZW1w
bGF0ZTxjbGFzcyBUPiBzdGF0aWMgaW5saW5lIEdyYXBoaWNzUmVjdCBtYXBSZWN0KGNvbnN0IEdy
YXBoaWNzUmVjdCYgcmVjdCwgY29uc3QgVCYgdHJhbnNmb3JtKQogewotICAgIHJldHVybiBtYXBS
ZWN0PFQsIEZsb2F0UmVjdCwgZG91YmxlPihyZWN0LCB0cmFuc2Zvcm0pOworICAgIHJldHVybiBt
YXBSZWN0PFQsIEdyYXBoaWNzUmVjdCwgZG91YmxlPihyZWN0LCB0cmFuc2Zvcm0pOwogfQogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEYXRhIHsKQEAgLTE5Niw3ICsxOTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsKICAgICB9
CiAKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICB2b2lkIHNjYWxl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKICAgICB7CiAgICAgICAgIG1fdHJhbnNmb3JtLnNj
YWxlTm9uVW5pZm9ybShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIH0KQEAgLTIy
MSw3ICsyMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0
KHJlY3QpOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKKyAgICBHcmFwaGljc1JlY3QgbWFwUmVjdChjb25zdCBHcmFwaGljc1JlY3Qm
IHJlY3QpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0ubWFwUmVjdChy
ZWN0KTsKICAgICB9CkBAIC0yMzEsMTYgKzIzMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3RyYW5zZm9ybS5tYXBQb2ludChwb2ludCk7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBt
YXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKyAgICBHcmFwaGljc1BvaW50
IG1hcFBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKICAgICB9CiAKLSAgICBGbG9h
dFNpemUgbWFwU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CisgICAgR3JhcGhpY3NT
aXplIG1hcFNpemUoY29uc3QgR3JhcGhpY3NTaXplJiBzaXplKSBjb25zdAogICAgIHsKICAgICAg
ICAgZG91YmxlIHcsIGg7CiAgICAgICAgIG1fdHJhbnNmb3JtLm1hcChzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksIHcsIGgpOwotICAgICAgICByZXR1cm4gRmxvYXRTaXplKHN0YXRpY19jYXN0
PGZsb2F0Pih3KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzU2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4odyksIHN0YXRpY19jYXN0PGZsb2F0PihoKSk7CiAg
ICAgfQogCiAgICAgdm9pZCBzYXZlKCkKQEAgLTUwNywxMyArNTA3LDEzIEBAIFRyYW5zcGFyZW50
TGF5ZXJEQzo6VHJhbnNwYXJlbnRMYXllckRDKEcKICAgICAgICAgICAgIG1fcm90YXRpb24ubV9w
b3N0U2hpZnRYIC09IG1fb3JpZ1JlY3QueCgpOwogICAgICAgICAgICAgbV9yb3RhdGlvbi5tX3Bv
c3RTaGlmdFkgLT0gbV9vcmlnUmVjdC55KCk7CiAKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9w
TGVmdCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoRmxvYXRQb2ludChyZWN0QmVmb3Jl
VHJhbnNmb3JtLT5sb2NhdGlvbigpKSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHRvcFJpZ2h0
KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnko
KSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHRvcExlZnQgPSBtX2RhdGEtPm1fdHJhbnNm
b3JtLm1hcFBvaW50KEdyYXBoaWNzUG9pbnQocmVjdEJlZm9yZVRyYW5zZm9ybS0+bG9jYXRpb24o
KSkpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCB0b3BSaWdodChyZWN0QmVmb3JlVHJhbnNm
b3JtLT5tYXhYKCkgLSAxLCByZWN0QmVmb3JlVHJhbnNmb3JtLT55KCkpOwogICAgICAgICAgICAg
dG9wUmlnaHQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KHRvcFJpZ2h0KTsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNmb3JtLT54KCksIHJl
Y3RCZWZvcmVUcmFuc2Zvcm0tPm1heFkoKSAtIDEpOworICAgICAgICAgICAgR3JhcGhpY3NQb2lu
dCBib3R0b21MZWZ0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9y
bS0+bWF4WSgpIC0gMSk7CiAgICAgICAgICAgICBib3R0b21MZWZ0ID0gbV9kYXRhLT5tX3RyYW5z
Zm9ybS5tYXBQb2ludChib3R0b21MZWZ0KTsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaWRlVG9w
ID0gdG9wUmlnaHQgLSB0b3BMZWZ0OwotICAgICAgICAgICAgRmxvYXRTaXplIHNpZGVMZWZ0ID0g
Ym90dG9tTGVmdCAtIHRvcExlZnQ7CisgICAgICAgICAgICBHcmFwaGljc1NpemUgc2lkZVRvcCA9
IHRvcFJpZ2h0IC0gdG9wTGVmdDsKKyAgICAgICAgICAgIEdyYXBoaWNzU2l6ZSBzaWRlTGVmdCA9
IGJvdHRvbUxlZnQgLSB0b3BMZWZ0OwogICAgICAgICAgICAgZmxvYXQgd2lkdGggPSBfaHlwb3Qo
c2lkZVRvcC53aWR0aCgpICsgMSwgc2lkZVRvcC5oZWlnaHQoKSArIDEpOwogICAgICAgICAgICAg
ZmxvYXQgaGVpZ2h0ID0gX2h5cG90KHNpZGVMZWZ0LndpZHRoKCkgKyAxLCBzaWRlTGVmdC5oZWln
aHQoKSArIDEpOwogCkBAIC04NTQsNyArODU0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUFyYyhjb25zdCBJbgogICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25z
dCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBHcmFwaGlj
c1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQogewogICAgIGlmICghbV9kYXRh
LT5tX29wYWNpdHkgfHwgcGFpbnRpbmdEaXNhYmxlZCgpIHx8IG5wb2ludHMgPD0gMSB8fCAhcG9p
bnRzKQogICAgICAgICByZXR1cm47CkBAIC04NjQsNyArODY0LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8
UE9JTlQsIDIwPiB3aW5Qb2ludHMobnBvaW50cyk7Ci0gICAgRmxvYXRQb2ludCB0clBvaW50ID0g
bV9kYXRhLT5tYXBQb2ludChwb2ludHNbMF0pOworICAgIEdyYXBoaWNzUG9pbnQgdHJQb2ludCA9
IG1fZGF0YS0+bWFwUG9pbnQocG9pbnRzWzBdKTsKICAgICB3aW5Qb2ludHNbMF0ueCA9IHN0YWJs
ZVJvdW5kKHRyUG9pbnQueCgpKTsKICAgICB3aW5Qb2ludHNbMF0ueSA9IHN0YWJsZVJvdW5kKHRy
UG9pbnQueSgpKTsKICAgICBSRUNUIHJlY3QgPSB7IHdpblBvaW50c1swXS54LCB3aW5Qb2ludHNb
MF0ueSwgd2luUG9pbnRzWzBdLngsIHdpblBvaW50c1swXS55IH07CkBAIC05MTgsNyArOTE4LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIFNlbGVjdE9i
amVjdChkYywgb2xkQnJ1c2gpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZl
eFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29s
IGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxp
YXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC05MjksNyArOTI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29u
KAogICAgIC8vIEZJWE1FOiBJTVBMRU1FTlQhIQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBH
cmFwaGljc1JlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5
KQogICAgICAgICByZXR1cm47CkBAIC05NTIsNyArOTUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIEZpbGxSZWN0KHRyYW5zcGFyZW50REMuaGRjKCks
ICZ0cmFuc3BhcmVudERDLnJlY3QoKSwgaGJydXNoLmdldCgpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjEsMTggKzEwMjEsMTggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29ucwogICAgIERyYXdGb2N1c1JlY3QoZGMs
ICZyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBHcmFwaGljc1BvaW50JiBvcmln
aW4sIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQogewogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cm9rZVN0eWxlIG9sZFN0eWxlID0gc3Ry
b2tlU3R5bGUoKTsKICAgICBzZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgZHJhd0xp
bmUocm91bmRlZEludFBvaW50KG9yaWdpbiksIHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBGbG9h
dFNpemUod2lkdGgsIDApKSk7CisgICAgZHJhd0xpbmUocm91bmRlZEludFBvaW50KG9yaWdpbiks
IHJvdW5kZWRJbnRQb2ludChvcmlnaW4gKyBHcmFwaGljc1NpemUod2lkdGgsIDApKSk7CiAgICAg
c2V0U3Ryb2tlU3R5bGUob2xkU3R5bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0Q2hlY2tpbmcoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0
Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0Q2hlY2tpbmcoY29uc3QgR3JhcGhpY3NQb2ludCYsIGZsb2F0IHdpZHRoLCBUZXh0Q2hl
Y2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTEw
NjMsNyArMTA2Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWMK
ICAgICBjbGlwKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29u
c3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTEwNzcsNyArMTA3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmwKICAgICBmaWxsUmVjdChyZWN0LCBDb2xvcihDb2xvcjo6d2hp
dGUpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCwgZmxvYXQgd2lk
dGgpCiB7CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSB8fCBwYWludGluZ0Rpc2FibGVkKCkg
fHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1OSw3
ICsxMTU5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYQogICAg
IG1fZGF0YS0+cm90YXRlKHJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogfQpA
QCAtMTIxNCw3ICsxMjE0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjbwogICAgIGlmICghbV9kYXRhLT5tX2RjKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OworICAgIEdyYXBoaWNzU2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAg
ZmxvYXQgc2hhZG93Qmx1ciA9IDA7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgQ29sb3JT
cGFjZSBzaGFkb3dDb2xvclNwYWNlOwpAQCAtMTIyNywxMCArMTIyNywxMCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAgICAgZHN0UmVjdC5pbmZsYXRlKHN0YWJs
ZVJvdW5kKHNoYWRvd0JsdXIpKTsKICAgICBkc3RSZWN0ID0gbV9kYXRhLT5tYXBSZWN0KGRzdFJl
Y3QpOwogICAKLSAgICBGbG9hdFNpemUgbmV3VG9wTGVmdChtX2RhdGEtPm1hcFNpemUodG9wTGVm
dCkpOwotICAgIEZsb2F0U2l6ZSBuZXdUb3BSaWdodChtX2RhdGEtPm1hcFNpemUodG9wUmlnaHQp
KTsKLSAgICBGbG9hdFNpemUgbmV3Qm90dG9tTGVmdChtX2RhdGEtPm1hcFNpemUoYm90dG9tTGVm
dCkpOwotICAgIEZsb2F0U2l6ZSBuZXdCb3R0b21SaWdodChtX2RhdGEtPm1hcFNpemUoYm90dG9t
UmlnaHQpKTsKKyAgICBHcmFwaGljc1NpemUgbmV3VG9wTGVmdChtX2RhdGEtPm1hcFNpemUodG9w
TGVmdCkpOworICAgIEdyYXBoaWNzU2l6ZSBuZXdUb3BSaWdodChtX2RhdGEtPm1hcFNpemUodG9w
UmlnaHQpKTsKKyAgICBHcmFwaGljc1NpemUgbmV3Qm90dG9tTGVmdChtX2RhdGEtPm1hcFNpemUo
Ym90dG9tTGVmdCkpOworICAgIEdyYXBoaWNzU2l6ZSBuZXdCb3R0b21SaWdodChtX2RhdGEtPm1h
cFNpemUoYm90dG9tUmlnaHQpKTsKIAogICAgIFRyYW5zcGFyZW50TGF5ZXJEQyB0cmFuc3BhcmVu
dERjKG1fZGF0YSwgZHN0UmVjdCwgJmZpbGxSZWN0KTsKICAgICBIREMgZGMgPSB0cmFuc3BhcmVu
dERjLmhkYygpOwpAQCAtMTMwMCw3ICsxMzAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSb3VuZENvcm5lcihibwogfQogCiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNb2RlKQorR3Jh
cGhpY3NSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBHcmFw
aGljc1JlY3QmIGZyZWN0LCBSb3VuZGluZ01vZGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gZnJlY3Q7CkBAIC0xMzk2LDcgKzEzOTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBHcmFkaWVudCogZ3JhZGllbnQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByLCBj
b25zdCBHcmFkaWVudCogZ3JhZGllbnQpCiB7CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTQyNSw4ICsxNDI1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47CiAKICAgICByZWN0Lm1vdmUo
dHJhbnNwYXJlbnREQy50b1NoaWZ0KCkpOwotICAgIEZsb2F0UG9pbnQgZnAwID0gbV9kYXRhLT5t
YXBQb2ludChncmFkaWVudC0+cDAoKSk7Ci0gICAgRmxvYXRQb2ludCBmcDEgPSBtX2RhdGEtPm1h
cFBvaW50KGdyYWRpZW50LT5wMSgpKTsKKyAgICBHcmFwaGljc1BvaW50IGZwMCA9IG1fZGF0YS0+
bWFwUG9pbnQoZ3JhZGllbnQtPnAwKCkpOworICAgIEdyYXBoaWNzUG9pbnQgZnAxID0gbV9kYXRh
LT5tYXBQb2ludChncmFkaWVudC0+cDEoKSk7CiAgICAgSW50UG9pbnQgcDAoc3RhYmxlUm91bmQo
ZnAwLngoKSksIHN0YWJsZVJvdW5kKGZwMC55KCkpKTsKICAgICBJbnRQb2ludCBwMShzdGFibGVS
b3VuZChmcDEueCgpKSwgc3RhYmxlUm91bmQoZnAxLnkoKSkpOwogICAgIHAwICs9IHRyYW5zcGFy
ZW50REMudG9TaGlmdCgpOwpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIGludCB5ID0gcmVjdC55KCk7CiAgICAgaW50IHdp
ZHRoID0gcmVjdC53aWR0aCgpOwogICAgIGludCBoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotICAg
IEZsb2F0U2l6ZSBkID0gZ3JhZGllbnQtPnAxKCkgLSBncmFkaWVudC0+cDAoKTsKKyAgICBHcmFw
aGljc1NpemUgZCA9IGdyYWRpZW50LT5wMSgpIC0gZ3JhZGllbnQtPnAwKCk7CiAgICAgYm9vbCB2
ZXJ0aWNhbCA9IGZhYnMoZC5oZWlnaHQoKSkgPiBmYWJzKGQud2lkdGgoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7CiAgICAgICAgIGNvbnN0IEdyYWRpZW50
OjpDb2xvclN0b3AmIHN0b3AgPSBzdG9wc1tpXTsKQEAgLTE0OTIsNyArMTQ5Miw3IEBAIEFmZmlu
ZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgKICAgICByZXR1cm4gbV9kYXRhLT5t
X3RyYW5zZm9ybTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmIHJlY3QpCiB7CiAgICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIApAQCAtMTUwNCw3
ICsxNTA0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAg
IHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBDb2xv
clNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEdy
YXBoaWNzU2l6ZSYsIGZsb2F0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTE1MzAsNyArMTUzMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0NoYXJWaXNpYmxlKFVDaGFyIGMKICAgICByZXR1cm4gYyAmJiBjICE9IHplcm9XaWR0aFNw
YWNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWZpbGxDb2xvcigp
LmFscGhhKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQogICAgICAgICByZXR1cm47CkBAIC0xNTQ1
LDcgKzE1NDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9uCiAg
ICAgZmxvYXQgb2xkT3BhY2l0eSA9IG1fZGF0YS0+bV9vcGFjaXR5OwogICAgIG1fZGF0YS0+bV9v
cGFjaXR5ICo9IGZpbGxDb2xvcigpLmFscGhhKCkgLyAyNTUuMDsKIAotICAgIEZsb2F0UmVjdCB0
ZXh0UmVjdCA9IGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBwb2ludCwgZm9udC5mb250
TWV0cmljcygpLmhlaWdodCgpLCBmcm9tLCB0byk7CisgICAgR3JhcGhpY3NSZWN0IHRleHRSZWN0
ID0gZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBmb250LmZvbnRNZXRyaWNz
KCkuaGVpZ2h0KCksIGZyb20sIHRvKTsKICAgICB0ZXh0UmVjdC5zZXRZKHRleHRSZWN0LnkoKSAt
IGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgSW50UmVjdCB0clJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KG1fZGF0YS0+bWFwUmVjdCh0ZXh0UmVjdCkpOwogICAgIFJFQ1QgYm1wUmVj
dDsKQEAgLTE1NTQsNyArMTU1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb24KICAgICAgICAgewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKDApOwog
ICAgICAgICAgICAgZ2Muc2V0Qml0bWFwKGJtcCk7Ci0gICAgICAgICAgICBnYy5zY2FsZShGbG9h
dFNpemUobV9kYXRhLT5tX3RyYW5zZm9ybS5hKCksIG1fZGF0YS0+bV90cmFuc2Zvcm0uZCgpKSk7
CisgICAgICAgICAgICBnYy5zY2FsZShHcmFwaGljc1NpemUobV9kYXRhLT5tX3RyYW5zZm9ybS5h
KCksIG1fZGF0YS0+bV90cmFuc2Zvcm0uZCgpKSk7CiAgICAgICAgICAgICBmb250LmRyYXdUZXh0
KCZnYywgcnVuLCBJbnRQb2ludCgwLCBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9t
LCB0byk7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQga2V5MTsKQEAgLTE1NjksNyArMTU2
OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb24KIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0
YSwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCFtX2RhdGEtPm1fb3BhY2l0eSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTYwMCw4ICsxNjAwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0
KGNvbnN0IFNpbQogICAgICAgICA/IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5nZXRTY2FsZWRG
b250SGFuZGxlKGhlaWdodCwgc2NhbGVYID09IHNjYWxlWSA/IDAgOiB3aWR0aCkKICAgICAgICAg
OiAwOwogCi0gICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0g
Zm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgIEZsb2F0UG9pbnQgdHJQb2lu
dCA9IG1fZGF0YS0+bWFwUG9pbnQoc3RhcnRQb2ludCk7CisgICAgR3JhcGhpY3NQb2ludCBzdGFy
dFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpIC0gZm9udERhdGEtPmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpOworICAgIEdyYXBoaWNzUG9pbnQgdHJQb2ludCA9IG1fZGF0YS0+bWFwUG9pbnQoc3Rh
cnRQb2ludCk7CiAgICAgaW50IHkgPSBzdGFibGVSb3VuZCh0clBvaW50LnkoKSk7CiAKICAgICBD
b2xvciBjb2xvciA9IGZpbGxDb2xvcigpOwpAQCAtMTYzMiw3ICsxNjMyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IFNpbQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBHcmFwaGljc1NpemUgc2hhZG93T2Zm
c2V0OwogICAgIGZsb2F0IHNoYWRvd0JsdXIgPSAwOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwog
ICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKQEAgLTE2NDAsNyArMTY0MCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBTaW0KICAgICAgICAgJiYgZ2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3Bh
Y2UpCiAgICAgICAgICYmIHNoYWRvd0NvbG9yLmFscGhhKCk7CiAgICAgQ09MT1JSRUYgc2hhZG93
UkdCQ29sb3I7Ci0gICAgRmxvYXRQb2ludCB0clNoYWRvd1BvaW50OworICAgIEdyYXBoaWNzUG9p
bnQgdHJTaGFkb3dQb2ludDsKICAgICBpZiAoaGFzU2hhZG93KSB7CiAgICAgICAgIHNoYWRvd1JH
QkNvbG9yID0gUkdCKHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFk
b3dDb2xvci5ibHVlKCkpOwogICAgICAgICB0clNoYWRvd1BvaW50ID0gbV9kYXRhLT5tYXBQb2lu
dChzdGFydFBvaW50ICsgc2hhZG93T2Zmc2V0KTsKQEAgLTE4MzYsOCArMTgzNiw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0bWFwKFNoYXJlZEIKICAgICAgICAgdHJhbnNwYXJlbnRE
Qy5maWxsQWxwaGFDaGFubmVsKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0
bWFwUGF0dGVybihTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdElu
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdEluLCBjb25zdCBJ
bnRTaXplJiBvcmlnU291cmNlU2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Qml0bWFw
UGF0dGVybihTaGFyZWRCaXRtYXAqIGJtcCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdElu
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAg
ICAgY29uc3QgR3JhcGhpY3NQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgR3JhcGhpY3NSZWN0JiBkZXN0UmVjdEluLCBj
b25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKIHsKICAgICBpZiAoIW1fZGF0YS0+bV9vcGFj
aXR5KQogICAgICAgICByZXR1cm47CkBAIC0xODUzLDggKzE4NTMsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpdG1hcFBhdHRlcm4oCiAgICAgaWYgKCFkYykKICAgICAgICAgcmV0dXJu
OwogICAgIHRyUmVjdC5tb3ZlKHRyYW5zcGFyZW50REMudG9TaGlmdCgpKTsKLSAgICBGbG9hdFJl
Y3QgbW92ZWREc3RSZWN0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChG
bG9hdFJlY3QodHJSZWN0KSk7Ci0gICAgRmxvYXRTaXplIG1vdmVkKG1vdmVkRHN0UmVjdC5sb2Nh
dGlvbigpIC0gZGVzdFJlY3RJbi5sb2NhdGlvbigpKTsKKyAgICBHcmFwaGljc1JlY3QgbW92ZWRE
c3RSZWN0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChHcmFwaGljc1Jl
Y3QodHJSZWN0KSk7CisgICAgR3JhcGhpY3NTaXplIG1vdmVkKG1vdmVkRHN0UmVjdC5sb2NhdGlv
bigpIC0gZGVzdFJlY3RJbi5sb2NhdGlvbigpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gbV9kYXRhLT5tX3RyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1vdmVk
LndpZHRoKCksIG1vdmVkLmhlaWdodCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDIyICs0MywyMiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRT
aXplKG1fZGF0YS0+bV9iaXRtYXAtPndpZHRoKCksIG1fZGF0YS0+bV9iaXRtYXAtPmhlaWdodCgp
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxs
ID0gdHJ1ZSkge30KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0
JiBkc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KTsK
IAogICAgIGNvbnN0IEltYWdlQnVmZmVyRGF0YSogbV9kYXRhOwogfTsKIAotdm9pZCBCdWZmZXJl
ZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKK3ZvaWQgQnVmZmVyZWRJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgSW50UmVjdCBpbnREc3RSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KTsKICAgICBJbnRSZWN0IGludFNyY1JlY3Qoc3JjUmVj
dCk7CiAgICAgbV9kYXRhLT5tX2JpdG1hcC0+ZHJhdyhjdHh0LCBpbnREc3RSZWN0LCBpbnRTcmNS
ZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKIH0KIAotdm9pZCBCdWZmZXJlZElt
YWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQordm9pZCBCdWZmZXJlZEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGN0eHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewog
ICAgIG1fZGF0YS0+bV9iaXRtYXAtPmRyYXdQYXR0ZXJuKGN0eHQsIHRpbGVSZWN0SW4sIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCwgc2l6ZSgp
KTsKIH0KQEAgLTEwOCwyMCArMTA4LDIwIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkSW1hZ2UoJm1fZGF0
YSkpOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSkKIHsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOwogICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewog
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CiAgICAgaW1hZ2VDb3B5
LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VX
aW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDkgKzc4LDkgQEAgYm9vbCBCaXRtYXBJbWFn
ZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTQogCiAgICAgICAgIEludFNpemUgaW1hZ2VTaXplID0g
Qml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICAgICAgaWYgKHNpemUpCi0gICAgICAgICAgICBkcmF3
RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoJmdjLCBGbG9hdFJlY3QoMCwgMCwgYm1wSW5mby5ibVdp
ZHRoLCBibXBJbmZvLmJtSGVpZ2h0KSwgSW50U2l6ZSgqc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIENvbXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VT
aXplKCZnYywgR3JhcGhpY3NSZWN0KDAsIDAsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhl
aWdodCksIEludFNpemUoKnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhdygmZ2MsIEZsb2F0UmVjdCgwLCAwLCBi
bXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VT
aXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIENv
bXBvc2l0ZUNvcHkpOworICAgICAgICAgICAgZHJhdygmZ2MsIEdyYXBoaWNzUmVjdCgwLCAwLCBi
bXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQpLCBHcmFwaGljc1JlY3QoMCwgMCwgaW1h
Z2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IENvbXBvc2l0ZUNvcHkpOwogICAgIH0KIAogICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhP
bGRCbXApOwpAQCAtODgsNyArODgsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZT
aXplKEhCSVRNCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXdG
cmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAg
ICAgaW50IGZyYW1lcyA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZy
YW1lczsgKytpKSB7CkBAIC05OCwxNyArOTgsMTcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhd0Zy
YW1lTWF0Y2hpbmdTb3VyYwogCiAgICAgICAgIHNpemVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJl
bnRGcmFtZTsKICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwotICAgICAgICBkcmF3KGN0eHQs
IGRzdFJlY3QsIEZsb2F0UmVjdCgwLCAwLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0
KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgZHJhdyhjdHh0LCBk
c3RSZWN0LCBHcmFwaGljc1JlY3QoMCwgMCwgc3JjU2l6ZS53aWR0aCgpLCBzcmNTaXplLmhlaWdo
dCgpKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CiAgICAgICAgIG1fY3VycmVudEZy
YW1lID0gY3VycmVudEZyYW1lOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gTm8g
aW1hZ2Ugb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcg
dGhlIGN1cnJlbnQgZnJhbWUKICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpz
aXplKCk7Ci0gICAgZHJhdyhjdHh0LCBkc3RSZWN0LCBGbG9hdFJlY3QoMCwgMCwgaW1hZ2VTaXpl
LndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRl
T3ApOworICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgR3JhcGhpY3NSZWN0KDAsIDAsIGltYWdlU2l6
ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0
ZU9wKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0SW4sIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
K3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFw
aGljc1JlY3QmIGRzdFJlY3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjUmVjdEluLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAg
ICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzMs
MTQgKzEzMywxNCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAg
ICAgc3RhcnRBbmltYXRpb24oKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJbWFnZTo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRl
c3RSZWN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQordm9pZCBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0
LCBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgUmVmUHRyPFNoYXJl
ZEJpdG1hcD4gYm1wID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWJt
cCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BhdGhXaW5D
RS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvUGF0aFdpbkNFLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9QYXRoV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3
ICsyMSw3IEBACiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVBhdGhXaW5DRS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC01Myw0MiArNTMsNDIgQEAgUGF0aCYg
UGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0K
IAotYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUg
cnVsZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGF0aC0+Y29udGFpbnMo
cG9pbnQsIHJ1bGUpOwogfQogCi12b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7
CiAgICAgbV9wYXRoLT50cmFuc2xhdGUoc2l6ZSk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpib3Vu
ZGluZ1JlY3QoKSBjb25zdAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7CiB9CiAKLXZvaWQgUGF0aDo6
bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQordm9pZCBQYXRoOjptb3ZlVG8oY29uc3Qg
R3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgbV9wYXRoLT5tb3ZlVG8ocG9pbnQpOwogfQog
Ci12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGF0
aDo6YWRkTGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIG1fcGF0aC0+
YWRkTGluZVRvKHBvaW50KTsKIH0KIAotdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1
cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY3AsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7
CiAgICAgbV9wYXRoLT5hZGRRdWFkQ3VydmVUbyhjcCwgcCk7CiB9CiAKLXZvaWQgUGF0aDo6YWRk
QmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNw
MiwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiBjcDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcCkKIHsKICAgICBtX3BhdGgtPmFkZEJlemllckN1cnZlVG8oY3AxLCBjcDIs
IHApOwogfQogCi12b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQordm9pZCBQYXRoOjphZGRBcmNUbyhjb25z
dCBHcmFwaGljc1BvaW50JiBwMSwgY29uc3QgR3JhcGhpY3NQb2ludCYgcDIsIGZsb2F0IHJhZGl1
cykKIHsKICAgICBtX3BhdGgtPmFkZEFyY1RvKHAxLCBwMiwgcmFkaXVzKTsKIH0KQEAgLTk4LDE3
ICs5OCwxNyBAQCB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiAgICAgbV9wYXRoLT5jbG9zZVN1
YnBhdGgoKTsKIH0KIAotdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYgcCwgZmxv
YXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3ZvaWQgUGF0
aDo6YWRkQXJjKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxv
YXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCiB7CiAgICAgbV9wYXRoLT5hZGRFbGxpcHNlKHAs
IHIsIHIsIHNhciwgZWFyLCBhbnRpY2xvY2t3aXNlKTsKIH0KIAotdm9pZCBQYXRoOjphZGRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmIHIpCiB7CiAgICAgbV9wYXRoLT5hZGRSZWN0KHIpOwogfQogCi12b2lkIFBhdGg6OmFkZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdy
YXBoaWNzUmVjdCYgcikKIHsKICAgICBtX3BhdGgtPmFkZEVsbGlwc2Uocik7CiB9CkBAIC0xMzMs
MTMgKzEzMywxMyBAQCB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2ZvCiAg
ICAgbV9wYXRoLT50cmFuc2Zvcm0odCk7CiB9CiAKLUZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3Vu
ZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKikgY29uc3QKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhp
Y3NSZWN0KCk7CiB9CiAKLWJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBs
aWVyKiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Citib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5z
KFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdAogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU1LDcgKzE1NSw3IEBA
IGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKICAgICByZXR1cm4gIWlzRW1wdHko
KTsKIH0KIAotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAorR3JhcGhpY3NQ
b2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhdGgtPmxh
c3RQb2ludCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvUGxhdGZvcm1QYXRoV2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9ybVBh
dGhXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJQ
bGF0Zm9ybVBhdGhXaW5DRS5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGJlemllcihp
bnQgc2VnbWVudHMsIAogICAgIHB0c1tvZmZzZXQgKyBzZWdtZW50cyAtIDFdID0gcHA7CiB9CiAK
LXN0YXRpYyBib29sIGNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRSZWN0JiByLCBjb25zdCBGbG9h
dFBvaW50JiBwKQorc3RhdGljIGJvb2wgY29udGFpbnNQb2ludChjb25zdCBHcmFwaGljc1JlY3Qm
IHIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgcmV0dXJuIHAueCgpID49IHIueCgp
ICYmIHAueSgpID49IHIueSgpICYmIHAueCgpIDwgci5tYXhYKCkgJiYgcC55KCkgPCByLm1heFko
KTsKIH0KQEAgLTEzMSwxOCArMTMxLDE4IEBAIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZUFuZ2xlKGZs
b2F0JiBhbmdsZSkKICAgICAgICAgYW5nbGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0cmFuc2Zv
cm1BcmNQb2ludChmbG9hdCYgeCwgZmxvYXQmIHksIGNvbnN0IEZsb2F0UG9pbnQmIGMpCitzdGF0
aWMgdm9pZCB0cmFuc2Zvcm1BcmNQb2ludChmbG9hdCYgeCwgZmxvYXQmIHksIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGMpCiB7CiAgICAgeCArPSBjLngoKTsKICAgICB5ICs9IGMueSgpOwogfQogCi1z
dGF0aWMgdm9pZCBpbmZsYXRlUmVjdFRvQ29udGFpblBvaW50KEZsb2F0UmVjdCYgciwgZmxvYXQg
eCwgZmxvYXQgeSkKK3N0YXRpYyB2b2lkIGluZmxhdGVSZWN0VG9Db250YWluUG9pbnQoR3JhcGhp
Y3NSZWN0JiByLCBmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGlmIChyLmlzRW1wdHkoKSkgewog
ICAgICAgICByLnNldFgoeCk7CiAgICAgICAgIHIuc2V0WSh5KTsKLSAgICAgICAgci5zZXRTaXpl
KEZsb2F0U2l6ZSgxLCAxKSk7CisgICAgICAgIHIuc2V0U2l6ZShHcmFwaGljc1NpemUoMSwgMSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh4IDwgci54KCkpIHsKQEAgLTI0OSw3
ICsyNDksNyBAQCBzdGF0aWMgdm9pZCBkcmF3UG9seWdvbnMoSERDIGRjLCBjb25zdCBWCiAgICAg
ICAgIGlmICh3aW5Qb2ludHMpIHsKICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1hdGlvbikgewog
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkyID0gMDsgaTIgPCBucG9pbnRzOyArK2kyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdHJQb2ludCA9IHRyYW5zZm9ybWF0aW9uLT5t
YXBQb2ludChpLT5hdChpMikpOworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1BvaW50IHRy
UG9pbnQgPSB0cmFuc2Zvcm1hdGlvbi0+bWFwUG9pbnQoaS0+YXQoaTIpKTsKICAgICAgICAgICAg
ICAgICAgICAgd2luUG9pbnRzW2kyXS54ID0gc3RhYmxlUm91bmQodHJQb2ludC54KCkpOwogICAg
ICAgICAgICAgICAgICAgICB3aW5Qb2ludHNbaTJdLnkgPSBzdGFibGVSb3VuZCh0clBvaW50Lnko
KSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxMCw3IEBAIGludCBQbGF0Zm9ybVBh
dGhFbGVtZW50OjpudW1Qb2ludHMoKSBjb24KICAgICB9CiB9CiAKLXZvaWQgUGF0aFBvbHlnb246
Om1vdmUoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCit2b2lkIFBhdGhQb2x5Z29uOjptb3ZlKGNv
bnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0KQogewogICAgIGZvciAoVmVjdG9yPFBhdGhQb2ludD46
Oml0ZXJhdG9yIGkgPSBiZWdpbigpOyBpIDwgZW5kKCk7ICsraSkKICAgICAgICAgaS0+bW92ZShv
ZmZzZXQpOwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgUGF0aFBvbHlnb246OnRyYW5zZm9ybShj
b25zdCBBZmZpbmUKICAgICAgICAgKmkgPSB0Lm1hcFBvaW50KCppKTsKIH0KIAotYm9vbCBQYXRo
UG9seWdvbjo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Citib29sIFBh
dGhQb2x5Z29uOjpjb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgY29uc3QKIHsK
ICAgICBpZiAoc2l6ZSgpIDwgMykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk1LDcgKzM5
NSw3IEBAIGJvb2wgUGF0aFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG8KICAgICByZXR1
cm4gaW50ZXJzZWN0ZWQgJiAxOwogfQogCi12b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om1vdmUo
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCit2b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6Om1vdmUo
Y29uc3QgR3JhcGhpY3NTaXplJiBvZmZzZXQpCiB7CiAgICAgaW50IG4gPSBudW1Db250cm9sUG9p
bnRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCkBAIC00MDYsMTIgKzQwNiwx
MiBAQCB2b2lkIFBsYXRmb3JtUGF0aEVsZW1lbnQ6OnRyYW5zZm9ybShjb25zCiB7CiAgICAgaW50
IG4gPSBudW1Db250cm9sUG9pbnRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kp
IHsKLSAgICAgICAgRmxvYXRQb2ludCBwID0gdC5tYXBQb2ludChtX2RhdGEubV9wb2ludHNbaV0p
OworICAgICAgICBHcmFwaGljc1BvaW50IHAgPSB0Lm1hcFBvaW50KG1fZGF0YS5tX3BvaW50c1tp
XSk7CiAgICAgICAgIG1fZGF0YS5tX3BvaW50c1tpXS5zZXQocC54KCksIHAueSgpKTsKICAgICB9
CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXRoRWxlbWVudDo6aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShG
bG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkgY29uc3QKK3ZvaWQgUGxh
dGZvcm1QYXRoRWxlbWVudDo6aW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShHcmFwaGljc1JlY3QmIHIs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxhc3RQb2ludCkgY29uc3QKIHsKICAgICBpZiAobV90eXBl
ID09IFBhdGhBcmNUbykgewogICAgICAgICBjb25zdCBBcmNUbyYgZGF0YSA9IG1fZGF0YS5tX2Fy
Y1RvRGF0YTsKQEAgLTU2NCw3ICs1NjQsNyBAQCB2b2lkIFBsYXRmb3JtUGF0aDo6YXBwZW5kKGNv
bnN0IFBsYXRmb3JtCiB2b2lkIFBsYXRmb3JtUGF0aDo6Y2xlYXIoKQogewogICAgIG1fZWxlbWVu
dHMuY2xlYXIoKTsKLSAgICBtX2JvdW5kaW5nUmVjdCA9IEZsb2F0UmVjdCgpOworICAgIG1fYm91
bmRpbmdSZWN0ID0gR3JhcGhpY3NSZWN0KCk7CiAgICAgbV9zdWJwYXRocy5jbGVhcigpOwogICAg
IG1fY3VycmVudFBvaW50LmNsZWFyKCk7CiAgICAgbV9wZW5MaWZ0ZWQgPSB0cnVlOwpAQCAtNTgy
LDcgKzU4Miw3IEBAIHZvaWQgUGxhdGZvcm1QYXRoOjpmaWxsUGF0aChIREMgZGMsIGNvbnMKICAg
ICBTZWxlY3RPYmplY3QoZGMsIG9sZFBlbik7CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXRoOjp0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBQbGF0Zm9ybVBhdGg6OnRyYW5zbGF0
ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpCiB7CiAgICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVt
ZW50czo6aXRlcmF0b3IgaXQobV9lbGVtZW50cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50cy5l
bmQoKTsgKytpdCkKICAgICAgICAgaXQtPm1vdmUoc2l6ZSk7CkBAIC02MDIsNyArNjAyLDcgQEAg
dm9pZCBQbGF0Zm9ybVBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbgogICAgICAgICBpdC0+dHJh
bnNmb3JtKHQpOwogfQogCi1ib29sIFBsYXRmb3JtUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Citib29sIFBsYXRmb3JtUGF0aDo6Y29u
dGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7
CiAgICAgLy8gb3B0aW1pemF0aW9uOiBjaGVjayB0aGUgYm91bmRpbmcgcmVjdCBmaXJzdAogICAg
IGlmICghY29udGFpbnNQb2ludChtX2JvdW5kaW5nUmVjdCwgcG9pbnQpKQpAQCAtNjE2LDM1ICs2
MTYsMzUgQEAgYm9vbCBQbGF0Zm9ybVBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkKK3ZvaWQgUGxhdGZvcm1QYXRoOjptb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2lu
dCYgcG9pbnQpCiB7CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6TW92ZVRvIGRhdGEgPSB7IHsg
cG9pbnQueCgpLCBwb2ludC55KCkgfSB9OwogICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0
YSk7CiAgICAgYXBwZW5kKHBlKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZExpbmVUbyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgUGxhdGZvcm1QYXRoOjphZGRMaW5lVG8oY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgUGxhdGZvcm1QYXRoRWxlbWVudDo6TGlu
ZVRvIGRhdGEgPSB7IHsgcG9pbnQueCgpLCBwb2ludC55KCkgfSB9OwogICAgIFBsYXRmb3JtUGF0
aEVsZW1lbnQgcGUoZGF0YSk7CiAgICAgYXBwZW5kKHBlKTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBh
dGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50
JiBwKQordm9pZCBQbGF0Zm9ybVBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGNwLCBjb25zdCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIFBsYXRmb3JtUGF0aEVsZW1l
bnQ6OlF1YWRDdXJ2ZVRvIGRhdGEgPSB7IHsgY3AueCgpLCBjcC55KCkgfSwgeyBwLngoKSwgcC55
KCkgfSB9OwogICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7CiAgICAgYXBwZW5kKHBl
KTsKIH0KIAotdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCit2
b2lkIFBsYXRmb3JtUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBj
cDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNwMiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcCkKIHsK
ICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpCZXppZXJDdXJ2ZVRvIGRhdGEgPSB7IHsgY3AxLngo
KSwgY3AxLnkoKSB9LCB7IGNwMi54KCksIGNwMi55KCkgfSwgeyBwLngoKSwgcC55KCkgfSB9Owog
ICAgIFBsYXRmb3JtUGF0aEVsZW1lbnQgcGUoZGF0YSk7CiAgICAgYXBwZW5kKHBlKTsKIH0KIAot
dm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIGZwMSwgY29uc3Qg
RmxvYXRQb2ludCYgZnAyLCBmbG9hdCByYWRpdXMpCit2b2lkIFBsYXRmb3JtUGF0aDo6YWRkQXJj
VG8oY29uc3QgR3JhcGhpY3NQb2ludCYgZnAxLCBjb25zdCBHcmFwaGljc1BvaW50JiBmcDIsIGZs
b2F0IHJhZGl1cykKIHsKICAgICBjb25zdCBQYXRoUG9pbnQmIHAwID0gbV9jdXJyZW50UG9pbnQ7
CiAgICAgUGF0aFBvaW50IHAxOwpAQCAtNzE0LDcgKzcxNCw3IEBAIHZvaWQgUGxhdGZvcm1QYXRo
OjpjbG9zZVN1YnBhdGgoKQogfQogCiAvLyBhZGQgYSBjaXJjdWxhciBhcmMgY2VudHJlZCBhdCBw
IHdpdGggcmFkaXVzIHIgZnJvbSBzdGFydCBhbmdsZSBzYXIgKHJhZGlhbnMpIHRvIGVuZCBhbmds
ZSBlYXIKLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmIHAs
IGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dp
c2UpCit2b2lkIFBsYXRmb3JtUGF0aDo6YWRkRWxsaXBzZShjb25zdCBHcmFwaGljc1BvaW50JiBw
LCBmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBzYXIsIGZsb2F0IGVhciwgYm9vbCBhbnRpY2xvY2t3
aXNlKQogewogICAgIGZsb2F0IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZOwogCkBAIC03Mjcs
NyArNzI3LDcgQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYQogICAg
IHRyYW5zZm9ybUFyY1BvaW50KHN0YXJ0WCwgc3RhcnRZLCBwKTsKICAgICB0cmFuc2Zvcm1BcmNQ
b2ludChlbmRYLCBlbmRZLCBwKTsKIAotICAgIEZsb2F0UG9pbnQgc3RhcnQoc3RhcnRYLCBzdGFy
dFkpOworICAgIEdyYXBoaWNzUG9pbnQgc3RhcnQoc3RhcnRYLCBzdGFydFkpOwogICAgIG1vdmVU
byhzdGFydCk7CiAKICAgICBQbGF0Zm9ybVBhdGhFbGVtZW50OjpBcmNUbyBkYXRhID0geyB7IGVu
ZFgsIGVuZFkgfSwgeyBwLngoKSwgcC55KCkgfSwgIHsgYSwgYiB9LCAhYW50aWNsb2Nrd2lzZSB9
OwpAQCAtNzM2LDI4ICs3MzYsMjggQEAgdm9pZCBQbGF0Zm9ybVBhdGg6OmFkZEVsbGlwc2UoY29u
c3QgRmxvYQogfQogCiAKLXZvaWQgUGxhdGZvcm1QYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcikKK3ZvaWQgUGxhdGZvcm1QYXRoOjphZGRSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikK
IHsKICAgICBtb3ZlVG8oci5sb2NhdGlvbigpKTsKIAogICAgIGZsb2F0IHJpZ2h0ID0gci5tYXhY
KCkgLSAxOwogICAgIGZsb2F0IGJvdHRvbSA9IHIubWF4WSgpIC0gMTsKLSAgICBhZGRMaW5lVG8o
RmxvYXRQb2ludChyaWdodCwgci55KCkpKTsKLSAgICBhZGRMaW5lVG8oRmxvYXRQb2ludChyaWdo
dCwgYm90dG9tKSk7Ci0gICAgYWRkTGluZVRvKEZsb2F0UG9pbnQoci54KCksIGJvdHRvbSkpOwor
ICAgIGFkZExpbmVUbyhHcmFwaGljc1BvaW50KHJpZ2h0LCByLnkoKSkpOworICAgIGFkZExpbmVU
byhHcmFwaGljc1BvaW50KHJpZ2h0LCBib3R0b20pKTsKKyAgICBhZGRMaW5lVG8oR3JhcGhpY3NQ
b2ludChyLngoKSwgYm90dG9tKSk7CiAgICAgYWRkTGluZVRvKHIubG9jYXRpb24oKSk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQg
UGxhdGZvcm1QYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcikKIHsKLSAgICBG
bG9hdFNpemUgcmFkaXVzKHIud2lkdGgoKSAqIDAuNSwgci5oZWlnaHQoKSAqIDAuNSk7CisgICAg
R3JhcGhpY3NTaXplIHJhZGl1cyhyLndpZHRoKCkgKiAwLjUsIHIuaGVpZ2h0KCkgKiAwLjUpOwog
ICAgIGFkZEVsbGlwc2Uoci5sb2NhdGlvbigpICsgcmFkaXVzLCByYWRpdXMud2lkdGgoKSwgcmFk
aXVzLmhlaWdodCgpLCAwLCAwLCB0cnVlKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVBhdGg6OmFwcGx5
KHZvaWQqIGluZm8sIFBhdGhBcHBsaWVyRnVuY3Rpb24gZnVuY3Rpb24pIGNvbnN0CiB7CiAgICAg
UGF0aEVsZW1lbnQgcGVsZW1lbnQ7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbM107CisgICAgR3Jh
cGhpY3NQb2ludCBwb2ludHNbM107CiAgICAgcGVsZW1lbnQucG9pbnRzID0gcG9pbnRzOwogCiAg
ICAgZm9yIChQbGF0Zm9ybVBhdGhFbGVtZW50czo6Y29uc3RfaXRlcmF0b3IgaXQobV9lbGVtZW50
cy5iZWdpbigpKTsgaXQgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytpdCkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvUGxhdGZvcm1QYXRoV2luQ0UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9QbGF0Zm9y
bVBhdGhXaW5DRS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL1BsYXRmb3JtUGF0aFdpbkNFLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDggKzIwLDggQEAKICNpZm5kZWYgUGxhdGZvcm1QYXRoV2luQ0VfaAogI2RlZmluZSBQbGF0Zm9y
bVBhdGhXaW5DRV9oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTM5
LDEzICszOSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3ggPSB4Owog
ICAgICAgICAgICAgbV95ID0geTsKICAgICAgICAgfTsKLSAgICAgICAgb3BlcmF0b3IgRmxvYXRQ
b2ludCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV94LCBtX3kpOyB9Ci0gICAgICAgIHZv
aWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKKyAgICAgICAgb3BlcmF0b3IgR3JhcGhp
Y3NQb2ludCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUG9pbnQobV94LCBtX3kpOyB9CisgICAg
ICAgIHZvaWQgbW92ZShjb25zdCBHcmFwaGljc1NpemUmIG9mZnNldCkKICAgICAgICAgewogICAg
ICAgICAgICAgbV94ICs9IG9mZnNldC53aWR0aCgpOwogICAgICAgICAgICAgbV95ICs9IG9mZnNl
dC5oZWlnaHQoKTsKICAgICAgICAgfQotICAgICAgICBQYXRoUG9pbnQmIG9wZXJhdG9yPShjb25z
dCBGbG9hdFBvaW50JiBwKQorICAgICAgICBQYXRoUG9pbnQmIG9wZXJhdG9yPShjb25zdCBHcmFw
aGljc1BvaW50JiBwKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3ggPSBwLngoKTsKICAgICAg
ICAgICAgIG1feSA9IHAueSgpOwpAQCAtNTUsOSArNTUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgfTsKIAogICAgIHN0cnVjdCBQYXRoUG9seWdvbjogcHVibGljIFZlY3RvcjxQYXRoUG9p
bnQ+IHsKLSAgICAgICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KTsKKyAgICAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEdyYXBoaWNzU2l6ZSYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCB0
cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KTsKLSAgICAgICAgYm9vbCBjb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3Q7CisgICAgICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpIGNvbnN0OwogICAgIH07CiAKICAgICBjbGFzcyBQ
bGF0Zm9ybVBhdGhFbGVtZW50IHsKQEAgLTExNywxMSArMTE3LDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgY29uc3QgUGF0aFBvaW50JiBwb2ludEF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLm1fcG9pbnRzW2luZGV4XTsgfQogICAgICAgICBpbnQgbnVtUG9pbnRz
KCkgY29uc3Q7CiAgICAgICAgIGludCBudW1Db250cm9sUG9pbnRzKCkgY29uc3Q7Ci0gICAgICAg
IHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIG9mZnNldCk7CisgICAgICAgIHZvaWQgbW92ZShj
b25zdCBHcmFwaGljc1NpemUmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdCk7CiAgICAgICAgIFBhdGhFbGVtZW50VHlwZSB0eXBlKCkgY29u
c3Q7CiAgICAgICAgIFBsYWZvcm1QYXRoRWxlbWVudFR5cGUgcGxhdGZvcm1UeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShG
bG9hdFJlY3QmIHIsIGNvbnN0IEZsb2F0UG9pbnQmIGxhc3RQb2ludCkgY29uc3Q7CisgICAgICAg
IHZvaWQgaW5mbGF0ZVJlY3RUb0NvbnRhaW5NZShHcmFwaGljc1JlY3QmIHIsIGNvbnN0IEdyYXBo
aWNzUG9pbnQmIGxhc3RQb2ludCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBQbGFm
b3JtUGF0aEVsZW1lbnRUeXBlIG1fdHlwZTsKQEAgLTE0OCwyMiArMTQ4LDIyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHN0cm9rZVBhdGgoSERDLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0qIHRyKSBjb25zdDsKICAgICAgICAgdm9pZCBmaWxsUGF0aChIREMsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSogdHIpIGNvbnN0OwotICAgICAgICBGbG9hdFBvaW50IGxhc3RQb2ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuaXNFbXB0eSgpID8gRmxvYXRQb2ludCgwLCAwKSA6
IG1fZWxlbWVudHMubGFzdCgpLmxhc3RQb2ludCgpOyB9CisgICAgICAgIEdyYXBoaWNzUG9pbnQg
bGFzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50cy5pc0VtcHR5KCkgPyBHcmFwaGlj
c1BvaW50KDAsIDApIDogbV9lbGVtZW50cy5sYXN0KCkubGFzdFBvaW50KCk7IH0KIAotICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRp
bmdSZWN0OyB9Ci0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IFdpbmRSdWxlIHJ1bGUpIGNvbnN0OwotICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpOworICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdSZWN0OyB9CisgICAgICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0OworICAgICAg
ICB2b2lkIHRyYW5zbGF0ZShjb25zdCBHcmFwaGljc1NpemUmIHNpemUpOwogICAgICAgICB2b2lk
IHRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHQpOwogCi0gICAgICAgIHZvaWQgbW92
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxv
YXRQb2ludCYpOwotICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFk
ZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAgICB2b2lk
IGFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFk
aXVzKTsKKyAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYpOworICAgICAg
ICB2b2lkIGFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRk
UXVhZEN1cnZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludCk7CisgICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBH
cmFwaGljc1BvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBjb250cm9s
UG9pbnQyLCBjb25zdCBHcmFwaGljc1BvaW50Jik7CisgICAgICAgIHZvaWQgYWRkQXJjVG8oY29u
c3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBmbG9hdCByYWRpdXMpOwog
ICAgICAgICB2b2lkIGNsb3NlU3VicGF0aCgpOwotICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29u
c3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgc2FyLCBmbG9hdCBlYXIs
IGJvb2wgYW50aWNsb2Nrd2lzZSk7Ci0gICAgICAgIHZvaWQgYWRkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHIpOwotICAgICAgICB2b2lkIGFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKTsKKyAg
ICAgICAgdm9pZCBhZGRFbGxpcHNlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGZsb2F0IGEsIGZs
b2F0IGIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpOworICAgICAg
ICB2b2lkIGFkZFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByKTsKKyAgICAgICAgdm9pZCBhZGRF
bGxpcHNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcik7CiAgICAgICAgIHZvaWQgYXBwbHkodm9pZCog
aW5mbywgUGF0aEFwcGxpZXJGdW5jdGlvbiBmdW5jdGlvbikgY29uc3Q7CiAKICAgICBwcml2YXRl
OgpAQCAtMTcxLDcgKzE3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBh
ZGRUb1N1YnBhdGgoY29uc3QgUGxhdGZvcm1QYXRoRWxlbWVudCYgZSk7CiAKICAgICAgICAgUGxh
dGZvcm1QYXRoRWxlbWVudHMgbV9lbGVtZW50czsKLSAgICAgICAgRmxvYXRSZWN0IG1fYm91bmRp
bmdSZWN0OworICAgICAgICBHcmFwaGljc1JlY3QgbV9ib3VuZGluZ1JlY3Q7CiAgICAgICAgIFZl
Y3RvcjxQYXRoUG9seWdvbj4gbV9zdWJwYXRoczsKICAgICAgICAgUGF0aFBvaW50IG1fY3VycmVu
dFBvaW50OwogICAgICAgICBib29sIG1fcGVuTGlmdGVkOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvU2hhcmVkQml0bWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuY3BwCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L1NoYXJlZEJpdG1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCwxNiArMzk4LDE2IEBAIHN0
YXRpYyBMT05HIG5vcm1hbGl6ZVBoYXNlKExPTkcgcGhhc2UsIGkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TE9ORz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBoYXNlKSAlIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihsaW1pdCkpOwogfQogCi12b2lkIFNoYXJlZEJpdG1hcDo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0SW4sIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEludFNp
emUmIG9yaWdTb3VyY2VTaXplKQordm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25z
dCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKIHsKICAgICBpZiAoIW1fcGl4ZWxzKQogICAgICAg
ICByZXR1cm47CiAgICAgY3R4dC0+ZHJhd0JpdG1hcFBhdHRlcm4odGhpcywgdGlsZVJlY3RJbiwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0LCBv
cmlnU291cmNlU2l6ZSk7CiB9CiAKLXZvaWQgU2hhcmVkQml0bWFwOjpkcmF3UGF0dGVybihIREMg
aGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291cmNlU2l6ZSkKK3ZvaWQgU2hhcmVkQml0bWFw
OjpkcmF3UGF0dGVybihIREMgaGRjLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1Bv
aW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBvcmlnU291
cmNlU2l6ZSkKIHsKICAgICBpZiAoIW1fcGl4ZWxzKQogICAgICAgICByZXR1cm47CkBAIC00MjAs
NyArNDIwLDcgQEAgdm9pZCBTaGFyZWRCaXRtYXA6OmRyYXdQYXR0ZXJuKEhEQyBoZGMsIAogICAg
IGludCBibXBXaWR0aCA9IHdpZHRoKCk7CiAgICAgaW50IGJtcEhlaWdodCA9IGhlaWdodCgpOwog
Ci0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KHRpbGVSZWN0SW4pOworICAgIEdyYXBoaWNzUmVjdCB0
aWxlUmVjdCh0aWxlUmVjdEluKTsKICAgICBpZiAoYm1wV2lkdGggIT0gb3JpZ1NvdXJjZVNpemUu
d2lkdGgoKSkgewogICAgICAgICBkb3VibGUgcmF0ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oYm1w
V2lkdGgpIC8gb3JpZ1NvdXJjZVNpemUud2lkdGgoKTsKICAgICAgICAgZG91YmxlIHRlbXAgPSB0
aWxlUmVjdC53aWR0aCgpICogcmF0ZTsKQEAgLTQ0NiwxMiArNDQ2LDEyIEBAIHZvaWQgU2hhcmVk
Qml0bWFwOjpkcmF3UGF0dGVybihIREMgaGRjLCAKIAogICAgIEFmZmluZVRyYW5zZm9ybSB0ZiA9
IHBhdHRlcm5UcmFuc2Zvcm0gKiB0cmFuc2Zvcm07CiAKLSAgICBGbG9hdFJlY3QgdHJSZWN0ID0g
dGYubWFwUmVjdChkZXN0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IHRyUmVjdCA9IHRmLm1hcFJl
Y3QoZGVzdFJlY3QpOwogCiAgICAgUkVDVCBjbGlwQm94OwogICAgIGludCBjbGlwVHlwZSA9IEdl
dENsaXBCb3goaGRjLCAmY2xpcEJveCk7CiAgICAgaWYgKGNsaXBUeXBlID09IFNJTVBMRVJFR0lP
TikKLSAgICAgICAgdHJSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoY2xpcEJveC5sZWZ0LCBjbGlw
Qm94LnRvcCwgY2xpcEJveC5yaWdodCAtIGNsaXBCb3gubGVmdCwgY2xpcEJveC5ib3R0b20gLSBj
bGlwQm94LnRvcCkpOworICAgICAgICB0clJlY3QuaW50ZXJzZWN0KEdyYXBoaWNzUmVjdChjbGlw
Qm94LmxlZnQsIGNsaXBCb3gudG9wLCBjbGlwQm94LnJpZ2h0IC0gY2xpcEJveC5sZWZ0LCBjbGlw
Qm94LmJvdHRvbSAtIGNsaXBCb3gudG9wKSk7CiAgICAgZWxzZSBpZiAoY2xpcFR5cGUgPT0gQ09N
UExFWFJFR0lPTikgewogICAgICAgICBPd25QdHI8SFJHTj4gY2xpcFJnbiA9IGFkb3B0UHRyKENy
ZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwogICAgICAgICBpZiAoR2V0Q2xpcFJnbihoZGMsIGNs
aXBSZ24uZ2V0KCkpID4gMCkgewpAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgU2hhcmVkQml0bWFw
OjpkcmF3UGF0dGVybihIREMgaGRjLCAKICAgICAgICAgICAgICAgICBHZXRSZWdpb25EYXRhKGNs
aXBSZ24uZ2V0KCksIHJlZ2lvbkRhdGFTaXplLCByZWdpb25EYXRhLmRhdGEoKSk7CiAgICAgICAg
ICAgICAgICAgUkVDVCogcmVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UkVDVCo+KHJlZ2lvbkRhdGFb
MF0uQnVmZmVyKTsKICAgICAgICAgICAgICAgICBmb3IgKERXT1JEIGkgPSAwOyBpIDwgcmVnaW9u
RGF0YVswXS5yZGgubkNvdW50OyArK2ksICsrcmVjdCkKLSAgICAgICAgICAgICAgICAgICAgdHJS
ZWN0LmludGVyc2VjdChGbG9hdFJlY3QocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdo
dCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCkpOworICAgICAgICAgICAg
ICAgICAgICB0clJlY3QuaW50ZXJzZWN0KEdyYXBoaWNzUmVjdChyZWN0LT5sZWZ0LCByZWN0LT50
b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFyZWRCaXRtYXAuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaGFy
ZWRCaXRtYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBH
cmFwaGljc1BvaW50OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CkBAIC04MiwxMSArODIsMTEgQEAgcHVi
bGljOgogICAgIFBhc3NSZWZQdHI8U2hhcmVkQml0bWFwPiBjbGlwQml0bWFwKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGJvb2wgdXNlQWxwaGEpOwogCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxl
UmVjdEluLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEludFNpemUmIG9yaWdTb3VyY2VTaXplKTsKICAgICB2b2lkIGRyYXcoSERD
LCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihIREMsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBv
cmlnU291cmNlU2l6ZSk7CisgICAgdm9pZCBkcmF3UGF0dGVybihIREMsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZVJlY3RJbiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFw
aGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0LCBjb25zdCBJbnRTaXplJiBv
cmlnU291cmNlU2l6ZSk7CiAKICAgICBjbGFzcyBEQ1Byb3ZpZGVyIHsKICAgICBwdWJsaWM6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0
YVdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9TaW1wbGVGb250RGF0YVdpbkNFLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCkBAIC0xNDgsOSArMTQ4LDkg
QEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggPSAhKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBGX0ZJWEVEX1BJVENIKTsKIH0K
IAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBo
KSBjb25zdAorR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zvckds
eXBoKEdseXBoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7CiB9CiAgICAgCiBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvRmxvYXRSZWN0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVjdFd4LmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9GbG9hdFJlY3RXeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLQotI2luY2x1ZGUgPHd4L2Rl
ZnMuaD4KLSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSNpZiBVU0UoV1hHQykKLUZsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IHd4UmVjdDJERG91Ymxl
JiByKQotICAgIDogbV9sb2NhdGlvbihGbG9hdFBvaW50KHIubV94LCByLm1feSkpCi0gICAgLCBt
X3NpemUoRmxvYXRTaXplKHIubV93aWR0aCwgci5tX2hlaWdodCkpCi17Ci19Ci0KLUZsb2F0UmVj
dDo6b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdAotewotICAgIHJldHVybiB3eFJlY3Qy
RERvdWJsZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwotfQotI2VuZGlmCi0KLX0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFd4LmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9G
b250V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgRm9udDo6Y2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ28KIH0KIAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
CisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIC8vIHByZXBhcmUgREMKICAgICBDb2xv
ciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCk7CkBAIC04Miw3ICs4Miw3IEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcKICAgICBncmFwaGljc0Nv
bnRleHQtPnJlc3RvcmUoKTsKIH0KIAotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0dyYXBoaWNzUmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwb2ludCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAjaWYgT1MoV0lO
RE9XUykgfHwgT1MoREFSV0lOKQogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBpdCh0aGlzLCBy
dW4pOwpAQCAtOTYsMTcgKzk2LDE3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFQKICNpZiBPUyhXSU5ET1dTKQogICAgICAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgo
KSk7CiAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7Ci0gICAg
ICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxvb3JmKHRvdGFsV2lkdGggLSBhZnRl
cldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYodG90YWxXaWR0aCAtIGJlZm9yZVdpZHRoKSAtIGZs
b29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NSZWN0KHBvaW50LngoKSArIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIHBvaW50
LnkoKSwgcm91bmRmKHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0aCkgLSBmbG9vcmYodG90YWxXaWR0
aCAtIGFmdGVyV2lkdGgpLCBoKTsKICNlbHNlCiAgICAgICAgIGZsb2F0IHRvdGFsV2lkdGggPSBp
dC50b3RhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZmxv
b3JmKHRvdGFsV2lkdGggLSBhZnRlcldpZHRoKSwgcG9pbnQueSgpLCByb3VuZGYodG90YWxXaWR0
aCAtIGJlZm9yZVdpZHRoKSAtIGZsb29yZih0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCksIGgpOwor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KHBvaW50LngoKSArIGZsb29yZih0b3RhbFdpZHRo
IC0gYWZ0ZXJXaWR0aCksIHBvaW50LnkoKSwgcm91bmRmKHRvdGFsV2lkdGggLSBiZWZvcmVXaWR0
aCkgLSBmbG9vcmYodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgpLCBoKTsKICNlbmRpZgogICAgIH0g
CiAgICAgCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9vcmYoYmVmb3JlV2lk
dGgpLCBwb2ludC55KCksIHJvdW5kZihhZnRlcldpZHRoKSAtIGZsb29yZihiZWZvcmVXaWR0aCks
IGgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QocG9pbnQueCgpICsgZmxvb3JmKGJlZm9yZVdp
ZHRoKSwgcG9pbnQueSgpLCByb3VuZGYoYWZ0ZXJXaWR0aCkgLSBmbG9vcmYoYmVmb3JlV2lkdGgp
LCBoKTsKICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogI2VuZGlmCiB9CiAKQEAgLTExOCw3ICsx
MTgsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICNpZiBPUyhXSU5ET1dTKSB8fCBP
UyhEQVJXSU4pCiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFk
dmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgpAQCAtMTQ5LDE0ICsxNDksMTQgQEAg
dm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogICAgICAgICBzdGFydFgg
Kz0gYmVmb3JlV2lkdGg7CiAKICAgICAvLyBEcmF3IHRoZSBnbHlwaCBidWZmZXIgbm93IGF0IHRo
ZSBzdGFydGluZyBwb2ludCByZXR1cm5lZCBpbiBzdGFydFguCi0gICAgRmxvYXRQb2ludCBzdGFy
dFBvaW50KHN0YXJ0WCwgcG9pbnQueSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQo
c3RhcnRYLCBwb2ludC55KCkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihjb250ZXh0LCBydW4sIGds
eXBoQnVmZmVyLCBzdGFydFBvaW50KTsKICNlbHNlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNl
bmRpZgogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFu
Y2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGds
eXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgRm9u
dDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGUKICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0
LCBydW4sIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxB
ZHZhbmNlLCBwb2ludC55KCkpKTsKKyAgICBkcmF3RW1waGFzaXNNYXJrcyhjb250ZXh0LCBydW4s
IGdseXBoQnVmZmVyLCBtYXJrLCBHcmFwaGljc1BvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZh
bmNlLCBwb2ludC55KCkpKTsKIH0KIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBm
YWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFBsYXRmb3JtR3JhZGllbnQgR3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1JlY3QmKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTEy
LDcgKzExMiw3IEBAIHB1YmxpYzoKICAgICB3eFdpbmRvd0RDKiBjb250ZXh0OwogI2VuZGlmCiAg
ICAgaW50IG1zd0RDU3RhdGVJRDsKLSAgICBGbG9hdFNpemUgY3VycmVudFNjYWxlOworICAgIEdy
YXBoaWNzU2l6ZSBjdXJyZW50U2NhbGU7CiAgICAgd3hSZWdpb24gZ3RrQ3VycmVudENsaXBSZ247
CiAgICAgd3hSZWdpb24gZ3RrUGFpbnRDbGlwUmduOwogfTsKQEAgLTIzMCw4ICsyMzAsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRQb2ludCBwMSA9IHBvaW50
MTsKLSAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOworICAgIEdyYXBoaWNzUG9pbnQgcDEgPSBw
b2ludDE7CisgICAgR3JhcGhpY3NQb2ludCBwMiA9IHBvaW50MjsKICAgICAKICAgICBzYXZlKCk7
CiAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRQZW4od3hQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tl
VGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlVG9XeFBlblN0eWxlKHN0cm9rZVN0eWxlKCkpKSk7CkBA
IC0yNjIsNyArMjYyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJ
bgogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQ
b2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hv
dWxkQW50aWFsaWFzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNp
emVfdCBucG9pbnRzLCBjb25zdCBHcmFwaGljc1BvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50
aWFsaWFzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHln
b24oCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZl
eFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29s
IGFudGlhbGlhc2VkKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxp
YXNlZCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yOTEsNyArMjkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29u
KAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzMz
LDcgKzMzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnMKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBGbG9hdFJlY3QmIHIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBHcmFwaGlj
c1JlY3QmIHIpCiB7CiAgICAgbV9kYXRhLT5jb250ZXh0LT5TZXRDbGlwcGluZ1JlZ2lvbihyLngo
KSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CkBAIC00MDcsMTkgKzQwNywxOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0CiAjZW5kaWYKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRo
LCBib29sIHByaW50aW5nKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHNhdmUoKTsKLSAgICBGbG9hdFBvaW50IGVuZFBvaW50ID0gb3JpZ2lu
ICsgRmxvYXRTaXplKHdpZHRoLCAwKTsKKyAgICBHcmFwaGljc1BvaW50IGVuZFBvaW50ID0gb3Jp
Z2luICsgR3JhcGhpY3NTaXplKHdpZHRoLCAwKTsKICAgICBtX2RhdGEtPmNvbnRleHQtPlNldFBl
bih3eFBlbihzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgd3hTT0xJRCkpOwogICAg
IG1fZGF0YS0+Y29udGV4dC0+RHJhd0xpbmUob3JpZ2luLngoKSwgb3JpZ2luLnkoKSwgZW5kUG9p
bnQueCgpLCBlbmRQb2ludC55KCkpOwogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdp
biwgZmxvYXQgd2lkdGgsIFRleHRDaGVja2luZ0xpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRDaGVja2luZyhjb25zdCBHcmFwaGljc1BvaW50JiBv
cmlnaW4sIGZsb2F0IHdpZHRoLCBUZXh0Q2hlY2tpbmdMaW5lU3R5bGUgc3R5bGUpCiB7CiAgICAg
c3dpdGNoIChzdHlsZSkgewogICAgIGNhc2UgVGV4dENoZWNraW5nU3BlbGxpbmdMaW5lU3R5bGU6
CkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBh
bmdsZQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNjYWxlKSAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBHcmFwaGlj
c1NpemUmIHNjYWxlKSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9kYXRhLT5jb250ZXh0
KSB7CkBAIC00OTcsMTMgKzQ5NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTCiAjZW5kaWYKIH0KIAotRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6Y3VycmVu
dFNjYWxlKCkKK0dyYXBoaWNzU2l6ZSBHcmFwaGljc0NvbnRleHQ6OmN1cnJlbnRTY2FsZSgpCiB7
CiAgICAgcmV0dXJuIG1fZGF0YS0+Y3VycmVudFNjYWxlOwogfQotRmxvYXRSZWN0IEdyYXBoaWNz
Q29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3Vu
ZGluZ01vZGUpCitHcmFwaGljc1JlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJlY3QsIFJvdW5kaW5nTW9kZSkKIHsKLSAgICBGbG9h
dFJlY3QgcmVzdWx0OworICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAKICAgICB3eENvb3JkIHgg
PSAod3hDb29yZClmcmVjdC54KCk7CiAgICAgd3hDb29yZCB5ID0gKHd4Q29vcmQpZnJlY3QueSgp
OwpAQCAtNjI2LDEzICs2MjYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUAogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
R3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93
KEZsb2F0U2l6ZSBjb25zdCYsIGZsb2F0LCBDb2xvciBjb25zdCYsIENvbG9yU3BhY2UpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coR3JhcGhpY3NTaXplIGNvbnN0Jiwg
ZmxvYXQsIENvbG9yIGNvbnN0JiwgQ29sb3JTcGFjZSkKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsgCiB9CkBAIC02NTIsMTIgKzY1MiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJh
bnNwYXJlbmN5TGF5CiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYpIAogeyAKICAgICBub3RJbXBsZW1lbnRl
ZCgpOyAKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBHcmFw
aGljc1JlY3QmLCBmbG9hdCkKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsgCiB9CkBAIC02OTIs
NyArNjkyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlYwogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVj
dCByZWN0KHIpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHIpOwogICAgIGNsaXAocmVjdCk7CiAg
ICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzUmVjdFd4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc1JlY3RXeC5j
cHAJKHJldmlzaW9uIDkxMDExKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9GbG9hdFJlY3RXeC5jcHA6OTEwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFwaGljc1JlY3RXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllci4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKworI2luY2x1ZGUgPHd4L2RlZnMuaD4KKyNpbmNsdWRlIDx3eC9ncmFwaGljcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoV1hHQykKK0Zsb2F0UmVjdDo6Rmxv
YXRSZWN0KGNvbnN0IHd4UmVjdDJERG91YmxlJiByKQorICAgIDogbV9sb2NhdGlvbihGbG9hdFBv
aW50KHIubV94LCByLm1feSkpCisgICAgLCBtX3NpemUoRmxvYXRTaXplKHIubV93aWR0aCwgci5t
X2hlaWdodCkpCit7Cit9CisKK0Zsb2F0UmVjdDo6b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBj
b25zdAoreworICAgIHJldHVybiB3eFJlY3QyRERvdWJsZSh4KCksIHkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpOworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0dyYXBoaWNzUmVjdFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc1JlY3RXeC5jcHAJKHJldmlzaW9uIDkxMDEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NSZWN0V3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogCiAjaW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L2dyYXBoaWNzLmg+CkBAIC0z
MiwxMyArMzIsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShXWEdDKQotRmxv
YXRSZWN0OjpGbG9hdFJlY3QoY29uc3Qgd3hSZWN0MkREb3VibGUmIHIpCi0gICAgOiBtX2xvY2F0
aW9uKEZsb2F0UG9pbnQoci5tX3gsIHIubV95KSkKLSAgICAsIG1fc2l6ZShGbG9hdFNpemUoci5t
X3dpZHRoLCByLm1faGVpZ2h0KSkKK0dyYXBoaWNzUmVjdDo6R3JhcGhpY3NSZWN0KGNvbnN0IHd4
UmVjdDJERG91YmxlJiByKQorICAgIDogbV9sb2NhdGlvbihHcmFwaGljc1BvaW50KHIubV94LCBy
Lm1feSkpCisgICAgLCBtX3NpemUoR3JhcGhpY3NTaXplKHIubV93aWR0aCwgci5tX2hlaWdodCkp
CiB7CiB9CiAKLUZsb2F0UmVjdDo6b3BlcmF0b3Igd3hSZWN0MkREb3VibGUoKSBjb25zdAorR3Jh
cGhpY3NSZWN0OjpvcGVyYXRvciB3eFJlY3QyRERvdWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHd4UmVjdDJERG91YmxlKHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZl
cld4LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMjAgKzk5LDIw
IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBHcmFwaGljc1JlY3QmKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGRlc3RSZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkK
IHsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOwogICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHcmFwaGljc1BvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBHcmFwaGljc1JlY3QmIGRlc3RSZWN0KQogewogICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CiAgICAgaW1hZ2VDb3B5LT5k
cmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgpAQCAtODcsNyArODcsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjppbml0
UGxhdGZvcm1EYXRhKCkKIAogLy8gRHJhd2luZyBSb3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBkc3QsIGNvbnN0IEdyYXBoaWNzUmVjdCYgc3JjLCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgaWYgKCFt
X3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjQsMTIgKzEyNCwx
MiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgZmxvYXQg
c2NhbGVYID0gc3JjLndpZHRoKCkgLyBkc3Qud2lkdGgoKTsKICAgICBmbG9hdCBzY2FsZVkgPSBz
cmMuaGVpZ2h0KCkgLyBkc3QuaGVpZ2h0KCk7CiAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0
UmVjdCA9IGRzdDsKLSAgICBGbG9hdFNpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7
CisgICAgR3JhcGhpY3NSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkc3Q7CisgICAgR3JhcGhpY3NT
aXplIHNlbGZTaXplID0gY3VycmVudEZyYW1lU2l6ZSgpOwogICAgIAogICAgIGlmIChzcmMuc2l6
ZSgpICE9IHNlbGZTaXplKSB7Ci0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24o
RmxvYXRQb2ludChkc3QueCgpIC0gc3JjLngoKSAvIHNjYWxlWCwgZHN0LnkoKSAtIHNyYy55KCkg
LyBzY2FsZVkpKTsKLSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEZsb2F0U2l6ZShz
ZWxmU2l6ZS53aWR0aCgpIC8gc2NhbGVYLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHNjYWxlWSkpOwor
ICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQoZHN0Lngo
KSAtIHNyYy54KCkgLyBzY2FsZVgsIGRzdC55KCkgLSBzcmMueSgpIC8gc2NhbGVZKSk7CisgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShHcmFwaGljc1NpemUoc2VsZlNpemUud2lkdGgo
KSAvIHNjYWxlWCwgc2VsZlNpemUuaGVpZ2h0KCkgLyBzY2FsZVkpKTsKICAgICB9CiAKICAgICBn
Yy0+Q2xpcChkc3QueCgpLCBkc3QueSgpLCBkc3Qud2lkdGgoKSwgZHN0LmhlaWdodCgpKTsKQEAg
LTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgICAgIG9ic2VydmVyLT5kaWREcmF3KHRoaXMpOwogfQogCi12b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCkKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciwgY29uc3QgR3JhcGhpY3NSZWN0JiBkc3RSZWN0KQogewogI2lmIFVTRShX
WEdDKQogICAgIHd4R0NEQyogY29udGV4dCA9ICh3eEdDREMqKWN0eHQtPnBsYXRmb3JtQ29udGV4
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9QYXRo
V3guY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L1BhdGhXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKICNpbmNs
dWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJva2VTdHls
ZUFwcGxpZXIuaCIgCkBAIC03NSw3ICs3NSw3IEBAIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICBtX3BhdGggPSBuZXcgd3hHcmFwaGljc1BhdGgoKnBhdGgubV9wYXRoKTsKIH0KIAot
Ym9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgV2luZFJ1
bGUgcnVsZSkgY29uc3QKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgR3JhcGhpY3NQb2ludCYg
cG9pbnQsIGNvbnN0IFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7CiAjaWYgVVNFKFdYR0MpCiAgICAg
aWYgKG1fcGF0aCkgewpAQCAtODksMTIgKzg5LDEyIEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG8KICAgICByZXR1cm4gZmFsc2U7IAogfQogCi12b2lkIFBhdGg6OnRy
YW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKQordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgR3Jh
cGhpY3NTaXplJikKIHsgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRmxvYXRSZWN0IFBh
dGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0IAorR3JhcGhpY3NSZWN0IFBhdGg6OmJvdW5kaW5nUmVj
dCgpIGNvbnN0IAogeyAKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKSB7CkBAIC0xMDIs
MTYgKzEwMiwxNiBAQCBGbG9hdFJlY3QgUGF0aDo6Ym91bmRpbmdSZWN0KCkgY29uc3QgCiAgICAg
fQogI2VuZGlmCiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogfQogCi1GbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0
eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKK0dyYXBoaWNzUmVjdCBQYXRoOjpzdHJva2VCb3Vu
ZGluZ1JlY3QoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIH0KIAotYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcGxp
ZXIqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3QKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMo
U3Ryb2tlU3R5bGVBcHBsaWVyKiwgY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0CiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzcsNyArMTM3LDcgQEAg
dm9pZCBQYXRoOjpjbGVhcigpIAogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KSAKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKQpAQCAtMTQ1LDcg
KzE0NSw3IEBAIHZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW4KICNlbmRp
ZgogfQogCi12b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgCit2
b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkgCiB7CiAjaWYg
VVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0aCkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFBhdGg6
OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwCiAjZW5kaWYKIH0KIAotdm9pZCBQYXRoOjph
ZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sLCBjb25zdCBGbG9hdFBvaW50
JiBlbmQpIAordm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiBj
b250cm9sLCBjb25zdCBHcmFwaGljc1BvaW50JiBlbmQpIAogewogI2lmIFVTRShXWEdDKQogICAg
IGlmIChtX3BhdGgpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVU
byhjb25zdCBGbG9hdFBvaQogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVU
byhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sMSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbDIs
IGNvbnN0IEZsb2F0UG9pbnQmIGVuZCkgCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29u
c3QgR3JhcGhpY3NQb2ludCYgY29udHJvbDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRyb2wy
LCBjb25zdCBHcmFwaGljc1BvaW50JiBlbmQpIAogewogI2lmIFVTRShXWEdDKQogICAgIGlmICht
X3BhdGgpCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNv
bnN0IEZsb2F0UAogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGZsb2F0IHJhZGl1cykgCit2
b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3Jh
cGhpY3NQb2ludCYgcG9pbnQyLCBmbG9hdCByYWRpdXMpIAogewogI2lmIFVTRShXWEdDKQogICAg
IGlmIChtX3BhdGgpCkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgo
KSAKICNlbmRpZgogfQogCi12b2lkIFBhdGg6OmFkZEFyYyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBj
bG9ja3dpc2UpIAordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnQs
IGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgY2xv
Y2t3aXNlKSAKIHsKICNpZiBVU0UoV1hHQykKICAgICBpZiAobV9wYXRoKQpAQCAtMTkzLDcgKzE5
Myw3IEBAIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW4KICNlbmRpZgog
fQogCi12b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSAKK3ZvaWQgUGF0
aDo6YWRkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIAogewogI2lmIFVTRShXWEdDKQog
ICAgIGlmIChtX3BhdGgpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBQYXRoOjphZGRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdAogI2VuZGlmCiB9CiAKLXZvaWQgUGF0aDo6YWRkRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIAordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEdyYXBo
aWNzUmVjdCYgcmVjdCkgCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgaWYgKG1fcGF0aCkKQEAgLTIz
OSwxMSArMjM5LDExIEBAIGJvb2wgUGF0aDo6aGFzQ3VycmVudFBvaW50KCkgY29uc3QKICAgICBy
ZXR1cm4gIWlzRW1wdHkoKTsKIH0KIAotRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBj
b25zdCAKK0dyYXBoaWNzUG9pbnQgUGF0aDo6Y3VycmVudFBvaW50KCkgY29uc3QgCiB7CiAgICAg
Ly8gRklYTUU6IHJldHVybiBjdXJyZW50IHBvaW50IG9mIHN1YnBhdGguCiAgICAgZmxvYXQgcXVp
ZXROYU4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0
dXJuIEZsb2F0UG9pbnQocXVpZXROYU4sIHF1aWV0TmFOKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQ
b2ludChxdWlldE5hTiwgcXVpZXROYU4pOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1wbGVGb250RGF0YVd4LmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9T
aW1wbGVGb250RGF0YVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJG
b250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHVuaWNvZGUvdWNoYXIuaD4KQEAgLTEzNyw5ICsxMzcsOSBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCgpCiAgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsK
IH0KIAotRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoKSBjb25zdAorR3JhcGhpY3NSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKEdseXBoKSBjb25zdAogewotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIGZsb2F0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdp
ZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJp
eFd4LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNpbmNsdWRl
ICJBc3NlcnRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSW1hZ2VHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdl
KERyYWdJbWFnZVJlZiBpbWFnZSkKICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdl
KTsKIH0KIAotRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwg
RmxvYXRTaXplIHNjYWxlKQorRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJl
ZiBpbWFnZSwgR3JhcGhpY3NTaXplIHNjYWxlKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAg
IHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Ny
ZWVuR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxh
dGZvcm1TY3JlZW5HdGsuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEw
ICs5NSwxMCBAQCBzdGF0aWMgR2RrU2NyZWVuKiBnZXRTY3JlZW4oR3RrV2lkZ2V0KiB3CiAgICAg
cmV0dXJuIGd0a193aWRnZXRfaGFzX3NjcmVlbih3aWRnZXQpID8gZ3RrX3dpZGdldF9nZXRfc2Ny
ZWVuKHdpZGdldCkgOiBnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCk7CiB9CiAKLUZsb2F0UmVjdCBz
Y3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0
KiB3aWRnZXQpCiB7CiAgICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgR3RrV2lkZ2V0KiBjb250
YWluZXIgPSBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
UGFnZUNsaWVudCgpKTsKICAgICBpZiAoY29udGFpbmVyKQpAQCAtMTA2LDI1ICsxMDYsMjUgQEAg
RmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiAKICAgICBHZGtTY3JlZW4qIHNj
cmVlbiA9IGNvbnRhaW5lciA/IGdldFNjcmVlbihjb250YWluZXIpIDogZ2RrX3NjcmVlbl9nZXRf
ZGVmYXVsdCgpOwogICAgIGlmICghc2NyZWVuKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIAogICAgIGdpbnQgbW9uaXRvciA9IGNv
bnRhaW5lciA/IGdka19zY3JlZW5fZ2V0X21vbml0b3JfYXRfd2luZG93KHNjcmVlbiwgZ3RrX3dp
ZGdldF9nZXRfd2luZG93KGNvbnRhaW5lcikpIDogMDsKIAogICAgIEdka1JlY3RhbmdsZSBnZW9t
ZXRyeTsKICAgICBnZGtfc2NyZWVuX2dldF9tb25pdG9yX2dlb21ldHJ5KHNjcmVlbiwgbW9uaXRv
ciwgJmdlb21ldHJ5KTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoZ2VvbWV0cnkueCwgZ2VvbWV0
cnkueSwgZ2VvbWV0cnkud2lkdGgsIGdlb21ldHJ5LmhlaWdodCk7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdChnZW9tZXRyeS54LCBnZW9tZXRyeS55LCBnZW9tZXRyeS53aWR0aCwgZ2VvbWV0cnku
aGVpZ2h0KTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRn
ZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICNpZiBQTEFURk9STShYMTEpCiAgICAgR3RrV2lkZ2V0
KiBjb250YWluZXIgPSBHVEtfV0lER0VUKHdpZGdldC0+cm9vdCgpLT5ob3N0V2luZG93KCktPnBs
YXRmb3JtUGFnZUNsaWVudCgpKTsKICAgICBpZiAoIWNvbnRhaW5lcikKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBpZiAo
IWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKGNvbnRhaW5lcikpCiAgICAgICAgIHJldHVybiBzY3Jl
ZW5SZWN0KHdpZGdldCk7CkBAIC0xNDEsOSArMTQxLDkgQEAgRmxvYXRSZWN0IHNjcmVlbkF2YWls
YWJsZVJlY3QoV2lkZ2V0KiB3aQogICAgIGludCB4UmVzID0gWEdldFdpbmRvd1Byb3BlcnR5KEdE
S19ESVNQTEFZX1hESVNQTEFZKGRpc3BsYXkpLCBHREtfV0lORE9XX1hXSU5ET1cocm9vdFdpbmRv
dyksIHhwcm9wZXJ0eSwKICAgICAgICAgMCwgNCwgRkFMU0UsIFhBX0NBUkRJTkFMLCAmcmV0VHlw
ZSwgJnJldEZvcm1hdCwgJnJldE5JdGVtcywgJnJldEFmdGVyLCAoZ3VjaGFyKiopJndvcmtBcmVh
UG9zKTsKIAotICAgIEZsb2F0UmVjdCByZWN0OworICAgIEdyYXBoaWNzUmVjdCByZWN0OwogICAg
IGlmICh4UmVzID09IFN1Y2Nlc3MgJiYgd29ya0FyZWFQb3MgIT0gTlVMTCAmJiByZXRUeXBlID09
IFhBX0NBUkRJTkFMICYmIHJldE5JdGVtcyA9PSA0ICYmIHJldEZvcm1hdCA9PSAzMikgewotICAg
ICAgICByZWN0ID0gRmxvYXRSZWN0KHdvcmtBcmVhUG9zWzBdLCB3b3JrQXJlYVBvc1sxXSwgd29y
a0FyZWFQb3NbMl0sIHdvcmtBcmVhUG9zWzNdKTsKKyAgICAgICAgcmVjdCA9IEdyYXBoaWNzUmVj
dCh3b3JrQXJlYVBvc1swXSwgd29ya0FyZWFQb3NbMV0sIHdvcmtBcmVhUG9zWzJdLCB3b3JrQXJl
YVBvc1szXSk7CiAgICAgICAgIC8vIHJlY3QgY29udGFpbnMgdGhlIGF2YWlsYWJsZSBzcGFjZSBp
biB0aGUgd2hvbGUgc2NyZWVuIG5vdCBqdXN0IGluIHRoZSBtb25pdG9yCiAgICAgICAgIC8vIGNv
bnRhaW5pbmcgdGhlIHdpZGdldCwgc28gd2UgaW50ZXJzZWN0IGl0IHdpdGggdGhlIG1vbml0b3Ig
cmVjdGFuZ2xlLgogICAgICAgICByZWN0LmludGVyc2VjdChzY3JlZW5SZWN0KHdpZGdldCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5j
cHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3ICs0ODQsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KFJlbmRlCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X3N0eWxlKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxp
bmcsIE5VTEwpOwogCiAgICAgSW50U2l6ZSBhcnJvd1NpemUobWluQXJyb3dTaXplLCBpbm5lclJl
Y3QuaGVpZ2h0KCkpOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb3NpdGlvbihpbm5lclJlY3QubG9j
YXRpb24oKSk7CisgICAgR3JhcGhpY3NQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2Nh
dGlvbigpKTsKICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCiAgICAgICAg
IGFycm93UG9zaXRpb24ubW92ZShpbm5lclJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgp
LCAwKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGsuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw3ICs0OTQsNyBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKFJlCiAgICAgSW50UmVjdCBpY29u
UmVjdChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBtX21lZGlhSWNvblNpemUpIC8gMiwKICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNv
blNpemUpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRp
YUljb25TaXplKTsKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIG1fcGFu
ZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC0+ZmlsbFJlY3QoR3Jh
cGhpY3NSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAg
IHBhaW50R2RrUGl4YnVmKGNvbnRleHQsIGljb24uZ2V0KCksIGljb25SZWN0KTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkBAIC01MzcsOCArNTM3LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNsaWRlclRyYQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0OwogCi0gICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHIpLCBtX3Bh
bmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQtPmZpbGxSZWN0KEZs
b2F0UmVjdChJbnRSZWN0KHIueCgpLCByLnkoKSArIChyLmhlaWdodCgpIC0gbV9tZWRpYVNsaWRl
ckhlaWdodCkgLyAyLAorICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVjdChyKSwgbV9w
YW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LT5maWxsUmVjdChH
cmFwaGljc1JlY3QoSW50UmVjdChyLngoKSwgci55KCkgKyAoci5oZWlnaHQoKSAtIG1fbWVkaWFT
bGlkZXJIZWlnaHQpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByLndpZHRoKCksIG1fbWVkaWFTbGlkZXJIZWlnaHQpKSwgbV9zbGlkZXJDb2xvciwgQ29sb3JT
cGFjZURldmljZVJHQik7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOwpA
QCAtNjAzLDcgKzYwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJU
aHUKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRl
eHQ7Ci0gICAgY29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3Is
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQtPmZpbGxSZWN0KEdyYXBoaWNzUmVj
dChyZWN0KSwgbV9wYW5lbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lZGlhQ3VycmVudFRpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJ
bmZvLmNvbnRleHQ7CiAKLSAgICBjb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QocmVjdCksIG1f
cGFuZWxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC0+ZmlsbFJlY3Qo
R3JhcGhpY3NSZWN0KHJlY3QpLCBtX3BhbmVsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpw
YWludEJ1dHRvbihHcmFwCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4
dCwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBOVUxMKTsKIAogICAgIGRvdWJsZSBh
cnJvd1NpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpICogYXJyb3dT
Y2FsaW5nOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb2ludChyZWN0LngoKSArIChyZWN0LndpZHRo
KCkgLSBhcnJvd1NpemUpIC8gMiwKKyAgICBHcmFwaGljc1BvaW50IGFycm93UG9pbnQocmVjdC54
KCkgKyAocmVjdC53aWR0aCgpIC0gYXJyb3dTaXplKSAvIDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8gMik7CiAKICAg
ICBpZiAoZmxhZ3MgJiBHVEtfU1RBVEVfRkxBR19BQ1RJVkUpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9EcmFnSW1hZ2VIYWlrdS5jcHAJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERy
YWdJbWFnZVJlZikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1EcmFnSW1hZ2VSZWYgc2Nh
bGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUpCitEcmFnSW1hZ2VSZWYg
c2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBHcmFwaGljc1NpemUpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gaW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9oYWlrdS9TY3JlZW5IYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvU2NyZWVuSGFpa3UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1NjcmVlbkhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNj
cmVlbi5oIgogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCkBAIC00MSwxNCArNDEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3Qo
V2lkZ2V0KikKIHsKICAgICBCU2NyZWVuIHNjcmVlbjsKICAgICAvLyBGSVhNRTogV2UgYXNzdW1l
IHRoaXMgc2NyZWVuIGlzIHZhbGlkCi0gICAgcmV0dXJuIEZsb2F0UmVjdChzY3JlZW4uRnJhbWUo
KSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChzY3JlZW4uRnJhbWUoKSk7CiB9CiAKLUZsb2F0
UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNj
cmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHVzZSB0aGUgZ2V0X2Rlc2tiYXJfZnJhbWUoKSBmdW5jdGlvbgogICAgIC8vIGZyb20gSW50
ZXJmYWNlRGVmcy5oIHRvIG1ha2UgdGhpcyBzbWFsbGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShSZXRhaW5QdHI8TlNJbWFnZT4pCiAg
ICAgLy8gZGVsZXRlIGl0LiBJdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gaXQgZmFsbHMgb3V0IG9m
IHNjb3BlLgogfQogCi1SZXRhaW5QdHI8TlNJbWFnZT4gc2NhbGVEcmFnSW1hZ2UoUmV0YWluUHRy
PE5TSW1hZ2U+IGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCitSZXRhaW5QdHI8TlNJbWFnZT4gc2Nh
bGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBHcmFwaGljc1NpemUgc2NhbGUp
CiB7CiAgICAgTlNTaXplIG9yaWdpbmFsU2l6ZSA9IFtpbWFnZS5nZXQoKSBzaXplXTsKICAgICBO
U1NpemUgbmV3U2l6ZSA9IE5TTWFrZVNpemUoKG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndp
ZHRoKCkpLCAob3JpZ2luYWxTaXplLmhlaWdodCAqIHNjYWxlLmhlaWdodCgpKSk7CkBAIC0yMTEs
NyArMjExLDcgQEAgc3RhdGljIHZvaWQgZHJhd0F0UG9pbnQoTlNTdHJpbmcgKnN0cmluZwogICAg
ICAgICBbW3RleHRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xv
clNwYWNlXSBnZXRSZWQ6JnJlZCBncmVlbjomZ3JlZW4gYmx1ZTomYmx1ZSBhbHBoYTomYWxwaGFd
OwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VSR0JBKHJlZCAqIDI1
NSwgZ3JlZW4gKiAyNTUsIGJsdWUgKiAyNTUsIGFscGhhICogMjU1KSwgQ29sb3JTcGFjZURldmlj
ZVJHQik7CiAgICAgICAgIAotICAgICAgICB3ZWJDb3JlRm9udC5kcmF3VGV4dCgmZ3JhcGhpY3ND
b250ZXh0LCBydW4sIEZsb2F0UG9pbnQocG9pbnQueCwgKGZsaXBwZWQgPyBwb2ludC55IDogKC0x
ICogcG9pbnQueSkpKSk7CisgICAgICAgIHdlYkNvcmVGb250LmRyYXdUZXh0KCZncmFwaGljc0Nv
bnRleHQsIHJ1biwgR3JhcGhpY3NQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50LnkgOiAo
LTEgKiBwb2ludC55KSkpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghZmxpcHBlZCkKICAgICAg
ICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5N
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5o
IgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKIAotI2ltcG9ydCAiRmxvYXRSZWN0LmgiCisj
aW1wb3J0ICJHcmFwaGljc1JlY3QuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJGcmFt
ZVZpZXcuaCIKICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTUxLDEzICs1MSwxMyBAQCBib29sIHNjcmVl
bklzTW9ub2Nocm9tZShXaWRnZXQqKQogLy8gVGhlc2UgZnVuY3Rpb25zIHNjYWxlIGJldHdlZW4g
c2NyZWVuIGFuZCBwYWdlIGNvb3JkaW5hdGVzIGJlY2F1c2UgSmF2YVNjcmlwdC9ET00gb3BlcmF0
aW9ucyAKIC8vIGFzc3VtZSB0aGF0IHRoZSBzY3JlZW4gYW5kIHRoZSBwYWdlIHNoYXJlIHRoZSBz
YW1lIGNvb3JkaW5hdGUgc3lzdGVtLgogCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdp
ZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIE5T
V2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRv
d10gOiBuaWw7CiAgICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW5Gb3JXaW5kb3cod2luZG93
KSBmcmFtZV0sIHdpbmRvdyk7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdp
ZGdldCogd2lkZ2V0KQorR3JhcGhpY3NSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3
aWRnZXQpCiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRm
b3JtV2lkZ2V0KCkgd2luZG93XSA6IG5pbDsKICAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVl
bkZvcldpbmRvdyh3aW5kb3cpIHZpc2libGVGcmFtZV0sIHdpbmRvdyk7CkBAIC04NSwxOCArODUs
MTggQEAgc3RhdGljIENHRmxvYXQgd2luZG93U2NhbGVGYWN0b3IoTlNXaW5kbwogI2VuZGlmCiB9
CiAKLUZsb2F0UmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmIHJlY3QsIE5TV2luZG93ICpk
ZXN0aW5hdGlvbikKK0dyYXBoaWNzUmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmIHJlY3Qs
IE5TV2luZG93ICpkZXN0aW5hdGlvbikKIHsKLSAgICBGbG9hdFJlY3QgdXNlclJlY3QgPSByZWN0
OworICAgIEdyYXBoaWNzUmVjdCB1c2VyUmVjdCA9IHJlY3Q7CiAgICAgdXNlclJlY3Quc2V0WShO
U01heFkoW3NjcmVlbkZvcldpbmRvdyhkZXN0aW5hdGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC55
KCkgKyB1c2VyUmVjdC5oZWlnaHQoKSkpOyAvLyBmbGlwCiAgICAgaWYgKGRlc3RpbmF0aW9uKQog
ICAgICAgICB1c2VyUmVjdC5zY2FsZSgxIC8gd2luZG93U2NhbGVGYWN0b3IoZGVzdGluYXRpb24p
KTsgLy8gc2NhbGUgZG93bgogICAgIHJldHVybiB1c2VyUmVjdDsKIH0KIAotTlNSZWN0IHRvRGV2
aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNlKQorTlNSZWN0
IHRvRGV2aWNlU3BhY2UoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNl
KQogewotICAgIEZsb2F0UmVjdCBkZXZpY2VSZWN0ID0gcmVjdDsKKyAgICBHcmFwaGljc1JlY3Qg
ZGV2aWNlUmVjdCA9IHJlY3Q7CiAgICAgaWYgKHNvdXJjZSkKICAgICAgICAgZGV2aWNlUmVjdC5z
Y2FsZSh3aW5kb3dTY2FsZUZhY3Rvcihzb3VyY2UpKTsgLy8gc2NhbGUgdXAKICAgICBkZXZpY2VS
ZWN0LnNldFkoTlNNYXhZKFtzY3JlZW5Gb3JXaW5kb3coc291cmNlKSBmcmFtZV0pIC0gKGRldmlj
ZVJlY3QueSgpICsgZGV2aWNlUmVjdC5oZWlnaHQoKSkpOyAvLyBmbGlwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2lmIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTYxLDcgKzYxLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwg
ZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jik7
CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVdo
ZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50Jik7CkBAIC03MiwxMSArNzIsMTEgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsKIAotICAgIHZvaWQgaW1t
ZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7CisgICAg
dm9pZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0
aW9uKTsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGZsb2F0IGRlbHRhWCk7CiAg
ICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpOwogCi0gICAgdm9p
ZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIG5ld1Bvc2l0aW9uKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3Jv
bGxBbmltYXRpb24oY29uc3QgR3JhcGhpY3NQb2ludCYgbmV3UG9zaXRpb24pOwogCiAgICAgdm9p
ZCBzZXRJc0RyYXdpbmdJbnRvTGF5ZXIoYm9vbCBiKSB7IG1fZHJhd2luZ0ludG9MYXllciA9IGI7
IH0KICAgICBib29sIGlzRHJhd2luZ0ludG9MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2lu
Z0ludG9MYXllcjsgfQpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAKICAgICBmbG9hdCBh
ZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7CiAgICAgZmxvYXQg
YWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0OwotICAgIEZsb2F0
UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5
KGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKIAogI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKICAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0OwpAQCAtMTUyLDE1
ICsxNTIsMTUgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkQ3VtdWxhdGl2ZUhvcml6b250YWxT
Y3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGluOwogICAgIAogICAgIENGVGlt
ZUludGVydmFsIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOwotICAgIEZsb2F0U2l6ZSBt
X292ZXJmbG93U2Nyb2xsRGVsdGE7Ci0gICAgRmxvYXRTaXplIG1fc3RyZXRjaFNjcm9sbEZvcmNl
OwotICAgIEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7CisgICAgR3JhcGhpY3NTaXplIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAgICBHcmFwaGljc1NpemUgbV9zdHJldGNoU2Nyb2xsRm9y
Y2U7CisgICAgR3JhcGhpY3NTaXplIG1fbW9tZW50dW1WZWxvY2l0eTsKIAogICAgIC8vIFJ1YmJl
ciBiYW5kIHN0YXRlLgogICAgIENGVGltZUludGVydmFsIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0
U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKLSAgICBGbG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKLSAgICBG
bG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CisgICAgR3JhcGhpY3NTaXplIG1fc3RhcnRTdHJldGNo
OworICAgIEdyYXBoaWNzUG9pbnQgbV9vcmlnT3JpZ2luOworICAgIEdyYXBoaWNzU2l6ZSBtX29y
aWdWZWxvY2l0eTsKICAgICBUaW1lcjxTY3JvbGxBbmltYXRvck1hYz4gbV9zbmFwUnViYmVyQmFu
ZFRpbWVyOwogI2VuZGlmCiAgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JNYWMuaCIKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCkBAIC05
MCw3ICs5MCw3IEBAIC0gKE5TUmVjdClib3VuZHMKICAgICBpZiAoIV9hbmltYXRvcikKICAgICAg
ICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQ
b3NpdGlvbiA9IF9hbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NQb2ludCBjdXJyZW50UG9zaXRpb24gPSBfYW5pbWF0b3ItPmN1cnJlbnRQb3NpdGlvbigp
OwogICAgIHJldHVybiBOU01ha2VSZWN0KGN1cnJlbnRQb3NpdGlvbi54KCksIGN1cnJlbnRQb3Np
dGlvbi55KCksIDAsIDApOwogfQogCkBAIC01MTYsNyArNTE2LDcgQEAgYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgb2Zmc2V0KQordm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9mZnNldCkKIHsKICAgICBbbV9z
Y3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5dOwogICAgIGltbWVkaWF0ZVNjcm9s
bFRvUG9pbnQob2Zmc2V0KTsKQEAgLTUzOCw3ICs1MzgsNyBAQCBmbG9hdCBTY3JvbGxBbmltYXRv
ck1hYzo6YWRqdXN0U2Nyb2xsWVBvCiAgICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihw
b3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Nj
cm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIH0KIAotRmxvYXRQb2ludCBTY3Jv
bGxBbmltYXRvck1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6
OmFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9z
aXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLT5jb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb247CkBAIC01NDYs
MTIgKzU0NiwxMiBAQCBGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yTWFjOjphZGp1c3RTY3JvCiAg
ICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbi54KCksIG1fc2Ny
b2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlV2lkdGgoKSksIDApOwogICAgIGZsb2F0IG5ld1kgPSBtYXg8ZmxvYXQ+KG1pbjxmbG9h
dD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS5oZWlnaHQo
KSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOwogCi0gICAgcmV0dXJu
IEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQobmV3WCwg
bmV3WSk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFj
OjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9u
KQogewotICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0
aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOworICAgIEdyYXBoaWNzUG9pbnQgYWRqdXN0ZWRQ
b3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uSWZOZWNlc3NhcnkobmV3UG9zaXRpb24pOwog
IAogICAgIGlmIChhZGp1c3RlZFBvc2l0aW9uLngoKSA9PSBtX2N1cnJlbnRQb3NYICYmIGFkanVz
dGVkUG9zaXRpb24ueSgpID09IG1fY3VycmVudFBvc1kpCiAgICAgICAgIHJldHVybjsKQEAgLTU4
Myw3ICs1ODMsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxCCiAg
ICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnRGb3JTY3JvbGxBbmltYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgbmV3UG9zaXRpb24pCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlhdGVTY3JvbGxU
b1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIG5ld1Bvc2l0aW9u
KQogewogICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlvbkhlbHBlcik7CiAgICAgQ0dGbG9hdCBw
cm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfcHJvZ3Jlc3NdOwpAQCAt
ODY1LDcgKzg2NSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZUdlc3R1cmVFdmUK
IAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6cGlubmVkSW5EaXJlY3Rpb24oZmxvYXQgZGVsdGFY
LCBmbG9hdCBkZWx0YVkpCiB7Ci0gICAgRmxvYXRTaXplIGxpbWl0RGVsdGE7CisgICAgR3JhcGhp
Y3NTaXplIGxpbWl0RGVsdGE7CiAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFY
KSkgewogICAgICAgICBpZiAoZGVsdGFZIDwgMCkgewogICAgICAgICAgICAgLy8gV2UgYXJlIHRy
eWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRv
cApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNtb290aFNjcm9s
bFdpdGgKICAgICBmbG9hdCBkZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7
CiAKICAgICAvLyBSZXNldCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRv
IHJlbW92ZSBkZWx0YSBhdCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cu
Ci0gICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7CisgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhID0gR3JhcGhpY3NTaXplKCk7CiAKICAgICBmbG9hdCBldmVudENvYWxlc2Nl
ZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwogICAgIGZsb2F0IGV2ZW50Q29hbGVzY2Vk
RGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7CkBAIC05NzAsNyArOTcwLDcgQEAgdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c21vb3RoU2Nyb2xsV2l0aAogICAgICAgICAgICAgbV9sYXN0TW9t
ZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVl
bEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxv
YXRTaXplKCk7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKQEAg
LTEwNjAsOSArMTA2MCw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNtb290aFNjcm9sbFdp
dGgKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKG1fc3RyZXRjaFNj
cm9sbEZvcmNlLndpZHRoKCkgKyBkZWx0YVgpOwogICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xs
Rm9yY2Uuc2V0SGVpZ2h0KG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpICsgZGVsdGFZKTsK
IAotICAgICAgICAgICAgRmxvYXRTaXplIGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZv
clJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0
aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoKS5sb2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
T3JpZ2luKCkpIC0gc3RyZXRjaEFtb3VudDsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbmV3T3Jp
Z2luID0gb3JpZ09yaWdpbiArIGRhbXBlZERlbHRhOworICAgICAgICAgICAgR3JhcGhpY3NTaXpl
IGRhbXBlZERlbHRhKGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hT
Y3JvbGxGb3JjZS53aWR0aCgpKSksIGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YSht
X3N0cmV0Y2hTY3JvbGxGb3JjZS5oZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9p
bnQgb3JpZ09yaWdpbiA9IChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5s
b2NhdGlvbigpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkpIC0gc3RyZXRjaEFt
b3VudDsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgbmV3T3JpZ2luID0gb3JpZ09yaWdpbiAr
IGRhbXBlZERlbHRhOwogCiAgICAgICAgICAgICBpZiAob3JpZ09yaWdpbiAhPSBuZXdPcmlnaW4p
IHsKICAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xs
aW5nVG9Db250ZW50RWRnZShmYWxzZSk7CkBAIC0xMDg4LDcgKzEwODgsNyBAQCB2b2lkIFNjcm9s
bEFuaW1hdG9yTWFjOjpiZWdpblNjcm9sbEdlc3R1CiAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MgPSBmYWxzZTsKICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwogICAg
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gMDsKLSAgICBtX21vbWVudHVtVmVsb2Np
dHkgPSBGbG9hdFNpemUoKTsKKyAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUo
KTsKICAgICBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0ID0gbV9zY3JvbGxhYmxlQXJl
YS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpOwogICAgIG1f
c2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0ID0gbV9zY3JvbGxhYmxlQXJlYS0+aXNIb3Jp
em9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigpOwogICAgIG1fY3VtdWxhdGl2
ZUhvcml6b250YWxTY3JvbGwgPSAwOwpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6YmVnaW5TY3JvbGxHZXN0dQogICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkp
KTsKICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxh
c3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKIAotICAgIG1fb3ZlcmZsb3dTY3Jv
bGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEdyYXBo
aWNzU2l6ZSgpOwogICAgIAogICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUo
KSkKICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKQEAgLTExMTUsNyArMTEx
NSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kKCkKIHsKICAgICBD
RlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5
c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKICAgICBpZiAobV9s
YXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5
WmVyb2luZ1RpbWVvdXQpCi0gICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgp
OworICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBHcmFwaGljc1NpemUoKTsKIAogICAgIG1f
aW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CiAKQEAgLTExMjMsOSArMTEyMyw5IEBAIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0g
ICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICBtX29yaWdPcmlnaW4gPSBGbG9h
dFBvaW50KCk7Ci0gICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICBtX3N0YXJ0
U3RyZXRjaCA9IEdyYXBoaWNzU2l6ZSgpOworICAgIG1fb3JpZ09yaWdpbiA9IEdyYXBoaWNzUG9p
bnQoKTsKKyAgICBtX29yaWdWZWxvY2l0eSA9IEdyYXBoaWNzU2l6ZSgpOwogCiAgICAgbV9zbmFw
UnViYmVyQmFuZFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDEuMC82MC4wKTsKIH0KQEAgLTExNDksMTUg
KzExNDksMTUgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c25hcFJ1YmJlckJhbmRUaQogICAg
IGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21lbnR1bVNjcm9s
bHMpIHsKICAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CiAKLSAgICAgICAgaWYgKG1f
c3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRj
aCA9PSBHcmFwaGljc1NpemUoKSkgewogICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX3Nj
cm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRT
dHJldGNoID09IEZsb2F0U2l6ZSgpKSB7ICAgIAorICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJl
dGNoID09IEdyYXBoaWNzU2l6ZSgpKSB7ICAgIAogICAgICAgICAgICAgICAgIG1fc25hcFJ1YmJl
ckJhbmRUaW1lci5zdG9wKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Ug
PSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdy
YXBoaWNzU2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAg
ICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1f
b3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0
eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhp
Y3NTaXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gR3JhcGhpY3NQb2ludCgp
OworICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gR3JhcGhpY3NTaXplKCk7CiAKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xMTgyLDE3ICsxMTgyLDE3
IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kVGkKICAgICAgICAgICAg
ICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBG
bG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRh
Rm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0
aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisgICAgICAgIEdyYXBoaWNzUG9pbnQgZGVsdGEocm91
bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFy
dFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRoKCksIChmbG9hdCl0aW1lRGVs
dGEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRa
ZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3RyZXRjaC5oZWlnaHQoKSwgLW1f
b3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRhKSkpOwogCiAgICAgICAgIGlm
IChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnkoKSkgPj0gMSkgewotICAgICAg
ICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBtX29yaWdPcmlnaW4gKyBkZWx0YTsKKyAgICAg
ICAgICAgIEdyYXBoaWNzUG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CiAK
ICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0Nv
bnRlbnRFZGdlKGZhbHNlKTsKICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3
T3JpZ2luKTsKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3Jv
bGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgbmV3U3Ry
ZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICBH
cmFwaGljc1NpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdp
ZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLndpZHRoKCkpKTsKICAg
ICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JF
bGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwpAQCAtMTIwMiwxNiArMTIwMiwxNiBA
QCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRpCiAgICAgICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9z
dGFydFN0cmV0Y2gpKTsKIAogICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3Ao
KTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAg
ICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEdyYXBoaWNzU2l6ZSgpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICBtX3N0YXJ0U3Ry
ZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2lu
dCgpOwotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAg
ICAgIG1fc3RhcnRTdHJldGNoID0gR3JhcGhpY3NTaXplKCk7CisgICAgICAgICAgICBtX29yaWdP
cmlnaW4gPSBHcmFwaGljc1BvaW50KCk7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEdy
YXBoaWNzU2l6ZSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9zdGFydFRp
bWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Ci0gICAgICAgIG1f
c3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gR3Jh
cGhpY3NTaXplKCk7CiAgICAgfQogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogI2ltcG9ydCAiU2Nyb2xsVmlldy5oIgogCiAjaW1wb3J0ICJCbG9ja0V4
Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiR3JhcGhpY3NSZWN0
LmgiCiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJO
b3RJbXBsZW1lbnRlZC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1h
Yy5tbQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3Miw3ICsyNzIsNyBAQCBzdGF0aWMgdm9pZCBw
YWludENoZWNrYm94KENvbnRyb2xTdGF0ZXMgCiAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0
aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBpbmZsYXRlZFJl
Y3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwogICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7
Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9y
KSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFjdG9yLCB6b29t
RmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwg
LWluZmxhdGVkUmVjdC55KCkpOwogICAgIH0KICAgICAKQEAgLTM0OCw3ICszNDgsNyBAQCBzdGF0
aWMgdm9pZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMgc3RhCiAgICAgICAgIGluZmxhdGVkUmVj
dC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwogICAgICAgICBp
bmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3Ip
OwogICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRS
ZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6
b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFj
dG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRS
ZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwogICAgIH0KICAgICAKQEAgLTQ2Niw3ICs0NjYs
NyBAQCBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbihDb250cm9sUGFydCBwYXJ0CiAgICAgICAgICAg
ICBpbmZsYXRlZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFjdG9y
KTsKICAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0
ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOworICAgICAgICAgICAgY29udGV4
dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55
KCkpOwogICAgICAgICB9CiAgICAgfSAKQEAgLTUzMyw3ICs1MzMsNyBAQCBzdGF0aWMgdm9pZCBw
YWludFN0ZXBwZXIoQ29udHJvbFN0YXRlcyBzCiAgICAgICAgIHJlY3Quc2V0V2lkdGgocmVjdC53
aWR0aCgpIC8gem9vbUZhY3Rvcik7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0
KCkgLyB6b29tRmFjdG9yKTsKICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgpLCBy
ZWN0LnkoKSk7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6
b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tRmFj
dG9yLCB6b29tRmFjdG9yKSk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCks
IC1yZWN0LnkoKSk7CiAgICAgfQogICAgIENHUmVjdCBib3VuZHMocmVjdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnSW1hZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRHJhZ0ltYWdlUXQuY3BwCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdJbWFnZVF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYg
aW1hZ2UpCiAgICAgZGVsZXRlIGltYWdlOwogfQogCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1h
Z2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUgc2NhbGUpCitEcmFnSW1hZ2VSZWYgc2Nh
bGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKQEAgLTg5LDE2ICs4OSwxNiBAQCBib29sIHNjcmVl
bklzTW9ub2Nocm9tZShXaWRnZXQqIHcpCiAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6ZGVza3Rv
cCgpLT5zY3JlZW4oc2NyZWVuTnVtYmVyKHcpKS0+Y29sb3JDb3VudCgpID09IDI7CiB9CiAKLUZs
b2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogdykKK0dyYXBoaWNzUmVjdCBzY3JlZW5SZWN0KFdp
ZGdldCogdykKIHsKICAgICBRUmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVl
bkdlb21ldHJ5KHNjcmVlbk51bWJlcih3KSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChyLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChy
LngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBzY3Jl
ZW5BdmFpbGFibGVSZWN0KFdpZGdldCogdykKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVS
ZWN0KFdpZGdldCogdykKIHsKICAgICBRUmVjdCByID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCkt
PmF2YWlsYWJsZUdlb21ldHJ5KHNjcmVlbk51bWJlcih3KSk7Ci0gICAgcmV0dXJuIEZsb2F0UmVj
dChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1NjcmVl
blF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JlZW5R
dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
ZWVuUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTUyLDE2ICs1MiwxNiBAQCBzdGF0
aWMgUVdpZGdldCogcXdpZGdldEZvclBhZ2UoY29uc3QgUGFnCiAgICAgcmV0dXJuIGZyYW1lVmll
dy0+cXdpZGdldCgpOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuUmVjdChjb25zdCBQYWdlKiBwYWdl
KQorR3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFnZSkKIHsKICAgICBRV2lk
Z2V0KiBxdyA9IHF3aWRnZXRGb3JQYWdlKHBhZ2UpOwogICAgIGlmICghcXcpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAg
Ly8gVGFrZW4gZnJvbSBLR2xvYmFsU2V0dGluZ3M6OmRlc2t0b3BHZW9tZXRyeQogICAgIFFEZXNr
dG9wV2lkZ2V0KiBkdyA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpOwogICAgIGlmICghZHcpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogCiAgICAgcmV0dXJuIEludFJlY3QoZHctPnNjcmVlbkdlb21ldHJ5KHF3KSk7CiB9CkBAIC03
NSwxNiArNzUsMTYgQEAgaW50IHNjcmVlbkRlcHRoKGNvbnN0IFBhZ2UqIHBhZ2UpCiAgICAgcmV0
dXJuIHF3LT5kZXB0aCgpOwogfQogCi1GbG9hdFJlY3QgdXNhYmxlU2NyZWVuUmVjdChjb25zdCBQ
YWdlKiBwYWdlKQorR3JhcGhpY3NSZWN0IHVzYWJsZVNjcmVlblJlY3QoY29uc3QgUGFnZSogcGFn
ZSkKIHsKICAgICBRV2lkZ2V0KiBxdyA9IHF3aWRnZXRGb3JQYWdlKHBhZ2UpOwogICAgIGlmICgh
cXcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogCiAgICAgLy8gVGFrZW4gZnJvbSBLR2xvYmFsU2V0dGluZ3M6OmRlc2t0b3BHZW9t
ZXRyeQogICAgIFFEZXNrdG9wV2lkZ2V0KiBkdyA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpOwog
ICAgIGlmICghZHcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgpOwogCiAgICAgcmV0dXJuIEludFJlY3QoZHctPmF2YWlsYWJsZUdlb21l
dHJ5KHF3KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFn
SW1hZ2VDR1dpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBzdGF0aWMgQ0dDb250ZXh0UmVmIGNyZWF0ZUNnQ29udGV4dEZyb21CCiAgICAgcmV0dXJuIGJp
dG1hcENvbnRleHQ7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VS
ZWYgaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShE
cmFnSW1hZ2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSBzY2FsZSkKIHsKICAgICAvLyBGSVhNRTog
ZHVlIHRvIHRoZSB3YXkgZHJhZyBpbWFnZXMgYXJlIGRvbmUgb24gd2luZG93cyB3ZSBuZWVkIAog
ICAgIC8vIHRvIHByZXByb2Nlc3MgdGhlIGFscGhhIGNoYW5uZWwgPHJkYXI6Ly9wcm9ibGVtLzUw
MTU5NDY+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ2Fpcm9X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1h
Z2VDYWlyb1dpbi5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdJbWFnZUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEw
MSw3IEBAIHN0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGNyZWF0ZUNhaXJvQ29udGUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5ibVdpZHRoQnl0ZXMp
OwogfQogCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBG
bG9hdFNpemUgc2NhbGUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVm
IGltYWdlLCBHcmFwaGljc1NpemUgc2NhbGUpCiB7CiAgICAgLy8gRklYTUU6IGR1ZSB0byB0aGUg
d2F5IGRyYWcgaW1hZ2VzIGFyZSBkb25lIG9uIHdpbmRvd3Mgd2UgbmVlZCAKICAgICAvLyB0byBw
cmVwcm9jZXNzIHRoZSBhbHBoYSBjaGFubmVsIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQ2PgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2NyZWVuV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JlZW5XaW4u
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0
Zm9ybVNjcmVlbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxMSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAKLSNpbmNsdWRl
ICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCkBAIC05
MywxMyArOTMsMTMgQEAgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiAj
ZW5kaWYKIH0KIAotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCitHcmFwaGlj
c1JlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBNT05JVE9SSU5GT0VYIG1v
bml0b3JJbmZvID0gbW9uaXRvckluZm9Gb3JXaWRnZXQod2lkZ2V0KTsKICAgICByZXR1cm4gbW9u
aXRvckluZm8ucmNNb25pdG9yOwogfQogCi1GbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChX
aWRnZXQqIHdpZGdldCkKK0dyYXBoaWNzUmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCog
d2lkZ2V0KQogewogICAgIE1PTklUT1JJTkZPRVggbW9uaXRvckluZm8gPSBtb25pdG9ySW5mb0Zv
cldpZGdldCh3aWRnZXQpOwogICAgIHJldHVybiBtb25pdG9ySW5mby5yY1dvcms7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiQml0bWFwSW5mby5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTM0OSw3ICszNDksNyBAQCB2b2lk
IFBvcHVwTWVudVdpbjo6Y2FsY3VsYXRlUG9zaXRpb25BbmRTCiAgICAgSW50UmVjdCBwb3B1cFJl
Y3QocG9wdXBYLCByU2NyZWVuQ29vcmRzLm1heFkoKSwgcG9wdXBXaWR0aCwgcG9wdXBIZWlnaHQp
OwogCiAgICAgLy8gVGhlIHBvcHVwIG5lZWRzIHRvIHN0YXkgd2l0aGluIHRoZSBib3VuZHMgb2Yg
dGhlIHNjcmVlbiBhbmQgbm90IG92ZXJsYXAgYW55IHRvb2xiYXJzCi0gICAgRmxvYXRSZWN0IHNj
cmVlbiA9IHNjcmVlbkF2YWlsYWJsZVJlY3Qodik7CisgICAgR3JhcGhpY3NSZWN0IHNjcmVlbiA9
IHNjcmVlbkF2YWlsYWJsZVJlY3Qodik7CiAKICAgICAvLyBDaGVjayB0aGF0IHdlIGRvbid0IGdv
IG9mZiB0aGUgc2NyZWVuIHZlcnRpY2FsbHkKICAgICBpZiAocG9wdXBSZWN0Lm1heFkoKSA+IHNj
cmVlbi5oZWlnaHQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1doZWVs
RXZlbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9X
aGVlbEV2ZW50V2luLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV2hlZWxFdmVudFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIK
IAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CiAKQEAgLTY1LDcgKzY1LDcgQEAg
c3RhdGljIGludCB2ZXJ0aWNhbFNjcm9sbExpbmVzKCkKICAgICByZXR1cm4gc2Nyb2xsTGluZXM7
CiB9CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQgaFduZCwg
Y29uc3QgRmxvYXRTaXplJiBkZWx0YSwgY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24pCitQbGF0
Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChIV05EIGhXbmQsIGNvbnN0IEdyYXBo
aWNzU2l6ZSYgZGVsdGEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxvY2F0aW9uKQogICAgIDogbV9p
c0FjY2VwdGVkKGZhbHNlKQogICAgICwgbV9zaGlmdEtleShmYWxzZSkKICAgICAsIG1fY3RybEtl
eShmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0RyYWdJbWFnZVdp
bkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9EcmFn
SW1hZ2VXaW5DRS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luY2UvRHJhZ0ltYWdlV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSkKICAgICAgICAgOjpE
ZWxldGVPYmplY3QoaW1hZ2UpOwogfQogCi1EcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJh
Z0ltYWdlUmVmLCBGbG9hdFNpemUpCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFnSW1hZ2UoRHJhZ0lt
YWdlUmVmLCBHcmFwaGljc1NpemUpCiB7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93eC9EcmFnSW1hZ2VXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvRHJhZ0ltYWdlV3guY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0RyYWdJbWFnZVd4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdJ
bWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDAsNyArNDAsNyBAQCB2b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFn
SW1hZ2VSZWYpCiB7CiB9CiAKLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VS
ZWYgaW1hZ2UsIEZsb2F0U2l6ZSkKK0RyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1h
Z2VSZWYgaW1hZ2UsIEdyYXBoaWNzU2l6ZSkKIHsKICAgICByZXR1cm4gaW1hZ2U7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JlZW5XeC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvU2NyZWVuV3guY3BwCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1NjcmVlbld4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiU2Ny
ZWVuLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIldpZGdldC5oIgogCiAjaW5jbHVkZSA8
d3gvZGVmcy5oPgpAQCAtMzYsMTcgKzM2LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RmxvYXRSZWN0IHNjYWxlU2NyZWVuUmVjdFRvV2lkZ2V0KEZsb2F0UmVjdCByZWN0LCBXaWRnZXQq
KQorR3JhcGhpY3NSZWN0IHNjYWxlU2NyZWVuUmVjdFRvV2lkZ2V0KEdyYXBoaWNzUmVjdCByZWN0
LCBXaWRnZXQqKQogewogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFJlY3Qgc2NhbGVXaWRn
ZXRSZWN0VG9TY3JlZW4oRmxvYXRSZWN0IHJlY3QsIFdpZGdldCopCitHcmFwaGljc1JlY3Qgc2Nh
bGVXaWRnZXRSZWN0VG9TY3JlZW4oR3JhcGhpY3NSZWN0IHJlY3QsIFdpZGdldCopCiB7CiAgICAg
cmV0dXJuIHJlY3Q7CiB9CiAKLUZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQor
R3JhcGhpY3NSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAvKgogICAgIGludCBk
aXNwbGF5TnVtOwpAQCAtNTcsNyArNTcsNyBAQCBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQq
IHdpZGdldCkKICAgICAgICAgcmV0dXJuIHRoaXNEaXNwbGF5LkdldEdlb21ldHJ5KCk7CiAgICAg
fQogKi8KLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogfQogCiBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCkBAIC03NSw3ICs3NSw3IEBA
IGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiB3eENv
bG91ckRpc3BsYXkoKTsKIH0KIAotRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0
KiB3aWRnZXQpCitHcmFwaGljc1JlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdl
dCkKIHsKIC8qCiAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXQtPndpZGdldCgpOwpAQCAtODYs
NyArODYsNyBAQCBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpCiAgICAg
ICAgIC8vcmV0dXJuIHRoaXNEaXNwbGF5LkdldENsaWVudEFyZWEoKTsKICAgICB9CiAqLyAgICAK
LSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQog
CiBmbG9hdCBzY2FsZUZhY3RvcihXaWRnZXQqKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAK
LSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4
Y29kZS9ub24ta2VybmVkLWRyYXdpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93eC93eGNvZGUvbm9uLWtlcm5lZC1kcmF3aW5nLmgJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL25vbi1rZXJuZWQtZHJhd2luZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwyMyArMjEsMjMgQEAKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovDQotDQotI2luY2x1ZGUgIkZvbnQuaCINCi0jaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCINCi0NCi0jaW5jbHVkZSA8d3gvZGVmcy5oPg0KKyAqLworCisjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3eC9k
ZWZzLmg+CiAjaW5jbHVkZSA8d3gvZGNjbGllbnQuaD4KIAogI2lmIF9fV1hHVEtfXyAmJiBVU0Uo
V1hHQykKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CiAjaW5j
bHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgotI2VuZGlmDQotDQotbmFtZXNwYWNlIFdlYkNvcmUg
ew0KLQ0KLWV4dGVybiB2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91
ciYgY29sb3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KTsNCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitleHRlcm4gdm9pZCBkcmF3VGV4dFdpdGhTcGFjaW5nKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qg
d3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCk7CiAKICNpZiBfX1dY
R1RLX18gJiYgVVNFKFdYR0MpCiBQYW5nb0ZvbnRNYXAqIHBhbmdvRm9udE1hcCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRyYXdpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9ndGsv
bm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC93eGNvZGUvZ3RrL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCBQYW5nb0dseXBoIHBhbmdvX2ZvbnRfZ2V0X2dseXBo
KFBhbmdvRm9uCiAjZW5kaWYgLy8gVVNFKFdYR0MpCiAKIAotdm9pZCBkcmF3VGV4dFdpdGhTcGFj
aW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwgY29uc3Qgd3hDb2xvdXImIGNvbG9yLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
K3ZvaWQgZHJhd1RleHRXaXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAjaWYgVVNFKFdYR0MpCiAgICAgd3hHQ0RDKiBk
YyA9IHN0YXRpY19jYXN0PHd4R0NEQyo+KGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24v
bm9uLWtlcm5lZC1kcmF3aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lv
biA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9u
L25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NTaXplLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgpAQCAtNDEs
NyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgZHJhd1RleHRXaXRoU3Bh
Y2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
Cit2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91ciYgY29sb3IsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgp
OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9ub24t
a2VybmVkLWRyYXdpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJhd2lu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBkb3Vi
bGUgUmFkVG9EZWcoZG91YmxlIGRlZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgZHJh
d1RleHRXaXRoU3BhY2luZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IHd4Q29sb3VyJiBjb2xvciwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCit2b2lkIGRyYXdUZXh0V2l0aFNwYWNpbmcoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCB3eENvbG91
ciYgY29sb3IsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogI2lmIFVTRShXWEdDKQog
ICAgIHd4R0NEQyogZGMgPSBzdGF0aWNfY2FzdDx3eEdDREMqPihncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpKTsKQEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIGRyYXdUZXh0V2l0aFNw
YWNpbmcoR3JhcGhpY3NDb250ZXh0CiAKICAgICAvLyBpZiB0aGUgY29udGV4dCBoYXMgYmVlbiBz
Y2FsZWQsIHdlIG11c3QgbWFudWFsbHkgcmUtYXBwbHkgdGhhdCBzY2FsZQogICAgIC8vIHRvIHRo
ZSBIREMuCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZ3JhcGhpY3NDb250ZXh0LT5jdXJyZW50U2Nh
bGUoKTsKLSAgICBpZiAoc2NhbGUgIT0gRmxvYXRTaXplKDEuMCwgMS4wKSkgeworICAgIEdyYXBo
aWNzU2l6ZSBzY2FsZSA9IGdyYXBoaWNzQ29udGV4dC0+Y3VycmVudFNjYWxlKCk7CisgICAgaWYg
KHNjYWxlICE9IEdyYXBoaWNzU2l6ZSgxLjAsIDEuMCkpIHsKICAgICAgICAgU2V0R3JhcGhpY3NN
b2RlKGhkYywgR01fQURWQU5DRUQpOwogICAgICAgICBYRk9STSB4Rm9ybTsKICAgICAgICAgeEZv
cm0uZU0xMSA9IHNjYWxlLndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9x
dC9QbHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBAIGNsYXNzIEVsbGlwc2lzQm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CiAgICAg
RWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0KiBvYmosIGNvbnN0IEF0b21pY1N0cmluZyYgZWxsaXBz
aXNTdHIsIElubGluZUZsb3dCb3gqIHBhcmVudCwKICAgICAgICAgICAgICAgICBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc1ZlcnRpY2FsLCBJbmxp
bmVCb3gqIG1hcmt1cEJveCkKLSAgICAgICAgOiBJbmxpbmVCb3gob2JqLCBGbG9hdFBvaW50KDAs
IHkpLCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWwsIDAs
IDAsIHBhcmVudCkKKyAgICAgICAgOiBJbmxpbmVCb3gob2JqLCBHcmFwaGljc1BvaW50KDAsIHkp
LCB3aWR0aCwgZmlyc3RMaW5lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGlzVmVydGljYWwsIDAsIDAs
IHBhcmVudCkKICAgICAgICAgLCBtX2hlaWdodChoZWlnaHQpCiAgICAgICAgICwgbV9zdHIoZWxs
aXBzaXNTdHIpCiAgICAgICAgICwgbV9tYXJrdXBCb3gobWFya3VwQm94KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzOSw3ICs1MzksNyBAQCBib29sIEhpdFRlc3RSZXN1bHQ6OmFkZE5vZGVUb1JlY3RC
YXNlZFRlCiAgICAgcmV0dXJuICFyZWN0LmNvbnRhaW5zKHJlY3RGb3JQb2ludChwb2ludEluQ29u
dGFpbmVyKSk7CiB9CiAKLWJvb2wgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvUmVjdEJhc2VkVGVz
dFJlc3VsdChOb2RlKiBub2RlLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBIaXRUZXN0UmVzdWx0OjphZGROb2RlVG9SZWN0
QmFzZWRUZXN0UmVzdWx0KE5vZGUqIG5vZGUsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29u
dGFpbmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgLy8gSWYgaXQgaXMgbm90
IGEgcmVjdC1iYXNlZCBoaXQgdGVzdCwgdGhpcyBtZXRob2QgaGFzIHRvIGJlIG5vLW9wLgogICAg
IC8vIFJldHVybiBmYWxzZSwgc28gdGhlIGhpdCB0ZXN0IHN0b3BzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDcgKzIwLDcgQEAKICNpZm5kZWYgSGl0VGVzdFJlc3VsdF9oCiAjZGVmaW5lIEhpdFRlc3RSZXN1
bHRfaAogCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHJlY3QtYmFzZWQgaGl0IHRlc3QgYW5kIG5lZWRzIHRv
IGNvbnRpbnVlIHVudGlsIHRoZSByZWN0IGlzIGZ1bGx5CiAgICAgLy8gZW5jbG9zZWQgYnkgdGhl
IGJvdW5kYXJpZXMgb2YgYSBub2RlLgogICAgIGJvb2wgYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJl
c3VsdChOb2RlKiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IElu
dFJlY3QmID0gSW50UmVjdCgpKTsKLSAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1
bHQoTm9kZSosIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICBib29sIGFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQoTm9kZSosIGNv
bnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBHcmFwaGljc1JlY3QmKTsK
ICAgICB2b2lkIGFwcGVuZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAKICAgICAvLyBJZiBtX3Jl
Y3RCYXNlZFRlc3RSZXN1bHQgaXMgMCB0aGVuIHNldCBpdCB0byBhIG5ldyBOb2RlU2V0LiBSZXR1
cm4gKm1fcmVjdEJhc2VkVGVzdFJlc3VsdC4gTGF6eSBhbGxvY2F0aW9uIG1ha2VzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzI3LDI1ICszMjcsMjUgQEAgdm9pZCBJbmxpbmVCb3g6OmNsZWFyS25vd25Ub0hhdmVOb092ZXJm
bAogICAgICAgICBwYXJlbnQoKS0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZsb3coKTsKIH0KIAot
RmxvYXRQb2ludCBJbmxpbmVCb3g6OmxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKQorR3JhcGhp
Y3NQb2ludCBJbmxpbmVCb3g6OmxvY2F0aW9uSW5jbHVkaW5nRmxpcHBpbmcoKQogewogICAgIGlm
ICghcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoeCgpLCB5KCkpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NQb2ludCh4KCksIHkoKSk7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gcm9vdCgpLT5ibG9j
aygpOwogICAgIGlmIChibG9jay0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoeCgpLCBibG9jay0+aGVpZ2h0KCkgLSBoZWlnaHQo
KSAtIHkoKSk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1BvaW50KHgoKSwgYmxvY2stPmhlaWdo
dCgpIC0gaGVpZ2h0KCkgLSB5KCkpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9p
bnQoYmxvY2stPndpZHRoKCkgLSB3aWR0aCgpIC0geCgpLCB5KCkpOworICAgICAgICByZXR1cm4g
R3JhcGhpY3NQb2ludChibG9jay0+d2lkdGgoKSAtIHdpZHRoKCkgLSB4KCksIHkoKSk7CiB9CiAK
LXZvaWQgSW5saW5lQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBJbmxpbmVCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKCFyZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
KQogICAgICAgICByZXR1cm47CiAgICAgcm9vdCgpLT5ibG9jaygpLT5mbGlwRm9yV3JpdGluZ01v
ZGUocmVjdCk7CiB9CiAKLUZsb2F0UG9pbnQgSW5saW5lQm94OjpmbGlwRm9yV3JpdGluZ01vZGUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCitHcmFwaGljc1BvaW50IElubGluZUJveDo6ZmxpcEZv
cldyaXRpbmdNb2RlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmICghcmVu
ZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAg
cmV0dXJuIHBvaW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAg
ICBJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmosIEZsb2F0UG9pbnQgdG9wTGVmdCwgZmxvYXQg
bG9naWNhbFdpZHRoLCBib29sIGZpcnN0TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKKyAgICBJbmxp
bmVCb3goUmVuZGVyT2JqZWN0KiBvYmosIEdyYXBoaWNzUG9pbnQgdG9wTGVmdCwgZmxvYXQgbG9n
aWNhbFdpZHRoLCBib29sIGZpcnN0TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKICAgICAgICAgICAg
ICAgYm9vbCBkaXJ0eSwgYm9vbCBleHRyYWN0ZWQsIGJvb2wgaXNIb3Jpem9udGFsLCBJbmxpbmVC
b3gqIG5leHQsIElubGluZUJveCogcHJldiwgSW5saW5lRmxvd0JveCogcGFyZW50KQogICAgICAg
ICA6IG1fbmV4dChuZXh0KQogICAgICAgICAsIG1fcHJldihwcmV2KQpAQCAtMjMyLDExICsyMzIs
MTEgQEAgcHVibGljOgogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3RvcExlZnQueSgp
OyB9CiAgICAgZmxvYXQgdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3BMZWZ0LnkoKTsgfQogCi0g
ICAgY29uc3QgRmxvYXRQb2ludCYgdG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTGVmdDsg
fQorICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX3Rv
cExlZnQ7IH0KIAogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
KCkgPyBsb2dpY2FsV2lkdGgoKSA6IGxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIGZsb2F0IGhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbG9naWNhbEhlaWdodCgpIDogbG9n
aWNhbFdpZHRoKCk7IH0KLSAgICBGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNp
emUod2lkdGgoKSwgaGVpZ2h0KCkpOyB9CisgICAgR3JhcGhpY3NTaXplIHNpemUoKSBjb25zdCB7
IHJldHVybiBJbnRTaXplKHdpZHRoKCksIGhlaWdodCgpKTsgfQogICAgIGZsb2F0IHJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbGVmdCgpICsgd2lkdGgoKTsgfQogICAgIGZsb2F0IGJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIHRvcCgpICsgaGVpZ2h0KCk7IH0KIApAQCAtMjcxLDcgKzI3MSw3IEBAIHB1
YmxpYzoKICAgICAvLyBUaGUgbG9naWNhbCBoZWlnaHQgaXMgb3VyIGV4dGVudCBpbiB0aGUgYmxv
Y2sgZmxvdyBkaXJlY3Rpb24sIGkuZS4sIGhlaWdodCBmb3IgaG9yaXpvbnRhbCB0ZXh0IGFuZCB3
aWR0aCBmb3IgdmVydGljYWwgdGV4dC4KICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBj
b25zdDsKIAotICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsKCkgPyBJbnRSZWN0KG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCksIG1f
bG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3RvcExlZnQueSgpLCBt
X3RvcExlZnQueCgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQorICAgIEdy
YXBoaWNzUmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
KCkgPyBJbnRSZWN0KG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCksIG1fbG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3RvcExlZnQueSgpLCBtX3RvcExlZnQueCgp
LCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQogCiAgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBjb25zdCB7IHJldHVy
biBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgbV9maXJz
dExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBv
c2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwg
aXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKTsgfQpAQCAtMzE2LDkgKzMxNiw5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBw
aW5nKCk7Ci0gICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoRmxvYXRSZWN0Jik7Ci0gICAgRmxv
YXRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRQb2ludCYpOworICAgIEdyYXBo
aWNzUG9pbnQgbG9jYXRpb25JbmNsdWRpbmdGbGlwcGluZygpOworICAgIHZvaWQgZmxpcEZvcldy
aXRpbmdNb2RlKEdyYXBoaWNzUmVjdCYpOworICAgIEdyYXBoaWNzUG9pbnQgZmxpcEZvcldyaXRp
bmdNb2RlKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKICAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9k
ZShJbnRSZWN0Jik7CiAgICAgSW50UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEludFBv
aW50Jik7CiAKQEAgLTMzNCw3ICszMzQsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIFJlbmRl
ck9iamVjdCogbV9yZW5kZXJlcjsKIAotICAgIEZsb2F0UG9pbnQgbV90b3BMZWZ0OworICAgIEdy
YXBoaWNzUG9pbnQgbV90b3BMZWZ0OwogICAgIGZsb2F0IG1fbG9naWNhbFdpZHRoOwogICAgIAog
ICAgIC8vIFNvbWUgb2YgdGhlc2UgYml0cyBhcmUgYWN0dWFsbHkgZm9yIHN1YmNsYXNzZXMgYW5k
IG1vdmVkIGhlcmUgdG8gY29tcGFjdCB0aGUgc3RydWN0dXJlcy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIs
MTYgKzI1MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXlvdXRPdmVyZmxvdyhjb25zdCBM
YXlvdXRSZWN0JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwog
ICAgIHZvaWQgc2V0VmlzdWFsT3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYsIExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKIAotICAgIEZsb2F0UmVjdCBmcmFtZVJl
Y3RJbmNsdWRpbmdMaW5lSGVpZ2h0KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tKSBjb25zdAorICAgIEdyYXBoaWNzUmVjdCBmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVp
Z2h0KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0
UmVjdChtX3RvcExlZnQueCgpLCBsaW5lVG9wLCB3aWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRv
cCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QobGluZVRvcCwgbV90b3BMZWZ0LnkoKSwgbGlu
ZUJvdHRvbSAtIGxpbmVUb3AsIGhlaWdodCgpKTsKKyAgICAgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QobV90b3BMZWZ0LngoKSwgbGluZVRvcCwgd2lkdGgoKSwgbGluZUJvdHRvbSAtIGxpbmVU
b3ApOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KGxpbmVUb3AsIG1fdG9wTGVmdC55KCks
IGxpbmVCb3R0b20gLSBsaW5lVG9wLCBoZWlnaHQoKSk7CiAgICAgfQogICAgIAotICAgIEZsb2F0
UmVjdCBsb2dpY2FsRnJhbWVSZWN0SW5jbHVkaW5nTGluZUhlaWdodChMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKKyAgICBHcmFwaGljc1JlY3QgbG9naWNh
bEZyYW1lUmVjdEluY2x1ZGluZ0xpbmVIZWlnaHQoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVCb3R0b20pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KGxv
Z2ljYWxMZWZ0KCksIGxpbmVUb3AsIGxvZ2ljYWxXaWR0aCgpLCBsaW5lQm90dG9tIC0gbGluZVRv
cCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QobG9naWNhbExlZnQoKSwgbGluZVRvcCwg
bG9naWNhbFdpZHRoKCksIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk1LDcgKzE5NSw3IEBAIEludFJlY3QgSW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uUmVjdChpbnQKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZW5kUG9zID0g
dGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIEludFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3QoZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0KCks
IHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIEludFJlY3QgciA9IGVuY2xv
c2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBHcmFwaGljc1Bv
aW50KGxvZ2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOwogCiAg
ICAgaW50IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54KCkgPiBsb2dpY2Fs
UmlnaHQoKSkKQEAgLTM1MCw5ICszNTAsOSBAQCBib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpCiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlwcGlu
ZygpOworICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdGbGlw
cGluZygpOwogICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIEZs
b2F0UmVjdCByZWN0KGJveE9yaWdpbiwgc2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgcmVjdChi
b3hPcmlnaW4sIHNpemUoKSk7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjRnVsbFRydW5jYXRp
b24gJiYgdmlzaWJsZVRvSGl0VGVzdGluZygpICYmIHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVj
dEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICByZW5kZXJlcigpLT51cGRh
dGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50SW5Db250YWlu
ZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiAgICAgICAgIGlmICghcmVz
dWx0LmFkZE5vZGVUb1JlY3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS0+bm9kZSgpLCBwb2lu
dEluQ29udGFpbmVyLCByZWN0KSkKQEAgLTM2MSwyNiArMzYxLDI2IEBAIGJvb2wgSW5saW5lVGV4
dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUZsb2F0
U2l6ZSBJbmxpbmVUZXh0Qm94OjphcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGbG9hdFJl
Y3QmIHRleHRSZWN0LCBib29sIHN0cm9rZWQsIGJvb2wgb3BhcXVlLCBib29sIGhvcml6b250YWwp
CitHcmFwaGljc1NpemUgSW5saW5lVGV4dEJveDo6YXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgY29u
c3QgR3JhcGhpY3NSZWN0JiB0ZXh0UmVjdCwgYm9vbCBzdHJva2VkLCBib29sIG9wYXF1ZSwgYm9v
bCBob3Jpem9udGFsKQogewogICAgIGlmICghc2hhZG93KQotICAgICAgICByZXR1cm4gRmxvYXRT
aXplKCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1NpemUoKTsKIAotICAgIEZsb2F0U2l6ZSBl
eHRyYU9mZnNldDsKKyAgICBHcmFwaGljc1NpemUgZXh0cmFPZmZzZXQ7CiAgICAgaW50IHNoYWRv
d1ggPSBob3Jpem9udGFsID8gc2hhZG93LT54KCkgOiBzaGFkb3ctPnkoKTsKICAgICBpbnQgc2hh
ZG93WSA9IGhvcml6b250YWwgPyBzaGFkb3ctPnkoKSA6IC1zaGFkb3ctPngoKTsKLSAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0KHNoYWRvd1gsIHNoYWRvd1kpOworICAgIEdyYXBoaWNzU2l6ZSBz
aGFkb3dPZmZzZXQoc2hhZG93WCwgc2hhZG93WSk7CiAgICAgaW50IHNoYWRvd0JsdXIgPSBzaGFk
b3ctPmJsdXIoKTsKICAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9y
KCk7CiAKICAgICBpZiAoc2hhZG93LT5uZXh0KCkgfHwgc3Ryb2tlZCB8fCAhb3BhcXVlKSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KHRleHRSZWN0KTsKKyAgICAgICAgR3JhcGhpY3NS
ZWN0IHNoYWRvd1JlY3QodGV4dFJlY3QpOwogICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hh
ZG93Qmx1cik7CiAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQpOwogICAgICAg
ICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQtPmNsaXAoc2hhZG93UmVjdCk7CiAK
LSAgICAgICAgZXh0cmFPZmZzZXQgPSBGbG9hdFNpemUoMCwgMiAqIHRleHRSZWN0LmhlaWdodCgp
ICsgbWF4KDAuMGYsIHNoYWRvd09mZnNldC5oZWlnaHQoKSkgKyBzaGFkb3dCbHVyKTsKKyAgICAg
ICAgZXh0cmFPZmZzZXQgPSBHcmFwaGljc1NpemUoMCwgMiAqIHRleHRSZWN0LmhlaWdodCgpICsg
bWF4PEdyYXBoaWNzVW5pdD4oMC4wZiwgc2hhZG93T2Zmc2V0LmhlaWdodCgpKSArIHNoYWRvd0Js
dXIpOwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAgICAgfQogCkBAIC0z
ODgsOCArMzg4LDggQEAgRmxvYXRTaXplIElubGluZVRleHRCb3g6OmFwcGx5U2hhZG93VG9Hcgog
ICAgIHJldHVybiBleHRyYU9mZnNldDsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNo
YWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVt
cGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBpbnQgdHJ1
bmNhdGlvblBvaW50LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwgYm9vbCBob3Jpem9udGFsKQorc3RhdGljIHZv
aWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVt
cGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQg
ZW5kT2Zmc2V0LCBpbnQgdHJ1bmNhdGlvblBvaW50LCBjb25zdCBHcmFwaGljc1BvaW50JiB0ZXh0
T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhcGhpY3NS
ZWN0JiBib3hSZWN0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGJvb2wgc3Ryb2tlZCwgYm9v
bCBob3Jpem9udGFsKQogewogICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQtPmZpbGxDb2xv
cigpOwogICAgIENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2UgPSBjb250ZXh0LT5maWxsQ29sb3JT
cGFjZSgpOwpAQCAtNDYwLDcgKzQ2MCw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6Z2V0RW1waGFz
aXNNYXJrUG9zaXQKIAogZW51bSBSb3RhdGlvbkRpcmVjdGlvbiB7IENvdW50ZXJjbG9ja3dpc2Us
IENsb2Nrd2lzZSB9OwogCi1zdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihj
b25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIFJvdGF0aW9uRGlyZWN0aW9uIGNsb2Nrd2lzZSkKK3N0
YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGNvbnN0IEdyYXBoaWNzUmVjdCYg
Ym94UmVjdCwgUm90YXRpb25EaXJlY3Rpb24gY2xvY2t3aXNlKQogewogICAgIHJldHVybiBjbG9j
a3dpc2UgPyBBZmZpbmVUcmFuc2Zvcm0oMCwgMSwgLTEsIDAsIGJveFJlY3QueCgpICsgYm94UmVj
dC5tYXhZKCksIGJveFJlY3QubWF4WSgpIC0gYm94UmVjdC54KCkpCiAgICAgICAgIDogQWZmaW5l
VHJhbnNmb3JtKDAsIC0xLCAxLCAwLCBib3hSZWN0LngoKSAtIGJveFJlY3QubWF4WSgpLCBib3hS
ZWN0LngoKSArIGJveFJlY3QubWF4WSgpKTsKQEAgLTUxOSw5ICs1MTksOSBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgCiAgICAgYWRqdXN0ZWRQYWludE9m
ZnNldC5tb3ZlKDAsIHN0eWxlVG9Vc2UtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDog
LWxvZ2ljYWxIZWlnaHQoKSk7CiAKLSAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9u
SW5jbHVkaW5nRmxpcHBpbmcoKTsKKyAgICBHcmFwaGljc1BvaW50IGJveE9yaWdpbiA9IGxvY2F0
aW9uSW5jbHVkaW5nRmxpcHBpbmcoKTsKICAgICBib3hPcmlnaW4ubW92ZShhZGp1c3RlZFBhaW50
T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwotICAgIEZsb2F0UmVjdCBib3hS
ZWN0KGJveE9yaWdpbiwgTGF5b3V0U2l6ZShsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCgp
KSk7CisgICAgR3JhcGhpY3NSZWN0IGJveFJlY3QoYm94T3JpZ2luLCBMYXlvdXRTaXplKGxvZ2lj
YWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKIAogICAgIFJlbmRlckNvbWJpbmVUZXh0KiBj
b21iaW5lZFRleHQgPSBzdHlsZVRvVXNlLT5oYXNUZXh0Q29tYmluZSgpICYmIHRleHRSZW5kZXJl
cigpLT5pc0NvbWJpbmVUZXh0KCkgJiYgdG9SZW5kZXJDb21iaW5lVGV4dCh0ZXh0UmVuZGVyZXIo
KSktPmlzQ29tYmluZWQoKSA/IHRvUmVuZGVyQ29tYmluZVRleHQodGV4dFJlbmRlcmVyKCkpIDog
MDsKIApAQCAtNTM2LDcgKzUzNiw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWkKICAgICAvLyBTZXQgb3VyIGZvbnQuCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlVG9Vc2UtPmZvbnQoKTsKIAotICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbiA9IEZsb2F0UG9p
bnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSk7CisgICAgR3JhcGhpY3NQb2ludCB0ZXh0T3JpZ2luID0gR3JhcGhpY3NQb2ludChib3hP
cmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsK
IAogICAgIGlmIChjb21iaW5lZFRleHQpCiAgICAgICAgIGNvbWJpbmVkVGV4dC0+YWRqdXN0VGV4
dE9yaWdpbih0ZXh0T3JpZ2luLCBib3hSZWN0KTsKQEAgLTY5MSw3ICs2OTEsNyBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAgICAgICAgICAgIERFRklORV9T
VEFUSUNfTE9DQUwoVGV4dFJ1biwgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAo
Jm9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBl
bXBoYXNpc01hcmtUZXh0UnVuID0gY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFy
YWN0ZXJUZXh0UnVuIDogdGV4dFJ1bjsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgZW1waGFzaXNN
YXJrVGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSAr
IGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpIDogdGV4dE9yaWdpbjsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgZW1waGFz
aXNNYXJrVGV4dE9yaWdpbiA9IGNvbWJpbmVkVGV4dCA/IEdyYXBoaWNzUG9pbnQoYm94T3JpZ2lu
LngoKSArIGJveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpIDogdGV4dE9yaWdpbjsKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRl
eHQpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3Qs
IENsb2Nrd2lzZSkpOwogCkBAIC03MTcsNyArNzE3LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludChQYWludEluZm8mIHBhaQogCiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRl
eHRSdW4sIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBsYWNl
bWVudENoYXJhY3RlciwgMSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4
dFJ1biA9IGNvbWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6
IHRleHRSdW47Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4g
PSBjb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0LndpZHRo
KCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IHRl
eHRPcmlnaW47CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGVtcGhhc2lzTWFya1RleHRPcmln
aW4gPSBjb21iaW5lZFRleHQgPyBHcmFwaGljc1BvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0
LndpZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgp
KSA6IHRleHRPcmlnaW47CiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDbG9ja3dpc2UpKTsK
IApAQCAtNzg2LDcgKzc4Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRF
bmQoaW4KICAgICBlUG9zID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwogfQog
Ci12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEZvbnQmIGZvbnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtODIzLDkgKzgyMyw5IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgKIAogICAgIGludCBkZWx0YVkg
PSByZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxl
Y3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlv
blRvcCgpOwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBGbG9h
dFBvaW50IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkp
OworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3JpZ2lu
LnkoKSAtIGRlbHRhWSk7CiAKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QobG9jYWxPcmlnaW4sIEZs
b2F0U2l6ZShtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0KSk7CisgICAgR3JhcGhpY3NSZWN0IGNs
aXBSZWN0KGxvY2FsT3JpZ2luLCBHcmFwaGljc1NpemUobV9sb2dpY2FsV2lkdGgsIHNlbEhlaWdo
dCkpOwogICAgIGZsb2F0IG1heFggPSBmbG9vcmYoY2xpcFJlY3QubWF4WCgpKTsKICAgICBjbGlw
UmVjdC5zZXRYKGZsb29yZihjbGlwUmVjdC54KCkpKTsKICAgICBjbGlwUmVjdC5zZXRXaWR0aCht
YXhYIC0gY2xpcFJlY3QueCgpKTsKQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRl
eHQoZm9udCwgdGV4dFJ1biwgbG9jYWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNvbG9y
U3BhY2UoKSwgc1BvcywgZVBvcyk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50
IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0
aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQg
c3RhcnRQb3MsIGludCBlbmRQb3MpCiB7CiAgICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAg
aW50IHNQb3MgPSBtYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwpAQCAtODUxLDcgKzg1MSw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2sKIAogICAgIGludCBkZWx0
YVkgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBz
ZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVj
dGlvblRvcCgpOwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBG
bG9hdFBvaW50IGxvY2FsT3JpZ2luKGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0
YVkpOworICAgIEdyYXBoaWNzUG9pbnQgbG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3Jp
Z2luLnkoKSAtIGRlbHRhWSk7CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9u
dCwgY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQs
IGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogfQogCkBAIC04NjcsMjAgKzg2
NywyMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0CiAgICAgICAg
IHJldHVybjsKIAogICAgIFJvb3RJbmxpbmVCb3gqIHIgPSByb290KCk7Ci0gICAgRmxvYXRSZWN0
IHJvb3RSZWN0KHBhaW50T2Zmc2V0LngoKSArIHItPngoKSwgcGFpbnRPZmZzZXQueSgpICsgc2Vs
ZWN0aW9uVG9wKCksIHItPmxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7Ci0gICAg
RmxvYXRSZWN0IHRleHRSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCBs
b2dpY2FsV2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzUmVjdCByb290
UmVjdChwYWludE9mZnNldC54KCkgKyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlv
blRvcCgpLCByLT5sb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOworICAgIEdyYXBo
aWNzUmVjdCB0ZXh0UmVjdChwYWludE9mZnNldC54KCkgKyB4KCksIHJvb3RSZWN0LnkoKSwgbG9n
aWNhbFdpZHRoKCksIHJvb3RSZWN0LmhlaWdodCgpKTsKIAogICAgIHBhZ2UtPmNocm9tZSgpLT5j
bGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQocmVuZGVyZXIoKS0+bm9kZSgpLCB0eXBlLCB0
ZXh0UmVjdCwgcm9vdFJlY3QsIHRydWUsIGZhbHNlKTsKIH0KIAogI2VuZGlmCiAKLXZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBpbnQgZGVjbywgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93KQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIGludCBkZWNvLCBjb25z
dCBTaGFkb3dEYXRhKiBzaGFkb3cpCiB7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRy
dW5jYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UG9pbnQgbG9jYWxPcmlnaW4g
PSBib3hPcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBsb2NhbE9yaWdpbiA9IGJveE9yaWdpbjsK
IAogICAgIGZsb2F0IHdpZHRoID0gbV9sb2dpY2FsV2lkdGg7CiAgICAgaWYgKG1fdHJ1bmNhdGlv
biAhPSBjTm9UcnVuY2F0aW9uKSB7CkBAIC05MDUsOSArOTA1LDkgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludERlY29yYXRpb24oR3JhcAogICAgIGJvb2wgc2V0Q2xpcCA9IGZhbHNlOwogICAg
IGludCBleHRyYU9mZnNldCA9IDA7CiAgICAgaWYgKCFsaW5lc0FyZU9wYXF1ZSAmJiBzaGFkb3cg
JiYgc2hhZG93LT5uZXh0KCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvY2FsT3Jp
Z2luLCBGbG9hdFNpemUod2lkdGgsIGJhc2VsaW5lICsgMikpOworICAgICAgICBHcmFwaGljc1Jl
Y3QgY2xpcFJlY3QobG9jYWxPcmlnaW4sIEdyYXBoaWNzU2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAy
KSk7CiAgICAgICAgIGZvciAoY29uc3QgU2hhZG93RGF0YSogcyA9IHNoYWRvdzsgczsgcyA9IHMt
Pm5leHQoKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobG9jYWxPcmlnaW4s
IEZsb2F0U2l6ZSh3aWR0aCwgYmFzZWxpbmUgKyAyKSk7CisgICAgICAgICAgICBHcmFwaGljc1Jl
Y3Qgc2hhZG93UmVjdChsb2NhbE9yaWdpbiwgR3JhcGhpY3NTaXplKHdpZHRoLCBiYXNlbGluZSAr
IDIpKTsKICAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzLT5ibHVyKCkpOwogICAgICAg
ICAgICAgaW50IHNoYWRvd1ggPSBpc0hvcml6b250YWwoKSA/IHMtPngoKSA6IHMtPnkoKTsKICAg
ICAgICAgICAgIGludCBzaGFkb3dZID0gaXNIb3Jpem9udGFsKCkgPyBzLT55KCkgOiAtcy0+eCgp
OwpAQCAtOTM0LDcgKzkzNCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9u
KEdyYXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCBzaGFkb3dYID0gaXNIb3Jpem9u
dGFsKCkgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOwogICAgICAgICAgICAgaW50IHNoYWRv
d1kgPSBpc0hvcml6b250YWwoKSA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgpOwotICAgICAg
ICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0
cmFPZmZzZXQpLCBzaGFkb3ctPmJsdXIoKSwgc2hhZG93LT5jb2xvcigpLCBjb2xvclNwYWNlKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhHcmFwaGljc1NpemUoc2hhZG93WCwgc2hh
ZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5ibHVyKCksIHNoYWRvdy0+Y29sb3IoKSwgY29s
b3JTcGFjZSk7CiAgICAgICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgICAgICAgICAgc2hh
ZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTk0Myw3ICs5NDMsNyBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmUsIGNvbG9yU3BhY2UpOwogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgLy8gTGVhdmUg
b25lIHBpeGVsIG9mIHdoaXRlIGJldHdlZW4gdGhlIGJhc2VsaW5lIGFuZCB0aGUgdW5kZXJsaW5l
LgotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxP
cmlnaW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyBiYXNlbGluZSArIDEpLCB3aWR0aCwgaXNQcmlu
dGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoR3JhcGhpY3NQb2lu
dChsb2NhbE9yaWdpbi54KCksIGxvY2FsT3JpZ2luLnkoKSArIGJhc2VsaW5lICsgMSksIHdpZHRo
LCBpc1ByaW50aW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZGVjbyAmIE9WRVJMSU5FKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvdmVybGluZSwgY29sb3JTcGFj
ZSk7CkBAIC05NTMsNyArOTUzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRp
b24oR3JhcAogICAgICAgICBpZiAoZGVjbyAmIExJTkVfVEhST1VHSCkgewogICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGluZXRocm91Z2gsIGNvbG9yU3BhY2UpOwogICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEZsb2F0UG9pbnQobG9jYWxPcmlnaW4ueCgpLCBsb2Nh
bE9yaWdpbi55KCkgKyAyICogYmFzZWxpbmUgLyAzKSwgd2lkdGgsIGlzUHJpbnRpbmcpOworICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEdyYXBoaWNzUG9pbnQobG9jYWxPcmln
aW4ueCgpLCBsb2NhbE9yaWdpbi55KCkgKyAyICogYmFzZWxpbmUgLyAzKSwgd2lkdGgsIGlzUHJp
bnRpbmcpOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoc2hhZG93KTsKIApAQCAtOTc4LDcgKzk3
OCw3IEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OlRleHRDaGVja2luZ0xpbmUKICAgICB9CiB9
CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFw
aGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFy
a2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBn
cmFtbWFyKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2Vy
KEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgRG9j
dW1lbnRNYXJrZXIqIG1hcmtlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250
LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBt
YXJrZXJzICg1MzI3ODg3KQogICAgIGlmICh0ZXh0UmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKQEAgLTEwMDksNyArMTAwOSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRT
cGVsbGluZ09yR3JhbW0KICAgICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0ICYgd2lkdGgKICAgICAg
ICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGlu
Z01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRv
cCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAgICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25I
ZWlnaHQoKTsKLSAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJv
eE9yaWdpbi55KCkgLSBkZWx0YVkpOworICAgICAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQo
Ym94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7CiAgICAgICAgIFRleHRSdW4g
cnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAgICAgLy8gRklYTUU6
IENvbnZlcnQgdGhlIGRvY3VtZW50IG1hcmtlcnMgdG8gZmxvYXQgcmVjdHMuCkBAIC0xMDIxLDcg
KzEwMjEsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdPckdyYW1tCiAgICAg
ICAgIC8vIGRpc3BsYXkgYSB0b29sVGlwLiBXZSBkb24ndCBkbyB0aGlzIGZvciBtaXNzcGVsbGlu
ZyBtYXJrZXJzLgogICAgICAgICBpZiAoZ3JhbW1hcikgewogICAgICAgICAgICAgbWFya2VyUmVj
dC5tb3ZlKC1ib3hPcmlnaW4ueCgpLCAtYm94T3JpZ2luLnkoKSk7Ci0gICAgICAgICAgICBtYXJr
ZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2Vy
UmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBtYXJrZXJSZWN0ID0g
cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobWFya2VyUmVjdCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgICAgICB0b1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIobWFya2VyKS0+c2V0UmVuZGVyZWRSZWN0KG1hcmtlclJlY3QpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTA0MywxMCArMTA0MywxMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U3Bl
bGxpbmdPckdyYW1tCiAgICAgICAgIC8vIEluIGxhcmdlciBmb250cywgdGhvdWdoLCBwbGFjZSB0
aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRvIHByZXZlbnQgYSBiaWcgZ2FwLgog
ICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSArIDI7CiAgICAgfQotICAgIHB0LT5k
cmF3TGluZUZvclRleHRDaGVja2luZyhGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwg
Ym94T3JpZ2luLnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCB0ZXh0Q2hlY2tpbmdMaW5l
U3R5bGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSk7CisgICAgcHQtPmRyYXdMaW5lRm9y
VGV4dENoZWNraW5nKEdyYXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmln
aW4ueSgpICsgdW5kZXJsaW5lT2Zmc2V0KSwgd2lkdGgsIHRleHRDaGVja2luZ0xpbmVTdHlsZUZv
ck1hcmtlclR5cGUobWFya2VyLT50eXBlKCkpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50
JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJr
ZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgYm94T3JpZ2luLCBE
b2N1bWVudE1hcmtlciogbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQpCiB7CiAgICAgLy8gVXNlIHNhbWUgeSBwb3NpdGlvbmluZyBhbmQgaGVpZ2h0IGFzIGZvciBz
ZWxlY3Rpb24sIHNvIHRoYXQgd2hlbiB0aGUgc2VsZWN0aW9uIGFuZCB0aGlzIGhpZ2hsaWdodCBh
cmUgb24KICAgICAvLyB0aGUgc2FtZSB3b3JkIHRoZXJlIGFyZSBubyBwaWVjZXMgc3RpY2tpbmcg
b3V0LgpAQCAtMTA1OSw3ICsxMDU5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRN
YXRjaE1hcmtlcgogCiAgICAgLy8gQWx3YXlzIGNvbXB1dGUgYW5kIHN0b3JlIHRoZSByZWN0IGFz
c29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4gVGhlIGNvbXB1dGVkIHJlY3QgaXMgaW4gYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCiAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgSW50UG9pbnQoeCgpLCBzZWxlY3Rpb25U
b3AoKSksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOwotICAgIG1hcmtlclJlY3QgPSByZW5kZXJl
cigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChtYXJrZXJSZWN0KSkuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKKyAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29s
dXRlUXVhZChHcmFwaGljc1JlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
CiAgICAgdG9SZW5kZXJlZERvY3VtZW50TWFya2VyKG1hcmtlciktPnNldFJlbmRlcmVkUmVjdCht
YXJrZXJSZWN0KTsKICAgICAKICAgICAvLyBPcHRpb25hbGx5IGhpZ2hsaWdodCB0aGUgdGV4dApA
QCAtMTA2OSw4ICsxMDY5LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1h
cmtlcgogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1JbmFjdGl2ZVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKnB0KTsKICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHB0LCBj
b2xvciwgY29sb3IsIDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAgLy8gRG9uJ3QgZHJhdyB0ZXh0
IGF0IGFsbCEKLSAgICAgICAgcHQtPmNsaXAoRmxvYXRSZWN0KGJveE9yaWdpbi54KCksIGJveE9y
aWdpbi55KCkgLSBkZWx0YVksIG1fbG9naWNhbFdpZHRoLCBzZWxIZWlnaHQpKTsKLSAgICAgICAg
cHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHJ1biwgRmxvYXRQb2ludChib3hPcmlnaW4u
eCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKSwgc2VsSGVpZ2h0LCBjb2xvciwgc3R5bGUtPmNv
bG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CisgICAgICAgIHB0LT5jbGlwKEdyYXBoaWNzUmVjdChi
b3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZLCBtX2xvZ2ljYWxXaWR0aCwgc2Vs
SGVpZ2h0KSk7CisgICAgICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEdy
YXBoaWNzUG9pbnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIHNlbEhl
aWdodCwgY29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogICAgIH0KIH0K
IApAQCAtMTA4NywxMSArMTA4NywxMSBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0
Rm9yUmVwbGFjCiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgbWFya2VyLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHN0YXJ0UG9pbnQsIGgsIHNQ
b3MsIGVQb3MpKTsKLSAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAg
bWFya2VyUmVjdCA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NSZWN0
KG1hcmtlclJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIHRvUmVuZGVyZWREb2N1
bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2VyUmVjdCk7CiB9CiAgICAg
Ci12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4
dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2b2lkIElubGluZVRleHRCb3g6OnBh
aW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29s
IGJhY2tncm91bmQpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5ub2RlKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTExNTQsNyArMTE1NCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1
bWVudE1hcmtlcnMKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3Np
dGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgRmxvYXRQb2ludCYgYm94
T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQordm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJs
aW5lJiB1bmRlcmxpbmUpCiB7CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRp
b24pCiAgICAgICAgIHJldHVybjsKQEAgLTExOTYsNyArMTE5Niw3IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGUKIAogICAgIGN0eC0+c2V0U3Ryb2tlQ29sb3IodW5k
ZXJsaW5lLmNvbG9yLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIGN0
eC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGN0eC0+ZHJhd0xpbmVG
b3JUZXh0KEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsg
bG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcyksIHdpZHRoLCB0ZXh0UmVuZGVyZXIoKS0+
ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSk7CisgICAgY3R4LT5kcmF3TGluZUZvclRleHQoR3JhcGhp
Y3NQb2ludChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVp
Z2h0KCkgLSBsaW5lVGhpY2tuZXNzKSwgd2lkdGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgp
LT5wcmludGluZygpKTsKIH0KIAogaW50IElubGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0KCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgY29u
dGFpbnNDYXJldE9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsgLy8gZmFsc2UgZm9yIG9mZnNldCBh
ZnRlciBsaW5lIGJyZWFrCiAKICAgICAvLyBOZWVkcyB0byBiZSBwdWJsaWMsIHNvIHRoZSBzdGF0
aWMgcGFpbnRUZXh0V2l0aFNoYWRvd3MoKSBmdW5jdGlvbiBjYW4gdXNlIGl0LgotICAgIHN0YXRp
YyBGbG9hdFNpemUgYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBTaGFkb3dEYXRhKiwgY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBzdHJv
a2VkLCBib29sIG9wYXF1ZSwgYm9vbCBob3Jpem9udGFsKTsKKyAgICBzdGF0aWMgR3JhcGhpY3NT
aXplIGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
U2hhZG93RGF0YSosIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGV4dFJlY3QsIGJvb2wgc3Ryb2tlZCwg
Ym9vbCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRhbCk7CiAKIHByaXZhdGU6CiAgICAgSW5saW5lVGV4
dEJveCogbV9wcmV2VGV4dEJveDsgLy8gVGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBv
dXIgUmVuZGVyT2JqZWN0CkBAIC0xNjUsMTggKzE2NSwxOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgIC8vIGRlbm90ZSBubyB0cnVuY2F0aW9uICh0aGUgd2hvbGUgcnVuIHBhaW50
cykgYW5kIGZ1bGwgdHJ1bmNhdGlvbiAobm90aGluZyBwYWludHMgYXQgYWxsKS4KIAogcHJvdGVj
dGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQm
LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwotICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtl
cnMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBSZW5kZXJT
dHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGJhY2tncm91bmQpOwotICAgIHZvaWQgcGFpbnRDb21w
b3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CisgICAgdm9pZCBwYWludENvbXBv
c2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBi
b3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGludCBzdGFydFBvcywgaW50IGVu
ZFBvcyk7CisgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBHcmFwaGljc1BvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYs
IGJvb2wgYmFja2dyb3VuZCk7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29t
cG9zaXRpb25VbmRlcmxpbmUmKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBwYWludEN1
c3RvbUhpZ2hsaWdodChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSk7CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGludCBkZWNvcmF0aW9uLCBj
b25zdCBTaGFkb3dEYXRhKik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9u
dCYpOwotICAgIHZvaWQgcGFpbnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsKLSAgICB2b2lkIHBhaW50VGV4dE1h
dGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
RG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBh
aW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hP
cmlnaW4sIGludCBkZWNvcmF0aW9uLCBjb25zdCBTaGFkb3dEYXRhKik7CisgICAgdm9pZCBwYWlu
dFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hPcmln
aW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTcGVsbGluZ09y
R3JhbW1hck1hcmtlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1BvaW50JiBib3hP
cmlnaW4sIERvY3VtZW50TWFya2VyKiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBn
cmFtbWFyKTsKKyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJT
dHlsZSosIGNvbnN0IEZvbnQmKTsKICAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRN
YXJrZXIoRG9jdW1lbnRNYXJrZXIqLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKIAogICAg
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRT
dGF0ZSogcHIKICAgICBib29sIGZpeGVkID0gcmVuZGVyZXItPmlzUG9zaXRpb25lZCgpICYmIHJl
bmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247CiAgICAgaWYgKGZp
eGVkKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0
aCB0cmFuc2Zvcm1zLgotICAgICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXIt
PnZpZXcoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQgZml4ZWRPZmZzZXQgPSByZW5kZXJlci0+dmlldygpLT5sb2NhbFRvQWJzb2x1
dGUoR3JhcGhpY3NQb2ludCgpLCB0cnVlKTsKICAgICAgICAgbV9wYWludE9mZnNldCA9IExheW91
dFNpemUoZml4ZWRPZmZzZXQueCgpLCBmaXhlZE9mZnNldC55KCkpICsgb2Zmc2V0OwogICAgIH0g
ZWxzZQogICAgICAgICBtX3BhaW50T2Zmc2V0ID0gcHJldi0+bV9wYWludE9mZnNldCArIG9mZnNl
dDsKQEAgLTExNyw3ICsxMTcsNyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2Jq
ZWN0KiByCiAjZW5kaWYKIHsKICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHJvb3QtPmNv
bnRhaW5lcigpOwotICAgIEZsb2F0UG9pbnQgYWJzQ29udGVudFBvaW50ID0gY29udGFpbmVyLT5s
b2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CisgICAgR3JhcGhpY3NQ
b2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGlj
c1BvaW50KCksIGZhbHNlLCB0cnVlKTsKICAgICBtX3BhaW50T2Zmc2V0ID0gTGF5b3V0U2l6ZShh
YnNDb250ZW50UG9pbnQueCgpLCBhYnNDb250ZW50UG9pbnQueSgpKTsKIAogICAgIGlmIChjb250
YWluZXItPmhhc092ZXJmbG93Q2xpcCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0VHlwZXMuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2lmbmRl
ZiBMYXlvdXRUeXBlc19oCiAjZGVmaW5lIExheW91dFR5cGVzX2gKIAotI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsMjIgKzQ2LDIyIEBAIHR5cGVkZWYgSW50UG9p
bnQgTGF5b3V0UG9pbnQ7CiB0eXBlZGVmIEludFNpemUgTGF5b3V0U2l6ZTsKIHR5cGVkZWYgSW50
UmVjdCBMYXlvdXRSZWN0OwogCi1pbmxpbmUgTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2lubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91
dFJlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KHJlY3QpOwogfQogCi1pbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHApCitpbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBv
aW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIHApCiB7CiAgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2lu
dChwKTsKIH0KIAotaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBG
bG9hdFBvaW50JiBwKQoraW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25z
dCBHcmFwaGljc1BvaW50JiBwKQogewogICAgIHJldHVybiBmbG9vcmVkSW50UG9pbnQocCk7CiB9
CiAKLWlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRTaXpl
JiBzKQoraW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBHcmFwaGlj
c1NpemUmIHMpCiB7CiAgICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChzKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTI3NDcsNyArMjc0
Nyw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0c0YKICAgICAgICAg
cmV0dXJuIEdhcFJlY3RzKCk7CiAKICAgICAvLyBGSVhNRTogdGhpcyBpcyBicm9rZW4gd2l0aCB0
cmFuc2Zvcm1zCi0gICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3Rh
dGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBGbG9hdFBvaW50KCkpOworICAgIFRyYW5zZm9y
bVN0YXRlIHRyYW5zZm9ybVN0YXRlKFRyYW5zZm9ybVN0YXRlOjpBcHBseVRyYW5zZm9ybURpcmVj
dGlvbiwgR3JhcGhpY3NQb2ludCgpKTsKICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIGZhbHNlLCBmYWxzZSwgdHJhbnNmb3JtU3RhdGUpOwogICAgIEludFBvaW50IG9m
ZnNldEZyb21SZXBhaW50Q29udGFpbmVyID0gcm91bmRlZEludFBvaW50KHRyYW5zZm9ybVN0YXRl
Lm1hcHBlZFBvaW50KCkpOwogCkBAIC0yNzc2LDcgKzI3NzYsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludFNlbGVjdGlvbihQYWludEluCiAgICAgICAgICAgICAgICAgaWYgKCFoYXNMYXllcigp
KSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNC
b3VuZHMpOwogICAgICAgICAgICAgICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUobG9jYWxCb3Vu
ZHMpOwotICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWlu
ZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksIGxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9IGxv
Y2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChsb2NhbEJvdW5kcyksIGxheWVyLT5yZW5k
ZXJlcigpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgICAgICAgICAgICAgICAgICBnYXBS
ZWN0c0JvdW5kcy5tb3ZlKGxheWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxheWVyLT5hZGRCbG9ja1NlbGVjdGlvbkdhcHNC
b3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwpAQCAtNTczMyw3ICs1NzMzLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8TAogICAgICAgICByZWN0cy5hcHBlbmQoTGF5b3V0
UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJCbG9j
azo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7CiAgICAgLy8g
Rm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lu
cyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKICAgICAvLyBpbmxpbmUgYm94ZXMgYWJv
dmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3JtIGEg
c2luZ2xlIGlycmVndWxhcgpAQCAtNTc0MSwxMiArNTc0MSwxMiBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGCiAgICAgaWYgKGlzQW5vbnltb3VzQmxvY2tDb250aW51
YXRpb24oKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgYmxvY2stZmxv
d3MgdGhhdCBhcmUgaG9yaXpvbnRhbC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ2NzgxCi0gICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwg
LWNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpLAorICAgICAgICBHcmFwaGljc1JlY3QgbG9jYWxSZWN0
KDAsIC1jb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpICsgY29sbGFwc2Vk
TWFyZ2luQWZ0ZXIoKSk7CiAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFk
KGxvY2FsUmVjdCkpOwogICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFk
cyk7CiAgICAgfSBlbHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChSZW5kZXJCb3g6OmxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpOworICAgICAg
ICBxdWFkcy5hcHBlbmQoUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVj
dCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCbG9jazo6
cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCkKQEAgLTU4NzQsMTAgKzU4NzQsMTAgQEAgSW50UmVj
dCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saQogCiAgICAgICAgICAgICBpbnQgbXlS
aWdodCA9IHggKyBjYXJldFdpZHRoOwogICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBjYWxsIGxv
Y2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSB0d2ljZSBoZXJlLCB0b28/Ci0gICAgICAgICAgICBG
bG9hdFBvaW50IGFic1JpZ2h0UG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChteVJp
Z2h0LCAwKSk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGFic1JpZ2h0UG9pbnQgPSBsb2Nh
bFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludChteVJpZ2h0LCAwKSk7CiAKICAgICAgICAgICAgIGlu
dCBjb250YWluZXJSaWdodCA9IGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGFic0Nv
bnRhaW5lclBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoY29udGFpbmVyUmlnaHQs
IDApKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzQ29udGFpbmVyUG9pbnQgPSBsb2Nh
bFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludChjb250YWluZXJSaWdodCwgMCkpOwogCiAgICAgICAg
ICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gYWJzQ29udGFpbmVyUG9pbnQueCgpIC0gYWJz
UmlnaHRQb2ludC54KCk7CiAgICAgICAgIH0KQEAgLTU5MjAsMTIgKzU5MjAsMTIgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBmb3IgKFJlbmRlck9i
amVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1h
cmtlcigpICYmIGN1cnItPmlzQm94KCkpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KGN1cnIpOwotICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9zOwor
ICAgICAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zOwogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAgICAg
ICAgICAgICAgIGlmIChib3gtPmxheWVyKCkpIAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBj
dXJyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngo
KSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBib3gtPnkoKSk7CisgICAgICAgICAgICAgICAgICAg
IHBvcyA9IEdyYXBoaWNzUG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngoKSwgYWRk
aXRpb25hbE9mZnNldC55KCkgKyBib3gtPnkoKSk7CiAgICAgICAgICAgICAgICAgYm94LT5hZGRG
b2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcykpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtNjMyLDcgKzYzMiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywg
TGF5b3V0VW5pdCBwb3NpdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYp
OworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7
CiAKICAgICBMYXlvdXRVbml0IGRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGRlc2lyZWRDb2x1bW5Db3VudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGFpbnRJbmZvLmgiCkBAIC00NjEsOSArNDYxLDkgQEAgdm9pZCBSZW5kZXJCb3g6OmFic29s
dXRlUmVjdHMoVmVjdG9yPExheQogICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewotICAgIHF1YWRzLmFwcGVuZChsb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKKyAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVMYXllclRyYW5zZm9y
bSgpCkBAIC00NzYsMTUgKzQ3NiwxNSBAQCB2b2lkIFJlbmRlckJveDo6dXBkYXRlTGF5ZXJUcmFu
c2Zvcm0oKQogSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CiB7
CiAgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOworICAgIEdyYXBoaWNzUG9pbnQg
YWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQoKSk7CiAgICAgcmVjdC5tb3Zl
KGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFF1
YWQgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKK0dyYXBoaWNzUXVhZCBS
ZW5kZXJCb3g6OmFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdAogewogICAgIEludFJlY3QgcmVj
dCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0gICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KHJlY3QpKTsKKyAgICByZXR1cm4gbG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1Jl
Y3QocmVjdCkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFBvaW50KiBjYWNo
ZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0CkBAIC00OTIsNyArNDkyLDcgQEAgSW50
UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaQogICAgIEludFJlY3QgYm94ID0g
Ym9yZGVyQm91bmRpbmdCb3goKTsKICAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRvdyhi
b3gpOwogCi0gICAgRmxvYXRRdWFkIGNvbnRhaW5lclJlbGF0aXZlUXVhZCA9IEZsb2F0UmVjdChi
b3gpOworICAgIEdyYXBoaWNzUXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBHcmFwaGljc1Jl
Y3QoYm94KTsKICAgICBpZiAoY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKQogICAgICAg
ICBjb250YWluZXJSZWxhdGl2ZVF1YWQubW92ZShjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWlu
ZXItPngoKSwgY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyLT55KCkpOwogICAgIGVsc2UK
QEAgLTgxNyw3ICs4MTcsNyBAQCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgUmVuZGVyQm94Ojpk
ZXRlCiAgICAgICAgIHJldHVybiBCYWNrZ3JvdW5kQmxlZWROb25lOwogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIEZsb2F0U2l6ZSBjb250ZXh0U2Nh
bGluZyhzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGN0bS55U2NhbGUoKSkpOworICAgIEdyYXBoaWNzU2l6ZSBjb250ZXh0U2NhbGluZyhzdGF0aWNf
Y2FzdDxmbG9hdD4oY3RtLnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUo
KSkpOwogICAgIGlmIChib3JkZXJPYnNjdXJlc0JhY2tncm91bmRFZGdlKGNvbnRleHRTY2FsaW5n
KSkKICAgICAgICAgcmV0dXJuIEJhY2tncm91bmRCbGVlZFNocmlua0JhY2tncm91bmQ7CiAgICAg
CkBAIC0xMDg1LDExICsxMDg1LDExIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hs
aWdodChjb24KICAgICBJbmxpbmVCb3gqIGJveFdyYXAgPSBpbmxpbmVCb3hXcmFwcGVyKCk7CiAg
ICAgUm9vdElubGluZUJveCogciA9IGJveFdyYXAgPyBib3hXcmFwLT5yb290KCkgOiAwOwogICAg
IGlmIChyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCByb290UmVjdChwYWludE9mZnNldC54KCkgKyBy
LT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVjdGlvblRvcCgpLCByLT5sb2dpY2FsV2lk
dGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290UmVjdC5o
ZWlnaHQoKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByb290UmVjdChwYWludE9mZnNldC54KCkg
KyByLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHItPnNlbGVjdGlvblRvcCgpLCByLT5sb2dpY2Fs
V2lkdGgoKSwgci0+c2VsZWN0aW9uSGVpZ2h0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgaW1h
Z2VSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCByb290
UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRD
dXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhpbmRU
ZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdChw
YWludE9mZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpOworICAgICAgICBHcmFwaGljc1JlY3QgaW1hZ2VSZWN0KHBhaW50T2Zmc2V0LngoKSAr
IHgoKSwgcGFpbnRPZmZzZXQueSgpICsgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAg
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0
eXBlLCBpbWFnZVJlY3QsIGltYWdlUmVjdCwgYmVoaW5kVGV4dCwgZmFsc2UpOwogICAgIH0KIH0K
QEAgLTEzNTUsNyArMTM1NSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpwb3NpdGlvbkxpbmVCb3goSW5s
aW5lQm8KICAgICAgICAgYm94LT5yZW1vdmUoKTsKICAgICAgICAgYm94LT5kZXN0cm95KHJlbmRl
ckFyZW5hKCkpOwogICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlZCgpKSB7Ci0gICAgICAgIHNldExv
Y2F0aW9uKHJvdW5kZWRJbnRQb2ludChGbG9hdFBvaW50KGJveC0+eCgpLCBib3gtPnkoKSkpKTsK
KyAgICAgICAgc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KEdyYXBoaWNzUG9pbnQoYm94LT54
KCksIGJveC0+eSgpKSkpOwogICAgICAgICBtX2lubGluZUJveFdyYXBwZXIgPSBib3g7CiAgICAg
fQogfQpAQCAtMzQ0MCwxNCArMzQ0MCwxNCBAQCBJbnRTaXplIFJlbmRlckJveDo6ZmxpcEZvcldy
aXRpbmdNb2RlKGNvCiAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRT
aXplKG9mZnNldC53aWR0aCgpLCBoZWlnaHQoKSAtIG9mZnNldC5oZWlnaHQoKSkgOiBJbnRTaXpl
KHdpZHRoKCkgLSBvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKTsKIH0KIAotRmxvYXRQ
b2ludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikgY29uc3QKK0dyYXBoaWNzUG9pbnQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUo
Y29uc3QgR3JhcGhpY3NQb2ludCYgcG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSgp
LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcG9zaXRpb247
Ci0gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBGbG9hdFBvaW50KHBvc2l0
aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55KCkpIDogRmxvYXRQb2ludCh3aWR0aCgpIC0g
cG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOworICAgIHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gR3JhcGhpY3NQb2ludChwb3NpdGlvbi54KCksIGhlaWdodCgpIC0gcG9zaXRp
b24ueSgpKSA6IEdyYXBoaWNzUG9pbnQod2lkdGgoKSAtIHBvc2l0aW9uLngoKSwgcG9zaXRpb24u
eSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0Cit2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEdyYXBoaWNz
UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgog
ICAgIC8vIFRoZSBjb250ZW50IGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIElnbm9yZXMgdHJhbnNm
b3Jtcy4KICAgICBMYXlvdXRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0OwogICAgIC8v
IFRoZSBjb250ZW50IGJveCBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgY29vcmRzICh0YWtpbmcgdHJh
bnNmb3JtcyBpbnRvIGFjY291bnQpLgotICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFk
KCkgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIGFic29sdXRlQ29udGVudFF1YWQoKSBjb25zdDsK
IAogICAgIC8vIEJvdW5kcyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBS
ZXNwZWN0cyB0cmFuc2Zvcm1zCiAgICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgSW50UG9p
bnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3Q7CkBAIC0yMjgsNyArMjI4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb2xsYXBzZWRNYXJnaW5BZnRl
cigpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkFmdGVyKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NR
dWFkPiYpOwogICAgIAogICAgIEludFJlY3QgcmVmbGVjdGlvbkJveCgpIGNvbnN0OwogICAgIGlu
dCByZWZsZWN0aW9uT2Zmc2V0KCkgY29uc3Q7CkBAIC0zOTQsOCArMzk0LDggQEAgcHVibGljOgog
ICAgIExheW91dFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29uc3Qg
TGF5b3V0UG9pbnQmKSBjb25zdDsKICAgICBJbnRTaXplIGZsaXBGb3JXcml0aW5nTW9kZShjb25z
dCBJbnRTaXplJikgY29uc3Q7CiAgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoSW50UmVjdCYp
IGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICB2b2lkIGZsaXBGb3JXcml0aW5nTW9kZShGbG9hdFJlY3QmKSBjb25z
dDsKKyAgICBHcmFwaGljc1BvaW50IGZsaXBGb3JXcml0aW5nTW9kZShjb25zdCBHcmFwaGljc1Bv
aW50JikgY29uc3Q7CisgICAgdm9pZCBmbGlwRm9yV3JpdGluZ01vZGUoR3JhcGhpY3NSZWN0Jikg
Y29uc3Q7CiAgICAgSW50U2l6ZSBsb2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCkgY29u
c3Q7CiAKICAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlv
bihSZW5kZXJTdHlsZSopIGNvbnN0OwpAQCAtNDA2LDcgKzQwNiw3IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJPdmVyZmxvdyogaGFzUmVuZGVyT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJm
bG93LmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNh
bGN1bGF0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNSYXRp
b0luZm9ybWF0aW9uKEZsb2F0U2l6ZSYgLyogaW50cmluc2ljUmF0aW8gKi8sIGJvb2wmIC8qIGlz
UGVyY2VudGFnZUludHJpbnNpY1NpemUgKi8pIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihHcmFwaGljc1NpemUmIC8qIGludHJpbnNp
Y1JhdGlvICovLCBib29sJiAvKiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplICovKSBjb25zdCB7
IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsNyArNTgzLDcgQEAgc3Rh
dGljIEludFJlY3QgYmFja2dyb3VuZFJlY3RBZGp1c3RlZEZvcgogICAgIEludFJlY3QgYWRqdXN0
ZWRSZWN0ID0gYm9yZGVyUmVjdDsKICAgICAvLyBXZSBuZWVkIHRvIHNocmluayB0aGUgYm9yZGVy
IGJ5IG9uZSBkZXZpY2UgcGl4ZWwgb24gZWFjaCBzaWRlLgogICAgIEFmZmluZVRyYW5zZm9ybSBj
dG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICBGbG9hdFNpemUgY29udGV4dFNjYWxlKHN0YXRp
Y19jYXN0PGZsb2F0PihjdG0ueFNjYWxlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY3RtLnlTY2Fs
ZSgpKSk7CisgICAgR3JhcGhpY3NTaXplIGNvbnRleHRTY2FsZShzdGF0aWNfY2FzdDxmbG9hdD4o
Y3RtLnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUoKSkpOwogICAgIGFk
anVzdGVkUmVjdC5pbmZsYXRlWCgtY2VpbGYoMSAvIGNvbnRleHRTY2FsZS53aWR0aCgpKSk7CiAg
ICAgYWRqdXN0ZWRSZWN0LmluZmxhdGVZKC1jZWlsZigxIC8gY29udGV4dFNjYWxlLmhlaWdodCgp
KSk7CiAgICAgcmV0dXJuIGFkanVzdGVkUmVjdDsKQEAgLTE5MzYsMjYgKzE5MzYsMjYgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoRwogfQogI2VuZGlmCiAKLXN0YXRp
YyB2b2lkIGZpbmRJbm5lclZlcnRleChjb25zdCBGbG9hdFBvaW50JiBvdXRlckNvcm5lciwgY29u
c3QgRmxvYXRQb2ludCYgaW5uZXJDb3JuZXIsIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlclBvaW50
LCBGbG9hdFBvaW50JiByZXN1bHQpCitzdGF0aWMgdm9pZCBmaW5kSW5uZXJWZXJ0ZXgoY29uc3Qg
R3JhcGhpY3NQb2ludCYgb3V0ZXJDb3JuZXIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIGlubmVyQ29y
bmVyLCBjb25zdCBHcmFwaGljc1BvaW50JiBjZW50ZXJQb2ludCwgR3JhcGhpY3NQb2ludCYgcmVz
dWx0KQogewogICAgIC8vIElmIHRoZSBsaW5lIGJldHdlZW4gb3V0ZXIgYW5kIGlubmVyIGNvcm5l
ciBpcyB0b3dhcmRzIHRoZSBob3Jpem9udGFsLCBpbnRlcnNlY3Qgd2l0aCBhIHZlcnRpY2FsIGxp
bmUgdGhyb3VnaCB0aGUgY2VudGVyLAogICAgIC8vIG90aGVyd2lzZSB3aXRoIGEgaG9yaXpvbnRh
bCBsaW5lIHRocm91Z2ggdGhlIGNlbnRlci4gVGhlIHBvaW50cyB0aGF0IGZvcm0gdGhpcyBsaW5l
IGFyZSBhcmJpdHJhcnkgKHdlIHVzZSAwLCAxMDApLgogICAgIC8vIE5vdGUgdGhhdCBpZiBmaW5k
SW50ZXJzZWN0aW9uIGZhaWxzLCBpdCB3aWxsIGxlYXZlIHJlc3VsdCB1bnRvdWNoZWQuCiAgICAg
aWYgKGZhYnMob3V0ZXJDb3JuZXIueCgpIC0gaW5uZXJDb3JuZXIueCgpKSA+IGZhYnMob3V0ZXJD
b3JuZXIueSgpIC0gaW5uZXJDb3JuZXIueSgpKSkKLSAgICAgICAgZmluZEludGVyc2VjdGlvbihv
dXRlckNvcm5lciwgaW5uZXJDb3JuZXIsIEZsb2F0UG9pbnQoY2VudGVyUG9pbnQueCgpLCAwKSwg
RmxvYXRQb2ludChjZW50ZXJQb2ludC54KCksIDEwMCksIHJlc3VsdCk7CisgICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb24ob3V0ZXJDb3JuZXIsIGlubmVyQ29ybmVyLCBHcmFwaGljc1BvaW50KGNlbnRl
clBvaW50LngoKSwgMCksIEdyYXBoaWNzUG9pbnQoY2VudGVyUG9pbnQueCgpLCAxMDApLCByZXN1
bHQpOwogICAgIGVsc2UKLSAgICAgICAgZmluZEludGVyc2VjdGlvbihvdXRlckNvcm5lciwgaW5u
ZXJDb3JuZXIsIEZsb2F0UG9pbnQoMCwgY2VudGVyUG9pbnQueSgpKSwgRmxvYXRQb2ludCgxMDAs
IGNlbnRlclBvaW50LnkoKSksIHJlc3VsdCk7CisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb24ob3V0
ZXJDb3JuZXIsIGlubmVyQ29ybmVyLCBHcmFwaGljc1BvaW50KDAsIGNlbnRlclBvaW50LnkoKSks
IEdyYXBoaWNzUG9pbnQoMTAwLCBjZW50ZXJQb2ludC55KCkpLCByZXN1bHQpOwogfQogCiB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29u
c3QgUm91bmRlZFJlY3QmIGlubmVyQm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVz
LCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKQogewotICAgIEZsb2F0UG9pbnQgcXVhZFs0XTsKKyAg
ICBHcmFwaGljc1BvaW50IHF1YWRbNF07CiAKICAgICBjb25zdCBJbnRSZWN0JiBvdXRlclJlY3Qg
PSBvdXRlckJvcmRlci5yZWN0KCk7CiAgICAgY29uc3QgSW50UmVjdCYgaW5uZXJSZWN0ID0gaW5u
ZXJCb3JkZXIucmVjdCgpOwogCi0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludChpbm5lclJlY3Qu
bG9jYXRpb24oKS54KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJSZWN0LndpZHRoKCkpIC8g
MiwgaW5uZXJSZWN0LmxvY2F0aW9uKCkueSgpICsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlubmVyUmVj
dC5oZWlnaHQoKSkgLyAyKTsKKyAgICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50KGlubmVyUmVj
dC5sb2NhdGlvbigpLngoKSArIHN0YXRpY19jYXN0PGZsb2F0Pihpbm5lclJlY3Qud2lkdGgoKSkg
LyAyLCBpbm5lclJlY3QubG9jYXRpb24oKS55KCkgKyBzdGF0aWNfY2FzdDxmbG9hdD4oaW5uZXJS
ZWN0LmhlaWdodCgpKSAvIDIpOwogCiAgICAgLy8gRm9yIGVhY2ggc2lkZSwgY3JlYXRlIGEgcXVh
ZCB0aGF0IGVuY29tcGFzc2VzIGFsbCBwYXJ0cyBvZiB0aGF0IHNpZGUgdGhhdCBtYXkgZHJhdywK
ICAgICAvLyBpbmNsdWRpbmcgYXJlYXMgaW5zaWRlIHRoZSBpbm5lckJvcmRlci4KQEAgLTIwMzMs
MTggKzIwMzMsMTggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZAog
ICAgIH0KIAogICAgIC8vIFNxdWFyZSBvZmYgdGhlIGVuZCB3aGljaCBzaG91bGRuJ3QgYmUgYWZm
ZWN0ZWQgYnkgYW50aWFsaWFzaW5nLCBhbmQgY2xpcC4KLSAgICBGbG9hdFBvaW50IGZpcnN0UXVh
ZFs0XTsKKyAgICBHcmFwaGljc1BvaW50IGZpcnN0UXVhZFs0XTsKICAgICBmaXJzdFF1YWRbMF0g
PSBxdWFkWzBdOwogICAgIGZpcnN0UXVhZFsxXSA9IHF1YWRbMV07Ci0gICAgZmlyc3RRdWFkWzJd
ID0gc2lkZSA9PSBCU1RvcCB8fCBzaWRlID09IEJTQm90dG9tID8gRmxvYXRQb2ludChxdWFkWzNd
LngoKSwgcXVhZFsyXS55KCkpCi0gICAgICAgIDogRmxvYXRQb2ludChxdWFkWzJdLngoKSwgcXVh
ZFszXS55KCkpOworICAgIGZpcnN0UXVhZFsyXSA9IHNpZGUgPT0gQlNUb3AgfHwgc2lkZSA9PSBC
U0JvdHRvbSA/IEdyYXBoaWNzUG9pbnQocXVhZFszXS54KCksIHF1YWRbMl0ueSgpKQorICAgICAg
ICA6IEdyYXBoaWNzUG9pbnQocXVhZFsyXS54KCksIHF1YWRbM10ueSgpKTsKICAgICBmaXJzdFF1
YWRbM10gPSBxdWFkWzNdOwogICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcENvbnZleFBvbHlnb24o
NCwgZmlyc3RRdWFkLCAhZmlyc3RFZGdlTWF0Y2hlcyk7CiAKLSAgICBGbG9hdFBvaW50IHNlY29u
ZFF1YWRbNF07CisgICAgR3JhcGhpY3NQb2ludCBzZWNvbmRRdWFkWzRdOwogICAgIHNlY29uZFF1
YWRbMF0gPSBxdWFkWzBdOwotICAgIHNlY29uZFF1YWRbMV0gPSBzaWRlID09IEJTVG9wIHx8IHNp
ZGUgPT0gQlNCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbMF0ueCgpLCBxdWFkWzFdLnkoKSkKLSAg
ICAgICAgOiBGbG9hdFBvaW50KHF1YWRbMV0ueCgpLCBxdWFkWzBdLnkoKSk7CisgICAgc2Vjb25k
UXVhZFsxXSA9IHNpZGUgPT0gQlNUb3AgfHwgc2lkZSA9PSBCU0JvdHRvbSA/IEdyYXBoaWNzUG9p
bnQocXVhZFswXS54KCksIHF1YWRbMV0ueSgpKQorICAgICAgICA6IEdyYXBoaWNzUG9pbnQocXVh
ZFsxXS54KCksIHF1YWRbMF0ueSgpKTsKICAgICBzZWNvbmRRdWFkWzJdID0gcXVhZFsyXTsKICAg
ICBzZWNvbmRRdWFkWzNdID0gcXVhZFszXTsKICAgICAvLyBBbnRpYWxpYXNpbmcgYWZmZWN0cyB0
aGUgc2Vjb25kIHNpZGUuCkBAIC0yMDgxLDcgKzIwODEsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpnZXRCb3JkZXJFZGdlCiAgICAgICAgICFob3Jpem9udGFsIHx8IGluY2x1ZGVMb2dp
Y2FsTGVmdEVkZ2UpOwogfQogCi1ib29sIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpib3JkZXJPYnNj
dXJlc0JhY2tncm91bmRFZGdlKGNvbnN0IEZsb2F0U2l6ZSYgY29udGV4dFNjYWxlKSBjb25zdAor
Ym9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShj
b25zdCBHcmFwaGljc1NpemUmIGNvbnRleHRTY2FsZSkgY29uc3QKIHsKICAgICBCb3JkZXJFZGdl
IGVkZ2VzWzRdOwogICAgIGdldEJvcmRlckVkZ2VJbmZvKGVkZ2VzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9p
ZCBjYWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjb25zdCBGaWxsTGF5ZXIqLCBjb25z
dCBJbnRSZWN0JiBwYWludFJlY3QsIEJhY2tncm91bmRJbWFnZUdlb21ldHJ5Jik7CiAgICAgdm9p
ZCBnZXRCb3JkZXJFZGdlSW5mbyhjbGFzcyBCb3JkZXJFZGdlW10sIGJvb2wgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKSBj
b25zdDsKLSAgICBib29sIGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29uc3QgRmxvYXRT
aXplJiBjb250ZXh0U2NhbGUpIGNvbnN0OworICAgIGJvb2wgYm9yZGVyT2JzY3VyZXNCYWNrZ3Jv
dW5kRWRnZShjb25zdCBHcmFwaGljc1NpemUmIGNvbnRleHRTY2FsZSkgY29uc3Q7CiAKICAgICBi
b29sIHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCosIEltYWdlKiwgY29u
c3Qgdm9pZCosIGNvbnN0IEludFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDcgKzY0LDcgQEAgZmxvYXQgUmVuZGVyQ29tYmluZVRleHQ6OndpZHRoKHVuc2lnbmVk
IAogICAgIHJldHVybiBSZW5kZXJUZXh0Ojp3aWR0aChmcm9tLCBsZW5ndGgsIGZvbnQsIHhQb3Np
dGlvbiwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyQ29t
YmluZVRleHQ6OmFkanVzdFRleHRPcmlnaW4oRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3Qg
RmxvYXRSZWN0JiBib3hSZWN0KSBjb25zdAordm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6YWRqdXN0
VGV4dE9yaWdpbihHcmFwaGljc1BvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBHcmFwaGljc1JlY3Qm
IGJveFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKG1faXNDb21iaW5lZCkKICAgICAgICAgdGV4dE9y
aWdpbi5tb3ZlKGJveFJlY3QuaGVpZ2h0KCkgLyAyIC0gY2VpbGYobV9jb21iaW5lZFRleHRXaWR0
aCkgLyAyLCBzdHlsZSgpLT5mb250KCkucGl4ZWxTaXplKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAgcHVibGljOgogICAgIFJlbmRlckNvbWJpbmVUZXh0KE5vZGUq
LCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsKIAogICAgIHZvaWQgY29tYmluZVRleHQoKTsKLSAg
ICB2b2lkIGFkanVzdFRleHRPcmlnaW4oRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0KSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFRleHRPcmlnaW4oR3JhcGhp
Y3NQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3hSZWN0KSBjb25zdDsK
ICAgICB2b2lkIGNoYXJhY3RlcnNUb1JlbmRlcihpbnQgc3RhcnQsIGNvbnN0IFVDaGFyKiYgY2hh
cmFjdGVycywgaW50JiBsZW5ndGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNDb21iaW5lZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNv
bnN0IEZvbnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFy
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzYgKzQ0LDM2IEBAIGJvb2wgUmVuZGVyRGV0
YWlsc01hcmtlcjo6aXNPcGVuKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRp
YyBQYXRoIGNyZWF0ZVBhdGgoY29uc3QgRmxvYXRQb2ludCogcGF0aCkKK3N0YXRpYyBQYXRoIGNy
ZWF0ZVBhdGgoY29uc3QgR3JhcGhpY3NQb2ludCogcGF0aCkKIHsKICAgICBQYXRoIHJlc3VsdDsK
LSAgICByZXN1bHQubW92ZVRvKEZsb2F0UG9pbnQocGF0aFswXS54KCksIHBhdGhbMF0ueSgpKSk7
CisgICAgcmVzdWx0Lm1vdmVUbyhHcmFwaGljc1BvaW50KHBhdGhbMF0ueCgpLCBwYXRoWzBdLnko
KSkpOwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNDsgKytpKQotICAgICAgICByZXN1bHQuYWRk
TGluZVRvKEZsb2F0UG9pbnQocGF0aFtpXS54KCksIHBhdGhbaV0ueSgpKSk7CisgICAgICAgIHJl
c3VsdC5hZGRMaW5lVG8oR3JhcGhpY3NQb2ludChwYXRoW2ldLngoKSwgcGF0aFtpXS55KCkpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVEb3duQXJyb3dQYXRo
KCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgRmxvYXRQb2ludCgwLjBmLCAwLjA3
ZiksIEZsb2F0UG9pbnQoMC41ZiwgMC45M2YpLCBGbG9hdFBvaW50KDEuMGYsIDAuMDdmKSwgRmxv
YXRQb2ludCgwLjBmLCAwLjA3ZikgfTsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50c1s0XSA9IHsg
R3JhcGhpY3NQb2ludCgwLjBmLCAwLjA3ZiksIEdyYXBoaWNzUG9pbnQoMC41ZiwgMC45M2YpLCBH
cmFwaGljc1BvaW50KDEuMGYsIDAuMDdmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAwLjA3ZikgfTsK
ICAgICByZXR1cm4gY3JlYXRlUGF0aChwb2ludHMpOwogfQogCiBzdGF0aWMgUGF0aCBjcmVhdGVV
cEFycm93UGF0aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7IEZsb2F0UG9pbnQo
MC4wZiwgMC45M2YpLCBGbG9hdFBvaW50KDAuNWYsIDAuMDdmKSwgRmxvYXRQb2ludCgxLjBmLCAw
LjkzZiksIEZsb2F0UG9pbnQoMC4wZiwgMC45M2YpIH07CisgICAgR3JhcGhpY3NQb2ludCBwb2lu
dHNbNF0gPSB7IEdyYXBoaWNzUG9pbnQoMC4wZiwgMC45M2YpLCBHcmFwaGljc1BvaW50KDAuNWYs
IDAuMDdmKSwgR3JhcGhpY3NQb2ludCgxLjBmLCAwLjkzZiksIEdyYXBoaWNzUG9pbnQoMC4wZiwg
MC45M2YpIH07CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3RhdGljIFBh
dGggY3JlYXRlTGVmdEFycm93UGF0aCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludHNbNF0gPSB7
IEZsb2F0UG9pbnQoMS4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4xNGYsIDAuNWYpLCBGbG9hdFBv
aW50KDEuMGYsIDEuMGYpLCBGbG9hdFBvaW50KDEuMGYsIDAuMGYpIH07CisgICAgR3JhcGhpY3NQ
b2ludCBwb2ludHNbNF0gPSB7IEdyYXBoaWNzUG9pbnQoMS4wZiwgMC4wZiksIEdyYXBoaWNzUG9p
bnQoMC4xNGYsIDAuNWYpLCBHcmFwaGljc1BvaW50KDEuMGYsIDEuMGYpLCBHcmFwaGljc1BvaW50
KDEuMGYsIDAuMGYpIH07CiAgICAgcmV0dXJuIGNyZWF0ZVBhdGgocG9pbnRzKTsKIH0KIAogc3Rh
dGljIFBhdGggY3JlYXRlUmlnaHRBcnJvd1BhdGgoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnRz
WzRdID0geyBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuODZmLCAwLjVmKSwg
RmxvYXRQb2ludCgwLjBmLCAxLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSB9OworICAgIEdy
YXBoaWNzUG9pbnQgcG9pbnRzWzRdID0geyBHcmFwaGljc1BvaW50KDAuMGYsIDAuMGYpLCBHcmFw
aGljc1BvaW50KDAuODZmLCAwLjVmKSwgR3JhcGhpY3NQb2ludCgwLjBmLCAxLjBmKSwgR3JhcGhp
Y3NQb2ludCgwLjBmLCAwLjBmKSB9OwogICAgIHJldHVybiBjcmVhdGVQYXRoKHBvaW50cyk7CiB9
CiAKQEAgLTExNiw3ICsxMTYsNyBAQCBQYXRoIFJlbmRlckRldGFpbHNNYXJrZXI6OmdldFBhdGgo
Y29uc3QgCiB7CiAgICAgUGF0aCByZXN1bHQgPSBnZXRDYW5vbmljYWxQYXRoKCk7CiAgICAgcmVz
dWx0LnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZShsb2dpY2FsSGVpZ2h0KCkpKTsK
LSAgICByZXN1bHQudHJhbnNsYXRlKEZsb2F0U2l6ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKSk7
CisgICAgcmVzdWx0LnRyYW5zbGF0ZShHcmFwaGljc1NpemUob3JpZ2luLngoKSwgb3JpZ2luLnko
KSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
cGFpbnRSZXBsYWNlZAogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBGbG9hdFJlY3QgY29udGVudFJlY3Q7CisgICAgR3JhcGhp
Y3NSZWN0IGNvbnRlbnRSZWN0OwogICAgIFBhdGggcGF0aDsKLSAgICBGbG9hdFJlY3QgcmVwbGFj
ZW1lbnRUZXh0UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgcmVwbGFjZW1lbnRUZXh0UmVjdDsKICAg
ICBGb250IGZvbnQ7CiAgICAgVGV4dFJ1biBydW4oIiIpOwogICAgIGZsb2F0IHRleHRXaWR0aDsK
QEAgLTE3NywxMCArMTc3LDEwIEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVw
bGFjZWQKICAgICBmbG9hdCBsYWJlbFkgPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5sb2Nh
dGlvbigpLnkoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAtIGZvbnRN
ZXRyaWNzLmhlaWdodCgpKSAvIDIgKyBmb250TWV0cmljcy5hc2NlbnQoKSk7CiAgICAgY29udGV4
dC0+c2V0QWxwaGEobV9taXNzaW5nUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1l
bnRUZXh0UHJlc3NlZFRleHRPcGFjaXR5IDogcmVwbGFjZW1lbnRUZXh0VGV4dE9wYWNpdHkpOwog
ICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2ssIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSk7Ci0gICAgY29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgRmxvYXRQb2ludChs
YWJlbFgsIGxhYmVsWSkpOworICAgIGNvbnRleHQtPmRyYXdCaWRpVGV4dChmb250LCBydW4sIEdy
YXBoaWNzUG9pbnQobGFiZWxYLCBsYWJlbFkpKTsKIH0KIAotYm9vbCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiBwYXRoLCBGbG9hdFJl
Y3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQm
IHRleHRXaWR0aCkKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgR3JhcGhpY3NS
ZWN0JiBjb250ZW50UmVjdCwgUGF0aCYgcGF0aCwgR3JhcGhpY3NSZWN0JiByZXBsYWNlbWVudFRl
eHRSZWN0LCBGb250JiBmb250LCBUZXh0UnVuJiBydW4sIGZsb2F0JiB0ZXh0V2lkdGgpCiB7CiAg
ICAgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIGNvbnRlbnRSZWN0Lm1vdmVC
eShhY2N1bXVsYXRlZE9mZnNldCk7CkBAIC0yMDAsMTIgKzIwMCwxMiBAQCBib29sIFJlbmRlckVt
YmVkZGVkT2JqZWN0OjpnZXRSZXBsYWNlbWVuCiAgICAgcnVuID0gVGV4dFJ1bihtX3JlcGxhY2Vt
ZW50VGV4dCk7CiAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0aChydW4pOwogICAgIAotICAgIHJl
cGxhY2VtZW50VGV4dFJlY3Quc2V0U2l6ZShGbG9hdFNpemUodGV4dFdpZHRoICsgcmVwbGFjZW1l
bnRUZXh0Um91bmRlZFJlY3RMZWZ0UmlnaHRUZXh0TWFyZ2luICogMiwgcmVwbGFjZW1lbnRUZXh0
Um91bmRlZFJlY3RIZWlnaHQpKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldFNpemUoR3Jh
cGhpY3NTaXplKHRleHRXaWR0aCArIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0TGVmdFJpZ2h0
VGV4dE1hcmdpbiAqIDIsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0SGVpZ2h0KSk7CiAgICAg
ZmxvYXQgeCA9IChjb250ZW50UmVjdC5zaXplKCkud2lkdGgoKSAvIDIgLSByZXBsYWNlbWVudFRl
eHRSZWN0LnNpemUoKS53aWR0aCgpIC8gMikgKyBjb250ZW50UmVjdC5sb2NhdGlvbigpLngoKTsK
ICAgICBmbG9hdCB5ID0gKGNvbnRlbnRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIgLSByZXBsYWNl
bWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAvIDIpICsgY29udGVudFJlY3QubG9jYXRpb24o
KS55KCk7Ci0gICAgcmVwbGFjZW1lbnRUZXh0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHgs
IHkpKTsKKyAgICByZXBsYWNlbWVudFRleHRSZWN0LnNldExvY2F0aW9uKEdyYXBoaWNzUG9pbnQo
eCwgeSkpOwogICAgIAotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVwbGFjZW1lbnRUZXh0UmVj
dCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzLCByZXBsYWNlbWVu
dFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVwbGFj
ZW1lbnRUZXh0UmVjdCwgR3JhcGhpY3NTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFk
aXVzLCByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cykpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yNTEsOSArMjUxLDkgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6dmll
d0NsZWFyZWQoKQogIAogYm9vbCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6aXNJbk1pc3NpbmdQbHVn
aW5JbmRpY2F0b3IoTW91c2VFdmVudCogZXZlbnQpCiB7Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRS
ZWN0OworICAgIEdyYXBoaWNzUmVjdCBjb250ZW50UmVjdDsKICAgICBQYXRoIHBhdGg7Ci0gICAg
RmxvYXRSZWN0IHJlcGxhY2VtZW50VGV4dFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IHJlcGxhY2Vt
ZW50VGV4dFJlY3Q7CiAgICAgRm9udCBmb250OwogICAgIFRleHRSdW4gcnVuKCIiKTsKICAgICBm
bG9hdCB0ZXh0V2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc2V0TWlzc2luZ1BsdWdpbkluZGljYXRv
cklzUHJlc3NlZChib29sKTsKICAgICBib29sIGlzSW5NaXNzaW5nUGx1Z2luSW5kaWNhdG9yKE1v
dXNlRXZlbnQqKTsKLSAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRSZWN0JiBjb250ZW50UmVjdCwgUGF0
aCYsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYsIFRleHRSdW4mLCBmbG9h
dCYgdGV4dFdpZHRoKTsKKyAgICBib29sIGdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgR3JhcGhpY3NSZWN0JiBjb250ZW50UmVj
dCwgUGF0aCYsIEdyYXBoaWNzUmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwgRm9udCYsIFRleHRS
dW4mLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIFN0cmluZyBtX3JlcGxhY2VtZW50VGV4dDsK
ICAgICBib29sIG1faGFzRmFsbGJhY2tDb250ZW50OyAvLyBGSVhNRTogVGhpcyBiZWxvbmdzIG9u
IEhUTUxPYmplY3RFbGVtZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Miw3ICs2OTIsNyBA
QCBib29sIFJlbmRlckZyYW1lU2V0Ojp1c2VyUmVzaXplKE1vdXNlRXZlCiAgICAgICAgIGlmIChu
ZWVkc0xheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoZXZ0
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2dC0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgewotICAgICAgICAgICAgRmxvYXRQb2ludCBwb3MgPSBsb2NhbFRvQWJz
b2x1dGUoKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9zID0gbG9jYWxUb0Fic29sdXRl
KCk7CiAgICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1fY29scywgZXZ0LT5hYnNvbHV0ZUxvY2F0
aW9uKCkueCgpIC0gcG9zLngoKSk7CiAgICAgICAgICAgICBzdGFydFJlc2l6aW5nKG1fcm93cywg
ZXZ0LT5hYnNvbHV0ZUxvY2F0aW9uKCkueSgpIC0gcG9zLnkoKSk7CiAgICAgICAgICAgICBpZiAo
bV9jb2xzLm1fc3BsaXRCZWluZ1Jlc2l6ZWQgIT0gbm9TcGxpdCB8fCBtX3Jvd3MubV9zcGxpdEJl
aW5nUmVzaXplZCAhPSBub1NwbGl0KSB7CkBAIC03MDIsNyArNzAyLDcgQEAgYm9vbCBSZW5kZXJG
cmFtZVNldDo6dXNlclJlc2l6ZShNb3VzZUV2ZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCB8fCAo
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldnQtPmJ1dHRvbigp
ID09IExlZnRCdXR0b24pKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBvcyA9IGxvY2FsVG9B
YnNvbHV0ZSgpOworICAgICAgICAgICAgR3JhcGhpY3NQb2ludCBwb3MgPSBsb2NhbFRvQWJzb2x1
dGUoKTsKICAgICAgICAgICAgIGNvbnRpbnVlUmVzaXppbmcobV9jb2xzLCBldnQtPmFic29sdXRl
TG9jYXRpb24oKS54KCkgLSBwb3MueCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlUmVzaXppbmco
bV9yb3dzLCBldnQtPmFic29sdXRlTG9jYXRpb24oKS55KCkgLSBwb3MueSgpKTsKICAgICAgICAg
ICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2dC0+
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCB2
b2lkIFJlbmRlckltYWdlOjppbWFnZURpbWVuc2lvbnNDaGFuZ2VkCiAgICAgICAgIGlmIChyZWN0
KSB7CiAgICAgICAgICAgICAvLyBUaGUgaW1hZ2UgY2hhbmdlZCByZWN0IGlzIGluIHNvdXJjZSBp
bWFnZSBjb29yZGluYXRlcyAocHJlLXpvb21pbmcpLAogICAgICAgICAgICAgLy8gc28gbWFwIGZy
b20gdGhlIGJvdW5kcyBvZiB0aGUgaW1hZ2UgdG8gdGhlIGNvbnRlbnRzQm94LgotICAgICAgICAg
ICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3QoKnJlY3QsIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXplKDEuMGYpKSwgY29udGVu
dEJveFJlY3QoKSkpOworICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KG1hcFJlY3QoKnJlY3QsIEdyYXBoaWNzUmVjdChHcmFwaGljc1BvaW50KCksIG1faW1hZ2VSZXNv
dXJjZS0+aW1hZ2VTaXplKDEuMGYpKSwgY29udGVudEJveFJlY3QoKSkpOwogICAgICAgICAgICAg
Ly8gR3VhcmQgYWdhaW5zdCB0b28tbGFyZ2UgY2hhbmdlZCByZWN0cy4KICAgICAgICAgICAgIHJl
cGFpbnRSZWN0LmludGVyc2VjdChjb250ZW50Qm94UmVjdCgpKTsKICAgICAgICAgfSBlbHNlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgog
CiAjaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKQEAgLTQ3MSw3ICs0
NzEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8CiAgICAgICAg
IGN1bGxlZElubGluZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvTGF5b3V0U2l6ZShhY2N1
bXVsYXRlZE9mZnNldCkpOwogICAgIGVsc2UgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJz
dExpbmVCb3goKSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5l
Qm94KCkpCi0gICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChGbG9h
dFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQgKyBjdXJyLT50b3BMZWZ0KCksIGN1cnItPnNpemUoKSkp
KTsKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0KEdyYXBoaWNz
UmVjdChhY2N1bXVsYXRlZE9mZnNldCArIGN1cnItPnRvcExlZnQoKSwgY3Vyci0+c2l6ZSgpKSkp
OwogICAgIH0gZWxzZQogICAgICAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChhY2N1bXVsYXRl
ZE9mZnNldCwgTGF5b3V0U2l6ZSgpKSk7CiAKQEAgLTQ5OSwxMSArNDk5LDExIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVIKICAgICAgICAgICAgICAgICBSb290SW5s
aW5lQm94KiByb290Qm94ID0gY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CiAg
ICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAo
cm9vdEJveC0+cmVuZGVyZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+
Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gt
PmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAg
ICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJv
eC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBHcmFwaGlj
c1JlY3QgcmVzdWx0OwogICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVjdChvZmZzZXQud2lkdGgoKSArIGN1cnJCb3gt
PmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBvZmZzZXQu
aGVpZ2h0KCkgKyBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2lu
TGVmdCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGN1cnJC
b3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBvZmZz
ZXQuaGVpZ2h0KCkgKyBsb2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFy
Z2luTGVmdCgpICsgY3VyckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qo
b2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjdXJyQm94LT5p
bmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2FsSGVp
Z2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJveC0+
bWFyZ2luQm90dG9tKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1Jl
Y3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjdXJyQm94
LT5pbmxpbmVCb3hXcmFwcGVyKCktPnkoKSAtIGN1cnJCb3gtPm1hcmdpblRvcCgpLCBsb2dpY2Fs
SGVpZ2h0LCBjdXJyQm94LT5oZWlnaHQoKSArIGN1cnJCb3gtPm1hcmdpblRvcCgpICsgY3VyckJv
eC0+bWFyZ2luQm90dG9tKCkpOwogICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN1
cnItPmlzUmVuZGVySW5saW5lKCkpIHsKQEAgLTUxNiwxNCArNTE2LDE0IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0ZVIKICAgICAgICAgICAgICAgICAgICAgUm9vdElu
bGluZUJveCogcm9vdEJveCA9IGNoaWxkTGluZS0+cm9vdCgpOwogICAgICAgICAgICAgICAgICAg
ICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5k
ZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1l
dHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAg
ICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJz
dExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
UmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBj
aGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGNo
aWxkTGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGxvZ2ljYWxUb3AsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGlu
ZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZsb2F0UmVj
dChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0LndpZHRoKCkgKyBsb2dpY2FsVG9wLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldC5oZWlnaHQoKSArIGNoaWxkTGluZS0+eSgpIC0g
Y2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5l
LT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxk
TGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpOwpAQCAtNTM2LDM3ICs1MzYsMzcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29sdXRlUgogICAgICAgICAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIHJvb3RCb3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJl
cigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHls
ZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGlu
dCBsb2dpY2FsSGVpZ2h0ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0
eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBG
bG9hdFJlY3QgcmVzdWx0OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gRmxvYXRSZWN0KG9mZnNldC53aWR0aCgpICsgY2hpbGRUZXh0LT54KCksIG9mZnNldC5o
ZWlnaHQoKSArIGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxI
ZWlnaHQpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmFwaGljc1JlY3Qob2Zmc2V0
LndpZHRoKCkgKyBjaGlsZFRleHQtPngoKSwgb2Zmc2V0LmhlaWdodCgpICsgbG9naWNhbFRvcCwg
Y2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3Qob2Zmc2V0Lndp
ZHRoKCkgKyBsb2dpY2FsVG9wLCBvZmZzZXQuaGVpZ2h0KCkgKyBjaGlsZFRleHQtPnkoKSwgbG9n
aWNhbEhlaWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChvZmZzZXQud2lkdGgoKSArIGxvZ2ljYWxUb3AsIG9m
ZnNldC5oZWlnaHQoKSArIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQt
PmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5n
SW50UmVjdChyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRz
KQordm9pZCBSZW5kZXJJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4m
IHF1YWRzKQogewogICAgIGlmICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIGN1
bGxlZElubGluZUFic29sdXRlUXVhZHModGhpcywgcXVhZHMpOwogICAgIGVsc2UgaWYgKElubGlu
ZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBmb3IgKDsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBsb2Nh
bFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgp
KTsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55
KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKICAgICAgICAgICAgIHF1YWRzLmFw
cGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwogICAgICAgICB9CiAgICAgfSBl
bHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgp
KSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVj
dCgpKSk7CiAKICAgICBpZiAoY29udGludWF0aW9uKCkpCiAgICAgICAgIGNvbnRpbnVhdGlvbigp
LT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElu
bGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxG
bG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVBYnNvbHV0
ZVF1YWRzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBWZWN0b3I8R3JhcGhpY3NRdWFk
PiYgcXVhZHMpCiB7CiAgICAgaWYgKCFjdWxsZWRJbmxpbmVGaXJzdExpbmVCb3goKSkgewotICAg
ICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoKSkpOworICAg
ICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QoKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01ODMsMTEgKzU4MywxMSBAQCB2b2lkIFJlbmRl
cklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVRCiAgICAgICAgICAgICAgICAgUm9vdElubGlu
ZUJveCogcm9vdEJveCA9IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwogICAg
ICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJv
b3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZv
bnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5p
c0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAg
ICAgICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gt
PmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwotICAg
ICAgICAgICAgICAgIEZsb2F0UmVjdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NS
ZWN0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigp
LT54KCkgLSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRo
KCkgKyBjdXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dp
Y2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0KGN1
cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eCgpIC0gY3VyckJveC0+bWFyZ2luTGVmdCgpLCBs
b2dpY2FsVG9wLCBjdXJyQm94LT53aWR0aCgpICsgY3VyckJveC0+bWFyZ2luTGVmdCgpICsgY3Vy
ckJveC0+bWFyZ2luUmlnaHQoKSwgbG9naWNhbEhlaWdodCk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwgY3Vy
ckJveC0+aW5saW5lQm94V3JhcHBlcigpLT55KCkgLSBjdXJyQm94LT5tYXJnaW5Ub3AoKSwgbG9n
aWNhbEhlaWdodCwgY3VyckJveC0+aGVpZ2h0KCkgKyBjdXJyQm94LT5tYXJnaW5Ub3AoKSArIGN1
cnJCb3gtPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3Jh
cGhpY3NSZWN0KGxvZ2ljYWxUb3AsIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0g
Y3VyckJveC0+bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsg
Y3VyckJveC0+bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3Vyci0+aXNSZW5kZXJJbmxpbmUoKSkgewpA
QCAtNjAwLDE0ICs2MDAsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUFic29s
dXRlUQogICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gY2hpbGRM
aW5lLT5yb290KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJv
eC0+bG9naWNhbFRvcCgpICsgKHJvb3RCb3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFp
bmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0ID0g
Y29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9u
dE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IEZsb2F0UmVjdChjaGlsZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExl
ZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChjaGls
ZExpbmUtPngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkTGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0
KCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBGbG9hdFJlY3QobG9naWNhbFRvcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyYXBoaWNzUmVjdChsb2dpY2FsVG9wLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+eSgpIC0gY2hpbGRMaW5lLT5tYXJn
aW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxIZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMaW5lLT5sb2dpY2FsV2lkdGgo
KSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9n
aWNhbFJpZ2h0KCkpOwpAQCAtNjIwLDExICs2MjAsMTEgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmN1
bGxlZElubGluZUFic29sdXRlUQogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RC
b3ggPSBjaGlsZFRleHQtPnJvb3QoKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IHJvb3RCb3gtPmxvZ2ljYWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290
Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAt
IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpOwogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsSGVpZ2h0
ID0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpLT5mb250KCku
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcmVzdWx0
OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAg
aWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmxvYXRSZWN0
KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3JhcGhpY3NSZWN0
KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBjaGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IEZsb2F0UmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhl
aWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IEdyYXBoaWNzUmVjdChsb2dpY2FsVG9wLCBjaGlsZFRleHQtPnkoKSwgbG9naWNhbEhl
aWdodCwgY2hpbGRUZXh0LT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgICAgICAgICAgICAgcXVhZHMu
YXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQocmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTc2OCwxNSArNzY4LDE1IEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsaW5l
c0JvdW5kaW5nQm8KICAgICAgICAgZmxvYXQgeSA9IGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZUJv
eCgpLT55KCkgOiBsb2dpY2FsTGVmdFNpZGU7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gaXNIb3Jp
em9udGFsID8gbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZSA6IGxhc3RMaW5lQm94
KCktPmxvZ2ljYWxCb3R0b20oKSAtIHg7CiAgICAgICAgIGZsb2F0IGhlaWdodCA9IGlzSG9yaXpv
bnRhbCA/IGxhc3RMaW5lQm94KCktPmxvZ2ljYWxCb3R0b20oKSAtIHkgOiBsb2dpY2FsUmlnaHRT
aWRlIC0gbG9naWNhbExlZnRTaWRlOwotICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdMYXlvdXRS
ZWN0KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHJlc3VsdCA9IGVu
Y2xvc2luZ0xheW91dFJlY3QoR3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GbG9hdFJlY3QgUmVuZGVySW5saW5lOjpj
dWxsZWRJbmxpbmVCb3VuZGluZ0JveChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29u
c3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZUJvdW5kaW5nQm94KGNv
bnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZXN1
bHQ7CisgICAgR3JhcGhpY3NSZWN0IHJlc3VsdDsKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCkBAIC03OTEsOSAr
NzkxLDkgQEAgRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lQm91bgogICAgICAg
ICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gcm9vdEJveC0+bG9naWNhbFRvcCgpICsgKHJvb3RC
b3gtPnJlbmRlcmVyKCktPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnQo
KS5mb250TWV0cmljcygpLmFzY2VudCgpIC0gY29udGFpbmVyLT5zdHlsZShyb290Qm94LT5pc0Zp
cnN0TGluZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAg
ICAgICAgICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlz
Rmlyc3RMaW5lU3R5bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAgICAg
ICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bml0ZUlmTm9uWmVybyhGbG9hdFJlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkg
LSBjdXJyQm94LT5tYXJnaW5MZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBj
dXJyQm94LT5tYXJnaW5MZWZ0KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVp
Z2h0KSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVybyhHcmFwaGlj
c1JlY3QoY3VyckJveC0+aW5saW5lQm94V3JhcHBlcigpLT54KCkgLSBjdXJyQm94LT5tYXJnaW5M
ZWZ0KCksIGxvZ2ljYWxUb3AsIGN1cnJCb3gtPndpZHRoKCkgKyBjdXJyQm94LT5tYXJnaW5MZWZ0
KCkgKyBjdXJyQm94LT5tYXJnaW5SaWdodCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxv
YXRSZWN0KGxvZ2ljYWxUb3AsIGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3Vy
ckJveC0+bWFyZ2luVG9wKCksIGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3Vy
ckJveC0+bWFyZ2luVG9wKCkgKyBjdXJyQm94LT5tYXJnaW5Cb3R0b20oKSkpOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0KGxvZ2ljYWxUb3As
IGN1cnJCb3gtPmlubGluZUJveFdyYXBwZXIoKS0+eSgpIC0gY3VyckJveC0+bWFyZ2luVG9wKCks
IGxvZ2ljYWxIZWlnaHQsIGN1cnJCb3gtPmhlaWdodCgpICsgY3VyckJveC0+bWFyZ2luVG9wKCkg
KyBjdXJyQm94LT5tYXJnaW5Cb3R0b20oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGN1cnItPmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBj
aGlsZCBkb2Vzbid0IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgpA
QCAtODA2LDEyICs4MDYsMTIgQEAgRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5l
Qm91bgogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IHJvb3RCb3gtPmxvZ2lj
YWxUb3AoKSArIChyb290Qm94LT5yZW5kZXJlcigpLT5zdHlsZShyb290Qm94LT5pc0ZpcnN0TGlu
ZVN0eWxlKCkpLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGNvbnRhaW5lci0+c3R5
bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5l
ci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRSZWN0KGNoaWxk
TGluZS0+eCgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNzUmVjdChjaGlsZExpbmUt
PngoKSAtIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
TGluZS0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBj
aGlsZExpbmUtPm1hcmdpbkxvZ2ljYWxSaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxIZWlnaHQpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEZsb2F0UmVjdChsb2dpY2FsVG9w
LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKEdyYXBoaWNz
UmVjdChsb2dpY2FsVG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTGluZS0+
eSgpIC0gY2hpbGRMaW5lLT5tYXJnaW5Mb2dpY2FsTGVmdCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp
bGRMaW5lLT5sb2dpY2FsV2lkdGgoKSArIGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbExlZnQoKSAr
IGNoaWxkTGluZS0+bWFyZ2luTG9naWNhbFJpZ2h0KCkpKTsKQEAgLTgyNSw5ICs4MjUsOSBAQCBG
bG9hdFJlY3QgUmVuZGVySW5saW5lOjpjdWxsZWRJbmxpbmVCb3VuCiAgICAgICAgICAgICAgICAg
aW50IGxvZ2ljYWxUb3AgPSByb290Qm94LT5sb2dpY2FsVG9wKCkgKyAocm9vdEJveC0+cmVuZGVy
ZXIoKS0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkgLSBjb250YWluZXItPnN0eWxlKHJvb3RCb3gtPmlzRmlyc3RMaW5lU3R5
bGUoKSktPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpKTsKICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEhlaWdodCA9IGNvbnRhaW5lci0+c3R5bGUocm9vdEJveC0+aXNGaXJzdExpbmVT
dHlsZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25a
ZXJvKEZsb2F0UmVjdChjaGlsZFRleHQtPngoKSwgbG9naWNhbFRvcCwgY2hpbGRUZXh0LT5sb2dp
Y2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5pdGVJZk5vblplcm8oR3JhcGhpY3NSZWN0KGNoaWxkVGV4dC0+eCgpLCBsb2dpY2FsVG9wLCBj
aGlsZFRleHQtPmxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8oRmxvYXRS
ZWN0KGxvZ2ljYWxUb3AsIGNoaWxkVGV4dC0+eSgpLCBsb2dpY2FsSGVpZ2h0LCBjaGlsZFRleHQt
PmxvZ2ljYWxXaWR0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9u
WmVybyhHcmFwaGljc1JlY3QobG9naWNhbFRvcCwgY2hpbGRUZXh0LT55KCksIGxvZ2ljYWxIZWln
aHQsIGNoaWxkVGV4dC0+bG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTEzNDAsMTIgKzEzNDAsMTIgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZv
Y3VzUmluZ1JlY3RzKFZlYwogICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKHRoaXMs
IHJlY3RzLCB0b0xheW91dFNpemUoYWRkaXRpb25hbE9mZnNldCkpOwogICAgIGVsc2UgewogICAg
ICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3Vy
ciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9z
aW5nTGF5b3V0UmVjdChGbG9hdFJlY3QoYWRkaXRpb25hbE9mZnNldC54KCkgKyBjdXJyLT54KCks
IGFkZGl0aW9uYWxPZmZzZXQueSgpICsgY3Vyci0+eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5o
ZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdMYXlvdXRSZWN0
KEdyYXBoaWNzUmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwgYWRkaXRpb25h
bE9mZnNldC55KCkgKyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkp
OwogICAgIH0KIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWN1cnItPmlz
VGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkgewotICAgICAgICAgICAgRmxvYXRQb2lu
dCBwb3MoYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IHBvcyhh
ZGRpdGlvbmFsT2Zmc2V0KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29y
ayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAgICAgICAgICAgaWYgKGN1cnItPmhhc0xh
eWVyKCkpIAogICAgICAgICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgpOwpA
QCAtMTUzNiw3ICsxNTM2LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZERhc2hib2FyZFJlZ2lv
bnMoVgogICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKCk7
CisgICAgICAgIEdyYXBoaWNzUG9pbnQgYWJzUG9zID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1
dGUoKTsKICAgICAgICAgcmVnaW9uLmJvdW5kcy5zZXRYKGFic1Bvcy54KCkgKyByZWdpb24uYm91
bmRzLngoKSk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQb3MueSgpICsgcmVnaW9u
LmJvdW5kcy55KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBMYXlvdXRVbml0IG1hcmdpbkVuZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGlj
c1F1YWQ+Jik7CiAKICAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCkBAIC05OCwxMiArOTgs
MTIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEZsb2F0UmVjdCBjdWxsZWRJbmxpbmVCb3VuZGluZ0Jv
eChjb25zdCBSZW5kZXJJbmxpbmUqIGNvbnRhaW5lcikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0
IGN1bGxlZElubGluZUJvdW5kaW5nQm94KGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBj
b25zdDsKICAgICBJbnRSZWN0IGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3go
KSBjb25zdDsKICAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0
OwogICAgIElubGluZUJveCogY3VsbGVkSW5saW5lTGFzdExpbmVCb3goKSBjb25zdDsKICAgICB2
b2lkIGN1bGxlZElubGluZUFic29sdXRlUmVjdHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWlu
ZXIsIFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIGN1bGxlZElu
bGluZUFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxG
bG9hdFF1YWQ+Jik7CisgICAgdm9pZCBjdWxsZWRJbmxpbmVBYnNvbHV0ZVF1YWRzKGNvbnN0IFJl
bmRlcklubGluZSogY29udGFpbmVyLCBWZWN0b3I8R3JhcGhpY3NRdWFkPiYpOwogCiAgICAgdm9p
ZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQgPSAwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0j
aW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVk
ZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgpAQCAtNzQyLDE1ICs3NDIsMTUgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
UmVuZGVyTGF5ZXI6OnBlcnNwZQogICAgIHJldHVybiB0OwogfQogCi1GbG9hdFBvaW50IFJlbmRl
ckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CitHcmFwaGljc1BvaW50IFJlbmRlckxh
eWVyOjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLT5o
YXNUcmFuc2Zvcm0oKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzUG9pbnQoKTsKIAogICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9S
ZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKTsKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc3R5
bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC53aWR0aCgp
KSwKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCku
Y2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94LndpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblkoKS5jYWxjRmxvYXRWYWx1ZShib3JkZXJCb3guaGVp
Z2h0KCkpKTsKIH0KIApAQCAtMTEyNCw3ICsxMTI0LDcgQEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRU
b0xheWVyQ29vcmRzKGNvbnN0IAogICAgIGlmIChwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uICYm
ICghYW5jZXN0b3JMYXllciB8fCBhbmNlc3RvckxheWVyID09IHJlbmRlcmVyKCktPnZpZXcoKS0+
bGF5ZXIoKSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGZpeGVkIGxheWVyJ3MgY29udGFpbmVyIGlz
IHRoZSByb290LCBqdXN0IGFkZCBpbiB0aGUgb2Zmc2V0IG9mIHRoZSB2aWV3LiBXZSBjYW4gb2J0
YWluIHRoaXMgYnkgY2FsbGluZwogICAgICAgICAvLyBsb2NhbFRvQWJzb2x1dGUoKSBvbiB0aGUg
UmVuZGVyVmlldy4KLSAgICAgICAgRmxvYXRQb2ludCBhYnNQb3MgPSByZW5kZXJlcigpLT5sb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCB0cnVlKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBh
YnNQb3MgPSByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUoR3JhcGhpY3NQb2ludCgpLCB0cnVl
KTsKICAgICAgICAgbG9jYXRpb24gKz0gZmxvb3JlZEludFNpemUoYWJzUG9zKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTEzNjUsNyArMTM2NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFRvKGludCB4LCBpbnQgeSkKICAgICAgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8g
YmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCiAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS0+c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKIAotICAgICAgICBGbG9hdFF1YWQgcXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgICAg
IEdyYXBoaWNzUXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gR3JhcGhpY3NRdWFkKHJl
Y3RGb3JSZXBhaW50KTsKICAgICAgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCiAgICAgICAgICAg
ICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKICAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7CkBAIC0xNDAxLDcgKzE0MDEsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvCiAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50
IHVzIGZyb20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJT
Uy4KICAgICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICAgICAgQVNTRVJU
KGJveCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gYm94LT5sb2NhbFRvQWJzb2x1dGUo
KTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBib3gtPmxvY2FsVG9BYnNvbHV0ZSgp
OwogICAgICAgICBhYnNQb3MubW92ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5ib3JkZXJUb3Ao
KSk7CiAKICAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoYWJzUG9zLngoKSAr
IHNjcm9sbFhPZmZzZXQoKSwgYWJzUG9zLnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgYm94LT5jbGll
bnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsKQEAgLTI5MDQsMTAgKzI5MDQsMTAgQEAg
c3RhdGljIGRvdWJsZSBjb21wdXRlWk9mZnNldChjb25zdCBIaXRUZQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIC8vIEZsYXR0ZW4gdGhlIHBvaW50IGludG8gdGhlIHRhcmdldCBwbGFuZQotICAg
IEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQgPSB0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpOwor
ICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQgPSB0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2lu
dCgpOwogICAgIAogICAgIC8vIE5vdyBtYXAgdGhlIHBvaW50IGJhY2sgdGhyb3VnaCB0aGUgdHJh
bnNmb3JtLCB3aGljaCBjb21wdXRlcyBaLgotICAgIEZsb2F0UG9pbnQzRCBiYWNrbWFwcGVkUG9p
bnQgPSB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0
UG9pbnQzRCh0YXJnZXRQb2ludCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBiYWNrbWFwcGVkUG9p
bnQgPSB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1hcFBvaW50KEdyYXBo
aWNzUG9pbnQzRCh0YXJnZXRQb2ludCkpOwogICAgIHJldHVybiBiYWNrbWFwcGVkUG9pbnQueigp
OwogfQogCkBAIC0yOTI0LDcgKzI5MjQsNyBAQCBQYXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZT4gUmVuCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmly
c3QgdGltZSB3ZSBuZWVkIHRvIG1ha2UgdHJhbnNmb3JtIHN0YXRlLCB0aGVuIGJhc2UgaXQgb2Zm
IG9mIGhpdFRlc3RQb2ludCwKICAgICAgICAgLy8gd2hpY2ggaXMgcmVsYXRpdmUgdG8gcm9vdExh
eWVyLgotICAgICAgICB0cmFuc2Zvcm1TdGF0ZSA9IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6
Y3JlYXRlKGhpdFRlc3RQb2ludCwgRmxvYXRRdWFkKGhpdFRlc3RSZWN0KSk7CisgICAgICAgIHRy
YW5zZm9ybVN0YXRlID0gSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpjcmVhdGUoaGl0VGVzdFBv
aW50LCBHcmFwaGljc1F1YWQoaGl0VGVzdFJlY3QpKTsKICAgICAgICAgY29udmVydFRvTGF5ZXJD
b29yZHMocm9vdExheWVyLCBvZmZzZXQpOwogICAgIH0KICAgICAKQEAgLTM0OTEsNyArMzQ5MSw3
IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJlY3QoKSAKICAgICBSZW5kZXJM
YXllciogY2xpcHBpbmdSb290TGF5ZXIgPSBjbGlwcGluZ1Jvb3QoKTsKICAgICBJbnRSZWN0IGxh
eWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0Owog
ICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBwaW5nUm9vdExheWVyLCByZW5kZXJWaWV3LT5kb2N1bWVu
dFJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0
bGluZVJlY3QpOwotICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoZm9yZWdyb3VuZFJlY3QpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOworICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXllci0+cmVuZGVyZXIoKS0+bG9j
YWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1F1YWQoZm9yZWdyb3VuZFJlY3QpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOwogfQogCiBJbnRSZWN0IFJlbmRlckxheWVyOjpzZWxmQ2xpcFJlY3QoKSBj
b25zdApAQCAtMzUwMCw3ICszNTAwLDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6c2VsZkNsaXBS
ZWN0KCkgY29ucwogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RMYXllciA9IGNsaXBwaW5n
Um9vdCgpOwogICAgIEludFJlY3QgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3Jv
dW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAgICAgY2FsY3VsYXRlUmVjdHMoY2xpcHBpbmdSb290TGF5
ZXIsIHJlbmRlclZpZXctPmRvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJl
Y3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCk7Ci0gICAgcmV0dXJuIGNsaXBwaW5nUm9v
dExheWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChiYWNrZ3Jv
dW5kUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIGNsaXBwaW5nUm9v
dExheWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChiYWNr
Z3JvdW5kUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBJbnRSZWN0JiBib3VuZHMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDI1LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGxheWVyIGhhcyBhIC13ZWJraXQtcGVyc3BlY3RpdmUuCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMg
dHJhbnNmb3JtIGhhcyB0aGUgcGVyc3BlY3RpdmUtb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHBlcnNwZWN0aXZlVHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgRmxvYXRQ
b2ludCBwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgcGVyc3Bl
Y3RpdmVPcmlnaW4oKSBjb25zdDsKICAgICBib29sIHByZXNlcnZlczNEKCkgY29uc3QgeyByZXR1
cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0
eWxlM0RQcmVzZXJ2ZTNEOyB9CiAgICAgYm9vbCBoYXMzRFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNmb3JtICYmICFtX3RyYW5zZm9ybS0+aXNBZmZpbmUoKTsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk1LDcgKzM5NSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICAgICAgLy8gZm9yIGEgY29tcG9zaXRpbmcg
bGF5ZXIsIHJvb3RMYXllciBpcyB0aGUgbGF5ZXIgaXRzZWxmLgogICAgICAgICBJbnRSZWN0IHBh
cmVudENsaXBSZWN0ID0gbV9vd25pbmdMYXllci0+YmFja2dyb3VuZENsaXBSZWN0KGNvbXBBbmNl
c3RvciwgdHJ1ZSk7CiAgICAgICAgIEFTU0VSVChwYXJlbnRDbGlwUmVjdCAhPSBQYWludEluZm86
OmluZmluaXRlUmVjdCgpKTsKLSAgICAgICAgbV9hbmNlc3RvckNsaXBwaW5nTGF5ZXItPnNldFBv
c2l0aW9uKEZsb2F0UG9pbnQoKSArIChwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpIC0gZ3JhcGhp
Y3NMYXllclBhcmVudExvY2F0aW9uKSk7CisgICAgICAgIG1fYW5jZXN0b3JDbGlwcGluZ0xheWVy
LT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAocGFyZW50Q2xpcFJlY3QubG9jYXRpb24o
KSAtIGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbikpOwogICAgICAgICBtX2FuY2VzdG9yQ2xp
cHBpbmdMYXllci0+c2V0U2l6ZShwYXJlbnRDbGlwUmVjdC5zaXplKCkpOwogCiAgICAgICAgIC8v
IGJhY2tncm91bmRSZWN0IGlzIHJlbGF0aXZlIHRvIGNvbXBBbmNlc3Rvciwgc28gc3VidHJhY3Qg
ZGVsdGFYL2RlbHRhWSB0byBnZXQgYmFjayB0byBsb2NhbCBjb29yZHMuCkBAIC00MDUsNyArNDA1
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICBn
cmFwaGljc0xheWVyUGFyZW50TG9jYXRpb24gPSBwYXJlbnRDbGlwUmVjdC5sb2NhdGlvbigpOwog
ICAgIH0KIAotICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsg
KHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBoaWNzTGF5ZXJQYXJl
bnRMb2NhdGlvbikpOworICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UG9zaXRpb24oR3JhcGhpY3NQ
b2ludCgpICsgKHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSAtIGdyYXBoaWNz
TGF5ZXJQYXJlbnRMb2NhdGlvbikpOwogICAgIAogICAgIEludFNpemUgb2xkT2Zmc2V0RnJvbVJl
bmRlcmVyID0gbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKICAgICBtX2dy
YXBoaWNzTGF5ZXItPnNldE9mZnNldEZyb21SZW5kZXJlcihsb2NhbENvbXBvc2l0aW5nQm91bmRz
LmxvY2F0aW9uKCkgLSBJbnRQb2ludCgpKTsKQEAgLTQxNCw4ICs0MTQsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgaWYgKG9sZE9mZnNldEZyb21SZW5k
ZXJlciAhPSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKQogICAgICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgIAotICAgIEZsb2F0U2l6ZSBv
bGRTaXplID0gbV9ncmFwaGljc0xheWVyLT5zaXplKCk7Ci0gICAgRmxvYXRTaXplIG5ld1NpemUg
PSByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLnNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgb2xk
U2l6ZSA9IG1fZ3JhcGhpY3NMYXllci0+c2l6ZSgpOworICAgIEdyYXBoaWNzU2l6ZSBuZXdTaXpl
ID0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy5zaXplKCk7CiAgICAgaWYgKG9sZFNpemUgIT0g
bmV3U2l6ZSkgewogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CiAg
ICAgICAgIC8vIEEgYm91bmRzIGNoYW5nZSB3aWxsIGFsbW9zdCBhbHdheXMgcmVxdWlyZSByZWRp
c3BsYXkuIFVzdWFsbHkgdGhhdCByZWRpc3BsYXkKQEAgLTQyOCw3ICs0MjgsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgSW50UmVjdCBjbGlwcGluZ0Jv
eDsKICAgICBpZiAobV9jbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIGNsaXBwaW5nQm94ID0gY2xp
cEJveCh0b1JlbmRlckJveChyZW5kZXJlcigpKSk7Ci0gICAgICAgIG1fY2xpcHBpbmdMYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludCgpICsgKGNsaXBwaW5nQm94LmxvY2F0aW9uKCkgLSBsb2Nh
bENvbXBvc2l0aW5nQm91bmRzLmxvY2F0aW9uKCkpKTsKKyAgICAgICAgbV9jbGlwcGluZ0xheWVy
LT5zZXRQb3NpdGlvbihHcmFwaGljc1BvaW50KCkgKyAoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAt
IGxvY2FsQ29tcG9zaXRpbmdCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX2NsaXBwaW5n
TGF5ZXItPnNldFNpemUoY2xpcHBpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgbV9jbGlwcGluZ0xh
eWVyLT5zZXRPZmZzZXRGcm9tUmVuZGVyZXIoY2xpcHBpbmdCb3gubG9jYXRpb24oKSAtIEludFBv
aW50KCkpOwogICAgIH0KQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR3JhcGhpY3NMCiAgICAgICAgICAgICBtX21hc2tMYXllci0+c2V0U2l6ZShtX2dy
YXBoaWNzTGF5ZXItPnNpemUoKSk7CiAgICAgICAgICAgICBtX21hc2tMYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9tYXNrTGF5ZXItPnNldFBvc2l0aW9uKEZs
b2F0UG9pbnQoKSk7CisgICAgICAgIG1fbWFza0xheWVyLT5zZXRQb3NpdGlvbihHcmFwaGljc1Bv
aW50KCkpOwogICAgICAgICBtX21hc2tMYXllci0+c2V0T2Zmc2V0RnJvbVJlbmRlcmVyKG1fZ3Jh
cGhpY3NMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOwogICAgIH0KICAgICAKQEAgLTQ0OSw5
ICs0NDksOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMCiAgICAg
ICAgIEludFJlY3QgbGF5ZXJCb3VuZHMgPSBJbnRSZWN0KGRlbHRhLCBib3JkZXJCb3guc2l6ZSgp
KTsKIAogICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllcyB0aGF0IGRlcGVuZCBvbiBsYXllciBk
aW1lbnNpb25zCi0gICAgICAgIEZsb2F0UG9pbnQzRCB0cmFuc2Zvcm1PcmlnaW4gPSBjb21wdXRl
VHJhbnNmb3JtT3JpZ2luKGJvcmRlckJveCk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCB0cmFu
c2Zvcm1PcmlnaW4gPSBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGJvcmRlckJveCk7CiAgICAgICAg
IC8vIENvbXB1dGUgdGhlIGFuY2hvciBwb2ludCwgd2hpY2ggaXMgaW4gdGhlIGNlbnRlciBvZiB0
aGUgcmVuZGVyZXIgYm94IHVubGVzcyB0cmFuc2Zvcm0tb3JpZ2luIGlzIHNldC4KLSAgICAgICAg
RmxvYXRQb2ludDNEIGFuY2hvcihyZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLndpZHRoKCkgICE9
IDAuMGYgPyAoKGxheWVyQm91bmRzLngoKSAtIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMueCgp
KSArIHRyYW5zZm9ybU9yaWdpbi54KCkpIC8gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy53aWR0
aCgpICA6IDAuNWYsCisgICAgICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3IocmVsYXRpdmVDb21w
b3NpdGluZ0JvdW5kcy53aWR0aCgpICAhPSAwLjBmID8gKChsYXllckJvdW5kcy54KCkgLSByZWxh
dGl2ZUNvbXBvc2l0aW5nQm91bmRzLngoKSkgKyB0cmFuc2Zvcm1PcmlnaW4ueCgpKSAvIHJlbGF0
aXZlQ29tcG9zaXRpbmdCb3VuZHMud2lkdGgoKSAgOiAwLjVmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMuaGVpZ2h0KCkgIT0gMC4wZiA/ICgo
bGF5ZXJCb3VuZHMueSgpIC0gcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy55KCkpICsgdHJhbnNm
b3JtT3JpZ2luLnkoKSkgLyByZWxhdGl2ZUNvbXBvc2l0aW5nQm91bmRzLmhlaWdodCgpIDogMC41
ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW4ueigpKTsKICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRBbmNob3JQb2ludChhbmNob3IpOwpAQCAtNDczLDE3
ICs0NzMsMTcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAg
ICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX2dy
YXBoaWNzTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLjVmLCAwLjVmLCAwKSk7
CisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NQb2ludDNE
KDAuNWYsIDAuNWYsIDApKTsKICAgICB9CiAKICAgICBpZiAobV9mb3JlZ3JvdW5kTGF5ZXIpIHsK
LSAgICAgICAgRmxvYXRQb2ludCBmb3JlZ3JvdW5kUG9zaXRpb247Ci0gICAgICAgIEZsb2F0U2l6
ZSBmb3JlZ3JvdW5kU2l6ZSA9IG5ld1NpemU7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgZm9yZWdy
b3VuZFBvc2l0aW9uOworICAgICAgICBHcmFwaGljc1NpemUgZm9yZWdyb3VuZFNpemUgPSBuZXdT
aXplOwogICAgICAgICBJbnRTaXplIGZvcmVncm91bmRPZmZzZXQgPSBtX2dyYXBoaWNzTGF5ZXIt
Pm9mZnNldEZyb21SZW5kZXJlcigpOwogICAgICAgICBpZiAobV9jbGlwcGluZ0xheWVyKSB7CiAg
ICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgY2xpcHBpbmcgbGF5ZXIgKHdoaWNoIGNsaXBzIGRl
c2NlbmRhbnRzKSwgdGhlbiB0aGUgZm9yZWdyb3VuZCBsYXllciBpcyBhIGNoaWxkIG9mIGl0LAog
ICAgICAgICAgICAgLy8gc28gdGhhdCBpdCBnZXRzIGNvcnJlY3RseSBzb3J0ZWQgd2l0aCBjaGls
ZHJlbi4gSW4gdGhhdCBjYXNlLCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgY2xpcHBpbmcgbGF5
ZXIuCi0gICAgICAgICAgICBmb3JlZ3JvdW5kU2l6ZSA9IEZsb2F0U2l6ZShjbGlwcGluZ0JveC5z
aXplKCkpOworICAgICAgICAgICAgZm9yZWdyb3VuZFNpemUgPSBHcmFwaGljc1NpemUoY2xpcHBp
bmdCb3guc2l6ZSgpKTsKICAgICAgICAgICAgIGZvcmVncm91bmRPZmZzZXQgPSBjbGlwcGluZ0Jv
eC5sb2NhdGlvbigpIC0gSW50UG9pbnQoKTsKICAgICAgICAgfQogCkBAIC00OTgsOSArNDk4LDkg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAgICAKICAg
ICAgICAgLy8gVGhlIHJlZmxlY3Rpb24gbGF5ZXIgaGFzIHRoZSBib3VuZHMgb2YgbV9vd25pbmdM
YXllci0+cmVmbGVjdGlvbkxheWVyKCksCiAgICAgICAgIC8vIGJ1dCB0aGUgcmVmbGVjdGVkIGxh
eWVyIGlzIHRoZSBib3VuZHMgb2YgdGhpcyBsYXllciwgc28gd2UgbmVlZCB0byBwb3NpdGlvbiBp
dCBhcHByb3ByaWF0ZWx5LgotICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBjb21wb3Np
dGVkQm91bmRzKCk7Ci0gICAgICAgIEZsb2F0UmVjdCByZWZsZWN0aW9uTGF5ZXJCb3VuZHMgPSBy
ZWZsZWN0aW9uQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwotICAgICAgICByZWZsZWN0aW9u
QmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5zZXRSZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbihGbG9h
dFBvaW50KCkgKyAobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlZmxlY3Rpb25MYXllckJvdW5k
cy5sb2NhdGlvbigpKSk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBsYXllckJvdW5kcyA9IGNvbXBv
c2l0ZWRCb3VuZHMoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHJlZmxlY3Rpb25MYXllckJvdW5k
cyA9IHJlZmxlY3Rpb25CYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCk7CisgICAgICAgIHJlZmxl
Y3Rpb25CYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRMYXllclBvc2l0aW9u
KEdyYXBoaWNzUG9pbnQoKSArIChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVmbGVjdGlvbkxh
eWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICB9CiAKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzUmVjdChjb250ZW50c0JveCgpKTsKQEAgLTk4NSwxMSArOTg1LDExIEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnQKICAgICBpbWFnZS0+c3RhcnRBbmlt
YXRpb24oKTsKIH0KIAotRmxvYXRQb2ludDNEIFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVRy
YW5zZm9ybU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CitHcmFwaGljc1Bv
aW50M0QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IElu
dFJlY3QmIGJvcmRlckJveCkgY29uc3QKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJlcigpLT5zdHlsZSgpOwogCi0gICAgRmxvYXRQb2ludDNEIG9yaWdpbjsKKyAgICBHcmFwaGlj
c1BvaW50M0Qgb3JpZ2luOwogICAgIG9yaWdpbi5zZXRYKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5Y
KCkuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94LndpZHRoKCkpKTsKICAgICBvcmlnaW4uc2V0WShz
dHlsZS0+dHJhbnNmb3JtT3JpZ2luWSgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC5oZWlnaHQo
KSkpOwogICAgIG9yaWdpbi5zZXRaKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5aKCkpOwpAQCAtOTk3
LDE0ICs5OTcsMTQgQEAgRmxvYXRQb2ludDNEIFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZQog
ICAgIHJldHVybiBvcmlnaW47CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyTGF5ZXJCYWNraW5nOjpj
b21wdXRlUGVyc3BlY3RpdmVPcmlnaW4oY29uc3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdAor
R3JhcGhpY3NQb2ludCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQZXJzcGVjdGl2ZU9yaWdp
bihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0CiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKIAogICAgIGZsb2F0IGJveFdpZHRoID0gYm9yZGVy
Qm94LndpZHRoKCk7CiAgICAgZmxvYXQgYm94SGVpZ2h0ID0gYm9yZGVyQm94LmhlaWdodCgpOwog
Ci0gICAgRmxvYXRQb2ludCBvcmlnaW47CisgICAgR3JhcGhpY3NQb2ludCBvcmlnaW47CiAgICAg
b3JpZ2luLnNldFgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJv
eFdpZHRoKSk7CiAgICAgb3JpZ2luLnNldFkoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWSgpLmNh
bGNGbG9hdFZhbHVlKGJveEhlaWdodCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50M0QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC0xNjQsOSArMTY0LDkgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBJbnRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OwogICAg
IC8vIFJlc3VsdCBpcyB0cmFuc2Zvcm0gb3JpZ2luIGluIHBpeGVscy4KLSAgICBGbG9hdFBvaW50
M0QgY29tcHV0ZVRyYW5zZm9ybU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0
OworICAgIEdyYXBoaWNzUG9pbnQzRCBjb21wdXRlVHJhbnNmb3JtT3JpZ2luKGNvbnN0IEludFJl
Y3QmIGJvcmRlckJveCkgY29uc3Q7CiAgICAgLy8gUmVzdWx0IGlzIHBlcnNwZWN0aXZlIG9yaWdp
biBpbiBwaXhlbHMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlUGVyc3BlY3RpdmVPcmlnaW4oY29u
c3QgSW50UmVjdCYgYm9yZGVyQm94KSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IGNvbXB1dGVQ
ZXJzcGVjdGl2ZU9yaWdpbihjb25zdCBJbnRSZWN0JiBib3JkZXJCb3gpIGNvbnN0OwogCiAgICAg
dm9pZCB1cGRhdGVMYXllck9wYWNpdHkoY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICB2b2lkIHVw
ZGF0ZUxheWVyVHJhbnNmb3JtKGNvbnN0IFJlbmRlclN0eWxlKik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXAKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFi
b3VuZHNDb21wdXRlZCkgewotICAgICAgICBsYXllckJvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigp
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgp
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgbGF5ZXJCb3VuZHMgPSBsYXllci0+
cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobGF5ZXItPmxvY2Fs
Qm91bmRpbmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgIC8vIEVtcHR5
IHJlY3RzIG5ldmVyIGludGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBv
c2VzIG9mIG92ZXJsYXAgdGVzdGluZy4KICAgICAgICAgaWYgKGxheWVyQm91bmRzLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGxheWVyQm91bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CkBAIC02
NDQsNyArNjQ0LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wbwog
ICAgIEludFJlY3QgYWJzQm91bmRzOwogICAgIGlmIChvdmVybGFwTWFwICYmICFvdmVybGFwTWFw
LT5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gSWYgd2UncmUgdGVzdGluZyBmb3Igb3ZlcmxhcCwg
d2Ugb25seSBuZWVkIHRvIGNvbXBvc2l0ZSBpZiB3ZSBvdmVybGFwIHNvbWV0aGluZyB0aGF0IGlz
IGFscmVhZHkgY29tcG9zaXRlZC4KLSAgICAgICAgYWJzQm91bmRzID0gbGF5ZXItPnJlbmRlcmVy
KCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5nQm94
KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBhYnNCb3VuZHMgPSBsYXllci0+
cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1JlY3QobGF5ZXItPmxvY2Fs
Qm91bmRpbmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAgIC8vIEVtcHR5
IHJlY3RzIG5ldmVyIGludGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBv
c2VzIG9mIG92ZXJsYXAgdGVzdGluZy4KICAgICAgICAgaWYgKGFic0JvdW5kcy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICBhYnNCb3VuZHMuc2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKQEAgLTk0NSw3
ICs5NDUsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkCiAgICAg
ICAgIG1fY2xpcExheWVyLT5zZXRTaXplKGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZh
bHNlIC8qIGV4Y2x1ZGUgc2Nyb2xsYmFycyAqLykuc2l6ZSgpKTsKIAogICAgICAgICBJbnRQb2lu
dCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAg
bV9zY3JvbGxMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgp
LCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPnNldFBvc2l0
aW9uKEdyYXBoaWNzUG9pbnQoLXNjcm9sbFBvc2l0aW9uLngoKSwgLXNjcm9sbFBvc2l0aW9uLnko
KSkpOwogICAgICAgICB1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCk7CiAgICAgfQogfQpA
QCAtOTUzLDcgKzk1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdE
aWQKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRTY3JvbGwoY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewogICAgIGlmIChtX3Njcm9sbExheWVyKQotICAg
ICAgICBtX3Njcm9sbExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3NpdGlv
bi54KCksIC1zY3JvbGxQb3NpdGlvbi55KCkpKTsKKyAgICAgICAgbV9zY3JvbGxMYXllci0+c2V0
UG9zaXRpb24oR3JhcGhpY3NQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRp
b24ueSgpKSk7CiB9CiAKIFN0cmluZyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyVHJlZUFz
VGV4dChib29sIHNob3dEZWJ1Z0luZm8pCkBAIC0xNjE3LDggKzE2MTcsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExhCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBt
X3Jvb3RDb250ZW50TGF5ZXItPnNldE5hbWUoIlJvb3QgcGxhdGZvcm0iKTsKICNlbmRpZgotICAg
ICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKG1fcmVuZGVyVmlldy0+
bWF4WExheW91dE92ZXJmbG93KCksIG1fcmVuZGVyVmlldy0+bWF4WUxheW91dE92ZXJmbG93KCkp
KTsKLSAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KCkp
OworICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXItPnNldFNpemUoR3JhcGhpY3NTaXplKG1fcmVu
ZGVyVmlldy0+bWF4WExheW91dE92ZXJmbG93KCksIG1fcmVuZGVyVmlldy0+bWF4WUxheW91dE92
ZXJmbG93KCkpKTsKKyAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRQb3NpdGlvbihHcmFw
aGljc1BvaW50KCkpOwogCiAgICAgICAgIC8vIE5lZWQgdG8gY2xpcCB0byBwcmV2ZW50IHRyYW5z
Zm9ybWVkIGNvbnRlbnQgc2hvd2luZyBvdXRzaWRlIHRoaXMgZnJhbWUKICAgICAgICAgbV9yb290
Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3OSw3ICs0NzksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQ
CiAgICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDQ7CiAKICAgICAvLyBGSVhNRTogVGhpcyBk
b2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KLSAgICBGbG9hdFBvaW50IGFi
c09mZnNldCA9IGxvY2FsVG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzT2Zmc2V0
ID0gbG9jYWxUb0Fic29sdXRlKCk7CiAKICAgICBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlv
biA9IGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwogICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgbW91c2UgcG9zaXRpb24gaXMgb3V0
IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUg
cG9zaXRpb24gaXMgaW5jb2hlcmVudApAQCAtNTIxLDcgKzUyMSw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFAKIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3dh
cmQoY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGRv
ZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgotICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gbG9jYWxUb0Fic29sdXRlKCk7CisgICAgR3JhcGhpY3NQb2ludCBhYnNQb3MgPSBsb2Nh
bFRvQWJzb2x1dGUoKTsKICAgICBpbnQgb2Zmc2V0WCA9IGRlc3RpbmF0aW9uLngoKSAtIGFic1Bv
cy54KCk7CiAgICAgaW50IG9mZnNldFkgPSBkZXN0aW5hdGlvbi55KCkgLSBhYnNQb3MueSgpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxMSw3ICsxNzExLDcgQEAgTGF5b3V0UmVj
dCBSZW5kZXJMaXN0TWFya2VyOjpzZWxlY3Rpb25SZQogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29u
dGVudCkKICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJl
Y3QpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0
UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAg
ICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVw
YWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAKICAgICByZXR1cm4g
cmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRy
b2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVk
aWFDb250cm9scy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNSArNzEs
MTUgQEAgc3RhdGljIFdLTWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSBkZXRlcgogfQogCiAvLyBV
dGlsaXR5IHRvIHNjYWxlIHdoZW4gdGhlIFVJIHBhcnQgYXJlIG5vdCBzY2FsZWQgYnkgd2tEcmF3
TWVkaWFVSVBhcnQKLXN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3Vy
cmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQorc3RhdGljIEdyYXBoaWNzUmVjdCBnZXRVbnpv
b21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3QpCiB7CiAgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIEZsb2F0
UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29t
ZWRSZWN0KG9yaWdpbmFsUmVjdCk7CiAgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAg
ICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZl
bCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgp
IC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpv
b21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7
CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCks
IC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHVuem9vbWVkUmVjdDsKQEAg
LTE0Niw3ICsxNDYsNyBAQCBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNZWRpYVNsaWRlcjogewogICAgICAg
ICAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFF
bGVtZW50KG8pKSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdl
dFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7Cisg
ICAgICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVj
dEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgICAgICAg
ICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayh0aGVtZVN0eWxlLCBwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgbWVkaWFFbGVtZW50LT5wZXJjZW50TG9h
ZGVkKCkgKiBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCksIG1lZGlhRWxlbWVudC0+Y3VycmVudFRp
bWUoKSwgbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4OSw3ICsxODksNyBAQCBJbnRQb2lu
dCBSZW5kZXJNZWRpYUNvbnRyb2xzOjp2b2x1bWVTbGlkCiAKICAgICBmbG9hdCB6b29tTGV2ZWwg
PSBtdXRlQnV0dG9uQm94LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAgICAgaW50IHkgPSB5
T2Zmc2V0ICogem9vbUxldmVsICsgbXV0ZUJ1dHRvbkJveC0+b2Zmc2V0SGVpZ2h0KCkgLSBzaXpl
LmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJzUG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludChtdXRlQnV0dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0
cnVlLCB0cnVlKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+
bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQobXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgp
LCB5KSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgaWYgKGFic1BvaW50LnkoKSA8IDApCiAgICAgICAgIHkg
PSBtdXRlQnV0dG9uQm94LT5oZWlnaHQoKTsKICAgICByZXR1cm4gSW50UG9pbnQoeE9mZnNldCAq
IHpvb21MZXZlbCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIHZv
aWQgUmVuZGVyTWVudUxpc3Q6OnNob3dQb3B1cCgpCiAKICAgICAvLyBDb21wdXRlIHRoZSB0b3Ag
bGVmdCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQsIGJ1dCB1c2UKICAgICAvLyB0aGUg
YWN0dWFsIHdpZHRoIG9mIHRoZSBlbGVtZW50IHRvIHNpemUgdGhlIHBvcHVwLgotICAgIEZsb2F0
UG9pbnQgYWJzVG9wTGVmdCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0
cnVlKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1RvcExlZnQgPSBsb2NhbFRvQWJzb2x1dGUoR3Jh
cGhpY3NQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CiAgICAgSW50UmVjdCBhYnNCb3VuZHMgPSBhYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgIGFic0JvdW5kcy5zZXRMb2NhdGlvbihyb3VuZGVk
SW50UG9pbnQoYWJzVG9wTGVmdCkpOwogICAgIG1fcG9wdXAtPnNob3coYWJzQm91bmRzLCBkb2N1
bWVudCgpLT52aWV3KCksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
IkN1cnNvckxpc3QuaCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJFZGl0aW5n
Qm91bmRhcnkuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1
YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtODY5LDMxICs4NjksMzEgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OmRyYXdMaW5lRm9yQm94U2lkZShHcgogICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0U3Ryb2tlU3R5bGUob2xkU3Ryb2tlU3R5bGUpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcXVhZFs0XTsKKyAg
ICAgICAgICAgIEdyYXBoaWNzUG9pbnQgcXVhZFs0XTsKICAgICAgICAgICAgIHN3aXRjaCAoc2lk
ZSkgewogICAgICAgICAgICAgICAgIGNhc2UgQlNUb3A6Ci0gICAgICAgICAgICAgICAgICAgIHF1
YWRbMF0gPSBGbG9hdFBvaW50KHgxICsgbWF4KC1hZGphY2VudFdpZHRoMSwgMCksIHkxKTsKLSAg
ICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoeDEgKyBtYXgoYWRqYWNlbnRX
aWR0aDEsIDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50
KHgyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSwgeTIpOwotICAgICAgICAgICAgICAgICAgICBx
dWFkWzNdID0gRmxvYXRQb2ludCh4MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7Cisg
ICAgICAgICAgICAgICAgICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxICsgbWF4KC1hZGph
Y2VudFdpZHRoMSwgMCksIHkxKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFsxXSA9IEdyYXBo
aWNzUG9pbnQoeDEgKyBtYXgoYWRqYWNlbnRXaWR0aDEsIDApLCB5Mik7CisgICAgICAgICAgICAg
ICAgICAgIHF1YWRbMl0gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAw
KSwgeTIpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiAt
IG1heCgtYWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgQlNCb3R0b206Ci0gICAgICAgICAgICAgICAgICAgIHF1
YWRbMF0gPSBGbG9hdFBvaW50KHgxICsgbWF4KGFkamFjZW50V2lkdGgxLCAwKSwgeTEpOwotICAg
ICAgICAgICAgICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCh4MSArIG1heCgtYWRqYWNlbnRX
aWR0aDEsIDApLCB5Mik7Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50
KHgyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCksIHkyKTsKLSAgICAgICAgICAgICAgICAgICAg
cXVhZFszXSA9IEZsb2F0UG9pbnQoeDIgLSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7Cisg
ICAgICAgICAgICAgICAgICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxICsgbWF4KGFkamFj
ZW50V2lkdGgxLCAwKSwgeTEpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhp
Y3NQb2ludCh4MSArIG1heCgtYWRqYWNlbnRXaWR0aDEsIDApLCB5Mik7CisgICAgICAgICAgICAg
ICAgICAgIHF1YWRbMl0gPSBHcmFwaGljc1BvaW50KHgyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwg
MCksIHkyKTsKKyAgICAgICAgICAgICAgICAgICAgcXVhZFszXSA9IEdyYXBoaWNzUG9pbnQoeDIg
LSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApLCB5MSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgICAgICAgICAgICBxdWFk
WzBdID0gRmxvYXRQb2ludCh4MSwgeTEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBGbG9hdFBvaW50KHgxLCB5MiAtIG1heCgtYWRqYWNl
bnRXaWR0aDIsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQo
eDIsIHkyIC0gbWF4KGFkamFjZW50V2lkdGgyLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHF1
YWRbM10gPSBGbG9hdFBvaW50KHgyLCB5MSArIG1heChhZGphY2VudFdpZHRoMSwgMCkpOworICAg
ICAgICAgICAgICAgICAgICBxdWFkWzBdID0gR3JhcGhpY3NQb2ludCh4MSwgeTEgKyBtYXgoLWFk
amFjZW50V2lkdGgxLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBHcmFwaGlj
c1BvaW50KHgxLCB5MiAtIG1heCgtYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAgICAgICAgICAgICAg
ICAgICAgcXVhZFsyXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyIC0gbWF4KGFkamFjZW50V2lkdGgy
LCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHF1YWRbM10gPSBHcmFwaGljc1BvaW50KHgyLCB5
MSArIG1heChhZGphY2VudFdpZHRoMSwgMCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIEJTUmlnaHQ6Ci0gICAgICAgICAgICAgICAgICAgIHF1YWRb
MF0gPSBGbG9hdFBvaW50KHgxLCB5MSArIG1heChhZGphY2VudFdpZHRoMSwgMCkpOwotICAgICAg
ICAgICAgICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCh4MSwgeTIgLSBtYXgoYWRqYWNlbnRX
aWR0aDIsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoeDIs
IHkyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwgMCkpOwotICAgICAgICAgICAgICAgICAgICBxdWFk
WzNdID0gRmxvYXRQb2ludCh4MiwgeTEgKyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSk7CisgICAg
ICAgICAgICAgICAgICAgIHF1YWRbMF0gPSBHcmFwaGljc1BvaW50KHgxLCB5MSArIG1heChhZGph
Y2VudFdpZHRoMSwgMCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzFdID0gR3JhcGhpY3NQ
b2ludCh4MSwgeTIgLSBtYXgoYWRqYWNlbnRXaWR0aDIsIDApKTsKKyAgICAgICAgICAgICAgICAg
ICAgcXVhZFsyXSA9IEdyYXBoaWNzUG9pbnQoeDIsIHkyIC0gbWF4KC1hZGphY2VudFdpZHRoMiwg
MCkpOworICAgICAgICAgICAgICAgICAgICBxdWFkWzNdID0gR3JhcGhpY3NQb2ludCh4MiwgeTEg
KyBtYXgoLWFkamFjZW50V2lkdGgxLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogCkBAIC0xMDg1LDcgKzEwODUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6
cGFpbnRPdXRsaW5lKEdyYXBoaWNzCiBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKQogewogICAgIGlmICh1c2VUcmFuc2Zvcm1z
KSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgICAgICBWZWN0b3I8R3Jh
cGhpY3NRdWFkPiBxdWFkczsKICAgICAgICAgYWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAKICAgICAg
ICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBJbnRSZWN0
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JvCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKKyAg
ICBHcmFwaGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZSgpOwogICAgIFZlY3RvcjxJ
bnRSZWN0PiByZWN0czsKICAgICBhYnNvbHV0ZVJlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9p
bnQoYWJzUG9zKSk7CiAKQEAgLTExMTIsMjAgKzExMTIsMjAgQEAgSW50UmVjdCBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlQm91bmRpbmdCbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFk
cykKK3ZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxHcmFw
aGljc1F1YWQ+JiBxdWFkcykKIHsKICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CiAgICAgLy8g
RklYTUU6IGFkZEZvY3VzUmluZ1JlY3RzKCkgbmVlZHMgdG8gYmUgcGFzc2VkIHRoaXMgdHJhbnNm
b3JtLXVuYXdhcmUKICAgICAvLyBsb2NhbFRvQWJzb2x1dGUoKSBvZmZzZXQgaGVyZSBiZWNhdXNl
IFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoKQogICAgIC8vIGltcGxpY2l0bHkgYXNz
dW1lcyB0aGF0LiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1lZAog
ICAgIC8vIGRlc2NlbmRhbnRzLgotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IGxvY2Fs
VG9BYnNvbHV0ZSgpOworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVQb2ludCA9IGxvY2FsVG9B
YnNvbHV0ZSgpOwogICAgIGFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQo
YWJzb2x1dGVQb2ludCkpOwogICAgIHNpemVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsgCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIEludFJlY3QgcmVj
dCA9IHJlY3RzW2ldOwogICAgICAgICByZWN0Lm1vdmUoLWFic29sdXRlUG9pbnQueCgpLCAtYWJz
b2x1dGVQb2ludC55KCkpOwotICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVh
ZChGbG9hdFF1YWQocmVjdCkpKTsKKyAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0
ZVF1YWQoR3JhcGhpY3NRdWFkKHJlY3QpKSk7CiAgICAgfQogfQogCkBAIC0xODIzLDcgKzE4MjMs
NyBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6dmlld1JlY3QoKSBjb25zdAogICAgIHJldHVybiB2
aWV3KCktPnZpZXdSZWN0KCk7CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0Ojpsb2NhbFRv
QWJzb2x1dGUoY29uc3QgRmxvYXRQb2ludCYgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1
c2VUcmFuc2Zvcm1zKSBjb25zdAorR3JhcGhpY3NQb2ludCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9B
YnNvbHV0ZShjb25zdCBHcmFwaGljc1BvaW50JiBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29s
IHVzZVRyYW5zZm9ybXMpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3Rh
dGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGlyZWN0aW9uLCBsb2NhbFBvaW50KTsK
ICAgICBtYXBMb2NhbFRvQ29udGFpbmVyKDAsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zv
cm1TdGF0ZSk7CkBAIC0xODMyLDcgKzE4MzIsNyBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6
bG9jYWxUb0Fic29sdXRlCiAgICAgcmV0dXJuIHRyYW5zZm9ybVN0YXRlLmxhc3RQbGFuYXJQb2lu
dCgpOwogfQogCi1GbG9hdFBvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsKGNvbnN0
IEZsb2F0UG9pbnQmIGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9y
bXMpIGNvbnN0CitHcmFwaGljc1BvaW50IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUb0xvY2FsKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRy
YW5zZm9ybXMpIGNvbnN0CiB7CiAgICAgVHJhbnNmb3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJh
bnNmb3JtU3RhdGU6OlVuYXBwbHlJbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uLCBjb250YWluZXJQ
b2ludCk7CiAgICAgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMs
IHRyYW5zZm9ybVN0YXRlKTsKQEAgLTE4OTksNyArMTg5OSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpnZXRUcmFuc2Zvcm1Gcm9tQ29udGEKICAgICBpZiAoY29udGFpbmVyT2JqZWN0ICYmIGNvbnRh
aW5lck9iamVjdC0+aGFzTGF5ZXIoKSAmJiBjb250YWluZXJPYmplY3QtPnN0eWxlKCktPmhhc1Bl
cnNwZWN0aXZlKCkpIHsKICAgICAgICAgLy8gUGVycHNlY3RpdmUgb24gdGhlIGNvbnRhaW5lciBh
ZmZlY3RzIHVzLCBzbyB3ZSBoYXZlIHRvIGZhY3RvciBpdCBpbiBoZXJlLgogICAgICAgICBBU1NF
UlQoY29udGFpbmVyT2JqZWN0LT5oYXNMYXllcigpKTsKLSAgICAgICAgRmxvYXRQb2ludCBwZXJz
cGVjdGl2ZU9yaWdpbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+
bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwZXJz
cGVjdGl2ZU9yaWdpbiA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY29udGFpbmVyT2JqZWN0KS0+
bGF5ZXIoKS0+cGVyc3BlY3RpdmVPcmlnaW4oKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwZXJzcGVjdGl2ZU1hdHJpeDsKICAgICAgICAgcGVyc3BlY3RpdmVNYXRyaXguYXBwbHlQ
ZXJzcGVjdGl2ZShjb250YWluZXJPYmplY3QtPnN0eWxlKCktPnBlcnNwZWN0aXZlKCkpOwpAQCAt
MTkxMyw3ICsxOTEzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRyYW5zZm9ybUZyb21Db250
YQogI2VuZGlmCiB9CiAKLUZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9Db250YWluZXJR
dWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbCBmaXhlZCkgY29uc3QKK0dyYXBoaWNzUXVhZCBSZW5kZXJPYmpl
Y3Q6OmxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYgbG9jYWxRdWFkLCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCkgY29uc3QK
IHsKICAgICAvLyBUcmFjayB0aGUgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZCdzIGJv
dW5kaW5nIGJveC4gQXMgbWFwTG9jYWxUb0NvbnRhaW5lcigpIGNhbGxzIG9mZnNldEZyb21Db250
YWluZXIoKSwKICAgICAvLyBpdCB3aWxsIHVzZSB0aGF0IHBvaW50IGFzIHRoZSByZWZlcmVuY2Ug
cG9pbnQgdG8gZGVjaWRlIHdoaWNoIGNvbHVtbidzIHRyYW5zZm9ybSB0byBhcHBseSBpbiBtdWx0
aXBsZS1jb2x1bW4gYmxvY2tzLgpAQCAtMjM3MSw3ICsyMzcxLDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OmFkZERhc2hib2FyZFJlZ2lvbnMoVgogICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0V2lk
dGgoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9B
YnNvbHV0ZSgpOworICAgICAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0
ZSgpOwogICAgICAgICByZWdpb24uYm91bmRzLnNldFgoYWJzUG9zLngoKSArIHN0eWxlUmVnaW9u
Lm9mZnNldC5sZWZ0KCkudmFsdWUoKSk7CiAgICAgICAgIHJlZ2lvbi5ib3VuZHMuc2V0WShhYnNQ
b3MueSgpICsgc3R5bGVSZWdpb24ub2Zmc2V0LnRvcCgpLnZhbHVlKCkpOwogCkBAIC0yNTg3LDI0
ICsyNTg3LDI0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXROZWVkc0JvdW5kYXJpZXNVcGQKICAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzQm91bmRhcmllc1VwZGF0ZSgpOwogfQogCi1GbG9hdFJl
Y3QgUmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1JlY3Qg
UmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6c3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVjdDo6c3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIC8vIFJldHVybnMgdGhlIHNtYWxs
ZXN0IHJlY3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRlbnQKIC8vIHJl
c3BlY3RpbmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9rZS13aWR0
aCBhbmQgbWFya2VycwotRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlck9iamVjdDo6cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9
CiAKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJPYmplY3Q6OmxvY2FsVHJhbnNmb3JtKCkgY29uc3QK
QEAgLTI2MTksNyArMjYxOSw3IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVuZGVyT2JqZWN0
Ojpsb2MKICAgICByZXR1cm4gaWRlbnRpdHk7CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpub2Rl
QXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBIaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJPYmplY3Q6Om5vZGVBdEdy
YXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYsIEhpdFRlc3RBY3Rpb24pCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UXVhZC5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgpAQCAtMzcyLDEyICszNzIsMTIg
QEAgcHVibGljOgogICAgIC8vIHNpbmNlIHN0cm9rZS13aWR0aCBpcyBpZ25vcmVkIChhbmQgbWFy
a2VyIHNpemUgY2FuIGRlcGVuZCBvbiBzdHJva2Utd2lkdGgpLgogICAgIC8vIG9iamVjdEJvdW5k
aW5nQm94IGlzIHJldHVybmVkIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIC8vIFRoZSBuYW1lIG9i
amVjdEJvdW5kaW5nQm94IGlzIHRha2VuIGZyb20gdGhlIFNWRyAxLjEgc3BlYy4KLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1Jl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0aGUgc21hbGxlc3Qg
cmVjdGFuZ2xlIGVuY2xvc2luZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29udGVudAogICAgIC8vIHJl
c3BlY3RpbmcgY2xpcHBpbmcsIG1hc2tpbmcsIGZpbHRlcnMsIG9wYWNpdHksIHN0cm9rZS13aWR0
aCBhbmQgbWFya2VycwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgb25seSByZXR1cm5zIHRo
ZSB0cmFuc2Zvcm09IiIgdmFsdWUgZnJvbSB0aGUgZWxlbWVudAogICAgIC8vIG1vc3QgY2FsbHNp
dGVzIHdhbnQgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGluc3RlYWQuCkBAIC0zODcsMTAgKzM4
NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBpbmNsdWRlcyBhbnkgdmlld3BvcnQgdHJhbnNm
b3JtcyBhbmQgeC95IG9mZnNldHMgYXMgd2VsbCBhcyB0aGUgdHJhbnNmb3JtPSIiIHZhbHVlIG9m
ZiB0aGUgZWxlbWVudC4KICAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxU
b1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0OwogCi0gICAgLy8gU1ZHIHVzZXMgRmxvYXRQb2ludCBw
cmVjaXNlIGhpdCB0ZXN0aW5nLCBhbmQgcGFzc2VzIHRoZSBwb2ludCBpbiBwYXJlbnQKKyAgICAv
LyBTVkcgdXNlcyBHcmFwaGljc1BvaW50IHByZWNpc2UgaGl0IHRlc3RpbmcsIGFuZCBwYXNzZXMg
dGhlIHBvaW50IGluIHBhcmVudAogICAgIC8vIGNvb3JkaW5hdGVzIGluc3RlYWQgb2YgaW4gcmVw
YWludCBjb250YWluZXIgY29vcmRpbmF0ZXMuICBFdmVudHVhbGx5IHRoZQogICAgIC8vIHJlc3Qg
b2YgdGhlIHJlbmRlcmluZyB0cmVlIHdpbGwgbW92ZSB0byBhIHNpbWlsYXIgbW9kZWwuCi0gICAg
dmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
bik7CisgICAgdmlydHVhbCBib29sIG5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVu
dCwgSGl0VGVzdEFjdGlvbik7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNBbm9ueW1vdXMoKSBjb25z
dCB7IHJldHVybiBtX2lzQW5vbnltb3VzOyB9CkBAIC01NzUsMTYgKzU3NSwxNiBAQCBwdWJsaWM6
CiAKICAgICAvLyBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBjb29y
ZGluYXRlcwogICAgIC8vIEZJWE1FOiBUZW1wb3JhcnkuIElmIHVzZVRyYW5zZm9ybXMgaXMgdHJ1
ZSwgdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4gRXZlbnR1YWxseSBsb2NhbFRvQWJzb2x1
dGUoKSB3aWxsIGFsd2F5cyBiZSB0cmFuc2Zvcm0tYXdhcmUuCi0gICAgRmxvYXRQb2ludCBsb2Nh
bFRvQWJzb2x1dGUoY29uc3QgRmxvYXRQb2ludCYgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7Ci0g
ICAgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgZml4
ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0OworICAgIEdyYXBo
aWNzUG9pbnQgbG9jYWxUb0Fic29sdXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIGxvY2FsUG9pbnQg
PSBHcmFwaGljc1BvaW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1z
ID0gZmFsc2UpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgYWJzb2x1dGVUb0xvY2FsKGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9
IGZhbHNlKSBjb25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFic29sdXRl
IGNvb3JkaW5hdGVzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCi0gICAgRmxvYXRR
dWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBib29sIGZpeGVk
ID0gZmFsc2UpIGNvbnN0CisgICAgR3JhcGhpY3NRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29u
c3QgR3JhcGhpY3NRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbG9jYWxUb0NvbnRhaW5lclF1YWQocXVhZCwgMCwgZml4ZWQpOwogICAg
IH0KICAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3Rl
bSBvZiBjb250YWluZXIsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLSAgICBGbG9h
dFF1YWQgbG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgR3JhcGhpY3NRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEdyYXBoaWNzUXVhZCYs
IFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFs
c2UpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVy
KCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKS4gSW4gbXVsdGktY29sdW1uIGxheW91
dCwKICAgICAvLyBkaWZmZXJlbnQgb2Zmc2V0cyBhcHBseSBhdCBkaWZmZXJlbnQgcG9pbnRzLCBz
byByZXR1cm4gdGhlIG9mZnNldCB0aGF0IGFwcGxpZXMgdG8gdGhlIGdpdmVuIHBvaW50LgpAQCAt
NTk3LDkgKzU5Nyw5IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hS
ZWN0KGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIC8vIEJ1aWxkIGFuIGFycmF5
IG9mIHF1YWRzIGluIGFic29sdXRlIGNvb3JkcyBmb3IgbGluZSBib3hlcwotICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JikgeyB9CisgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKSB7IH0KIAotICAgIHZvaWQg
YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZvaWQgYWJz
b2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpOwogCiAgICAgLy8gdGhl
IHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIGFzIHRo
ZSBwYWludGluZ1Jvb3QKICAgICBMYXlvdXRSZWN0IHBhaW50aW5nUm9vdFJlY3QoTGF5b3V0UmVj
dCYgdG9wTGV2ZWxSZWN0KTsKQEAgLTEwNzYsMjcgKzEwNzYsMjcgQEAgaW5saW5lIGludCBhZGp1
c3RGb3JBYnNvbHV0ZVpvb20oaW50IHZhbAogICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpv
b20odmFsdWUsIHJlbmRlcmVyLT5zdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgYWRqdXN0Rmxv
YXRRdWFkRm9yQWJzb2x1dGVab29tKEZsb2F0UXVhZCYgcXVhZCwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKK2lubGluZSB2b2lkIGFkanVzdEdyYXBoaWNzUXVhZEZvckFic29sdXRlWm9vbShHcmFw
aGljc1F1YWQmIHF1YWQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgZmxvYXQgem9v
bSA9IHJlbmRlcmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAgICAgaWYgKHpvb20gIT0g
MSkKICAgICAgICAgcXVhZC5zY2FsZSgxIC8gem9vbSwgMSAvIHpvb20pOwogfQogCi1pbmxpbmUg
dm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20oRmxvYXRSZWN0JiByZWN0LCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQoraW5saW5lIHZvaWQgYWRqdXN0R3JhcGhpY3NSZWN0Rm9yQWJz
b2x1dGVab29tKEdyYXBoaWNzUmVjdCYgcmVjdCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsK
ICAgICBmbG9hdCB6b29tID0gcmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAg
ICBpZiAoem9vbSAhPSAxKQogICAgICAgICByZWN0LnNjYWxlKDEgLyB6b29tLCAxIC8gem9vbSk7
CiB9CiAKLWlubGluZSB2b2lkIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShGbG9hdFF1YWQm
IHF1YWQsIGZsb2F0IHBhZ2VTY2FsZSkKK2lubGluZSB2b2lkIGFkanVzdEdyYXBoaWNzUXVhZEZv
clBhZ2VTY2FsZShHcmFwaGljc1F1YWQmIHF1YWQsIGZsb2F0IHBhZ2VTY2FsZSkKIHsKICAgICBp
ZiAocGFnZVNjYWxlICE9IDEpCiAgICAgICAgIHF1YWQuc2NhbGUoMSAvIHBhZ2VTY2FsZSwgMSAv
IHBhZ2VTY2FsZSk7CiB9CiAKLWlubGluZSB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclBhZ2VTY2Fs
ZShGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHBhZ2VTY2FsZSkKK2lubGluZSB2b2lkIGFkanVzdEdy
YXBoaWNzUmVjdEZvclBhZ2VTY2FsZShHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0IHBhZ2VTY2Fs
ZSkKIHsKICAgICBpZiAocGFnZVNjYWxlICE9IDEpCiAgICAgICAgIHJlY3Quc2NhbGUoMSAvIHBh
Z2VTY2FsZSwgMSAvIHBhZ2VTY2FsZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIy
OSw3IEBAIExheW91dFVuaXQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWMKIAogICAgIC8v
IDEwLjMuMiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1lbnRzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9D
U1MyMS92aXN1ZGV0Lmh0bWwjaW5saW5lLXJlcGxhY2VkLXdpZHRoCiAgICAgYm9vbCBpc1BlcmNl
bnRhZ2VJbnRyaW5zaWNTaXplID0gZmFsc2U7Ci0gICAgRmxvYXRTaXplIGludHJpbnNpY1JhdGlv
OworICAgIEdyYXBoaWNzU2l6ZSBpbnRyaW5zaWNSYXRpbzsKICAgICBpZiAoY29udGVudFJlbmRl
cmVyKSB7CiAgICAgICAgIGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZUludHJpbnNpY1JhdGlvSW5m
b3JtYXRpb24oaW50cmluc2ljUmF0aW8sIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpOwogICAg
ICAgICBjb250ZW50UmVuZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXItPnN0eWxlKCk7CkBAIC0z
MjYsNyArMzI2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhYwog
CiAgICAgLy8gMTAuNi4yIElubGluZSwgcmVwbGFjZWQgZWxlbWVudHM6IGh0dHA6Ly93d3cudzMu
b3JnL1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCNpbmxpbmUtcmVwbGFjZWQtaGVpZ2h0CiAgICAgYm9v
bCBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplID0gZmFsc2U7Ci0gICAgRmxvYXRTaXplIGludHJp
bnNpY1JhdGlvOworICAgIEdyYXBoaWNzU2l6ZSBpbnRyaW5zaWNSYXRpbzsKICAgICBpZiAoY29u
dGVudFJlbmRlcmVyKSB7CiAgICAgICAgIGNvbnRlbnRSZW5kZXJlci0+Y29tcHV0ZUludHJpbnNp
Y1JhdGlvSW5mb3JtYXRpb24oaW50cmluc2ljUmF0aW8sIGlzUGVyY2VudGFnZUludHJpbnNpY1Np
emUpOwogICAgICAgICBjb250ZW50UmVuZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXItPnN0eWxl
KCk7CkBAIC00NDIsNyArNDQyLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJSZXBsYWNlZDo6c2VsZWN0
aW9uUmVjdAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgY29tcHV0ZVJl
Y3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwogICAgIGVsc2UKLSAgICAgICAg
cmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRh
aW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250
YWluZXJRdWFkKEdyYXBoaWNzUmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKICAgICAKICAgICByZXR1cm4gcmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAK
ICNpbmNsdWRlICJDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lv
biA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5o
IgogI2luY2x1ZGUgIkVsbGlwc2lzQm94LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NRdWFkLmgiCiAjaW5jbHVkZSAiRm9udFRyYW5zY29kZXIuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCkBAIC0yNjksNyAr
MjY5LDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJUZXh0OjpvcmlnaQogdm9pZCBS
ZW5kZXJUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBmb3IgKElubGluZVRleHRC
b3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkK
LSAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0xheW91dFJlY3QoRmxvYXRSZWN0KGFjY3Vt
dWxhdGVkT2Zmc2V0ICsgYm94LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgpKSkpOworICAgICAgICBy
ZWN0cy5hcHBlbmQoZW5jbG9zaW5nTGF5b3V0UmVjdChHcmFwaGljc1JlY3QoYWNjdW11bGF0ZWRP
ZmZzZXQgKyBib3gtPnRvcExlZnQoKSwgYm94LT5zaXplKCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVy
VGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQpAQCAtMjk4
LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFYKICAg
ICAgICAgICAgICAgICAgICAgci5zZXRYKHNlbGVjdGlvblJlY3QueCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFF1YWQocikpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgICAg
ICAgICAgcmVjdHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKHIpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlYWxFbmQgPSBtaW4oYm94LT5lbmQoKSArIDEsIGVuZCk7CiAgICAgICAgICAgICBJ
bnRSZWN0IHIgPSBib3gtPnNlbGVjdGlvblJlY3Qoc3RhcnQsIHJlYWxFbmQpOwpAQCAtMzEzLDcg
KzMxMyw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFYKICAgICAg
ICAgICAgICAgICAgICAgICAgIHIuc2V0WChib3gtPngoKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKHIpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAg
ICAgICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChHcmFwaGljc1F1
YWQocikpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBJbnRSZWN0IGVsbGlwc2lzUmVjdEZv
ckJveChJbmxpbmUKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogICAgIAotdm9pZCBSZW5kZXJU
ZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgQ2xpcHBpbmdPcHRp
b24gb3B0aW9uKQordm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGlj
c1F1YWQ+JiBxdWFkcywgQ2xpcHBpbmdPcHRpb24gb3B0aW9uKQogewogICAgIGZvciAoSW5saW5l
VGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKSB7CiAgICAgICAgIEludFJlY3QgYm91bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRh
cmllcygpOwpAQCAtMzU2LDE2ICszNTYsMTYgQEAgdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJvdW5kYXJp
ZXMuc2V0SGVpZ2h0KGVsbGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KGJvdW5kYXJpZXMpKSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFk
KEdyYXBoaWNzUmVjdChib3VuZGFyaWVzKSkpOwogICAgIH0KIH0KICAgICAKLXZvaWQgUmVuZGVy
VGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJlbmRl
clRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewogICAg
IGFic29sdXRlUXVhZHMocXVhZHMsIE5vQ2xpcHBpbmcpOwogfQogCi12b2lkIFJlbmRlclRleHQ6
OmFic29sdXRlUXVhZHNGb3JSYW5nZShWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQordm9pZCBSZW5k
ZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRz
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkK
IHsKICAgICAvLyBXb3JrIGFyb3VuZCBzaWduZWQvdW5zaWduZWQgaXNzdWVzLiBUaGlzIGZ1bmN0
aW9uIHRha2VzIHVuc2lnbmVkcywgYW5kIGlzIG9mdGVuIHBhc3NlZCBVSU5UX01BWAogICAgIC8v
IHRvIG1lYW4gImFsbCB0aGUgd2F5IHRvIHRoZSBlbmQiLiBJbmxpbmVUZXh0Qm94IGNvb3JkaW5h
dGVzIGFyZSB1bnNpZ25lZHMsIHNvIGNoYW5naW5nIHRoaXMgCkBAIC0zOTEsNyArMzkxLDcgQEAg
dm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVgogICAgICAgICAgICAgICAg
ICAgICByLnNldFgoc2VsZWN0aW9uUmVjdC54KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChyKSkpOworICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1
YWQoR3JhcGhpY3NSZWN0KHIpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBlbmQpOwogICAgICAgICAgICAgSW50
UmVjdCByID0gYm94LT5zZWxlY3Rpb25SZWN0KHN0YXJ0LCByZWFsRW5kKTsKQEAgLTQwNiw3ICs0
MDYsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAgICAg
ICAgICAgICAgICAgICAgICByLnNldFgoYm94LT54KCkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyKSkpOworICAgICAgICAgICAgICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdChyKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtOTc2LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgKICAgICByZXR1cm4gY3VyclBvcyA+PSAoZnJvbSArIGxlbik7
CiB9CiAKLUZsb2F0UG9pbnQgUmVuZGVyVGV4dDo6Zmlyc3RSdW5PcmlnaW4oKSBjb25zdAorR3Jh
cGhpY3NQb2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1bk9yaWdpbigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEludFBvaW50KGZpcnN0UnVuWCgpLCBmaXJzdFJ1blkoKSk7CiB9CkBAIC0xMzMzLDcgKzEz
MzMsNyBAQCBJbnRSZWN0IFJlbmRlclRleHQ6OmxpbmVzQm91bmRpbmdCb3goKSBjCiAgICAgICAg
IGZsb2F0IHkgPSBpc0hvcml6b250YWwgPyBmaXJzdFRleHRCb3goKS0+eSgpIDogbG9naWNhbExl
ZnRTaWRlOwogICAgICAgICBmbG9hdCB3aWR0aCA9IGlzSG9yaXpvbnRhbCA/IGxvZ2ljYWxSaWdo
dFNpZGUgLSBsb2dpY2FsTGVmdFNpZGUgOiBsYXN0VGV4dEJveCgpLT5sb2dpY2FsQm90dG9tKCkg
LSB4OwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBpc0hvcml6b250YWwgPyBsYXN0VGV4dEJveCgp
LT5sb2dpY2FsQm90dG9tKCkgLSB5IDogbG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lk
ZTsKLSAgICAgICAgcmVzdWx0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOworICAgICAgICByZXN1bHQgPSBlbmNsb3NpbmdJbnRSZWN0KEdyYXBoaWNz
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE0MTgsNyArMTQxOCw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6c2VsZWN0aW9uUmVj
dEZvclIKICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpCiAgICAgICAgICAgICBjYi0+YWRq
dXN0UmVjdEZvckNvbHVtbnMocmVjdCk7CiAKLSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWlu
ZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRp
bmdCb3goKTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVj
dChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICB9
CiAKICAgICByZXR1cm4gcmVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTEgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAgICAgdm9pZCBhYnNvbHV0ZVJlY3RzRm9yUmFu
Z2UoVmVjdG9yPEludFJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwotICAg
IHZvaWQgYWJzb2x1dGVRdWFkc0ZvclJhbmdlKFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWCwgYm9vbCB1c2VT
ZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMo
VmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKKyAgICB2b2lkIGFic29sdXRlUXVhZHNGb3JSYW5nZShW
ZWN0b3I8R3JhcGhpY3NRdWFkPiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQg
ZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwog
CiAgICAgZW51bSBDbGlwcGluZ09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07
Ci0gICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgQ2xpcHBpbmdPcHRp
b24gb3B0aW9uID0gTm9DbGlwcGluZyk7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxH
cmFwaGljc1F1YWQ+JiwgQ2xpcHBpbmdPcHRpb24gb3B0aW9uID0gTm9DbGlwcGluZyk7CiAKICAg
ICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBv
aW50Jik7CiAKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBs
aW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93
Qm91bmRpbmdCb3goKSBjb25zdDsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RSdW5PcmlnaW4oKSBj
b25zdDsKKyAgICBHcmFwaGljc1BvaW50IGZpcnN0UnVuT3JpZ2luKCkgY29uc3Q7CiAgICAgZmxv
YXQgZmlyc3RSdW5YKCkgY29uc3Q7CiAgICAgZmxvYXQgZmlyc3RSdW5ZKCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDMsNyArNTAzLDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lOjpmb3JtYXRNZWRp
YUNvbnRyb2xzUgogSW50UG9pbnQgUmVuZGVyVGhlbWU6OnZvbHVtZVNsaWRlck9mZnNldEZyb21N
dXRlQnV0dG9uKFJlbmRlckJveCogbXV0ZUJ1dHRvbkJveCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkg
Y29uc3QKIHsKICAgICBpbnQgeSA9IC1zaXplLmhlaWdodCgpOwotICAgIEZsb2F0UG9pbnQgYWJz
UG9pbnQgPSBtdXRlQnV0dG9uQm94LT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludChtdXRlQnV0
dG9uQm94LT5vZmZzZXRMZWZ0KCksIHkpLCB0cnVlLCB0cnVlKTsKKyAgICBHcmFwaGljc1BvaW50
IGFic1BvaW50ID0gbXV0ZUJ1dHRvbkJveC0+bG9jYWxUb0Fic29sdXRlKEdyYXBoaWNzUG9pbnQo
bXV0ZUJ1dHRvbkJveC0+b2Zmc2V0TGVmdCgpLCB5KSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgaWYgKGFi
c1BvaW50LnkoKSA8IDApCiAgICAgICAgIHkgPSBtdXRlQnV0dG9uQm94LT5oZWlnaHQoKTsKICAg
ICByZXR1cm4gSW50UG9pbnQoMCwgeSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
IHByaXZhdGU6CiAKICAgICBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBj
b25zdDsKIAotICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVy
T2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwg
Y29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OworICAg
IEdyYXBoaWNzUmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBp
bnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OwogICAgIAogICAg
IC8vIEdldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gIFVzZWQgYnkgc29t
ZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCiAgICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
NDUsMTIgKzU0NSwxMiBAQCBJbnRSZWN0IFJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdChjb25z
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclRoZW1lTWFjOjpjb252
ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25z
dCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3Qs
IGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyVGhlbWVNYWM6OmNv
bnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNv
bnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGlucHV0
UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFydFJlY3Qo
aW5wdXRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKICAgICAK
ICAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0
aGUgaW5wdXQgcmVuZGVyZXIKLSAgICBGbG9hdFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXI7
CisgICAgR3JhcGhpY3NTaXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyOwogICAgIGNvbnN0IFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBwYXJ0UmVuZGVyZXI7CiAgICAgd2hpbGUgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyICE9IGlucHV0UmVuZGVyZXIpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBj
b250YWluaW5nUmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7CkBAIC03OTMsNyArNzkz
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZQogICAgICAgICBp
bmZsYXRlZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwog
ICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpv
b21MZXZlbCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRS
ZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwogICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5m
bGF0ZWRSZWN0LnkoKSk7CiAgICAgfQogCkBAIC05NTQsNyArOTU0LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihSZQogCiAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy0+
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoMiAqIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCAwKTsKLSAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgtMSwgMSkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKC0xLCAxKSk7CiAgICAgfQogICAg
IAogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QubG9jYXRpb24oKSk7CkBAIC0xMDI5LDEyICsx
MDI5LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KIAogICAg
IENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCk7CiAKLSAg
ICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0
KCkgLyAyLjBmKTsKKyAgICBHcmFwaGljc1JlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCBy
LndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxi
YWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsK
ICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5j
dGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJhY2tzKSk7CiAgICAg
UmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVh
dGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQu
eSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC5tYXhZKCkpLCB0
b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBGbG9hdFJlY3QgYm90dG9t
R3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIuMGYsIHIud2lk
dGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKKyAgICBHcmFwaGljc1Jl
Y3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIu
MGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBz
dHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFja3MgPSB7IDAsIEJvdHRvbUdy
YWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4g
Ym90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0
LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4g
Ym90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9p
bnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRpZW50LnkoKSksIENHUG9pbnRN
YWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQubWF4WSgpKSwgYm90dG9tRnVu
Y3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtMTEwNiwxOCArMTEwNiwxOCBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKIAotICAgIEZsb2F0UG9pbnQgYXJyb3cx
WzNdOwotICAgIGFycm93MVswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgLSBzcGFj
ZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKLSAgICBhcnJvdzFbMV0gPSBGbG9hdFBvaW50KGxlZnRF
ZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwot
ICAgIGFycm93MVsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwg
Y2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYgLSBhcnJvd0hlaWdodCk7CisgICAg
R3JhcGhpY3NQb2ludCBhcnJvdzFbM107CisgICAgYXJyb3cxWzBdID0gR3JhcGhpY3NQb2ludChs
ZWZ0RWRnZSwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93
MVsxXSA9IEdyYXBoaWNzUG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZIC0gc3Bh
Y2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzJdID0gR3JhcGhpY3NQb2ludChs
ZWZ0RWRnZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dz
IC8gMi4wZiAtIGFycm93SGVpZ2h0KTsKIAogICAgIC8vIERyYXcgdGhlIHRvcCBhcnJvdwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBhcnJvdzEsIHRydWUpOwog
Ci0gICAgRmxvYXRQb2ludCBhcnJvdzJbM107Ci0gICAgYXJyb3cyWzBdID0gRmxvYXRQb2ludChs
ZWZ0RWRnZSwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwotICAgIGFycm93
MlsxXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZICsgc3BhY2VC
ZXR3ZWVuQXJyb3dzIC8gMi4wZik7Ci0gICAgYXJyb3cyWzJdID0gRmxvYXRQb2ludChsZWZ0RWRn
ZSArIGFycm93V2lkdGggLyAyLjBmLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4w
ZiArIGFycm93SGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IGFycm93MlszXTsKKyAgICBhcnJv
dzJbMF0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlLCBjZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJy
b3dzIC8gMi4wZik7CisgICAgYXJyb3cyWzFdID0gR3JhcGhpY3NQb2ludChsZWZ0RWRnZSArIGFy
cm93V2lkdGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBhcnJv
dzJbMl0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRl
clkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmICsgYXJyb3dIZWlnaHQpOwogCiAgICAgLy8g
RHJhdyB0aGUgYm90dG9tIGFycm93CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQ
b2x5Z29uKDMsIGFycm93MiwgdHJ1ZSk7CkBAIC0xMzQxLDcgKzEzNDEsNyBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlCiAgICAgICAgICAgICBbc2xpZGVyVGh1bWJD
ZWxsIHN0b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpuaWwgbW91c2VJ
c1VwOllFU107CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CisgICAgR3JhcGhp
Y3NSZWN0IGJvdW5kcyA9IHI7CiAgICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNh
bCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0
aWNhbCBzbGlkZXIuCiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0
KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpOwpAQCAtMTM0OSwxMiArMTM0OSwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dFNsaWRlclRodW1iKFJlCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpwYWludEluZm8uY29udGV4dCk7CiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOwogICAgIAotICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBib3Vu
ZHM7CisgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdCA9IGJvdW5kczsKICAgICBpZiAoem9v
bUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVk
UmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdo
dCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwot
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9v
bUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUo
em9vbUxldmVsLCB6b29tTGV2ZWwpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5z
bGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KICAgICAK
QEAgLTEzNjIsMTIgKzEzNjIsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJU
aHVtYihSZQogICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS85NDIxNzgxPi4K
ICAgICBpZiAoIW8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpKSB7CiAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwgdW56b29tZWRSZWN0LnkoKSk7Ci0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKDAsIC0odW56b29tZWRSZWN0LnkoKSArIHVu
em9vbWVkUmVjdC5oZWlnaHQoKSkpOwogICAgIH0KICNlbGlmIFBMQVRGT1JNKENIUk9NSVVNKQog
ICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoMCwgdW56b29tZWRSZWN0LnkoKSk7Ci0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIHBhaW50
SW5mby5jb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUoMSwgLTEpKTsKICAgICBwYWludEluZm8u
Y29udGV4dC0+dHJhbnNsYXRlKDAsIC0odW56b29tZWRSZWN0LnkoKSArIHVuem9vbWVkUmVjdC5o
ZWlnaHQoKSkpOwogI2VuZGlmCiAgICAgCkBAIC0xMzk0LDcgKzEzOTQsNyBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlCiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRX
aWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVk
UmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21l
ZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6
b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUo
R3JhcGhpY3NTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsK
ICAgICB9CiAKQEAgLTE0ODYsNyArMTQ4Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2VhcmNoRmllbGRDYW4KIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKTsKIAotICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2Vs
QnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hS
ZWN0KCkpXTsKKyAgICBHcmFwaGljc1JlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1
dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVj
dCgpKV07CiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIC8vIFRha2UgY2FyZSBvZiBj
YXNlcyB3aGVyZSB0aGUgY2FuY2VsIGJ1dHRvbiB3YXMgbm90IGFsaWduZWQgd2l0aCB0aGUgcmln
aHQgYm9yZGVyIG9mIHRoZSBpbnB1dCBlbGVtZW50IChmb3IgZS5nLgpAQCAtMTQ5OSwxMiArMTQ5
OSwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAKICAgICBs
b2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywg
bG9jYWxCb3VuZHMsIHIpOwogCi0gICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5k
cyk7CisgICAgR3JhcGhpY3NSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CiAgICAgaWYg
KHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpv
b21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRI
ZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgp
KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWws
IHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NT
aXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50
cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAK
QEAgLTE1NzEsNyArMTU3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmll
bGRSZXMKIAogICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0s
IG8pOwogCi0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25S
ZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSld
OworICAgIEdyYXBoaWNzUmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVj
dEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsK
ICAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIo
KSwgbywgbG9jYWxCb3VuZHMsIHIpOwogCiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0g
ZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKQEAg
LTE2MDcsNyArMTYwNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRS
ZXMKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5j
b250ZXh0KTsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7CiAKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJl
Y3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07
CisgICAgR3JhcGhpY3NSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0
Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOwog
ICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigp
LCBvLCBsb2NhbEJvdW5kcywgcik7CiAgICAgCiAgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9j
YWxCb3VuZHMpOwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZFJlcwogICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRS
ZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwogICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0
KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29t
TGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZSh6
b29tTGV2ZWwsIHpvb21MZXZlbCkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNs
YXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogCkBAIC0x
NzExLDE1ICsxNzExLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBnZXRNZWRpYVVJUGFydFN0YXRlRmxh
Z3MKIH0KIAogLy8gVXRpbGl0eSB0byBzY2FsZSB3aGVuIHRoZSBVSSBwYXJ0IGFyZSBub3Qgc2Nh
bGVkIGJ5IHdrRHJhd01lZGlhVUlQYXJ0Ci1zdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVj
dEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QgJm9yaWdpbmFsUmVjdCkKK3N0YXRpYyBHcmFwaGlj
c1JlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmb3JpZ2luYWxS
ZWN0KQogewogICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KG9yaWdpbmFsUmVjdCk7CisgICAgR3JhcGhp
Y3NSZWN0IHVuem9vbWVkUmVjdChvcmlnaW5hbFJlY3QpOwogICAgIGlmICh6b29tTGV2ZWwgIT0g
MS4wZiAmJiBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVp
Y2tUaW1lKSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lk
dGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29t
ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoR3JhcGhpY3NTaXplKHpvb21MZXZl
bCwgem9vbUxldmVsKSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVu
em9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHVu
em9vbWVkUmVjdDsKQEAgLTE4MTAsNyArMTgxMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFTbGlkZXJUcmEKICAgICBDb250ZXh0Q29udGFpbmVyIGNnQ29udGV4dENvbnRhaW5l
cihwYWludEluZm8uY29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjZ0NvbnRl
eHRDb250YWluZXIuY29udGV4dCgpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwotICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qg
PSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIp
OworICAgIEdyYXBoaWNzUmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1
c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOwogICAgIHdrRHJhd01lZGlhU2xpZGVy
VHJhY2sobWVkaWFDb250cm9sbGVyVGhlbWUoKSwgY29udGV4dCwgdW56b29tZWRSZWN0LCAKICAg
ICAgICAgdGltZUxvYWRlZCwgY3VycmVudFRpbWUsIGR1cmF0aW9uLCBnZXRNZWRpYVVJUGFydFN0
YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE4ODQsNyArMTg4NCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGkKIAogICAgIENvbnRleHRD
b250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50SW5mby5jb250ZXh0KTsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKLSAg
ICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVu
dENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICBHcmFwaGljc1JlY3QgdW56b29tZWRSZWN0
ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCBy
KTsKICAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSwgbWVkaWFD
b250cm9sbGVyVGhlbWUoKSwgY2dDb250ZXh0Q29udGFpbmVyLmNvbnRleHQoKSwgdW56b29tZWRS
ZWN0LCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTE4OTcsNyArMTg5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFU
aW1lUmVtYWkKIAogICAgIENvbnRleHRDb250YWluZXIgY2dDb250ZXh0Q29udGFpbmVyKHBhaW50
SW5mby5jb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
KnBhaW50SW5mby5jb250ZXh0KTsKLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56
b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICBH
cmFwaGljc1JlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVu
dENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKICAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVRp
bWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBjZ0NvbnRleHRDb250
YWluZXIuY29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhu
b2RlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1OCwxMiArNzU4LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxp
c3RCdXQKIAogICAgIENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBkZXZpY2VSR0JDb2xvclNwYWNl
UmVmKCk7CiAKLSAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRo
KCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKKyAgICBHcmFwaGljc1JlY3QgdG9wR3JhZGllbnQoci54
KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dG
dW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xh
dGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRv
cHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJh
Y2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwg
dG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVu
dC5tYXhZKCkpLCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBGbG9h
dFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAv
IDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKKyAg
ICBHcmFwaGljc1JlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsgci5o
ZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkgLyAy
LjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFja3MgPSB7
IDAsIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dG
dW5jdGlvblJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxM
LCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENH
U2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChj
c3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRpZW50Lnko
KSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQubWF4WSgp
KSwgYm90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwpAQCAtODI5LDEwICs4Mjks
MTAgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dAogICAgIHBhaW50
SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioby0+c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludElu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoTm9TdHJva2UsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwogCi0gICAgRmxvYXRQb2ludCBhcnJvd1szXTsKLSAgICBhcnJvd1swXSA9IEZsb2F0UG9pbnQo
bGVmdEVkZ2UsIGNlbnRlclkgLSBhcnJvd0hlaWdodCAvIDIuMGYpOwotICAgIGFycm93WzFdID0g
RmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBhcnJvd0hlaWdodCAv
IDIuMGYpOwotICAgIGFycm93WzJdID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgg
LyAyLjBmLCBjZW50ZXJZICsgYXJyb3dIZWlnaHQgLyAyLjBmKTsKKyAgICBHcmFwaGljc1BvaW50
IGFycm93WzNdOworICAgIGFycm93WzBdID0gR3JhcGhpY3NQb2ludChsZWZ0RWRnZSwgY2VudGVy
WSAtIGFycm93SGVpZ2h0IC8gMi4wZik7CisgICAgYXJyb3dbMV0gPSBHcmFwaGljc1BvaW50KGxl
ZnRFZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSAtIGFycm93SGVpZ2h0IC8gMi4wZik7CisgICAg
YXJyb3dbMl0gPSBHcmFwaGljc1BvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNl
bnRlclkgKyBhcnJvd0hlaWdodCAvIDIuMGYpOwogCiAgICAgLy8gRHJhdyB0aGUgYXJyb3cKICAg
ICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgYXJyb3csIHRydWUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luQ0UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbkNFLmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw3ICs1MTksNyBAQCBib29sIFJlbmRlclRo
ZW1lV2luQ0U6OnBhaW50U2xpZGVyVGh1bWIoCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFF
bGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7CiAgICAgaWYgKG1lZGlhRWxl
bWVudCkgewogICAgICAgICBmbG9hdCBwdCA9IChtZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCkg
LSBtZWRpYUVsZW1lbnQtPnN0YXJ0VGltZSgpKSAvIG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsK
LSAgICAgICAgRmxvYXRSZWN0IGludFJlY3QgPSByOworICAgICAgICBHcmFwaGljc1JlY3QgaW50
UmVjdCA9IHI7CiAgICAgICAgIGludFJlY3Quc2V0WChpbnRSZWN0LngoKSArIGludFJlY3Qud2lk
dGgoKSAqIHB0IC0gMik7CiAgICAgICAgIGludFJlY3Quc2V0V2lkdGgoNSk7CiAgICAgICAgIGku
Y29udGV4dC0+ZmlsbFJlY3QoaW50UmVjdCk7CkBAIC01NDMsNyArNTQzLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZVdpbkNFOjphZGp1c3RTZWFyY2hGaWVsZAogYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIGJvb2wgcmMgPSBwYWludEJ1
dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVjdCBpbVJlY3QgPSByOworICAgIEdy
YXBoaWNzUmVjdCBpbVJlY3QgPSByOwogICAgIGltUmVjdC5pbmZsYXRlKC0yKTsKICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcjo6YmxhY2spOwpAQCAtNTU4LDE4ICs1NTgsMTggQEAgYm9vbCBSZW5kZXJUaGVt
ZVdpbkNFOjpwYWludE1lZGlhTXV0ZUJ1dAogICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBw
YWludEluZm8sIHIpOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlh
RWxlbWVudFBhcmVudChvLT5ub2RlKCkpOwogICAgIGJvb2wgbXV0ZWQgPSAhbWVkaWFFbGVtZW50
IHx8IG1lZGlhRWxlbWVudC0+bXV0ZWQoKTsKLSAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKKyAg
ICBHcmFwaGljc1JlY3QgaW1SZWN0ID0gcjsKICAgICBpbVJlY3QuaW5mbGF0ZSgtMik7CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENv
bG9yKENvbG9yOjpibGFjayk7Ci0gICAgRmxvYXRQb2ludCBwdHNbNl0gPSB7Ci0gICAgICAgIEZs
b2F0UG9pbnQoaW1SZWN0LngoKSArIDEsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAz
LjApLAotICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkg
LyAyLjAsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAotICAgICAgICBGbG9h
dFBvaW50KGltUmVjdC5tYXhYKCkgLSAxLCBpbVJlY3QueSgpKSwKLSAgICAgICAgRmxvYXRQb2lu
dChpbVJlY3QubWF4WCgpIC0gMSwgaW1SZWN0Lm1heFkoKSksCi0gICAgICAgIEZsb2F0UG9pbnQo
aW1SZWN0LngoKSArIDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSArIDIuMCAq
IGltUmVjdC5oZWlnaHQoKSAvIDMuMCksCi0gICAgICAgIEZsb2F0UG9pbnQoaW1SZWN0LngoKSAr
IDEsIGltUmVjdC55KCkgKyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApCisgICAgR3JhcGhp
Y3NQb2ludCBwdHNbNl0gPSB7CisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSArIDEs
IGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAorICAgICAgICBHcmFwaGljc1Bv
aW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAsIGltUmVjdC55KCkgKyBp
bVJlY3QuaGVpZ2h0KCkgLyAzLjApLAorICAgICAgICBHcmFwaGljc1BvaW50KGltUmVjdC5tYXhY
KCkgLSAxLCBpbVJlY3QueSgpKSwKKyAgICAgICAgR3JhcGhpY3NQb2ludChpbVJlY3QubWF4WCgp
IC0gMSwgaW1SZWN0Lm1heFkoKSksCisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSAr
IDEgKyBpbVJlY3Qud2lkdGgoKSAvIDIuMCwgaW1SZWN0LnkoKSArIDIuMCAqIGltUmVjdC5oZWln
aHQoKSAvIDMuMCksCisgICAgICAgIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSArIDEsIGltUmVj
dC55KCkgKyAyLjAgKiBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApCiAgICAgfTsKICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oNiwgcHRzKTsKICAgICBpZiAobXV0ZWQpCkBA
IC01ODEsNyArNTgxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhTXV0ZUJ1
dAogYm9vbCBSZW5kZXJUaGVtZVdpbkNFOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewog
ICAgIGJvb2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwotICAgIEZsb2F0UmVj
dCBpbVJlY3QgPSByOworICAgIEdyYXBoaWNzUmVjdCBpbVJlY3QgPSByOwogICAgIGltUmVjdC5p
bmZsYXRlKC0zKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5m
by5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwpAQCAtNTk1LDcgKzU5NSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVBsYXlCdXQKICAgICAgICAgaW1S
ZWN0Lm1vdmUoMi4wICogd2lkdGggLyAzLjAsIDApOwogICAgICAgICBwYWludEluZm8uY29udGV4
dC0+ZmlsbFJlY3QoaW1SZWN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFBvaW50IHB0
c1szXSA9IHsgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgRmxvYXRQb2ludChp
bVJlY3QubWF4WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgRmxvYXRQ
b2ludChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OworICAgICAgICBHcmFwaGljc1BvaW50
IHB0c1szXSA9IHsgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgR3JhcGhp
Y3NQb2ludChpbVJlY3QubWF4WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4w
KSwgR3JhcGhpY3NQb2ludChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OwogICAgICAgICBw
YWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRzKTsKICAgICB9CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTYwNSwxMCArNjA1LDEwIEBAIGJvb2wg
UmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVBsYXlCdXQKIGJvb2wgUmVuZGVyVGhlbWVXaW5D
RTo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgYm9vbCByYyA9IHBhaW50
QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0gICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7CisgICAg
R3JhcGhpY3NSZWN0IGltUmVjdCA9IHI7CiAgICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIEZs
b2F0UG9pbnQgcHRzWzNdID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgo
KSkgLyAyLjAsIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC54KCksIChpbVJlY3QueSgp
ICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0
Lm1heFgoKSkgLyAyLjAsIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgRmxvYXRQb2ludCBwdHMyWzNd
ID0geyBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KChp
bVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1SZWN0Lm1h
eFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIGltUmVjdC5tYXhZKCkpIH07
CisgICAgR3JhcGhpY3NQb2ludCBwdHNbM10gPSB7IEdyYXBoaWNzUG9pbnQoKGltUmVjdC54KCkg
KyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoaW1SZWN0
LngoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9pbnQo
KGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkgfTsKKyAg
ICBHcmFwaGljc1BvaW50IHB0czJbM10gPSB7IEdyYXBoaWNzUG9pbnQoaW1SZWN0Lm1heFgoKSwg
aW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAv
IDIuMCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9pbnQo
aW1SZWN0Lm1heFgoKSwgaW1SZWN0Lm1heFkoKSkgfTsKICAgICBwYWludEluZm8uY29udGV4dC0+
c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6Ymxh
Y2spOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsK
QEAgLTYyMSwxMCArNjIxLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNl
ZWtCYWMKIGJvb2wgUmVuZGVyVGhlbWVXaW5DRTo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7Ci0g
ICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7CisgICAgR3JhcGhpY3NSZWN0IGltUmVjdCA9IHI7CiAg
ICAgaW1SZWN0LmluZmxhdGUoLTMpOwotICAgIEZsb2F0UG9pbnQgcHRzWzNdID0geyBGbG9hdFBv
aW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1S
ZWN0Lm1heFgoKSkgLyAyLjAsIChpbVJlY3QueSgpICsgaW1SZWN0Lm1heFkoKSkgLyAyLjApLCBG
bG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC5tYXhZKCkpIH07Ci0gICAgRmxvYXRQb2ludCBw
dHMyWzNdID0geyBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgoKSkgLyAyLjAs
IGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC5tYXhYKCksIChpbVJlY3QueSgpICsgaW1S
ZWN0Lm1heFkoKSkgLyAyLjApLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0Lm1heFgo
KSkgLyAyLjAsIGltUmVjdC5tYXhZKCkpIH07CisgICAgR3JhcGhpY3NQb2ludCBwdHNbM10gPSB7
IEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoKGlt
UmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4
WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0Lm1heFkoKSkgfTsK
KyAgICBHcmFwaGljc1BvaW50IHB0czJbM10gPSB7IEdyYXBoaWNzUG9pbnQoKGltUmVjdC54KCkg
KyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0LnkoKSksIEdyYXBoaWNzUG9pbnQoaW1SZWN0
Lm1heFgoKSwgKGltUmVjdC55KCkgKyBpbVJlY3QubWF4WSgpKSAvIDIuMCksIEdyYXBoaWNzUG9p
bnQoKGltUmVjdC54KCkgKyBpbVJlY3QubWF4WCgpKSAvIDIuMCwgaW1SZWN0Lm1heFkoKSkgfTsK
ICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2spOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRG
aWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3
ICs5NCw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICBy
ZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAiKSI7CiB9CiAKLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0UG9pbnQmIHAp
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc1Bv
aW50JiBwKQogewogICAgIHRzIDw8ICIoIjsgICAgCiAgICAgaWYgKGhhc0ZyYWN0aW9ucyhwLngo
KSkpCkBAIC0xMDksNyArMTA5LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgYwogICAgIHJldHVybiB0cyA8PCAiKSI7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZsb2F0U2l6ZSYgcykKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgcykKIHsKICAgICB0cyA8
PCAid2lkdGg9IjsKICAgICBpZiAoaGFzRnJhY3Rpb25zKHMud2lkdGgoKSkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDkxMDM0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBF
bGVtZW50OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBo
aWNzUG9pbnQ7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEludFBv
aW50OwogY2xhc3MgSW50UmVjdDsKQEAgLTcwLDggKzcwLDggQEAgc3RhdGljIHZvaWQgd3JpdGVS
ZW5kZXJPYmplY3QoVGV4dFN0cmVhbQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBJbnRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgSW50UmVjdCYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwg
Y29uc3QgRmxvYXRQb2ludCYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwg
Y29uc3QgRmxvYXRTaXplJik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBHcmFwaGljc1BvaW50Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBHcmFwaGljc1NpemUmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSXRlbT4KIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZlY3RvcjxJdGVtPiYgdmVj
dG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzUXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0zMzEsOSArMzMxLDkgQEAgdm9pZCBS
ZW5kZXJWaWV3OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxMYQogICAgIHJlY3RzLmFwcGVuZChMYXlv
dXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0LCBtX2xheWVyLT5zaXplKCkpKTsKIH0KIAotdm9pZCBS
ZW5kZXJWaWV3OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3ZvaWQg
UmVuZGVyVmlldzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYgcXVhZHMpCiB7
Ci0gICAgcXVhZHMuYXBwZW5kKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fbGF5ZXItPnNpemUo
KSkpOworICAgIHF1YWRzLmFwcGVuZChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX2xh
eWVyLT5zaXplKCkpKTsKIH0KIAogc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBv
c2l0aW9uKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0zNzksNyAr
Mzc5LDcgQEAgSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbAogICAgICAg
ICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9m
IHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KICAgICAg
ICAgSW50UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKICAgICAgICAgaWYgKFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigp
KSB7Ci0gICAgICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGN1cnJSZWN0KSk7CisgICAgICAgICAgICBHcmFw
aGljc1F1YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
R3JhcGhpY3NSZWN0KGN1cnJSZWN0KSk7CiAgICAgICAgICAgICBjdXJyUmVjdCA9IGFic1F1YWQu
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsgCiAgICAgICAgIH0KICAgICAgICAgc2VsUmVjdC51bml0
ZShjdXJyUmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmludGlu
ZygpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPExheW91
dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRNYXhpbWFsT3V0bGluZVNpemUoaW50
IG8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6
c2V0V2lkZ2V0KFBhc3NSZWZQdHI8CiAgICAgICAgIC8vIHN0eWxlIHBvaW50ZXIpLgogICAgICAg
ICBpZiAoc3R5bGUoKSkgewogICAgICAgICAgICAgaWYgKCFuZWVkc0xheW91dCgpKQotICAgICAg
ICAgICAgICAgIHNldFdpZGdldEdlb21ldHJ5KEludFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFF1YWQoY29udGVudEJveFJlY3QoKSkpLmJvdW5kaW5nQm94KCkpLCBjb250ZW50Qm94UmVj
dCgpLnNpemUoKSk7CisgICAgICAgICAgICAgICAgc2V0V2lkZ2V0R2VvbWV0cnkoSW50UmVjdChs
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUXVhZChjb250ZW50Qm94UmVjdCgpKSkuYm91bmRp
bmdCb3goKSksIGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChzdHls
ZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgICAgICBtX3dpZGdldC0+
aGlkZSgpOwogICAgICAgICAgICAgZWxzZSB7CkBAIC0zMjcsNyArMzI3LDcgQEAgdm9pZCBSZW5k
ZXJXaWRnZXQ6OnVwZGF0ZVdpZGdldFBvc2l0aW9uKAogICAgICAgICByZXR1cm47CiAKICAgICBJ
bnRSZWN0IGNvbnRlbnRCb3ggPSBjb250ZW50Qm94UmVjdCgpOwotICAgIEludFJlY3QgYWJzb2x1
dGVDb250ZW50Qm94ID0gSW50UmVjdChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChjb250
ZW50Qm94KSkuYm91bmRpbmdCb3goKSk7CisgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3gg
PSBJbnRSZWN0KGxvY2FsVG9BYnNvbHV0ZVF1YWQoR3JhcGhpY3NRdWFkKGNvbnRlbnRCb3gpKS5i
b3VuZGluZ0JveCgpKTsKICAgICBib29sIGJvdW5kc0NoYW5nZWQgPSBzZXRXaWRnZXRHZW9tZXRy
eShhYnNvbHV0ZUNvbnRlbnRCb3gsIGNvbnRlbnRCb3guc2l6ZSgpKTsKIAogICAgIC8vIGlmIHRo
ZSBmcmFtZSBib3VuZHMgZ290IGNoYW5nZWQsIG9yIGlmIHZpZXcgbmVlZHMgbGF5b3V0IChwb3Nz
aWJseSBpbmRpY2F0aW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
Um9vdElubGluZUJveDo6YWRkSGlnaGxpZ2h0T3ZlcmZsb3cKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gSGlnaGxpZ2h0IGFjdHMgYXMgYSBzZWxlY3Rpb24gaW5mbGF0aW9uLgotICAgIEZsb2F0
UmVjdCByb290UmVjdCgwLCBzZWxlY3Rpb25Ub3AoKSwgbG9naWNhbFdpZHRoKCksIHNlbGVjdGlv
bkhlaWdodCgpKTsKKyAgICBHcmFwaGljc1JlY3Qgcm9vdFJlY3QoMCwgc2VsZWN0aW9uVG9wKCks
IGxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgSW50UmVjdCBpbmZsYXRl
ZFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y3VzdG9t
SGlnaGxpZ2h0UmVjdChyZW5kZXJlcigpLT5ub2RlKCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmhp
Z2hsaWdodCgpLCByb290UmVjdCkpOwogICAgIHNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhp
bmZsYXRlZFJlY3QsIGluZmxhdGVkUmVjdCwgbGluZVRvcCgpLCBsaW5lQm90dG9tKCkpOwogfQpA
QCAtMTcwLDggKzE3MCw4IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGFpbnRDdXN0b21IaWdobGln
aHQKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBpbmZsYXRlZCByZWN0IHNvIHRo
YXQgd2UgY2FuIHByb3Blcmx5IGhpdCB0ZXN0LgotICAgIEZsb2F0UmVjdCByb290UmVjdChwYWlu
dE9mZnNldC54KCkgKyB4KCksIHBhaW50T2Zmc2V0LnkoKSArIHNlbGVjdGlvblRvcCgpLCBsb2dp
Y2FsV2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJl
Y3QgPSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hsaWdodFJlY3QocmVuZGVy
ZXIoKS0+bm9kZSgpLCBoaWdobGlnaHRUeXBlLCByb290UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0
IHJvb3RSZWN0KHBhaW50T2Zmc2V0LngoKSArIHgoKSwgcGFpbnRPZmZzZXQueSgpICsgc2VsZWN0
aW9uVG9wKCksIGxvZ2ljYWxXaWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgR3JhcGhp
Y3NSZWN0IGluZmxhdGVkUmVjdCA9IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Y3VzdG9tSGln
aGxpZ2h0UmVjdChyZW5kZXJlcigpLT5ub2RlKCksIGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsK
ICAgICBpZiAoaW5mbGF0ZWRSZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpKQogICAgICAg
ICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50Q3VzdG9tSGlnaGxpZ2h0KHJlbmRlcmVy
KCktPm5vZGUoKSwgaGlnaGxpZ2h0VHlwZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1
ZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5j
cHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9y
bVN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFRyYW5zZm9y
bVN0YXRlOjpmbGF0dGVuKCkKICAgICBmbGF0dGVuV2l0aFRyYW5zZm9ybSgqbV9hY2N1bXVsYXRl
ZFRyYW5zZm9ybSk7CiB9CiAKLUZsb2F0UG9pbnQgVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50
KCkgY29uc3QKK0dyYXBoaWNzUG9pbnQgVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50KCkgY29u
c3QKIHsKICAgICBpZiAoIW1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybiBt
X2xhc3RQbGFuYXJQb2ludDsKQEAgLTk4LDcgKzk4LDcgQEAgRmxvYXRQb2ludCBUcmFuc2Zvcm1T
dGF0ZTo6bWFwcGVkUG9pbnQoKQogICAgIHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLT5p
bnZlcnNlKCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBvaW50KTsKIH0KIAotRmxvYXRRdWFk
IFRyYW5zZm9ybVN0YXRlOjptYXBwZWRRdWFkKCkgY29uc3QKK0dyYXBoaWNzUXVhZCBUcmFuc2Zv
cm1TdGF0ZTo6bWFwcGVkUXVhZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FjY3VtdWxhdGVkVHJh
bnNmb3JtKQogICAgICAgICByZXR1cm4gbV9sYXN0UGxhbmFyUXVhZDsKQEAgLTE2NCwxMiArMTY0
LDEyIEBAIHZvaWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpmbGF0dGVuV2kKICAgICBtX2Fj
Y3VtdWxhdGluZ1RyYW5zZm9ybSA9IGZhbHNlOwogfQogCi1GbG9hdFBvaW50IEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUG9pbnQoKSBjb25zdAorR3JhcGhpY3NQb2ludCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU6Om1hcHBlZFBvaW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9h
Y2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNlKCkucHJvamVjdFBvaW50KG1fbGFzdFBsYW5hclBv
aW50KTsKIH0KIAotRmxvYXRRdWFkIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6bWFwcGVkUXVh
ZCgpIGNvbnN0CitHcmFwaGljc1F1YWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjptYXBwZWRR
dWFkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5pbnZlcnNl
KCkucHJvamVjdFF1YWQobV9sYXN0UGxhbmFyUXVhZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
OCArMjcsOCBAQAogI2RlZmluZSBUcmFuc2Zvcm1TdGF0ZV9oCiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUXVhZC5o
IgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoK
ICAgICBlbnVtIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiB7IEZsYXR0ZW5UcmFuc2Zvcm0sIEFjY3Vt
dWxhdGVUcmFuc2Zvcm0gfTsKIAogICAgIC8vIElmIHF1YWQgaXMgbm9uLW51bGwsIGl0IHdpbGwg
YmUgbWFwcGVkCi0gICAgVHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtRGlyZWN0aW9uIG1hcHBpbmdE
aXJlY3Rpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHAsIGNvbnN0IEZsb2F0UXVhZCogcXVhZCA9IDAp
CisgICAgVHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtRGlyZWN0aW9uIG1hcHBpbmdEaXJlY3Rpb24s
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUXVhZCogcXVhZCA9IDApCiAg
ICAgICAgIDogbV9sYXN0UGxhbmFyUG9pbnQocCkKICAgICAgICAgLCBtX2FjY3VtdWxhdGluZ1Ry
YW5zZm9ybShmYWxzZSkKICAgICAgICAgLCBtX21hcFF1YWQocXVhZCAhPSAwKQpAQCAtNjUsMTgg
KzY1LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsYXR0ZW4oKTsKIAogICAgIC8vIFJldHVybiB0
aGUgY29vcmRzIG9mIHRoZSBwb2ludCBvciBxdWFkIGluIHRoZSBsYXN0IGZsYXR0ZW5lZCBsYXll
cgotICAgIEZsb2F0UG9pbnQgbGFzdFBsYW5hclBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UGxhbmFyUG9pbnQ7IH0KLSAgICBGbG9hdFF1YWQgbGFzdFBsYW5hclF1YWQoKSBjb25zdCB7IHJl
dHVybiBtX2xhc3RQbGFuYXJRdWFkOyB9CisgICAgR3JhcGhpY3NQb2ludCBsYXN0UGxhbmFyUG9p
bnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJQb2ludDsgfQorICAgIEdyYXBoaWNzUXVh
ZCBsYXN0UGxhbmFyUXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclF1YWQ7IH0KIAog
ICAgIC8vIFJldHVybiB0aGUgcG9pbnQgb3IgcXVhZCBtYXBwZWQgdGhyb3VnaCB0aGUgY3VycmVu
dCB0cmFuc2Zvcm0KLSAgICBGbG9hdFBvaW50IG1hcHBlZFBvaW50KCkgY29uc3Q7Ci0gICAgRmxv
YXRRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKKyAgICBHcmFwaGljc1BvaW50IG1hcHBlZFBvaW50
KCkgY29uc3Q7CisgICAgR3JhcGhpY3NRdWFkIG1hcHBlZFF1YWQoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICB2b2lkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CiAgICAgCi0gICAgRmxvYXRQb2ludCBtX2xhc3RQbGFuYXJQb2ludDsKLSAgICBGbG9h
dFF1YWQgbV9sYXN0UGxhbmFyUXVhZDsKKyAgICBHcmFwaGljc1BvaW50IG1fbGFzdFBsYW5hclBv
aW50OworICAgIEdyYXBoaWNzUXVhZCBtX2xhc3RQbGFuYXJRdWFkOwogCiAgICAgLy8gV2Ugb25s
eSBhbGxvY2F0ZSB0aGUgdHJhbnNmb3JtIGlmIHdlIG5lZWQgdG8KICAgICBPd25QdHI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+IG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm07CkBAIC04Nyw3ICs4Nyw3IEBA
IHByaXZhdGU6CiAKIGNsYXNzIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSA6IHB1YmxpYyBSZWZD
b3VudGVkPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHAsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXRU
ZXN0aW5nVHJhbnNmb3JtU3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc1BvaW50JiBwLCBjb25z
dCBHcmFwaGljc1F1YWQmIHF1YWQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZShwLCBxdWFkKSk7CiAgICAgfQpAQCAtMTAxLDE3ICsx
MDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNsYXRlKGludCB4LCBpbnQgeSwgVHJhbnNm
b3JtQWNjdW11bGF0aW9uKTsKICAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyLCBUcmFuc2Zvcm1BY2N1bXVsYXRp
b24pOwogCi0gICAgRmxvYXRQb2ludCBtYXBwZWRQb2ludCgpIGNvbnN0OwotICAgIEZsb2F0UXVh
ZCBtYXBwZWRRdWFkKCkgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBtYXBwZWRQb2ludCgpIGNv
bnN0OworICAgIEdyYXBoaWNzUXVhZCBtYXBwZWRRdWFkKCkgY29uc3Q7CiAgICAgdm9pZCBmbGF0
dGVuKCk7CiAKLSAgICBGbG9hdFBvaW50IG1fbGFzdFBsYW5hclBvaW50OwotICAgIEZsb2F0UXVh
ZCBtX2xhc3RQbGFuYXJRdWFkOworICAgIEdyYXBoaWNzUG9pbnQgbV9sYXN0UGxhbmFyUG9pbnQ7
CisgICAgR3JhcGhpY3NRdWFkIG1fbGFzdFBsYW5hclF1YWQ7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9hY2N1bXVsYXRlZFRyYW5zZm9ybTsKICAgICBib29sIG1fYWNjdW11bGF0aW5nVHJh
bnNmb3JtOwogCiBwcml2YXRlOgotICAgIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZShjb25zdCBG
bG9hdFBvaW50JiBwLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCisgICAgSGl0VGVzdGluZ1RyYW5z
Zm9ybVN0YXRlKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAsIGNvbnN0IEdyYXBoaWNzUXVhZCYgcXVh
ZCkKICAgICAgICAgOiBtX2xhc3RQbGFuYXJQb2ludChwKQogICAgICAgICAsIG1fbGFzdFBsYW5h
clF1YWQocXVhZCkKICAgICAgICAgLCBtX2FjY3VtdWxhdGluZ1RyYW5zZm9ybShmYWxzZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb290LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTAgKzE0
MiwxMCBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgTGF5
b3V0VW5pdCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgaW5kZXhXaWR0aCArIGdS
YWRpY2FsTGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAtIHJvb3RQ
YWQ7CiAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5zZXRZKGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgc3R5bGUoKS0+cGFkZGluZ1RvcCgpLnZhbHVlKCkgLSByb290UGFkKTsKICAgICAKLSAgICBG
bG9hdFBvaW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgp
KTsKLSAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50
WFBvcyAqIGZyb250V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCAr
IGdSYWRpY2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGlj
YWxUb3BMZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50
IGxlZnRFbmQoc3RhcnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRF
bmRZU2hpZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICBHcmFwaGljc1BvaW50IHRvcFN0
YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgpKTsKKyAgICBHcmFwaGlj
c1BvaW50IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250
V2lkdGggLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFz
ZVBhZCk7CisgICAgR3JhcGhpY3NQb2ludCB0b3BMZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BMZWZ0
UG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgZ1JhZGlj
YWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IGxlZnRF
bmQoc3RhcnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hp
ZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCkBAIC0xNTcsNyArMTU3LDcg
QEAgdm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIAogICAgIFBh
dGggcm9vdDsKICAgICAKLSAgICByb290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSAr
IHdpZHRoLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSkpOworICAgIHJvb3QubW92ZVRvKEdyYXBo
aWNzUG9pbnQodG9wU3RhcnQueCgpICsgd2lkdGgsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7
CiAgICAgLy8gZHJhdyB0b3AKICAgICByb290LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8g
ZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApAQCAt
MTc3LDcgKzE3Nyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiAK
ICAgICBtYXNrLm1vdmVUbyh0b3BTdGFydCk7CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVm
dCk7CiAgICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxv
YXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0g
bGVmdEVuZC55KCkpKTsKKyAgICBtYXNrLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BM
ZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwog
ICAgIAogICAgIGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVh
cmVSb290LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
MTAgKzEwOCwxMCBAQCB2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50CiAg
ICAgCiAgICAgd2lkdGggKz0gdG9wU3RhcnRTaGlmdDsKICAgICAKLSAgICBGbG9hdFBvaW50IHRv
cFN0YXJ0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgZnJvbnRXaWR0aCAtIHRvcFN0YXJ0U2hp
ZnQsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKTsKLSAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQo
YWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxCb3R0b21Qb2lu
dFhQb3MgLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFz
ZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsg
ZnJvbnRXaWR0aCAqIGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZz
ZXQueSgpICsgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKLSAgICBGbG9h
dFBvaW50IGxlZnRFbmQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgLCB0b3BMZWZ0LnkoKSArIGdS
YWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIEdyYXBoaWNz
UG9pbnQgdG9wU3RhcnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBmcm9udFdpZHRoIC0gdG9w
U3RhcnRTaGlmdCwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOworICAgIEdyYXBoaWNzUG9pbnQg
Ym90dG9tTGVmdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGZyb250V2lkdGggKiBnUmFkaWNh
bEJvdHRvbVBvaW50WFBvcyAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4SGVpZ2h0ICsg
Z1JhZGljYWxCYXNlUGFkKTsKKyAgICBHcmFwaGljc1BvaW50IHRvcExlZnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBmcm9udFdpZHRoICogZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWln
aHQpOworICAgIEdyYXBoaWNzUG9pbnQgbGVmdEVuZChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAs
IHRvcExlZnQueSgpICsgZ1JhZGljYWxMZWZ0RW5kWVNoaWZ0ICogc3R5bGUoKS0+Zm9udFNpemUo
KSk7CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZv
LmNvbnRleHQpOwogICAgIApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICAKICAgICBQYXRoIHJvb3Q7CiAgICAgCi0gICAgcm9v
dC5tb3ZlVG8oRmxvYXRQb2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCAsIGFkanVzdGVkUGFpbnRP
ZmZzZXQueSgpKSk7CisgICAgcm9vdC5tb3ZlVG8oR3JhcGhpY3NQb2ludCh0b3BTdGFydC54KCkg
KyB3aWR0aCAsIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiAgICAgLy8gZHJhdyB0b3AKICAg
ICByb290LmFkZExpbmVUbyh0b3BTdGFydCk7CiAgICAgLy8gZHJhdyBmcm9tIHRvcCBsZWZ0IGNv
cm5lciB0byBib3R0b20gcG9pbnQgb2YgcmFkaWNhbApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQg
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnQKICAgICBtYXNrLm1vdmVUbyh0b3BT
dGFydCk7CiAgICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CiAgICAgbWFzay5hZGRMaW5l
VG8odG9wTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54
KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKKyAgICBt
YXNrLmFkZExpbmVUbyhHcmFwaGljc1BvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgp
LCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwogICAgIAogICAgIGluZm8uY29udGV4
dC0+Y2xpcChtYXNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TVkdSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0Owor
Y2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJlbmRlck9iamVjdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hh
ZG93RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBTaGFkb3dE
YXRhOjphZGp1c3RSZWN0Rm9yU2hhZG93KEludAogICAgIHJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVp
Z2h0KCkgLSBzaGFkb3dUb3AgKyBzaGFkb3dCb3R0b20pOwogfQogCi12b2lkIFNoYWRvd0RhdGE6
OmFkanVzdFJlY3RGb3JTaGFkb3coRmxvYXRSZWN0JiByZWN0LCBpbnQgYWRkaXRpb25hbE91dGxp
bmVTaXplKSBjb25zdAordm9pZCBTaGFkb3dEYXRhOjphZGp1c3RSZWN0Rm9yU2hhZG93KEdyYXBo
aWNzUmVjdCYgcmVjdCwgaW50IGFkZGl0aW9uYWxPdXRsaW5lU2l6ZSkgY29uc3QKIHsKICAgICBM
YXlvdXRVbml0IHNoYWRvd0xlZnQgPSAwOwogICAgIExheW91dFVuaXQgc2hhZG93UmlnaHQgPSAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0TmV4dChQYXNzT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvdykgeyBtX25leHQgPSBzaGFkb3c7
IH0KIAogICAgIHZvaWQgYWRqdXN0UmVjdEZvclNoYWRvdyhJbnRSZWN0JiwgaW50IGFkZGl0aW9u
YWxPdXRsaW5lU2l6ZSA9IDApIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0UmVjdEZvclNoYWRvdyhG
bG9hdFJlY3QmLCBpbnQgYWRkaXRpb25hbE91dGxpbmVTaXplID0gMCkgY29uc3Q7CisgICAgdm9p
ZCBhZGp1c3RSZWN0Rm9yU2hhZG93KEdyYXBoaWNzUmVjdCYsIGludCBhZGRpdGlvbmFsT3V0bGlu
ZVNpemUgPSAwKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1feDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5l
ci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAg
dm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbwogICAgIGlmICghZmlyc3RD
aGlsZCgpICYmICFzZWxmV2lsbFBhaW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0
UmVjdCByZXBhaW50UmVjdCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CisgICAg
R3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KTsKICAgICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50
UmVjdChyZXBhaW50UmVjdCwgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLCBwYWludEluZm8pKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTE0OCwyNyArMTQ4LDI3IEBAIHZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjphZGRGb2N1c1JpbmdSZWMKIAogdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnVwZGF0
ZUNhY2hlZEJvdW5kYXJpZXMoKQogewotICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBGbG9hdFJl
Y3QoKTsKLSAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgbV9yZXBh
aW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKKyAgICBtX29iamVjdEJvdW5kaW5nQm94ID0g
R3JhcGhpY3NSZWN0KCk7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveCA9IEdyYXBoaWNzUmVjdCgp
OworICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBTVkdS
ZW5kZXJTdXBwb3J0Ojpjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3hlcyh0aGlzLCBtX29iamVj
dEJvdW5kaW5nQm94LCBtX3N0cm9rZUJvdW5kaW5nQm94LCBtX3JlcGFpbnRCb3VuZGluZ0JveCk7
CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2Vz
KHRoaXMsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKIH0KIAotYm9vbCBSZW5kZXJTVkdDb250YWlu
ZXI6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQorYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEdy
YXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
biBoaXRUZXN0QWN0aW9uKQogewogICAgIC8vIEdpdmUgUmVuZGVyU1ZHVmlld3BvcnRDb250YWlu
ZXIgYSBjaGFuY2UgdG8gYXBwbHkgaXRzIHZpZXdwb3J0IGNsaXAKICAgICBpZiAoIXBvaW50SXNJ
bnNpZGVWaWV3cG9ydENsaXAocG9pbnRJblBhcmVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5p
bnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7CisgICAgR3JhcGhpY3NQb2ludCBsb2Nh
bFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2lu
dEluUGFyZW50KTsKIAogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9pbnRJbkNsaXBwaW5n
QXJlYSh0aGlzLCBsb2NhbFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxk
LT5ub2RlQXRGbG9hdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFj
dGlvbikpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5ub2RlQXRHcmFwaGljc1BvaW50KHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYWxQb2ludCwgaGl0VGVzdEFjdGlvbikpIHsKICAgICAgICAgICAgIHVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCByb3VuZGVkTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MywyOCArNTMsMjggQEAgcHJvdGVjdGVkOgogCiAgICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50Jik7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdC
b3g7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBH
cmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJv
dW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFw
aGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBt
X3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAKICAgICAv
LyBBbGxvdyBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhl
IHJpZ2h0IHRpbWUgaW4gbGF5b3V0KCkKICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlTG9jYWxU
cmFuc2Zvcm0oKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8gQWxsb3cgUmVuZGVyU1ZHVmll
d3BvcnRDb250YWluZXIgdG8gaG9vayBpbiBhdCB0aGUgcmlnaHQgdGltZXMgaW4gbGF5b3V0KCks
IHBhaW50KCkgYW5kIG5vZGVBdEZsb2F0UG9pbnQoKQorICAgIC8vIEFsbG93IFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyIHRvIGhvb2sgaW4gYXQgdGhlIHJpZ2h0IHRpbWVzIGluIGxheW91dCgp
LCBwYWludCgpIGFuZCBub2RlQXRHcmFwaGljc1BvaW50KCkKICAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1ZpZXdwb3J0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Vmlld3BvcnRDbGlwKFBhaW50
SW5mbyYpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNv
bnN0IEZsb2F0UG9pbnQmIC8qcG9pbnRJblBhcmVudCovKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBib29sIHBvaW50SXNJbnNpZGVWaWV3cG9ydENsaXAoY29uc3QgR3JhcGhpY3NQb2lu
dCYgLypwb2ludEluUGFyZW50Ki8pIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgc2VsZldp
bGxQYWludCgpOwogICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwogCiBwcml2YXRl
OgogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0UmVjdCBt
X29iamVjdEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94Owot
ICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9v
YmplY3RCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsK
KyAgICBHcmFwaGljc1JlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CiAgICAgYm9vbCBtX25lZWRz
Qm91bmRhcmllc1VwZGF0ZSA6IDE7CiB9OwogICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVp
Z25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCB2b2lkIFJl
bmRlclNWR0ZvcmVpZ25PYmplY3Q6OmxheW91dCgpCiAgICAgICAgIHVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXNJblBhcmVudHMgPSB0cnVlOwogICAgIH0KIAotICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9y
dCA9IG1fdmlld3BvcnQ7CisgICAgR3JhcGhpY3NSZWN0IG9sZFZpZXdwb3J0ID0gbV92aWV3cG9y
dDsKIAogICAgIC8vIENhY2hlIHZpZXdwb3J0IGJvdW5kYXJpZXMKLSAgICBGbG9hdFBvaW50IHZp
ZXdwb3J0TG9jYXRpb24oZm9yZWlnbi0+eCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT55KCku
dmFsdWUoZm9yZWlnbikpOwotICAgIG1fdmlld3BvcnQgPSBGbG9hdFJlY3Qodmlld3BvcnRMb2Nh
dGlvbiwgRmxvYXRTaXplKGZvcmVpZ24tPndpZHRoKCkudmFsdWUoZm9yZWlnbiksIGZvcmVpZ24t
PmhlaWdodCgpLnZhbHVlKGZvcmVpZ24pKSk7CisgICAgR3JhcGhpY3NQb2ludCB2aWV3cG9ydExv
Y2F0aW9uKGZvcmVpZ24tPngoKS52YWx1ZShmb3JlaWduKSwgZm9yZWlnbi0+eSgpLnZhbHVlKGZv
cmVpZ24pKTsKKyAgICBtX3ZpZXdwb3J0ID0gR3JhcGhpY3NSZWN0KHZpZXdwb3J0TG9jYXRpb24s
IEdyYXBoaWNzU2l6ZShmb3JlaWduLT53aWR0aCgpLnZhbHVlKGZvcmVpZ24pLCBmb3JlaWduLT5o
ZWlnaHQoKS52YWx1ZShmb3JlaWduKSkpOwogICAgIGlmICghdXBkYXRlQ2FjaGVkQm91bmRhcmll
c0luUGFyZW50cykKICAgICAgICAgdXBkYXRlQ2FjaGVkQm91bmRhcmllc0luUGFyZW50cyA9IG9s
ZFZpZXdwb3J0ICE9IG1fdmlld3BvcnQ7CiAKQEAgLTE0Miw5ICsxNDIsOSBAQCB2b2lkIFJlbmRl
clNWR0ZvcmVpZ25PYmplY3Q6OmxheW91dCgpCiAgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxh
eW91dCgpOwogfQogCi1ib29sIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6Om5vZGVBdEZsb2F0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQorYm9vbCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0Ojpub2RlQXRHcmFwaGljc1BvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKLSAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRyYW5zZm9ybSgpLmludmVy
c2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9p
bnQgPSBsb2NhbFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsK
IAogICAgIC8vIEVhcmx5IGV4aXQgaWYgbG9jYWwgcG9pbnQgaXMgbm90IGNvbnRhaW5lZCBpbiBj
bGlwcGVkIHZpZXdwb3J0IGFyZWEKICAgICBpZiAoU1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxv
d0hpZGRlbih0aGlzKSAmJiAhbV92aWV3cG9ydC5jb250YWlucyhsb2NhbFBvaW50KSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWln
bk9iamVjdC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3
IEBACiAKICNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTEgKzQ1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Ci0gICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXdwb3J0OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRp
bmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9Cisg
ICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3ZpZXdwb3J0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0Rmxv
YXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uKTsKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBi
b29sIGlzU1ZHRm9yZWlnbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNjQs
NyArNjQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgYm9vbCBt
X25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKLSAgICBGbG9hdFJlY3QgbV92aWV3cG9ydDsKKyAg
ICBHcmFwaGljc1JlY3QgbV92aWV3cG9ydDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRy
YW5zZm9ybTsKICAgICBtdXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFu
c2Zvcm07CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdH
cmFkaWVudFN0b3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDkgKzQ0LDkgQEAgcHVibGljOgogICAgIC8vIFJlbmRlck9iamVjdCdzIGRlZmF1bHQg
aW1wbGVtZW50YXRpb25zIEFTU0VSVF9OT1RfUkVBQ0hFRCgpCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDAwCiAgICAgdmlydHVhbCBJbnRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KikgeyByZXR1
cm4gSW50UmVjdCgpOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRp
bmdCb3goKSBjb25zdCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRh
aW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEyICs0NCwxMiBAQCB2b2lkIFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lcjo6cGFpbnQoUGFpCiAgICAgLy8gVGhpcyBzdWJ0cmVlIGRvZXMgbm90
IHBhaW50LgogfQogCi12b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYpCit2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8R3JhcGhpY3NRdWFkPiYpCiB7CiAgICAgLy8gVGhpcyBzdWJ0cmVl
IGRvZXMgbm90IHRha2UgdXAgc3BhY2Ugb3IgcGFpbnQKIH0KIAotYm9vbCBSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXI6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYsIEhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRl
clNWR0hpZGRlbkNvbnRhaW5lcjo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgSGl0VGVzdEFjdGlv
bikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAg
IAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCopIHsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mKTsKIAotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rp
b24pOwogfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMu
aCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlLmgiCkBAIC05NCw4ICs5NCw4IEBAIHZv
aWQgUmVuZGVyU1ZHSW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBTVkdJbWFnZUVs
ZW1lbnQqIGltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKIAot
ICAgIEZsb2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICBt
X29iamVjdEJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KGltYWdlLT54KCkudmFsdWUoaW1hZ2UpLCBp
bWFnZS0+eSgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPndpZHRoKCkudmFsdWUoaW1hZ2UpLCBpbWFn
ZS0+aGVpZ2h0KCkudmFsdWUoaW1hZ2UpKTsKKyAgICBHcmFwaGljc1JlY3Qgb2xkQm91bmRhcmll
cyA9IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEdyYXBo
aWNzUmVjdChpbWFnZS0+eCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPnkoKS52YWx1ZShpbWFnZSks
IGltYWdlLT53aWR0aCgpLnZhbHVlKGltYWdlKSwgaW1hZ2UtPmhlaWdodCgpLnZhbHVlKGltYWdl
KSk7CiAgICAgaWYgKG1fb2JqZWN0Qm91bmRpbmdCb3ggIT0gb2xkQm91bmRhcmllcykgewogICAg
ICAgICBtX3VwZGF0ZUNhY2hlZFJlcGFpbnRSZWN0ID0gdHJ1ZTsKICAgICAgICAgc2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYQogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIW1faW1hZ2VSZXNv
dXJjZS0+aGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICBHcmFwaGljc1Jl
Y3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlm
ICghU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1JlcGFpbnRSZWN0KGJvdW5k
aW5nQm94LCBtX2xvY2FsVHJhbnNmb3JtLCBwYWludEluZm8pKQogICAgICAgICByZXR1cm47CiAK
QEAgLTEyMyw4ICsxMjMsOCBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8m
IHBhCiAKICAgICAgICAgICAgIGlmIChTVkdSZW5kZXJTdXBwb3J0OjpwcmVwYXJlVG9SZW5kZXJT
VkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvKSkgewogICAgICAgICAgICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCk7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3VuZGluZ0JveDsKLSAgICAgICAgICAg
ICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdo
dCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3QgZGVzdFJlY3QgPSBtX29iamVjdEJv
dW5kaW5nQm94OworICAgICAgICAgICAgICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0KDAsIDAsIGlt
YWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogCiAgICAgICAgICAgICAgICAgU1ZHSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQqPihu
b2RlKCkpOwogICAgICAgICAgICAgICAgIGlmIChpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0
UmF0aW8oKS5hbGlnbigpICE9IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFT
UEVDVFJBVElPX05PTkUpCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6
cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9k
ZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9u
IGhpdFRlc3RBY3Rpb24pCitib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRHcmFwaGljc1BvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFj
dGlvbikKIHsKICAgICAvLyBXZSBvbmx5IGRyYXcgaW4gdGhlIGZvcmdyb3VuZCBwaGFzZSwgc28g
d2Ugb25seSBoaXQtdGVzdCB0aGVuLgogICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RG
b3JlZ3JvdW5kKQpAQCAtMTUwLDcgKzE1MCw3IEBAIGJvb2wgUmVuZGVyU1ZHSW1hZ2U6Om5vZGVB
dEZsb2F0UG9pbnQoY28KICAgICBQb2ludGVyRXZlbnRzSGl0UnVsZXMgaGl0UnVsZXMoUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzOjpTVkdfSU1BR0VfSElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+
cG9pbnRlckV2ZW50cygpKTsKICAgICBib29sIGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSk7CiAgICAgaWYgKGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWly
ZVZpc2libGUpIHsKLSAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVu
dFRyYW5zZm9ybSgpLmludmVyc2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKKyAgICAgICAg
R3JhcGhpY3NQb2ludCBsb2NhbFBvaW50ID0gbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLmludmVy
c2UoKS5tYXBQb2ludChwb2ludEluUGFyZW50KTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAo
IVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQb2ludCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC01Myw5ICs1
Myw5IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9j
YWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0K
IAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0K
KyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5k
aW5nQm94OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExh
eW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIApAQCAtNjQsMTUgKzY0LDE1IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgdmlydHVhbCBib29sIG5v
ZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CisgICAgdmlydHVh
bCBib29sIG5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgR3JhcGhpY3NQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlv
bik7CiAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYWxUcmFuc2Zvcm07IH0KIAogICAgIGJvb2wgbV91cGRhdGVDYWNoZWRS
ZXBhaW50UmVjdCA6IDE7CiAgICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV9vYmpl
Y3RCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50Qm91bmRpbmdCb3g7CisgICAg
R3JhcGhpY3NSZWN0IG1fb2JqZWN0Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0IG1fcmVw
YWludEJvdW5kaW5nQm94OwogICAgIE93blB0cjxSZW5kZXJJbWFnZVJlc291cmNlPiBtX2ltYWdl
UmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MjggKzQzLDI4IEBAIElubGluZUZsb3dCb3gqIFJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW4KICAg
ICByZXR1cm4gYm94OwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHSW5saW5lOjpvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0ID0g
UmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMpKQogICAgICAg
ICByZXR1cm4gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwogCi0gICAgcmV0dXJuIEZsb2F0
UmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRl
clNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRl
clNWR0lubGluZTo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogewogICAgIGlmIChjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCA9IFJlbmRlclNWR1RleHQ6OmxvY2F0ZVJlbmRlclNWR1RleHRB
bmNlc3Rvcih0aGlzKSkKICAgICAgICAgcmV0dXJuIG9iamVjdC0+c3Ryb2tlQm91bmRpbmdCb3go
KTsKIAotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7
CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3QKK0dyYXBoaWNzUmVjdCBSZW5kZXJTVkdJbmxpbmU6OnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIHsKICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhp
cykpCiAgICAgICAgIHJldHVybiBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCk7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogfQogCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCkBAIC04MiwxNSAr
ODIsMTUgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmU6Om1hcExvY2FsVG9Db250YWluZQogICAgIFNW
R1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5l
ciwgdXNlVHJhbnNmb3JtcywgZml4ZWQsIHRyYW5zZm9ybVN0YXRlKTsKIH0KIAotdm9pZCBSZW5k
ZXJTVkdJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQordm9p
ZCBSZW5kZXJTVkdJbmxpbmU6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1
YWRzKQogewogICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRl
UmVuZGVyU1ZHVGV4dEFuY2VzdG9yKHRoaXMpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgdGV4dEJvdW5kaW5nQm94ID0gb2JqZWN0LT5zdHJva2VC
b3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCB0ZXh0Qm91bmRpbmdCb3ggPSBvYmplY3Qt
PnN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBib3ggPSBmaXJz
dExpbmVCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRMaW5lQm94KCkpCi0gICAgICAgIHF1YWRz
LmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCh0ZXh0Qm91bmRpbmdCb3gueCgp
ICsgYm94LT54KCksIHRleHRCb3VuZGluZ0JveC55KCkgKyBib3gtPnkoKSwgYm94LT5sb2dpY2Fs
V2lkdGgoKSwgYm94LT5sb2dpY2FsSGVpZ2h0KCkpKSk7CisgICAgICAgIHF1YWRzLmFwcGVuZChs
b2NhbFRvQWJzb2x1dGVRdWFkKEdyYXBoaWNzUmVjdCh0ZXh0Qm91bmRpbmdCb3gueCgpICsgYm94
LT54KCksIHRleHRCb3VuZGluZ0JveC55KCkgKyBib3gtPnkoKSwgYm94LT5sb2dpY2FsV2lkdGgo
KSwgYm94LT5sb2dpY2FsSGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW5saW5lOjp3
aWxsQmVEZXN0cm95ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0
MSwxNCBAQCBwdWJsaWM6CiAgICAgLy8gV2Ugc2VhcmNoIGZvciB0aGUgcm9vdCB0ZXh0IGVsZW1l
bnQgYW5kIHRha2UgaXRzIGJvdW5kaW5nIGJveC4KICAgICAvLyBJdCBpcyBhbHNvIG5lY2Vzc2Fy
eSB0byB0YWtlIHRoZSBzdHJva2UgYW5kIHJlcGFpbnQgcmVjdCBvZgogICAgIC8vIHRoaXMgZWxl
bWVudCwgc2luY2Ugd2UgbmVlZCBpdCBmb3IgZmlsdGVycy4KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9r
ZUJvdW5kaW5nQm94KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lcik7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxz
ZSk7CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwg
VHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3Rv
cjxHcmFwaGljc1F1YWQ+Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbmxpbmVGbG93Qm94
KiBjcmVhdGVJbmxpbmVGbG93Qm94KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0xODAsNyArMTgwLDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvcwogICAgIEFTU0VSVChjb250YWluaW5nQmxv
Y2spOwogCiAgICAgLy8gTWFwIGxvY2FsIHBvaW50IHRvIGFic29sdXRlIHBvaW50LCBhcyB0aGUg
Y2hhcmFjdGVyIG9yaWdpbnMgc3RvcmVkIGluIHRoZSB0ZXh0IGZyYWdtZW50cyB1c2UgYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCi0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50KHBvaW50KTsKKyAg
ICBHcmFwaGljc1BvaW50IGFic29sdXRlUG9pbnQocG9pbnQpOwogICAgIGFic29sdXRlUG9pbnQu
bW92ZUJ5KGNvbnRhaW5pbmdCbG9jay0+bG9jYXRpb24oKSk7CiAKICAgICBmbG9hdCBjbG9zZXN0
RGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7CkBAIC0xOTksNyAr
MTk5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclNWR0lubGluZVRleHQ6OnBvcwogICAgICAg
ICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IGZyYWdtZW50cy5zaXplKCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkp
OwotICAgICAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVu
dC55IC0gYmFzZWxpbmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOworICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0g
YmFzZWxpbmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOwogICAgICAgICAgICAg
ZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9ybSk7CiAgICAg
ICAgICAgICBpZiAoIWZyYWdtZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAg
ICAgICBmcmFnbWVudFJlY3QgPSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVj
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NyBAQCBwcml2YXRlOgogCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgb2JqZWN0Qm91bmRpbmdCb3gg
Zm9yIERSVCByZXN1bHRzIGFuZCBmaWx0ZXJzIGF0IHRoZSBtb21lbnQuCiAgICAgLy8gVGhpcyBz
aG91bGQgYmUgZml4ZWQgdG8gZ2l2ZSBiYWNrIHRoZSBvYmplY3RCb3VuZGluZ0JveCBvZiB0aGUg
dGV4dCByb290LgotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2
Niw3IEBAIEludFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6Om91dGxpbmVCb3UKICAgICBJbnRS
ZWN0IGJveCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSk7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKIAotICAgIEZsb2F0
UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJl
Y3QoYm94KSwgcmVwYWludENvbnRhaW5lcik7CisgICAgR3JhcGhpY3NRdWFkIGNvbnRhaW5lclJl
bGF0aXZlUXVhZCA9IGxvY2FsVG9Db250YWluZXJRdWFkKEdyYXBoaWNzUmVjdChib3gpLCByZXBh
aW50Q29udGFpbmVyKTsKICAgICByZXR1cm4gY29udGFpbmVyUmVsYXRpdmVRdWFkLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7CiB9CiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6YWJzb2x1dGVSZWN0cwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12
b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JiBxdWFkcykKK3ZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEdyYXBoaWNzUXVhZD4mIHF1YWRzKQogewogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1
dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94KCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEludFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIEludFBvaW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+Jik7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNz
UXVhZD4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wg
Zml4ZWQsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlV2ls
bENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShT
VkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIlBvaW50ZXJFdmVudHNIaXRSdWxl
cy5oIgpAQCAtNzgsNyArNzgsNyBAQCBSZW5kZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7
CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBib29sIHJlcXVpcmVzRmlsbCwgV2luZFJ1bGUgZmlsbFJ1bGUpCitib29sIFJlbmRl
clNWR1BhdGg6OmZpbGxDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCwgYm9vbCBy
ZXF1aXJlc0ZpbGwsIFdpbmRSdWxlIGZpbGxSdWxlKQogewogICAgIGlmICghbV9maWxsQm91bmRp
bmdCb3guY29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MCw3ICs5
MCw3IEBAIGJvb2wgUmVuZGVyU1ZHUGF0aDo6ZmlsbENvbnRhaW5zKGNvbnN0IEYKICAgICByZXR1
cm4gbV9wYXRoLmNvbnRhaW5zKHBvaW50LCBmaWxsUnVsZSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZH
UGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wgcmVxdWly
ZXNTdHJva2UpCitib29sIFJlbmRlclNWR1BhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEdyYXBo
aWNzUG9pbnQmIHBvaW50LCBib29sIHJlcXVpcmVzU3Ryb2tlKQogewogICAgIGlmICghbV9zdHJv
a2VBbmRNYXJrZXJCb3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50
SW5mbyYgcGFpCiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkg
fHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBtX3BhdGguaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpOworICAgIEdyYXBoaWNzUmVjdCBib3VuZGluZ0JveCA9IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0
OjpwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoYm91bmRpbmdCb3gsIG1fbG9jYWxUcmFu
c2Zvcm0sIHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQzLDEzICsyNDMsMTMg
QEAgdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZQogICAgICAgICByZWN0
cy5hcHBlbmQocmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUGF0aDo6bm9kZUF0RmxvYXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCitib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEdyYXBoaWNzUG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgR3JhcGhpY3NQ
b2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewogICAg
IC8vIFdlIG9ubHkgZHJhdyBpbiB0aGUgZm9yZ3JvdW5kIHBoYXNlLCBzbyB3ZSBvbmx5IGhpdC10
ZXN0IHRoZW4uCiAgICAgaWYgKGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IG1fbG9j
YWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOworICAgIEdyYXBo
aWNzUG9pbnQgbG9jYWxQb2ludCA9IG1fbG9jYWxUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50SW5QYXJlbnQpOwogCiAgICAgaWYgKCFTVkdSZW5kZXJTdXBwb3J0Ojpwb2ludEluQ2xp
cHBpbmdBcmVhKHRoaXMsIGxvY2FsUG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
NzAsMjkgKzI3MCwyOSBAQCBib29sIFJlbmRlclNWR1BhdGg6Om5vZGVBdEZsb2F0UG9pbnQoY29u
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3Vs
YXRlTWFya2VyQm91bmRzSWZOZWVkZWQoKQorR3JhcGhpY3NSZWN0IFJlbmRlclNWR1BhdGg6OmNh
bGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCkKIHsKICAgICBTVkdFbGVtZW50KiBzdmdFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgQVNTRVJUKHN2Z0Vs
ZW1lbnQgJiYgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKSk7CiAgICAgaWYgKCFzdmdFbGVtZW50LT5p
c1N0eWxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBH
cmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCk7CiAgICAgaWYgKCFzdHls
ZWRFbGVtZW50LT5zdXBwb3J0c01hcmtlcnMoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgIEFTU0VSVChzdmdTdHls
ZS0+aGFzTWFya2VycygpKTsKIAogICAgIFNWR1Jlc291cmNlcyogcmVzb3VyY2VzID0gU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlck9iamVjdCh0aGlzKTsKICAgICBp
ZiAoIXJlc291cmNlcykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1
cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWFya2Vy
U3RhcnQgPSByZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCk7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VN
YXJrZXIqIG1hcmtlck1pZCA9IHJlc291cmNlcy0+bWFya2VyTWlkKCk7CiAgICAgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1hcmtlckVuZCA9IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CiAgICAg
aWYgKCFtYXJrZXJTdGFydCAmJiAhbWFya2VyTWlkICYmICFtYXJrZXJFbmQpCi0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAg
cmV0dXJuIG1fbWFya2VyTGF5b3V0SW5mby5jYWxjdWxhdGVCb3VuZGFyaWVzKG1hcmtlclN0YXJ0
LCBtYXJrZXJNaWQsIG1hcmtlckVuZCwgc3ZnU3R5bGUtPnN0cm9rZVdpZHRoKCkudmFsdWUoc3Zn
RWxlbWVudCksIG1fcGF0aCk7CiB9CkBAIC0zMDAsOSArMzAwLDkgQEAgRmxvYXRSZWN0IFJlbmRl
clNWR1BhdGg6OmNhbGN1bGF0ZU1hcmtlcgogdm9pZCBSZW5kZXJTVkdQYXRoOjp1cGRhdGVDYWNo
ZWRCb3VuZGFyaWVzKCkKIHsKICAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBt
X2ZpbGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7Ci0gICAgICAgIG1fcmVwYWludEJvdW5kaW5nQm94
ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0
KCk7CisgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3Qo
KTsKKyAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgUmVuZGVyU1ZHUGF0
aDo6dXBkYXRlQ2FjaGVkQm91bmRhcmkKICAgICB9CiAKICAgICBpZiAoc3ZnU3R5bGUtPmhhc01h
cmtlcnMoKSkgewotICAgICAgICBGbG9hdFJlY3QgbWFya2VyQm91bmRzID0gY2FsY3VsYXRlTWFy
a2VyQm91bmRzSWZOZWVkZWQoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IG1hcmtlckJvdW5kcyA9
IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CiAgICAgICAgIGlmICghbWFya2VyQm91
bmRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gu
dW5pdGUobWFya2VyQm91bmRzKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTMgKzI2LDEzIEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZHTWFya2VyTGF5
b3V0SW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Citj
bGFzcyBHcmFwaGljc1BvaW50OwogY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwogY2xhc3MgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ7CiAKQEAgLTQ4LDEyICs0OCwxMiBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgLy8gSGl0LWRldGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxs
IGFuZCB0aGUgc3Ryb2tlCi0gICAgYm9vbCBmaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYs
IGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSwgV2luZFJ1bGUgZmlsbFJ1bGUgPSBSVUxFX05PTlpF
Uk8pOwotICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVx
dWlyZXNTdHJva2UgPSB0cnVlKTsKKyAgICBib29sIGZpbGxDb250YWlucyhjb25zdCBHcmFwaGlj
c1BvaW50JiwgYm9vbCByZXF1aXJlc0ZpbGwgPSB0cnVlLCBXaW5kUnVsZSBmaWxsUnVsZSA9IFJV
TEVfTk9OWkVSTyk7CisgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBHcmFwaGljc1BvaW50
JiwgYm9vbCByZXF1aXJlc1N0cm9rZSA9IHRydWUpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qg
b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQot
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveDsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91
bmRpbmdCb3g7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c1JlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUFuZE1hcmtl
ckJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVwYWludFJlY3RJbkxv
Y2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQog
ICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgdmlydHVhbCBib29s
IGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTYzLDkgKzYzLDkgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPExheW91dFJl
Y3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9h
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogCi0g
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CisgICAgR3JhcGhp
Y3NSZWN0IGNhbGN1bGF0ZU1hcmtlckJvdW5kc0lmTmVlZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVD
YWNoZWRCb3VuZGFyaWVzKCk7CiAKIHByaXZhdGU6CkBAIC03Nyw5ICs3Nyw5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX25lZWRzVHJhbnNmb3JtVXBkYXRlIDogMTsKIAogICAgIG11dGFibGUgUGF0
aCBtX3BhdGg7Ci0gICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVj
dCBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRC
b3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9maWxsQm91bmRpbmdCb3g7CisgICAgR3Jh
cGhpY3NSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NSZWN0
IG1fcmVwYWludEJvdW5kaW5nQm94OwogICAgIFNWR01hcmtlckxheW91dEluZm8gbV9tYXJrZXJM
YXlvdXRJbmZvOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGVudW0gUmVu
ZGVyU1ZHUmVzb3VyY2VNb2RlIHsKIH07CiAKIGNsYXNzIENvbG9yOwotY2xhc3MgRmxvYXRSZWN0
OworY2xhc3MgR3JhcGhpY3NSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGF0
aDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHBvc3RBcHBseVJlc291cmNlKFJlbmRlck9iamVjdCosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgUGF0aCopIHsgfQotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOworICAgIHZpcnR1
YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgPSAwOwog
CiAgICAgdmlydHVhbCBSZW5kZXJTVkdSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKCkgY29uc3Qg
PSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVy
OjpyZW1vdmVBbGwKICAgICBpZiAobV9pbnZhbGlkYXRpb25CbG9ja2VkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX2NsaXBCb3VuZGFyaWVzID0gRmxvYXRSZWN0KCk7CisgICAgbV9jbGlwQm91
bmRhcmllcyA9IEdyYXBoaWNzUmVjdCgpOwogICAgIGlmICghbV9jbGlwcGVyLmlzRW1wdHkoKSkg
ewogICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGlwcGVyKTsKICAgICAgICAgbV9jbGlwcGVy
LmNsZWFyKCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXI6OmFwcGx5UmVzbwogICAgIHJldHVybiBhcHBseUNsaXBwaW5nVG9Db250ZXh0KG9iamVjdCwg
b2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpLCBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCksIGNvbnRleHQpOwogfQogCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6cGF0aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpCitib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
cGF0aE9ubHlDbGlwcGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNz
UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpCiB7CiAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2xpcC1w
YXRoIGdldHMgY2xpcHBlZCBpdHNlbGYsIHdlIGhhdmUgdG8gZmFsbGJhY2sgdG8gbWFza2luZy4K
ICAgICBpZiAoIXN0eWxlKCktPnN2Z1N0eWxlKCktPmNsaXBwZXJSZXNvdXJjZSgpLmlzRW1wdHko
KSkKQEAgLTE1MCwxMyArMTUwLDEzIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpw
YXRoT25seUMKICAgICB9CiAgICAgLy8gVGhlIFNWRyBzcGVjaWZpY2F0aW9uIHdhbnRzIHVzIHRv
IGNsaXAgZXZlcnl0aGluZywgaWYgY2xpcC1wYXRoIGRvZXNuJ3QgaGF2ZSBhIGNoaWxkLgogICAg
IGlmIChjbGlwUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIGNsaXBQYXRoLmFkZFJlY3QoRmxvYXRS
ZWN0KCkpOworICAgICAgICBjbGlwUGF0aC5hZGRSZWN0KEdyYXBoaWNzUmVjdCgpKTsKICAgICBj
b250ZXh0LT5jbGlwUGF0aChjbGlwUGF0aCwgY2xpcFJ1bGUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0Jv
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhcGhpY3NSZWN0JiByZXBhaW50UmVjdCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQogewogICAgIGlmICghbV9jbGlwcGVyLmNvbnRhaW5zKG9iamVjdCkpCiAgICAgICAgIG1fY2xp
cHBlci5zZXQob2JqZWN0LCBuZXcgQ2xpcHBlckRhdGEpOwpAQCAtMTcyLDggKzE3Miw4IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXAKICAgICBBZmZpbmVUcmFuc2Zv
cm0gYWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2FsY3VsYXRl
VHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5hdGVTeXN0ZW0ob2JqZWN0LCBhYnNv
bHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0gYWJz
b2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChyZXBhaW50UmVjdCk7Ci0gICAgRmxvYXRSZWN0IGNsYW1w
ZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1
dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAg
IEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KHJlcGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0
UmVjdCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JS
ZW5kZXJlcihvYmplY3QsIGFic29sdXRlVGFyZ2V0UmVjdCk7CiAKICAgICBpZiAoc2hvdWxkQ3Jl
YXRlQ2xpcERhdGEgJiYgIWNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmICghU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1
dGVUYXJnZXRSZWN0LCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBjbGlwcGVyRGF0YS0+Y2xp
cE1hc2tJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQikpCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0lt
YWdlKENsaXBwZXJEYXRhKiBjbGlwcGVyRGF0YSwgY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3Vu
ZGluZ0JveCkKK2Jvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudEludG9N
YXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhLCBjb25zdCBHcmFwaGljc1JlY3QmIG9i
amVjdEJvdW5kaW5nQm94KQogewogICAgIEFTU0VSVChjbGlwcGVyRGF0YSk7CiAgICAgQVNTRVJU
KGNsaXBwZXJEYXRhLT5jbGlwTWFza0ltYWdlKTsKQEAgLTI5Myw5ICsyOTMsOSBAQCB2b2lkIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6Y2FsY3VsYXRlCiAgICAgfQogfQogCi1ib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6aGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEZsb2F0UmVjdCYg
b2JqZWN0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UG9pbnQmIG5vZGVBdFBvaW50KQorYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRlc3RDbGlwQ29udGVudChjb25zdCBHcmFwaGlj
c1JlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBjb25zdCBHcmFwaGljc1BvaW50JiBub2RlQXRQb2lu
dCkKIHsKLSAgICBGbG9hdFBvaW50IHBvaW50ID0gbm9kZUF0UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCBwb2ludCA9IG5vZGVBdFBvaW50OwogICAgIGlmICghU1ZHUmVuZGVyU3VwcG9ydDo6cG9p
bnRJbkNsaXBwaW5nQXJlYSh0aGlzLCBwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMzE0LDE0ICszMTQsMTQgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmhpdFRl
c3RDbAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEludFBvaW50IGhpdFBvaW50Owog
ICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChoaXRQb2ludCk7Ci0gICAgICAgIGlmIChyZW5k
ZXJlci0+bm9kZUF0RmxvYXRQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6U1ZH
Q2xpcENvbnRlbnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3VuZCkpCisgICAgICAg
IGlmIChyZW5kZXJlci0+bm9kZUF0R3JhcGhpY3NQb2ludChIaXRUZXN0UmVxdWVzdChIaXRUZXN0
UmVxdWVzdDo6U1ZHQ2xpcENvbnRlbnQpLCByZXN1bHQsIHBvaW50LCBIaXRUZXN0Rm9yZWdyb3Vu
ZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlc291cmNlQm91bmRp
bmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyOjpyZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCogb2JqZWN0KQogewog
ICAgIC8vIFJlc291cmNlIHdhcyBub3QgbGF5b3V0ZWQgeWV0LiBHaXZlIGJhY2sgdGhlIGJvdW5k
aW5nQm94IG9mIHRoZSBvYmplY3QuCiAgICAgaWYgKHNlbGZOZWVkc0xheW91dCgpKQpAQCAtMzMx
LDcgKzMzMSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OnJlc28KICAg
ICAgICAgY2FsY3VsYXRlQ2xpcENvbnRlbnRSZXBhaW50UmVjdCgpOwogCiAgICAgaWYgKHN0YXRp
Y19jYXN0PFNWR0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKSA9PSBT
VkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpIHsKLSAgICAgICAg
RmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgp
OworICAgICAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCk7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAgICAg
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RCb3Vu
ZGluZ0JveC55KCkpOwogICAgICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKG9iamVjdEJv
dW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsy
MSw3IEBACiAjZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcl9oCiAKICNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNTIsMTEgKzUyLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlck9iamVjdCosIGJvb2wgbWFya0Zv
ckludmFsaWRhdGlvbiA9IHRydWUpOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2Uo
UmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQg
c2hvcnQgcmVzb3VyY2VNb2RlKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5k
aW5nQm94KFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNl
Qm91bmRpbmdCb3goUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2aXJ0dWFsIFJlbmRlclNWR1Jlc291
cmNlVHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdCB7IHJldHVybiBDbGlwcGVyUmVzb3VyY2VUeXBl
OyB9CiAgICAgCi0gICAgYm9vbCBoaXRUZXN0Q2xpcENvbnRlbnQoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRQb2ludCYpOworICAgIGJvb2wgaGl0VGVzdENsaXBDb250ZW50KGNvbnN0IEdy
YXBoaWNzUmVjdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKIAogICAgIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgY2xpcFBhdGhVbml0cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNW
R0NsaXBQYXRoRWxlbWVudCo+KG5vZGUoKSktPmNsaXBQYXRoVW5pdHMoKTsgfQogCkBAIC02NCwx
MyArNjQsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBjbGlwUGF0aCBjYW4gYmUgY2xp
cHBlZCB0b28sIGJ1dCBkb24ndCBoYXZlIGEgYm91bmRpbmdCb3ggb3IgcmVwYWludFJlY3QuIFNv
IHdlIGNhbid0IGNhbGwKICAgICAvLyBhcHBseVJlc291cmNlIGRpcmVjdGx5IGFuZCB1c2UgdGhl
IHJlY3RzIGZyb20gdGhlIG9iamVjdCwgc2luY2UgdGhleSBhcmUgZW1wdHkgZm9yIFJlbmRlclNW
R1Jlc291cmNlcwotICAgIGJvb2wgYXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJPYmplY3Qq
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQqKTsK
LSAgICBib29sIHBhdGhPbmx5Q2xpcHBpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0Jik7Ci0gICAgYm9vbCBkcmF3Q29udGVudEludG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqLCBj
b25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KTsKKyAgICBib29sIGFwcGx5Q2xpcHBp
bmdUb0NvbnRleHQoUmVuZGVyT2JqZWN0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgY29uc3QgR3Jh
cGhpY3NSZWN0JiwgR3JhcGhpY3NDb250ZXh0Kik7CisgICAgYm9vbCBwYXRoT25seUNsaXBwaW5n
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEdyYXBoaWNzUmVjdCYpOworICAgIGJvb2wgZHJhd0Nv
bnRlbnRJbnRvTWFza0ltYWdlKENsaXBwZXJEYXRhKiwgY29uc3QgR3JhcGhpY3NSZWN0JiBvYmpl
Y3RCb3VuZGluZ0JveCk7CiAgICAgdm9pZCBjYWxjdWxhdGVDbGlwQ29udGVudFJlcGFpbnRSZWN0
KCk7CiAKICAgICBib29sIG1faW52YWxpZGF0aW9uQmxvY2tlZDsKLSAgICBGbG9hdFJlY3QgbV9j
bGlwQm91bmRhcmllczsKKyAgICBHcmFwaGljc1JlY3QgbV9jbGlwQm91bmRhcmllczsKICAgICBI
YXNoTWFwPFJlbmRlck9iamVjdCosIENsaXBwZXJEYXRhKj4gbV9jbGlwcGVyOwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDggQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NS
ZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTIxLDcgKzEyMSw3IEBAIFBhc3NSZWZQdHI8
U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmUKICAgICByZXR1cm4gYnVpbGRlci5yZWxlYXNl
KCk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmZpdHNJbk1heGltdW1JbWFn
ZVNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQorYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6Zml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBHcmFwaGlj
c1NpemUmIHNpemUsIEdyYXBoaWNzU2l6ZSYgc2NhbGUpCiB7CiAgICAgYm9vbCBtYXRjaGVzRmls
dGVyU2l6ZSA9IHRydWU7CiAgICAgaWYgKHNpemUud2lkdGgoKSA+IGtNYXhGaWx0ZXJTaXplKSB7
CkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlS
ZXNvdQogICAgIH0KIAogICAgIE93blB0cjxGaWx0ZXJEYXRhPiBmaWx0ZXJEYXRhKGFkb3B0UHRy
KG5ldyBGaWx0ZXJEYXRhKSk7Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gb2Jq
ZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCB0YXJnZXRCb3VuZGlu
Z0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKIAogICAgIFNWR0ZpbHRlckVsZW1l
bnQqIGZpbHRlckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50Kj4obm9kZSgp
KTsKICAgICBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzID0gZmlsdGVyRWxlbWVudC0+ZmlsdGVyQm91
bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwpAQCAtMTc0LDEwICsxNzQsMTAgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogICAgIGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
LnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgYWJzb2x1dGVUcmFu
c2Zvcm0uZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS5mKCkpOwogCiAgICAgLy8gRGV0ZXJtaW5lIGFi
c29sdXRlIGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgot
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMpOwot
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3VuZGluZ0JveCgp
OworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZUZpbHRlckJvdW5kYXJpZXMgPSBmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJp
ZXMpOworICAgIEdyYXBoaWNzUmVjdCBkcmF3aW5nUmVnaW9uID0gb2JqZWN0LT5zdHJva2VCb3Vu
ZGluZ0JveCgpOwogICAgIGRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5k
YXJpZXMpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOworICAg
IEdyYXBoaWNzUmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGRyYXdpbmdSZWdpb24pOwogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgogICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hN
b2RlID0gZmlsdGVyRWxlbWVudC0+cHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdQogCiAgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBzY2FsZSBmYWN0b3IgZm9yIHRoZSB1c2Ugb2YgZmlsdGVyUmVzLgogICAgIC8vIEFsc28gc2Vl
IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjRmlsdGVyRWZmZWN0c1JlZ2lv
bgotICAgIEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKKyAgICBHcmFwaGljc1NpemUgc2NhbGUoMSwg
MSk7CiAgICAgaWYgKGZpbHRlckVsZW1lbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZmlsdGVy
UmVzQXR0cikpIHsKICAgICAgICAgc2NhbGUuc2V0V2lkdGgoZmlsdGVyRWxlbWVudC0+ZmlsdGVy
UmVzWCgpIC8gYWJzb2x1dGVGaWx0ZXJCb3VuZGFyaWVzLndpZHRoKCkpOwogICAgICAgICBzY2Fs
ZS5zZXRIZWlnaHQoZmlsdGVyRWxlbWVudC0+ZmlsdGVyUmVzWSgpIC8gYWJzb2x1dGVGaWx0ZXJC
b3VuZGFyaWVzLmhlaWdodCgpKTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50ZXJtZWRp
YXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRlclNpemUu
Ci0gICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOwor
ICAgIEdyYXBoaWNzUmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsK
ICAgICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7
CiAgICAgZml0c0luTWF4aW11bUltYWdlU2l6ZSh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxl
KTsKIApAQCAtMjEyLDcgKzIxMiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihsYXN0RWZm
ZWN0KTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVj
dCgpOworICAgIEdyYXBoaWNzUmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RS
ZWN0KCk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGlt
YWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5ldyBz
Y2FsZSBmYWN0b3JzLgogICAgIGlmICghZml0c0luTWF4aW11bUltYWdlU2l6ZShzdWJSZWdpb24u
c2l6ZSgpLCBzY2FsZSkpIHsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291CiAgICAgICAgIHNvdXJjZUdyYXBoaWNDb250ZXh0LT5zY2Fs
ZShzY2FsZSk7CiAKICAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRh
dGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKLSAgICBzb3VyY2VHcmFwaGljQ29udGV4
dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlRHJhd2luZ1JlZ2lv
bi5zaXplKCkpKTsKKyAgICBzb3VyY2VHcmFwaGljQ29udGV4dC0+Y2xlYXJSZWN0KEdyYXBoaWNz
UmVjdChHcmFwaGljc1BvaW50KCksIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zaXplKCkpKTsKICAg
ICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVyID0gc291cmNlR3JhcGhpYy5yZWxlYXNl
KCk7CiAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKIApAQCAtMzE2LDcg
KzMxNiw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKICAgICAg
ICAgaWYgKHJlc3VsdEltYWdlKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpKTsKIAotICAgICAg
ICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLT5maWx0ZXItPmZp
bHRlclJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEdyYXBo
aWNzU2l6ZSgxIC8gZmlsdGVyRGF0YS0+ZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSwgMSAvIGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIocmVzdWx0SW1hZ2UsIG9iamVj
dC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEtPmZpbHRlci0+ZmlsdGVy
UmVzb2x1dGlvbigpKTsKQEAgLTMyNywxMiArMzI3LDEyIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVIKICAgICBmaWx0ZXJEYXRhLT5zb3VyY2VHcmFwaGljQnVmZmVy
LmNsZWFyKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVzb3Vy
Y2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVjdCkKK0dyYXBoaWNzUmVjdCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqIG9iamVj
dCkKIHsKICAgICBpZiAoU1ZHRmlsdGVyRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R0ZpbHRlckVsZW1lbnQqPihub2RlKCkpKQogICAgICAgICByZXR1cm4gZWxlbWVudC0+ZmlsdGVy
Qm91bmRpbmdCb3gob2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpKTsKIAotICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAj
ZGVmaW5lIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyX2gKIAogI2lmIEVOQUJMRShTVkcpICYmIEVO
QUJMRShGSUxURVJTKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UmVjdC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVz
b3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKQEAgLTUyLDggKzUyLDgg
QEAgc3RydWN0IEZpbHRlckRhdGEgewogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3Jh
cGhpY0J1ZmZlcjsKICAgICBHcmFwaGljc0NvbnRleHQqIHNhdmVkQ29udGV4dDsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgRmxvYXRSZWN0IGJv
dW5kYXJpZXM7Ci0gICAgRmxvYXRTaXplIHNjYWxlOworICAgIEdyYXBoaWNzUmVjdCBib3VuZGFy
aWVzOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZTsKICAgICBib29sIGJ1aWxkZWQgOiAxOwogICAg
IGJvb2wgbWFya2VkRm9yUmVtb3ZhbCA6IDE7CiB9OwpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2RlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3ND
b250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0aCopOwogCi0g
ICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKTsK
KyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopOwogCiAgICAgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMo
RmlsdGVyKik7CiAKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZW5kZXJT
VkdSZXNvdXJjZVR5cGUgc19yZXNvdXJjZVR5cGU7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBmaXRz
SW5NYXhpbXVtSW1hZ2VTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYpOworICAgIGJv
b2wgZml0c0luTWF4aW11bUltYWdlU2l6ZShjb25zdCBHcmFwaGljc1NpemUmLCBHcmFwaGljc1Np
emUmKTsKIAogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmlsdGVyRGF0YSo+IG1fZmlsdGVy
OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuY3BwCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXJQcmltaXRpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTEgQEAgdm9p
ZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZTo6cwogICAgIH0KIH0KIAotRmxvYXRS
ZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlOjpkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oRmlsdGVyRWZmZWN0KiBlZmZlY3QpCitHcmFwaGljc1JlY3QgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKIHsKLSAgICBGbG9hdFJlY3QgdW5pdGVSZWN0Owot
ICAgIEZsb2F0UmVjdCBzdWJyZWdpb25Cb3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRh
cmllcygpOwotICAgIEZsb2F0UmVjdCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsK
KyAgICBHcmFwaGljc1JlY3QgdW5pdGVSZWN0OworICAgIEdyYXBoaWNzUmVjdCBzdWJyZWdpb25C
b3VuZGluZ0JveCA9IGVmZmVjdC0+ZWZmZWN0Qm91bmRhcmllcygpOworICAgIEdyYXBoaWNzUmVj
dCBzdWJyZWdpb24gPSBzdWJyZWdpb25Cb3VuZGluZ0JveDsKICAgICBTVkdGaWx0ZXIqIGZpbHRl
ciA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlcio+KGVmZmVjdC0+ZmlsdGVyKCkpOwogICAgIEFTU0VS
VChmaWx0ZXIpOwogCkBAIC04NSw3ICs4NSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGkKICAgICBpZiAoZmlsdGVyLT5lZmZlY3RCb3VuZGluZ0JveE1vZGUoKSkg
ewogICAgICAgICBzdWJyZWdpb24gPSB1bml0ZVJlY3Q7CiAgICAgICAgIC8vIEF2b2lkIHRoZSBj
YWxsaW5nIG9mIGEgdmlydHVhbCBtZXRob2Qgc2V2ZXJhbCB0aW1lcy4KLSAgICAgICAgRmxvYXRS
ZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLT50YXJnZXRCb3VuZGluZ0JveCgpOworICAg
ICAgICBHcmFwaGljc1JlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXItPnRhcmdldEJvdW5k
aW5nQm94KCk7CiAKICAgICAgICAgaWYgKGVmZmVjdC0+aGFzWCgpKQogICAgICAgICAgICAgc3Vi
cmVnaW9uLnNldFgodGFyZ2V0Qm91bmRpbmdCb3gueCgpICsgc3VicmVnaW9uQm91bmRpbmdCb3gu
eCgpICogdGFyZ2V0Qm91bmRpbmdCb3gud2lkdGgoKSk7CkBAIC0xMTQsOCArMTE0LDggQEAgRmxv
YXRSZWN0IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aQogCiAgICAgZWZmZWN0LT5zZXRG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKIAotICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVN1YnJlZ2lvbiA9IGZpbHRlci0+bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVn
aW9uKTsKLSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVz
b2x1dGlvbigpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVN1YnJlZ2lvbiA9IGZpbHRlci0+
bWFwTG9jYWxSZWN0VG9BYnNvbHV0ZVJlY3Qoc3VicmVnaW9uKTsKKyAgICBHcmFwaGljc1NpemUg
ZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpOwogICAgIGFic29s
dXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24ud2lkdGgoKSwgZmlsdGVyUmVzb2x1
dGlvbi5oZWlnaHQoKSk7CiAKICAgICAvLyBGRUltYWdlIG5lZWRzIHRoZSB1bmNsaXBwZWQgc3Vi
cmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGVzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdApA
QCAtMTI0LDcgKzEyNCw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGkKICAgICAgICAgc3RhdGljX2Nhc3Q8RkVJbWFnZSo+KGVmZmVjdCktPnNldEFic29sdXRlU3Vi
cmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAogICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVm
ZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVTY2FsZWRG
aWx0ZXJSZWdpb24gPSBmaWx0ZXItPmZpbHRlclJlZ2lvbigpOworICAgIEdyYXBoaWNzUmVjdCBh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci0+ZmlsdGVyUmVnaW9uKCk7CiAgICAg
YWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbi53aWR0aCgp
LCBmaWx0ZXJSZXNvbHV0aW9uLmhlaWdodCgpKTsKICAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5pbnRl
cnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBUaGV5
IGRlcGVuZCBvbiB0aGUgUmVuZGVyT2JqZWN0IGFyZ3VtZW50IG9mIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlLgotICAgIHN0YXRpYyBGbG9hdFJlY3QgZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCopOworICAgIHN0YXRpYyBHcmFwaGlj
c1JlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKEZpbHRlckVmZmVjdCopOwog
CiAgICAgaW5saW5lIHZvaWQgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGUpCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1LDggQEAgc3RhdGlj
IGlubGluZSBib29sIGNyZWF0ZU1hc2tBbmRTd2FwQ29udAogICAgIEFmZmluZVRyYW5zZm9ybSBh
YnNvbHV0ZVRyYW5zZm9ybTsKICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFu
c2Zvcm1hdGlvblRvT3V0ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbSh0ZXh0Um9vdEJsb2NrLCBh
YnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVUYXJnZXRSZWN0ID0g
YWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdCh0ZXh0Um9vdEJsb2NrLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpKTsKLSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVj
dCA9IFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5k
ZXJlcih0ZXh0Um9vdEJsb2NrLCBhYnNvbHV0ZVRhcmdldFJlY3QpOworICAgIEdyYXBoaWNzUmVj
dCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRleHRSb290
QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOworICAgIEdyYXBoaWNzUmVj
dCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFy
Z2V0UmVjdCk7CiAgICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY3JlYXRlTWFza0FuZFN3YXBDb250CiAKIHN0YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNm
b3JtIGNsaXBUb1RleHRNYXNrKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGlt
YWdlQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmxvYXRSZWN0JiB0YXJnZXRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR3JhcGhpY3NSZWN0JiB0YXJnZXRSZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJvdW5kaW5nQm94TW9k
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0pCkBAIC0xMjIsMTQgKzEyMiwxNCBAQCBz
dGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSBjbGlwVG9UZXh0CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGFic29sdXRlVHJhbnNmb3JtOwogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNhbGN1bGF0
ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKHRleHRSb290Qmxv
Y2ssIGFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJl
Y3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRhcmdldFJlY3QpOwotICAgIEZsb2F0UmVj
dCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0ID0gU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBl
ZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKHRleHRSb290QmxvY2ssIGFic29sdXRlVGFy
Z2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGFyZ2V0UmVjdCA9IGFic29sdXRl
VHJhbnNmb3JtLm1hcFJlY3QodGFyZ2V0UmVjdCk7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFtcGVkQWJzb2x1dGVU
YXJnZXRSZWN0Rm9yUmVuZGVyZXIodGV4dFJvb3RCbG9jaywgYWJzb2x1dGVUYXJnZXRSZWN0KTsK
IAogICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHQsIGFi
c29sdXRlVHJhbnNmb3JtLCBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBpbWFnZUJ1ZmZlcik7
CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIGlmIChib3VuZGluZ0JveE1vZGUp
IHsKLSAgICAgICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0JveCA9IHRleHRSb290QmxvY2stPm9i
amVjdEJvdW5kaW5nQm94KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCBtYXNrQm91bmRpbmdCb3gg
PSB0ZXh0Um9vdEJsb2NrLT5vYmplY3RCb3VuZGluZ0JveCgpOwogICAgICAgICBtYXRyaXgudHJh
bnNsYXRlKG1hc2tCb3VuZGluZ0JveC54KCksIG1hc2tCb3VuZGluZ0JveC55KCkpOwogICAgICAg
ICBtYXRyaXguc2NhbGVOb25Vbmlmb3JtKG1hc2tCb3VuZGluZ0JveC53aWR0aCgpLCBtYXNrQm91
bmRpbmdCb3guaGVpZ2h0KCkpOwogICAgIH0KQEAgLTE2Myw3ICsxNjMsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVzCiAKICAgICAvLyBTcGVjOiBXaGVuIHRoZSBn
ZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVtZW50IGhhcyBubyB3aWR0aCBvciBoZWlnaHQg
YW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNpZmllZCwKICAgICAvLyB0aGVuIHRoZSBnaXZl
biBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBhIGZpbHRlcikgd2lsbCBiZSBpZ25vcmVkLgot
ICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdC
b3goKTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCk7CiAgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5k
aW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDksNyArMjQ5
LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbAogICAgICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnNmb3JtOwogICAgICAgICAgICAgY2FsY3Vs
YXRlR3JhZGllbnRUcmFuc2Zvcm0oZ3JhZGllbnRUcmFuc2Zvcm0pOwogCi0gICAgICAgICAgICBG
bG9hdFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAgICAgICAgIEdyYXBoaWNzUmVjdCB0YXJnZXRSZWN0
OwogICAgICAgICAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+c2V0R3JhZGllbnRTcGFjZVRy
YW5zZm9ybShjbGlwVG9UZXh0TWFzayhjb250ZXh0LCBtX2ltYWdlQnVmZmVyLCB0YXJnZXRSZWN0
LCBvYmplY3QsIGJvdW5kaW5nQm94TW9kZSgpLCBncmFkaWVudFRyYW5zZm9ybSkpOwogICAgICAg
ICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRpZW50KGdyYWRpZW50RGF0YS0+Z3JhZGllbnQpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Jl
Y3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKQEAgLTUxLDcgKzUxLDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgcG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0Kiwg
R3JhcGhpY3NDb250ZXh0KiYsIHVuc2lnbmVkIHNob3J0IHJlc291cmNlTW9kZSwgY29uc3QgUGF0
aCopOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2Jq
ZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBy
ZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50RGF0YSosIGNvbnN0
IFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiYpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
TGluZWFyR3JhZGllbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDggKzUwLDggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRp
ZW50OjpidQogICAgIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCogbGluZWFyR3JhZGllbnRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Kj4oZ3JhZGllbnRFbGVt
ZW50KTsKIAogICAgIC8vIERldGVybWluZSBncmFkaWVudCBzdGFydC9lbmQgcG9pbnRzCi0gICAg
RmxvYXRQb2ludCBzdGFydFBvaW50OwotICAgIEZsb2F0UG9pbnQgZW5kUG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCBzdGFydFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZW5kUG9pbnQ7CiAgICAg
bGluZWFyR3JhZGllbnRFbGVtZW50LT5jYWxjdWxhdGVTdGFydEVuZFBvaW50cyhtX2F0dHJpYnV0
ZXMsIHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKIAogICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQg
PSBHcmFkaWVudDo6Y3JlYXRlKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJr
ZXIuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5
IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OmFwcGx5Vmlld3AKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmNsaXAobV92aWV3cG9ydCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJT
VkdSZXNvdXJjZU1hcmtlcjo6bWFya2VyQm91bmRhcmllcyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hcmtlclRyYW5zZm9ybWF0aW9uKSBjb25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclNWR1Jlc291
cmNlTWFya2VyOjptYXJrZXJCb3VuZGFyaWVzKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWFya2Vy
VHJhbnNmb3JtYXRpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGNvb3JkaW5hdGVzID0gUmVu
ZGVyU1ZHQ29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgIEdy
YXBoaWNzUmVjdCBjb29yZGluYXRlcyA9IFJlbmRlclNWR0NvbnRhaW5lcjo6cmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKTsKIAogICAgIC8vIE1hcCByZXBhaW50IHJlY3QgaW50byBwYXJl
bnQgY29vcmRpbmF0ZSBzcGFjZSwgaW4gd2hpY2ggdGhlIG1hcmtlciBib3VuZGFyaWVzIGhhdmUg
dG8gYmUgZXZhbHVhdGVkCiAgICAgY29vcmRpbmF0ZXMgPSBsb2NhbFRvUGFyZW50VHJhbnNmb3Jt
KCkubWFwUmVjdChjb29yZGluYXRlcyk7CkBAIC05MiwxMiArOTIsMTIgQEAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBSZW5kZXJTVkdSZXNvdXJjZQogICAgIC8vIHJldHVybiB2aWV3cG9ydFRyYW5z
bGF0aW9uICogbG9jYWxUcmFuc2Zvcm0oKSAqIHZpZXdwb3J0VHJhbnNmb3JtKCk7CiB9CiAKLUZs
b2F0UG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkgY29uc3QK
K0dyYXBoaWNzUG9pbnQgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXI6OnJlZmVyZW5jZVBvaW50KCkg
Y29uc3QKIHsKICAgICBTVkdNYXJrZXJFbGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdN
YXJrZXJFbGVtZW50Kj4obm9kZSgpKTsKICAgICBBU1NFUlQobWFya2VyKTsKIAotICAgIHJldHVy
biBGbG9hdFBvaW50KG1hcmtlci0+cmVmWCgpLnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgp
LnZhbHVlKG1hcmtlcikpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KG1hcmtlci0+cmVmWCgp
LnZhbHVlKG1hcmtlciksIG1hcmtlci0+cmVmWSgpLnZhbHVlKG1hcmtlcikpOwogfQogCiBmbG9h
dCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6YW5nbGUoKSBjb25zdApAQCAtMTEyLDcgKzExMiw3
IEBAIGZsb2F0IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjphbmdsZSgpIGMKICAgICByZXR1cm4g
YW5nbGU7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlcjo6bWFy
a2VyVHJhbnNmb3JtYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhdXRvQW5n
bGUsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jl
c291cmNlTWFya2VyOjptYXJrZXJUcmFuc2Zvcm1hdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBv
cmlnaW4sIGZsb2F0IGF1dG9BbmdsZSwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAg
U1ZHTWFya2VyRWxlbWVudCogbWFya2VyID0gc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudCo+
KG5vZGUoKSk7CiAgICAgQVNTRVJUKG1hcmtlcik7CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpkcmF3KFBhaW50CiAgICAgUmVuZGVyU1ZHQ29udGFp
bmVyOjpwYWludChpbmZvLCBJbnRQb2ludCgpKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyOjptYXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBjb250ZW50VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9y
aWdpbiwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXI6Om1hcmtlckNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29uc3QgR3JhcGhpY3NQb2ludCYgb3Jp
Z2luLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICAvLyBUaGUgJ29yaWdpbicgY29v
cmRpbmF0ZSBtYXBzIHRvIFNWR3MgcmVmWC9yZWZZLCBnaXZlbiBpbiBjb29yZGluYXRlcyByZWxh
dGl2ZSB0byB0aGUgdmlld3BvcnQgZXN0YWJsaXNoZWQgYnkgdGhlIG1hcmtlcgotICAgIEZsb2F0
UG9pbnQgbWFwcGVkT3JpZ2luID0gdmlld3BvcnRUcmFuc2Zvcm0oKS5tYXBQb2ludChvcmlnaW4p
OworICAgIEdyYXBoaWNzUG9pbnQgbWFwcGVkT3JpZ2luID0gdmlld3BvcnRUcmFuc2Zvcm0oKS5t
YXBQb2ludChvcmlnaW4pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybWF0aW9uID0g
Y29udGVudFRyYW5zZm9ybWF0aW9uOwogICAgIGlmIChzdHJva2VXaWR0aCAhPSAtMSkKQEAgLTE2
Niw3ICsxNjYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFya2VyOjpjYWxjVmlld3BvCiAK
ICAgICBmbG9hdCB3ID0gbWFya2VyLT5tYXJrZXJXaWR0aCgpLnZhbHVlKG1hcmtlcik7CiAgICAg
ZmxvYXQgaCA9IG1hcmtlci0+bWFya2VySGVpZ2h0KCkudmFsdWUobWFya2VyKTsKLSAgICBtX3Zp
ZXdwb3J0ID0gRmxvYXRSZWN0KDAsIDAsIHcsIGgpOworICAgIG1fdmlld3BvcnQgPSBHcmFwaGlj
c1JlY3QoMCwgMCwgdywgaCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFya2VyLmgJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
cmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdN
YXJrZXJFbGVtZW50LmgiCkBAIC00NiwxOSArNDYsMTkgQEAgcHVibGljOgogICAgIHZvaWQgZHJh
dyhQYWludEluZm8mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKIAogICAgIC8vIENhbGN1bGF0
ZXMgbWFya2VyIGJvdW5kYXJpZXMsIG1hcHBlZCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQncyBjb29y
ZGluYXRlIHNwYWNlCi0gICAgRmxvYXRSZWN0IG1hcmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1hdGlvbikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0
IG1hcmtlckJvdW5kYXJpZXMoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXJrZXJUcmFuc2Zvcm1h
dGlvbikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlWaWV3cG9ydENsaXAoUGFpbnRJ
bmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxj
Vmlld3BvcnQoKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRv
UGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlclRyYW5z
Zm9ybWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgYW5nbGUsIGZsb2F0IHN0
cm9rZVdpZHRoKSBjb25zdDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWFya2VyVHJhbnNmb3JtYXRp
b24oY29uc3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSwgZmxvYXQgc3Ryb2tl
V2lkdGgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGluZ0Jv
eChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gR3Jh
cGhpY3NSZWN0KCk7IH0KIAotICAgIEZsb2F0UG9pbnQgcmVmZXJlbmNlUG9pbnQoKSBjb25zdDsK
KyAgICBHcmFwaGljc1BvaW50IHJlZmVyZW5jZVBvaW50KCkgY29uc3Q7CiAgICAgZmxvYXQgYW5n
bGUoKSBjb25zdDsKICAgICBTVkdNYXJrZXJVbml0c1R5cGUgbWFya2VyVW5pdHMoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKS0+bWFya2VyVW5p
dHMoKTsgfQogCkBAIC02OCwxMiArNjgsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBH
ZW5lcmF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNhYmxlIHRvIHJlbmRlciBtYXJrZXIg
Y29udGVudC4gSGFuZGxlcyBzY2FsaW5nIHRoZSBtYXJrZXIgY29udGVudAogICAgIC8vIGFjb3Jk
aW5nIHRvIFNWR3MgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBjb25jZXB0LCB3aGVuIGEgc3Ry
b2tlV2lkdGggdmFsdWUgIT0gLTEgaXMgcGFzc2VkIGluLgotICAgIEFmZmluZVRyYW5zZm9ybSBt
YXJrZXJDb250ZW50VHJhbnNmb3JtYXRpb24oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjb250ZW50
VHJhbnNmb3JtYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgc3Ryb2tlV2lk
dGggPSAtMSkgY29uc3Q7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1hcmtlckNvbnRlbnRUcmFuc2Zv
cm1hdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiwgY29u
c3QgR3JhcGhpY3NQb2ludCYgb3JpZ2luLCBmbG9hdCBzdHJva2VXaWR0aCA9IC0xKSBjb25zdDsK
IAogICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3cG9ydFRyYW5zZm9ybSgpIGNvbnN0OwogCiAgICAg
bXV0YWJsZSBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRvUGFyZW50VHJhbnNmb3JtOwotICAgIEZs
b2F0UmVjdCBtX3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDggKzI0LDggQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTYxLDcgKzYxLDcgQEAgUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6On5SZW5kZXJTVkdSZXNvdQogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyOjpyZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJvb2wgbWFya0ZvckludmFsaWRhdGlvbikK
IHsKLSAgICBtX21hc2tDb250ZW50Qm91bmRhcmllcyA9IEZsb2F0UmVjdCgpOworICAgIG1fbWFz
a0NvbnRlbnRCb3VuZGFyaWVzID0gR3JhcGhpY3NSZWN0KCk7CiAgICAgaWYgKCFtX21hc2tlci5p
c0VtcHR5KCkpIHsKICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fbWFza2VyKTsKICAgICAgICAg
bV9tYXNrZXIuY2xlYXIoKTsKQEAgLTk4LDggKzk4LDggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlcjo6YXBwbHlSZXNvdQogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9y
bTsKICAgICBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRvT3V0
ZXJtb3N0U1ZHQ29vcmRpbmF0ZVN5c3RlbShvYmplY3QsIGFic29sdXRlVHJhbnNmb3JtKTsKIAot
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgRmxvYXRS
ZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNvbHV0ZVRhcmdldFJl
Y3QpOworICAgIEdyYXBoaWNzUmVjdCBhYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRyYW5z
Zm9ybS5tYXBSZWN0KG9iamVjdC0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Cisg
ICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBTVkdJbWFnZUJ1ZmZl
clRvb2xzOjpjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0Rm9yUmVuZGVyZXIob2JqZWN0LCBhYnNv
bHV0ZVRhcmdldFJlY3QpOwogCiAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIWNs
YW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIFNWR01hc2tFbGVt
ZW50KiBtYXNrRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKTsK
QEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29u
dGVuCiAgICAgLy8gRXZlbnR1YWxseSBhZGp1c3QgdGhlIG1hc2sgaW1hZ2UgY29udGV4dCBhY2Nv
cmRpbmcgdG8gdGhlIHRhcmdldCBvYmplY3RCb3VuZGluZ0JveC4KICAgICBBZmZpbmVUcmFuc2Zv
cm0gbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbjsKICAgICBpZiAobWFza0VsZW1lbnQtPm1hc2tD
b250ZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1gpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5v
YmplY3RCb3VuZGluZ0JveCgpOworICAgICAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdC
b3ggPSBvYmplY3QtPm9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgICAgIG1hc2tDb250ZW50VHJh
bnNmb3JtYXRpb24udHJhbnNsYXRlKG9iamVjdEJvdW5kaW5nQm94LngoKSwgb2JqZWN0Qm91bmRp
bmdCb3gueSgpKTsKICAgICAgICAgbWFza0NvbnRlbnRUcmFuc2Zvcm1hdGlvbi5zY2FsZU5vblVu
aWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0
KCkpOwogICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0obWFza0NvbnRlbnRUcmFu
c2Zvcm1hdGlvbik7CkBAIC0xNzUsMTMgKzE3NSwxMyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
TWFza2VyOjpjYWxjdWxhdGVNCiAgICAgfQogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCitHcmFw
aGljc1JlY3QgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OnJlc291cmNlQm91bmRpbmdCb3goUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgU1ZHTWFza0VsZW1lbnQqIG1hc2tFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8U1ZHTWFza0VsZW1lbnQqPihub2RlKCkpOwogICAgIEFTU0VSVChtYXNrRWxl
bWVudCk7CiAKLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSBvYmplY3QtPm9iamVj
dEJvdW5kaW5nQm94KCk7Ci0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGFyaWVzID0gbWFza0VsZW1l
bnQtPm1hc2tCb3VuZGluZ0JveChvYmplY3RCb3VuZGluZ0JveCk7CisgICAgR3JhcGhpY3NSZWN0
IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdy
YXBoaWNzUmVjdCBtYXNrQm91bmRhcmllcyA9IG1hc2tFbGVtZW50LT5tYXNrQm91bmRpbmdCb3go
b2JqZWN0Qm91bmRpbmdCb3gpOwogCiAgICAgLy8gUmVzb3VyY2Ugd2FzIG5vdCBsYXlvdXRlZCB5
ZXQuIEdpdmUgYmFjayBjbGlwcGluZyByZWN0IG9mIHRoZSBtYXNrLgogICAgIGlmIChzZWxmTmVl
ZHNMYXlvdXQoKSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXI6OnJlc291CiAgICAgaWYgKG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzLmlzRW1wdHko
KSkKICAgICAgICAgY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50UmVjdCgpOwogCi0gICAgRmxv
YXRSZWN0IG1hc2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CisgICAgR3JhcGhpY3NS
ZWN0IG1hc2tSZWN0ID0gbV9tYXNrQ29udGVudEJvdW5kYXJpZXM7CiAgICAgaWYgKG1hc2tFbGVt
ZW50LT5tYXNrQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CiAg
ICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2JqZWN0Qm91bmRpbmdCb3gueCgpLCBvYmplY3RC
b3VuZGluZ0JveC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXJfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQ4LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDbGllbnRzRnJvbUNhY2hlKGJv
b2wgbWFya0ZvckludmFsaWRhdGlvbiA9IHRydWUpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBtYXJrRm9ySW52YWxpZGF0aW9uID0g
dHJ1ZSk7CiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVzb3VyY2UoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VNb2Rl
KTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNvdXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVj
dCopOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVy
T2JqZWN0Kik7CiAKICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1hc2tVbml0cygpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNWR01hc2tFbGVtZW50Kj4obm9kZSgpKS0+bWFza1Vu
aXRzKCk7IH0KICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1hc2tDb250ZW50VW5pdHMo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTVkdNYXNrRWxlbWVudCo+KG5vZGUoKSktPm1h
c2tDb250ZW50VW5pdHMoKTsgfQpAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKE1hc2tlckRhdGEqLCBjb25zdCBTVkdNYXNrRWxlbWVu
dCosIFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgY2FsY3VsYXRlTWFza0NvbnRlbnRSZXBhaW50
UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IG1fbWFza0NvbnRlbnRCb3VuZGFyaWVzOworICAgIEdy
YXBoaWNzUmVjdCBtX21hc2tDb250ZW50Qm91bmRhcmllczsKICAgICBIYXNoTWFwPFJlbmRlck9i
amVjdCosIE1hc2tlckRhdGEqPiBtX21hc2tlcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc28KIAogICAgIC8vIFNwZWM6
IFdoZW4gdGhlIGdlb21ldHJ5IG9mIHRoZSBhcHBsaWNhYmxlIGVsZW1lbnQgaGFzIG5vIHdpZHRo
IG9yIGhlaWdodCBhbmQgb2JqZWN0Qm91bmRpbmdCb3ggaXMgc3BlY2lmaWVkLAogICAgIC8vIHRo
ZW4gdGhlIGdpdmVuIGVmZmVjdCAoZS5nLiBhIGdyYWRpZW50IG9yIGEgZmlsdGVyKSB3aWxsIGJl
IGlnbm9yZWQuCi0gICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmpl
Y3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9i
amVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBpZiAobV9hdHRyaWJ1dGVzLmJvdW5kaW5n
Qm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm46OmFwcGx5UmVzbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIENv
bXB1dGUgYWxsIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMgdG8gYnVpbGQgdGhlIHRpbGUgaW1h
Z2UgJiB0aGUgcGF0dGVybi4KLSAgICAgICAgRmxvYXRSZWN0IHRpbGVCb3VuZGFyaWVzOworICAg
ICAgICBHcmFwaGljc1JlY3QgdGlsZUJvdW5kYXJpZXM7CiAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSB0aWxlSW1hZ2VUcmFuc2Zvcm07CiAgICAgICAgIGlmICghYnVpbGRUaWxlSW1hZ2VUcmFuc2Zv
cm0ob2JqZWN0LCBtX2F0dHJpYnV0ZXMsIHBhdHRlcm5FbGVtZW50LCB0aWxlQm91bmRhcmllcywg
dGlsZUltYWdlVHJhbnNmb3JtKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExNyw3
ICsxMTcsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6YXBwbHlSZXNvCiAgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybTsKICAgICAgICAgU1ZHSW1hZ2VC
dWZmZXJUb29sczo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdFNWR0Nvb3JkaW5h
dGVTeXN0ZW0ob2JqZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICAgICAgRmxvYXRSZWN0
IGFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVC
b3VuZGFyaWVzKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGFic29sdXRlVGlsZUJvdW5kYXJpZXMg
PSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHRpbGVCb3VuZGFyaWVzKTsKIAogICAgICAgICAv
LyBCdWlsZCB0aWxlIGltYWdlLgogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IHRpbGVJbWFn
ZSA9IGNyZWF0ZVRpbGVJbWFnZShvYmplY3QsIG1fYXR0cmlidXRlcywgdGlsZUJvdW5kYXJpZXMs
IGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIHRpbGVJbWFnZVRyYW5zZm9ybSk7CkBAIC0xOTYsMTkg
KzE5NiwxOSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6cG9zdEFwcGx5CiAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBjYWxjdWxh
dGVQYXR0ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCitzdGF0aWMgaW5saW5lIEdyYXBoaWNzUmVj
dCBjYWxjdWxhdGVQYXR0ZXJuQm91bmRhcmllcyhjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0
cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVkdQYXR0ZXJuRWxl
bWVudCogcGF0dGVybkVsZW1lbnQpCiB7CiAgICAgQVNTRVJUKHBhdHRlcm5FbGVtZW50KTsKIAog
ICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGlu
Z0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3Vu
ZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3Vu
ZGluZ0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVj
dEJvdW5kaW5nQm94LndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
cy5oZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0
KCkpOwogCi0gICAgcmV0dXJuIEZsb2F0UmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShwYXR0ZXJu
RWxlbWVudCksCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChhdHRyaWJ1dGVzLngoKS52YWx1ZShw
YXR0ZXJuRWxlbWVudCksCiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnkoKS52YWx1
ZShwYXR0ZXJuRWxlbWVudCksCiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLndpZHRo
KCkudmFsdWUocGF0dGVybkVsZW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
cy5oZWlnaHQoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCkpOwpAQCAtMjE3LDEzICsyMTcsMTMgQEAg
c3RhdGljIGlubGluZSBGbG9hdFJlY3QgY2FsY3VsYXRlUGF0dGVybgogYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZVBhdHRlcm46OmJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUGF0dGVybkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUGF0dGVy
bkVsZW1lbnQqIHBhdHRlcm5FbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVjdCYgcGF0dGVybkJvdW5kYXJpZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jh
cGhpY3NSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRy
YW5zZm9ybSkgY29uc3QKIHsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogICAgIEFTU0VSVChwYXR0
ZXJuRWxlbWVudCk7CiAKLSAgICBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3ggPSByZW5kZXJl
ci0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdC
b3ggPSByZW5kZXJlci0+b2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBwYXR0ZXJuQm91bmRhcmll
cyA9IGNhbGN1bGF0ZVBhdHRlcm5Cb3VuZGFyaWVzKGF0dHJpYnV0ZXMsIG9iamVjdEJvdW5kaW5n
Qm94LCBwYXR0ZXJuRWxlbWVudCk7IAogICAgIGlmIChwYXR0ZXJuQm91bmRhcmllcy53aWR0aCgp
IDw9IDAgfHwgcGF0dGVybkJvdW5kYXJpZXMuaGVpZ2h0KCkgPD0gMCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjQxLDE2ICsyNDEsMTYgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm46OmJ1aWxkVGlsZQogCiBQYXNzT3duUHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJj
ZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShSZW5kZXJPYmplY3QqIG9iamVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxv
YXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1
dGVUaWxlQm91bmRhcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYXBoaWNzUmVjdCYgdGlsZUJvdW5k
YXJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGlsZUJvdW5kYXJp
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkg
Y29uc3QKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKIAogICAgIC8vIENsYW1wIHRpbGUgaW1hZ2Ug
c2l6ZSBhZ2FpbnN0IFNWRyB2aWV3cG9ydCBzaXplLCBhcyBsYXN0IHJlc29ydCwgdG8gYXZvaWQg
YWxsb2NhdGluZyBodWdlIGltYWdlIGJ1ZmZlcnMuCi0gICAgRmxvYXRSZWN0IGNvbnRlbnRCb3hS
ZWN0ID0gU1ZHUmVuZGVyU3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KG9iamVjdCktPmNvbnRl
bnRCb3hSZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IGNvbnRlbnRCb3hSZWN0ID0gU1ZHUmVuZGVy
U3VwcG9ydDo6ZmluZFRyZWVSb290T2JqZWN0KG9iamVjdCktPmNvbnRlbnRCb3hSZWN0KCk7CiAK
LSAgICBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMgPSBhYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzOworICAgIEdyYXBoaWNzUmVjdCBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRh
cmllcyA9IGFic29sdXRlVGlsZUJvdW5kYXJpZXM7CiAgICAgaWYgKGNsYW1wZWRBYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzLndpZHRoKCkgPiBjb250ZW50Qm94UmVjdC53aWR0aCgpKQogICAgICAgICBj
bGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcy5zZXRXaWR0aChjb250ZW50Qm94UmVjdC53aWR0
aCgpKTsKIApAQCAtMjY2LDcgKzI2Niw3IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZmZXI+IFJlbmRl
clNWR1Jlc291cmMKICAgICBBU1NFUlQodGlsZUltYWdlQ29udGV4dCk7CiAKICAgICAvLyBUaGUg
aW1hZ2UgYnVmZmVyIHJlcHJlc2VudHMgdGhlIGZpbmFsIHJlbmRlcmVkIHNpemUsIHNvIHRoZSBj
b250ZW50IGhhcyB0byBiZSBzY2FsZWQgKHRvIGF2b2lkIHBpeGVsYXRpb24pLgotICAgIHRpbGVJ
bWFnZUNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRo
KCkgLyB0aWxlQm91bmRhcmllcy53aWR0aCgpLAorICAgIHRpbGVJbWFnZUNvbnRleHQtPnNjYWxl
KEdyYXBoaWNzU2l6ZShhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLndpZHRoKCkgLyB0aWxlQm91bmRh
cmllcy53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNv
bHV0ZVRpbGVCb3VuZGFyaWVzLmhlaWdodCgpIC8gdGlsZUJvdW5kYXJpZXMuaGVpZ2h0KCkpKTsK
IAogICAgIC8vIEFwcGx5IHRpbGUgaW1hZ2UgdHJhbnNmb3JtYXRpb25zLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0
dGVybi5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcg
QEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUGF0dGVybkF0
dHJpYnV0ZXMuaCIKQEAgLTUzLDE2ICs1MywxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29u
dGV4dComLCB1bnNpZ25lZCBzaG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWdu
ZWQgc2hvcnQgcmVzb3VyY2VNb2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJl
Y3QgcmVzb3VyY2VCb3VuZGluZ0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3Qo
KTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVy
T2JqZWN0KikgeyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVy
U1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VU
eXBlOyB9CiAgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsK
IAogcHJpdmF0ZToKLSAgICBib29sIGJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqLCBG
bG9hdFJlY3QmIHBhdHRlcm5Cb3VuZGFyaWVzLCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRy
YW5zZm9ybSkgY29uc3Q7CisgICAgYm9vbCBidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5kZXJP
YmplY3QqLCBjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYsIGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50
KiwgR3JhcGhpY3NSZWN0JiBwYXR0ZXJuQm91bmRhcmllcywgQWZmaW5lVHJhbnNmb3JtJiB0aWxl
SW1hZ2VUcmFuc2Zvcm0pIGNvbnN0OwogCi0gICAgUGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlVGlsZUltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVz
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CisgICAg
UGFzc093blB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlVGlsZUltYWdlKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhdHRlcm5BdHRyaWJ1dGVzJiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0aWxlQm91bmRhcmll
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3Jh
cGhpY3NSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRpbGVJbWFnZVRyYW5zZm9ybSkgY29uc3Q7CiAKICAgICBib29sIG1fc2hvdWxkQ29sbGVjdFBh
dHRlcm5BdHRyaWJ1dGVzIDogMTsKICAgICBQYXR0ZXJuQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUmFk
aWFsR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCB2b2lkIFJlbmRlclNW
R1Jlc291cmNlUmFkaWFsR3JhZGllbnQ6OmJ1CiAgICAgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
KiByYWRpYWxHcmFkaWVudEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQqPihncmFkaWVudEVsZW1lbnQpOwogCiAgICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IGZv
Y2FsL2NlbnRlciBwb2ludHMgYW5kIHJhZGl1cwotICAgIEZsb2F0UG9pbnQgZm9jYWxQb2ludDsK
LSAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZm9jYWxQb2lu
dDsKKyAgICBHcmFwaGljc1BvaW50IGNlbnRlclBvaW50OwogICAgIGZsb2F0IHJhZGl1czsKICAg
ICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5kUmFk
aXVzKG1fYXR0cmlidXRlcywgZm9jYWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVNvbGlkQ29sb3IuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkNvbG9y
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzcsNyArMzcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dComLCB1bnNpZ25lZCBz
aG9ydCByZXNvdXJjZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqJiwgdW5zaWduZWQgc2hvcnQgcmVzb3VyY2VN
b2RlLCBjb25zdCBQYXRoKik7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVzb3VyY2VCb3VuZGlu
Z0JveChSZW5kZXJPYmplY3QqKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorICAgIHZpcnR1YWwg
R3JhcGhpY3NSZWN0IHJlc291cmNlQm91bmRpbmdCb3goUmVuZGVyT2JqZWN0KikgeyByZXR1cm4g
R3JhcGhpY3NSZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJl
c291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CiAgICAgc3RhdGlj
IFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIFJlbmRlclNWR1Jvb3Q6On5SZW5kZXJTVkdSb290
KCkKIHsKIH0KIAotdm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0aW9JbmZv
cm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvLCBib29sJiBpc1BlcmNlbnRhZ2VJbnRy
aW5zaWNTaXplKSBjb25zdAordm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0
aW9JbmZvcm1hdGlvbihHcmFwaGljc1NpemUmIGludHJpbnNpY1JhdGlvLCBib29sJiBpc1BlcmNl
bnRhZ2VJbnRyaW5zaWNTaXplKSBjb25zdAogewogICAgIC8vIFNwZWM6IGh0dHA6Ly9kZXYudzMu
b3JnL1NWRy9wcm9maWxlcy8xLjFGMi9wdWJsaXNoL2Nvb3Jkcy5odG1sI0ludHJpbnNpY1Npemlu
ZwogICAgIC8vIFRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIG9mIHRoZSB2aWV3cG9ydCBvZiBT
VkcgY29udGVudCBpcyBuZWNlc3NhcnkgZm9yIGV4YW1wbGUsIHdoZW4gaW5jbHVkaW5nCkBAIC03
Niw3ICs3Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZUludHJpbnNpY1JhdGkKICAg
ICAvLyDigJh3aWR0aOKAmSBhbmQg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZXMgYWZ0ZXIgcmVzb2x2
aW5nIGJvdGggdmFsdWVzIHRvIHVzZXIgdW5pdHMuCiAgICAgaXNQZXJjZW50YWdlSW50cmluc2lj
U2l6ZSA9IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5oZWlnaHQoKS5pc0ZpeGVkKCkpIHsKLSAgICAgICAgaW50cmluc2ljUmF0aW8gPSBGbG9h
dFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEdyYXBo
aWNzU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTkwLDcgKzkwLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290Ojpjb21wdXRlSW50cmluc2ljUmF0aQog
ICAgIC8vIGFjY291bnQgZm9yIGNlcnRhaW4gY2FzZXMgb2YgdGhlIGludHJpbnNpYyB3aWR0aC9o
ZWlnaHQgY2FsY3VsYXRpb24gaW4gUmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdp
ZHRoL0hlaWdodC4KICAgICBpZiAoaW50cmluc2ljUmF0aW8uaXNFbXB0eSgpICYmIHN0eWxlKCkt
PndpZHRoKCkuaXNQZXJjZW50KCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpIHsK
ICAgICAgICAgaXNQZXJjZW50YWdlSW50cmluc2ljU2l6ZSA9IHRydWU7Ci0gICAgICAgIGludHJp
bnNpY1JhdGlvID0gRmxvYXRTaXplKHN0eWxlKCktPndpZHRoKCkucGVyY2VudCgpLCBzdHlsZSgp
LT5oZWlnaHQoKS5wZXJjZW50KCkpOworICAgICAgICBpbnRyaW5zaWNSYXRpbyA9IEdyYXBoaWNz
U2l6ZShzdHlsZSgpLT53aWR0aCgpLnBlcmNlbnQoKSwgc3R5bGUoKS0+aGVpZ2h0KCkucGVyY2Vu
dCgpKTsKICAgICB9CiB9CiAKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6
OmNhbGNWaWV3cG9ydCgpCiAgICAgaWYgKCFzdmctPmhhc1NldENvbnRhaW5lclNpemUoKSkgewog
ICAgICAgICAvLyBJbiB0aGUgbm9ybWFsIGNhc2Ugb2YgPHN2Zz4gYmVpbmcgc3RhbmQtYWxvbmUg
b3IgaW4gYSBDU1NCb3hNb2RlbCBvYmplY3Qgd2UgdXNlCiAgICAgICAgIC8vIFJlbmRlckJveDo6
d2lkdGgoKS9oZWlnaHQoKSAod2hpY2ggcHVsbHMgZGF0YSBmcm9tIFJlbmRlclN0eWxlKQotICAg
ICAgICBtX3ZpZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAg
ICAgIG1fdmlld3BvcnRTaXplID0gR3JhcGhpY3NTaXplKHdpZHRoKCksIGhlaWdodCgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgUmVuZGVyU1ZH
Um9vdDo6Y2FsY1ZpZXdwb3J0KCkKICAgICAvLyBGSVhNRTogQ2hlY2sgaG93IFNWR0ltYWdlICsg
em9vbWluZyBpcyBzdXBwb3NlZCB0byBiZSBoYW5kbGVkPwogICAgIFNWR0xlbmd0aCB3aWR0aCA9
IHN2Zy0+d2lkdGgoKTsKICAgICBTVkdMZW5ndGggaGVpZ2h0ID0gc3ZnLT5oZWlnaHQoKTsKLSAg
ICBtX3ZpZXdwb3J0U2l6ZSA9IEZsb2F0U2l6ZSh3aWR0aC51bml0VHlwZSgpID09IExlbmd0aFR5
cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZVdpZHRoVmFsdWUoKSA6IHdpZHRoLnZhbHVlKHN2
ZyksCisgICAgbV92aWV3cG9ydFNpemUgPSBHcmFwaGljc1NpemUod2lkdGgudW5pdFR5cGUoKSA9
PSBMZW5ndGhUeXBlUGVyY2VudGFnZSA/IHN2Zy0+cmVsYXRpdmVXaWR0aFZhbHVlKCkgOiB3aWR0
aC52YWx1ZShzdmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC51bml0
VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdlID8gc3ZnLT5yZWxhdGl2ZUhlaWdodFZhbHVl
KCkgOiBoZWlnaHQudmFsdWUoc3ZnKSk7CiB9CiAKQEAgLTM2NSw3ICszNjUsNyBAQCBBZmZpbmVU
cmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvCiAgICAgSW50U2l6ZSBib3JkZXJBbmRQ
YWRkaW5nID0gYm9yZGVyT3JpZ2luVG9Db250ZW50Qm94KCk7CiAgICAgU1ZHU1ZHRWxlbWVudCog
c3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgZmxvYXQgc2Nh
bGUgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgRmxvYXRQb2ludCB0cmFuc2xhdGUg
PSBzdmctPmN1cnJlbnRUcmFuc2xhdGUoKTsKKyAgICBHcmFwaGljc1BvaW50IHRyYW5zbGF0ZSA9
IHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpOwogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0oc2NhbGUs
IDAsIDAsIHNjYWxlLCBib3JkZXJBbmRQYWRkaW5nLndpZHRoKCkgKyB0cmFuc2xhdGUueCgpLCBi
b3JkZXJBbmRQYWRkaW5nLmhlaWdodCgpICsgdHJhbnNsYXRlLnkoKSk7CiAgICAgcmV0dXJuIGN0
bSAqIHN2Zy0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpIC8gc2NhbGUsIGhlaWdodCgp
IC8gc2NhbGUpOwogfQpAQCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6Y29t
cHV0ZVJlY3RGb3JSZXBhaW4KICAgICByZXBhaW50UmVjdCA9IGxvY2FsVG9Cb3JkZXJCb3hUcmFu
c2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0KTsKIAogICAgIC8vIEFwcGx5IGluaXRpYWwgdmll
d3BvcnQgY2xpcCAtIG5vdCBhZmZlY3RlZCBieSBvdmVyZmxvdyBzZXR0aW5ncyAgICAKLSAgICBy
ZXBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBtX3ZpZXdwb3J0U2l6ZSkpKTsKKyAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9z
aW5nSW50UmVjdChHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX3ZpZXdwb3J0U2l6ZSkp
KTsKIAogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7CiAgICAgaWYgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IHN2Z1N0eWxlLT5zaGFk
b3coKSkKQEAgLTQyNyw5ICs0MjcsOSBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6Om1hcExvY2FsVG9D
b250YWluZXIoCiAKIHZvaWQgUmVuZGVyU1ZHUm9vdDo6dXBkYXRlQ2FjaGVkQm91bmRhcmllcygp
CiB7Ci0gICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIG1fc3Ryb2tl
Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKLSAgICBtX3JlcGFpbnRCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOworICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKKyAg
ICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gR3JhcGhpY3NSZWN0KCk7CisgICAgbV9yZXBhaW50Qm91
bmRpbmdCb3ggPSBHcmFwaGljc1JlY3QoKTsKIAogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1
dGVDb250YWluZXJCb3VuZGluZ0JveGVzKHRoaXMsIG1fb2JqZWN0Qm91bmRpbmdCb3gsIG1fc3Ry
b2tlQm91bmRpbmdCb3gsIG1fcmVwYWludEJvdW5kaW5nQm94KTsKICAgICBTVkdSZW5kZXJTdXBw
b3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9yZXBhaW50Qm91
bmRpbmdCb3gpOwpAQCAtNDQ5LDEwICs0NDksMTAgQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2Rl
QXRQb2ludChjb25zdCBIaQogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFy
ZW50VHJhbnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdEZsb2F0
UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhbFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgeworICAg
ICAgICBpZiAoY2hpbGQtPm5vZGVBdEdyYXBoaWNzUG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2Nh
bFBvaW50LCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENTUy9IVE1M
IGFzc3VtZXMgdGhlIGxvY2FsIHBvaW50IGlzIHJlbGF0aXZlIHRvIHRoZSBib3JkZXIgYm94LCBy
aWdodD8KICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQm9y
ZGVyQm94KTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBub2RlQXRGbG9hdFBvaW50KCkgZG9lc24n
dCBoYW5kbGUgcmVjdC1iYXNlZCBoaXQgdGVzdHMgeWV0LgorICAgICAgICAgICAgLy8gRklYTUU6
IG5vZGVBdEdyYXBoaWNzUG9pbnQoKSBkb2Vzbid0IGhhbmRsZSByZWN0LWJhc2VkIGhpdCB0ZXN0
cyB5ZXQuCiAgICAgICAgICAgICByZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3VsdChj
aGlsZC0+bm9kZSgpLCBwb2ludEluQ29udGFpbmVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2Rl
ZmluZSBSZW5kZXJTVkdSb290X2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94Lmgi
CiAKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCkBAIC0zOSw3ICszOSw3IEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBSZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICB2
aXJ0dWFsIH5SZW5kZXJTVkdSb290KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJp
bnNpY1JhdGlvSW5mb3JtYXRpb24oRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbywgYm9vbCYgaXNQ
ZXJjZW50YWdlSW50cmluc2ljU2l6ZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJ
bnRyaW5zaWNSYXRpb0luZm9ybWF0aW9uKEdyYXBoaWNzU2l6ZSYgaW50cmluc2ljUmF0aW8sIGJv
b2wmIGlzUGVyY2VudGFnZUludHJpbnNpY1NpemUpIGNvbnN0OwogICAgIGNvbnN0IFJlbmRlck9i
amVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQog
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAmbV9jaGlsZHJl
bjsgfQogCkBAIC03MSwxMiArNzEsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICBi
b29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCBzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBmaWxsQ29udGFp
bnMoY29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OworICAgIGJvb2wgc3Ryb2tlQ29udGFpbnMo
Y29uc3QgR3JhcGhpY3NQb2ludCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9Ci0g
ICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X3N0cm9rZUJvdW5kaW5nQm94OyB9Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJ
bkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsg
fQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50Qm91bmRpbmdCb3g7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIApAQCAtOTYsMTAgKzk2LDEwIEBAIHByaXZh
dGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSBjb25z
dDsKIAogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwotICAgIEZsb2F0U2l6
ZSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKLSAg
ICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3QgbV9yZXBhaW50
Qm91bmRpbmdCb3g7CisgICAgR3JhcGhpY3NTaXplIG1fdmlld3BvcnRTaXplOworICAgIEdyYXBo
aWNzUmVjdCBtX29iamVjdEJvdW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3N0cm9rZUJv
dW5kaW5nQm94OworICAgIEdyYXBoaWNzUmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAgICBt
dXRhYmxlIEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVG9QYXJlbnRUcmFuc2Zvcm07CiAgICAgYm9v
bCBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgOiAxOwogICAgIGJvb2wgbV9uZWVkc0JvdW5kYXJpZXNP
clRyYW5zZm9ybVVwZGF0ZSA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKIAogI2luY2x1ZGUgIkZsb2F0
Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmgiCkBAIC0xNTMsNyAr
MTUzLDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgICAgICBzZXRDaGlsZHJl
bklubGluZSh0cnVlKTsKIAogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8g
b25seSBsYXlvdXQgdGhlIGNoaWxkIGJveGVzLCBpZiBuZWVkZWQuCi0gICAgRmxvYXRSZWN0IG9s
ZEJvdW5kYXJpZXMgPSBvYmplY3RCb3VuZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCBvbGRC
b3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRyZW5Jbmxp
bmUoKSk7CiAgICAgZm9yY2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpOwogCkBAIC0xODIsMTQgKzE4
MiwxNCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJTVkdUZXh0OjpjcmVhdGVSb290CiAgICAgcmV0
dXJuIGJveDsKIH0KIAotYm9vbCBSZW5kZXJTVkdUZXh0Ojpub2RlQXRGbG9hdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKK2Jv
b2wgUmVuZGVyU1ZHVGV4dDo6bm9kZUF0R3JhcGhpY3NQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CiAgICAgUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzIGhpdFJ1bGVzKFBvaW50ZXJFdmVudHNIaXRSdWxlczo6U1ZHX1RFWFRf
SElUVEVTVElORywgcmVxdWVzdCwgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpKTsKICAgICBib29s
IGlzVmlzaWJsZSA9IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSk7CiAgICAgaWYg
KGlzVmlzaWJsZSB8fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKICAgICAgICAgaWYgKCho
aXRSdWxlcy5jYW5IaXRTdHJva2UgJiYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgp
IHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5j
YW5IaXRGaWxsICYmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVz
LnJlcXVpcmVGaWxsKSkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGxv
Y2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnRJblBhcmVudCk7
CisgICAgICAgICAgICBHcmFwaGljc1BvaW50IGxvY2FsUG9pbnQgPSBsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkuaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50SW5QYXJlbnQpOwogCiAgICAgICAgICAg
ICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEodGhpcywgbG9jYWxQ
b2ludCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAKQEAgLTIyNCw3ICsy
MjQsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZHVGV4dDo6cG9zaXRpb25GCiAgICAgcmV0
dXJuIGNsb3Nlc3RCb3gtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoTGF5b3V0UG9pbnQo
cG9pbnRJbkNvbnRlbnRzLngoKSwgY2xvc2VzdEJveC0+eSgpKSk7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHVGV4dDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCit2b2lkIFJl
bmRlclNWR1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEdyYXBoaWNzUXVhZD4mIHF1YWRzKQog
ewogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKHN0cm9rZUJvdW5kaW5nQm94
KCkpKTsKIH0KQEAgLTI0NSw5ICsyNDUsOSBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBh
aW50SW5mbyYgcGFpCiAgICAgUmVuZGVyQmxvY2s6OnBhaW50KGJsb2NrSW5mbywgSW50UG9pbnQo
KSk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpzdHJva2VCb3VuZGluZ0JveCgpIGNv
bnN0CitHcmFwaGljc1JlY3QgUmVuZGVyU1ZHVGV4dDo6c3Ryb2tlQm91bmRpbmdCb3goKSBjb25z
dAogewotICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGFyaWVzID0gb2JqZWN0Qm91bmRpbmdCb3go
KTsKKyAgICBHcmFwaGljc1JlY3Qgc3Ryb2tlQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94
KCk7CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKTsKICAgICBpZiAoIXN2Z1N0eWxlLT5oYXNTdHJva2UoKSkKICAgICAgICAgcmV0dXJuIHN0
cm9rZUJvdW5kYXJpZXM7CkBAIC0yNTgsOSArMjU4LDkgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1Rl
eHQ6OnN0cm9rZUJvdW5kaW5nQgogICAgIHJldHVybiBzdHJva2VCb3VuZGFyaWVzOwogfQogCi1G
bG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdAorR3JhcGhpY3NSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBzdHJva2VCb3Vu
ZGluZ0JveCgpOworICAgIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdCA9IHN0cm9rZUJvdW5kaW5n
Qm94KCk7CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVz
b3VyY2VzKHRoaXMsIHJlcGFpbnRSZWN0KTsKIAogICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiB0
ZXh0U2hhZG93ID0gc3R5bGUoKS0+dGV4dFNoYWRvdygpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXROZWVkc1Bvc2l0aW9uaW5n
VmFsdWVzVXBkYXRlKCkgeyBtX25lZWRzUG9zaXRpb25pbmdWYWx1ZXNVcGRhdGUgPSB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzVHJhbnNmb3JtVXBkYXRlKCkgeyBtX25lZWRzVHJh
bnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdDsKIAogICAgIHN0YXRpYyBSZW5kZXJT
VkdUZXh0KiBsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoUmVuZGVyT2JqZWN0Kik7CiAgICAg
c3RhdGljIGNvbnN0IFJlbmRlclNWR1RleHQqIGxvY2F0ZVJlbmRlclNWR1RleHRBbmNlc3Rvcihj
b25zdCBSZW5kZXJPYmplY3QqKTsKQEAgLTU0LDIxICs1NCwyMSBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOworICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRHcmFwaGljc1BvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RB
Y3Rpb24pOwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOworICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxHcmFwaGljc1F1YWQ+Jik7CiAKICAgICB2aXJ0
dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qm
LCBib29sIGZpeGVkID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250
YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJh
bnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gZnJhbWVSZWN0
KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gZnJhbWVSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBzdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2Fs
VG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHRQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHVGV4dFBhdGguaCIKIAotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUXVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiU1ZHSW5saW5l
VGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQCBib29sIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXI6
OmNhCiAgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpnVGFnKSB8fCAhc3Rh
dGljX2Nhc3Q8U1ZHR0VsZW1lbnQqPihlbGVtZW50KS0+aXNTaGFkb3dUcmVlQ29udGFpbmVyRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gbmVlZHNVcGRhdGU7CiAKLSAgICBGbG9hdFNpemUgdHJh
bnNsYXRpb24gPSBzdGF0aWNfY2FzdDxTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudCo+KGVs
ZW1lbnQpLT5jb250YWluZXJUcmFuc2xhdGlvbigpOworICAgIEdyYXBoaWNzU2l6ZSB0cmFuc2xh
dGlvbiA9IHN0YXRpY19jYXN0PFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50Kj4oZWxlbWVu
dCktPmNvbnRhaW5lclRyYW5zbGF0aW9uKCk7CiAgICAgaWYgKCF0cmFuc2xhdGlvbi53aWR0aCgp
ICYmICF0cmFuc2xhdGlvbi5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG5lZWRzVXBkYXRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29u
dGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCB2b2lkIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyOjpjYWxjVmllCiAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdU
YWcpKSB7CiAgICAgICAgICBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxTVkdTVkdF
bGVtZW50Kj4oZWxlbWVudCk7CiAKLSAgICAgICAgIEZsb2F0UmVjdCBvbGRWaWV3cG9ydCA9IG1f
dmlld3BvcnQ7Ci0gICAgICAgICBtX3ZpZXdwb3J0ID0gRmxvYXRSZWN0KHN2Zy0+eCgpLnZhbHVl
KHN2ZykKKyAgICAgICAgIEdyYXBoaWNzUmVjdCBvbGRWaWV3cG9ydCA9IG1fdmlld3BvcnQ7Cisg
ICAgICAgICBtX3ZpZXdwb3J0ID0gR3JhcGhpY3NSZWN0KHN2Zy0+eCgpLnZhbHVlKHN2ZykKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPnkoKS52YWx1ZShzdmcpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgc3ZnLT53aWR0aCgpLnZhbHVlKHN2ZykKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdmctPmhlaWdodCgpLnZhbHVlKHN2Zykp
OwpAQCAtNzgsNyArNzgsNyBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlbmRlclNWR1ZpZXdw
b3J0CiAgICAgLy8gcmV0dXJuIHZpZXdwb3J0VHJhbnNsYXRpb24gKiBsb2NhbFRyYW5zZm9ybSgp
ICogdmlld3BvcnRUcmFuc2Zvcm0oKQogfQogCi1ib29sIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFp
bmVyOjpwb2ludElzSW5zaWRlVmlld3BvcnRDbGlwKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5Q
YXJlbnQpCitib29sIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpwb2ludElzSW5zaWRlVmll
d3BvcnRDbGlwKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50SW5QYXJlbnQpCiB7CiAgICAgLy8g
UmVzcGVjdCB0aGUgdmlld3BvcnQgY2xpcCAod2hpY2ggaXMgaW4gcGFyZW50IGNvb3JkcykKICAg
ICBpZiAoIVNWR1JlbmRlclN1cHBvcnQ6OmlzT3ZlcmZsb3dIaWRkZW4odGhpcykpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsOSArNDUsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjYWxjVmlld3BvcnQoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBhcHBseVZpZXdwb3J0Q2xpcChQYWludEluZm8mKTsKLSAgICB2
aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xpcChjb25zdCBGbG9hdFBvaW50JiBw
b2ludEluUGFyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgcG9pbnRJc0luc2lkZVZpZXdwb3J0Q2xp
cChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludEluUGFyZW50KTsKIAotICAgIEZsb2F0UmVjdCBt
X3ZpZXdwb3J0OworICAgIEdyYXBoaWNzUmVjdCBtX3ZpZXdwb3J0OwogICAgIG11dGFibGUgQWZm
aW5lVHJhbnNmb3JtIG1fbG9jYWxUb1BhcmVudFRyYW5zZm9ybTsKIH07CiAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0ltYWdlQnVmZmVyVG9vbHMu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW1hZ2VCdWZmZXJUb29scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdm9p
ZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjYWxjdWxhdGVUcmFucwogICAgIH0KIH0KIAotYm9vbCBT
VkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIGFi
c29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRS
ZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQorYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBH
cmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NSZWN0JiBjbGFt
cGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIEludFNpemUgaW1hZ2VTaXplKHJvdW5kZWRJ
bWFnZUJ1ZmZlclNpemUoY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKICAgICBJ
bnRTaXplIHVuY2xhbXBlZEltYWdlU2l6ZShTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1h
Z2VCdWZmZXJTaXplKGFic29sdXRlVGFyZ2V0UmVjdC5zaXplKCkpKTsKQEAgLTY3LDcgKzY3LDcg
QEAgYm9vbCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjcmVhdGVJbWFnZUJ1ZgogICAgIEFTU0VSVChp
bWFnZUNvbnRleHQpOwogCiAgICAgLy8gQ29tcGVuc2F0ZSByb3VuZGluZyBlZmZlY3RzLCBhcyB0
aGUgYWJzb2x1dGUgdGFyZ2V0IHJlY3QgaXMgdXNpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBh
bmQgdGhlIGltYWdlIGJ1ZmZlciBzaXplIGlzIGludGVnZXIuCi0gICAgaW1hZ2VDb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUodW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRhcmdl
dFJlY3Qud2lkdGgoKSwgdW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVUYXJn
ZXRSZWN0LmhlaWdodCgpKSk7CisgICAgaW1hZ2VDb250ZXh0LT5zY2FsZShHcmFwaGljc1NpemUo
dW5jbGFtcGVkSW1hZ2VTaXplLndpZHRoKCkgLyBhYnNvbHV0ZVRhcmdldFJlY3Qud2lkdGgoKSwg
dW5jbGFtcGVkSW1hZ2VTaXplLmhlaWdodCgpIC8gYWJzb2x1dGVUYXJnZXRSZWN0LmhlaWdodCgp
KSk7CiAKICAgICBpbWFnZUJ1ZmZlciA9IGltYWdlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0
cmVlVAogICAgIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IHNhdmVkQ29udGVudFRyYW5zZm9ybWF0
aW9uOwogfQogCi12b2lkIFNWR0ltYWdlQnVmZmVyVG9vbHM6OmNsaXBUb0ltYWdlQnVmZmVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRy
YW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25Q
dHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKK3ZvaWQgU1ZHSW1hZ2VCdWZmZXJUb29sczo6
Y2xpcFRvSW1hZ2VCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogewog
ICAgIEFTU0VSVChjb250ZXh0KTsKICAgICBBU1NFUlQoaW1hZ2VCdWZmZXIpOwpAQCAtMTA4LDE3
ICsxMDgsMTcgQEAgdm9pZCBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpjbGlwVG9JbWFnZUJ1ZgogICAg
ICAgICBpbWFnZUJ1ZmZlci5jbGVhcigpOwogfQogCi1JbnRTaXplIFNWR0ltYWdlQnVmZmVyVG9v
bHM6OnJvdW5kZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorSW50U2l6
ZSBTVkdJbWFnZUJ1ZmZlclRvb2xzOjpyb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEdyYXBo
aWNzU2l6ZSYgc2l6ZSkKIHsKICAgICByZXR1cm4gSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGxy
b3VuZGYoc2l6ZS53aWR0aCgpKSksIHN0YXRpY19jYXN0PGludD4obHJvdW5kZihzaXplLmhlaWdo
dCgpKSkpOwogfQogCi1GbG9hdFJlY3QgU1ZHSW1hZ2VCdWZmZXJUb29sczo6Y2xhbXBlZEFic29s
dXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KQorR3JhcGhpY3NSZWN0IFNWR0ltYWdl
QnVmZmVyVG9vbHM6OmNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3RGb3JSZW5kZXJlcihjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0
UmVjdCkKIHsKICAgICBBU1NFUlQocmVuZGVyZXIpOwogCiAgICAgY29uc3QgUmVuZGVyU1ZHUm9v
dCogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVlUm9vdE9iamVjdChyZW5kZXJl
cik7Ci0gICAgRmxvYXRSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBhYnNvbHV0ZVRh
cmdldFJlY3Q7CisgICAgR3JhcGhpY3NSZWN0IGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QgPSBh
YnNvbHV0ZVRhcmdldFJlY3Q7CiAgICAgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdC5pbnRlcnNl
Y3Qoc3ZnUm9vdC0+ZnJhbWVSZWN0KCkpOwogICAgIHJldHVybiBjbGFtcGVkQWJzb2x1dGVUYXJn
ZXRSZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1
ZmZlclRvb2xzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbWFnZUJ1ZmZlclRvb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIxICsyNywyMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zv
cm07Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1Jl
Y3Q7CitjbGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiAKIGNsYXNzIFNWR0ltYWdlQnVmZmVyVG9vbHMgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNWR0ltYWdlQnVmZmVyVG9vbHMpOwogcHVibGljOgotICAgIHN0YXRpYyBi
b29sIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRBYnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFn
ZUJ1ZmZlcj4mLCBDb2xvclNwYWNlKTsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBHcmFwaGljc1JlY3QmIGFic29sdXRlVGFyZ2V0UmVjdCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBjbGFtcGVkQWJzb2x1dGVUYXJnZXRSZWN0LCBPd25QdHI8SW1hZ2VCdWZmZXI+JiwgQ29s
b3JTcGFjZSk7CiAgICAgc3RhdGljIHZvaWQgcmVuZGVyU3VidHJlZVRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBSZW5kZXJPYmplY3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBz
dGF0aWMgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsYW1wZWRB
YnNvbHV0ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKKyAgICBzdGF0aWMgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1JlY3QmIGNsYW1wZWRBYnNvbHV0
ZVRhcmdldFJlY3QsIE93blB0cjxJbWFnZUJ1ZmZlcj4mKTsKIAogICAgIHN0YXRpYyB2b2lkIGNh
bGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RTVkdDb29yZGluYXRlU3lzdGVtKGNvbnN0
IFJlbmRlck9iamVjdCosIEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0pOwotICAg
IHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZvclJlbmRlcmVyKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVUYXJnZXRSZWN0KTsK
LSAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOworICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgY2xhbXBlZEFic29sdXRlVGFyZ2V0UmVjdEZv
clJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgYWJzb2x1
dGVUYXJnZXRSZWN0KTsKKyAgICBzdGF0aWMgSW50U2l6ZSByb3VuZGVkSW1hZ2VCdWZmZXJTaXpl
KGNvbnN0IEdyYXBoaWNzU2l6ZSYpOwogCiBwcml2YXRlOgogICAgIFNWR0ltYWdlQnVmZmVyVG9v
bHMoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxv
d0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyAr
MTA2LDcgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTQogICAgICAg
ICBpZiAobWFya2VyLT50eXBlKCkgIT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0OworICAgICAg
ICBHcmFwaGljc1JlY3QgbWFya2VyUmVjdDsKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBi
b3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRl
eHRCb3goKSkgewogICAgICAgICAgICAgaWYgKCFib3gtPmlzU1ZHSW5saW5lVGV4dEJveCgpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgU1ZHSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE0KICAgICAgICAgICAgICAgICBpZiAoIXRleHRC
b3gtPm1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21lbnQs
IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbikpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IGZyYWdtZW50
UmVjdCA9IHRleHRCb3gtPnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZy
YWdtZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwgc3R5bGUpOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzUmVjdCBmcmFnbWVudFJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25S
ZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGZyYWdt
ZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKICAgICAgICAgICAgICAgICBmcmFnbWVudC5idWlsZEZy
YWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAgICAgICAgICAgICBpZiAo
IWZyYWdtZW50VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgZnJh
Z21lbnRSZWN0ID0gZnJhZ21lbnRUcmFuc2Zvcm0ubWFwUmVjdChmcmFnbWVudFJlY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgZmxvYXQg
U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZQogICAgIHJldHVybiAwOwogfQogCi1G
bG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChj
b25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVu
ZFBvc2l0aW9uLCBSZW5kZXJTdHlsZSogc3R5bGUpCitHcmFwaGljc1JlY3QgU1ZHSW5saW5lVGV4
dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBSZW5kZXJTdHls
ZSogc3R5bGUpCiB7CiAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAg
ICAgQVNTRVJUKHN0eWxlKTsKQEAgLTEwMywxMyArMTAzLDEzIEBAIEZsb2F0UmVjdCBTVkdJbmxp
bmVUZXh0Qm94OjpzZWxlY3Rpb25SZWMKIAogICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0
ZXh0UmVuZGVyZXItPnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBGb250TWV0cmljcyYgc2NhbGVk
Rm9udE1ldHJpY3MgPSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCk7Ci0gICAgRmxvYXRQb2ludCB0
ZXh0T3JpZ2luKGZyYWdtZW50LngsIGZyYWdtZW50LnkpOworICAgIEdyYXBoaWNzUG9pbnQgdGV4
dE9yaWdpbihmcmFnbWVudC54LCBmcmFnbWVudC55KTsKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAh
PSAxKQogICAgICAgICB0ZXh0T3JpZ2luLnNjYWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0
b3IpOwogCiAgICAgdGV4dE9yaWdpbi5tb3ZlKDAsIC1zY2FsZWRGb250TWV0cmljcy5mbG9hdEFz
Y2VudCgpKTsKIAotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0ID0gc2NhbGVkRm9udC5zZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCksIHRleHRP
cmlnaW4sIGZyYWdtZW50LmhlaWdodCAqIHNjYWxpbmdGYWN0b3IsIHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKTsKKyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdCA9IHNjYWxlZEZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZnJhZ21lbnQpLCB0
ZXh0T3JpZ2luLCBmcmFnbWVudC5oZWlnaHQgKiBzY2FsaW5nRmFjdG9yLCBzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbik7CiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgPT0gMSkKICAgICAgICAgcmV0
dXJuIHNlbGVjdGlvblJlY3Q7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBJbnRSZWN0IFNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoCiAgICAgQVNTRVJUKHN0eWxlKTsKIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVj
dDsKKyAgICBHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdDsKICAgICBpbnQgZnJhZ21lbnRTdGFy
dFBvc2l0aW9uID0gMDsKICAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAKQEAgLTE0
NSw3ICsxNDUsNyBAQCBJbnRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoCiAg
ICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhm
cmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0aW9uKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QgPSBz
ZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRp
b24sIGZyYWdtZW50RW5kUG9zaXRpb24sIHN0eWxlKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGZy
YWdtZW50UmVjdCA9IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoZnJhZ21lbnQsIGZyYWdt
ZW50U3RhcnRQb3NpdGlvbiwgZnJhZ21lbnRFbmRQb3NpdGlvbiwgc3R5bGUpOwogICAgICAgICBm
cmFnbWVudC5idWlsZEZyYWdtZW50VHJhbnNmb3JtKGZyYWdtZW50VHJhbnNmb3JtKTsKICAgICAg
ICAgaWYgKCFmcmFnbWVudFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgICAgICBmcmFn
bWVudFJlY3QgPSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CkBAIC01
NzksNyArNTc5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQog
ICAgIGlmIChmcmFnbWVudC53aWR0aCA8PSAwICYmIHRoaWNrbmVzcyA8PSAwKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFBvaW50IGRlY29yYXRpb25PcmlnaW4oZnJhZ21lbnQueCwgZnJh
Z21lbnQueSk7CisgICAgR3JhcGhpY3NQb2ludCBkZWNvcmF0aW9uT3JpZ2luKGZyYWdtZW50Lngs
IGZyYWdtZW50LnkpOwogICAgIGZsb2F0IHdpZHRoID0gZnJhZ21lbnQud2lkdGg7CiAgICAgY29u
c3QgRm9udE1ldHJpY3MmIHNjYWxlZEZvbnRNZXRyaWNzID0gc2NhbGVkRm9udC5mb250TWV0cmlj
cygpOwogCkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERl
Y29yYXRpb25XaQogICAgIGRlY29yYXRpb25PcmlnaW4ubW92ZSgwLCAtc2NhbGVkRm9udE1ldHJp
Y3MuZmxvYXRBc2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9u
LCBzY2FsZWRGb250TWV0cmljcywgdGhpY2tuZXNzKSk7CiAKICAgICBQYXRoIHBhdGg7Ci0gICAg
cGF0aC5hZGRSZWN0KEZsb2F0UmVjdChkZWNvcmF0aW9uT3JpZ2luLCBGbG9hdFNpemUod2lkdGgs
IHRoaWNrbmVzcykpKTsKKyAgICBwYXRoLmFkZFJlY3QoR3JhcGhpY3NSZWN0KGRlY29yYXRpb25P
cmlnaW4sIEdyYXBoaWNzU2l6ZSh3aWR0aCwgdGhpY2tuZXNzKSkpOwogCiAgICAgaWYgKGFjcXVp
cmVQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIHNjYWxpbmdGYWN0b3IsIGRlY29yYXRpb25SZW5k
ZXJlciwgZGVjb3JhdGlvblN0eWxlKSkKICAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2Uo
Y29udGV4dCwgJnBhdGgpOwpAQCAtNjE1LDIxICs2MTUsMjEgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludFRleHRXaXRoU2hhZAogICAgIGNvbnN0IEZvbnQmIHNjYWxlZEZvbnQgPSB0ZXh0
UmVuZGVyZXItPnNjYWxlZEZvbnQoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBz
dHlsZS0+dGV4dFNoYWRvdygpOwogCi0gICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luKGZyYWdtZW50
LngsIGZyYWdtZW50LnkpOwotICAgIEZsb2F0U2l6ZSB0ZXh0U2l6ZShmcmFnbWVudC53aWR0aCwg
ZnJhZ21lbnQuaGVpZ2h0KTsKKyAgICBHcmFwaGljc1BvaW50IHRleHRPcmlnaW4oZnJhZ21lbnQu
eCwgZnJhZ21lbnQueSk7CisgICAgR3JhcGhpY3NTaXplIHRleHRTaXplKGZyYWdtZW50LndpZHRo
LCBmcmFnbWVudC5oZWlnaHQpOwogCiAgICAgaWYgKHNjYWxpbmdGYWN0b3IgIT0gMSkgewogICAg
ICAgICB0ZXh0T3JpZ2luLnNjYWxlKHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpOwogICAg
ICAgICB0ZXh0U2l6ZS5zY2FsZShzY2FsaW5nRmFjdG9yKTsKICAgICB9CiAKLSAgICBGbG9hdFJl
Y3Qgc2hhZG93UmVjdChGbG9hdFBvaW50KHRleHRPcmlnaW4ueCgpLCB0ZXh0T3JpZ2luLnkoKSAt
IHNjYWxlZEZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKSwgdGV4dFNpemUpOworICAg
IEdyYXBoaWNzUmVjdCBzaGFkb3dSZWN0KEdyYXBoaWNzUG9pbnQodGV4dE9yaWdpbi54KCksIHRl
eHRPcmlnaW4ueSgpIC0gc2NhbGVkRm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpLCB0
ZXh0U2l6ZSk7CiAKICAgICBkbyB7CiAgICAgICAgIGlmICghcHJlcGFyZUdyYXBoaWNzQ29udGV4
dEZvclRleHRQYWludGluZyhjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCB0ZXh0UnVuLCBzdHlsZSkp
CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBGbG9hdFNpemUgZXh0cmFPZmZzZXQ7Cisg
ICAgICAgIEdyYXBoaWNzU2l6ZSBleHRyYU9mZnNldDsKICAgICAgICAgaWYgKHNoYWRvdykKICAg
ICAgICAgICAgIGV4dHJhT2Zmc2V0ID0gYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChjb250
ZXh0LCBzaGFkb3csIHNoYWRvd1JlY3QsIGZhbHNlIC8qIHN0cm9rZWQgKi8sIHRydWUgLyogb3Bh
cXVlICovLCB0cnVlIC8qIGhvcml6b250YWwgKi8pOwogCkBAIC03MDMsNyArNzAzLDcgQEAgdm9p
ZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpYwogCiBJbnRSZWN0IFNWR0lubGlu
ZVRleHRCb3g6OmNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCB0
ZXh0UmVjdDsKKyAgICBHcmFwaGljc1JlY3QgdGV4dFJlY3Q7CiAKICAgICBSZW5kZXJTVkdJbmxp
bmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQodGhpcy0+dGV4dFJl
bmRlcmVyKCkpOwogICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOwpAQCAtNzE3LDcgKzcxNyw3IEBA
IEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91bmQKICAgICB1bnNpZ25lZCB0
ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKICAgICAgICAgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCA9IG1fdGV4dEZyYWdtZW50cy5hdChpKTsKLSAgICAg
ICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gYmFzZWxp
bmUsIGZyYWdtZW50LndpZHRoLCBmcmFnbWVudC5oZWlnaHQpOworICAgICAgICBHcmFwaGljc1Jl
Y3QgZnJhZ21lbnRSZWN0KGZyYWdtZW50LngsIGZyYWdtZW50LnkgLSBiYXNlbGluZSwgZnJhZ21l
bnQud2lkdGgsIGZyYWdtZW50LmhlaWdodCk7CiAgICAgICAgIGZyYWdtZW50LmJ1aWxkRnJhZ21l
bnRUcmFuc2Zvcm0oZnJhZ21lbnRUcmFuc2Zvcm0pOwogICAgICAgICBpZiAoIWZyYWdtZW50VHJh
bnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgIGZyYWdtZW50UmVjdCA9IGZyYWdtZW50
VHJhbnNmb3JtLm1hcFJlY3QoZnJhZ21lbnRSZWN0KTsKQEAgLTczOCw5ICs3MzgsOSBAQCBib29s
IFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0CiAgICAgaWYgKGlzVmlzaWJsZSB8
fCAhaGl0UnVsZXMucmVxdWlyZVZpc2libGUpIHsKICAgICAgICAgaWYgKChoaXRSdWxlcy5jYW5I
aXRTdHJva2UgJiYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgp
IHx8ICFoaXRSdWxlcy5yZXF1aXJlU3Ryb2tlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5j
YW5IaXRGaWxsICYmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkg
fHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSkpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgYm94
T3JpZ2luKHgoKSwgeSgpKTsKKyAgICAgICAgICAgIEdyYXBoaWNzUG9pbnQgYm94T3JpZ2luKHgo
KSwgeSgpKTsKICAgICAgICAgICAgIGJveE9yaWdpbi5tb3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQp
OwotICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOworICAgICAg
ICAgICAgR3JhcGhpY3NSZWN0IHJlY3QoYm94T3JpZ2luLCBzaXplKCkpOwogICAgICAgICAgICAg
aWYgKHJlY3QuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIp
KSkgewogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3Vs
dChyZW5kZXJlcigpLT5ub2RlKCksIHBvaW50SW5Db250YWluZXIsIHJlY3QpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJldmlz
aW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3RhcnRzTmV3VGV4dENodW5rKGJvb2wgbmV3VGV4dENodW5rKSB7IG1fc3RhcnRzTmV3VGV4
dENodW5rID0gbmV3VGV4dENodW5rOyB9CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25JbkZy
YWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRl
eHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0
aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqKTsKKyAgICBHcmFwaGlj
c1JlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQm
LCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVu
ZGVyU3R5bGUqKTsKIAogcHJpdmF0ZToKICAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVu
ZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHTWFya2VyRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMyArNDQsMTMgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBG
bG9hdFBvaW50IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgR3JhcGhp
Y3NQb2ludCBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgIFJlbmRlclNW
R1Jlc291cmNlTWFya2VyKiBtYXJrZXIoKSBjb25zdCB7IHJldHVybiBtX21hcmtlcjsgfQogCiAg
ICAgZmxvYXQgY3VycmVudEFuZ2xlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEZsb2F0U2l6ZSBp
bnNsb3BlQ2hhbmdlID0gbV9pbnNsb3BlUG9pbnRzWzFdIC0gbV9pbnNsb3BlUG9pbnRzWzBdOwot
ICAgICAgICBGbG9hdFNpemUgb3V0c2xvcGVDaGFuZ2UgPSBtX291dHNsb3BlUG9pbnRzWzFdIC0g
bV9vdXRzbG9wZVBvaW50c1swXTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGluc2xvcGVDaGFuZ2Ug
PSBtX2luc2xvcGVQb2ludHNbMV0gLSBtX2luc2xvcGVQb2ludHNbMF07CisgICAgICAgIEdyYXBo
aWNzU2l6ZSBvdXRzbG9wZUNoYW5nZSA9IG1fb3V0c2xvcGVQb2ludHNbMV0gLSBtX291dHNsb3Bl
UG9pbnRzWzBdOwogCiAgICAgICAgIGRvdWJsZSBpbnNsb3BlID0gcmFkMmRlZyhhdGFuMihpbnNs
b3BlQ2hhbmdlLmhlaWdodCgpLCBpbnNsb3BlQ2hhbmdlLndpZHRoKCkpKTsKICAgICAgICAgZG91
YmxlIG91dHNsb3BlID0gcmFkMmRlZyhhdGFuMihvdXRzbG9wZUNoYW5nZS5oZWlnaHQoKSwgb3V0
c2xvcGVDaGFuZ2Uud2lkdGgoKSkpOwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbWFya2VyID0gbWFya2VyOwogICAgIH0KIAotICAgIHZvaWQgdXBkYXRlT3V0c2xvcGUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgdm9pZCB1cGRhdGVPdXRzbG9wZShjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludCkKICAgICB7CiAgICAgICAgIG1fb3V0c2xvcGVQb2ludHNbMF0gPSBt
X29yaWdpbjsKICAgICAgICAgbV9vdXRzbG9wZVBvaW50c1sxXSA9IHBvaW50OwpAQCAtODgsNyAr
ODgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZU1hcmtlckRhdGFGb3JQYXRoRWxlbWVu
dChjb25zdCBQYXRoRWxlbWVudCogZWxlbWVudCkKICAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQq
IHBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKKyAgICAgICAgR3JhcGhpY3NQb2ludCogcG9pbnRz
ID0gZWxlbWVudC0+cG9pbnRzOwogCiAgICAgICAgIHN3aXRjaCAoZWxlbWVudC0+dHlwZSkgewog
ICAgICAgICBjYXNlIFBhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Qb2ludDoKQEAgLTEwOSwxMiAr
MTA5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBQYXRoRWxlbWVudENsb3NlU3VicGF0aDoK
ICAgICAgICAgICAgIHVwZGF0ZUluc2xvcGUocG9pbnRzWzBdKTsKICAgICAgICAgICAgIG1fb3Jp
Z2luID0gbV9zdWJwYXRoU3RhcnQ7Ci0gICAgICAgICAgICBtX3N1YnBhdGhTdGFydCA9IEZsb2F0
UG9pbnQoKTsKKyAgICAgICAgICAgIG1fc3VicGF0aFN0YXJ0ID0gR3JhcGhpY3NQb2ludCgpOwog
ICAgICAgICB9CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRlSW5zbG9wZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICB2b2lkIHVwZGF0ZUluc2xvcGUoY29uc3QgR3JhcGhp
Y3NQb2ludCYgcG9pbnQpCiAgICAgewogICAgICAgICBtX2luc2xvcGVQb2ludHNbMF0gPSBtX29y
aWdpbjsKICAgICAgICAgbV9pbnNsb3BlUG9pbnRzWzFdID0gcG9pbnQ7CkBAIC0xMjIsMTAgKzEy
MiwxMCBAQCBwcml2YXRlOgogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1fbWFya2VyOwotICAgIEZsb2F0UG9pbnQgbV9vcmlnaW47Ci0gICAgRmxvYXRQ
b2ludCBtX3N1YnBhdGhTdGFydDsKLSAgICBGbG9hdFBvaW50IG1faW5zbG9wZVBvaW50c1syXTsK
LSAgICBGbG9hdFBvaW50IG1fb3V0c2xvcGVQb2ludHNbMl07CisgICAgR3JhcGhpY3NQb2ludCBt
X29yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IG1fc3VicGF0aFN0YXJ0OworICAgIEdyYXBoaWNz
UG9pbnQgbV9pbnNsb3BlUG9pbnRzWzJdOworICAgIEdyYXBoaWNzUG9pbnQgbV9vdXRzbG9wZVBv
aW50c1syXTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
TWFya2VyTGF5b3V0SW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzU3RhcnRB
bmRNaWRNYXIKICAgICArK2VsZW1lbnRJbmRleDsKIH0KIAotRmxvYXRSZWN0IFNWR01hcmtlckxh
eW91dEluZm86OmNhbGN1bGF0ZUJvdW5kYXJpZXMoUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIHN0
YXJ0TWFya2VyLCBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogbWlkTWFya2VyLCBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlciogZW5kTWFya2VyLCBmbG9hdCBzdHJva2VXaWR0aCwgY29uc3QgUGF0aCYg
cGF0aCkKK0dyYXBoaWNzUmVjdCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpjYWxjdWxhdGVCb3VuZGFy
aWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1hcmtlciwg
ZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgbV9sYXlvdXQuY2xl
YXIoKTsKICAgICBtX21pZE1hcmtlciA9IG1pZE1hcmtlcjsKQEAgLTgwLDEyICs4MCwxMiBAQCBG
bG9hdFJlY3QgU1ZHTWFya2VyTGF5b3V0SW5mbzo6Y2FsY3VsYXRlCiAgICAgfQogCiAgICAgaWYg
KG1fbGF5b3V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAg
ICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAKICAgICBWZWN0b3I8TWFya2VyTGF5b3V0Pjo6aXRl
cmF0b3IgaXQgPSBtX2xheW91dC5iZWdpbigpOwogICAgIFZlY3RvcjxNYXJrZXJMYXlvdXQ+Ojpp
dGVyYXRvciBlbmQgPSBtX2xheW91dC5lbmQoKTsKIAotICAgIEZsb2F0UmVjdCBib3VuZHM7Cisg
ICAgR3JhcGhpY3NSZWN0IGJvdW5kczsKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIE1hcmtlckxheW91dCYgbGF5b3V0ID0gKml0OwogCkBAIC0xMjEsNyArMTIxLDcgQEAg
dm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjpkcmF3TWFya2VycyhQYQogICAgIH0KIH0KIAotdm9p
ZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJj
ZU1hcmtlciogbWFya2VyLCBjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IGFuZ2xlKQor
dm9pZCBTVkdNYXJrZXJMYXlvdXRJbmZvOjphZGRMYXlvdXRlZE1hcmtlcihSZW5kZXJTVkdSZXNv
dXJjZU1hcmtlciogbWFya2VyLCBjb25zdCBHcmFwaGljc1BvaW50JiBvcmlnaW4sIGZsb2F0IGFu
Z2xlKQogewogICAgIEFTU0VSVChtYXJrZXIpOwogICAgIG1fbGF5b3V0LmFwcGVuZChNYXJrZXJM
YXlvdXQobWFya2VyLCBtYXJrZXItPm1hcmtlclRyYW5zZm9ybWF0aW9uKG9yaWdpbiwgYW5nbGUs
IG1fc3Ryb2tlV2lkdGgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R01hcmtlckxheW91dEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR01hcmtlckxheW91dEluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTQgKzQ5LDE0IEBAIHB1YmxpYzoKICAgICBTVkdNYXJrZXJMYXlvdXRJbmZvKCk7
CiAgICAgflNWR01hcmtlckxheW91dEluZm8oKTsKIAotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVC
b3VuZGFyaWVzKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBzdGFydE1hcmtlciwgUmVuZGVyU1ZH
UmVzb3VyY2VNYXJrZXIqIG1pZE1hcmtlciwgUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIqIGVuZE1h
cmtlciwgZmxvYXQgc3Ryb2tlV2lkdGgsIGNvbnN0IFBhdGgmKTsKKyAgICBHcmFwaGljc1JlY3Qg
Y2FsY3VsYXRlQm91bmRhcmllcyhSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciogc3RhcnRNYXJrZXIs
IFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIsIFJlbmRlclNWR1Jlc291cmNlTWFy
a2VyKiBlbmRNYXJrZXIsIGZsb2F0IHN0cm9rZVdpZHRoLCBjb25zdCBQYXRoJik7CiAgICAgdm9p
ZCBkcmF3TWFya2VycyhQYWludEluZm8mKTsKIAogICAgIC8vIFVzZWQgYnkgc3RhdGljIGlubGlu
ZSBoZWxwZXIgZnVuY3Rpb25zIGluIFNWR01hcmtlckxheW91dEluZm8uY3BwCiAgICAgU1ZHTWFy
a2VyRGF0YSYgbWFya2VyRGF0YSgpIHsgcmV0dXJuIG1fbWFya2VyRGF0YTsgfQogICAgIFJlbmRl
clNWR1Jlc291cmNlTWFya2VyKiBtaWRNYXJrZXIoKSBjb25zdCB7IHJldHVybiBtX21pZE1hcmtl
cjsgfQogICAgIGludCYgZWxlbWVudEluZGV4KCkgeyByZXR1cm4gbV9lbGVtZW50SW5kZXg7IH0K
LSAgICB2b2lkIGFkZExheW91dGVkTWFya2VyKFJlbmRlclNWR1Jlc291cmNlTWFya2VyKiwgY29u
c3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCBhbmdsZSk7CisgICAgdm9pZCBhZGRMYXlvdXRl
ZE1hcmtlcihSZW5kZXJTVkdSZXNvdXJjZU1hcmtlciosIGNvbnN0IEdyYXBoaWNzUG9pbnQmIG9y
aWdpbiwgZmxvYXQgYW5nbGUpOwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wgU1ZH
UmVuZGVyU3VwcG9ydDo6cHJlcGFyZVRvUmVuZGVyU1YKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5
bGUtPm9wYWNpdHkoKTsKICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+
c2hhZG93KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxIHx8IHNoYWRvdykgewotICAgICAgICBGbG9h
dFJlY3QgcmVwYWludFJlY3QgPSBvYmplY3QtPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVz
KCk7CisgICAgICAgIEdyYXBoaWNzUmVjdCByZXBhaW50UmVjdCA9IG9iamVjdC0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKIAogICAgICAgICBpZiAob3BhY2l0eSA8IDEpIHsKICAg
ICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKHJlcGFpbnRSZWN0KTsKQEAgLTE2Niw3
ICsxNjYsNyBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmZpbmlzaFJlbmRlclNWR0NvCiAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lk
IFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveGVzKGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyLCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBGbG9h
dFJlY3QmIHN0cm9rZUJvdW5kaW5nQm94LCBGbG9hdFJlY3QmIHJlcGFpbnRCb3VuZGluZ0JveCkK
K3ZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdC
b3gsIEdyYXBoaWNzUmVjdCYgc3Ryb2tlQm91bmRpbmdCb3gsIEdyYXBoaWNzUmVjdCYgcmVwYWlu
dEJvdW5kaW5nQm94KQogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gY29udGFp
bmVyLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc1NWR0hpZGRlbkNvbnRhaW5lcigpKQpAQCAt
MTg1LDcgKzE4NSw3IEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0ZUNvbnRhaW5lckIK
ICAgICB9CiB9CiAKLWJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6cGFpbnRJbmZvSW50ZXJzZWN0c1Jl
cGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbG9jYWxSZXBhaW50UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBsb2NhbFRyYW5zZm9ybSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCiti
b29sIFNWR1JlbmRlclN1cHBvcnQ6OnBhaW50SW5mb0ludGVyc2VjdHNSZXBhaW50UmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIGxvY2FsUmVwYWludFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQogewogICAgIGlmIChs
b2NhbFRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCiAgICAgICAgIHJldHVybiBsb2NhbFJlcGFpbnRS
ZWN0LmludGVyc2VjdHMocGFpbnRJbmZvLnJlY3QpOwpAQCAtMjcyLDcgKzI3Miw3IEBAIGJvb2wg
U1ZHUmVuZGVyU3VwcG9ydDo6aXNPdmVyZmxvd0hpZGRlbigKICAgICByZXR1cm4gb2JqZWN0LT5z
dHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPSElEREVOOwogfQogCi12b2lkIFNWR1JlbmRlclN1cHBv
cnQ6OmludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25zdCBSZW5kZXJPYmplY3Qq
IG9iamVjdCwgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKK3ZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6
aW50ZXJzZWN0UmVwYWludFJlY3RXaXRoUmVzb3VyY2VzKGNvbnN0IFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBHcmFwaGljc1JlY3QmIHJlcGFpbnRSZWN0KQogewogICAgIEFTU0VSVChvYmplY3QpOwog
CkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBh
aW50UgogICAgICAgICBzaGFkb3ctPmFkanVzdFJlY3RGb3JTaGFkb3cocmVwYWludFJlY3QpOwog
fQogCi1ib29sIFNWR1JlbmRlclN1cHBvcnQ6OnBvaW50SW5DbGlwcGluZ0FyZWEoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBTVkdSZW5kZXJTdXBw
b3J0Ojpwb2ludEluQ2xpcHBpbmdBcmVhKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBHcmFw
aGljc1BvaW50JiBwb2ludCkKIHsKICAgICBBU1NFUlQob2JqZWN0KTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBGbG9hdFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NQ
b2ludDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgUmVu
ZGVyQm94TW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CkBAIC01MiwxMyArNTIsMTMg
QEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzT3ZlcmZsb3dIaWRkZW4oY29uc3QgUmVuZGVy
T2JqZWN0Kik7CiAKICAgICAvLyBDYWxjdWxhdGVzIHRoZSByZXBhaW50UmVjdCBpbiBjb21iaW5h
dGlvbiB3aXRoIGZpbHRlciwgY2xpcHBlciBhbmQgbWFza2VyIGluIGxvY2FsIGNvb3JkaW5hdGVz
LgotICAgIHN0YXRpYyB2b2lkIGludGVyc2VjdFJlcGFpbnRSZWN0V2l0aFJlc291cmNlcyhjb25z
dCBSZW5kZXJPYmplY3QqLCBGbG9hdFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBpbnRlcnNlY3RS
ZXBhaW50UmVjdFdpdGhSZXNvdXJjZXMoY29uc3QgUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NSZWN0
Jik7CiAKICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBhc3NlZCBwb2ludCBsaWVzIGlu
IGEgY2xpcHBpbmcgYXJlYQotICAgIHN0YXRpYyBib29sIHBvaW50SW5DbGlwcGluZ0FyZWEoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHN0YXRpYyBib29sIHBvaW50SW5D
bGlwcGluZ0FyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgR3JhcGhpY3NQb2ludCYpOwogCi0gICAg
c3RhdGljIHZvaWQgY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94ZXMoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBjb250YWluZXIsIEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIEZsb2F0UmVjdCYg
c3Ryb2tlQm91bmRpbmdCb3gsIEZsb2F0UmVjdCYgcmVwYWludEJvdW5kaW5nQm94KTsKLSAgICBz
dGF0aWMgYm9vbCBwYWludEluZm9JbnRlcnNlY3RzUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0
JiBsb2NhbFJlcGFpbnRSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVHJhbnNmb3Jt
LCBjb25zdCBQYWludEluZm8mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlQ29udGFpbmVyQm91
bmRpbmdCb3hlcyhjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgR3JhcGhpY3NSZWN0JiBv
YmplY3RCb3VuZGluZ0JveCwgR3JhcGhpY3NSZWN0JiBzdHJva2VCb3VuZGluZ0JveCwgR3JhcGhp
Y3NSZWN0JiByZXBhaW50Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBib29sIHBhaW50SW5mb0lu
dGVyc2VjdHNSZXBhaW50UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIGxvY2FsUmVwYWludFJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUcmFuc2Zvcm0sIGNvbnN0IFBhaW50SW5mbyYp
OwogCiAgICAgLy8gSW1wb3J0YW50IGZ1bmN0aW9ucyB1c2VkIGJ5IG5lYXJseSBhbGwgU1ZHIHJl
bmRlcmVycyBjZW50cmFsaXppbmcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbnMgLyByZXBhaW50
IHJlY3QgY2FsY3VsYXRpb25zCiAgICAgc3RhdGljIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZUlmTm90RGVmYXVsdChUZXh0U3Ry
ZWFtCiAgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgbmFtZSwgdmFsdWUpOwogfQogCi1U
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGbG9hdFJlY3QgJnIp
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc1Jl
Y3QgJnIpCiB7CiAgICAgdHMgPDwgImF0ICgiOyAKICAgICBpZiAoaGFzRnJhY3Rpb25zKHIueCgp
KSkgCkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRl
eHRTdHJlYQogICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIs
IGZpbHRlci0+cHJpbWl0aXZlVW5pdHMoKSk7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAg
IC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUg
YnVpbGRlci4KLSAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKKyAgICAgICAgR3JhcGhpY3NS
ZWN0IGR1bW15UmVjdDsKICAgICAgICAgUmVmUHRyPFNWR0ZpbHRlcj4gZHVtbXlGaWx0ZXIgPSBT
VkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3Qs
IGR1bW15UmVjdCwgdHJ1ZSk7CiAgICAgICAgIGlmIChSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4g
YnVpbGRlciA9IGZpbHRlci0+YnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgewog
ICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RF
ZmZlY3QoKSkKQEAgLTU4MCw4ICs1ODAsOCBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWlu
ZXIoVGV4dFN0cmVhCiAgICAgICAgIGxpbmVhckdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRp
ZW50QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFBy
b3BlcnRpZXModHMsIGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGll
bnRUcmFuc2Zvcm0oKSwgYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CiAKLSAgICAgICAg
RmxvYXRQb2ludCBzdGFydFBvaW50OwotICAgICAgICBGbG9hdFBvaW50IGVuZFBvaW50OworICAg
ICAgICBHcmFwaGljc1BvaW50IHN0YXJ0UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgZW5k
UG9pbnQ7CiAgICAgICAgIGxpbmVhckdyYWRpZW50RWxlbWVudC0+Y2FsY3VsYXRlU3RhcnRFbmRQ
b2ludHMoYXR0cmlidXRlcywgc3RhcnRQb2ludCwgZW5kUG9pbnQpOwogCiAgICAgICAgIHRzIDw8
ICIgW3N0YXJ0PSIgPDwgc3RhcnRQb2ludCA8PCAiXSBbZW5kPSIgPDwgZW5kUG9pbnQgPDwgIl1c
biI7CkBAIC01OTYsOCArNTk2LDggQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRl
eHRTdHJlYQogICAgICAgICByYWRpYWxHcmFkaWVudEVsZW1lbnQtPmNvbGxlY3RHcmFkaWVudEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHdyaXRlQ29tbW9uR3JhZGllbnRQcm9wZXJ0
aWVzKHRzLCBhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpLCBhdHRyaWJ1dGVzLmdyYWRpZW50VHJh
bnNmb3JtKCksIGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpOwogCi0gICAgICAgIEZsb2F0
UG9pbnQgZm9jYWxQb2ludDsKLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludDsKKyAgICAg
ICAgR3JhcGhpY3NQb2ludCBmb2NhbFBvaW50OworICAgICAgICBHcmFwaGljc1BvaW50IGNlbnRl
clBvaW50OwogICAgICAgICBmbG9hdCByYWRpdXM7CiAgICAgICAgIHJhZGlhbEdyYWRpZW50RWxl
bWVudC0+Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMoYXR0cmlidXRlcywgZm9j
YWxQb2ludCwgY2VudGVyUG9pbnQsIHJhZGl1cyk7CiAKQEAgLTY0MCw3ICs2NDAsNyBAQCB2b2lk
IHdyaXRlU1ZHSW5saW5lVGV4dChUZXh0U3RyZWFtJiB0cywgCiAgICAgd3JpdGVTdGFuZGFyZFBy
ZWZpeCh0cywgdGV4dCwgaW5kZW50KTsKIAogICAgIC8vIFdoeSBub3QganVzdCBsaW5lc0JvdW5k
aW5nQm94KCk/Ci0gICAgdHMgPDwgIiAiIDw8IEZsb2F0UmVjdCh0ZXh0LmZpcnN0UnVuT3JpZ2lu
KCksIHRleHQubGluZXNCb3VuZGluZ0JveCgpLnNpemUoKSkgPDwgIlxuIjsKKyAgICB0cyA8PCAi
ICIgPDwgR3JhcGhpY3NSZWN0KHRleHQuZmlyc3RSdW5PcmlnaW4oKSwgdGV4dC5saW5lc0JvdW5k
aW5nQm94KCkuc2l6ZSgpKSA8PCAiXG4iOwogICAgIHdyaXRlUmVzb3VyY2VzKHRzLCB0ZXh0LCBp
bmRlbnQpOwogICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveGVzKHRzLCB0ZXh0LCBpbmRlbnQpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDgg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sb3I7Ci1jbGFzcyBGbG9hdFJlY3Q7
Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1JlY3Q7CitjbGFzcyBHcmFwaGljc1Np
emU7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5kZXJJbWFnZTsK
QEAgLTYxLDcgKzYxLDcgQEAgdm9pZCB3cml0ZVJlc291cmNlcyhUZXh0U3RyZWFtJiwgY29uc3Qg
UgogLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRv
IGR1bXAgdGhlIHJlbmRlciB0cmVlLgogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBDb2xvciYpOwotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgRmxvYXRSZWN0Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
LCBjb25zdCBHcmFwaGljc1JlY3QmKTsKIAogLy8gaGVscGVyIG9wZXJhdG9ycyBzcGVjaWZpYyB0
byBkdW1waW5nIHRoZSByZW5kZXIgdHJlZS4gdGhlc2UgYXJlIHVzZWQgaW4gdmFyaW91cyBjbGFz
c2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlCiAvLyB0aGVzZSBjb3VsZCBiZSBkZWZpbmVkIGlu
IHNlcGFyYXRlIG5hbWVzcGFjZSB0byBhdm9pZCBtYXRjaGluZyB0aGVzZSBnZW5lcmljIHNpZ25h
dHVyZXMgdW5pbnRlbnRpb25hbGx5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDggKzQ5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjb21wdXRlUGVyQ2hhcmFjdGVyTGF5
b3V0SW5mb3JtYXRpb24oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVj
dCgpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBHcmFwaGljc1JlY3QoKTsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7IH0KIAogICAgIElubGluZUJveCogY2xvc2VzdExlYWZDaGlsZEZvclBvc2l0aW9uKGNvbnN0
IEludFBvaW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgpAQCAtNDIsOSAr
NDIsOSBAQCBQYXNzUmVmUHRyPFNWR1NoYWRvd1RyZWVDb250YWluZXJFbGVtZW50CiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTVkdTaGFkb3dUcmVlQ29udGFpbmVyRWxlbWVudChkb2N1bWVudCkp
OwogfQogCi1GbG9hdFNpemUgU1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ6OmNvbnRhaW5l
clRyYW5zbGF0aW9uKCkgY29uc3QKK0dyYXBoaWNzU2l6ZSBTVkdTaGFkb3dUcmVlQ29udGFpbmVy
RWxlbWVudDo6Y29udGFpbmVyVHJhbnNsYXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBGbG9h
dFNpemUobV94T2Zmc2V0LnZhbHVlKHRoaXMpLCBtX3lPZmZzZXQudmFsdWUodGhpcykpOworICAg
IHJldHVybiBHcmFwaGljc1NpemUobV94T2Zmc2V0LnZhbHVlKHRoaXMpLCBtX3lPZmZzZXQudmFs
dWUodGhpcykpOwogfQogCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IFNWR1NoYWRvd1RyZWVDb250YWlu
ZXJFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdTaGFk
b3dUcmVlRWxlbWVudHMuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
NCArMjYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFNpemU7Citj
bGFzcyBHcmFwaGljc1NpemU7CiBjbGFzcyBTVkdVc2VFbGVtZW50OwogCiBjbGFzcyBTVkdTaGFk
b3dUcmVlQ29udGFpbmVyRWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHU2hhZG93VHJlZUNvbnRhaW5lckVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCopOwogCi0gICAgRmxvYXRTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29u
c3Q7CisgICAgR3JhcGhpY3NTaXplIGNvbnRhaW5lclRyYW5zbGF0aW9uKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRDb250YWluZXJPZmZzZXQoY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBTVkdMZW5n
dGgmIHkpCiAgICAgewogICAgICAgICBtX3hPZmZzZXQgPSB4OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmUuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCB2b2lkIFNWR1Rl
eHRMYXlvdXRFbmdpbmU6OmxheW91dFRleHRPbkxpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcG9p
bnQgPSBtX3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4dFBhdGhPZmZzZXQsIG9rKTsKKyAgICAg
ICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQgPSBtX3RleHRQYXRoLnBvaW50QXRMZW5ndGgodGV4
dFBhdGhPZmZzZXQsIG9rKTsKICAgICAgICAgICAgIEFTU0VSVChvayk7CiAKICAgICAgICAgICAg
IHggPSBwb2ludC54KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UXVlcnkuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMyw3
IEBAIHN0cnVjdCBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhIDogU1YKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBwb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50IHN0YXJ0UG9zaXRpb247CisgICAg
R3JhcGhpY3NQb2ludCBzdGFydFBvc2l0aW9uOwogfTsKIAogYm9vbCBTVkdUZXh0UXVlcnk6OnN0
YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKQEAgLTMzNSw3ICszMzUsNyBAQCBib29sIFNW
R1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjCiAgICAgaWYgKCFtYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGF0
YS0+c3RhcnRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21lbnQueCwgZnJhZ21lbnQueSk7Cisg
ICAgZGF0YS0+c3RhcnRQb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQoZnJhZ21lbnQueCwgZnJhZ21l
bnQueSk7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAgICBTVkdUZXh0TWV0cmlj
cyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURh
dGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0aW9u
KTsKQEAgLTM1NCwxMCArMzU0LDEwIEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9u
T2ZDaGFyYWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0UXVlcnk6
OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK0dyYXBo
aWNzUG9pbnQgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKG1fdGV4dEJveGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsK
IAogICAgIFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEgZGF0YShwb3NpdGlvbik7CiAgICAg
ZXhlY3V0ZVF1ZXJ5KCZkYXRhLCAmU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0
ZXJDYWxsYmFjayk7CkBAIC0zNzIsNyArMzcyLDcgQEAgc3RydWN0IEVuZFBvc2l0aW9uT2ZDaGFy
YWN0ZXJEYXRhIDogU1ZHVAogICAgIH0KIAogICAgIHVuc2lnbmVkIHBvc2l0aW9uOwotICAgIEZs
b2F0UG9pbnQgZW5kUG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludCBlbmRQb3NpdGlvbjsKIH07
CiAKIGJvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0
YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSBjb25zdApAQCAt
Mzg0LDcgKzM4NCw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGUK
ICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVl
cnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBkYXRhLT5lbmRQb3NpdGlvbiA9IEZsb2F0UG9pbnQoZnJhZ21l
bnQueCwgZnJhZ21lbnQueSk7CisgICAgZGF0YS0+ZW5kUG9zaXRpb24gPSBHcmFwaGljc1BvaW50
KGZyYWdtZW50LngsIGZyYWdtZW50LnkpOwogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9
IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVu
ZGVyZXIsIGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCwgc3RhcnRQb3NpdGlvbiArIDEpOwogICAg
IGlmIChxdWVyeURhdGEtPmlzVmVydGljYWxUZXh0KQpAQCAtNDAxLDEwICs0MDEsMTAgQEAgYm9v
bCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZQogICAgIHJldHVybiB0cnVlOwog
fQogCi1GbG9hdFBvaW50IFNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNp
Z25lZCBwb3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUG9pbnQgU1ZHVGV4dFF1ZXJ5OjplbmRQb3Np
dGlvbk9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3Rl
eHRCb3hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisgICAgICAg
IHJldHVybiBHcmFwaGljc1BvaW50KCk7CiAKICAgICBFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0
YSBkYXRhKHBvc2l0aW9uKTsKICAgICBleGVjdXRlUXVlcnkoJmRhdGEsICZTVkdUZXh0UXVlcnk6
OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk7CkBAIC00NjIsMTUgKzQ2MiwxNSBAQCBz
dHJ1Y3QgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhIDogU1ZHVGV4dFF1CiAgICAgfQogCiAgICAgdW5z
aWduZWQgcG9zaXRpb247Ci0gICAgRmxvYXRSZWN0IGV4dGVudDsKKyAgICBHcmFwaGljc1JlY3Qg
ZXh0ZW50OwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUdseXBoQm91bmRhcmll
cyhTVkdUZXh0UXVlcnk6OkRhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQorc3RhdGljIGlu
bGluZSB2b2lkIGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhTVkdUZXh0UXVlcnk6OkRhdGEqIHF1
ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRp
b24sIEdyYXBoaWNzUmVjdCYgZXh0ZW50KQogewogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSBx
dWVyeURhdGEtPnRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2Fs
aW5nRmFjdG9yKTsKIAotICAgIGV4dGVudC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGZyYWdtZW50
LngsIGZyYWdtZW50LnkgLSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c2NhbGVkRm9udCgpLmZv
bnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSAvIHNjYWxpbmdGYWN0b3IpKTsKKyAgICBleHRlbnQu
c2V0TG9jYXRpb24oR3JhcGhpY3NQb2ludChmcmFnbWVudC54LCBmcmFnbWVudC55IC0gcXVlcnlE
YXRhLT50ZXh0UmVuZGVyZXItPnNjYWxlZEZvbnQoKS5mb250TWV0cmljcygpLmZsb2F0QXNjZW50
KCkgLyBzY2FsaW5nRmFjdG9yKSk7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAg
ICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0
ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0
LCBzdGFydFBvc2l0aW9uKTsKQEAgLTQ4MSw3ICs0ODEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlR2x5cGhCb3VuZGFyCiAgICAgfQogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmlj
cyA9IFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0
UmVuZGVyZXIsIGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOwot
ICAgIGV4dGVudC5zZXRTaXplKEZsb2F0U2l6ZShtZXRyaWNzLndpZHRoKCksIG1ldHJpY3MuaGVp
Z2h0KCkpKTsKKyAgICBleHRlbnQuc2V0U2l6ZShHcmFwaGljc1NpemUobWV0cmljcy53aWR0aCgp
LCBtZXRyaWNzLmhlaWdodCgpKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFu
c2Zvcm07CiAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5z
Zm9ybSwgU1ZHVGV4dEZyYWdtZW50OjpUcmFuc2Zvcm1JZ25vcmluZ1RleHRMZW5ndGgpOwpAQCAt
NTA0LDEwICs1MDQsMTAgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2Fs
bAogICAgIHJldHVybiB0cnVlOwogfQogCi1GbG9hdFJlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRP
ZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdUZXh0
UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAg
IGlmIChtX3RleHRCb3hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogCiAgICAgRXh0ZW50T2ZDaGFyYWN0ZXJE
YXRhIGRhdGEocG9zaXRpb24pOwogICAgIGV4ZWN1dGVRdWVyeSgmZGF0YSwgJlNWR1RleHRRdWVy
eTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayk7CkBAIC01MTYsMTkgKzUxNiwxOSBAQCBGbG9h
dFJlY3QgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlCiAKIC8vIGNoYXJhY3Rlck51bWJl
ckF0UG9zaXRpb24oKSBpbXBsZW1lbnRhdGlvbgogc3RydWN0IENoYXJhY3Rlck51bWJlckF0UG9z
aXRpb25EYXRhIDogU1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKLSAgICBDaGFyYWN0ZXJOdW1iZXJBdFBv
c2l0aW9uRGF0YShjb25zdCBGbG9hdFBvaW50JiBxdWVyeVBvc2l0aW9uKQorICAgIENoYXJhY3Rl
ck51bWJlckF0UG9zaXRpb25EYXRhKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHF1ZXJ5UG9zaXRpb24p
CiAgICAgICAgIDogcG9zaXRpb24ocXVlcnlQb3NpdGlvbikKICAgICB7CiAgICAgfQogCi0gICAg
RmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICBHcmFwaGljc1BvaW50IHBvc2l0aW9uOwogfTsKIAog
Ym9vbCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRh
KiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAg
ICAgQ2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxDaGFy
YWN0ZXJOdW1iZXJBdFBvc2l0aW9uRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBGbG9hdFJlY3Qg
ZXh0ZW50OworICAgIEdyYXBoaWNzUmVjdCBleHRlbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZyYWdtZW50Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgIGludCBzdGFydFBvc2l0aW9u
ID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7CiAgICAgICAgIGludCBlbmRQb3NpdGlv
biA9IHN0YXJ0UG9zaXRpb24gKyAxOwpAQCAtNTQ1LDcgKzU0NSw3IEBAIGJvb2wgU1ZHVGV4dFF1
ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBT
VkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pIGNvbnN0CitpbnQgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0
aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChtX3Rl
eHRCb3hlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1RleHRRdWVyeV9oCiAKICNpZiBFTkFCTEUo
U1ZHKQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgog
I2luY2x1ZGUgIlNWR1RleHRGcmFnbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtMzgsMTEgKzM4LDExIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYXJhY3Rl
cnMoKSBjb25zdDsKICAgICBmbG9hdCB0ZXh0TGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgc3Vi
U3RyaW5nTGVuZ3RoKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3Q7Ci0gICAgRmxvYXRQb2ludCBzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXIodW5zaWduZWQgcG9z
aXRpb24pIGNvbnN0OwotICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb25PZkNoYXJhY3Rlcih1bnNp
Z25lZCBwb3NpdGlvbikgY29uc3Q7CisgICAgR3JhcGhpY3NQb2ludCBzdGFydFBvc2l0aW9uT2ZD
aGFyYWN0ZXIodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgZW5k
UG9zaXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7CiAgICAgZmxvYXQg
cm90YXRpb25PZkNoYXJhY3Rlcih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgRmxvYXRS
ZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICBpbnQg
Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAg
R3JhcGhpY3NSZWN0IGV4dGVudE9mQ2hhcmFjdGVyKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsK
KyAgICBpbnQgY2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50Jikg
Y29uc3Q7CiAKICAgICAvLyBQdWJsaWMgaGVscGVyIHN0cnVjdC4gUHJpdmF0ZSBjbGFzc2VzIGlu
IFNWR1RleHRRdWVyeSBpbmhlcml0IGZyb20gaXQuCiAgICAgc3RydWN0IERhdGE7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODEsNyArODEsNyBAQCBmbG9hdCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Zmxv
YXRXCiAgICAgcmV0dXJuIGl0LnJ1bldpZHRoU29GYXIoKTsKIH0KICAKLXZvaWQgU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ6OmRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEdyYXBoaWNzUG9p
bnQmIHBvaW50KSBjb25zdAogewogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7
CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwpAQCAtMTE0LDEx
ICsxMTQsMTEgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWRwogICAg
IGZsb2F0IHNjYWxlID0gc2NhbGVFbVRvVW5pdHMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnNp
emUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCkpOwogICAgIEFTU0VSVChhY3RpdmVQ
YWludGluZ1Jlc291cmNlKTsKIAotICAgIEZsb2F0UG9pbnQgZ2x5cGhPcmlnaW47CisgICAgR3Jh
cGhpY3NQb2ludCBnbHlwaE9yaWdpbjsKICAgICBnbHlwaE9yaWdpbi5zZXRYKHN2Z0ZvbnREYXRh
LT5ob3Jpem9udGFsT3JpZ2luWCgpICogc2NhbGUpOwogICAgIGdseXBoT3JpZ2luLnNldFkoc3Zn
Rm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZKCkgKiBzY2FsZSk7CiAKLSAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb2ludCA9IHBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBvaW50ID0g
cG9pbnQ7CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2VNb2RlIHJlc291cmNlTW9kZSA9IGNvbnRleHQt
PnRleHREcmF3aW5nTW9kZSgpID09IFRleHRNb2RlU3Ryb2tlID8gQXBwbHlUb1N0cm9rZU1vZGUg
OiBBcHBseVRvRmlsbE1vZGU7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgewogICAgICAgICBHbHlwaCBnbHlwaCA9IGdseXBoQnVmZmVyLmdseXBoQXQoZnJvbSArIGkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWN0aXZlUGFpbnRp
bmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZSogb2JqZWN0KSB7IG1fYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZSA9IG9iamVjdDsgfQogCiAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgV2lkdGhJdGVyYXRvciYsIFVD
aGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBhZHZhbmNlTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgdG8sIGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdDsKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvUGF0dGVybkF0dHJpYnV0ZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBzdHJ1Y3QgUGF0dGVybkF0dHJpYnV0ZXMgewogICAgIFNW
R0xlbmd0aCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CiAgICAgU1ZHTGVuZ3RoIHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIFNWR0xlbmd0aCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX2hlaWdodDsgfQotICAgIEZsb2F0UmVjdCB2aWV3Qm94KCkgY29uc3QgeyByZXR1
cm4gbV92aWV3Qm94OyB9CisgICAgR3JhcGhpY3NSZWN0IHZpZXdCb3goKSBjb25zdCB7IHJldHVy
biBtX3ZpZXdCb3g7IH0KICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHByZXNlcnZlQXNwZWN0
UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KICAgICBib29s
IGJvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hNb2RlOyB9CiAg
ICAgYm9vbCBib3VuZGluZ0JveE1vZGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGlu
Z0JveE1vZGVDb250ZW50OyB9CkBAIC04Nyw3ICs4Nyw3IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmli
dXRlcyB7CiAgICAgICAgIG1faGVpZ2h0U2V0ID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBzZXRWaWV3Qm94KGNvbnN0IEZsb2F0UmVjdCYgdmFsdWUpCisgICAgdm9pZCBzZXRWaWV3Qm94
KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmFsdWUpCiAgICAgewogICAgICAgICBtX3ZpZXdCb3ggPSB2
YWx1ZTsKICAgICAgICAgbV92aWV3Qm94U2V0ID0gdHJ1ZTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBw
cml2YXRlOgogICAgIFNWR0xlbmd0aCBtX3k7CiAgICAgU1ZHTGVuZ3RoIG1fd2lkdGg7CiAgICAg
U1ZHTGVuZ3RoIG1faGVpZ2h0OwotICAgIEZsb2F0UmVjdCBtX3ZpZXdCb3g7CisgICAgR3JhcGhp
Y3NSZWN0IG1fdmlld0JveDsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVB
c3BlY3RSYXRpbzsKICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgIGJvb2wgbV9ib3Vu
ZGluZ0JveE1vZGVDb250ZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw3
ICsxNDMsNyBAQCBQYXRoIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphbmltYXRpb25QCiAgICAg
cmV0dXJuIFBhdGgoKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcm
IHMsIEZsb2F0UG9pbnQmIHBvaW50KQorc3RhdGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJp
bmcmIHMsIEdyYXBoaWNzUG9pbnQmIHBvaW50KQogewogICAgIGlmIChzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYxLDcgKzE2MSw3IEBAIHN0YXRpYyBib29sIHBhcnNl
UG9pbnQoY29uc3QgU3RyaW5nJiBzLCAKICAgICBpZiAoIXBhcnNlTnVtYmVyKGN1ciwgZW5kLCB5
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHBvaW50ID0gRmxvYXRQb2ludCh4
LCB5KTsKKyAgICBwb2ludCA9IEdyYXBoaWNzUG9pbnQoeCwgeSk7CiAgICAgCiAgICAgLy8gZGlz
YWxsb3cgYW55dGhpbmcgZXhjZXB0IHNwYWNlcyBhdCB0aGUgZW5kCiAgICAgcmV0dXJuICFza2lw
T3B0aW9uYWxTcGFjZXMoY3VyLCBlbmQpOwpAQCAtMTg3LDkgKzE4Nyw5IEBAIGJvb2wgU1ZHQW5p
bWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUYKIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1l
bnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNv
bnN0IFN0cmluZyYgYnlTdHJpbmcpCiB7CiAgICAgcGFyc2VQb2ludChmcm9tU3RyaW5nLCBtX2Zy
b21Qb2ludCk7Ci0gICAgRmxvYXRQb2ludCBieVBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgYnlQ
b2ludDsKICAgICBwYXJzZVBvaW50KGJ5U3RyaW5nLCBieVBvaW50KTsKLSAgICBtX3RvUG9pbnQg
PSBGbG9hdFBvaW50KG1fZnJvbVBvaW50LngoKSArIGJ5UG9pbnQueCgpLCBtX2Zyb21Qb2ludC55
KCkgKyBieVBvaW50LnkoKSk7CisgICAgbV90b1BvaW50ID0gR3JhcGhpY3NQb2ludChtX2Zyb21Q
b2ludC54KCkgKyBieVBvaW50LngoKSwgbV9mcm9tUG9pbnQueSgpICsgYnlQb2ludC55KCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlQQogICAgICAgICBQYXRoIHBhdGggPSBhbmltYXRpb25Q
YXRoKCk7CiAgICAgICAgIGZsb2F0IHBvc2l0aW9uT25QYXRoID0gcGF0aC5sZW5ndGgoKSAqIHBl
cmNlbnRhZ2U7CiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9zaXRpb24g
PSBwYXRoLnBvaW50QXRMZW5ndGgocG9zaXRpb25PblBhdGgsIG9rKTsKKyAgICAgICAgR3JhcGhp
Y3NQb2ludCBwb3NpdGlvbiA9IHBhdGgucG9pbnRBdExlbmd0aChwb3NpdGlvbk9uUGF0aCwgb2sp
OwogICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgIHRyYW5zZm9ybS0+dHJhbnNsYXRlKHBv
c2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsKICAgICAgICAgICAgIFJvdGF0ZU1vZGUgcm90YXRl
TW9kZSA9IHRoaXMtPnJvdGF0ZU1vZGUoKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCB2b2lkIFNWR0Fu
aW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBGbG9hdFNpemUgZGlmZiA9IG1fdG9Qb2ludCAtIG1fZnJvbVBvaW50Owor
ICAgIEdyYXBoaWNzU2l6ZSBkaWZmID0gbV90b1BvaW50IC0gbV9mcm9tUG9pbnQ7CiAgICAgdHJh
bnNmb3JtLT50cmFuc2xhdGUoZGlmZi53aWR0aCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50
LngoKSwgZGlmZi5oZWlnaHQoKSAqIHBlcmNlbnRhZ2UgKyBtX2Zyb21Qb2ludC55KCkpOwogfQog
ICAgIApAQCAtMjY1LDEzICsyNjUsMTMgQEAgdm9pZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6
YXBwbHlSZXN1bAogCiBmbG9hdCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRlRGlz
dGFuY2UoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKQog
ewotICAgIEZsb2F0UG9pbnQgZnJvbTsKLSAgICBGbG9hdFBvaW50IHRvOworICAgIEdyYXBoaWNz
UG9pbnQgZnJvbTsKKyAgICBHcmFwaGljc1BvaW50IHRvOwogICAgIGlmICghcGFyc2VQb2ludChm
cm9tU3RyaW5nLCBmcm9tKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghcGFyc2VQb2lu
dCh0b1N0cmluZywgdG8pKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgRmxvYXRTaXplIGRpZmYg
PSB0byAtIGZyb207CisgICAgR3JhcGhpY3NTaXplIGRpZmYgPSB0byAtIGZyb207CiAgICAgcmV0
dXJuIHNxcnRmKGRpZmYud2lkdGgoKSAqIGRpZmYud2lkdGgoKSArIGRpZmYuaGVpZ2h0KCkgKiBk
aWZmLmhlaWdodCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVN
b3Rpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwx
MyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgUm90YXRlTW9kZSByb3RhdGVNb2RlKCkgY29uc3Q7
CiAKLSAgICBGbG9hdFNpemUgbV9hbmltYXRlZFRyYW5zbGF0aW9uOworICAgIEdyYXBoaWNzU2l6
ZSBtX2FuaW1hdGVkVHJhbnNsYXRpb247CiAgICAgZmxvYXQgbV9hbmltYXRlZEFuZ2xlOwogCiAg
ICAgLy8gTm90ZTogd2UgZG8gbm90IHN1cHBvcnQgcGVyY2VudGFnZSB2YWx1ZXMgZm9yIHRvL2Zy
b20gY29vcmRzIGFzIHRoZSBzcGVjIGltcGxpZXMgd2Ugc2hvdWxkIChvcGVyYSBkb2Vzbid0IGVp
dGhlcikKLSAgICBGbG9hdFBvaW50IG1fZnJvbVBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9m
cm9tUG9pbnQ7CiAgICAgZmxvYXQgbV9mcm9tQW5nbGU7Ci0gICAgRmxvYXRQb2ludCBtX3RvUG9p
bnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX3RvUG9pbnQ7CiAgICAgZmxvYXQgbV90b0FuZ2xlOwog
CiAgICAgdW5zaWduZWQgbV9iYXNlSW5kZXhJblRyYW5zZm9ybUxpc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlz
aW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDEzICsyNTEsMTMgQEAgZmxvYXQgU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bAogICAgIGlmICghdG8uaXNWYWxpZCgpIHx8IGZy
b20udHlwZSgpICE9IHRvLnR5cGUoKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICh0by50
eXBlKCkgPT0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1RSQU5TTEFURSkgewotICAgICAg
ICBGbG9hdFNpemUgZGlmZiA9IHRvLnRyYW5zbGF0ZSgpIC0gZnJvbS50cmFuc2xhdGUoKTsKKyAg
ICAgICAgR3JhcGhpY3NTaXplIGRpZmYgPSB0by50cmFuc2xhdGUoKSAtIGZyb20udHJhbnNsYXRl
KCk7CiAgICAgICAgIHJldHVybiBzcXJ0ZihkaWZmLndpZHRoKCkgKiBkaWZmLndpZHRoKCkgKyBk
aWZmLmhlaWdodCgpICogZGlmZi5oZWlnaHQoKSk7CiAgICAgfQogICAgIGlmICh0by50eXBlKCkg
PT0gU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1JPVEFURSkKICAgICAgICAgcmV0dXJuIGZh
YnNmKHRvLmFuZ2xlKCkgLSBmcm9tLmFuZ2xlKCkpOwogICAgIGlmICh0by50eXBlKCkgPT0gU1ZH
VHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JNX1NDQUxFKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBkaWZm
ID0gdG8uc2NhbGUoKSAtIGZyb20uc2NhbGUoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIGRpZmYg
PSB0by5zY2FsZSgpIC0gZnJvbS5zY2FsZSgpOwogICAgICAgICByZXR1cm4gc3FydGYoZGlmZi53
aWR0aCgpICogZGlmZi53aWR0aCgpICsgZGlmZi5oZWlnaHQoKSAqIGRpZmYuaGVpZ2h0KCkpOwog
ICAgIH0KICAgICByZXR1cm4gLTE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRQb2ludExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRlZFBvaW50TGlzdC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCB2b2lkIFNWR0FuaW1hdGVkUG9pbnRMaXN0QW5pbWF0b3I6OmNhbGN1CiAgICAgaWYgKCFpdGVt
Q291bnQgfHwgaXRlbUNvdW50ICE9IHRvUG9pbnRMaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBpdGVtQ291bnQ7ICsrbikgewotICAgICAg
ICBGbG9hdFBvaW50JiB0byA9IHRvUG9pbnRMaXN0LmF0KG4pOworICAgICAgICBHcmFwaGljc1Bv
aW50JiB0byA9IHRvUG9pbnRMaXN0LmF0KG4pOwogICAgICAgICB0byArPSBmcm9tUG9pbnRMaXN0
LmF0KG4pOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3Qu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIFNWR0FuaW1hdGVkUmVjdEFu
aW1hdG9yOjpTVkdBbmltYXRlZFJlY3QKIAogUGFzc093blB0cjxTVkdBbmltYXRlZFR5cGU+IFNW
R0FuaW1hdGVkUmVjdEFuaW1hdG9yOjpjb25zdHJ1Y3RGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQogewotICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+IGFuaW1hdGVkVHlwZSA9IFNW
R0FuaW1hdGVkVHlwZTo6Y3JlYXRlUmVjdChuZXcgRmxvYXRSZWN0KTsKKyAgICBPd25QdHI8U1ZH
QW5pbWF0ZWRUeXBlPiBhbmltYXRlZFR5cGUgPSBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3Qo
bmV3IEdyYXBoaWNzUmVjdCk7CiAgICAgcGFyc2VSZWN0KHN0cmluZywgYW5pbWF0ZWRUeXBlLT5y
ZWN0KCkpOwogICAgIHJldHVybiBhbmltYXRlZFR5cGUucmVsZWFzZSgpOwogfQpAQCAtNjQsMTcg
KzY0LDE3IEBAIHZvaWQgU1ZHQW5pbWF0ZWRSZWN0QW5pbWF0b3I6OmNhbGN1bGF0ZUEKICAgICBT
VkdBbmltYXRlRWxlbWVudCogYW5pbWF0aW9uRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FuaW1h
dGVFbGVtZW50Kj4obV9hbmltYXRpb25FbGVtZW50KTsKICAgICBBbmltYXRpb25Nb2RlIGFuaW1h
dGlvbk1vZGUgPSBhbmltYXRpb25FbGVtZW50LT5hbmltYXRpb25Nb2RlKCk7CiAgICAgLy8gVG8g
YW5pbWF0aW9uIHVzZXMgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBsb3dlciBwcmlvcml0eSBhbmlt
YXRpb25zIGFzIHRoZSBiYXNlIHZhbHVlLgotICAgIEZsb2F0UmVjdCYgYW5pbWF0ZWRSZWN0ID0g
YW5pbWF0ZWQtPnJlY3QoKTsKKyAgICBHcmFwaGljc1JlY3QmIGFuaW1hdGVkUmVjdCA9IGFuaW1h
dGVkLT5yZWN0KCk7CiAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gVG9BbmltYXRpb24pCiAgICAg
ICAgIGZyb20tPnJlY3QoKSA9IGFuaW1hdGVkUmVjdDsKICAgICAKLSAgICBjb25zdCBGbG9hdFJl
Y3QmIGZyb21SZWN0ID0gZnJvbS0+cmVjdCgpOwotICAgIGNvbnN0IEZsb2F0UmVjdCYgdG9SZWN0
ID0gdG8tPnJlY3QoKTsKLSAgICBGbG9hdFJlY3QgbmV3UmVjdDsgICAgCisgICAgY29uc3QgR3Jh
cGhpY3NSZWN0JiBmcm9tUmVjdCA9IGZyb20tPnJlY3QoKTsKKyAgICBjb25zdCBHcmFwaGljc1Jl
Y3QmIHRvUmVjdCA9IHRvLT5yZWN0KCk7CisgICAgR3JhcGhpY3NSZWN0IG5ld1JlY3Q7ICAgIAog
ICAgIGlmIChhbmltYXRpb25FbGVtZW50LT5jYWxjTW9kZSgpID09IENhbGNNb2RlRGlzY3JldGUp
CiAgICAgICAgIG5ld1JlY3QgPSBwZXJjZW50YWdlIDwgMC41ID8gZnJvbVJlY3QgOiB0b1JlY3Q7
CiAgICAgZWxzZQotICAgICAgICBuZXdSZWN0ID0gRmxvYXRSZWN0KCh0b1JlY3QueCgpIC0gZnJv
bVJlY3QueCgpKSAqIHBlcmNlbnRhZ2UgKyBmcm9tUmVjdC54KCksCisgICAgICAgIG5ld1JlY3Qg
PSBHcmFwaGljc1JlY3QoKHRvUmVjdC54KCkgLSBmcm9tUmVjdC54KCkpICogcGVyY2VudGFnZSAr
IGZyb21SZWN0LngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9SZWN0LnkoKSAt
IGZyb21SZWN0LnkoKSkgKiBwZXJjZW50YWdlICsgZnJvbVJlY3QueSgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh0b1JlY3Qud2lkdGgoKSAtIGZyb21SZWN0LndpZHRoKCkpICogcGVy
Y2VudGFnZSArIGZyb21SZWN0LndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHRvUmVjdC5oZWlnaHQoKSAtIGZyb21SZWN0LmhlaWdodCgpKSAqIHBlcmNlbnRhZ2UgKyBmcm9t
UmVjdC5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRSZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUmVjdC5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdHlwZWRlZiBTVkdBbmltYXRlZFByb3BlcnR5VGVhck9mZjxGbG9hdFJlY3Q+IFNWR0FuaW1h
dGVkUmVjdDsKK3R5cGVkZWYgU1ZHQW5pbWF0ZWRQcm9wZXJ0eVRlYXJPZmY8R3JhcGhpY3NSZWN0
PiBTVkdBbmltYXRlZFJlY3Q7CiAKIC8vIEhlbHBlciBtYWNyb3MgdG8gZGVjbGFyZS9kZWZpbmUg
YSBTVkdBbmltYXRlZFJlY3Qgb2JqZWN0CiAjZGVmaW5lIERFQ0xBUkVfQU5JTUFURURfUkVDVChV
cHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCi1ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRZ
KFNWR0FuaW1hdGVkUmVjdCwgRmxvYXRSZWN0LCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5
KQorREVDTEFSRV9BTklNQVRFRF9QUk9QRVJUWShTVkdBbmltYXRlZFJlY3QsIEdyYXBoaWNzUmVj
dCwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkKIAogI2RlZmluZSBERUZJTkVfQU5JTUFU
RURfUkVDVChPd25lclR5cGUsIERPTUF0dHJpYnV0ZSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9w
ZXJ0eSkgXAogREVGSU5FX0FOSU1BVEVEX1BST1BFUlRZKEFuaW1hdGVkUmVjdCwgT3duZXJUeXBl
LCBET01BdHRyaWJ1dGUsIERPTUF0dHJpYnV0ZS5sb2NhbE5hbWUoKSwgVXBwZXJQcm9wZXJ0eSwg
TG93ZXJQcm9wZXJ0eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiBmcm9tVmFs
dWUsIE93blB0cjxTVkdBbmltYXRlZFR5cGU+JiB0b1ZhbHVlLCBPd25QdHI8U1ZHQW5pbWF0ZWRU
eXBlPiYgYW5pbWF0ZWRWYWx1ZSk7CiAgICAgdmlydHVhbCBmbG9hdCBjYWxjdWxhdGVEaXN0YW5j
ZShjb25zdCBTdHJpbmcmIGZyb21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpOwogCi0g
ICAgc3RhdGljIGJvb2wgcGFyc2VTVkdSZWN0KGNvbnN0IFN0cmluZyYsIEZsb2F0UmVjdCYpOwor
ICAgIHN0YXRpYyBib29sIHBhcnNlU1ZHUmVjdChjb25zdCBTdHJpbmcmLCBHcmFwaGljc1JlY3Qm
KTsKIH07CiAjZW5kaWYgLy8gRU5BQkxFKFNWR19BTklNQVRJT04pCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsy
Miw3IEBACiAjaWYgRU5BQkxFKFNWRykgJiYgRU5BQkxFKFNWR19BTklNQVRJT04pCiAjaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRUeXBlLmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR0Nv
bG9yLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC0xODksNyArMTg5LDcgQEAgUGFzc093
blB0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkVAogICAgIHJldHVybiBhbmltYXRlZFR5
cGUucmVsZWFzZSgpOwogfQogCi1QYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0
ZWRUeXBlOjpjcmVhdGVSZWN0KEZsb2F0UmVjdCogcmVjdCkKK1Bhc3NPd25QdHI8U1ZHQW5pbWF0
ZWRUeXBlPiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVJlY3QoR3JhcGhpY3NSZWN0KiByZWN0KQog
ewogICAgIEFTU0VSVChyZWN0KTsKICAgICBPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBhbmltYXRl
ZFR5cGUgPSBhZG9wdFB0cihuZXcgU1ZHQW5pbWF0ZWRUeXBlKEFuaW1hdGVkUmVjdCkpOwpAQCAt
Mjc3LDcgKzI3Nyw3IEBAIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIFNWR0FuaW1hdGVkVHlwZToK
ICAgICByZXR1cm4gKm1fZGF0YS5wcmVzZXJ2ZUFzcGVjdFJhdGlvOwogfQogCi1GbG9hdFJlY3Qm
IFNWR0FuaW1hdGVkVHlwZTo6cmVjdCgpCitHcmFwaGljc1JlY3QmIFNWR0FuaW1hdGVkVHlwZTo6
cmVjdCgpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBBbmltYXRlZFJlY3QpOwogICAgIHJldHVy
biAqbV9kYXRhLnJlY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZS5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDb2xvcjsKLWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIGNsYXNz
IFNWR0FuZ2xlOwogY2xhc3MgU1ZHTGVuZ3RoOwogY2xhc3MgU1ZHTGVuZ3RoTGlzdDsKQEAgLTUy
LDcgKzUyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlw
ZT4gY3JlYXRlUGF0aChQYXNzT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtPik7CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQb2ludExpc3QoU1ZHUG9pbnRMaXN0
Kik7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVQcmVzZXJ2
ZUFzcGVjdFJhdGlvKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qKTsKLSAgICBzdGF0aWMgUGFzc093
blB0cjxTVkdBbmltYXRlZFR5cGU+IGNyZWF0ZVJlY3QoRmxvYXRSZWN0Kik7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U1ZHQW5pbWF0ZWRUeXBlPiBjcmVhdGVSZWN0KEdyYXBoaWNzUmVjdCopOwog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFNWR0FuaW1hdGVkVHlwZT4gY3JlYXRlU3RyaW5nKFN0cmlu
ZyopOwogCiAgICAgQW5pbWF0ZWRQcm9wZXJ0eVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0q
IHBhdGgoKTsKICAgICBTVkdQb2ludExpc3QmIHBvaW50TGlzdCgpOwogICAgIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8oKTsKLSAgICBGbG9hdFJlY3QmIHJlY3Qo
KTsKKyAgICBHcmFwaGljc1JlY3QmIHJlY3QoKTsKICAgICBTdHJpbmcmIHN0cmluZygpOwogCiAg
ICAgU3RyaW5nIHZhbHVlQXNTdHJpbmcoKTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgog
ICAgICAgICBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aDsKICAgICAgICAgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbyogcHJlc2VydmVBc3BlY3RSYXRpbzsKICAgICAgICAgU1ZHUG9pbnRMaXN0KiBwb2lu
dExpc3Q7Ci0gICAgICAgIEZsb2F0UmVjdCogcmVjdDsKKyAgICAgICAgR3JhcGhpY3NSZWN0KiBy
ZWN0OwogICAgICAgICBTdHJpbmcqIHN0cmluZzsKICAgICB9IG1fZGF0YTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNTcs
NyArMTU3LDcgQEAgdm9pZCBTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKFBhdGgmIAogICAg
IGlmIChyYWRpdXMgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGF0aC5hZGRFbGxpcHNl
KEZsb2F0UmVjdChjeCgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzLCBjeSgpLnZhbHVlKHRoaXMpIC0g
cmFkaXVzLCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKSk7CisgICAgcGF0aC5hZGRFbGxpcHNlKEdy
YXBoaWNzUmVjdChjeCgpLnZhbHVlKHRoaXMpIC0gcmFkaXVzLCBjeSgpLnZhbHVlKHRoaXMpIC0g
cmFkaXVzLCByYWRpdXMgKiAyLCByYWRpdXMgKiAyKSk7CiB9CiAKIGJvb2wgU1ZHQ2lyY2xlRWxl
bWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTYgKzgwLDE2IEBAIGJvb2wgU1ZH
RG9jdW1lbnQ6Onpvb21BbmRQYW5FbmFibGVkKCkgY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgU1ZHRG9jdW1lbnQ6OnN0YXJ0UGFuKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0KQordm9p
ZCBTVkdEb2N1bWVudDo6c3RhcnRQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgc3RhcnQpCiB7CiAg
ICAgaWYgKHJvb3RFbGVtZW50KCkpCi0gICAgICAgIG1fdHJhbnNsYXRlID0gRmxvYXRQb2ludChz
dGFydC54KCkgLSByb290RWxlbWVudCgpLT5jdXJyZW50VHJhbnNsYXRlKCkueCgpLCByb290RWxl
bWVudCgpLT5jdXJyZW50VHJhbnNsYXRlKCkueSgpICsgc3RhcnQueSgpKTsKKyAgICAgICAgbV90
cmFuc2xhdGUgPSBHcmFwaGljc1BvaW50KHN0YXJ0LngoKSAtIHJvb3RFbGVtZW50KCktPmN1cnJl
bnRUcmFuc2xhdGUoKS54KCksIHJvb3RFbGVtZW50KCktPmN1cnJlbnRUcmFuc2xhdGUoKS55KCkg
KyBzdGFydC55KCkpOwogfQogCi12b2lkIFNWR0RvY3VtZW50Ojp1cGRhdGVQYW4oY29uc3QgRmxv
YXRQb2ludCYgcG9zKSBjb25zdAordm9pZCBTVkdEb2N1bWVudDo6dXBkYXRlUGFuKGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvcykgY29uc3QKIHsKICAgICBpZiAocm9vdEVsZW1lbnQoKSkgewotICAg
ICAgICByb290RWxlbWVudCgpLT5zZXRDdXJyZW50VHJhbnNsYXRlKEZsb2F0UG9pbnQocG9zLngo
KSAtIG1fdHJhbnNsYXRlLngoKSwgbV90cmFuc2xhdGUueSgpIC0gcG9zLnkoKSkpOworICAgICAg
ICByb290RWxlbWVudCgpLT5zZXRDdXJyZW50VHJhbnNsYXRlKEdyYXBoaWNzUG9pbnQocG9zLngo
KSAtIG1fdHJhbnNsYXRlLngoKSwgbV90cmFuc2xhdGUueSgpIC0gcG9zLnkoKSkpOwogICAgICAg
ICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHpvb21B
bmRQYW5FbmFibGVkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHN0YXJ0UGFuKGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0KTsKLSAgICB2b2lkIHVwZGF0ZVBhbihjb25zdCBGbG9hdFBvaW50JiBwb3MpIGNv
bnN0OworICAgIHZvaWQgc3RhcnRQYW4oY29uc3QgR3JhcGhpY3NQb2ludCYgc3RhcnQpOworICAg
IHZvaWQgdXBkYXRlUGFuKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvcykgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgU1ZHRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBLVVJMJik7CkBAIC01NSw3ICs1NSw3
IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJl
cihOb2RlKikgY29uc3Q7CiAKLSAgICBGbG9hdFBvaW50IG1fdHJhbnNsYXRlOworICAgIEdyYXBo
aWNzUG9pbnQgbV90cmFuc2xhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3
IEBAIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIFNWR0UKICAgICByZXR1cm4g
cmFyZVNWR0RhdGEoKS0+ZWxlbWVudEluc3RhbmNlcygpOwogfQogCi1ib29sIFNWR0VsZW1lbnQ6
OmJvdW5kaW5nQm94KEZsb2F0UmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0
cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0Citib29sIFNWR0VsZW1lbnQ6OmJvdW5k
aW5nQm94KEdyYXBoaWNzUmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0
ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAgaWYgKGlzU3R5bGVkTG9jYXRh
YmxlKCkpIHsKICAgICAgICAgcmVjdCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQqPih0aGlzKS0+Z2V0QkJveChzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlc0Zv
ckVsZW1lbnQoKSBjb25zdDsKIAotICAgIGJvb2wgYm91bmRpbmdCb3goRmxvYXRSZWN0JiwgU1ZH
TG9jYXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gU1ZHTG9jYXRhYmxlOjpBbGxvd1N0eWxl
VXBkYXRlKSBjb25zdDsKKyAgICBib29sIGJvdW5kaW5nQm94KEdyYXBoaWNzUmVjdCYsIFNWR0xv
Y2F0YWJsZTo6U3R5bGVVcGRhdGVTdHJhdGVneSA9IFNWR0xvY2F0YWJsZTo6QWxsb3dTdHlsZVVw
ZGF0ZSkgY29uc3Q7CiAKICAgICB2b2lkIHNldEN1cnNvckVsZW1lbnQoU1ZHQ3Vyc29yRWxlbWVu
dCopOwogICAgIHZvaWQgY3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3
ICsyNCw3IEBACiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0
dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1Bv
aW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0xNzIsNyArMTcy
LDcgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJgogICAgIGlmIChy
YWRpdXNZIDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhdGguYWRkRWxsaXBzZShGbG9h
dFJlY3QoY3goKS52YWx1ZSh0aGlzKSAtIHJhZGl1c1gsIGN5KCkudmFsdWUodGhpcykgLSByYWRp
dXNZLCByYWRpdXNYICogMiwgcmFkaXVzWSAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoR3Jh
cGhpY3NSZWN0KGN4KCkudmFsdWUodGhpcykgLSByYWRpdXNYLCBjeSgpLnZhbHVlKHRoaXMpIC0g
cmFkaXVzWSwgcmFkaXVzWCAqIDIsIHJhZGl1c1kgKiAyKSk7CiB9CiAgCiBib29sIFNWR0VsbGlw
c2VFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRy
LmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTIxMCw3
ICsyMTAsNyBAQCBib29sIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzZXRGaWx0CiAgICAg
aWYgKGF0dHJOYW1lID09IFNWR05hbWVzOjp0YXJnZXRZQXR0cikKICAgICAgICByZXR1cm4gY29u
dm9sdmVNYXRyaXgtPnNldFRhcmdldE9mZnNldChJbnRQb2ludCh0YXJnZXRYKCksIHRhcmdldFko
KSkpOwogICAgIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIp
Ci0gICAgICAgcmV0dXJuIGNvbnZvbHZlTWF0cml4LT5zZXRLZXJuZWxVbml0TGVuZ3RoKEZsb2F0
UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSkpOworICAgICAg
IHJldHVybiBjb252b2x2ZU1hdHJpeC0+c2V0S2VybmVsVW5pdExlbmd0aChHcmFwaGljc1BvaW50
KGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCkpKTsKICAgICBpZiAoYXR0
ck5hbWUgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQWxwaGFBdHRyKQogICAgICAgICByZXR1cm4gY29u
dm9sdmVNYXRyaXgtPnNldFByZXNlcnZlQWxwaGEocHJlc2VydmVBbHBoYSgpKTsKIApAQCAtMzA3
LDcgKzMwNyw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWEKICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUo
ZmlsdGVyLAogICAgICAgICAgICAgICAgICAgICBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllW
YWx1ZSksIGRpdmlzb3JWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgYmlhcygpLCBJbnRQb2lu
dCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksCi0gICAgICAgICAgICAg
ICAgICAgIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFgo
KSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpKSwg
cHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkuYXBwZW5kKGlucHV0MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBQYXNzUmVmUHRyPFNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ+IFNWR0ZFCiAKIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZFUG9p
bnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUG9pbnRM
aWdodFNvdXJjZTo6Y3JlYXRlKEZsb2F0UG9pbnQzRCh4KCksIHkoKSwgeigpKSk7CisgICAgcmV0
dXJuIFBvaW50TGlnaHRTb3VyY2U6OmNyZWF0ZShHcmFwaGljc1BvaW50M0QoeCgpLCB5KCksIHoo
KSkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cG90TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCBQYXNz
UmVmUHRyPFNWR0ZFU3BvdExpZ2h0RWxlbWVudD4gU1ZHRkVTCiAKIFBhc3NSZWZQdHI8TGlnaHRT
b3VyY2U+IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAg
IEZsb2F0UG9pbnQzRCBwb3MoeCgpLCB5KCksIHooKSk7Ci0gICAgRmxvYXRQb2ludDNEIGRpcmVj
dGlvbihwb2ludHNBdFgoKSwgcG9pbnRzQXRZKCksIHBvaW50c0F0WigpKTsKKyAgICBHcmFwaGlj
c1BvaW50M0QgcG9zKHgoKSwgeSgpLCB6KCkpOworICAgIEdyYXBoaWNzUG9pbnQzRCBkaXJlY3Rp
b24ocG9pbnRzQXRYKCksIHBvaW50c0F0WSgpLCBwb2ludHNBdFooKSk7CiAKICAgICByZXR1cm4g
U3BvdExpZ2h0U291cmNlOjpjcmVhdGUocG9zLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnQo
KSwgbGltaXRpbmdDb25lQW5nbGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RmlsdGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zp
bHRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDE2ICsyMTEsMTYgQEAg
dm9pZCBTVkdGaWx0ZXJFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYgogICAgICAgICBvYmplY3Qt
PnNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCi1GbG9hdFJlY3QgU1ZHRmlsdGVyRWxlbWVudDo6
ZmlsdGVyQm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiBvYmplY3RCb3VuZGluZ0JveCkgY29u
c3QKK0dyYXBoaWNzUmVjdCBTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGluZ0JveChjb25z
dCBHcmFwaGljc1JlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAogewotICAgIEZsb2F0UmVj
dCBmaWx0ZXJCQm94OworICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJCQm94OwogICAgIGlmIChmaWx0
ZXJVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCkKLSAgICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWVBc1BlcmNlbnRhZ2Uo
KSAqIG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCisg
ICAgICAgIGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlQXNQZXJjZW50YWdlKCkg
KiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkgKyBvYmplY3RCb3VuZGluZ0JveC55KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2Jq
ZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkp
OwogICAgIGVsc2UKLSAgICAgICAgZmlsdGVyQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWUodGhp
cyksCisgICAgICAgIGZpbHRlckJCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZSh0aGlzKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJFbGVtZW50PiBjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2b2lkIHNldEZpbHRl
clJlcyh1bnNpZ25lZCBsb25nIGZpbHRlclJlc1gsIHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWSk7
Ci0gICAgRmxvYXRSZWN0IGZpbHRlckJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OworICAgIEdyYXBoaWNzUmVjdCBmaWx0ZXJCb3VuZGluZ0JveChjb25zdCBHcmFwaGljc1JlY3Qm
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTVkdGaWx0ZXJFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxNCArMTU0LDE0IEBAIHZvaWQg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUKICAgICBpZiAodGhpcy0+aGFzQXR0
cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKICAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRI
YXNIZWlnaHQodHJ1ZSk7CiAKLSAgICBGbG9hdFJlY3QgZWZmZWN0QkJveDsKKyAgICBHcmFwaGlj
c1JlY3QgZWZmZWN0QkJveDsKICAgICBpZiAocHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKQotICAg
ICAgICBlZmZlY3RCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAorICAg
ICAgICBlZmZlY3RCQm94ID0gR3JhcGhpY3NSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoKS52YWx1ZUFzUGVyY2VudGFnZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkudmFsdWVBc1BlcmNlbnRhZ2Uo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZUFzUGVyY2Vu
dGFnZSgpKTsKICAgICBlbHNlCi0gICAgICAgIGVmZmVjdEJCb3ggPSBGbG9hdFJlY3QoeCgpLnZh
bHVlKHRoaXMpLAorICAgICAgICBlZmZlY3RCQm94ID0gR3JhcGhpY3NSZWN0KHgoKS52YWx1ZSh0
aGlzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KCkudmFsdWUodGhpcyksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZSh0aGlzKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkF0
dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgi
CkBAIC0zNSwxNCArMzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNWR0Zp
dFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgcywg
RmxvYXRSZWN0JiB2aWV3Qm94KQorYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChE
b2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHMsIEdyYXBoaWNzUmVjdCYgdmlld0JveCkKIHsK
ICAgICBjb25zdCBVQ2hhciogYyA9IHMuY2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBjICsgcy5sZW5ndGgoKTsKICAgICByZXR1cm4gcGFyc2VWaWV3Qm94KGRvYywgYywgZW5k
LCB2aWV3Qm94LCB0cnVlKTsKIH0KIAotYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0Jv
eChEb2N1bWVudCogZG9jLCBjb25zdCBVQ2hhciomIGMsIGNvbnN0IFVDaGFyKiBlbmQsIEZsb2F0
UmVjdCYgdmlld0JveCwgYm9vbCB2YWxpZGF0ZSkKK2Jvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZVZpZXdCb3goRG9jdW1lbnQqIGRvYywgY29uc3QgVUNoYXIqJiBjLCBjb25zdCBVQ2hhciogZW5k
LCBHcmFwaGljc1JlY3QmIHZpZXdCb3gsIGJvb2wgdmFsaWRhdGUpCiB7CiAgICAgU3RyaW5nIHN0
cihjLCBlbmQgLSBjKTsKIApAQCAtNTQsNyArNTQsNyBAQCBib29sIFNWR0ZpdFRvVmlld0JveDo6
cGFyc2VWaWV3Qm94KERvY3VtCiAgICAgZmxvYXQgaGVpZ2h0ID0gMC4wZjsKICAgICBib29sIHZh
bGlkID0gcGFyc2VOdW1iZXIoYywgZW5kLCB4KSAmJiBwYXJzZU51bWJlcihjLCBlbmQsIHkpICYm
IHBhcnNlTnVtYmVyKGMsIGVuZCwgd2lkdGgpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgaGVpZ2h0
LCBmYWxzZSk7CiAgICAgaWYgKCF2YWxpZGF0ZSkgewotICAgICAgICB2aWV3Qm94ID0gRmxvYXRS
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB2aWV3Qm94ID0gR3JhcGhpY3NSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKCF2YWxpZCkgewpAQCAtNzYsMTEgKzc2LDExIEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZVZpZXdCb3goRG9jdW0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZp
ZXdCb3ggPSBGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgdmlld0JveCA9IEdy
YXBoaWNzUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
QWZmaW5lVHJhbnNmb3JtIFNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShj
b25zdCBGbG9hdFJlY3QmIHZpZXdCb3hSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
JiBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQp
CitBZmZpbmVUcmFuc2Zvcm0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3Jt
KGNvbnN0IEdyYXBoaWNzUmVjdCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8mIHByZXNlcnZlQXNwZWN0UmF0aW8sIGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hl
aWdodCkKIHsKICAgICBpZiAoIXZpZXdCb3hSZWN0LndpZHRoKCkgfHwgIXZpZXdCb3hSZWN0Lmhl
aWdodCgpKQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC05MSw3ICs5MSw3
IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3gKIGJvb2wgU1ZHRml0
VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShEb2N1bWVudCogZG9jdW1lbnQsIEF0dHJp
YnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94
QXR0cikgewotICAgICAgICBGbG9hdFJlY3Qgdmlld0JveDsKKyAgICAgICAgR3JhcGhpY3NSZWN0
IHZpZXdCb3g7CiAgICAgICAgIGlmICghYXR0ci0+dmFsdWUoKS5pc051bGwoKSkKICAgICAgICAg
ICAgIHBhcnNlVmlld0JveChkb2N1bWVudCwgYXR0ci0+dmFsdWUoKSwgdmlld0JveCk7CiAgICAg
ICAgIHNldFZpZXdCb3hCYXNlVmFsdWUodmlld0JveCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjUgKzMwLDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEF0dHJpYnV0ZTsK
IGNsYXNzIERvY3VtZW50OwotY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3JhcGhpY3NSZWN0Owog
Y2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKIAogY2xhc3MgU1ZHRml0VG9WaWV3Qm94IHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TVkdGaXRUb1ZpZXdCb3goKSB7IH0KIAotICAgIGJvb2wg
cGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIq
IGVuZCwgRmxvYXRSZWN0JiB2aWV3Qm94LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7Ci0gICAgc3Rh
dGljIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEZsb2F0UmVj
dCYgdmlld0JveFJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mLCBmbG9hdCB2aWV3
V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpOworICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50
KiwgY29uc3QgVUNoYXIqJiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgR3JhcGhpY3NSZWN0JiB2
aWV3Qm94LCBib29sIHZhbGlkYXRlID0gdHJ1ZSk7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9y
bSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGNvbnN0IEdyYXBoaWNzUmVjdCYgdmlld0JveFJlY3Qs
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mLCBmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZp
ZXdIZWlnaHQpOwogCiAgICAgYm9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShEb2N1bWVudCosIEF0
dHJpYnV0ZSopOwogICAgIGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgdm9pZCBhZGRTdXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFt
ZT4mKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3Qm94QmFzZVZhbHVlKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld0JveEJhc2VWYWx1ZShjb25zdCBH
cmFwaGljc1JlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlQXNwZWN0UmF0
aW9CYXNlVmFsdWUoY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpID0gMDsKIAogcHJpdmF0
ZToKLSAgICBib29sIHBhcnNlVmlld0JveChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIEZsb2F0
UmVjdCYpOworICAgIGJvb2wgcGFyc2VWaWV3Qm94KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwg
R3JhcGhpY3NSZWN0Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogI2luY2x1ZGUgIlNWR0xpbmVFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyaWJ1
dGUuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1BhdGguaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgpAQCAtMTYwLDggKzE2MCw4IEBA
IHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoUGF0aCYgcGEKIHsKICAgICBBU1NFUlQo
cGF0aC5pc0VtcHR5KCkpOwogCi0gICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4MSgpLnZhbHVl
KHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7Ci0gICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2lu
dCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZhbHVlKHRoaXMpKSk7CisgICAgcGF0aC5tb3ZlVG8o
R3JhcGhpY3NQb2ludCh4MSgpLnZhbHVlKHRoaXMpLCB5MSgpLnZhbHVlKHRoaXMpKSk7CisgICAg
cGF0aC5hZGRMaW5lVG8oR3JhcGhpY3NQb2ludCh4MigpLnZhbHVlKHRoaXMpLCB5MigpLnZhbHVl
KHRoaXMpKSk7CiB9CiAKIGJvb2wgU1ZHTGluZUVsZW1lbnQ6OnNlbGZIYXNSZWxhdGl2ZUxlbmd0
aHMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRl
ICJMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUxpbmVhckdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC0x
OTksMTUgKzE5OSwxNSBAQCBib29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y29sbGVjdEdy
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpj
YWxjdWxhdGVTdGFydEVuZFBvaW50cyhjb25zdCBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmIGF0
dHJpYnV0ZXMsIEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZsb2F0UG9pbnQmIGVuZFBvaW50KQor
dm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKGNv
bnN0IExpbmVhckdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywgR3JhcGhpY3NQb2ludCYg
c3RhcnRQb2ludCwgR3JhcGhpY3NQb2ludCYgZW5kUG9pbnQpCiB7CiAgICAgLy8gRGV0ZXJtaW5l
IGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKICAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0Jv
eE1vZGUoKSkgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngx
KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlQXNQZXJjZW50YWdl
KCkpOwotICAgICAgICBlbmRQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVl
QXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAg
ICAgICAgc3RhcnRQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy54MSgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKKyAgICAg
ICAgZW5kUG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMueDIoKS52YWx1ZUFzUGVyY2Vu
dGFnZSgpLCBhdHRyaWJ1dGVzLnkyKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgc3RhcnRQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy54MSgpLnZhbHVl
KHRoaXMpLCBhdHRyaWJ1dGVzLnkxKCkudmFsdWUodGhpcykpOwotICAgICAgICBlbmRQb2ludCA9
IEZsb2F0UG9pbnQoYXR0cmlidXRlcy54MigpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLnkyKCku
dmFsdWUodGhpcykpOworICAgICAgICBzdGFydFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1
dGVzLngxKCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZSh0aGlzKSk7CisgICAg
ICAgIGVuZFBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWUodGhpcyks
IGF0dHJpYnV0ZXMueTIoKS52YWx1ZSh0aGlzKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAKICAgICBib29sIGNvbGxlY3RHcmFkaWVudEF0dHJpYnV0ZXMoTGluZWFy
R3JhZGllbnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBvaW50cyhj
b25zdCBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmLCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBG
bG9hdFBvaW50JiBlbmRQb2ludCk7CisgICAgdm9pZCBjYWxjdWxhdGVTdGFydEVuZFBvaW50cyhj
b25zdCBMaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMmLCBHcmFwaGljc1BvaW50JiBzdGFydFBvaW50
LCBHcmFwaGljc1BvaW50JiBlbmRQb2ludCk7CiAKIHByaXZhdGU6CiAgICAgU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgU1ZHRWxlbWVudCogU1ZHTG9jYXRhYmxlOjpmYXJ0aGVzdFZpZXdwbwogICAgIHJldHVybiBm
YXJ0aGVzdDsKIH0KIAotRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25zdCBTVkdF
bGVtZW50KiBlbGVtZW50LCBTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kp
CitHcmFwaGljc1JlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqIGVs
ZW1lbnQsIFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkKIHsKICAgICBB
U1NFUlQoZWxlbWVudCk7CiAgICAgaWYgKHN0eWxlVXBkYXRlU3RyYXRlZ3kgPT0gQWxsb3dTdHls
ZVVwZGF0ZSkKQEAgLTcyLDcgKzcyLDcgQEAgRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJv
eChjb25zdCBTVgogCiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQg
Z2V0QkJveCBmb3IgZGV0YWNoZWQgZWxlbWVudHMuCiAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJl
cigpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c1JlY3QoKTsKIAogICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpLT5vYmplY3RCb3VuZGlu
Z0JveCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJl
Y3Q7CitjbGFzcyBHcmFwaGljc1JlY3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogCiBjbGFzcyBTVkdM
b2NhdGFibGUgewpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFN0eWxlVXBk
YXRlU3RyYXRlZ3kgeyBBbGxvd1N0eWxlVXBkYXRlLCBEaXNhbGxvd1N0eWxlVXBkYXRlIH07CiAg
ICAgCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3QgZ2V0QkJveChTdHlsZVVwZGF0ZVN0
cmF0ZWd5KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFN0
eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBnZXRTY3JlZW5DVE0oU3R5bGVVcGRhdGVTdHJhdGVneSkgY29uc3QgPSAwOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBnZXRUcmFuc2Zvcm1Ub0VsZW1lbnQoU1ZHRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3Bl
KSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQogCi0gICAgc3RhdGljIEZsb2F0
UmVjdCBnZXRCQm94KGNvbnN0IFNWR0VsZW1lbnQqLCBTdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKKyAg
ICBzdGF0aWMgR3JhcGhpY3NSZWN0IGdldEJCb3goY29uc3QgU1ZHRWxlbWVudCosIFN0eWxlVXBk
YXRlU3RyYXRlZ3kpOwogICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gY29tcHV0ZUNUTShjb25z
dCBTVkdFbGVtZW50KiwgQ1RNU2NvcGUsIFN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3NSwxNiArMTc1LDE2IEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b28KICAgICAgICAgb2JqZWN0LT5zZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAotRmxvYXRSZWN0
IFNWR01hc2tFbGVtZW50OjptYXNrQm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiBvYmplY3RC
b3VuZGluZ0JveCkgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdNYXNrRWxlbWVudDo6bWFza0JvdW5k
aW5nQm94KGNvbnN0IEdyYXBoaWNzUmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0g
ICAgRmxvYXRSZWN0IG1hc2tCQm94OworICAgIEdyYXBoaWNzUmVjdCBtYXNrQkJveDsKICAgICBp
ZiAobWFza1VuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKQotICAgICAgICBtYXNrQkJveCA9IEZsb2F0UmVjdCh4KCkudmFsdWVBc1BlcmNlbnRh
Z2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCks
CisgICAgICAgIG1hc2tCQm94ID0gR3JhcGhpY3NSZWN0KHgoKS52YWx1ZUFzUGVyY2VudGFnZSgp
ICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5kaW5nQm94LngoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmpl
Y3RCb3VuZGluZ0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94LnkoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0
Qm91bmRpbmdCb3gud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAg
ICBlbHNlCi0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1ZSh0aGlzKSwKKyAg
ICAgICAgbWFza0JCb3ggPSBHcmFwaGljc1JlY3QoeCgpLnZhbHVlKHRoaXMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB5KCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoKCkudmFsdWUodGhpcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdN
YXNrRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxl
bWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFNWR01hc2tFbGVt
ZW50IDogcHVibGljIFNWR1N0eWxlZEwKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
VkdNYXNrRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
Ci0gICAgRmxvYXRSZWN0IG1hc2tCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsK
KyAgICBHcmFwaGljc1JlY3QgbWFza0JvdW5kaW5nQm94KGNvbnN0IEdyYXBoaWNzUmVjdCYpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGll
cy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJT
VkdQYXJzZXJVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHUG9p
bnRMaXN0LmgiCiAKICNpbmNsdWRlIDxsaW1pdHM+CkBAIC0xODksNyArMTg5LDcgQEAgYm9vbCBw
YXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cgogICAgIHJldHVybiBjdXIgPT0gZW5k
OwogfQogCi1ib29sIHBhcnNlUmVjdChjb25zdCBTdHJpbmcmIHN0cmluZywgRmxvYXRSZWN0JiBy
ZWN0KQorYm9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICBjb25zdCBVQ2hhciogcHRyID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAg
ICBjb25zdCBVQ2hhciogZW5kID0gcHRyICsgc3RyaW5nLmxlbmd0aCgpOwpAQCAtMjAwLDcgKzIw
MCw3IEBAIGJvb2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGbG8KICAgICBmbG9h
dCB3aWR0aCA9IDA7CiAgICAgZmxvYXQgaGVpZ2h0ID0gMDsKICAgICBib29sIHZhbGlkID0gcGFy
c2VOdW1iZXIocHRyLCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCB5KSAmJiBwYXJz
ZU51bWJlcihwdHIsIGVuZCwgd2lkdGgpICYmIHBhcnNlTnVtYmVyKHB0ciwgZW5kLCBoZWlnaHQs
IGZhbHNlKTsKLSAgICByZWN0ID0gRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IHJlY3QgPSBHcmFwaGljc1JlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgcmV0dXJuIHZh
bGlkOwogfQogCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBwb2ludHNMaXN0RnJvbVNWR0RhdGEo
U1ZHUG9pbnRMaXN0JgogICAgICAgICB9CiAgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhjdXIs
IGVuZCk7CiAKLSAgICAgICAgcG9pbnRzTGlzdC5hcHBlbmQoRmxvYXRQb2ludCh4UG9zLCB5UG9z
KSk7CisgICAgICAgIHBvaW50c0xpc3QuYXBwZW5kKEdyYXBoaWNzUG9pbnQoeFBvcywgeVBvcykp
OwogICAgIH0KICAgICByZXR1cm4gY3VyID09IGVuZCAmJiAhZGVsaW1QYXJzZWQ7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTQgKzMwLDE0IEBAIHR5cGVkZWYgVmVjdG9yPFVuaWNvZGVSYW5nZT4gVW5pY29k
ZVJhbmcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBH
cmFwaGljc1JlY3Q7CiBjbGFzcyBTVkdQb2ludExpc3Q7CiAKIGJvb2wgcGFyc2VOdW1iZXIoY29u
c3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0JiBudW1iZXIsIGJvb2wgc2tp
cCA9IHRydWUpOwogYm9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiwgZmxv
YXQmIG51bWJlciwgYm9vbCBza2lwID0gdHJ1ZSk7CiBib29sIHBhcnNlTnVtYmVyT3B0aW9uYWxO
dW1iZXIoY29uc3QgU3RyaW5nJiBzLCBmbG9hdCYgaCwgZmxvYXQmIHYpOwogYm9vbCBwYXJzZUFy
Y0ZsYWcoY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wmIGZsYWcpOwot
Ym9vbCBwYXJzZVJlY3QoY29uc3QgU3RyaW5nJiwgRmxvYXRSZWN0Jik7Citib29sIHBhcnNlUmVj
dChjb25zdCBTdHJpbmcmLCBHcmFwaGljc1JlY3QmKTsKIAogLy8gU1ZHIGFsbG93cyBzZXZlcmFs
IGRpZmZlcmVudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnM6CiAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9TVkcvcGF0aHMuaHRtbCNQYXRoRGF0YUJORgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhCbGVuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJsZW5kZXIuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoQmxlbmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAgU1ZHUGF0aEJs
ZW5kZXI6OlNWR1BhdGhCbGVuZGVyKCkKIH0KIAogLy8gSGVscGVyIGZ1bmN0aW9ucwotc3RhdGlj
IGlubGluZSBGbG9hdFBvaW50IGJsZW5kRmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBhLCBj
b25zdCBGbG9hdFBvaW50JiBiLCBmbG9hdCBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgR3JhcGhp
Y3NQb2ludCBibGVuZEdyYXBoaWNzUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgYSwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgYiwgZmxvYXQgcHJvZ3Jlc3MpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UG9p
bnQoKGIueCgpIC0gYS54KCkpICogcHJvZ3Jlc3MgKyBhLngoKSwgKGIueSgpIC0gYS55KCkpICog
cHJvZ3Jlc3MgKyBhLnkoKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKGIueCgpIC0gYS54
KCkpICogcHJvZ3Jlc3MgKyBhLngoKSwgKGIueSgpIC0gYS55KCkpICogcHJvZ3Jlc3MgKyBhLnko
KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRBbmltYXRlZEZsb2F0KGZsb2F0IGZy
b20sIGZsb2F0IHRvLCBmbG9hdCBwcm9ncmVzcykKQEAgLTY0LDI1ICs2NCwyNSBAQCBmbG9hdCBT
VkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZERpbWVuCiAgICAgcmV0dXJuIG1fdG9Nb2RlID09
IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBhbmltVmFsdWUgKyBjdXJyZW50VmFsdWUgOiBhbmltVmFs
dWUgLSBjdXJyZW50VmFsdWU7CiB9CiAKLUZsb2F0UG9pbnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5k
QW5pbWF0ZWRGbG9hdFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGZyb21Qb2ludCwgY29uc3QgRmxv
YXRQb2ludCYgdG9Qb2ludCkKK0dyYXBoaWNzUG9pbnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5p
bWF0ZWRHcmFwaGljc1BvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQmIGZyb21Qb2ludCwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgdG9Qb2ludCkKIHsKICAgICBpZiAobV9mcm9tTW9kZSA9PSBtX3RvTW9k
ZSkKLSAgICAgICAgcmV0dXJuIGJsZW5kRmxvYXRQb2ludChmcm9tUG9pbnQsIHRvUG9pbnQsIG1f
cHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gYmxlbmRHcmFwaGljc1BvaW50KGZyb21Qb2ludCwg
dG9Qb2ludCwgbV9wcm9ncmVzcyk7CiAKICAgICAvLyBUcmFuc2Zvcm0gdG9Qb2ludCB0byB0aGUg
Y29vcmRpbmF0ZSBtb2RlIG9mIGZyb21Qb2ludAotICAgIEZsb2F0UG9pbnQgYW5pbWF0ZWRQb2lu
dCA9IHRvUG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBhbmltYXRlZFBvaW50ID0gdG9Qb2ludDsK
ICAgICBpZiAobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBhbmlt
YXRlZFBvaW50ICs9IG1fdG9DdXJyZW50UG9pbnQ7CiAgICAgZWxzZQogICAgICAgICBhbmltYXRl
ZFBvaW50Lm1vdmUoLW1fdG9DdXJyZW50UG9pbnQueCgpLCAtbV90b0N1cnJlbnRQb2ludC55KCkp
OwogCi0gICAgYW5pbWF0ZWRQb2ludCA9IGJsZW5kRmxvYXRQb2ludChmcm9tUG9pbnQsIGFuaW1h
dGVkUG9pbnQsIG1fcHJvZ3Jlc3MpOworICAgIGFuaW1hdGVkUG9pbnQgPSBibGVuZEdyYXBoaWNz
UG9pbnQoZnJvbVBvaW50LCBhbmltYXRlZFBvaW50LCBtX3Byb2dyZXNzKTsKIAogICAgIGlmICht
X2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuIGFuaW1hdGVkUG9pbnQ7
CiAKICAgICAvLyBUcmFuc2Zvcm0gdGhlIGFuaW1hdGVkIHBvaW50IHRvIHRoZSBjb29yZGluYXRl
IG1vZGUsIG5lZWRlZCBmb3IgdGhlIGN1cnJlbnQgcHJvZ3Jlc3MuCi0gICAgRmxvYXRQb2ludCBj
dXJyZW50UG9pbnQgPSBibGVuZEZsb2F0UG9pbnQobV9mcm9tQ3VycmVudFBvaW50LCBtX3RvQ3Vy
cmVudFBvaW50LCBtX3Byb2dyZXNzKTsKKyAgICBHcmFwaGljc1BvaW50IGN1cnJlbnRQb2ludCA9
IGJsZW5kR3JhcGhpY3NQb2ludChtX2Zyb21DdXJyZW50UG9pbnQsIG1fdG9DdXJyZW50UG9pbnQs
IG1fcHJvZ3Jlc3MpOwogICAgIGlmIChtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQog
ICAgICAgICByZXR1cm4gYW5pbWF0ZWRQb2ludCArIGN1cnJlbnRQb2ludDsKIApAQCAtOTIsMTMg
KzkyLDEzIEBAIEZsb2F0UG9pbnQgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWQKIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KCkKIHsKLSAgICBGbG9hdFBvaW50
IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3Jh
cGhpY3NQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1RhcmdldFBv
aW50OwogICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZU1vdmVUb1NlZ21lbnQoZnJvbVRhcmdl
dFBvaW50KQogICAgICAgICB8fCAhbV90b1NvdXJjZS0+cGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFy
Z2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLT5tb3Zl
VG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50
KSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9N
b2RlKTsKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQo
ZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgZmFsc2UsIG1faXNJbkZpcnN0SGFsZk9m
QW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9p
bnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQg
OiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQ
b2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1RhcmdldFBvaW50IDog
bV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MDYsMTMgKzEwNiwxMyBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZE1vdmVUb1NlZ21lbnQo
CiAKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxv
YXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCB0b1RhcmdldFBvaW50Owor
ICAgIEdyYXBoaWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdG9U
YXJnZXRQb2ludDsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VMaW5lVG9TZWdtZW50KGZy
b21UYXJnZXRQb2ludCkKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UtPnBhcnNlTGluZVRvU2VnbWVu
dCh0b1RhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1l
ci0+bGluZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJn
ZXRQb2ludCksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9N
b2RlKTsKKyAgICBtX2NvbnN1bWVyLT5saW5lVG8oYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQo
ZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRp
b24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1f
ZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJv
bUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0g
bV90b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3Vy
cmVudFBvaW50ICsgdG9UYXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0OCwxOSAr
MTQ4LDE5IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWwKIAogYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KCkKIHsKLSAgICBGbG9h
dFBvaW50IGZyb21UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IGZyb21Qb2ludDE7Ci0gICAg
RmxvYXRQb2ludCBmcm9tUG9pbnQyOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAg
ICBGbG9hdFBvaW50IHRvUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdG9Qb2ludDI7CisgICAgR3Jh
cGhpY3NQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBmcm9tUG9pbnQx
OworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFy
Z2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1BvaW50MTsKKyAgICBHcmFwaGljc1BvaW50
IHRvUG9pbnQyOwogICAgIGlmICghbV9mcm9tU291cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1NlZ21l
bnQoZnJvbVBvaW50MSwgZnJvbVBvaW50MiwgZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAh
bV90b1NvdXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50Miwg
dG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50
MSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50
KGZyb21Qb2ludDIsIHRvUG9pbnQyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKKyAg
ICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJv
bVBvaW50MSwgdG9Qb2ludDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEFu
aW1hdGVkR3JhcGhpY3NQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50MiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21UYXJnZXRQb2lu
dCwgdG9UYXJnZXRQb2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNJbkZp
cnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21D
dXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFy
Z2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAgbV90
b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1Rhcmdl
dFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CkBAIC0xNjksMTYgKzE2
OSwxNiBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlCiAKIGJvb2wg
U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAg
RmxvYXRQb2ludCBmcm9tVGFyZ2V0UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQyOwot
ICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQyOwor
ICAgIEdyYXBoaWNzUG9pbnQgZnJvbVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZnJv
bVBvaW50MjsKKyAgICBHcmFwaGljc1BvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQ
b2ludCB0b1BvaW50MjsKICAgICBpZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvQ3ViaWNT
bW9vdGhTZWdtZW50KGZyb21Qb2ludDIsIGZyb21UYXJnZXRQb2ludCkKICAgICAgICAgfHwgIW1f
dG9Tb3VyY2UtPnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCh0b1BvaW50MiwgdG9UYXJn
ZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXItPmN1cnZl
VG9DdWJpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0b1BvaW50
MiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9h
dFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisgICAgbV9jb25zdW1lci0+
Y3VydmVUb0N1YmljU21vb3RoKGJsZW5kQW5pbWF0ZWRHcmFwaGljc1BvaW50KGZyb21Qb2ludDIs
IHRvUG9pbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmlt
YXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJv
bU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1
cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90
b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVu
dFBvaW50ICsgdG9UYXJnZXRQb2ludDsKQEAgLTE4NywxNiArMTg3LDE2IEBAIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU20KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBmcm9tVGFyZ2V0
UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBmcm9tUG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdG9UYXJn
ZXRQb2ludDsKLSAgICBGbG9hdFBvaW50IHRvUG9pbnQxOworICAgIEdyYXBoaWNzUG9pbnQgZnJv
bVRhcmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgZnJvbVBvaW50MTsKKyAgICBHcmFwaGlj
c1BvaW50IHRvVGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0b1BvaW50MTsKICAgICBp
ZiAoIW1fZnJvbVNvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChmcm9tUG9pbnQx
LCBmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KHRvUG9pbnQxLCB0b1RhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVk
RmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFy
Z2V0UG9pbnQpLAorICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWMoYmxlbmRBbmltYXRl
ZEdyYXBoaWNzUG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdldFBvaW50
LCB0b1RhcmdldFBvaW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zy
b21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9t
VGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CiAgICAg
bV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1Rh
cmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7CkBAIC0yMDUsMTMg
KzIwNSwxMyBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFkcmF0CiAKIGJv
b2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoKQog
ewotICAgIEZsb2F0UG9pbnQgZnJvbVRhcmdldFBvaW50OwotICAgIEZsb2F0UG9pbnQgdG9UYXJn
ZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKKyAgICBHcmFwaGlj
c1BvaW50IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoZnJvbVRhcmdldFBvaW50KQogICAgICAgICB8fCAhbV90
b1NvdXJjZS0+cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCh0b1RhcmdldFBvaW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRy
YXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFy
Z2V0UG9pbnQpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3Rv
TW9kZSk7CisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1h
dGVkR3JhcGhpY3NQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQpLCBtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9t
Q3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRh
cmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1f
dG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJn
ZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwogICAgIHJldHVybiB0
cnVlOwpAQCAtMjI0LDEzICsyMjQsMTMgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNU
b1NlZ21lbnQoKQogICAgIGZsb2F0IGZyb21BbmdsZTsKICAgICBib29sIGZyb21MYXJnZUFyYzsK
ICAgICBib29sIGZyb21Td2VlcDsKLSAgICBGbG9hdFBvaW50IGZyb21UYXJnZXRQb2ludDsKKyAg
ICBHcmFwaGljc1BvaW50IGZyb21UYXJnZXRQb2ludDsKICAgICBmbG9hdCB0b1J4OwogICAgIGZs
b2F0IHRvUnk7CiAgICAgZmxvYXQgdG9BbmdsZTsKICAgICBib29sIHRvTGFyZ2VBcmM7CiAgICAg
Ym9vbCB0b1N3ZWVwOwotICAgIEZsb2F0UG9pbnQgdG9UYXJnZXRQb2ludDsKKyAgICBHcmFwaGlj
c1BvaW50IHRvVGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX2Zyb21Tb3VyY2UtPnBhcnNlQXJjVG9T
ZWdtZW50KGZyb21SeCwgZnJvbVJ5LCBmcm9tQW5nbGUsIGZyb21MYXJnZUFyYywgZnJvbVN3ZWVw
LCBmcm9tVGFyZ2V0UG9pbnQpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLT5wYXJzZUFyY1RvU2Vn
bWVudCh0b1J4LCB0b1J5LCB0b0FuZ2xlLCB0b0xhcmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBv
aW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQwLDcgKzI0MCw3IEBAIGJvb2wgU1ZH
UGF0aEJsZW5kZXI6OmJsZW5kQXJjVG9TZWdtZW50KCkKICAgICAgICAgICAgICAgICAgICAgICBi
bGVuZEFuaW1hdGVkRmxvYXQoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBtX3Byb2dyZXNzKSwKICAgICAg
ICAgICAgICAgICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21MYXJnZUFy
YyA6IHRvTGFyZ2VBcmMsCiAgICAgICAgICAgICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZB
bmltYXRpb24gPyBmcm9tU3dlZXAgOiB0b1N3ZWVwLAotICAgICAgICAgICAgICAgICAgICAgIGJs
ZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCksCisg
ICAgICAgICAgICAgICAgICAgICAgYmxlbmRBbmltYXRlZEdyYXBoaWNzUG9pbnQoZnJvbVRhcmdl
dFBvaW50LCB0b1RhcmdldFBvaW50KSwKICAgICAgICAgICAgICAgICAgICAgICBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3Vy
cmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdl
dFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9D
dXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQ
b2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwpAQCAtMzY1LDggKzM2NSw4
IEBAIHZvaWQgU1ZHUGF0aEJsZW5kZXI6OmNsZWFudXAoKQogICAgIG1fdG9Tb3VyY2UgPSAwOwog
ICAgIG1fZnJvbVNvdXJjZSA9IDA7CiAgICAgbV9jb25zdW1lciA9IDA7Ci0gICAgbV9mcm9tQ3Vy
cmVudFBvaW50ID0gRmxvYXRQb2ludCgpOwotICAgIG1fdG9DdXJyZW50UG9pbnQgPSBGbG9hdFBv
aW50KCk7CisgICAgbV9mcm9tQ3VycmVudFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1f
dG9DdXJyZW50UG9pbnQgPSBHcmFwaGljc1BvaW50KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQmxlbmRlci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQmxlbmRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTQgQEAg
cHJpdmF0ZToKICAgICBib29sIGJsZW5kQXJjVG9TZWdtZW50KCk7CiAKICAgICBmbG9hdCBibGVu
ZEFuaW1hdGVkRGltZW5zb25hbEZsb2F0KGZsb2F0LCBmbG9hdCwgRmxvYXRCbGVuZE1vZGUpOwot
ICAgIEZsb2F0UG9pbnQgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
ZnJvbSwgY29uc3QgRmxvYXRQb2ludCYgdG8pOworICAgIEdyYXBoaWNzUG9pbnQgYmxlbmRBbmlt
YXRlZEdyYXBoaWNzUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgZnJvbSwgY29uc3QgR3JhcGhp
Y3NQb2ludCYgdG8pOwogCiAgICAgU1ZHUGF0aFNvdXJjZSogbV9mcm9tU291cmNlOwogICAgIFNW
R1BhdGhTb3VyY2UqIG1fdG9Tb3VyY2U7CiAgICAgU1ZHUGF0aENvbnN1bWVyKiBtX2NvbnN1bWVy
OwogCi0gICAgRmxvYXRQb2ludCBtX2Zyb21DdXJyZW50UG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBt
X3RvQ3VycmVudFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9mcm9tQ3VycmVudFBvaW50Owor
ICAgIEdyYXBoaWNzUG9pbnQgbV90b0N1cnJlbnRQb2ludDsKICAgICAKICAgICBQYXRoQ29vcmRp
bmF0ZU1vZGUgbV9mcm9tTW9kZTsKICAgICBQYXRoQ29vcmRpbmF0ZU1vZGUgbV90b01vZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQCBTVkdQYXRoQnVpbGRlcjo6U1ZHUGF0aEJ1aWxkZXIoKQogewogfQog
Ci12b2lkIFNWR1BhdGhCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9p
bnQsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aEJ1
aWxkZXI6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgYm9vbCBjbG9z
ZWQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGgpOwogICAg
IG1fY3VycmVudCA9IG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRhcmdldFBvaW50IDog
bV9jdXJyZW50ICsgdGFyZ2V0UG9pbnQ7CkBAIC00MiwxNCArNDIsMTQgQEAgdm9pZCBTVkdQYXRo
QnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0UAogICAgIG1fcGF0aC0+bW92ZVRvKG1fY3VycmVu
dCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ1aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCdWlsZGVy
OjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRl
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGgpOwogICAgIG1fY3VycmVudCA9IG1vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRhcmdldFBvaW50IDogbV9jdXJyZW50ICsgdGFyZ2V0
UG9pbnQ7CiAgICAgbV9wYXRoLT5hZGRMaW5lVG8obV9jdXJyZW50KTsKIH0KIAotdm9pZCBTVkdQ
YXRoQnVpbGRlcjo6Y3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENv
b3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
IHsKICAgICBBU1NFUlQobV9wYXRoKTsKICAgICBpZiAobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBTVkdQYXRoQnVpbGRlcl9oCiAKICNpZiBFTkFC
TEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50
LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogCkBA
IC00MywyMSArNDMsMjEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpIHsg
bV9wYXRoID0gMDsgfQogCiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6
ZWRQYXJzaW5nIG1vZGVzLgotICAgIHZpcnR1YWwgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBs
aW5lVG8oY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVh
bCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9p
ZCBtb3ZlVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIGJvb2wgY2xvc2VkLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYsIFBh
dGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBH
cmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVBhdGgoKTsKIAog
ICAgIC8vIE9ubHkgdXNlZCBpbiBVbmFsdGVyZWRQYXJzaW5nIG1vZGUuCiAgICAgdmlydHVhbCB2
b2lkIGxpbmVUb0hvcml6b250YWwoZmxvYXQsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwg
UGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2lu
dCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50
JiwgY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdy
YXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0
aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQs
IGZsb2F0LCBib29sLCBib29sLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVN
b2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICBQYXRoKiBtX3BhdGg7Ci0gICAg
RmxvYXRQb2ludCBtX2N1cnJlbnQ7CisgICAgR3JhcGhpY3NQb2ludCBtX2N1cnJlbnQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTggKzM0LDE4IEBAIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6U1ZHUGF0aEJ5dGVT
dHIKIHsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6Om1vdmVUbyhjb25zdCBG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2
b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
IHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NF
UlQobV9ieXRlU3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVD
b29yZGluYXRlcyA/ICBQYXRoU2VnTW92ZVRvUmVsIDogUGF0aFNlZ01vdmVUb0Ficyk7Ci0gICAg
d3JpdGVGbG9hdFBvaW50KHRhcmdldFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFy
Z2V0UG9pbnQpOwogfQogCi12b2lkIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6bGluZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3Zv
aWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYg
dGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5
dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5h
dGVzID8gUGF0aFNlZ0xpbmVUb1JlbCA6IFBhdGhTZWdMaW5lVG9BYnMpOwotICAgIHdyaXRlRmxv
YXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50
KTsKIH0KIAogdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb0hvcml6b250YWwo
ZmxvYXQgeCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCkBAIC02MiwzOSArNjIsMzkgQEAgdm9p
ZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmxpbmVUb1ZlcgogICAgIHdyaXRlRmxvYXQoeSk7
CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0
aEJ5dGVTdHJlYW1CdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQobV9ieXRl
U3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cyA/IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWwgOiBQYXRoU2VnQ3VydmVUb0N1YmljQWJzKTsKLSAg
ICB3cml0ZUZsb2F0UG9pbnQocG9pbnQxKTsKLSAgICB3cml0ZUZsb2F0UG9pbnQocG9pbnQyKTsK
LSAgICB3cml0ZUZsb2F0UG9pbnQodGFyZ2V0UG9pbnQpOworICAgIHdyaXRlR3JhcGhpY3NQb2lu
dChwb2ludDEpOworICAgIHdyaXRlR3JhcGhpY3NQb2ludChwb2ludDIpOworICAgIHdyaXRlR3Jh
cGhpY3NQb2ludCh0YXJnZXRQb2ludCk7CiB9CiAKLXZvaWQgU1ZHUGF0aEJ5dGVTdHJlYW1CdWls
ZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNz
UG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRl
U2VnbWVudFR5cGUobW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9D
dWJpY1Ntb290aFJlbCA6IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMpOwotICAgIHdyaXRl
RmxvYXRQb2ludChwb2ludDIpOwotICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7Cisg
ICAgd3JpdGVHcmFwaGljc1BvaW50KHBvaW50Mik7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRh
cmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiB0YXJn
ZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhCeXRlU3RyZWFt
QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
IHsKICAgICBBU1NFUlQobV9ieXRlU3RyZWFtKTsKICAgICB3cml0ZVNlZ21lbnRUeXBlKG1vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcyA/IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGljUmVsIDogUGF0
aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnMpOwotICAgIHdyaXRlRmxvYXRQb2ludChwb2ludDEpOwot
ICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50
KHBvaW50MSk7CisgICAgd3JpdGVHcmFwaGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0KIAotdm9p
ZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3Qg
RmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBT
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3Jh
cGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAg
IEFTU0VSVChtX2J5dGVTdHJlYW0pOwogICAgIHdyaXRlU2VnbWVudFR5cGUobW9kZSA9PSBSZWxh
dGl2ZUNvb3JkaW5hdGVzID8gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWwgOiBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1Ntb290aEFicyk7Ci0gICAgd3JpdGVGbG9hdFBvaW50KHRhcmdl
dFBvaW50KTsKKyAgICB3cml0ZUdyYXBoaWNzUG9pbnQodGFyZ2V0UG9pbnQpOwogfQogCi12b2lk
IFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9h
dCBhbmdsZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhC
eXRlU3RyZWFtQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwg
Ym9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0
YXJnZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKG1fYnl0
ZVN0cmVhbSk7CiAgICAgd3JpdGVTZWdtZW50VHlwZShtb2RlID09IFJlbGF0aXZlQ29vcmRpbmF0
ZXMgPyBQYXRoU2VnQXJjUmVsIDogUGF0aFNlZ0FyY0Ficyk7CkBAIC0xMDMsNyArMTAzLDcgQEAg
dm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXI6OmFyY1RvKGZsbwogICAgIHdyaXRlRmxvYXQo
YW5nbGUpOwogICAgIHdyaXRlRmxhZyhsYXJnZUFyY0ZsYWcpOwogICAgIHdyaXRlRmxhZyhzd2Vl
cEZsYWcpOwotICAgIHdyaXRlRmxvYXRQb2ludCh0YXJnZXRQb2ludCk7CisgICAgd3JpdGVHcmFw
aGljc1BvaW50KHRhcmdldFBvaW50KTsKIH0KIAogdm9pZCBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxk
ZXI6OmNsb3NlUGF0aCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJl
YW1CdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsOCBA
QAogI2RlZmluZSBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXJfaAogCiAjaWYgRU5BQkxFKFNWRykK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3VtZXIu
aCIKQEAgLTQxLDE4ICs0MiwxOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVw
KCkgeyBtX2J5dGVTdHJlYW0gPSAwOyB9CiAKICAgICAvLyBVc2VkIGluIFVuYWx0ZXJlZFBhcnNp
bmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCi0gICAgdmlydHVhbCB2b2lkIG1vdmVUbyhjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAg
dmlydHVhbCB2b2lkIG1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgYm9vbCBjbG9zZWQsIFBh
dGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBHcmFwaGlj
c1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1
YmljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
UGF0aCgpOwogCiAgICAgLy8gT25seSB1c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4KICAg
ICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2Rl
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvVmVydGljYWwoZmxvYXQsIFBhdGhDb29yZGluYXRl
TW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVh
bCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJh
dGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZp
cnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywg
Ym9vbCBzd2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGlj
c1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1
YWRyYXRpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCBsYXJnZUFy
Y0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVUeXBlPgogICAgIHZvaWQgd3Jp
dGVUeXBlKGNvbnN0IEJ5dGVUeXBlJiB0eXBlKQpAQCAtNzYsMTAgKzc3LDEwIEBAIHByaXZhdGU6
CiAgICAgICAgIHdyaXRlVHlwZShkYXRhKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlRmxvYXRQ
b2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICB2b2lkIHdyaXRlR3JhcGhpY3NQb2lu
dChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCkKICAgICB7Ci0gICAgICAgIHdyaXRlRmxvYXQo
cG9pbnQueCgpKTsKLSAgICAgICAgd3JpdGVGbG9hdChwb2ludC55KCkpOworICAgICAgICB3cml0
ZUZsb2F0KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocG9pbnQueCgpKSk7CisgICAgICAgIHdyaXRl
RmxvYXQobmFycm93UHJlY2lzaW9uVG9GbG9hdChwb2ludC55KCkpKTsKICAgICB9CiAKICAgICB2
b2lkIHdyaXRlU2VnbWVudFR5cGUodW5zaWduZWQgc2hvcnQgdmFsdWUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAJKHJldmlzaW9uIDkx
MDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtU291cmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsMTUgKzQ4LDE1IEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlOjoKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1R5cGU+
KHJlYWRTVkdTZWdtZW50VHlwZSgpKTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJj
ZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmIHRh
cmdldFBvaW50KQogewotICAgIHRhcmdldFBvaW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICB0
YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBv
aW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlTGlu
ZVRvU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAgICB0YXJnZXRQb2lu
dCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkR3JhcGhpY3NQb2lu
dCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC03Miw0MiArNzIsNDIgQEAgYm9vbCBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VMaW5lVAogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxv
YXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0UG9pbnQmIHRhcmdldFBv
aW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdt
ZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGlj
c1BvaW50JiB0YXJnZXRQb2ludCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwot
ICAgIHBvaW50MiA9IHJlYWRGbG9hdFBvaW50KCk7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxv
YXRQb2ludCgpOworICAgIHBvaW50MSA9IHJlYWRHcmFwaGljc1BvaW50KCk7CisgICAgcG9pbnQy
ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1Bv
aW50KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFy
c2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgcG9pbnQyID0gcmVhZEZsb2F0UG9pbnQoKTsK
LSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7CisgICAgcG9pbnQyID0gcmVhZEdy
YXBoaWNzUG9pbnQoKTsKKyAgICB0YXJnZXRQb2ludCA9IHJlYWRHcmFwaGljc1BvaW50KCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNl
Q3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0
YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1
YWRyYXRpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCkKIHsKLSAgICBwb2ludDEgPSByZWFkRmxvYXRQb2ludCgpOwotICAgIHRhcmdldFBv
aW50ID0gcmVhZEZsb2F0UG9pbnQoKTsKKyAgICBwb2ludDEgPSByZWFkR3JhcGhpY3NQb2ludCgp
OworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5
dGVTdHJlYW1Tb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhp
Y3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgdGFyZ2V0UG9pbnQgPSByZWFkRmxvYXRQb2lu
dCgpOworICAgIHRhcmdldFBvaW50ID0gcmVhZEdyYXBoaWNzUG9pbnQoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6cGFyc2VBcmNUb1NlZ21l
bnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmdsZSwgYm9vbCYgbGFyZ2VBcmMsIGJv
b2wmIHN3ZWVwLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2U6OnBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYg
YW5nbGUsIGJvb2wmIGxhcmdlQXJjLCBib29sJiBzd2VlcCwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQpCiB7CiAgICAgcnggPSByZWFkRmxvYXQoKTsKICAgICByeSA9IHJlYWRGbG9hdCgpOwog
ICAgIGFuZ2xlID0gcmVhZEZsb2F0KCk7CiAgICAgbGFyZ2VBcmMgPSByZWFkRmxhZygpOwogICAg
IHN3ZWVwID0gcmVhZEZsYWcoKTsKLSAgICB0YXJnZXRQb2ludCA9IHJlYWRGbG9hdFBvaW50KCk7
CisgICAgdGFyZ2V0UG9pbnQgPSByZWFkR3JhcGhpY3NQb2ludCgpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1Tb3Vy
Y2UuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBT
VkdQYXRoQnl0ZVN0cmVhbVNvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0
aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KQEAgLTQzLDE1ICs0MywxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBT
VkdQYXRoU2VnVHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VN
b3ZlVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5l
VG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5lVG9I
b3Jpem9udGFsU2VnbWVudChmbG9hdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYXJzZUxpbmVUb1Zl
cnRpY2FsU2VnbWVudChmbG9hdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJp
Y1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudChGbG9hdFBvaW50JiwgRmxv
YXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUFyY1RvU2VnbWVudChmbG9hdCYsIGZsb2F0JiwgZmxvYXQmLCBib29sJiwgYm9vbCYsIEZs
b2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KEdy
YXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdy
YXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9v
bCYsIGJvb2wmLCBHcmFwaGljc1BvaW50Jik7CiAKICNpZiBDT01QSUxFUihNU1ZDKQogI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCkBAIC04NiwxMSArODYsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHJlYWRUeXBlPHVuc2lnbmVkIHNob3J0LCBVbnNpZ25lZFNob3J0Qnl0ZT4o
KTsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IHJlYWRGbG9hdFBvaW50KCkKKyAgICBHcmFwaGlj
c1BvaW50IHJlYWRHcmFwaGljc1BvaW50KCkKICAgICB7CiAgICAgICAgIGZsb2F0IHggPSByZWFk
VHlwZTxmbG9hdCwgRmxvYXRCeXRlPigpOwogICAgICAgICBmbG9hdCB5ID0gcmVhZFR5cGU8Zmxv
YXQsIEZsb2F0Qnl0ZT4oKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoeCwgeSk7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc1BvaW50KHgsIHkpOwogICAgIH0KIAogICAgIFNWR1BhdGhCeXRl
U3RyZWFtKiBtX3N0cmVhbTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQ29uc3Vt
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aENvbnN1bWVyLmgJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhDb25zdW1lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIFNWR1BhdGhDb25zdW1l
cl9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApAQCAtNTAsMTggKzUwLDE4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYW51cCgpID0gMDsKIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVk
UGFyaXNuZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5h
dGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQm
LCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCkgPSAwOwogCiAgICAgLy8gT25seSB1
c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4KICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9y
aXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGxpbmVUb1ZlcnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29v
cmRpbmF0ZU1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290
aChjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29s
IHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYs
IGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
dXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0
ZU1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXJjVG8oZmxvYXQsIGZsb2F0LCBmbG9hdCwg
Ym9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5TVkdQ
YXRoQ29uc3VtZXIoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw5ICs5Myw5IEBAIGZsb2F0IFNWR1BhdGhFbGVtZW50
OjpnZXRUb3RhbExlbmd0aCgpCiAgICAgcmV0dXJuIHRvdGFsTGVuZ3RoOwogfQogCi1GbG9hdFBv
aW50IFNWR1BhdGhFbGVtZW50OjpnZXRQb2ludEF0TGVuZ3RoKGZsb2F0IGxlbmd0aCkKK0dyYXBo
aWNzUG9pbnQgU1ZHUGF0aEVsZW1lbnQ6OmdldFBvaW50QXRMZW5ndGgoZmxvYXQgbGVuZ3RoKQog
ewotICAgIEZsb2F0UG9pbnQgcG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDsKICAgICBT
VkdQYXRoUGFyc2VyRmFjdG9yeTo6c2VsZigpLT5nZXRQb2ludEF0TGVuZ3RoT2ZTVkdQYXRoQnl0
ZVN0cmVhbShtX3BhdGhCeXRlU3RyZWFtLmdldCgpLCBsZW5ndGgsIHBvaW50KTsKICAgICByZXR1
cm4gcG9pbnQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U1ZHUGF0aEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
ICAgICAKICAgICBmbG9hdCBnZXRUb3RhbExlbmd0aCgpOwotICAgIEZsb2F0UG9pbnQgZ2V0UG9p
bnRBdExlbmd0aChmbG9hdCBkaXN0YW5jZSk7CisgICAgR3JhcGhpY3NQb2ludCBnZXRQb2ludEF0
TGVuZ3RoKGZsb2F0IGRpc3RhbmNlKTsKICAgICB1bnNpZ25lZCBsb25nIGdldFBhdGhTZWdBdExl
bmd0aChmbG9hdCBkaXN0YW5jZSk7CiAKICAgICBQYXNzUmVmUHRyPFNWR1BhdGhTZWdDbG9zZVBh
dGg+IGNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGgoU1ZHUGF0aFNlZ1JvbGUgcm9sZSA9IFBhdGhT
ZWdVbmRlZmluZWRSb2xlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgU1ZHUGF0aFBhcnNlcjo6cGFy
c2VDbG9zZVBhdGhTZWdtZW4KIAogYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21l
bnQoKQogewotICAgIEZsb2F0UG9pbnQgdGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCB0
YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZU1vdmVUb1NlZ21lbnQodGFyZ2V0
UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTY4LDcgKzY4LDcgQEAgYm9vbCBT
VkdQYXRoUGFyc2VyOjpwYXJzZU1vdmVUb1NlZ21lbnQoKQogCiBib29sIFNWR1BhdGhQYXJzZXI6
OnBhcnNlTGluZVRvU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAg
ICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3VyY2UtPnBhcnNlTGlu
ZVRvU2VnbWVudCh0YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTE5
LDkgKzExOSw5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9WZXJ0aWNhbFMKIAog
Ym9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoKQogewotICAgIEZs
b2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgcG9pbnQyOwotICAgIEZsb2F0UG9pbnQg
dGFyZ2V0UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAgR3JhcGhpY3NQb2lu
dCBwb2ludDI7CisgICAgR3JhcGhpY3NQb2ludCB0YXJnZXRQb2ludDsKICAgICBpZiAoIW1fc291
cmNlLT5wYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQocG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNDIsOCArMTQyLDggQEAgYm9vbCBTVkdQ
YXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1NlZwogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBh
cnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2ludCBwb2ludDI7
Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHBvaW50MjsK
KyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICghbV9zb3VyY2UtPnBhcnNl
Q3VydmVUb0N1YmljU21vb3RoU2VnbWVudChwb2ludDIsIHRhcmdldFBvaW50KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xNTQsNyArMTU0LDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpw
YXJzZUN1cnZlVG9DdWJpY1NtbwogICAgICAgICBtX2NvbnRyb2xQb2ludCA9IG1fY3VycmVudFBv
aW50OwogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7
Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CisgICAgICAgIEdy
YXBoaWNzUG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAgICAgICAgIHBvaW50MS5zY2Fs
ZSgyLCAyKTsKICAgICAgICAgcG9pbnQxLm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29u
dHJvbFBvaW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykgewpAQCAtMTczLDE2ICsxNzMsMTYgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9DdWJpY1NtbwogCiBib29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Nl
Z21lbnQoKQogewotICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgdGFyZ2V0
UG9pbnQ7CisgICAgR3JhcGhpY3NQb2ludCBwb2ludDE7CisgICAgR3JhcGhpY3NQb2ludCB0YXJn
ZXRQb2ludDsKICAgICBpZiAoIW1fc291cmNlLT5wYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50
KHBvaW50MSwgdGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
bV9wYXRoUGFyc2luZ01vZGUgPT0gTm9ybWFsaXplZFBhcnNpbmcpIHsKICAgICAgICAgbV9jb250
cm9sUG9pbnQgPSBwb2ludDE7Ci0gICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxID0gbV9jdXJyZW50
UG9pbnQ7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9pbnQxID0gbV9jdXJyZW50UG9pbnQ7CiAg
ICAgICAgIHBvaW50MS5tb3ZlKDIgKiBtX2NvbnRyb2xQb2ludC54KCksIDIgKiBtX2NvbnRyb2xQ
b2ludC55KCkpOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAy
ICogbV9jb250cm9sUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkgKyAyICogbV9jb250cm9sUG9p
bnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2ludDIodGFyZ2V0UG9pbnQueCgpICsg
MiAqIG1fY29udHJvbFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIG1fY29udHJvbFBv
aW50LnkoKSk7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRlcykgewog
ICAgICAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY3VycmVudFBvaW50LngoKSwgMiAqIG1fY3Vy
cmVudFBvaW50LnkoKSk7CiAgICAgICAgICAgICBwb2ludDIubW92ZSgzICogbV9jdXJyZW50UG9p
bnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCBib29s
IFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpCiAKIGJvb2wgU1ZHUGF0aFBhcnNl
cjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCgpCiB7Ci0gICAgRmxvYXRQb2lu
dCB0YXJnZXRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IHRhcmdldFBvaW50OwogICAgIGlmICgh
bV9zb3VyY2UtPnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQodGFyZ2V0UG9pbnQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxNCwxMSArMjE0LDExIEBAIGJvb2wgU1ZH
UGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGkKICAgICAgICAgbV9jb250cm9sUG9pbnQg
PSBtX2N1cnJlbnRQb2ludDsKIAogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxp
emVkUGFyc2luZykgewotICAgICAgICBGbG9hdFBvaW50IGN1YmljUG9pbnQgPSBtX2N1cnJlbnRQ
b2ludDsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBjdWJpY1BvaW50ID0gbV9jdXJyZW50UG9pbnQ7
CiAgICAgICAgIGN1YmljUG9pbnQuc2NhbGUoMiwgMik7CiAgICAgICAgIGN1YmljUG9pbnQubW92
ZSgtbV9jb250cm9sUG9pbnQueCgpLCAtbV9jb250cm9sUG9pbnQueSgpKTsKLSAgICAgICAgRmxv
YXRQb2ludCBwb2ludDEobV9jdXJyZW50UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCBt
X2N1cnJlbnRQb2ludC55KCkgKyAyICogY3ViaWNQb2ludC55KCkpOwotICAgICAgICBGbG9hdFBv
aW50IHBvaW50Mih0YXJnZXRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIHRhcmdldFBv
aW50LnkoKSArIDIgKiBjdWJpY1BvaW50LnkoKSk7CisgICAgICAgIEdyYXBoaWNzUG9pbnQgcG9p
bnQxKG1fY3VycmVudFBvaW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgbV9jdXJyZW50UG9p
bnQueSgpICsgMiAqIGN1YmljUG9pbnQueSgpKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBwb2lu
dDIodGFyZ2V0UG9pbnQueCgpICsgMiAqIGN1YmljUG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkg
KyAyICogY3ViaWNQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29v
cmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2ludDsKICAgICAg
ICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwpAQCAtMjQyLDcgKzI0Miw3IEBA
IGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQogICAgIGZsb2F0IGFuZ2xl
OwogICAgIGJvb2wgbGFyZ2VBcmM7CiAgICAgYm9vbCBzd2VlcDsKLSAgICBGbG9hdFBvaW50IHRh
cmdldFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgdGFyZ2V0UG9pbnQ7CiAgICAgaWYgKCFtX3Nv
dXJjZS0+cGFyc2VBcmNUb1NlZ21lbnQocngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0
YXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjYzLDcgKzI2Myw3IEBA
IGJvb2wgU1ZHUGF0aFBhcnNlcjo6cGFyc2VBcmNUb1NlZ21lbnQoKQogICAgIH0KIAogICAgIGlm
IChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewotICAgICAgICBGbG9h
dFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OworICAgICAgICBHcmFwaGljc1BvaW50IHBv
aW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBpZiAobV9tb2RlID09IFJlbGF0aXZlQ29v
cmRpbmF0ZXMpCiAgICAgICAgICAgICB0YXJnZXRQb2ludCArPSBtX2N1cnJlbnRQb2ludDsKICAg
ICAgICAgbV9jdXJyZW50UG9pbnQgPSB0YXJnZXRQb2ludDsKQEAgLTI4MCw5ICsyODAsOSBAQCBi
b29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlUGF0aERhdGFGcm9tU291CiAKICAgICBtX3BhdGhQYXJz
aW5nTW9kZSA9IHBhdGhQYXJzaW5nTW9kZTsKIAotICAgIG1fY29udHJvbFBvaW50ID0gRmxvYXRQ
b2ludCgpOwotICAgIG1fY3VycmVudFBvaW50ID0gRmxvYXRQb2ludCgpOwotICAgIG1fc3ViUGF0
aFBvaW50ID0gRmxvYXRQb2ludCgpOworICAgIG1fY29udHJvbFBvaW50ID0gR3JhcGhpY3NQb2lu
dCgpOworICAgIG1fY3VycmVudFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOworICAgIG1fc3ViUGF0
aFBvaW50ID0gR3JhcGhpY3NQb2ludCgpOwogICAgIG1fY2xvc2VQYXRoID0gdHJ1ZTsKIAogICAg
IC8vIFNraXAgYW55IGxlYWRpbmcgc3BhY2VzLgpAQCAtNDAxLDE1ICs0MDEsMTUgQEAgdm9pZCBT
VkdQYXRoUGFyc2VyOjpjbGVhbnVwKCkKIC8vIFRoaXMgd29ya3MgYnkgY29udmVydGluZyB0aGUg
U1ZHIGFyYyB0byAic2ltcGxlIiBiZXppZXJzLgogLy8gUGFydGx5IGFkYXB0ZWQgZnJvbSBOaWtv
J3MgY29kZSBpbiBrZGVsaWJzL2tkZWNvcmUvc3ZnaWNvbnMuCiAvLyBTZWUgYWxzbyBTVkcgaW1w
bGVtZW50YXRpb24gbm90ZXM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90ZS5odG1s
I0FyY0NvbnZlcnNpb25FbmRwb2ludFRvQ2VudGVyCi1ib29sIFNWR1BhdGhQYXJzZXI6OmRlY29t
cG9zZUFyY1RvQ3ViaWMoZmxvYXQgYW5nbGUsIGZsb2F0IHJ4LCBmbG9hdCByeSwgRmxvYXRQb2lu
dCYgcG9pbnQxLCBGbG9hdFBvaW50JiBwb2ludDIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3
ZWVwRmxhZykKK2Jvb2wgU1ZHUGF0aFBhcnNlcjo6ZGVjb21wb3NlQXJjVG9DdWJpYyhmbG9hdCBh
bmdsZSwgZmxvYXQgcngsIGZsb2F0IHJ5LCBHcmFwaGljc1BvaW50JiBwb2ludDEsIEdyYXBoaWNz
UG9pbnQmIHBvaW50MiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKQogewotICAg
IEZsb2F0U2l6ZSBtaWRQb2ludERpc3RhbmNlID0gcG9pbnQxIC0gcG9pbnQyOworICAgIEdyYXBo
aWNzU2l6ZSBtaWRQb2ludERpc3RhbmNlID0gcG9pbnQxIC0gcG9pbnQyOwogICAgIG1pZFBvaW50
RGlzdGFuY2Uuc2NhbGUoMC41Zik7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcG9pbnRUcmFuc2Zv
cm07CiAgICAgcG9pbnRUcmFuc2Zvcm0ucm90YXRlKC1hbmdsZSk7CiAKLSAgICBGbG9hdFBvaW50
IHRyYW5zZm9ybWVkTWlkUG9pbnQgPSBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChGbG9hdFBvaW50
KG1pZFBvaW50RGlzdGFuY2Uud2lkdGgoKSwgbWlkUG9pbnREaXN0YW5jZS5oZWlnaHQoKSkpOwor
ICAgIEdyYXBoaWNzUG9pbnQgdHJhbnNmb3JtZWRNaWRQb2ludCA9IHBvaW50VHJhbnNmb3JtLm1h
cFBvaW50KEdyYXBoaWNzUG9pbnQobWlkUG9pbnREaXN0YW5jZS53aWR0aCgpLCBtaWRQb2ludERp
c3RhbmNlLmhlaWdodCgpKSk7CiAgICAgZmxvYXQgc3F1YXJlUnggPSByeCAqIHJ4OwogICAgIGZs
b2F0IHNxdWFyZVJ5ID0gcnkgKiByeTsKICAgICBmbG9hdCBzcXVhcmVYID0gdHJhbnNmb3JtZWRN
aWRQb2ludC54KCkgKiB0cmFuc2Zvcm1lZE1pZFBvaW50LngoKTsKQEAgLTQyOSw3ICs0MjksNyBA
QCBib29sIFNWR1BhdGhQYXJzZXI6OmRlY29tcG9zZUFyY1RvQ3ViaWMoCiAKICAgICBwb2ludDEg
PSBwb2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDEpOwogICAgIHBvaW50MiA9IHBvaW50VHJh
bnNmb3JtLm1hcFBvaW50KHBvaW50Mik7Ci0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9pbnQyIC0g
cG9pbnQxOworICAgIEdyYXBoaWNzU2l6ZSBkZWx0YSA9IHBvaW50MiAtIHBvaW50MTsKIAogICAg
IGZsb2F0IGQgPSBkZWx0YS53aWR0aCgpICogZGVsdGEud2lkdGgoKSArIGRlbHRhLmhlaWdodCgp
ICogZGVsdGEuaGVpZ2h0KCk7CiAgICAgZmxvYXQgc2NhbGVGYWN0b3JTcXVhcmVkID0gc3RkOjpt
YXgoMSAvIGQgLSAwLjI1ZiwgMC5mKTsKQEAgLTQzOSw3ICs0MzksNyBAQCBib29sIFNWR1BhdGhQ
YXJzZXI6OmRlY29tcG9zZUFyY1RvQ3ViaWMoCiAgICAgICAgIHNjYWxlRmFjdG9yID0gLXNjYWxl
RmFjdG9yOwogCiAgICAgZGVsdGEuc2NhbGUoc2NhbGVGYWN0b3IpOwotICAgIEZsb2F0UG9pbnQg
Y2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KDAuNWYgKiAocG9pbnQxLngoKSArIHBvaW50Mi54KCkp
IC0gZGVsdGEuaGVpZ2h0KCksCisgICAgR3JhcGhpY3NQb2ludCBjZW50ZXJQb2ludCA9IEdyYXBo
aWNzUG9pbnQoMC41ZiAqIChwb2ludDEueCgpICsgcG9pbnQyLngoKSkgLSBkZWx0YS5oZWlnaHQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmICogKHBvaW50
MS55KCkgKyBwb2ludDIueSgpKSArIGRlbHRhLndpZHRoKCkpOwogCiAgICAgZmxvYXQgdGhldGEx
ID0gYXRhbjJmKHBvaW50MS55KCkgLSBjZW50ZXJQb2ludC55KCksIHBvaW50MS54KCkgLSBjZW50
ZXJQb2ludC54KCkpOwpAQCAtNDcwLDkgKzQ3MCw5IEBAIGJvb2wgU1ZHUGF0aFBhcnNlcjo6ZGVj
b21wb3NlQXJjVG9DdWJpYygKICAgICAgICAgZmxvYXQgc2luRW5kVGhldGEgPSBzaW5mKGVuZFRo
ZXRhKTsKICAgICAgICAgZmxvYXQgY29zRW5kVGhldGEgPSBjb3NmKGVuZFRoZXRhKTsKIAotICAg
ICAgICBwb2ludDEgPSBGbG9hdFBvaW50KGNvc1N0YXJ0VGhldGEgLSB0ICogc2luU3RhcnRUaGV0
YSwgc2luU3RhcnRUaGV0YSArIHQgKiBjb3NTdGFydFRoZXRhKTsKKyAgICAgICAgcG9pbnQxID0g
R3JhcGhpY3NQb2ludChjb3NTdGFydFRoZXRhIC0gdCAqIHNpblN0YXJ0VGhldGEsIHNpblN0YXJ0
VGhldGEgKyB0ICogY29zU3RhcnRUaGV0YSk7CiAgICAgICAgIHBvaW50MS5tb3ZlKGNlbnRlclBv
aW50LngoKSwgY2VudGVyUG9pbnQueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCB0YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQoY29zRW5kVGhldGEsIHNpbkVuZFRoZXRhKTsKKyAgICAgICAgR3JhcGhp
Y3NQb2ludCB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQoY29zRW5kVGhldGEsIHNpbkVuZFRo
ZXRhKTsKICAgICAgICAgdGFyZ2V0UG9pbnQubW92ZShjZW50ZXJQb2ludC54KCksIGNlbnRlclBv
aW50LnkoKSk7CiAgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50OwogICAgICAgICBwb2ludDIu
bW92ZSh0ICogc2luRW5kVGhldGEsIC10ICogY29zRW5kVGhldGEpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFBhcnNlci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdQYXRoUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYW51cCgpOwogCiBwcml2YXRlOgotICAgIGJvb2wgZGVjb21wb3NlQXJj
VG9DdWJpYyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYsIGJv
b2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CisgICAgYm9vbCBkZWNvbXBvc2VBcmNU
b0N1YmljKGZsb2F0LCBmbG9hdCwgZmxvYXQsIEdyYXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50
JiwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnKTsKICAgICB2b2lkIHBhcnNlQ2xv
c2VQYXRoU2VnbWVudCgpOwogICAgIGJvb2wgcGFyc2VNb3ZlVG9TZWdtZW50KCk7CiAgICAgYm9v
bCBwYXJzZUxpbmVUb1NlZ21lbnQoKTsKQEAgLTYyLDkgKzYyLDkgQEAgcHJpdmF0ZToKICAgICBQ
YXRoUGFyc2luZ01vZGUgbV9wYXRoUGFyc2luZ01vZGU7CiAgICAgU1ZHUGF0aFNlZ1R5cGUgbV9s
YXN0Q29tbWFuZDsKICAgICBib29sIG1fY2xvc2VQYXRoOwotICAgIEZsb2F0UG9pbnQgbV9jb250
cm9sUG9pbnQ7Ci0gICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb2ludDsKLSAgICBGbG9hdFBvaW50
IG1fc3ViUGF0aFBvaW50OworICAgIEdyYXBoaWNzUG9pbnQgbV9jb250cm9sUG9pbnQ7CisgICAg
R3JhcGhpY3NQb2ludCBtX2N1cnJlbnRQb2ludDsKKyAgICBHcmFwaGljc1BvaW50IG1fc3ViUGF0
aFBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5Niw3ICsyOTYsNyBAQCBib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRUb3RhbExl
bmd0CiAgICAgcmV0dXJuIG9rOwogfQogCi1ib29sIFNWR1BhdGhQYXJzZXJGYWN0b3J5OjpnZXRQ
b2ludEF0TGVuZ3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogc3RyZWFt
LCBmbG9hdCBsZW5ndGgsIEZsb2F0UG9pbnQmIHBvaW50KQorYm9vbCBTVkdQYXRoUGFyc2VyRmFj
dG9yeTo6Z2V0UG9pbnRBdExlbmd0aE9mU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJl
YW0qIHN0cmVhbSwgZmxvYXQgbGVuZ3RoLCBHcmFwaGljc1BvaW50JiBwb2ludCkKIHsKICAgICBB
U1NFUlQoc3RyZWFtKTsKICAgICBpZiAoc3RyZWFtLT5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5
dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBTVkdQYXRoQnl0ZVN0cmVhbSosIE93blB0cjxT
VkdQYXRoQnl0ZVN0cmVhbT4mLCBmbG9hdCk7CiAgICAgYm9vbCBnZXRTVkdQYXRoU2VnQXRMZW5n
dGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCBsZW5ndGgs
IHVuc2lnbmVkIGxvbmcmIHBhdGhTZWcpOwogICAgIGJvb2wgZ2V0VG90YWxMZW5ndGhPZlNWR1Bh
dGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwgZmxvYXQmIHRvdGFsTGVuZ3RoKTsKLSAg
ICBib29sIGdldFBvaW50QXRMZW5ndGhPZlNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3Ry
ZWFtKiwgZmxvYXQgbGVuZ3RoLCBGbG9hdFBvaW50Jik7CisgICAgYm9vbCBnZXRQb2ludEF0TGVu
Z3RoT2ZTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIGZsb2F0IGxlbmd0aCwg
R3JhcGhpY3NQb2ludCYpOwogCiBwcml2YXRlOgogICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBTVkdQYXRoU2VnTGlzdEJ1
aWxkZXI6OlNWR1BhdGhTZWdMaXN0QnVpCiB7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVUbyhjb25z
dCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKG1fcGF0aEVsZW1lbnQpOwogICAgIEFTU0VSVChtX3BhdGhTZWdM
aXN0KTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6Om1vdmVU
byhjb25zdAogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3Jl
YXRlU1ZHUGF0aFNlZ01vdmV0b1JlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSwg
bV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6bGluZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
K3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG8oY29uc3QgR3JhcGhpY3NQb2ludCYg
dGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3Bh
dGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC04OSw3ICs4OSw3IEBA
IHZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpsaW5lVG9WZXJ0aWMKICAgICAgICAgbV9wYXRo
U2VnTGlzdC0+YXBwZW5kKG1fcGF0aEVsZW1lbnQtPmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbFJlbCh5LCBtX3BhdGhTZWdSb2xlKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0
ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29u
c3QgR3JhcGhpY3NQb2ludCYgcG9pbnQxLCBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkK
IHsKICAgICBBU1NFUlQobV9wYXRoRWxlbWVudCk7CiAgICAgQVNTRVJUKG1fcGF0aFNlZ0xpc3Qp
OwpAQCAtOTksNyArOTksNyBAQCB2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb0N1
YmljCiAgICAgICAgIG1fcGF0aFNlZ0xpc3QtPmFwcGVuZChtX3BhdGhFbGVtZW50LT5jcmVhdGVT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgp
LCBwb2ludDEueCgpLCBwb2ludDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCBtX3BhdGhT
ZWdSb2xlKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNT
bW9vdGgoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyLCBjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQ
b2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit2b2lkIFNWR1BhdGhTZWdMaXN0QnVpbGRl
cjo6Y3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3Qg
R3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewog
ICAgIEFTU0VSVChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9DdWJp
YwogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCh0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgbV9wYXRoU2VnUm9sZSkpOwogfQogCi12b2lk
IFNWR1BhdGhTZWdMaXN0QnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNv
bnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MSwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9p
bnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50
KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBT
VkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9RdWFkcgogICAgICAgICBtX3BhdGhTZWdMaXN0
LT5hcHBlbmQobV9wYXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNS
ZWwodGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIHBvaW50MS54KCksIHBvaW50MS55
KCksIG1fcGF0aFNlZ1JvbGUpKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1
cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhD
b29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29y
ZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVtZW50KTsKICAgICBBU1NF
UlQobV9wYXRoU2VnTGlzdCk7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBTVkdQYXRoU2VnTGlz
dEJ1aWxkZXI6OmN1cnZlVG9RdWFkcgogICAgICAgICBtX3BhdGhTZWdMaXN0LT5hcHBlbmQobV9w
YXRoRWxlbWVudC0+Y3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodGFy
Z2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCksIG1fcGF0aFNlZ1JvbGUpKTsKIH0KIAotdm9p
ZCBTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQg
YW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2lu
dCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRoU2Vn
TGlzdEJ1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUsIGJvb2wg
bGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIEFTU0VSVChtX3BhdGhFbGVt
ZW50KTsKICAgICBBU1NFUlQobV9wYXRoU2VnTGlzdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhTZWdMaXN0QnVpbGRlci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogI2RlZmluZSBTVkdQYXRoU2VnTGlzdEJ1aWxkZXJfaAogCiAjaWYgRU5BQkxF
KFNWRykKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgogI2luY2x1ZGUgIlNWR1BhdGhDb25zdW1lci5oIgogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKQEAgLTUxLDE4ICs1MSwxOCBAQCBwcml2
YXRlOgogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9Ob3JtYWxpemVk
UGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQm
LCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGlu
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgR3Jh
cGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50Jiwg
UGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAKICAg
ICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwgdm9p
ZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZpcnR1
YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVU
b1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29y
ZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29u
c3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFy
Y1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxh
ZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2
b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3JhcGhp
Y3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9R
dWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRo
Q29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21vb3Ro
KGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwg
dm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBz
d2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogCiAg
ICAgU1ZHUGF0aEVsZW1lbnQqIG1fcGF0aEVsZW1lbnQ7CiAgICAgU1ZHUGF0aFNlZ0xpc3QqIG1f
cGF0aFNlZ0xpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdFNv
dXJjZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhT
ZWdMaXN0U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMjEgKzU5LDIxIEBAIFNWR1Bh
dGhTZWdUeXBlIFNWR1BhdGhTZWdMaXN0U291cmNlOjpuZXgKICAgICByZXR1cm4gcGF0aFNlZ1R5
cGU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTW92ZVRvU2VnbWVudChG
bG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNl
TW92ZVRvU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBBU1NFUlQo
bV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhT
ZWdNb3ZlVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdNb3ZlVG9S
ZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBtb3ZlVG8gPSBzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgdGFy
Z2V0UG9pbnQgPSBGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CisgICAgdGFy
Z2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlTGluZVRv
U2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFNlZ0xpc3RTb3Vy
Y2U6OnBhcnNlTGluZVRvU2VnbWVudChHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCkKIHsKICAg
ICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRoU2VnVHlwZSgp
ID09IFBhdGhTZWdMaW5lVG9BYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhT
ZWdMaW5lVG9SZWwpOwogICAgIFNWR1BhdGhTZWdTaW5nbGVDb29yZGluYXRlKiBsaW5lVG8gPSBz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSo+KG1fc2VnbWVudC5nZXQoKSk7
Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGxpbmVUby0+eCgpLCBsaW5lVG8tPnkoKSk7
CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KGxpbmVUby0+eCgpLCBsaW5lVG8tPnko
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk1LDQ3ICs5NSw0NyBAQCBib29sIFNWR1Bh
dGhTZWdMaXN0U291cmNlOjpwYXJzZUxpbmVUb1ZlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBv
aW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQp
Citib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3Jh
cGhpY3NQb2ludCYgcG9pbnQxLCBHcmFwaGljc1BvaW50JiBwb2ludDIsIEdyYXBoaWNzUG9pbnQm
IHRhcmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVChtX3Nl
Z21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY0FicyB8fCBtX3NlZ21l
bnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbCk7CiAgICAgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpYyogY3ViaWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljKj4obV9zZWdtZW50LmdldCgpKTsKLSAgICBwb2ludDEgPSBGbG9hdFBvaW50KGN1YmljLT54
MSgpLCBjdWJpYy0+eTEoKSk7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpYy0+eDIoKSwg
Y3ViaWMtPnkyKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpYy0+eCgpLCBj
dWJpYy0+eSgpKTsKKyAgICBwb2ludDEgPSBHcmFwaGljc1BvaW50KGN1YmljLT54MSgpLCBjdWJp
Yy0+eTEoKSk7CisgICAgcG9pbnQyID0gR3JhcGhpY3NQb2ludChjdWJpYy0+eDIoKSwgY3ViaWMt
PnkyKCkpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludChjdWJpYy0+eCgpLCBjdWJp
Yy0+eSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQYXRoU2VnTGlzdFNvdXJj
ZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MiwgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1
cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYgcG9pbnQyLCBHcmFwaGljc1Bv
aW50JiB0YXJnZXRQb2ludCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQo
bV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhBYnMg
fHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhS
ZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGgqIGN1YmljU21vb3RoID0gc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aCo+KG1fc2VnbWVudC5nZXQoKSk7
Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eDIoKSwgY3ViaWNTbW9vdGgt
PnkyKCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChjdWJpY1Ntb290aC0+eCgpLCBj
dWJpY1Ntb290aC0+eSgpKTsKKyAgICBwb2ludDIgPSBHcmFwaGljc1BvaW50KGN1YmljU21vb3Ro
LT54MigpLCBjdWJpY1Ntb290aC0+eTIoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1Bv
aW50KGN1YmljU21vb3RoLT54KCksIGN1YmljU21vb3RoLT55KCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNT
ZWdtZW50KEZsb2F0UG9pbnQmIHBvaW50MSwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29s
IFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEdyYXBo
aWNzUG9pbnQmIHBvaW50MSwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgQVNT
RVJUKG1fc2VnbWVudCk7CiAgICAgQVNTRVJUKG1fc2VnbWVudC0+cGF0aFNlZ1R5cGUoKSA9PSBQ
YXRoU2VnQ3VydmVUb1F1YWRyYXRpY0FicyB8fCBtX3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0g
UGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWwpOwogICAgIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljKiBxdWFkcmF0aWMgPSBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYyo+
KG1fc2VnbWVudC5nZXQoKSk7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludChxdWFkcmF0aWMtPngx
KCksIHF1YWRyYXRpYy0+eTEoKSk7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHF1YWRy
YXRpYy0+eCgpLCBxdWFkcmF0aWMtPnkoKSk7CisgICAgcG9pbnQxID0gR3JhcGhpY3NQb2ludChx
dWFkcmF0aWMtPngxKCksIHF1YWRyYXRpYy0+eTEoKSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFw
aGljc1BvaW50KHF1YWRyYXRpYy0+eCgpLCBxdWFkcmF0aWMtPnkoKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFNlZ0xpc3RTb3VyY2U6OnBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTZWdM
aXN0U291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9p
bnQmIHRhcmdldFBvaW50KQogewogICAgIEFTU0VSVChtX3NlZ21lbnQpOwogICAgIEFTU0VSVCht
X3NlZ21lbnQtPnBhdGhTZWdUeXBlKCkgPT0gUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhB
YnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09IFBhdGhTZWdDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoUmVsKTsKICAgICBTVkdQYXRoU2VnU2luZ2xlQ29vcmRpbmF0ZSogcXVhZHJhdGljU21v
b3RoID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1NpbmdsZUNvb3JkaW5hdGUqPihtX3NlZ21lbnQu
Z2V0KCkpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChxdWFkcmF0aWNTbW9vdGgtPngo
KSwgcXVhZHJhdGljU21vb3RoLT55KCkpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2lu
dChxdWFkcmF0aWNTbW9vdGgtPngoKSwgcXVhZHJhdGljU21vb3RoLT55KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIFNWR1BhdGhTZWdMaXN0U291cmNlOjpwYXJzZUFyY1RvU2VnbWVu
dChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9v
bCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU2VnTGlzdFNv
dXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmIHJ4LCBmbG9hdCYgcnksIGZsb2F0JiBhbmds
ZSwgYm9vbCYgbGFyZ2VBcmMsIGJvb2wmIHN3ZWVwLCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2lu
dCkKIHsKICAgICBBU1NFUlQobV9zZWdtZW50KTsKICAgICBBU1NFUlQobV9zZWdtZW50LT5wYXRo
U2VnVHlwZSgpID09IFBhdGhTZWdBcmNBYnMgfHwgbV9zZWdtZW50LT5wYXRoU2VnVHlwZSgpID09
IFBhdGhTZWdBcmNSZWwpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgU1ZHUGF0aFNlZ0xpc3RT
b3VyY2U6OnBhcnNlQXJjVG9TZWcKICAgICBhbmdsZSA9IGFyY1RvLT5hbmdsZSgpOwogICAgIGxh
cmdlQXJjID0gYXJjVG8tPmxhcmdlQXJjRmxhZygpOwogICAgIHN3ZWVwID0gYXJjVG8tPnN3ZWVw
RmxhZygpOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludChhcmNUby0+eCgpLCBhcmNUby0+
eSgpKTsKKyAgICB0YXJnZXRQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXJjVG8tPngoKSwgYXJjVG8t
PnkoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU2VnTGlzdFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoU2VnTGlzdFNvdXJjZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU2VnTGlzdFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3
IEBACiAjZGVmaW5lIFNWR1BhdGhTZWdMaXN0U291cmNlX2gKIAogI2lmIEVOQUJMRShTVkcpCi0j
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNs
dWRlICJTVkdQYXRoU2VnLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKICNpbmNsdWRl
ICJTVkdQYXRoU291cmNlLmgiCkBAIC00NSwxNSArNDUsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VTVkdTZWdtZW50VHlwZShTVkdQYXRoU2VnVHlwZSYpOwogICAgIHZpcnR1
YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUpOwogCi0gICAgdmly
dHVhbCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBh
cnNlTW92ZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNlTGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VMaW5l
VG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRv
Q3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1
cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wm
LCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2VnbWVu
dChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQm
LCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRp
Y1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9hdCYs
IGJvb2wmLCBib29sJiwgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgY29uc3QgU1ZHUGF0aFNlZ0xp
c3QmIG1fcGF0aFNlZ0xpc3Q7CiAgICAgUmVmUHRyPFNWR1BhdGhTZWc+IG1fc2VnbWVudDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNSAr
MzYsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVNWR1NlZ21lbnRUeXBlKFNW
R1BhdGhTZWdUeXBlJikgPSAwOwogICAgIHZpcnR1YWwgU1ZHUGF0aFNlZ1R5cGUgbmV4dENvbW1h
bmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXNDb21tYW5kKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
YXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFyc2VMaW5lVG9TZWdtZW50KEdyYXBoaWNzUG9pbnQmKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IHBhcnNlTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KGZsb2F0JikgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmLCBG
bG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoRmxvYXRQb2ludCYsIEZsb2F0UG9pbnQmKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQo
RmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxv
YXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wmLCBGbG9hdFBvaW50JikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdy
YXBoaWNzUG9pbnQmLCBHcmFwaGljc1BvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoR3Jh
cGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHBhcnNl
Q3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoR3JhcGhpY3NQb2ludCYpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9v
bCYsIGJvb2wmLCBHcmFwaGljc1BvaW50JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVp
bGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgU3RyaW5nIFNWR1BhdGhT
dHJpbmdCdWlsZGVyOjpyZXN1bHQoKQogICAgIHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKIH0KIAotdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQg
U1ZHUGF0aFN0cmluZ0J1aWxkZXI6Om1vdmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQ
b2ludCwgYm9vbCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcykKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgiTSAlLjZsZyAlLjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50
LnkoKSkpOwpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjptb3Zl
VG8oY29uc3QgCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
Im0gJS42bGcgJS42bGcgIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKIH0K
IAotdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1
aWxkZXI6OmxpbmVUbyhjb25zdCBHcmFwaGljc1BvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3Jk
aW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykK
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiTCAlLjZsZyAl
LjZsZyAiLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwpAQCAtNjcsNyArNjcs
NyBAQCB2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpsaW5lVG9WZXJ0aWNhCiAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInYgJS42bGcgIiwgeSkpOwogfQog
Ci12b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1
aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDEsIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQsIFBh
dGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRp
bmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIkMg
JS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgIiwgcG9pbnQxLngoKSwgcG9pbnQx
LnkoKSwgcG9pbnQyLngoKSwgcG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2lu
dC55KCkpKTsKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3Vy
dmVUb0N1YmljKAogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0
KCJjICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIsIHBvaW50MS54KCksIHBv
aW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0
UG9pbnQueSgpKSk7CiB9CiAKLXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9DdWJp
Y1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQmIHRhcmdl
dFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxk
ZXI6OmN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludDIsIGNvbnN0
IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKIHsK
ICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJTICUuNmxnICUuNmxnICUuNmxnICUuNmxnICIs
IHBvaW50Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgp
KSk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9D
dWJpY1MKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgicyAl
LjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQ
b2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1BhdGhTdHJpbmdCdWls
ZGVyOjpjdXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQ
YXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb1F1YWRyYXRpYyhjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1v
ZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQogICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJRICUuNmxnICUuNmxnICUu
NmxnICUuNmxnICIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHRhcmdldFBvaW50LngoKSwgdGFy
Z2V0UG9pbnQueSgpKSk7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxk
ZXI6OmN1cnZlVG9RdWFkcmEKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgicSAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAiLCBwb2ludDEueCgpLCBwb2ludDEu
eSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOwogfQogCi12b2lkIFNWR1Bh
dGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvUXVhZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQm
IHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3ZvaWQgU1ZHUGF0aFN0cmlu
Z0J1aWxkZXI6OmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgR3JhcGhpY3NQb2ludCYgdGFy
Z2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIlQgJS42bGcgJS42bGcgIiwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55
KCkpKTsKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVU
b1F1YWRyYQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJ0
ICUuNmxnICUuNmxnICIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxv
YXQgYW5nbGUsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQordm9pZCBTVkdQYXRo
U3RyaW5nQnVpbGRlcjo6YXJjVG8oZmxvYXQgcjEsIGZsb2F0IHIyLCBmbG9hdCBhbmdsZSwgYm9v
bCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBjb25zdCBHcmFwaGljc1BvaW50JiB0YXJn
ZXRQb2ludCwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQWJz
b2x1dGVDb29yZGluYXRlcykKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgiQSAlLjZsZyAlLjZsZyAlLjZsZyAlZCAlZCAlLjZsZyAlLjZsZyAiLCByMSwgcjIs
IGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQ
b2ludC55KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVpbGRl
ci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5n
QnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIFNWR1Bh
dGhTdHJpbmdCdWlsZGVyX2gKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXRoQ29uc3Vt
ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTM3LDE4ICsz
NywxOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUNvbnN1bWluZygpIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxp
emVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAgIHZpcnR1
YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5h
dGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3Qg
R3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50
JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7CiAK
ICAgICAvLyBPbmx5IHVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZyBtb2RlLgogICAgIHZpcnR1YWwg
dm9pZCBsaW5lVG9Ib3Jpem9udGFsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwogICAgIHZp
cnR1YWwgdm9pZCBsaW5lVG9WZXJ0aWNhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3Vy
dmVUb1F1YWRyYXRpYyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhD
b29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWNTbW9vdGgo
Y29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7Ci0gICAgdmlydHVhbCB2b2lk
IGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVw
RmxhZywgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVh
bCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgY29uc3QgR3Jh
cGhpY3NQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZl
VG9RdWFkcmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVhZHJhdGljU21v
b3RoKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1
YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxhZywgYm9v
bCBzd2VlcEZsYWcsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwog
CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNywyMyArMTI3LDIzIEBAIFNWR1BhdGhTZWdUeXBlIFNWR1BhdGhTdHJpbmdTb3VyY2U6
Om5leHQKICAgICByZXR1cm4gbmV4dENvbW1hbmQ7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VNb3ZlVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBT
VkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFy
Z2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBpZiAoIXBh
cnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVu
dCwgbV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9
IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0
b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUxpbmVUb1NlZ21lbnQoR3JhcGhpY3NQb2ludCYgdGFyZ2V0
UG9pbnQpCiB7CiAgICAgZmxvYXQgdG9YOwogICAgIGZsb2F0IHRvWTsKICAgICBpZiAoIXBhcnNl
TnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHRvWCkgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwg
bV9lbmQsIHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZs
b2F0UG9pbnQodG9YLCB0b1kpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gs
IHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBib29sIFNW
R1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGluZVRvVmVyCiAgICAgcmV0dXJuIHBhcnNlTnVtYmVy
KG1fY3VycmVudCwgbV9lbmQsIHkpOwogfQogCi1ib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQ3VydmVUb0N1YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBv
aW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudChHcmFwaGljc1BvaW50JiBwb2ludDEsIEdyYXBoaWNz
UG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQg
eDE7CiAgICAgZmxvYXQgeTE7CkBAIC0xNzIsMTMgKzE3MiwxMyBAQCBib29sIFNWR1BhdGhTdHJp
bmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1CiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJl
bnQsIG1fZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5k
LCB0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4
MSwgeTEpOwotICAgIHBvaW50MiA9IEZsb2F0UG9pbnQoeDIsIHkyKTsKLSAgICB0YXJnZXRQb2lu
dCA9IEZsb2F0UG9pbnQodG9YLCB0b1kpOworICAgIHBvaW50MSA9IEdyYXBoaWNzUG9pbnQoeDEs
IHkxKTsKKyAgICBwb2ludDIgPSBHcmFwaGljc1BvaW50KHgyLCB5Mik7CisgICAgdGFyZ2V0UG9p
bnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxv
YXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0
cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9pbnQm
IHBvaW50MSwgR3JhcGhpY3NQb2ludCYgdGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgeDE7CiAg
ICAgZmxvYXQgeTE7CkBAIC0xODksMTIgKzE4OSwxMiBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3Vy
Y2U6OnBhcnNlQ3VydmVUb0N1CiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCB0b1gpCiAgICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQxID0gRmxvYXRQb2ludCh4MSwgeTEp
OwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgcG9pbnQxID0g
R3JhcGhpY3NQb2ludCh4MSwgeTEpOworICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0
b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJj
ZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDIsIEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTZWdtZW50KEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgR3JhcGhpY3NQb2ludCYg
dGFyZ2V0UG9pbnQpCiB7CiAgICAgZmxvYXQgeDI7CiAgICAgZmxvYXQgeTI7CkBAIC0yMDUsMjMg
KzIwNSwyMyBAQCBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb1F1CiAgICAg
ICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCiAgICAgICAgIHx8ICFw
YXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwotICAgIHRhcmdldFBvaW50ID0gRmxv
YXRQb2ludCh0b1gsIHRvWSk7CisgICAgcG9pbnQyID0gR3JhcGhpY3NQb2ludCh4MiwgeTIpOwor
ICAgIHRhcmdldFBvaW50ID0gR3JhcGhpY3NQb2ludCh0b1gsIHRvWSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGlj
U21vb3RoU2VnbWVudChGbG9hdFBvaW50JiB0YXJnZXRQb2ludCkKK2Jvb2wgU1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50
JiB0YXJnZXRQb2ludCkKIHsKICAgICBmbG9hdCB0b1g7CiAgICAgZmxvYXQgdG9ZOwogICAgIGlm
ICghcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9YKQogICAgICAgICB8fCAhcGFyc2VO
dW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7CisgICAgdGFyZ2V0UG9pbnQgPSBH
cmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdQ
YXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwg
ZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRh
cmdldFBvaW50KQorYm9vbCBTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUFyY1RvU2VnbWVudChm
bG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJnZUFyYywgYm9vbCYg
c3dlZXAsIEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIGZsb2F0IHRvWDsKICAg
ICBmbG9hdCB0b1k7CkBAIC0yMzMsNyArMjMzLDcgQEAgYm9vbCBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUFyY1RvU2VnbQogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2Vu
ZCwgdG9YKQogICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gs
IHRvWSk7CisgICAgdGFyZ2V0UG9pbnQgPSBHcmFwaGljc1BvaW50KHRvWCwgdG9ZKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ1Nv
dXJjZS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3Ry
aW5nU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgU1ZH
UGF0aFN0cmluZ1NvdXJjZV9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9p
bnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJTVkdQYXRoU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTQzLDE1ICs0MywxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZVNWR1NlZ21lbnRUeXBlKFNWR1BhdGhTZWdUeXBlJik7CiAgICAgdmlydHVhbCBTVkdQYXRoU2Vn
VHlwZSBuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91c0NvbW1hbmQpOwogCi0gICAg
dmlydHVhbCBib29sIHBhcnNlTW92ZVRvU2VnbWVudChGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVh
bCBib29sIHBhcnNlTGluZVRvU2VnbWVudChGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29s
IHBhcnNlTW92ZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBh
cnNlTGluZVRvU2VnbWVudChHcmFwaGljc1BvaW50Jik7CiAgICAgdmlydHVhbCBib29sIHBhcnNl
TGluZVRvSG9yaXpvbnRhbFNlZ21lbnQoZmxvYXQmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2
ZVRvQ3ViaWNTZWdtZW50KEZsb2F0UG9pbnQmLCBGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwot
ICAgIHZpcnR1YWwgYm9vbCBwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2lu
dCYsIEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGlj
U2VnbWVudChGbG9hdFBvaW50JiwgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYXJz
ZUN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJv
b2wmLCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb0N1YmljU2Vn
bWVudChHcmFwaGljc1BvaW50JiwgR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFyc2VDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KEdyYXBoaWNzUG9p
bnQmLCBHcmFwaGljc1BvaW50Jik7CisgICAgdmlydHVhbCBib29sIHBhcnNlQ3VydmVUb1F1YWRy
YXRpY1NlZ21lbnQoR3JhcGhpY3NQb2ludCYsIEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChHcmFwaGljc1BvaW50Jik7
CisgICAgdmlydHVhbCBib29sIHBhcnNlQXJjVG9TZWdtZW50KGZsb2F0JiwgZmxvYXQmLCBmbG9h
dCYsIGJvb2wmLCBib29sJiwgR3JhcGhpY3NQb2ludCYpOwogCiAgICAgU3RyaW5nIG1fc3RyaW5n
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTkg
KzMzLDE5IEBAIFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OlNWR1BhdGhUcmEKIHsKIH0K
IAotdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjptb3ZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9kZSkKK3ZvaWQgU1ZHUGF0
aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdl
dFBvaW50LCBib29sLCBQYXRoQ29vcmRpbmF0ZU1vZGUpCiB7CiAgICAgQVNTRVJUKG1fdHJhdmVy
c2FsU3RhdGUpOwogICAgIG1fdHJhdmVyc2FsU3RhdGUtPm1fdG90YWxMZW5ndGggKz0gbV90cmF2
ZXJzYWxTdGF0ZS0+bW92ZVRvKHRhcmdldFBvaW50KTsKIH0KIAotdm9pZCBTVkdQYXRoVHJhdmVy
c2FsU3RhdGVCdWlsZGVyOjpsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBh
dGhDb29yZGluYXRlTW9kZSkKK3ZvaWQgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcjo6bGlu
ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUp
CiB7CiAgICAgQVNTRVJUKG1fdHJhdmVyc2FsU3RhdGUpOwogICAgIG1fdHJhdmVyc2FsU3RhdGUt
Pm1fdG90YWxMZW5ndGggKz0gbV90cmF2ZXJzYWxTdGF0ZS0+bGluZVRvKHRhcmdldFBvaW50KTsK
IH0KIAotdm9pZCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZs
b2F0UG9pbnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUpCit2b2lkIFNWR1BhdGhU
cmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBHcmFwaGljc1BvaW50JiBw
b2ludDEsIGNvbnN0IEdyYXBoaWNzUG9pbnQmIHBvaW50MiwgY29uc3QgR3JhcGhpY3NQb2ludCYg
dGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSkKIHsKICAgICBBU1NFUlQobV90cmF2ZXJz
YWxTdGF0ZSk7CiAgICAgbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aCArPSBtX3RyYXZl
cnNhbFN0YXRlLT5jdWJpY0JlemllclRvKHBvaW50MSwgcG9pbnQyLCB0YXJnZXRQb2ludCk7CkBA
IC04OCw3ICs4OCw3IEBAIGZsb2F0IFNWR1BhdGhUcmF2ZXJzYWxTdGF0ZUJ1aWxkZXI6OnRvdGEK
ICAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0ZS0+bV90b3RhbExlbmd0aDsKIH0KIAotRmxvYXRQ
b2ludCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJyZW50UG9pbnQoKQorR3JhcGhp
Y3NQb2ludCBTVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyOjpjdXJyZW50UG9pbnQoKQogewog
ICAgIEFTU0VSVChtX3RyYXZlcnNhbFN0YXRlKTsKICAgICByZXR1cm4gbV90cmF2ZXJzYWxTdGF0
ZS0+bV9jdXJyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhUcmF2ZXJzYWxT
dGF0ZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFRy
YXZlcnNhbFN0YXRlQnVpbGRlci5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoVHJhdmVyc2FsU3RhdGVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDcgKzIyLDcgQEAKICNkZWZpbmUgU1ZHUGF0aFRyYXZlcnNhbFN0YXRlQnVpbGRlcl9oCiAKICNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1BvaW50LmgiCiAjaW5jbHVkZSAiUGF0aFRyYXZlcnNhbFN0YXRlLmgiCiAjaW5jbHVkZSAiU1ZH
UGF0aENvbnN1bWVyLmgiCiAKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWdu
ZWQgbG9uZyBwYXRoU2VnbWVudEluZGV4KCk7CiAgICAgZmxvYXQgdG90YWxMZW5ndGgoKTsKLSAg
ICBGbG9hdFBvaW50IGN1cnJlbnRQb2ludCgpOworICAgIEdyYXBoaWNzUG9pbnQgY3VycmVudFBv
aW50KCk7CiAKICAgICB2b2lkIHNldEN1cnJlbnRUcmF2ZXJzYWxTdGF0ZShQYXRoVHJhdmVyc2Fs
U3RhdGUqIHRyYXZlcnNhbFN0YXRlKSB7IG1fdHJhdmVyc2FsU3RhdGUgPSB0cmF2ZXJzYWxTdGF0
ZTsgfQogICAgIHZvaWQgc2V0RGVzaXJlZExlbmd0aChmbG9hdCk7CkBAIC00NCwxOSArNDQsMTkg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyaXNuZy9O
b3JtYWxpemVkUGFyc2luZyBtb2Rlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgbGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOwotICAg
IHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBib29sIGNsb3NlZCwgUGF0aENv
b3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEdyYXBoaWNzUG9p
bnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvQ3ViaWMo
Y29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGlj
c1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRo
KCk7CiAKIHByaXZhdGU6CiAgICAgLy8gTm90IHVzZWQgZm9yIFBhdGhUcmF2ZXJzYWxTdGF0ZS4K
ICAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVN
b2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxpbmVUb1Zl
cnRpY2FsKGZsb2F0LCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb1F1YWRyYXRpY1Ntb290aChj
b25zdCBGbG9hdFBvaW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFyY1RvKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2ws
IGJvb2wsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3VydmVUb0N1YmljU21vb3RoKGNvbnN0
IEdyYXBoaWNzUG9pbnQmLCBjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5hdGVNb2Rl
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9RdWFk
cmF0aWMoY29uc3QgR3JhcGhpY3NQb2ludCYsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQYXRoQ29v
cmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
Y3VydmVUb1F1YWRyYXRpY1Ntb290aChjb25zdCBHcmFwaGljc1BvaW50JiwgUGF0aENvb3JkaW5h
dGVNb2RlKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGFyY1Rv
KGZsb2F0LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wsIGNvbnN0IEdyYXBoaWNzUG9pbnQmLCBQ
YXRoQ29vcmRpbmF0ZU1vZGUpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIFBhdGhU
cmF2ZXJzYWxTdGF0ZSogbV90cmF2ZXJzYWxTdGF0ZTsKICAgICBmbG9hdCBtX2Rlc2lyZWRMZW5n
dGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9pbnRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUG9pbnRMaXN0
LmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtMzgsNyArMzgsNyBAQCBTdHJpbmcgU1ZHUG9pbnRMaXN0Ojp2
YWx1ZUFzU3RyaW5nKCkgY29uCiAgICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgIik7IC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2UgdXNlIGNvbW1hcyB0byBzZXBl
cmF0ZT8KIAotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCA9IGF0KGkpOworICAgICAg
ICBjb25zdCBHcmFwaGljc1BvaW50JiBwb2ludCA9IGF0KGkpOwogICAgICAgICBidWlsZGVyLmFw
cGVuZChTdHJpbmc6Om51bWJlcihwb2ludC54KCkpICsgJyAnICsgU3RyaW5nOjpudW1iZXIocG9p
bnQueSgpKSk7CiAgICAgfQogCkBAIC01Niw5ICs1Niw5IEBAIGJvb2wgU1ZHUG9pbnRMaXN0Ojpj
cmVhdGVBbmltYXRlZChjb25zdCAKICAgICBpZiAoIWl0ZW1Db3VudCB8fCBpdGVtQ291bnQgIT0g
dG9MaXN0LnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBpdGVtQ291bnQ7ICsrbikgewotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBm
cm9tID0gZnJvbUxpc3QuYXQobik7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHRvID0gdG9M
aXN0LmF0KG4pOwotICAgICAgICBGbG9hdFBvaW50IHNlZ21lbnQgPSBGbG9hdFBvaW50KGFkanVz
dEFuaW1hdGVkVmFsdWUoZnJvbS54KCksIHRvLngoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBjb25z
dCBHcmFwaGljc1BvaW50JiBmcm9tID0gZnJvbUxpc3QuYXQobik7CisgICAgICAgIGNvbnN0IEdy
YXBoaWNzUG9pbnQmIHRvID0gdG9MaXN0LmF0KG4pOworICAgICAgICBHcmFwaGljc1BvaW50IHNl
Z21lbnQgPSBHcmFwaGljc1BvaW50KGFkanVzdEFuaW1hdGVkVmFsdWUoZnJvbS54KCksIHRvLngo
KSwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
anVzdEFuaW1hdGVkVmFsdWUoZnJvbS55KCksIHRvLnkoKSwgcHJvZ3Jlc3MpKTsKICAgICAgICAg
cmVzdWx0TGlzdC5hcHBlbmQoc2VnbWVudCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BvaW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
b2ludExpc3QuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUG9p
bnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDkgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFBvaW50OworY2xhc3MgR3JhcGhpY3NQb2ludDsKIAotY2xh
c3MgU1ZHUG9pbnRMaXN0IDogcHVibGljIFZlY3RvcjxGbG9hdFBvaW50PiB7CitjbGFzcyBTVkdQ
b2ludExpc3QgOiBwdWJsaWMgVmVjdG9yPEdyYXBoaWNzUG9pbnQ+IHsKIHB1YmxpYzoKICAgICBT
VkdQb2ludExpc3QoKSB7IH0KIApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZTw+
CiBzdHJ1Y3QgU1ZHUHJvcGVydHlUcmFpdHM8U1ZHUG9pbnRMaXN0PiB7CiAgICAgc3RhdGljIFNW
R1BvaW50TGlzdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBTVkdQb2ludExpc3QoKTsgfQotICAg
IHR5cGVkZWYgRmxvYXRQb2ludCBMaXN0SXRlbVR5cGU7CisgICAgdHlwZWRlZiBHcmFwaGljc1Bv
aW50IExpc3RJdGVtVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1BvaW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CiAjaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIlNWR1BhcnNlclV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xNTYsOSArMTU2LDkgQEAg
YmFpbE91dDoKICAgICByZXR1cm4gYXNwZWN0UmF0aW87CiB9CiAKLXZvaWQgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpbzo6dHJhbnNmb3JtUmVjdChGbG9hdFJlY3QmIGRlc3RSZWN0LCBGbG9hdFJlY3Qm
IHNyY1JlY3QpCit2b2lkIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnRyYW5zZm9ybVJlY3QoR3Jh
cGhpY3NSZWN0JiBkZXN0UmVjdCwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KQogewotICAgIEZsb2F0
U2l6ZSBpbWFnZVNpemUgPSBzcmNSZWN0LnNpemUoKTsKKyAgICBHcmFwaGljc1NpemUgaW1hZ2VT
aXplID0gc3JjUmVjdC5zaXplKCk7CiAgICAgZmxvYXQgb3JpZ0Rlc3RXaWR0aCA9IGRlc3RSZWN0
LndpZHRoKCk7CiAgICAgZmxvYXQgb3JpZ0Rlc3RIZWlnaHQgPSBkZXN0UmVjdC5oZWlnaHQoKTsK
ICAgICBzd2l0Y2ggKG1fbWVldE9yU2xpY2UpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
LWNsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEdyYXBoaWNzUmVjdDsKIAogY2xhc3MgU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbyB7CiBwdWJsaWM6CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldE1lZXRPclNsaWNlKHVuc2lnbmVkIHNob3J0LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dW5zaWduZWQgc2hvcnQgbWVldE9yU2xpY2UoKSBjb25zdCB7IHJldHVybiBtX21lZXRPclNsaWNl
OyB9CiAKLSAgICB2b2lkIHRyYW5zZm9ybVJlY3QoRmxvYXRSZWN0JiBkZXN0UmVjdCwgRmxvYXRS
ZWN0JiBzcmNSZWN0KTsKKyAgICB2b2lkIHRyYW5zZm9ybVJlY3QoR3JhcGhpY3NSZWN0JiBkZXN0
UmVjdCwgR3JhcGhpY3NSZWN0JiBzcmNSZWN0KTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oZmxvYXQgbG9naWNYLCBmbG9hdCBsb2dpY1ksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBsb2dpY1dpZHRoLCBmbG9hdCBsb2dpY0hlaWdodCwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIlJhZGlhbEdyYWRpZW50QXR0cmli
dXRlcy5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuaCIKICNp
bmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKQEAgLTIyMCwxNiArMjIwLDE2IEBAIGJvb2wg
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9p
bnRzQW5kUmFkaXVzKGNvbnN0IFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywg
RmxvYXRQb2ludCYgZm9jYWxQb2ludCwgRmxvYXRQb2ludCYgY2VudGVyUG9pbnQsIGZsb2F0JiBy
YWRpdXMpCit2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50
ZXJQb2ludHNBbmRSYWRpdXMoY29uc3QgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzLCBHcmFwaGljc1BvaW50JiBmb2NhbFBvaW50LCBHcmFwaGljc1BvaW50JiBjZW50ZXJQb2lu
dCwgZmxvYXQmIHJhZGl1cykKIHsKICAgICAvLyBEZXRlcm1pbmUgZ3JhZGllbnQgZm9jYWwvY2Vu
dGVyIHBvaW50cyBhbmQgcmFkaXVzCiAgICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2Rl
KCkpIHsKLSAgICAgICAgZm9jYWxQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5meCgpLnZh
bHVlQXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsK
LSAgICAgICAgY2VudGVyUG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZUFz
UGVyY2VudGFnZSgpLCBhdHRyaWJ1dGVzLmN5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CisgICAg
ICAgIGZvY2FsUG9pbnQgPSBHcmFwaGljc1BvaW50KGF0dHJpYnV0ZXMuZngoKS52YWx1ZUFzUGVy
Y2VudGFnZSgpLCBhdHRyaWJ1dGVzLmZ5KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSk7CisgICAgICAg
IGNlbnRlclBvaW50ID0gR3JhcGhpY3NQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWVBc1BlcmNl
bnRhZ2UoKSwgYXR0cmlidXRlcy5jeSgpLnZhbHVlQXNQZXJjZW50YWdlKCkpOwogICAgICAgICBy
YWRpdXMgPSBhdHRyaWJ1dGVzLnIoKS52YWx1ZUFzUGVyY2VudGFnZSgpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGZvY2FsUG9pbnQgPSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMuZngoKS52YWx1ZSh0
aGlzKSwgYXR0cmlidXRlcy5meSgpLnZhbHVlKHRoaXMpKTsKLSAgICAgICAgY2VudGVyUG9pbnQg
PSBGbG9hdFBvaW50KGF0dHJpYnV0ZXMuY3goKS52YWx1ZSh0aGlzKSwgYXR0cmlidXRlcy5jeSgp
LnZhbHVlKHRoaXMpKTsKKyAgICAgICAgZm9jYWxQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmli
dXRlcy5meCgpLnZhbHVlKHRoaXMpLCBhdHRyaWJ1dGVzLmZ5KCkudmFsdWUodGhpcykpOworICAg
ICAgICBjZW50ZXJQb2ludCA9IEdyYXBoaWNzUG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVlKHRo
aXMpLCBhdHRyaWJ1dGVzLmN5KCkudmFsdWUodGhpcykpOwogICAgICAgICByYWRpdXMgPSBhdHRy
aWJ1dGVzLnIoKS52YWx1ZSh0aGlzKTsKICAgICB9CiAKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lk
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FsY3VsYXRlCiAKICAgICAgICAgZGVsdGFYID0g
Y29zZihhbmdsZSkgKiByYWRpdXNNYXg7CiAgICAgICAgIGRlbHRhWSA9IHNpbmYoYW5nbGUpICog
cmFkaXVzTWF4OwotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChkZWx0YVggKyBjZW50
ZXJQb2ludC54KCksIGRlbHRhWSArIGNlbnRlclBvaW50LnkoKSk7CisgICAgICAgIGZvY2FsUG9p
bnQgPSBHcmFwaGljc1BvaW50KGRlbHRhWCArIGNlbnRlclBvaW50LngoKSwgZGVsdGFZICsgY2Vu
dGVyUG9pbnQueSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAog
ICAgIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhSYWRpYWxHcmFkaWVudEF0dHJpYnV0
ZXMmKTsKLSAgICB2b2lkIGNhbGN1bGF0ZUZvY2FsQ2VudGVyUG9pbnRzQW5kUmFkaXVzKGNvbnN0
IFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyYsIEZsb2F0UG9pbnQmIGZvY2FsUG9pbnQsIEZsb2F0
UG9pbnQmIGNlbnRlclBvaW50LCBmbG9hdCYgcmFkaXVzKTsKKyAgICB2b2lkIGNhbGN1bGF0ZUZv
Y2FsQ2VudGVyUG9pbnRzQW5kUmFkaXVzKGNvbnN0IFJhZGlhbEdyYWRpZW50QXR0cmlidXRlcyYs
IEdyYXBoaWNzUG9pbnQmIGZvY2FsUG9pbnQsIEdyYXBoaWNzUG9pbnQmIGNlbnRlclBvaW50LCBm
bG9hdCYgcmFkaXVzKTsKIAogcHJpdmF0ZToKICAgICBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0LmgJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsMTYgKzIxLDE2IEBACiAjZGVmaW5lIFNWR1JlY3RfaAogCiAjaWYgRU5B
QkxFKFNWRykKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc1JlY3Qu
aCIKICNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgU1ZHUHJvcGVydHlUcmFpdHM8RmxvYXRSZWN0PiB7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBp
bml0aWFsVmFsdWUoKSB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQotICAgIHN0YXRpYyBTdHJpbmcg
dG9TdHJpbmcoY29uc3QgRmxvYXRSZWN0JiB0eXBlKQorc3RydWN0IFNWR1Byb3BlcnR5VHJhaXRz
PEdyYXBoaWNzUmVjdD4geworICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgaW5pdGlhbFZhbHVlKCkg
eyByZXR1cm4gR3JhcGhpY3NSZWN0KCk7IH0KKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNv
bnN0IEdyYXBoaWNzUmVjdCYgdHlwZSkKICAgICB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIodHlwZS54KCkpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YShQYXRo
JiBwYQogICAgIGZsb2F0IHhWYWx1ZSA9IHgoKS52YWx1ZSh0aGlzKTsKICAgICBmbG9hdCB5VmFs
dWUgPSB5KCkudmFsdWUodGhpcyk7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCh4VmFsdWUsIHlWYWx1
ZSwgd2lkdGhWYWx1ZSwgaGVpZ2h0VmFsdWUpOworICAgIEdyYXBoaWNzUmVjdCByZWN0KHhWYWx1
ZSwgeVZhbHVlLCB3aWR0aFZhbHVlLCBoZWlnaHRWYWx1ZSk7CiAKICAgICBib29sIGhhc1J4ID0g
aGFzQXR0cmlidXRlKFNWR05hbWVzOjpyeEF0dHIpOwogICAgIGJvb2wgaGFzUnkgPSBoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnJ5QXR0cik7CkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBTVkdSZWN0
RWxlbWVudDo6dG9QYXRoRGF0YShQYXRoJiBwYQogICAgICAgICAgICAgcnhWYWx1ZSA9IHJ5VmFs
dWU7CiAgICAgICAgIGVsc2UgaWYgKCFoYXNSeSkKICAgICAgICAgICAgIHJ5VmFsdWUgPSByeFZh
bHVlOwotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyeFZhbHVl
LCByeVZhbHVlKSk7CisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgR3JhcGhpY3NT
aXplKHJ4VmFsdWUsIHJ5VmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTE0MiwxMyAr
MTQyLDEzIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q29udGVudFN0eWxlVHlwZSgKICAgICBz
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmNvbnRlbnRTdHlsZVR5cGVBdHRyLCB0eXBlKTsKIH0KIAot
RmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6OnZpZXdwb3J0KCkgY29uc3QKK0dyYXBoaWNzUmVjdCBT
VkdTVkdFbGVtZW50Ojp2aWV3cG9ydCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHZpZXdSZWN0
YW5nbGU7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdSZWN0YW5nbGU7CiAgICAgaWYgKCFpc091dGVy
bW9zdFNWRygpKQotICAgICAgICB2aWV3UmVjdGFuZ2xlLnNldExvY2F0aW9uKEZsb2F0UG9pbnQo
eCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpKTsKKyAgICAgICAgdmlld1JlY3Rhbmds
ZS5zZXRMb2NhdGlvbihHcmFwaGljc1BvaW50KHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRo
aXMpKSk7CiAKLSAgICB2aWV3UmVjdGFuZ2xlLnNldFNpemUoRmxvYXRTaXplKHdpZHRoKCkudmFs
dWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKSk7ICAgIAorICAgIHZpZXdSZWN0YW5nbGUu
c2V0U2l6ZShHcmFwaGljc1NpemUod2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUo
dGhpcykpKTsgICAgCiAgICAgcmV0dXJuIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odmlld1JlY3Rh
bmdsZS53aWR0aCgpLCB2aWV3UmVjdGFuZ2xlLmhlaWdodCgpKS5tYXBSZWN0KHZpZXdSZWN0YW5n
bGUpOwogfQogCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDdXJy
ZW50U2NhbGUoZmxvYQogICAgIGZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihzY2FsZSk7CiB9CiAK
LXZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50
JiB0cmFuc2xhdGlvbikKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6c2V0Q3VycmVudFRyYW5zbGF0ZShj
b25zdCBHcmFwaGljc1BvaW50JiB0cmFuc2xhdGlvbikKIHsKICAgICBtX3RyYW5zbGF0aW9uID0g
dHJhbnNsYXRpb247CiAgICAgdXBkYXRlQ3VycmVudFRyYW5zbGF0ZSgpOwpAQCAtMzg5LDE5ICsz
ODksMTkgQEAgdm9pZCBTVkdTVkdFbGVtZW50Ojpmb3JjZVJlZHJhdygpCiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBtZSAoc2VlIGJ1ZyAxMTI3NSkKIH0KIAotTm9kZUxpc3QqIFNWR1NWR0VsZW1l
bnQ6OmdldEludGVyc2VjdGlvbkxpc3QoY29uc3QgRmxvYXRSZWN0JiwgU1ZHRWxlbWVudCopCitO
b2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6Z2V0SW50ZXJzZWN0aW9uTGlzdChjb25zdCBHcmFwaGlj
c1JlY3QmLCBTVkdFbGVtZW50KikKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lIChzZWUg
YnVnIDExMjc0KQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlTGlzdCogU1ZHU1ZHRWxlbWVudDo6
Z2V0RW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJlY3QmLCBTVkdFbGVtZW50KikKK05vZGVMaXN0
KiBTVkdTVkdFbGVtZW50OjpnZXRFbmNsb3N1cmVMaXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNW
R0VsZW1lbnQqKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUgKHNlZSBidWcgMTEyNzQp
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rp
b24oU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgU1ZHU1ZHRWxlbWVu
dDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVj
dCkKIHsKICAgICAvLyBUT0RPIDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/CiAg
ICAgLy8gRklYTUU6IFdoeSBpcyBlbGVtZW50IGlnbm9yZWQ/PwpAQCAtNDA5LDcgKzQwOSw3IEBA
IGJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tJbnRlcnNlY3Rpb24oU1YKICAgICByZXR1cm4gcmVj
dC5pbnRlcnNlY3RzKGdldEJCb3goKSk7CiB9CiAKLWJvb2wgU1ZHU1ZHRWxlbWVudDo6Y2hlY2tF
bmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgU1ZHU1ZH
RWxlbWVudDo6Y2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICAvLyBUT0RPIDogdGFrZSBpbnRvIGFjY291bnQgcG9pbnRlci1ldmVudHM/
CiAgICAgLy8gRklYTUU6IFdoeSBpcyBlbGVtZW50IGlnbm9yZWQ/PwpAQCAtNDM4LDkgKzQzOCw5
IEBAIFNWR0FuZ2xlIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0FuZ2xlKCkKICAgICByZXR1cm4g
U1ZHQW5nbGUoKTsKIH0KIAotRmxvYXRQb2ludCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdQb2lu
dCgpCitHcmFwaGljc1BvaW50IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1BvaW50KCkKIHsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludCgpOworICAgIHJldHVybiBHcmFwaGljc1BvaW50KCk7CiB9CiAK
IFNWR01hdHJpeCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKQpAQCAtNDQ4LDkgKzQ0
OCw5IEBAIFNWR01hdHJpeCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgKICAgICByZXR1
cm4gU1ZHTWF0cml4KCk7CiB9CiAKLUZsb2F0UmVjdCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdS
ZWN0KCkKK0dyYXBoaWNzUmVjdCBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdSZWN0KCkKIHsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCiBT
VkdUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHVHJhbnNmb3JtKCkKQEAgLTQ3Niw3
ICs0NzYsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6bG9jYWxDb29yCiAgICAg
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewogICAg
ICAgICAgICAgLy8gVHJhbnNsYXRlIGluIG91ciBDU1MgcGFyZW50IGNvb3JkaW5hdGUgc3BhY2UK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBD
U1MgdHJhbnNmb3Jtcy4KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYXRpb24gPSByZW5kZXJl
ci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOworICAgICAgICAg
ICAgR3JhcGhpY3NQb2ludCBsb2NhdGlvbiA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoR3Jh
cGhpY3NQb2ludCgpLCBmYWxzZSwgdHJ1ZSk7CiAKICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwg
aGVyZSEgbG9jYWxUb0Fic29sdXRlKCkgaW5jbHVkZXMgdGhlIHgveSBvZmZzZXQgY29taW5nIGZy
b20gdGhlIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oKSwgYmVjYXVzZQogICAgICAgICAgICAgLy8g
UmVuZGVyU1ZHUm9vdDo6bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpIChjYWxsZWQgdGhyb3Vn
aCBtYXBMb2NhbFRvQ29udGFpbmVyKCksIGNhbGxlZCBmcm9tIGxvY2FsVG9BYnNvbHV0ZSgpKQpA
QCAtNTY2LDEyICs1NjYsMTIgQEAgYm9vbCBTVkdTVkdFbGVtZW50Ojppc091dGVybW9zdFNWRygp
IGNvbgogICAgIHJldHVybiAhcGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKTsKIH0KIAotRmxv
YXRSZWN0IFNWR1NWR0VsZW1lbnQ6OmN1cnJlbnRWaWV3Qm94UmVjdCgpIGNvbnN0CitHcmFwaGlj
c1JlY3QgU1ZHU1ZHRWxlbWVudDo6Y3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3QKIHsKICAgICBp
ZiAodXNlQ3VycmVudFZpZXcoKSkgewogICAgICAgICBpZiAoU1ZHVmlld1NwZWMqIHZpZXcgPSBj
dXJyZW50VmlldygpKSAvLyB3aGF0IGlmIHdlIHNob3VsZCB1c2UgaXQgYnV0IGl0IGlzIG5vdCBz
ZXQ/CiAgICAgICAgICAgICByZXR1cm4gdmlldy0+dmlld0JveCgpOwotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgICAgIHJldHVybiBHcmFwaGljc1JlY3QoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gdmlld0JveCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY29udGVudFN0eWxlVHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVudFN0eWxl
VHlwZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOwogCi0gICAgRmxvYXRSZWN0IHZpZXdwb3J0
KCkgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IHZpZXdwb3J0KCkgY29uc3Q7CiAKICAgICB2b2lk
IHNldENvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkgeyBtX2NvbnRh
aW5lclNpemUgPSBjb250YWluZXJTaXplOyBtX2hhc1NldENvbnRhaW5lclNpemUgPSB0cnVlOyB9
CiAgICAgSW50U2l6ZSBjb250YWluZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluZXJT
aXplOyB9CkBAIC03OCwxMyArNzgsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNlQ3VycmVu
dFZpZXcoYm9vbCBjdXJyZW50Vmlldyk7CiAKICAgICBTVkdWaWV3U3BlYyogY3VycmVudFZpZXco
KSBjb25zdDsKLSAgICBGbG9hdFJlY3QgY3VycmVudFZpZXdCb3hSZWN0KCkgY29uc3Q7CisgICAg
R3JhcGhpY3NSZWN0IGN1cnJlbnRWaWV3Qm94UmVjdCgpIGNvbnN0OwogCiAgICAgZmxvYXQgY3Vy
cmVudFNjYWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDdXJyZW50U2NhbGUoZmxvYXQgc2NhbGUp
OwogCi0gICAgRmxvYXRQb2ludCYgY3VycmVudFRyYW5zbGF0ZSgpIHsgcmV0dXJuIG1fdHJhbnNs
YXRpb247IH0KLSAgICB2b2lkIHNldEN1cnJlbnRUcmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYp
OworICAgIEdyYXBoaWNzUG9pbnQmIGN1cnJlbnRUcmFuc2xhdGUoKSB7IHJldHVybiBtX3RyYW5z
bGF0aW9uOyB9CisgICAgdm9pZCBzZXRDdXJyZW50VHJhbnNsYXRlKGNvbnN0IEdyYXBoaWNzUG9p
bnQmKTsKIAogICAgIC8vIE9ubHkgdXNlZCBmcm9tIHRoZSBiaW5kaW5ncy4KICAgICB2b2lkIHVw
ZGF0ZUN1cnJlbnRUcmFuc2xhdGUoKTsKQEAgLTEwMywxOCArMTAzLDE4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHVuc3VzcGVuZFJlZHJhd0FsbCgpOwogICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKIAot
ICAgIE5vZGVMaXN0KiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0Vs
ZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOwotICAgIE5vZGVMaXN0KiBnZXRFbmNsb3N1cmVMaXN0
KGNvbnN0IEZsb2F0UmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOwotICAgIGJv
b2wgY2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOwotICAg
IGJvb2wgY2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IE5vZGVMaXN0KiBnZXRJbnRlcnNlY3Rpb25MaXN0KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0Vs
ZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOworICAgIE5vZGVMaXN0KiBnZXRFbmNsb3N1cmVMaXN0
KGNvbnN0IEdyYXBoaWNzUmVjdCYsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQpOworICAg
IGJvb2wgY2hlY2tJbnRlcnNlY3Rpb24oU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVjdCYp
OworICAgIGJvb2wgY2hlY2tFbmNsb3N1cmUoU1ZHRWxlbWVudCosIGNvbnN0IEdyYXBoaWNzUmVj
dCYpOwogICAgIHZvaWQgZGVzZWxlY3RBbGwoKTsKIAogICAgIHN0YXRpYyBmbG9hdCBjcmVhdGVT
VkdOdW1iZXIoKTsKICAgICBzdGF0aWMgU1ZHTGVuZ3RoIGNyZWF0ZVNWR0xlbmd0aCgpOwogICAg
IHN0YXRpYyBTVkdBbmdsZSBjcmVhdGVTVkdBbmdsZSgpOwotICAgIHN0YXRpYyBGbG9hdFBvaW50
IGNyZWF0ZVNWR1BvaW50KCk7CisgICAgc3RhdGljIEdyYXBoaWNzUG9pbnQgY3JlYXRlU1ZHUG9p
bnQoKTsKICAgICBzdGF0aWMgU1ZHTWF0cml4IGNyZWF0ZVNWR01hdHJpeCgpOwotICAgIHN0YXRp
YyBGbG9hdFJlY3QgY3JlYXRlU1ZHUmVjdCgpOworICAgIHN0YXRpYyBHcmFwaGljc1JlY3QgY3Jl
YXRlU1ZHUmVjdCgpOwogICAgIHN0YXRpYyBTVkdUcmFuc2Zvcm0gY3JlYXRlU1ZHVHJhbnNmb3Jt
KCk7CiAgICAgc3RhdGljIFNWR1RyYW5zZm9ybSBjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4
KGNvbnN0IFNWR01hdHJpeCYpOwogCkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV91c2VDdXJyZW50VmlldzsKICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1f
dGltZUNvbnRhaW5lcjsKLSAgICBGbG9hdFBvaW50IG1fdHJhbnNsYXRpb247CisgICAgR3JhcGhp
Y3NQb2ludCBtX3RyYW5zbGF0aW9uOwogICAgIG11dGFibGUgT3duUHRyPFNWR1ZpZXdTcGVjPiBt
X3ZpZXdTcGVjOwogICAgIEludFNpemUgbV9jb250YWluZXJTaXplOwogICAgIGJvb2wgbV9oYXNT
ZXRDb250YWluZXJTaXplOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDcgKzQ0LDcgQEAgU1ZHRWxlbWVudCogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6ZgogICAg
IHJldHVybiBTVkdMb2NhdGFibGU6OmZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KHRoaXMpOwogfQog
Ci1GbG9hdFJlY3QgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0
ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CitHcmFwaGljc1JlY3QgU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBk
YXRlU3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Z2V0QkJveCh0
aGlzLCBzdHlsZVVwZGF0ZVN0cmF0ZWd5KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJl
c3RWaWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRo
ZXN0Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBnZXRC
Qm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEdyYXBoaWNzUmVjdCBnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0
eWxlVXBkYXRlKSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oU3R5
bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gQWxsb3dT
dHlsZVVwZGF0ZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAgU1ZHRWxlbWVudCogU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbgogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpmYXJ0aGVzdFZpZXdw
b3J0RWxlbWVudCh0aGlzKTsKIH0KIAotRmxvYXRSZWN0IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpnZXRCQm94KFN0eWxlVXBkYXRlU3RyYXRlZ3kgc3R5bGVVcGRhdGVTdHJhdGVneSkg
Y29uc3QKK0dyYXBoaWNzUmVjdCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0QkJv
eChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmdldEJCb3godGhpcywgc3R5bGVVcGRhdGVTdHJhdGVn
eSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBzdXBwbGVt
ZW50YWxUcmFuc2Zvcm0oKTsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVV
cGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgR3Jh
cGhpY3NSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUp
IGNvbnN0OwogCiAgICAgLy8gImJhc2UgY2xhc3MiIG1ldGhvZHMgZm9yIGFsbCB0aGUgZWxlbWVu
dHMgd2hpY2ggcmVuZGVyIGFzIHBhdGhzCiAgICAgdmlydHVhbCB2b2lkIHRvUGF0aERhdGEoUGF0
aCYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwzNyArMTMwLDM3IEBA
IGZsb2F0IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3ViU3RyaW4KICAgICByZXR1cm4gU1ZH
VGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnN1YlN0cmluZ0xlbmd0aChjaGFybnVtLCBuY2hhcnMpOwog
fQogCi1GbG9hdFBvaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0U3RhcnRQb3NpdGlvbk9m
Q2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0dyYXBoaWNz
UG9pbnQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRTdGFydFBvc2l0aW9uT2ZDaGFyKHVuc2ln
bmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCiAgICAgaWYgKGNoYXJu
dW0gPiBnZXROdW1iZXJPZkNoYXJzKCkpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsK
LSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9p
bnQoKTsKICAgICB9CiAKICAgICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLnN0YXJ0
UG9zaXRpb25PZkNoYXJhY3RlcihjaGFybnVtKTsKIH0KIAotRmxvYXRQb2ludCBTVkdUZXh0Q29u
dGVudEVsZW1lbnQ6OmdldEVuZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAorR3JhcGhpY3NQb2ludCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6
OmdldEVuZFBvc2l0aW9uT2ZDaGFyKHVuc2lnbmVkIGNoYXJudW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogCiAgICAgaWYgKGNoYXJudW0gPiBnZXROdW1iZXJPZkNoYXJzKCkpIHsKICAg
ICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUG9pbnQoKTsKICAgICB9CiAKICAgICByZXR1cm4gU1ZH
VGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXIoY2hhcm51bSk7CiB9
CiAKLUZsb2F0UmVjdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNp
Z25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK0dyYXBoaWNzUmVjdCBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OmdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIGlmIChjaGFybnVtID4gZ2V0TnVtYmVyT2ZD
aGFycygpKSB7CiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogICAgIH0KIAogICAg
IHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkuZXh0ZW50T2ZDaGFyYWN0ZXIoY2hhcm51
bSk7CkBAIC0xNzgsNyArMTc4LDcgQEAgZmxvYXQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRS
b3RhdGlvbgogICAgIHJldHVybiBTVkdUZXh0UXVlcnkocmVuZGVyZXIoKSkucm90YXRpb25PZkNo
YXJhY3RlcihjaGFybnVtKTsKIH0KIAotaW50IFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0Q2hh
ck51bUF0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitpbnQgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpnZXRDaGFyTnVtQXRQb3NpdGlvbihjb25zdCBHcmFwaGljc1BvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4gU1ZHVGV4dFF1ZXJ5KHJlbmRlcmVyKCkpLmNo
YXJhY3Rlck51bWJlckF0UG9zaXRpb24ocG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEx
ICs4MiwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZ2V0TnVtYmVyT2ZDaGFycygpIGNvbnN0
OwogICAgIGZsb2F0IGdldENvbXB1dGVkVGV4dExlbmd0aCgpIGNvbnN0OwogICAgIGZsb2F0IGdl
dFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2Vw
dGlvbkNvZGUmKSBjb25zdDsKLSAgICBGbG9hdFBvaW50IGdldFN0YXJ0UG9zaXRpb25PZkNoYXIo
dW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIEZsb2F0UG9pbnQg
Z2V0RW5kUG9zaXRpb25PZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwotICAgIEZsb2F0UmVjdCBnZXRFeHRlbnRPZkNoYXIodW5zaWduZWQgY2hhcm51bSwgRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgZ2V0U3RhcnRQb3NpdGlvbk9m
Q2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgR3JhcGhp
Y3NQb2ludCBnZXRFbmRQb3NpdGlvbk9mQ2hhcih1bnNpZ25lZCBjaGFybnVtLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7CisgICAgR3JhcGhpY3NSZWN0IGdldEV4dGVudE9mQ2hhcih1bnNpZ25lZCBj
aGFybnVtLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgZmxvYXQgZ2V0Um90YXRpb25PZkNo
YXIodW5zaWduZWQgY2hhcm51bSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAgIGludCBnZXRD
aGFyTnVtQXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgaW50IGdldENo
YXJOdW1BdFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSBjb25zdDsKICAgICB2b2lkIHNl
bGVjdFN1YlN0cmluZyh1bnNpZ25lZCBjaGFybnVtLCB1bnNpZ25lZCBuY2hhcnMsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKIAogICAgIHN0YXRpYyBTVkdUZXh0Q29udGVudEVsZW1lbnQqIGVsZW1l
bnRGcm9tUmVuZGVyZXIoUmVuZGVyT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1RleHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCiAjaW5jbHVkZSAi
U1ZHRWxlbWVudEluc3RhbmNlLmgiCkBAIC05Myw3ICs5Myw3IEBAIFNWR0VsZW1lbnQqIFNWR1Rl
eHRFbGVtZW50OjpmYXJ0aGVzdFZpZXcKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6ZmFy
dGhlc3RWaWV3cG9ydEVsZW1lbnQodGhpcyk7CiB9CiAKLUZsb2F0UmVjdCBTVkdUZXh0RWxlbWVu
dDo6Z2V0QkJveChTdHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpIGNvbnN0
CitHcmFwaGljc1JlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVn
eSBzdHlsZVVwZGF0ZVN0cmF0ZWd5KSBjb25zdAogewogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1h
YmxlOjpnZXRCQm94KHRoaXMsIHN0eWxlVXBkYXRlU3RyYXRlZ3kpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgU1ZHRWxlbWVudCogZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGdldEJCb3goU3R5bGVVcGRhdGVTdHJh
dGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0
IGdldEJCb3goU3R5bGVVcGRhdGVTdHJhdGVneSA9IEFsbG93U3R5bGVVcGRhdGUpIGNvbnN0Owog
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0g
QWxsb3dTdHlsZVVwZGF0ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0
U2NyZWVuQ1RNKFN0eWxlVXBkYXRlU3RyYXRlZ3kgPSBBbGxvd1N0eWxlVXBkYXRlKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsOCArMjQsOCBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c1NpemUuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQu
aCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNzgsMzEgKzc4LDMxIEBAIHZvaWQg
U1ZHVHJhbnNmb3JtOjpzZXRUcmFuc2xhdGUoZmxvYXQgdHgKICAgICBtX21hdHJpeC50cmFuc2xh
dGUodHgsIHR5KTsKIH0KIAotRmxvYXRQb2ludCBTVkdUcmFuc2Zvcm06OnRyYW5zbGF0ZSgpIGNv
bnN0CitHcmFwaGljc1BvaW50IFNWR1RyYW5zZm9ybTo6dHJhbnNsYXRlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1fbWF0cml4LmUoKSwgbV9tYXRy
aXguZigpKTsKKyAgICByZXR1cm4gR3JhcGhpY3NQb2ludDo6bmFycm93UHJlY2lzaW9uKG1fbWF0
cml4LmUoKSwgbV9tYXRyaXguZigpKTsKIH0KIAogdm9pZCBTVkdUcmFuc2Zvcm06OnNldFNjYWxl
KGZsb2F0IHN4LCBmbG9hdCBzeSkKIHsKICAgICBtX3R5cGUgPSBTVkdfVFJBTlNGT1JNX1NDQUxF
OwogICAgIG1fYW5nbGUgPSAwOwotICAgIG1fY2VudGVyID0gRmxvYXRQb2ludCgpOworICAgIG1f
Y2VudGVyID0gR3JhcGhpY3NQb2ludCgpOwogCiAgICAgbV9tYXRyaXgubWFrZUlkZW50aXR5KCk7
CiAgICAgbV9tYXRyaXguc2NhbGVOb25Vbmlmb3JtKHN4LCBzeSk7CiB9CiAKLUZsb2F0U2l6ZSBT
VkdUcmFuc2Zvcm06OnNjYWxlKCkgY29uc3QKK0dyYXBoaWNzU2l6ZSBTVkdUcmFuc2Zvcm06OnNj
YWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRTaXplOjpuYXJyb3dQcmVjaXNpb24obV9t
YXRyaXguYSgpLCBtX21hdHJpeC5kKCkpOworICAgIHJldHVybiBHcmFwaGljc1NpemU6Om5hcnJv
d1ByZWNpc2lvbihtX21hdHJpeC5hKCksIG1fbWF0cml4LmQoKSk7CiB9CiAKIHZvaWQgU1ZHVHJh
bnNmb3JtOjpzZXRSb3RhdGUoZmxvYXQgYW5nbGUsIGZsb2F0IGN4LCBmbG9hdCBjeSkKIHsKICAg
ICBtX3R5cGUgPSBTVkdfVFJBTlNGT1JNX1JPVEFURTsKICAgICBtX2FuZ2xlID0gYW5nbGU7Ci0g
ICAgbV9jZW50ZXIgPSBGbG9hdFBvaW50KGN4LCBjeSk7CisgICAgbV9jZW50ZXIgPSBHcmFwaGlj
c1BvaW50KGN4LCBjeSk7CiAKICAgICAvLyBUT0RPOiB0b1N0cmluZygpIGltcGxlbWVudGF0aW9u
LCB3aGljaCBjYW4gc2hvdyBjeCwgY3kgKG5lZWQgdG8gYmUgc3RvcmVkPykKICAgICBtX21hdHJp
eC5tYWtlSWRlbnRpdHkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgJKHJldmlz
aW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiwxMiArMjIsMTIgQEAKICNkZWZpbmUgU1ZHVHJhbnNmb3JtX2gKIAogI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
UG9pbnQuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFNpemU7CitjbGFzcyBHcmFwaGljc1NpemU7CiAKIGNsYXNzIFNWR1RyYW5z
Zm9ybSB7CiBwdWJsaWM6CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0
ZU1hdHJpeCgpOwogCiAgICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9
Ci0gICAgRmxvYXRQb2ludCByb3RhdGlvbkNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2VudGVy
OyB9CisgICAgR3JhcGhpY3NQb2ludCByb3RhdGlvbkNlbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2VudGVyOyB9CiAKICAgICB2b2lkIHNldE1hdHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
ICAgICB2b2lkIHNldFRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpOwpAQCAtNjIsOCArNjIs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTa2V3WShmbG9hdCBhbmdsZSk7CiAgICAgCiAgICAg
Ly8gSW50ZXJuYWwgdXNlIG9ubHkgKGFuaW1hdGlvbiBzeXN0ZW0pCi0gICAgRmxvYXRQb2ludCB0
cmFuc2xhdGUoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgc2NhbGUoKSBjb25zdDsKKyAgICBHcmFw
aGljc1BvaW50IHRyYW5zbGF0ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZSgpIGNv
bnN0OwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IFNWR19U
UkFOU0ZPUk1fVU5LTk9XTjsgfQogICAgIFN0cmluZyB2YWx1ZUFzU3RyaW5nKCkgY29uc3Q7CkBA
IC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAKICAgICBTVkdUcmFuc2Zvcm1UeXBlIG1fdHlwZTsK
ICAgICBmbG9hdCBtX2FuZ2xlOwotICAgIEZsb2F0UG9pbnQgbV9jZW50ZXI7CisgICAgR3JhcGhp
Y3NQb2ludCBtX2NlbnRlcjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9tYXRyaXg7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtRGlzdGFuY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1EaXN0YW5jZS5jcHAJKHJldmlz
aW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybURpc3RhbmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bURpc3RhbmNlLmgiCiAKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQ
b2ludC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU2l6ZS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bS5oIgogCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNjIsMTQgKzYyLDE0IEBAIFNWR1RyYW5zZm9y
bURpc3RhbmNlOjpTVkdUcmFuc2Zvcm1EaXN0YW4KICAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8g
YmUgYWJsZSB0byBzdWJ0cmFjdCB0byBtYXRyaWNlcwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9UQVRFOiB7Ci0gICAgICAgIEZsb2F0U2l6
ZSBjZW50ZXJEaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCkgLSBmcm9t
U1ZHVHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBjZW50
ZXJEaXN0YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnJvdGF0aW9uQ2VudGVyKCkgLSBmcm9tU1ZHVHJh
bnNmb3JtLnJvdGF0aW9uQ2VudGVyKCk7CiAgICAgICAgIG1fYW5nbGUgPSB0b1NWR1RyYW5zZm9y
bS5hbmdsZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS5hbmdsZSgpOwogICAgICAgICBtX2N4ID0gY2Vu
dGVyRGlzdGFuY2Uud2lkdGgoKTsKICAgICAgICAgbV9jeSA9IGNlbnRlckRpc3RhbmNlLmhlaWdo
dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdf
VFJBTlNGT1JNX1RSQU5TTEFURTogewotICAgICAgICBGbG9hdFNpemUgdHJhbnNsYXRpb25EaXN0
YW5jZSA9IHRvU1ZHVHJhbnNmb3JtLnRyYW5zbGF0ZSgpIC0gZnJvbVNWR1RyYW5zZm9ybS50cmFu
c2xhdGUoKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHRyYW5zbGF0aW9uRGlzdGFuY2UgPSB0b1NW
R1RyYW5zZm9ybS50cmFuc2xhdGUoKSAtIGZyb21TVkdUcmFuc2Zvcm0udHJhbnNsYXRlKCk7CiAg
ICAgICAgIG1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0cmFuc2xhdGlvbkRpc3RhbmNlLndpZHRoKCks
IHRyYW5zbGF0aW9uRGlzdGFuY2UuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTM1LDcgKzEzNSw3IEBAIFNWR1RyYW5zZm9ybSBTVkdUcmFuc2Zvcm1EaXN0YW5jZTo6YWRk
U1YKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zv
cm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsKLSAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gZmly
c3Quc2NhbGUoKSArIHNlY29uZC5zY2FsZSgpOworICAgICAgICBHcmFwaGljc1NpemUgc2NhbGUg
PSBmaXJzdC5zY2FsZSgpICsgc2Vjb25kLnNjYWxlKCk7CiAgICAgICAgIHRyYW5zZm9ybS5zZXRT
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybiB0cmFu
c2Zvcm07CiAgICAgfQpAQCAtMjA0LDIwICsyMDQsMjAgQEAgU1ZHVHJhbnNmb3JtIFNWR1RyYW5z
Zm9ybURpc3RhbmNlOjphZGRUbwogICAgIGNhc2UgU1ZHVHJhbnNmb3JtOjpTVkdfVFJBTlNGT1JN
X01BVFJJWDoKICAgICAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0ubWF0cml4KCkg
KiBtX3RyYW5zZm9ybSk7CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fVFJB
TlNMQVRFOiB7Ci0gICAgICAgIEZsb2F0UG9pbnQgdHJhbnNsYXRpb24gPSB0cmFuc2Zvcm0udHJh
bnNsYXRlKCk7Ci0gICAgICAgIHRyYW5zbGF0aW9uICs9IEZsb2F0U2l6ZTo6bmFycm93UHJlY2lz
aW9uKG1fdHJhbnNmb3JtLmUoKSwgbV90cmFuc2Zvcm0uZigpKTsKKyAgICAgICAgR3JhcGhpY3NQ
b2ludCB0cmFuc2xhdGlvbiA9IHRyYW5zZm9ybS50cmFuc2xhdGUoKTsKKyAgICAgICAgdHJhbnNs
YXRpb24gKz0gR3JhcGhpY3NTaXplOjpuYXJyb3dQcmVjaXNpb24obV90cmFuc2Zvcm0uZSgpLCBt
X3RyYW5zZm9ybS5mKCkpOwogICAgICAgICBuZXdUcmFuc2Zvcm0uc2V0VHJhbnNsYXRlKHRyYW5z
bGF0aW9uLngoKSwgdHJhbnNsYXRpb24ueSgpKTsKICAgICAgICAgcmV0dXJuIG5ld1RyYW5zZm9y
bTsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fU0NBTEU6IHsK
LSAgICAgICAgRmxvYXRTaXplIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlKCk7Ci0gICAgICAgIHNj
YWxlICs9IEZsb2F0U2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fdHJhbnNmb3JtLmEoKSwgbV90cmFu
c2Zvcm0uZCgpKTsKKyAgICAgICAgR3JhcGhpY3NTaXplIHNjYWxlID0gdHJhbnNmb3JtLnNjYWxl
KCk7CisgICAgICAgIHNjYWxlICs9IEdyYXBoaWNzU2l6ZTo6bmFycm93UHJlY2lzaW9uKG1fdHJh
bnNmb3JtLmEoKSwgbV90cmFuc2Zvcm0uZCgpKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNldFNj
YWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIG5ld1Ry
YW5zZm9ybTsKICAgICB9CiAgICAgY2FzZSBTVkdUcmFuc2Zvcm06OlNWR19UUkFOU0ZPUk1fUk9U
QVRFOiB7CiAgICAgICAgIC8vIEZJWE1FOiBJJ20gbm90IGNlcnRhaW4gdGhlIHRyYW5zbGF0aW9u
IGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5IGhlcmUKLSAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIg
PSB0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKTsKKyAgICAgICAgR3JhcGhpY3NQb2ludCBjZW50
ZXIgPSB0cmFuc2Zvcm0ucm90YXRpb25DZW50ZXIoKTsKICAgICAgICAgbmV3VHJhbnNmb3JtLnNl
dFJvdGF0ZSh0cmFuc2Zvcm0uYW5nbGUoKSArIG1fYW5nbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2VudGVyLngoKSArIG1fY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2VudGVyLnkoKSArIG1fY3kpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMCw3ICs3MDAsNyBAQCB2b2lkIFNWR1VzZUVs
ZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0CiAgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJOb3QgYWxsb3dlZCB0byB1c2UgaW5kaXJl
Y3QgcmVmZXJlbmNlIGluIDxjbGlwLXBhdGg+Iik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihuKS0+dG9DbGlw
UGF0aChwYXRoKTsKLSAgICAgICAgICAgIHBhdGgudHJhbnNsYXRlKEZsb2F0U2l6ZSh4KCkudmFs
dWUodGhpcyksIHkoKS52YWx1ZSh0aGlzKSkpOworICAgICAgICAgICAgcGF0aC50cmFuc2xhdGUo
R3JhcGhpY3NTaXplKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKSk7CiAgICAgICAg
ICAgICBwYXRoLnRyYW5zZm9ybShhbmltYXRlZExvY2FsVHJhbnNmb3JtKCkpOwogICAgICAgICB9
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZpZXdTcGVjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVmlld1NwZWMuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWaWV3U3BlYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBTVkdWaWV3U3BlYzo6c2V0VHJhbnNmb3JtKGNvbnN0IFN0
cgogCiB2b2lkIFNWR1ZpZXdTcGVjOjpzZXRWaWV3Qm94U3RyaW5nKGNvbnN0IFN0cmluZyYgdmll
d0JveFN0cikKIHsKLSAgICBGbG9hdFJlY3Qgdmlld0JveDsKKyAgICBHcmFwaGljc1JlY3Qgdmll
d0JveDsKICAgICBjb25zdCBVQ2hhciogYyA9IHZpZXdCb3hTdHIuY2hhcmFjdGVycygpOwogICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBjICsgdmlld0JveFN0ci5sZW5ndGgoKTsKICAgICBpZiAoIXBh
cnNlVmlld0JveChtX2NvbnRleHRFbGVtZW50LT5kb2N1bWVudCgpLCBjLCBlbmQsIHZpZXdCb3gs
IGZhbHNlKSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIFNWR1ZpZXdTcGVjOjpwYXJzZVZpZXdT
cGVjKGNvbnN0IFN0CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJWaWV3U3BlYyA+PSBlbmQgfHwg
KmN1cnJWaWV3U3BlYyAhPSAnKCcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgICAgICBjdXJyVmlld1NwZWMrKzsKLSAgICAgICAgICAgICAgICBGbG9hdFJl
Y3Qgdmlld0JveDsKKyAgICAgICAgICAgICAgICBHcmFwaGljc1JlY3Qgdmlld0JveDsKICAgICAg
ICAgICAgICAgICBpZiAoIXBhcnNlVmlld0JveChtX2NvbnRleHRFbGVtZW50LT5kb2N1bWVudCgp
LCBjdXJyVmlld1NwZWMsIGVuZCwgdmlld0JveCwgZmFsc2UpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgc2V0Vmlld0JveEJhc2VWYWx1ZSh2aWV3
Qm94KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBAIFNWR1pvb21FdmVudDo6U1ZHWm9vbUV2ZW50KCkKIHsKIH0KIAot
RmxvYXRSZWN0IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAorR3JhcGhpY3NS
ZWN0IFNWR1pvb21FdmVudDo6em9vbVJlY3RTY3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBt
X3pvb21SZWN0U2NyZWVuOwogfQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIFNWR1pvb21FdmVudDo6
c2V0UHJldmlvdXNTY2FsZShmbG9hCiAgICAgbV9wcmV2aW91c1NjYWxlID0gc2NhbGU7CiB9CiAK
LUZsb2F0UG9pbnQgU1ZHWm9vbUV2ZW50OjpwcmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0CitHcmFw
aGljc1BvaW50IFNWR1pvb21FdmVudDo6cHJldmlvdXNUcmFuc2xhdGUoKSBjb25zdAogewogICAg
IHJldHVybiBtX3ByZXZpb3VzVHJhbnNsYXRlOwogfQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFNW
R1pvb21FdmVudDo6c2V0TmV3U2NhbGUoZmxvYXQgc2NhCiAgICAgbV9uZXdTY2FsZSA9IHNjYWxl
OwogfQogCi1GbG9hdFBvaW50IFNWR1pvb21FdmVudDo6bmV3VHJhbnNsYXRlKCkgY29uc3QKK0dy
YXBoaWNzUG9pbnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSBjb25zdAogewogICAgIHJl
dHVybiBtX25ld1RyYW5zbGF0ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29t
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIFNWR1pvb21FdmVudF9oCiAj
aWYgRU5BQkxFKFNWRykKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzUmVjdC5oIgogI2luY2x1ZGUgIlVJRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzMsMTcgKzMzLDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdab29t
RXZlbnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdab29tRXZlbnQpOyB9CiAK
ICAgICAvLyAnU1ZHWm9vbUV2ZW50JyBmdW5jdGlvbnMKLSAgICBGbG9hdFJlY3Qgem9vbVJlY3RT
Y3JlZW4oKSBjb25zdDsKKyAgICBHcmFwaGljc1JlY3Qgem9vbVJlY3RTY3JlZW4oKSBjb25zdDsK
IAogICAgIGZsb2F0IHByZXZpb3VzU2NhbGUoKSBjb25zdDsKICAgICB2b2lkIHNldFByZXZpb3Vz
U2NhbGUoZmxvYXQpOwogCi0gICAgRmxvYXRQb2ludCBwcmV2aW91c1RyYW5zbGF0ZSgpIGNvbnN0
OworICAgIEdyYXBoaWNzUG9pbnQgcHJldmlvdXNUcmFuc2xhdGUoKSBjb25zdDsKIAogICAgIGZs
b2F0IG5ld1NjYWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXROZXdTY2FsZShmbG9hdCk7CiAKLSAg
ICBGbG9hdFBvaW50IG5ld1RyYW5zbGF0ZSgpIGNvbnN0OworICAgIEdyYXBoaWNzUG9pbnQgbmV3
VHJhbnNsYXRlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU1ZHWm9vbUV2ZW50KCk7CkBAIC01
MywxMCArNTMsMTAgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX25ld1NjYWxlOwogICAgIGZsb2F0
IG1fcHJldmlvdXNTY2FsZTsKIAotICAgIEZsb2F0UmVjdCBtX3pvb21SZWN0U2NyZWVuOworICAg
IEdyYXBoaWNzUmVjdCBtX3pvb21SZWN0U2NyZWVuOwogCi0gICAgRmxvYXRQb2ludCBtX25ld1Ry
YW5zbGF0ZTsKLSAgICBGbG9hdFBvaW50IG1fcHJldmlvdXNUcmFuc2xhdGU7CisgICAgR3JhcGhp
Y3NQb2ludCBtX25ld1RyYW5zbGF0ZTsKKyAgICBHcmFwaGljc1BvaW50IG1fcHJldmlvdXNUcmFu
c2xhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRmlsZUNob29z
ZXIuaCIKICNpbmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTE3Niw3ICsxNzYs
NyBAQCBib29sIFNWR0ltYWdlOjpoYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJu
IHJvb3RFbGVtZW50LT5oZWlnaHQoKS51bml0VHlwZSgpID09IExlbmd0aFR5cGVQZXJjZW50YWdl
OwogfQogCi12b2lkIFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBTVkdJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZHN0UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCkKIHsKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg5
LDEyICsxODksMTIgQEAgdm9pZCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbgog
ICAgIGlmIChjb21wb3NpdGVPcCAhPSBDb21wb3NpdGVTb3VyY2VPdmVyKQogICAgICAgICBjb250
ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlKGRz
dFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1Jl
Y3QuaGVpZ2h0KCkpOworICAgIEdyYXBoaWNzU2l6ZSBzY2FsZShkc3RSZWN0LndpZHRoKCkgLyBz
cmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpKTsKICAg
ICAKICAgICAvLyBXZSBjYW4gb25seSBkcmF3IHRoZSBlbnRpcmUgZnJhbWUsIGNsaXBwZWQgdG8g
dGhlIHJlY3Qgd2Ugd2FudC4gU28gY29tcHV0ZSB3aGVyZSB0aGUgdG9wIGxlZnQKICAgICAvLyBv
ZiB0aGUgaW1hZ2Ugd291bGQgYmUgaWYgd2Ugd2VyZSBkcmF3aW5nIHdpdGhvdXQgY2xpcHBpbmcs
IGFuZCB0cmFuc2xhdGUgYWNjb3JkaW5nbHkuCi0gICAgRmxvYXRTaXplIHRvcExlZnRPZmZzZXQo
c3JjUmVjdC5sb2NhdGlvbigpLngoKSAqIHNjYWxlLndpZHRoKCksIHNyY1JlY3QubG9jYXRpb24o
KS55KCkgKiBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludCBkZXN0T2Zmc2V0ID0gZHN0
UmVjdC5sb2NhdGlvbigpIC0gdG9wTGVmdE9mZnNldDsKKyAgICBHcmFwaGljc1NpemUgdG9wTGVm
dE9mZnNldChzcmNSZWN0LmxvY2F0aW9uKCkueCgpICogc2NhbGUud2lkdGgoKSwgc3JjUmVjdC5s
b2NhdGlvbigpLnkoKSAqIHNjYWxlLmhlaWdodCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGRlc3RP
ZmZzZXQgPSBkc3RSZWN0LmxvY2F0aW9uKCkgLSB0b3BMZWZ0T2Zmc2V0OwogCiAgICAgY29udGV4
dC0+dHJhbnNsYXRlKGRlc3RPZmZzZXQueCgpLCBkZXN0T2Zmc2V0LnkoKSk7CiAgICAgY29udGV4
dC0+c2NhbGUoc2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpIHsgcmV0dXJuIDA7IH0KIAog
ICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGZyb21SZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRvUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGZyb21SZWN0LCBjb25zdCBHcmFwaGljc1JlY3QmIHRvUmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgUGFzc1JlZlB0cjxGRUltYWdl
PiBGRUltYWdlOjpjcmVhdGUoRmlsdAogdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCiB7CiAgICAgQVNTRVJUKG1faW1hZ2UpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
KG1fYWJzb2x1dGVTdWJyZWdpb24pOworICAgIEdyYXBoaWNzUmVjdCBzcmNSZWN0KEdyYXBoaWNz
UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBHcmFwaGljc1JlY3QgcGFpbnRSZWN0KG1f
YWJzb2x1dGVTdWJyZWdpb24pOwogICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1S
ZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7CiAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZl
Y3RSZWN0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CkBAIC02NSw4ICs2NSw4IEBAIHZvaWQgRkVJbWFnZTo6YXBwbHkoKQogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3Qo
bV9hYnNvbHV0ZVN1YnJlZ2lvbik7CisgICAgR3JhcGhpY3NSZWN0IHNyY1JlY3QoR3JhcGhpY3NQ
b2ludCgpLCBtX2ltYWdlLT5zaXplKCkpOworICAgIEdyYXBoaWNzUmVjdCBkZXN0UmVjdChtX2Fi
c29sdXRlU3VicmVnaW9uKTsKICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVj
dChkZXN0UmVjdCwgc3JjUmVjdCk7CiAKICAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJz
b2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgRkVJbWFnZSA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFSW1hZ2U+IGNyZWF0ZShGaWx0
ZXIqLCBQYXNzUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpOwog
Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
U3VicmVnaW9uKSB7IG1fYWJzb2x1dGVTdWJyZWdpb24gPSBhYnNvbHV0ZVN1YnJlZ2lvbjsgfQor
ICAgIHZvaWQgc2V0QWJzb2x1dGVTdWJyZWdpb24oY29uc3QgR3JhcGhpY3NSZWN0JiBhYnNvbHV0
ZVN1YnJlZ2lvbikgeyBtX2Fic29sdXRlU3VicmVnaW9uID0gYWJzb2x1dGVTdWJyZWdpb247IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CkBA
IC01MSw3ICs1MSw3IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAg
ICAgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyBtX3ByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgRmxv
YXRSZWN0IG1fYWJzb2x1dGVTdWJyZWdpb247CisgICAgR3JhcGhpY3NSZWN0IG1fYWJzb2x1dGVT
dWJyZWdpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdyYXBoaWNzUmVj
dCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBHcmFwaGljc1JlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBjb25zdCBHcmFwaGljc1JlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZl
Y3RCQm94TW9kZSkKICAgICA6IEZpbHRlcigpCiAgICAgLCBtX2Fic29sdXRlVHJhbnNmb3JtKGFi
c29sdXRlVHJhbnNmb3JtKQogICAgICwgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24oYWJz
b2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKQpAQCAtNTAsNyArNTAsNyBAQCBmbG9hdCBTVkdGaWx0
ZXI6OmFwcGx5VmVydGljYWxTY2FsZShmbG9hCiAgICAgcmV0dXJuIEZpbHRlcjo6YXBwbHlWZXJ0
aWNhbFNjYWxlKHZhbHVlKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uaGVpZ2h0KCkgLyBtX2Zp
bHRlclJlZ2lvbi5oZWlnaHQoKTsKIH0KIAotUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRl
cjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBl
ZmZlY3RCQm94TW9kZSkKK1Bhc3NSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgR3JhcGhpY3NSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCwgY29uc3QgR3JhcGhpY3NSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZm
ZWN0QkJveE1vZGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGaWx0ZXIoYWJzb2x1
dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdC
b3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTaXplLmgiCiAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zNSwzMCArMzUs
MzAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdGaWx0ZXIgOiBwdWJsaWMgRmls
dGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0
ZXI+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBHcmFwaGljc1JlY3QmLCBj
b25zdCBHcmFwaGljc1JlY3QmLCBjb25zdCBHcmFwaGljc1JlY3QmLCBib29sKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBlZmZlY3RCb3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VmZmVj
dEJCb3hNb2RlOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJT
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgdmlydHVhbCBGbG9h
dFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lv
bjsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVj
dCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9
CiAKLSAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9jYWxQb2ludChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9y
bS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnQpOyB9Ci0gICAgRmxvYXRSZWN0IG1hcExvY2FsUmVj
dFRvQWJzb2x1dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QgeyByZXR1cm4gbV9h
YnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOyB9CisgICAgdmlydHVhbCBHcmFwaGljc1Bv
aW50IG1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9pbnQoY29uc3QgR3JhcGhpY3NQb2ludCYgcG9p
bnQpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFBvaW50
KHBvaW50KTsgfQorICAgIEdyYXBoaWNzUmVjdCBtYXBMb2NhbFJlY3RUb0Fic29sdXRlUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zv
cm0ubWFwUmVjdChyZWN0KTsgfQogCiAgICAgdmlydHVhbCBmbG9hdCBhcHBseUhvcml6b250YWxT
Y2FsZShmbG9hdCB2YWx1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBhcHBseVZlcnRpY2Fs
U2NhbGUoZmxvYXQgdmFsdWUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc291cmNl
SW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247
IH0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldEJvdW5kaW5nQm94OyB9CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgc291cmNlSW1hZ2VS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KKyAg
ICBHcmFwaGljc1JlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3Rhcmdl
dEJvdW5kaW5nQm94OyB9CiAKIHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgU1ZH
RmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEdy
YXBoaWNzUmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBHcmFwaGljc1Jl
Y3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBHcmFwaGljc1JlY3QmIGZpbHRlclJlZ2lvbiwg
Ym9vbCBlZmZlY3RCQm94TW9kZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRy
YW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1
dGVGaWx0ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworICAgIEdyYXBo
aWNzUmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsKKyAgICBHcmFwaGljc1JlY3Qg
bV90YXJnZXRCb3VuZGluZ0JveDsKKyAgICBHcmFwaGljc1JlY3QgbV9hYnNvbHV0ZUZpbHRlclJl
Z2lvbjsKKyAgICBHcmFwaGljc1JlY3QgbV9maWx0ZXJSZWdpb247CiAgICAgYm9vbCBtX2VmZmVj
dEJCb3hNb2RlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9MaXN0
ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTGlzdGVu
ZXIuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0xp
c3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgQXVkaW9M
aXN0ZW5lcl9oCiAjZGVmaW5lIEF1ZGlvTGlzdGVuZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00NSwyNyArNDUsMjcg
QEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFBvc2l0aW9uCi0gICAgdm9pZCBzZXRQb3NpdGlv
bihkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSB7IHNldFBvc2l0aW9uKEZsb2F0UG9pbnQz
RCh4LCB5LCB6KSk7IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCAm
cG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2lu
dDNEJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICB2b2lkIHNl
dFBvc2l0aW9uKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgc2V0UG9zaXRpb24oR3Jh
cGhpY3NQb2ludDNEKHgsIHksIHopKTsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgR3Jh
cGhpY3NQb2ludDNEICZwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBj
b25zdCBHcmFwaGljc1BvaW50M0QmIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQogCiAgICAgLy8gT3JpZW50YXRpb24KICAgICB2b2lkIHNldE9yaWVudGF0aW9uKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSB1cFgsIGRvdWJsZSB1cFksIGRvdWJsZSB1
cFopCiAgICAgewotICAgICAgICBzZXRPcmllbnRhdGlvbihGbG9hdFBvaW50M0QoeCwgeSwgeikp
OwotICAgICAgICBzZXRVcFZlY3RvcihGbG9hdFBvaW50M0QodXBYLCB1cFksIHVwWikpOworICAg
ICAgICBzZXRPcmllbnRhdGlvbihHcmFwaGljc1BvaW50M0QoeCwgeSwgeikpOworICAgICAgICBz
ZXRVcFZlY3RvcihHcmFwaGljc1BvaW50M0QodXBYLCB1cFksIHVwWikpOwogICAgIH0KLSAgICB2
b2lkIHNldE9yaWVudGF0aW9uKGNvbnN0IEZsb2F0UG9pbnQzRCAmb3JpZW50YXRpb24pIHsgbV9v
cmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludDNEJiBvcmll
bnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKyAgICB2b2lkIHNldE9y
aWVudGF0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmb3JpZW50YXRpb24pIHsgbV9vcmllbnRh
dGlvbiA9IG9yaWVudGF0aW9uOyB9CisgICAgY29uc3QgR3JhcGhpY3NQb2ludDNEJiBvcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KIAogICAgIC8vIFVwLXZlY3Rv
cgotICAgIHZvaWQgc2V0VXBWZWN0b3IoY29uc3QgRmxvYXRQb2ludDNEICZ1cFZlY3RvcikgeyBt
X3VwVmVjdG9yID0gdXBWZWN0b3I7IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHVwVmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV91cFZlY3RvcjsgfQorICAgIHZvaWQgc2V0VXBWZWN0b3IoY29u
c3QgR3JhcGhpY3NQb2ludDNEICZ1cFZlY3RvcikgeyBtX3VwVmVjdG9yID0gdXBWZWN0b3I7IH0K
KyAgICBjb25zdCBHcmFwaGljc1BvaW50M0QmIHVwVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV91
cFZlY3RvcjsgfQogCiAgICAgLy8gVmVsb2NpdHkKLSAgICB2b2lkIHNldFZlbG9jaXR5KGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHopIHsgc2V0VmVsb2NpdHkoRmxvYXRQb2ludDNEKHgsIHks
IHopKTsgfQotICAgIHZvaWQgc2V0VmVsb2NpdHkoY29uc3QgRmxvYXRQb2ludDNEICZ2ZWxvY2l0
eSkgeyBtX3ZlbG9jaXR5ID0gdmVsb2NpdHk7IH0KLSAgICBjb25zdCBGbG9hdFBvaW50M0QmIHZl
bG9jaXR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQorICAgIHZvaWQgc2V0VmVsb2Np
dHkoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikgeyBzZXRWZWxvY2l0eShHcmFwaGljc1Bv
aW50M0QoeCwgeSwgeikpOyB9CisgICAgdm9pZCBzZXRWZWxvY2l0eShjb25zdCBHcmFwaGljc1Bv
aW50M0QgJnZlbG9jaXR5KSB7IG1fdmVsb2NpdHkgPSB2ZWxvY2l0eTsgfQorICAgIGNvbnN0IEdy
YXBoaWNzUG9pbnQzRCYgdmVsb2NpdHkoKSBjb25zdCB7IHJldHVybiBtX3ZlbG9jaXR5OyB9CiAK
ICAgICAvLyBEb3BwbGVyIGZhY3RvcgogICAgIHZvaWQgc2V0RG9wcGxlckZhY3Rvcihkb3VibGUg
ZG9wcGxlckZhY3RvcikgeyBtX2RvcHBsZXJGYWN0b3IgPSBkb3BwbGVyRmFjdG9yOyB9CkBAIC03
OSwxMSArNzksMTEgQEAgcHJpdmF0ZToKICAgICBBdWRpb0xpc3RlbmVyKCk7CiAKICAgICAvLyBQ
b3NpdGlvbiAvIE9yaWVudGF0aW9uCi0gICAgRmxvYXRQb2ludDNEIG1fcG9zaXRpb247Ci0gICAg
RmxvYXRQb2ludDNEIG1fb3JpZW50YXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fdXBWZWN0b3I7
CisgICAgR3JhcGhpY3NQb2ludDNEIG1fcG9zaXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1f
b3JpZW50YXRpb247CisgICAgR3JhcGhpY3NQb2ludDNEIG1fdXBWZWN0b3I7CiAKLSAgICBGbG9h
dFBvaW50M0QgbV92ZWxvY2l0eTsKKyAgICBHcmFwaGljc1BvaW50M0QgbV92ZWxvY2l0eTsKIAog
ICAgIGRvdWJsZSBtX2RvcHBsZXJGYWN0b3I7CiAgICAgZG91YmxlIG1fc3BlZWRPZlNvdW5kOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgQXVkaW9QYW5uZXJOb2RlOjpBdWRp
b1Bhbm5lck5vZGUoQXVkaW9DbwogICAgIG1fZGlzdGFuY2VHYWluID0gQXVkaW9HYWluOjpjcmVh
dGUoImRpc3RhbmNlR2FpbiIsIDEuMCwgMC4wLCAxLjApOwogICAgIG1fY29uZUdhaW4gPSBBdWRp
b0dhaW46OmNyZWF0ZSgiY29uZUdhaW4iLCAxLjAsIDAuMCwgMS4wKTsKIAotICAgIG1fcG9zaXRp
b24gPSBGbG9hdFBvaW50M0QoMCwgMCwgMCk7Ci0gICAgbV9vcmllbnRhdGlvbiA9IEZsb2F0UG9p
bnQzRCgxLCAwLCAwKTsKLSAgICBtX3ZlbG9jaXR5ID0gRmxvYXRQb2ludDNEKDAsIDAsIDApOwor
ICAgIG1fcG9zaXRpb24gPSBHcmFwaGljc1BvaW50M0QoMCwgMCwgMCk7CisgICAgbV9vcmllbnRh
dGlvbiA9IEdyYXBoaWNzUG9pbnQzRCgxLCAwLCAwKTsKKyAgICBtX3ZlbG9jaXR5ID0gR3JhcGhp
Y3NQb2ludDNEKDAsIDAsIDApOwogICAgIAogICAgIHNldFR5cGUoTm9kZVR5cGVQYW5uZXIpOwog
CkBAIC0xNjUsOCArMTY1LDggQEAgdm9pZCBBdWRpb1Bhbm5lck5vZGU6OmdldEF6aW11dGhFbGV2
YXRpbwogICAgIGRvdWJsZSBhemltdXRoID0gMC4wOwogCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBz
b3VyY2UtbGlzdGVuZXIgdmVjdG9yCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9zaXRpb24g
PSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOwotICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VMaXN0ZW5l
ciA9IG1fcG9zaXRpb24gLSBsaXN0ZW5lclBvc2l0aW9uOworICAgIEdyYXBoaWNzUG9pbnQzRCBs
aXN0ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKKyAgICBHcmFwaGljc1Bv
aW50M0Qgc291cmNlTGlzdGVuZXIgPSBtX3Bvc2l0aW9uIC0gbGlzdGVuZXJQb3NpdGlvbjsKIAog
ICAgIGlmIChzb3VyY2VMaXN0ZW5lci5pc1plcm8oKSkgewogICAgICAgICAvLyBkZWdlbmVyYXRl
IGNhc2UgaWYgc291cmNlIGFuZCBsaXN0ZW5lciBhcmUgYXQgdGhlIHNhbWUgcG9pbnQKQEAgLTE3
OCwxOSArMTc4LDE5IEBAIHZvaWQgQXVkaW9QYW5uZXJOb2RlOjpnZXRBemltdXRoRWxldmF0aW8K
ICAgICBzb3VyY2VMaXN0ZW5lci5ub3JtYWxpemUoKTsKIAogICAgIC8vIEFsaWduIGF4ZXMKLSAg
ICBGbG9hdFBvaW50M0QgbGlzdGVuZXJGcm9udCA9IGxpc3RlbmVyKCktPm9yaWVudGF0aW9uKCk7
Ci0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyVXAgPSBsaXN0ZW5lcigpLT51cFZlY3RvcigpOwot
ICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclJpZ2h0ID0gbGlzdGVuZXJGcm9udC5jcm9zcyhsaXN0
ZW5lclVwKTsKKyAgICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJGcm9udCA9IGxpc3RlbmVyKCkt
Pm9yaWVudGF0aW9uKCk7CisgICAgR3JhcGhpY3NQb2ludDNEIGxpc3RlbmVyVXAgPSBsaXN0ZW5l
cigpLT51cFZlY3RvcigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0ZW5lclJpZ2h0ID0gbGlz
dGVuZXJGcm9udC5jcm9zcyhsaXN0ZW5lclVwKTsKICAgICBsaXN0ZW5lclJpZ2h0Lm5vcm1hbGl6
ZSgpOwogCi0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyRnJvbnROb3JtID0gbGlzdGVuZXJGcm9u
dDsKKyAgICBHcmFwaGljc1BvaW50M0QgbGlzdGVuZXJGcm9udE5vcm0gPSBsaXN0ZW5lckZyb250
OwogICAgIGxpc3RlbmVyRnJvbnROb3JtLm5vcm1hbGl6ZSgpOwogCi0gICAgRmxvYXRQb2ludDNE
IHVwID0gbGlzdGVuZXJSaWdodC5jcm9zcyhsaXN0ZW5lckZyb250Tm9ybSk7CisgICAgR3JhcGhp
Y3NQb2ludDNEIHVwID0gbGlzdGVuZXJSaWdodC5jcm9zcyhsaXN0ZW5lckZyb250Tm9ybSk7CiAK
ICAgICBkb3VibGUgdXBQcm9qZWN0aW9uID0gc291cmNlTGlzdGVuZXIuZG90KHVwKTsKIAotICAg
IEZsb2F0UG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VMaXN0ZW5lciAtIHVwUHJvamVj
dGlvbiAqIHVwOworICAgIEdyYXBoaWNzUG9pbnQzRCBwcm9qZWN0ZWRTb3VyY2UgPSBzb3VyY2VM
aXN0ZW5lciAtIHVwUHJvamVjdGlvbiAqIHVwOwogICAgIHByb2plY3RlZFNvdXJjZS5ub3JtYWxp
emUoKTsKIAogICAgIGF6aW11dGggPSAxODAuMCAqIGFjb3MocHJvamVjdGVkU291cmNlLmRvdChs
aXN0ZW5lclJpZ2h0KSkgLyBwaURvdWJsZTsKQEAgLTIzMiw4ICsyMzIsOCBAQCBmbG9hdCBBdWRp
b1Bhbm5lck5vZGU6OmRvcHBsZXJSYXRlKCkKICAgICBpZiAoZG9wcGxlckZhY3RvciA+IDAuMCkg
ewogICAgICAgICBkb3VibGUgc3BlZWRPZlNvdW5kID0gbGlzdGVuZXIoKS0+c3BlZWRPZlNvdW5k
KCk7CiAKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludDNEICZzb3VyY2VWZWxvY2l0eSA9IG1fdmVs
b2NpdHk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQzRCAmbGlzdGVuZXJWZWxvY2l0eSA9IGxp
c3RlbmVyKCktPnZlbG9jaXR5KCk7CisgICAgICAgIGNvbnN0IEdyYXBoaWNzUG9pbnQzRCAmc291
cmNlVmVsb2NpdHkgPSBtX3ZlbG9jaXR5OworICAgICAgICBjb25zdCBHcmFwaGljc1BvaW50M0Qg
Jmxpc3RlbmVyVmVsb2NpdHkgPSBsaXN0ZW5lcigpLT52ZWxvY2l0eSgpOwogCiAgICAgICAgIC8v
IERvbid0IGJvdGhlciBpZiBib3RoIHNvdXJjZSBhbmQgbGlzdGVuZXIgaGF2ZSBubyB2ZWxvY2l0
eQogICAgICAgICBib29sIHNvdXJjZUhhc1ZlbG9jaXR5ID0gIXNvdXJjZVZlbG9jaXR5LmlzWmVy
bygpOwpAQCAtMjQxLDggKzI0MSw4IEBAIGZsb2F0IEF1ZGlvUGFubmVyTm9kZTo6ZG9wcGxlclJh
dGUoKQogCiAgICAgICAgIGlmIChzb3VyY2VIYXNWZWxvY2l0eSB8fCBsaXN0ZW5lckhhc1ZlbG9j
aXR5KSB7CiAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZSB0byBsaXN0ZW5lciB2
ZWN0b3IKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBsaXN0ZW5lclBvc2l0aW9uID0gbGlzdGVu
ZXIoKS0+cG9zaXRpb24oKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBzb3VyY2VUb0xpc3Rl
bmVyID0gbV9wb3NpdGlvbiAtIGxpc3RlbmVyUG9zaXRpb247CisgICAgICAgICAgICBHcmFwaGlj
c1BvaW50M0QgbGlzdGVuZXJQb3NpdGlvbiA9IGxpc3RlbmVyKCktPnBvc2l0aW9uKCk7CisgICAg
ICAgICAgICBHcmFwaGljc1BvaW50M0Qgc291cmNlVG9MaXN0ZW5lciA9IG1fcG9zaXRpb24gLSBs
aXN0ZW5lclBvc2l0aW9uOwogCiAgICAgICAgICAgICBkb3VibGUgc291cmNlTGlzdGVuZXJNYWdu
aXR1ZGUgPSBzb3VyY2VUb0xpc3RlbmVyLmxlbmd0aCgpOwogCkBAIC0yNzIsNyArMjcyLDcgQEAg
ZmxvYXQgQXVkaW9QYW5uZXJOb2RlOjpkb3BwbGVyUmF0ZSgpCiAKIGZsb2F0IEF1ZGlvUGFubmVy
Tm9kZTo6ZGlzdGFuY2VDb25lR2FpbigpCiB7Ci0gICAgRmxvYXRQb2ludDNEIGxpc3RlbmVyUG9z
aXRpb24gPSBsaXN0ZW5lcigpLT5wb3NpdGlvbigpOworICAgIEdyYXBoaWNzUG9pbnQzRCBsaXN0
ZW5lclBvc2l0aW9uID0gbGlzdGVuZXIoKS0+cG9zaXRpb24oKTsKIAogICAgIGRvdWJsZSBsaXN0
ZW5lckRpc3RhbmNlID0gbV9wb3NpdGlvbi5kaXN0YW5jZVRvKGxpc3RlbmVyUG9zaXRpb24pOwog
ICAgIGRvdWJsZSBkaXN0YW5jZUdhaW4gPSBtX2Rpc3RhbmNlRWZmZWN0LmdhaW4obGlzdGVuZXJE
aXN0YW5jZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUu
aAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkF1ZGlv
Tm9kZS5oIgogI2luY2x1ZGUgIkNvbmUuaCIKICNpbmNsdWRlICJEaXN0YW5jZS5oIgotI2luY2x1
ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUG9pbnQzRC5oIgogI2luY2x1
ZGUgIlBhbm5lci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtNzUsMTYgKzc1LDE2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBhbm5pbmdNb2RlbCh1bnNpZ25lZCBzaG9ydCk7CiAK
ICAgICAvLyBQb3NpdGlvbgotICAgIEZsb2F0UG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fcG9zaXRpb247IH0KLSAgICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHopIHsgbV9wb3NpdGlvbiA9IEZsb2F0UG9pbnQzRCh4LCB5LCB6KTsgfQorICAgIEdy
YXBoaWNzUG9pbnQzRCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAg
ICB2b2lkIHNldFBvc2l0aW9uKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsgbV9wb3NpdGlv
biA9IEdyYXBoaWNzUG9pbnQzRCh4LCB5LCB6KTsgfQogCiAgICAgLy8gT3JpZW50YXRpb24KLSAg
ICBGbG9hdFBvaW50M0Qgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9
Ci0gICAgdm9pZCBzZXRPcmllbnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1f
b3JpZW50YXRpb24gPSBGbG9hdFBvaW50M0QoeCwgeSwgeik7IH0KKyAgICBHcmFwaGljc1BvaW50
M0Qgb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgdm9pZCBz
ZXRPcmllbnRhdGlvbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7IG1fb3JpZW50YXRpb24g
PSBHcmFwaGljc1BvaW50M0QoeCwgeSwgeik7IH0KIAogICAgIC8vIFZlbG9jaXR5Ci0gICAgRmxv
YXRQb2ludDNEIHZlbG9jaXR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQotICAgIHZv
aWQgc2V0VmVsb2NpdHkoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0g
RmxvYXRQb2ludDNEKHgsIHksIHopOyB9CisgICAgR3JhcGhpY3NQb2ludDNEIHZlbG9jaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV92ZWxvY2l0eTsgfQorICAgIHZvaWQgc2V0VmVsb2NpdHkoZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgeikgeyBtX3ZlbG9jaXR5ID0gR3JhcGhpY3NQb2ludDNEKHgsIHks
IHopOyB9CiAKICAgICAvLyBEaXN0YW5jZSBwYXJhbWV0ZXJzCiAgICAgdW5zaWduZWQgc2hvcnQg
ZGlzdGFuY2VNb2RlbCgpIHsgcmV0dXJuIG1fZGlzdGFuY2VFZmZlY3QubW9kZWwoKTsgfQpAQCAt
MTI5LDkgKzEyOSw5IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFBhbm5lcj4gbV9wYW5uZXI7CiAg
ICAgdW5zaWduZWQgbV9wYW5uaW5nTW9kZWw7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9wb3NpdGlv
bjsKLSAgICBGbG9hdFBvaW50M0QgbV9vcmllbnRhdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV92
ZWxvY2l0eTsKKyAgICBHcmFwaGljc1BvaW50M0QgbV9wb3NpdGlvbjsKKyAgICBHcmFwaGljc1Bv
aW50M0QgbV9vcmllbnRhdGlvbjsKKyAgICBHcmFwaGljc1BvaW50M0QgbV92ZWxvY2l0eTsKIAog
ICAgIC8vIEdhaW4KICAgICBSZWZQdHI8QXVkaW9HYWluPiBtX2Rpc3RhbmNlR2FpbjsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1
YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50
L1NpemUgYW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNz
IGNsYXNzZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRs
eSBjaGFuZ2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQg
b24gQ0cgcGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBm
b3IgdGhlc2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAg
ICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaDoKKyAgICAgICAgKFdlYktpdDo6dG9H
cmFwaGljc1JlY3QpOgorICAgICAgICAoV2ViS2l0Ojp0b0FQSSk6CisgICAgICAgICogU2hhcmVk
L0RpY3Rpb25hcnlQb3B1cEluZm8uaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKENvcmVJ
UEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6
CisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVs
RXZlbnQ6OmRlbHRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViV2hlZWxFdmVudDo6d2hlZWxUaWNr
cyk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKiBTaGFy
ZWQvV2ViV2hlZWxFdmVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYldoZWVsRXZlbnQ6Oldl
YldoZWVsRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWly
by5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6cGFpbnQpOgorICAgICAg
ICAqIFNoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3Rr
L1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6
Y3JlYXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3Rv
cnkubW06CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxF
dmVudCk6CisgICAgICAgICogU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KToKKyAgICAg
ICAgKiBTaGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0Rldmlj
ZVNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJT
cGFjZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OnNob3dDb3JyZWN0aW9uUGFuZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRDdXJyZW50TW91c2VMb2NhdGlvbl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9GaW5kSW5kaWNh
dG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6RmluZEluZGljYXRvcik6CisgICAgICAgIChXZWJL
aXQ6OmluZmxhdGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6ZnJhbWVS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6cGF0aFdpdGhSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmRyYXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9GaW5kSW5k
aWNhdG9yLmg6CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OnNlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6dGV4
dFJlY3RzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhUHJveHk6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyk6CisgICAg
ICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cGFpbnQpOgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRyb3BUaWxlc091dHNpZGVSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjptYXBUb0NvbnRlbnRzKToKKyAgICAg
ICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjptYXBGcm9tQ29udGVudHMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKFdlYktp
dDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0RmluZEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6OmNvYWxlc2NlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3SGVhZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
aG93Q29ycmVjdGlvblBhbmVsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVu
dDo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6d2luZG93
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViVUlDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25QYW5l
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tOgorICAgICAg
ICAoV2ViS2l0OjpDb3JyZWN0aW9uUGFuZWw6OnNob3cpOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6Y29udmVydFRv
RGV2aWNlU3BhY2UpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmNvbnZlcnRUb1VzZXJTcGFj
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OmNvbnZlcnRUb0RldmljZVNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y29udmVy
dFRvVXNlclNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAgICAg
ICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAg
ICAgKFdLQnVuZGxlUGFnZU92ZXJsYXlTZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6bnVtYmVyT2ZQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMubW06CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpjb252ZXJ0UG9pbnQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5YMTEuY3BwOgorICAgICAgICAo
V2ViS2l0OjpzZXRYQnV0dG9uRXZlbnRGaWVsZHNCeVdlYldoZWVsRXZlbnQpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6
Y3VzdG9tSGlnaGxpZ2h0UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6
cGFpbnRDdXN0b21IaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6
OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50
OjpwYWludEN1c3RvbVNjcm9sbENvcm5lcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpz
ZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpkaWRTeW5j
aHJvbml6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpuZWVkc0Rpc3Bs
YXlSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGVJbnRv
VGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1Rv
VUlQcm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJF
ZGl0b3JDbGllbnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hv
d0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IpOgorICAgICAg
ICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IpOgorICAgICAgICAo
V2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2NhbGVkU25h
cHNob3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpi
ZWdpblByaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9y
UHJpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UmVjdFRvUERGKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVy
VHJlZUhvc3RDQS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RDQTo6c2l6ZURp
ZENoYW5nZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9j
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5n
QXJlYVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6cGFpbnRJbnRv
Qml0bWFwKToKKyAgICAgICAgKiBtYWMvV2ViS2l0Mi5vcmRlcjoKKwogMjAxMS0wNy0xNCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Vi
a2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TY3Jp
cHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBA
QCBkZWYgc3RydWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAgICdXZWJDb3Jl
OjpBbmltYXRpb24nLAogICAgICAgICAnV2ViQ29yZTo6RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVu
dCcsCiAgICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCi0gICAgICAgICdX
ZWJDb3JlOjpGbG9hdFBvaW50M0QnLAorICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NQb2ludDNE
JywKICAgICAgICAgJ1dlYkNvcmU6OkdyYW1tYXJEZXRhaWwnLAogICAgICAgICAnV2ViQ29yZTo6
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24nLAogICAgICAgICAnV2ViQ29yZTo6S2V5cHJlc3ND
b21tYW5kJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9EaWN0aW9uYXJ5UG9wdXBJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0RpY3Rpb25hcnlQb3B1cElu
Zm8uaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRGljdGlvbmFy
eVBvcHVwSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIERp
Y3Rpb25hcnlQb3B1cEluZm9faAogCiAjaW5jbHVkZSAiRm9udEluZm8uaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzUG9pbnQuaD4K
IAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OSw3
ICs0OSw3IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJbmZvIHsKICAgICAgICAgSG90S2V5CiAg
ICAgfTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzUG9pbnQgb3JpZ2luOwogICAgIEZvbnRJbmZvIGZvbnRJbmZvOwogICAgIFR5cGUgdHlw
ZTsKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAKICNp
ZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1BvaW50
M0QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+CkBAIC02MiwzNiArNjIsMzYgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCi12b2lkIEFy
Z3VtZW50Q29kZXI8RmxvYXRQb2ludD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3JhcGhp
Y3NQb2ludD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNz
UG9pbnQmIGZsb2F0UG9pbnQpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
Pjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQpOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8
R3JhcGhpY3NQb2ludD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50KTsKIH0KIAotYm9vbCBB
cmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQorYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzUG9p
bnQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHcmFwaGljc1BvaW50JiBmbG9h
dFBvaW50KQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQ+Ojpk
ZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludCk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29k
ZXI8R3JhcGhpY3NQb2ludD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFBvaW50KTsKIH0KIAogCi12
b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpCit2b2lkIEFyZ3VtZW50Q29kZXI8R3Jh
cGhpY3NSZWN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgR3JhcGhp
Y3NSZWN0JiBmbG9hdFJlY3QpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFJlY3Q+
OjplbmNvZGUoZW5jb2RlciwgZmxvYXRSZWN0KTsKKyAgICBTaW1wbGVBcmd1bWVudENvZGVyPEdy
YXBoaWNzUmVjdD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFJlY3QpOwogfQogCi1ib29sIEFyZ3Vt
ZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxv
YXRSZWN0JiBmbG9hdFJlY3QpCitib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NSZWN0Pjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgR3JhcGhpY3NSZWN0JiBmbG9hdFJlY3QpCiB7
Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRSZWN0Pjo6ZGVjb2RlKGRlY29k
ZXIsIGZsb2F0UmVjdCk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NS
ZWN0Pjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UmVjdCk7CiB9CiAKIAotdm9pZCBBcmd1bWVudENv
ZGVyPEZsb2F0U2l6ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgZmxvYXRTaXplKQordm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZmxvYXRT
aXplKQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRTaXplPjo6ZW5jb2RlKGVuY29k
ZXIsIGZsb2F0U2l6ZSk7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxHcmFwaGljc1NpemU+Ojpl
bmNvZGUoZW5jb2RlciwgZmxvYXRTaXplKTsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPEZsb2F0
U2l6ZT46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEZsb2F0U2l6ZSYgZmxvYXRT
aXplKQorYm9vbCBBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmRlY29kZShBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIEdyYXBoaWNzU2l6ZSYgZmxvYXRTaXplKQogewotICAgIHJldHVybiBT
aW1wbGVBcmd1bWVudENvZGVyPEZsb2F0U2l6ZT46OmRlY29kZShkZWNvZGVyLCBmbG9hdFNpemUp
OworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNzU2l6ZT46OmRlY29kZShk
ZWNvZGVyLCBmbG9hdFNpemUpOwogfQogCiAKQEAgLTU1MiwxNCArNTUyLDE0IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+OjoKIAogI2lmIFBMQVRGT1JNKFFUKQogCi12
b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlciwgY29uc3QgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCit2b2lkIEFyZ3VtZW50
Q29kZXI8R3JhcGhpY3NQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rlciwg
Y29uc3QgR3JhcGhpY3NQb2ludDNEJiBmbG9hdFBvaW50M0QpCiB7Ci0gICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoZW5jb2RlciwgZmxvYXRQb2ludDNEKTsKKyAg
ICBTaW1wbGVBcmd1bWVudENvZGVyPEdyYXBoaWNzUG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBm
bG9hdFBvaW50M0QpOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0Qp
Citib29sIEFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2ludDNEPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgR3JhcGhpY3NQb2ludDNEJiBmbG9hdFBvaW50M0QpCiB7Ci0gICAgcmV0
dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKGRlY29kZXIsIGZs
b2F0UG9pbnQzRCk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8R3JhcGhpY3NQb2lu
dDNEPjo6ZGVjb2RlKGRlY29kZXIsIGZsb2F0UG9pbnQzRCk7CiB9CiAKIApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIENyZWRlbnRpYWw7CiAgICAgY2xhc3MgQ3Vyc29yOwogICAgIGNsYXNzIERhdGFiYXNlRGV0
YWlsczsKLSAgICBjbGFzcyBGbG9hdFBvaW50OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBj
bGFzcyBGbG9hdFNpemU7CisgICAgY2xhc3MgR3JhcGhpY3NQb2ludDsKKyAgICBjbGFzcyBHcmFw
aGljc1JlY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NTaXplOwogICAgIGNsYXNzIEhUVFBIZWFkZXJN
YXA7CiAgICAgY2xhc3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UmVjdDsKQEAgLTYzLDcgKzYz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKFFUKQogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEFuaW1hdGlvbjsKLSAgICBjbGFzcyBGbG9hdFBvaW50M0Q7Cisg
ICAgY2xhc3MgR3JhcGhpY3NQb2ludDNEOwogICAgIGNsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uOwogICAgIGNsYXNzIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICBjbGFzcyBQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjsKQEAgLTgxLDE5ICs4MSwxOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKIAotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludCYp
OwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1BvaW50
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUG9pbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiwgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UmVjdCYpOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1JlY3Q+IHsK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rlcios
IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpGbG9hdFNpemU+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1NpemU+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NTaXplJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNv
cmU6OkdyYXBoaWNzU2l6ZSYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpJbnRQb2ludD4gewpAQCAtMjAzLDkgKzIwMyw5IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKIH07CiAKICNpZiBQTEFURk9STShRVCkKLXRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQzRCYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJD
b3JlOjpGbG9hdFBvaW50M0QmKTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6R3JhcGhpY3NQb2ludDNEPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQzRCYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpHcmFwaGljc1BvaW50M0QmKTsK
IH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NyBAQAogLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBtb3ZlIHRvIG1ha2VpbmcgdGhlIFdl
YkNvcmUvUGxhdGZvcm1Gb29FdmVudHMgdHJpdmlhbCBjbGFzc2VzIHNvIHRoYXQKIC8vIHdlIGNh
biB1c2UgdGhlbSBhcyB0aGUgZXZlbnQgdHlwZS4KIAotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRT
aXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1NpemUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFBvaW50Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE3
NywxNSArMTc3LDE1IEBAIHB1YmxpYzoKIAogICAgIFdlYldoZWVsRXZlbnQoKSB7IH0KIAotICAg
IFdlYldoZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3Jh
bnVsYXJpdHksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisgICAgV2ViV2hlZWxFdmVu
dChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJiBk
ZWx0YSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplJiB3aGVlbFRpY2tzLCBHcmFudWxhcml0
eSwgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAg
V2ViV2hlZWxFdmVudChUeXBlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBkZWx0YSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiB3aGVlbFRpY2tzLCBHcmFu
dWxhcml0eSwgUGhhc2UgcGhhc2UsIFBoYXNlIG1vbWVudHVtUGhhc2UsYm9vbCBoYXNQcmVjaXNl
U2Nyb2xsaW5nRGVsdGFzLCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOworICAgIFdlYldo
ZWVsRXZlbnQoVHlwZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
U2l6ZSYgZGVsdGEsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3Jh
bnVsYXJpdHksIFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLGJvb2wgaGFzUHJlY2lz
ZVNjcm9sbGluZ0RlbHRhcywgTW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKICNlbmRpZgog
CiAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3Bvc2l0aW9uOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplIGRlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9kZWx0YTsgfQotICAgIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSB3aGVlbFRpY2tzKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbFRpY2tz
OyB9CisgICAgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTaXplIGRlbHRhKCkgY29uc3QgeyByZXR1
cm4gbV9kZWx0YTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU2l6ZSB3aGVlbFRpY2tz
KCkgY29uc3QgeyByZXR1cm4gbV93aGVlbFRpY2tzOyB9CiAgICAgR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHcmFudWxhcml0eT4obV9ncmFudWxh
cml0eSk7IH0KICNpZiBQTEFURk9STShNQUMpCiAgICAgUGhhc2UgcGhhc2UoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxQaGFzZT4obV9waGFzZSk7IH0KQEAgLTIwMSw4ICsyMDEsOCBAQCBw
cml2YXRlOgogCiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2Rl
bHRhOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3doZWVsVGlja3M7CisgICAgV2ViQ29yZTo6
R3JhcGhpY3NTaXplIG1fZGVsdGE7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NTaXplIG1fd2hlZWxU
aWNrczsKICAgICB1aW50MzJfdCBtX2dyYW51bGFyaXR5OyAvLyBHcmFudWxhcml0eQogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB1aW50MzJfdCBtX3BoYXNlOyAvLyBQaGFzZQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDggKzI0LDggQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUg
IkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKIApAQCAtNTUsOSArNTUsOSBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICBX
ZWJMYXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwogCi0gICAgRmxvYXRQb2lu
dCBwb3M7Ci0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIEZsb2F0U2l6ZSBzaXpl
OworICAgIEdyYXBoaWNzUG9pbnQgcG9zOworICAgIEdyYXBoaWNzUG9pbnQzRCBhbmNob3JQb2lu
dDsKKyAgICBHcmFwaGljc1NpemUgc2l6ZTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CiAgICAg
SW50UmVjdCBjb250ZW50c1JlY3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViV2hl
ZWxFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYldoZWVs
RXZlbnQuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJX
aGVlbEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7ICAgIAogCi1XZWJXaGVlbEV2ZW50
OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25z
dCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEsIGNvbnN0
IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVy
cyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCitXZWJXaGVlbEV2ZW50OjpXZWJXaGVlbEV2
ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEsIGNvbnN0IEdyYXBoaWNz
U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIE1vZGlmaWVycyBtb2Rp
ZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMs
IHRpbWVzdGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgLCBtX2dsb2JhbFBv
c2l0aW9uKGdsb2JhbFBvc2l0aW9uKQpAQCAtNDksNyArNDksNyBAQCBXZWJXaGVlbEV2ZW50OjpX
ZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgCiB9CiAKICNpZiBQTEFURk9STShNQUMpCi1XZWJXaGVl
bEV2ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
LCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEs
IGNvbnN0IEZsb2F0U2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFBo
YXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXMsIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCitXZWJXaGVlbEV2
ZW50OjpXZWJXaGVlbEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBj
b25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIGNvbnN0IEdyYXBoaWNzU2l6ZSYgZGVsdGEs
IGNvbnN0IEdyYXBoaWNzU2l6ZSYgd2hlZWxUaWNrcywgR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IFBoYXNlIHBoYXNlLCBQaGFzZSBtb21lbnR1bVBoYXNlLCBib29sIGhhc1ByZWNpc2VTY3JvbGxp
bmdEZWx0YXMsIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApCiAgICAgOiBX
ZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKICAgICAsIG1fcG9zaXRpb24ocG9z
aXRpb24pCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQpJbmRleDogU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRl
eHRNZW51SXRlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvVHlwZVRy
YWl0cy5oPgpAQCAtMTg4LDkgKzE4OCw5IEBAIGlubGluZSBQcm94eWluZ1JlZlB0cjxXZWJVUkxS
ZXNwb25zZT4gdG8KIAogLyogR2VvbWV0cnkgY29udmVyc2lvbnMgKi8KIAotaW5saW5lIFdlYkNv
cmU6OkZsb2F0UmVjdCB0b0Zsb2F0UmVjdChjb25zdCBXS1JlY3QmIHdrUmVjdCkKK2lubGluZSBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QgdG9HcmFwaGljc1JlY3QoY29uc3QgV0tSZWN0JiB3a1JlY3Qp
CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdChzdGF0aWNfY2FzdDxmbG9hdD4od2tS
ZWN0Lm9yaWdpbi54KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueSksCisgICAg
cmV0dXJuIFdlYkNvcmU6OkdyYXBoaWNzUmVjdChzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9y
aWdpbi54KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0LnNpemUud2lkdGgp
LCBzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0LnNpemUuaGVpZ2h0KSk7CiB9CiAKQEAgLTIxMCw3
ICsyMTAsNyBAQCBpbmxpbmUgV2ViQ29yZTo6SW50UmVjdCB0b0ludFJlY3QoY29uc3QgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih3a1JlY3Quc2l6ZS53aWR0
aCksIHN0YXRpY19jYXN0PGludD4od2tSZWN0LnNpemUuaGVpZ2h0KSk7CiB9CiAKLWlubGluZSBX
S1JlY3QgdG9BUEkoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQoraW5saW5lIFdLUmVj
dCB0b0FQSShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgV0tSZWN0
IHdrUmVjdDsKICAgICB3a1JlY3Qub3JpZ2luLnggPSByZWN0LngoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxl
Qml0bWFwQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgU2hh
cmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9z
aXplLndpZHRoKCkgKiA0KSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNS
ZWN0LnNpemUoKSk7CisgICAgR3JhcGhpY3NSZWN0IGRlc3RSZWN0KGRzdFBvaW50LCBzcmNSZWN0
LnNpemUoKSk7CiAgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0Nv
bnRleHQoc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsICZjb250ZXh0KTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9XZWJFdmVudEZhY3RvcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvV2ViRXZlbnRGYWN0b3J5LmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL1dlYkV2ZW50RmFj
dG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw4ICsxNTAsOCBAQCBXZWJXaGVlbEV2ZW50
IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2Vi
RXZlbnQ6OldoZWVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGV2ZW50LT5j
YW52YXMueCAtIHBvc2l0aW9uLT54LCBldmVudC0+Y2FudmFzLnkgLSBwb3NpdGlvbi0+eSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoZXZlbnQtPmNhbnZhcy54LCBldmVudC0+
Y2FudmFzLnkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShkZWx0YVgsIGRl
bHRhWSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKHdoZWVsVGlja3NYLCB3
aGVlbFRpY2tzWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NTaXplKGRlbHRh
WCwgZGVsdGFZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc1NpemUod2hlZWxU
aWNrc1gsIHdoZWVsVGlja3NZKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXaGVlbEV2
ZW50OjpTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2RpZmllcnNGb3JFdmVudChldmVudC0+bW9kaWZpZXJzKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBldmVudC0+dGltZXN0YW1wKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
V2ViRXZlbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcs
MTkgKzEzNywxOSBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAg
ICAgZ2RrX2V2ZW50X2dldF9jb29yZHMoZXZlbnQsICZ4LCAmeSk7CiAgICAgZ2RrX2V2ZW50X2dl
dF9yb290X2Nvb3JkcyhldmVudCwgJnhSb290LCAmeVJvb3QpOwogCi0gICAgRmxvYXRTaXplIHdo
ZWVsVGlja3M7CisgICAgR3JhcGhpY3NTaXplIHdoZWVsVGlja3M7CiAgICAgc3dpdGNoIChldmVu
dC0+c2Nyb2xsLmRpcmVjdGlvbikgewogICAgIGNhc2UgR0RLX1NDUk9MTF9VUDoKLSAgICAgICAg
d2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgwLCAxKTsKKyAgICAgICAgd2hlZWxUaWNrcyA9IEdyYXBo
aWNzU2l6ZSgwLCAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHREtfU0NST0xMX0RPV046
Ci0gICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUoMCwgLTEpOworICAgICAgICB3aGVlbFRp
Y2tzID0gR3JhcGhpY3NTaXplKDAsIC0xKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHREtf
U0NST0xMX0xFRlQ6Ci0gICAgICAgIHdoZWVsVGlja3MgPSBGbG9hdFNpemUoMSwgMCk7CisgICAg
ICAgIHdoZWVsVGlja3MgPSBHcmFwaGljc1NpemUoMSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR0RLX1NDUk9MTF9SSUdIVDoKLSAgICAgICAgd2hlZWxUaWNrcyA9IEZsb2F0U2l6ZSgt
MSwgMCk7CisgICAgICAgIHdoZWVsVGlja3MgPSBHcmFwaGljc1NpemUoLTEsIDApOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTE1OCw3ICsxNTgsNyBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2Vi
CiAgICAgLy8gRklYTUU6IFtHVEtdIEFkZCBhIHNldHRpbmcgdG8gY2hhbmdlIHRoZSBwaXhlbHMg
cGVyIGxpbmUgdXNlZCBmb3Igc2Nyb2xsaW5nCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0ODI2CiAgICAgZmxvYXQgc3RlcCA9IHN0YXRpY19jYXN0PGZs
b2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCkpOwotICAgIEZsb2F0U2l6ZSBkZWx0
YSh3aGVlbFRpY2tzLndpZHRoKCkgKiBzdGVwLCB3aGVlbFRpY2tzLmhlaWdodCgpICogc3RlcCk7
CisgICAgR3JhcGhpY3NTaXplIGRlbHRhKHdoZWVsVGlja3Mud2lkdGgoKSAqIHN0ZXAsIHdoZWVs
VGlja3MuaGVpZ2h0KCkgKiBzdGVwKTsKIAogICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2
ZW50OjpXaGVlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCh4LCB5KSwKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk3LDcgKzEwOTcsNyBAQCBXZWJXaGVlbEV2ZW50IFdl
YkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgV2ViRXZlbnQ6Ok1vZGlmaWVycyBtb2RpZmll
cnMgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwogICAgIGRvdWJsZSB0aW1l
c3RhbXAgICAgICAgICAgICAgICAgICAgICAgICA9IFtldmVudCB0aW1lc3RhbXBdOwogICAgIAot
ICAgIHJldHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgSW50UG9pbnQocG9zaXRp
b24pLCBJbnRQb2ludChnbG9iYWxQb3NpdGlvbiksIEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSks
IEZsb2F0U2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgcGhhc2Us
IG1vbWVudHVtUGhhc2UsIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIG1vZGlmaWVycywgdGlt
ZXN0YW1wKTsKKyAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIEludFBv
aW50KHBvc2l0aW9uKSwgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb24pLCBHcmFwaGljc1NpemUoZGVs
dGFYLCBkZWx0YVkpLCBHcmFwaGljc1NpemUod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwgZ3Jh
bnVsYXJpdHksIHBoYXNlLCBtb21lbnR1bVBoYXNlLCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7CiB9CiAKIFdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKikK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvV2ViRXZlbnRG
YWN0b3J5UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8
UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFLZXlFdmVudD4KICNpbmNsdWRlIDxXZWJDb3JlL0lu
dFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc1BvaW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkV2ZW50OjpNb2Rp
ZmllcnMgbW9kaWZpCiAKIFdlYk1vdXNlRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJN
b3VzZUV2ZW50KFFHcmFwaGljc1NjZW5lTW91c2VFdmVudCogZXZlbnQsIGludCBldmVudENsaWNr
Q291bnQpCiB7Ci0gICAgRmxvYXRQb2ludCBkZWx0YShldmVudC0+cG9zKCkueCgpIC0gZXZlbnQt
Pmxhc3RQb3MoKS54KCksIGV2ZW50LT5wb3MoKS55KCkgLSBldmVudC0+bGFzdFBvcygpLnkoKSk7
CisgICAgR3JhcGhpY3NQb2ludCBkZWx0YShldmVudC0+cG9zKCkueCgpIC0gZXZlbnQtPmxhc3RQ
b3MoKS54KCksIGV2ZW50LT5wb3MoKS55KCkgLSBldmVudC0+bGFzdFBvcygpLnkoKSk7CiAKICAg
ICBXZWJFdmVudDo6VHlwZSB0eXBlICAgICAgICAgICAgID0gd2ViRXZlbnRUeXBlRm9yRXZlbnQo
ZXZlbnQpOwogICAgIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBidXR0b24gICAgPSBtb3VzZUJ1dHRv
bkZvckV2ZW50KGV2ZW50KTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgZGVsdGFYICo9IChmdWxsVGljaykgPyBRQXBwbGlj
YXRpb246OndoZWVsU2Nyb2xsTGluZXMoKSAqIGNEZWZhdWx0UXRTY3JvbGxTdGVwIDogMTsKICAg
ICBkZWx0YVkgKj0gKGZ1bGxUaWNrKSA/IFFBcHBsaWNhdGlvbjo6d2hlZWxTY3JvbGxMaW5lcygp
ICogY0RlZmF1bHRRdFNjcm9sbFN0ZXAgOiAxOwogCi0gICAgcmV0dXJuIFdlYldoZWVsRXZlbnQo
V2ViRXZlbnQ6OldoZWVsLCBlLT5wb3MoKS50b1BvaW50KCksIGUtPnNjcmVlblBvcygpLCBGbG9h
dFNpemUoZGVsdGFYLCBkZWx0YVkpLCBGbG9hdFNpemUod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZ
KSwgZ3JhbnVsYXJpdHksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKKyAgICByZXR1cm4gV2ViV2hl
ZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIGUtPnBvcygpLnRvUG9pbnQoKSwgZS0+c2NyZWVuUG9z
KCksIEdyYXBoaWNzU2l6ZShkZWx0YVgsIGRlbHRhWSksIEdyYXBoaWNzU2l6ZSh3aGVlbFRpY2tz
WCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJzLCB0aW1lc3RhbXApOwogfQog
CiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVu
dChRS2V5RXZlbnQqIGV2ZW50KQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL3dpbi9XZWJF
dmVudEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC93aW4v
V2ViRXZlbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvd2luL1dlYkV2ZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MCw3ICs0
NDAsNyBAQCBXZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJFdmVudDo6V2hlZWwsIHBv
c2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRT
aXplKHdoZWVsVGlja3NYLCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBtb2RpZmllcnMsIHRp
bWVzdGFtcCk7CisgICAgcmV0dXJuIFdlYldoZWVsRXZlbnQoV2ViRXZlbnQ6OldoZWVsLCBwb3Np
dGlvbiwgZ2xvYmFsUG9zaXRpb24sIEdyYXBoaWNzU2l6ZShkZWx0YVgsIGRlbHRhWSksIEdyYXBo
aWNzU2l6ZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCBncmFudWxhcml0eSwgbW9kaWZpZXJz
LCB0aW1lc3RhbXApOwogfQogCiBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3Jl
YXRlV2ViS2V5Ym9hcmRFdmVudChIV05EIGh3bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdwYXJh
bSwgTFBBUkFNIGxwYXJhbSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5k
aWNhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZElu
ZGljYXRvci5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0ZpbmRJbmRpY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRp
YyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEFscGhhID0gMjUKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLVBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3Qg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKK1Bhc3NSZWZQdHI8
RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IEdyYXBoaWNzUmVjdCYg
c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxHcmFwaGljc1Jl
Y3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKIHsKICAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb250ZW50
SW1hZ2VIYW5kbGUpOwogICAgIGlmICghY29udGVudEltYWdlKQpAQCAtODcsNyArODcsNyBAQCBQ
YXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+IEZpbmRJbmRpY2F0b3I6CiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGaW5kSW5kaWNhdG9yKHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCB0
ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29udGVudEltYWdlLnJlbGVhc2Uo
KSkpOwogfQogCi1GaW5kSW5kaWNhdG9yOjpGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywg
UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZSkKK0ZpbmRJbmRpY2F0b3I6
OkZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4m
IHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gY29udGVudEltYWdlKQogICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29y
ZGluYXRlcyhzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcykKICAgICAsIG1fdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMpCiAgICAgLCBtX2NvbnRlbnRJbWFnZShjb250ZW50SW1hZ2UpCkBAIC05OCwxOCAr
OTgsMTggQEAgRmluZEluZGljYXRvcjo6fkZpbmRJbmRpY2F0b3IoKQogewogfQogCi1zdGF0aWMg
RmxvYXRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgaW5mbGF0
ZVgsIGZsb2F0IGluZmxhdGVZKQorc3RhdGljIEdyYXBoaWNzUmVjdCBpbmZsYXRlUmVjdChjb25z
dCBHcmFwaGljc1JlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVYLCBmbG9hdCBpbmZsYXRlWSkKIHsK
LSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsKKyAgICBHcmFwaGljc1JlY3QgaW5m
bGF0ZWRSZWN0ID0gcmVjdDsKICAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwog
ICAgIGluZmxhdGVkUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7CiAgICAgCiAgICAgcmV0dXJuIGlu
ZmxhdGVkUmVjdDsKIH0KIAotRmxvYXRSZWN0IEZpbmRJbmRpY2F0b3I6OmZyYW1lUmVjdCgpIGNv
bnN0CitHcmFwaGljc1JlY3QgRmluZEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueCgp
IC0gbGVmdEJvcmRlclRoaWNrbmVzcywgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
cy55KCkgLSB0b3BCb3JkZXJUaGlja25lc3MsCisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChtX3Nl
bGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLngoKSAtIGxlZnRCb3JkZXJUaGlja25lc3Ms
IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueSgpIC0gdG9wQm9yZGVyVGhpY2tu
ZXNzLAogICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGlu
YXRlcy53aWR0aCgpICsgcmlnaHRCb3JkZXJUaGlja25lc3MgKyBsZWZ0Qm9yZGVyVGhpY2tuZXNz
LAogICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
cy5oZWlnaHQoKSArIHRvcEJvcmRlclRoaWNrbmVzcyArIGJvdHRvbUJvcmRlclRoaWNrbmVzcyk7
CiB9CkBAIC0xMzQsMTAgKzEzNCwxMCBAQCBzdGF0aWMgQ29sb3IgZ3JhZGllbnREYXJrQ29sb3Io
KQogICAgIHJldHVybiBDb2xvcihncmFkaWVudERhcmtSZWQsIGdyYWRpZW50RGFya0dyZWVuLCBn
cmFkaWVudERhcmtCbHVlLCBncmFkaWVudERhcmtBbHBoYSk7CiB9CiAKLXN0YXRpYyBQYXRoIHBh
dGhXaXRoUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBwYXRoUmVjdCwgZmxvYXQgcmFkaXVz
KQorc3RhdGljIFBhdGggcGF0aFdpdGhSb3VuZGVkUmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHBh
dGhSZWN0LCBmbG9hdCByYWRpdXMpCiB7CiAgICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocGF0aFJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOworICAgIHBhdGgu
YWRkUm91bmRlZFJlY3QocGF0aFJlY3QsIEdyYXBoaWNzU2l6ZShyYWRpdXMsIHJhZGl1cykpOwog
CiAgICAgcmV0dXJuIHBhdGg7CiB9CkBAIC0xNDUsMTUgKzE0NSwxNSBAQCBzdGF0aWMgUGF0aCBw
YXRoV2l0aFJvdW5kZWRSZWN0KGNvbnN0IEZsCiB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
IHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0
Q29vcmRpbmF0ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRmxvYXRSZWN0IHRleHRSZWN0ID0g
bV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKKyAgICAgICAgR3JhcGhp
Y3NSZWN0IHRleHRSZWN0ID0gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tp
XTsKICAgICAgICAgdGV4dFJlY3QubW92ZShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJU
aGlja25lc3MpOwogCi0gICAgICAgIEZsb2F0UmVjdCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJl
Y3QodGV4dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRp
Y2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKLSAgICAgICAgRmxvYXRSZWN0IGlubmVy
UGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVM
aWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOworICAgICAgICBH
cmFwaGljc1JlY3Qgb3V0ZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBob3Jpem9u
dGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZM
aWdodEJvcmRlcik7CisgICAgICAgIEdyYXBoaWNzUmVjdCBpbm5lclBhdGhSZWN0ID0gaW5mbGF0
ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIsIHZlcnRp
Y2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNl
dFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcigpLCBDb2xv
clNwYWNlU1JHQik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEdyYXBo
aWNzU2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywg
c2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldEZpbGxDb2xvcihsaWdodEJvcmRlckNvbG9yKCksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRoKHBhdGhXaXRoUm91bmRlZFJl
Y3Qob3V0ZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7CiAgICAgICAgIH0KQEAgLTE2MSw3ICsx
NjEsNyBAQCB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0CiAgICAgICAg
IHsKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFw
aGljc0NvbnRleHQpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhS
b3VuZGVkUmVjdChpbm5lclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5u
ZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhS
ZWN0LngoKSwgaW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxHcmFk
aWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYXBoaWNzUG9pbnQoaW5uZXJQYXRo
UmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgR3JhcGhpY3NQb2ludChpbm5lclBhdGhSZWN0
LngoKSwgaW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsKICAgICAgICAgICAgIGdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMCwgZ3JhZGllbnRMaWdodENvbG9yKCkpOwogICAgICAgICAgICAgZ3JhZGllbnQt
PmFkZENvbG9yU3RvcCgxLCBncmFkaWVudERhcmtDb2xvcigpKTsKICAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOwpAQCAtMTcwLDcgKzE3MCw3IEBA
IHZvaWQgRmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQKIAogICAgICAgICB7CiAg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3ND
b250ZXh0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRTaXpl
KHJvdW5kZihsZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRmKHRvcEJvcmRlclRoaWNrbmVzcykp
KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoR3JhcGhpY3NTaXplKHJv
dW5kZihsZWZ0Qm9yZGVyVGhpY2tuZXNzKSwgcm91bmRmKHRvcEJvcmRlclRoaWNrbmVzcykpKTsK
ICAgICAgICAgICAgIG1fY29udGVudEltYWdlLT5wYWludChncmFwaGljc0NvbnRleHQsIEludFBv
aW50KDAsIDApLCBtX2NvbnRlbnRJbWFnZS0+Ym91bmRzKCkpOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5oCShyZXZpc2lvbiA5
MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgRmluZEluZGljYXRvcl9oCiAKICNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTQwLDIzICs0MCwyMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRmlu
ZEluZGljYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbmRJbmRpY2F0b3I+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5h
dGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzUmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENv
b3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFu
ZGxlKTsKICAgICB+RmluZEluZGljYXRvcigpOwogCi0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNl
bGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFt
ZVJlY3QoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgc2VsZWN0aW9uUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblJlY3RJbldpbmRv
d0Nvb3JkaW5hdGVzOyB9CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGZyYW1lUmVjdCgpIGNv
bnN0OwogCi0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7IH0K
KyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsgfQogCiAg
ICAgU2hhcmVhYmxlQml0bWFwKiBjb250ZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRJbWFnZS5nZXQoKTsgfQogCiAgICAgdm9pZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAKIHByaXZhdGU6Ci0gICAg
RmluZEluZGljYXRvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UpOworICAgIEZpbmRJbmRpY2F0b3IoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29u
dGVudEltYWdlKTsKIAotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NlbGVjdGlvblJlY3RJbldp
bmRvd0Nvb3JkaW5hdGVzOwotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJl
Y3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0
IG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkdyYXBoaWNzUmVjdD4gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlczsKICAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2NvbnRlbnRJbWFnZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEs
OCArMTMxLDggQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiwgVmVjdG9yPFdURjo6U3RyaW5nPiYpID0gMDsKICNlbmRpZgotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBjb252ZXJ0VG9V
c2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JikgPSAwOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KSA9IDA7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgCkBAIC0xNjUsNyArMTY1LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgQ0dDb250ZXh0UmVmIGNvbnRhaW5pbmdXaW5kb3dHcmFwaGljc0NvbnRl
eHQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNv
bnN0IFN0cmluZyYsIGRvdWJsZSBzY2FsZUZhY3RvciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5m
byYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91
bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0
ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0Nv
cnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3Ry
aW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3Mp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpS
ZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsKSA9IDA7CiAgICAgdmlydHVhbCBTdHJp
bmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2lu
Z0NvcnJlY3Rpb25QYW5lbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBdXRvY29ycmVj
dGlvblJlc3BvbnNlKFdlYkNvcmU6OkVkaXRvckNsaWVudDo6QXV0b2NvcnJlY3Rpb25SZXNwb25z
ZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnRTdHJpbmcpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERy
YXdpbmdBcmVhUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldFRpbGVD
cmVhdAogICAgIG1fdGlsZUNyZWF0aW9uRGVsYXkgPSBkZWxheTsKIH0KIAotdm9pZCBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9h
dFNpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcikK
K3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGll
cnMoY29uc3QgR3JhcGhpY3NTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgR3JhcGhpY3NTaXpl
JiBjb3Zlck11bHRpcGxpZXIpCiB7CiAgICAgbV9rZWVwQXJlYU11bHRpcGxpZXIgPSBrZWVwTXVs
dGlwbGllcjsKICAgICBtX2NvdmVyQXJlYU11bHRpcGxpZXIgPSBjb3Zlck11bHRpcGxpZXI7CkBA
IC0yNzAsNyArMjcwLDcgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KGNvbnN0
IAogCiAgICAgLy8gQXNzdW1lcyB0aGUgYmFja2luZyBzdG9yZSBpcyBwYWludGVkIHdpdGggdGhl
IHNjYWxlIHRyYW5zZm9ybSBhcHBsaWVkLgogICAgIC8vIFNpbmNlIHRpbGUgY29udGVudCBpcyBh
bHJlYWR5IHNjYWxlZCwgZmlyc3QgcmV2ZXJ0IHRoZSBzY2FsaW5nIGZyb20gdGhlIHBhaW50ZXIu
Ci0gICAgZ2Muc2NhbGUoRmxvYXRTaXplKDEgLyBtX2NvbnRlbnRzU2NhbGUsIDEgLyBtX2NvbnRl
bnRzU2NhbGUpKTsKKyAgICBnYy5zY2FsZShHcmFwaGljc1NpemUoMSAvIG1fY29udGVudHNTY2Fs
ZSwgMSAvIG1fY29udGVudHNTY2FsZSkpOwogCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBG
cm9tQ29udGVudHMocmVjdCk7CiAKQEAgLTQzNywxMyArNDM3LDEzIEBAIGJvb2wgVGlsZWREcmF3
aW5nQXJlYVByb3h5OjpyZXNpemVFZGdlVGkKIAogdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6
OmRyb3BUaWxlc091dHNpZGVSZWN0KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQogewotICAgIEZs
b2F0UmVjdCBrZWVwUmVjdEYgPSBrZWVwUmVjdDsKKyAgICBHcmFwaGljc1JlY3Qga2VlcFJlY3RG
ID0ga2VlcFJlY3Q7CiAKICAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5h
dGU+IHRvUmVtb3ZlOwogICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7
CiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGNv
b3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7Ci0gICAgICAgIEZsb2F0UmVjdCB0
aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IHRpbGVS
ZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwogICAgICAgICBpZiAoIXRpbGVSZWN0LmludGVyc2Vj
dHMoa2VlcFJlY3RGKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb29yZGluYXRlKTsK
ICAgICB9CkBAIC00NzcsNyArNDc3LDcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnJl
bW92ZVRpbGUoYwogCiBJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwVG9Db250ZW50
cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KEZsb2F0UmVjdChyZWN0LngoKSAvIG1fY29udGVudHNTY2FsZSwKKyAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChHcmFwaGljc1JlY3QocmVjdC54KCkgLyBtX2NvbnRlbnRzU2NhbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpIC8gbV9jb250ZW50
c1NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRo
KCkgLyBtX2NvbnRlbnRzU2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlY3QuaGVpZ2h0KCkgLyBtX2NvbnRlbnRzU2NhbGUpKTsKQEAgLTQ4NSw3ICs0ODUsNyBA
QCBJbnRSZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6bWFwVG9Db250CiAKIEludFJlY3QgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjptYXBGcm9tQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QocmVjdC54KCkg
KiBtX2NvbnRlbnRzU2NhbGUsCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NS
ZWN0KHJlY3QueCgpICogbV9jb250ZW50c1NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LnkoKSAqIG1fY29udGVudHNTY2FsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpICogbV9jb250ZW50c1NjYWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpICogbV9j
b250ZW50c1NjYWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Rp
bGVkRHJhd2luZ0FyZWFQcm94eS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODUs
MTIgKzg1LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRpbGVDcmVhdGlvbkRlbGF5KGRvdWJs
ZSBkZWxheSk7CiAKICAgICAvLyBUaWxlZCBhcmUgZHJvcHBlZCBvdXRzaWRlIHRoZSBrZWVwIGFy
ZWEsIGFuZCBjcmVhdGVkIGZvciBjb3ZlciBhcmVhLiBUaGUgdmFsdWVzIGEgcmVsYXRpdmUgdG8g
dGhlIHZpZXdwb3J0IHNpemUuCi0gICAgdm9pZCBnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGll
cnMoV2ViQ29yZTo6RmxvYXRTaXplJiBrZWVwTXVsdGlwbGllciwgV2ViQ29yZTo6RmxvYXRTaXpl
JiBjb3Zlck11bHRpcGxpZXIpCisgICAgdm9pZCBnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGll
cnMoV2ViQ29yZTo6R3JhcGhpY3NTaXplJiBrZWVwTXVsdGlwbGllciwgV2ViQ29yZTo6R3JhcGhp
Y3NTaXplJiBjb3Zlck11bHRpcGxpZXIpCiAgICAgewogICAgICAgICBrZWVwTXVsdGlwbGllciA9
IG1fa2VlcEFyZWFNdWx0aXBsaWVyOwogICAgICAgICBjb3Zlck11bHRpcGxpZXIgPSBtX2NvdmVy
QXJlYU11bHRpcGxpZXI7CiAgICAgfQotICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRp
cGxpZXJzKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKTsKKyAgICB2b2lkIHNldEtlZXBBbmRD
b3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGtlZXBNdWx0
aXBsaWVyLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1NpemUmIGNvdmVyTXVsdGlwbGllcik7CiAK
ICAgICB2b2lkIHRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgpOwogCkBAIC0xNjMsOCArMTYzLDgg
QEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OkludFNpemUgbV90aWxlU2l6ZTsKICAgICBkb3Vi
bGUgbV90aWxlQ3JlYXRpb25EZWxheTsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9rZWVwQXJl
YU11bHRpcGxpZXI7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY292ZXJBcmVhTXVsdGlwbGll
cjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc1NpemUgbV9rZWVwQXJlYU11bHRpcGxpZXI7CisgICAg
V2ViQ29yZTo6R3JhcGhpY3NTaXplIG1fY292ZXJBcmVhTXVsdGlwbGllcjsKIAogICAgIFdlYkNv
cmU6OkludFJlY3QgbV92aXNpYmxlQXJlYTsKICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0Rh
dGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0RpcmVjdGlvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4
dENoZWNrZXJDbGllbnQuaD4KQEAgLTIxMTAsMTIgKzIxMTAsMTIgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmdldElzUmVzaXphYmxlKGJvb2wmIAogICAgIGlzUmVzaXphYmxlID0gbV91aUNsaWVudC5p
c1Jlc2l6YWJsZSh0aGlzKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldFdpbmRvd0ZyYW1l
KGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
V2luZG93RnJhbWUoY29uc3QgR3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBt
X3VpQ2xpZW50LnNldFdpbmRvd0ZyYW1lKHRoaXMsIG1fcGFnZUNsaWVudC0+Y29udmVydFRvRGV2
aWNlU3BhY2UobmV3V2luZG93RnJhbWUpKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmdldFdp
bmRvd0ZyYW1lKEZsb2F0UmVjdCYgbmV3V2luZG93RnJhbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0V2luZG93RnJhbWUoR3JhcGhpY3NSZWN0JiBuZXdXaW5kb3dGcmFtZSkKIHsKICAgICBuZXdX
aW5kb3dGcmFtZSA9IG1fcGFnZUNsaWVudC0+Y29udmVydFRvVXNlclNwYWNlKG1fdWlDbGllbnQu
d2luZG93RnJhbWUodGhpcykpOwogfQpAQCAtMjMzNSw3ICsyMzM1LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZENvdW50U3RyaW5nTWF0Y2hlcwogICAgIG1fZmluZENsaWVudC5kaWRDb3VudFN0
cmluZ01hdGNoZXModGhpcywgc3RyaW5nLCBtYXRjaENvdW50KTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJveHk6OnNldEZpbmRJbmRpY2F0b3IoY29uc3QgRmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgY29u
dGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rmlu
ZEluZGljYXRvcihjb25zdCBHcmFwaGljc1JlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzLCBjb25zdCBWZWN0b3I8R3JhcGhpY3NSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25S
ZWN0Q29vcmRpbmF0ZXMsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1h
Z2VIYW5kbGUsIGJvb2wgZmFkZU91dCkKIHsKICAgICBSZWZQdHI8RmluZEluZGljYXRvcj4gZmlu
ZEluZGljYXRvciA9IEZpbmRJbmRpY2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0SW5XaW5kb3dD
b29yZGluYXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNvbnRlbnRJ
bWFnZUhhbmRsZSk7CiAgICAgbV9wYWdlQ2xpZW50LT5zZXRGaW5kSW5kaWNhdG9yKGZpbmRJbmRp
Y2F0b3IucmVsZWFzZSgpLCBmYWRlT3V0KTsKQEAgLTI2OTAsOCArMjY5MCw4IEBAIHN0YXRpYyBX
ZWJXaGVlbEV2ZW50IGNvYWxlc2NlKGNvbnN0IFdlYlcKIHsKICAgICBBU1NFUlQoY2FuQ29hbGVz
Y2UoYSwgYikpOwogCi0gICAgRmxvYXRTaXplIG1lcmdlZERlbHRhID0gYS5kZWx0YSgpICsgYi5k
ZWx0YSgpOwotICAgIEZsb2F0U2l6ZSBtZXJnZWRXaGVlbFRpY2tzID0gYS53aGVlbFRpY2tzKCkg
KyBiLndoZWVsVGlja3MoKTsKKyAgICBHcmFwaGljc1NpemUgbWVyZ2VkRGVsdGEgPSBhLmRlbHRh
KCkgKyBiLmRlbHRhKCk7CisgICAgR3JhcGhpY3NTaXplIG1lcmdlZFdoZWVsVGlja3MgPSBhLndo
ZWVsVGlja3MoKSArIGIud2hlZWxUaWNrcygpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJl
dHVybiBXZWJXaGVlbEV2ZW50KFdlYkV2ZW50OjpXaGVlbCwgYi5wb3NpdGlvbigpLCBiLmdsb2Jh
bFBvc2l0aW9uKCksIG1lcmdlZERlbHRhLCBtZXJnZWRXaGVlbFRpY2tzLCBiLmdyYW51bGFyaXR5
KCksIGIucGhhc2UoKSwgYi5tb21lbnR1bVBoYXNlKCksIGIuaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcygpLCBiLm1vZGlmaWVycygpLCBiLnRpbWVzdGFtcCgpKTsKQEAgLTMxNTIsMTIgKzMxNTIs
MTIgQEAgZmxvYXQgV2ViUGFnZVByb3h5Ojpmb290ZXJIZWlnaHQoV2ViRnJhbQogICAgIHJldHVy
biBtX3VpQ2xpZW50LmZvb3RlckhlaWdodCh0aGlzLCBmcmFtZSk7CiB9CiAKLXZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3SGVhZGVyKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIG1fdWlDbGllbnQuZHJhd0hlYWRl
cih0aGlzLCBmcmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmF3Rm9vdGVy
KFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZHJhd0Zvb3RlcihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgR3JhcGhpY3NS
ZWN0JiByZWN0KQogewogICAgIG1fdWlDbGllbnQuZHJhd0Zvb3Rlcih0aGlzLCBmcmFtZSwgcmVj
dCk7CiB9CkBAIC0zMzM2LDcgKzMzMzYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3Vic3RpdHV0
aW9uc1BhbmVsSXNTCiB9CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
Ci12b2lkIFdlYlBhZ2VQcm94eTo6c2hvd0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHBhbmVsVHlw
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKK3ZvaWQg
V2ViUGFnZVByb3h5OjpzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25z
dCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIG1f
cGFnZUNsaWVudC0+c2hvd0NvcnJlY3Rpb25QYW5lbCgoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFu
ZWxUeXBlKXBhbmVsVHlwZSwgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0
cmluZywgcmVwbGFjZW1lbnRTdHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDdXJzb3I7CiAgICAgY2xhc3Mg
RHJhZ0RhdGE7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsK
ICAgICBjbGFzcyBJbnRTaXplOwogICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBzdHJ1
Y3QgVGV4dENoZWNraW5nUmVzdWx0OwpAQCAtNDE2LDcgKzQxNiw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGhpZGVGaW5kVUkoKTsKICAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJp
bmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgdm9pZCBkaWRD
b3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCk7Ci0g
ICAgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3QgU2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KTsKKyAgICB2
b2lkIHNldEZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBzZWxlY3Rp
b25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNz
UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpOwogICAg
IHZvaWQgZGlkRmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsK
ICAgICB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAjaWYgUExBVEZP
Uk0oV0lOKQpAQCAtNDM1LDEyICs0MzUsMTIgQEAgcHVibGljOgogCiAgICAgZmxvYXQgaGVhZGVy
SGVpZ2h0KFdlYkZyYW1lUHJveHkqKTsKICAgICBmbG9hdCBmb290ZXJIZWlnaHQoV2ViRnJhbWVQ
cm94eSopOwotICAgIHZvaWQgZHJhd0hlYWRlcihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3Rm9vdGVyKFdlYkZyYW1lUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdIZWFkZXIoV2ViRnJhbWVQcm94
eSosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZvaWQgZHJhd0Zvb3RlcihX
ZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgLy8gRGljdGlvbmFyeS4KLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQ
b2ludCYpOwogI2VuZGlmCiAKICAgICB2b2lkIHJlY2VpdmVkUG9saWN5RGVjaXNpb24oV2ViQ29y
ZTo6UG9saWN5QWN0aW9uLCBXZWJGcmFtZVByb3h5KiwgdWludDY0X3QgbGlzdGVuZXJJRCk7CkBA
IC02MzMsOCArNjMzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldFN0YXR1c0JhcklzVmlzaWJs
ZShib29sJiBzdGF0dXNCYXJJc1Zpc2libGUpOwogICAgIHZvaWQgc2V0SXNSZXNpemFibGUoYm9v
bCBpc1Jlc2l6YWJsZSk7CiAgICAgdm9pZCBnZXRJc1Jlc2l6YWJsZShib29sJiBpc1Jlc2l6YWJs
ZSk7Ci0gICAgdm9pZCBzZXRXaW5kb3dGcmFtZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIGdldFdpbmRvd0ZyYW1lKFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQg
c2V0V2luZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdm9pZCBn
ZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIHNjcmVlblRv
V2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JlZW5Qb2ludCwgV2ViQ29yZTo6SW50
UG9pbnQmIHdpbmRvd1BvaW50KTsKICAgICB2b2lkIHdpbmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHZpZXdSZWN0LCBXZWJDb3JlOjpJbnRSZWN0JiByZXN1bHQpOwogICAgIHZv
aWQgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWlu
dDY0X3QgZnJhbWVJRCwgYm9vbCYgc2hvdWxkQ2xvc2UpOwpAQCAtNzcwLDcgKzc3MCw3IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgc3Vic3RpdHV0aW9uc1BhbmVsSXNT
aG93aW5nKGJvb2wmKTsKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0g
ICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKKyAgICB2b2lk
IHNob3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAgIHZvaWQgZGlz
bWlzc0NvcnJlY3Rpb25QYW5lbChpbnQzMl90IHJlYXNvbik7CiAgICAgdm9pZCBkaXNtaXNzQ29y
cmVjdGlvblBhbmVsU29vbihpbnQzMl90IHJlYXNvbiwgU3RyaW5nJiByZXN1bHQpOwogICAgIHZv
aWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShpbnQzMl90IHJlc3BvbnNlVHlwZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
Zyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIEdldFN0YXR1c0JhcklzVmlzaWJsZSgp
IC0+IChib29sIHN0YXR1c0JhcklzVmlzaWJsZSkKICAgICBTZXRJc1Jlc2l6YWJsZShib29sIGlz
UmVzaXphYmxlKQogICAgIEdldElzUmVzaXphYmxlKCkgLT4gKGJvb2wgaXNSZXNpemFibGUpCi0g
ICAgU2V0V2luZG93RnJhbWUoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQotICAgIEdl
dFdpbmRvd0ZyYW1lKCkgLT4gKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkKKyAgICBT
ZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93RnJhbWUpCisgICAgR2V0
V2luZG93RnJhbWUoKSAtPiAoV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd0ZyYW1lKQogICAg
IFNjcmVlblRvV2luZG93KFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KSAtPiAoV2ViQ29y
ZTo6SW50UG9pbnQgd2luZG93UG9pbnQpCiAgICAgV2luZG93VG9TY3JlZW4oV2ViQ29yZTo6SW50
UmVjdCByZWN0KSAtPiAoV2ViQ29yZTo6SW50UmVjdCBzY3JlZW5GcmFtZSkKICAgICBSdW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwoV1RGOjpTdHJpbmcgbWVzc2FnZSwgdWludDY0X3QgZnJhbWVJ
RCkgLT4gKGJvb2wgc2hvdWxkQ2xvc2UpCkBAIC0xNjQsNyArMTY0LDcgQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZVByb3h5IHsKIAogICAgICMgRmluZCBtZXNzYWdlcwogICAgIERpZENvdW50U3RyaW5n
TWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCi0gICAgU2V0
RmluZEluZGljYXRvcihXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdCwgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KQorICAgIFNldEZpbmRJbmRpY2F0
b3IoV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHNlbGVjdGlvblJlY3QsIFZlY3RvcjxXZWJDb3JlOjpH
cmFwaGljc1JlY3Q+IHRleHRSZWN0cywgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBj
b250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCkKICAgICBEaWRGaW5kU3RyaW5nKFdURjo6
U3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKICAgICBEaWRGYWlsVG9GaW5kU3Ry
aW5nKFdURjo6U3RyaW5nIHN0cmluZykKICNpZiBQTEFURk9STShXSU4pCkBAIC0yNDYsNyArMjQ2
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQogICAgICMgQXV0b2NvcnJl
Y3Rpb24gbWVzc2FnZXMKLSAgICBTaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBl
LCBXZWJDb3JlOjpGbG9hdFJlY3QgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBTdHJpbmcg
cmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlbWVudFN0cmluZywgVmVjdG9yPFN0cmluZz4g
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCisgICAgU2hvd0NvcnJlY3Rpb25QYW5lbChp
bnQzMl90IHBhbmVsVHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGJvdW5kaW5nQm94T2ZSZXBs
YWNlZFN0cmluZywgU3RyaW5nIHJlcGxhY2VkU3RyaW5nLCBTdHJpbmcgcmVwbGFjZW1lbnRTdHJp
bmcsIFZlY3RvcjxTdHJpbmc+IGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogICAgIERp
c21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24pCiAgICAgRGlzbWlzc0NvcnJlY3Rp
b25QYW5lbFNvb24oaW50MzJfdCByZWFzb24pIC0+IChTdHJpbmcgcmVzdWx0KQogICAgIFJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZVR5cGUsIFN0cmluZyByZXBs
YWNlZFN0cmluZywgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViTnVtYmVyLmgiCiAjaW5jbHVkZSAiV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3Qu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRv
d0ZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9p
ZCBXZWJVSUNsaWVudDo6c2V0SXNSZXNpemFibGUoV2ViUGFnZQogICAgIG1fY2xpZW50LnNldElz
UmVzaXphYmxlKHRvQVBJKHBhZ2UpLCByZXNpemFibGUsIG1fY2xpZW50LmNsaWVudEluZm8pOwog
fQogCi12b2lkIFdlYlVJQ2xpZW50OjpzZXRXaW5kb3dGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZnJhbWUpCit2b2lkIFdlYlVJQ2xpZW50OjpzZXRXaW5kb3dGcmFt
ZShXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IEdyYXBoaWNzUmVjdCYgZnJhbWUpCiB7CiAgICAg
aWYgKCFtX2NsaWVudC5zZXRXaW5kb3dGcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUyLDEy
ICsyNTIsMTIgQEAgdm9pZCBXZWJVSUNsaWVudDo6c2V0V2luZG93RnJhbWUoV2ViUGFnZQogICAg
IG1fY2xpZW50LnNldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIG1fY2xp
ZW50LmNsaWVudEluZm8pOwogfQogCi1GbG9hdFJlY3QgV2ViVUlDbGllbnQ6OndpbmRvd0ZyYW1l
KFdlYlBhZ2VQcm94eSogcGFnZSkKK0dyYXBoaWNzUmVjdCBXZWJVSUNsaWVudDo6d2luZG93RnJh
bWUoV2ViUGFnZVByb3h5KiBwYWdlKQogewogICAgIGlmICghbV9jbGllbnQuZ2V0V2luZG93RnJh
bWUpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
UmVjdCgpOwogCi0gICAgcmV0dXJuIHRvRmxvYXRSZWN0KG1fY2xpZW50LmdldFdpbmRvd0ZyYW1l
KHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZvKSk7CisgICAgcmV0dXJuIHRvR3JhcGhp
Y3NSZWN0KG1fY2xpZW50LmdldFdpbmRvd0ZyYW1lKHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5jbGll
bnRJbmZvKSk7CiB9CiAKIGJvb2wgV2ViVUlDbGllbnQ6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbCgpIGNvbnN0CkBAIC0zMzIsNyArMzMyLDcgQEAgZmxvYXQgV2ViVUlDbGllbnQ6OmZv
b3RlckhlaWdodChXZWJQYWdlUAogICAgIHJldHVybiBtX2NsaWVudC5mb290ZXJIZWlnaHQodG9B
UEkocGFnZSksIHRvQVBJKGZyYW1lKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXZvaWQg
V2ViVUlDbGllbnQ6OmRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5
KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQordm9pZCBXZWJVSUNsaWVu
dDo6ZHJhd0hlYWRlcihXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBj
b25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5k
cmF3SGVhZGVyKQogICAgICAgICByZXR1cm47CkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBXZWJV
SUNsaWVudDo6ZHJhd0hlYWRlcihXZWJQYWdlUHJveAogICAgIG1fY2xpZW50LmRyYXdIZWFkZXIo
dG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkocmVjdCksIG1fY2xpZW50LmNsaWVudElu
Zm8pOwogfQogCi12b2lkIFdlYlVJQ2xpZW50OjpkcmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSogcGFn
ZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgV2ViVUlDbGllbnQ6OmRyYXdGb290ZXIoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiByZWN0KQogewogICAg
IGlmICghbV9jbGllbnQuZHJhd0Zvb3RlcikKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBj
bGFzcyBJbnRTaXplOwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KQEAgLTg0LDggKzg0
LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNSZXNpemFibGUoV2ViUGFnZVByb3h5Kik7CiAgICAg
dm9pZCBzZXRJc1Jlc2l6YWJsZShXZWJQYWdlUHJveHkqLCBib29sKTsKIAotICAgIHZvaWQgc2V0
V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0g
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94eSopOworICAgIHZv
aWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0Jik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQcm94
eSopOwogCiAgICAgYm9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSBjb25zdDsK
ICAgICBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChXZWJQYWdlUHJveHkqLCBjb25z
dCBTdHJpbmcmLCBXZWJGcmFtZVByb3h5Kik7CkBAIC0xMDEsOCArMTAxLDggQEAgcHVibGljOgog
ICAgIC8vIFByaW50aW5nLgogICAgIGZsb2F0IGhlYWRlckhlaWdodChXZWJQYWdlUHJveHkqLCBX
ZWJGcmFtZVByb3h5Kik7CiAgICAgZmxvYXQgZm9vdGVySGVpZ2h0KFdlYlBhZ2VQcm94eSosIFdl
YkZyYW1lUHJveHkqKTsKLSAgICB2b2lkIGRyYXdIZWFkZXIoV2ViUGFnZVByb3h5KiwgV2ViRnJh
bWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJhd0Zvb3Rl
cihXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CisgICAgdm9pZCBkcmF3SGVhZGVyKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBj
b25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2b2lkIGRyYXdGb290ZXIoV2ViUGFn
ZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwog
ICAgIHZvaWQgcHJpbnRGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5Kik7CiAKICAg
ICBib29sIGNhblJ1bk1vZGFsKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA5MTAzNCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUxLDEzICsxNTEsMTMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZXhlY3V0ZVVuZG9SZWRvKFdlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVj
dCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2
aWV3UmVjdCkKK0dyYXBoaWNzUmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3Bh
Y2UoY29uc3QgR3JhcGhpY3NSZWN0JiB2aWV3UmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiB2aWV3UmVjdDsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpj
b252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK0dyYXBoaWNzUmVj
dCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYg
dmlld1JlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdmlld1JlY3Q7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGll
bnRJbXBsLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZp
cnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVy
dFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc0LDEzICsxNzQsMTMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVu
ZG9SZWRvKFdlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZsb2F0UmVjdCBQYWdlQ2xp
ZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkK
K0dyYXBoaWNzUmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3Qg
R3JhcGhpY3NSZWN0JiB2aWV3UmVjdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiB2aWV3UmVjdDsKIH0KIAotRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9V
c2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK0dyYXBoaWNzUmVjdCBQYWdlQ2xp
ZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgdmlld1JlY3Qp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdmlld1JlY3Q7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFn
ZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgYm9v
bCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNlclNw
YWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUZXh0SW5wdXRTdGF0ZShib29sIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUp
OwogICAgIHZpcnR1YWwgdm9pZCByZXNldFRleHRJbnB1dFN0YXRlKCk7CiAKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpH
cmFwaGljc1JlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NS
ZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3QgY29udmVydFRvVXNlclNw
YWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwogICAgIApAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IFN0cmluZyYsIGRvdWJsZSBzY2Fs
ZUZhY3RvciwgY29uc3QgRGljdGlvbmFyeVBvcHVwSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBk
aXNtaXNzRGljdGlvbmFyeUxvb2t1cFBhbmVsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0Nv
cnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5n
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwor
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25Q
YW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0
aW9uUGFuZWwoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAg
ICAgdmlydHVhbCBTdHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVh
c29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViQ29yZTo6RWRpdG9yQ2xpZW50OjpBdXRvY29ycmVj
dGlvblJlc3BvbnNlVHlwZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5o
IgogI2ltcG9ydCAiV2ViUG9wdXBNZW51UHJveHlNYWMuaCIKICNpbXBvcnQgPFdlYkNvcmUvQ3Vy
c29yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4dHJhcy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9h
cmRFdmVudC5oPgpAQCAtMjY5LDEyICsyNjksMTIgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVz
ZXRUZXh0SW5wdXRTdGF0ZQogICAgIFttX3drVmlldyBfcmVzZXRUZXh0SW5wdXRTdGF0ZV07CiB9
CiAKLUZsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9E
ZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIFttX3dr
VmlldyBfY29udmVydFRvRGV2aWNlU3BhY2U6cmVjdF07CiB9CiAKLUZsb2F0UmVjdCBQYWdlQ2xp
ZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK0dyYXBo
aWNzUmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9Vc2VyU3BhY2U6
cmVjdF07CiB9CkBAIC00MjQsNyArNDI0LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlz
c0RpY3Rpb25hcnlMbwogI2VuZGlmCiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dDb3Jy
ZWN0aW9uUGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZs
b2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpzaG93Q29ycmVjdGlvblBhbmVsKENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0
eXBlLCBjb25zdCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmlu
ZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQog
ewogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKICAgICBpZiAoIWlzVmll
d1Zpc2libGUoKSB8fCAhaXNWaWV3SW5XaW5kb3coKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3
ICs2Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tl
eWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CkBA
IC0yNDkwLDcgKzI0OTAsNyBAQCAtICh2b2lkKXBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRDdXJy
ZW50CiAgICAgdGhlUG9pbnQgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnRo
ZVBvaW50XTsKICAgICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2ludCBmcm9t
VmlldzpuaWxdOwogCi0gICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0
TG9jYXRpb24oRmxvYXRQb2ludCh0aGVQb2ludC54LCB0aGVQb2ludC55KSk7CisgICAgX2RhdGEt
Pl9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oR3JhcGhpY3NQb2ludCh0
aGVQb2ludC54LCB0aGVQb2ludC55KSk7CiB9CiAKIC0gKE5TSW50ZWdlcilzcGVsbENoZWNrZXJE
b2N1bWVudFRhZwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9u
UGFuZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NvcnJl
Y3Rpb25QYW5lbC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ29ycmVjdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
Y2xhc3MgQ29ycmVjdGlvblBhbmVsIHsKIHB1YmxpYzoKICAgICBDb3JyZWN0aW9uUGFuZWwoKTsK
ICAgICB+Q29ycmVjdGlvblBhbmVsKCk7Ci0gICAgdm9pZCBzaG93KFdLVmlldyosIFdlYkNvcmU6
OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdm9pZCBzaG93KFdLVmlldyos
IFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CiAgICAgU3RyaW5n
IGRpc21pc3MoV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAg
ICAgc3RhdGljIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShXS1ZpZXcqLCBOU0Nv
cnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ29ycmVjdGlvblBhbmVsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIENvcnJlY3Rpb25QYW5lbDo6fkNvcnJlY3Rpb25QYW5lbCgpCiAg
ICAgZGlzbWlzc0ludGVybmFsKFJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWxJZ25v
cmVkLCBmYWxzZSk7CiB9CiAKLXZvaWQgQ29ycmVjdGlvblBhbmVsOjpzaG93KFdLVmlldyogdmll
dywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIENvcnJlY3Rpb25QYW5lbDo6c2hv
dyhXS1ZpZXcqIHZpZXcsIENvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlwZSB0eXBlLCBjb25z
dCBHcmFwaGljc1JlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKQogewogICAgIGRp
c21pc3NJbnRlcm5hbChSZWFzb25Gb3JEaXNtaXNzaW5nQ29ycmVjdGlvblBhbmVsSWdub3JlZCwg
ZmFsc2UpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbXBvcnQgPENh
cmJvbi9DYXJib24uaD4gLy8gRm9yIFNldFN5c3RlbVVJTW9kZSgpCiAjaW1wb3J0IDxJT0tpdC9w
d3JfbWd0L0lPUE1MaWIuaD4gLy8gRm9yIElPUE1Bc3NlcnRpb25DcmVhdGUoKQogI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYk5TV2luZG93RXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
V2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjgsNyArMjY4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERyYWdJbWFnZShjb25zdCBXZQog
ICAgIG1fcGFnZUNsaWVudC0+c2V0RHJhZ0ltYWdlKGNsaWVudFBvc2l0aW9uLCBkcmFnSW1hZ2Uu
cmVsZWFzZSgpLCBpc0xpbmtEcmFnKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1E
aWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2lu
dCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24o
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBACiAjaW5jbHVkZSA8UXREZWJ1Zz4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tGcmFtZS5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tQYWdlR3JvdXAuaD4KQEAgLTM2MSw3ICszNjEsNyBAQCB2b2lkIFF0
V2ViUGFnZVByb3h5OjpleGVjdXRlVW5kb1JlZG8oV2ViCiAgICAgICAgIG1fdW5kb1N0YWNrLT5y
ZWRvKCk7CiB9CiAKLUZsb2F0UmVjdCBRdFdlYlBhZ2VQcm94eTo6Y29udmVydFRvRGV2aWNlU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0IFF0V2ViUGFnZVByb3h5Ojpj
b252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHJlY3Q7CiB9CkBAIC0zNzYsNyArMzc2LDcgQEAgSW50UmVjdCBRdFdlYlBhZ2VQcm94eTo6
d2luZG93VG9TY3JlZW4oYwogICAgIHJldHVybiByZWN0OwogfQogCi1GbG9hdFJlY3QgUXRXZWJQ
YWdlUHJveHk6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitHcmFw
aGljc1JlY3QgUXRXZWJQYWdlUHJveHk6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBHcmFwaGlj
c1JlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHJlY3Q7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDggKzExNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxF
ZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5
OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQ
cm94eTo6VW5kb09yUmVkbyk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb0Rldmlj
ZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdp
bmRvd1RvU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1
cE1lbnVQcm94eVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lk
IFdlYlBvcHVwTWVudVByb3h5V2luOjpjYWxjdWxhdGVQb3NpCiAgICAgTU9OSVRPUklORk9FWCBt
b25pdG9ySW5mbzsKICAgICBtb25pdG9ySW5mby5jYlNpemUgPSBzaXplb2YoTU9OSVRPUklORk9F
WCk7CiAgICAgOjpHZXRNb25pdG9ySW5mbyhtb25pdG9yLCAmbW9uaXRvckluZm8pOwotICAgIEZs
b2F0UmVjdCBzY3JlZW4gPSBtb25pdG9ySW5mby5yY1dvcms7CisgICAgR3JhcGhpY3NSZWN0IHNj
cmVlbiA9IG1vbml0b3JJbmZvLnJjV29yazsKIAogICAgIC8vIENoZWNrIHRoYXQgd2UgZG9uJ3Qg
Z28gb2ZmIHRoZSBzY3JlZW4gdmVydGljYWxseQogICAgIGlmIChwb3B1cFJlY3QubWF4WSgpID4g
c2NyZWVuLmhlaWdodCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NSZWN0Lmg+CiAjaWYgVVNFKENHKQogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNlbmRpZgpAQCAtMTEyNyw3ICsxMTI3LDcg
QEAgdm9pZCBXZWJWaWV3OjpzZXRDdXN0b21Ecm9wVGFyZ2V0KElEcm9wVAogICAgICAgICA6OlJl
Z2lzdGVyRHJhZ0Ryb3AobV93aW5kb3csIHRoaXMpOwogfQogCi1GbG9hdFJlY3QgV2ViVmlldzo6
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorR3JhcGhpY3NSZWN0
IFdlYlZpZXc6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gcmVjdDsKIH0KQEAgLTExNDIsNyArMTE0Miw3IEBAIEludFJlY3QgV2Vi
Vmlldzo6d2luZG93VG9TY3JlZW4oY29uc3QgSW4KICAgICByZXR1cm4gcmVjdDsKIH0KIAotRmxv
YXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CitHcmFwaGljc1JlY3QgV2ViVmlldzo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gcmVjdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsOCArMTkwLDgg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qg
Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGNv
bnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChj
b25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5MzksNiArMzkzOSw5IEBACiAvKiBC
ZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8q
IFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKKwkJCWF0dHJpYnV0
ZXMgPSB7CisJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gTk87CisJCQl9
OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDFERUI5MUIxMDg3MzNEQTUwMDEwRTlDRCAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYktpdDIiICovOwog
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4xIjsKIAkJCWRldmVsb3BtZW50UmVn
aW9uID0gRW5nbGlzaDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgaW50IEluamVjdGVk
QnVuZGxlOjpudW1iZXJPZlBhZ2VzKFdlYkZyYQogICAgIGlmICghcGFnZUhlaWdodEluUGl4ZWxz
KQogICAgICAgICBwYWdlSGVpZ2h0SW5QaXhlbHMgPSBjb3JlRnJhbWUtPnZpZXcoKS0+aGVpZ2h0
KCk7CiAKLSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwg
RmxvYXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKKyAgICBy
ZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgR3JhcGhpY3NTaXpl
KHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIAogaW50IEluamVj
dGVkQnVuZGxlOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmIGlkLCBkb3VibGUgcGFnZVdpZHRoSW5QaXhlbHMsIGRvdWJsZSBwYWdlSGVpZ2h0
SW5QaXhlbHMpCkBAIC0yMTEsNyArMjExLDcgQEAgaW50IEluamVjdGVkQnVuZGxlOjpwYWdlTnVt
YmVyRm9yRWxlbWVudAogICAgIGlmICghcGFnZUhlaWdodEluUGl4ZWxzKQogICAgICAgICBwYWdl
SGVpZ2h0SW5QaXhlbHMgPSBjb3JlRnJhbWUtPnZpZXcoKS0+aGVpZ2h0KCk7CiAKLSAgICByZXR1
cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChlbGVtZW50LCBGbG9hdFNpemUo
cGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgIHJldHVybiBQcmlu
dENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEdyYXBoaWNzU2l6ZShwYWdl
V2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKIFN0cmluZyBJbmplY3Rl
ZEJ1bmRsZTo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoV2ViRnJhbWUqIGZyYW1lLCBpbnQg
cGFnZUluZGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJn
aW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJs
YXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2VPdmVybGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIFdLQnVuZGxl
UGFnZU92ZXJsYXlSZWYgV0tCdW5kbGVQYWdlT3ZlcmwKIAogdm9pZCBXS0J1bmRsZVBhZ2VPdmVy
bGF5U2V0TmVlZHNEaXNwbGF5KFdLQnVuZGxlUGFnZU92ZXJsYXlSZWYgYnVuZGxlUGFnZU92ZXJs
YXlSZWYsIFdLUmVjdCByZWN0KQogewotICAgIHRvSW1wbChidW5kbGVQYWdlT3ZlcmxheVJlZikt
PnNldE5lZWRzRGlzcGxheShlbmNsb3NpbmdJbnRSZWN0KHRvRmxvYXRSZWN0KHJlY3QpKSk7Cisg
ICAgdG9JbXBsKGJ1bmRsZVBhZ2VPdmVybGF5UmVmKS0+c2V0TmVlZHNEaXNwbGF5KGVuY2xvc2lu
Z0ludFJlY3QodG9HcmFwaGljc1JlY3QocmVjdCkpKTsKIH0KIAogZmxvYXQgV0tCdW5kbGVQYWdl
T3ZlcmxheUZyYWN0aW9uRmFkZWRJbihXS0J1bmRsZVBhZ2VPdmVybGF5UmVmIGJ1bmRsZVBhZ2VP
dmVybGF5UmVmKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tCShy
ZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9tYWMvTmV0c2NhcGVQbHVnaW5NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsx
MDQsNyBAQCBOUEJvb2wgTmV0c2NhcGVQbHVnaW46OmNvbnZlcnRQb2ludChkb3ViCiAgICAgZG91
YmxlIHNvdXJjZVhJblNjcmVlblNwYWNlOwogICAgIGRvdWJsZSBzb3VyY2VZSW5TY3JlZW5TcGFj
ZTsKIAotICAgIEZsb2F0UG9pbnQgc291cmNlSW5TY3JlZW5TcGFjZTsKKyAgICBHcmFwaGljc1Bv
aW50IHNvdXJjZUluU2NyZWVuU3BhY2U7CiAgICAgc3dpdGNoIChzb3VyY2VTcGFjZSkgewogICAg
IGNhc2UgTlBDb29yZGluYXRlU3BhY2VQbHVnaW46CiAgICAgICAgIHNvdXJjZVhJblNjcmVlblNw
YWNlID0gc291cmNlWCArIG1fd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLngoKSArIG1f
dmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcy54KCkgKyBtX25wV2luZG93Lng7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1
Z2luWDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luWDExLmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBl
UGx1Z2luWDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBzZXRYQnV0dG9uRXZlbnRGaWVsZHMKICAgICBzZXRDb21tb25Nb3VzZUV2ZW50
RmllbGRzKHhCdXR0b24sIHdlYkV2ZW50LCBwbHVnaW5Mb2NhdGlvbik7CiAKICAgICB4QnV0dG9u
LnR5cGUgPSBCdXR0b25QcmVzczsKLSAgICBGbG9hdFNpemUgdGlja3MgPSB3ZWJFdmVudC53aGVl
bFRpY2tzKCk7CisgICAgR3JhcGhpY3NTaXplIHRpY2tzID0gd2ViRXZlbnQud2hlZWxUaWNrcygp
OwogICAgIGlmICh0aWNrcy5oZWlnaHQoKSkgewogICAgICAgICBpZiAodGlja3MuaGVpZ2h0KCkg
PiAwKQogICAgICAgICAgICAgeEJ1dHRvbi5idXR0b24gPSA0OyAvLyB1cApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDI0ICs5NSwyNCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVk
KCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRv
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiB3aW5kb3dGcmFtZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgd2luZG93RnJhbWUpCiB7CiAgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFdpbmRvd0ZyYW1lKHdpbmRv
d0ZyYW1lKSk7CiB9CiAKLUZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQor
R3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCiB7Ci0gICAgRmxvYXRS
ZWN0IG5ld1dpbmRvd0ZyYW1lOworICAgIEdyYXBoaWNzUmVjdCBuZXdXaW5kb3dGcmFtZTsKIAog
ICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZSgpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRXaW5kb3dGcmFtZTo6UmVwbHkobmV3V2luZG93RnJhbWUpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhp
Y3NSZWN0KCk7CiAKICAgICByZXR1cm4gbmV3V2luZG93RnJhbWU7CiB9CiAKLUZsb2F0UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVDbGllbnQ6
OnBhZ2VSZWN0KCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9wYWdl
LT5zaXplKCkpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoR3JhcGhpY3NQb2ludCgpLCBtX3Bh
Z2UtPnNpemUoKSk7CiB9CiAKIGZsb2F0IFdlYkNocm9tZUNsaWVudDo6c2NhbGVGYWN0b3IoKQpA
QCAtNTU5LDEzICs1NTksMTMgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBvcHVsYXRlVmlzaXRl
ZExpbgogewogfQogCi1GbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRS
ZWN0KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0UmVjdCYgbGlu
ZVJlY3QpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGlnaHRSZWN0
KE5vZGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgbGlu
ZVJlY3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7
CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgpOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVudDo6
cGFpbnRDdXN0b21IaWdobGlnaHQoTm9kZSosIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29u
c3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGxpbmVSZWN0LAordm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KE5vZGUqLCBjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29uc3QgR3JhcGhpY3NS
ZWN0JiBsaW5lUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJl
aGluZFRleHQsIGJvb2wgZW50aXJlTGluZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAt
NTgyLDcgKzU4Miw3IEBAIFN0cmluZyBXZWJDaHJvbWVDbGllbnQ6OmdlbmVyYXRlUmVwbGFjZW0K
ICAgICByZXR1cm4gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkuZ2VuZXJhdGVGaWxl
Rm9yVXBsb2FkKG1fcGFnZSwgcGF0aCk7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWlu
dEN1c3RvbVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSwgCitib29sIFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21TY3Jv
bGxiYXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgR3JhcGhpY3NSZWN0JiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNj
cm9sbGJhckNvbnRyb2xTdGF0ZSwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0
aWNhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2
YWx1ZSwgZmxvYXQgcHJvcG9ydGlvbiwgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrKQogewpAQCAt
NTkwLDcgKzU5MCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGIK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3Rv
bVNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQorYm9vbCBX
ZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEdyYXBoaWNzUmVjdCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1
cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogICAgIAotICAgIHZpcnR1YWwgdm9p
ZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lu
ZG93UmVjdChjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAgICAgCi0gICAgdmlydHVhbCBXZWJDb3Jl
OjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVj
dCBwYWdlUmVjdCgpOwogICAgIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKICAg
ICAKQEAgLTE0OSwxNyArMTQ5LDE3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9w
dWxhdGVWaXNpdGVkTGlua3MoKTsKICAgICAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCBjdXN0b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6OkF0b21pY1N0
cmluZyYgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsaW5lUmVjdCk7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXVEY6
OkF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3hSZWN0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0LAorICAgIHZpcnR1YWwgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdU
Rjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmIGxpbmVS
ZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2ViQ29yZTo6Tm9k
ZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1JlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgbGluZVJlY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmVoaW5kVGV4dCwgYm9v
bCBlbnRpcmVMaW5lKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVwbGFjZVdpdGhH
ZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKGNvbnN0IFN0cmluZyYgcGF0aCwgU3RyaW5nJiBnZW5lcmF0
ZWRGaWxlbmFtZSk7CiAgICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVSZXBsYWNlbWVudEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0b21T
Y3JvbGxiYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUsIAorICAgIHZpcnR1YWwgYm9vbCBw
YWludEN1c3RvbVNjcm9sbGJhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc1JlY3QmLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRy
b2xTdGF0ZSwgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNh
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdmFsdWUsIGZs
b2F0IHByb3BvcnRpb24sIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayk7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVyKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dEN1c3RvbVNjcm9sbENvcm5lcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc1JlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbU92ZXJo
YW5nQXJlYShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxlZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RD
aGVja2luZ09mU3RyaW5nKFdlYkNvcmU6OlNwZWxsQ2hlY2tlciosIGludCwgV2ViQ29yZTo6VGV4
dENoZWNraW5nVHlwZU1hc2ssIGNvbnN0IFdURjo6U3RyaW5nJik7CiAjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgdmlydHVhbCB2b2lk
IHNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29yZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxU
eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJp
bmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5lbChXZWJDb3JlOjpDb3Jy
ZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNtaXNz
Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFu
ZWwpOwogICAgIHZpcnR1YWwgU3RyaW5nIGRpc21pc3NDb3JyZWN0aW9uUGFuZWxTb29uKFdlYkNv
cmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2VUeXBl
LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
U3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KAogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmIHAp
CiB7CiAgICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTUyLDcg
KzE1Miw3IEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QKICAgICBu
b3RpZnlDaGFuZ2UoKTsKIH0KIAotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50M0QmIHApCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEFuY2hv
clBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYgcCkKIHsKICAgICBpZiAoYW5jaG9yUG9pbnQo
KSA9PSBwKQogICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjbwogICAgIG5vdGlmeUNoYW5nZSgpOwogfQogCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEdyYXBoaWNzU2l6ZSYgc2l6ZSkKIHsK
ICAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNSw3
ICszMDUsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgpCiAgICAg
bm90aWZ5Q2hhbmdlKCk7CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBt
X25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7CiAgICAgbm90aWZ5Q2hhbmdlKCk7CkBAIC0z
MjUsNyArMzI1LDcgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRTeW5jaHJvbml6ZSgpCiB7
CiAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKICAgICBtX21vZGlmaWVkID0gZmFsc2U7Ci0g
ICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0gRmxvYXRSZWN0KCk7CisgICAgbV9uZWVkc0Rpc3BsYXlS
ZWN0ID0gR3JhcGhpY3NSZWN0KCk7CiAgICAgaWYgKG1faGFzUGVuZGluZ0FuaW1hdGlvbnMpCiAg
ICAgICAgIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgpKTsKICAgICBt
X2hhc1BlbmRpbmdBbmltYXRpb25zID0gZmFsc2U7CkBAIC0zNTIsOSArMzUyLDkgQEAgV2ViR3Jh
cGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJHcmFwaGljc0xheWVyKj4obGF5ZXIpOwogfQogCi1GbG9hdFJlY3QgV2ViR3JhcGhpY3NM
YXllcjo6bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0CitHcmFwaGljc1JlY3QgV2ViR3JhcGhpY3NM
YXllcjo6bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgR3Jh
cGhpY3NSZWN0IHJlY3QgPSBHcmFwaGljc1JlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSk7CiAgICAgaWYgKCFtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmVjdC5pbnRl
cnNlY3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsKICAgICByZXR1cm4gcmVjdDsKQEAgLTM4Myw3ICsz
ODMsNyBAQCB2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0CiAgICAgbV9s
YXllckluZm8ucG9zID0gcG9zaXRpb24oKTsKICAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9
IHByZXNlcnZlczNEKCk7CiAgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChy
ZXBsaWNhTGF5ZXIoKSk7Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9IEZsb2F0U2l6ZShzaXplKCku
d2lkdGgoKSAqIG1fY29udGVudFNjYWxlLCBzaXplKCkuaGVpZ2h0KCkgKiBtX2NvbnRlbnRTY2Fs
ZSk7CisgICAgbV9sYXllckluZm8uc2l6ZSA9IEdyYXBoaWNzU2l6ZShzaXplKCkud2lkdGgoKSAq
IG1fY29udGVudFNjYWxlLCBzaXplKCkuaGVpZ2h0KCkgKiBtX2NvbnRlbnRTY2FsZSk7CiAgICAg
bV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CiAgICAgbV9jb250ZW50TmVlZHNE
aXNwbGF5ID0gZmFsc2U7CiAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uY2xlYXIoKTsKQEAgLTM5
MiwxMiArMzkyLDEyIEBAIHZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3QK
ICAgICAgICAgbV9sYXllckluZm8uY2hpbGRyZW4uYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJl
bigpW2ldKSk7CiB9CiAKLXN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBkaXZpZGVJbnRvVGlsZXMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorc3RhdGljIFZlY3RvcjxHcmFwaGljc1JlY3Q+IGRpdmlk
ZUludG9UaWxlcyhjb25zdCBHcmFwaGljc1JlY3QmIHJlY3QpCiB7Ci0gICAgVmVjdG9yPEZsb2F0
UmVjdD4gdGlsZXM7CisgICAgVmVjdG9yPEdyYXBoaWNzUmVjdD4gdGlsZXM7CiAgICAgZm9yIChm
bG9hdCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgeSArPSBnVGlsZURpbWVuc2lvbikg
ewogICAgICAgICBmb3IgKGZsb2F0IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyB4ICs9
IGdUaWxlRGltZW5zaW9uKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh4LCB5LCBnVGls
ZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOworICAgICAgICAgICAgR3JhcGhpY3NSZWN0IHRp
bGUoeCwgeSwgZ1RpbGVEaW1lbnNpb24sIGdUaWxlRGltZW5zaW9uKTsKICAgICAgICAgICAgIHRp
bGUuaW50ZXJzZWN0KHJlY3QpOwogICAgICAgICAgICAgdGlsZXMuYXBwZW5kKHRpbGUpOwogICAg
ICAgICB9CkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5
ZXJzVG9VSVBybwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllcnNbaV07Ci0gICAg
ICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxheVJlY3QoKTsKKyAg
ICAgICAgR3JhcGhpY3NSZWN0IHVwZGF0ZVJlY3QgPSBsYXllci0+bmVlZHNEaXNwbGF5UmVjdCgp
OwogCiAgICAgICAgIGxheWVyLT5kaWRTeW5jaHJvbml6ZSgpOwogCkBAIC00NjYsOSArNDY2LDkg
QEAgdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9VSVBybwogICAgICAgICBlbHNl
IGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0
ZVJlY3QpOworICAgICAgICBWZWN0b3I8R3JhcGhpY3NSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJ
bnRvVGlsZXModXBkYXRlUmVjdCk7CiAgICAgICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7
IHRpbGVJbmRleCA8IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7Ci0gICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07CisgICAg
ICAgICAgICBjb25zdCBHcmFwaGljc1JlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRl
eF07CiAgICAgICAgICAgICBJbnRSZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHRpbGVSZWN0KTsKIAogICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvIGNodW5r
KGVuY2xvc2luZ1VwZGF0ZVJlY3QpOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm8KICAgICAgICAgICAgICAgICBwYWludGVyLnRyYW5z
bGF0ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJlY3QueSgpKTsKICAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dCgmcGFpbnRlcik7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVj
dEltYWdlKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShkaXJlY3RJbWFn
ZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVjdCgpLCBGbG9h
dFJlY3QoMCwgMCwgZGlyZWN0SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5oZWlnaHQoKSkp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShkaXJlY3RJbWFnZS5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgbGF5ZXItPmNvbnRlbnRzUmVjdCgpLCBHcmFwaGljc1Jl
Y3QoMCwgMCwgZGlyZWN0SW1hZ2UtPndpZHRoKCksIGRpcmVjdEltYWdlLT5oZWlnaHQoKSkpOwog
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50R3Jh
cGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGVuY2xvc2luZ1VwZGF0ZVJlY3QpOwogICAgICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgV2ViR3JhcGhpY3NM
YXllcl9oCiAjZGVmaW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2lu
dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NQb2ludDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNTIs
OSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0xheWVyKik7CiAgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllcios
IEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICB2b2lk
IHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUm
KTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEdyYXBoaWNzUG9pbnQmKTsKKyAgICB2b2lk
IHNldEFuY2hvclBvaW50KGNvbnN0IEdyYXBoaWNzUG9pbnQzRCYpOworICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBHcmFwaGljc1NpemUmKTsKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwpA
QCAtNzEsMTQgKzcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hc2tMYXllcihHcmFwaGlj
c0xheWVyKik7CiAgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7
CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBHcmFwaGljc1JlY3QmKTsKICAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CiAgICAgdmlydHVhbCB2
b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCiAgICAgV2ViS2l0
OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7CiAgICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8m
IGxheWVySW5mbygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29u
c3Q7CisgICAgR3JhcGhpY3NSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25zdDsKICAgICBzdGF0
aWMgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gdGFrZUxheWVyc1RvRGVsZXRlKCk7CiAgICAg
c3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwog
ICAgIGJvb2wgaXNNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kaWZpZWQ7IH0KQEAgLTkz
LDcgKzkzLDcgQEAgcHJpdmF0ZToKICAgICBXZWJLaXQ6OldlYkxheWVySW5mbyBtX2xheWVySW5m
bzsKICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IG1fYmFja2luZ1N0b3JlOwog
ICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlS
ZWN0OworICAgIEdyYXBoaWNzUmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7CiAgICAgYm9vbCBtX25l
ZWRzRGlzcGxheTsKICAgICBib29sIG1fbW9kaWZpZWQ7CiAgICAgYm9vbCBtX2NvbnRlbnROZWVk
c0Rpc3BsYXk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIzOCw3
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmEKIH0KIAogI2lmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpz
aG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBhbmVsVHlw
ZSB0eXBlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0
cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRT
dHJpbmdzKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9uUGFuZWwoV2ViQ29y
ZTo6Q29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCiB7CiAgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb3JyZWN0aW9uUGFuZWwodHlwZSwg
Ym91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRT
dHJpbmcsIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDcgKzY0NCw3IEBAIHZv
aWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUluZm8KICAgICBtX3Njcm9sbE9mZnNl
dCA9IEludFNpemUoKTsKIAogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dCA9IGNyZWF0ZUdyYXBoaWNzQ29udGV4dChiaXRtYXAuZ2V0KCkpOwotICAgIGdyYXBoaWNz
Q29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fd2ViUGFnZS0+dXNlclNwYWNlU2NhbGVGYWN0b3Io
KSwgbV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3RvcigpKSk7CisgICAgZ3JhcGhpY3NDb250
ZXh0LT5zY2FsZShHcmFwaGljc1NpemUobV93ZWJQYWdlLT51c2VyU3BhY2VTY2FsZUZhY3Rvcigp
LCBtX3dlYlBhZ2UtPnVzZXJTcGFjZVNjYWxlRmFjdG9yKCkpKTsKIAogICAgIHVwZGF0ZUluZm8u
dXBkYXRlUmVjdEJvdW5kcyA9IGJvdW5kczsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA5MTAz
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIEZpbmRDb250cm9sbGVy
Ojp1cGRhdGVGaW5kSW5kaWNhdG9yCiAgICAgLy8gV2Ugd2FudCB0aGUgc2VsZWN0aW9uIHJlY3Qg
aW4gd2luZG93IGNvb3JkaW5hdGVzLgogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93
Q29vcmRpbmF0ZXMgPSBzZWxlY3RlZEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coc2Vs
ZWN0aW9uUmVjdCk7CiAgICAgCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzOworICAg
IFZlY3RvcjxHcmFwaGljc1JlY3Q+IHRleHRSZWN0czsKICAgICBzZWxlY3RlZEZyYW1lLT5zZWxl
Y3Rpb24oKS0+Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMpOwogCiAg
ICAgLy8gQ3JlYXRlIGEgYmFja2luZyBzdG9yZSBhbmQgcGFpbnQgdGhlIGZpbmQgaW5kaWNhdG9y
IHRleHQgaW50byBpdC4KQEAgLTE5OCw3ICsxOTgsNyBAQCBib29sIEZpbmRDb250cm9sbGVyOjp1
cGRhdGVGaW5kSW5kaWNhdG9yCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIHdh
bnQgdGhlIHRleHQgcmVjdHMgaW4gc2VsZWN0aW9uIHJlY3QgY29vcmRpbmF0ZXMuCi0gICAgVmVj
dG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CisgICAg
VmVjdG9yPEdyYXBoaWNzUmVjdD4gdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0UmVjdHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgSW50UmVjdCB0ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzID0g
c2VsZWN0ZWRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3Qo
dGV4dFJlY3RzW2ldKSk7CkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6
aGlkZUZpbmRJbmRpY2F0b3IoKQogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNldEZpbmRJbmRpY2F0b3IoRmxvYXRSZWN0KCksIFZlY3RvcjxGbG9hdFJlY3Q+KCks
IGhhbmRsZSwgZmFsc2UpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2V0RmluZEluZGljYXRvcihHcmFwaGljc1JlY3QoKSwgVmVjdG9yPEdyYXBoaWNzUmVj
dD4oKSwgaGFuZGxlLCBmYWxzZSkpOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZh
bHNlOwogfQogCkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1Jl
Y3QoUGFnZU92ZXJsYQogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0Js
dXJSYWRpdXMsIGhvbGVTaGFkb3dDb2xvcihmcmFjdGlvbkZhZGVkSW4pLCBDb2xvclNwYWNlU1JH
Qik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coR3JhcGhpY3NTaXplKHNoYWRv
d09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBob2xlU2hhZG93Q29s
b3IoZnJhY3Rpb25GYWRlZEluKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0RmlsbENvbG9yKGhvbGVGaWxsQ29sb3IoZnJhY3Rpb25GYWRlZEluKSwgQ29sb3JT
cGFjZVNSR0IpOwogCiAgICAgICAgIC8vIERyYXcgd2hpdGUgZnJhbWVzIGFyb3VuZCB0aGUgaG9s
ZXMuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTE0LDcgKzkxNCw3IEBAIFBhc3NSZWZQ
dHI8V2ViSW1hZ2U+IFdlYlBhZ2U6OnNjYWxlZFNuYXAKICAgICBncmFwaGljc0NvbnRleHQtPnNh
dmUoKTsKICAgICAKICAgICBpZiAoc2NhbGUpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvcikpOworICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IpKTsK
ICAgICAKICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0Lnko
KSk7CiAgICAgZnJhbWVWaWV3LT5wYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwg
cmVjdCk7CkBAIC0yMjkxLDcgKzIyOTEsNyBAQCB2b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRpbmco
dWludDY0X3QgZnJhCiAgICAgbV9wcmludENvbnRleHQtPmJlZ2luKHByaW50SW5mby5hdmFpbGFi
bGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpOwogCiAgICAgZmxv
YXQgZnVsbFBhZ2VIZWlnaHQ7Ci0gICAgbV9wcmludENvbnRleHQtPmNvbXB1dGVQYWdlUmVjdHMo
RmxvYXRSZWN0KDAsIDAsIHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8u
YXZhaWxhYmxlUGFwZXJIZWlnaHQpLCAwLCAwLCBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0
b3IsIGZ1bGxQYWdlSGVpZ2h0LCB0cnVlKTsKKyAgICBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZVBh
Z2VSZWN0cyhHcmFwaGljc1JlY3QoMCwgMCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgs
IHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCksIDAsIDAsIHByaW50SW5mby5wYWdlU2V0
dXBTY2FsZUZhY3RvciwgZnVsbFBhZ2VIZWlnaHQsIHRydWUpOwogfQogCiB2b2lkIFdlYlBhZ2U6
OmVuZFByaW50aW5nKCkKQEAgLTIzMDgsNyArMjMwOCw3IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0
ZVBhZ2VzRm9yUHJpbnRpbmcodWkKIAogICAgIGlmIChtX3ByaW50Q29udGV4dCkgewogICAgICAg
ICByZXN1bHRQYWdlUmVjdHMgPSBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3RzKCk7Ci0gICAgICAg
IHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyA9IG1fcHJpbnRDb250ZXh0LT5jb21w
dXRlQXV0b21hdGljU2NhbGVGYWN0b3IoRmxvYXRTaXplKHByaW50SW5mby5hdmFpbGFibGVQYXBl
cldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpKSAqIHByaW50SW5mby5wYWdl
U2V0dXBTY2FsZUZhY3RvcjsKKyAgICAgICAgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50
aW5nID0gbV9wcmludENvbnRleHQtPmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3RvcihHcmFwaGlj
c1NpemUocHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQ
YXBlckhlaWdodCkpICogcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yOwogICAgIH0KIAog
ICAgIC8vIElmIHdlJ3JlIGFza2VkIHRvIHByaW50LCB3ZSBzaG91bGQgYWN0dWFsbHkgcHJpbnQg
YXQgbGVhc3QgYSBibGFuayBwYWdlLgpAQCAtMjMzOSw3ICsyMzM5LDcgQEAgdm9pZCBXZWJQYWdl
OjpkcmF3UmVjdFRvUERGKHVpbnQ2NF90IGZyYQogICAgICAgICBDR1BERkNvbnRleHRCZWdpblBh
Z2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBjdHgoY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKKyAgICAgICAgY3R4LnNjYWxlKEdyYXBoaWNzU2l6ZSgxLCAtMSkpOwogICAgICAgICBj
dHgudHJhbnNsYXRlKDAsIC1yZWN0LmhlaWdodCgpKTsKICAgICAgICAgbV9wcmludENvbnRleHQt
PnNwb29sUmVjdChjdHgsIHJlY3QpOwogCkBAIC0yMzc1LDcgKzIzNzUsNyBAQCB2b2lkIFdlYlBh
Z2U6OmRyYXdQYWdlc1RvUERGKHVpbnQ2NF90IGZyCiAgICAgICAgICAgICBDR1BERkNvbnRleHRC
ZWdpblBhZ2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCiAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOwotICAgICAgICAgICAgY3R4LnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOworICAgICAgICAgICAgY3R4LnNjYWxlKEdyYXBoaWNzU2l6ZSgx
LCAtMSkpOwogICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBh
Z2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgIG1fcHJpbnRDb250ZXh0LT5zcG9v
bFBhZ2UoY3R4LCBwYWdlLCBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSkud2lkdGgoKSk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjIsNyArNTIyLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJik7CiAKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29r
dXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUG9pbnQmKTsKICAgICB2b2lkIHBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRGljdGlvbmFyeVBvcHVwSW5mbzo6VHlwZSwg
V2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpSYW5nZSosIE5TRGljdGlvbmFyeSAqb3B0aW9ucyk7
CiAKICAgICB2b2lkIHNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtODQsNyAr
ODQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAj
IERpY3Rpb25hcnkgc3VwcG9ydC4KLSAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKKyAgICBQZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEF0TG9jYXRpb24oV2ViQ29yZTo6R3JhcGhpY3NQb2ludCBwb2ludCkKICNlbmRpZgogCiAgICAg
UHJlZmVyZW5jZXNEaWRDaGFuZ2UoV2ViS2l0OjpXZWJQcmVmZXJlbmNlc1N0b3JlIHN0b3JlKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RD
QS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2Nh
L0xheWVyVHJlZUhvc3RDQS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2NhL0xheWVyVHJlZUhvc3RDQS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMywxNiArMTMzLDE2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdENBOjpzaXplRGlkQ2hhbmdl
KGNvbnMKIAogICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAogICAgIC8v
IGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgR3JhcGhpY3NTaXplIG9s
ZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CiAKICAgICBpZiAobmV3U2l6
ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7Ci0gICAgICAgIGZsb2F0IGhlaWdodCA9IHN0
ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWln
aHQoKSk7Ci0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAt
IG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6
bWluKHN0YXRpY19jYXN0PEdyYXBoaWNzVW5pdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUu
aGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChHcmFwaGljc1JlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndp
ZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwogICAgIH0KIAogICAgIGlmIChuZXdT
aXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUu
aGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVp
Z2h0KCkpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QoR3JhcGhpY3NSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lk
dGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKIAogICAgIGlmICht
X3BhZ2VPdmVybGF5TGF5ZXIpCiAgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShu
ZXdTaXplKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MzQsNyArNDM0LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlU2VsZWN0aW9uKGNvbnN0IFZpcwog
ICAgIHJldHVybiBpc1Bvc2l0aW9uSW5SYW5nZShwb3NpdGlvbiwgc2VsZWN0ZWRSYW5nZS5nZXQo
KSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0UG9pbnQpCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0
aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBHcmFwaGljc1BvaW50JiBmbG9hdFBvaW50KQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yCiAgICAgaWYgKCFmb250RGVzY3JpcHRvckF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIFZlY3RvcjxHcmFwaGljc1F1
YWQ+IHF1YWRzOwogICAgIHJhbmdlLT50ZXh0UXVhZHMocXVhZHMpOwogICAgIGlmIChxdWFkcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lkIFdlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yCiAgICAgCiAgICAgRGljdGlvbmFyeVBvcHVw
SW5mbyBkaWN0aW9uYXJ5UG9wdXBJbmZvOwogICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udHlwZSA9
IHR5cGU7Ci0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcmlnaW4gPSBGbG9hdFBvaW50KHJhbmdl
UmVjdC54KCksIHJhbmdlUmVjdC55KCkpOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8ub3JpZ2lu
ID0gR3JhcGhpY3NQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpKTsKICAgICBkaWN0
aW9uYXJ5UG9wdXBJbmZvLmZvbnRJbmZvLmZvbnRBdHRyaWJ1dGVEaWN0aW9uYXJ5ID0gZm9udERl
c2NyaXB0b3JBdHRyaWJ1dGVzOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFS
RCkKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlvbnMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKW9w
dGlvbnM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWRE
cmF3aW5nQXJlYVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWE6
OnBhaW50SW50b0JpdG1hcChTCiB7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhp
Y3NDb250ZXh0KGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkpOwogICAgIGdyYXBoaWNz
Q29udGV4dC0+dHJhbnNsYXRlKC10aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOwotICAgIGdy
YXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxlLCBzY2FsZSkpOwotICAgIEludFJl
Y3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0aWxlUmVjdC54KCkg
LyBzY2FsZSwKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEdyYXBoaWNzU2l6ZShzY2FsZSwg
c2NhbGUpKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChHcmFw
aGljc1JlY3QodGlsZVJlY3QueCgpIC8gc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LnkoKSAvIHNjYWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC53
aWR0aCgpIC8gc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbGVSZWN0LmhlaWdodCgpIC8gc2NhbGUpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL21hYy9XZWJLaXQyLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL21h
Yy9XZWJLaXQyLm9yZGVyCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL21hYy9X
ZWJLaXQyLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc5LDcgKzE0NzksNyBAQCBfV0tQYWdl
SGFzSG9yaXpvbnRhbFNjcm9sbGJhcgogX19aTjZXZWJLaXQxOU5hdGl2ZVdlYldoZWVsRXZlbnRD
MUVQN05TRXZlbnRQNk5TVmlldwogX19aTjZXZWJLaXQxNVdlYkV2ZW50RmFjdG9yeTE5Y3JlYXRl
V2ViV2hlZWxFdmVudEVQN05TRXZlbnRQNk5TVmlldwogX1dLR2V0V2hlZWxFdmVudERlbHRhcwot
X19aTjZXZWJLaXQxM1dlYldoZWVsRXZlbnRDMUVOU184V2ViRXZlbnQ0VHlwZUVSS043V2ViQ29y
ZThJbnRQb2ludEVTNl9SS05TM185RmxvYXRTaXplRVM5X05TMF8xMUdyYW51bGFyaXR5RU5TMF81
UGhhc2VFU0JfYk5TMV85TW9kaWZpZXJzRWQKK19fWk42V2ViS2l0MTNXZWJXaGVlbEV2ZW50QzFF
TlNfOFdlYkV2ZW50NFR5cGVFUktON1dlYkNvcmU4SW50UG9pbnRFUzZfUktOUzNfMTJHcmFwaGlj
c1NpemVFUzlfTlMwXzExR3JhbnVsYXJpdHlFTlMwXzVQaGFzZUVTQl9iTlMxXzlNb2RpZmllcnNF
ZAogX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE5TmF0
aXZlV2ViV2hlZWxFdmVudEUKIF9fWk4zV1RGNlZlY3RvcklONldlYktpdDE5TmF0aXZlV2ViV2hl
ZWxFdmVudEVMbTBFRTE0ZXhwYW5kQ2FwYWNpdHlFbVBLUzJfCiBfX1pOM1dURjZWZWN0b3JJTjZX
ZWJLaXQxOU5hdGl2ZVdlYldoZWVsRXZlbnRFTG0wRUUxNXJlc2VydmVDYXBhY2l0eUVtCkBAIC0y
MTgyLDE3ICsyMTgyLDE3IEBAIF9fWk42V2ViS2l0MTFXZWJVSUNsaWVudDE5c2V0TWVudUJhcklz
VmkKIF9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3NhZ2VzMTJXZWJQYWdlUHJveHkx
NFNldElzUmVzaXphYmxlRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2YkVFRXZQTlNfMTVB
cmd1bWVudERlY29kZXJFUFQwX1QxXwogX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTE0c2V0SXNS
ZXNpemFibGVFYgogX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50MTRzZXRJc1Jlc2l6YWJsZUVQTlNf
MTJXZWJQYWdlUHJveHlFYgotX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMx
MldlYlBhZ2VQcm94eTE0R2V0V2luZG93RnJhbWVFTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVNUzVf
RnZSTjdXZWJDb3JlOUZsb2F0UmVjdEVFRUV2UE5TXzE1QXJndW1lbnREZWNvZGVyRVBOU18xNUFy
Z3VtZW50RW5jb2RlckVQVDBfVDFfCi1fX1pONldlYktpdDEyV2ViUGFnZVByb3h5MTRnZXRXaW5k
b3dGcmFtZUVSTjdXZWJDb3JlOUZsb2F0UmVjdEUKK19fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2Fn
ZUlOOE1lc3NhZ2VzMTJXZWJQYWdlUHJveHkxNEdldFdpbmRvd0ZyYW1lRU42V2ViS2l0MTJXZWJQ
YWdlUHJveHlFTVM1X0Z2Uk43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUVFRXZQTlNfMTVBcmd1bWVu
dERlY29kZXJFUE5TXzE1QXJndW1lbnRFbmNvZGVyRVBUMF9UMV8KK19fWk42V2ViS2l0MTJXZWJQ
YWdlUHJveHkxNGdldFdpbmRvd0ZyYW1lRVJON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIF9fWk42
V2ViS2l0MTFXZWJVSUNsaWVudDExd2luZG93RnJhbWVFUE5TXzEyV2ViUGFnZVByb3h5RQotX19a
TjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMThjb252ZXJ0VG9Vc2VyU3BhY2VFUktON1dlYkNvcmU5
RmxvYXRSZWN0RQorX19aTjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMThjb252ZXJ0VG9Vc2VyU3Bh
Y2VFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIC1bV0tWaWV3KEludGVybmFsKSBfY29udmVy
dFRvVXNlclNwYWNlOl0KLV9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlOOE1lc3NhZ2VzMTJX
ZWJQYWdlUHJveHkxNFNldFdpbmRvd0ZyYW1lRU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2
UktON1dlYkNvcmU5RmxvYXRSZWN0RUVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1QxXwot
X19aTjdDb3JlSVBDMThjYWxsTWVtYmVyRnVuY3Rpb25JTjZXZWJLaXQxMldlYlBhZ2VQcm94eUVN
UzJfRnZSS043V2ViQ29yZTlGbG9hdFJlY3RFRVM0X0VFdlJLTlNfMTBBcmd1bWVudHMxSVQxX0VF
UFRfVDBfCi1fX1pONldlYktpdDEyV2ViUGFnZVByb3h5MTRzZXRXaW5kb3dGcmFtZUVSS043V2Vi
Q29yZTlGbG9hdFJlY3RFCi1fX1pONldlYktpdDE0UGFnZUNsaWVudEltcGwyMGNvbnZlcnRUb0Rl
dmljZVNwYWNlRVJLTjdXZWJDb3JlOUZsb2F0UmVjdEUKK19fWk43Q29yZUlQQzEzaGFuZGxlTWVz
c2FnZUlOOE1lc3NhZ2VzMTJXZWJQYWdlUHJveHkxNFNldFdpbmRvd0ZyYW1lRU42V2ViS2l0MTJX
ZWJQYWdlUHJveHlFTVM1X0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFRUV2UE5TXzE1QXJn
dW1lbnREZWNvZGVyRVBUMF9UMV8KK19fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42
V2ViS2l0MTJXZWJQYWdlUHJveHlFTVMyX0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFUzRf
RUV2UktOU18xMEFyZ3VtZW50czFJVDFfRUVQVF9UMF8KK19fWk42V2ViS2l0MTJXZWJQYWdlUHJv
eHkxNHNldFdpbmRvd0ZyYW1lRVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCitfX1pONldlYktp
dDE0UGFnZUNsaWVudEltcGwyMGNvbnZlcnRUb0RldmljZVNwYWNlRVJLTjdXZWJDb3JlMTJHcmFw
aGljc1JlY3RFCiAtW1dLVmlldyhJbnRlcm5hbCkgX2NvbnZlcnRUb0RldmljZVNwYWNlOl0KLV9f
Wk42V2ViS2l0MTFXZWJVSUNsaWVudDE0c2V0V2luZG93RnJhbWVFUE5TXzEyV2ViUGFnZVByb3h5
RVJLTjdXZWJDb3JlOUZsb2F0UmVjdEUKK19fWk42V2ViS2l0MTFXZWJVSUNsaWVudDE0c2V0V2lu
ZG93RnJhbWVFUE5TXzEyV2ViUGFnZVByb3h5RVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCiBf
X1pONldlYktpdDEyV2ViUGFnZVByb3h5OHNob3dQYWdlRXYKIF9fWk42V2ViS2l0MTFXZWJVSUNs
aWVudDhzaG93UGFnZUVQTlNfMTJXZWJQYWdlUHJveHlFCiBfX1pON0NvcmVJUEMxM2hhbmRsZU1l
c3NhZ2VJTjhNZXNzYWdlczEyV2ViUGFnZVByb3h5MjJEaXNtaXNzQ29ycmVjdGlvblBhbmVsRU42
V2ViS2l0MTJXZWJQYWdlUHJveHlFTVM1X0Z2aUVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQw
X1QxXwpAQCAtMjY4OCwyMCArMjY4OCwyMCBAQCBfX1pONldlYktpdDExV2ViVUlDbGllbnQ1Zm9j
dXNFUE5TXzEyV2ViCiAtW1dLVGV4dElucHV0V2luZG93Q29udHJvbGxlciBpbnRlcnByZXRLZXlF
dmVudDpzdHJpbmc6XQogLVtXS1RleHRJbnB1dFBhbmVsIF9pbnRlcnByZXRLZXlFdmVudDpzdHJp
bmc6XQogX19aTjZXZWJLaXQxMVdlYlVJQ2xpZW50N3VuZm9jdXNFUE5TXzEyV2ViUGFnZVByb3h5
RQotX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVzc2FnZXMxMldlYlBhZ2VQcm94eTE5
U2hvd0NvcnJlY3Rpb25QYW5lbEVONldlYktpdDEyV2ViUGFnZVByb3h5RU1TNV9GdmlSS043V2Vi
Q29yZTlGbG9hdFJlY3RFUktOM1dURjZTdHJpbmdFU0RfUktOU0FfNlZlY3RvcklTQl9MbTBFRUVF
RUV2UE5TXzE1QXJndW1lbnREZWNvZGVyRVBUMF9UMV8KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRz
NUlpTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFUzRfTlMzXzZWZWN0b3JJUzRfTG0w
RUVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTN18KLV9fWk43Q29yZUlQQzEwQXJn
dW1lbnRzNElpTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFUzRfRTZkZWNvZGVFUE5T
XzE1QXJndW1lbnREZWNvZGVyRVJTNV8KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lpTjdXZWJD
b3JlOUZsb2F0UmVjdEVOM1dURjZTdHJpbmdFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVy
RVJTNV8KLV9fWk43Q29yZUlQQzEwQXJndW1lbnRzMklpTjdXZWJDb3JlOUZsb2F0UmVjdEVFNmRl
Y29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlMzXworX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNz
YWdlSU44TWVzc2FnZXMxMldlYlBhZ2VQcm94eTE5U2hvd0NvcnJlY3Rpb25QYW5lbEVONldlYktp
dDEyV2ViUGFnZVByb3h5RU1TNV9GdmlSS043V2ViQ29yZTEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2
U3RyaW5nRVNEX1JLTlNBXzZWZWN0b3JJU0JfTG0wRUVFRUVFdlBOU18xNUFyZ3VtZW50RGVjb2Rl
ckVQVDBfVDFfCitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czVJaU43V2ViQ29yZTEyR3JhcGhpY3NS
ZWN0RU4zV1RGNlN0cmluZ0VTNF9OUzNfNlZlY3RvcklTNF9MbTBFRUVFNmRlY29kZUVQTlNfMTVB
cmd1bWVudERlY29kZXJFUlM3XworX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SWlON1dlYkNvcmUx
MkdyYXBoaWNzUmVjdEVOM1dURjZTdHJpbmdFUzRfRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNv
ZGVyRVJTNV8KK19fWk43Q29yZUlQQzEwQXJndW1lbnRzM0lpTjdXZWJDb3JlMTJHcmFwaGljc1Jl
Y3RFTjNXVEY2U3RyaW5nRUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2RlckVSUzVfCitfX1pO
N0NvcmVJUEMxMEFyZ3VtZW50czJJaU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0RUU2ZGVjb2RlRVBO
U18xNUFyZ3VtZW50RGVjb2RlckVSUzNfCiBfX1pON0NvcmVJUEMxOVZlY3RvckFyZ3VtZW50Q29k
ZXJJTGIwRU4zV1RGNlN0cmluZ0VFNmRlY29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUk5TMV82
VmVjdG9ySVMyX0xtMEVFRQogX19aTjNXVEY2VmVjdG9ySU5TXzZTdHJpbmdFTG0wRUUxNHNocmlu
a0NhcGFjaXR5RW0KLV9fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42V2ViS2l0MTJX
ZWJQYWdlUHJveHlFTVMyX0Z2aVJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VT
QV9SS05TN182VmVjdG9ySVM4X0xtMEVFRUVpUzRfUzhfUzhfU0NfRUV2UktOU18xMEFyZ3VtZW50
czVJVDFfVDJfVDNfVDRfVDVfRUVQVF9UMF8KLV9fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxOXNo
b3dDb3JyZWN0aW9uUGFuZWxFaVJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VT
OF9SS05TNV82VmVjdG9ySVM2X0xtMEVFRQotX19aTjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMTlz
aG93Q29ycmVjdGlvblBhbmVsRU43V2ViQ29yZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5
cGVFUktOUzFfOUZsb2F0UmVjdEVSS04zV1RGNlN0cmluZ0VTQV9SS05TN182VmVjdG9ySVM4X0xt
MEVFRQotX19aTjZXZWJLaXQxNUNvcnJlY3Rpb25QYW5lbDRzaG93RVA2V0tWaWV3TjdXZWJDb3Jl
MTlDb3JyZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TM185RmxvYXRSZWN0RVJLTjNXVEY2
U3RyaW5nRVNDX1JLTlM5XzZWZWN0b3JJU0FfTG0wRUVFCitfX1pON0NvcmVJUEMxOGNhbGxNZW1i
ZXJGdW5jdGlvbklONldlYktpdDEyV2ViUGFnZVByb3h5RU1TMl9GdmlSS043V2ViQ29yZTEyR3Jh
cGhpY3NSZWN0RVJLTjNXVEY2U3RyaW5nRVNBX1JLTlM3XzZWZWN0b3JJUzhfTG0wRUVFRWlTNF9T
OF9TOF9TQ19FRXZSS05TXzEwQXJndW1lbnRzNUlUMV9UMl9UM19UNF9UNV9FRVBUX1QwXworX19a
TjZXZWJLaXQxMldlYlBhZ2VQcm94eTE5c2hvd0NvcnJlY3Rpb25QYW5lbEVpUktON1dlYkNvcmUx
MkdyYXBoaWNzUmVjdEVSS04zV1RGNlN0cmluZ0VTOF9SS05TNV82VmVjdG9ySVM2X0xtMEVFRQor
X19aTjZXZWJLaXQxNFBhZ2VDbGllbnRJbXBsMTlzaG93Q29ycmVjdGlvblBhbmVsRU43V2ViQ29y
ZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQYW5lbFR5cGVFUktOUzFfMTJHcmFwaGljc1JlY3RFUktO
M1dURjZTdHJpbmdFU0FfUktOUzdfNlZlY3RvcklTOF9MbTBFRUUKK19fWk42V2ViS2l0MTVDb3Jy
ZWN0aW9uUGFuZWw0c2hvd0VQNldLVmlld043V2ViQ29yZTE5Q29ycmVjdGlvblBhbmVsSW5mbzlQ
YW5lbFR5cGVFUktOUzNfMTJHcmFwaGljc1JlY3RFUktOM1dURjZTdHJpbmdFU0NfUktOUzlfNlZl
Y3RvcklTQV9MbTBFRUUKIC1bV0tWaWV3IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWRdCi1fX1pON0Nv
cmVJUEMxMEFyZ3VtZW50czRJaU43V2ViQ29yZTlGbG9hdFJlY3RFTjNXVEY2U3RyaW5nRVM0X0VE
MkV2Ci1fX1pON0NvcmVJUEMxMEFyZ3VtZW50czNJaU43V2ViQ29yZTlGbG9hdFJlY3RFTjNXVEY2
U3RyaW5nRUVEMkV2CitfX1pON0NvcmVJUEMxMEFyZ3VtZW50czRJaU43V2ViQ29yZTEyR3JhcGhp
Y3NSZWN0RU4zV1RGNlN0cmluZ0VTNF9FRDJFdgorX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSWlO
N1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVOM1dURjZTdHJpbmdFRUQyRXYKIF9fX3Nob3dfYmxvY2tf
aW52b2tlXzEKIF9fWk42V2ViS2l0MTVDb3JyZWN0aW9uUGFuZWwyNWhhbmRsZUFjY2VwdGVkUmVw
bGFjZW1lbnRFUDhOU1N0cmluZ1MyX1MyX2wKIC1bV0tWaWV3KFByaXZhdGUpIHNwZWxsQ2hlY2tl
ckRvY3VtZW50VGFnXQpAQCAtMjg0NiwyMSArMjg0NiwyMSBAQCBfX1pONldlYktpdDE1V2ViUHJv
Y2Vzc1Byb3h5NHNlbmRJTjhNZXNzCiBfX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNz
YWdlczEyV2ViUGFnZVByb3h5MTNEaWRGaW5kU3RyaW5nRU42V2ViS2l0MTJXZWJQYWdlUHJveHlF
TVM1X0Z2UktOM1dURjZTdHJpbmdFakVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJFUFQwX1QxXwog
X19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTEzZGlkRmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0Vq
CiBfX1pONldlYktpdDEzV2ViRmluZENsaWVudDEzZGlkRmluZFN0cmluZ0VQTlNfMTJXZWJQYWdl
UHJveHlFUktOM1dURjZTdHJpbmdFagotX19aTjdDb3JlSVBDMTNoYW5kbGVNZXNzYWdlSU44TWVz
c2FnZXMxMldlYlBhZ2VQcm94eTE2U2V0RmluZEluZGljYXRvckVONldlYktpdDEyV2ViUGFnZVBy
b3h5RU1TNV9GdlJLTjdXZWJDb3JlOUZsb2F0UmVjdEVSS04zV1RGNlZlY3RvcklTN19MbTBFRUVS
S05TNF8xNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJF
UFQwX1QxXwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SU43V2ViQ29yZTlGbG9hdFJlY3RFTjNX
VEY2VmVjdG9ySVMyX0xtMEVFRU42V2ViS2l0MTVTaGFyZWFibGVCaXRtYXA2SGFuZGxlRWJFNmRl
Y29kZUVQTlNfMTVBcmd1bWVudERlY29kZXJFUlM5XwotX19aTjdDb3JlSVBDMTBBcmd1bWVudHMz
SU43V2ViQ29yZTlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVMyX0xtMEVFRU42V2ViS2l0MTVTaGFy
ZWFibGVCaXRtYXA2SGFuZGxlRUU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVjb2RlckVSUzlfCi1f
X1pON0NvcmVJUEMxMEFyZ3VtZW50czJJTjdXZWJDb3JlOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJ
UzJfTG0wRUVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNl8KLV9fWk43Q29yZUlQ
QzE5VmVjdG9yQXJndW1lbnRDb2RlcklMYjBFTjdXZWJDb3JlOUZsb2F0UmVjdEVFNmRlY29kZUVQ
TlNfMTVBcmd1bWVudERlY29kZXJFUk4zV1RGNlZlY3RvcklTMl9MbTBFRUUKLV9fWk4zV1RGNlZl
Y3RvcklON1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFMTRleHBhbmRDYXBhY2l0eUVtUEtTMl8KLV9f
Wk4zV1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlF
bQotX19aTjNXVEYxNlZlY3RvckJ1ZmZlckJhc2VJTjdXZWJDb3JlOUZsb2F0UmVjdEVFMTRhbGxv
Y2F0ZUJ1ZmZlckVtCi1fX1pOM1dURjExVmVjdG9yTW92ZXJJTGIwRU43V2ViQ29yZTlGbG9hdFJl
Y3RFRTRtb3ZlRVBLUzJfUzVfUFMyXwotX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTlGbG9hdFJl
Y3RFTG0wRUUxNHNocmlua0NhcGFjaXR5RW0KLV9fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0
aW9uSU42V2ViS2l0MTJXZWJQYWdlUHJveHlFTVMyX0Z2UktON1dlYkNvcmU5RmxvYXRSZWN0RVJL
TjNXVEY2VmVjdG9ySVM0X0xtMEVFRVJLTlMxXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViRVM0
X1M5X1NEX2JFRXZSS05TXzEwQXJndW1lbnRzNElUMV9UMl9UM19UNF9FRVBUX1QwXwotX19aTjZX
ZWJLaXQxMldlYlBhZ2VQcm94eTE2c2V0RmluZEluZGljYXRvckVSS043V2ViQ29yZTlGbG9hdFJl
Y3RFUktOM1dURjZWZWN0b3JJUzJfTG0wRUVFUktOU18xNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVF
YgotX19aTjZXZWJLaXQxM0ZpbmRJbmRpY2F0b3I2Y3JlYXRlRVJLTjdXZWJDb3JlOUZsb2F0UmVj
dEVSS04zV1RGNlZlY3RvcklTMl9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUUK
LV9fWk4zV1RGNlZlY3RvcklON1dlYkNvcmU5RmxvYXRSZWN0RUxtMEVFQzJFUktTM18KLV9fWk4z
V1RGMTJWZWN0b3JDb3BpZXJJTGIwRU43V2ViQ29yZTlGbG9hdFJlY3RFRTE3dW5pbml0aWFsaXpl
ZENvcHlFUEtTMl9TNV9QUzJfCitfX1pON0NvcmVJUEMxM2hhbmRsZU1lc3NhZ2VJTjhNZXNzYWdl
czEyV2ViUGFnZVByb3h5MTZTZXRGaW5kSW5kaWNhdG9yRU42V2ViS2l0MTJXZWJQYWdlUHJveHlF
TVM1X0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZlY3RvcklTN19MbTBFRUVS
S05TNF8xNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkVFRXZQTlNfMTVBcmd1bWVudERlY29kZXJF
UFQwX1QxXworX19aTjdDb3JlSVBDMTBBcmd1bWVudHM0SU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0
RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUVi
RTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTOV8KK19fWk43Q29yZUlQQzEwQXJndW1l
bnRzM0lON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVOM1dURjZWZWN0b3JJUzJfTG0wRUVFTjZXZWJL
aXQxNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVy
RVJTOV8KK19fWk43Q29yZUlQQzEwQXJndW1lbnRzMklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVO
M1dURjZWZWN0b3JJUzJfTG0wRUVFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJTNl8K
K19fWk43Q29yZUlQQzE5VmVjdG9yQXJndW1lbnRDb2RlcklMYjBFTjdXZWJDb3JlMTJHcmFwaGlj
c1JlY3RFRTZkZWNvZGVFUE5TXzE1QXJndW1lbnREZWNvZGVyRVJOM1dURjZWZWN0b3JJUzJfTG0w
RUVFCitfX1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNGV4cGFu
ZENhcGFjaXR5RW1QS1MyXworX19aTjNXVEY2VmVjdG9ySU43V2ViQ29yZTEyR3JhcGhpY3NSZWN0
RUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQorX19aTjNXVEYxNlZlY3RvckJ1ZmZlckJhc2VJTjdX
ZWJDb3JlMTJHcmFwaGljc1JlY3RFRTE0YWxsb2NhdGVCdWZmZXJFbQorX19aTjNXVEYxMVZlY3Rv
ck1vdmVySUxiMEVON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFNG1vdmVFUEtTMl9TNV9QUzJfCitf
X1pOM1dURjZWZWN0b3JJTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFTG0wRUUxNHNocmlua0NhcGFj
aXR5RW0KK19fWk43Q29yZUlQQzE4Y2FsbE1lbWJlckZ1bmN0aW9uSU42V2ViS2l0MTJXZWJQYWdl
UHJveHlFTVMyX0Z2UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZlY3RvcklTNF9M
bTBFRUVSS05TMV8xNVNoYXJlYWJsZUJpdG1hcDZIYW5kbGVFYkVTNF9TOV9TRF9iRUV2UktOU18x
MEFyZ3VtZW50czRJVDFfVDJfVDNfVDRfRUVQVF9UMF8KK19fWk42V2ViS2l0MTJXZWJQYWdlUHJv
eHkxNnNldEZpbmRJbmRpY2F0b3JFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RGNlZl
Y3RvcklTMl9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUViCitfX1pONldlYktp
dDEzRmluZEluZGljYXRvcjZjcmVhdGVFUktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVSS04zV1RG
NlZlY3RvcklTMl9MbTBFRUVSS05TXzE1U2hhcmVhYmxlQml0bWFwNkhhbmRsZUUKK19fWk4zV1RG
NlZlY3RvcklON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVMbTBFRUMyRVJLUzNfCitfX1pOM1dURjEy
VmVjdG9yQ29waWVySUxiMEVON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEVFMTd1bmluaXRpYWxpemVk
Q29weUVQS1MyX1M1X1BTMl8KIF9fWk42V2ViS2l0MTRQYWdlQ2xpZW50SW1wbDE2c2V0RmluZElu
ZGljYXRvckVOM1dURjEwUGFzc1JlZlB0cklOU18xM0ZpbmRJbmRpY2F0b3JFRUViCiAtW1dLVmll
dyhJbnRlcm5hbCkgX3NldEZpbmRJbmRpY2F0b3I6ZmFkZU91dDpdCiBfX1pONldlYktpdDE5Rmlu
ZEluZGljYXRvcldpbmRvdzZjcmVhdGVFUDZXS1ZpZXcKQEAgLTI4NzgsNyArMjg3OCw3IEBAIF9f
Wk42V2ViS2l0MTNGaW5kSW5kaWNhdG9yNGRyYXdFUk43V2ViQ28KIF9fWk4zV1RGMTBSZWZDb3Vu
dGVkSU43V2ViQ29yZTlHZW5lcmF0b3JFRTVkZXJlZkV2CiBfV0tXaW5kb3dCb3VuY2VBbmltYXRp
b25Db250ZXh0Q3JlYXRlCiAtW1dlYkZpbmRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gX2luaXRX
aXRoRmluZEluZGljYXRvcldpbmRvdzphbmltYXRpb25EdXJhdGlvbjphbmltYXRpb25Qcm9ncmVz
c0NhbGxiYWNrOmFuaW1hdGlvbkRpZEVuZENhbGxiYWNrOl0KLV9fWk43Q29yZUlQQzEwQXJndW1l
bnRzM0lON1dlYkNvcmU5RmxvYXRSZWN0RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1
U2hhcmVhYmxlQml0bWFwNkhhbmRsZUVFRDJFdgorX19aTjdDb3JlSVBDMTBBcmd1bWVudHMzSU43
V2ViQ29yZTEyR3JhcGhpY3NSZWN0RU4zV1RGNlZlY3RvcklTMl9MbTBFRUVONldlYktpdDE1U2hh
cmVhYmxlQml0bWFwNkhhbmRsZUVFRDJFdgogLVtXZWJGaW5kSW5kaWNhdG9yV2luZG93QW5pbWF0
aW9uIHNldEN1cnJlbnRQcm9ncmVzczpdCiBfX1pONldlYktpdDE5RmluZEluZGljYXRvcldpbmRv
dzIzYm91bmNlQW5pbWF0aW9uQ2FsbGJhY2tFZAogX1dLV2luZG93Qm91bmNlQW5pbWF0aW9uU2V0
QW5pbWF0aW9uUHJvZ3Jlc3MKQEAgLTMxOTksMTAgKzMxOTksMTAgQEAgX19aTjNXVEY5SGFzaFRh
YmxlSU43V2ViQ29yZTdJbnRSZWN0RVN0NAogLVtXS1ByaW50aW5nVmlldyBpc0ZsaXBwZWRdCiAt
W1dLUHJpbnRpbmdWaWV3IGxvY2F0aW9uT2ZQcmludFJlY3Q6XQogLVtXS1ByaW50aW5nVmlldyBk
cmF3UGFnZUJvcmRlcldpdGhTaXplOl0KLV9fWk42V2ViS2l0MTJXZWJQYWdlUHJveHkxMGRyYXdI
ZWFkZXJFUE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTlGbG9hdFJlY3RFCi1fX1pONldl
YktpdDExV2ViVUlDbGllbnQxMGRyYXdIZWFkZXJFUE5TXzEyV2ViUGFnZVByb3h5RVBOU18xM1dl
YkZyYW1lUHJveHlFUktON1dlYkNvcmU5RmxvYXRSZWN0RQotX19aTjZXZWJLaXQxMldlYlBhZ2VQ
cm94eTEwZHJhd0Zvb3RlckVQTlNfMTNXZWJGcmFtZVByb3h5RVJLTjdXZWJDb3JlOUZsb2F0UmVj
dEUKLV9fWk42V2ViS2l0MTFXZWJVSUNsaWVudDEwZHJhd0Zvb3RlckVQTlNfMTJXZWJQYWdlUHJv
eHlFUE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTlGbG9hdFJlY3RFCitfX1pONldlYktp
dDEyV2ViUGFnZVByb3h5MTBkcmF3SGVhZGVyRVBOU18xM1dlYkZyYW1lUHJveHlFUktON1dlYkNv
cmUxMkdyYXBoaWNzUmVjdEUKK19fWk42V2ViS2l0MTFXZWJVSUNsaWVudDEwZHJhd0hlYWRlckVQ
TlNfMTJXZWJQYWdlUHJveHlFUE5TXzEzV2ViRnJhbWVQcm94eUVSS043V2ViQ29yZTEyR3JhcGhp
Y3NSZWN0RQorX19aTjZXZWJLaXQxMldlYlBhZ2VQcm94eTEwZHJhd0Zvb3RlckVQTlNfMTNXZWJG
cmFtZVByb3h5RVJLTjdXZWJDb3JlMTJHcmFwaGljc1JlY3RFCitfX1pONldlYktpdDExV2ViVUlD
bGllbnQxMGRyYXdGb290ZXJFUE5TXzEyV2ViUGFnZVByb3h5RVBOU18xM1dlYkZyYW1lUHJveHlF
UktON1dlYkNvcmUxMkdyYXBoaWNzUmVjdEUKIF9fWk43Q29yZUlQQzEzaGFuZGxlTWVzc2FnZUlO
OE1lc3NhZ2VzMTJXZWJQYWdlUHJveHkyMUNvbXB1dGVkUGFnZXNDYWxsYmFja0VONldlYktpdDEy
V2ViUGFnZVByb3h5RU1TNV9GdlJLTjNXVEY2VmVjdG9ySU43V2ViQ29yZTdJbnRSZWN0RUxtMEVF
RWR5RUVFdlBOU18xNUFyZ3VtZW50RGVjb2RlckVQVDBfVDFfCiBfX1pON0NvcmVJUEMxMEFyZ3Vt
ZW50czNJTjNXVEY2VmVjdG9ySU43V2ViQ29yZTdJbnRSZWN0RUxtMEVFRWR5RTZkZWNvZGVFUE5T
XzE1QXJndW1lbnREZWNvZGVyRVJTNl8KIF9fWk43Q29yZUlQQzEwQXJndW1lbnRzMklOM1dURjZW
ZWN0b3JJTjdXZWJDb3JlN0ludFJlY3RFTG0wRUVFZEU2ZGVjb2RlRVBOU18xNUFyZ3VtZW50RGVj
b2RlckVSUzZfCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQzIEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1vdmUgdGhl
bSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNlIGEg
R3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRoZWlyCisg
ICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZvcm1zLiBU
aGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0cy4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
ICogcHVibGljL1dlYkZsb2F0UmVjdC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdFJlY3Q6
Om9wZXJhdG9yIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCk6CisgICAgICAgICogc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzZXRXaW5k
b3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6d2luZG93UmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OnBhZ2VSZWN0KToKKyAgICAgICAg
KiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViRm9udEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGb250SW1wbDo6ZHJhd1RleHQpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVQcmludENvbnRleHQ6OnNwb29sUGFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNocm9tZVByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6CisgICAg
ICAgIChXZWJLaXQ6OkNocm9tZVBsdWdpblByaW50Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0cyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6cHJpbnRCZWdpbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lSW1wbDo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9Q
aXhlbFJlYWRiYWNrVG9DYW52YXMpOgorICAgICAgICAqIHRlc3RzL0RyYWdJbWFnZVRlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwOgorICAg
ICAgICAqIHRlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UkVDVFRvR3JhcGhpY3NSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorICAgICAgICAq
IHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDExLTA3LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJvbGxlZCBDaHJvbWl1bSByZXZpc2lvbiB0byA5MjYwNi4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCShyZXZpc2lvbiA5MTAzNCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKICNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1JlY3QuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTgxLDkgKzgxLDkg
QEAgc3RydWN0IFdlYkZsb2F0UmVjdCB7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAK
LSAgICBvcGVyYXRvciBXZWJDb3JlOjpGbG9hdFJlY3QoKSBjb25zdAorICAgIG9wZXJhdG9yIFdl
YkNvcmU6OkdyYXBoaWNzUmVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6RmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6R3JhcGhpY3NSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICNlbmRpZgogfTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVk
ZSAiRXh0ZXJuYWxQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1
ZGUgIkZpbGVJY29uTG9hZGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCkBAIC0xNzUsMTMgKzE3NSwx
MyBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmNocm9tZURlc3Ryb3llZCgpCiAgICAgLy8gT3Vy
IGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRoZSBXZWJWaWV3SW1wbC4KIH0KIAotdm9pZCBDaHJvbWVD
bGllbnRJbXBsOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgQ2hyb21l
Q2xpZW50SW1wbDo6c2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmIHIpCiB7CiAgICAg
aWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCiAgICAgICAgIG1fd2ViVmlldy0+Y2xpZW50KCktPnNl
dFdpbmRvd1JlY3QoSW50UmVjdChyKSk7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRJbXBs
Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRJbXBsOjp3aW5kb3dSZWN0
KCkKIHsKICAgICBXZWJSZWN0IHJlY3Q7CiAgICAgaWYgKG1fd2ViVmlldy0+Y2xpZW50KCkpCkBA
IC0xOTMsMTAgKzE5MywxMCBAQCBGbG9hdFJlY3QgQ2hyb21lQ2xpZW50SW1wbDo6d2luZG93UmVj
dCgpCiAgICAgICAgIHJlY3Qud2lkdGggPSBtX3dlYlZpZXctPnNpemUoKS53aWR0aDsKICAgICAg
ICAgcmVjdC5oZWlnaHQgPSBtX3dlYlZpZXctPnNpemUoKS5oZWlnaHQ7CiAgICAgfQotICAgIHJl
dHVybiBGbG9hdFJlY3QocmVjdCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChyZWN0KTsKIH0K
IAotRmxvYXRSZWN0IENocm9tZUNsaWVudEltcGw6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBD
aHJvbWVDbGllbnRJbXBsOjpwYWdlUmVjdCgpCiB7CiAgICAgLy8gV2UgaGlkZSB0aGUgZGV0YWls
cyBvZiB0aGUgd2luZG93J3MgYm9yZGVyIHRoaWNrbmVzcyBmcm9tIHRoZSB3ZWIgcGFnZSBieQog
ICAgIC8vIHNpbXBsZSByZS11c2luZyB0aGUgd2luZG93IHBvc2l0aW9uIGhlcmUuICBTbywgZnJv
bSB0aGUgcG9pbnQtb2YtdmlldyBvZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkg
KzYyLDkgQEAgcHVibGljOgogCiAgICAgLy8gQ2hyb21lQ2xpZW50IG1ldGhvZHM6CiAgICAgdmly
dHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHdpbmRvd1JlY3QoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBwYWdl
UmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NSZWN0IHdpbmRvd1Jl
Y3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogICAg
IHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKICAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDkxMDM0KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJ
bXBsLmgiCiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1JlY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5oIgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRm9udEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZvbnRJbXBsLmNwcAkocmV2aXNpb24g
OTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGb250SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFdlYkZvbnRJbXBsOjpkcmF3VGV4
dChXZWJDYW52YXMqIGNhCiAKICAgICBnYy5zYXZlKCk7CiAgICAgZ2Muc2V0RmlsbENvbG9yKGNv
bG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBnYy5jbGlwKFdlYkNvcmU6OkZsb2F0UmVj
dChjbGlwKSk7CisgICAgZ2MuY2xpcChXZWJDb3JlOjpHcmFwaGljc1JlY3QoY2xpcCkpOwogICAg
IG1fZm9udC5kcmF3VGV4dCgmZ2MsIHJ1biwgbGVmdEJhc2VsaW5lLCBmcm9tLCB0byk7CiAgICAg
Z2MucmVzdG9yZSgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUsNyBAQCBw
dWJsaWM6CiAKICAgICAgICAgY3R4LnNhdmUoKTsKICNpZiBPUyhVTklYKSAmJiAhT1MoREFSV0lO
KQotICAgICAgICBjdHguc2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlLCBzY2FsZSkpOwor
ICAgICAgICBjdHguc2NhbGUoV2ViQ29yZTo6R3JhcGhpY3NTaXplKHNjYWxlLCBzY2FsZSkpOwog
I2VuZGlmCiAgICAgICAgIGN0eC50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KC1wYWdlUmVj
dC54KCkpLAogICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PigtcGFnZVJl
Y3QueSgpKSk7CkBAIC0zNjUsNyArMzY1LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2Nh
bGU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQYWdlUmVjdHMoY29uc3QgRmxv
YXRSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWRlckhlaWdodCwgZmxvYXQgZm9vdGVySGVpZ2h0
LCBmbG9hdCB1c2VyU2NhbGVGYWN0b3IsIGZsb2F0JiBvdXRQYWdlSGVpZ2h0KQorICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEdyYXBoaWNzUmVjdCYgcHJpbnRSZWN0LCBm
bG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFj
dG9yLCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKICAgICB7CiAgICAgICAgIHJldHVybiBQcmludENv
bnRleHQ6OmNvbXB1dGVQYWdlUmVjdHMocHJpbnRSZWN0LCBoZWFkZXJIZWlnaHQsIGZvb3Rlckhl
aWdodCwgdXNlclNjYWxlRmFjdG9yLCBvdXRQYWdlSGVpZ2h0KTsKICAgICB9CkBAIC00MTIsNyAr
NDEyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gMS4wOwogICAgIH0KIAotICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUGFnZVJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgcHJpbnRSZWN0LCBmbG9h
dCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9y
LCBmbG9hdCYgb3V0UGFnZUhlaWdodCkKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBhZ2VSZWN0
cyhjb25zdCBHcmFwaGljc1JlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9h
dCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3RvciwgZmxvYXQmIG91dFBhZ2VIZWln
aHQpCiAgICAgewogICAgICAgICBtX3BhZ2VDb3VudCA9IG1fcGx1Z2luLT5wcmludEJlZ2luKElu
dFJlY3QocHJpbnRSZWN0KSwgbV9wcmludGVyRFBJKTsKICAgICB9CkBAIC0xMzM3LDcgKzEzMzcs
NyBAQCBpbnQgV2ViRnJhbWVJbXBsOjpwcmludEJlZ2luKGNvbnN0IFdlYlNpCiAgICAgZWxzZQog
ICAgICAgICBtX3ByaW50Q29udGV4dCA9IGFkb3B0UHRyKG5ldyBDaHJvbWVQcmludENvbnRleHQo
ZnJhbWUoKSkpOwogCi0gICAgRmxvYXRSZWN0IHJlY3QoMCwgMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhZ2VTaXplLndpZHRoKSwKKyAgICBHcmFwaGljc1JlY3QgcmVjdCgwLCAwLCBzdGF0aWNfY2Fz
dDxmbG9hdD4ocGFnZVNpemUud2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGZsb2F0PihwYWdlU2l6ZS5oZWlnaHQpKTsKICAgICBtX3ByaW50Q29udGV4dC0+YmVn
aW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBmbG9hdCBwYWdlSGVpZ2h0OwpA
QCAtMTc4Nyw3ICsxNzg3LDcgQEAgaW50IFdlYkZyYW1lSW1wbDo6cGFnZU51bWJlckZvckVsZW1l
bnRCeQogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgRmxvYXRT
aXplIHBhZ2VTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpOworICAg
IEdyYXBoaWNzU2l6ZSBwYWdlU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4
ZWxzKTsKICAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChlbGVt
ZW50LCBwYWdlU2l6ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk0LDcgKzEwOTQsNyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhCiAgICAgICAgIGltYWdl
QnVmZmVyLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHBpeGVsQXJyYXkuZ2V0KCksIHJlY3Qu
c2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKSwgSW50UG9pbnQoKSk7CiAg
ICAgICAgIGdjLnNhdmUoKTsKICAgICAgICAgZ2MudHJhbnNsYXRlKEludFNpemUoMCwgYml0bWFw
SGVpZ2h0KSk7Ci0gICAgICAgIGdjLnNjYWxlKEZsb2F0U2l6ZSgxLjBmLCAtMS4wZikpOworICAg
ICAgICBnYy5zY2FsZShHcmFwaGljc1NpemUoMS4wZiwgLTEuMGYpKTsKICAgICAgICAgLy8gVXNl
IGludmVydFJlY3QgaW4gbmV4dCBsaW5lLCBzbyB0aGF0IHRyYW5zZm9ybSBhYm92ZSBpbnZlcnRz
IGl0IGJhY2sgdG8KICAgICAgICAgLy8gZGVzaXJlZCBkZXN0aW5hdGlvbiByZWN0LgogICAgICAg
ICBnYy5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGludmVydFJlY3QubG9jYXRpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAwdTsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OkNvbG9yU3BhY2UsCisgICAgdmlydHVhbCB2b2lkIGRyYXcoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiwKKyAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yKQogICAgIHsKICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAgVEVTVChEcmFnSW1hZ2VU
ZXN0LCBOdWxsSGFuZGxpbmcpCiAKICAgICBkZWxldGVEcmFnSW1hZ2UoMCk7CiAgICAgRVhQRUNU
X1RSVUUoZHJhZ0ltYWdlU2l6ZSgwKS5pc1plcm8oKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHNjYWxl
RHJhZ0ltYWdlKDAsIEZsb2F0U2l6ZSgwLjUsIDAuNSkpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc2Nh
bGVEcmFnSW1hZ2UoMCwgR3JhcGhpY3NTaXplKDAuNSwgMC41KSkpOwogICAgIEVYUEVDVF9GQUxT
RShkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oMCwgMC41KSk7CiAgICAgRVhQRUNUX0ZBTFNF
KGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSgwKSk7CiAgICAgRVhQRUNUX0ZBTFNFKGNyZWF0ZURy
YWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZSgwKSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgVEVTVChE
cmFnSW1hZ2VUZXN0LCBOb25OdWxsSGFuZGxpbmcpCiAgICAgRHJhZ0ltYWdlUmVmIGRyYWdJbWFn
ZSA9IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSh0ZXN0SW1hZ2UuZ2V0KCkpOwogICAgIEFTU0VS
VF9UUlVFKGRyYWdJbWFnZSk7CiAKLSAgICBkcmFnSW1hZ2UgPSBzY2FsZURyYWdJbWFnZShkcmFn
SW1hZ2UsIEZsb2F0U2l6ZSgwLjUsIDAuNSkpOworICAgIGRyYWdJbWFnZSA9IHNjYWxlRHJhZ0lt
YWdlKGRyYWdJbWFnZSwgR3JhcGhpY3NTaXplKDAuNSwgMC41KSk7CiAgICAgQVNTRVJUX1RSVUUo
ZHJhZ0ltYWdlKTsKICAgICBJbnRTaXplIHNpemUgPSBkcmFnSW1hZ2VTaXplKGRyYWdJbWFnZSk7
CiAgICAgRVhQRUNUX0VRKDEsIHNpemUud2lkdGgoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1Njcm9sbEFuaW1hdG9yTm9uZVRlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvU2Nyb2xsQW5pbWF0b3JOb25lVGVzdC5jcHAJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9TY3JvbGxBbmlt
YXRvck5vbmVUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5j
bHVkZSAiU2Nyb2xsQW5pbWF0b3JOb25lLmgiCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKQEAgLTg3LDcgKzg3LDcg
QEAgcHVibGljOgogICAgICAgICBtX3ZlcnRpY2FsRGF0YS5yZXNldCgpOwogICAgIH0KIAotICAg
IE1PQ0tfTUVUSE9EMShzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24sIHZvaWQoY29uc3Qg
RmxvYXRQb2ludCYpKTsKKyAgICBNT0NLX01FVEhPRDEoc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uLCB2b2lkKGNvbnN0IEdyYXBoaWNzUG9pbnQmKSk7CiB9OwogCiBURVNUKFNjcm9sbEFu
aW1hdG9yRW5hYmxlZCwgRW5hYmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgRmxvYXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChjb25zdCBSRUNUKiByZWN0KQorc3Rh
dGljIEdyYXBoaWNzUmVjdCBSRUNUVG9HcmFwaGljc1JlY3QoY29uc3QgUkVDVCogcmVjdCkKIHsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT5sZWZ0KSwKLSAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LT50b3ApLAotICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCksCi0gICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC0+Ym90dG9t
IC0gcmVjdC0+dG9wKSk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdChzdGF0aWNfY2FzdDxHcmFw
aGljc1VuaXQ+KHJlY3QtPmxlZnQpLAorICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
R3JhcGhpY3NVbml0PihyZWN0LT50b3ApLAorICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R3JhcGhpY3NVbml0PihyZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQpLAorICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NVbml0PihyZWN0LT5ib3R0b20gLSByZWN0LT50
b3ApKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LApAQCAtMTE5LDcgKzExOSw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBOb0xheWVy
KQogCiAgICAgLy8gU2NhbGVUcmFuc2Zvcm0KICAgICBzcmMtPmNvbnRleHQoKS0+c2F2ZSgpOwot
ICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUoMi4wLCAwLjUpKTsKKyAgICBzcmMt
PmNvbnRleHQoKS0+c2NhbGUoR3JhcGhpY3NTaXplKDIuMCwgMC41KSk7CiAgICAgewogICAgICAg
ICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOwogICAgICAgICBoZWxwZXIuaW5pdChzcmMtPmNvbnRl
eHQoKSwKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgV2hpdGVMYXll
cikKIAogICAgIC8vIFNjYWxlVHJhbnNmb3JtCiAgICAgc3JjLT5jb250ZXh0KCktPnNhdmUoKTsK
LSAgICBzcmMtPmNvbnRleHQoKS0+c2NhbGUoRmxvYXRTaXplKDIuMCwgMC41KSk7CisgICAgc3Jj
LT5jb250ZXh0KCktPnNjYWxlKEdyYXBoaWNzU2l6ZSgyLjAsIDAuNSkpOwogICAgIHsKICAgICAg
ICAgVHJhbnNwYXJlbmN5V2luIGhlbHBlcjsKICAgICAgICAgaGVscGVyLmluaXQoc3JjLT5jb250
ZXh0KCksCkBAIC0yNTksNyArMjU5LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIE9wYXF1ZUNv
bXBvc2l0ZUxheQogCiAgICAgLy8gU2NhbGVUcmFuc2Zvcm0KICAgICBzcmMtPmNvbnRleHQoKS0+
c2F2ZSgpOwotICAgIHNyYy0+Y29udGV4dCgpLT5zY2FsZShGbG9hdFNpemUoMi4wLCAwLjUpKTsK
KyAgICBzcmMtPmNvbnRleHQoKS0+c2NhbGUoR3JhcGhpY3NTaXplKDIuMCwgMC41KSk7CiAgICAg
ewogICAgICAgICBUcmFuc3BhcmVuY3lXaW4gaGVscGVyOwogICAgICAgICBoZWxwZXIuaW5pdChz
cmMtPmNvbnRleHQoKSwKQEAgLTMxMSwxMCArMzExLDEwIEBAIFRFU1QoVHJhbnNwYXJlbmN5V2lu
LCBPcGFxdWVDb21wb3NpdGVMYXkKICAgICAvLyBNYWtlIGEgcmVkIGJvdHRvbSBsYXllciwgZm9s
bG93ZWQgYnkgYSBoYWxmIGdyZWVuIG5leHQgbGF5ZXIgQCA1MCUuCiAgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpKTsKIAotICAgIEZsb2F0UmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOwor
ICAgIEdyYXBoaWNzUmVjdCBmdWxsUmVjdCgwLCAwLCAxNiwgMTYpOwogICAgIHNyYy0+Y29udGV4
dCgpLT5maWxsUmVjdChmdWxsUmVjdCwgcmVkLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBz
cmMtPmNvbnRleHQoKS0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigwLjUpOwotICAgIEZsb2F0UmVj
dCByaWdodEhhbGYoOCwgMCwgOCwgMTYpOworICAgIEdyYXBoaWNzUmVjdCByaWdodEhhbGYoOCwg
MCwgOCwgMTYpOwogICAgIHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChyaWdodEhhbGYsIGdyZWVu
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIC8vIE1ha2UgYSB0cmFuc3BhcmVuY3kgbGF5
ZXIgaW5zZXQgYnkgb25lIHBpeGVsLCBhbmQgZmlsbCBpdCBpbnNldCBieQpAQCAtMzI2LDcgKzMy
Niw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBPcGFxdWVDb21wb3NpdGVMYXkKICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLAogICAgICAgICAgICAg
ICAgICAgICBJbnRSZWN0KDEsIDEsIDE0LCAxNCkpOwogCi0gICAgICAgIEZsb2F0UmVjdCBpbm5l
cigyLCAyLCAxMiwgMTIpOworICAgICAgICBHcmFwaGljc1JlY3QgaW5uZXIoMiwgMiwgMTIsIDEy
KTsKICAgICAgICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QoaW5uZXIsIENvbG9yKDB4N2Yw
MDAwMDApLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgLy8gVGhlc2UgY29vcmRpbmF0
ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsYXllciwgd2hpc2ggaXMgaW5zZXQgYnkgMXgxCiAgICAg
ICAgIC8vIHBpeGVscyBmcm9tIHRoZSB0b3AgbGVmdC4gU28gd2UncmUgYWN0dWFsbHkgY2xlYXJp
bmcgKDIsIDIpIGFuZApAQCAtMzY0LDcgKzM2NCw3IEBAIFRFU1QoVHJhbnNwYXJlbmN5V2luLCBU
cmFuc2xhdGVPcGFxdWVDb20KICAgICAvLyBGaWxsIHdpdGggd2hpdGUuCiAgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBzcmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIENvbG9y
U3BhY2VEZXZpY2VSR0IpKTsKICAgICBDb2xvciB3aGl0ZSgweEZGRkZGRkZGKTsKLSAgICBGbG9h
dFJlY3QgZnVsbFJlY3QoMCwgMCwgMTYsIDE2KTsKKyAgICBHcmFwaGljc1JlY3QgZnVsbFJlY3Qo
MCwgMCwgMTYsIDE2KTsKICAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJlY3QoZnVsbFJlY3QsIHdo
aXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIC8vIFNjcm9sbCBkb3duIGJ5IDggKGNv
b3JkaW5hdGUgc3lzdGVtIGdvZXMgdXApLgpAQCAtMzg0LDcgKzM4NCw3IEBAIFRFU1QoVHJhbnNw
YXJlbmN5V2luLCBUcmFuc2xhdGVPcGFxdWVDb20KIAogICAgICAgICAvLyBEcmF3IGEgcmVkIHBp
eGVsIGF0ICgxNSwgMTUpLiBUaGlzIHNob3VsZCBiZSB0aGUgYXQgKDE1LCA3KSBhZnRlcgogICAg
ICAgICAvLyB0aGUgdHJhbnNmb3JtLgotICAgICAgICBGbG9hdFJlY3QgYm90dG9tUmlnaHQoMTUs
IDE1LCAxLCAxKTsKKyAgICAgICAgR3JhcGhpY3NSZWN0IGJvdHRvbVJpZ2h0KDE1LCAxNSwgMSwg
MSk7CiAgICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KGJvdHRvbVJpZ2h0LCBncmVl
biwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKICAg
ICB9CkBAIC00MDMsNyArNDAzLDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFJvdGF0ZU9wYXF1
ZUNvbXBvcwogCiAgICAgLy8gVGhlIGJhY2tncm91bmQgaXMgd2hpdGUuCiAgICAgQ29sb3Igd2hp
dGUoMHhGRkZGRkZGRik7Ci0gICAgRmxvYXRSZWN0IGZ1bGxSZWN0KDAsIDAsIDE2LCAxNik7Cisg
ICAgR3JhcGhpY3NSZWN0IGZ1bGxSZWN0KDAsIDAsIDE2LCAxNik7CiAgICAgc3JjLT5jb250ZXh0
KCktPmZpbGxSZWN0KGZ1bGxSZWN0LCB3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKICAg
ICAvLyBSb3RhdGUgdGhlIGltYWdlIGJ5IDkwIGRlZ3JlZXMuIFRoaXMgbWF0cml4IGlzIHRoZSBz
YW1lIGFzCkBAIC00MjAsNyArNDIwLDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFJvdGF0ZU9w
YXF1ZUNvbXBvcwogICAgIC8vIFNpbmNlIHRoZSByb3RhdGlvbiBpcyBhcHBsaWVkLCB0aGlzIHdp
bGwgYWN0dWFsbHkgYmUgYSB2ZXJ0aWNhbCBsaW5lCiAgICAgLy8gZG93biB0aGUgbWlkZGxlIG9m
IHRoZSBpbWFnZS4KICAgICBzcmMtPmNvbnRleHQoKS0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigw
LjUpOwotICAgIEZsb2F0UmVjdCBibGFja1JlY3QoMCwgLTksIDE2LCAyKTsKKyAgICBHcmFwaGlj
c1JlY3QgYmxhY2tSZWN0KDAsIC05LCAxNiwgMik7CiAgICAgQ29sb3IgYmxhY2soMHhGRjAwMDAw
MCk7CiAgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KGJsYWNrUmVjdCwgYmxhY2ssIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogCkBAIC00ODIsMTAgKzQ4MiwxMCBAQCBURVNUKFRyYW5zcGFyZW5j
eVdpbiwgRElTQUJMRURfVHJhbnNsYXRlCiAKICAgICAvLyBUaGUgYmFja2dyb3VuZCBpcyB3aGl0
ZSBvbiB0b3Agd2l0aCByZWQgb24gYm90dG9tLgogICAgIENvbG9yIHdoaXRlKDB4RkZGRkZGRkYp
OwotICAgIEZsb2F0UmVjdCB0b3BSZWN0KDAsIDAsIDE2LCA4KTsKKyAgICBHcmFwaGljc1JlY3Qg
dG9wUmVjdCgwLCAwLCAxNiwgOCk7CiAgICAgc3JjLT5jb250ZXh0KCktPmZpbGxSZWN0KHRvcFJl
Y3QsIHdoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBDb2xvciByZWQoMHhGRkZGMDAw
MCk7Ci0gICAgRmxvYXRSZWN0IGJvdHRvbVJlY3QoMCwgOCwgMTYsIDgpOworICAgIEdyYXBoaWNz
UmVjdCBib3R0b21SZWN0KDAsIDgsIDE2LCA4KTsKICAgICBzcmMtPmNvbnRleHQoKS0+ZmlsbFJl
Y3QoYm90dG9tUmVjdCwgcmVkLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIAogICAgIHNyYy0+Y29u
dGV4dCgpLT5zYXZlKCk7CkBAIC01MjcsNyArNTI3LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4s
IFNjYWxlKQogewogICAgIC8vIENyZWF0ZSBhbiBvcGFxdWUgd2hpdGUgYnVmZmVyLgogICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gc3JjKEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxNiwgMTYp
LCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7Ci0gICAgRmxvYXRSZWN0IGZ1bGxCdWZmZXIoMCwgMCwg
MTYsIDE2KTsKKyAgICBHcmFwaGljc1JlY3QgZnVsbEJ1ZmZlcigwLCAwLCAxNiwgMTYpOwogICAg
IHNyYy0+Y29udGV4dCgpLT5maWxsUmVjdChmdWxsQnVmZmVyLCBDb2xvcjo6d2hpdGUsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogCiAgICAgLy8gU2NhbGUgYnkgMnguCkBAIC01ODAsMTMgKzU4MCwx
MyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgU2NhbGVUcmFuc3BhcmVuY3kpCiB7CiAgICAgLy8g
Q3JlYXRlIGFuIG9wYXF1ZSB3aGl0ZSBidWZmZXIuCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBz
cmMoSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDE2LCAxNiksIENvbG9yU3BhY2VEZXZpY2VS
R0IpKTsKLSAgICBGbG9hdFJlY3QgZnVsbEJ1ZmZlcigwLCAwLCAxNiwgMTYpOworICAgIEdyYXBo
aWNzUmVjdCBmdWxsQnVmZmVyKDAsIDAsIDE2LCAxNik7CiAgICAgc3JjLT5jb250ZXh0KCktPmZp
bGxSZWN0KGZ1bGxCdWZmZXIsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAK
ICAgICAvLyBNYWtlIGFub3RoZXIgbGF5ZXIgKHdoaWNoIGR1cGxpY2F0ZXMgaG93IFdlYktpdCB3
aWxsIG1ha2UgdGhpcykuIFdlIGZpbGwKICAgICAvLyB0aGUgdG9wIGhhbGYgd2l0aCByZWQsIGFu
ZCBoYXZlIHRoZSBsYXllciBiZSA1MCUgb3BhcXVlLgogICAgIHNyYy0+Y29udGV4dCgpLT5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKDAuNSk7Ci0gICAgRmxvYXRSZWN0IHRvcEhhbGYoMCwgMCwgMTYs
IDgpOworICAgIEdyYXBoaWNzUmVjdCB0b3BIYWxmKDAsIDAsIDE2LCA4KTsKICAgICBzcmMtPmNv
bnRleHQoKS0+ZmlsbFJlY3QodG9wSGFsZiwgQ29sb3IoMHhGRkZGMDAwMCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwogCiAgICAgLy8gU2NhbGUgYnkgMnguCkBAIC02NTIsNyArNjUyLDcgQEAgVEVT
VChUcmFuc3BhcmVuY3lXaW4sIFRleHQpCiAKICAgICAgICAgLy8gV3JpdGUgc2V2ZXJhbCBkaWZm
ZXJlbnQgc3F1YXJlcyB0byBzaW11bGF0ZSBDbGVhclR5cGUuIFRoZXNlIHNob3VsZAogICAgICAg
ICAvLyBhbGwgcmVkdWNlIHRvIDIvMyBjb3ZlcmFnZS4KLSAgICAgICAgRmxvYXRSZWN0IHBpeGVs
KDAsIDAsIDEsIDEpOworICAgICAgICBHcmFwaGljc1JlY3QgcGl4ZWwoMCwgMCwgMSwgMSk7CiAg
ICAgICAgIGhlbHBlci5jb250ZXh0KCktPmZpbGxSZWN0KHBpeGVsLCAweEZGRkYwMDAwLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgcGl4ZWwubW92ZSgxLjBmLCAwLjBmKTsKICAgICAg
ICAgaGVscGVyLmNvbnRleHQoKS0+ZmlsbFJlY3QocGl4ZWwsIDB4RkYwMEZGMDAsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3lu
Y2hyb25pemVyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw3ICsxNTgsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5j
U2ltcGxlVHJlCiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApKTsKIAogICAgIC8vIFBpY2sgc29tZSByYW5kb20gcHJvcGVydGllcyB0byBzZXQuIFRo
ZSB2YWx1ZXMgYXJlIG5vdCBpbXBvcnRhbnQsIHdlJ3JlIGp1c3QgdGVzdGluZyB0aGF0IGF0IGxl
YXN0IHNvbWUgcHJvcGVydGllcyBhcmUgbWFraW5nIGl0IHRocm91Z2guCi0gICAgRmxvYXRQb2lu
dCByb290UG9zaXRpb24gPSBGbG9hdFBvaW50KDIuMywgNy40KTsKKyAgICBHcmFwaGljc1BvaW50
IHJvb3RQb3NpdGlvbiA9IEdyYXBoaWNzUG9pbnQoMi4zLCA3LjQpOwogICAgIGxheWVyVHJlZVJv
b3QtPnNldFBvc2l0aW9uKHJvb3RQb3NpdGlvbik7CiAKICAgICBmbG9hdCBmaXJzdENoaWxkT3Bh
Y2l0eSA9IDAuMjU7CkBAIC0xNzEsNyArMTcxLDcgQEAgVEVTVChUcmVlU3luY2hyb25pemVyVGVz
dCwgc3luY1NpbXBsZVRyZQogICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CiAKICAgICAvLyBDaGVjayB0aGF0IHRo
ZSBwcm9wZXJ0eSB2YWx1ZXMgd2Ugc2V0IG9uIHRoZSBMYXllckNocm9taXVtIHRyZWUgYXJlIHJl
ZmxlY3RlZCBpbiB0aGUgQ0NMYXllckltcGwgdHJlZS4KLSAgICBGbG9hdFBvaW50IHJvb3RDQ0xh
eWVyUG9zaXRpb24gPSBjY0xheWVyVHJlZVJvb3QtPnBvc2l0aW9uKCk7CisgICAgR3JhcGhpY3NQ
b2ludCByb290Q0NMYXllclBvc2l0aW9uID0gY2NMYXllclRyZWVSb290LT5wb3NpdGlvbigpOwog
ICAgIEVYUEVDVF9FUShyb290UG9zaXRpb24ueCgpLCByb290Q0NMYXllclBvc2l0aW9uLngoKSk7
CiAgICAgRVhQRUNUX0VRKHJvb3RQb3NpdGlvbi55KCksIHJvb3RDQ0xheWVyUG9zaXRpb24ueSgp
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMS0w
Ny0xNCAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVu
YW1lIEZsb2F0UmVjdC9Qb2ludC9TaXplIGFuZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcg
dGhlIEZsb2F0KiBncmFwaGljcyBjbGFzc2VzIHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFj
dGlvbiB3aGljaCBjdXJyZW50bHkgY2hhbmdlcyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJv
bSBGbG9hdCB0byBDR0Zsb2F0IG9uIENHIHBsYXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNz
IHVzZSA2NGJpdCBmbG9hdHMgZm9yIHRoZXNlIG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRFZmw6Ondp
bmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZsOjpzZXRXaW5kb3dS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbDo6cGFnZVJlY3QpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oOgorICAgICAgICAqIGV3ay9l
d2tfcHJpdmF0ZS5oOgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tf
dmlld19wYWludF9jb250ZXh0X3NjYWxlKToKKyAgICAgICAgKGV3a192aWV3X3BhZ2VfcmVjdF9n
ZXQpOgorCiAyMDExLTA3LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQXBwbGljYXRpb25DYWNoZSB1cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVs
eSBmYWlsIHdoZW4gcmVhY2hpbmcgcGVyLW9yaWdpbiBxdW90YQpJbmRleDogU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlICJF
V2ViS2l0LmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNpbmNsdWRlICJGaWxlSWNvbkxv
YWRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRF
ZmwuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC05NywxNyArOTcsMTcgQEAgdm9p
ZCBDaHJvbWVDbGllbnRFZmw6OmZvY3VzZWRGcmFtZUNoYW5nZQogewogfQogCi1GbG9hdFJlY3Qg
Q2hyb21lQ2xpZW50RWZsOjp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRF
Zmw6OndpbmRvd1JlY3QoKQogewogICAgIEVjb3JlX0V2YXMqIGVlID0gMDsKICAgICBpbnQgeCwg
eSwgdywgaDsKIAogICAgIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVj
dF9ldmFzX2dldChtX3ZpZXcpKTsKICAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgJngs
ICZ5LCAmdywgJmgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoeCwgeSwgdywgaCk7CisgICAgcmV0
dXJuIEdyYXBoaWNzUmVjdCh4LCB5LCB3LCBoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRFZmw6
OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBDaHJvbWVDbGllbnRF
Zmw6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewogICAgIGlmICgh
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2luZG93X2dldChtX3ZpZXcpKQog
ICAgICAgICByZXR1cm47CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRFZmw6
OnNldFdpbmRvd1JlY3QoY29ucwogICAgIGVjb3JlX2V2YXNfcmVzaXplKGVlLCBpbnRyZWN0Lndp
ZHRoKCksIGludHJlY3QuaGVpZ2h0KCkpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50RWZs
OjpwYWdlUmVjdCgpCitHcmFwaGljc1JlY3QgQ2hyb21lQ2xpZW50RWZsOjpwYWdlUmVjdCgpCiB7
CiAgICAgcmV0dXJuIGV3a192aWV3X3BhZ2VfcmVjdF9nZXQobV92aWV3KTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5o
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2lu
ZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3aW5kb3dS
ZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0
Jik7CisgICAgdmlydHVhbCBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAgdmlydHVh
bCBGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVj
dCgpOwogCiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ByaXZhdGUuaAkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBA
IEVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWMKIAogdm9pZCBld2tfdmll
d19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKTsKIAotV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQo
RXZhc19PYmplY3QgKm8pOworV2ViQ29yZTo6R3JhcGhpY3NSZWN0IGV3a192aWV3X3BhZ2VfcmVj
dF9nZXQoRXZhc19PYmplY3QgKm8pOwogCiBjb25zdCBjaGFyKiBld2tfc2V0dGluZ3NfZGVmYXVs
dF91c2VyX2FnZW50X2dldCh2b2lkKTsKIApJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a192aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMDgsNyArMzMwOCw3IEBAIHZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9zY2FsZShFd2tfVmkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihjdHh0KTsKIAotICAgIGN0eHQtPmdjLT5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVf
eCwgc2NhbGVfeSkpOworICAgIGN0eHQtPmdjLT5zY2FsZShXZWJDb3JlOjpHcmFwaGljc1NpemUo
c2NhbGVfeCwgc2NhbGVfeSkpOwogfQogCiAvKioKQEAgLTQ0NzMsNyArNDQ3Myw3IEBAIHZvaWQg
ZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXMKICAqCiAgKiBAcmV0dXJuIHBhZ2Ug
c2l6ZS4KICAqLwotV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoRXZh
c19PYmplY3QgKm8pCitXZWJDb3JlOjpHcmFwaGljc1JlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dl
dChFdmFzX09iamVjdCAqbykKIHsKICAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9u
IDkxMDM0KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92ZSB0
aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1c2Ug
YSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhlaXIK
KyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9ybXMu
IFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmplY3Rz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnQ6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnBhZ2VS
ZWN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDoKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgor
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBhZ2VzRm9yRnJhbWUp
OgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHA6CisgICAgICAgIChiZWdpbl9w
cmludF9jYWxsYmFjayk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2RyYXcpOgorCiAyMDExLTA3LTE0ICBMdWthc3ogU2xhY2hj
aWFrICA8bC5zbGFjaGNpYWtAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3Vz
dGF2byBOb3JvbmhhLgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgogI2luY2x1ZGUg
IkZpbGVJY29uTG9hZGVyLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHdGtVdGlsaXRp
ZXMuaCIKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3ll
ZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnQ6OndpbmRv
d1JlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudDo6d2luZG93UmVjdCgpCiB7CiAgICAg
R3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKG1f
d2ViVmlldykpOwogICAgIGlmIChndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHdpbmRvdykpIHsKQEAg
LTk3LDEwICs5NywxMCBAQCBGbG9hdFJlY3QgQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKICAg
ICAgICAgZ3RrX3dpbmRvd19nZXRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksICZ3aWR0aCwgJmhl
aWdodCk7CiAgICAgICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7
CiAgICAgfQotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0
KCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNz
UmVjdCYgcmVjdCkKIHsKICAgICBJbnRSZWN0IGludHJlY3QgPSBJbnRSZWN0KHJlY3QpOwogICAg
IFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzKiB3ZWJXaW5kb3dGZWF0dXJlcyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfd2luZG93X2ZlYXR1cmVzKG1fd2ViVmlldyk7CkBAIC0xMjYsNyArMTI2LDcgQEAg
dm9pZCBDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRgogICAgIH0KIH0KIAotRmxv
YXRSZWN0IENocm9tZUNsaWVudDo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVu
dDo6cGFnZVJlY3QoKQogewogICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKICNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigyLCAxOCwgMCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MywxMCArNDMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYpOworICAgICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAKLSAgICAgICAgdmlydHVh
bCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICAgICAgdmlydHVhbCBXZWJDb3Jl
OjpHcmFwaGljc1JlY3QgcGFnZVJlY3QoKTsKIAogICAgICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxl
RmFjdG9yKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAkocmV2aXNpb24gOTEw
MzQpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgaW50IER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0azo6cGFnZU51bWJlcgogICAgIEVsZW1lbnQqIGNvcmVFbGVtZW50
ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChBdG9taWNTdHJpbmcoaWQp
KTsKICAgICBpZiAoIWNvcmVFbGVtZW50KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJu
IFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoY29yZUVsZW1lbnQsIEZsb2F0U2l6
ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKKyAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdl
TnVtYmVyRm9yRWxlbWVudChjb3JlRWxlbWVudCwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aCwgcGFn
ZUhlaWdodCkpOwogfQogCiAvKioKQEAgLTI3NSw3ICsyNzUsNyBAQCBpbnQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrOjpudW1iZXJPZlBhCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJl
dHVybiAtMTsKIAotICAgIHJldHVybiBQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoY29yZUZy
YW1lLCBGbG9hdFNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7CisgICAgcmV0dXJuIFByaW50
Q29udGV4dDo6bnVtYmVyT2ZQYWdlcyhjb3JlRnJhbWUsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGgs
IHBhZ2VIZWlnaHQpKTsKIH0KIAogLyoqCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYwLDcgKzc2
MCw3IEBAIHN0YXRpYyB2b2lkIGJlZ2luX3ByaW50X2NhbGxiYWNrKEd0a1ByaW4KIAogICAgIGZs
b2F0IHdpZHRoID0gZ3RrX3ByaW50X2NvbnRleHRfZ2V0X3dpZHRoKGNvbnRleHQpOwogICAgIGZs
b2F0IGhlaWdodCA9IGd0a19wcmludF9jb250ZXh0X2dldF9oZWlnaHQoY29udGV4dCk7Ci0gICAg
RmxvYXRSZWN0IHByaW50UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBHcmFwaGljc1JlY3QgcHJpbnRSZWN0ID0gR3JhcGhpY3NSZWN0KDAsIDAsIHdpZHRoLCBoZWln
aHQpOwogCiAgICAgcHJpbnRDb250ZXh0LT5iZWdpbih3aWR0aCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWRpdG9y
Q2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTcsNiArNTYsNyBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc1F1YWQuaCIKICNpbmNsdWRl
ICJHdGtVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93
ZWJfdmlld19kcmF3KEd0awogICAgICAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7CiAgICAgICAg
IGlmICghcmVjdExpc3QtPnN0YXR1cyAmJiByZWN0TGlzdC0+bnVtX3JlY3RhbmdsZXMgPiAwKSB7
CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RMaXN0LT5udW1fcmVjdGFuZ2xl
czsgaSsrKQotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdChyZWN0TGlzdC0+cmVjdGFuZ2xlc1tpXSkpKTsKKyAgICAgICAgICAgICAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChHcmFwaGljc1JlY3QocmVjdExpc3QtPnJlY3Rhbmds
ZXNbaV0pKSk7CiAgICAgICAgIH0KICAgICAgICAgcGFpbnRXZWJWaWV3KGZyYW1lLCBwcml2LT50
cmFuc3BhcmVudCwgZ2MsIHJlY3QsIHJlY3RzKTsKIApJbmRleDogU291cmNlL1dlYktpdC9oYWlr
dS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wNy0xNCAgTGV2aSBXZWludHJhdWIgIDxs
ZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVuYW1lIEZsb2F0UmVjdC9Qb2ludC9TaXpl
IGFuZCBtb3ZlIHRoZW0gdG8gYW4gYWJzdHJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdpbmcgdGhlIEZsb2F0KiBncmFwaGljcyBjbGFz
c2VzIHRvIHVzZSBhIEdyYXBoaWNzVW5pdCBhYnN0cmFjdGlvbiB3aGljaCBjdXJyZW50bHkgY2hh
bmdlcyB0aGVpcgorICAgICAgICBiYXNlIHR5cGUgZnJvbSBGbG9hdCB0byBDR0Zsb2F0IG9uIENH
IHBsYXRmb3Jtcy4gVGhpcyBtYWtlcyA2NGJpdCBtYWNzIHVzZSA2NGJpdCBmbG9hdHMgZm9yIHRo
ZXNlIG9iamVjdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBuZXcgZnVuY3Rpb25hbGl0
eS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRXaW5kb3dSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpwYWdlUmVjdCk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKKwogMjAxMS0wNy0xMiAgSm9zZXBoIFBlY29yYXJv
ICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGUgdXBkYXRl
IHNob3VsZCBub3QgaW1tZWRpYXRlbHkgZmFpbCB3aGVuIHJlYWNoaW5nIHBlci1vcmlnaW4gcXVv
dGEKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJL
aXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSwyMSArNjEsMjEgQEAgdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Y2hyb21lRGVz
dHJveWVkKAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50SGFp
a3U6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgQ2hyb21lQ2xpZW50SGFp
a3U6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0JikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1JlY3QoKQor
R3JhcGhpY3NSZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZWN0KCkKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgMjAwLCAyMDApOworICAg
IHJldHVybiBHcmFwaGljc1JlY3QoMCwgMCwgMjAwLCAyMDApOwogfQogCi1GbG9hdFJlY3QgQ2hy
b21lQ2xpZW50SGFpa3U6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRIYWlr
dTo6cGFnZVJlY3QoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0
UmVjdCgwLCAwLCAyMDAsIDIwMCk7CisgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgwLCAwLCAyMDAs
IDIwMCk7CiB9CiAKIGZsb2F0IENocm9tZUNsaWVudEhhaWt1OjpzY2FsZUZhY3RvcigpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIg
KzMwLDEyIEBACiAjZGVmaW5lIENocm9tZUNsaWVudEhhaWt1X2gKIAogI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzUmVj
dC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzUmVjdDsKICAgICBjbGFzcyBQ
YWdlOwogICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogCkBAIC00NiwxMCArNDYsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJveWVk
KCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkKiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsg
fQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1JlY3QmKTsKKyAgICAgICAgdmlydHVh
bCBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHBhZ2VSZWN0KCk7CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VSZWN0KCk7CiAK
ICAgICAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDExLTA3LTE0ICBMZXZpIFdlaW50cmF1YiAg
PGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgRmxvYXRSZWN0L1BvaW50L1Np
emUgYW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUgRmxvYXQqIGdyYXBoaWNzIGNs
YXNzZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9uIHdoaWNoIGN1cnJlbnRseSBj
aGFuZ2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZsb2F0IHRvIENHRmxvYXQgb24g
Q0cgcGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNlIDY0Yml0IGZsb2F0cyBmb3Ig
dGhlc2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgcGFnZU51bWJlckZvckVsZW1lbnQ6ZWxlbWVudDpwYWdlV2lkdGhJblBpeGVsczpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgbnVtYmVyT2ZQYWdlczpwYWdlV2lkdGhJblBpeGVsczpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJpbnRUb0NHQ29udGV4dDpjZ0NvbnRleHQ6cGFnZVdp
ZHRoSW5QaXhlbHM6XSk6CisgICAgICAgICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbToK
KyAgICAgICAgKC1bTlNTdHJpbmcgX3dlYl9kcmF3QXRQb2ludDpmb250OnRleHRDb2xvcjphbGxv
d2luZ0ZvbnRTbW9vdGhpbmc6XSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlv
blBhbmVsLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29ycmVjdGlvblBhbmVsLm1tOgor
ICAgICAgICAoQ29ycmVjdGlvblBhbmVsOjpzaG93KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QpOgorICAg
ICAgICAoV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6cGFnZVJlY3QpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdobGln
aHRSZWN0KToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6cGFpbnRDdXN0b21IaWdobGlnaHQp
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNs
aWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6CisgICAgICAgICogV2ViS2l0Lm9yZGVyOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9jb21wdXRl
UGFnZVJlY3RzV2l0aFByaW50U2NhbGVGYWN0b3I6cGFnZVNpemU6XSk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2JlZ2luUHJpbnRN
b2RlV2l0aFBhZ2VXaWR0aDpoZWlnaHQ6c2hyaW5rVG9GaXQ6XSk6CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IF9iZWdpblNjcmVlblBhZ2luYXRpb25Nb2RlV2l0aFBhZ2VTaXplOnNocmlua1RvRml0
Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6aGVp
Z2h0Om1heGltdW1TaHJpbmtSYXRpbzphZGp1c3RpbmdWaWV3U2l6ZTpdKToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgc2VsZWN0aW9uVGV4dFJlY3RzXSk6CisgICAgICAgICogV2ViVmlldy9XZWJS
ZW5kZXJOb2RlLm1tOgorICAgICAgICAoY29weVJlbmRlck5vZGUpOgorCiAyMDExLTA3LTEzICBK
b3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wcm92ZSBu
YW1lcyBvZiBzb21lIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIGFjY2Vzc29yIG1ldGhvZHMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYktpdC5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJLaXQub3JkZXIJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViS2l0Lm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0LDggKzE2NzQsOCBAQCBf
X1pON1dlYkNvcmUyMVBsYXRmb3JtS2V5Ym9hcmRFdmVudEQxRXYKIC1bV2ViRnJhbWVWaWV3IF9z
Y3JvbGxMaW5lSG9yaXpvbnRhbGx5Ol0KIC1bV2ViRnJhbWVWaWV3IF9ob3Jpem9udGFsS2V5Ym9h
cmRTY3JvbGxEaXN0YW5jZV0KIC1bV2ViRnJhbWVWaWV3IF9zY3JvbGxIb3Jpem9udGFsbHlCeTpd
Ci1fX1pOMTVXZWJFZGl0b3JDbGllbnQxOXNob3dDb3JyZWN0aW9uUGFuZWxFTjdXZWJDb3JlMTlD
b3JyZWN0aW9uUGFuZWxJbmZvOVBhbmVsVHlwZUVSS05TMF85RmxvYXRSZWN0RVJLTjNXVEY2U3Ry
aW5nRVM5X1JLTlM2XzZWZWN0b3JJUzdfTG0wRUVFCi1fX1pOMTVDb3JyZWN0aW9uUGFuZWw0c2hv
d0VQN1dlYlZpZXdON1dlYkNvcmUxOUNvcnJlY3Rpb25QYW5lbEluZm85UGFuZWxUeXBlRVJLTlMy
XzlGbG9hdFJlY3RFUktOM1dURjZTdHJpbmdFU0JfUktOUzhfNlZlY3RvcklTOV9MbTBFRUUKK19f
Wk4xNVdlYkVkaXRvckNsaWVudDE5c2hvd0NvcnJlY3Rpb25QYW5lbEVON1dlYkNvcmUxOUNvcnJl
Y3Rpb25QYW5lbEluZm85UGFuZWxUeXBlRVJLTlMwXzEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2U3Ry
aW5nRVM5X1JLTlM2XzZWZWN0b3JJUzdfTG0wRUVFCitfX1pOMTVDb3JyZWN0aW9uUGFuZWw0c2hv
d0VQN1dlYlZpZXdON1dlYkNvcmUxOUNvcnJlY3Rpb25QYW5lbEluZm85UGFuZWxUeXBlRVJLTlMy
XzEyR3JhcGhpY3NSZWN0RVJLTjNXVEY2U3RyaW5nRVNCX1JLTlM4XzZWZWN0b3JJUzlfTG0wRUVF
CiBfX19zaG93X2Jsb2NrX2ludm9rZV8xCiBfX1pOMTVDb3JyZWN0aW9uUGFuZWwyNWhhbmRsZUFj
Y2VwdGVkUmVwbGFjZW1lbnRFUDhOU1N0cmluZ1MxX1MxX2wKIC1bV2ViVmlldyhXZWJWaWV3VGV4
dENoZWNraW5nKSBoYW5kbGVDb3JyZWN0aW9uUGFuZWxSZXN1bHQ6XQpAQCAtMTcwNCw5ICsxNzA0
LDkgQEAgX19fcmVxdWVzdENoZWNraW5nT2ZTdHJpbmdfYmxvY2tfaW52b2tlXwogLVtXZWJFZGl0
b3JTcGVsbENoZWNrUmVzcG9uZGVyIHBlcmZvcm1dCiAtW1dlYkVkaXRvclNwZWxsQ2hlY2tSZXNw
b25kZXIgLmN4eF9kZXN0cnVjdF0KIF9fX2Rlc3Ryb3lfaGVscGVyX2Jsb2NrXzEKLV9fWk4xNVdl
YkNocm9tZUNsaWVudDE5Y3VzdG9tSGlnaGxpZ2h0UmVjdEVQTjdXZWJDb3JlNE5vZGVFUktOM1dU
RjEyQXRvbWljU3RyaW5nRVJLTlMwXzlGbG9hdFJlY3RFCitfX1pOMTVXZWJDaHJvbWVDbGllbnQx
OWN1c3RvbUhpZ2hsaWdodFJlY3RFUE43V2ViQ29yZTROb2RlRVJLTjNXVEYxMkF0b21pY1N0cmlu
Z0VSS05TMF8xMkdyYXBoaWNzUmVjdEUKIC1bV2ViSFRNTFZpZXcoV2ViSW50ZXJuYWwpIF9oaWdo
bGlnaHRlckZvclR5cGU6XQotX19aTjE1V2ViQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbUhpZ2hs
aWdodEVQTjdXZWJDb3JlNE5vZGVFUktOM1dURjEyQXRvbWljU3RyaW5nRVJLTlMwXzlGbG9hdFJl
Y3RFUzlfYmIKK19fWk4xNVdlYkNocm9tZUNsaWVudDIwcGFpbnRDdXN0b21IaWdobGlnaHRFUE43
V2ViQ29yZTROb2RlRVJLTjNXVEYxMkF0b21pY1N0cmluZ0VSS05TMF8xMkdyYXBoaWNzUmVjdEVT
OV9iYgogLVtXZWJWaWV3KFdlYlBlbmRpbmdQdWJsaWMpIGZpbmRTdHJpbmc6b3B0aW9uczpdCiBf
X1pMMTBmaW5kU3RyaW5nUDZOU1ZpZXdQOE5TU3RyaW5nbQogLVtXZWJIVE1MVmlldyhXZWJEb2N1
bWVudEludGVybmFsUHJvdG9jb2xzKSBfZmluZFN0cmluZzpvcHRpb25zOl0KQEAgLTE3OTIsNyAr
MTc5Miw3IEBAIF9XS1FUTW92aWVNYXhUaW1lU2Vla2FibGUKIC1bV2ViRnJhbWUgY2hpbGRGcmFt
ZXNdCiAtW1dlYkZyYW1lIG5hbWVdCiArW1dlYkNvcmVTdGF0aXN0aWNzIGphdmFTY3JpcHRPYmpl
Y3RzQ291bnRdCi1fX1pOMTVXZWJDaHJvbWVDbGllbnQxM3NldFdpbmRvd1JlY3RFUktON1dlYkNv
cmU5RmxvYXRSZWN0RQorX19aTjE1V2ViQ2hyb21lQ2xpZW50MTNzZXRXaW5kb3dSZWN0RVJLTjdX
ZWJDb3JlMTJHcmFwaGljc1JlY3RFCiAtW1dlYkZyYW1lVmlldyBzY3JvbGxUb0JlZ2lubmluZ09m
RG9jdW1lbnQ6XQogLVtXZWJGcmFtZVZpZXcgX3Njcm9sbFRvQmVnaW5uaW5nT2ZEb2N1bWVudF0K
IC1bV2ViRnJhbWVWaWV3IHNjcm9sbFRvRW5kT2ZEb2N1bWVudDpdCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDkxMDM0KQorKysg
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjc1LDEyICsyNzUsMTIgQEAgLSAoTlNTdHJpbmcgKiljb3VudGVyVmFsdWVGb3JFbGVt
ZW50OihETwogCiAtIChpbnQpcGFnZU51bWJlckZvckVsZW1lbnQ6KERPTUVsZW1lbnQqKWVsZW1l
bnQ6KGZsb2F0KXBhZ2VXaWR0aEluUGl4ZWxzOihmbG9hdClwYWdlSGVpZ2h0SW5QaXhlbHMKIHsK
LSAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVudChjb3JlKGVsZW1l
bnQpLCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwor
ICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGNvcmUoZWxlbWVu
dCksIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7
CiB9CiAKIC0gKGludCludW1iZXJPZlBhZ2VzOihmbG9hdClwYWdlV2lkdGhJblBpeGVsczooZmxv
YXQpcGFnZUhlaWdodEluUGl4ZWxzCiB7Ci0gICAgcmV0dXJuIFByaW50Q29udGV4dDo6bnVtYmVy
T2ZQYWdlcyhfcHJpdmF0ZS0+Y29yZUZyYW1lLCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMs
IHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgIHJldHVybiBQcmludENvbnRleHQ6Om51bWJlck9m
UGFnZXMoX3ByaXZhdGUtPmNvcmVGcmFtZSwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4ZWxz
LCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilwYWdlUHJvcGVydHk6
KGNvbnN0IGNoYXIgKilwcm9wZXJ0eU5hbWU6KGludClwYWdlTnVtYmVyCkBAIC0zMDUsNyArMzA1
LDcgQEAgLSAodm9pZClwcmludFRvQ0dDb250ZXh0OihDR0NvbnRleHRSZWYpYwogICAgICAgICBy
ZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7
Ci0gICAgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoY29yZUZyYW1l
LCBncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdo
dEluUGl4ZWxzKSk7CisgICAgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJp
ZXMoY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBp
eGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gOTEwMzQp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihO
U1BvaW50KXBvaW50IAogICAgICAgICBbW3RleHRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5h
bWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSBnZXRSZWQ6JnJlZCBncmVlbjomZ3JlZW4gYmx1ZTom
Ymx1ZSBhbHBoYTomYWxwaGFdOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9y
KG1ha2VSR0JBKHJlZCAqIDI1NSwgZ3JlZW4gKiAyNTUsIGJsdWUgKiAyNTUsIGFscGhhICogMjU1
KSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAKLSAgICAgICAgd2ViQ29yZUZvbnQuZHJhd1RleHQo
JmdyYXBoaWNzQ29udGV4dCwgcnVuLCBGbG9hdFBvaW50KHBvaW50LngsIChmbGlwcGVkID8gcG9p
bnQueSA6ICgtMSAqIHBvaW50LnkpKSkpOworICAgICAgICB3ZWJDb3JlRm9udC5kcmF3VGV4dCgm
Z3JhcGhpY3NDb250ZXh0LCBydW4sIEdyYXBoaWNzUG9pbnQocG9pbnQueCwgKGZsaXBwZWQgPyBw
b2ludC55IDogKC0xICogcG9pbnQueSkpKSk7CiAKICAgICAgICAgaWYgKCFmbGlwcGVkKQogICAg
ICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwuaAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3Jy
ZWN0aW9uUGFuZWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBDb3Jy
ZWN0aW9uUGFuZWwgewogcHVibGljOgogICAgIENvcnJlY3Rpb25QYW5lbCgpOwogICAgIH5Db3Jy
ZWN0aW9uUGFuZWwoKTsKLSAgICB2b2lkIHNob3coV2ViVmlldyosIFdlYkNvcmU6OkNvcnJlY3Rp
b25QYW5lbEluZm86OlBhbmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBib3VuZGlu
Z0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5h
dGl2ZVJlcGxhY2VtZW50U3RyaW5ncyk7CisgICAgdm9pZCBzaG93KFdlYlZpZXcqLCBXZWJDb3Jl
OjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOwogICAgIFN0cmluZyBkaXNtaXNz
KFdlYkNvcmU6OlJlYXNvbkZvckRpc21pc3NpbmdDb3JyZWN0aW9uUGFuZWwpOwogICAgIHN0YXRp
YyB2b2lkIHJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoV2ViVmlldyosIE5TQ29ycmVjdGlv
blJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50U3RyaW5nKTsKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvQ29ycmVjdGlvblBhbmVsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L0NvcnJlY3Rpb25QYW5lbC5tbQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9Db3JyZWN0aW9uUGFuZWwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQ29ycmVjdGlvblBhbmVsOjp+Q29ycmVjdGlvblBhbmVs
KCkKICAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5l
bElnbm9yZWQsIGZhbHNlKTsKIH0KIAotdm9pZCBDb3JyZWN0aW9uUGFuZWw6OnNob3coV2ViVmll
dyogdmlldywgQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHR5cGUsIGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpCit2b2lkIENvcnJlY3Rpb25QYW5l
bDo6c2hvdyhXZWJWaWV3KiB2aWV3LCBDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUgdHlw
ZSwgY29uc3QgR3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsK
ICAgICBkaXNtaXNzSW50ZXJuYWwoUmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbEln
bm9yZWQsIGZhbHNlKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxMCArNDAsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBj
aHJvbWVEZXN0cm95ZWQoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCB3aW5kb3dSZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qg
d2luZG93UmVjdCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3Qo
KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAgICAg
dmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkBAIC0xMjksMTAgKzEyOSwxMCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYp
OwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChX
ZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsCi0gICAgICAgIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGluZVJlY3QpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
R3JhcGhpY3NSZWN0IGN1c3RvbUhpZ2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdU
Rjo6QXRvbWljU3RyaW5nJiB0eXBlLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1Jl
Y3QmIGxpbmVSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoV2Vi
Q29yZTo6Tm9kZSosIGNvbnN0IFdURjo6QXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
bGluZVJlY3QsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzUmVjdCYgYm94UmVjdCwg
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwKICAgICAgICAgYm9vbCBiZWhp
bmRUZXh0LCBib29sIGVudGlyZUxpbmUpOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpLZXlib2Fy
ZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gOTEwMzQpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTU2LDEwICs1NiwxMCBAQAogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zp
bGVJY29uTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc1Jl
Y3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hp
dFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSWNvbi5oPgpAQCAtMTU4LDIwICsxNTgs
MjAgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCgpCiAvLyBUaGVzZSBm
dW5jdGlvbnMgc2NhbGUgYmV0d2VlbiB3aW5kb3cgYW5kIFdlYlZpZXcgY29vcmRpbmF0ZXMgYmVj
YXVzZSBKYXZhU2NyaXB0L0RPTSBvcGVyYXRpb25zIAogLy8gYXNzdW1lIHRoYXQgdGhlIFdlYlZp
ZXcgYW5kIHRoZSB3aW5kb3cgc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAKLXZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYg
cmVjdCkKIHsKICAgICBOU1JlY3Qgd2luZG93UmVjdCA9IHRvRGV2aWNlU3BhY2UocmVjdCwgW21f
d2ViVmlldyB3aW5kb3ddKTsKICAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzptX3dlYlZpZXcgc2V0RnJhbWU6d2luZG93UmVjdF07CiB9CiAKLUZsb2F0UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IFdlYkNocm9tZUNsaWVu
dDo6d2luZG93UmVjdCgpCiB7CiAgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBbW21fd2ViVmlldyBf
VUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld0ZyYW1lOm1fd2ViVmlld107CiAgICAgcmV0dXJu
IHRvVXNlclNwYWNlKHdpbmRvd1JlY3QsIFttX3dlYlZpZXcgd2luZG93XSk7CiB9CiAKIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIGFkZCBBUEkgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhpcy4KLUZs
b2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJv
bWVDbGllbnQ6OnBhZ2VSZWN0KCkKIHsKICAgICByZXR1cm4gW21fd2ViVmlldyBmcmFtZV07CiB9
CkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRhc2hib2FyZFJlZ2lv
bnNDaAogCiAjZW5kaWYKIAotRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6Y3VzdG9tSGlnaGxp
Z2h0UmVjdChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEZsb2F0
UmVjdCYgbGluZVJlY3QpCitHcmFwaGljc1JlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21IaWdo
bGlnaHRSZWN0KE5vZGUqIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBsaW5lUmVjdCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CiAKQEAgLTc1NSw3ICs3NTUsNyBAQCBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpjdXN0b21I
aWdobGlnCiAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CiB9CiAKLXZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBsaW5lUmVjdCwK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbUhpZ2hsaWdodChOb2RlKiBub2RlLCBj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IEdyYXBoaWNzUmVjdCYgYm94UmVjdCwgY29u
c3QgR3JhcGhpY3NSZWN0JiBsaW5lUmVjdCwKICAgICBib29sIGJlaGluZFRleHQsIGJvb2wgZW50
aXJlTGluZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwogICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXZWJDb3JlOjpTcGVsbENoZWNr
ZXIqLCBpbnQsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrLCBjb25zdCBXVEY6OlN0cmlu
ZyYpOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvcnJlY3Rpb25QYW5l
bChXZWJDb3JlOjpDb3JyZWN0aW9uUGFuZWxJbmZvOjpQYW5lbFR5cGUsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VkU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVSZXBsYWNlbWVudFN0cmluZ3MpOworICAgIHZpcnR1YWwg
dm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKFdlYkNvcmU6OkNvcnJlY3Rpb25QYW5lbEluZm86OlBh
bmVsVHlwZSwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2Vt
ZW50U3RyaW5ncyk7CiAgICAgdmlydHVhbCB2b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoV2Vi
Q29yZTo6UmVhc29uRm9yRGlzbWlzc2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCBT
dHJpbmcgZGlzbWlzc0NvcnJlY3Rpb25QYW5lbFNvb24oV2ViQ29yZTo6UmVhc29uRm9yRGlzbWlz
c2luZ0NvcnJlY3Rpb25QYW5lbCk7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEF1dG9jb3JyZWN0
aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZVR5cGUsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcpOwpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2Myw3ICs4NjMsNyBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpCiB9CiAKICNpZiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
Ci12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbChDb3JyZWN0aW9uUGFu
ZWxJbmZvOjpQYW5lbFR5cGUgcGFuZWxUeXBlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94
T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZl
UmVwbGFjZW1lbnRTdHJpbmdzKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dDb3JyZWN0aW9u
UGFuZWwoQ29ycmVjdGlvblBhbmVsSW5mbzo6UGFuZWxUeXBlIHBhbmVsVHlwZSwgY29uc3QgR3Jh
cGhpY3NSZWN0JiBib3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZWRTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRTdHJpbmcsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50U3RyaW5ncykKIHsKICAgICBtX2NvcnJl
Y3Rpb25QYW5lbC5zaG93KG1fd2ViVmlldywgcGFuZWxUeXBlLCBib3VuZGluZ0JveE9mUmVwbGFj
ZWRTdHJpbmcsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFN0cmluZywgYWx0ZXJuYXRpdmVS
ZXBsYWNlbWVudFN0cmluZ3MpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNDgsNyArMTM0OCw3IEBAIC0gKE5TQXJyYXkg
KilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFMKICAgICBmbG9hdCBwcmludEhlaWdodCA9IHJv
b3QtPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWdlU2l6ZS5oZWlnaHQg
OiBkb2N1bWVudFJlY3QuaGVpZ2h0KCkgLyBwcmludFNjYWxlRmFjdG9yOwogCiAgICAgUHJpbnRD
b250ZXh0IHByaW50Q29udGV4dChfcHJpdmF0ZS0+Y29yZUZyYW1lKTsKLSAgICBwcmludENvbnRl
eHQuY29tcHV0ZVBhZ2VSZWN0c1dpdGhQYWdlU2l6ZShGbG9hdFNpemUocHJpbnRXaWR0aCwgcHJp
bnRIZWlnaHQpLCB0cnVlKTsKKyAgICBwcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0c1dpdGhQ
YWdlU2l6ZShHcmFwaGljc1NpemUocHJpbnRXaWR0aCwgcHJpbnRIZWlnaHQpLCB0cnVlKTsKICAg
ICBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhZ2VSZWN0cyA9IHByaW50Q29udGV4dC5wYWdlUmVj
dHMoKTsKIAogICAgIHNpemVfdCBzaXplID0gcGFnZVJlY3RzLnNpemUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwxMiArOTAsMTIgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uSGFuZGxl
cnMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zv
Y3VzQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NS
ZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KQEAgLTIx
NDcsMTMgKzIxNDcsMTMgQEAgLSAoQk9PTClfYmVnaW5QcmludE1vZGVXaXRoUGFnZVdpZHRoOihm
bAogCiAgICAgZmxvYXQgcGFnZUxvZ2ljYWxXaWR0aCA9IGlzSG9yaXpvbnRhbCA/IHBhZ2VXaWR0
aCA6IHBhZ2VIZWlnaHQ7CiAgICAgZmxvYXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250
YWwgPyBwYWdlSGVpZ2h0IDogcGFnZVdpZHRoOwotICAgIEZsb2F0U2l6ZSBtaW5MYXlvdXRTaXpl
KHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKKyAgICBHcmFwaGljc1NpemUg
bWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCk7CiAgICAg
ZmxvYXQgbWF4aW11bVNocmlua1JhdGlvID0gMTsKIAogICAgIC8vIElmIHdlIGFyZSBhIGZyYW1l
c2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lz
ZSByZWxheW91dAogICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFnZSB3aWR0aC4KICAgICBpZiAo
c2hyaW5rVG9GaXQgJiYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCkt
PmlzRnJhbWVTZXQoKSkpIHsKLSAgICAgICAgbWluTGF5b3V0U2l6ZSA9IGZyYW1lLT5yZXNpemVQ
YWdlUmVjdHNLZWVwaW5nUmF0aW8oRmxvYXRTaXplKHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dp
Y2FsSGVpZ2h0KSwgRmxvYXRTaXplKHBhZ2VMb2dpY2FsV2lkdGggKiBfV2ViSFRNTFZpZXdQcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIHBhZ2VMb2dpY2FsSGVpZ2h0ICogX1dlYkhUTUxWaWV3
UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7CisgICAgICAgIG1pbkxheW91dFNpemUgPSBm
cmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6ZShwYWdlTG9naWNh
bFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEdyYXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRo
ICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYWdlTG9naWNhbEhl
aWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOwogICAgICAg
ICBtYXhpbXVtU2hyaW5rUmF0aW8gPSBfV2ViSFRNTFZpZXdQcmludGluZ01heGltdW1TaHJpbmtG
YWN0b3IgLyBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7CiAgICAgfQog
CkBAIC0yMTgzLDEzICsyMTgzLDEzIEBAIC0gKEJPT0wpX2JlZ2luU2NyZWVuUGFnaW5hdGlvbk1v
ZGVXaXRoUGEKIAogICAgIGZsb2F0IHBhZ2VMb2dpY2FsV2lkdGggPSBpc0hvcml6b250YWwgPyBw
YWdlU2l6ZS53aWR0aCA6IHBhZ2VTaXplLmhlaWdodDsKICAgICBmbG9hdCBwYWdlTG9naWNhbEhl
aWdodCA9IGlzSG9yaXpvbnRhbCA/IHBhZ2VTaXplLmhlaWdodCA6IHBhZ2VTaXplLndpZHRoOwot
ICAgIEZsb2F0U2l6ZSBtaW5MYXlvdXRTaXplKHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2Fs
SGVpZ2h0KTsKKyAgICBHcmFwaGljc1NpemUgbWluTGF5b3V0U2l6ZShwYWdlTG9naWNhbFdpZHRo
LCBwYWdlTG9naWNhbEhlaWdodCk7CiAgICAgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvID0gMTsK
IAogICAgIC8vIElmIHdlIGFyZSBhIGZyYW1lc2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0
IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lzZSByZWxheW91dAogICAgIC8vIGFjY29yZGluZyB0
byB0aGUgcGFnZSB3aWR0aC4KICAgICBpZiAoc2hyaW5rVG9GaXQgJiYgKCFmcmFtZS0+ZG9jdW1l
bnQoKSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKSkpIHsKLSAgICAgICAgbWlu
TGF5b3V0U2l6ZSA9IGZyYW1lLT5yZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW8oRmxvYXRTaXpl
KHBhZ2VMb2dpY2FsV2lkdGgsIHBhZ2VMb2dpY2FsSGVpZ2h0KSwgRmxvYXRTaXplKHBhZ2VMb2dp
Y2FsV2lkdGggKiBfV2ViSFRNTFZpZXdQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IsIHBhZ2VM
b2dpY2FsSGVpZ2h0ICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yKSk7
CisgICAgICAgIG1pbkxheW91dFNpemUgPSBmcmFtZS0+cmVzaXplUGFnZVJlY3RzS2VlcGluZ1Jh
dGlvKEdyYXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRoLCBwYWdlTG9naWNhbEhlaWdodCksIEdy
YXBoaWNzU2l6ZShwYWdlTG9naWNhbFdpZHRoICogX1dlYkhUTUxWaWV3UHJpbnRpbmdNaW5pbXVt
U2hyaW5rRmFjdG9yLCBwYWdlTG9naWNhbEhlaWdodCAqIF9XZWJIVE1MVmlld1ByaW50aW5nTWlu
aW11bVNocmlua0ZhY3RvcikpOwogICAgICAgICBtYXhpbXVtU2hyaW5rUmF0aW8gPSBfV2ViSFRN
TFZpZXdQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgLyBfV2ViSFRNTFZpZXdQcmludGluZ01p
bmltdW1TaHJpbmtGYWN0b3I7CiAgICAgfQogCkBAIC0zMDIyLDkgKzMwMjIsOSBAQCAtICh2b2lk
KWxheW91dFRvTWluaW11bVBhZ2VXaWR0aDooZmxvYXQpCiAKICAgICBpZiAoRnJhbWVWaWV3KiBj
b3JlVmlldyA9IGNvcmVGcmFtZS0+dmlldygpKSB7CiAgICAgICAgIGlmIChtaW5QYWdlTG9naWNh
bFdpZHRoID4gMC4wKSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgcGFnZVNpemUobWluUGFnZUxv
Z2ljYWxXaWR0aCwgbWluUGFnZUxvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgR3JhcGhpY3NT
aXplIHBhZ2VTaXplKG1pblBhZ2VMb2dpY2FsV2lkdGgsIG1pblBhZ2VMb2dpY2FsSGVpZ2h0KTsK
ICAgICAgICAgICAgIGlmIChjb3JlRnJhbWUtPmRvY3VtZW50KCkgJiYgY29yZUZyYW1lLT5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkgJiYgIWNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmll
dygpLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgICAg
IHBhZ2VTaXplID0gRmxvYXRTaXplKG1pblBhZ2VMb2dpY2FsSGVpZ2h0LCBtaW5QYWdlTG9naWNh
bFdpZHRoKTsKKyAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IEdyYXBoaWNzU2l6ZShtaW5QYWdl
TG9naWNhbEhlaWdodCwgbWluUGFnZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBjb3JlVmll
dy0+Zm9yY2VMYXlvdXRGb3JQYWdpbmF0aW9uKHBhZ2VTaXplLCBtYXhpbXVtU2hyaW5rUmF0aW8s
IGFkanVzdFZpZXdTaXplID8gQWRqdXN0Vmlld1NpemUgOiBEb05vdEFkanVzdFZpZXdTaXplKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91dCghYWRq
dXN0Vmlld1NpemUpOwpAQCAtNTk3MSw3ICs1OTcxLDcgQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlv
blRleHRSZWN0cwogICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBsaXN0OworICAgIFZlY3RvcjxHcmFwaGlj
c1JlY3Q+IGxpc3Q7CiAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKQogICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5nZXRDbGlwcGVkVmlzaWJsZVRl
eHRSZWN0YW5nbGVzKGxpc3QpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlJlbmRlck5vZGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJSZW5kZXJOb2RlLm1tCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUmVuZGVyTm9kZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBz
dGF0aWMgV2ViUmVuZGVyTm9kZSAqY29weVJlbmRlck5vZGUoUmVuCiAgICAgRnJhbWUqIGZyYW1l
ID0gZnJhbWVWaWV3ID8gZnJhbWVWaWV3LT5mcmFtZSgpIDogMDsKIAogICAgIC8vIEZJWE1FOiBi
cm9rZW4gd2l0aCB0cmFuc2Zvcm1zCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBub2RlLT5sb2Nh
bFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKKyAgICBHcmFwaGljc1BvaW50IGFic1BvcyA9IG5v
ZGUtPmxvY2FsVG9BYnNvbHV0ZShHcmFwaGljc1BvaW50KCkpOwogICAgIGludCB4ID0gMDsKICAg
ICBpbnQgeSA9IDA7CiAgICAgaW50IHdpZHRoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92
ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1
c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhl
aXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9y
bXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmpl
Y3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAg
ICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpkeW5h
bWljUHJvcGVydHlDaGFuZ2VFdmVudCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnNldFdpbmRv
d1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OndpbmRvd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnBhZ2VSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudFF0Ojp2aXNpYmxlUmVjdEZvclRpbGVkQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6Om51bWJlck9mUGFnZXMpOgorCiAyMDExLTA3LTEzICBK
b3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wcm92ZSBu
YW1lcyBvZiBzb21lIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlIGFjY2Vzc29yIG1ldGhvZHMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIzLDIxICsx
MjIzLDIxIEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjpkeW5hbWljUHJvcGVydHlDaGEKICAgICAg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxLT5tYWlu
RnJhbWUoKSk7CiAgICAgICAgIGlmICghZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIEZsb2F0U2l6ZSBrZWVwTXVsdGlwbGllcjsKLSAgICAg
ICAgRmxvYXRTaXplIGNvdmVyTXVsdGlwbGllcjsKKyAgICAgICAgR3JhcGhpY3NTaXplIGtlZXBN
dWx0aXBsaWVyOworICAgICAgICBHcmFwaGljc1NpemUgY292ZXJNdWx0aXBsaWVyOwogICAgICAg
ICBmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+Z2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxp
ZXJzKGtlZXBNdWx0aXBsaWVyLCBjb3Zlck11bHRpcGxpZXIpOwogICAgICAgICBRU2l6ZUYgcVNp
emUgPSBxLT5wcm9wZXJ0eSgiX3FfVGlsZWRCYWNraW5nU3RvcmVLZWVwQXJlYU11bHRpcGxpZXIi
KS50b1NpemVGKCk7Ci0gICAgICAgIGtlZXBNdWx0aXBsaWVyID0gRmxvYXRTaXplKHFTaXplLndp
ZHRoKCksIHFTaXplLmhlaWdodCgpKTsKKyAgICAgICAga2VlcE11bHRpcGxpZXIgPSBHcmFwaGlj
c1NpemUocVNpemUud2lkdGgoKSwgcVNpemUuaGVpZ2h0KCkpOwogICAgICAgICBmcmFtZS0+dGls
ZWRCYWNraW5nU3RvcmUoKS0+c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGtlZXBNdWx0
aXBsaWVyLCBjb3Zlck11bHRpcGxpZXIpOwogICAgIH0gZWxzZSBpZiAoZXZlbnQtPnByb3BlcnR5
TmFtZSgpID09ICJfcV9UaWxlZEJhY2tpbmdTdG9yZUNvdmVyQXJlYU11bHRpcGxpZXIiKSB7CiAg
ICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocS0+
bWFpbkZyYW1lKCkpOwogICAgICAgICBpZiAoIWZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGbG9hdFNpemUga2VlcE11bHRpcGxpZXI7Ci0g
ICAgICAgIEZsb2F0U2l6ZSBjb3Zlck11bHRpcGxpZXI7CisgICAgICAgIEdyYXBoaWNzU2l6ZSBr
ZWVwTXVsdGlwbGllcjsKKyAgICAgICAgR3JhcGhpY3NTaXplIGNvdmVyTXVsdGlwbGllcjsKICAg
ICAgICAgZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCktPmdldEtlZXBBbmRDb3ZlckFyZWFNdWx0
aXBsaWVycyhrZWVwTXVsdGlwbGllciwgY292ZXJNdWx0aXBsaWVyKTsKICAgICAgICAgUVNpemVG
IHFTaXplID0gcS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0b3JlQ292ZXJBcmVhTXVsdGlw
bGllciIpLnRvU2l6ZUYoKTsKLSAgICAgICAgY292ZXJNdWx0aXBsaWVyID0gRmxvYXRTaXplKHFT
aXplLndpZHRoKCksIHFTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY292ZXJNdWx0aXBsaWVyID0g
R3JhcGhpY3NTaXplKHFTaXplLndpZHRoKCksIHFTaXplLmhlaWdodCgpKTsKICAgICAgICAgZnJh
bWUtPnRpbGVkQmFja2luZ1N0b3JlKCktPnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhr
ZWVwTXVsdGlwbGllciwgY292ZXJNdWx0aXBsaWVyKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3Bw
CShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgQ2hyb21l
Q2xpZW50UXQ6On5DaHJvbWVDbGllbnRRdCgpCiAjZW5kaWYKIH0KIAotdm9pZCBDaHJvbWVDbGll
bnRRdDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIENocm9tZUNs
aWVudFF0OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcmVjdCkKIHsKICAgICBp
ZiAoIW1fd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDEwICsxMjUsMTAgQEAgdm9p
ZCBDaHJvbWVDbGllbnRRdDo6c2V0V2luZG93UmVjdChjb25zdAogICAgIGxpa2UgdG9vbGJhcnMv
c2Nyb2xsYmFycyBldGMuIEl0IGlzIHVzZWQgYnkgdGhlIHZpZXdwb3J0IG1ldGEgdGFnIGFzIHdl
bGwgYXMKICAgICBieSB0aGUgRE9NIFdpbmRvdyBvYmplY3Q6IG91dGVySGVpZ2h0KCksIG91dGVy
V2lkdGgoKSwgc2NyZWVuWCgpLCBzY3JlZW5ZKCkuCiAqLwotRmxvYXRSZWN0IENocm9tZUNsaWVu
dFF0Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBDaHJvbWVDbGllbnRRdDo6d2luZG93UmVj
dCgpCiB7CiAgICAgaWYgKCFwbGF0Zm9ybVBhZ2VDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworICAgICAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiAgICAgcmV0dXJuIHBs
YXRmb3JtUGFnZUNsaWVudCgpLT53aW5kb3dSZWN0KCk7CiB9CiAKQEAgLTEzOSwxMSArMTM5LDEx
IEBAIGJvb2wgQ2hyb21lQ2xpZW50UXQ6OmFsbG93c0FjY2VsZXJhdGVkQ28KICAgICByZXR1cm4g
cGxhdGZvcm1QYWdlQ2xpZW50KCktPmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKIH0K
IAotRmxvYXRSZWN0IENocm9tZUNsaWVudFF0OjpwYWdlUmVjdCgpCitHcmFwaGljc1JlY3QgQ2hy
b21lQ2xpZW50UXQ6OnBhZ2VSZWN0KCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZSkKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoUVJlY3RGKFFQb2ludEYo
MCwgMCksIG1fd2ViUGFnZS0+dmlld3BvcnRTaXplKCkpKTsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzUmVjdCgpOworICAgIHJldHVybiBHcmFwaGljc1JlY3QoUVJlY3RGKFFQb2ludEYoMCwgMCks
IG1fd2ViUGFnZS0+dmlld3BvcnRTaXplKCkpKTsKIH0KIAogZmxvYXQgQ2hyb21lQ2xpZW50UXQ6
OnNjYWxlRmFjdG9yKCkKQEAgLTY2Nyw3ICs2NjcsNyBAQCBJbnRSZWN0IENocm9tZUNsaWVudFF0
Ojp2aXNpYmxlUmVjdEZvclRpCiAgICAgaWYgKCFwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+dmlld1Jl
c2l6ZXNUb0NvbnRlbnRzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gUVJlY3QobV93ZWJQYWdl
LT5tYWluRnJhbWUoKS0+c2Nyb2xsUG9zaXRpb24oKSwgbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+
Z2VvbWV0cnkoKS5zaXplKCkpOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoRmxvYXRS
ZWN0KHBsYXRmb3JtUGFnZUNsaWVudCgpLT5ncmFwaGljc0l0ZW1WaXNpYmxlUmVjdCgpKSk7Cisg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoR3JhcGhpY3NSZWN0KHBsYXRmb3JtUGFnZUNsaWVu
dCgpLT5ncmFwaGljc0l0ZW1WaXNpYmxlUmVjdCgpKSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2
aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgQ2hyb21l
Q2xpZW50UXRfaAogCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUXRQbGF0Zm9ybVBsdWdpbi5oIgpA
QCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbGVDaG9vc2Vy
OwogY2xhc3MgRmlsZUljb25Mb2FkZXI7Ci1jbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGlj
c1JlY3Q7CiBjbGFzcyBQYWdlOwogc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiBjbGFzcyBRdEFi
c3RyYWN0V2ViUG9wdXA7CkBAIC02MywxMCArNjMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCogd2ViVmlldygpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0Jik7CisgICAgdmlydHVh
bCBHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAgdmlydHVhbCBGbG9hdFJlY3QgcGFn
ZVJlY3QoKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAgICAgdmly
dHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDcgKzQzMSw3IEBA
IGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6cGFnZU51bWJlckYKICAgICBpZiAoIWVsZW1l
bnQpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJldHVybiBQcmludENvbnRleHQ6OnBhZ2VO
dW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAg
cmV0dXJuIFByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgR3JhcGhp
Y3NTaXplKHdpZHRoLCBoZWlnaHQpKTsKIH0KIAogaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0
OjpudW1iZXJPZlBhZ2VzKFFXZWJGcmFtZSogZnJhbWUsIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQpCkBAIC00NDAsNyArNDQwLDcgQEAgaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpudW1i
ZXJPZlBhZwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBy
ZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgRmxvYXRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICByZXR1cm4gUHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNv
cmVGcmFtZSwgR3JhcGhpY3NTaXplKHdpZHRoLCBoZWlnaHQpKTsKIH0KIAogLy8gU3VzcGVuZCBh
Y3RpdmUgRE9NIG9iamVjdHMgaW4gdGhpcyBmcmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQg
bW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0
byB1c2UgYSBHcmFwaGljc1VuaXQgYWJzdHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMg
dGhlaXIKKyAgICAgICAgYmFzZSB0eXBlIGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0
Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQgbWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBv
YmplY3RzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKEhVRFNs
aWRlcjo6ZHJhdyk6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpMYXllckNs
aWVudDo6cGxhdGZvcm1DQUxheWVyTGF5b3V0U3VibGF5ZXJzT2ZMYXllcik6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1Jl
Y3QpOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCk6CisgICAgICAgIChXZWJD
aHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6cGFpbnRDdXN0b21TY3JvbGxDb3JuZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5jcHA6CisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6
OnBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KToKKyAgICAgICAgKFdlYkZyYW1lOjpwYWdlTnVt
YmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViRnJhbWU6Om51bWJlck9mUGFnZXMpOgor
ICAgICAgICAoV2ViRnJhbWU6OnNldFByaW50aW5nKToKKyAgICAgICAgKFdlYkZyYW1lOjpzZXRJ
blByaW50aW5nTW9kZSk6CisgICAgICAgIChXZWJGcmFtZTo6ZnJhbWVCb3VuZHMpOgorICAgICAg
ICAqIFdlYktpdEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKFdlYkRyYXdUZXh0KToKKyAgICAgICAg
KiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisK
IDIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwg
d2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3RhCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9G
dWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAkocmV2aXNpb24gOTEwMzQpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgSFVEU2xpZGVyOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgY28KICAgICB9CiAKICAgICAvLyBEcmF3IGEgZGlhbW9uZAotICAgIEZsb2F0UG9pbnQg
cG9pbnRzWzRdOworICAgIEdyYXBoaWNzUG9pbnQgcG9pbnRzWzRdOwogICAgIGZsb2F0IGhhbGYg
PSBzdGF0aWNfY2FzdDxmbG9hdD4obV9idXR0b25TaXplKSAvIDI7CiAgICAgcG9pbnRzWzBdLnNl
dFgobV9yZWN0LmxvY2F0aW9uKCkueCgpICsgbV9idXR0b25Qb3NpdGlvbiArIGhhbGYpOwogICAg
IHBvaW50c1swXS5zZXRZKG1fcmVjdC5sb2NhdGlvbigpLnkoKSk7CkBAIC0yMDksOSArMjA5LDkg
QEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpMYXllckNsaQogICAgIGlmICghdmlk
ZW9MYXllciB8fCB2aWRlb0xheWVyLT5zdXBlcmxheWVyKCkgIT0gbGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKyAg
ICBHcmFwaGljc1JlY3QgbGF5ZXJCb3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CiAKLSAgICBGbG9h
dFNpemUgdmlkZW9TaXplID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKS0+bmF0dXJhbFNpemUoKTsK
KyAgICBHcmFwaGljc1NpemUgdmlkZW9TaXplID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKS0+bmF0
dXJhbFNpemUoKTsKICAgICBmbG9hdCBzY2FsZUZhY3RvcjsKICAgICBpZiAodmlkZW9TaXplLmFz
cGVjdFJhdGlvKCkgPiBsYXllckJvdW5kcy5zaXplKCkuYXNwZWN0UmF0aW8oKSkKICAgICAgICAg
c2NhbGVGYWN0b3IgPSBsYXllckJvdW5kcy53aWR0aCgpIC8gdmlkZW9TaXplLndpZHRoKCk7CkBA
IC0yMjAsMTEgKzIyMCwxMSBAQCB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6OkxheWVy
Q2xpCiAgICAgdmlkZW9TaXplLnNjYWxlKHNjYWxlRmFjdG9yKTsKIAogICAgIC8vIENhbGN1bGF0
ZSB0aGUgY2VudGVyZWQgcG9zaXRpb24gYmFzZWQgb24gdGhlIHZpZGVvQm91bmRzIGFuZCBsYXll
ckJvdW5kczoKLSAgICBGbG9hdFBvaW50IHZpZGVvUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludCB2
aWRlb09yaWdpbjsKKyAgICBHcmFwaGljc1BvaW50IHZpZGVvUG9zaXRpb247CisgICAgR3JhcGhp
Y3NQb2ludCB2aWRlb09yaWdpbjsKICAgICB2aWRlb09yaWdpbi5zZXRYKChsYXllckJvdW5kcy53
aWR0aCgpIC0gdmlkZW9TaXplLndpZHRoKCkpICogMC41KTsKICAgICB2aWRlb09yaWdpbi5zZXRZ
KChsYXllckJvdW5kcy5oZWlnaHQoKSAtIHZpZGVvU2l6ZS5oZWlnaHQoKSkgKiAwLjUpOwotICAg
IHZpZGVvTGF5ZXItPnNldEZyYW1lKEZsb2F0UmVjdCh2aWRlb09yaWdpbiwgdmlkZW9TaXplKSk7
CisgICAgdmlkZW9MYXllci0+c2V0RnJhbWUoR3JhcGhpY3NSZWN0KHZpZGVvT3JpZ2luLCB2aWRl
b1NpemUpKTsKIH0KICNlbmRpZiAKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1MCw3ICszNTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1l
OjpwYWluCiAgICAgZ2Muc2F2ZSgpOwogICAgIExPTkcgd2lkdGggPSByZWN0LnJpZ2h0IC0gcmVj
dC5sZWZ0OwogICAgIExPTkcgaGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKLSAgICBG
bG9hdFJlY3QgZGlydHlSZWN0OworICAgIEdyYXBoaWNzUmVjdCBkaXJ0eVJlY3Q7CiAgICAgZGly
dHlSZWN0LnNldFdpZHRoKHdpZHRoKTsKICAgICBkaXJ0eVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7
CiAgICAgZ2MuY2xpcChkaXJ0eVJlY3QpOwpAQCAtOTI3LDcgKzkyNyw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6OnBhZ2UKICAgICBFbGVtZW50KiBlbGVtZW50ID0gY29y
ZUZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChjb3JlSWQpOwogICAgIGlmICghZWxl
bWVudCkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKLSAgICAqcmVzdWx0ID0gUHJpbnRDb250ZXh0
OjpwYWdlTnVtYmVyRm9yRWxlbWVudChlbGVtZW50LCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhl
bHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOworICAgICpyZXN1bHQgPSBQcmludENvbnRleHQ6OnBh
Z2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIEdyYXBoaWNzU2l6ZShwYWdlV2lkdGhJblBpeGVs
cywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTk0Myw3
ICs5NDMsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpudW1iCiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKLSAgICAqcmVzdWx0ID0g
UHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgRmxvYXRTaXplKHBhZ2VXaWR0
aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKKyAgICAqcmVzdWx0ID0gUHJpbnRDb250
ZXh0OjpudW1iZXJPZlBhZ2VzKGNvcmVGcmFtZSwgR3JhcGhpY3NTaXplKHBhZ2VXaWR0aEluUGl4
ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMjAx
NCw3ICsyMDE0LDcgQEAgdm9pZCBXZWJGcmFtZTo6c2V0UHJpbnRpbmcoYm9vbCBwcmludGluZwog
ewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwogICAgIEFTU0VSVChjb3JlRnJh
bWUpOwotICAgIGNvcmVGcmFtZS0+c2V0UHJpbnRpbmcocHJpbnRpbmcsIEZsb2F0U2l6ZShtaW5Q
YWdlV2lkdGgsIG1pblBhZ2VIZWlnaHQpLCBtYXhpbXVtU2hyaW5rUmF0aW8sIGFkanVzdFZpZXdT
aXplID8gQWRqdXN0Vmlld1NpemUgOiBEb05vdEFkanVzdFZpZXdTaXplKTsKKyAgICBjb3JlRnJh
bWUtPnNldFByaW50aW5nKHByaW50aW5nLCBHcmFwaGljc1NpemUobWluUGFnZVdpZHRoLCBtaW5Q
YWdlSGVpZ2h0KSwgbWF4aW11bVNocmlua1JhdGlvLCBhZGp1c3RWaWV3U2l6ZSA/IEFkanVzdFZp
ZXdTaXplIDogRG9Ob3RBZGp1c3RWaWV3U2l6ZSk7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViRnJhbWU6OnNldEluUHJpbnRpbmdNb2RlKCAKQEAgLTIwMzIsNyArMjAzMiw3IEBA
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6OnNldEkKIAogICAgIC8vIElmIHdl
IGFyZSBhIGZyYW1lc2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3Jl
ZW4sIG90aGVyd2lzZSByZWxheW91dAogICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFwZXIgc2l6
ZQotICAgIEZsb2F0U2l6ZSBtaW5MYXlvdXRTaXplKDAuMCwgMC4wKTsKKyAgICBHcmFwaGljc1Np
emUgbWluTGF5b3V0U2l6ZSgwLjAsIDAuMCk7CiAgICAgaWYgKG1faW5QcmludGluZ01vZGUgJiYg
IWNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKSB7CiAgICAgICAgIGlmICghcHJp
bnREQykgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMDQ2LDcgKzIw
NDYsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkZyYW1lOjpzZXRJCiAgICAgICAg
IGludCBwYXBlclZlcnRpY2FsUGl4ZWxzUGVySW5jaCA9IDo6R2V0RGV2aWNlQ2FwcyhwcmludERD
LCBMT0dQSVhFTFNZKTsKICAgICAgICAgaW50IHBhcGVySGVpZ2h0ID0gcHJpbnRSZWN0LmhlaWdo
dCgpICogZGVzaXJlZFBpeGVsc1BlckluY2ggLyBwYXBlclZlcnRpY2FsUGl4ZWxzUGVySW5jaDsK
ICAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgICAgIG1pbkxheW91
dFNpemUgPSBjb3JlRnJhbWUtPnJlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpbyhGbG9hdFNpemUo
cGFwZXJXaWR0aCwgcGFwZXJIZWlnaHQpLCBGbG9hdFNpemUocGFwZXJXaWR0aCAqIFByaW50aW5n
TWluaW11bVNocmlua0ZhY3RvciwgcGFwZXJIZWlnaHQgKiBQcmludGluZ01pbmltdW1TaHJpbmtG
YWN0b3IpKTsKKyAgICAgICAgbWluTGF5b3V0U2l6ZSA9IGNvcmVGcmFtZS0+cmVzaXplUGFnZVJl
Y3RzS2VlcGluZ1JhdGlvKEdyYXBoaWNzU2l6ZShwYXBlcldpZHRoLCBwYXBlckhlaWdodCksIEdy
YXBoaWNzU2l6ZShwYXBlcldpZHRoICogUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yLCBwYXBl
ckhlaWdodCAqIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcikpOwogICAgIH0KIAogICAgIHNl
dFByaW50aW5nKG1faW5QcmludGluZ01vZGUsIG1pbkxheW91dFNpemUud2lkdGgoKSwgbWluTGF5
b3V0U2l6ZS5oZWlnaHQoKSwgUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yIC8gUHJpbnRpbmdN
aW5pbXVtU2hyaW5rRmFjdG9yLCB0cnVlKTsKQEAgLTI1NDAsNyArMjU0MCw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViRnJhbWU6OmZyYW0KICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybiBFX0ZBSUw7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KHRydWUpOworICAgIEdyYXBoaWNzUmVjdCBib3VuZHMgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QodHJ1ZSk7CiAgICAgcmVzdWx0LT5ib3R0b20gPSAoTE9ORykgYm91bmRzLmhl
aWdodCgpOwogICAgIHJlc3VsdC0+cmlnaHQgPSAoTE9ORykgYm91bmRzLndpZHRoKCk7CiAgICAg
cmV0dXJuIFNfT0s7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXRHcmFwaGljcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViS2l0R3JhcGhpY3MuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYktpdEdyYXBoaWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgV2ViRHJhd1RleHQoV2ViVGV4dFJl
bmRlckluZm8qIGluZm8KICAgICAgICAgLy8gU2V0IHNoYWRvdyBzZXR0aW5nCiAgICAgICAgIGlm
IChpbmZvLT5zdHJ1Y3RTaXplID09IHNpemVvZihXZWJUZXh0UmVuZGVySW5mbykgJiYKICAgICAg
ICAgICAgIChpbmZvLT5zaGFkb3dPZmZzZXQuY3ggfHwgaW5mby0+c2hhZG93T2Zmc2V0LmN5IHx8
IGluZm8tPnNoYWRvd0JsdXIgfHwgaW5mby0+c2hhZG93Q29sb3IpKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKGluZm8tPnNoYWRvd09mZnNldC5jeCwgaW5mby0+c2hh
ZG93T2Zmc2V0LmN5KSwgaW5mby0+c2hhZG93Qmx1ciwgaW5mby0+c2hhZG93Q29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOworICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coR3JhcGhpY3NT
aXplKGluZm8tPnNoYWRvd09mZnNldC5jeCwgaW5mby0+c2hhZG93T2Zmc2V0LmN5KSwgaW5mby0+
c2hhZG93Qmx1ciwgaW5mby0+c2hhZG93Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogCiAg
ICAgICAgIFdlYkNvcmVEcmF3VGV4dEF0UG9pbnQoY29udGV4dCwgZHJhd1N0cmluZywgaW5mby0+
cHQsIG1ha2VGb250KCooaW5mby0+ZGVzY3JpcHRpb24pKSwgaW5mby0+Y29sb3IsIGluZm8tPnVu
ZGVybGluZWRJbmRleCk7CiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwpJbmRleDogU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDYgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0V2ZW50SGFuZGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRRdWFkLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgpAQCAtOTQsNiArOTMs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dE
SU9iamVjdENvdW50ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NRdWFkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TWVkaWFFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CkBAIC01MDEwLDcgKzUwMTAsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnZpc2liCiB7CiAgICAgaWYgKCFyZWN0KQogICAgICAg
ICByZXR1cm4gRV9QT0lOVEVSOwotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudCA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgR3JhcGhp
Y3NSZWN0IHZpc2libGVDb250ZW50ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoKTsKICAgICByZWN0LT5sZWZ0ID0gKExPTkcpIHZpc2libGVDb250ZW50
LngoKTsKICAgICByZWN0LT50b3AgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueSgpOwogICAgIHJl
Y3QtPnJpZ2h0ID0gKExPTkcpIHZpc2libGVDb250ZW50Lm1heFgoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAko
cmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GaWxlSWNvbkxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1JlY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmNocm9tZURlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3Zv
aWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEdyYXBoaWNzUmVjdCYgcikK
IHsKICAgICBJV2ViVUlEZWxlZ2F0ZSogdWlEZWxlZ2F0ZSA9IDA7CiAgICAgaWYgKFNVQ0NFRURF
RChtX3dlYlZpZXctPnVpRGVsZWdhdGUoJnVpRGVsZWdhdGUpKSkgewpAQCAtOTUsNyArOTUsNyBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zCiAgICAgfQogfQogCi1G
bG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJD
aHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQogewogICAgIElXZWJVSURlbGVnYXRlKiB1aURlbGVn
YXRlID0gMDsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxlZ2F0ZSgmdWlEZWxl
Z2F0ZSkpKSB7CkBAIC0xMDgsMTAgKzEwOCwxMCBAQCBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50
Ojp3aW5kb3dSZWN0KCkKICAgICAgICAgICAgIHJldHVybiByZWN0OwogICAgIH0KIAotICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLUZsb2F0
UmVjdCBXZWJDaHJvbWVDbGllbnQ6OnBhZ2VSZWN0KCkKK0dyYXBoaWNzUmVjdCBXZWJDaHJvbWVD
bGllbnQ6OnBhZ2VSZWN0KCkKIHsKICAgICBSRUNUIHJlY3Q7CiAgICAgbV93ZWJWaWV3LT5mcmFt
ZVJlY3QoJnJlY3QpOwpAQCAtNjQ5LDcgKzY0OSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpw
b3B1bGF0ZVZpc2l0ZWRMaW4KICAgICBoaXN0b3J5LT5hZGRWaXNpdGVkTGlua3NUb1BhZ2VHcm91
cChtX3dlYlZpZXctPnBhZ2UoKS0+Z3JvdXAoKSk7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50
OjpwYWludEN1c3RvbVNjcm9sbGJhcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSwgCitib29sIFdlYkNocm9t
ZUNsaWVudDo6cGFpbnRDdXN0b21TY3JvbGxiYXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBHcmFwaGljc1JlY3QmIHJlY3QsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xT
dGF0ZSBzdGF0ZSwgU2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCwgYm9vbCB2ZXJ0aWNhbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YWx1ZSwgZmxv
YXQgcHJvcG9ydGlvbiwgU2Nyb2xsYmFyQ29udHJvbFBhcnRNYXNrIHBhcnRzKQogewpAQCAtNzE3
LDcgKzcxNyw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpwYWludEN1c3RvbVNjcm9sbGIKICAg
ICByZXR1cm4gU1VDQ0VFREVEKGhyKTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50
Q3VzdG9tU2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQ29ybmVy
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgR3JhcGhpY3NSZWN0JiByZWN0KQogewog
ICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMCArNDQs
MTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpHcmFwaGljc1JlY3QmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAgICAgCi0gICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkdyYXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogICAgIAogICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVG
YWN0b3IoKTsKIApAQCAtMTMwLDEwICsxMzAsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDdXN0
b21TY3JvbGxiYXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgV2ViQ29yZTo6U2Nyb2xsYmFyQ29udHJvbFNpemUsIAorICAgIHZpcnR1YWwgYm9v
bCBwYWludEN1c3RvbVNjcm9sbGJhcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1JlY3QmLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFy
Q29udHJvbFN0YXRlLCBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0LCBib29sIHZl
cnRpY2FsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZh
bHVlLCBmbG9hdCBwcm9wb3J0aW9uLCBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sUGFydE1hc2sp
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEN1c3RvbVNjcm9sbENvcm5lcihXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBh
bmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwog
ICAgIHZpcnR1YWwgdm9pZCBsb2FkSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmlu
Zz4mLCBXZWJDb3JlOjpGaWxlSWNvbkxvYWRlciopOwpJbmRleDogU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZp
c2lvbiA5MTAzNCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2luY2x1
ZGUgPFdlYkNvcmUvQlN0cmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1Jl
Y3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luY2UvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTAzNCkKKysrIFNvdXJjZS9X
ZWJLaXQvd2luY2UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTEtMDctMTQgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJlbmFtZSBGbG9hdFJlY3QvUG9pbnQvU2l6ZSBhbmQgbW92ZSB0aGVtIHRvIGFuIGFic3RyYWN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQx
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
aW5nIHRoZSBGbG9hdCogZ3JhcGhpY3MgY2xhc3NlcyB0byB1c2UgYSBHcmFwaGljc1VuaXQgYWJz
dHJhY3Rpb24gd2hpY2ggY3VycmVudGx5IGNoYW5nZXMgdGhlaXIKKyAgICAgICAgYmFzZSB0eXBl
IGZyb20gRmxvYXQgdG8gQ0dGbG9hdCBvbiBDRyBwbGF0Zm9ybXMuIFRoaXMgbWFrZXMgNjRiaXQg
bWFjcyB1c2UgNjRiaXQgZmxvYXRzIGZvciB0aGVzZSBvYmplY3RzLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRXaW5DRS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudFdp
bkNFOjp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50V2luQ0U6OnNl
dFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRXaW5DRTo6cGFnZVJl
Y3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmg6CisKIDIw
MTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBzaG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hl
biByZWFjaGluZyBwZXItb3JpZ2luIHF1b3RhCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbmNlL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFdpbkNFLmNwcAkocmV2aXNp
b24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjIgKzUwLDIyIEBAIHZvaWQgQ2hy
b21lQ2xpZW50V2luQ0U6OmNocm9tZURlc3Ryb3llZCgKICAgICBkZWxldGUgdGhpczsKIH0KIAot
RmxvYXRSZWN0IENocm9tZUNsaWVudFdpbkNFOjp3aW5kb3dSZWN0KCkKK0dyYXBoaWNzUmVjdCBD
aHJvbWVDbGllbnRXaW5DRTo6d2luZG93UmVjdCgpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzUmVjdCgp
OwogCiAgICAgUkVDVCByZWN0OwogICAgIG1fd2ViVmlldy0+ZnJhbWVSZWN0KCZyZWN0KTsKICAg
ICByZXR1cm4gcmVjdDsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0V2luZG93UmVj
dChjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDaHJvbWVDbGllbnRXaW5DRTo6c2V0V2luZG93UmVj
dChjb25zdCBHcmFwaGljc1JlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUZs
b2F0UmVjdCBDaHJvbWVDbGllbnRXaW5DRTo6cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9t
ZUNsaWVudFdpbkNFOjpwYWdlUmVjdCgpCiB7CiAgICAgcmV0dXJuIHdpbmRvd1JlY3QoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50V2lu
Q0UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbmNlL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFdpbkNFLmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC93aW5j
ZS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRXaW5DRS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxMCArMzgsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgdmlydHVh
bCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NSZWN0Jik7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc1JlY3Qgd2luZG93UmVjdCgpOwogCi0gICAgdmlydHVh
bCBXZWJDb3JlOjpGbG9hdFJlY3QgcGFnZVJlY3QoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Okdy
YXBoaWNzUmVjdCBwYWdlUmVjdCgpOwogCiAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3Rvcigp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzQpCisrKyBTb3VyY2UvV2ViS2l0
L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTA3LTE0
ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUg
RmxvYXRSZWN0L1BvaW50L1NpemUgYW5kIG1vdmUgdGhlbSB0byBhbiBhYnN0cmFjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2luZyB0aGUg
RmxvYXQqIGdyYXBoaWNzIGNsYXNzZXMgdG8gdXNlIGEgR3JhcGhpY3NVbml0IGFic3RyYWN0aW9u
IHdoaWNoIGN1cnJlbnRseSBjaGFuZ2VzIHRoZWlyCisgICAgICAgIGJhc2UgdHlwZSBmcm9tIEZs
b2F0IHRvIENHRmxvYXQgb24gQ0cgcGxhdGZvcm1zLiBUaGlzIG1ha2VzIDY0Yml0IG1hY3MgdXNl
IDY0Yml0IGZsb2F0cyBmb3IgdGhlc2Ugb2JqZWN0cy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAg
ICAod3hXZWJGcmFtZVByaW50b3V0OjpJbml0aWFsaXplV2l0aFBhZ2VTaXplKToKKyAgICAgICAg
KiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudFd4OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudFd4Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4Ojpw
YWdlUmVjdCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oOgorCiAy
MDExLTA3LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQXBwbGljYXRpb25DYWNoZSB1cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBmYWlsIHdo
ZW4gcmVhY2hpbmcgcGVyLW9yaWdpbiBxdW90YQpJbmRleDogU291cmNlL1dlYktpdC93eC9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93eC9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC93eC9XZWJGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJF
bGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50V3guaCIKQEAg
LTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpbnRDb250ZXh0LmJlZ2luKG1f
cGFnZVdpZHRoKTsKICAgICAgICAgCiAgICAgICAgIGZsb2F0IHBhZ2VIZWlnaHQgPSBwYWdlUmVj
dC5oZWlnaHQ7Ci0gICAgICAgIG1fcHJpbnRDb250ZXh0LmNvbXB1dGVQYWdlUmVjdHMoV2ViQ29y
ZTo6RmxvYXRSZWN0KHBhZ2VSZWN0KSwgLyogaGVhZGVySGVpZ2h0ICovIDAsIC8qIGZvb3Rlckhl
aWdodCAqLyAwLCAvKiB1c2VyU2NhbGVGYWN0b3IgKi8gMS4wLCBwYWdlSGVpZ2h0KTsKKyAgICAg
ICAgbV9wcmludENvbnRleHQuY29tcHV0ZVBhZ2VSZWN0cyhXZWJDb3JlOjpHcmFwaGljc1JlY3Qo
cGFnZVJlY3QpLCAvKiBoZWFkZXJIZWlnaHQgKi8gMCwgLyogZm9vdGVySGVpZ2h0ICovIDAsIC8q
IHVzZXJTY2FsZUZhY3RvciAqLyAxLjAsIHBhZ2VIZWlnaHQpOwogICAgIH0KICAgICAKICAgICB2
b2lkIE9uQmVnaW5QcmludGluZygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3d4L1dlYktpdFN1cHBv
cnQvQ2hyb21lQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNl
L1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKICNp
bmNsdWRlICJGaWxlSWNvbkxvYWRlci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzUmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkljb24uaCIKQEAgLTkwLDIxICs5MCwyMSBAQCB2b2lk
IENocm9tZUNsaWVudFd4OjpjaHJvbWVEZXN0cm95ZWQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50V3g6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0
JikKK3ZvaWQgQ2hyb21lQ2xpZW50V3g6OnNldFdpbmRvd1JlY3QoY29uc3QgR3JhcGhpY3NSZWN0
JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1GbG9hdFJlY3QgQ2hyb21lQ2xpZW50
V3g6OndpbmRvd1JlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudFd4Ojp3aW5kb3dSZWN0
KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NSZWN0KCk7CiB9CiAKLUZsb2F0UmVjdCBDaHJvbWVDbGllbnRXeDo6
cGFnZVJlY3QoKQorR3JhcGhpY3NSZWN0IENocm9tZUNsaWVudFd4OjpwYWdlUmVjdCgpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJu
IEdyYXBoaWNzUmVjdCgpOwogfQogCiBmbG9hdCBDaHJvbWVDbGllbnRXeDo6c2NhbGVGYWN0b3Io
KQpJbmRleDogU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVu
dFd4LmgJKHJldmlzaW9uIDkxMDM0KQorKysgU291cmNlL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGNocm9tZURlc3Ryb3llZCgpOwogCiAgICAgdmlydHVhbCB2
b2lkKiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRX
aW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHdpbmRv
d1JlY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBHcmFwaGljc1Jl
Y3QmKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzUmVjdCB3aW5kb3dSZWN0KCk7CiAKLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgIHZpcnR1YWwgR3JhcGhpY3NSZWN0IHBhZ2VS
ZWN0KCk7CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNjYWxlRmFjdG9yKCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>